Banner
Views: 993,183,589
Time:
4 users online:  Lazy, MrInstigation, sdpo123, Serena - Guests: 52 - Bots: 196 Users: 54,461 (2,077 active)
Latest: MrInstigation
Tip: You can create fancy HDMA effects with Effect Tool if you have zero ASM knowledge.
Not logged in.
Posts by spooonsss
spooonsss' Profile - Posts by spooonsss
Pages: « 1 2 »
If I'm understanding correctly, you want a grinder that Mario can't spin jump on?

I started with Non-Line Guided Grinder and made these changes:

Code
diff --git a/ngrinder.asm b/ngrinder.asm
index ec3ca07..77b4228 100644
--- a/ngrinder.asm
+++ b/ngrinder.asm
@@ -43,6 +43,28 @@ CODE_01DB72:                      STA !Bank		;/
 CODE_01DB75:                      LDA #$00
                                   %SubOffScreen()
 CODE_01DB78:                      JSL $01A7DC  		; Default interaction with Mario.
+
+
+; Check for "Don't use default interaction with player" tweaker bit in $167A,x
+; Format: dpmksPiS
+; d=Don't use default interaction with player
+	PHP ; save carry, in case d==1
+	LDA !167A,x
+	AND #$80
+	BNE kill_interaction
+	JMP normal_interaction
+
+kill_interaction: PLP
+	BCC CODE_01DB7B
+	PHY
+	;JSL $00F606 ;>Kill the player.
+	JSL $00F5B7	;>Hurt the player.
+	PLY
+	RTS
+
+
+normal_interaction: PLP
+
 CODE_01DB7B:                      LDY !157C,X     	;\
 CODE_01DB7E:                      LDA XSpeeds,Y     ; | Set X speeds based on direction of sprite.
 CODE_01DB81:                      STA !B6,X    		;/
diff --git a/ngrinder.cfg b/ngrinder.cfg
index a729dab..99a3b2f 100644
--- a/ngrinder.cfg
+++ b/ngrinder.cfg
@@ -1,6 +1,6 @@
 01
 1C
-00 00 31 00 19 00
+00 00 31 80 19 00
 00 00
 ngrinder.asm
-1
\ No newline at end of file
+00:00
\ No newline at end of file


You can use "Kill the player" instead if you want Mario to die even if he has a powerup.

How should it behave if Mario is on Yoshi? I don't think this will change that.
Here are changes for the Line-Guided Grinder

Code
diff --git a/line_grinder_67.asm b/line_grinder_67.asm
index 8326f6d..9cf3528 100644
--- a/line_grinder_67.asm
+++ b/line_grinder_67.asm
@@ -167,6 +167,8 @@ NoSound:		;
 
 JSR GrinderGFX	; draw the sprite
 JSL $01A7DC	; interact with the player
+BCC LineGuideHandlerMainRt
+JSL $00F5B7	; hurt the player
 ; progress directly to the line-guided sprite handler routine
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/line_grinder_67.cfg b/line_grinder_67.cfg
index e4a9697..b3082f3 100644
--- a/line_grinder_67.cfg
+++ b/line_grinder_67.cfg
@@ -1,6 +1,6 @@
 01
 36
-00 2C A3 22 3D 05
+00 2C A3 A2 3D 05
 00 00
 line_grinder_67.asm
 1
\ No newline at end of file


I think this is the same modification that is in the Odd Sands hack in level E (except they also modified the "play the ticking sound effect" value)
I think the regular Checkerboard Platforms are 5 wide, not 6.

Anyways, here are the changes Checkerboard Platforms to render only 4 tiles:

Code
diff --git a/checkerboard_platforms_55+57.asm b/checkerboard_platforms_55+57.asm
index c8cc1df..75893e3 100644
--- a/checkerboard_platforms_55+57.asm
+++ b/checkerboard_platforms_55+57.asm
@@ -116,7 +116,7 @@ CheckerboardPlatformGFX:
     STA $0305|!Base2,y
     STA $0309|!Base2,y
     STA $030D|!Base2,y
-    STA $0311|!Base2,y
+
     LDX $15E9|!Base2
     LDA !E4,x
     SEC : SBC $1A
@@ -127,17 +127,14 @@ CheckerboardPlatformGFX:
     STA $0308|!Base2,y              ; third tile 16 pixels to the right of the second
     CLC : ADC #$10
     STA $030C|!Base2,y              ; fourth tile 16 pixels to the right of the third
-    CLC : ADC #$10
-    STA $0310|!Base2,y              ; fifth tile 16 pixels to the right of the fourth
 
     LDA.b #!CheckerboardTile1
     STA $0302|!Base2,y              ; first tile
     LDA.b #!CheckerboardTile2
     STA $0306|!Base2,y              ; second,
     STA $030A|!Base2,y              ; third,
-    STA $030E|!Base2,y              ; and fourth tiles
     LDA.b #!CheckerboardTile3
-    STA $0312|!Base2,y              ; fifth tile
+    STA $030E|!Base2,y              ; and fourth tiles
 
     LDA $64
     ORA !15F6,x                     ; no hardcoded palette this time, and the two platforms use the same one
@@ -145,9 +142,8 @@ CheckerboardPlatformGFX:
     STA $0307|!Base2,y              ; second...
     STA $030B|!Base2,y              ; third...
     STA $030F|!Base2,y              ; fourth...
-    STA $0313|!Base2,y              ; and fifth tile
 
-    LDA #$04                        ; 5 tiles to draw
+    LDA #$03                        ; 4 tiles to draw
     LDY #$02                        ; all tiles are 16x16
     JSL $01B7B3|!BankB
     RTS


And change the sprite clipping from 5 to 51 (0x33) in the cfg/json

I uploaded the code here: https://github.com/spooonsss/smw-checkerboard-platforms
Yes, I modified the Checkboard Platforms to make a new custom sprite. You can download here: https://github.com/spooonsss/smw-checkerboard-platforms/archive/refs/heads/master.zip
Here's what I came up with:

Code
; Always Stomp Yellow Yoshi UberASM
;   based on Super Mario Maker 2 Red Yoshi UberASM by KevinM

; This code changes the behavior of Yellow Yoshi in the level it's inserted in:
; He always stomps as if he had a shell in his mouth. By default, he can't stick
; his tongue out

; NOTE: this code needs the DB to be set correctly. This means that if you want
; to merge it with other codes using the library method, you'll need to use the
; %call_library() macro, as explained in the UberASM FAQs on SMWCentral.

; Set to 1 to disable tonguing while on yellow yoshi
!DisableTongue = 1


!EnableButton = $04  ; stomp on down pressed when landing
; !EnableButton = $00 ; stomp always
; Button combinations are possible in this format: byetUDLR
; !EnableButton = $0c  ; stomp on either up or down


; Set to 1 to disable the enemy hit counter while riding yellow Yoshi
; Yellow Yoshi will not stomp the ground after bouncing on an enemy, or if Mario just mounted Yoshi
!DisableEnemyHitCounter = 0

main:
    lda $9D                 ;\
    ora $13D4|!addr         ;| If game is frozen, return.
    bne .return             ;/

    lda $13C7|!addr         ;\
    cmp #$04                ;| If Yoshi is not yellow, return.
    bne .return             ;/

    lda $187A|!addr         ;\ If not riding Yoshi, return...
    bne .continue           ;/
if !DisableTongue
    stz $14A3|!addr         ; ...but first, cancel tongue animation.
endif
.return
    rtl

.continue
if !DisableTongue
    lda #%01000000          ;\
    tsb $0DAA|!addr         ;| disable pressing X/Y.
    tsb $0DAB|!addr         ;|
    tsb $0DAC|!addr         ;|
    tsb $0DAD|!addr         ;/
endif

if !DisableEnemyHitCounter
    lda #0
    sta $7E1697 ; consecutive enemy hit counter
endif

.stomp_enable
if !EnableButton
    lda $7E0015
    and #!EnableButton
    beq .return
endif

    lda #1
    sta $7E18E7 ; enable yoshi stomp

    rtl


It's a bit strange when mounting Yoshi on the ground with !DisableEnemyHitCounter=1: with Yoshi hopping up and down, whether or not you get a stomp depends on if Mario mounts Yoshi while he is on the ground.
Here's a level uberasm:

Code
main:
	LDA $13EF
	BEQ .return

	LDA #$80
	TRB $15
	TRB $16
	TRB $17
	TRB $18

.return
	RTL



This code doesn't check "$7E13E3 Player is wall-running flag." so I think you can still jump while wall-running
How about this:



$0072 is updated after the block code runs, so Mario is hurt 1 frame late, but this delay is barely noticeable.

Edit: Adding BodyInside: fixes a bug where Mario doesn't get hurt on the left edge of a 1AA. But it still hurts Mario too early when Mario rides a platform above the slope.
I made a level UberASM to do this: https://www.smwcentral.net/?p=section&a=details&id=27989

I think an UberASM is preferable since the $13E1 value ("What kind of slope the player is on") is not available in block asms.
The original/vanilla checkboards are 5 tiles, no?

It doesn't behave as 5 tiles for me. Mario can stand so he appears completely off the right edge, but that happens with the vanilla checkerboards too.

This uses the same sprite clipping value ($33) as the grey platform ($C4), which are 4 tiles wide. (The brown platforms ($5B) are 3 tiles wide)
I don't remember this sprite, is it used in vanilla? What level?
Ah right, in level 10F

There's a disassembly for it: Grey Lava Platform
I converted to SA-1 but got bored before figuring out the walking/jumping/timing speeds

taptap

You (or anyone) are welcome to use it, submit it, modify it...

Many sprite header values don't work. I found that $E works.
I will make this.

Dark Warrior, is BigPotato ok with me bundling the graphics with the sprite?
A quick edit: erase-after-use
You don't need to use hexadecimal at all, just remove $ and you can write decimal. e.g.
Code
!Time = 60


The asar manual covers this (briefly) under "Number Literals" section


To make the block just disappear, replace %shatter_block() with %erase_block()
I don't think the BVS is going to do what you want. $9A and !smoke_x_low are absolute coordinates, not relative to the camera. You'll need to do math relative to the camera position to check if it overflowed (or really, probably need the carry bit instead).

Or set the offset low enough so that it is always less than the difference between the block Mario is on and the edge of the screen.
dracula_duck.asm is reading the wrong tilemap position. Change
Code
LDA X_OFFSET,x

to
Code
LDA X_OFFSET_TWO,x


Looks like dracula_bat uses the wrong tiles, which are entirely transparent in the graphics .bin. Try:
Code
TILEMAP:             db $60,$62
Pages: « 1 2 »
spooonsss' Profile - Posts by spooonsss

The purpose of this site is not to distribute copyrighted material, but to honor one of our favourite games.

Copyright © 2005 - 2022 - SMW Central
Legal Information - Privacy Policy - Link To Us


Menu

Follow Us On

  • YouTube
  • Twitch
  • Twitter

Affiliates

  • Super Mario Bros. X Community
  • ROMhacking.net
  • Mario Fan Games Galaxy
  • sm64romhacks