Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;~@sa1
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; Mario Maker midway flag.
- ;; By LX5
- ;;
- ;; A dynamic sprite flag that works like a midway bar.
- ;;
- ;; Extra property byte 1:
- ;; - Used to determine which midpoint it will trigger.
- ;; - $00 = Original midpoint.
- ;; - $01~$FF = Midway point numbers from Kaijyuu's MMP patch.
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; RAM & ROM defines
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;incsrc subroutinedefs.asm
- !sprite_x_lo = $322C
- !sprite_x_hi = $326E
- !sprite_y_lo = $3216
- !sprite_y_hi = $3258
- !sprite_offscreen_x = $3376
- !sprite_offscreen_y = $7642
- !sprite_timer = $32C6
- !sprite_flags = $74F4
- !sprite_misc = $3284
- !sprite_num = $3200
- !sprite_state = $30D8
- !sprite_status = $3242
- !sprite_gfx = $33CE
- !sprite_pal = $33B8
- !sprite_extra_bits = $6040
- !sprite_extra_prop_1 = $6057
- !sprite_extra_prop_2 = $606D
- !sprite_custom_num = $6083
- !get_sprite_clip_a = $03B69F
- !get_sprite_clip_b = $03B6E5
- !get_mario_clip = $03B664
- !get_contact = $03B72B
- !finish_oam = $01B7B3
- !RAM_Midway = $7FB4D9
- !temp = $09
- !slot_pointer = $6F3A
- !slot_bank = $6F3C
- !slot_dest = $6F3D
- !slots_used = $66FE
- !dsx_buffer = $418000
- !max_slots = $04
- tiles: db $00,$02,$20,$22
- slots: db $CC,$C8,$C4,$C0
- dynamic_frames: db $00,$01,$02,$03
- db $10,$11,$12,$13
- db $20,$21,$22,$23
- x_pos: db $00,$10,$00,$10
- y_pos: db $00,$00,$10,$10
- props: db $30
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; Sprite init code
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- print "INIT ",pc
- LDA !sprite_extra_prop_1,x
- STA $00
- BEQ .normal_midpoint
- LDX $73BF
- LDA !RAM_Midway,x
- CMP $00
- BCS .midpoint_crossed
- .midpoint_not_crossed
- LDX $75E9
- RTL
- .normal_midpoint
- LDX $73BF
- LDA $7EA2,x
- AND #$40
- ORA $73CE
- BEQ .midpoint_not_crossed
- .midpoint_crossed
- LDX $75E9
- LDA #$02
- STA !sprite_state,x
- RTL
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; Sprite main code
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- print "MAIN ",pc
- PHB
- PHK
- PLB
- LDA $9D
- BNE end
- JSR flag_main
- end:
- JSR kek_SubOffscreenX0
- JSR graphics
- PLB
- RTL
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; Main code
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- flag_main:
- LDA !sprite_state,x
- BNE .midpoint_get
- JSR .get_timer
- LDA.w .skull_images,y
- STA !sprite_gfx,x
- JMP interaction
- .midpoint_get
- DEC
- BEQ .get_flag
- JSR .get_timer
- TYA
- CLC
- ADC $6DD6
- TAY
- LDA.w .mario_luigi_images,y
- STA !sprite_gfx,x
- RTS
- .get_flag
- LDA !sprite_timer,x
- BEQ .change_image
- LSR #2
- AND #$03
- TAY
- LDA.w .transform_images,y
- STA !sprite_gfx,x
- RTS
- .change_image
- INC !sprite_state,x
- RTS
- .get_timer
- LDA $14
- AND #$07
- CMP #$07
- BNE .no_increase
- LDA !sprite_misc,x
- CMP #$02
- BEQ .reset
- INC !sprite_misc,x
- BRA .no_increase
- .reset
- STZ !sprite_misc,x
- .no_increase
- LDY !sprite_misc,x
- RTS
- .skull_images
- db $00,$01,$02
- .transform_images
- db $03,$04,$05,$04
- .mario_luigi_images
- db $06,$07,$08,$00,$09,$0A,$0B
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; Interaction routine
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- interaction:
- LDA !sprite_x_lo,x
- CLC
- ADC #$07
- STA $04
- LDA !sprite_x_hi,x
- ADC #$00
- STA $0A
- LDA !sprite_y_lo,x
- CLC
- ADC #$03
- STA $05
- LDA !sprite_y_hi,x
- ADC #$00
- STA $0B
- LDA #$16
- STA $06
- LDA #$1A
- STA $07
- JSL !get_mario_clip
- JSL !get_contact
- BCC .no_contact
- INC !sprite_state,x
- LDA #$1F
- STA !sprite_timer,x
- LDA !sprite_extra_prop_1,x
- BEQ .normal_midpoint
- LDX $73BF
- STA !RAM_Midway,x
- .normal_midpoint
- LDX $75E9
- LDA #$01
- STA $73CE
- LDA $19
- BNE .already_big
- LDA #$02
- STA $71
- LDA #$2F
- STA $7496
- STA $9D
- .already_big
- LDA #$05
- STA $7DF9
- .no_contact
- RTS
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; Graphics routine
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- graphics:
- LDA !sprite_pal,x
- STA $04
- LDA !sprite_gfx,x
- PHX
- TAX
- LDA.w dynamic_frames,x
- PLX
- JSR get_dynamic_slot
- BCC .end
- STA $02
- JSR get_draw_info
- PHX
- LDX #$00
- .loop
- LDA $00
- CLC
- ADC.w x_pos,x
- STA $6300,y
- LDA $01
- CLC
- ADC.w y_pos,x
- STA $6301,y
- LDA.w tiles,x
- CLC
- ADC $02
- STA $6302,y
- LDA $04
- ORA $64
- STA $6303,y
- INY #4
- INX
- CPX #$04
- BNE .loop
- PLX
- LDA #$03
- LDY #$02
- JSL !finish_oam
- .end
- RTS
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; SubOffScreen x0
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- namespace "kek"
- Table1: db $0C,$1C
- Table2: db $01,$02
- Table3: db $40,$B0
- Table6: db $01,$FF
- Table4: db $30,$C0,$A0,$C0,$A0,$F0,$60,$90,$30,$C0,$A0,$80,$A0,$40,$60,$B0
- Table5: db $01,$FF,$01,$FF,$01,$FF,$01,$FF,$01,$FF,$01,$FF,$01,$00,$01,$FF
- SubOffscreenX0:
- LDA #$00
- ;BRA SubOffscreenMain
- ;SubOffscreenX1:
- ;LDA #$02
- ;BRA SubOffscreenMain
- ;SubOffscreenX2:
- ;LDA #$04
- ;BRA SubOffscreenMain
- ;SubOffscreenX3:
- ;LDA #$06
- ;BRA SubOffscreenMain
- ;SubOffscreenX4:
- ;LDA #$08
- ;BRA SubOffscreenMain
- ;SubOffscreenX5:
- ;LDA #$0A
- ;BRA SubOffscreenMain
- ;SubOffscreenX6:
- ;LDA #$0C
- ;BRA SubOffscreenMain
- ;SubOffscreenX7:
- ;LDA #$0E
- SubOffscreenMain:
- STA $03
- JSR SubIsOffscreen
- BEQ Return2
- LDA $5B
- LSR
- BCS VerticalLevel
- LDA $3216,x
- CLC
- ADC #$50
- LDA $3258,x
- ADC #$00
- CMP #$02
- BPL EraseSprite
- LDA $7616,x
- AND #$04
- BNE Return2
- LDA $13
- AND #$01
- ORA $03
- STA $01
- TAY
- LDA $1A
- CLC
- ADC Table4,y
- ROL $00
- CMP $322C,x
- PHP
- LDA $1B
- LSR $00
- ADC Table5,y
- PLP
- SBC $326E,x
- STA $00
- LSR $01
- BCC Label20
- EOR #$80
- STA $00
- Label20:
- LDA $00
- BPL Return2
- EraseSprite:
- LDA $3242,x
- CMP #$08
- BCC KillSprite
- LDY $7578,x
- CPY #$FF
- BEQ KillSprite
- LDA #$00
- STA $7938,y
- KillSprite:
- STZ $3242,x
- Return2:
- RTS
- VerticalLevel:
- LDA $7616,x
- AND #$04
- BNE Return2
- LDA $13
- LSR
- BCS Return2
- AND #$01
- STA $01
- TAY
- LDA $1C
- CLC
- ADC Table3,y
- ROL $00
- CMP $3216,x
- PHP
- LDA $1D
- LSR $00
- ADC Table6,y
- PLP
- SBC $3258,x
- STA $00
- LDY $02
- BEQ Label22
- EOR #$80
- STA $00
- Label22:
- LDA $00
- BPL Return2
- BMI EraseSprite
- SubIsOffscreen:
- LDA $3376,x
- ORA $7642,x
- RTS
- namespace off
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; GetDrawInfo
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- get_draw_info:
- STZ $7642,x
- STZ $3376,x
- LDA $322C,x
- CMP $1A
- LDA $326E,x
- SBC $1B
- BEQ .OnscreenX
- INC $3376,x
- .OnscreenX
- LDA $326E,x
- XBA
- LDA $322C,x
- REP #$20
- SEC
- SBC $1A
- CLC
- ADC.w #$0040
- CMP #$0180
- SEP #$20
- ROL A
- AND #$01
- STA $7536,x
- BNE .Invalid
- LDY #$00
- LDA $75EA,x
- AND #$20
- BEQ .OnscreenLoop
- INY
- .OnscreenLoop
- LDA $3216,x
- CLC
- ADC .Table1,y
- PHP
- CMP $1C
- ROL $00
- PLP
- LDA $3258,x
- ADC #$00
- LSR $00
- SBC $1D
- BEQ .OnscreenY
- LDA $7642,x
- ORA .Table2,y
- STA $7642,x
- .OnscreenY
- DEY
- BPL .OnscreenLoop
- LDY $33A2,x
- LDA $322C,x
- SEC
- SBC $1A
- STA $00
- LDA $3216,x
- SEC
- SBC $1C
- STA $01
- RTS
- .Invalid
- PLA
- PLA
- RTS
- .Table1 db $0C,$1C
- .Table2 db $01,$02
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; Get Dynamic sprite slot
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- get_dynamic_slot:
- PHY
- LDY !slots_used
- CPY #!max_slots
- BEQ .no_free
- REP #$20
- AND #$00FF
- XBA
- LSR A
- STA !temp
- LDA.w #flag_gfx ;gfx_pointer
- CLC
- ADC !temp
- STA !slot_pointer
- SEP #$20
- PHB
- PLA
- STA !slot_bank
- LDY !slots_used
- LDA slots,y
- PHA
- SEC
- SBC #$C0
- REP #$20
- AND #$00FF
- ASL #5
- CLC
- ADC.w #!dsx_buffer
- STA !slot_dest
- JSR .dma_buffer
- SEP #$20
- INC !slots_used
- PLA
- PLY
- SEC
- RTS
- .no_free
- ;PLA
- PLY
- CLC
- RTS
- .dma_buffer
- PHX
- LDA !slot_dest
- STA $2181
- LDY.b #!dsx_buffer>>16
- STY $2183
- STZ $4300
- LDY #$80
- STY $4301
- LDX #$03
- LDA !slot_pointer
- .loop
- STA $4302
- LDY !slot_bank
- STY $4304
- LDA #$0080
- STA $4305
- LDY #$01
- STY $420B
- DEX
- BMI .finish
- LDA !slot_dest
- CLC
- ADC #$0200
- STA !slot_dest
- STA $2181
- LDA !slot_pointer
- CLC
- ADC #$0200
- STA !slot_pointer
- BRA .loop
- .finish
- PLX
- RTS
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; Graphics
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;gfx_pointer:
- ; dw flag
- flag_gfx:
- incbin sprites/mid_flag.bin
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement