diff --git a/Dungeons/dungeons.asm b/Dungeons/dungeons.asm index ebef165..34cc2c7 100644 --- a/Dungeons/dungeons.asm +++ b/Dungeons/dungeons.asm @@ -18,3 +18,6 @@ incsrc "Dungeons/spike_subtype.asm" incsrc "Dungeons/house_tag.asm" print "End of house_tag.asm ", pc + +incsrc "Dungeons/floor_puzzle.asm" +print "End of floor_puzzle.asm ", pc \ No newline at end of file diff --git a/Dungeons/floor_puzzle.asm b/Dungeons/floor_puzzle.asm new file mode 100644 index 0000000..a3222e9 --- /dev/null +++ b/Dungeons/floor_puzzle.asm @@ -0,0 +1,324 @@ + +;================================================ +;use holes_0 tag routine +; DO NOT USE holes_1 tag (broken because of holes_0 tag) +;================================================== + +org $01CC00 ; holes_0 tag routine +JSL NewTagRoutine +RTS + +; org $3A8000 +pullpc +NewTagRoutine: +; check under link feet what tile he is standing on +; save somewhere in ram last tile we were on so it doesn't turn it back off +; kill room tag +LDA.b $20 : CLC : ADC #$10 : AND.b #$F0 +STA.w $0224 ; y + +LDA.b $22 : CLC : ADC #$08 : AND.b #$F0 +STA.w $0225 ; x + + +LDA.w $0224 : CMP.w $0226 : BNE .differentTile +LDA.w $0225 : CMP.w $0227 : BNE .differentTile +JMP .sameTile +.differentTile + +; do code here for tile code +REP #$30 + +LDA.w $22 : CLC : ADC.w #$0008 : AND.w #$01F0 : LSR #$02 : STA.b $00 +LDA.w $20 : CLC : ADC.w #$0010 : AND.w #$01F0 : ASL #$04 : CLC : ADC.b $00 : STA.b $06 +TAX + +LDA.l $7E2000, X : CMP.w #$0DED : BNE + + JSR update_star_tile + JSR SearchForEmptyStar + BRA .doneupdate ++ +LDA.l $7E2000, X : CMP.w #$0DEE : BNE + + ;JSR SearchToRedStar + JSR update_red_star_tile + SEP #$30 + STZ.b $AE ; kill room tag! + ;JSR update_empty_tile + ;JSR SearchForEmptyStar ++ + +.doneupdate +SEP #$30 + +.sameTile + +LDA.w $0224 : STA.w $0226 ; Last Y +LDA.w $0225 : STA.w $0227 ; Last X + + + +RTL + + + +update_empty_tile: +STZ.b $0E +REP #$30 + +JSR replace_tile_empty + +SEP #$30 + +LDA.b #$01 +STA.b $14 +REP #$30 +RTS + + +update_star_tile: +STZ.b $0E +REP #$30 + +JSR replace_tile_star + +SEP #$30 + +LDA.b #$01 +STA.b $14 +REP #$30 +RTS + +update_red_star_tile: +STZ.b $0E +REP #$30 + +JSR replace_red_tile_star + +SEP #$30 + +LDA.b #$01 +STA.b $14 +REP #$30 +RTS + + +replace_red_tile_star: +LDX.w $1000 + +LDA.w #$19EE +STA.w $1006,X + +LDA.w #$99EE +STA.w $100C,X + +LDA.w #$59EE +STA.w $1012,X + +LDA.w #$D9EE +STA.w $1018,X + +LDX.b $06 + +LDA.w #$19EE : STA.l $7E2000, X +LDA.w #$99EE : STA.l $7E2080, X +LDA.w #$59EE : STA.l $7E2002, X +LDA.w #$D9EE : STA.l $7E2082, X + +AND.w #$03FF +TAX + +LDA.l $7EFE00,X +AND.w #$00FF +STA.b $08 +STA.b $09 + +JMP replace_tile_continue + + + +replace_tile_star: +LDX.w $1000 + +LDA.w #$0DEE +STA.w $1006,X + +LDA.w #$8DEE +STA.w $100C,X + +LDA.w #$4DEE +STA.w $1012,X + +LDA.w #$CDEE +STA.w $1018,X + +LDX.b $06 + +LDA.w #$0DEE : STA.l $7E2000, X +LDA.w #$8DEE : STA.l $7E2080, X +LDA.w #$4DEE : STA.l $7E2002, X +LDA.w #$CDEE : STA.l $7E2082, X + +AND.w #$03FF +TAX + +LDA.l $7EFE00,X +AND.w #$00FF +STA.b $08 +STA.b $09 + +JMP replace_tile_continue + + +replace_tile_empty: +LDX.w $1000 + +LDA.w #$0DED +STA.w $1006,X + +LDA.w #$8DED +STA.w $100C,X + +LDA.w #$4DED +STA.w $1012,X + +LDA.w #$CDED +STA.w $1018,X + +LDX.b $06 +LDA.w #$0DED : STA.l $7E2000, X +LDA.w #$8DED : STA.l $7E2080, X +LDA.w #$4DED : STA.l $7E2002, X +LDA.w #$CDED : STA.l $7E2082, X + +AND.w #$03FF +TAX + +LDA.l $7EFE00,X +AND.w #$00FF +STA.b $08 +STA.b $09 + +replace_tile_continue: + +LDX.w $1000 + +LDA.w #$0000 +JSR draw_one_corner +STA.w $1002,X + +LDA.w #$0080 +JSR draw_one_corner +STA.w $1008,X + +LDA.w #$0002 +JSR draw_one_corner +STA.w $100E,X + +LDA.w #$0082 +JSR draw_one_corner +STA.w $1014,X + +LDA.w #$0100 +STA.w $1004,X +STA.w $100A,X +STA.w $1010,X +STA.w $1016,X + +LDA.w #$FFFF +STA.w $101A,X + +TXA +CLC +ADC.w #$0018 +STA.w $1000 + +RTS + +;--------------------------------------------------------------------------------------------------- + +draw_one_corner: +CLC +ADC.b $06 +STA.b $0E + +AND.w #$0040 + +LSR A +LSR A +LSR A +LSR A + +XBA +STA.b $08 + +LDA.b $0E +AND.w #$303F +LSR A +ORA.b $08 +STA.b $08 + +LDA.b $0E +AND.w #$0F80 +LSR A +LSR A +ORA.b $08 +XBA + +RTS + + +SearchForEmptyStar: + + +LDX.w #$1FFE + +-- +LDA.l $7E2000, X : CMP.w #$0DED : BEQ .foundEmptyTile +DEX : DEX +BPL -- +; all tiles were on +SEP #$30 +LDA.w $0468 : BEQ + +STZ.w $0468 +STZ.w $068E +STZ.w $0690 +LDA.b #$05 : STA.b $11 +LDA.b #$25 : STA $012F +STZ.b $AE ; kill room tag! ++ +BRA + +.foundEmptyTile +SEP #$30 +LDA.w $0468 : BNE + +INC.w $0468 +STZ.w $068E +STZ.w $0690 +LDA.b #$05 : STA.b $11 ++ + +RTS + + +SearchToRedStar: + + +LDX.w #$1FFE + +-- +LDA.l $7E2000, X : CMP.w #$0DEE : BEQ .foundStarTile +DEX : DEX +BPL -- + +SEP #$30 +STZ.b $AE ; kill room tag! + +RTS + +.foundStarTile +PHX +STX.b $06 +JSR update_red_star_tile +PLX +BRA -- + +pushpc \ No newline at end of file