Okay then two queries: 1. Does anyone know a good resource for restoring the Wood Zone in Sonic 2 (eg. assets, tutorial, level editor files)? 2. I'm trying to make an object that, when the player touches it, they get propelled upward. Right now the only way I've managed to get this running is by giving it enemy collision and turning off its ability to harm the player, though even this isn't exactly optimised since there's still other elements that interact with the enemy coding and it also means the propel level is based on the player holding jump button if they land on it the wrong way. Is there a better way of going about this? (For reference here is the object routine, it is my own crude work so I don't really mind if anyone steals it, their funeral. :P) Code (Text): ObjE4: moveq #0,d0 move.b routine(a0),d0 move.w off_ObjE4(pc,d0.w),d1 jmp off_ObjE4(pc,d1.w) ; =========================================================================== off_ObjE4: dc.w ObjE4_Init-off_ObjE4 dc.w ObjE4_Main-off_ObjE4; 2 ; =========================================================================== ObjE4_Init: addq.b #2,routine(a0) move.l #ObjE4_Mappings,mappings(a0) move.b #4,render_flags(a0) move.w #0,art_tile(a0) jsr (Adjust2PArtPointer).l move.b #$2,priority(a0) move.b #$20,width_pixels(a0) move.b #$4,y_radius(a0) ; $A move.b #9,collision_flags(a0) ObjE4_Main: moveq #0,d0 ; clear d0 move.w $8(a0),d0 ; load block's X-pos to d0 sub.w (MainCharacter+$8).w,d0 ; substract Amy's X-pos from it bpl.s ObjE4_XPositive ; if answer is positive, branch neg.w d0 ; otherwise negate d0 ObjE4_XPositive: cmpi.w #$20,d0 ; is Amy within 25 pixels of the object (X-axis)? bge.s ObjE4_RTS ; if not, branch moveq #0,d0 ; clear d0 move.w $C(a0),d0 ; load block's Y-pos to d0 sub.w (MainCharacter+$C).w,d0 ; substract Amy's Y-pos from it bpl.s ObjE4_YPositive ; if answer is positive, branch neg.w d0 ; otherwise negate d0 ObjE4_YPositive: cmpi.w #$20,d0 ; is Amy within 25 pixels of the object (Y-axis)? bne.s ObjE4_RTS ; if not, branch move.b #1,anim(a0) ; =========================================================================== ObjE4_RTS: lea (Ani_Fountain).l,a1 jsr AnimateSprite jmp DisplaySprite The code to move the player upward is then listed in the Touch_Enemy routine.
I dunno, I guess I just liked the look of the level format. Apparently levels can be larger than that of Sonic 3, so... Yeah.
I know there was a project set for that stuff for SonLVL somewhere, I don't know about SonED2 though.
Yes, though it'll require some heavy optimisation tricks and shortcuts to keep the CPU time required to a minimum, but I believe for small Sonic sized art the CPU is more than capable. I would however offer the suggestion of pre-rendering though, unless you want to show off that you did it by software, it serves no purpose practically other than saving a bit of ROM space, you have plenty of ROM space for pre-rendered Sonic sprites anyway, so nothing much is gained in my opinion unless you have 3000 playable characters you wanna rotate the sets of.
Yes. Yes it is. All the rings go to 2P if you port it... Unfortunately I don't have a fix either. It also conflicts with the by-mode ring system used in the "Separating Act 2 and 2P Mode Data" guide.
Well honestly I think it’d be best to work on fixing that. It’d be nice to have upwards of eight hundred rings without worry of breaking 2P mode.
I know pre rendered stuff exists, but I want my game to feel like Mania. So, if it really is possible, could you perhaps point me in the right direction?
I can set animations fine, but cant find any info on changing the speed at which they play at, this is specifically for the sonic 1 github but I'm assuming it would be similar in the other games too. The two specific scenarios i wish to solve are.. Sonic CD Style Spindash, i cant figure out how to speed up the animation like in sonic cd it just rotates at the slowest speed untill you release and start moving. I've also implemented the Super Peelout using the regular sonic run animation, i want to do the same here, set it to full running speed.
I was actually just thinking about that... I think I might poke into that disasm a bit to see the differences in implementation.
Hi guys, just wondering; would it be worth it to try using the S3K split disasm? There's not that much documentation on it, but I'm not really in the mood to port file select to S2 or something.
Hey everyone, i'm not sure whether this or "Sonic Mania discussion" would be right place to ask my questions but here goes. Earlier this week i started work on a Sonic Mania mod and while i've figured most of what i want to do out, i'm a little lost when it comes to doing 2 things, the first being making it so that Sonic's default move is the Super Peel-out, or having both the Peel-out and Drop Dash, i'm pretty sure it's possible but i don't know what to edit to achieve the result i want and can't seem to find any info on it. My second question is, how would I go about making a custom title card for different zones and/or custom menu? I've seen that they're both possible however just like my first question, i can't seem to find any info on them other than the fact that it's been done. If anyone could help me out, it would be much appreciated.
Hi, I'm trying to get some bounce pad type objects running in Sonic 2. Right now I've sort of got them running, if in a crude way. To give them collision, I tapped them to the enemy collision flag and put their effects in the Touch_Enemy routine like so: Code (Text): cmp.b #$E6,(a1) bne.s Touch_Fountain move.b #1,anim(a1) bset #2,status(a0) move.b #$E,y_radius(a0) move.b #7,x_radius(a0) move.b #$10,anim(a0) clr.w $12(a0) ; clear X-velocity to move sonic directly down move.w #-$800,y_vel(a0) bset #1,status(a0) bclr #3,status(a0) move.b #2,routine(a0) Touch_Flower_End: rts Touch_Fountain: ....... This kinda works though unless bounced on from directly on top, they don't propel you effectively enough unless you hold the jump button. Any idea how to fix this? Also one more thing. I'm trying to make it so obj40 (the spring board object) only has collision from landing on top of it. I tried branching it to platformobject instead of solidobject but it only produces buggy effects. Any idea what to do?
My friend had trouble converting his midi with mid2smps He said: - "my midi I converted has it's instruments play way too soon or too late" Also he said to ignore broken drums since everything is ok when he tested smps in smps player The midi itself: https://cdn.discordapp.com/attachme...5641554706452/hardcore_zone_sonic_romhack.mid
This is the Flamedriver's DPCM player changed to PCM, can it get any more optimized? Code (Text): ; =============== S U B R O U T I N E ======================================= ; ; Plays digital audio on the DAC, if any is queued. The z80 will be stuck in ; this function unless an interrupt occurs (that is, V-Int); after the V-Int ; is processed, the z80 will return back here. ;loc_108A zPlayDigitalAudio: di ; Disable interrupts ld a, 2Bh ; DAC enable/disable register ld c, 0 ; Value to disable DAC call zWriteFMI ; Send YM2612 command ld hl, zSongDAC ; Get pointer to DAC track ld a, (zDACEnable) ; Get DAC enable or a ; Is DAC supposed to be enabled? jr nz, .enabletrack ; Branch if yes ld hl, zSongFM6 ; Get pointer to FM6 track .enabletrack: res 2, (hl) ; Mark track as no longer being overridden .dac_idle_loop: ei ; Enable interrupts ld a, (PlaySegaPCMFlag) ; a = play SEGA PCM flag or a ; Is SEGA sound being played? jp nz, zPlaySEGAPCM ; Branch if yes ld a, (zDACIndex) ; a = DAC index/flag or a ; Is DAC channel being used? jr z, .dac_idle_loop ; Loop if not ld a, 2Bh ; DAC enable/disable register ld c, 80h ; Value to enable DAC di call zWriteFMI ; Send YM2612 command ei ld hl, zDACIndex ; hl = pointer to DAC index/flag ld a, (hl) ; a = DAC index dec a ; a -= 1 set 7, (hl) ; Set bit 7 to indicate that DAC sample is being played ld hl, zmake68kPtr(DACPointers) ; hl = pointer to ROM window rst PointerTableOffset ; hl = pointer to DAC data ld a, (hl) ; a = DAC rate ld (.sample1_rate+1), a ; Store into following instruction (self-modifying code) inc hl ; hl = pointer to low byte of DAC sample's length ld e, (hl) ; e = low byte of DAC sample's length inc hl ; hl = pointer to high byte of DAC sample's length ld d, (hl) ; d = high byte of DAC sample's length inc hl ; hl = pointer to low byte of DAC sample's in-bank location ld a, (hl) ; a = low byte of DAC sample's in-bank location inc hl ; hl = pointer to high byte of DAC sample's in-bank location ld h, (hl) ; h = high byte of DAC sample's in-bank location ld l, a ; l = low byte of DAC sample's in-bank location ; hl is now pointer to DAC data, while de is the DAC sample's length .dac_playback_loop: .sample1_rate: ld b, 0Ah ; self-modified code; b is set to DAC rate djnz $ ; Loop in this instruction, decrementing b each iteration, until b = 0 ei ; Enable interrupts ld a, (hl) ; a = next byte of DAC sample ld (zYM2612_D0), a ; Send byte to DAC ld a, (zDACIndex) ; a = DAC index/flag or a ; Is playing flag set? jp p, .dac_idle_loop ; Branch if not inc hl ; Advance to next sample byte dec de ; Mark one byte as being done ld a, d ; a = d or e ; Is length zero? jr nz, .dac_playback_loop ; Loop if not xor a ; a = 0 ld (zDACIndex), a ; Mark DAC as being idle jr zPlayDigitalAudio ; Loop
I’m just wondering - will the SCHG:How-to for porting Sonic 3 & Knuckles’s Object Manager to Sonic 2 perhaps be updated to better reflect the current state of the disassemblies and add 2P mode compatibility? As it stands, I’m a little scared to use it for my project due to how old it is, and also due to its lack of 2P Mode compatibility.