Nice. Reminds me a bit of when Esrael got S2&K down to the 1MB of Sonic 2, though obviously that wasn't anywhere near as difficult in terms of amounts of data =P
All right, some people were interested in the blue ring monitor code. Please excuse my use of the old disassembly; that's what I had =P First, I need two variables: one as a flag to store whether or not we picked up a blue ring, and one to store the number of rings lost when you get hit with a blue ring in hand. Code (ASM): ; Variables for maintaining the new features HasBlueRing equ $FFFFFFFC ; byte SavedRingCount equ $FFFFFFFD ; word I use a macro to reset these variables whenever a level is loaded: Code (ASM): resetBlueRing macro move.b #0,(HasBlueRing) ; take blue ring off move.w #0,(SavedRingCount) endm ; ... PlayLevel: ; XREF: ROM:00003246j ... ; ... move.l d0,($FFFFFE26).w ; clear score resetBlueRing ; ... Demo_Level: ; ... move.l d0,($FFFFFE26).w ; clear score resetBlueRing ; ... Level_LoadObj: ; ... move.b d0,($FFFFFE1B).w ; clear lives counter resetBlueRing loc_39E8: ; ... move.b d0,($FFFFFE2E).w ; clear speed shoes resetBlueRing ; ... Cont_GotoLevel: ; XREF: Cont_MainLoop ; ... move.l d0,($FFFFFE26).w ; clear score resetBlueRing ; ... Obj80_Main: ; XREF: Obj80_Index ; ... move.w #0,($FFFFFE20).w ; clear rings resetBlueRing ; ... EndingDemoLoad: ; XREF: Credits ; ... move.l d0,($FFFFFE26).w ; clear score resetBlueRing ; ... Boundary_Bottom: ; ... clr.b ($FFFFFE30).w ; clear lamppost counter resetBlueRing ; ... KillSonic: tst.w ($FFFFFE08).w ; is debug mode active? bne.s Kill_NoDeath ; if yes, branch resetBlueRing If some of these are unnecessary, please let me know. Okay now here's where we implement the actual code. First we need to modify the 10-ring monitor to give us a blue ring: Code (ASM): Obj2E_ChkRings: cmpi.b #6,d0 ; does monitor contain 10 rings? bne.s Obj2E_ChkS move.b #1,(HasBlueRing) rts Next, when Sonic gets hurt, we coerce the game into thinking he only lost one ring: Code (ASM): HurtSonic: tst.b ($FFFFFE2C).w ; does Sonic have a shield? bne.s Hurt_Shield ; if yes, branch tst.w ($FFFFFE20).w ; does Sonic have any rings? beq.w Hurt_NoRings ; if not, branch tst.b (HasBlueRing) ; does Sonic have a blue ring? bne.s Hurt_Blue ; if yes, branch jmp Hurt_LoseRings Hurt_Blue: move.b #0,(HasBlueRing) ; take it off move.w ($FFFFFE20),(SavedRingCount) ; save # of rings move.w #1,($FFFFFE20) ; only one ring at first Hurt_LoseRings: jsr SingleObjLoad bne.s Hurt_Shield move.b #$37,0(a1) ; load bouncing multi rings object move.w 8(a0),8(a1) move.w $C(a0),$C(a1) Hurt_Shield: Now we are going to change the bouncing multi-rings object. If the single ring that fell was collected, give the player back all his rings and take out the blue ring: Code (ASM): Obj37_Collect: ; XREF: Obj37_Index addq.b #2,$24(a0) move.b #0,$20(a0) move.b #1,$18(a0) tst.w (SavedRingCount) ; do we have saved rings? bne.w RecollectRings ; if so, recollect the rings bsr.w CollectRing bra.w Obj37_Sparkle RecollectRings: move.w (SavedRingCount),($FFFFFE20) ori.b #1,($FFFFFE1D).w ; update the rings counter move.w #$B5,d0 ; play ring sound jsr Obj25_PlaySnd move.w #0,(SavedRingCount) Obj37_Sparkle: ; XREF: Obj37_Index But if the player failed to collect the ring before the game thinks that ring should be destroyed, we have to respawn the old rings and take out the blue ring: Code (ASM): Obj37_Delete: ; XREF: Obj37_Index move.w ($FFFFF72E).w,d0 addi.w #$E0,d0 cmp.w $C(a0),d0 ; has object moved below level boundary? bcs.s Obj37_DoDelete ; if yes, don't bother regenerating those rings tst.w (SavedRingCount) ; did we save rings? beq.w Obj37_DoDelete ; nope (or these are regenerated) move.w (SavedRingCount),($FFFFFE20) ; generate move.w #0,(SavedRingCount) ; kill those rings! jsr HurtSonic Obj37_DoDelete: bra.w DeleteObject The work to respawn the rings is left to HurtSonic. Sonic's hurt animation doesn't load because he didn't touch an enemy or spikes. So that's it.
Sonineckles, literally just Knuckles slapped in Sonineko. With full permission by nineko, I might add - like Marc, I'm against the idea of hacking other people's hacks without getting permission.
A small update to WTF Lame which modifies what the game does on reset. In the original, you could reset to avoid reading the tl;dr. In this modification, if you reset during a tl;dr, you get another. Source code included. Idea: when the Reset button is hit, nothing gets reinitialized, so both Port A and Port C are okay. (I added another check before the first RAM clear, just in case.) Note: by reset I mean hitting the reset button ("soft reset"), not the hard reset of some emulators.
Me too, on tiny.bin. The other rom - ahahahahaah! That's the most challenge EHZ has given me in YEARS =P
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF That said, it's sad that I could beat the first boss without getting hurt despite the camera being like that
Here's a truly Random Hack: Not-so-Super Sonic the Hedgehog 2! Features: Start as Super Sonic/Tails without invincibility or ring drain. Level select and debug always enabled. (Hold A for level select) Zones: Straight Line Zone Hidden Palace Zone (S3K) (Access through level select) Updates are extremely unlikely. Edit: Video of Straight Line Zone Act 1.
Link This is my test hack of Sonic 1. I use it for random stuff, mainly for testing. Right now, use level select to go to Labyrinth Zone act 3, as I worked on a short layout today that might be interesting for you guys. I am already aware of the problems and glitches, mainly due to the labyrinth zone act 3 specific events, which I have to figure out how to disable. Tell me if you like it or not.
"Sonic and Friends" My submission for the hacking contest and like Penis Special Stage which I submitted in 2008, was created on the day before submissions ended. I will warn you, this is NSFW and it's a joke hack. Regardless, enjoy! Thanks to Marc for his splash screen system that he made months ago.
LOL tips which you shouldn't read yet if you want to try it on your own first: + - You can stand on the middle part of the totem and not get hit, unless you move of course. Since this is the danger zone of the original GHZ boss, first time players will naturally hide below it where they have no time to react to Robotnik's sudden change of habit. Hiding in the top part of the totem can get a free hit on robotnik as he comes back into the arena, however you need to get out fast as the wrecking ball will soon close in, dangerous if you accidently get knocked into there. The floor idea I surprisingly haven't seen from any released hacks to my knowledge, and I used a similar concept as a arena in my test hack linked above. I like the one I made here better, of course. --- Anyway, here is the finished layout for the labyrinth zone edit above. It is a tiny bit old since I have already switched a few chunks around, but the path structure is still intact. Anyway, I also figured out how to get rid of the Labyrinth Zone specific codes, including the water. However side effects include accidently deleting the boss load up code. Also, I am still having a problem with slopes, as 45 degrees plus horizontal = stuck and glitch through. Putting object blocks underneath just switches the problem in reverse. I would like to know how to fix THAT. Also having problems with switches. I figured out the whole numbering system and how setting the "door" with the same number activates the switch, but it has a wierd range, ie it can't be a certain distance away or else it won't work. Something which is bad since I made the whole layout already thinking the switches could be far away and still work. But what IS that range?
My best guess would be that the door has to be loaded in RAM when you hit the switch. So 1 1/2, maybe 2 screens?
Sonic 1 with rotating monitors (I.e. the item a monitor gives you changes every so often, like in those prototype videos). Also, I actually implemented the Eggman monitor, for a bit of challenge :P . Also, if you have time, play through the whole game, and see if you miss a few power-ups you usually rely on (invincibility, super sneakers...) .
Well done. It's surprisingly different to normal S1 even though very little was changed. I was actually just working on that so now I'll have to add a new twist to it.
Labyrinth Zone act 3 layout is finished and completable. Get the updated rom here. Use level select to access it of course. I urge you all to run through it, time attack it, etc. As an added exploration bonus, can you find and destroy all the 1up monitors? + - There is a total of 4 1ups in the act. It is possible to get them all and still complete the act in under 10 minutes, so getting them all in one go is...well, "S ranking" the mission. I will take what I learned from making this layout and expand and refine it for future hacks.