It is currently Mon Nov 20, 2017 2:19 pm

All times are UTC - 7 hours





Post new topic Reply to topic  [ 168 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6, 7, 8 ... 12  Next
Author Message
PostPosted: Fri Nov 28, 2014 12:05 pm 
Offline
User avatar

Joined: Wed Apr 04, 2012 4:15 pm
Posts: 353
Location: United States of America (USA)
More info about the contest prize: http://acmlm.kafuka.org/board/thread.php?pid=159079#159079


Top
 Profile  
 
PostPosted: Sat Dec 06, 2014 10:28 pm 
Offline
User avatar

Joined: Wed Apr 04, 2012 4:15 pm
Posts: 353
Location: United States of America (USA)
Most of you have probably read my previous posts concerning the SMB promotion over at Board 2. Well, I fixed some more things up in it. One I will share, with code exclusively I'm sharing here (since I'm probably the only one at Board 2 that is fluent in 6502 ASM). It has to do with an obscure glitch that I recently discovered with platform code (more info here: http://themushroomkingdom.net/bugs/10 and here http://themushroomkingdom.net/bugs/56).

This fucker was a real son of a bitch to fix, let me tell you. It took me 6-7 hours to trace code. Initially, I didn't have the slightest clue on what caused this. The fully labeled SMB2J disassembly really didn't help much; the balance lift code is HUMONGOUS. I mean, about 200 lines or so of code just for this, branching off to many subs. I tested this glitch out on Side A SMB1, on level 3-3. Before I hit the debugger, I hit the built-in FCEUX hex editor and looked at $18 and $19, where the enemy slots are stored for these enemies. They have an ID of $24 after being buffered in VRAM. Whatever platform I stood on (the one falling), would get cleared after going under $03 on the screen Y position and go to $00, while the other one would stay at $24. So, the first thing I noted was that the opposite platform was the one not being cleared. Which is why there is still collision where it stood. The next thing I did before setting Writes in the debugger was looked at the "jmp EraseEnemyObject" in the main routine "BalancePlatform:". I found that this was responsible for clearing the OAM object enemy (yeah, platforms are all considered enemies in SMB1/2J). It cleared what was in A plus X offset. I then hit the debugger, setting Write breakpoints to $18; next I stepped into the code. This is what I found: $95d1 was responsible for clearing the object. It was only clearing what was stored in X, while the opposite platform is always Y. So, whenever X was below $03's Y position on the screen, it would clear the object, but Y (the opposite platform) wasn't. Well, not the collision, anyway. SO I came up with a simple fix:

Code:
BalancePlatform:
        lda Enemy_Y_HighPos,x       ;check high byte of vertical position
        cmp #$03
        bne DoBPl
       ;;;;;; jmp EraseEnemyObject        ;if far below screen, kill the object
      JMP freespace   ;my custom code

freespace:
JSR EraseEnemyObject
TYA
TAX
JMP EraseEnemyObject


It worked...for some platforms but not others. This was obviously the issue but I didn't understand why it was working half of the time and not other times. Then I tried replacing the "lda Enemy_Y_HighPos,x" with a "lda Enemy_Y_HighPos,y" and bingo! It worked. (What this does is make sure the opposite platform or "Y" is cleared FIRST, thereby clearing X, since Y fell after X (the one the player is on.)) Ever had one of those situations where when you fixed a glitch you caused another? Well, that's here. I fixed the invisible platform but caused something strange to happen. Well, not directly caused by my fix. Whenever the platforms fell, it would clear the objects completely, but then some strange collision was created by the rope of the pulleys when they fell. Also, now if the player was standing too close to the rope, they would be pushes away! Sort of like the Wind effect, except more brutal. So much so that the player could barely cross the lifts. (I checked and the lifts were indeed cleared from $18 and $19 or whatever enemy slot they were loaded from.)

The rope code seems stable and I'm sure this code is the issue, not sure what was going on. Lifts would fall randomly on 4-3, other enemies disappeared from the screen randomly (no fixed pattern and sometimes they didn't disappear at all). I thought to myself and came to the conclusion that the platform code is so fucked up that it's a lost cause. So what did I do? After all, I fixed every other glitch I ever came across, I probably broke a record for optimizing SMB code and fixing glitches etc. I recoded the main portion of the troubled code for the platforms! I now made it to the platforms not falling off at all. I made it VERY realistic. The player is no longer awarded 1000 points when getting the platform off because that's now impossible (plus, I wrote over that code). I made it so that when the player stands on the platform and it gets to a certain point, it ceases to move, that is, until you jump onto the other platform. Sort of like a seesaw. But, I made it realistic, so if the platform ceases on one end and you jump up directly above it a certain amount, it drops slightly. Like in real life if a platform stops and a heavy person jumps on the ceased platform. Though it never falls off, with a hundred or so jumps you can get it visibly a little lower. This was HARD. Here is my code, as promised:

Code:
balance_no_possessed:
lda #$2F  ;;;;are we at a certain point where the screws are at the top of the balance lift on the opposite ;;platform?
cmp Enemy_Y_Position,y ;;;;;has the opposite platform reached a certain point close to the top of the lift?
;;If so, time keep em' stopped and then RTS.
bcc $04  ;;;;;; yea boi!
jsr StopPlatforms   ;;;;;;cease and desist!
rts   ;;;;;;return from whence ye came
lda #$20   ;;;;;;;the movement force
jsr $A1D2 ;;;;;;store em' over speed and moveforce in RAM, I did a JSR here instead of having to write out ;;the STA $xx,y and STA $xxxx,y addresses. It's redundant and a waste of space.
pla  ;;;;;;get the contents of X back
tax  ;;;;;I'm back!
rts  ;;;;;um...yep. Pretty self-explanatory


This code is actually called twice, so I made two JSRs to it. If you borrow it, CREDIT me or else I will know it's my code.

I may share my Luigi code (pics on Board 2 from the last post) where I gave Luigi his proper Fiery form colors by doing a palette swap routine. (Getting his regular non-fiery palette was easy, just a simple hex change. Though, the fiery code was shared by Mario and Luigi and I had to create a routine to separate them.) --ShaneM, Master of ASM


Top
 Profile  
 
PostPosted: Mon Dec 08, 2014 11:59 pm 
Offline
User avatar

Joined: Wed Apr 04, 2012 4:15 pm
Posts: 353
Location: United States of America (USA)
Fixed the double-jump glitch that I recently found: http://www.mariowiki.com/List_of_Super_Mario_Bros._glitches#Jumping_in_Midair

Even more reason to participate in the giveaway. Here's my code; I don't always play nice and share my code but I'll share this one, cuz it took one line of code to fix and it took me less than 5 minutes to figure out (I must be getting better at this...if that's even possible at this point):

Code:
PlayerChangeSize:
             lda TimerControl    ;check master timer control
             cmp #$f8            ;for specific moment in time
             bne EndChgSize      ;branch if before or after that point
             JSR DisJoyp        ;ShaneM's fix
             jmp InitChangeSize  ;otherwise run code to get growing/shrinking going


Is there any glitch too hard for me? The labels borrowed from doppleganger's SMB2J disassembly. I'll try to see if there's any more glitches on the worldwide web that I missed before Jan. 05th, the due date for this special build. Too bad, if time passes and I don't get deadline videos by then, nobody will get this special build.

I've already fixed all glitches found on Mariowiki, TheMushroomKingdom and many YT videos. (Excluding ones like "Disappearing Power-Ups" and "Disappearing Trampolines" which aren't glitches but are programmed that way to erase them because there can only be so much OAM buffered at once [but the trampoline one was programmed different in SMB2J to just not load at all instead of trapping the player but I optimized this some], but those reports were probably written by someone without ASM knowledge or knowledge of SMB1 mechanics.) --ShaneM, Master of ASM


Top
 Profile  
 
PostPosted: Wed Dec 10, 2014 12:30 am 
Offline
User avatar

Joined: Wed Apr 04, 2012 4:15 pm
Posts: 353
Location: United States of America (USA)
Alright; I'm going to share how I fixed the fireball glitch (http://themushroomkingdom.net/bugs/12). Took me about 5 minutes to fix. There are two ways to fix this.

Code:
ProcFireball_Bubble:   ;original routine
lda PlayerStatus           ;check player's status
cmp #$02
bcc ProcAirBubbles         ;if not fiery, branch

;...some ways down you find
lda CrouchingFlag          ;if player crouching, branch
bne ProcFireballs



Method #1 (my choice) = Simply NOP the LDA CrouchingFlag and BNE following it. That way, the player can now crouch and still shoot fireballs, thereby adding a feature as well as "fixing" the glitch.

Method #2 (hardcore/precise) = This merely fixes the glitch instead of letting the player crouch and shoot fireballs. I didn't choose this road because I like the idea of crouching and shooting fireballs.

Code:
ProcFireball_Bubble:
;new code found where the old "lda CrouchingFlag" was
lda Areatype    ;if water type level ($00), then branch. ShaneM's code
beq ANDing     ;ShaneM's code
lda CrouchingFlag    ;original code
bne ProcFireballs     ;original code

Fix: ;... some ways down, where the original code "lda #Sfx_Fireball" is located
lda #Sfx_Fireball ;etc...the rest of the routine and so on. I just created a label here

ANDing: ;found wayyy at the end of this routine, entirely. ShaneM's code
lda SavedJoypad1Bits
and %00000100
beq fix
rts


--ShaneM, Master of ASM


Top
 Profile  
 
PostPosted: Wed Dec 10, 2014 10:50 pm 
Offline
User avatar

Joined: Wed Apr 04, 2012 4:15 pm
Posts: 353
Location: United States of America (USA)
So I've fixed every known glitch found in formal sites. But, I found one today on YT that was unmarked on any formal site: https://www.youtube.com/watch?v=CGk3emjoh8I&list=PL576CDD8E4A2E5A07&index=7. Look at 15 seconds into the video. Notice that he went through the pipe there? That's a glitch having to do with the BG collision of invisible blocks. That happens to any and all invisible blocks, whether they be 1UPs, Invisible Coin, Powerup or Poison Mushroom. This has now been fixed. I tried to get it to emulate the SMAS SNES fix. But this is 6502 and I had to recode it myself. Here is my fix, it will be available only on the version on Board 2 of whomever submits to me entries in the contest giveaway. CREDIT ME IF USED!!!

Code:
RetYC:
and #%00001111              ;and mask out high nybble/ORIGINAL CODE
sta $04                     ;store masked out result here/ORIGINAL CODE
lda Player_X_Scroll         ;;;;;Is the player horizontally moving? SHANEM's CODE
beq new_label                   ;;;;;if not, branch SHANEM's CODE
lda $03                   ;;;;;SHANEM's CODE
cmp #$5E                ;;;;;any object less than the invisible coin, branch. SHANEM's CODE
bcc new_label                    ;;;;;SHANEM's CODE
cmp #$62                ;;;;;any object greater than invisible powerup, branch SHANEM's CODE
bcs new_label            ;;;;;SHANEM's CODE
lda #$00                  ;;;;;clear block buffer collision if player moving horizontally otherwise attribute collsion, ;;;;;SHANEM's CODE
sta $03                     ;;;;;SHANEM's CODE
new_label:     lda $03     ;get saved content of block buffer/ORIGINAL CODE
rts                            ;ORIGINAL CODE


;notes
;$5E = invisible coin
;$5F = invisible 1-UP
;$60 = invisible Poison Mushroom
;$61 = invisible powerup


tepples or any other person who somewhat knows SMB1/2J, are there any other glitches on the the worldwide web that I'm missing? --ShaneM, Master of ASM


Last edited by ShaneM on Fri Dec 26, 2014 10:38 pm, edited 1 time in total.

Top
 Profile  
 
PostPosted: Sun Dec 14, 2014 12:03 am 
Offline
User avatar

Joined: Wed Apr 04, 2012 4:15 pm
Posts: 353
Location: United States of America (USA)
I've decided as a present before X-mas to share my glitch fixes, in which I fix every single glitch in the promo giveaway on Board 2. I know I don't get much acknowledgment for this work, cuz SMB1/SMB2J aren't very popular. But to me, they trumph SMB3 or any other SMB game. So these fixes are a HUGE deal to me. I'll space them out and share them some at a time. Remember, Jan. 05th 2014 are the video contest deadlines.

Here, I fix this glitch, dealing with player-to-enemy collision: http://www.mariowiki.com/File:SMB_W1-1_Glitch2.ogg (Look at 1:38 into the video; and yeah, I fix the other glitches it presents, too.)

Code:
PlayerEnemyCollision:
;...Some ways down in the routine we find
lda Enemy_State,x
;;;;;and #%00100000              ;if enemy state has d5 set, branch to leave
and #%00100001   ;SHANEM FIX; what we want to do is also branch if d0 is set
bne NoPECol
;...Some more ways down
NoPECol: rts

;notes
;the LSBs we are checking if set are d5
;which is if the enemy is in a defeated state against $1E plus X offset
;or d0, if the enemy is in a falling state
;if either are true and therefore set, collision between enemy and player are void


Thanks for those bothering to even read this. I'll try to post some of my code each day, but I've fixed probably over 60 glitched in total. So I may not be able to post them all. Oh yeah, and as a bonus, here is my code in which I separate fiery Mario and Luigi and give them their own, proper palettes. Credit me if used, please. Here are pics at the bottom, too. (Luigi's colors based on their current official palettes. Only fiery forms depicted, though I corrected Luigi's standard palettes, too; those were simple data changes, though.)

Code:
PlayerColors:     ;original shit, here
      .db $22, $16, $27, $18 ;player's normal colors, may be overwritten
      .db $22, $37, $27, $16 ;player's colors after grabbing fire flower

ClrGetLoop:   
lda selectedplayer ;SHANEM's CODE; is Mario or Luigi playing?
bne Luigi ; SHANEM's CODE; if Mario, branch
lda $1a   ;SHANEM's CODE; otherwise, load Luigi's shade of green
sta PlayerColors+8 ;SHANEM's CODE; write over the $16 stored at PlayerColors+8 to the offset
bne VRAM ;SHANEM's CODE unconditional branch
          
Luigi:
lda $16 ;ShaneM's CODE; fetch the shade of red used by Mario
sta PlayerColors+8    ;SHANEM's CODE; store it at PlayersColors+8 to the offset

VRAM:
lda PlayerColors,y            ;original code
sta VRAM_Buffer1+3,x     ;this too is original code...continue the routine as normal


;notes
;the label "VRAM" is actually the start of the original routine, "ClrGetLoop"
;I just added it for the unconditional branch after loading Luigi's colors
;it may seem redundant that I created code to 'reload' Mario if by default
;Mario's palette is used
;the issue is, if you play as Luigi and choose Quit after a Game Over, then
;choose Mario, Luigi's colors would still be used until a hard reset
;this way palette gets properly swapped no matter which character is playing


Fiery Mario
Image

Fiery Luigi
Image

Some pics of Luigi's regular proper colors, too. These I matched to the SMB Deluxe colors, though that's Z80 and VRAM renders big-endian addressing for each palette instead of single bytes, which it uses 4 palettes just like the FDS does.

Image

Image

Image

SO participate for your chance to win this cool prize. Also, you can see the VC rip of the 25th anniversary blocks I mentioned using, something currently undumped, straight from the source! Also, you can see the star from SMB Special and the ANNSMB mics used, too. Hurry, time's almost up! ;) --ShaneM, the Master of ASM.

EDIT: One more pic showing off the promotional sprites; SMB2J still on Side B with all these fixes, present (minus the promotional sprites).

Image


Top
 Profile  
 
PostPosted: Tue Dec 16, 2014 11:25 am 
Offline
User avatar

Joined: Wed Apr 04, 2012 4:15 pm
Posts: 353
Location: United States of America (USA)
So, how could I make this special version of SMB1 and SMB2J extra special? By adding a level from SMB Special!!! Originally released in Japan for the PC88 as a special version of SMB, I've remade 6-2 of this game's level and have replaced the old A-1 secret stage on Side B with it (the secret Warp to this level is still found on A-1 as before)! SMB2J's A-1 is left intact, there is just a secret Warp to this, now. Originally it was a remake of SMB1's 1-1. But now, for the first time, an SMB Special level has been remade for the FDS! That lucky contest winner will sure get to enjoy the fruits of their labor with this prize. Faithful to it's original PC88 version; with SMB2J features, too. Here is a map of the level: http://www.mariouniverse.com/images/maps/x1/smb/6-2.png

That's a total of over 22 Worlds; 89 levels! Hours upon hours of fun and excitement while reliving classics to their fullest. Sublime to any other official Nintendo version as I've fixed all the glitches.


Here are some in-game pics of this level:

Image

Image

Image

Image

Image

Production on this promotional game has been completed. I await entries until Jan.05th. --ShaneM


Top
 Profile  
 
PostPosted: Wed Dec 17, 2014 12:25 pm 
Offline
User avatar

Joined: Wed Apr 04, 2012 4:15 pm
Posts: 353
Location: United States of America (USA)
ShaneM wrote:
Code:
PlayerEnemyCollision:
;...Some ways down in the routine we find
lda Enemy_State,x
;;;;;and #%00100000              ;if enemy state has d5 set, branch to leave
and #%00100001   ;SHANEM FIX; what we want to do is also branch if d0 is set
bne NoPECol
;...Some more ways down
NoPECol: rts

;notes
;the LSBs we are checking if set are d5
;which is if the enemy is in a defeated state against $1E plus X offset
;or d0, if the enemy is in a falling state
;if either are true and therefore set, collision between enemy and player are void




I didn't take into account that d0 was masked out to take care of upside down shell to player collision. So I had to come up with a new fix. Here it is:

Code:
PlayerEnemyCollision:
;...Some ways down in the routine we find
lda Enemy_State,x  ;ORIGINAL CODE
and #%00100000              ;if enemy state has d5 set, branch to leave ORIGINAL CODE
bne NoPECol   ;ORIGINAL CODE
lda Player_Y_Position   ;SHANEM's CODE
cmp $b1      ;SHANEM's CODE is the player vertically one pixel below the ground?
bcs NoPECol ;SHANEM's CODE if so, then void collision
;...Some more ways down
NoPECol: rts    ;ORIGINAL CODE


Code of the day: Glitch fix #999 Timer glitch: http://www.mariowiki.com/List_of_glitches_in_Super_Mario_Bros.:_The_Lost_Levels#999_Timer

Fix:
Code:
EndCastleAward:
 ;Some ways down we find:
 ;;;; jsr AwardTimerCastle   ;original code
 ;Replace that jsr with this one:
 jsr AwardGameTimerPoints ;SHANEM's CODE


Stay tuned for more as I've conquered them all. --ShaneM


Top
 Profile  
 
PostPosted: Wed Dec 24, 2014 12:54 am 
Offline
User avatar

Joined: Wed Apr 04, 2012 4:15 pm
Posts: 353
Location: United States of America (USA)
I've made a couple more fixes...Seriously, I'm done this time. Remember, the contest ends in about 11 days. What I fixed:

-Added collision between fireballs and powerups...I don't know why I did this, probably because I made collision for everything else. Though the fireballs do not defeat powerups, they just mark collision.
-Fixed the Powerful_Wind glitch. I thought this was caused by an NES limitation, but it wasn't! This was a real bitch to fix. I mean this has got to be the hardest thing in the world to fix in the world of NES. I had to create a specific routine for when the windflag was set. Wind would CLC then ADC #$01 to player_x_position, causing horizontal scroll $6FF to increment and decrement between nanoseconds. I was REALLY REALLY tight on space. It took me 7 hours to do but I did it! I traced code and created a new subroutine for "ChkPBtm:", the root of the issue. Did I mention that this was HARD? :P
-Fixed an issue with Piranha Plant collision being buffered in d6 of the enemy slot. All Piranha Plants issues are now fixed and 100% stable collision with shells/fireballs/enemies, now.


Attachments:
Super Mario Bros. 1&2 SRAM Plus (Japan) - Copy_003.png
Super Mario Bros. 1&2 SRAM Plus (Japan) - Copy_003.png [ 3.78 KiB | Viewed 1658 times ]
Super Mario Bros. 1&2 SRAM Plus (Japan)_016.png
Super Mario Bros. 1&2 SRAM Plus (Japan)_016.png [ 2.58 KiB | Viewed 1658 times ]
Super Mario Bros. 1&2 SRAM Plus (Japan)_017.png
Super Mario Bros. 1&2 SRAM Plus (Japan)_017.png [ 2.64 KiB | Viewed 1658 times ]
Top
 Profile  
 
PostPosted: Fri Dec 26, 2014 1:54 pm 
Offline
User avatar

Joined: Wed Apr 04, 2012 4:15 pm
Posts: 353
Location: United States of America (USA)
In an earlier post,

ShaneM wrote:
Code:
RetYC:
and #%00001111              ;and mask out high nybble/ORIGINAL CODE
sta $04                     ;store masked out result here/ORIGINAL CODE
lda Player_X_Scroll         ;;;;;Is the player horizontally moving? SHANEM's CODE
beq new_label                   ;;;;;if not, branch SHANEM's CODE
lda $03                   ;;;;;SHANEM's CODE
cmp #$5E                ;;;;;any object less than the invisible coin, branch. SHANEM's CODE
bcc new_label                    ;;;;;SHANEM's CODE
cmp #$62                ;;;;;any object greater than invisible powerup, branch SHANEM's CODE
bcs new_label            ;;;;;SHANEM's CODE
lda #$00                  ;;;;;clear block buffer collision if player moving horizontally otherwise attribute ;;;;;collsion, SHANEM's CODE
sta $03                     ;;;;;SHANEM's CODE
new_label:     lda $03     ;get saved content of block buffer/ORIGINAL CODE
rts                            ;ORIGINAL CODE


;notes
;$5E = invisible coin
;$5F = invisible 1-UP
;$60 = invisible Poison Mushroom
;$61 = invisible powerup




Today, I've made a discovery. "Player_X_Scroll", or RAM $6FF did a check for if the player is horizontally moving, which includes horicontally moving when vertically inclined. This caused an issue when jumping too hard vertically as it registered as horizontal movement. There wasn't an address to do what I wanted it to do. The SNES version seems to use RAM $E4 for this purpose of this fix which is unused in the FDS version. I didn't have room to create an extra flag. None of the addresses doppleganger listed in his SMB2J disassembly helped for this specific need. I have discovered an address in use by the CPU which is not labeled by doppleganger. It is RAM $089F. It seems that this is purely for vertical movement and is negative (#$FF-#$FD) when the player is ascending but goes to #$04 when the player is descending and finally back to #$00 when the player is standing/running on something solid. This is a more proper register to use for this fix. So, here is the proper fix:

Code:
;replace
lda Player_X_Scroll         ;;;;;Is the player horizontally moving? SHANEM's CODE
beq new_label                   ;;;;;if not, branch SHANEM's CODE

;with this
lda $089F          ;SHANEM's CODE, a register I discovered to fix this
bmi new_label   ;if player is jumping (ascending), then branch to initiate block buffer collision for
;invisible objects. SHANEM's CODE



--ShaneM, the Master of ASM


Top
 Profile  
 
PostPosted: Fri Dec 26, 2014 5:59 pm 
Offline
User avatar

Joined: Thu Jan 19, 2006 5:08 pm
Posts: 746
Location: Shelton, Washington.
Anything using $0800-0FFF, $1000-17FF, and $1800-1FFF will equal to $0000-$07FF, As they are mirrored in the NES's internal RAM... Therefore $089F equals $009F, or simply $9F in zero page, which equals to both ''SprObject_Y_Speed'' and ''Player_Y_Speed'' in the original disassemblies.

Also, If you have the disassembled the shell animations from SNES SMB1, I would like to see it in your hacks, if not... I could add it to mine and credit you.

EDIT - I deleted my second message, I misunderstood at first about tepples' message, Giving it a second look reveals that he said the SNES equivelent to the mirroring problem.

_________________
AKA SmilyMZX/AtariHacker.


Last edited by Hamtaro126 on Fri Dec 26, 2014 6:28 pm, edited 3 times in total.

Top
 Profile  
 
PostPosted: Fri Dec 26, 2014 6:02 pm 
Offline

Joined: Sun Sep 19, 2004 11:12 pm
Posts: 19236
Location: NE Indiana, USA (NTSC)
On the Super NES ("The Lost Levels" in Super Mario All-Stars), they mirror to $7E009F and $7E089F.


Top
 Profile  
 
PostPosted: Fri Dec 26, 2014 6:28 pm 
Offline
User avatar

Joined: Wed Apr 04, 2012 4:15 pm
Posts: 353
Location: United States of America (USA)
tepples wrote:
On the Super NES ("The Lost Levels" in Super Mario All-Stars), they mirror to $7E009F and $7E089F.



Right, for RAM. When I said $E4 earlier as the address created for this fix on the SNES, I meant $7E00E4. I forgot that Geiger's debugger gives the ROM, RAM, SRAM etc. in hex mode, too. Anyway, my fix does not do the same thing as on the SNES, which bases its fix on horizontal acceleration while I make use of vertical. Because $06FF was the closest one that I originally had but that didn't quite fix this. So if anyone borrows my fix, credit me and replace the $06FF from earlier with $089F, and change the BEQ to BMI; everything else is the same to correct this glitch with invisible blocks. --ShaneM

@hamtaro
65c816 is similar to 6502. Use Geiger's SNES9x build to find what you want. I never studied 65c816 but since I'm fluent at 6502 I was able to trace the code and see how the SNES fixed it. Basically, use dopplerganger's disassembly when tracing code to the SNES because it's the same, for the most part.


Last edited by ShaneM on Fri Dec 26, 2014 7:48 pm, edited 1 time in total.

Top
 Profile  
 
PostPosted: Fri Dec 26, 2014 6:37 pm 
Offline
User avatar

Joined: Thu Jan 19, 2006 5:08 pm
Posts: 746
Location: Shelton, Washington.
ShaneM wrote:
So if anyone borrows my fix, credit me


Always!

ShaneM wrote:
65c816 is similar to 6502. Use Geiger's SNES9x build to find what you want. I never studied 65c816 but since I'm fluent at 6502 I was able to trace the code and see how the SNES fixed it. Basically, use dopplerganger's disassembly when tracing code to the SNES because it's the same, for the most part.


Actually, I never got to edit SMAS successfully due to Lunar Address (FuSoYa's SNES address decoder) acting up on my ROM, only exception is SMW, And your advice here may be what I need, at least for the RAM!

_________________
AKA SmilyMZX/AtariHacker.


Top
 Profile  
 
PostPosted: Fri Dec 26, 2014 6:40 pm 
Offline
User avatar

Joined: Wed Apr 04, 2012 4:15 pm
Posts: 353
Location: United States of America (USA)
EDIT: You know, I just realized, all the fixes I made to my FDS games could be applied to the SNES versions. That's what I did when I started my SNES project on this. I'll list some more fixes later on this week; I'll eventually get around to sharing them all and maybe they could go on some sort of Mariowiki for all hackers to have access to. I think I got about 50 original glitches fixed.

Here's one more for today (I think I shared a handful of them last week). How to fix these: Small_and_Fiery and Thank_You_Dead_Mario (Same code corrects both glitches.)

Code:
HandleAxeMetatile:
       lda #$00     ;ORIGINAL CODE
       sta OperMode_Task   ;ORIGINAL CODE
       lda #$02                  ;ORIGINAL CODE
       sta OperMode        ;ORIGINAL CODE
       LSR        ;SHANEM's CODE. Divide the #$02 loaded in A to get #$01
       STA  InjuryTimer      ;SHANEM's CODE. Set $079E to #$01 to impose temporary invincibility for whenever
;the player touches the axe object metatile
       jsr LoadMarioPhysics   ;ORIGINAL CODE
       lda #$18                  ;ORIGINAL CODE
       sta Player_X_Speed  ;ORIGINAL CODE


EDIT: My bad; I edited my post to correct the links I listed...


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 168 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6, 7, 8 ... 12  Next

All times are UTC - 7 hours


Who is online

Users browsing this forum: Bregalad and 5 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group