Posted on 06-29-16, 01:14 pm
Death by cuteness

Karma: 6414
Posts: 439/598
Since: 05-01-13
There's also another problem that can be reproduced in the vanilla versions too:
_the Big Springboard, if thrown in a bottomless pit, seemingly doesn't de-spawn
_this is confirmed thanks to the Collision Info Viewer
Posted on 06-29-16, 01:16 pm (rev. 1 by  skawo on 06-29-16, 01:16 pm)


Karma: 19277
Posts: 401/1090
Since: 04-02-13
Is that a major problem? Does the game start to lag if you walk off too far or something?
Posted on 06-29-16, 01:18 pm (rev. 2 by  MeroMero on 06-29-16, 09:27 pm)
Death by cuteness

Karma: 6414
Posts: 440/598
Since: 05-01-13
No lag at all, just that if you need a Big Springboard and get rid of it, it won't respawn until you reload the Area.
More of a level design concern than a hardware one.

EDIT: code updated with 2 new bug fixes.
Posted on 06-30-16, 02:48 am (rev. 1 by  cros107 on 06-30-16, 02:48 am)
Fuzzy
Will never finish a hack

Karma: 1828
Posts: 102/777
Since: 03-25-16
I swear  MeroMero, all you've been doing for the past 2 weeks is writing ASM :p

And in actual assembly as well!
_________________________
hey look, I did a thing
Posted on 06-30-16, 03:58 pm
Death by cuteness

Karma: 6414
Posts: 441/598
Since: 05-01-13
Starman fix for ASM-Template:
nsub_020A08C0_ov_00: LDRH R3, [R0, #0xC] CMP R3, #0x1F @Check for Actor 31 (Item from Brick/Block) ADDNE PC, PC, #0x38 @If the check fails go to the end of the function LDR R1, [R0, #8] MOV R3, R1, LSR #0x18 CMP R3, #0x30 @Check if Power-up is thrown sideways ADDNE PC, PC, #0x28 @If the check fails go to the end of the function MOV R1, R1, LSL #0x1B @Pseudo-modulo 32 MOV R1, R1, LSR #0x1B @" CMP R1, #1 @Check if Power-up is Starman ADDNE PC, PC, #0x18 @If the check fails go to the end of the function LDR R3, =0x20D38C0 LDRB R1, [R0, #0x1C8] CMP R1, #0 @Check if hitbox is set ADDNE PC, PC, #4 @If yes then bypass address change CMP R2, #0 @Check if Starman relative height is below 0 LDRLT R3, =0x20D3CBC @If yes then change address in R3 STR R3, [R0, #0x53C] LDR R3, [R0, #0xD4] LDR R1, [R0, #0xE4] BX LR


This little one will fix a bothersome glitch with the Starman.

If you ground-pound a Block/Brick containing a Starman, it will get spawned from below the Container, right?
But what happens if there's ground directly underneath the Container, such as there is no space between the ground and the Container?
Then the Starman will get thrown sideways, but unlike other power-ups who do the same, you won't be able to collect the Starman!
Guess what, this ASM hack fix exactly that, by making Mario able to collect even Starmen spawned that way.



Posted by cros107
I swear  MeroMero, all you've been doing for the past 2 weeks is writing ASM :p

And in actual assembly as well!


Almost, almost, but yeah pretty much.
Posted on 07-05-16, 05:05 pm (rev. 2 by  MeroMero on 07-09-16, 12:46 pm)
Death by cuteness

Karma: 6414
Posts: 449/598
Since: 05-01-13


Go there to fetch the updated code!
While the Blockhopper code is mostly unchanged, the code now takes into account the remaining Jyotyu tiles in the enemy folder.

Posted on 07-05-16, 07:21 pm


Karma: 19277
Posts: 412/1090
Since: 04-02-13
Going all out on these patches
Posted on 07-05-16, 07:31 pm
Death by cuteness

Karma: 6414
Posts: 450/598
Since: 05-01-13
Posted by skawo
Going all out on these patches

All out? I haven't even begun to play
Also you would be surprised to hear that NSMB is not even my strongest suit when it comes to ASM Hacking.
Posted on 07-05-16, 10:17 pm (rev. 1 by  skawo on 07-05-16, 10:18 pm)


Karma: 19277
Posts: 413/1090
Since: 04-02-13
Well, here's another thing I thought of: fix the bouncing brick collisions, perhaps?

They glitch if you try to jump on it; especially so if you're mini.
Posted on 07-05-16, 10:35 pm
Death by cuteness

Karma: 6414
Posts: 452/598
Since: 05-01-13
Oh… that thing…
Yeah I already tried that once, but that was when I had no knowledge on where the collision and hitbox data were located.

On a related note, have you ever tried to make Mario throw a fireball while getting launched by Bouncing Bricks? If you do so, Mario's momentum will stop sooner. Not even the Bouncing Mushrooms can replicate that.
Posted on 07-05-16, 11:57 pm
(Words)

Karma: 662
Posts: 56/239
Since: 01-03-16
Posted by Pedroalone
Grounded fire piranha plants can't be killed with shells.

How about trying to fix this one? You've pretty much covered the entire game at this rate.
_________________________
"I strikingly thought you would know how but it clearly seems you have no knowledge of hacking" - MiiU 2017
Posted on 07-07-16, 11:51 am (rev. 2 by  MeroMero on 07-15-16, 10:04 am)
Death by cuteness

Karma: 6414
Posts: 456/598
Since: 05-01-13
Bouncing Bricks fix for ASM-template:
repl_021857E4_ov_63: MOV R11, #0x180 @Expansion speed coefficient (originally 0x400) BX LR


Posted by TruelyJohn64
Posted by Pedroalone
Grounded fire piranha plants can't be killed with shells.

How about trying to fix this one? You've pretty much covered the entire game at this rate.

Now that the Bouncing Bricks fix was cleared from the queue, I can have a go on this one.

Some other things worth looking at:
_Mini-Mushroom can go into 1/2 tile wide gaps (already know where to go, just need to put it in ASM format)
_Spinies and Buzzybeetles CAN'T go into 1/2 tile wide gaps (not tampered with yet)
Posted on 07-07-16, 05:17 pm (rev. 1 by  skawo on 07-07-16, 05:18 pm)


Karma: 19277
Posts: 418/1090
Since: 04-02-13
Good work. I'm wondering, if however, one more thing can be done; can the player only be launched upwards if he stays on the platform throughout the entire or most of the "bounce"?
Posted on 07-09-16, 12:19 pm (rev. 4 by  MeroMero on 07-14-16, 05:00 pm)
Death by cuteness

Karma: 6414
Posts: 458/598
Since: 05-01-13
Mini-Mushroom goes through 1/2 tile high and/or wide gaps:
repl_020D1628_ov_0A: @From Block repl_020D3F0C_ov_0A: @From Item Inventory AND R1, R5, #0x1F CMP R1, #0x19 LDREQ R3, =BottomCollision LDREQ R1, =SideCollision STREQ R1, [SP] MOV R1, R4 BX LR .data .balign 4 BottomCollision: .word 0x0 .word 0x0 .word 0x8000 .word 0x0 .word 0x0 .word 0x18000 .balign 4 SideCollision: .word 0x1 .word 0x1000 .word 0x7000 .word 0x4000


Buzzy Beetles and (Roof) Spinies can't pass through 1/2 tile high gaps:
repl_0214F62C_ov_2A: MOV R1, #1 STR R1, [R0] MOV R1, #0x2000 STR R1, [R0, #4] MOV R1, #0xA000 STR R1, [R0, #8] LDR R1, [R0] BX LR repl_0214F358_ov_2A: MOV R2, #0x6000 BX LR repl_021775B8_ov_44: LDR R0, =0x594 @Increase heap for Buzzy Beetle BX LR repl_02176574_ov_44: MOV R5, LR ADD LR, R4, #0x500 ADD LR, LR, #0x84 @Actor Address for Buzzy Beetle Side Collision STR LR, [SP] BX R5 repl_021765B8_ov_44: MOV R12, #0x6000 STR R12, [R4, #0x590] LDR R12, =0x2178F98 LDR R6, [R12] STR R6, [R4, #0x584] LDR R6, [R12, #4] STR R6, [R4, #0x588] LDR R12, [R12, #8] STR R12, [R4, #0x58C] BX LR repl_02176594_ov_44: MOV R6, #1 STR R6, [R12] MOV R6, #0x3000 STR R6, [R12, #4] MOV R6, #0xB000 STR R6, [R12, #8] LDR R6, [R12] BX LR repl_02176B5C_ov_44: LDR R1, [R4, #0x584] BIC R1, R1, #0x2700000 STR R1, [R4, #0x584] BX LR repl_02176B9C_ov_44: LDR R2, [R4, #0x584] ORR R2, R2, #0x2700000 STR R2, [R4, #0x584] BX LR repl_02176D58_ov_44: LDR R1, [R4, #0x584] BIC R1, R1, #0x2700000 STR R1, [R4, #0x584] ADD R3, R3, #0x14 BX LR repl_02176E40_ov_44: LDR R1, [R4, #0x584] ORR R1, R1, #0x2400000 STR R1, [R4, #0x584] ADD R3, R3, #0x14 BX LR repl_02176E90_ov_44: LDR R1, [R4, #0x584] ORR R1, R1, #0x2700000 STR R1, [R4, #0x584] ADD R3, R3, #0x14 ADD R2, R4, #0x500 ADD R2, R2, #0x64 BX LR repl_020A919C_ov_00: LDR R4, [R5, #4] LDRH R4, [R4, #0xC] CMP R4, #0x28 BEQ .SuccessSpinyCheck CMP R4, #0x7B BNE .BuzzyBeetleCheck .SuccessSpinyCheck: LDRB R4, [R2, #0x1B] CMP R4, #0x10 MOVNE R4, #0x2000 MOVEQ R4, #0x5000 STR R4, [R2, #0x3BC] ORR R4, R0, #0 BX LR .BuzzyBeetleCheck: CMP R4, #0x36 BNE .Return LDRB R4, [R2, #0x1B] CMP R4, #0x10 MOVNE R4, #0x3000 MOVEQ R4, #0x5000 STR R4, [R2, #0x338] .Return: ORR R4, R0, #0 BX LR


Posted by skawo
Good work. I'm wondering, if however, one more thing can be done; can the player only be launched upwards if he stays on the platform throughout the entire or most of the "bounce"?

Let me see if I got that straight, you basically want to force the player to get on the platform before said platform begin its expansion phase for the player to actually get launched upwards?
Not only that but the player will get launched only when the expansion reaches its maximal value?
And if one of the conditions fails the player must wait a "turn", or in other words for the next expansion phase?

Basically you want me to implement a check to see if Mario was standing on the platform before the expansion phase begins and also a check to see if Mario stayed on the platform for the whole duration of the expansion?
If both checks succeeded, Mario gets launched, if one of the checks fails, make the platform act as a normal platform for the remaining of the "turn", correct?
Posted on 07-09-16, 02:39 pm (rev. 1 by  skawo on 07-09-16, 02:39 pm)


Karma: 19277
Posts: 420/1090
Since: 04-02-13
Well, essentially, though perhaps some leniency on this:
Force the player to get on the platform before said platform begin its expansion phase for the player to actually get launched upwards?


And instead do it so that if he's on through most of the expansion phase, launch him. i.e if Mario was standing on the platform at at least the halfway point of the expansion phase.
Posted on 07-09-16, 08:19 pm
Hammer Brother


Karma: 3494
Posts: 858/1066
Since: 11-29-11
A hack that makes it possible to set the Snake Blocks to act like they do in NSMB2 (not waiting for Mario to move and repeating the path) would be cool
Posted on 07-15-16, 09:55 pm (rev. 4 by  MeroMero on 08-02-16, 02:29 pm)
Death by cuteness

Karma: 6414
Posts: 469/598
Since: 05-01-13
Posted by KingYoshi
A hack that makes it possible to set the Snake Blocks to act like they do in NSMB2 (not waiting for Mario to move and repeating the path) would be cool


Posted by hamza62240
I was also wondering, could you do something like make snake blocks slippery?




Obligatory upgraded download link on this post!

(Ice) Snake Blocks upgrade for ASM-template:
repl_0218C560_ov_6D: LDR R0, =0x5FC @Increase heap for Snake Blocks BX LR repl_0218A510_ov_6D: LDR R3, [R4, #8] @Load Actor Data into R3 ANDS R3, R3, #1 @Check Nybble 11 Bit 0 LDREQ R1, =0x218C600 @If not set then Snake Blocks move on their own LDMIA R1, {R1, R2} BX LR repl_02189A84_ov_6D: LDR R1, [R4, #8] @Load Actor Data into R1 ANDS R1, R1, #2 @Check Nybble 11 Bit 1 LDRNE R0, =IceSnakeBlocks @If set then load the Ice Snake Blocks graphics ADD R1, R3, #0x8000 BX LR repl_02189AF8_ov_6D: LDR R1, [R6, #8] @Load Actor Data into R1 ANDS R1, R1, #2 @Check Nybble 11 Bit 1 LDRNE R0, =IceSnakeBlocks @If set then load the Ice Snake Blocks graphics ADD R1, R3, #0x8000 BX LR repl_02189FE8_ov_6D: MOV R6, #0xD @Get pointer for Snake Block jyotyu map16 LDR R3, [R4, #8] @Load Actor Data into R3 ANDS R3, R3, #2 @Check Nybble 11 Bit 1 MOVNE R6, #0x85 @If set then get pointer for Ice Snake Block jyotyu map16 BX LR repl_0218B488_ov_6D: repl_0218B4DC_ov_6D: LDR R1, [R4, #8] @Load Actor Data into R1 ANDS R1, R1, #2 @Check Nybble 11 Bit 1 MOVNE R3, #0x85 @If set then get pointer for Ice Snake Block jyotyu map16 MOV R1, R12, LSL #4 BX LR repl_0218A3B8_ov_6D: @First step to allow looping AND R2, R1, #7 CMP R2, #5 MOVEQ R2, #0 BX LR repl_02189CD8_ov_6D: @Second step to allow looping ADD R2, R2, R3 CMP R1, #1 ADDEQ R12, R2, #1 STREQ R12, [R5, #0x5F4] @Store Snake Block head position on node 1 LDREQB R12, [R5, #0x3F4] SUBEQ R12, R2, R12 STREQ R12, [R5, #0x5F8] @Store Snake Block tail position on node 1 BX LR repl_0218B5C8_ov_6D: @Main function for looping LDR R0, [R5, #8] MOV R0, R0, LSR #0x1C AND R0, R0, #7 CMP R0, #5 @Allow looping only if Nybble 4 value is 5 or 13 (0xD) BNE .Return LDR R0, [R5, #0x4D0] LDR R4, [R5, #0x4D4] CMP R4, R0 LDRHI R4, [R5, #0x5F4] STRHI R4, [R5, #0x4D4] LDR R0, [R5, #0x578] LDR R4, [R5, #0x57C] CMP R4, R0 LDRHI R4, [R5, #0x5F8] STRHI R4, [R5, #0x57C] .Return: MOV R0, #1 LDMFD SP!, {R4, PC} nsub_0218A410_ov_6D: AND R1, R1, #3 CMP R1, #0 MOVEQ R1, #0x1000 @Default speed is still value 0 CMP R1, #1 MOVEQ R1, #0x800 @Half speed is still value 1 CMP R1, #2 MOVEQ R1, #0x400 @NEW: Quarter speed is value 2 CMP R1, #3 MOVEQ R1, #0x2000 @NEW: Double speed is value 3 CMP R1, #0x400 @Error handler: Check if speed has been set MOVCC R1, #0x1000 @If not set to default speed B 0x218A418 .data .balign 4 IceSnakeBlocks: .word 0x41F820F8 .word 0xFFFF1102

Were also modified A_block_ncg.bin as well as the jyotyu tileset.

How to use the new parameters?
_Nybble 11 = 0 > Normal Snake Blocks + move on their own
_Nybble 11 = 1 > Normal Snake Blocks + Mario must trigger them
_Nybble 11 = 2 > Ice Snake Blocks + move on their own
_Nybble 11 = 3 > Ice Snake Blocks + Mario must trigger them
Modulo 4

Also the Ice Snake Blocks are slippery!

2 conditions to use the looping:
_First set nybble 4 to 5 or D.
_Second when creating the Path for the (Ice) Snake Blocks, the penultimate node must be at the same place than node 0, and the last node must be at the same place than node 1.

Nybble 5 (speed) has been improved:
_0 > Default speed
_1 > Half speed
_2 > Quarter speed
_3 > Double speed
modulo 4

Works on a NDS.
Posted on 07-15-16, 09:59 pm
Birdo


Karma: 2612
Posts: 1652/2070
Since: 06-26-11
Wow! Now I need to think of something useful, but not too outrageous...
Posted on 07-15-16, 10:16 pm (rev. 1 by  skawo on 07-15-16, 10:16 pm)


Karma: 19277
Posts: 442/1090
Since: 04-02-13
Added everything to first post
Posted on 07-15-16, 10:51 pm (rev. 4 by  SnakeBlock on 07-16-16, 02:43 pm)
a

Karma: 1239
Posts: 1176/1289
Since: 02-12-13
Oh my, thank you so much! I have more freedom with Snake Blocks now.

EDIT: Once the snake block comes to a stop, the edges convert into the map16 normal green snake block tile. Middle stays icy, though.