From 3301e5b77be805cdfd1122e79495b3e28f0e8464 Mon Sep 17 00:00:00 2001 From: yenatch Date: Sat, 7 Sep 2013 14:14:29 -0400 Subject: shorten PrintMoveDescription -> PrintMoveDesc so rgbds doesnt choke still need to fix this 15-char macro argument limit --- main.asm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main.asm b/main.asm index 157921c38..907cf187a 100644 --- a/main.asm +++ b/main.asm @@ -14999,7 +14999,7 @@ PredefPointers: ; 856b dwb CanLearnTMHMMove, BANK(CanLearnTMHMMove) dwb GetTMHMMove, BANK(GetTMHMMove) dwb Function28eef, BANK(Function28eef) - dwb $4b3e, $0b ; PrintMoveDescription, BANK(PrintMoveDescription) + dwb PrintMoveDesc, BANK(PrintMoveDesc) dwb Function3df48, BANK(Function3df48) ; UpdatePlayerHUD dwb FillBox, BANK(FillBox) dwb Function3d873, BANK(Function3d873) @@ -39844,7 +39844,7 @@ Function2c7fb: ; 2c7fb INCBIN "baserom.gbc", $2c867, $2cb3e - $2c867 -PrintMoveDescription: ; 2cb3e +PrintMoveDesc: ; 2cb3e push hl ld hl, MoveDescriptions ld a, [CurSpecies] -- cgit v1.2.3 From eaaf71944023b66fb44eed164521bc7a0d2cda66 Mon Sep 17 00:00:00 2001 From: yenatch Date: Sat, 7 Sep 2013 14:42:28 -0400 Subject: label some jumps in std scripts --- main.asm | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/main.asm b/main.asm index 907cf187a..e26e662c6 100644 --- a/main.asm +++ b/main.asm @@ -73343,35 +73343,45 @@ UnknownScript_0xbc375: ; 0xbc375 UnknownScript_0xbc380: ; 0xbc380 checkbit1 $0716 - iftrue $4389 + iftrue .skip1 clearbit1 $0720 +.skip1 checkbit1 $0717 - iftrue $4392 + iftrue .skip2 clearbit1 $0721 +.skip2 checkbit1 $0718 - iftrue $439b + iftrue .skip3 clearbit1 $0722 +.skip3 checkbit1 $0719 - iftrue $43a4 + iftrue .skip4 clearbit1 $0723 +.skip4 checkbit1 $071a - iftrue $43ad + iftrue .skip5 clearbit1 $0724 +.skip5 checkbit1 $071b - iftrue $43b6 + iftrue .skip6 clearbit1 $0725 +.skip6 checkbit1 $071c - iftrue $43bf + iftrue .skip7 clearbit1 $0726 +.skip7 checkbit1 $071d - iftrue $43c8 + iftrue .skip8 clearbit1 $0727 +.skip8 checkbit1 $071e - iftrue $43d1 + iftrue .skip9 clearbit1 $0728 +.skip9 checkbit1 $071f - iftrue $43da + iftrue .skip10 clearbit1 $0729 +.skip10 end ; 0xbc3db @@ -73518,7 +73528,7 @@ UnknownScript_0xbc3db: ; 0xbc3db UnknownScript_0xbc574: ; 0xbc574 special $005d checkcode $17 - if_equal $5, $45c9 + if_equal $5, UnknownScript_0xbc5c9 if_equal $7, UnknownScript_0xbc5ce if_equal $b, UnknownScript_0xbc5d3 if_equal $d, UnknownScript_0xbc5d8 @@ -73538,6 +73548,8 @@ UnknownScript_0xbc574: ; 0xbc574 if_equal $21, UnknownScript_0xbc61e if_equal $22, UnknownScript_0xbc623 if_equal $23, UnknownScript_0xbc628 + +UnknownScript_0xbc5c9: ; bc5c9 3writetext $6c, $49fe end ; 0xbc5ce @@ -73640,7 +73652,7 @@ UnknownScript_0xbc628: ; 0xbc628 UnknownScript_0xbc62d: ; 0xbc62d special $005d checkcode $17 - if_equal $5, $4682 + if_equal $5, UnknownScript_0xbc682 if_equal $7, UnknownScript_0xbc687 if_equal $b, UnknownScript_0xbc68c if_equal $d, UnknownScript_0xbc691 @@ -73660,6 +73672,8 @@ UnknownScript_0xbc62d: ; 0xbc62d if_equal $21, UnknownScript_0xbc6d7 if_equal $22, UnknownScript_0xbc6dc if_equal $23, UnknownScript_0xbc6e1 + +UnknownScript_0xbc682: ; bc682 3writetext $6c, $4a82 end ; 0xbc687 -- cgit v1.2.3 From ed2063276a3ca79ed8c2486c5e64c3d688165c80 Mon Sep 17 00:00:00 2001 From: yenatch Date: Sat, 7 Sep 2013 15:26:52 -0400 Subject: add a menudata2 header in std scripts thats it for std incbins --- main.asm | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/main.asm b/main.asm index e26e662c6..003fb45c9 100644 --- a/main.asm +++ b/main.asm @@ -75059,7 +75059,7 @@ UnknownScript_0xbcdcd: ; 0xbcdcd UnknownScript_0xbcde0: ; 0xbcde0 3writetext $6c, $47e3 special $0050 - loadmenudata $4e54 + loadmenudata MenuDataHeader_0xbce54 interpretmenu2 writebackup if_equal $1, UnknownScript_0xbcdf7 @@ -75116,7 +75116,23 @@ UnknownScript_0xbce4d: ; 0xbce4d end ; 0xbce54 -INCBIN "baserom.gbc", $bce54, $bce7f - $bce54 + +MenuDataHeader_0xbce54: ; 0xbce54 + db $40 ; flags + db 04, 00 ; start coords + db 11, 15 ; end coords + dw MenuData2_0xbce5c + db 1 ; default option +; 0xbce5c + +MenuData2_0xbce5c: ; 0xbce5c + db $80 ; flags + db 3 ; items + db " 50 : ¥1000@" + db "500 : ¥10000@" + db "CANCEL@" +; 0xbce7f + UnknownScript_0xbce7f: ; 0xbce7f faceplayer @@ -75439,6 +75455,8 @@ ElmPhoneScript2: ; 0xbd081 3writetext BANK(ElmPhoneUnusedText), ElmPhoneUnusedText specialphonecall $0000 end +; bd0d0 + INCBIN "baserom.gbc", $bd0d0, $be699-$bd0d0 -- cgit v1.2.3 From 6e5876377f93f0801c8de54954d40994d5f06d6e Mon Sep 17 00:00:00 2001 From: yenatch Date: Sat, 7 Sep 2013 15:30:07 -0400 Subject: split out std scripts from main.asm --- engine/std_scripts.asm | 2619 +++++++++++++++++++++++++++++++++++++++++++++++ main.asm | 2620 +----------------------------------------------- 2 files changed, 2620 insertions(+), 2619 deletions(-) create mode 100644 engine/std_scripts.asm diff --git a/engine/std_scripts.asm b/engine/std_scripts.asm new file mode 100644 index 000000000..095013d1d --- /dev/null +++ b/engine/std_scripts.asm @@ -0,0 +1,2619 @@ +StdScripts: ; bc000 + dbw BANK(PokeCenterNurseScript), PokeCenterNurseScript + dbw BANK(UnknownScript_0xbc162), UnknownScript_0xbc162 + dbw BANK(UnknownScript_0xbc166), UnknownScript_0xbc166 + dbw BANK(UnknownScript_0xbc16a), UnknownScript_0xbc16a + dbw BANK(UnknownScript_0xbc16e), UnknownScript_0xbc16e + dbw BANK(UnknownScript_0xbc172), UnknownScript_0xbc172 + dbw BANK(UnknownScript_0xbc176), UnknownScript_0xbc176 + dbw BANK(UnknownScript_0xbc17a), UnknownScript_0xbc17a + dbw BANK(UnknownScript_0xbc185), UnknownScript_0xbc185 + dbw BANK(UnknownScript_0xbc189), UnknownScript_0xbc189 + dbw BANK(UnknownScript_0xbc191), UnknownScript_0xbc191 + dbw BANK(UnknownScript_0xbc195), UnknownScript_0xbc195 + dbw BANK(UnknownScript_0xbc19d), UnknownScript_0xbc19d + dbw BANK(UnknownScript_0xbc1a5), UnknownScript_0xbc1a5 + dbw BANK(UnknownScript_0xbc1b8), UnknownScript_0xbc1b8 + dbw BANK(UnknownScript_0xbc1bc), UnknownScript_0xbc1bc + dbw BANK(UnknownScript_0xbc1c0), UnknownScript_0xbc1c0 + dbw BANK(UnknownScript_0xbc1c4), UnknownScript_0xbc1c4 + dbw BANK(UnknownScript_0xbc23e), UnknownScript_0xbc23e + dbw BANK(UnknownScript_0xbc242), UnknownScript_0xbc242 + dbw BANK(UnknownScript_0xbc1af), UnknownScript_0xbc1af + dbw BANK(UnknownScript_0xbc1c8), UnknownScript_0xbc1c8 + dbw BANK(UnknownScript_0xbc25c), UnknownScript_0xbc25c + dbw BANK(UnknownScript_0xbc274), UnknownScript_0xbc274 + dbw BANK(UnknownScript_0xbc3db), UnknownScript_0xbc3db + dbw BANK(UnknownScript_0xbc574), UnknownScript_0xbc574 + dbw BANK(UnknownScript_0xbc62d), UnknownScript_0xbc62d + dbw BANK(UnknownScript_0xbc6e6), UnknownScript_0xbc6e6 + dbw BANK(UnknownScript_0xbc6f0), UnknownScript_0xbc6f0 + dbw BANK(UnknownScript_0xbc7ce), UnknownScript_0xbc7ce + dbw BANK(UnknownScript_0xbc8ac), UnknownScript_0xbc8ac + dbw BANK(UnknownScript_0xbc98a), UnknownScript_0xbc98a + dbw BANK(UnknownScript_0xbca47), UnknownScript_0xbca47 + dbw BANK(UnknownScript_0xbca8f), UnknownScript_0xbca8f + dbw BANK(UnknownScript_0xbcb0a), UnknownScript_0xbcb0a + dbw BANK(UnknownScript_0xbcb35), UnknownScript_0xbcb35 + dbw BANK(UnknownScript_0xbcb7f), UnknownScript_0xbcb7f + dbw BANK(UnknownScript_0xbcbc9), UnknownScript_0xbcbc9 + dbw BANK(UnknownScript_0xbcbd3), UnknownScript_0xbcbd3 + dbw BANK(UnknownScript_0xbcc2d), UnknownScript_0xbcc2d + dbw BANK(UnknownScript_0xbcc87), UnknownScript_0xbcc87 + dbw BANK(UnknownScript_0xbcce1), UnknownScript_0xbcce1 + dbw BANK(UnknownScript_0xbcd30), UnknownScript_0xbcd30 + dbw BANK(UnknownScript_0xbcd5a), UnknownScript_0xbcd5a + dbw BANK(UnknownScript_0xbcd93), UnknownScript_0xbcd93 + dbw BANK(UnknownScript_0xbcda0), UnknownScript_0xbcda0 + dbw BANK(UnknownScript_0xbcdaa), UnknownScript_0xbcdaa + dbw BANK(UnknownScript_0xbcdb9), UnknownScript_0xbcdb9 + dbw BANK(UnknownScript_0xbcdc3), UnknownScript_0xbcdc3 + dbw BANK(UnknownScript_0xbc1a9), UnknownScript_0xbc1a9 + dbw BANK(UnknownScript_0xbcdcd), UnknownScript_0xbcdcd + dbw BANK(UnknownScript_0xbce7f), UnknownScript_0xbce7f +; bc09c + +PokeCenterNurseScript: ; bc09c +; Talking to a nurse in a Pokemon Center + + loadfont +; The nurse has different text for: +; Morn + checktime $1 + iftrue .morn +; Day + checktime $2 + iftrue .day +; Nite + checktime $4 + iftrue .nite +; If somehow it's not a time of day at all, we skip the introduction + 2jump .heal + +.morn +; Different text if we're in the com center + checkbit1 $032a + iftrue .morn_comcenter +; Good morning! Welcome to ... + 3writetext BANK(UnknownText_0x1b0000), UnknownText_0x1b0000 + keeptextopen + 2jump .heal +.morn_comcenter +; Good morning! This is the ... + 3writetext BANK(UnknownText_0x1b008a), UnknownText_0x1b008a + keeptextopen + 2jump .heal + +.day +; Different text if we're in the com center + checkbit1 $032a + iftrue .day_comcenter +; Hello! Welcome to ... + 3writetext BANK(UnknownText_0x1b002b), UnknownText_0x1b002b + keeptextopen + 2jump .heal +.day_comcenter +; Hello! This is the ... + 3writetext BANK(UnknownText_0x1b00d6), UnknownText_0x1b00d6 + keeptextopen + 2jump .heal + +.nite +; Different text if we're in the com center + checkbit1 $032a + iftrue .nite_comcenter +; Good evening! You're out late. ... + 3writetext BANK(UnknownText_0x1b004f), UnknownText_0x1b004f + keeptextopen + 2jump .heal +.nite_comcenter +; Good to see you working so late. ... + 3writetext BANK(UnknownText_0x1b011b), UnknownText_0x1b011b + keeptextopen + 2jump .heal + +.heal +; If we come back, don't welcome us to the com center again + clearbit1 $032a +; Ask if you want to heal + 3writetext BANK(UnknownText_0x1b017a), UnknownText_0x1b017a + yesorno + iffalse .end +; Go ahead and heal + 3writetext BANK(UnknownText_0x1b01bd), UnknownText_0x1b01bd + pause 20 + special $009d +; Turn to the machine + spriteface $fe, $2 + pause 10 + special $001b + playmusic $0000 + writebyte $0 + special $003e + pause 30 + special $003d + spriteface $fe, $0 + pause 10 +; Has Elm already phoned you about Pokerus? + checkphonecall + iftrue .done +; Has Pokerus already been found in the Pokecenter? + checkbit2 $000d + iftrue .done +; Check for Pokerus + special $004e ; SPECIAL_CHECKPOKERUS + iftrue .pokerus +.done +; Thank you for waiting. ... + 3writetext BANK(UnknownText_0x1b01d7), UnknownText_0x1b01d7 + pause 20 +.end +; We hope to see you again. + 3writetext BANK(UnknownText_0x1b020b), UnknownText_0x1b020b +; Curtsy + spriteface $fe, $1 + pause 10 + spriteface $fe, $0 + pause 10 +; And we're out + closetext + loadmovesprites + end + +.pokerus +; Different text for com center (excludes 'in a Pokemon Center') +; Since flag $32a is cleared when healing, +; this text is never actually seen + checkbit1 $032a + iftrue .pokerus_comcenter +; Your Pokemon appear to be infected ... + 3writetext BANK(UnknownText_0x1b0241), UnknownText_0x1b0241 + closetext + loadmovesprites + 2jump .endpokerus +.pokerus_comcenter +; Your Pokemon appear to be infected ... + 3writetext BANK(UnknownText_0x1b02d6), UnknownText_0x1b02d6 + closetext + loadmovesprites +.endpokerus +; Don't tell us about Pokerus again + setbit2 $000d +; Trigger Elm's Pokerus phone call + specialphonecall $0001 + end +; bc162 + +UnknownScript_0xbc162: ; 0xbc162 + 3jumptext $6c, $435a +; 0xbc166 + +UnknownScript_0xbc166: ; 0xbc166 + 3jumptext $6c, $4378 +; 0xbc16a + +UnknownScript_0xbc16a: ; 0xbc16a + 3jumptext $6c, $43a3 +; 0xbc16e + +UnknownScript_0xbc16e: ; 0xbc16e + 3jumptext $6c, $43d9 +; 0xbc172 + +UnknownScript_0xbc172: ; 0xbc172 + 3jumptext $6c, $4448 +; 0xbc176 + +UnknownScript_0xbc176: ; 0xbc176 + 3jumptext $6c, $4472 +; 0xbc17a + +UnknownScript_0xbc17a: ; 0xbc17a + loadfont + 3writetext $6c, $448d + closetext + special $0026 + loadmovesprites + end +; 0xbc185 + +UnknownScript_0xbc185: ; 0xbc185 + 3jumptext $6c, $44a0 +; 0xbc189 + +UnknownScript_0xbc189: ; 0xbc189 + loadfont + 3writetext $6c, $44be + closetext + loadmovesprites + end +; 0xbc191 + +UnknownScript_0xbc191: ; 0xbc191 + 3jumptext $6c, $44c9 +; 0xbc195 + +UnknownScript_0xbc195: ; 0xbc195 + loadfont + writebyte $0 + special $0028 + loadmovesprites + end +; 0xbc19d + +UnknownScript_0xbc19d: ; 0xbc19d + loadfont + writebyte $4 + special $0028 + loadmovesprites + end +; 0xbc1a5 + +UnknownScript_0xbc1a5: ; 0xbc1a5 + 3jumptext $6c, $4526 +; 0xbc1a9 + +UnknownScript_0xbc1a9: ; 0xbc1a9 + loadfont + special $001c + loadmovesprites + end +; 0xbc1af + +UnknownScript_0xbc1af: ; 0xbc1af + playsound $0008 + pause 15 + playsound $0027 + end +; 0xbc1b8 + +UnknownScript_0xbc1b8: ; 0xbc1b8 + 3jump BANK(UnknownScript_0xcd4b), UnknownScript_0xcd4b +; 0xbc1bc + +UnknownScript_0xbc1bc: ; 0xbc1bc + 3jump BANK(UnknownScript_0xcf5d), UnknownScript_0xcf5d +; 0xbc1c0 + +UnknownScript_0xbc1c0: ; 0xbc1c0 + 3jumptext $6c, $457f +; 0xbc1c4 + +UnknownScript_0xbc1c4: ; 0xbc1c4 + 3jumptext $6c, $459c +; 0xbc1c8 + +UnknownScript_0xbc1c8: ; 0xbc1c8 + checkcode $b + if_equal $1, UnknownScript_0xbc1e7 + if_equal $2, UnknownScript_0xbc1ec + if_equal $3, UnknownScript_0xbc1f1 + if_equal $4, UnknownScript_0xbc1f6 + if_equal $5, UnknownScript_0xbc1fb + if_equal $6, UnknownScript_0xbc200 + stringtotext UnknownRawText_0xbc205, $0 + end +; 0xbc1e7 + +UnknownScript_0xbc1e7: ; 0xbc1e7 + stringtotext UnknownRawText_0xbc20c, $0 + end +; 0xbc1ec + +UnknownScript_0xbc1ec: ; 0xbc1ec + stringtotext UnknownRawText_0xbc213, $0 + end +; 0xbc1f1 + +UnknownScript_0xbc1f1: ; 0xbc1f1 + stringtotext UnknownRawText_0xbc21b, $0 + end +; 0xbc1f6 + +UnknownScript_0xbc1f6: ; 0xbc1f6 + stringtotext UnknownRawText_0xbc225, $0 + end +; 0xbc1fb + +UnknownScript_0xbc1fb: ; 0xbc1fb + stringtotext UnknownRawText_0xbc22e, $0 + end +; 0xbc200 + +UnknownScript_0xbc200: ; 0xbc200 + stringtotext UnknownRawText_0xbc235, $0 + end +; 0xbc205 + +UnknownRawText_0xbc205: ; bc205 + db "SUNDAY@" +; bc20c + +UnknownRawText_0xbc20c: ; bc20c + db "MONDAY@" +; bc213 + +UnknownRawText_0xbc213: ; bc213 + db "TUESDAY@" +; bc21b + +UnknownRawText_0xbc21b: ; bc21b + db "WEDNESDAY@" +; bc225 + +UnknownRawText_0xbc225: ; bc225 + db "THURSDAY@" +; bc22e + +UnknownRawText_0xbc22e: ; bc22e + db "FRIDAY@" +; bc235 + +UnknownRawText_0xbc235: ; bc235 + db "SATURDAY@" +; bc23e + +UnknownScript_0xbc23e: ; 0xbc23e + clearbit1 $06cd + end +; 0xbc242 + +UnknownScript_0xbc242: ; 0xbc242 + setbit2 $0013 + setbit1 $06cf + setbit1 $06d1 + clearbit1 $06ce + clearbit1 $0025 + setbit1 $0756 + specialphonecall $0004 + domaptrigger GROUP_MAHOGANY_TOWN, MAP_MAHOGANY_TOWN, $1 + end +; 0xbc25c + +UnknownScript_0xbc25c: ; 0xbc25c + special $0034 + 2call UnknownScript_0xbc380 + setbit1 $0747 + clearbit1 $0748 + setbit1 $02d2 + warp GROUP_ROUTE_36_NATIONAL_PARK_GATE, MAP_ROUTE_36_NATIONAL_PARK_GATE, $0, $4 + applymovement $0, MovementData_0xbcea1 + +UnknownScript_0xbc274: ; bc274 + clearbit2 $0011 + clearbit1 $02d2 + clearbit1 $0313 + clearbit1 $0314 + clearbit1 $0315 + clearbit1 $0316 + loadfont + 3writetext $6c, $45bf + closetext + special $0014 + RAM2MEM $0 + if_equal $1, UnknownScript_0xbc31e + if_equal $2, UnknownScript_0xbc332 + if_equal $3, UnknownScript_0xbc343 + 3writetext $6c, $4681 + keeptextopen + waitbutton + verbosegiveitem BERRY, 1 + iffalse UnknownScript_0xbc375 + 3writetext $6c, $46b7 + keeptextopen + 2jump $42b6 +; 0xbc2b1 + +UnknownScript_0xbc2b1: ; 0xbc2b1 + 3writetext $6c, $465b + keeptextopen + checkbit1 $0308 + iffalse $42c4 + 3writetext $6c, $46d9 + closetext + special $0017 + special $0015 + if_equal $0, $42d4 + if_equal $2, $42d4 + 3writetext $6c, $470d + closetext + loadmovesprites + dotrigger $0 + domaptrigger GROUP_ROUTE_35_NATIONAL_PARK_GATE, MAP_ROUTE_35_NATIONAL_PARK_GATE, $0 + setbit1 $0716 + setbit1 $0717 + setbit1 $0718 + setbit1 $0719 + setbit1 $071a + setbit1 $071b + setbit1 $071c + setbit1 $071d + setbit1 $071e + setbit1 $071f + setbit1 $0720 + setbit1 $0721 + setbit1 $0722 + setbit1 $0723 + setbit1 $0724 + setbit1 $0725 + setbit1 $0726 + setbit1 $0727 + setbit1 $0728 + setbit1 $0729 + setbit2 $0051 + special $003c + end +; 0xbc31e + +UnknownScript_0xbc31e: ; 0xbc31e + setbit1 $0000 + itemtotext SUN_STONE, $1 + 3writetext $6c, $4621 + closetext + verbosegiveitem SUN_STONE, 1 + iffalse UnknownScript_0xbc354 + 2jump UnknownScript_0xbc2b1 +; 0xbc332 + +UnknownScript_0xbc332: ; 0xbc332 + itemtotext EVERSTONE, $1 + 3writetext $6c, $4621 + closetext + verbosegiveitem EVERSTONE, 1 + iffalse UnknownScript_0xbc35f + 2jump UnknownScript_0xbc2b1 +; 0xbc343 + +UnknownScript_0xbc343: ; 0xbc343 + itemtotext GOLD_BERRY, $1 + 3writetext $6c, $4621 + closetext + verbosegiveitem GOLD_BERRY, 1 + iffalse UnknownScript_0xbc36a + 2jump UnknownScript_0xbc2b1 +; 0xbc354 + +UnknownScript_0xbc354: ; 0xbc354 + 3writetext $6c, $48cc + keeptextopen + setbit1 $0313 + 2jump UnknownScript_0xbc2b1 +; 0xbc35f + +UnknownScript_0xbc35f: ; 0xbc35f + 3writetext $6c, $48cc + keeptextopen + setbit1 $0314 + 2jump UnknownScript_0xbc2b1 +; 0xbc36a + +UnknownScript_0xbc36a: ; 0xbc36a + 3writetext $6c, $48cc + keeptextopen + setbit1 $0315 + 2jump UnknownScript_0xbc2b1 +; 0xbc375 + +UnknownScript_0xbc375: ; 0xbc375 + 3writetext $6c, $48cc + keeptextopen + setbit1 $0316 + 2jump $42a9 +; 0xbc380 + +UnknownScript_0xbc380: ; 0xbc380 + checkbit1 $0716 + iftrue .skip1 + clearbit1 $0720 +.skip1 + checkbit1 $0717 + iftrue .skip2 + clearbit1 $0721 +.skip2 + checkbit1 $0718 + iftrue .skip3 + clearbit1 $0722 +.skip3 + checkbit1 $0719 + iftrue .skip4 + clearbit1 $0723 +.skip4 + checkbit1 $071a + iftrue .skip5 + clearbit1 $0724 +.skip5 + checkbit1 $071b + iftrue .skip6 + clearbit1 $0725 +.skip6 + checkbit1 $071c + iftrue .skip7 + clearbit1 $0726 +.skip7 + checkbit1 $071d + iftrue .skip8 + clearbit1 $0727 +.skip8 + checkbit1 $071e + iftrue .skip9 + clearbit1 $0728 +.skip9 + checkbit1 $071f + iftrue .skip10 + clearbit1 $0729 +.skip10 + end +; 0xbc3db + +UnknownScript_0xbc3db: ; 0xbc3db + setbit1 $06cb + setbit1 $06ce + setbit1 $06cd + setbit1 $06d0 + setbit1 $06f3 + setbit1 $06e9 + setbit1 $06f4 + setbit1 $06d5 + setbit1 $06de + setbit1 $06dd + setbit1 $06df + setbit1 $06c0 + setbit1 $06e4 + setbit1 $0025 + setbit1 $06be + setbit1 $06bf + setbit1 $06c1 + setbit1 $06f9 + setbit1 $06fd + setbit1 $06ff + setbit1 $0700 + setbit1 $0702 + setbit1 $0703 + setbit1 $0704 + setbit1 $070d + setbit1 $070e + setbit1 $070f + setbit1 $0710 + setbit1 $0715 + setbit1 $0716 + setbit1 $0717 + setbit1 $0718 + setbit1 $0719 + setbit1 $071a + setbit1 $071b + setbit1 $071c + setbit1 $071d + setbit1 $071e + setbit1 $071f + setbit1 $0720 + setbit1 $0721 + setbit1 $0722 + setbit1 $0723 + setbit1 $0724 + setbit1 $0725 + setbit1 $0726 + setbit1 $0727 + setbit1 $0728 + setbit1 $0729 + setbit1 $072c + setbit1 $072f + setbit1 $072d + setbit1 $0735 + setbit1 $0736 + setbit1 $073c + setbit1 $073d + setbit1 $0741 + setbit1 $0742 + setbit1 $0743 + setbit1 $0744 + setbit1 $02a4 + setbit1 $02af + setbit1 $0749 + setbit1 $06d3 + setbit1 $074d + setbit1 $0712 + setbit1 $0713 + setbit1 $0711 + setbit1 $06d4 + setbit1 $0304 + setbit1 $0307 + setbit1 $06d8 + setbit1 $06c3 + setbit1 $06c2 + setbit1 $06c6 + setbit1 $075f + setbit1 $0731 + setbit1 $074a + setbit1 $0762 + setbit1 $0738 + setbit1 $073a + setbit1 $073b + setbit1 $0733 + setbit1 $073f + setbit1 $078d + setbit1 $0766 + setbit1 $0768 + setbit1 $0769 + setbit1 $076a + setbit1 $078e + setbit1 $078f + setbit1 $0790 + setbit1 $0791 + setbit1 $0793 + setbit1 $07a4 + setbit1 $07a4 + setbit1 $07a5 + setbit1 $06ec + setbit1 $06ed + setbit1 $06f0 + setbit1 $07a9 + setbit1 $07aa + setbit1 $06c8 + setbit1 $07ac + setbit1 $07ad + setbit1 $07b5 + setbit1 $07b6 + setbit1 $07c5 + setbit1 $07b7 + setbit1 $07b0 + setbit1 $07af + setbit1 $07ae + setbit1 $07cf + setbit2 $000e + setbit2 $0017 + variablesprite $4, $52 + variablesprite $5, $4 + variablesprite $6, $35 + variablesprite $7, $a + variablesprite $8, $a + variablesprite $9, $a + variablesprite $a, $a + variablesprite $b, $28 + variablesprite $c, $28 + setbit1 $00fb + setbit1 $076d + setbit1 $076c + setbit1 $076e + setbit1 $076f + setbit1 $0773 + setbit1 $0776 + setbit1 $0777 + setbit1 $0779 + setbit1 $0772 + setbit1 $077b + setbit1 $0036 + return +; 0xbc574 + +UnknownScript_0xbc574: ; 0xbc574 + special $005d + checkcode $17 + if_equal $5, UnknownScript_0xbc5c9 + if_equal $7, UnknownScript_0xbc5ce + if_equal $b, UnknownScript_0xbc5d3 + if_equal $d, UnknownScript_0xbc5d8 + if_equal $f, UnknownScript_0xbc5dd + if_equal $10, UnknownScript_0xbc5e2 + if_equal $11, UnknownScript_0xbc5e7 + if_equal $13, UnknownScript_0xbc5ec + if_equal $14, UnknownScript_0xbc5f1 + if_equal $16, UnknownScript_0xbc5f6 + if_equal $17, UnknownScript_0xbc5fb + if_equal $18, UnknownScript_0xbc600 + if_equal $1b, UnknownScript_0xbc605 + if_equal $1c, UnknownScript_0xbc60a + if_equal $1d, UnknownScript_0xbc60f + if_equal $1e, UnknownScript_0xbc614 + if_equal $20, UnknownScript_0xbc619 + if_equal $21, UnknownScript_0xbc61e + if_equal $22, UnknownScript_0xbc623 + if_equal $23, UnknownScript_0xbc628 + +UnknownScript_0xbc5c9: ; bc5c9 + 3writetext $6c, $49fe + end +; 0xbc5ce + +UnknownScript_0xbc5ce: ; 0xbc5ce + 3writetext $6c, $4d9f + end +; 0xbc5d3 + +UnknownScript_0xbc5d3: ; 0xbc5d3 + 3writetext $6c, $502e + end +; 0xbc5d8 + +UnknownScript_0xbc5d8: ; 0xbc5d8 + 3writetext $6c, $542d + end +; 0xbc5dd + +UnknownScript_0xbc5dd: ; 0xbc5dd + 3writetext $6c, $5800 + end +; 0xbc5e2 + +UnknownScript_0xbc5e2: ; 0xbc5e2 + 3writetext $6c, $5a71 + end +; 0xbc5e7 + +UnknownScript_0xbc5e7: ; 0xbc5e7 + 3writetext $6c, $5cd5 + end +; 0xbc5ec + +UnknownScript_0xbc5ec: ; 0xbc5ec + 3writetext $29, $4000 + end +; 0xbc5f1 + +UnknownScript_0xbc5f1: ; 0xbc5f1 + 3writetext $29, $41c0 + end +; 0xbc5f6 + +UnknownScript_0xbc5f6: ; 0xbc5f6 + 3writetext $29, $4642 + end +; 0xbc5fb + +UnknownScript_0xbc5fb: ; 0xbc5fb + 3writetext $29, $4829 + end +; 0xbc600 + +UnknownScript_0xbc600: ; 0xbc600 + 3writetext $29, $4a31 + end +; 0xbc605 + +UnknownScript_0xbc605: ; 0xbc605 + 3writetext $29, $4ed4 + end +; 0xbc60a + +UnknownScript_0xbc60a: ; 0xbc60a + 3writetext $29, $50d5 + end +; 0xbc60f + +UnknownScript_0xbc60f: ; 0xbc60f + 3writetext $29, $52e2 + end +; 0xbc614 + +UnknownScript_0xbc614: ; 0xbc614 + 3writetext $29, $5545 + end +; 0xbc619 + +UnknownScript_0xbc619: ; 0xbc619 + 3writetext $29, $5937 + end +; 0xbc61e + +UnknownScript_0xbc61e: ; 0xbc61e + 3writetext $29, $5bc4 + end +; 0xbc623 + +UnknownScript_0xbc623: ; 0xbc623 + 3writetext $29, $5dc6 + end +; 0xbc628 + +UnknownScript_0xbc628: ; 0xbc628 + 3writetext $29, $600c + end +; 0xbc62d + +UnknownScript_0xbc62d: ; 0xbc62d + special $005d + checkcode $17 + if_equal $5, UnknownScript_0xbc682 + if_equal $7, UnknownScript_0xbc687 + if_equal $b, UnknownScript_0xbc68c + if_equal $d, UnknownScript_0xbc691 + if_equal $f, UnknownScript_0xbc696 + if_equal $10, UnknownScript_0xbc69b + if_equal $11, UnknownScript_0xbc6a0 + if_equal $13, UnknownScript_0xbc6a5 + if_equal $14, UnknownScript_0xbc6aa + if_equal $16, UnknownScript_0xbc6af + if_equal $17, UnknownScript_0xbc6b4 + if_equal $18, UnknownScript_0xbc6b9 + if_equal $1b, UnknownScript_0xbc6be + if_equal $1c, UnknownScript_0xbc6c3 + if_equal $1d, UnknownScript_0xbc6c8 + if_equal $1e, UnknownScript_0xbc6cd + if_equal $20, UnknownScript_0xbc6d2 + if_equal $21, UnknownScript_0xbc6d7 + if_equal $22, UnknownScript_0xbc6dc + if_equal $23, UnknownScript_0xbc6e1 + +UnknownScript_0xbc682: ; bc682 + 3writetext $6c, $4a82 + end +; 0xbc687 + +UnknownScript_0xbc687: ; 0xbc687 + 3writetext $6c, $4e2c + end +; 0xbc68c + +UnknownScript_0xbc68c: ; 0xbc68c + 3writetext $6c, $50d3 + end +; 0xbc691 + +UnknownScript_0xbc691: ; 0xbc691 + 3writetext $6c, $54e4 + end +; 0xbc696 + +UnknownScript_0xbc696: ; 0xbc696 + 3writetext $6c, $587b + end +; 0xbc69b + +UnknownScript_0xbc69b: ; 0xbc69b + 3writetext $6c, $5b1d + end +; 0xbc6a0 + +UnknownScript_0xbc6a0: ; 0xbc6a0 + 3writetext $6c, $5d85 + end +; 0xbc6a5 + +UnknownScript_0xbc6a5: ; 0xbc6a5 + 3writetext $29, $40a9 + end +; 0xbc6aa + +UnknownScript_0xbc6aa: ; 0xbc6aa + 3writetext $29, $426a + end +; 0xbc6af + +UnknownScript_0xbc6af: ; 0xbc6af + 3writetext $29, $470b + end +; 0xbc6b4 + +UnknownScript_0xbc6b4: ; 0xbc6b4 + 3writetext $29, $48fc + end +; 0xbc6b9 + +UnknownScript_0xbc6b9: ; 0xbc6b9 + 3writetext $29, $4b03 + end +; 0xbc6be + +UnknownScript_0xbc6be: ; 0xbc6be + 3writetext $29, $4fc8 + end +; 0xbc6c3 + +UnknownScript_0xbc6c3: ; 0xbc6c3 + 3writetext $29, $5175 + end +; 0xbc6c8 + +UnknownScript_0xbc6c8: ; 0xbc6c8 + 3writetext $29, $5383 + end +; 0xbc6cd + +UnknownScript_0xbc6cd: ; 0xbc6cd + 3writetext $29, $5621 + end +; 0xbc6d2 + +UnknownScript_0xbc6d2: ; 0xbc6d2 + 3writetext $29, $59bc + end +; 0xbc6d7 + +UnknownScript_0xbc6d7: ; 0xbc6d7 + 3writetext $29, $5c4b + end +; 0xbc6dc + +UnknownScript_0xbc6dc: ; 0xbc6dc + 3writetext $29, $5e63 + end +; 0xbc6e1 + +UnknownScript_0xbc6e1: ; 0xbc6e1 + 3writetext $29, $6076 + end +; 0xbc6e6 + +UnknownScript_0xbc6e6: ; 0xbc6e6 + 3writetext $6c, $49c4 + playsound $0093 + waitbutton + keeptextopen + end +; 0xbc6f0 + +UnknownScript_0xbc6f0: ; 0xbc6f0 + checkcode $17 + if_equal $5, $4742 + if_equal $7, UnknownScript_0xbc749 + if_equal $b, UnknownScript_0xbc750 + if_equal $d, UnknownScript_0xbc757 + if_equal $f, UnknownScript_0xbc75e + if_equal $10, UnknownScript_0xbc765 + if_equal $11, UnknownScript_0xbc76c + if_equal $13, UnknownScript_0xbc773 + if_equal $14, UnknownScript_0xbc77a + if_equal $16, UnknownScript_0xbc781 + if_equal $17, UnknownScript_0xbc788 + if_equal $18, UnknownScript_0xbc78f + if_equal $1b, UnknownScript_0xbc796 + if_equal $1c, UnknownScript_0xbc79d + if_equal $1d, UnknownScript_0xbc7a4 + if_equal $1e, UnknownScript_0xbc7ab + if_equal $20, UnknownScript_0xbc7b2 + if_equal $21, UnknownScript_0xbc7b9 + if_equal $22, UnknownScript_0xbc7c0 + if_equal $23, UnknownScript_0xbc7c7 + 3writetext $6c, $4adb + closetext + loadmovesprites + end +; 0xbc749 + +UnknownScript_0xbc749: ; 0xbc749 + 3writetext $6c, $4e89 + closetext + loadmovesprites + end +; 0xbc750 + +UnknownScript_0xbc750: ; 0xbc750 + 3writetext $6c, $5136 + closetext + loadmovesprites + end +; 0xbc757 + +UnknownScript_0xbc757: ; 0xbc757 + 3writetext $6c, $5553 + closetext + loadmovesprites + end +; 0xbc75e + +UnknownScript_0xbc75e: ; 0xbc75e + 3writetext $6c, $58d7 + closetext + loadmovesprites + end +; 0xbc765 + +UnknownScript_0xbc765: ; 0xbc765 + 3writetext $6c, $5b8e + closetext + loadmovesprites + end +; 0xbc76c + +UnknownScript_0xbc76c: ; 0xbc76c + 3writetext $6c, $5db9 + closetext + loadmovesprites + end +; 0xbc773 + +UnknownScript_0xbc773: ; 0xbc773 + 3writetext $29, $40f8 + closetext + loadmovesprites + end +; 0xbc77a + +UnknownScript_0xbc77a: ; 0xbc77a + 3writetext $29, $42ab + closetext + loadmovesprites + end +; 0xbc781 + +UnknownScript_0xbc781: ; 0xbc781 + 3writetext $29, $4730 + closetext + loadmovesprites + end +; 0xbc788 + +UnknownScript_0xbc788: ; 0xbc788 + 3writetext $29, $494d + closetext + loadmovesprites + end +; 0xbc78f + +UnknownScript_0xbc78f: ; 0xbc78f + 3writetext $29, $4b47 + closetext + loadmovesprites + end +; 0xbc796 + +UnknownScript_0xbc796: ; 0xbc796 + 3writetext $29, $502e + closetext + loadmovesprites + end +; 0xbc79d + +UnknownScript_0xbc79d: ; 0xbc79d + 3writetext $29, $51ac + closetext + loadmovesprites + end +; 0xbc7a4 + +UnknownScript_0xbc7a4: ; 0xbc7a4 + 3writetext $29, $53de + closetext + loadmovesprites + end +; 0xbc7ab + +UnknownScript_0xbc7ab: ; 0xbc7ab + 3writetext $29, $5666 + closetext + loadmovesprites + end +; 0xbc7b2 + +UnknownScript_0xbc7b2: ; 0xbc7b2 + 3writetext $29, $5a28 + closetext + loadmovesprites + end +; 0xbc7b9 + +UnknownScript_0xbc7b9: ; 0xbc7b9 + 3writetext $29, $5c8e + closetext + loadmovesprites + end +; 0xbc7c0 + +UnknownScript_0xbc7c0: ; 0xbc7c0 + 3writetext $29, $5ea8 + closetext + loadmovesprites + end +; 0xbc7c7 + +UnknownScript_0xbc7c7: ; 0xbc7c7 + 3writetext $29, $60b5 + closetext + loadmovesprites + end +; 0xbc7ce + +UnknownScript_0xbc7ce: ; 0xbc7ce + checkcode $17 + if_equal $5, $4820 + if_equal $7, UnknownScript_0xbc827 + if_equal $b, UnknownScript_0xbc82e + if_equal $d, UnknownScript_0xbc835 + if_equal $f, UnknownScript_0xbc83c + if_equal $10, UnknownScript_0xbc843 + if_equal $11, UnknownScript_0xbc84a + if_equal $13, UnknownScript_0xbc851 + if_equal $14, UnknownScript_0xbc858 + if_equal $16, UnknownScript_0xbc85f + if_equal $17, UnknownScript_0xbc866 + if_equal $18, UnknownScript_0xbc86d + if_equal $1b, UnknownScript_0xbc874 + if_equal $1c, UnknownScript_0xbc87b + if_equal $1d, UnknownScript_0xbc882 + if_equal $1e, UnknownScript_0xbc889 + if_equal $20, UnknownScript_0xbc890 + if_equal $21, UnknownScript_0xbc897 + if_equal $22, UnknownScript_0xbc89e + if_equal $23, UnknownScript_0xbc8a5 + 3writetext $6c, $4afd + closetext + loadmovesprites + end +; 0xbc827 + +UnknownScript_0xbc827: ; 0xbc827 + 3writetext $6c, $4ea2 + closetext + loadmovesprites + end +; 0xbc82e + +UnknownScript_0xbc82e: ; 0xbc82e + 3writetext $6c, $517b + closetext + loadmovesprites + end +; 0xbc835 + +UnknownScript_0xbc835: ; 0xbc835 + 3writetext $6c, $5584 + closetext + loadmovesprites + end +; 0xbc83c + +UnknownScript_0xbc83c: ; 0xbc83c + 3writetext $6c, $5908 + closetext + loadmovesprites + end +; 0xbc843 + +UnknownScript_0xbc843: ; 0xbc843 + 3writetext $6c, $5bd2 + closetext + loadmovesprites + end +; 0xbc84a + +UnknownScript_0xbc84a: ; 0xbc84a + 3writetext $6c, $5df4 + closetext + loadmovesprites + end +; 0xbc851 + +UnknownScript_0xbc851: ; 0xbc851 + 3writetext $29, $4126 + closetext + loadmovesprites + end +; 0xbc858 + +UnknownScript_0xbc858: ; 0xbc858 + 3writetext $29, $42f2 + closetext + loadmovesprites + end +; 0xbc85f + +UnknownScript_0xbc85f: ; 0xbc85f + 3writetext $29, $4794 + closetext + loadmovesprites + end +; 0xbc866 + +UnknownScript_0xbc866: ; 0xbc866 + 3writetext $29, $498a + closetext + loadmovesprites + end +; 0xbc86d + +UnknownScript_0xbc86d: ; 0xbc86d + 3writetext $29, $4b87 + closetext + loadmovesprites + end +; 0xbc874 + +UnknownScript_0xbc874: ; 0xbc874 + 3writetext $29, $505f + closetext + loadmovesprites + end +; 0xbc87b + +UnknownScript_0xbc87b: ; 0xbc87b + 3writetext $29, $51ee + closetext + loadmovesprites + end +; 0xbc882 + +UnknownScript_0xbc882: ; 0xbc882 + 3writetext $29, $5412 + closetext + loadmovesprites + end +; 0xbc889 + +UnknownScript_0xbc889: ; 0xbc889 + 3writetext $29, $56b6 + closetext + loadmovesprites + end +; 0xbc890 + +UnknownScript_0xbc890: ; 0xbc890 + 3writetext $29, $5a5a + closetext + loadmovesprites + end +; 0xbc897 + +UnknownScript_0xbc897: ; 0xbc897 + 3writetext $29, $5cc5 + closetext + loadmovesprites + end +; 0xbc89e + +UnknownScript_0xbc89e: ; 0xbc89e + 3writetext $29, $5ed6 + closetext + loadmovesprites + end +; 0xbc8a5 + +UnknownScript_0xbc8a5: ; 0xbc8a5 + 3writetext $29, $60e2 + closetext + loadmovesprites + end +; 0xbc8ac + +UnknownScript_0xbc8ac: ; 0xbc8ac + checkcode $17 + if_equal $5, $48fe + if_equal $7, UnknownScript_0xbc905 + if_equal $b, UnknownScript_0xbc90c + if_equal $d, UnknownScript_0xbc913 + if_equal $f, UnknownScript_0xbc91a + if_equal $10, UnknownScript_0xbc921 + if_equal $11, UnknownScript_0xbc928 + if_equal $13, UnknownScript_0xbc92f + if_equal $14, UnknownScript_0xbc936 + if_equal $16, UnknownScript_0xbc93d + if_equal $17, UnknownScript_0xbc944 + if_equal $18, UnknownScript_0xbc94b + if_equal $1b, UnknownScript_0xbc952 + if_equal $1c, UnknownScript_0xbc959 + if_equal $1d, UnknownScript_0xbc960 + if_equal $1e, UnknownScript_0xbc967 + if_equal $20, UnknownScript_0xbc96e + if_equal $21, UnknownScript_0xbc975 + if_equal $22, UnknownScript_0xbc97c + if_equal $23, UnknownScript_0xbc983 + 3writetext $6c, $4b42 + closetext + loadmovesprites + end +; 0xbc905 + +UnknownScript_0xbc905: ; 0xbc905 + 3writetext $6c, $4ebc + closetext + loadmovesprites + end +; 0xbc90c + +UnknownScript_0xbc90c: ; 0xbc90c + 3writetext $6c, $51c4 + closetext + loadmovesprites + end +; 0xbc913 + +UnknownScript_0xbc913: ; 0xbc913 + 3writetext $6c, $55b6 + closetext + loadmovesprites + end +; 0xbc91a + +UnknownScript_0xbc91a: ; 0xbc91a + 3writetext $6c, $5936 + closetext + loadmovesprites + end +; 0xbc921 + +UnknownScript_0xbc921: ; 0xbc921 + 3writetext $6c, $5c06 + closetext + loadmovesprites + end +; 0xbc928 + +UnknownScript_0xbc928: ; 0xbc928 + 3writetext $6c, $5e50 + closetext + loadmovesprites + end +; 0xbc92f + +UnknownScript_0xbc92f: ; 0xbc92f + 3writetext $29, $4158 + closetext + loadmovesprites + end +; 0xbc936 + +UnknownScript_0xbc936: ; 0xbc936 + 3writetext $29, $434a + closetext + loadmovesprites + end +; 0xbc93d + +UnknownScript_0xbc93d: ; 0xbc93d + 3writetext $29, $47eb + closetext + loadmovesprites + end +; 0xbc944 + +UnknownScript_0xbc944: ; 0xbc944 + 3writetext $29, $49bd + closetext + loadmovesprites + end +; 0xbc94b + +UnknownScript_0xbc94b: ; 0xbc94b + 3writetext $29, $4bcd + closetext + loadmovesprites + end +; 0xbc952 + +UnknownScript_0xbc952: ; 0xbc952 + 3writetext $29, $508c + closetext + loadmovesprites + end +; 0xbc959 + +UnknownScript_0xbc959: ; 0xbc959 + 3writetext $29, $5216 + closetext + loadmovesprites + end +; 0xbc960 + +UnknownScript_0xbc960: ; 0xbc960 + 3writetext $29, $5446 + closetext + loadmovesprites + end +; 0xbc967 + +UnknownScript_0xbc967: ; 0xbc967 + 3writetext $29, $56e2 + closetext + loadmovesprites + end +; 0xbc96e + +UnknownScript_0xbc96e: ; 0xbc96e + 3writetext $29, $5aa6 + closetext + loadmovesprites + end +; 0xbc975 + +UnknownScript_0xbc975: ; 0xbc975 + 3writetext $29, $5cfa + closetext + loadmovesprites + end +; 0xbc97c + +UnknownScript_0xbc97c: ; 0xbc97c + 3writetext $29, $5f06 + closetext + loadmovesprites + end +; 0xbc983 + +UnknownScript_0xbc983: ; 0xbc983 + 3writetext $29, $6144 + closetext + loadmovesprites + end +; 0xbc98a + +UnknownScript_0xbc98a: ; 0xbc98a + checkcode $17 + if_equal $5, $49d0 + if_equal $7, UnknownScript_0xbc9d7 + if_equal $b, UnknownScript_0xbc9de + if_equal $d, UnknownScript_0xbc9e5 + if_equal $f, UnknownScript_0xbc9ec + if_equal $10, UnknownScript_0xbc9f3 + if_equal $11, UnknownScript_0xbc9fa + if_equal $13, UnknownScript_0xbca01 + if_equal $14, UnknownScript_0xbca08 + if_equal $17, UnknownScript_0xbca0f + if_equal $18, UnknownScript_0xbca16 + if_equal $1b, UnknownScript_0xbca1d + if_equal $1d, UnknownScript_0xbca24 + if_equal $1e, UnknownScript_0xbca2b + if_equal $20, UnknownScript_0xbca32 + if_equal $21, UnknownScript_0xbca39 + if_equal $23, UnknownScript_0xbca40 + 3writetext $6c, $4b75 + closetext + loadmovesprites + end +; 0xbc9d7 + +UnknownScript_0xbc9d7: ; 0xbc9d7 + 3writetext $6c, $4edc + closetext + loadmovesprites + end +; 0xbc9de + +UnknownScript_0xbc9de: ; 0xbc9de + 3writetext $6c, $51fe + closetext + loadmovesprites + end +; 0xbc9e5 + +UnknownScript_0xbc9e5: ; 0xbc9e5 + 3writetext $6c, $55d5 + closetext + loadmovesprites + end +; 0xbc9ec + +UnknownScript_0xbc9ec: ; 0xbc9ec + 3writetext $6c, $5954 + closetext + loadmovesprites + end +; 0xbc9f3 + +UnknownScript_0xbc9f3: ; 0xbc9f3 + 3writetext $6c, $5c32 + closetext + loadmovesprites + end +; 0xbc9fa + +UnknownScript_0xbc9fa: ; 0xbc9fa + 3writetext $6c, $5e98 + closetext + loadmovesprites + end +; 0xbca01 + +UnknownScript_0xbca01: ; 0xbca01 + 3writetext $29, $418d + closetext + loadmovesprites + end +; 0xbca08 + +UnknownScript_0xbca08: ; 0xbca08 + 3writetext $29, $4382 + closetext + loadmovesprites + end +; 0xbca0f + +UnknownScript_0xbca0f: ; 0xbca0f + 3writetext $29, $49fc + closetext + loadmovesprites + end +; 0xbca16 + +UnknownScript_0xbca16: ; 0xbca16 + 3writetext $29, $4bec + closetext + loadmovesprites + end +; 0xbca1d + +UnknownScript_0xbca1d: ; 0xbca1d + 3writetext $29, $50b1 + closetext + loadmovesprites + end +; 0xbca24 + +UnknownScript_0xbca24: ; 0xbca24 + 3writetext $29, $548c + closetext + loadmovesprites + end +; 0xbca2b + +UnknownScript_0xbca2b: ; 0xbca2b + 3writetext $29, $571e + closetext + loadmovesprites + end +; 0xbca32 + +UnknownScript_0xbca32: ; 0xbca32 + 3writetext $29, $5ada + closetext + loadmovesprites + end +; 0xbca39 + +UnknownScript_0xbca39: ; 0xbca39 + 3writetext $29, $5d1d + closetext + loadmovesprites + end +; 0xbca40 + +UnknownScript_0xbca40: ; 0xbca40 + 3writetext $29, $6175 + closetext + loadmovesprites + end +; 0xbca47 + +UnknownScript_0xbca47: ; 0xbca47 + checkcode $17 + if_equal $d, $4a65 + if_equal $10, UnknownScript_0xbca6b + if_equal $18, UnknownScript_0xbca71 + if_equal $1c, UnknownScript_0xbca77 + if_equal $1d, UnknownScript_0xbca7d + if_equal $21, UnknownScript_0xbca83 + if_equal $22, UnknownScript_0xbca89 + 3writetext $6c, $5607 + keeptextopen + end +; 0xbca6b + +UnknownScript_0xbca6b: ; 0xbca6b + 3writetext $6c, $5c57 + keeptextopen + end +; 0xbca71 + +UnknownScript_0xbca71: ; 0xbca71 + 3writetext $29, $4c24 + keeptextopen + end +; 0xbca77 + +UnknownScript_0xbca77: ; 0xbca77 + 3writetext $29, $523a + keeptextopen + end +; 0xbca7d + +UnknownScript_0xbca7d: ; 0xbca7d + 3writetext $29, $54e3 + keeptextopen + end +; 0xbca83 + +UnknownScript_0xbca83: ; 0xbca83 + 3writetext $29, $5d4d + keeptextopen + end +; 0xbca89 + +UnknownScript_0xbca89: ; 0xbca89 + 3writetext $29, $5f37 + keeptextopen + end +; 0xbca8f + +UnknownScript_0xbca8f: ; 0xbca8f + checkcode $17 + if_equal $7, $4abd + if_equal $d, UnknownScript_0xbcac4 + if_equal $f, UnknownScript_0xbcacb + if_equal $10, UnknownScript_0xbcad2 + if_equal $18, UnknownScript_0xbcad9 + if_equal $1c, UnknownScript_0xbcae0 + if_equal $1d, UnknownScript_0xbcae7 + if_equal $20, UnknownScript_0xbcaee + if_equal $21, UnknownScript_0xbcaf5 + if_equal $22, UnknownScript_0xbcafc + if_equal $23, UnknownScript_0xbcb03 + 3writetext $6c, $4eff + closetext + loadmovesprites + end +; 0xbcac4 + +UnknownScript_0xbcac4: ; 0xbcac4 + 3writetext $6c, $564d + closetext + loadmovesprites + end +; 0xbcacb + +UnknownScript_0xbcacb: ; 0xbcacb + 3writetext $6c, $5978 + closetext + loadmovesprites + end +; 0xbcad2 + +UnknownScript_0xbcad2: ; 0xbcad2 + 3writetext $6c, $5c91 + closetext + loadmovesprites + end +; 0xbcad9 + +UnknownScript_0xbcad9: ; 0xbcad9 + 3writetext $29, $4c47 + closetext + loadmovesprites + end +; 0xbcae0 + +UnknownScript_0xbcae0: ; 0xbcae0 + 3writetext $29, $52a0 + closetext + loadmovesprites + end +; 0xbcae7 + +UnknownScript_0xbcae7: ; 0xbcae7 + 3writetext $29, $5513 + closetext + loadmovesprites + end +; 0xbcaee + +UnknownScript_0xbcaee: ; 0xbcaee + 3writetext $29, $5aff + closetext + loadmovesprites + end +; 0xbcaf5 + +UnknownScript_0xbcaf5: ; 0xbcaf5 + 3writetext $29, $5d9a + closetext + loadmovesprites + end +; 0xbcafc + +UnknownScript_0xbcafc: ; 0xbcafc + 3writetext $29, $5faa + closetext + loadmovesprites + end +; 0xbcb03 + +UnknownScript_0xbcb03: ; 0xbcb03 + 3writetext $29, $61c9 + closetext + loadmovesprites + end +; 0xbcb0a + +UnknownScript_0xbcb0a: ; 0xbcb0a + loadfont + checkcode $17 + if_equal $7, $4b1d + if_equal $f, UnknownScript_0xbcb23 + if_equal $20, UnknownScript_0xbcb29 + if_equal $23, UnknownScript_0xbcb2f + 3writetext $6c, $4f2f + keeptextopen + end +; 0xbcb23 + +UnknownScript_0xbcb23: ; 0xbcb23 + 3writetext $6c, $59be + keeptextopen + end +; 0xbcb29 + +UnknownScript_0xbcb29: ; 0xbcb29 + 3writetext $29, $5b3f + keeptextopen + end +; 0xbcb2f + +UnknownScript_0xbcb2f: ; 0xbcb2f + 3writetext $29, $6200 + keeptextopen + end +; 0xbcb35 + +UnknownScript_0xbcb35: ; 0xbcb35 + checkcode $17 + if_equal $6, $4b57 + if_equal $c, UnknownScript_0xbcb5c + if_equal $e, UnknownScript_0xbcb61 + if_equal $12, UnknownScript_0xbcb66 + if_equal $15, UnknownScript_0xbcb6b + if_equal $1a, UnknownScript_0xbcb70 + if_equal $1f, UnknownScript_0xbcb75 + if_equal $24, UnknownScript_0xbcb7a + 3writetext $6c, $4bb6 + end +; 0xbcb5c + +UnknownScript_0xbcb5c: ; 0xbcb5c + 3writetext $6c, $5239 + end +; 0xbcb61 + +UnknownScript_0xbcb61: ; 0xbcb61 + 3writetext $6c, $5690 + end +; 0xbcb66 + +UnknownScript_0xbcb66: ; 0xbcb66 + 3writetext $6c, $5ebe + end +; 0xbcb6b + +UnknownScript_0xbcb6b: ; 0xbcb6b + 3writetext $29, $4405 + end +; 0xbcb70 + +UnknownScript_0xbcb70: ; 0xbcb70 + 3writetext $29, $4c8c + end +; 0xbcb75 + +UnknownScript_0xbcb75: ; 0xbcb75 + 3writetext $29, $574a + end +; 0xbcb7a + +UnknownScript_0xbcb7a: ; 0xbcb7a + 3writetext $29, $6295 + end +; 0xbcb7f + +UnknownScript_0xbcb7f: ; 0xbcb7f + checkcode $17 + if_equal $6, $4ba1 + if_equal $c, UnknownScript_0xbcba6 + if_equal $e, UnknownScript_0xbcbab + if_equal $12, UnknownScript_0xbcbb0 + if_equal $15, UnknownScript_0xbcbb5 + if_equal $1a, UnknownScript_0xbcbba + if_equal $1f, UnknownScript_0xbcbbf + if_equal $24, UnknownScript_0xbcbc4 + 3writetext $6c, $4c37 + end +; 0xbcba6 + +UnknownScript_0xbcba6: ; 0xbcba6 + 3writetext $6c, $5314 + end +; 0xbcbab + +UnknownScript_0xbcbab: ; 0xbcbab + 3writetext $6c, $5710 + end +; 0xbcbb0 + +UnknownScript_0xbcbb0: ; 0xbcbb0 + 3writetext $6c, $5f4e + end +; 0xbcbb5 + +UnknownScript_0xbcbb5: ; 0xbcbb5 + 3writetext $29, $44db + end +; 0xbcbba + +UnknownScript_0xbcbba: ; 0xbcbba + 3writetext $29, $4d36 + end +; 0xbcbbf + +UnknownScript_0xbcbbf: ; 0xbcbbf + 3writetext $29, $57e3 + end +; 0xbcbc4 + +UnknownScript_0xbcbc4: ; 0xbcbc4 + 3writetext $29, $6316 + end +; 0xbcbc9 + +UnknownScript_0xbcbc9: ; 0xbcbc9 + 3writetext $6c, $49e1 + playsound $0093 + waitbutton + keeptextopen + end +; 0xbcbd3 + +UnknownScript_0xbcbd3: ; 0xbcbd3 + checkcode $17 + if_equal $6, $4bf5 + if_equal $c, UnknownScript_0xbcbfc + if_equal $e, UnknownScript_0xbcc03 + if_equal $12, UnknownScript_0xbcc0a + if_equal $15, UnknownScript_0xbcc11 + if_equal $1a, UnknownScript_0xbcc18 + if_equal $1f, UnknownScript_0xbcc1f + if_equal $24, UnknownScript_0xbcc26 + 3writetext $6c, $4c9b + closetext + loadmovesprites + end +; 0xbcbfc + +UnknownScript_0xbcbfc: ; 0xbcbfc + 3writetext $6c, $5392 + closetext + loadmovesprites + end +; 0xbcc03 + +UnknownScript_0xbcc03: ; 0xbcc03 + 3writetext $6c, $5755 + closetext + loadmovesprites + end +; 0xbcc0a + +UnknownScript_0xbcc0a: ; 0xbcc0a + 3writetext $6c, $5faa + closetext + loadmovesprites + end +; 0xbcc11 + +UnknownScript_0xbcc11: ; 0xbcc11 + 3writetext $29, $451d + closetext + loadmovesprites + end +; 0xbcc18 + +UnknownScript_0xbcc18: ; 0xbcc18 + 3writetext $29, $4d72 + closetext + loadmovesprites + end +; 0xbcc1f + +UnknownScript_0xbcc1f: ; 0xbcc1f + 3writetext $29, $5820 + closetext + loadmovesprites + end +; 0xbcc26 + +UnknownScript_0xbcc26: ; 0xbcc26 + 3writetext $29, $6359 + closetext + loadmovesprites + end +; 0xbcc2d + +UnknownScript_0xbcc2d: ; 0xbcc2d + checkcode $17 + if_equal $6, $4c4f + if_equal $c, UnknownScript_0xbcc56 + if_equal $e, UnknownScript_0xbcc5d + if_equal $12, UnknownScript_0xbcc64 + if_equal $15, UnknownScript_0xbcc6b + if_equal $1a, UnknownScript_0xbcc72 + if_equal $1f, UnknownScript_0xbcc79 + if_equal $24, UnknownScript_0xbcc80 + 3writetext $6c, $4ce0 + closetext + loadmovesprites + end +; 0xbcc56 + +UnknownScript_0xbcc56: ; 0xbcc56 + 3writetext $6c, $53af + closetext + loadmovesprites + end +; 0xbcc5d + +UnknownScript_0xbcc5d: ; 0xbcc5d + 3writetext $6c, $578a + closetext + loadmovesprites + end +; 0xbcc64 + +UnknownScript_0xbcc64: ; 0xbcc64 + 3writetext $6c, $5fdd + closetext + loadmovesprites + end +; 0xbcc6b + +UnknownScript_0xbcc6b: ; 0xbcc6b + 3writetext $29, $4542 + closetext + loadmovesprites + end +; 0xbcc72 + +UnknownScript_0xbcc72: ; 0xbcc72 + 3writetext $29, $4dcd + closetext + loadmovesprites + end +; 0xbcc79 + +UnknownScript_0xbcc79: ; 0xbcc79 + 3writetext $29, $5842 + closetext + loadmovesprites + end +; 0xbcc80 + +UnknownScript_0xbcc80: ; 0xbcc80 + 3writetext $29, $638c + closetext + loadmovesprites + end +; 0xbcc87 + +UnknownScript_0xbcc87: ; 0xbcc87 + checkcode $17 + if_equal $6, $4ca9 + if_equal $c, UnknownScript_0xbccb0 + if_equal $e, UnknownScript_0xbccb7 + if_equal $12, UnknownScript_0xbccbe + if_equal $15, UnknownScript_0xbccc5 + if_equal $1a, UnknownScript_0xbcccc + if_equal $1f, UnknownScript_0xbccd3 + if_equal $24, UnknownScript_0xbccda + 3writetext $6c, $4d0b + closetext + loadmovesprites + end +; 0xbccb0 + +UnknownScript_0xbccb0: ; 0xbccb0 + 3writetext $6c, $53e4 + closetext + loadmovesprites + end +; 0xbccb7 + +UnknownScript_0xbccb7: ; 0xbccb7 + 3writetext $6c, $57ba + closetext + loadmovesprites + end +; 0xbccbe + +UnknownScript_0xbccbe: ; 0xbccbe + 3writetext $6c, $5ffa + closetext + loadmovesprites + end +; 0xbccc5 + +UnknownScript_0xbccc5: ; 0xbccc5 + 3writetext $29, $4573 + closetext + loadmovesprites + end +; 0xbcccc + +UnknownScript_0xbcccc: ; 0xbcccc + 3writetext $29, $4e01 + closetext + loadmovesprites + end +; 0xbccd3 + +UnknownScript_0xbccd3: ; 0xbccd3 + 3writetext $29, $5881 + closetext + loadmovesprites + end +; 0xbccda + +UnknownScript_0xbccda: ; 0xbccda + 3writetext $29, $63cc + closetext + loadmovesprites + end +; 0xbcce1 + +UnknownScript_0xbcce1: ; 0xbcce1 + checkcode $17 + if_equal $c, $4cff + if_equal $e, UnknownScript_0xbcd06 + if_equal $12, UnknownScript_0xbcd0d + if_equal $15, UnknownScript_0xbcd14 + if_equal $1a, UnknownScript_0xbcd1b + if_equal $1f, UnknownScript_0xbcd22 + if_equal $24, UnknownScript_0xbcd29 + 3writetext $6c, $5409 + closetext + loadmovesprites + end +; 0xbcd06 + +UnknownScript_0xbcd06: ; 0xbcd06 + 3writetext $6c, $57de + closetext + loadmovesprites + end +; 0xbcd0d + +UnknownScript_0xbcd0d: ; 0xbcd0d + 3writetext $6c, $601f + closetext + loadmovesprites + end +; 0xbcd14 + +UnknownScript_0xbcd14: ; 0xbcd14 + 3writetext $29, $4595 + closetext + loadmovesprites + end +; 0xbcd1b + +UnknownScript_0xbcd1b: ; 0xbcd1b + 3writetext $29, $4e21 + closetext + loadmovesprites + end +; 0xbcd22 + +UnknownScript_0xbcd22: ; 0xbcd22 + 3writetext $29, $58a3 + closetext + loadmovesprites + end +; 0xbcd29 + +UnknownScript_0xbcd29: ; 0xbcd29 + 3writetext $29, $63f1 + closetext + loadmovesprites + end +; 0xbcd30 + +UnknownScript_0xbcd30: ; 0xbcd30 + checkcode $17 + if_equal $6, $4d42 + if_equal $15, UnknownScript_0xbcd48 + if_equal $1a, UnknownScript_0xbcd4e + if_equal $1f, UnknownScript_0xbcd54 + 3writetext $6c, $4d2c + keeptextopen + end +; 0xbcd48 + +UnknownScript_0xbcd48: ; 0xbcd48 + 3writetext $29, $45c9 + keeptextopen + end +; 0xbcd4e + +UnknownScript_0xbcd4e: ; 0xbcd4e + 3writetext $29, $4e4c + keeptextopen + end +; 0xbcd54 + +UnknownScript_0xbcd54: ; 0xbcd54 + 3writetext $29, $58d5 + keeptextopen + end +; 0xbcd5a + +UnknownScript_0xbcd5a: ; 0xbcd5a + checkcode $17 + if_equal $6, $4d70 + if_equal $15, UnknownScript_0xbcd77 + if_equal $1a, UnknownScript_0xbcd7e + if_equal $1f, UnknownScript_0xbcd85 + if_equal $24, UnknownScript_0xbcd8c + 3writetext $6c, $4d69 + closetext + loadmovesprites + end +; 0xbcd77 + +UnknownScript_0xbcd77: ; 0xbcd77 + 3writetext $29, $4603 + closetext + loadmovesprites + end +; 0xbcd7e + +UnknownScript_0xbcd7e: ; 0xbcd7e + 3writetext $29, $4e8f + closetext + loadmovesprites + end +; 0xbcd85 + +UnknownScript_0xbcd85: ; 0xbcd85 + 3writetext $29, $5914 + closetext + loadmovesprites + end +; 0xbcd8c + +UnknownScript_0xbcd8c: ; 0xbcd8c + 3writetext $29, $6411 + closetext + loadmovesprites + end +; 0xbcd93 + +UnknownScript_0xbcd93: ; 0xbcd93 + checkcode $17 + if_equal $24, $4d99 + loadfont + 3writetext $29, $6454 + keeptextopen + end +; 0xbcda0 + +UnknownScript_0xbcda0: ; 0xbcda0 + mapnametotext $0 + loadfont + 3writetext $6c, $474e + closetext + loadmovesprites + end +; 0xbcdaa + +UnknownScript_0xbcdaa: ; 0xbcdaa + mapnametotext $0 + loadfont + 3writetext $6c, $474e + keeptextopen + 3writetext $6c, $475c + closetext + loadmovesprites + end +; 0xbcdb9 + +UnknownScript_0xbcdb9: ; 0xbcdb9 + waitbutton + 3writetext $6c, $4648 + playsound $0001 + waitbutton + end +; 0xbcdc3 + +UnknownScript_0xbcdc3: ; 0xbcdc3 + waitbutton + 3writetext $6c, $4648 + playsound $0096 + waitbutton + end +; 0xbcdcd + +UnknownScript_0xbcdcd: ; 0xbcdcd + faceplayer + loadfont + 3writetext $6c, $477f + keeptextopen + checkitem COIN_CASE + iftrue UnknownScript_0xbcde0 + 3writetext $6c, $479c + closetext + loadmovesprites + end +; 0xbcde0 + +UnknownScript_0xbcde0: ; 0xbcde0 + 3writetext $6c, $47e3 + special $0050 + loadmenudata MenuDataHeader_0xbce54 + interpretmenu2 + writebackup + if_equal $1, UnknownScript_0xbcdf7 + if_equal $2, UnknownScript_0xbce1b + 2jump UnknownScript_0xbce4d +; 0xbcdf7 + +UnknownScript_0xbcdf7: ; 0xbcdf7 + checkcoins 9949 + if_equal $0, UnknownScript_0xbce46 + checkmoney $0, 1000 + if_equal $2, UnknownScript_0xbce3f + givecoins 50 + takemoney $0, 1000 + waitbutton + playsound $0022 + 3writetext $6c, $4830 + closetext + 2jump $4de4 +; 0xbce1b + +UnknownScript_0xbce1b: ; 0xbce1b + checkcoins 9499 + if_equal $0, UnknownScript_0xbce46 + checkmoney $0, 10000 + if_equal $2, UnknownScript_0xbce3f + givecoins 500 + takemoney $0, 10000 + waitbutton + playsound $0022 + 3writetext $6c, $484f + closetext + 2jump $4de4 +; 0xbce3f + +UnknownScript_0xbce3f: ; 0xbce3f + 3writetext $6c, $486f + closetext + loadmovesprites + end +; 0xbce46 + +UnknownScript_0xbce46: ; 0xbce46 + 3writetext $6c, $488c + closetext + loadmovesprites + end +; 0xbce4d + +UnknownScript_0xbce4d: ; 0xbce4d + 3writetext $6c, $48ad + closetext + loadmovesprites + end +; 0xbce54 + + +MenuDataHeader_0xbce54: ; 0xbce54 + db $40 ; flags + db 04, 00 ; start coords + db 11, 15 ; end coords + dw MenuData2_0xbce5c + db 1 ; default option +; 0xbce5c + +MenuData2_0xbce5c: ; 0xbce5c + db $80 ; flags + db 3 ; items + db " 50 : ¥1000@" + db "500 : ¥10000@" + db "CANCEL@" +; 0xbce7f + + +UnknownScript_0xbce7f: ; 0xbce7f + faceplayer + loadfont + special $0059 + if_greater_than $32, UnknownScript_0xbce9a + if_greater_than $96, UnknownScript_0xbce93 + 3writetext $6c, $492a + closetext + loadmovesprites + end +; 0xbce93 + +UnknownScript_0xbce93: ; 0xbce93 + 3writetext $6c, $4954 + closetext + loadmovesprites + end +; 0xbce9a + +UnknownScript_0xbce9a: ; 0xbce9a + 3writetext $6c, $4989 + closetext + loadmovesprites + end +; 0xbcea1 + +MovementData_0xbcea1: ; bcea1 + step_right + step_down + turn_head_up + step_end +; bcea5 + +UnusedPhoneScript: ; 0xbcea5 + 3writetext BANK(UnusedPhoneText), UnusedPhoneText + end + +MomPhoneScript: ; 0xbceaa + checkbit1 $0040 + iftrue .bcec5 + checkbit1 $0041 ; if dude talked to you, then you left home without talking to mom + iftrue MomPhoneLectureScript + checkbit1 $001f + iftrue MomPhoneNoGymQuestScript + checkbit1 $001a + iftrue MomPhoneNoPokedexScript + 2jump MomPhoneNoPokemonScript + +.bcec5 ; 0xbcec5 + checkbit1 $0007 + iftrue MomPhoneHangUpScript + 3writetext BANK(MomPhoneGreetingText), MomPhoneGreetingText + keeptextopen + mapnametotext $0 + checkcode $f + if_equal $1, UnknownScript_0xbcee7 + if_equal $2, $4f27 + 2jump UnknownScript_0xbcf2f + +UnknownScript_0xbcedf: ; 0xbcedf + 3writetext $6d, $4021 + keeptextopen + 2jump UnknownScript_0xbcf37 + +UnknownScript_0xbcee7: ; 0xbcee7 + checkcode $c + if_equal GROUP_NEW_BARK_TOWN, .newbark + if_equal GROUP_CHERRYGROVE_CITY, .cherrygrove + if_equal GROUP_VIOLET_CITY, .violet + if_equal GROUP_AZALEA_TOWN, .azalea + if_equal GROUP_GOLDENROD_CITY, .goldenrod + 3writetext BANK(MomPhoneGenericAreaText), MomPhoneGenericAreaText + keeptextopen + 2jump UnknownScript_0xbcf37 + +.newbark ; 0xbcf05 + 3writetext BANK(MomPhoneNewBarkText), MomPhoneNewBarkText + keeptextopen + 2jump UnknownScript_0xbcf37 + +.cherrygrove ; 0xbcf0d + 3writetext BANK(MomPhoneCherrygroveText), MomPhoneCherrygroveText + keeptextopen + 2jump UnknownScript_0xbcf37 + +.violet ; 0xbcf15 + displaylocation $7 ; sprout tower + 3call $3, UnknownScript_0xbcedf +.azalea ; 0xbcf1b + displaylocation $d ; slowpoke well + 3call $3, UnknownScript_0xbcedf +.goldenrod ; 0xbcf21 + displaylocation $11 ; radio tower + 3call $3, UnknownScript_0xbcedf + 3writetext $6d, $411c + keeptextopen + 2jump UnknownScript_0xbcf37 + +UnknownScript_0xbcf2f: ; 0xbcf2f + 3writetext $6d, $4150 + keeptextopen + 2jump UnknownScript_0xbcf37 + +UnknownScript_0xbcf37: ; 0xbcf37 + checkbit2 $0008 + iffalse UnknownScript_0xbcf49 + checkmoney $1, 0 + if_equal $0, UnknownScript_0xbcf55 + 2jump UnknownScript_0xbcf63 + +UnknownScript_0xbcf49: ; 0xbcf49 + checkmoney $1, 0 + if_equal $0, UnknownScript_0xbcf79 + 2jump UnknownScript_0xbcf6e + +UnknownScript_0xbcf55: ; 0xbcf55 + readmoney $1, $0 + 3writetext $6d, $41a7 + yesorno + iftrue MomPhoneSaveMoneyScript + 2jump MomPhoneWontSaveMoneyScript + +UnknownScript_0xbcf63: ; 0xbcf63 + 3writetext $6d, $41ea + yesorno + iftrue MomPhoneSaveMoneyScript + 2jump MomPhoneWontSaveMoneyScript + +UnknownScript_0xbcf6e: ; 0xbcf6e + 3writetext $6d, $420d + yesorno + iftrue MomPhoneSaveMoneyScript + 2jump MomPhoneWontSaveMoneyScript + +UnknownScript_0xbcf79: ; 0xbcf79 + readmoney $1, $0 + 3writetext $6d, $4249 + yesorno + iftrue MomPhoneSaveMoneyScript + 2jump MomPhoneWontSaveMoneyScript + +MomPhoneSaveMoneyScript: ; 0xbcf87 + setbit2 $0008 + 3writetext $6d, $4289 + keeptextopen + 2jump MomPhoneHangUpScript + +MomPhoneWontSaveMoneyScript: ; 0xbcf92 + clearbit2 $0008 + 3writetext BANK(MomPhoneWontSaveMoneyText), MomPhoneWontSaveMoneyText + keeptextopen + 2jump MomPhoneHangUpScript + +MomPhoneHangUpScript: ; 0xbcf9d + 3writetext BANK(MomPhoneHangUpText), MomPhoneHangUpText + end + +MomPhoneNoPokemonScript: ; 0xbcfa2 + 3writetext BANK(MomPhoneNoPokemonText), MomPhoneNoPokemonText + end + +MomPhoneNoPokedexScript: ; 0xbcfa7 + 3writetext BANK(MomPhoneNoPokedexText), MomPhoneNoPokedexText + end + +MomPhoneNoGymQuestScript: ; 0xbcfac + 3writetext BANK(MomPhoneNoGymQuestText), MomPhoneNoGymQuestText + end + +MomPhoneLectureScript: ; 0xbcfb1 + setbit1 $0040 + setbit2 $0009 + specialphonecall $0000 + 3writetext BANK(MomPhoneLectureText), MomPhoneLectureText + yesorno + iftrue MomPhoneSaveMoneyScript + 2jump MomPhoneWontSaveMoneyScript + +BillPhoneScript1: ; 0xbcfc5 + checktime $2 + iftrue .daygreet + checktime $4 + iftrue .nitegreet + 3writetext BANK(BillPhoneMornGreetingText), BillPhoneMornGreetingText + keeptextopen + 2jump .main + +.daygreet ; 0xbcfd7 + 3writetext BANK(BillPhoneDayGreetingText), BillPhoneDayGreetingText + keeptextopen + 2jump .main + +.nitegreet ; 0xbcfdf + 3writetext BANK(BillPhoneNiteGreetingText), BillPhoneNiteGreetingText + keeptextopen + 2jump .main + +.main ; 0xbcfe7 + 3writetext BANK(BillPhoneGeneriText), BillPhoneGeneriText + keeptextopen + checkcode $10 + RAM2MEM $0 + if_equal $0, .full + if_greater_than $6, .nearlyfull + 3writetext BANK(BillPhoneNotFullText), BillPhoneNotFullText + end + +.nearlyfull ; 0xbcffd + 3writetext BANK(BillPhoneNearlyFullText), BillPhoneNearlyFullText + end + +.full ; 0xbd002 + 3writetext BANK(BillPhoneFullText), BillPhoneFullText + end + +BillPhoneScript2: ; 0xbd007 + 3writetext BANK(BillPhoneNewlyFullText), BillPhoneNewlyFullText + closetext + end + +ElmPhoneScript1: ; 0xbd00d + checkcode $14 + if_equal $1, .pokerus + checkbit1 $0055 + iftrue .discovery + checkbit1 $002d + iffalse .next + checkbit1 $0054 + iftrue .egghatched +.next + checkbit1 $002d + iftrue .eggunhatched + checkbit1 $0701 + iftrue .assistant + checkbit1 $001f + iftrue .checkingegg + checkbit1 $0043 + iftrue .stolen + checkbit1 $001e + iftrue .sawmrpokemon + 3writetext BANK(ElmPhoneStartText), ElmPhoneStartText + end + +.sawmrpokemon ; 0xbd048 + 3writetext BANK(ElmPhoneSawMrPokemonText), ElmPhoneSawMrPokemonText + end + +.stolen ; 0xbd04d + 3writetext BANK(ElmPhonePokemonStolenText), ElmPhonePokemonStolenText + end + +.checkingegg ; 0xbd052 + 3writetext BANK(ElmPhoneCheckingEggText), ElmPhoneCheckingEggText + end + +.assistant ; 0xbd057 + 3writetext BANK(ElmPhoneAssistantText), ElmPhoneAssistantText + end + +.eggunhatched ; 0xbd05c + 3writetext BANK(ElmPhoneEggUnhatchedText), ElmPhoneEggUnhatchedText + end + +.egghatched ; 0xbd061 + 3writetext BANK(ElmPhoneEggHatchedText), ElmPhoneEggHatchedText + setbit1 $0077 + end + +.discovery ; 0xbd069 + random $2 + if_equal $0, .nextdiscovery + 3writetext BANK(ElmPhoneDiscovery1Text), ElmPhoneDiscovery1Text + end + +.nextdiscovery ; 0xbd074 + 3writetext BANK(ElmPhoneDiscovery2Text), ElmPhoneDiscovery2Text + end + +.pokerus ; 0xbd079 + 3writetext BANK(ElmPhonePokerusText), ElmPhonePokerusText + specialphonecall $0000 + end + +ElmPhoneScript2: ; 0xbd081 + checkcode $14 + if_equal $2, .disaster + if_equal $3, .assistant + if_equal $4, .rocket + if_equal $5, .gift + if_equal $8, .gift + 3writetext BANK(ElmPhonePokerusText), ElmPhonePokerusText + specialphonecall $0000 + end + +.disaster ; 0xbd09f + 3writetext BANK(ElmPhoneDisasterText), ElmPhoneDisasterText + specialphonecall $0000 + setbit1 $0043 + end + +.assistant ; 0xbd0aa + 3writetext BANK(ElmPhoneEggAssistantText), ElmPhoneEggAssistantText + specialphonecall $0000 + clearbit1 $0700 + setbit1 $0701 + end + +.rocket ; 0xbd0b8 + 3writetext BANK(ElmPhoneRocketText), ElmPhoneRocketText + specialphonecall $0000 + end + +.gift ; 0xbd0c0 + 3writetext BANK(ElmPhoneGiftText), ElmPhoneGiftText + specialphonecall $0000 + end + +.unused ; 0xbd0c8 + 3writetext BANK(ElmPhoneUnusedText), ElmPhoneUnusedText + specialphonecall $0000 + end +; bd0d0 + diff --git a/main.asm b/main.asm index 003fb45c9..647589de4 100644 --- a/main.asm +++ b/main.asm @@ -72838,2625 +72838,7 @@ INCBIN "baserom.gbc", $b9e80, $b9e8b - $b9e80 SECTION "bank2F",ROMX,BANK[$2F] -StdScripts: ; bc000 - dbw BANK(PokeCenterNurseScript), PokeCenterNurseScript - dbw BANK(UnknownScript_0xbc162), UnknownScript_0xbc162 - dbw BANK(UnknownScript_0xbc166), UnknownScript_0xbc166 - dbw BANK(UnknownScript_0xbc16a), UnknownScript_0xbc16a - dbw BANK(UnknownScript_0xbc16e), UnknownScript_0xbc16e - dbw BANK(UnknownScript_0xbc172), UnknownScript_0xbc172 - dbw BANK(UnknownScript_0xbc176), UnknownScript_0xbc176 - dbw BANK(UnknownScript_0xbc17a), UnknownScript_0xbc17a - dbw BANK(UnknownScript_0xbc185), UnknownScript_0xbc185 - dbw BANK(UnknownScript_0xbc189), UnknownScript_0xbc189 - dbw BANK(UnknownScript_0xbc191), UnknownScript_0xbc191 - dbw BANK(UnknownScript_0xbc195), UnknownScript_0xbc195 - dbw BANK(UnknownScript_0xbc19d), UnknownScript_0xbc19d - dbw BANK(UnknownScript_0xbc1a5), UnknownScript_0xbc1a5 - dbw BANK(UnknownScript_0xbc1b8), UnknownScript_0xbc1b8 - dbw BANK(UnknownScript_0xbc1bc), UnknownScript_0xbc1bc - dbw BANK(UnknownScript_0xbc1c0), UnknownScript_0xbc1c0 - dbw BANK(UnknownScript_0xbc1c4), UnknownScript_0xbc1c4 - dbw BANK(UnknownScript_0xbc23e), UnknownScript_0xbc23e - dbw BANK(UnknownScript_0xbc242), UnknownScript_0xbc242 - dbw BANK(UnknownScript_0xbc1af), UnknownScript_0xbc1af - dbw BANK(UnknownScript_0xbc1c8), UnknownScript_0xbc1c8 - dbw BANK(UnknownScript_0xbc25c), UnknownScript_0xbc25c - dbw BANK(UnknownScript_0xbc274), UnknownScript_0xbc274 - dbw BANK(UnknownScript_0xbc3db), UnknownScript_0xbc3db - dbw BANK(UnknownScript_0xbc574), UnknownScript_0xbc574 - dbw BANK(UnknownScript_0xbc62d), UnknownScript_0xbc62d - dbw BANK(UnknownScript_0xbc6e6), UnknownScript_0xbc6e6 - dbw BANK(UnknownScript_0xbc6f0), UnknownScript_0xbc6f0 - dbw BANK(UnknownScript_0xbc7ce), UnknownScript_0xbc7ce - dbw BANK(UnknownScript_0xbc8ac), UnknownScript_0xbc8ac - dbw BANK(UnknownScript_0xbc98a), UnknownScript_0xbc98a - dbw BANK(UnknownScript_0xbca47), UnknownScript_0xbca47 - dbw BANK(UnknownScript_0xbca8f), UnknownScript_0xbca8f - dbw BANK(UnknownScript_0xbcb0a), UnknownScript_0xbcb0a - dbw BANK(UnknownScript_0xbcb35), UnknownScript_0xbcb35 - dbw BANK(UnknownScript_0xbcb7f), UnknownScript_0xbcb7f - dbw BANK(UnknownScript_0xbcbc9), UnknownScript_0xbcbc9 - dbw BANK(UnknownScript_0xbcbd3), UnknownScript_0xbcbd3 - dbw BANK(UnknownScript_0xbcc2d), UnknownScript_0xbcc2d - dbw BANK(UnknownScript_0xbcc87), UnknownScript_0xbcc87 - dbw BANK(UnknownScript_0xbcce1), UnknownScript_0xbcce1 - dbw BANK(UnknownScript_0xbcd30), UnknownScript_0xbcd30 - dbw BANK(UnknownScript_0xbcd5a), UnknownScript_0xbcd5a - dbw BANK(UnknownScript_0xbcd93), UnknownScript_0xbcd93 - dbw BANK(UnknownScript_0xbcda0), UnknownScript_0xbcda0 - dbw BANK(UnknownScript_0xbcdaa), UnknownScript_0xbcdaa - dbw BANK(UnknownScript_0xbcdb9), UnknownScript_0xbcdb9 - dbw BANK(UnknownScript_0xbcdc3), UnknownScript_0xbcdc3 - dbw BANK(UnknownScript_0xbc1a9), UnknownScript_0xbc1a9 - dbw BANK(UnknownScript_0xbcdcd), UnknownScript_0xbcdcd - dbw BANK(UnknownScript_0xbce7f), UnknownScript_0xbce7f -; bc09c - -PokeCenterNurseScript: ; bc09c -; Talking to a nurse in a Pokemon Center - - loadfont -; The nurse has different text for: -; Morn - checktime $1 - iftrue .morn -; Day - checktime $2 - iftrue .day -; Nite - checktime $4 - iftrue .nite -; If somehow it's not a time of day at all, we skip the introduction - 2jump .heal - -.morn -; Different text if we're in the com center - checkbit1 $032a - iftrue .morn_comcenter -; Good morning! Welcome to ... - 3writetext BANK(UnknownText_0x1b0000), UnknownText_0x1b0000 - keeptextopen - 2jump .heal -.morn_comcenter -; Good morning! This is the ... - 3writetext BANK(UnknownText_0x1b008a), UnknownText_0x1b008a - keeptextopen - 2jump .heal - -.day -; Different text if we're in the com center - checkbit1 $032a - iftrue .day_comcenter -; Hello! Welcome to ... - 3writetext BANK(UnknownText_0x1b002b), UnknownText_0x1b002b - keeptextopen - 2jump .heal -.day_comcenter -; Hello! This is the ... - 3writetext BANK(UnknownText_0x1b00d6), UnknownText_0x1b00d6 - keeptextopen - 2jump .heal - -.nite -; Different text if we're in the com center - checkbit1 $032a - iftrue .nite_comcenter -; Good evening! You're out late. ... - 3writetext BANK(UnknownText_0x1b004f), UnknownText_0x1b004f - keeptextopen - 2jump .heal -.nite_comcenter -; Good to see you working so late. ... - 3writetext BANK(UnknownText_0x1b011b), UnknownText_0x1b011b - keeptextopen - 2jump .heal - -.heal -; If we come back, don't welcome us to the com center again - clearbit1 $032a -; Ask if you want to heal - 3writetext BANK(UnknownText_0x1b017a), UnknownText_0x1b017a - yesorno - iffalse .end -; Go ahead and heal - 3writetext BANK(UnknownText_0x1b01bd), UnknownText_0x1b01bd - pause 20 - special $009d -; Turn to the machine - spriteface $fe, $2 - pause 10 - special $001b - playmusic $0000 - writebyte $0 - special $003e - pause 30 - special $003d - spriteface $fe, $0 - pause 10 -; Has Elm already phoned you about Pokerus? - checkphonecall - iftrue .done -; Has Pokerus already been found in the Pokecenter? - checkbit2 $000d - iftrue .done -; Check for Pokerus - special $004e ; SPECIAL_CHECKPOKERUS - iftrue .pokerus -.done -; Thank you for waiting. ... - 3writetext BANK(UnknownText_0x1b01d7), UnknownText_0x1b01d7 - pause 20 -.end -; We hope to see you again. - 3writetext BANK(UnknownText_0x1b020b), UnknownText_0x1b020b -; Curtsy - spriteface $fe, $1 - pause 10 - spriteface $fe, $0 - pause 10 -; And we're out - closetext - loadmovesprites - end - -.pokerus -; Different text for com center (excludes 'in a Pokemon Center') -; Since flag $32a is cleared when healing, -; this text is never actually seen - checkbit1 $032a - iftrue .pokerus_comcenter -; Your Pokemon appear to be infected ... - 3writetext BANK(UnknownText_0x1b0241), UnknownText_0x1b0241 - closetext - loadmovesprites - 2jump .endpokerus -.pokerus_comcenter -; Your Pokemon appear to be infected ... - 3writetext BANK(UnknownText_0x1b02d6), UnknownText_0x1b02d6 - closetext - loadmovesprites -.endpokerus -; Don't tell us about Pokerus again - setbit2 $000d -; Trigger Elm's Pokerus phone call - specialphonecall $0001 - end -; bc162 - -UnknownScript_0xbc162: ; 0xbc162 - 3jumptext $6c, $435a -; 0xbc166 - -UnknownScript_0xbc166: ; 0xbc166 - 3jumptext $6c, $4378 -; 0xbc16a - -UnknownScript_0xbc16a: ; 0xbc16a - 3jumptext $6c, $43a3 -; 0xbc16e - -UnknownScript_0xbc16e: ; 0xbc16e - 3jumptext $6c, $43d9 -; 0xbc172 - -UnknownScript_0xbc172: ; 0xbc172 - 3jumptext $6c, $4448 -; 0xbc176 - -UnknownScript_0xbc176: ; 0xbc176 - 3jumptext $6c, $4472 -; 0xbc17a - -UnknownScript_0xbc17a: ; 0xbc17a - loadfont - 3writetext $6c, $448d - closetext - special $0026 - loadmovesprites - end -; 0xbc185 - -UnknownScript_0xbc185: ; 0xbc185 - 3jumptext $6c, $44a0 -; 0xbc189 - -UnknownScript_0xbc189: ; 0xbc189 - loadfont - 3writetext $6c, $44be - closetext - loadmovesprites - end -; 0xbc191 - -UnknownScript_0xbc191: ; 0xbc191 - 3jumptext $6c, $44c9 -; 0xbc195 - -UnknownScript_0xbc195: ; 0xbc195 - loadfont - writebyte $0 - special $0028 - loadmovesprites - end -; 0xbc19d - -UnknownScript_0xbc19d: ; 0xbc19d - loadfont - writebyte $4 - special $0028 - loadmovesprites - end -; 0xbc1a5 - -UnknownScript_0xbc1a5: ; 0xbc1a5 - 3jumptext $6c, $4526 -; 0xbc1a9 - -UnknownScript_0xbc1a9: ; 0xbc1a9 - loadfont - special $001c - loadmovesprites - end -; 0xbc1af - -UnknownScript_0xbc1af: ; 0xbc1af - playsound $0008 - pause 15 - playsound $0027 - end -; 0xbc1b8 - -UnknownScript_0xbc1b8: ; 0xbc1b8 - 3jump BANK(UnknownScript_0xcd4b), UnknownScript_0xcd4b -; 0xbc1bc - -UnknownScript_0xbc1bc: ; 0xbc1bc - 3jump BANK(UnknownScript_0xcf5d), UnknownScript_0xcf5d -; 0xbc1c0 - -UnknownScript_0xbc1c0: ; 0xbc1c0 - 3jumptext $6c, $457f -; 0xbc1c4 - -UnknownScript_0xbc1c4: ; 0xbc1c4 - 3jumptext $6c, $459c -; 0xbc1c8 - -UnknownScript_0xbc1c8: ; 0xbc1c8 - checkcode $b - if_equal $1, UnknownScript_0xbc1e7 - if_equal $2, UnknownScript_0xbc1ec - if_equal $3, UnknownScript_0xbc1f1 - if_equal $4, UnknownScript_0xbc1f6 - if_equal $5, UnknownScript_0xbc1fb - if_equal $6, UnknownScript_0xbc200 - stringtotext UnknownRawText_0xbc205, $0 - end -; 0xbc1e7 - -UnknownScript_0xbc1e7: ; 0xbc1e7 - stringtotext UnknownRawText_0xbc20c, $0 - end -; 0xbc1ec - -UnknownScript_0xbc1ec: ; 0xbc1ec - stringtotext UnknownRawText_0xbc213, $0 - end -; 0xbc1f1 - -UnknownScript_0xbc1f1: ; 0xbc1f1 - stringtotext UnknownRawText_0xbc21b, $0 - end -; 0xbc1f6 - -UnknownScript_0xbc1f6: ; 0xbc1f6 - stringtotext UnknownRawText_0xbc225, $0 - end -; 0xbc1fb - -UnknownScript_0xbc1fb: ; 0xbc1fb - stringtotext UnknownRawText_0xbc22e, $0 - end -; 0xbc200 - -UnknownScript_0xbc200: ; 0xbc200 - stringtotext UnknownRawText_0xbc235, $0 - end -; 0xbc205 - -UnknownRawText_0xbc205: ; bc205 - db "SUNDAY@" -; bc20c - -UnknownRawText_0xbc20c: ; bc20c - db "MONDAY@" -; bc213 - -UnknownRawText_0xbc213: ; bc213 - db "TUESDAY@" -; bc21b - -UnknownRawText_0xbc21b: ; bc21b - db "WEDNESDAY@" -; bc225 - -UnknownRawText_0xbc225: ; bc225 - db "THURSDAY@" -; bc22e - -UnknownRawText_0xbc22e: ; bc22e - db "FRIDAY@" -; bc235 - -UnknownRawText_0xbc235: ; bc235 - db "SATURDAY@" -; bc23e - -UnknownScript_0xbc23e: ; 0xbc23e - clearbit1 $06cd - end -; 0xbc242 - -UnknownScript_0xbc242: ; 0xbc242 - setbit2 $0013 - setbit1 $06cf - setbit1 $06d1 - clearbit1 $06ce - clearbit1 $0025 - setbit1 $0756 - specialphonecall $0004 - domaptrigger GROUP_MAHOGANY_TOWN, MAP_MAHOGANY_TOWN, $1 - end -; 0xbc25c - -UnknownScript_0xbc25c: ; 0xbc25c - special $0034 - 2call UnknownScript_0xbc380 - setbit1 $0747 - clearbit1 $0748 - setbit1 $02d2 - warp GROUP_ROUTE_36_NATIONAL_PARK_GATE, MAP_ROUTE_36_NATIONAL_PARK_GATE, $0, $4 - applymovement $0, MovementData_0xbcea1 - -UnknownScript_0xbc274: ; bc274 - clearbit2 $0011 - clearbit1 $02d2 - clearbit1 $0313 - clearbit1 $0314 - clearbit1 $0315 - clearbit1 $0316 - loadfont - 3writetext $6c, $45bf - closetext - special $0014 - RAM2MEM $0 - if_equal $1, UnknownScript_0xbc31e - if_equal $2, UnknownScript_0xbc332 - if_equal $3, UnknownScript_0xbc343 - 3writetext $6c, $4681 - keeptextopen - waitbutton - verbosegiveitem BERRY, 1 - iffalse UnknownScript_0xbc375 - 3writetext $6c, $46b7 - keeptextopen - 2jump $42b6 -; 0xbc2b1 - -UnknownScript_0xbc2b1: ; 0xbc2b1 - 3writetext $6c, $465b - keeptextopen - checkbit1 $0308 - iffalse $42c4 - 3writetext $6c, $46d9 - closetext - special $0017 - special $0015 - if_equal $0, $42d4 - if_equal $2, $42d4 - 3writetext $6c, $470d - closetext - loadmovesprites - dotrigger $0 - domaptrigger GROUP_ROUTE_35_NATIONAL_PARK_GATE, MAP_ROUTE_35_NATIONAL_PARK_GATE, $0 - setbit1 $0716 - setbit1 $0717 - setbit1 $0718 - setbit1 $0719 - setbit1 $071a - setbit1 $071b - setbit1 $071c - setbit1 $071d - setbit1 $071e - setbit1 $071f - setbit1 $0720 - setbit1 $0721 - setbit1 $0722 - setbit1 $0723 - setbit1 $0724 - setbit1 $0725 - setbit1 $0726 - setbit1 $0727 - setbit1 $0728 - setbit1 $0729 - setbit2 $0051 - special $003c - end -; 0xbc31e - -UnknownScript_0xbc31e: ; 0xbc31e - setbit1 $0000 - itemtotext SUN_STONE, $1 - 3writetext $6c, $4621 - closetext - verbosegiveitem SUN_STONE, 1 - iffalse UnknownScript_0xbc354 - 2jump UnknownScript_0xbc2b1 -; 0xbc332 - -UnknownScript_0xbc332: ; 0xbc332 - itemtotext EVERSTONE, $1 - 3writetext $6c, $4621 - closetext - verbosegiveitem EVERSTONE, 1 - iffalse UnknownScript_0xbc35f - 2jump UnknownScript_0xbc2b1 -; 0xbc343 - -UnknownScript_0xbc343: ; 0xbc343 - itemtotext GOLD_BERRY, $1 - 3writetext $6c, $4621 - closetext - verbosegiveitem GOLD_BERRY, 1 - iffalse UnknownScript_0xbc36a - 2jump UnknownScript_0xbc2b1 -; 0xbc354 - -UnknownScript_0xbc354: ; 0xbc354 - 3writetext $6c, $48cc - keeptextopen - setbit1 $0313 - 2jump UnknownScript_0xbc2b1 -; 0xbc35f - -UnknownScript_0xbc35f: ; 0xbc35f - 3writetext $6c, $48cc - keeptextopen - setbit1 $0314 - 2jump UnknownScript_0xbc2b1 -; 0xbc36a - -UnknownScript_0xbc36a: ; 0xbc36a - 3writetext $6c, $48cc - keeptextopen - setbit1 $0315 - 2jump UnknownScript_0xbc2b1 -; 0xbc375 - -UnknownScript_0xbc375: ; 0xbc375 - 3writetext $6c, $48cc - keeptextopen - setbit1 $0316 - 2jump $42a9 -; 0xbc380 - -UnknownScript_0xbc380: ; 0xbc380 - checkbit1 $0716 - iftrue .skip1 - clearbit1 $0720 -.skip1 - checkbit1 $0717 - iftrue .skip2 - clearbit1 $0721 -.skip2 - checkbit1 $0718 - iftrue .skip3 - clearbit1 $0722 -.skip3 - checkbit1 $0719 - iftrue .skip4 - clearbit1 $0723 -.skip4 - checkbit1 $071a - iftrue .skip5 - clearbit1 $0724 -.skip5 - checkbit1 $071b - iftrue .skip6 - clearbit1 $0725 -.skip6 - checkbit1 $071c - iftrue .skip7 - clearbit1 $0726 -.skip7 - checkbit1 $071d - iftrue .skip8 - clearbit1 $0727 -.skip8 - checkbit1 $071e - iftrue .skip9 - clearbit1 $0728 -.skip9 - checkbit1 $071f - iftrue .skip10 - clearbit1 $0729 -.skip10 - end -; 0xbc3db - -UnknownScript_0xbc3db: ; 0xbc3db - setbit1 $06cb - setbit1 $06ce - setbit1 $06cd - setbit1 $06d0 - setbit1 $06f3 - setbit1 $06e9 - setbit1 $06f4 - setbit1 $06d5 - setbit1 $06de - setbit1 $06dd - setbit1 $06df - setbit1 $06c0 - setbit1 $06e4 - setbit1 $0025 - setbit1 $06be - setbit1 $06bf - setbit1 $06c1 - setbit1 $06f9 - setbit1 $06fd - setbit1 $06ff - setbit1 $0700 - setbit1 $0702 - setbit1 $0703 - setbit1 $0704 - setbit1 $070d - setbit1 $070e - setbit1 $070f - setbit1 $0710 - setbit1 $0715 - setbit1 $0716 - setbit1 $0717 - setbit1 $0718 - setbit1 $0719 - setbit1 $071a - setbit1 $071b - setbit1 $071c - setbit1 $071d - setbit1 $071e - setbit1 $071f - setbit1 $0720 - setbit1 $0721 - setbit1 $0722 - setbit1 $0723 - setbit1 $0724 - setbit1 $0725 - setbit1 $0726 - setbit1 $0727 - setbit1 $0728 - setbit1 $0729 - setbit1 $072c - setbit1 $072f - setbit1 $072d - setbit1 $0735 - setbit1 $0736 - setbit1 $073c - setbit1 $073d - setbit1 $0741 - setbit1 $0742 - setbit1 $0743 - setbit1 $0744 - setbit1 $02a4 - setbit1 $02af - setbit1 $0749 - setbit1 $06d3 - setbit1 $074d - setbit1 $0712 - setbit1 $0713 - setbit1 $0711 - setbit1 $06d4 - setbit1 $0304 - setbit1 $0307 - setbit1 $06d8 - setbit1 $06c3 - setbit1 $06c2 - setbit1 $06c6 - setbit1 $075f - setbit1 $0731 - setbit1 $074a - setbit1 $0762 - setbit1 $0738 - setbit1 $073a - setbit1 $073b - setbit1 $0733 - setbit1 $073f - setbit1 $078d - setbit1 $0766 - setbit1 $0768 - setbit1 $0769 - setbit1 $076a - setbit1 $078e - setbit1 $078f - setbit1 $0790 - setbit1 $0791 - setbit1 $0793 - setbit1 $07a4 - setbit1 $07a4 - setbit1 $07a5 - setbit1 $06ec - setbit1 $06ed - setbit1 $06f0 - setbit1 $07a9 - setbit1 $07aa - setbit1 $06c8 - setbit1 $07ac - setbit1 $07ad - setbit1 $07b5 - setbit1 $07b6 - setbit1 $07c5 - setbit1 $07b7 - setbit1 $07b0 - setbit1 $07af - setbit1 $07ae - setbit1 $07cf - setbit2 $000e - setbit2 $0017 - variablesprite $4, $52 - variablesprite $5, $4 - variablesprite $6, $35 - variablesprite $7, $a - variablesprite $8, $a - variablesprite $9, $a - variablesprite $a, $a - variablesprite $b, $28 - variablesprite $c, $28 - setbit1 $00fb - setbit1 $076d - setbit1 $076c - setbit1 $076e - setbit1 $076f - setbit1 $0773 - setbit1 $0776 - setbit1 $0777 - setbit1 $0779 - setbit1 $0772 - setbit1 $077b - setbit1 $0036 - return -; 0xbc574 - -UnknownScript_0xbc574: ; 0xbc574 - special $005d - checkcode $17 - if_equal $5, UnknownScript_0xbc5c9 - if_equal $7, UnknownScript_0xbc5ce - if_equal $b, UnknownScript_0xbc5d3 - if_equal $d, UnknownScript_0xbc5d8 - if_equal $f, UnknownScript_0xbc5dd - if_equal $10, UnknownScript_0xbc5e2 - if_equal $11, UnknownScript_0xbc5e7 - if_equal $13, UnknownScript_0xbc5ec - if_equal $14, UnknownScript_0xbc5f1 - if_equal $16, UnknownScript_0xbc5f6 - if_equal $17, UnknownScript_0xbc5fb - if_equal $18, UnknownScript_0xbc600 - if_equal $1b, UnknownScript_0xbc605 - if_equal $1c, UnknownScript_0xbc60a - if_equal $1d, UnknownScript_0xbc60f - if_equal $1e, UnknownScript_0xbc614 - if_equal $20, UnknownScript_0xbc619 - if_equal $21, UnknownScript_0xbc61e - if_equal $22, UnknownScript_0xbc623 - if_equal $23, UnknownScript_0xbc628 - -UnknownScript_0xbc5c9: ; bc5c9 - 3writetext $6c, $49fe - end -; 0xbc5ce - -UnknownScript_0xbc5ce: ; 0xbc5ce - 3writetext $6c, $4d9f - end -; 0xbc5d3 - -UnknownScript_0xbc5d3: ; 0xbc5d3 - 3writetext $6c, $502e - end -; 0xbc5d8 - -UnknownScript_0xbc5d8: ; 0xbc5d8 - 3writetext $6c, $542d - end -; 0xbc5dd - -UnknownScript_0xbc5dd: ; 0xbc5dd - 3writetext $6c, $5800 - end -; 0xbc5e2 - -UnknownScript_0xbc5e2: ; 0xbc5e2 - 3writetext $6c, $5a71 - end -; 0xbc5e7 - -UnknownScript_0xbc5e7: ; 0xbc5e7 - 3writetext $6c, $5cd5 - end -; 0xbc5ec - -UnknownScript_0xbc5ec: ; 0xbc5ec - 3writetext $29, $4000 - end -; 0xbc5f1 - -UnknownScript_0xbc5f1: ; 0xbc5f1 - 3writetext $29, $41c0 - end -; 0xbc5f6 - -UnknownScript_0xbc5f6: ; 0xbc5f6 - 3writetext $29, $4642 - end -; 0xbc5fb - -UnknownScript_0xbc5fb: ; 0xbc5fb - 3writetext $29, $4829 - end -; 0xbc600 - -UnknownScript_0xbc600: ; 0xbc600 - 3writetext $29, $4a31 - end -; 0xbc605 - -UnknownScript_0xbc605: ; 0xbc605 - 3writetext $29, $4ed4 - end -; 0xbc60a - -UnknownScript_0xbc60a: ; 0xbc60a - 3writetext $29, $50d5 - end -; 0xbc60f - -UnknownScript_0xbc60f: ; 0xbc60f - 3writetext $29, $52e2 - end -; 0xbc614 - -UnknownScript_0xbc614: ; 0xbc614 - 3writetext $29, $5545 - end -; 0xbc619 - -UnknownScript_0xbc619: ; 0xbc619 - 3writetext $29, $5937 - end -; 0xbc61e - -UnknownScript_0xbc61e: ; 0xbc61e - 3writetext $29, $5bc4 - end -; 0xbc623 - -UnknownScript_0xbc623: ; 0xbc623 - 3writetext $29, $5dc6 - end -; 0xbc628 - -UnknownScript_0xbc628: ; 0xbc628 - 3writetext $29, $600c - end -; 0xbc62d - -UnknownScript_0xbc62d: ; 0xbc62d - special $005d - checkcode $17 - if_equal $5, UnknownScript_0xbc682 - if_equal $7, UnknownScript_0xbc687 - if_equal $b, UnknownScript_0xbc68c - if_equal $d, UnknownScript_0xbc691 - if_equal $f, UnknownScript_0xbc696 - if_equal $10, UnknownScript_0xbc69b - if_equal $11, UnknownScript_0xbc6a0 - if_equal $13, UnknownScript_0xbc6a5 - if_equal $14, UnknownScript_0xbc6aa - if_equal $16, UnknownScript_0xbc6af - if_equal $17, UnknownScript_0xbc6b4 - if_equal $18, UnknownScript_0xbc6b9 - if_equal $1b, UnknownScript_0xbc6be - if_equal $1c, UnknownScript_0xbc6c3 - if_equal $1d, UnknownScript_0xbc6c8 - if_equal $1e, UnknownScript_0xbc6cd - if_equal $20, UnknownScript_0xbc6d2 - if_equal $21, UnknownScript_0xbc6d7 - if_equal $22, UnknownScript_0xbc6dc - if_equal $23, UnknownScript_0xbc6e1 - -UnknownScript_0xbc682: ; bc682 - 3writetext $6c, $4a82 - end -; 0xbc687 - -UnknownScript_0xbc687: ; 0xbc687 - 3writetext $6c, $4e2c - end -; 0xbc68c - -UnknownScript_0xbc68c: ; 0xbc68c - 3writetext $6c, $50d3 - end -; 0xbc691 - -UnknownScript_0xbc691: ; 0xbc691 - 3writetext $6c, $54e4 - end -; 0xbc696 - -UnknownScript_0xbc696: ; 0xbc696 - 3writetext $6c, $587b - end -; 0xbc69b - -UnknownScript_0xbc69b: ; 0xbc69b - 3writetext $6c, $5b1d - end -; 0xbc6a0 - -UnknownScript_0xbc6a0: ; 0xbc6a0 - 3writetext $6c, $5d85 - end -; 0xbc6a5 - -UnknownScript_0xbc6a5: ; 0xbc6a5 - 3writetext $29, $40a9 - end -; 0xbc6aa - -UnknownScript_0xbc6aa: ; 0xbc6aa - 3writetext $29, $426a - end -; 0xbc6af - -UnknownScript_0xbc6af: ; 0xbc6af - 3writetext $29, $470b - end -; 0xbc6b4 - -UnknownScript_0xbc6b4: ; 0xbc6b4 - 3writetext $29, $48fc - end -; 0xbc6b9 - -UnknownScript_0xbc6b9: ; 0xbc6b9 - 3writetext $29, $4b03 - end -; 0xbc6be - -UnknownScript_0xbc6be: ; 0xbc6be - 3writetext $29, $4fc8 - end -; 0xbc6c3 - -UnknownScript_0xbc6c3: ; 0xbc6c3 - 3writetext $29, $5175 - end -; 0xbc6c8 - -UnknownScript_0xbc6c8: ; 0xbc6c8 - 3writetext $29, $5383 - end -; 0xbc6cd - -UnknownScript_0xbc6cd: ; 0xbc6cd - 3writetext $29, $5621 - end -; 0xbc6d2 - -UnknownScript_0xbc6d2: ; 0xbc6d2 - 3writetext $29, $59bc - end -; 0xbc6d7 - -UnknownScript_0xbc6d7: ; 0xbc6d7 - 3writetext $29, $5c4b - end -; 0xbc6dc - -UnknownScript_0xbc6dc: ; 0xbc6dc - 3writetext $29, $5e63 - end -; 0xbc6e1 - -UnknownScript_0xbc6e1: ; 0xbc6e1 - 3writetext $29, $6076 - end -; 0xbc6e6 - -UnknownScript_0xbc6e6: ; 0xbc6e6 - 3writetext $6c, $49c4 - playsound $0093 - waitbutton - keeptextopen - end -; 0xbc6f0 - -UnknownScript_0xbc6f0: ; 0xbc6f0 - checkcode $17 - if_equal $5, $4742 - if_equal $7, UnknownScript_0xbc749 - if_equal $b, UnknownScript_0xbc750 - if_equal $d, UnknownScript_0xbc757 - if_equal $f, UnknownScript_0xbc75e - if_equal $10, UnknownScript_0xbc765 - if_equal $11, UnknownScript_0xbc76c - if_equal $13, UnknownScript_0xbc773 - if_equal $14, UnknownScript_0xbc77a - if_equal $16, UnknownScript_0xbc781 - if_equal $17, UnknownScript_0xbc788 - if_equal $18, UnknownScript_0xbc78f - if_equal $1b, UnknownScript_0xbc796 - if_equal $1c, UnknownScript_0xbc79d - if_equal $1d, UnknownScript_0xbc7a4 - if_equal $1e, UnknownScript_0xbc7ab - if_equal $20, UnknownScript_0xbc7b2 - if_equal $21, UnknownScript_0xbc7b9 - if_equal $22, UnknownScript_0xbc7c0 - if_equal $23, UnknownScript_0xbc7c7 - 3writetext $6c, $4adb - closetext - loadmovesprites - end -; 0xbc749 - -UnknownScript_0xbc749: ; 0xbc749 - 3writetext $6c, $4e89 - closetext - loadmovesprites - end -; 0xbc750 - -UnknownScript_0xbc750: ; 0xbc750 - 3writetext $6c, $5136 - closetext - loadmovesprites - end -; 0xbc757 - -UnknownScript_0xbc757: ; 0xbc757 - 3writetext $6c, $5553 - closetext - loadmovesprites - end -; 0xbc75e - -UnknownScript_0xbc75e: ; 0xbc75e - 3writetext $6c, $58d7 - closetext - loadmovesprites - end -; 0xbc765 - -UnknownScript_0xbc765: ; 0xbc765 - 3writetext $6c, $5b8e - closetext - loadmovesprites - end -; 0xbc76c - -UnknownScript_0xbc76c: ; 0xbc76c - 3writetext $6c, $5db9 - closetext - loadmovesprites - end -; 0xbc773 - -UnknownScript_0xbc773: ; 0xbc773 - 3writetext $29, $40f8 - closetext - loadmovesprites - end -; 0xbc77a - -UnknownScript_0xbc77a: ; 0xbc77a - 3writetext $29, $42ab - closetext - loadmovesprites - end -; 0xbc781 - -UnknownScript_0xbc781: ; 0xbc781 - 3writetext $29, $4730 - closetext - loadmovesprites - end -; 0xbc788 - -UnknownScript_0xbc788: ; 0xbc788 - 3writetext $29, $494d - closetext - loadmovesprites - end -; 0xbc78f - -UnknownScript_0xbc78f: ; 0xbc78f - 3writetext $29, $4b47 - closetext - loadmovesprites - end -; 0xbc796 - -UnknownScript_0xbc796: ; 0xbc796 - 3writetext $29, $502e - closetext - loadmovesprites - end -; 0xbc79d - -UnknownScript_0xbc79d: ; 0xbc79d - 3writetext $29, $51ac - closetext - loadmovesprites - end -; 0xbc7a4 - -UnknownScript_0xbc7a4: ; 0xbc7a4 - 3writetext $29, $53de - closetext - loadmovesprites - end -; 0xbc7ab - -UnknownScript_0xbc7ab: ; 0xbc7ab - 3writetext $29, $5666 - closetext - loadmovesprites - end -; 0xbc7b2 - -UnknownScript_0xbc7b2: ; 0xbc7b2 - 3writetext $29, $5a28 - closetext - loadmovesprites - end -; 0xbc7b9 - -UnknownScript_0xbc7b9: ; 0xbc7b9 - 3writetext $29, $5c8e - closetext - loadmovesprites - end -; 0xbc7c0 - -UnknownScript_0xbc7c0: ; 0xbc7c0 - 3writetext $29, $5ea8 - closetext - loadmovesprites - end -; 0xbc7c7 - -UnknownScript_0xbc7c7: ; 0xbc7c7 - 3writetext $29, $60b5 - closetext - loadmovesprites - end -; 0xbc7ce - -UnknownScript_0xbc7ce: ; 0xbc7ce - checkcode $17 - if_equal $5, $4820 - if_equal $7, UnknownScript_0xbc827 - if_equal $b, UnknownScript_0xbc82e - if_equal $d, UnknownScript_0xbc835 - if_equal $f, UnknownScript_0xbc83c - if_equal $10, UnknownScript_0xbc843 - if_equal $11, UnknownScript_0xbc84a - if_equal $13, UnknownScript_0xbc851 - if_equal $14, UnknownScript_0xbc858 - if_equal $16, UnknownScript_0xbc85f - if_equal $17, UnknownScript_0xbc866 - if_equal $18, UnknownScript_0xbc86d - if_equal $1b, UnknownScript_0xbc874 - if_equal $1c, UnknownScript_0xbc87b - if_equal $1d, UnknownScript_0xbc882 - if_equal $1e, UnknownScript_0xbc889 - if_equal $20, UnknownScript_0xbc890 - if_equal $21, UnknownScript_0xbc897 - if_equal $22, UnknownScript_0xbc89e - if_equal $23, UnknownScript_0xbc8a5 - 3writetext $6c, $4afd - closetext - loadmovesprites - end -; 0xbc827 - -UnknownScript_0xbc827: ; 0xbc827 - 3writetext $6c, $4ea2 - closetext - loadmovesprites - end -; 0xbc82e - -UnknownScript_0xbc82e: ; 0xbc82e - 3writetext $6c, $517b - closetext - loadmovesprites - end -; 0xbc835 - -UnknownScript_0xbc835: ; 0xbc835 - 3writetext $6c, $5584 - closetext - loadmovesprites - end -; 0xbc83c - -UnknownScript_0xbc83c: ; 0xbc83c - 3writetext $6c, $5908 - closetext - loadmovesprites - end -; 0xbc843 - -UnknownScript_0xbc843: ; 0xbc843 - 3writetext $6c, $5bd2 - closetext - loadmovesprites - end -; 0xbc84a - -UnknownScript_0xbc84a: ; 0xbc84a - 3writetext $6c, $5df4 - closetext - loadmovesprites - end -; 0xbc851 - -UnknownScript_0xbc851: ; 0xbc851 - 3writetext $29, $4126 - closetext - loadmovesprites - end -; 0xbc858 - -UnknownScript_0xbc858: ; 0xbc858 - 3writetext $29, $42f2 - closetext - loadmovesprites - end -; 0xbc85f - -UnknownScript_0xbc85f: ; 0xbc85f - 3writetext $29, $4794 - closetext - loadmovesprites - end -; 0xbc866 - -UnknownScript_0xbc866: ; 0xbc866 - 3writetext $29, $498a - closetext - loadmovesprites - end -; 0xbc86d - -UnknownScript_0xbc86d: ; 0xbc86d - 3writetext $29, $4b87 - closetext - loadmovesprites - end -; 0xbc874 - -UnknownScript_0xbc874: ; 0xbc874 - 3writetext $29, $505f - closetext - loadmovesprites - end -; 0xbc87b - -UnknownScript_0xbc87b: ; 0xbc87b - 3writetext $29, $51ee - closetext - loadmovesprites - end -; 0xbc882 - -UnknownScript_0xbc882: ; 0xbc882 - 3writetext $29, $5412 - closetext - loadmovesprites - end -; 0xbc889 - -UnknownScript_0xbc889: ; 0xbc889 - 3writetext $29, $56b6 - closetext - loadmovesprites - end -; 0xbc890 - -UnknownScript_0xbc890: ; 0xbc890 - 3writetext $29, $5a5a - closetext - loadmovesprites - end -; 0xbc897 - -UnknownScript_0xbc897: ; 0xbc897 - 3writetext $29, $5cc5 - closetext - loadmovesprites - end -; 0xbc89e - -UnknownScript_0xbc89e: ; 0xbc89e - 3writetext $29, $5ed6 - closetext - loadmovesprites - end -; 0xbc8a5 - -UnknownScript_0xbc8a5: ; 0xbc8a5 - 3writetext $29, $60e2 - closetext - loadmovesprites - end -; 0xbc8ac - -UnknownScript_0xbc8ac: ; 0xbc8ac - checkcode $17 - if_equal $5, $48fe - if_equal $7, UnknownScript_0xbc905 - if_equal $b, UnknownScript_0xbc90c - if_equal $d, UnknownScript_0xbc913 - if_equal $f, UnknownScript_0xbc91a - if_equal $10, UnknownScript_0xbc921 - if_equal $11, UnknownScript_0xbc928 - if_equal $13, UnknownScript_0xbc92f - if_equal $14, UnknownScript_0xbc936 - if_equal $16, UnknownScript_0xbc93d - if_equal $17, UnknownScript_0xbc944 - if_equal $18, UnknownScript_0xbc94b - if_equal $1b, UnknownScript_0xbc952 - if_equal $1c, UnknownScript_0xbc959 - if_equal $1d, UnknownScript_0xbc960 - if_equal $1e, UnknownScript_0xbc967 - if_equal $20, UnknownScript_0xbc96e - if_equal $21, UnknownScript_0xbc975 - if_equal $22, UnknownScript_0xbc97c - if_equal $23, UnknownScript_0xbc983 - 3writetext $6c, $4b42 - closetext - loadmovesprites - end -; 0xbc905 - -UnknownScript_0xbc905: ; 0xbc905 - 3writetext $6c, $4ebc - closetext - loadmovesprites - end -; 0xbc90c - -UnknownScript_0xbc90c: ; 0xbc90c - 3writetext $6c, $51c4 - closetext - loadmovesprites - end -; 0xbc913 - -UnknownScript_0xbc913: ; 0xbc913 - 3writetext $6c, $55b6 - closetext - loadmovesprites - end -; 0xbc91a - -UnknownScript_0xbc91a: ; 0xbc91a - 3writetext $6c, $5936 - closetext - loadmovesprites - end -; 0xbc921 - -UnknownScript_0xbc921: ; 0xbc921 - 3writetext $6c, $5c06 - closetext - loadmovesprites - end -; 0xbc928 - -UnknownScript_0xbc928: ; 0xbc928 - 3writetext $6c, $5e50 - closetext - loadmovesprites - end -; 0xbc92f - -UnknownScript_0xbc92f: ; 0xbc92f - 3writetext $29, $4158 - closetext - loadmovesprites - end -; 0xbc936 - -UnknownScript_0xbc936: ; 0xbc936 - 3writetext $29, $434a - closetext - loadmovesprites - end -; 0xbc93d - -UnknownScript_0xbc93d: ; 0xbc93d - 3writetext $29, $47eb - closetext - loadmovesprites - end -; 0xbc944 - -UnknownScript_0xbc944: ; 0xbc944 - 3writetext $29, $49bd - closetext - loadmovesprites - end -; 0xbc94b - -UnknownScript_0xbc94b: ; 0xbc94b - 3writetext $29, $4bcd - closetext - loadmovesprites - end -; 0xbc952 - -UnknownScript_0xbc952: ; 0xbc952 - 3writetext $29, $508c - closetext - loadmovesprites - end -; 0xbc959 - -UnknownScript_0xbc959: ; 0xbc959 - 3writetext $29, $5216 - closetext - loadmovesprites - end -; 0xbc960 - -UnknownScript_0xbc960: ; 0xbc960 - 3writetext $29, $5446 - closetext - loadmovesprites - end -; 0xbc967 - -UnknownScript_0xbc967: ; 0xbc967 - 3writetext $29, $56e2 - closetext - loadmovesprites - end -; 0xbc96e - -UnknownScript_0xbc96e: ; 0xbc96e - 3writetext $29, $5aa6 - closetext - loadmovesprites - end -; 0xbc975 - -UnknownScript_0xbc975: ; 0xbc975 - 3writetext $29, $5cfa - closetext - loadmovesprites - end -; 0xbc97c - -UnknownScript_0xbc97c: ; 0xbc97c - 3writetext $29, $5f06 - closetext - loadmovesprites - end -; 0xbc983 - -UnknownScript_0xbc983: ; 0xbc983 - 3writetext $29, $6144 - closetext - loadmovesprites - end -; 0xbc98a - -UnknownScript_0xbc98a: ; 0xbc98a - checkcode $17 - if_equal $5, $49d0 - if_equal $7, UnknownScript_0xbc9d7 - if_equal $b, UnknownScript_0xbc9de - if_equal $d, UnknownScript_0xbc9e5 - if_equal $f, UnknownScript_0xbc9ec - if_equal $10, UnknownScript_0xbc9f3 - if_equal $11, UnknownScript_0xbc9fa - if_equal $13, UnknownScript_0xbca01 - if_equal $14, UnknownScript_0xbca08 - if_equal $17, UnknownScript_0xbca0f - if_equal $18, UnknownScript_0xbca16 - if_equal $1b, UnknownScript_0xbca1d - if_equal $1d, UnknownScript_0xbca24 - if_equal $1e, UnknownScript_0xbca2b - if_equal $20, UnknownScript_0xbca32 - if_equal $21, UnknownScript_0xbca39 - if_equal $23, UnknownScript_0xbca40 - 3writetext $6c, $4b75 - closetext - loadmovesprites - end -; 0xbc9d7 - -UnknownScript_0xbc9d7: ; 0xbc9d7 - 3writetext $6c, $4edc - closetext - loadmovesprites - end -; 0xbc9de - -UnknownScript_0xbc9de: ; 0xbc9de - 3writetext $6c, $51fe - closetext - loadmovesprites - end -; 0xbc9e5 - -UnknownScript_0xbc9e5: ; 0xbc9e5 - 3writetext $6c, $55d5 - closetext - loadmovesprites - end -; 0xbc9ec - -UnknownScript_0xbc9ec: ; 0xbc9ec - 3writetext $6c, $5954 - closetext - loadmovesprites - end -; 0xbc9f3 - -UnknownScript_0xbc9f3: ; 0xbc9f3 - 3writetext $6c, $5c32 - closetext - loadmovesprites - end -; 0xbc9fa - -UnknownScript_0xbc9fa: ; 0xbc9fa - 3writetext $6c, $5e98 - closetext - loadmovesprites - end -; 0xbca01 - -UnknownScript_0xbca01: ; 0xbca01 - 3writetext $29, $418d - closetext - loadmovesprites - end -; 0xbca08 - -UnknownScript_0xbca08: ; 0xbca08 - 3writetext $29, $4382 - closetext - loadmovesprites - end -; 0xbca0f - -UnknownScript_0xbca0f: ; 0xbca0f - 3writetext $29, $49fc - closetext - loadmovesprites - end -; 0xbca16 - -UnknownScript_0xbca16: ; 0xbca16 - 3writetext $29, $4bec - closetext - loadmovesprites - end -; 0xbca1d - -UnknownScript_0xbca1d: ; 0xbca1d - 3writetext $29, $50b1 - closetext - loadmovesprites - end -; 0xbca24 - -UnknownScript_0xbca24: ; 0xbca24 - 3writetext $29, $548c - closetext - loadmovesprites - end -; 0xbca2b - -UnknownScript_0xbca2b: ; 0xbca2b - 3writetext $29, $571e - closetext - loadmovesprites - end -; 0xbca32 - -UnknownScript_0xbca32: ; 0xbca32 - 3writetext $29, $5ada - closetext - loadmovesprites - end -; 0xbca39 - -UnknownScript_0xbca39: ; 0xbca39 - 3writetext $29, $5d1d - closetext - loadmovesprites - end -; 0xbca40 - -UnknownScript_0xbca40: ; 0xbca40 - 3writetext $29, $6175 - closetext - loadmovesprites - end -; 0xbca47 - -UnknownScript_0xbca47: ; 0xbca47 - checkcode $17 - if_equal $d, $4a65 - if_equal $10, UnknownScript_0xbca6b - if_equal $18, UnknownScript_0xbca71 - if_equal $1c, UnknownScript_0xbca77 - if_equal $1d, UnknownScript_0xbca7d - if_equal $21, UnknownScript_0xbca83 - if_equal $22, UnknownScript_0xbca89 - 3writetext $6c, $5607 - keeptextopen - end -; 0xbca6b - -UnknownScript_0xbca6b: ; 0xbca6b - 3writetext $6c, $5c57 - keeptextopen - end -; 0xbca71 - -UnknownScript_0xbca71: ; 0xbca71 - 3writetext $29, $4c24 - keeptextopen - end -; 0xbca77 - -UnknownScript_0xbca77: ; 0xbca77 - 3writetext $29, $523a - keeptextopen - end -; 0xbca7d - -UnknownScript_0xbca7d: ; 0xbca7d - 3writetext $29, $54e3 - keeptextopen - end -; 0xbca83 - -UnknownScript_0xbca83: ; 0xbca83 - 3writetext $29, $5d4d - keeptextopen - end -; 0xbca89 - -UnknownScript_0xbca89: ; 0xbca89 - 3writetext $29, $5f37 - keeptextopen - end -; 0xbca8f - -UnknownScript_0xbca8f: ; 0xbca8f - checkcode $17 - if_equal $7, $4abd - if_equal $d, UnknownScript_0xbcac4 - if_equal $f, UnknownScript_0xbcacb - if_equal $10, UnknownScript_0xbcad2 - if_equal $18, UnknownScript_0xbcad9 - if_equal $1c, UnknownScript_0xbcae0 - if_equal $1d, UnknownScript_0xbcae7 - if_equal $20, UnknownScript_0xbcaee - if_equal $21, UnknownScript_0xbcaf5 - if_equal $22, UnknownScript_0xbcafc - if_equal $23, UnknownScript_0xbcb03 - 3writetext $6c, $4eff - closetext - loadmovesprites - end -; 0xbcac4 - -UnknownScript_0xbcac4: ; 0xbcac4 - 3writetext $6c, $564d - closetext - loadmovesprites - end -; 0xbcacb - -UnknownScript_0xbcacb: ; 0xbcacb - 3writetext $6c, $5978 - closetext - loadmovesprites - end -; 0xbcad2 - -UnknownScript_0xbcad2: ; 0xbcad2 - 3writetext $6c, $5c91 - closetext - loadmovesprites - end -; 0xbcad9 - -UnknownScript_0xbcad9: ; 0xbcad9 - 3writetext $29, $4c47 - closetext - loadmovesprites - end -; 0xbcae0 - -UnknownScript_0xbcae0: ; 0xbcae0 - 3writetext $29, $52a0 - closetext - loadmovesprites - end -; 0xbcae7 - -UnknownScript_0xbcae7: ; 0xbcae7 - 3writetext $29, $5513 - closetext - loadmovesprites - end -; 0xbcaee - -UnknownScript_0xbcaee: ; 0xbcaee - 3writetext $29, $5aff - closetext - loadmovesprites - end -; 0xbcaf5 - -UnknownScript_0xbcaf5: ; 0xbcaf5 - 3writetext $29, $5d9a - closetext - loadmovesprites - end -; 0xbcafc - -UnknownScript_0xbcafc: ; 0xbcafc - 3writetext $29, $5faa - closetext - loadmovesprites - end -; 0xbcb03 - -UnknownScript_0xbcb03: ; 0xbcb03 - 3writetext $29, $61c9 - closetext - loadmovesprites - end -; 0xbcb0a - -UnknownScript_0xbcb0a: ; 0xbcb0a - loadfont - checkcode $17 - if_equal $7, $4b1d - if_equal $f, UnknownScript_0xbcb23 - if_equal $20, UnknownScript_0xbcb29 - if_equal $23, UnknownScript_0xbcb2f - 3writetext $6c, $4f2f - keeptextopen - end -; 0xbcb23 - -UnknownScript_0xbcb23: ; 0xbcb23 - 3writetext $6c, $59be - keeptextopen - end -; 0xbcb29 - -UnknownScript_0xbcb29: ; 0xbcb29 - 3writetext $29, $5b3f - keeptextopen - end -; 0xbcb2f - -UnknownScript_0xbcb2f: ; 0xbcb2f - 3writetext $29, $6200 - keeptextopen - end -; 0xbcb35 - -UnknownScript_0xbcb35: ; 0xbcb35 - checkcode $17 - if_equal $6, $4b57 - if_equal $c, UnknownScript_0xbcb5c - if_equal $e, UnknownScript_0xbcb61 - if_equal $12, UnknownScript_0xbcb66 - if_equal $15, UnknownScript_0xbcb6b - if_equal $1a, UnknownScript_0xbcb70 - if_equal $1f, UnknownScript_0xbcb75 - if_equal $24, UnknownScript_0xbcb7a - 3writetext $6c, $4bb6 - end -; 0xbcb5c - -UnknownScript_0xbcb5c: ; 0xbcb5c - 3writetext $6c, $5239 - end -; 0xbcb61 - -UnknownScript_0xbcb61: ; 0xbcb61 - 3writetext $6c, $5690 - end -; 0xbcb66 - -UnknownScript_0xbcb66: ; 0xbcb66 - 3writetext $6c, $5ebe - end -; 0xbcb6b - -UnknownScript_0xbcb6b: ; 0xbcb6b - 3writetext $29, $4405 - end -; 0xbcb70 - -UnknownScript_0xbcb70: ; 0xbcb70 - 3writetext $29, $4c8c - end -; 0xbcb75 - -UnknownScript_0xbcb75: ; 0xbcb75 - 3writetext $29, $574a - end -; 0xbcb7a - -UnknownScript_0xbcb7a: ; 0xbcb7a - 3writetext $29, $6295 - end -; 0xbcb7f - -UnknownScript_0xbcb7f: ; 0xbcb7f - checkcode $17 - if_equal $6, $4ba1 - if_equal $c, UnknownScript_0xbcba6 - if_equal $e, UnknownScript_0xbcbab - if_equal $12, UnknownScript_0xbcbb0 - if_equal $15, UnknownScript_0xbcbb5 - if_equal $1a, UnknownScript_0xbcbba - if_equal $1f, UnknownScript_0xbcbbf - if_equal $24, UnknownScript_0xbcbc4 - 3writetext $6c, $4c37 - end -; 0xbcba6 - -UnknownScript_0xbcba6: ; 0xbcba6 - 3writetext $6c, $5314 - end -; 0xbcbab - -UnknownScript_0xbcbab: ; 0xbcbab - 3writetext $6c, $5710 - end -; 0xbcbb0 - -UnknownScript_0xbcbb0: ; 0xbcbb0 - 3writetext $6c, $5f4e - end -; 0xbcbb5 - -UnknownScript_0xbcbb5: ; 0xbcbb5 - 3writetext $29, $44db - end -; 0xbcbba - -UnknownScript_0xbcbba: ; 0xbcbba - 3writetext $29, $4d36 - end -; 0xbcbbf - -UnknownScript_0xbcbbf: ; 0xbcbbf - 3writetext $29, $57e3 - end -; 0xbcbc4 - -UnknownScript_0xbcbc4: ; 0xbcbc4 - 3writetext $29, $6316 - end -; 0xbcbc9 - -UnknownScript_0xbcbc9: ; 0xbcbc9 - 3writetext $6c, $49e1 - playsound $0093 - waitbutton - keeptextopen - end -; 0xbcbd3 - -UnknownScript_0xbcbd3: ; 0xbcbd3 - checkcode $17 - if_equal $6, $4bf5 - if_equal $c, UnknownScript_0xbcbfc - if_equal $e, UnknownScript_0xbcc03 - if_equal $12, UnknownScript_0xbcc0a - if_equal $15, UnknownScript_0xbcc11 - if_equal $1a, UnknownScript_0xbcc18 - if_equal $1f, UnknownScript_0xbcc1f - if_equal $24, UnknownScript_0xbcc26 - 3writetext $6c, $4c9b - closetext - loadmovesprites - end -; 0xbcbfc - -UnknownScript_0xbcbfc: ; 0xbcbfc - 3writetext $6c, $5392 - closetext - loadmovesprites - end -; 0xbcc03 - -UnknownScript_0xbcc03: ; 0xbcc03 - 3writetext $6c, $5755 - closetext - loadmovesprites - end -; 0xbcc0a - -UnknownScript_0xbcc0a: ; 0xbcc0a - 3writetext $6c, $5faa - closetext - loadmovesprites - end -; 0xbcc11 - -UnknownScript_0xbcc11: ; 0xbcc11 - 3writetext $29, $451d - closetext - loadmovesprites - end -; 0xbcc18 - -UnknownScript_0xbcc18: ; 0xbcc18 - 3writetext $29, $4d72 - closetext - loadmovesprites - end -; 0xbcc1f - -UnknownScript_0xbcc1f: ; 0xbcc1f - 3writetext $29, $5820 - closetext - loadmovesprites - end -; 0xbcc26 - -UnknownScript_0xbcc26: ; 0xbcc26 - 3writetext $29, $6359 - closetext - loadmovesprites - end -; 0xbcc2d - -UnknownScript_0xbcc2d: ; 0xbcc2d - checkcode $17 - if_equal $6, $4c4f - if_equal $c, UnknownScript_0xbcc56 - if_equal $e, UnknownScript_0xbcc5d - if_equal $12, UnknownScript_0xbcc64 - if_equal $15, UnknownScript_0xbcc6b - if_equal $1a, UnknownScript_0xbcc72 - if_equal $1f, UnknownScript_0xbcc79 - if_equal $24, UnknownScript_0xbcc80 - 3writetext $6c, $4ce0 - closetext - loadmovesprites - end -; 0xbcc56 - -UnknownScript_0xbcc56: ; 0xbcc56 - 3writetext $6c, $53af - closetext - loadmovesprites - end -; 0xbcc5d - -UnknownScript_0xbcc5d: ; 0xbcc5d - 3writetext $6c, $578a - closetext - loadmovesprites - end -; 0xbcc64 - -UnknownScript_0xbcc64: ; 0xbcc64 - 3writetext $6c, $5fdd - closetext - loadmovesprites - end -; 0xbcc6b - -UnknownScript_0xbcc6b: ; 0xbcc6b - 3writetext $29, $4542 - closetext - loadmovesprites - end -; 0xbcc72 - -UnknownScript_0xbcc72: ; 0xbcc72 - 3writetext $29, $4dcd - closetext - loadmovesprites - end -; 0xbcc79 - -UnknownScript_0xbcc79: ; 0xbcc79 - 3writetext $29, $5842 - closetext - loadmovesprites - end -; 0xbcc80 - -UnknownScript_0xbcc80: ; 0xbcc80 - 3writetext $29, $638c - closetext - loadmovesprites - end -; 0xbcc87 - -UnknownScript_0xbcc87: ; 0xbcc87 - checkcode $17 - if_equal $6, $4ca9 - if_equal $c, UnknownScript_0xbccb0 - if_equal $e, UnknownScript_0xbccb7 - if_equal $12, UnknownScript_0xbccbe - if_equal $15, UnknownScript_0xbccc5 - if_equal $1a, UnknownScript_0xbcccc - if_equal $1f, UnknownScript_0xbccd3 - if_equal $24, UnknownScript_0xbccda - 3writetext $6c, $4d0b - closetext - loadmovesprites - end -; 0xbccb0 - -UnknownScript_0xbccb0: ; 0xbccb0 - 3writetext $6c, $53e4 - closetext - loadmovesprites - end -; 0xbccb7 - -UnknownScript_0xbccb7: ; 0xbccb7 - 3writetext $6c, $57ba - closetext - loadmovesprites - end -; 0xbccbe - -UnknownScript_0xbccbe: ; 0xbccbe - 3writetext $6c, $5ffa - closetext - loadmovesprites - end -; 0xbccc5 - -UnknownScript_0xbccc5: ; 0xbccc5 - 3writetext $29, $4573 - closetext - loadmovesprites - end -; 0xbcccc - -UnknownScript_0xbcccc: ; 0xbcccc - 3writetext $29, $4e01 - closetext - loadmovesprites - end -; 0xbccd3 - -UnknownScript_0xbccd3: ; 0xbccd3 - 3writetext $29, $5881 - closetext - loadmovesprites - end -; 0xbccda - -UnknownScript_0xbccda: ; 0xbccda - 3writetext $29, $63cc - closetext - loadmovesprites - end -; 0xbcce1 - -UnknownScript_0xbcce1: ; 0xbcce1 - checkcode $17 - if_equal $c, $4cff - if_equal $e, UnknownScript_0xbcd06 - if_equal $12, UnknownScript_0xbcd0d - if_equal $15, UnknownScript_0xbcd14 - if_equal $1a, UnknownScript_0xbcd1b - if_equal $1f, UnknownScript_0xbcd22 - if_equal $24, UnknownScript_0xbcd29 - 3writetext $6c, $5409 - closetext - loadmovesprites - end -; 0xbcd06 - -UnknownScript_0xbcd06: ; 0xbcd06 - 3writetext $6c, $57de - closetext - loadmovesprites - end -; 0xbcd0d - -UnknownScript_0xbcd0d: ; 0xbcd0d - 3writetext $6c, $601f - closetext - loadmovesprites - end -; 0xbcd14 - -UnknownScript_0xbcd14: ; 0xbcd14 - 3writetext $29, $4595 - closetext - loadmovesprites - end -; 0xbcd1b - -UnknownScript_0xbcd1b: ; 0xbcd1b - 3writetext $29, $4e21 - closetext - loadmovesprites - end -; 0xbcd22 - -UnknownScript_0xbcd22: ; 0xbcd22 - 3writetext $29, $58a3 - closetext - loadmovesprites - end -; 0xbcd29 - -UnknownScript_0xbcd29: ; 0xbcd29 - 3writetext $29, $63f1 - closetext - loadmovesprites - end -; 0xbcd30 - -UnknownScript_0xbcd30: ; 0xbcd30 - checkcode $17 - if_equal $6, $4d42 - if_equal $15, UnknownScript_0xbcd48 - if_equal $1a, UnknownScript_0xbcd4e - if_equal $1f, UnknownScript_0xbcd54 - 3writetext $6c, $4d2c - keeptextopen - end -; 0xbcd48 - -UnknownScript_0xbcd48: ; 0xbcd48 - 3writetext $29, $45c9 - keeptextopen - end -; 0xbcd4e - -UnknownScript_0xbcd4e: ; 0xbcd4e - 3writetext $29, $4e4c - keeptextopen - end -; 0xbcd54 - -UnknownScript_0xbcd54: ; 0xbcd54 - 3writetext $29, $58d5 - keeptextopen - end -; 0xbcd5a - -UnknownScript_0xbcd5a: ; 0xbcd5a - checkcode $17 - if_equal $6, $4d70 - if_equal $15, UnknownScript_0xbcd77 - if_equal $1a, UnknownScript_0xbcd7e - if_equal $1f, UnknownScript_0xbcd85 - if_equal $24, UnknownScript_0xbcd8c - 3writetext $6c, $4d69 - closetext - loadmovesprites - end -; 0xbcd77 - -UnknownScript_0xbcd77: ; 0xbcd77 - 3writetext $29, $4603 - closetext - loadmovesprites - end -; 0xbcd7e - -UnknownScript_0xbcd7e: ; 0xbcd7e - 3writetext $29, $4e8f - closetext - loadmovesprites - end -; 0xbcd85 - -UnknownScript_0xbcd85: ; 0xbcd85 - 3writetext $29, $5914 - closetext - loadmovesprites - end -; 0xbcd8c - -UnknownScript_0xbcd8c: ; 0xbcd8c - 3writetext $29, $6411 - closetext - loadmovesprites - end -; 0xbcd93 - -UnknownScript_0xbcd93: ; 0xbcd93 - checkcode $17 - if_equal $24, $4d99 - loadfont - 3writetext $29, $6454 - keeptextopen - end -; 0xbcda0 - -UnknownScript_0xbcda0: ; 0xbcda0 - mapnametotext $0 - loadfont - 3writetext $6c, $474e - closetext - loadmovesprites - end -; 0xbcdaa - -UnknownScript_0xbcdaa: ; 0xbcdaa - mapnametotext $0 - loadfont - 3writetext $6c, $474e - keeptextopen - 3writetext $6c, $475c - closetext - loadmovesprites - end -; 0xbcdb9 - -UnknownScript_0xbcdb9: ; 0xbcdb9 - waitbutton - 3writetext $6c, $4648 - playsound $0001 - waitbutton - end -; 0xbcdc3 - -UnknownScript_0xbcdc3: ; 0xbcdc3 - waitbutton - 3writetext $6c, $4648 - playsound $0096 - waitbutton - end -; 0xbcdcd - -UnknownScript_0xbcdcd: ; 0xbcdcd - faceplayer - loadfont - 3writetext $6c, $477f - keeptextopen - checkitem COIN_CASE - iftrue UnknownScript_0xbcde0 - 3writetext $6c, $479c - closetext - loadmovesprites - end -; 0xbcde0 - -UnknownScript_0xbcde0: ; 0xbcde0 - 3writetext $6c, $47e3 - special $0050 - loadmenudata MenuDataHeader_0xbce54 - interpretmenu2 - writebackup - if_equal $1, UnknownScript_0xbcdf7 - if_equal $2, UnknownScript_0xbce1b - 2jump UnknownScript_0xbce4d -; 0xbcdf7 - -UnknownScript_0xbcdf7: ; 0xbcdf7 - checkcoins 9949 - if_equal $0, UnknownScript_0xbce46 - checkmoney $0, 1000 - if_equal $2, UnknownScript_0xbce3f - givecoins 50 - takemoney $0, 1000 - waitbutton - playsound $0022 - 3writetext $6c, $4830 - closetext - 2jump $4de4 -; 0xbce1b - -UnknownScript_0xbce1b: ; 0xbce1b - checkcoins 9499 - if_equal $0, UnknownScript_0xbce46 - checkmoney $0, 10000 - if_equal $2, UnknownScript_0xbce3f - givecoins 500 - takemoney $0, 10000 - waitbutton - playsound $0022 - 3writetext $6c, $484f - closetext - 2jump $4de4 -; 0xbce3f - -UnknownScript_0xbce3f: ; 0xbce3f - 3writetext $6c, $486f - closetext - loadmovesprites - end -; 0xbce46 - -UnknownScript_0xbce46: ; 0xbce46 - 3writetext $6c, $488c - closetext - loadmovesprites - end -; 0xbce4d - -UnknownScript_0xbce4d: ; 0xbce4d - 3writetext $6c, $48ad - closetext - loadmovesprites - end -; 0xbce54 - - -MenuDataHeader_0xbce54: ; 0xbce54 - db $40 ; flags - db 04, 00 ; start coords - db 11, 15 ; end coords - dw MenuData2_0xbce5c - db 1 ; default option -; 0xbce5c - -MenuData2_0xbce5c: ; 0xbce5c - db $80 ; flags - db 3 ; items - db " 50 : ¥1000@" - db "500 : ¥10000@" - db "CANCEL@" -; 0xbce7f - - -UnknownScript_0xbce7f: ; 0xbce7f - faceplayer - loadfont - special $0059 - if_greater_than $32, UnknownScript_0xbce9a - if_greater_than $96, UnknownScript_0xbce93 - 3writetext $6c, $492a - closetext - loadmovesprites - end -; 0xbce93 - -UnknownScript_0xbce93: ; 0xbce93 - 3writetext $6c, $4954 - closetext - loadmovesprites - end -; 0xbce9a - -UnknownScript_0xbce9a: ; 0xbce9a - 3writetext $6c, $4989 - closetext - loadmovesprites - end -; 0xbcea1 - -MovementData_0xbcea1: ; bcea1 - step_right - step_down - turn_head_up - step_end -; bcea5 - -UnusedPhoneScript: ; 0xbcea5 - 3writetext BANK(UnusedPhoneText), UnusedPhoneText - end - -MomPhoneScript: ; 0xbceaa - checkbit1 $0040 - iftrue .bcec5 - checkbit1 $0041 ; if dude talked to you, then you left home without talking to mom - iftrue MomPhoneLectureScript - checkbit1 $001f - iftrue MomPhoneNoGymQuestScript - checkbit1 $001a - iftrue MomPhoneNoPokedexScript - 2jump MomPhoneNoPokemonScript - -.bcec5 ; 0xbcec5 - checkbit1 $0007 - iftrue MomPhoneHangUpScript - 3writetext BANK(MomPhoneGreetingText), MomPhoneGreetingText - keeptextopen - mapnametotext $0 - checkcode $f - if_equal $1, UnknownScript_0xbcee7 - if_equal $2, $4f27 - 2jump UnknownScript_0xbcf2f - -UnknownScript_0xbcedf: ; 0xbcedf - 3writetext $6d, $4021 - keeptextopen - 2jump UnknownScript_0xbcf37 - -UnknownScript_0xbcee7: ; 0xbcee7 - checkcode $c - if_equal GROUP_NEW_BARK_TOWN, .newbark - if_equal GROUP_CHERRYGROVE_CITY, .cherrygrove - if_equal GROUP_VIOLET_CITY, .violet - if_equal GROUP_AZALEA_TOWN, .azalea - if_equal GROUP_GOLDENROD_CITY, .goldenrod - 3writetext BANK(MomPhoneGenericAreaText), MomPhoneGenericAreaText - keeptextopen - 2jump UnknownScript_0xbcf37 - -.newbark ; 0xbcf05 - 3writetext BANK(MomPhoneNewBarkText), MomPhoneNewBarkText - keeptextopen - 2jump UnknownScript_0xbcf37 - -.cherrygrove ; 0xbcf0d - 3writetext BANK(MomPhoneCherrygroveText), MomPhoneCherrygroveText - keeptextopen - 2jump UnknownScript_0xbcf37 - -.violet ; 0xbcf15 - displaylocation $7 ; sprout tower - 3call $3, UnknownScript_0xbcedf -.azalea ; 0xbcf1b - displaylocation $d ; slowpoke well - 3call $3, UnknownScript_0xbcedf -.goldenrod ; 0xbcf21 - displaylocation $11 ; radio tower - 3call $3, UnknownScript_0xbcedf - 3writetext $6d, $411c - keeptextopen - 2jump UnknownScript_0xbcf37 - -UnknownScript_0xbcf2f: ; 0xbcf2f - 3writetext $6d, $4150 - keeptextopen - 2jump UnknownScript_0xbcf37 - -UnknownScript_0xbcf37: ; 0xbcf37 - checkbit2 $0008 - iffalse UnknownScript_0xbcf49 - checkmoney $1, 0 - if_equal $0, UnknownScript_0xbcf55 - 2jump UnknownScript_0xbcf63 - -UnknownScript_0xbcf49: ; 0xbcf49 - checkmoney $1, 0 - if_equal $0, UnknownScript_0xbcf79 - 2jump UnknownScript_0xbcf6e - -UnknownScript_0xbcf55: ; 0xbcf55 - readmoney $1, $0 - 3writetext $6d, $41a7 - yesorno - iftrue MomPhoneSaveMoneyScript - 2jump MomPhoneWontSaveMoneyScript - -UnknownScript_0xbcf63: ; 0xbcf63 - 3writetext $6d, $41ea - yesorno - iftrue MomPhoneSaveMoneyScript - 2jump MomPhoneWontSaveMoneyScript - -UnknownScript_0xbcf6e: ; 0xbcf6e - 3writetext $6d, $420d - yesorno - iftrue MomPhoneSaveMoneyScript - 2jump MomPhoneWontSaveMoneyScript - -UnknownScript_0xbcf79: ; 0xbcf79 - readmoney $1, $0 - 3writetext $6d, $4249 - yesorno - iftrue MomPhoneSaveMoneyScript - 2jump MomPhoneWontSaveMoneyScript - -MomPhoneSaveMoneyScript: ; 0xbcf87 - setbit2 $0008 - 3writetext $6d, $4289 - keeptextopen - 2jump MomPhoneHangUpScript - -MomPhoneWontSaveMoneyScript: ; 0xbcf92 - clearbit2 $0008 - 3writetext BANK(MomPhoneWontSaveMoneyText), MomPhoneWontSaveMoneyText - keeptextopen - 2jump MomPhoneHangUpScript - -MomPhoneHangUpScript: ; 0xbcf9d - 3writetext BANK(MomPhoneHangUpText), MomPhoneHangUpText - end - -MomPhoneNoPokemonScript: ; 0xbcfa2 - 3writetext BANK(MomPhoneNoPokemonText), MomPhoneNoPokemonText - end - -MomPhoneNoPokedexScript: ; 0xbcfa7 - 3writetext BANK(MomPhoneNoPokedexText), MomPhoneNoPokedexText - end - -MomPhoneNoGymQuestScript: ; 0xbcfac - 3writetext BANK(MomPhoneNoGymQuestText), MomPhoneNoGymQuestText - end - -MomPhoneLectureScript: ; 0xbcfb1 - setbit1 $0040 - setbit2 $0009 - specialphonecall $0000 - 3writetext BANK(MomPhoneLectureText), MomPhoneLectureText - yesorno - iftrue MomPhoneSaveMoneyScript - 2jump MomPhoneWontSaveMoneyScript - -BillPhoneScript1: ; 0xbcfc5 - checktime $2 - iftrue .daygreet - checktime $4 - iftrue .nitegreet - 3writetext BANK(BillPhoneMornGreetingText), BillPhoneMornGreetingText - keeptextopen - 2jump .main - -.daygreet ; 0xbcfd7 - 3writetext BANK(BillPhoneDayGreetingText), BillPhoneDayGreetingText - keeptextopen - 2jump .main - -.nitegreet ; 0xbcfdf - 3writetext BANK(BillPhoneNiteGreetingText), BillPhoneNiteGreetingText - keeptextopen - 2jump .main - -.main ; 0xbcfe7 - 3writetext BANK(BillPhoneGeneriText), BillPhoneGeneriText - keeptextopen - checkcode $10 - RAM2MEM $0 - if_equal $0, .full - if_greater_than $6, .nearlyfull - 3writetext BANK(BillPhoneNotFullText), BillPhoneNotFullText - end - -.nearlyfull ; 0xbcffd - 3writetext BANK(BillPhoneNearlyFullText), BillPhoneNearlyFullText - end - -.full ; 0xbd002 - 3writetext BANK(BillPhoneFullText), BillPhoneFullText - end - -BillPhoneScript2: ; 0xbd007 - 3writetext BANK(BillPhoneNewlyFullText), BillPhoneNewlyFullText - closetext - end - -ElmPhoneScript1: ; 0xbd00d - checkcode $14 - if_equal $1, .pokerus - checkbit1 $0055 - iftrue .discovery - checkbit1 $002d - iffalse .next - checkbit1 $0054 - iftrue .egghatched -.next - checkbit1 $002d - iftrue .eggunhatched - checkbit1 $0701 - iftrue .assistant - checkbit1 $001f - iftrue .checkingegg - checkbit1 $0043 - iftrue .stolen - checkbit1 $001e - iftrue .sawmrpokemon - 3writetext BANK(ElmPhoneStartText), ElmPhoneStartText - end - -.sawmrpokemon ; 0xbd048 - 3writetext BANK(ElmPhoneSawMrPokemonText), ElmPhoneSawMrPokemonText - end - -.stolen ; 0xbd04d - 3writetext BANK(ElmPhonePokemonStolenText), ElmPhonePokemonStolenText - end - -.checkingegg ; 0xbd052 - 3writetext BANK(ElmPhoneCheckingEggText), ElmPhoneCheckingEggText - end - -.assistant ; 0xbd057 - 3writetext BANK(ElmPhoneAssistantText), ElmPhoneAssistantText - end - -.eggunhatched ; 0xbd05c - 3writetext BANK(ElmPhoneEggUnhatchedText), ElmPhoneEggUnhatchedText - end - -.egghatched ; 0xbd061 - 3writetext BANK(ElmPhoneEggHatchedText), ElmPhoneEggHatchedText - setbit1 $0077 - end - -.discovery ; 0xbd069 - random $2 - if_equal $0, .nextdiscovery - 3writetext BANK(ElmPhoneDiscovery1Text), ElmPhoneDiscovery1Text - end - -.nextdiscovery ; 0xbd074 - 3writetext BANK(ElmPhoneDiscovery2Text), ElmPhoneDiscovery2Text - end - -.pokerus ; 0xbd079 - 3writetext BANK(ElmPhonePokerusText), ElmPhonePokerusText - specialphonecall $0000 - end - -ElmPhoneScript2: ; 0xbd081 - checkcode $14 - if_equal $2, .disaster - if_equal $3, .assistant - if_equal $4, .rocket - if_equal $5, .gift - if_equal $8, .gift - 3writetext BANK(ElmPhonePokerusText), ElmPhonePokerusText - specialphonecall $0000 - end - -.disaster ; 0xbd09f - 3writetext BANK(ElmPhoneDisasterText), ElmPhoneDisasterText - specialphonecall $0000 - setbit1 $0043 - end - -.assistant ; 0xbd0aa - 3writetext BANK(ElmPhoneEggAssistantText), ElmPhoneEggAssistantText - specialphonecall $0000 - clearbit1 $0700 - setbit1 $0701 - end - -.rocket ; 0xbd0b8 - 3writetext BANK(ElmPhoneRocketText), ElmPhoneRocketText - specialphonecall $0000 - end - -.gift ; 0xbd0c0 - 3writetext BANK(ElmPhoneGiftText), ElmPhoneGiftText - specialphonecall $0000 - end - -.unused ; 0xbd0c8 - 3writetext BANK(ElmPhoneUnusedText), ElmPhoneUnusedText - specialphonecall $0000 - end -; bd0d0 - +INCLUDE "engine/std_scripts.asm" INCBIN "baserom.gbc", $bd0d0, $be699-$bd0d0 -- cgit v1.2.3 From 353b4ac6da0800497d1fffa239628428342ddec1 Mon Sep 17 00:00:00 2001 From: yenatch Date: Sat, 7 Sep 2013 17:35:41 -0400 Subject: fix up TreeMons/RockMons --- main.asm | 148 +++++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 96 insertions(+), 52 deletions(-) diff --git a/main.asm b/main.asm index 647589de4..826dfa5e4 100644 --- a/main.asm +++ b/main.asm @@ -72429,40 +72429,46 @@ Functionb81e2: ; b81e2 INCBIN "baserom.gbc", $b81ea, $b8219 - $b81ea Functionb8219: ; b8219 -; deals strictly with rockmon encounter +; get a RockMon encounter + xor a ld [$d22e], a ld [CurPartyLevel], a - ld hl, WildRockMonMapTable + + ld hl, RockMonMaps call GetTreeMonEncounterTable jr nc, .quit - call LoadWildTreeMonData + + call LoadTreeMonData jr nc, .quit - ld a, $0a + + ld a, 10 call Function2fb1 - cp a, $04 + cp 4 jr nc, .quit - call $441f + + call Functionb841f jr nc, .quit + ret + .quit xor a ret ; b823e -db $05 ; ???? + db $05 ; ???? GetTreeMonEncounterTable: ; b823f -; reads a map-sensitive encounter table -; compares current map with maps in the table -; if there is a match, encounter table # is loaded into a +; Return carry and table id in a +; if MapGroup and MapNumber are in table hl ld a, [MapNumber] ld e, a ld a, [MapGroup] ld d, a .loop ld a, [hli] - cp a, $ff + cp $ff jr z, .quit cp d jr nz, .skip2 @@ -72486,55 +72492,60 @@ GetTreeMonEncounterTable: ; b823f INCBIN "baserom.gbc", $B825E, $b82c5 - $b825e -WildRockMonMapTable: ; b82c5 - db GROUP_CIANWOOD_CITY, MAP_CIANWOOD_CITY, $07 - db GROUP_ROUTE_40, MAP_ROUTE_40, $07 - db GROUP_DARK_CAVE_VIOLET_ENTRANCE, MAP_DARK_CAVE_VIOLET_ENTRANCE, $07 - db GROUP_SLOWPOKE_WELL_B1F, MAP_SLOWPOKE_WELL_B1F, $07 +RockMonMaps: ; b82c5 + db GROUP_CIANWOOD_CITY, MAP_CIANWOOD_CITY, 7 + db GROUP_ROUTE_40, MAP_ROUTE_40, 7 + db GROUP_DARK_CAVE_VIOLET_ENTRANCE, MAP_DARK_CAVE_VIOLET_ENTRANCE, 7 + db GROUP_SLOWPOKE_WELL_B1F, MAP_SLOWPOKE_WELL_B1F, 7 db $ff ; end ; b82d2 -LoadWildTreeMonData: ; b82d2 -; input: a = table number -; returns wildtreemontable pointer in hl -; sets carry if successful - cp a, $08 ; which table? - jr nc, .quit ; only 8 tables +LoadTreeMonData: ; b82d2 +; Return TreeMon pointer a in hl +; Return carry on success + +; only 7 tables + cp 8 + jr nc, .quit + and a - jr z, .quit ; 0 is invalid + jr z, .quit + ld e, a - ld d, $00 - ld hl, WildTreeMonPointerTable + ld d, 0 + ld hl, TreeMonPointers add hl, de add hl, de - ld a, [hli] ; store pointer in hl + + ld a, [hli] ld h, [hl] ld l, a + scf ret + .quit xor a ret ; b82e8 -WildTreeMonPointerTable: ; b82e8 +TreeMonPointers: ; b82e8 ; seems to point to "normal" tree encounter data -; as such only odd-numbered tables are used -; rockmon is 13th - dw WildTreeMonTable1 ; filler - dw WildTreeMonTable1 ; 1 - dw WildTreeMonTable3 ; 2 - dw WildTreeMonTable5 ; 3 - dw WildTreeMonTable7 ; 4 - dw WildTreeMonTable9 ; 5 - dw WildTreeMonTable11 ; 6 - dw WildRockMonTable ; 7 - dw WildTreeMonTable1 ; 8 +; so only odd-numbered tables are used + dw TreeMons1 ; filler + dw TreeMons1 ; 1 + dw TreeMons3 ; 2 + dw TreeMons5 ; 3 + dw TreeMons7 ; 4 + dw TreeMons9 ; 5 + dw TreeMons11 ; 6 + dw RockMons ; 7 + dw TreeMons1 ; filler ; b82fa ; structure: % species level -WildTreeMonTable1: ; b82fa +TreeMons1: ; b82fa db 50, SPEAROW, 10 db 15, SPEAROW, 10 db 15, SPEAROW, 10 @@ -72544,7 +72555,7 @@ WildTreeMonTable1: ; b82fa db $ff ; end ; b830d -WildTreeMonTable2 ; b830d +TreeMons2 ; b830d ; unused db 50, SPEAROW, 10 db 15, HERACROSS, 10 @@ -72555,7 +72566,7 @@ WildTreeMonTable2 ; b830d db $ff ; end ; b8320 -WildTreeMonTable3: ; b8320 +TreeMons3: ; b8320 db 50, SPEAROW, 10 db 15, EKANS, 10 db 15, SPEAROW, 10 @@ -72565,7 +72576,7 @@ WildTreeMonTable3: ; b8320 db $ff ; end ; b8333 -WildTreeMonTable4: ; b8333 +TreeMons4: ; b8333 ; unused db 50, SPEAROW, 10 db 15, HERACROSS, 10 @@ -72576,7 +72587,7 @@ WildTreeMonTable4: ; b8333 db $ff ; end ; b8346 -WildTreeMonTable5: ; b8346 +TreeMons5: ; b8346 db 50, HOOTHOOT, 10 db 15, SPINARAK, 10 db 15, LEDYBA, 10 @@ -72586,7 +72597,7 @@ WildTreeMonTable5: ; b8346 db $ff ; end ; b8359 -WildTreeMonTable6: ; b8359 +TreeMons6: ; b8359 ; unused db 50, HOOTHOOT, 10 db 15, PINECO, 10 @@ -72597,7 +72608,7 @@ WildTreeMonTable6: ; b8359 db $ff ; end ; b836c -WildTreeMonTable7: ; b836c +TreeMons7: ; b836c db 50, HOOTHOOT, 10 db 15, EKANS, 10 db 15, HOOTHOOT, 10 @@ -72607,7 +72618,7 @@ WildTreeMonTable7: ; b836c db $ff ; end ; b837f -WildTreeMonTable8: ; b837f +TreeMons8: ; b837f ; unused db 50, HOOTHOOT, 10 db 15, PINECO, 10 @@ -72618,7 +72629,7 @@ WildTreeMonTable8: ; b837f db $ff ; end ; b8392 -WildTreeMonTable9: ; b8392 +TreeMons9: ; b8392 db 50, HOOTHOOT, 10 db 15, VENONAT, 10 db 15, HOOTHOOT, 10 @@ -72628,7 +72639,7 @@ WildTreeMonTable9: ; b8392 db $ff ; end ; b83a5 -WildTreeMonTable10: ; b83a5 +TreeMons10: ; b83a5 ; unused db 50, HOOTHOOT, 10 db 15, PINECO, 10 @@ -72639,7 +72650,7 @@ WildTreeMonTable10: ; b83a5 db $ff ; end ; b83b8 -WildTreeMonTable11: ; b83b8 +TreeMons11: ; b83b8 db 50, HOOTHOOT, 10 db 15, PINECO, 10 db 15, PINECO, 10 @@ -72649,7 +72660,7 @@ WildTreeMonTable11: ; b83b8 db $ff ; end ; b83cb -WildTreeMonTable12; b83cb +TreeMons12; b83cb ; unused db 50, HOOTHOOT, 10 db 15, CATERPIE, 10 @@ -72660,13 +72671,46 @@ WildTreeMonTable12; b83cb db $ff ; end ; b83de -WildRockMonTable: ; b83de +RockMons: ; b83de db 90, KRABBY, 15 db 10, SHUCKLE, 15 db $ff ; end ; b83e5 -INCBIN "baserom.gbc", $b83e5, $b8f8f - $b83e5 +INCBIN "baserom.gbc", $b83e5, $b841f - $b83e5 + +Functionb841f: ; b841f +; Read a TreeMons table. + + ld a, 100 + call Function2fb1 +.asm_b8424 + sub [hl] + jr c, .asm_b842c + inc hl + inc hl + inc hl + jr .asm_b8424 + +.asm_b842c + ld a, [hli] + cp $ff + jr z, .asm_b843b + ld a, [hli] + ld [$d22e], a + ld a, [hl] + ld [CurPartyLevel], a + scf + ret + +.asm_b843b + xor a + ld [$d22e], a + ld [CurPartyLevel], a + ret +; b8443 + +INCBIN "baserom.gbc", $b8443, $b8f8f - $b8443 Functionb8f8f: ; b8f8f ld a, c -- cgit v1.2.3 From 03a6cfc2d3af39ca32bc9dffea93026b46649b61 Mon Sep 17 00:00:00 2001 From: yenatch Date: Sat, 7 Sep 2013 22:47:58 -0400 Subject: OTName wram label --- wram.asm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/wram.asm b/wram.asm index f755680ee..6b302f31c 100644 --- a/wram.asm +++ b/wram.asm @@ -477,7 +477,10 @@ BattleMonType1: ; c64a BattleMonType2: ; c64b ds 1 - ds 23 + ds 10 + +OTName: ; c656 + ds 13 CurOTMon: ; c663 ds 1 -- cgit v1.2.3 From 3b119687f3bba17bf289271d4d2af695a2e8dd0b Mon Sep 17 00:00:00 2001 From: yenatch Date: Sat, 7 Sep 2013 22:48:07 -0400 Subject: leftover trainer class names from red you can find these in pokered at TrainerNamePointers (9:7e64) --- main.asm | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 115 insertions(+), 1 deletion(-) diff --git a/main.asm b/main.asm index 826dfa5e4..c589b5e29 100644 --- a/main.asm +++ b/main.asm @@ -59296,7 +59296,121 @@ Dark: ; 50a28 -INCBIN "baserom.gbc", $50a28, $50b0a - $50a28 +Function50a28: ; 50a28 + ld hl, Strings50a42 + ld a, [TrainerClass] + dec a + ld c, a + ld b, 0 + add hl, bc + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld de, StringBuffer1 +.copy + ld a, [hli] + ld [de], a + inc de + cp "@" + jr nz, .copy + ret +; 50a42 + +Strings50a42: ; 50a42 +; Untranslated trainer class names from Red. + + dw .Youngster + dw .BugCatcher + dw .Lass + dw OTName + dw .JrTrainerM + dw .JrTrainerF + dw .Pokemaniac + dw .SuperNerd + dw OTName + dw OTName + dw .Burglar + dw .Engineer + dw .Jack + dw OTName + dw .Swimmer + dw OTName + dw OTName + dw .Beauty + dw OTName + dw .Rocker + dw .Juggler + dw OTName + dw OTName + dw .Blackbelt + dw OTName + dw .ProfOak + dw .Chief + dw .Scientist + dw OTName + dw .Rocket + dw .CooltrainerM + dw .CooltrainerF + dw OTName + dw OTName + dw OTName + dw OTName + dw OTName + dw OTName + dw OTName + dw OTName + dw OTName + dw OTName + dw OTName + dw OTName + dw OTName + dw OTName + dw OTName + +.Youngster + db "たんパン@" +.BugCatcher + db "むしとり@" +.Lass + db "ミニスカ@" +.JrTrainerM + db "ボーイ@" +.JrTrainerF + db "ガール@" +.Pokemaniac + db "マニア@" +.SuperNerd + db "りかけい@" +.Burglar + db "どろぼう@" +.Engineer + db "ォヤジ@" +.Jack + db "ジャック@" +.Swimmer + db "かいパン@" +.Beauty + db "おねえさん@" +.Rocker + db "グループ@" +.Juggler + db "ジャグラー@" +.Blackbelt + db "からて@" +.ProfOak + db "ォーキド@" +.Chief + db "チーフ@" +.Scientist + db "けんきゅういん@" +.Rocket + db "だんいん@" +.CooltrainerM + db "エりート♂@" +.CooltrainerF + db "エりート♀@" +; 50b0a DrawPlayerHP: ; 50b0a -- cgit v1.2.3 From e13f03ae4447b741a7af9b4c28b7c36f38311c0d Mon Sep 17 00:00:00 2001 From: yenatch Date: Sat, 7 Sep 2013 23:22:17 -0400 Subject: comment PrintMonTypes --- main.asm | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/main.asm b/main.asm index c589b5e29..65a9c2ba3 100644 --- a/main.asm +++ b/main.asm @@ -59141,26 +59141,33 @@ Function508d5: ; 508d5 PrintMonTypes: ; 5090d +; Print both types of CurSpecies on the stats screen at hl. + push hl call GetBaseData pop hl + push hl ld a, [BaseType1] - call .asm_50928 + call .PrintType + ld a, [BaseType1] ld b, a ld a, [BaseType2] cp b pop hl - jr z, .asm_5092b + jr z, .HideSecondType + +; Next row ld bc, 20 add hl, bc -.asm_50928 +.PrintType ld b, a jr PrintType -.asm_5092b +.HideSecondType +; This doesn't actually do anything. ld a, " " ld bc, 20 - 3 add hl, bc -- cgit v1.2.3 From 801861458537ce88a7b5b608af25401989bab20a Mon Sep 17 00:00:00 2001 From: yenatch Date: Sat, 7 Sep 2013 23:24:22 -0400 Subject: split type strings and related asm out into text/types.asm --- main.asm | 162 +-------------------------------------------------------- text/types.asm | 162 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 163 insertions(+), 161 deletions(-) create mode 100644 text/types.asm diff --git a/main.asm b/main.asm index 65a9c2ba3..293697989 100644 --- a/main.asm +++ b/main.asm @@ -59140,167 +59140,7 @@ Function508d5: ; 508d5 ; 5090d -PrintMonTypes: ; 5090d -; Print both types of CurSpecies on the stats screen at hl. - - push hl - call GetBaseData - pop hl - - push hl - ld a, [BaseType1] - call .PrintType - - ld a, [BaseType1] - ld b, a - ld a, [BaseType2] - cp b - pop hl - jr z, .HideSecondType - -; Next row - ld bc, 20 - add hl, bc - -.PrintType - ld b, a - jr PrintType - -.HideSecondType -; This doesn't actually do anything. - ld a, " " - ld bc, 20 - 3 - add hl, bc - ld [hl], a - inc bc - add hl, bc - ld bc, 5 - jp ByteFill -; 5093a - -PrintMoveType: ; 5093a -; Print the type of move b at hl. - - push hl - ld a, b - dec a - ld bc, Move2 - Move1 - ld hl, Moves - call AddNTimes - ld de, StringBuffer1 - ld a, BANK(Moves) - call FarCopyBytes - ld a, [StringBuffer1 + PlayerMoveType - PlayerMoveStruct] - pop hl - - ld b, a -; 50953 - -PrintType: ; 50953 -; Print type b at hl. - ld a, b - - push hl - add a - ld hl, TypeNames - ld e, a - ld d, 0 - add hl, de - ld a, [hli] - ld e, a - ld d, [hl] - pop hl - - jp PlaceString -; 50964 - - -GetTypeName: ; 50964 -; Copy the name of type $d265 to StringBuffer1. - ld a, [$d265] - ld hl, TypeNames - ld e, a - ld d, 0 - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - ld de, StringBuffer1 - ld bc, $000d - jp CopyBytes -; 5097b - - -TypeNames: ; 5097b - dw Normal - dw Fighting - dw Flying - dw Poison - dw Ground - dw Rock - dw Bird - dw Bug - dw Ghost - dw Steel - dw Normal - dw Normal - dw Normal - dw Normal - dw Normal - dw Normal - dw Normal - dw Normal - dw Normal - dw UnknownType - dw Fire - dw Water - dw Grass - dw Electric - dw Psychic - dw Ice - dw Dragon - dw Dark - -Normal: - db "NORMAL@" -Fighting: - db "FIGHTING@" -Flying: - db "FLYING@" -Poison: - db "POISON@" -UnknownType: - db "???@" -Fire: - db "FIRE@" -Water: - db "WATER@" -Grass: - db "GRASS@" -Electric: - db "ELECTRIC@" -Psychic: - db "PSYCHIC@" -Ice: - db "ICE@" -Ground: - db "GROUND@" -Rock: - db "ROCK@" -Bird: - db "BIRD@" -Bug: - db "BUG@" -Ghost: - db "GHOST@" -Steel: - db "STEEL@" -Dragon: - db "DRAGON@" -Dark: - db "DARK@" -; 50a28 +INCLUDE "text/types.asm" Function50a28: ; 50a28 diff --git a/text/types.asm b/text/types.asm new file mode 100644 index 000000000..0addaaf6e --- /dev/null +++ b/text/types.asm @@ -0,0 +1,162 @@ +PrintMonTypes: ; 5090d +; Print both types of CurSpecies on the stats screen at hl. + + push hl + call GetBaseData + pop hl + + push hl + ld a, [BaseType1] + call .PrintType + + ld a, [BaseType1] + ld b, a + ld a, [BaseType2] + cp b + pop hl + jr z, .HideSecondType + +; Next row + ld bc, 20 + add hl, bc + +.PrintType + ld b, a + jr PrintType + +.HideSecondType +; This doesn't actually do anything. + ld a, " " + ld bc, 20 - 3 + add hl, bc + ld [hl], a + inc bc + add hl, bc + ld bc, 5 + jp ByteFill +; 5093a + +PrintMoveType: ; 5093a +; Print the type of move b at hl. + + push hl + ld a, b + dec a + ld bc, Move2 - Move1 + ld hl, Moves + call AddNTimes + ld de, StringBuffer1 + ld a, BANK(Moves) + call FarCopyBytes + ld a, [StringBuffer1 + PlayerMoveType - PlayerMoveStruct] + pop hl + + ld b, a +; 50953 + +PrintType: ; 50953 +; Print type b at hl. + ld a, b + + push hl + add a + ld hl, TypeNames + ld e, a + ld d, 0 + add hl, de + ld a, [hli] + ld e, a + ld d, [hl] + pop hl + + jp PlaceString +; 50964 + + +GetTypeName: ; 50964 +; Copy the name of type $d265 to StringBuffer1. + ld a, [$d265] + ld hl, TypeNames + ld e, a + ld d, 0 + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ld de, StringBuffer1 + ld bc, $000d + jp CopyBytes +; 5097b + + +TypeNames: ; 5097b + dw Normal + dw Fighting + dw Flying + dw Poison + dw Ground + dw Rock + dw Bird + dw Bug + dw Ghost + dw Steel + dw Normal + dw Normal + dw Normal + dw Normal + dw Normal + dw Normal + dw Normal + dw Normal + dw Normal + dw UnknownType + dw Fire + dw Water + dw Grass + dw Electric + dw Psychic + dw Ice + dw Dragon + dw Dark + +Normal: + db "NORMAL@" +Fighting: + db "FIGHTING@" +Flying: + db "FLYING@" +Poison: + db "POISON@" +UnknownType: + db "???@" +Fire: + db "FIRE@" +Water: + db "WATER@" +Grass: + db "GRASS@" +Electric: + db "ELECTRIC@" +Psychic: + db "PSYCHIC@" +Ice: + db "ICE@" +Ground: + db "GROUND@" +Rock: + db "ROCK@" +Bird: + db "BIRD@" +Bug: + db "BUG@" +Ghost: + db "GHOST@" +Steel: + db "STEEL@" +Dragon: + db "DRAGON@" +Dark: + db "DARK@" +; 50a28 + -- cgit v1.2.3 From 7a3a4f913b32784480dc297e8a4794934ec87b06 Mon Sep 17 00:00:00 2001 From: yenatch Date: Sat, 7 Sep 2013 23:26:28 -0400 Subject: split fruit tree asm out into engine/fruit_trees.asm --- engine/fruit_trees.asm | 165 ++++++++++++++++++++++++++++++++++++++++++++++++ main.asm | 166 +------------------------------------------------ 2 files changed, 166 insertions(+), 165 deletions(-) create mode 100644 engine/fruit_trees.asm diff --git a/engine/fruit_trees.asm b/engine/fruit_trees.asm new file mode 100644 index 000000000..5890d6784 --- /dev/null +++ b/engine/fruit_trees.asm @@ -0,0 +1,165 @@ +FruitTreeScript: ; 44000 + 3callasm BANK(GetCurTreeFruit), GetCurTreeFruit + loadfont + copybytetovar CurFruit + itemtotext $0, $0 + 2writetext FruitBearingTreeText + keeptextopen + 3callasm BANK(TryResetFruitTrees), TryResetFruitTrees + 3callasm BANK(CheckFruitTree), CheckFruitTree + iffalse .fruit + 2writetext NothingHereText + closetext + 2jump .end + +.fruit + 2writetext HeyItsFruitText + copybytetovar CurFruit + giveitem $ff, 1 + iffalse .packisfull + keeptextopen + 2writetext ObtainedFruitText + 3callasm BANK(PickedFruitTree), PickedFruitTree + specialsound + itemnotify + 2jump .end + +.packisfull + keeptextopen + 2writetext FruitPackIsFullText + closetext + +.end + loadmovesprites + end +; 44041 + +GetCurTreeFruit: ; 44041 + ld a, [CurFruitTree] + dec a + call GetFruitTreeItem + ld [CurFruit], a + ret +; 4404c + +TryResetFruitTrees: ; 4404c + ld hl, $dc1e + bit 4, [hl] + ret nz + jp ResetFruitTrees +; 44055 + +CheckFruitTree: ; 44055 + ld b, 2 + call GetFruitTreeFlag + ld a, c + ld [ScriptVar], a + ret +; 4405f + +PickedFruitTree: ; 4405f + ld a, $41 + ld hl, $609b + rst FarCall ; empty function + + ld b, 1 + jp GetFruitTreeFlag +; 4406a + +ResetFruitTrees: ; 4406a + xor a + ld hl, FruitTreeFlags + ld [hli], a + ld [hli], a + ld [hli], a + ld [hl], a + ld hl, $dc1e + set 4, [hl] + ret +; 44078 + +GetFruitTreeFlag: ; 44078 + push hl + push de + ld a, [CurFruitTree] + dec a + ld e, a + ld d, 0 + ld hl, FruitTreeFlags + call FlagAction + pop de + pop hl + ret +; 4408a + +GetFruitTreeItem: ; 4408a + push hl + push de + ld e, a + ld d, 0 + ld hl, FruitTreeItems + add hl, de + ld a, [hl] + pop de + pop hl + ret +; 44097 + +FruitTreeItems: ; 44097 + db BERRY + db BERRY + db BERRY + db BERRY + db PSNCUREBERRY + db PSNCUREBERRY + db BITTER_BERRY + db BITTER_BERRY + db PRZCUREBERRY + db PRZCUREBERRY + db MYSTERYBERRY + db MYSTERYBERRY + db ICE_BERRY + db ICE_BERRY + db MINT_BERRY + db BURNT_BERRY + db RED_APRICORN + db BLU_APRICORN + db BLK_APRICORN + db WHT_APRICORN + db PNK_APRICORN + db GRN_APRICORN + db YLW_APRICORN + db BERRY + db PSNCUREBERRY + db BITTER_BERRY + db PRZCUREBERRY + db ICE_BERRY + db MINT_BERRY + db BURNT_BERRY +; 440b5 + +FruitBearingTreeText: ; 440b5 + text_jump _FruitBearingTreeText, BANK(_FruitBearingTreeText) + db "@" +; 440ba + +HeyItsFruitText: ; 440ba + text_jump _HeyItsFruitText, BANK(_HeyItsFruitText) + db "@" +; 440bf + +ObtainedFruitText: ; 440bf + text_jump _ObtainedFruitText, BANK(_ObtainedFruitText) + db "@" +; 440c4 + +FruitPackIsFullText: ; 440c4 + text_jump _FruitPackIsFullText, BANK(_FruitPackIsFullText) + db "@" +; 440c9 + +NothingHereText: ; 440c9 + text_jump _NothingHereText, BANK(_NothingHereText) + db "@" +; 440ce + diff --git a/main.asm b/main.asm index 293697989..5e0e782ba 100644 --- a/main.asm +++ b/main.asm @@ -51896,171 +51896,7 @@ INCLUDE "stats/evos_attacks.asm" SECTION "bank11",ROMX,BANK[$11] -FruitTreeScript: ; 44000 - 3callasm BANK(GetCurTreeFruit), GetCurTreeFruit - loadfont - copybytetovar CurFruit - itemtotext $0, $0 - 2writetext FruitBearingTreeText - keeptextopen - 3callasm BANK(TryResetFruitTrees), TryResetFruitTrees - 3callasm BANK(CheckFruitTree), CheckFruitTree - iffalse .fruit - 2writetext NothingHereText - closetext - 2jump .end - -.fruit - 2writetext HeyItsFruitText - copybytetovar CurFruit - giveitem $ff, 1 - iffalse .packisfull - keeptextopen - 2writetext ObtainedFruitText - 3callasm BANK(PickedFruitTree), PickedFruitTree - specialsound - itemnotify - 2jump .end - -.packisfull - keeptextopen - 2writetext FruitPackIsFullText - closetext - -.end - loadmovesprites - end -; 44041 - -GetCurTreeFruit: ; 44041 - ld a, [CurFruitTree] - dec a - call GetFruitTreeItem - ld [CurFruit], a - ret -; 4404c - -TryResetFruitTrees: ; 4404c - ld hl, $dc1e - bit 4, [hl] - ret nz - jp ResetFruitTrees -; 44055 - -CheckFruitTree: ; 44055 - ld b, 2 - call GetFruitTreeFlag - ld a, c - ld [ScriptVar], a - ret -; 4405f - -PickedFruitTree: ; 4405f - ld a, $41 - ld hl, $609b - rst FarCall ; empty function - - ld b, 1 - jp GetFruitTreeFlag -; 4406a - -ResetFruitTrees: ; 4406a - xor a - ld hl, FruitTreeFlags - ld [hli], a - ld [hli], a - ld [hli], a - ld [hl], a - ld hl, $dc1e - set 4, [hl] - ret -; 44078 - -GetFruitTreeFlag: ; 44078 - push hl - push de - ld a, [CurFruitTree] - dec a - ld e, a - ld d, 0 - ld hl, FruitTreeFlags - call FlagAction - pop de - pop hl - ret -; 4408a - -GetFruitTreeItem: ; 4408a - push hl - push de - ld e, a - ld d, 0 - ld hl, FruitTreeItems - add hl, de - ld a, [hl] - pop de - pop hl - ret -; 44097 - -FruitTreeItems: ; 44097 - db BERRY - db BERRY - db BERRY - db BERRY - db PSNCUREBERRY - db PSNCUREBERRY - db BITTER_BERRY - db BITTER_BERRY - db PRZCUREBERRY - db PRZCUREBERRY - db MYSTERYBERRY - db MYSTERYBERRY - db ICE_BERRY - db ICE_BERRY - db MINT_BERRY - db BURNT_BERRY - db RED_APRICORN - db BLU_APRICORN - db BLK_APRICORN - db WHT_APRICORN - db PNK_APRICORN - db GRN_APRICORN - db YLW_APRICORN - db BERRY - db PSNCUREBERRY - db BITTER_BERRY - db PRZCUREBERRY - db ICE_BERRY - db MINT_BERRY - db BURNT_BERRY -; 440b5 - -FruitBearingTreeText: ; 440b5 - text_jump _FruitBearingTreeText, BANK(_FruitBearingTreeText) - db "@" -; 440ba - -HeyItsFruitText: ; 440ba - text_jump _HeyItsFruitText, BANK(_HeyItsFruitText) - db "@" -; 440bf - -ObtainedFruitText: ; 440bf - text_jump _ObtainedFruitText, BANK(_ObtainedFruitText) - db "@" -; 440c4 - -FruitPackIsFullText: ; 440c4 - text_jump _FruitPackIsFullText, BANK(_FruitPackIsFullText) - db "@" -; 440c9 - -NothingHereText: ; 440c9 - text_jump _NothingHereText, BANK(_NothingHereText) - db "@" -; 440ce - +INCLUDE "engine/fruit_trees.asm" AIChooseMove: ; 440ce -- cgit v1.2.3 From 9f53825ce2701f94470a98b3decd8013fbeba91a Mon Sep 17 00:00:00 2001 From: yenatch Date: Sat, 7 Sep 2013 23:38:19 -0400 Subject: move common asm from engine/ to common/ engine/ was getting really bloated and common asm wasnt what it was made for --- common/copy.asm | 431 +++++++++++++++++ common/decompress.asm | 367 +++++++++++++++ common/delay.asm | 23 + common/fade.asm | 134 ++++++ common/farcall.asm | 55 +++ common/game_time.asm | 132 ++++++ common/init.asm | 225 +++++++++ common/joypad.asm | 491 +++++++++++++++++++ common/lcd.asm | 81 ++++ common/map_objects.asm | 683 +++++++++++++++++++++++++++ common/menu.asm | 603 ++++++++++++++++++++++++ common/palettes.asm | 347 ++++++++++++++ common/rtc.asm | 25 + common/serial.asm | 408 ++++++++++++++++ common/sine.asm | 22 + common/text.asm | 1230 ++++++++++++++++++++++++++++++++++++++++++++++++ common/time.asm | 311 ++++++++++++ common/vblank.asm | 541 +++++++++++++++++++++ common/video.asm | 487 +++++++++++++++++++ engine/copy.asm | 431 ----------------- engine/decompress.asm | 367 --------------- engine/delay.asm | 23 - engine/fade.asm | 134 ------ engine/farcall.asm | 55 --- engine/game_time.asm | 132 ------ engine/init.asm | 225 --------- engine/joypad.asm | 491 ------------------- engine/lcd.asm | 81 ---- engine/map_objects.asm | 683 --------------------------- engine/menu.asm | 603 ------------------------ engine/palettes.asm | 347 -------------- engine/rtc.asm | 25 - engine/serial.asm | 408 ---------------- engine/sine.asm | 22 - engine/text.asm | 1230 ------------------------------------------------ engine/time.asm | 311 ------------ engine/vblank.asm | 541 --------------------- engine/video.asm | 487 ------------------- main.asm | 38 +- 39 files changed, 6615 insertions(+), 6615 deletions(-) create mode 100644 common/copy.asm create mode 100644 common/decompress.asm create mode 100644 common/delay.asm create mode 100644 common/fade.asm create mode 100644 common/farcall.asm create mode 100644 common/game_time.asm create mode 100644 common/init.asm create mode 100644 common/joypad.asm create mode 100644 common/lcd.asm create mode 100644 common/map_objects.asm create mode 100644 common/menu.asm create mode 100644 common/palettes.asm create mode 100644 common/rtc.asm create mode 100644 common/serial.asm create mode 100644 common/sine.asm create mode 100644 common/text.asm create mode 100644 common/time.asm create mode 100644 common/vblank.asm create mode 100644 common/video.asm delete mode 100644 engine/copy.asm delete mode 100644 engine/decompress.asm delete mode 100644 engine/delay.asm delete mode 100644 engine/fade.asm delete mode 100644 engine/farcall.asm delete mode 100644 engine/game_time.asm delete mode 100644 engine/init.asm delete mode 100644 engine/joypad.asm delete mode 100644 engine/lcd.asm delete mode 100644 engine/map_objects.asm delete mode 100644 engine/menu.asm delete mode 100644 engine/palettes.asm delete mode 100644 engine/rtc.asm delete mode 100644 engine/serial.asm delete mode 100644 engine/sine.asm delete mode 100644 engine/text.asm delete mode 100644 engine/time.asm delete mode 100644 engine/vblank.asm delete mode 100644 engine/video.asm diff --git a/common/copy.asm b/common/copy.asm new file mode 100644 index 000000000..ad25c96e6 --- /dev/null +++ b/common/copy.asm @@ -0,0 +1,431 @@ +; Functions to copy data from ROM. + + +Functiondc9: ; dc9 + ld a, [rLCDC] + bit 7, a + jp z, Copy2bpp + + ld a, [hROMBank] + push af + ld a, BANK(Function104284) + rst Bankswitch + call Function104284 + pop af + rst Bankswitch + + ret +; ddc + +Functionddc: ; ddc + ld a, [rLCDC] + bit 7, a + jp z, Copy1bpp + + ld a, [hROMBank] + push af + ld a, BANK(Function1042b2) + rst Bankswitch + call Function1042b2 + pop af + rst Bankswitch + + ret +; def + +Functiondef: ; def + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + call FarCopyBytesDouble + pop af + rst Bankswitch + ret +; dfd + +Functiondfd: ; dfd + dec c + ld a, [hBGMapMode] + push af + xor a + ld [hBGMapMode], a + ld a, [hROMBank] + push af + ld a, b + rst Bankswitch + +.asm_e09 + ld a, d + ld [rHDMA1], a + ld a, e + and $f0 + ld [rHDMA2], a + ld a, h + and $1f + ld [rHDMA3], a + ld a, l + and $f0 + ld [rHDMA4], a + ld a, c + cp $8 + jr c, .asm_e3c + sub $8 + ld c, a + ld a, $f + ld [hDMATransfer], a + call DelayFrame + ld a, l + add $0 + ld l, a + ld a, h + adc $1 + ld h, a + ld a, e + add $0 + ld e, a + ld a, d + adc $1 + ld d, a + jr .asm_e09 + +.asm_e3c + ld a, c + and $7f + ld [hDMATransfer], a + call DelayFrame + pop af + rst Bankswitch + + pop af + ld [hBGMapMode], a + ret +; e4a + + + +Functione4a: ; e4a + ld a, $5 + ld hl, $4135 + rst FarCall + ret +; e51 + + + +Functione51: ; e51 + ld a, $3e + ld hl, $7449 + rst FarCall + ret +; e58 + +Functione58: ; e58 + ld a, $3e + ld hl, $74be + rst FarCall + ret +; e5f + + + +Functione5f: ; e5f + ld a, $3e + ld hl, $748a + rst FarCall + ld a, $3e + ld hl, $74b0 + rst FarCall + ret +; e6c + +Functione6c: ; e6c + ld a, $3e + ld hl, $74b0 + rst FarCall + ret +; e73 + +Functione73: ; e73 + push de + ld a, $0 + call GetSRAMBank + push bc + ld de, $a000 + ld a, b + call FarDecompress + pop bc + pop hl + ld de, $a000 + call Request2bpp + call CloseSRAM + ret +; e8d + + + +FarCopyBytes: ; e8d +; copy bc bytes from a:hl to de + + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + + call CopyBytes + + pop af + rst Bankswitch + ret +; 0xe9b + + +FarCopyBytesDouble: ; e9b +; Copy bc bytes from a:hl to bc*2 bytes at de, +; doubling each byte in the process. + + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + +; switcheroo, de <> hl + ld a, h + ld h, d + ld d, a + ld a, l + ld l, e + ld e, a + + inc b + inc c + jr .dec + +.loop + ld a, [de] + inc de + ld [hli], a + ld [hli], a +.dec + dec c + jr nz, .loop + dec b + jr nz, .loop + + pop af + rst Bankswitch + ret +; 0xeba + + +Request2bpp: ; eba + ld a, [hBGMapMode] + push af + xor a + ld [hBGMapMode], a + + ld a, [hROMBank] + push af + ld a, b + rst Bankswitch + + ld a, [$ffd3] + push af + + ld a, $8 + ld [$ffd3], a + ld a, [InLinkBattle] + cp $4 + jr nz, .asm_edc + ld a, [$ffe9] + and a + jr nz, .asm_edc + ld a, $6 + ld [$ffd3], a + +.asm_edc + ld a, e + ld [Requested2bppSource], a + ld a, d + ld [Requested2bppSource + 1], a + ld a, l + ld [Requested2bppDest], a + ld a, h + ld [Requested2bppDest + 1], a + +.asm_eec + ld a, c + ld hl, $ffd3 + cp [hl] + jr nc, .asm_f08 + + ld [Requested2bpp], a +.wait + call DelayFrame + ld a, [Requested2bpp] + and a + jr nz, .wait + + pop af + ld [$ffd3], a + + pop af + rst Bankswitch + + pop af + ld [hBGMapMode], a + ret + +.asm_f08 + ld a, [$ffd3] + ld [Requested2bpp], a +.asm_f0d + call DelayFrame + ld a, [Requested2bpp] + and a + jr nz, .asm_f0d + ld a, c + ld hl, $ffd3 + sub [hl] + ld c, a + jr .asm_eec +; f1e + + +Request1bpp: ; f1e + ld a, [hBGMapMode] + push af + xor a + ld [hBGMapMode], a + + ld a, [hROMBank] + push af + ld a, b + rst Bankswitch + + ld a, [$ffd3] + push af + + ld a, $8 + ld [$ffd3], a + ld a, [InLinkBattle] + cp $4 + jr nz, .asm_f40 + ld a, [$ffe9] + and a + jr nz, .asm_f40 + ld a, $6 + ld [$ffd3], a + +.asm_f40 + ld a, e + ld [Requested1bppSource], a + ld a, d + ld [Requested1bppSource + 1], a + ld a, l + ld [Requested1bppDest], a + ld a, h + ld [Requested1bppDest + 1], a +.asm_f50 + ld a, c + ld hl, $ffd3 + cp [hl] + jr nc, .asm_f6c + + ld [Requested1bpp], a +.wait + call DelayFrame + ld a, [Requested1bpp] + and a + jr nz, .wait + + pop af + ld [$ffd3], a + + pop af + rst Bankswitch + + pop af + ld [hBGMapMode], a + ret + +.asm_f6c + ld a, [$ffd3] + ld [Requested1bpp], a +.asm_f71 + call DelayFrame + ld a, [Requested1bpp] + and a + jr nz, .asm_f71 + ld a, c + ld hl, $ffd3 + sub [hl] + ld c, a + jr .asm_f50 +; f82 + + +Get2bpp: ; f82 + ld a, [rLCDC] + bit 7, a + jp nz, Request2bpp + +Copy2bpp: ; f89 +; copy c 2bpp tiles from b:de to hl + + push hl + ld h, d + ld l, e + pop de + +; bank + ld a, b + +; bc = c * $10 + push af + swap c + ld a, $f + and c + ld b, a + ld a, $f0 + and c + ld c, a + pop af + + jp FarCopyBytes +; f9d + + +Get1bpp: ; f9d + ld a, [rLCDC] + bit 7, a + jp nz, Request1bpp + +Copy1bpp: ; fa4 +; copy c 1bpp tiles from b:de to hl + + push de + ld d, h + ld e, l + +; bank + ld a, b + +; bc = c * $10 / 2 + push af + ld h, 0 + ld l, c + add hl, hl + add hl, hl + add hl, hl + ld b, h + ld c, l + pop af + + pop hl + jp FarCopyBytesDouble +; fb6 + diff --git a/common/decompress.asm b/common/decompress.asm new file mode 100644 index 000000000..8d39cd968 --- /dev/null +++ b/common/decompress.asm @@ -0,0 +1,367 @@ +FarDecompress: ; b40 +; Decompress graphics data at a:hl to de + +; put a away for a sec + ld [$c2c4], a +; save bank + ld a, [hROMBank] + push af +; bankswitch + ld a, [$c2c4] + rst Bankswitch + +; what we came here for + call Decompress + +; restore bank + pop af + rst Bankswitch + ret +; b50 + + +Decompress: ; b50 +; Pokemon Crystal uses an lz variant for compression. + +; This is mainly used for graphics, but the intro's +; tilemaps also use this compression. + +; This function decompresses lz-compressed data at hl to de. + + +; Basic rundown: + +; A typical control command consists of: +; -the command (bits 5-7) +; -the count (bits 0-4) +; -and any additional params + +; $ff is used as a terminator. + + +; Commands: + +; 0: literal +; literal data for some number of bytes +; 1: iterate +; one byte repeated for some number of bytes +; 2: alternate +; two bytes alternated for some number of bytes +; 3: zero (whitespace) +; 0x00 repeated for some number of bytes + +; Repeater control commands have a signed parameter used to determine the start point. +; Wraparound is simulated: +; Positive values are added to the start address of the decompressed data +; and negative values are subtracted from the current position. + +; 4: repeat +; repeat some number of bytes from decompressed data +; 5: flipped +; repeat some number of flipped bytes from decompressed data +; ex: $ad = %10101101 -> %10110101 = $b5 +; 6: reverse +; repeat some number of bytes in reverse from decompressed data + +; If the value in the count needs to be larger than 5 bits, +; control code 7 can be used to expand the count to 10 bits. + +; A new control command is read in bits 2-4. +; The new 10-bit count is split: +; bits 0-1 contain the top 2 bits +; another byte is added containing the latter 8 + +; So, the structure of the control command becomes: +; 111xxxyy yyyyyyyy +; | | | | +; | | our new count +; | the control command for this count +; 7 (this command) + +; For more information, refer to the code below and in extras/gfx.py . + +; save starting output address + ld a, e + ld [$c2c2], a + ld a, d + ld [$c2c3], a + +.loop +; get next byte + ld a, [hl] +; done? + cp $ff ; end + ret z + +; get control code + and %11100000 + +; 10-bit param? + cp $e0 ; LZ_HI + jr nz, .normal + + +; 10-bit param: + +; get next 3 bits (%00011100) + ld a, [hl] + add a + add a ; << 3 + add a + +; this is our new control code + and %11100000 + push af + +; get param hi + ld a, [hli] + and %00000011 + ld b, a + +; get param lo + ld a, [hli] + ld c, a + +; read at least 1 byte + inc bc + jr .readers + + +.normal +; push control code + push af +; get param + ld a, [hli] + and %00011111 + ld c, a + ld b, $0 +; read at least 1 byte + inc c + +.readers +; let's get started + +; inc loop counts since we bail as soon as they hit 0 + inc b + inc c + +; get control code + pop af +; command type + bit 7, a ; 80, a0, c0 + jr nz, .repeatertype + +; literals + cp $20 ; LZ_ITER + jr z, .iter + cp $40 ; LZ_ALT + jr z, .alt + cp $60 ; LZ_ZERO + jr z, .zero + ; else $00 + +; 00 ; LZ_LIT +; literal data for bc bytes +.loop1 +; done? + dec c + jr nz, .next1 + dec b + jp z, .loop + +.next1 + ld a, [hli] + ld [de], a + inc de + jr .loop1 + + +; 20 ; LZ_ITER +; write byte for bc bytes +.iter + ld a, [hli] + +.iterloop + dec c + jr nz, .iternext + dec b + jp z, .loop + +.iternext + ld [de], a + inc de + jr .iterloop + + +; 40 ; LZ_ALT +; alternate two bytes for bc bytes + +; next pair +.alt +; done? + dec c + jr nz, .alt0 + dec b + jp z, .altclose0 + +; alternate for bc +.alt0 + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .alt1 +; done? + dec b + jp z, .altclose1 +.alt1 + ld a, [hld] + ld [de], a + inc de + jr .alt + +; skip past the bytes we were alternating +.altclose0 + inc hl +.altclose1 + inc hl + jr .loop + + +; 60 ; LZ_ZERO +; write 00 for bc bytes +.zero + xor a + +.zeroloop + dec c + jr nz, .zeronext + dec b + jp z, .loop + +.zeronext + ld [de], a + inc de + jr .zeroloop + + +; repeats +; 80, a0, c0 +; repeat decompressed data from output +.repeatertype + push hl + push af +; get next byte + ld a, [hli] +; absolute? + bit 7, a + jr z, .absolute + +; relative +; a = -a + and %01111111 ; forget the bit we just looked at + cpl +; add de (current output address) + add e + ld l, a + ld a, $ff ; -1 + adc d + ld h, a + jr .repeaters + +.absolute +; get next byte (lo) + ld l, [hl] +; last byte (hi) + ld h, a +; add starting output address + ld a, [$c2c2] + add l + ld l, a + ld a, [$c2c3] + adc h + ld h, a + +.repeaters + pop af + cp $80 ; LZ_REPEAT + jr z, .repeat + cp $a0 ; LZ_FLIP + jr z, .flip + cp $c0 ; LZ_REVERSE + jr z, .reverse + +; e0 -> 80 + +; 80 ; LZ_REPEAT +; repeat some decompressed data +.repeat +; done? + dec c + jr nz, .repeatnext + dec b + jr z, .cleanup + +.repeatnext + ld a, [hli] + ld [de], a + inc de + jr .repeat + + +; a0 ; LZ_FLIP +; repeat some decompressed data w/ flipped bit order +.flip + dec c + jr nz, .flipnext + dec b + jp z, .cleanup + +.flipnext + ld a, [hli] + push bc + ld bc, $0008 + +.fliploop + rra + rl b + dec c + jr nz, .fliploop + ld a, b + pop bc + ld [de], a + inc de + jr .flip + + +; c0 ; LZ_REVERSE +; repeat some decompressed data in reverse +.reverse + dec c + jr nz, .reversenext + + dec b + jp z, .cleanup + +.reversenext + ld a, [hld] + ld [de], a + inc de + jr .reverse + + +.cleanup +; get type of repeat we just used + pop hl +; was it relative or absolute? + bit 7, [hl] + jr nz, .next + +; skip two bytes for absolute + inc hl +; skip one byte for relative +.next + inc hl + jp .loop +; c2f + diff --git a/common/delay.asm b/common/delay.asm new file mode 100644 index 000000000..4e8b2147c --- /dev/null +++ b/common/delay.asm @@ -0,0 +1,23 @@ +DelayFrame: ; 45a +; Wait for one frame + ld a, 1 + ld [VBlankOccurred], a + +; Wait for the next VBlank, halting to conserve battery +.halt + halt ; rgbasm adds a nop after this instruction by default + ld a, [VBlankOccurred] + and a + jr nz, .halt + ret +; 468 + + +DelayFrames: ; 468 +; Wait c frames + call DelayFrame + dec c + jr nz, DelayFrames + ret +; 46f + diff --git a/common/fade.asm b/common/fade.asm new file mode 100644 index 000000000..d67211e29 --- /dev/null +++ b/common/fade.asm @@ -0,0 +1,134 @@ +; Functions to fade the screen in and out. + + +Function48c: ; 48c + ld a, [TimeOfDayPal] + ld b, a + ld hl, IncGradGBPalTable_11 + ld a, l + sub b + ld l, a + jr nc, .asm_499 + dec h + +.asm_499 + ld a, [hli] + ld [rBGP], a + ld a, [hli] + ld [rOBP0], a + ld a, [hli] + ld [rOBP1], a + ret +; 4a3 + + +Function4a3: ; 4a3 + ld a, [hCGB] + and a + jr z, .asm_4af + ld hl, IncGradGBPalTable_00 + ld b, 4 + jr FadeOut + +.asm_4af + ld hl, IncGradGBPalTable_08 + ld b, 4 + jr FadeOut +; 4b6 + +Function4b6: ; 4b6 + ld a, [hCGB] + and a + jr z, .asm_4c2 + ld hl, IncGradGBPalTable_05 + ld b, 3 + jr FadeOut + +.asm_4c2 + ld hl, IncGradGBPalTable_13 + ld b, 3 +; 4c7 + +FadeOut: ; 4c7 + push de + ld a, [hli] + call DmgToCgbBGPals + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + call DmgToCgbObjPals + ld c, 8 + call DelayFrames + pop de + dec b + jr nz, FadeOut + ret +; 4dd + +Function4dd: ; 4dd + ld a, [hCGB] + and a + jr z, .asm_4e9 + ld hl, IncGradGBPalTable_04 - 1 + ld b, 4 + jr FadeIn + +.asm_4e9 + ld hl, IncGradGBPalTable_12 - 1 + ld b, 4 + jr FadeIn +; 4f0 + +Function4f0: ; 4f0 + ld a, [hCGB] + and a + jr z, .asm_4fc + ld hl, IncGradGBPalTable_07 - 1 + ld b, 3 + jr FadeIn + +.asm_4fc + ld hl, IncGradGBPalTable_15 - 1 + ld b, 3 + ; fallthrough +; 501 + +FadeIn: ; 501 + push de + ld a, [hld] + ld d, a + ld a, [hld] + ld e, a + call DmgToCgbObjPals + ld a, [hld] + call DmgToCgbBGPals + ld c, 8 + call DelayFrames + pop de + dec b + jr nz, FadeIn + ret +; 517 + + +; 517 +IncGradGBPalTable_00: db %11111111, %11111111, %11111111 +IncGradGBPalTable_01: db %11111110, %11111110, %11111110 +IncGradGBPalTable_02: db %11111001, %11111001, %11111001 +IncGradGBPalTable_03: db %11100100, %11100100, %11100100 +IncGradGBPalTable_04: db %11100100, %11100100, %11100100 +IncGradGBPalTable_05: db %10010000, %10010000, %10010000 +IncGradGBPalTable_06: db %01000000, %01000000, %01000000 +IncGradGBPalTable_07: db %00000000, %00000000, %00000000 +; bgp obp1 obp2 +IncGradGBPalTable_08: db %11111111, %11111111, %11111111 +IncGradGBPalTable_09: db %11111110, %11111110, %11111000 +IncGradGBPalTable_10: db %11111001, %11100100, %11100100 +IncGradGBPalTable_11: db %11100100, %11010000, %11100000 +IncGradGBPalTable_12: db %11100100, %11010000, %11100000 +IncGradGBPalTable_13: db %10010000, %10000000, %10010000 +IncGradGBPalTable_14: db %01000000, %01000000, %01000000 +IncGradGBPalTable_15: db %00000000, %00000000, %00000000 +; 547 + diff --git a/common/farcall.asm b/common/farcall.asm new file mode 100644 index 000000000..bdee3bf38 --- /dev/null +++ b/common/farcall.asm @@ -0,0 +1,55 @@ +FarCall_de: ; 2d54 +; Call a:de. +; Preserves other registers. + + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + call .de + jr ReturnFarCall + +.de + push de + ret +; 2d63 + + +FarCall_hl: ; 2d63 +; Call a:hl. +; Preserves other registers. + + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + call Function2d82 +; 2d6e + +ReturnFarCall: ; 2d6e +; We want to retain the contents of f. +; To do this, we can pop to bc instead of af. + + ld a, b + ld [$cfb9], a + ld a, c + ld [$cfba], a + +; Restore the working bank. + pop bc + ld a, b + rst Bankswitch + + ld a, [$cfb9] + ld b, a + ld a, [$cfba] + ld c, a + ret +; 2d82 + +Function2d82: ; 2d82 + jp [hl] +; 2d83 + diff --git a/common/game_time.asm b/common/game_time.asm new file mode 100644 index 000000000..ee52488f4 --- /dev/null +++ b/common/game_time.asm @@ -0,0 +1,132 @@ +ResetGameTime: ; 208a + xor a + ld [GameTimeCap], a + ld [GameTimeHours], a + ld [GameTimeHours + 1], a + ld [GameTimeMinutes], a + ld [GameTimeSeconds], a + ld [GameTimeFrames], a + ret +; 209e + + +GameTimer: ; 209e + + nop + + ld a, [rSVBK] + push af + ld a, 1 + ld [rSVBK], a + + call UpdateGameTimer + + pop af + ld [rSVBK], a + ret +; 20ad + + +UpdateGameTimer: ; 20ad +; Increment the game timer by one frame. +; The game timer is capped at 999:59:59.00. + + +; Don't update if game logic is paused. + ld a, [$c2cd] + and a + ret nz + +; Is the timer paused? + ld hl, GameTimerPause + bit 0, [hl] + ret z + +; Is the timer already capped? + ld hl, GameTimeCap + bit 0, [hl] + ret nz + + +; +1 frame + ld hl, GameTimeFrames + ld a, [hl] + inc a + + cp 60 ; frames/second + jr nc, .second + + ld [hl], a + ret + + +.second + xor a + ld [hl], a + +; +1 second + ld hl, GameTimeSeconds + ld a, [hl] + inc a + + cp 60 ; seconds/minute + jr nc, .minute + + ld [hl], a + ret + + +.minute + xor a + ld [hl], a + +; +1 minute + ld hl, GameTimeMinutes + ld a, [hl] + inc a + + cp 60 ; minutes/hour + jr nc, .hour + + ld [hl], a + ret + + +.hour + xor a + ld [hl], a + +; +1 hour + ld a, [GameTimeHours] + ld h, a + ld a, [GameTimeHours + 1] + ld l, a + inc hl + + +; Cap the timer after 1000 hours. + ld a, h + cp 1000 / $100 + jr c, .ok + + ld a, l + cp 1000 % $100 + jr c, .ok + + ld hl, GameTimeCap + set 0, [hl] + + ld a, 59 ; 999:59:59.00 + ld [GameTimeMinutes], a + ld [GameTimeSeconds], a + ret + + +.ok + ld a, h + ld [GameTimeHours], a + ld a, l + ld [GameTimeHours + 1], a + ret +; 210f + diff --git a/common/init.asm b/common/init.asm new file mode 100644 index 000000000..3104c416d --- /dev/null +++ b/common/init.asm @@ -0,0 +1,225 @@ +Reset: ; 150 + di + call CleanSoundRestart + xor a + ld [$ffde], a + call ClearPalettes + xor a + ld [rIF], a + ld a, 1 ; VBlank int + ld [rIE], a + ei + + ld hl, $cfbe + set 7, [hl] + + ld c, 32 + call DelayFrames + + jr Init +; 16e + + +_Start: ; 16e + cp $11 + jr z, .asm_175 + xor a + jr .asm_177 + +.asm_175 + ld a, $1 + +.asm_177 + ld [hCGB], a + ld a, $1 + ld [$ffea], a +; 17d + + +Init: ; 17d + + di + + xor a + ld [rIF], a + ld [rIE], a + ld [rRP], a + ld [rSCX], a + ld [rSCY], a + ld [rSB], a + ld [rSC], a + ld [rWX], a + ld [rWY], a + ld [rBGP], a + ld [rOBP0], a + ld [rOBP1], a + ld [rTMA], a + ld [rTAC], a + ld [$d000], a + + ld a, %100 ; Start timer at 4096Hz + ld [rTAC], a + +.wait + ld a, [rLY] + cp 145 + jr nz, .wait + + xor a + ld [rLCDC], a + +; Clear WRAM bank 0 + ld hl, $c000 + ld bc, $d000 - $c000 +.asm_1b1 + ld [hl], 0 + inc hl + dec bc + ld a, b + or c + jr nz, .asm_1b1 + + ld sp, Stack + +; Clear HRAM + ld a, [hCGB] + push af + ld a, [$ffea] + push af + xor a + ld hl, $ff80 + ld bc, $ffff - $ff80 + call ByteFill + pop af + ld [$ffea], a + pop af + ld [hCGB], a + + call ClearWRAM + ld a, 1 + ld [rSVBK], a + call ClearVRAM + call ClearSprites + call Function270 + + + ld a, BANK(LoadPushOAM) + rst Bankswitch + + call LoadPushOAM + + xor a + ld [$ffde], a + ld [hSCX], a + ld [hSCY], a + ld [rJOYP], a + + ld a, $8 ; HBlank int enable + ld [rSTAT], a + + ld a, $90 + ld [hWY], a + ld [rWY], a + + ld a, 7 + ld [hWX], a + ld [rWX], a + + ld a, %11100011 + ; LCD on + ; Win tilemap 1 + ; Win on + ; BG/Win tiledata 0 + ; BG Tilemap 0 + ; OBJ 8x8 + ; OBJ on + ; BG on + ld [rLCDC], a + + ld a, $ff + ld [$ffcb], a + + callba Function9890 + + ld a, $9c + ld [$ffd7], a + + xor a + ld [hBGMapAddress], a + + callba StartClock + + xor a + ld [MBC3LatchClock], a + ld [MBC3SRamEnable], a + + ld a, [hCGB] + and a + jr z, .asm_22b + call Function2ff7 +.asm_22b + + xor a + ld [rIF], a + ld a, %1111 ; VBlank, LCDStat, Timer, Serial interrupts + ld [rIE], a + ei + + call DelayFrame + + ld a, $30 + call Predef + + call CleanSoundRestart + xor a + ld [CurMusic], a + jp GameInit +; 245 + + +ClearVRAM: ; 245 +; Wipe VRAM banks 0 and 1 + + ld a, 1 + ld [rVBK], a + call .clear + + xor a + ld [rVBK], a +.clear + ld hl, VTiles0 + ld bc, $2000 + xor a + call ByteFill + ret +; 25a + +ClearWRAM: ; 25a +; Wipe swappable WRAM banks (1-7) + + ld a, 1 +.asm_25c + push af + ld [rSVBK], a + xor a + ld hl, $d000 + ld bc, $1000 + call ByteFill + pop af + inc a + cp 8 + jr nc, .asm_25c + ret +; 270 + +Function270: ; 270 + ld a, $0 + call GetSRAMBank + ld hl, $a000 + ld bc, $0020 + xor a + call ByteFill + call CloseSRAM + ret +; 283 + diff --git a/common/joypad.asm b/common/joypad.asm new file mode 100644 index 000000000..388c84e22 --- /dev/null +++ b/common/joypad.asm @@ -0,0 +1,491 @@ +JoypadInt: ; 92e +; Replaced by Joypad, called from VBlank instead of the useless +; joypad interrupt. + +; This is a placeholder in case the interrupt is somehow enabled. + reti +; 92f + +ClearJoypadPublic: ; 92f + xor a +; Pressed this frame (delta) + ld [hJoyPressed], a +; Currently pressed + ld [hJoyDown], a + ret +; 935 + +Joypad: ; 935 +; Read the joypad register and translate it to something more +; workable for use in-game. There are 8 buttons, so we can use +; one byte to contain all player input. + +; Updates: + +; hJoypadReleased: released this frame (delta) +; hJoypadPressed: pressed this frame (delta) +; hJoypadDown: currently pressed +; hJoypadSum: pressed so far + +; Any of these three bits can be used to disable input. + ld a, [$cfbe] + and %11010000 + ret nz + +; If we're saving, input is disabled. + ld a, [$c2cd] + and a + ret nz + +; We can only get four inputs at a time. +; We take d-pad first for no particular reason. + ld a, D_PAD + ld [rJOYP], a +; Read twice to give the request time to take. + ld a, [rJOYP] + ld a, [rJOYP] + +; The Joypad register output is in the lo nybble (inversed). +; We make the hi nybble of our new container d-pad input. + cpl + and $f + swap a + +; We'll keep this in b for now. + ld b, a + +; Buttons make 8 total inputs (A, B, Select, Start). +; We can fit this into one byte. + ld a, BUTTONS + ld [rJOYP], a +; Wait for input to stabilize. + ld a, [rJOYP] + ld a, [rJOYP] + ld a, [rJOYP] + ld a, [rJOYP] + ld a, [rJOYP] + ld a, [rJOYP] +; Buttons take the lo nybble. + cpl + and $f + or b + ld b, a + +; Reset the joypad register since we're done with it. + ld a, $30 + ld [rJOYP], a + +; To get the delta we xor the last frame's input with the new one. + ld a, [hJoypadDown] ; last frame + ld e, a + xor b + ld d, a +; Released this frame: + and e + ld [hJoypadReleased], a +; Pressed this frame: + ld a, d + and b + ld [hJoypadPressed], a + +; Add any new presses to the list of collective presses: + ld c, a + ld a, [hJoypadSum] + or c + ld [hJoypadSum], a + +; Currently pressed: + ld a, b + ld [hJoypadDown], a + +; Now that we have the input, we can do stuff with it. + +; For example, soft reset: + and BUTTON_A | BUTTON_B | SELECT | START + cp BUTTON_A | BUTTON_B | SELECT | START + jp z, Reset + + ret +; 984 + + +GetJoypadPublic: ; 984 +; Update mirror joypad input from hJoypadDown (real input) + +; hJoyReleased: released this frame (delta) +; hJoyPressed: pressed this frame (delta) +; hJoyDown: currently pressed + +; bit 0 A +; 1 B +; 2 SELECT +; 3 START +; 4 RIGHT +; 5 LEFT +; 6 UP +; 7 DOWN + + push af + push hl + push de + push bc + +; The player input can be automated using an input stream. +; See more below. + ld a, [InputType] + cp a, AUTO_INPUT + jr z, .auto + +; To get deltas, take this and last frame's input. + ld a, [hJoypadDown] ; real input + ld b, a + ld a, [hJoyDown] ; last frame mirror + ld e, a + +; Released this frame: + xor b + ld d, a + and e + ld [hJoyReleased], a + +; Pressed this frame: + ld a, d + and b + ld [hJoyPressed], a + +; It looks like the collective presses got commented out here. + ld c, a + +; Currently pressed: + ld a, b + ld [hJoyDown], a ; frame input + +.quit + pop bc + pop de + pop hl + pop af + ret + +.auto +; Use a predetermined input stream (used in the catching tutorial). + +; Stream format: [input][duration] +; A value of $ff will immediately end the stream. + +; Read from the input stream. + ld a, [hROMBank] + push af + ld a, [AutoInputBank] + rst Bankswitch + + ld hl, AutoInputAddress + ld a, [hli] + ld h, [hl] + ld l, a + +; We only update when the input duration has expired. + ld a, [AutoInputLength] + and a + jr z, .updateauto + +; Until then, don't change anything. + dec a + ld [AutoInputLength], a + pop af + rst Bankswitch + jr .quit + + +.updateauto +; An input of $ff will end the stream. + ld a, [hli] + cp a, $ff + jr z, .stopauto + ld b, a + +; A duration of $ff will end the stream indefinitely. + ld a, [hli] + ld [AutoInputLength], a + cp a, $ff + jr nz, .next + +; The current input is overwritten. + dec hl + dec hl + ld b, NO_INPUT + jr .finishauto + +.next +; On to the next input... + ld a, l + ld [AutoInputAddress], a + ld a, h + ld [AutoInputAddress+1], a + jr .finishauto + +.stopauto + call StopAutoInput + ld b, NO_INPUT + +.finishauto + pop af + rst Bankswitch + ld a, b + ld [hJoyPressed], a ; pressed + ld [hJoyDown], a ; input + jr .quit +; 9ee + + +StartAutoInput: ; 9ee +; Start reading automated input stream at a:hl. + + ld [AutoInputBank], a + ld a, l + ld [AutoInputAddress], a + ld a, h + ld [AutoInputAddress+1], a +; Start reading the stream immediately. + xor a + ld [AutoInputLength], a +; Reset input mirrors. + xor a + ld [hJoyPressed], a ; pressed this frame + ld [hJoyReleased], a ; released this frame + ld [hJoyDown], a ; currently pressed + + ld a, AUTO_INPUT + ld [InputType], a + ret +; a0a + + +StopAutoInput: ; a0a +; Clear variables related to automated input. + xor a + ld [AutoInputBank], a + ld [AutoInputAddress], a + ld [AutoInputAddress+1], a + ld [AutoInputLength], a +; Back to normal input. + ld [InputType], a + ret +; a1b + + +Functiona1b: ; a1b + + call DelayFrame + + push bc + call Functiona57 + pop bc + + ld a, [hJoyDown] + cp D_UP | SELECT | BUTTON_B + jr z, .asm_a34 + + ld a, [$ffa9] + and START | BUTTON_A + jr nz, .asm_a34 + + dec c + jr nz, Functiona1b + + and a + ret + +.asm_a34 + scf + ret +; a36 + + +Functiona36: ; a36 + call DelayFrame + call GetJoypadPublic + ld a, [hJoyPressed] + and BUTTON_A | BUTTON_B + ret nz + call RTC + jr Functiona36 +; a46 + +Functiona46: ; a46 + ld a, [hOAMUpdate] + push af + ld a, 1 + ld [hOAMUpdate], a + call WaitBGMap + call Functiona36 + pop af + ld [hOAMUpdate], a + ret +; a57 + +Functiona57: ; a57 + call GetJoypadPublic + ld a, [$ffaa] + and a + ld a, [hJoyPressed] + jr z, .asm_a63 + ld a, [hJoyDown] +.asm_a63 + ld [$ffa9], a + ld a, [hJoyPressed] + and a + jr z, .asm_a70 + ld a, 15 + ld [TextDelayFrames], a + ret + +.asm_a70 + ld a, [TextDelayFrames] + and a + jr z, .asm_a7a + xor a + ld [$ffa9], a + ret + +.asm_a7a + ld a, 5 + ld [TextDelayFrames], a + ret +; a80 + +Functiona80: ; a80 + ld a, [$ffaf] + push af + ld a, [$ffb0] + push af + xor a + ld [$ffaf], a + ld a, $6 + ld [$ffb0], a +.asm_a8d + push hl + ld hl, $c606 + call Functionb06 + pop hl + call Functiona57 + ld a, [$ffa9] + and $3 + jr z, .asm_a8d + pop af + ld [$ffb0], a + pop af + ld [$ffaf], a + ret +; aa5 + +Functionaa5: ; aa5 + call Functiona57 + ld a, [$ffa9] + and BUTTON_A | BUTTON_B + jr z, Functionaa5 + ret +; aaf + +Functionaaf: ; aaf + ld a, [InLinkBattle] + and a + jr nz, .asm_ac1 + call Functionac6 + push de + ld de, SFX_READ_TEXT_2 + call StartSFX + pop de + ret + +.asm_ac1 + ld c, 65 + jp DelayFrames +; ac6 + +Functionac6: ; ac6 + ld a, [hOAMUpdate] + push af + ld a, $1 + ld [hOAMUpdate], a + ld a, [InputType] + or a + jr z, .asm_ad9 + callba Function1de28a +.asm_ad9 + call Functionaf5 + call Functiona57 + ld a, [hJoyPressed] + and $3 + jr nz, .asm_af1 + call RTC + ld a, $1 + ld [hBGMapMode], a + call DelayFrame + jr .asm_ad9 + +.asm_af1 + pop af + ld [hOAMUpdate], a + ret +; af5 + +Functionaf5: ; af5 + ld a, [$ff9b] + and $10 + jr z, .asm_aff + ld a, $ee + jr .asm_b02 + +.asm_aff + ld a, [$c605] + +.asm_b02 + ld [$c606], a + ret +; b06 + +Functionb06: ; b06 + push bc + ld a, [hl] + ld b, a + ld a, $ee + cp b + pop bc + jr nz, .asm_b27 + ld a, [$ffaf] + dec a + ld [$ffaf], a + ret nz + ld a, [$ffb0] + dec a + ld [$ffb0], a + ret nz + ld a, $7a + ld [hl], a + ld a, $ff + ld [$ffaf], a + ld a, $6 + ld [$ffb0], a + ret + +.asm_b27 + ld a, [$ffaf] + and a + ret z + dec a + ld [$ffaf], a + ret nz + dec a + ld [$ffaf], a + ld a, [$ffb0] + dec a + ld [$ffb0], a + ret nz + ld a, $6 + ld [$ffb0], a + ld a, $ee + ld [hl], a + ret +; b40 + diff --git a/common/lcd.asm b/common/lcd.asm new file mode 100644 index 000000000..9c86eaa5c --- /dev/null +++ b/common/lcd.asm @@ -0,0 +1,81 @@ +; LCD handling + + +Function547: ; 547 + ld a, [hLCDStatCustom] + cp rSCX & $ff + ret nz + ld c, a + ld a, [LYOverrides] + ld [$ff00+c], a + ret +; 552 + + +LCD: ; 552 + push af + ld a, [hLCDStatCustom] + and a + jr z, .done + +; At this point it's assumed we're in WRAM bank 5! + push bc + ld a, [rLY] + ld c, a + ld b, LYOverrides >> 8 + ld a, [bc] + ld b, a + ld a, [hLCDStatCustom] + ld c, a + ld a, b + ld [$ff00+c], a + pop bc + +.done + pop af + reti +; 568 + + +DisableLCD: ; 568 +; Turn the LCD off + +; Don't need to do anything if the LCD is already off + ld a, [rLCDC] + bit 7, a ; lcd enable + ret z + + xor a + ld [rIF], a + ld a, [rIE] + ld b, a + +; Disable VBlank + res 0, a ; vblank + ld [rIE], a + +.wait +; Wait until VBlank would normally happen + ld a, [rLY] + cp 145 + jr nz, .wait + + ld a, [rLCDC] + and %01111111 ; lcd enable off + ld [rLCDC], a + + xor a + ld [rIF], a + ld a, b + ld [rIE], a + ret +; 58a + + +EnableLCD: ; 58a + ld a, [rLCDC] + set 7, a ; lcd enable + ld [rLCDC], a + ret +; 591 + diff --git a/common/map_objects.asm b/common/map_objects.asm new file mode 100644 index 000000000..3ebc1b597 --- /dev/null +++ b/common/map_objects.asm @@ -0,0 +1,683 @@ +; Functions handling map objects. + + +GetSpritePalette: ; 17ff + push hl + push de + push bc + ld c, a + callba _GetSpritePalette + ld a, c + pop bc + pop de + pop hl + ret +; 180e + + +Function180e: ; 180e + push hl + push bc + ld hl, $d156 + ld c, $1f + ld b, a + ld a, [hConnectionStripLength] + cp $0 + jr z, .asm_182b + ld a, b +.asm_181d + cp [hl] + jr z, .asm_1830 + inc hl + inc hl + dec c + jr nz, .asm_181d + ld a, [$d155] + scf + jr .asm_1833 + +.asm_182b + ld a, [$d155] + jr .asm_1833 + +.asm_1830 + inc hl + xor a + ld a, [hl] + +.asm_1833 + pop bc + pop hl + ret +; 1836 + +Function1836: ; 1836 + push de + push hl + + ld b, a + ld a, [hROMBank] + push af + ld a, BANK(Function142a7) + rst Bankswitch + + ld a, b + call Function142a7 + ld c, a + + pop de + ld a, d + rst Bankswitch + + pop hl + pop de + ret +; 184a + + + +Function184a: ; 184a + ld a, [StandingTile] + call GetTileCollision + ld b, a + ret +; 1852 + +Function1852: ; 1852 + ld a, [StandingTile] + call GetTileCollision + sub 1 + ret z + and a + ret +; 185d + + +GetTileCollision: ; 185d +; Get the collision type of tile a. + + push de + push hl + + ld hl, TileCollisionTable + ld e, a + ld d, 0 + add hl, de + + ld a, [hROMBank] + push af + ld a, BANK(TileCollisionTable) + rst Bankswitch + ld e, [hl] + pop af + rst Bankswitch + + ld a, e + and $f ; lo nybble only + + pop hl + pop de + ret +; 1875 + + +Function1875: ; 1875 + ld d, a + and $f0 + cp $10 + jr z, .asm_1882 + cp $20 + jr z, .asm_1888 + scf + ret + +.asm_1882 + ld a, d + and 7 + ret z + scf + ret + +.asm_1888 + ld a, d + and 7 + ret z + scf + ret +; 188e + +Function188e: ; 188e + cp $14 + ret z + cp $1c + ret +; 1894 + +CheckCutTreeTile: ; 1894 + cp $12 + ret z + cp $1a + ret +; 189a + +CheckHeadbuttTreeTile: ; 189a + cp $15 + ret z + cp $1d + ret +; 18a0 + +CheckCounterTile: ; 18a0 + cp $90 + ret z + cp $98 + ret +; 18a6 + +CheckPitTile: ; 18a6 + cp $60 + ret z + cp $68 + ret +; 18ac + +CheckIceTile: ; 18ac + cp $23 + ret z + cp $2b + ret z + scf + ret +; 18b4 + +CheckWhirlpoolTile: ; 18b4 + nop + cp $24 + ret z + cp $2c + ret z + scf + ret +; 18bd + +CheckWaterfallTile: ; 18bd + cp $33 + ret z + cp $3b + ret +; 18c3 + +CheckStandingOnEntrance: ; 18c3 + ld a, [StandingTile] + cp $71 ; door + ret z + cp $79 + ret z + cp $7a ; stairs + ret z + cp $7b ; cave + ret +; 18d2 + + +GetMapObject: ; 18d2 +; Return the location of map object a in bc. + ld hl, MapObjects + ld bc, $10 + call AddNTimes + ld b, h + ld c, l + ret +; 18de + + +Function18de: ; 18de + ld [hConnectionStripLength], a + call GetMapObject + ld hl, $0000 + add hl, bc + ld a, [hl] + cp $ff + jr z, .asm_18f3 + ld [hConnectedMapWidth], a + call Function1ae5 + and a + ret + +.asm_18f3 + scf + ret +; 18f5 + +Function18f5: ; 18f5 + ld hl, $0006 + add hl, bc + ld a, [hl] + cp $ff + jr nz, .asm_1921 + ld hl, $0007 + add hl, bc + ld a, [hl] + cp $ff + jr z, .asm_191c + ld hl, .data_191e + ld a, [TimeOfDay] + add l + ld l, a + jr nc, .asm_1912 + inc h + +.asm_1912 + ld a, [hl] + ld hl, $0007 + add hl, bc + and [hl] + jr nz, .asm_191c + scf + ret + +.asm_191c + and a + ret + +.data_191e + db $1 + db $2 + db $4 + +.asm_1921 + ld hl, $0006 + add hl, bc + ld d, [hl] + ld hl, $0007 + add hl, bc + ld e, [hl] + ld hl, hHours + ld a, d + cp e + jr z, .asm_1949 + jr c, .asm_193f + ld a, [hl] + cp d + jr nc, .asm_1949 + cp e + jr c, .asm_1949 + jr z, .asm_1949 + jr .asm_194b + +.asm_193f + ld a, e + cp [hl] + jr c, .asm_194b + ld a, [hl] + cp d + jr nc, .asm_1949 + jr .asm_194b + +.asm_1949 + and a + ret + +.asm_194b + scf + ret +; 194d + +Function194d: ; 194d + ld [hConnectionStripLength], a + call GetMapObject + call $40e7 + ret +; 1956 + + + +Function1956: ; 1956 + ld [hConnectionStripLength], a + call Function271e + ld a, [hConnectionStripLength] + call GetMapObject + ld a, $2 + ld hl, $40e7 + rst FarCall + ret +; 1967 + +Function1967: ; 1967 + ld [hConnectionStripLength], a + call GetMapObject + ld hl, $0000 + add hl, bc + ld a, [hl] + cp $ff + ret z + ld [hl], $ff + push af + call Function1985 + pop af + call Function1ae5 + callba Function4357 + ret +; 1985 + +Function1985: ; 1985 + ld hl, $d4cd + cp [hl] + jr z, .asm_1990 + ld hl, $d4ce + cp [hl] + ret nz + +.asm_1990 + callba Function581f + ld a, $ff + ld [$d4cd], a + ld [$d4ce], a + ret +; 199f + +Function199f: ; 199f + call Function1967 + call Function2712 + ret +; 19a6 + +Function19a6: ; 19a6 + push hl + call GetMapObject + ld d, b + ld e, c + ld a, $ff + ld [de], a + inc de + pop hl + ld bc, $000f + call CopyBytes + ret +; 19b8 + +Function19b8: ; 19b8 + call GetMapObject + ld hl, $0000 + add hl, bc + ld a, [hl] + push af + ld [hl], $ff + inc hl + ld bc, $000f + xor a + call ByteFill + pop af + cp $ff + ret z + cp $d + ret nc + ld b, a + ld a, [$d4cd] + cp b + jr nz, .asm_19de + ld a, $ff + ld [$d4cd], a + +.asm_19de + ld a, b + call Function1ae5 + callba Function4357 + ret +; 19e9 + + + +Function19e9: ; 19e9 + ld [$c2e2], a + ld a, [hROMBank] + ld [$c2e3], a + ld a, l + ld [$c2e4], a + ld a, h + ld [$c2e5], a + ld a, [$c2e2] + call Function18de + ret c + ld hl, $0003 + add hl, bc + ld [hl], $14 + ld hl, $0009 + add hl, bc + ld [hl], $0 + ld hl, VramState + set 7, [hl] + and a + ret +; 1a13 + + + +Function1a13: ; 1a13 + push bc + push de + ld hl, $d4d6 + ld de, $0028 + ld c, $d +.asm_1a1d + ld a, [hl] + and a + jr z, .asm_1a28 + add hl, de + dec c + jr nz, .asm_1a1d + xor a + jr .asm_1a2c + +.asm_1a28 + ld a, $d + sub c + scf + +.asm_1a2c + pop de + pop bc + ret +; 1a2f + + + +Function1a2f: ; 1a2f + ld hl, $0003 + add hl, bc + ld a, [hl] + cp $25 + jr c, .asm_1a39 + xor a + +.asm_1a39 + ld hl, Data4273 + ld e, a + ld d, 0 + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + ld a, [hl] + ret +; 1a47 + +Function1a47: ; 1a47 + push bc + push de + ld e, a + ld d, 0 + ld hl, Data4273 + 1 + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + ld a, BANK(Data4273) + call GetFarByte + add a + add a + and $c + pop de + pop bc + ret +; 1a61 + + +Function1a61: ; 1a61 + ld l, a + ld a, [hROMBank] + push af + ld a, BANK(Data4273) + rst Bankswitch + ld a, l + push bc + + call Function1a71 + + pop bc + pop af + rst Bankswitch + + ret +; 1a71 + +Function1a71: ; 1a71 + ld hl, $0003 + add hl, de + ld [hl], a + push de + ld e, a + ld d, 0 + ld hl, Data4273 + 1 + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + ld b, h + ld c, l + pop de + ld a, [bc] + inc bc + rlca + rlca + and $c + ld hl, $0008 + add hl, de + ld [hl], a + ld a, [bc] + inc bc + ld hl, $000b + add hl, de + ld [hl], a + ld a, [bc] + inc bc + ld hl, $0004 + add hl, de + ld [hl], a + ld a, [bc] + inc bc + ld hl, $0005 + add hl, de + ld [hl], a + ld a, [bc] + inc bc + ld hl, $0006 + add hl, de + ld [hl], a + ret +; 1aae + +Function1aae: ; 1aae + ld a, [hROMBank] + push af + ld a, [hli] + rst Bankswitch + + ld a, [hli] + ld d, [hl] + ld hl, $001b + add hl, bc + add [hl] + ld e, a + ld a, d + adc $0 + ld d, a + inc [hl] + ld a, [de] + ld h, a + pop af + rst Bankswitch + + ld a, h + ret +; 1ac6 + +Function1ac6: ; 1ac6 + ld hl, VramState + set 0, [hl] + ret +; 1acc + +Function1acc: ; 1acc + ld hl, VramState + res 0, [hl] + ret +; 1ad2 + + +Function1ad2: ; 1ad2 + ld a, [VramState] + bit 0, a + ret z + callba Function55e0 + callba Function5920 + ret +; 1ae5 + + +Function1ae5: ; 1ae5 + ld bc, $0028 + ld hl, $d4d6 + call AddNTimes + ld b, h + ld c, l + ret +; 1af1 + +Function1af1: ; 1af1 + ld hl, $0000 + add hl, bc + ld a, [hl] + and a + ret +; 1af8 + +Function1af8: ; 1af8 + push af + ld hl, $0008 + add hl, bc + ld a, [hl] + and $f3 + ld e, a + pop af + and $c + or e + ld [hl], a + ret +; 1b07 + + +GetSpriteDirection: ; 1b07 + ld hl, $0008 + add hl, bc + ld a, [hl] + and $c + ret +; 1b0f + diff --git a/common/menu.asm b/common/menu.asm new file mode 100644 index 000000000..c761a927c --- /dev/null +++ b/common/menu.asm @@ -0,0 +1,603 @@ +; Functions used in displaying and handling menus. + + +LoadMenuDataHeader: ; 0x1d35 + call Function1d3c + call Function1c00 + ret + +Function1d3c: ; 0x1d3c + ld de, $cf81 + ld bc, $0010 + call CopyBytes + ld a, [hROMBank] + ld [$cf8a], a + ret +; 0x1d4b + +Function1d4b: ; 1d4b + ld [$cf88], a + ret +; 1d4f + + +Function1d4f: ; 1d4f + push hl + call Function1d58 + pop hl + jp PrintText +; 1d57 + +Function1d57: ; 1d57 + ret +; 1d58 + +Function1d58: ; 1d58 + ld hl, MenuDataHeader_0x1d5f + call LoadMenuDataHeader + ret +; 1d5f + +MenuDataHeader_0x1d5f: ; 1d5f + db $40 ; tile backup + db 12, 0 ; start coords + db 17, 19 ; end coords + dw VTiles0 + db 0 ; default option +; 1d67 + +Function1d67: ; 1d67 + call Function1d4f + call Function1c17 + ret +; 1d6e + +Function1d6e: ; 1d6e + ld hl, MenuDataHeader_0x1d75 + call LoadMenuDataHeader + ret +; 1d75 + +MenuDataHeader_0x1d75: ; 1d75 + db $40 ; tile backup + db 0, 0 ; start coords + db 17, 19 ; end coords + dw $0000 + db 1 ; default option +; 1d7d + +Function1d7d: ; 1d7d + call Function1c07 + ret +; 1d81 + +Function1d81: ; 0x1d81 + xor a + ld [hBGMapMode], a + call Function1cbb + call Function1ad2 + call Function1c89 + call Function321c + call Function1c66 + ld a, [$cf91] + bit 7, a + jr z, .asm_1da7 ; 0x1d98 $d + call Function1c10 + call Function1bc9 + call Function1ff8 + bit 1, a + jr z, .asm_1da9 ; 0x1da5 $2 +.asm_1da7 + scf + ret +.asm_1da9 + and a + ret +; 0x1dab + +Function1dab: ; 1dab + call LoadMenuDataHeader + call Function1d81 + call Function1c17 + ld a, [$cfa9] + ret +; 1db8 + +Function1db8: ; 0x1db8 + push hl + push bc + push af + ld hl, $cf86 + ld a, [hli] + ld h, [hl] + ld l, a + inc hl + inc hl + pop af + call GetNthString + ld d, h + ld e, l + call CopyName1 + pop bc + pop hl + ret +; 0x1dcf + + +Function1dcf: ; 1dcf + ld bc, $0e07 + +Function1dd2: ; 1dd2 + jr Function1dd9 + +Function1dd4: ; 1dd4 + call LoadMenuDataHeader + jr Function1dfe + +Function1dd9: ; 1dd9 + push bc + ld hl, MenuDataHeader_0x1e1d + call Function1d3c + pop bc + ld a, b + cp $e + jr nz, .asm_1de9 + ld a, $e + ld b, a + +.asm_1de9 + ld a, b + ld [$cf83], a + add $5 + ld [$cf85], a + ld a, c + ld [$cf82], a + add $4 + ld [$cf84], a + call Function1c00 + +Function1dfe: ; 1dfe + call Function1d81 + push af + ld c, $f + call DelayFrames + call Function1c17 + pop af + jr c, .asm_1e16 + ld a, [$cfa9] + cp $2 + jr z, .asm_1e16 + and a + ret + +.asm_1e16 + ld a, $2 + ld [$cfa9], a + scf + ret +; 1e1d + +MenuDataHeader_0x1e1d: ; 1e1d + db $40 ; tile backup + db 5, 10 ; start coords + db 9, 15 ; end coords + dw MenuData2_0x1e25 + db 1 ; default option +; 1e25 + +MenuData2_0x1e25: ; 1e25 + db $c0 ; flags + db 2 + db "YES@" + db "NO@" +; 1e2e + +Function1e2e: ; 1e2e + call Function1e35 + call Function1c00 + ret +; 1e35 + +Function1e35: ; 1e35 + push de + call Function1d3c + pop de + ld a, [$cf83] + ld h, a + ld a, [$cf85] + sub h + ld h, a + ld a, d + ld [$cf83], a + add h + ld [$cf85], a + ld a, [$cf82] + ld l, a + ld a, [$cf84] + sub l + ld l, a + ld a, e + ld [$cf82], a + add l + ld [$cf84], a + ret +; 1e5d + +Function1e5d: ; 1e5d + call MenuFunc_1e7f + call MenuWriteText + call Function1eff + call Function1f23 + call Function1bdd + call Function1ff8 + ret +; 1e70 + +SetUpMenu: ; 1e70 + call MenuFunc_1e7f ; ??? + call MenuWriteText + call Function1eff ; set up selection pointer + ld hl, $cfa5 + set 7, [hl] + ret + +MenuFunc_1e7f: ; 0x1e7f + call Function1c66 + call Function1ebd + call Function1ea6 + call Function1cbb + ret + +MenuWriteText: ; 0x1e8c + xor a + ld [hBGMapMode], a + call Function1ebd ; sort out the text + call Function1eda ; actually write it + call Function2e31 + ld a, [hOAMUpdate] + push af + ld a, $1 + ld [hOAMUpdate], a + call Function321c + pop af + ld [hOAMUpdate], a + ret +; 0x1ea6 + +Function1ea6: ; 1ea6 + ld a, [$cf83] + ld c, a + ld a, [$cf85] + sub c + ld c, a + ld a, [$cf92] + add a + inc a + ld b, a + ld a, [$cf82] + add b + ld [$cf84], a + ret +; 1ebd + +Function1ebd: ; 1ebd + ld hl, $cf93 + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [$cf76] + and a + jr z, .asm_1ed3 + ld b, a + ld c, $ff +.asm_1ecc + ld a, [hli] + cp c + jr nz, .asm_1ecc + dec b + jr nz, .asm_1ecc + +.asm_1ed3 + ld d, h + ld e, l + ld a, [hl] + ld [$cf92], a + ret +; 1eda + +Function1eda: ; 1eda + call Function1cfd + ld bc, $002a + add hl, bc +.asm_1ee1 + inc de + ld a, [de] + cp $ff + ret z + ld [MenuSelection], a + push de + push hl + ld d, h + ld e, l + ld hl, $cf95 + call Function1efb + pop hl + ld de, $0028 + add hl, de + pop de + jr .asm_1ee1 +; 1efb + +Function1efb: ; 1efb + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 1eff + +Function1eff: ; 1eff + call Function1c10 + ld hl, $cfa8 + ld a, [$cf91] + bit 3, a + jr z, .asm_1f0e + set 3, [hl] + +.asm_1f0e + ld a, [$cf91] + bit 2, a + jr z, .asm_1f19 + set 5, [hl] + set 4, [hl] + +.asm_1f19 + ret +; 1f1a + + +Function1f1a: ; 1f1a + call Function1bd3 + ld hl, $cfa8 + and [hl] + jr Function1f2a +; 1f23 + +Function1f23: ; 1f23 + xor a + ld [$cf73], a + call Function1bc9 +; 1f2a + +Function1f2a: ; 1f2a + bit 0, a + jr nz, .asm_1f52 + bit 1, a + jr nz, .asm_1f6d + bit 3, a + jr nz, .asm_1f6d + bit 4, a + jr nz, .asm_1f44 + bit 5, a + jr nz, .asm_1f4b + xor a + ld [$cf73], a + jr .asm_1f57 + +.asm_1f44 + ld a, $10 + ld [$cf73], a + jr .asm_1f57 + +.asm_1f4b + ld a, $20 + ld [$cf73], a + jr .asm_1f57 + +.asm_1f52 + ld a, $1 + ld [$cf73], a + +.asm_1f57 + call Function1ebd + ld a, [$cfa9] + ld l, a + ld h, $0 + add hl, de + ld a, [hl] + ld [MenuSelection], a + ld a, [$cfa9] + ld [$cf88], a + and a + ret + +.asm_1f6d + ld a, $2 + ld [$cf73], a + ld a, $ff + ld [MenuSelection], a + scf + ret +; 1f79 + +Function1f79: ; 1f79 + push de + ld hl, $cf97 + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [MenuSelection] + call GetNthString + ld d, h + ld e, l + pop hl + call PlaceString + ret +; 1f8d + +Function1f8d: ; 1f8d + push de + ld a, [MenuSelection] + call Function1fb1 + inc hl + inc hl + ld a, [hli] + ld d, [hl] + ld e, a + pop hl + call PlaceString + ret +; 1f9e + +Function1f9e: ; 1f9e + call Function1fb1 + inc hl + inc hl + ld a, [hli] + ld d, [hl] + ld e, a + ret +; 1fa7 + +Function1fa7: ; 1fa7 + ld a, [MenuSelection] + call Function1fb1 + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 1fb1 + +Function1fb1: ; 1fb1 + ld e, a + ld d, $0 + ld hl, $cf97 + ld a, [hli] + ld h, [hl] + ld l, a + add hl, de + add hl, de + add hl, de + add hl, de + ret +; 1fbf + +Function1fbf: ; 1fbf + ld hl, $cf71 + call Function1ff0 + ld hl, $cf81 + call Function1ff0 + ld hl, $cf91 + call Function1ff0 + ld hl, $cfa1 + call Function1ff0 + ld a, [rSVBK] + push af + ld a, $7 + ld [rSVBK], a + xor a + ld hl, $dfff + ld [hld], a + ld [hld], a + ld a, l + ld [$cf71], a + ld a, h + ld [$cf72], a + pop af + ld [rSVBK], a + ret +; 1ff0 + +Function1ff0: ; 1ff0 + ld bc, $0010 + xor a + call ByteFill + ret +; 1ff8 + +Function1ff8: ; 1ff8 + push af + and $3 + jr z, .asm_2007 + ld hl, $cf81 + bit 3, [hl] + jr nz, .asm_2007 + call PlayClickSFX + +.asm_2007 + pop af + ret +; 2009 + + +PlayClickSFX: ; 2009 + push de + ld de, SFX_READ_TEXT_2 + call StartSFX + pop de + ret +; 0x2012 + +Function2012: ; 2012 + call Function1d4f + call Functiona46 + call Function1c07 + ret +; 201c + +Function201c: ; 201c + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + + call PlaceString + pop af + rst Bankswitch + + ret +; 202a + +Function202a: ; 202a + ld a, [hROMBank] + ld [$cf94], a + ld a, $9 + ld hl, $400e + rst FarCall + ld a, [$cf88] + ret +; 2039 + +Function2039: ; 2039 + ld a, [hROMBank] + ld [$cf94], a + ld a, $9 + ld hl, $4022 + rst FarCall + ld a, [$cf88] + ret +; 2048 + +Function2048: ; 2048 + ld a, [hROMBank] + ld [$cf94], a + ld a, $9 + ld hl, $403c + rst FarCall + ld a, [$cf88] + ret +; 2057 + +Function2057: ; 2057 + ld a, [hROMBank] + push af + ld a, $21 + rst Bankswitch + + call $42db + pop af + rst Bankswitch + + ret +; 2063 + diff --git a/common/palettes.asm b/common/palettes.asm new file mode 100644 index 000000000..accaa96b5 --- /dev/null +++ b/common/palettes.asm @@ -0,0 +1,347 @@ +; Functions dealing with palettes. + + +UpdatePalsIfCGB: ; c2f +; update bgp data from BGPals +; update obp data from OBPals +; return carry if successful + +; check cgb + ld a, [hCGB] + and a + ret z + + +UpdateCGBPals: ; c33 +; return carry if successful +; any pals to update? + ld a, [hCGBPalUpdate] + and a + ret z + + +ForceUpdateCGBPals: ; c37 + + ld a, [rSVBK] + push af + ld a, 5 ; BANK(BGPals) + ld [rSVBK], a + + ld hl, BGPals ; 5:d080 + +; copy 8 pals to bgpd + ld a, %10000000 ; auto increment, index 0 + ld [rBGPI], a + ld c, rBGPD % $100 + ld b, 4 ; NUM_PALS / 2 +.bgp + rept $10 + ld a, [hli] + ld [$ff00+c], a + endr + + dec b + jr nz, .bgp + +; hl is now 5:d0c0 OBPals + +; copy 8 pals to obpd + ld a, %10000000 ; auto increment, index 0 + ld [rOBPI], a + ld c, rOBPD - rJOYP + ld b, 4 ; NUM_PALS / 2 +.obp + rept $10 + ld a, [hli] + ld [$ff00+c], a + endr + + dec b + jr nz, .obp + + pop af + ld [rSVBK], a + +; clear pal update queue + xor a + ld [hCGBPalUpdate], a + + scf + ret +; c9f + + +DmgToCgbBGPals: ; c9f +; exists to forego reinserting cgb-converted image data + +; input: a -> bgp + + ld [rBGP], a + push af + + ld a, [hCGB] + and a + jr z, .end + + push hl + push de + push bc + ld a, [rSVBK] + push af + + ld a, 5 + ld [rSVBK], a + +; copy & reorder bg pal buffer + ld hl, BGPals ; to + ld de, Unkn1Pals ; from +; order + ld a, [rBGP] + ld b, a +; all pals + ld c, 8 + call CopyPals +; request pal update + ld a, 1 + ld [hCGBPalUpdate], a + + pop af + ld [rSVBK], a + pop bc + pop de + pop hl +.end + pop af + ret +; ccb + + +DmgToCgbObjPals: ; ccb +; exists to forego reinserting cgb-converted image data + +; input: d -> obp1 +; e -> obp2 + + ld a, e + ld [rOBP0], a + ld a, d + ld [rOBP1], a + + ld a, [hCGB] + and a + ret z + + push hl + push de + push bc + ld a, [rSVBK] + push af + + ld a, 5 + ld [rSVBK], a + +; copy & reorder obj pal buffer + ld hl, OBPals ; to + ld de, Unkn2Pals ; from +; order + ld a, [rOBP0] + ld b, a +; all pals + ld c, 8 + call CopyPals +; request pal update + ld a, 1 + ld [hCGBPalUpdate], a + + pop af + ld [rSVBK], a + pop bc + pop de + pop hl + ret +; cf8 + + +Functioncf8: ; cf8 + ld [rOBP0], a + push af + ld a, [hCGB] + and a + jr z, .asm_d22 + push hl + push de + push bc + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, $d0c0 + ld de, MartPointer + ld a, [rOBP0] + ld b, a + ld c, $1 + call CopyPals + ld a, $1 + ld [hCGBPalUpdate], a + pop af + ld [rSVBK], a + pop bc + pop de + pop hl + +.asm_d22 + pop af + ret +; d24 + +Functiond24: ; d24 + ld [rOBP1], a + push af + ld a, [hCGB] + and a + jr z, .asm_d4e + push hl + push de + push bc + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, $d0c8 + ld de, $d048 + ld a, [rOBP1] + ld b, a + ld c, $1 + call CopyPals + ld a, $1 + ld [hCGBPalUpdate], a + pop af + ld [rSVBK], a + pop bc + pop de + pop hl + +.asm_d4e + pop af + ret +; d50 + + + +CopyPals: ; d50 +; copy c palettes in order b from de to hl + + push bc + ld c, 4 ; NUM_PAL_COLORS +.loop + push de + push hl + +; get pal color + ld a, b + and %11 ; color +; 2 bytes per color + add a + ld l, a + ld h, 0 + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + +; dest + pop hl +; write color + ld [hl], e + inc hl + ld [hl], d + inc hl +; next pal color + srl b + srl b +; source + pop de +; done pal? + dec c + jr nz, .loop + +; de += 8 (next pal) + ld a, 8 ; NUM_PAL_COLORS * 2 ; bytes per pal + add e + jr nc, .ok + inc d +.ok + ld e, a + +; how many more pals? + pop bc + dec c + jr nz, CopyPals + ret +; d79 + + +Functiond79: ; d79 + ld a, [hCGB] + and a + ret z + ld a, 1 + ld [rVBK], a + ld hl, VTiles0 + ld bc, $2000 + xor a + call ByteFill + ld a, 0 + ld [rVBK], a + ret +; d90 + + +Functiond90: ; d90 + ret +; d91 + + +Functiond91: ; d91 + ld a, [hCGB] + and a + ret z + ld a, [rSVBK] + push af + ld a, 5 ; BANK(BGPals) + ld [rSVBK], a + ld hl, BGPals + ld bc, $40 + $10 + xor a + call ByteFill + pop af + ld [rSVBK], a + ld a, 1 + ld [hCGBPalUpdate], a + call DelayFrame + ret +; db1 + + +Functiondb1: ; db1 + ld a, [hROMBank] + push af + ld a, BANK(Function4c000) + rst Bankswitch + call Function4c000 + pop af + rst Bankswitch + ret +; dbd + +Functiondbd: ; dbd + ld a, [hROMBank] + push af + ld a, BANK(Function4c03f) + rst Bankswitch + call Function4c03f + pop af + rst Bankswitch + ret +; dc9 + diff --git a/common/rtc.asm b/common/rtc.asm new file mode 100644 index 000000000..91428d03b --- /dev/null +++ b/common/rtc.asm @@ -0,0 +1,25 @@ +RTC: ; 46f +; update time and time-sensitive palettes + +; rtc enabled? + ld a, [$c2ce] + cp 0 + ret z + + call UpdateTime + +; obj update on? + ld a, [VramState] + bit 0, a ; obj update + ret z + +TimeOfDayPals: ; 47e + callab _TimeOfDayPals + ret +; 485 + +UpdateTimePals: ; 485 + callab _UpdateTimePals + ret +; 48c + diff --git a/common/serial.asm b/common/serial.asm new file mode 100644 index 000000000..fca9d82c3 --- /dev/null +++ b/common/serial.asm @@ -0,0 +1,408 @@ +Serial: ; 6ef +; The serial interrupt. + + push af + push bc + push de + push hl + + ld a, [$ffc9] + and a + jr nz, .asm_71c + + ld a, [$c2d4] + bit 0, a + jr nz, .asm_721 + + ld a, [$ffcb] + inc a + jr z, .asm_726 + + ld a, [rSB] + ld [hSerialReceive], a + + ld a, [hSerialSend] + ld [rSB], a + + ld a, [$ffcb] + cp $2 + jr z, .asm_752 + + ld a, 0 << rSC_ON + ld [rSC], a + ld a, 1 << rSC_ON + ld [rSC], a + jr .asm_752 + +.asm_71c + call Function3e80 + jr .asm_75a + +.asm_721 + call Function2057 + jr .asm_75a + +.asm_726 + ld a, [rSB] + cp $1 + jr z, .asm_730 + cp $2 + jr nz, .asm_752 + +.asm_730 + ld [hSerialReceive], a + ld [$ffcb], a + cp $2 + jr z, .asm_74f + + xor a + ld [rSB], a + ld a, $3 + ld [rDIV], a + +.asm_73f + ld a, [rDIV] + bit 7, a + jr nz, .asm_73f + + ld a, 0 << rSC_ON + ld [rSC], a + ld a, 1 << rSC_ON + ld [rSC], a + jr .asm_752 + +.asm_74f + xor a + ld [rSB], a + +.asm_752 + ld a, $1 + ld [$ffca], a + ld a, $fe + ld [hSerialSend], a + +.asm_75a + pop hl + pop de + pop bc + pop af + reti +; 75f + +Function75f: ; 75f + ld a, $1 + ld [$ffcc], a +.asm_763 + ld a, [hl] + ld [hSerialSend], a + call Function78a + push bc + ld b, a + inc hl + ld a, $30 +.asm_76e + dec a + jr nz, .asm_76e + ld a, [$ffcc] + and a + ld a, b + pop bc + jr z, .asm_782 + dec hl + cp $fd + jr nz, .asm_763 + xor a + ld [$ffcc], a + jr .asm_763 + +.asm_782 + ld [de], a + inc de + dec bc + ld a, b + or c + jr nz, .asm_763 + ret +; 78a + +Function78a: ; 78a + xor a + ld [$ffca], a + ld a, [$ffcb] + cp $2 + jr nz, .asm_79b + ld a, $1 + ld [rSC], a + ld a, $81 + ld [rSC], a + +.asm_79b + ld a, [$ffca] + and a + jr nz, .asm_7e5 + ld a, [$ffcb] + cp $1 + jr nz, .asm_7c0 + call Function82b + jr z, .asm_7c0 + call .asm_825 + push hl + ld hl, $cf5c + inc [hl] + jr nz, .asm_7b7 + dec hl + inc [hl] + +.asm_7b7 + pop hl + call Function82b + jr nz, .asm_79b + jp Function833 + +.asm_7c0 + ld a, [rIE] + and $f + cp $8 + jr nz, .asm_79b + ld a, [$cf5d] + dec a + ld [$cf5d], a + jr nz, .asm_79b + ld a, [$cf5e] + dec a + ld [$cf5e], a + jr nz, .asm_79b + ld a, [$ffcb] + cp $1 + jr z, .asm_7e5 + ld a, $ff +.asm_7e2 + dec a + jr nz, .asm_7e2 + +.asm_7e5 + xor a + ld [$ffca], a + ld a, [rIE] + and $f + sub $8 + jr nz, .asm_7f8 + ld [$cf5d], a + ld a, $50 + ld [$cf5e], a + +.asm_7f8 + ld a, [hSerialReceive] + cp $fe + ret nz + call Function82b + jr z, .asm_813 + push hl + ld hl, $cf5c + ld a, [hl] + dec a + ld [hld], a + inc a + jr nz, .asm_80d + dec [hl] + +.asm_80d + pop hl + call Function82b + jr z, Function833 + +.asm_813 + ld a, [rIE] + and $f + cp $8 + ld a, $fe + ret z + ld a, [hl] + ld [hSerialSend], a + call DelayFrame + jp Function78a + +.asm_825 + ld a, $f +.asm_827 + dec a + jr nz, .asm_827 + ret +; 82b + +Function82b: ; 82b + push hl + ld hl, $cf5b + ld a, [hli] + or [hl] + pop hl + ret +; 833 + +Function833: ; 833 + dec a + ld [$cf5b], a + ld [$cf5c], a + ret +; 83b + +Function83b: ; 83b + ld hl, $cf56 + ld de, $cf51 + ld c, $2 + ld a, $1 + ld [$ffcc], a +.asm_847 + call DelayFrame + ld a, [hl] + ld [hSerialSend], a + call Function78a + ld b, a + inc hl + ld a, [$ffcc] + and a + ld a, $0 + ld [$ffcc], a + jr nz, .asm_847 + ld a, b + ld [de], a + inc de + dec c + jr nz, .asm_847 + ret +; 862 + +Function862: ; 862 + call Function309d + callab Function4000 + call Function87d + jp Function30b4 +; 871 + + +Function871: ; 871 + call Function309d + callab Function4000 + jp Function87d +; 87d + + + +Function87d: ; 87d + ld a, $ff + ld [$cf52], a +.asm_882 + call Function8c1 + call DelayFrame + call Function82b + jr z, .asm_89e + push hl + ld hl, $cf5c + dec [hl] + jr nz, .asm_89d + dec hl + dec [hl] + jr nz, .asm_89d + pop hl + xor a + jp Function833 + +.asm_89d + pop hl + +.asm_89e + ld a, [$cf52] + inc a + jr z, .asm_882 + ld b, $a +.asm_8a6 + call DelayFrame + call Function8c1 + dec b + jr nz, .asm_8a6 + ld b, $a +.asm_8b1 + call DelayFrame + call Function908 + dec b + jr nz, .asm_8b1 + ld a, [$cf52] + ld [$cf51], a + ret +; 8c1 + +Function8c1: ; 8c1 + push bc + ld b, $60 + ld a, [InLinkBattle] + cp $1 + jr z, .asm_8d7 + ld b, $60 + jr c, .asm_8d7 + cp $2 + ld b, $70 + jr z, .asm_8d7 + ld b, $80 + +.asm_8d7 + call Function8f3 + ld a, [$cf56] + add b + ld [hSerialSend], a + ld a, [$ffcb] + cp $2 + jr nz, .asm_8ee + ld a, $1 + ld [rSC], a + ld a, $81 + ld [rSC], a + +.asm_8ee + call Function8f3 + pop bc + ret +; 8f3 + +Function8f3: ; 8f3 + ld a, [hSerialReceive] + ld [$cf51], a + and $f0 + cp b + ret nz + xor a + ld [hSerialReceive], a + ld a, [$cf51] + and $f + ld [$cf52], a + ret +; 908 + +Function908: ; 908 + xor a + ld [hSerialSend], a + ld a, [$ffcb] + cp $2 + ret nz + ld a, $1 + ld [rSC], a + ld a, $81 + ld [rSC], a + ret +; 919 + +Function919: ; 919 + ld a, [InLinkBattle] + and a + ret nz + ld a, $2 + ld [rSB], a + xor a + ld [hSerialReceive], a + ld a, $0 + ld [rSC], a + ld a, $80 + ld [rSC], a + ret +; 92e + + diff --git a/common/sine.asm b/common/sine.asm new file mode 100644 index 000000000..09d06ca89 --- /dev/null +++ b/common/sine.asm @@ -0,0 +1,22 @@ +Cosine: ; 1b0f +; Return d * cos(a) in hl + add $10 ; 90 degrees + +Sine: ; 1b11 +; Return d * sin(a) in hl +; a is a signed 6-bit value. + + ld e, a + + ld a, [hROMBank] + push af + ld a, BANK(_Sine) + rst Bankswitch + + call _Sine + + pop af + rst Bankswitch + ret +; 1b1e + diff --git a/common/text.asm b/common/text.asm new file mode 100644 index 000000000..4f39a95df --- /dev/null +++ b/common/text.asm @@ -0,0 +1,1230 @@ +ClearBox: ; fb6 +; Fill a c*b box at hl with blank tiles. + + ld a, " " +.y + push bc + push hl +.x + ld [hli], a + dec c + jr nz, .x + pop hl + ld bc, 20 ; screen width + add hl, bc + pop bc + dec b + jr nz, .y + ret +; fc8 + + +ClearTileMap: ; fc8 +; Fill TileMap with blank tiles. + + ld hl, TileMap + ld a, " " + ld bc, 360 ; screen dimensions 20*18 + call ByteFill + +; We aren't done if the LCD is on. + ld a, [rLCDC] + bit 7, a + ret z + jp WaitBGMap +; fdb + + +Functionfdb: ; fdb + ld a, $7 + ld hl, AttrMap + ld bc, $0168 + call ByteFill + jr ClearTileMap +; fe8 + + + +TextBox: ; fe8 +; Draw a text box width c height b at hl +; Dimensions do not include the border. + push bc + push hl + call TextBoxBorder + pop hl + pop bc + jr TextBoxPalette +; ff1 + + +TextBoxBorder: ; ff1 + +; Top + push hl + ld a, "┌" + ld [hli], a + inc a ; "─" + call NPlaceChar + inc a ; "┐" + ld [hl], a + +; Middle + pop hl + ld de, 20 ; screen width + add hl, de +.PlaceRow + push hl + ld a, "│" + ld [hli], a + ld a, " " + call NPlaceChar + ld [hl], "│" + pop hl + ld de, 20 ; screen width + add hl, de + dec b + jr nz, .PlaceRow + +; Bottom + ld a, "└" + ld [hli], a + ld a, "─" + call NPlaceChar + ld [hl], "┘" + + ret +; 101e + + +NPlaceChar: ; 101e +; Place char a c times + ld d,c +.loop + ld [hli],a + dec d + jr nz, .loop + ret +; 1024 + + +TextBoxPalette: ; 1024 +; Fill text box width c height b at hl with pal 7 + ld de, AttrMap - TileMap + add hl, de + inc b + inc b + inc c + inc c + ld a, 7 ; pal +.gotoy + push bc + push hl +.gotox + ld [hli], a + dec c + jr nz, .gotox + pop hl + ld de, 20 ; screen width + add hl, de + pop bc + dec b + jr nz, .gotoy + ret +; 103e + + +SpeechTextBox: ; 103e +; Standard textbox. + hlcoord 0, 12 + ld b, 4 ; height + ld c, 18 ; screen width - 2 (border) + jp TextBox +; 1048 + +UnknownText_0x1048: ; 1048 + db $0, "ゲームフりーク!", $57 +; 1052 + +Function1052: ; 1052 + ld hl, .text_1056 + ret +.text_1056 + db "@" +; 1057 + + +PrintText: ; 1057 + call Function106c +Function105a: ; 105a + push hl + hlcoord 1, 14 + ld bc, 18 + 3<<8 + call ClearBox + pop hl + +PrintTextBoxText: ; 1065 + bccoord 1, 14 + call Function13e5 + ret +; 106c + + +Function106c: ; 106c + push hl + call SpeechTextBox + call Function1ad2 + call Function321c + pop hl + ret +; 1078 + + + +PlaceString: ; 1078 + push hl + +PlaceNextChar: ; 1079 + ld a, [de] + cp "@" + jr nz, CheckDict + ld b, h + ld c, l + pop hl + ret + pop de + +NextChar: ; 1083 + inc de + jp PlaceNextChar + +CheckDict: ; 1087 + cp $15 + jp z, Function117b + cp $4f + jp z, Char4F + cp $4e + jp z, Function12a7 + cp $16 + jp z, Function12b9 + and a + jp z, Function1383 + cp $4c + jp z, $1337 + cp $4b + jp z, Char4B + cp $51 ; Player name + jp z, Function12f2 + cp $49 + jp z, Function1186 + cp $52 ; Mother name + jp z, Function118d + cp $53 + jp z, Function1194 + cp $35 + jp z, Function11e8 + cp $36 + jp z, Function11ef + cp $37 + jp z, Function11f6 + cp $38 + jp z, Function119b + cp $39 + jp z, Function11a2 + cp $54 + jp z, Function11c5 + cp $5b + jp z, Function11b7 + cp $5e + jp z, Function11be + cp $5c + jp z, Function11b0 + cp $5d + jp z, Function11a9 + cp $23 + jp z, Function11cc + cp $22 + jp z, Function12b0 + cp $55 + jp z, Char55 + cp $56 + jp z, Function11d3 + cp $57 + jp z, $137c + cp $58 + jp z, Function135a + cp $4a + jp z, Function11da + cp $24 + jp z, Function11e1 + cp $25 + jp z, NextChar + cp $1f + jr nz, .asm_1122 + ld a, $7f +.asm_1122 + cp $5f + jp z, Char5F + cp $59 + jp z, Function11fd + cp $5a + jp z, Char5D + cp $3f + jp z, $121b + cp $14 + jp z, $1252 + cp $e4 + jr z, .asm_1174 ; 0x113d $35 + cp $e5 + jr z, .asm_1174 ; 0x1141 $31 + jr .asm_114c ; 0x1143 $7 + ld b, a + call Function13c6 + jp NextChar +.asm_114c + cp $60 + jr nc, .asm_1174 ; 0x114e $24 + cp $40 + jr nc, .asm_1165 ; 0x1152 $11 + cp $20 + jr nc, .asm_115c ; 0x1156 $4 + add $80 + jr .asm_115e ; 0x115a $2 +.asm_115c + add $90 +.asm_115e + ld b, $e5 + call Function13c6 + jr .asm_1174 ; 0x1163 $f +.asm_1165 + cp $44 + jr nc, .asm_116d ; 0x1167 $4 + add $59 + jr .asm_116f ; 0x116b $2 +.asm_116d + add $86 +.asm_116f + ld b, $e4 + call Function13c6 +.asm_1174 + ld [hli], a + call PrintLetterDelay + jp NextChar +; 0x117b + + +Function117b: ; 117b + ld c, l + ld b, h + ld a, $5f + ld hl, $7036 + rst FarCall + jp PlaceNextChar +; 1186 + +Function1186: ; 1186 + push de + ld de, MomsName + jp $126a +; 118d + +Function118d: ; 118d + push de + ld de, PlayerName + jp $126a +; 1194 + +Function1194: ; 1194 + push de + ld de, RivalName + jp $126a +; 119b + +Function119b: ; 119b + push de + ld de, RedsName + jp $126a +; 11a2 + +Function11a2: ; 11a2 + push de + ld de, GreensName + jp $126a +; 11a9 + +Function11a9: ; 11a9 + push de + ld de, Char5DText + jp $126a +; 11b0 + +Function11b0: ; 11b0 + push de + ld de, Char5CText + jp $126a +; 11b7 + +Function11b7: ; 11b7 + push de + ld de, Char5BText + jp $126a +; 11be + +Function11be: ; 11be + push de + ld de, Char5EText + jp $126a +; 11c5 + +Function11c5: ; 11c5 + push de + ld de, Char54Text + jp $126a +; 11cc + +Function11cc: ; 11cc + push de + ld de, Char23Text + jp $126a +; 11d3 + +Function11d3: ; 11d3 + push de + ld de, $1292 + jp $126a +; 11da + +Function11da: ; 11da + push de + ld de, Char4AText + jp $126a +; 11e1 + +Function11e1: ; 11e1 + push de + ld de, Char24Text + jp $126a +; 11e8 + +Function11e8: ; 11e8 + push de + ld de, Char37Text + jp $126a +; 11ef + +Function11ef: ; 11ef + push de + ld de, Char37Text + jp $126a +; 11f6 + +Function11f6: ; 11f6 + push de + ld de, Char37Text + jp $126a +; 11fd + + +Function11fd: ; 11fd + ld a, [hBattleTurn] + xor $1 + jr Function1205 +; 1203 + +Char5D: ; 1203 + ld a, [hBattleTurn] +; 1205 + +Function1205: ; 1205 + push de + and a + jr nz, .asm_120e ; 0x1207 $5 + ld de, BattleMonNick + jr .asm_126a ; 0x120c $5c +.asm_120e + ld de, Char5AText ; Enemy + call PlaceString + ld h, b + ld l, c + ld de, EnemyMonNick + jr .asm_126a ; 0x1219 $4f + push de + ld a, [InLinkBattle] + and a + jr nz, .linkbattle + ld a, [TrainerClass] + cp $9 + jr z, .asm_1248 ; 0x1227 $1f + cp $2a + jr z, .asm_1248 ; 0x122b $1b + ld de, $c656 + call PlaceString + ld h, b + ld l, c + ld de, String12a2 + call PlaceString + push bc + ld hl, $5939 + ld a, $e + rst FarCall + pop hl + ld de, StringBuffer1 + jr .asm_126a ; 0x1246 $22 +.asm_1248 + ld de, RivalName + jr .asm_126a ; 0x124b $1d +.linkbattle + ld de, $c656 + jr .asm_126a ; 0x1250 $18 + push de + ld de, PlayerName + call PlaceString + ld h, b + ld l, c + ld a, [PlayerGender] + bit 0, a + ld de, String12a5 + jr z, .asm_126a ; 0x1263 $5 + ld de, String12a6 + jr .asm_126a ; 0x1268 $0 +.asm_126a + call PlaceString + ld h, b + ld l, c + pop de + jp NextChar +; 0x1273 + +Char5CText: ; 1273 + db "TM@" +Char5DText: ; 1276 + db "TRAINER@" +Char5BText: ; 127e + db "PC@" +Char5EText: ; 1281 + db "ROCKET@" +Char54Text: ; 1288 + db "POKé@" +Char23Text: ; 128d + db "こうげき@" +Char56Text:; 1292 + db "……@" +Char5AText: ; 1295 + db "Enemy @" +Char4AText: ; 129c + db $e1, $e2, "@" ; PK MN +Char24Text: ; 129f + db $70, $71, "@" ; PO KE +String12a2: ; 12a2 + db " @" +Char35Text: +Char36Text: +Char37Text: ; 12a4 + db "@" +String12a5: ; 12a5 + db "@" +String12a6: ; 12a6 + db "@" +; 12a7 + +Function12a7: ; 12a7 + pop hl + ld bc, $0028 + add hl, bc + push hl + jp NextChar +; 12b0 + +Function12b0: ; 12b0 + pop hl + ld bc, $0014 + add hl, bc + push hl + jp NextChar +; 12b9 + +Function12b9: ; 12b9 + pop hl + push de + ld bc, $3b60 + add hl, bc + ld de, $ffec + ld c, $1 +.asm_12c4 + ld a, h + and a + jr nz, .asm_12cd + ld a, l + cp $14 + jr c, .asm_12d1 + +.asm_12cd + add hl, de + inc c + jr .asm_12c4 + +.asm_12d1 + ld hl, TileMap + ld de, $0014 + ld a, c +.asm_12d8 + and a + jr z, .asm_12df + add hl, de + dec a + jr .asm_12d8 + +.asm_12df + pop de + inc de + ld a, [de] + ld c, a + ld b, $0 + add hl, bc + push hl + jp NextChar +; 12ea + + +Char4F: ; 12ea + pop hl + hlcoord 1, 16 + push hl + jp NextChar +; 0x12f2 + +Function12f2: ; 12f2 + push de + ld a, [InLinkBattle] + cp $3 + jr z, .asm_1301 + cp $4 + jr z, .asm_1301 + call Function13c7 + +.asm_1301 + call Function13b6 + call Functionaaf + ld hl, $c5b9 + ld bc, $0312 + call ClearBox + call Function13cd + ld c, $14 + call DelayFrames + ld hl, $c5b9 + pop de + jp NextChar +; 131f + + +Char4B: ; 131f + ld a, [InLinkBattle] + or a + jr nz, .asm_1328 + call Function13c7 + +.asm_1328 + call Function13b6 + + push de + call Functionaaf + pop de + + ld a, [InLinkBattle] + or a + call z, Function13cd + + push de + call Function138c + call Function138c + hlcoord 1, 16 + pop de + jp NextChar +; 1345 + + +Char55: ; 1345 + push de + ld de, Text_1354 + ld b, h + ld c, l + call PlaceString + ld h, b + ld l, c + pop de + jp NextChar +; 1354 + +Text_1354: ; 1354 + db $4b, "@" +; 1356 + + +Char5F: ; 1356 +; ends a Pokédex entry + ld [hl], "." + pop hl + ret +; 135a + +Function135a: ; 135a + ld a, [InLinkBattle] + cp $3 + jr z, .asm_1368 + cp $4 + jr z, .asm_1368 + call Function13c7 + +.asm_1368 + call Function13b6 + call Functionaaf + ld a, [InLinkBattle] + cp $3 + jr z, .asm_137c + cp $4 + jr z, .asm_137c + call Function13cd + +.asm_137c + pop hl + ld de, .string_1382 + dec de + ret + +.string_1382 + db "@" +; 1383 + +Function1383: ; 1383 + ld a, $e6 + ld [hli], a + call PrintLetterDelay + jp NextChar +; 138c + +Function138c: ; 138c + ld hl, $c5b9 + ld de, $c5a5 + ld a, $3 +.asm_1394 + push af + ld c, $12 +.asm_1397 + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .asm_1397 + inc de + inc de + inc hl + inc hl + pop af + dec a + jr nz, .asm_1394 + ld hl, $c5e1 + ld a, $7f + ld bc, $0012 + call ByteFill + ld c, $5 + call DelayFrames + ret +; 13b6 + +Function13b6: ; 13b6 + push bc + ld a, [hOAMUpdate] + push af + ld a, $1 + ld [hOAMUpdate], a + call WaitBGMap + pop af + ld [hOAMUpdate], a + pop bc + ret +; 13c6 + +Function13c6: ; 13c6 + ret +; 13c7 + +Function13c7: ; 13c7 + ld a, $ee + ld [$c606], a + ret +; 13cd + +Function13cd: ; 13cd + ld a, [$c605] + ld [$c606], a + ret +; 13d4 + +Function13d4: ; 13d4 + ld b, a + ld a, [hROMBank] + push af + ld a, b + rst Bankswitch + + call PlaceString + pop af + rst Bankswitch + + ret +; 13e0 + +Function13e0: ; 13e0 + ld hl, $13e4 + ret + +.string_13e4 + db "@" +; 13e5 + + +Function13e5: ; 13e5 + ld a, [$cfcf] + push af + set 1, a + ld [$cfcf], a + call Function13f6 + pop af + ld [$cfcf], a + ret +; 13f6 + +Function13f6: ; 13f6 +.asm_13f6 + ld a, [hli] + cp "@" + ret z + call Function13ff + jr .asm_13f6 +; 13ff + +Function13ff: ; 13ff + push hl + push bc + ld c, a + ld b, 0 + ld hl, TextCommands + add hl, bc + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + pop bc + pop hl + +; jp de + push de + ret +; 1410 + +TextCommands: ; 1410 + dw Text_00 + dw Text_01 + dw Text_02 + dw Text_03 + dw Text_04 + dw Text_05 + dw Text_06 + dw Text_07 + dw Text_08 + dw Text_09 + dw Text_0A + dw Text_PlaySound ; $0b + dw Text_0C + dw Text_0D + dw Text_PlaySound ; $0e + dw Text_PlaySound ; $0f + dw Text_PlaySound ; $10 + dw Text_PlaySound ; $11 + dw Text_PlaySound ; $12 + dw Text_PlaySound ; $13 + dw Text_14 + dw Text_15 + dw Text_16 +; 143e + +Text_00: ; 143e +; TX +; write text until "@" +; [$00]["...@"] + + ld d, h + ld e, l + ld h, b + ld l, c + call PlaceString + ld h, d + ld l, e + inc hl + ret +; 1449 + +Text_01: ; 1449 +; TX_RAM +; write text from a ram address +; little endian +; [$01][addr] + + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + push hl + ld h, b + ld l, c + call PlaceString + pop hl + ret +; 1455 + +Text_16: ; 1455 +; TX_FAR +; write text from a different bank +; little endian +; [$16][addr][bank] + + ld a, [hROMBank] + push af + + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld a, [hli] + + ld [hROMBank], a + ld [MBC3RomBank], a + + push hl + ld h, d + ld l, e + call Function13f6 + pop hl + + pop af + ld [hROMBank], a + ld [MBC3RomBank], a + ret +; 1470 + +Text_02: ; 1470 +; TX_NUM +; write bcdnumber from address, typically ram +; little endian +; [$02][addr][flags] +; flags: see PrintBCDNumber + + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld a, [hli] + push hl + ld h, b + ld l, c + ld c, a + call PrintBCDNumber + ld b, h + ld c, l + pop hl + ret +; 1480 + +Text_03: ; 1480 +; TX_MOVE +; move to a new tile +; little endian +; [$03][tileaddr] + + ld a, [hli] + ld [$d0e6], a + ld c, a + ld a, [hli] + ld [$d0e7], a + ld b, a + ret +; 148b + +Text_04: ; 148b +; TX_BOX +; draw a box +; little endian +; [$04][tileaddr][height][width] + + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld a, [hli] + ld b, a + ld a, [hli] + ld c, a + push hl + ld h, d + ld l, e + call TextBox + pop hl + ret +; 149b + +Text_05: ; 149b +; TX_LOW +; write text at (1,16) +; [$05] + + bccoord 1, 16 + ret +; 149f + +Text_06:: ; 149f +; TX_WAITBUTTON +; wait for button press +; show arrow +; [06] + + ld a, [InLinkBattle] + cp $3 + jp z, Text_0D + cp $4 + jp z, Text_0D + push hl + call Function13c7 + push bc + call Functionaaf + pop bc + call Function13cd + pop hl + ret +; 14ba + +Text_07: ; 14ba + push hl + call Function13cd + call Function138c + call Function138c + pop hl + bccoord 1, 16 + ret +; 14c9 + +Text_08: ; 14c9 +; TX_ASM + +; rom only? + bit 7, h + jr nz, .asm_14ce + jp [hl] + +.asm_14ce + ld a, "@" + ld [hl], a + ret +; 14d2 + +Text_09: ; 14d2 + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld a, [hli] + push hl + ld h, b + ld l, c + ld b, a + and $f + ld c, a + ld a, b + and $f0 + swap a + set 6, a + ld b, a + call PrintNum + ld b, h + ld c, l + pop hl + ret +; 14ed + +Text_0A: ; 14ed + push hl + push bc + call GetJoypadPublic + ld a, [hJoyDown] + and BUTTON_A | BUTTON_B + jr nz, .asm_14fd + ld c, 30 + call DelayFrames + +.asm_14fd + pop bc + pop hl + ret +; 1500 + +Text_PlaySound:: ; 1500 +; chars: +; $0b, $0e, $0f, $10, $11, $12, $13 +; see TextSFX + + push bc + dec hl + ld a, [hli] + ld b, a + push hl + ld hl, TextSFX +.asm_1508 + ld a, [hli] + cp $ff + jr z, .asm_151f + cp b + jr z, .asm_1514 + inc hl + inc hl + jr .asm_1508 + +.asm_1514 + push de + ld e, [hl] + inc hl + ld d, [hl] + call StartSFX + call WaitSFX + pop de + +.asm_151f + pop hl + pop bc + ret +; 1522 + +Function1522: ; 1522 + push de + ld e, [hl] + inc hl + ld d, [hl] + call Function37ce + pop de + pop hl + pop bc + ret +; 152d + +TextSFX: ; 152d + dbw $0b, SFX_DEX_FANFARE_50_79 + dbw $12, SFX_FANFARE + dbw $0e, SFX_DEX_FANFARE_20_49 + dbw $0f, SFX_ITEM + dbw $10, SFX_CAUGHT_MON + dbw $11, SFX_DEX_FANFARE_80_109 + dbw $13, SFX_SLOT_MACHINE_START + db $ff ; end +; 1543 + +Text_0C: ; 1543 + ld a, [hli] + ld d, a + push hl + ld h, b + ld l, c +.asm_1548 + push de + ld a, "…" + ld [hli], a + call GetJoypadPublic + ld a, [hJoyDown] + and BUTTON_A | BUTTON_B + jr nz, .asm_155a + ld c, 10 + call DelayFrames +.asm_155a + pop de + dec d + jr nz, .asm_1548 + ld b, h + ld c, l + pop hl + ret +; 1562 + +Text_0D: ; 1562 +; wait for key down +; display arrow + push hl + push bc + call Functionaaf + pop bc + pop hl + ret +; 156a + +Text_14: ; 156a +; TX_PREDEF +; [$14][id] + + ld a, [hli] + push hl + ld e, a + ld d, 0 + ld hl, $4000 + add hl, de + add hl, de + ld a, $9 + call GetFarHalfword + ld d, h + ld e, l + ld h, b + ld l, c + call PlaceString + pop hl + ret +; 1582 + +Text_15: ; 1582 +; TX_DAY + + call GetWeekday + push hl + push bc + ld c, a + ld b, 0 + ld hl, .Days + add hl, bc + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld d, h + ld e, l + pop hl + call PlaceString + ld h, b + ld l, c + ld de, .Day + call PlaceString + pop hl + ret +; 15a2 + +.Days ; 15a2 + dw .Sun + dw .Mon + dw .Tues + dw .Wednes + dw .Thurs + dw .Fri + dw .Satur + +.Sun db "SUN@" +.Mon db "MON@" +.Tues db "TUES@" +.Wednes db "WEDNES@" +.Thurs db "THURS@" +.Fri db "FRI@" +.Satur db "SATUR@" +.Day db "DAY@" +; 15d8 + diff --git a/common/time.asm b/common/time.asm new file mode 100644 index 000000000..fff52b173 --- /dev/null +++ b/common/time.asm @@ -0,0 +1,311 @@ +; Functions relating to the timer interrupt and the real-time-clock. + + +AskTimer: ; 591 + push af + ld a, [$ffe9] + and a + jr z, .asm_59a + call Timer + +.asm_59a + pop af + reti +; 59c + + +LatchClock: ; 59c +; latch clock counter data + ld a, 0 + ld [MBC3LatchClock], a + ld a, 1 + ld [MBC3LatchClock], a + ret +; 5a7 + + +UpdateTime: ; 5a7 + call GetClock + call FixDays + call FixTime + callba GetTimeOfDay + ret +; 5b7 + + +GetClock: ; 5b7 +; store clock data in hRTCDayHi-hRTCSeconds + +; enable clock r/w + ld a, SRAM_ENABLE + ld [MBC3SRamEnable], a + +; clock data is 'backwards' in hram + + call LatchClock + ld hl, MBC3SRamBank + ld de, MBC3RTC + + ld [hl], RTC_S + ld a, [de] + and $3f + ld [hRTCSeconds], a + + ld [hl], RTC_M + ld a, [de] + and $3f + ld [hRTCMinutes], a + + ld [hl], RTC_H + ld a, [de] + and $1f + ld [hRTCHours], a + + ld [hl], RTC_DL + ld a, [de] + ld [hRTCDayLo], a + + ld [hl], RTC_DH + ld a, [de] + ld [hRTCDayHi], a + +; unlatch clock / disable clock r/w + call CloseSRAM + ret +; 5e8 + + +FixDays: ; 5e8 +; fix day count +; mod by 140 + +; check if day count > 255 (bit 8 set) + ld a, [hRTCDayHi] ; DH + bit 0, a + jr z, .daylo +; reset dh (bit 8) + res 0, a + ld [hRTCDayHi], a ; DH + +; mod 140 +; mod twice since bit 8 (DH) was set + ld a, [hRTCDayLo] ; DL +.modh + sub 140 + jr nc, .modh +.modl + sub 140 + jr nc, .modl + add 140 + +; update dl + ld [hRTCDayLo], a ; DL + +; unknown output + ld a, $40 ; %1000000 + jr .set + +.daylo +; quit if fewer than 140 days have passed + ld a, [hRTCDayLo] ; DL + cp 140 + jr c, .quit + +; mod 140 +.mod + sub 140 + jr nc, .mod + add 140 + +; update dl + ld [hRTCDayLo], a ; DL + +; unknown output + ld a, $20 ; %100000 + +.set +; update clock with modded day value + push af + call SetClock + pop af + scf + ret + +.quit + xor a + ret +; 61d + + +FixTime: ; 61d +; add ingame time (set at newgame) to current time +; day hr min sec +; store time in CurDay, hHours, hMinutes, hSeconds + +; second + ld a, [hRTCSeconds] ; S + ld c, a + ld a, [StartSecond] + add c + sub 60 + jr nc, .updatesec + add 60 +.updatesec + ld [hSeconds], a + +; minute + ccf ; carry is set, so turn it off + ld a, [hRTCMinutes] ; M + ld c, a + ld a, [StartMinute] + adc c + sub 60 + jr nc, .updatemin + add 60 +.updatemin + ld [hMinutes], a + +; hour + ccf ; carry is set, so turn it off + ld a, [hRTCHours] ; H + ld c, a + ld a, [StartHour] + adc c + sub 24 + jr nc, .updatehr + add 24 +.updatehr + ld [hHours], a + +; day + ccf ; carry is set, so turn it off + ld a, [hRTCDayLo] ; DL + ld c, a + ld a, [StartDay] + adc c + ld [CurDay], a + ret +; 658 + +Function658: ; 658 + xor a + ld [StringBuffer2], a + ld a, $0 + ld [$d089], a + jr .asm_677 + + call UpdateTime + ld a, [hHours] + ld [$d087], a + ld a, [hMinutes] + ld [$d088], a + ld a, [hSeconds] + ld [$d089], a + jr .asm_677 + +.asm_677 + ld a, $5 + ld hl, $40ed + rst FarCall + ret +; 67e + + + +Function67e: ; 67e + call Function685 + call SetClock + ret +; 685 + +Function685: ; 685 + xor a + ld [hRTCSeconds], a + ld [hRTCMinutes], a + ld [hRTCHours], a + ld [hRTCDayLo], a + ld [hRTCDayHi], a + ret +; 691 + + +SetClock: ; 691 +; set clock data from hram + +; enable clock r/w + ld a, SRAM_ENABLE + ld [MBC3SRamEnable], a + +; set clock data +; stored 'backwards' in hram + + call LatchClock + ld hl, MBC3SRamBank + ld de, MBC3RTC + +; seems to be a halt check that got partially commented out +; this block is totally pointless + ld [hl], RTC_DH + ld a, [de] + bit 6, a ; halt + ld [de], a + +; seconds + ld [hl], RTC_S + ld a, [hRTCSeconds] + ld [de], a +; minutes + ld [hl], RTC_M + ld a, [hRTCMinutes] + ld [de], a +; hours + ld [hl], RTC_H + ld a, [hRTCHours] + ld [de], a +; day lo + ld [hl], RTC_DL + ld a, [hRTCDayLo] + ld [de], a +; day hi + ld [hl], RTC_DH + ld a, [hRTCDayHi] + res 6, a ; make sure timer is active + ld [de], a + +; cleanup + call CloseSRAM ; unlatch clock, disable clock r/w + ret +; 6c4 + + +Function6c4: ; 6c4 + xor a + push af + ld a, $0 + call GetSRAMBank + pop af + ld [$ac60], a + call CloseSRAM + ret +; 6d3 + +Function6d3: ; 6d3 + ld hl, $ac60 + push af + ld a, $0 + call GetSRAMBank + pop af + or [hl] + ld [hl], a + call CloseSRAM + ret +; 6e3 + +Function6e3: ; 6e3 + ld a, $0 + call GetSRAMBank + ld a, [$ac60] + call CloseSRAM + ret +; 6ef + diff --git a/common/vblank.asm b/common/vblank.asm new file mode 100644 index 000000000..71114964e --- /dev/null +++ b/common/vblank.asm @@ -0,0 +1,541 @@ +; VBlank is the interrupt responsible for updating VRAM. + +; In Pokemon Crystal, VBlank has been hijacked to act as the +; main loop. After time-sensitive graphics operations have been +; performed, joypad input and sound functions are executed. + +; This prevents the display and audio output from lagging. + + +VBlank: ; 283 + push af + push bc + push de + push hl + +; get vblank type + ld a, [$ff9e] + and $7 + +; get fn pointer + ld e, a + ld d, $0 + ld hl, .VBlanks + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + +; down to business + call _hl_ + +; since this is called once per frame + call GameTimer + + pop hl + pop de + pop bc + pop af + reti +; 2a1 + +.VBlanks ; 2a1 + dw VBlank0 ; 0 + dw VBlank1 ; 1 + dw VBlank2 ; 2 + dw VBlank3 ; 3 + dw VBlank4 ; 4 + dw VBlank5 ; 5 + dw VBlank6 ; 6 + dw VBlank0 ; 7 +; 2b1 + + +VBlank0: ; 2b1 +; normal operation + +; rng +; scx, scy, wy, wx +; bg map buffer +; palettes +; dma transfer +; bg map +; tiles +; oam +; joypad +; sound + +; inc frame counter + ld hl, $ff9b + inc [hl] + +; advance rng + ld a, [rDIV] + ld b, a + ld a, [hRandomAdd] + adc b + ld [hRandomAdd], a + + ld a, [rDIV] + ld b, a + ld a, [hRandomSub] + sbc b + ld [hRandomSub], a + +; save bank + ld a, [hROMBank] ; current bank + ld [$ff8a], a + +; scroll x + ld a, [hSCX] + ld [rSCX], a +; scroll y + ld a, [hSCY] + ld [rSCY], a +; window y + ld a, [hWY] + ld [rWY], a +; window x + 7 + ld a, [hWX] + ld [rWX], a + +; some time management is in order +; only have time for one of these during vblank + +; bg map buffer has priority + call UpdateBGMapBuffer + jr c, .doneframeaction + +; then pals + call UpdatePalsIfCGB + jr c, .doneframeaction + +; dma transfer + call DMATransfer + jr c, .doneframeaction + +; bg map + call UpdateBGMap + +; these have their own timing checks + call Serve2bppRequest + call Serve1bppRequest + call AnimateTileset + +.doneframeaction +; oam update off? + ld a, [hOAMUpdate] + and a + jr nz, .vblankoccurred + +; update oam by dma transfer + call hPushOAM +; @PushOAM: +; ld a, Sprites >> 8 +; ld [rDMA], a +; ld a, $28 +; .loop +; dec a +; jr nz, .loop +; ret + + +; vblank-sensitive operations are done + +.vblankoccurred +; tell other fns vblank happened + xor a + ld [VBlankOccurred], a + +; dec OverworldDelay until 0 + ld a, [OverworldDelay] + and a + jr z, .textdelay + dec a + ld [OverworldDelay], a + +.textdelay +; dec text delay counter until 0 + ld a, [TextDelayFrames] + and a + jr z, .joypad + dec a + ld [TextDelayFrames], a + +.joypad + call Joypad + +; update sound + ld a, BANK(UpdateSound) + rst Bankswitch ; bankswitch + call UpdateSound + ld a, [$ff8a] + rst Bankswitch ; restore bank + +; + ld a, [hSeconds] + ld [$ffe3], a + + ret +; 325 + + +VBlank2: ; 325 +; sound only + +; save bank + ld a, [hROMBank] + ld [$ff8a], a + +; update sound + ld a, BANK(UpdateSound) + rst Bankswitch ; bankswitch + call UpdateSound + +; restore bank + ld a, [$ff8a] + rst Bankswitch + +; tell other fns vblank happened + xor a + ld [VBlankOccurred], a + ret +; 337 + + +VBlank1: ; 337 +; scx, scy +; palettes +; bg map +; tiles +; oam +; sound / lcd stat + +; save bank + ld a, [hROMBank] + ld [$ff8a], a + +; scroll x + ld a, [hSCX] + ld [rSCX], a + +; scroll y + ld a, [hSCY] + ld [rSCY], a + +; time-sensitive fns + call UpdatePals + jr c, .vblankoccurred + +; these have their own timing checks + call UpdateBGMap + call Serve2bppRequest@VBlank +; update oam by dma transfer + call hPushOAM +; @PushOAM: +; ld a, Sprites >> 8 +; ld [rDMA], a +; ld a, $28 +; .loop +; dec a +; jr nz, .loop +; ret + +.vblankoccurred +; tell other fns vblank happened + xor a + ld [VBlankOccurred], a + +; get requested ints + ld a, [rIF] + ld b, a +; discard requested ints + xor a + ld [rIF], a +; enable lcd stat + ld a, %10 ; lcd stat + ld [rIE], a +; rerequest serial int if applicable (still disabled) +; request lcd stat + ld a, b + and %1000 ; serial + or %10 ; lcd stat + ld [rIF], a + + ei +; update sound + ld a, BANK(UpdateSound) + rst Bankswitch ; bankswitch + call UpdateSound +; restore bank + ld a, [$ff8a] + rst Bankswitch + di + +; get requested ints + ld a, [rIF] + ld b, a +; discard requested ints + xor a + ld [rIF], a +; enable ints besides joypad + ld a, %1111 ; serial timer lcdstat vblank + ld [rIE], a +; rerequest ints + ld a, b + ld [rIF], a + ret +; 37f + + +UpdatePals: ; 37f +; update pals for either dmg or cgb + +; check cgb + ld a, [hCGB] + and a + jp nz, UpdateCGBPals + +; update gb pals + ld a, [$cfc7] + ld [rBGP], a + + ld a, [$cfc8] + ld [rOBP0], a + + ld a, [$cfc9] + ld [rOBP1], a + + and a + ret +; 396 + + +VBlank3: ; 396 +; scx, scy +; palettes +; bg map +; tiles +; oam +; sound / lcd stat + +; save bank + ld a, [hROMBank] + ld [$ff8a], a + +; scroll x + ld a, [hSCX] + ld [rSCX], a +; scroll y + ld a, [hSCY] + ld [rSCY], a + +; any pals to update? + ld a, [hCGBPalUpdate] + and a + call nz, ForceUpdateCGBPals + jr c, .vblankoccurred +; else + call UpdateBGMap + call Serve2bppRequest@VBlank + +; update oam by dma transfer + call hPushOAM +; @PushOAM: +; ld a, Sprites >> 8 +; ld [rDMA], a +; ld a, $28 +; .loop +; dec a +; jr nz, .loop +; ret + +.vblankoccurred +; tell other fns vblank happened + xor a + ld [VBlankOccurred], a + +; save int flag + ld a, [rIF] + push af +; reset ints + xor a + ld [rIF], a +; force lcdstat int during sound update + ld a, %10 ; lcd stat + ld [rIE], a + ld [rIF], a + + ei +; update sound + ld a, BANK(UpdateSound) + rst Bankswitch ; bankswitch + call UpdateSound +; restore bank + ld a, [$ff8a] + rst Bankswitch + di + +; request lcdstat + ld a, [rIF] + ld b, a +; and any other ints + pop af + or b + ld b, a +; reset ints + xor a + ld [rIF], a +; enable ints besides joypad + ld a, %1111 ; serial timer lcdstat vblank + ld [rIE], a +; request ints + ld a, b + ld [rIF], a + ret +; 3df + + +VBlank4: ; 3df +; bg map +; tiles +; oam +; joypad +; serial +; sound + +; save bank + ld a, [hROMBank] + ld [$ff8a], a + + call UpdateBGMap + call Serve2bppRequest + +; update oam by dma transfer + call hPushOAM +; @PushOAM: +; ld a, Sprites >> 8 +; ld [rDMA], a +; ld a, $28 +; .loop +; dec a +; jr nz, .loop +; ret + +; update joypad + call Joypad + +; tell other fns vblank happened + xor a + ld [VBlankOccurred], a + +; handshake + call AskSerial + +; update sound + ld a, BANK(UpdateSound) + rst Bankswitch ; bankswitch + call UpdateSound +; restore bank + ld a, [$ff8a] + rst Bankswitch + ret +; 400 + + +VBlank5: ; 400 +; scx +; palettes +; bg map +; tiles +; joypad +; + +; save bank + ld a, [hROMBank] + ld [$ff8a], a + +; scroll x + ld a, [hSCX] + ld [rSCX], a + +; if we can update pals, skip this part + call UpdatePalsIfCGB + jr c, .vblankoccurred + + call UpdateBGMap + call Serve2bppRequest + +.vblankoccurred +; tell other fns vblank happened + xor a + ld [VBlankOccurred], a + +; joypad + call Joypad + +; discard requested ints + xor a + ld [rIF], a +; enable lcd stat + ld a, %10 ; lcd stat + ld [rIE], a +; request lcd stat + ld [rIF], a + + ei +; update sound + ld a, BANK(UpdateSound) + rst Bankswitch ; bankswitch + call UpdateSound +; restore bank + ld a, [$ff8a] + rst Bankswitch + di + +; discard requested ints + xor a + ld [rIF], a +; enable ints besides joypad + ld a, %1111 ; serial timer lcdstat vblank + ld [rIE], a + ret +; 436 + + +VBlank6: ; 436 +; palettes +; tiles +; dma transfer +; sound + +; save bank + ld a, [hROMBank] + ld [$ff8a], a + +; inc frame counter + ld hl, $ff9b + inc [hl] + + call UpdateCGBPals + jr c, .vblankoccurred + + call Serve2bppRequest + call Serve1bppRequest + call DMATransfer + +.vblankoccurred +; tell other fns vblank happened + xor a + ld [VBlankOccurred], a + +; update sound + ld a, BANK(UpdateSound) + rst Bankswitch ; bankswitch + call UpdateSound +; restore bank + ld a, [$ff8a] + rst Bankswitch + ret +; 45a diff --git a/common/video.asm b/common/video.asm new file mode 100644 index 000000000..0d0aa272d --- /dev/null +++ b/common/video.asm @@ -0,0 +1,487 @@ +; Functions dealing with VRAM. + +DMATransfer: ; 15d8 +; Return carry if the transfer is completed. + + ld a, [hDMATransfer] + and a + ret z + +; Start transfer + ld [rHDMA5], a + +; Execution is halted until the transfer is complete. + + xor a + ld [hDMATransfer], a + scf + ret +; 15e3 + + +UpdateBGMapBuffer: ; 15e3 +; Copy [$ffdc] 16x8 tiles from BGMapBuffer +; to bg map addresses in BGMapBufferPtrs. + +; [$ffdc] must be even since this is done in pairs. + +; Return carry on success. + + ld a, [hBGMapUpdate] + and a + ret z + + ld a, [rVBK] + push af + ld [hSPBuffer], sp + + ld hl, BGMapBufferPtrs + ld sp, hl + +; We can now pop the addresses of affected spots on the BG Map + + ld hl, BGMapPalBuffer + ld de, BGMapBuffer + + +.next +; Copy a pair of 16x8 blocks (one 16x16 block) + +rept 2 +; Get our BG Map address + pop bc + +; Palettes + ld a, 1 + ld [rVBK], a + + ld a, [hli] + ld [bc], a + inc c + ld a, [hli] + ld [bc], a + dec c + +; Tiles + ld a, 0 + ld [rVBK], a + + ld a, [de] + inc de + ld [bc], a + inc c + ld a, [de] + inc de + ld [bc], a +endr + +; We've done 2 16x8 blocks + ld a, [$ffdc] + dec a + dec a + ld [$ffdc], a + + jr nz, .next + + + ld a, [hSPBuffer] + ld l, a + ld a, [hSPBuffer + 1] + ld h, a + ld sp, hl + + pop af + ld [rVBK], a + + xor a + ld [hBGMapUpdate], a + scf + ret +; 163a + + +WaitTop: ; 163a +; Wait until the top third of the BG Map is being updated. + + ld a, [hBGMapMode] + and a + ret z + + ld a, [hBGMapThird] + and a + jr z, .done + + call DelayFrame + jr WaitTop + +.done + xor a + ld [hBGMapMode], a + ret +; 164c + + +UpdateBGMap: ; 164c +; Update the BG Map, in thirds, from TileMap and AttrMap. + + ld a, [hBGMapMode] + and a + ret z + +; BG Map 0 + dec a ; 1 + jr z, .Tiles + dec a ; 2 + jr z, .Attr + +; BG Map 1 + dec a + + ld a, [hBGMapAddress] + ld l, a + ld a, [hBGMapAddress + 1] + ld h, a + push hl + + xor a + ld [hBGMapAddress], a + ld a, VBGMap1 >> 8 + ld [hBGMapAddress + 1], a + + ld a, [hBGMapMode] + push af + cp 3 + call z, .Tiles + pop af + cp 4 + call z, .Attr + + pop hl + ld a, l + ld [hBGMapAddress], a + ld a, h + ld [hBGMapAddress + 1], a + ret + + +.Attr + ld a, 1 + ld [rVBK], a + + ld hl, AttrMap + call .update + + ld a, 0 + ld [rVBK], a + ret + + +.Tiles + ld hl, TileMap + + +.update + ld [hSPBuffer], sp + +; Which third? + ld a, [hBGMapThird] + and a ; 0 + jr z, .top + dec a ; 1 + jr z, .middle + ; 2 + + +THIRD_HEIGHT EQU SCREEN_HEIGHT / 3 + + +.bottom + ld de, 2 * THIRD_HEIGHT * SCREEN_WIDTH + add hl, de + ld sp, hl + + ld a, [hBGMapAddress + 1] + ld h, a + ld a, [hBGMapAddress] + ld l, a + + ld de, 2 * THIRD_HEIGHT * BG_MAP_WIDTH + add hl, de + +; Next time: top third + xor a + jr .start + + +.middle + ld de, THIRD_HEIGHT * SCREEN_WIDTH + add hl, de + ld sp, hl + + ld a, [hBGMapAddress + 1] + ld h, a + ld a, [hBGMapAddress] + ld l, a + + ld de, THIRD_HEIGHT * BG_MAP_WIDTH + add hl, de + +; Next time: bottom third + ld a, 2 + jr .start + + +.top + ld sp, hl + + ld a, [hBGMapAddress + 1] + ld h, a + ld a, [hBGMapAddress] + ld l, a + +; Next time: middle third + ld a, 1 + + +.start +; Which third to update next time + ld [hBGMapThird], a + +; Rows of tiles in a third + ld a, SCREEN_HEIGHT / 3 + +; Discrepancy between TileMap and BGMap + ld bc, BG_MAP_WIDTH - (SCREEN_WIDTH - 1) + + +.row +; Copy a row of 20 tiles +rept SCREEN_WIDTH / 2 - 1 + pop de + ld [hl], e + inc l + ld [hl], d + inc l +endr + pop de + ld [hl], e + inc l + ld [hl], d + + add hl, bc + dec a + jr nz, .row + + + ld a, [hSPBuffer] + ld l, a + ld a, [hSPBuffer + 1] + ld h, a + ld sp, hl + ret +; 170a + + +Serve1bppRequest: ; 170a +; Only call during the first fifth of VBlank + + ld a, [Requested1bpp] + and a + ret z + +; Back out if we're too far into VBlank + ld a, [rLY] + cp 144 + ret c + cp 146 + ret nc + +; Copy [Requested1bpp] 1bpp tiles from [Requested1bppSource] to [Requested1bppDest] + + ld [hSPBuffer], sp + +; Source + ld hl, Requested1bppSource + ld a, [hli] + ld h, [hl] + ld l, a + ld sp, hl + +; Destination + ld hl, Requested1bppDest + ld a, [hli] + ld h, [hl] + ld l, a + +; # tiles to copy + ld a, [Requested1bpp] + ld b, a + + xor a + ld [Requested1bpp], a + +.next + +rept 3 + pop de + ld [hl], e + inc l + ld [hl], e + inc l + ld [hl], d + inc l + ld [hl], d + inc l +endr + pop de + ld [hl], e + inc l + ld [hl], e + inc l + ld [hl], d + inc l + ld [hl], d + + inc hl + dec b + jr nz, .next + + + ld a, l + ld [Requested1bppDest], a + ld a, h + ld [Requested1bppDest + 1], a + + ld [Requested1bppSource], sp + + ld a, [hSPBuffer] + ld l, a + ld a, [hSPBuffer + 1] + ld h, a + ld sp, hl + ret +; 1769 + + +Serve2bppRequest: ; 1769 +; Only call during the first fifth of VBlank + + ld a, [Requested2bpp] + and a + ret z + +; Back out if we're too far into VBlank + ld a, [rLY] + cp 144 + ret c + cp 146 + ret nc + jr _Serve2bppRequest + + +Serve2bppRequest@VBlank: ; 1778 + + ld a, [Requested2bpp] + and a + ret z + +_Serve2bppRequest: ; 177d +; Copy [Requested2bpp] 2bpp tiles from [Requested2bppSource] to [Requested2bppDest] + + ld [hSPBuffer], sp + +; Source + ld hl, Requested2bppSource + ld a, [hli] + ld h, [hl] + ld l, a + ld sp, hl + +; Destination + ld hl, Requested2bppDest + ld a, [hli] + ld h, [hl] + ld l, a + +; # tiles to copy + ld a, [Requested2bpp] + ld b, a + + xor a + ld [Requested2bpp], a + +.next + +rept 7 + pop de + ld [hl], e + inc l + ld [hl], d + inc l +endr + pop de + ld [hl], e + inc l + ld [hl], d + + inc hl + dec b + jr nz, .next + + + ld a, l + ld [Requested2bppDest], a + ld a, h + ld [Requested2bppDest + 1], a + + ld [Requested2bppSource], sp + + ld a, [hSPBuffer] + ld l, a + ld a, [hSPBuffer + 1] + ld h, a + ld sp, hl + ret +; 17d3 + + +AnimateTileset: ; 17d3 +; Only call during the first fifth of VBlank + + ld a, [$ffde] + and a + ret z + +; Back out if we're too far into VBlank + ld a, [rLY] + cp 144 + ret c + cp 151 + ret nc + + ld a, [hROMBank] + push af + ld a, BANK(_AnimateTileset) + rst Bankswitch + + ld a, [rSVBK] + push af + ld a, 1 + ld [rSVBK], a + + ld a, [rVBK] + push af + ld a, 0 + ld [rVBK], a + + call _AnimateTileset + + pop af + ld [rVBK], a + pop af + ld [rSVBK], a + pop af + rst Bankswitch + ret +; 17ff + diff --git a/engine/copy.asm b/engine/copy.asm deleted file mode 100644 index ad25c96e6..000000000 --- a/engine/copy.asm +++ /dev/null @@ -1,431 +0,0 @@ -; Functions to copy data from ROM. - - -Functiondc9: ; dc9 - ld a, [rLCDC] - bit 7, a - jp z, Copy2bpp - - ld a, [hROMBank] - push af - ld a, BANK(Function104284) - rst Bankswitch - call Function104284 - pop af - rst Bankswitch - - ret -; ddc - -Functionddc: ; ddc - ld a, [rLCDC] - bit 7, a - jp z, Copy1bpp - - ld a, [hROMBank] - push af - ld a, BANK(Function1042b2) - rst Bankswitch - call Function1042b2 - pop af - rst Bankswitch - - ret -; def - -Functiondef: ; def - ld [hBuffer], a - ld a, [hROMBank] - push af - ld a, [hBuffer] - rst Bankswitch - call FarCopyBytesDouble - pop af - rst Bankswitch - ret -; dfd - -Functiondfd: ; dfd - dec c - ld a, [hBGMapMode] - push af - xor a - ld [hBGMapMode], a - ld a, [hROMBank] - push af - ld a, b - rst Bankswitch - -.asm_e09 - ld a, d - ld [rHDMA1], a - ld a, e - and $f0 - ld [rHDMA2], a - ld a, h - and $1f - ld [rHDMA3], a - ld a, l - and $f0 - ld [rHDMA4], a - ld a, c - cp $8 - jr c, .asm_e3c - sub $8 - ld c, a - ld a, $f - ld [hDMATransfer], a - call DelayFrame - ld a, l - add $0 - ld l, a - ld a, h - adc $1 - ld h, a - ld a, e - add $0 - ld e, a - ld a, d - adc $1 - ld d, a - jr .asm_e09 - -.asm_e3c - ld a, c - and $7f - ld [hDMATransfer], a - call DelayFrame - pop af - rst Bankswitch - - pop af - ld [hBGMapMode], a - ret -; e4a - - - -Functione4a: ; e4a - ld a, $5 - ld hl, $4135 - rst FarCall - ret -; e51 - - - -Functione51: ; e51 - ld a, $3e - ld hl, $7449 - rst FarCall - ret -; e58 - -Functione58: ; e58 - ld a, $3e - ld hl, $74be - rst FarCall - ret -; e5f - - - -Functione5f: ; e5f - ld a, $3e - ld hl, $748a - rst FarCall - ld a, $3e - ld hl, $74b0 - rst FarCall - ret -; e6c - -Functione6c: ; e6c - ld a, $3e - ld hl, $74b0 - rst FarCall - ret -; e73 - -Functione73: ; e73 - push de - ld a, $0 - call GetSRAMBank - push bc - ld de, $a000 - ld a, b - call FarDecompress - pop bc - pop hl - ld de, $a000 - call Request2bpp - call CloseSRAM - ret -; e8d - - - -FarCopyBytes: ; e8d -; copy bc bytes from a:hl to de - - ld [hBuffer], a - ld a, [hROMBank] - push af - ld a, [hBuffer] - rst Bankswitch - - call CopyBytes - - pop af - rst Bankswitch - ret -; 0xe9b - - -FarCopyBytesDouble: ; e9b -; Copy bc bytes from a:hl to bc*2 bytes at de, -; doubling each byte in the process. - - ld [hBuffer], a - ld a, [hROMBank] - push af - ld a, [hBuffer] - rst Bankswitch - -; switcheroo, de <> hl - ld a, h - ld h, d - ld d, a - ld a, l - ld l, e - ld e, a - - inc b - inc c - jr .dec - -.loop - ld a, [de] - inc de - ld [hli], a - ld [hli], a -.dec - dec c - jr nz, .loop - dec b - jr nz, .loop - - pop af - rst Bankswitch - ret -; 0xeba - - -Request2bpp: ; eba - ld a, [hBGMapMode] - push af - xor a - ld [hBGMapMode], a - - ld a, [hROMBank] - push af - ld a, b - rst Bankswitch - - ld a, [$ffd3] - push af - - ld a, $8 - ld [$ffd3], a - ld a, [InLinkBattle] - cp $4 - jr nz, .asm_edc - ld a, [$ffe9] - and a - jr nz, .asm_edc - ld a, $6 - ld [$ffd3], a - -.asm_edc - ld a, e - ld [Requested2bppSource], a - ld a, d - ld [Requested2bppSource + 1], a - ld a, l - ld [Requested2bppDest], a - ld a, h - ld [Requested2bppDest + 1], a - -.asm_eec - ld a, c - ld hl, $ffd3 - cp [hl] - jr nc, .asm_f08 - - ld [Requested2bpp], a -.wait - call DelayFrame - ld a, [Requested2bpp] - and a - jr nz, .wait - - pop af - ld [$ffd3], a - - pop af - rst Bankswitch - - pop af - ld [hBGMapMode], a - ret - -.asm_f08 - ld a, [$ffd3] - ld [Requested2bpp], a -.asm_f0d - call DelayFrame - ld a, [Requested2bpp] - and a - jr nz, .asm_f0d - ld a, c - ld hl, $ffd3 - sub [hl] - ld c, a - jr .asm_eec -; f1e - - -Request1bpp: ; f1e - ld a, [hBGMapMode] - push af - xor a - ld [hBGMapMode], a - - ld a, [hROMBank] - push af - ld a, b - rst Bankswitch - - ld a, [$ffd3] - push af - - ld a, $8 - ld [$ffd3], a - ld a, [InLinkBattle] - cp $4 - jr nz, .asm_f40 - ld a, [$ffe9] - and a - jr nz, .asm_f40 - ld a, $6 - ld [$ffd3], a - -.asm_f40 - ld a, e - ld [Requested1bppSource], a - ld a, d - ld [Requested1bppSource + 1], a - ld a, l - ld [Requested1bppDest], a - ld a, h - ld [Requested1bppDest + 1], a -.asm_f50 - ld a, c - ld hl, $ffd3 - cp [hl] - jr nc, .asm_f6c - - ld [Requested1bpp], a -.wait - call DelayFrame - ld a, [Requested1bpp] - and a - jr nz, .wait - - pop af - ld [$ffd3], a - - pop af - rst Bankswitch - - pop af - ld [hBGMapMode], a - ret - -.asm_f6c - ld a, [$ffd3] - ld [Requested1bpp], a -.asm_f71 - call DelayFrame - ld a, [Requested1bpp] - and a - jr nz, .asm_f71 - ld a, c - ld hl, $ffd3 - sub [hl] - ld c, a - jr .asm_f50 -; f82 - - -Get2bpp: ; f82 - ld a, [rLCDC] - bit 7, a - jp nz, Request2bpp - -Copy2bpp: ; f89 -; copy c 2bpp tiles from b:de to hl - - push hl - ld h, d - ld l, e - pop de - -; bank - ld a, b - -; bc = c * $10 - push af - swap c - ld a, $f - and c - ld b, a - ld a, $f0 - and c - ld c, a - pop af - - jp FarCopyBytes -; f9d - - -Get1bpp: ; f9d - ld a, [rLCDC] - bit 7, a - jp nz, Request1bpp - -Copy1bpp: ; fa4 -; copy c 1bpp tiles from b:de to hl - - push de - ld d, h - ld e, l - -; bank - ld a, b - -; bc = c * $10 / 2 - push af - ld h, 0 - ld l, c - add hl, hl - add hl, hl - add hl, hl - ld b, h - ld c, l - pop af - - pop hl - jp FarCopyBytesDouble -; fb6 - diff --git a/engine/decompress.asm b/engine/decompress.asm deleted file mode 100644 index 8d39cd968..000000000 --- a/engine/decompress.asm +++ /dev/null @@ -1,367 +0,0 @@ -FarDecompress: ; b40 -; Decompress graphics data at a:hl to de - -; put a away for a sec - ld [$c2c4], a -; save bank - ld a, [hROMBank] - push af -; bankswitch - ld a, [$c2c4] - rst Bankswitch - -; what we came here for - call Decompress - -; restore bank - pop af - rst Bankswitch - ret -; b50 - - -Decompress: ; b50 -; Pokemon Crystal uses an lz variant for compression. - -; This is mainly used for graphics, but the intro's -; tilemaps also use this compression. - -; This function decompresses lz-compressed data at hl to de. - - -; Basic rundown: - -; A typical control command consists of: -; -the command (bits 5-7) -; -the count (bits 0-4) -; -and any additional params - -; $ff is used as a terminator. - - -; Commands: - -; 0: literal -; literal data for some number of bytes -; 1: iterate -; one byte repeated for some number of bytes -; 2: alternate -; two bytes alternated for some number of bytes -; 3: zero (whitespace) -; 0x00 repeated for some number of bytes - -; Repeater control commands have a signed parameter used to determine the start point. -; Wraparound is simulated: -; Positive values are added to the start address of the decompressed data -; and negative values are subtracted from the current position. - -; 4: repeat -; repeat some number of bytes from decompressed data -; 5: flipped -; repeat some number of flipped bytes from decompressed data -; ex: $ad = %10101101 -> %10110101 = $b5 -; 6: reverse -; repeat some number of bytes in reverse from decompressed data - -; If the value in the count needs to be larger than 5 bits, -; control code 7 can be used to expand the count to 10 bits. - -; A new control command is read in bits 2-4. -; The new 10-bit count is split: -; bits 0-1 contain the top 2 bits -; another byte is added containing the latter 8 - -; So, the structure of the control command becomes: -; 111xxxyy yyyyyyyy -; | | | | -; | | our new count -; | the control command for this count -; 7 (this command) - -; For more information, refer to the code below and in extras/gfx.py . - -; save starting output address - ld a, e - ld [$c2c2], a - ld a, d - ld [$c2c3], a - -.loop -; get next byte - ld a, [hl] -; done? - cp $ff ; end - ret z - -; get control code - and %11100000 - -; 10-bit param? - cp $e0 ; LZ_HI - jr nz, .normal - - -; 10-bit param: - -; get next 3 bits (%00011100) - ld a, [hl] - add a - add a ; << 3 - add a - -; this is our new control code - and %11100000 - push af - -; get param hi - ld a, [hli] - and %00000011 - ld b, a - -; get param lo - ld a, [hli] - ld c, a - -; read at least 1 byte - inc bc - jr .readers - - -.normal -; push control code - push af -; get param - ld a, [hli] - and %00011111 - ld c, a - ld b, $0 -; read at least 1 byte - inc c - -.readers -; let's get started - -; inc loop counts since we bail as soon as they hit 0 - inc b - inc c - -; get control code - pop af -; command type - bit 7, a ; 80, a0, c0 - jr nz, .repeatertype - -; literals - cp $20 ; LZ_ITER - jr z, .iter - cp $40 ; LZ_ALT - jr z, .alt - cp $60 ; LZ_ZERO - jr z, .zero - ; else $00 - -; 00 ; LZ_LIT -; literal data for bc bytes -.loop1 -; done? - dec c - jr nz, .next1 - dec b - jp z, .loop - -.next1 - ld a, [hli] - ld [de], a - inc de - jr .loop1 - - -; 20 ; LZ_ITER -; write byte for bc bytes -.iter - ld a, [hli] - -.iterloop - dec c - jr nz, .iternext - dec b - jp z, .loop - -.iternext - ld [de], a - inc de - jr .iterloop - - -; 40 ; LZ_ALT -; alternate two bytes for bc bytes - -; next pair -.alt -; done? - dec c - jr nz, .alt0 - dec b - jp z, .altclose0 - -; alternate for bc -.alt0 - ld a, [hli] - ld [de], a - inc de - dec c - jr nz, .alt1 -; done? - dec b - jp z, .altclose1 -.alt1 - ld a, [hld] - ld [de], a - inc de - jr .alt - -; skip past the bytes we were alternating -.altclose0 - inc hl -.altclose1 - inc hl - jr .loop - - -; 60 ; LZ_ZERO -; write 00 for bc bytes -.zero - xor a - -.zeroloop - dec c - jr nz, .zeronext - dec b - jp z, .loop - -.zeronext - ld [de], a - inc de - jr .zeroloop - - -; repeats -; 80, a0, c0 -; repeat decompressed data from output -.repeatertype - push hl - push af -; get next byte - ld a, [hli] -; absolute? - bit 7, a - jr z, .absolute - -; relative -; a = -a - and %01111111 ; forget the bit we just looked at - cpl -; add de (current output address) - add e - ld l, a - ld a, $ff ; -1 - adc d - ld h, a - jr .repeaters - -.absolute -; get next byte (lo) - ld l, [hl] -; last byte (hi) - ld h, a -; add starting output address - ld a, [$c2c2] - add l - ld l, a - ld a, [$c2c3] - adc h - ld h, a - -.repeaters - pop af - cp $80 ; LZ_REPEAT - jr z, .repeat - cp $a0 ; LZ_FLIP - jr z, .flip - cp $c0 ; LZ_REVERSE - jr z, .reverse - -; e0 -> 80 - -; 80 ; LZ_REPEAT -; repeat some decompressed data -.repeat -; done? - dec c - jr nz, .repeatnext - dec b - jr z, .cleanup - -.repeatnext - ld a, [hli] - ld [de], a - inc de - jr .repeat - - -; a0 ; LZ_FLIP -; repeat some decompressed data w/ flipped bit order -.flip - dec c - jr nz, .flipnext - dec b - jp z, .cleanup - -.flipnext - ld a, [hli] - push bc - ld bc, $0008 - -.fliploop - rra - rl b - dec c - jr nz, .fliploop - ld a, b - pop bc - ld [de], a - inc de - jr .flip - - -; c0 ; LZ_REVERSE -; repeat some decompressed data in reverse -.reverse - dec c - jr nz, .reversenext - - dec b - jp z, .cleanup - -.reversenext - ld a, [hld] - ld [de], a - inc de - jr .reverse - - -.cleanup -; get type of repeat we just used - pop hl -; was it relative or absolute? - bit 7, [hl] - jr nz, .next - -; skip two bytes for absolute - inc hl -; skip one byte for relative -.next - inc hl - jp .loop -; c2f - diff --git a/engine/delay.asm b/engine/delay.asm deleted file mode 100644 index 4e8b2147c..000000000 --- a/engine/delay.asm +++ /dev/null @@ -1,23 +0,0 @@ -DelayFrame: ; 45a -; Wait for one frame - ld a, 1 - ld [VBlankOccurred], a - -; Wait for the next VBlank, halting to conserve battery -.halt - halt ; rgbasm adds a nop after this instruction by default - ld a, [VBlankOccurred] - and a - jr nz, .halt - ret -; 468 - - -DelayFrames: ; 468 -; Wait c frames - call DelayFrame - dec c - jr nz, DelayFrames - ret -; 46f - diff --git a/engine/fade.asm b/engine/fade.asm deleted file mode 100644 index d67211e29..000000000 --- a/engine/fade.asm +++ /dev/null @@ -1,134 +0,0 @@ -; Functions to fade the screen in and out. - - -Function48c: ; 48c - ld a, [TimeOfDayPal] - ld b, a - ld hl, IncGradGBPalTable_11 - ld a, l - sub b - ld l, a - jr nc, .asm_499 - dec h - -.asm_499 - ld a, [hli] - ld [rBGP], a - ld a, [hli] - ld [rOBP0], a - ld a, [hli] - ld [rOBP1], a - ret -; 4a3 - - -Function4a3: ; 4a3 - ld a, [hCGB] - and a - jr z, .asm_4af - ld hl, IncGradGBPalTable_00 - ld b, 4 - jr FadeOut - -.asm_4af - ld hl, IncGradGBPalTable_08 - ld b, 4 - jr FadeOut -; 4b6 - -Function4b6: ; 4b6 - ld a, [hCGB] - and a - jr z, .asm_4c2 - ld hl, IncGradGBPalTable_05 - ld b, 3 - jr FadeOut - -.asm_4c2 - ld hl, IncGradGBPalTable_13 - ld b, 3 -; 4c7 - -FadeOut: ; 4c7 - push de - ld a, [hli] - call DmgToCgbBGPals - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - call DmgToCgbObjPals - ld c, 8 - call DelayFrames - pop de - dec b - jr nz, FadeOut - ret -; 4dd - -Function4dd: ; 4dd - ld a, [hCGB] - and a - jr z, .asm_4e9 - ld hl, IncGradGBPalTable_04 - 1 - ld b, 4 - jr FadeIn - -.asm_4e9 - ld hl, IncGradGBPalTable_12 - 1 - ld b, 4 - jr FadeIn -; 4f0 - -Function4f0: ; 4f0 - ld a, [hCGB] - and a - jr z, .asm_4fc - ld hl, IncGradGBPalTable_07 - 1 - ld b, 3 - jr FadeIn - -.asm_4fc - ld hl, IncGradGBPalTable_15 - 1 - ld b, 3 - ; fallthrough -; 501 - -FadeIn: ; 501 - push de - ld a, [hld] - ld d, a - ld a, [hld] - ld e, a - call DmgToCgbObjPals - ld a, [hld] - call DmgToCgbBGPals - ld c, 8 - call DelayFrames - pop de - dec b - jr nz, FadeIn - ret -; 517 - - -; 517 -IncGradGBPalTable_00: db %11111111, %11111111, %11111111 -IncGradGBPalTable_01: db %11111110, %11111110, %11111110 -IncGradGBPalTable_02: db %11111001, %11111001, %11111001 -IncGradGBPalTable_03: db %11100100, %11100100, %11100100 -IncGradGBPalTable_04: db %11100100, %11100100, %11100100 -IncGradGBPalTable_05: db %10010000, %10010000, %10010000 -IncGradGBPalTable_06: db %01000000, %01000000, %01000000 -IncGradGBPalTable_07: db %00000000, %00000000, %00000000 -; bgp obp1 obp2 -IncGradGBPalTable_08: db %11111111, %11111111, %11111111 -IncGradGBPalTable_09: db %11111110, %11111110, %11111000 -IncGradGBPalTable_10: db %11111001, %11100100, %11100100 -IncGradGBPalTable_11: db %11100100, %11010000, %11100000 -IncGradGBPalTable_12: db %11100100, %11010000, %11100000 -IncGradGBPalTable_13: db %10010000, %10000000, %10010000 -IncGradGBPalTable_14: db %01000000, %01000000, %01000000 -IncGradGBPalTable_15: db %00000000, %00000000, %00000000 -; 547 - diff --git a/engine/farcall.asm b/engine/farcall.asm deleted file mode 100644 index bdee3bf38..000000000 --- a/engine/farcall.asm +++ /dev/null @@ -1,55 +0,0 @@ -FarCall_de: ; 2d54 -; Call a:de. -; Preserves other registers. - - ld [hBuffer], a - ld a, [hROMBank] - push af - ld a, [hBuffer] - rst Bankswitch - call .de - jr ReturnFarCall - -.de - push de - ret -; 2d63 - - -FarCall_hl: ; 2d63 -; Call a:hl. -; Preserves other registers. - - ld [hBuffer], a - ld a, [hROMBank] - push af - ld a, [hBuffer] - rst Bankswitch - call Function2d82 -; 2d6e - -ReturnFarCall: ; 2d6e -; We want to retain the contents of f. -; To do this, we can pop to bc instead of af. - - ld a, b - ld [$cfb9], a - ld a, c - ld [$cfba], a - -; Restore the working bank. - pop bc - ld a, b - rst Bankswitch - - ld a, [$cfb9] - ld b, a - ld a, [$cfba] - ld c, a - ret -; 2d82 - -Function2d82: ; 2d82 - jp [hl] -; 2d83 - diff --git a/engine/game_time.asm b/engine/game_time.asm deleted file mode 100644 index ee52488f4..000000000 --- a/engine/game_time.asm +++ /dev/null @@ -1,132 +0,0 @@ -ResetGameTime: ; 208a - xor a - ld [GameTimeCap], a - ld [GameTimeHours], a - ld [GameTimeHours + 1], a - ld [GameTimeMinutes], a - ld [GameTimeSeconds], a - ld [GameTimeFrames], a - ret -; 209e - - -GameTimer: ; 209e - - nop - - ld a, [rSVBK] - push af - ld a, 1 - ld [rSVBK], a - - call UpdateGameTimer - - pop af - ld [rSVBK], a - ret -; 20ad - - -UpdateGameTimer: ; 20ad -; Increment the game timer by one frame. -; The game timer is capped at 999:59:59.00. - - -; Don't update if game logic is paused. - ld a, [$c2cd] - and a - ret nz - -; Is the timer paused? - ld hl, GameTimerPause - bit 0, [hl] - ret z - -; Is the timer already capped? - ld hl, GameTimeCap - bit 0, [hl] - ret nz - - -; +1 frame - ld hl, GameTimeFrames - ld a, [hl] - inc a - - cp 60 ; frames/second - jr nc, .second - - ld [hl], a - ret - - -.second - xor a - ld [hl], a - -; +1 second - ld hl, GameTimeSeconds - ld a, [hl] - inc a - - cp 60 ; seconds/minute - jr nc, .minute - - ld [hl], a - ret - - -.minute - xor a - ld [hl], a - -; +1 minute - ld hl, GameTimeMinutes - ld a, [hl] - inc a - - cp 60 ; minutes/hour - jr nc, .hour - - ld [hl], a - ret - - -.hour - xor a - ld [hl], a - -; +1 hour - ld a, [GameTimeHours] - ld h, a - ld a, [GameTimeHours + 1] - ld l, a - inc hl - - -; Cap the timer after 1000 hours. - ld a, h - cp 1000 / $100 - jr c, .ok - - ld a, l - cp 1000 % $100 - jr c, .ok - - ld hl, GameTimeCap - set 0, [hl] - - ld a, 59 ; 999:59:59.00 - ld [GameTimeMinutes], a - ld [GameTimeSeconds], a - ret - - -.ok - ld a, h - ld [GameTimeHours], a - ld a, l - ld [GameTimeHours + 1], a - ret -; 210f - diff --git a/engine/init.asm b/engine/init.asm deleted file mode 100644 index 3104c416d..000000000 --- a/engine/init.asm +++ /dev/null @@ -1,225 +0,0 @@ -Reset: ; 150 - di - call CleanSoundRestart - xor a - ld [$ffde], a - call ClearPalettes - xor a - ld [rIF], a - ld a, 1 ; VBlank int - ld [rIE], a - ei - - ld hl, $cfbe - set 7, [hl] - - ld c, 32 - call DelayFrames - - jr Init -; 16e - - -_Start: ; 16e - cp $11 - jr z, .asm_175 - xor a - jr .asm_177 - -.asm_175 - ld a, $1 - -.asm_177 - ld [hCGB], a - ld a, $1 - ld [$ffea], a -; 17d - - -Init: ; 17d - - di - - xor a - ld [rIF], a - ld [rIE], a - ld [rRP], a - ld [rSCX], a - ld [rSCY], a - ld [rSB], a - ld [rSC], a - ld [rWX], a - ld [rWY], a - ld [rBGP], a - ld [rOBP0], a - ld [rOBP1], a - ld [rTMA], a - ld [rTAC], a - ld [$d000], a - - ld a, %100 ; Start timer at 4096Hz - ld [rTAC], a - -.wait - ld a, [rLY] - cp 145 - jr nz, .wait - - xor a - ld [rLCDC], a - -; Clear WRAM bank 0 - ld hl, $c000 - ld bc, $d000 - $c000 -.asm_1b1 - ld [hl], 0 - inc hl - dec bc - ld a, b - or c - jr nz, .asm_1b1 - - ld sp, Stack - -; Clear HRAM - ld a, [hCGB] - push af - ld a, [$ffea] - push af - xor a - ld hl, $ff80 - ld bc, $ffff - $ff80 - call ByteFill - pop af - ld [$ffea], a - pop af - ld [hCGB], a - - call ClearWRAM - ld a, 1 - ld [rSVBK], a - call ClearVRAM - call ClearSprites - call Function270 - - - ld a, BANK(LoadPushOAM) - rst Bankswitch - - call LoadPushOAM - - xor a - ld [$ffde], a - ld [hSCX], a - ld [hSCY], a - ld [rJOYP], a - - ld a, $8 ; HBlank int enable - ld [rSTAT], a - - ld a, $90 - ld [hWY], a - ld [rWY], a - - ld a, 7 - ld [hWX], a - ld [rWX], a - - ld a, %11100011 - ; LCD on - ; Win tilemap 1 - ; Win on - ; BG/Win tiledata 0 - ; BG Tilemap 0 - ; OBJ 8x8 - ; OBJ on - ; BG on - ld [rLCDC], a - - ld a, $ff - ld [$ffcb], a - - callba Function9890 - - ld a, $9c - ld [$ffd7], a - - xor a - ld [hBGMapAddress], a - - callba StartClock - - xor a - ld [MBC3LatchClock], a - ld [MBC3SRamEnable], a - - ld a, [hCGB] - and a - jr z, .asm_22b - call Function2ff7 -.asm_22b - - xor a - ld [rIF], a - ld a, %1111 ; VBlank, LCDStat, Timer, Serial interrupts - ld [rIE], a - ei - - call DelayFrame - - ld a, $30 - call Predef - - call CleanSoundRestart - xor a - ld [CurMusic], a - jp GameInit -; 245 - - -ClearVRAM: ; 245 -; Wipe VRAM banks 0 and 1 - - ld a, 1 - ld [rVBK], a - call .clear - - xor a - ld [rVBK], a -.clear - ld hl, VTiles0 - ld bc, $2000 - xor a - call ByteFill - ret -; 25a - -ClearWRAM: ; 25a -; Wipe swappable WRAM banks (1-7) - - ld a, 1 -.asm_25c - push af - ld [rSVBK], a - xor a - ld hl, $d000 - ld bc, $1000 - call ByteFill - pop af - inc a - cp 8 - jr nc, .asm_25c - ret -; 270 - -Function270: ; 270 - ld a, $0 - call GetSRAMBank - ld hl, $a000 - ld bc, $0020 - xor a - call ByteFill - call CloseSRAM - ret -; 283 - diff --git a/engine/joypad.asm b/engine/joypad.asm deleted file mode 100644 index 388c84e22..000000000 --- a/engine/joypad.asm +++ /dev/null @@ -1,491 +0,0 @@ -JoypadInt: ; 92e -; Replaced by Joypad, called from VBlank instead of the useless -; joypad interrupt. - -; This is a placeholder in case the interrupt is somehow enabled. - reti -; 92f - -ClearJoypadPublic: ; 92f - xor a -; Pressed this frame (delta) - ld [hJoyPressed], a -; Currently pressed - ld [hJoyDown], a - ret -; 935 - -Joypad: ; 935 -; Read the joypad register and translate it to something more -; workable for use in-game. There are 8 buttons, so we can use -; one byte to contain all player input. - -; Updates: - -; hJoypadReleased: released this frame (delta) -; hJoypadPressed: pressed this frame (delta) -; hJoypadDown: currently pressed -; hJoypadSum: pressed so far - -; Any of these three bits can be used to disable input. - ld a, [$cfbe] - and %11010000 - ret nz - -; If we're saving, input is disabled. - ld a, [$c2cd] - and a - ret nz - -; We can only get four inputs at a time. -; We take d-pad first for no particular reason. - ld a, D_PAD - ld [rJOYP], a -; Read twice to give the request time to take. - ld a, [rJOYP] - ld a, [rJOYP] - -; The Joypad register output is in the lo nybble (inversed). -; We make the hi nybble of our new container d-pad input. - cpl - and $f - swap a - -; We'll keep this in b for now. - ld b, a - -; Buttons make 8 total inputs (A, B, Select, Start). -; We can fit this into one byte. - ld a, BUTTONS - ld [rJOYP], a -; Wait for input to stabilize. - ld a, [rJOYP] - ld a, [rJOYP] - ld a, [rJOYP] - ld a, [rJOYP] - ld a, [rJOYP] - ld a, [rJOYP] -; Buttons take the lo nybble. - cpl - and $f - or b - ld b, a - -; Reset the joypad register since we're done with it. - ld a, $30 - ld [rJOYP], a - -; To get the delta we xor the last frame's input with the new one. - ld a, [hJoypadDown] ; last frame - ld e, a - xor b - ld d, a -; Released this frame: - and e - ld [hJoypadReleased], a -; Pressed this frame: - ld a, d - and b - ld [hJoypadPressed], a - -; Add any new presses to the list of collective presses: - ld c, a - ld a, [hJoypadSum] - or c - ld [hJoypadSum], a - -; Currently pressed: - ld a, b - ld [hJoypadDown], a - -; Now that we have the input, we can do stuff with it. - -; For example, soft reset: - and BUTTON_A | BUTTON_B | SELECT | START - cp BUTTON_A | BUTTON_B | SELECT | START - jp z, Reset - - ret -; 984 - - -GetJoypadPublic: ; 984 -; Update mirror joypad input from hJoypadDown (real input) - -; hJoyReleased: released this frame (delta) -; hJoyPressed: pressed this frame (delta) -; hJoyDown: currently pressed - -; bit 0 A -; 1 B -; 2 SELECT -; 3 START -; 4 RIGHT -; 5 LEFT -; 6 UP -; 7 DOWN - - push af - push hl - push de - push bc - -; The player input can be automated using an input stream. -; See more below. - ld a, [InputType] - cp a, AUTO_INPUT - jr z, .auto - -; To get deltas, take this and last frame's input. - ld a, [hJoypadDown] ; real input - ld b, a - ld a, [hJoyDown] ; last frame mirror - ld e, a - -; Released this frame: - xor b - ld d, a - and e - ld [hJoyReleased], a - -; Pressed this frame: - ld a, d - and b - ld [hJoyPressed], a - -; It looks like the collective presses got commented out here. - ld c, a - -; Currently pressed: - ld a, b - ld [hJoyDown], a ; frame input - -.quit - pop bc - pop de - pop hl - pop af - ret - -.auto -; Use a predetermined input stream (used in the catching tutorial). - -; Stream format: [input][duration] -; A value of $ff will immediately end the stream. - -; Read from the input stream. - ld a, [hROMBank] - push af - ld a, [AutoInputBank] - rst Bankswitch - - ld hl, AutoInputAddress - ld a, [hli] - ld h, [hl] - ld l, a - -; We only update when the input duration has expired. - ld a, [AutoInputLength] - and a - jr z, .updateauto - -; Until then, don't change anything. - dec a - ld [AutoInputLength], a - pop af - rst Bankswitch - jr .quit - - -.updateauto -; An input of $ff will end the stream. - ld a, [hli] - cp a, $ff - jr z, .stopauto - ld b, a - -; A duration of $ff will end the stream indefinitely. - ld a, [hli] - ld [AutoInputLength], a - cp a, $ff - jr nz, .next - -; The current input is overwritten. - dec hl - dec hl - ld b, NO_INPUT - jr .finishauto - -.next -; On to the next input... - ld a, l - ld [AutoInputAddress], a - ld a, h - ld [AutoInputAddress+1], a - jr .finishauto - -.stopauto - call StopAutoInput - ld b, NO_INPUT - -.finishauto - pop af - rst Bankswitch - ld a, b - ld [hJoyPressed], a ; pressed - ld [hJoyDown], a ; input - jr .quit -; 9ee - - -StartAutoInput: ; 9ee -; Start reading automated input stream at a:hl. - - ld [AutoInputBank], a - ld a, l - ld [AutoInputAddress], a - ld a, h - ld [AutoInputAddress+1], a -; Start reading the stream immediately. - xor a - ld [AutoInputLength], a -; Reset input mirrors. - xor a - ld [hJoyPressed], a ; pressed this frame - ld [hJoyReleased], a ; released this frame - ld [hJoyDown], a ; currently pressed - - ld a, AUTO_INPUT - ld [InputType], a - ret -; a0a - - -StopAutoInput: ; a0a -; Clear variables related to automated input. - xor a - ld [AutoInputBank], a - ld [AutoInputAddress], a - ld [AutoInputAddress+1], a - ld [AutoInputLength], a -; Back to normal input. - ld [InputType], a - ret -; a1b - - -Functiona1b: ; a1b - - call DelayFrame - - push bc - call Functiona57 - pop bc - - ld a, [hJoyDown] - cp D_UP | SELECT | BUTTON_B - jr z, .asm_a34 - - ld a, [$ffa9] - and START | BUTTON_A - jr nz, .asm_a34 - - dec c - jr nz, Functiona1b - - and a - ret - -.asm_a34 - scf - ret -; a36 - - -Functiona36: ; a36 - call DelayFrame - call GetJoypadPublic - ld a, [hJoyPressed] - and BUTTON_A | BUTTON_B - ret nz - call RTC - jr Functiona36 -; a46 - -Functiona46: ; a46 - ld a, [hOAMUpdate] - push af - ld a, 1 - ld [hOAMUpdate], a - call WaitBGMap - call Functiona36 - pop af - ld [hOAMUpdate], a - ret -; a57 - -Functiona57: ; a57 - call GetJoypadPublic - ld a, [$ffaa] - and a - ld a, [hJoyPressed] - jr z, .asm_a63 - ld a, [hJoyDown] -.asm_a63 - ld [$ffa9], a - ld a, [hJoyPressed] - and a - jr z, .asm_a70 - ld a, 15 - ld [TextDelayFrames], a - ret - -.asm_a70 - ld a, [TextDelayFrames] - and a - jr z, .asm_a7a - xor a - ld [$ffa9], a - ret - -.asm_a7a - ld a, 5 - ld [TextDelayFrames], a - ret -; a80 - -Functiona80: ; a80 - ld a, [$ffaf] - push af - ld a, [$ffb0] - push af - xor a - ld [$ffaf], a - ld a, $6 - ld [$ffb0], a -.asm_a8d - push hl - ld hl, $c606 - call Functionb06 - pop hl - call Functiona57 - ld a, [$ffa9] - and $3 - jr z, .asm_a8d - pop af - ld [$ffb0], a - pop af - ld [$ffaf], a - ret -; aa5 - -Functionaa5: ; aa5 - call Functiona57 - ld a, [$ffa9] - and BUTTON_A | BUTTON_B - jr z, Functionaa5 - ret -; aaf - -Functionaaf: ; aaf - ld a, [InLinkBattle] - and a - jr nz, .asm_ac1 - call Functionac6 - push de - ld de, SFX_READ_TEXT_2 - call StartSFX - pop de - ret - -.asm_ac1 - ld c, 65 - jp DelayFrames -; ac6 - -Functionac6: ; ac6 - ld a, [hOAMUpdate] - push af - ld a, $1 - ld [hOAMUpdate], a - ld a, [InputType] - or a - jr z, .asm_ad9 - callba Function1de28a -.asm_ad9 - call Functionaf5 - call Functiona57 - ld a, [hJoyPressed] - and $3 - jr nz, .asm_af1 - call RTC - ld a, $1 - ld [hBGMapMode], a - call DelayFrame - jr .asm_ad9 - -.asm_af1 - pop af - ld [hOAMUpdate], a - ret -; af5 - -Functionaf5: ; af5 - ld a, [$ff9b] - and $10 - jr z, .asm_aff - ld a, $ee - jr .asm_b02 - -.asm_aff - ld a, [$c605] - -.asm_b02 - ld [$c606], a - ret -; b06 - -Functionb06: ; b06 - push bc - ld a, [hl] - ld b, a - ld a, $ee - cp b - pop bc - jr nz, .asm_b27 - ld a, [$ffaf] - dec a - ld [$ffaf], a - ret nz - ld a, [$ffb0] - dec a - ld [$ffb0], a - ret nz - ld a, $7a - ld [hl], a - ld a, $ff - ld [$ffaf], a - ld a, $6 - ld [$ffb0], a - ret - -.asm_b27 - ld a, [$ffaf] - and a - ret z - dec a - ld [$ffaf], a - ret nz - dec a - ld [$ffaf], a - ld a, [$ffb0] - dec a - ld [$ffb0], a - ret nz - ld a, $6 - ld [$ffb0], a - ld a, $ee - ld [hl], a - ret -; b40 - diff --git a/engine/lcd.asm b/engine/lcd.asm deleted file mode 100644 index 9c86eaa5c..000000000 --- a/engine/lcd.asm +++ /dev/null @@ -1,81 +0,0 @@ -; LCD handling - - -Function547: ; 547 - ld a, [hLCDStatCustom] - cp rSCX & $ff - ret nz - ld c, a - ld a, [LYOverrides] - ld [$ff00+c], a - ret -; 552 - - -LCD: ; 552 - push af - ld a, [hLCDStatCustom] - and a - jr z, .done - -; At this point it's assumed we're in WRAM bank 5! - push bc - ld a, [rLY] - ld c, a - ld b, LYOverrides >> 8 - ld a, [bc] - ld b, a - ld a, [hLCDStatCustom] - ld c, a - ld a, b - ld [$ff00+c], a - pop bc - -.done - pop af - reti -; 568 - - -DisableLCD: ; 568 -; Turn the LCD off - -; Don't need to do anything if the LCD is already off - ld a, [rLCDC] - bit 7, a ; lcd enable - ret z - - xor a - ld [rIF], a - ld a, [rIE] - ld b, a - -; Disable VBlank - res 0, a ; vblank - ld [rIE], a - -.wait -; Wait until VBlank would normally happen - ld a, [rLY] - cp 145 - jr nz, .wait - - ld a, [rLCDC] - and %01111111 ; lcd enable off - ld [rLCDC], a - - xor a - ld [rIF], a - ld a, b - ld [rIE], a - ret -; 58a - - -EnableLCD: ; 58a - ld a, [rLCDC] - set 7, a ; lcd enable - ld [rLCDC], a - ret -; 591 - diff --git a/engine/map_objects.asm b/engine/map_objects.asm deleted file mode 100644 index 3ebc1b597..000000000 --- a/engine/map_objects.asm +++ /dev/null @@ -1,683 +0,0 @@ -; Functions handling map objects. - - -GetSpritePalette: ; 17ff - push hl - push de - push bc - ld c, a - callba _GetSpritePalette - ld a, c - pop bc - pop de - pop hl - ret -; 180e - - -Function180e: ; 180e - push hl - push bc - ld hl, $d156 - ld c, $1f - ld b, a - ld a, [hConnectionStripLength] - cp $0 - jr z, .asm_182b - ld a, b -.asm_181d - cp [hl] - jr z, .asm_1830 - inc hl - inc hl - dec c - jr nz, .asm_181d - ld a, [$d155] - scf - jr .asm_1833 - -.asm_182b - ld a, [$d155] - jr .asm_1833 - -.asm_1830 - inc hl - xor a - ld a, [hl] - -.asm_1833 - pop bc - pop hl - ret -; 1836 - -Function1836: ; 1836 - push de - push hl - - ld b, a - ld a, [hROMBank] - push af - ld a, BANK(Function142a7) - rst Bankswitch - - ld a, b - call Function142a7 - ld c, a - - pop de - ld a, d - rst Bankswitch - - pop hl - pop de - ret -; 184a - - - -Function184a: ; 184a - ld a, [StandingTile] - call GetTileCollision - ld b, a - ret -; 1852 - -Function1852: ; 1852 - ld a, [StandingTile] - call GetTileCollision - sub 1 - ret z - and a - ret -; 185d - - -GetTileCollision: ; 185d -; Get the collision type of tile a. - - push de - push hl - - ld hl, TileCollisionTable - ld e, a - ld d, 0 - add hl, de - - ld a, [hROMBank] - push af - ld a, BANK(TileCollisionTable) - rst Bankswitch - ld e, [hl] - pop af - rst Bankswitch - - ld a, e - and $f ; lo nybble only - - pop hl - pop de - ret -; 1875 - - -Function1875: ; 1875 - ld d, a - and $f0 - cp $10 - jr z, .asm_1882 - cp $20 - jr z, .asm_1888 - scf - ret - -.asm_1882 - ld a, d - and 7 - ret z - scf - ret - -.asm_1888 - ld a, d - and 7 - ret z - scf - ret -; 188e - -Function188e: ; 188e - cp $14 - ret z - cp $1c - ret -; 1894 - -CheckCutTreeTile: ; 1894 - cp $12 - ret z - cp $1a - ret -; 189a - -CheckHeadbuttTreeTile: ; 189a - cp $15 - ret z - cp $1d - ret -; 18a0 - -CheckCounterTile: ; 18a0 - cp $90 - ret z - cp $98 - ret -; 18a6 - -CheckPitTile: ; 18a6 - cp $60 - ret z - cp $68 - ret -; 18ac - -CheckIceTile: ; 18ac - cp $23 - ret z - cp $2b - ret z - scf - ret -; 18b4 - -CheckWhirlpoolTile: ; 18b4 - nop - cp $24 - ret z - cp $2c - ret z - scf - ret -; 18bd - -CheckWaterfallTile: ; 18bd - cp $33 - ret z - cp $3b - ret -; 18c3 - -CheckStandingOnEntrance: ; 18c3 - ld a, [StandingTile] - cp $71 ; door - ret z - cp $79 - ret z - cp $7a ; stairs - ret z - cp $7b ; cave - ret -; 18d2 - - -GetMapObject: ; 18d2 -; Return the location of map object a in bc. - ld hl, MapObjects - ld bc, $10 - call AddNTimes - ld b, h - ld c, l - ret -; 18de - - -Function18de: ; 18de - ld [hConnectionStripLength], a - call GetMapObject - ld hl, $0000 - add hl, bc - ld a, [hl] - cp $ff - jr z, .asm_18f3 - ld [hConnectedMapWidth], a - call Function1ae5 - and a - ret - -.asm_18f3 - scf - ret -; 18f5 - -Function18f5: ; 18f5 - ld hl, $0006 - add hl, bc - ld a, [hl] - cp $ff - jr nz, .asm_1921 - ld hl, $0007 - add hl, bc - ld a, [hl] - cp $ff - jr z, .asm_191c - ld hl, .data_191e - ld a, [TimeOfDay] - add l - ld l, a - jr nc, .asm_1912 - inc h - -.asm_1912 - ld a, [hl] - ld hl, $0007 - add hl, bc - and [hl] - jr nz, .asm_191c - scf - ret - -.asm_191c - and a - ret - -.data_191e - db $1 - db $2 - db $4 - -.asm_1921 - ld hl, $0006 - add hl, bc - ld d, [hl] - ld hl, $0007 - add hl, bc - ld e, [hl] - ld hl, hHours - ld a, d - cp e - jr z, .asm_1949 - jr c, .asm_193f - ld a, [hl] - cp d - jr nc, .asm_1949 - cp e - jr c, .asm_1949 - jr z, .asm_1949 - jr .asm_194b - -.asm_193f - ld a, e - cp [hl] - jr c, .asm_194b - ld a, [hl] - cp d - jr nc, .asm_1949 - jr .asm_194b - -.asm_1949 - and a - ret - -.asm_194b - scf - ret -; 194d - -Function194d: ; 194d - ld [hConnectionStripLength], a - call GetMapObject - call $40e7 - ret -; 1956 - - - -Function1956: ; 1956 - ld [hConnectionStripLength], a - call Function271e - ld a, [hConnectionStripLength] - call GetMapObject - ld a, $2 - ld hl, $40e7 - rst FarCall - ret -; 1967 - -Function1967: ; 1967 - ld [hConnectionStripLength], a - call GetMapObject - ld hl, $0000 - add hl, bc - ld a, [hl] - cp $ff - ret z - ld [hl], $ff - push af - call Function1985 - pop af - call Function1ae5 - callba Function4357 - ret -; 1985 - -Function1985: ; 1985 - ld hl, $d4cd - cp [hl] - jr z, .asm_1990 - ld hl, $d4ce - cp [hl] - ret nz - -.asm_1990 - callba Function581f - ld a, $ff - ld [$d4cd], a - ld [$d4ce], a - ret -; 199f - -Function199f: ; 199f - call Function1967 - call Function2712 - ret -; 19a6 - -Function19a6: ; 19a6 - push hl - call GetMapObject - ld d, b - ld e, c - ld a, $ff - ld [de], a - inc de - pop hl - ld bc, $000f - call CopyBytes - ret -; 19b8 - -Function19b8: ; 19b8 - call GetMapObject - ld hl, $0000 - add hl, bc - ld a, [hl] - push af - ld [hl], $ff - inc hl - ld bc, $000f - xor a - call ByteFill - pop af - cp $ff - ret z - cp $d - ret nc - ld b, a - ld a, [$d4cd] - cp b - jr nz, .asm_19de - ld a, $ff - ld [$d4cd], a - -.asm_19de - ld a, b - call Function1ae5 - callba Function4357 - ret -; 19e9 - - - -Function19e9: ; 19e9 - ld [$c2e2], a - ld a, [hROMBank] - ld [$c2e3], a - ld a, l - ld [$c2e4], a - ld a, h - ld [$c2e5], a - ld a, [$c2e2] - call Function18de - ret c - ld hl, $0003 - add hl, bc - ld [hl], $14 - ld hl, $0009 - add hl, bc - ld [hl], $0 - ld hl, VramState - set 7, [hl] - and a - ret -; 1a13 - - - -Function1a13: ; 1a13 - push bc - push de - ld hl, $d4d6 - ld de, $0028 - ld c, $d -.asm_1a1d - ld a, [hl] - and a - jr z, .asm_1a28 - add hl, de - dec c - jr nz, .asm_1a1d - xor a - jr .asm_1a2c - -.asm_1a28 - ld a, $d - sub c - scf - -.asm_1a2c - pop de - pop bc - ret -; 1a2f - - - -Function1a2f: ; 1a2f - ld hl, $0003 - add hl, bc - ld a, [hl] - cp $25 - jr c, .asm_1a39 - xor a - -.asm_1a39 - ld hl, Data4273 - ld e, a - ld d, 0 - add hl, de - add hl, de - add hl, de - add hl, de - add hl, de - add hl, de - ld a, [hl] - ret -; 1a47 - -Function1a47: ; 1a47 - push bc - push de - ld e, a - ld d, 0 - ld hl, Data4273 + 1 - add hl, de - add hl, de - add hl, de - add hl, de - add hl, de - add hl, de - ld a, BANK(Data4273) - call GetFarByte - add a - add a - and $c - pop de - pop bc - ret -; 1a61 - - -Function1a61: ; 1a61 - ld l, a - ld a, [hROMBank] - push af - ld a, BANK(Data4273) - rst Bankswitch - ld a, l - push bc - - call Function1a71 - - pop bc - pop af - rst Bankswitch - - ret -; 1a71 - -Function1a71: ; 1a71 - ld hl, $0003 - add hl, de - ld [hl], a - push de - ld e, a - ld d, 0 - ld hl, Data4273 + 1 - add hl, de - add hl, de - add hl, de - add hl, de - add hl, de - add hl, de - ld b, h - ld c, l - pop de - ld a, [bc] - inc bc - rlca - rlca - and $c - ld hl, $0008 - add hl, de - ld [hl], a - ld a, [bc] - inc bc - ld hl, $000b - add hl, de - ld [hl], a - ld a, [bc] - inc bc - ld hl, $0004 - add hl, de - ld [hl], a - ld a, [bc] - inc bc - ld hl, $0005 - add hl, de - ld [hl], a - ld a, [bc] - inc bc - ld hl, $0006 - add hl, de - ld [hl], a - ret -; 1aae - -Function1aae: ; 1aae - ld a, [hROMBank] - push af - ld a, [hli] - rst Bankswitch - - ld a, [hli] - ld d, [hl] - ld hl, $001b - add hl, bc - add [hl] - ld e, a - ld a, d - adc $0 - ld d, a - inc [hl] - ld a, [de] - ld h, a - pop af - rst Bankswitch - - ld a, h - ret -; 1ac6 - -Function1ac6: ; 1ac6 - ld hl, VramState - set 0, [hl] - ret -; 1acc - -Function1acc: ; 1acc - ld hl, VramState - res 0, [hl] - ret -; 1ad2 - - -Function1ad2: ; 1ad2 - ld a, [VramState] - bit 0, a - ret z - callba Function55e0 - callba Function5920 - ret -; 1ae5 - - -Function1ae5: ; 1ae5 - ld bc, $0028 - ld hl, $d4d6 - call AddNTimes - ld b, h - ld c, l - ret -; 1af1 - -Function1af1: ; 1af1 - ld hl, $0000 - add hl, bc - ld a, [hl] - and a - ret -; 1af8 - -Function1af8: ; 1af8 - push af - ld hl, $0008 - add hl, bc - ld a, [hl] - and $f3 - ld e, a - pop af - and $c - or e - ld [hl], a - ret -; 1b07 - - -GetSpriteDirection: ; 1b07 - ld hl, $0008 - add hl, bc - ld a, [hl] - and $c - ret -; 1b0f - diff --git a/engine/menu.asm b/engine/menu.asm deleted file mode 100644 index c761a927c..000000000 --- a/engine/menu.asm +++ /dev/null @@ -1,603 +0,0 @@ -; Functions used in displaying and handling menus. - - -LoadMenuDataHeader: ; 0x1d35 - call Function1d3c - call Function1c00 - ret - -Function1d3c: ; 0x1d3c - ld de, $cf81 - ld bc, $0010 - call CopyBytes - ld a, [hROMBank] - ld [$cf8a], a - ret -; 0x1d4b - -Function1d4b: ; 1d4b - ld [$cf88], a - ret -; 1d4f - - -Function1d4f: ; 1d4f - push hl - call Function1d58 - pop hl - jp PrintText -; 1d57 - -Function1d57: ; 1d57 - ret -; 1d58 - -Function1d58: ; 1d58 - ld hl, MenuDataHeader_0x1d5f - call LoadMenuDataHeader - ret -; 1d5f - -MenuDataHeader_0x1d5f: ; 1d5f - db $40 ; tile backup - db 12, 0 ; start coords - db 17, 19 ; end coords - dw VTiles0 - db 0 ; default option -; 1d67 - -Function1d67: ; 1d67 - call Function1d4f - call Function1c17 - ret -; 1d6e - -Function1d6e: ; 1d6e - ld hl, MenuDataHeader_0x1d75 - call LoadMenuDataHeader - ret -; 1d75 - -MenuDataHeader_0x1d75: ; 1d75 - db $40 ; tile backup - db 0, 0 ; start coords - db 17, 19 ; end coords - dw $0000 - db 1 ; default option -; 1d7d - -Function1d7d: ; 1d7d - call Function1c07 - ret -; 1d81 - -Function1d81: ; 0x1d81 - xor a - ld [hBGMapMode], a - call Function1cbb - call Function1ad2 - call Function1c89 - call Function321c - call Function1c66 - ld a, [$cf91] - bit 7, a - jr z, .asm_1da7 ; 0x1d98 $d - call Function1c10 - call Function1bc9 - call Function1ff8 - bit 1, a - jr z, .asm_1da9 ; 0x1da5 $2 -.asm_1da7 - scf - ret -.asm_1da9 - and a - ret -; 0x1dab - -Function1dab: ; 1dab - call LoadMenuDataHeader - call Function1d81 - call Function1c17 - ld a, [$cfa9] - ret -; 1db8 - -Function1db8: ; 0x1db8 - push hl - push bc - push af - ld hl, $cf86 - ld a, [hli] - ld h, [hl] - ld l, a - inc hl - inc hl - pop af - call GetNthString - ld d, h - ld e, l - call CopyName1 - pop bc - pop hl - ret -; 0x1dcf - - -Function1dcf: ; 1dcf - ld bc, $0e07 - -Function1dd2: ; 1dd2 - jr Function1dd9 - -Function1dd4: ; 1dd4 - call LoadMenuDataHeader - jr Function1dfe - -Function1dd9: ; 1dd9 - push bc - ld hl, MenuDataHeader_0x1e1d - call Function1d3c - pop bc - ld a, b - cp $e - jr nz, .asm_1de9 - ld a, $e - ld b, a - -.asm_1de9 - ld a, b - ld [$cf83], a - add $5 - ld [$cf85], a - ld a, c - ld [$cf82], a - add $4 - ld [$cf84], a - call Function1c00 - -Function1dfe: ; 1dfe - call Function1d81 - push af - ld c, $f - call DelayFrames - call Function1c17 - pop af - jr c, .asm_1e16 - ld a, [$cfa9] - cp $2 - jr z, .asm_1e16 - and a - ret - -.asm_1e16 - ld a, $2 - ld [$cfa9], a - scf - ret -; 1e1d - -MenuDataHeader_0x1e1d: ; 1e1d - db $40 ; tile backup - db 5, 10 ; start coords - db 9, 15 ; end coords - dw MenuData2_0x1e25 - db 1 ; default option -; 1e25 - -MenuData2_0x1e25: ; 1e25 - db $c0 ; flags - db 2 - db "YES@" - db "NO@" -; 1e2e - -Function1e2e: ; 1e2e - call Function1e35 - call Function1c00 - ret -; 1e35 - -Function1e35: ; 1e35 - push de - call Function1d3c - pop de - ld a, [$cf83] - ld h, a - ld a, [$cf85] - sub h - ld h, a - ld a, d - ld [$cf83], a - add h - ld [$cf85], a - ld a, [$cf82] - ld l, a - ld a, [$cf84] - sub l - ld l, a - ld a, e - ld [$cf82], a - add l - ld [$cf84], a - ret -; 1e5d - -Function1e5d: ; 1e5d - call MenuFunc_1e7f - call MenuWriteText - call Function1eff - call Function1f23 - call Function1bdd - call Function1ff8 - ret -; 1e70 - -SetUpMenu: ; 1e70 - call MenuFunc_1e7f ; ??? - call MenuWriteText - call Function1eff ; set up selection pointer - ld hl, $cfa5 - set 7, [hl] - ret - -MenuFunc_1e7f: ; 0x1e7f - call Function1c66 - call Function1ebd - call Function1ea6 - call Function1cbb - ret - -MenuWriteText: ; 0x1e8c - xor a - ld [hBGMapMode], a - call Function1ebd ; sort out the text - call Function1eda ; actually write it - call Function2e31 - ld a, [hOAMUpdate] - push af - ld a, $1 - ld [hOAMUpdate], a - call Function321c - pop af - ld [hOAMUpdate], a - ret -; 0x1ea6 - -Function1ea6: ; 1ea6 - ld a, [$cf83] - ld c, a - ld a, [$cf85] - sub c - ld c, a - ld a, [$cf92] - add a - inc a - ld b, a - ld a, [$cf82] - add b - ld [$cf84], a - ret -; 1ebd - -Function1ebd: ; 1ebd - ld hl, $cf93 - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [$cf76] - and a - jr z, .asm_1ed3 - ld b, a - ld c, $ff -.asm_1ecc - ld a, [hli] - cp c - jr nz, .asm_1ecc - dec b - jr nz, .asm_1ecc - -.asm_1ed3 - ld d, h - ld e, l - ld a, [hl] - ld [$cf92], a - ret -; 1eda - -Function1eda: ; 1eda - call Function1cfd - ld bc, $002a - add hl, bc -.asm_1ee1 - inc de - ld a, [de] - cp $ff - ret z - ld [MenuSelection], a - push de - push hl - ld d, h - ld e, l - ld hl, $cf95 - call Function1efb - pop hl - ld de, $0028 - add hl, de - pop de - jr .asm_1ee1 -; 1efb - -Function1efb: ; 1efb - ld a, [hli] - ld h, [hl] - ld l, a - jp [hl] -; 1eff - -Function1eff: ; 1eff - call Function1c10 - ld hl, $cfa8 - ld a, [$cf91] - bit 3, a - jr z, .asm_1f0e - set 3, [hl] - -.asm_1f0e - ld a, [$cf91] - bit 2, a - jr z, .asm_1f19 - set 5, [hl] - set 4, [hl] - -.asm_1f19 - ret -; 1f1a - - -Function1f1a: ; 1f1a - call Function1bd3 - ld hl, $cfa8 - and [hl] - jr Function1f2a -; 1f23 - -Function1f23: ; 1f23 - xor a - ld [$cf73], a - call Function1bc9 -; 1f2a - -Function1f2a: ; 1f2a - bit 0, a - jr nz, .asm_1f52 - bit 1, a - jr nz, .asm_1f6d - bit 3, a - jr nz, .asm_1f6d - bit 4, a - jr nz, .asm_1f44 - bit 5, a - jr nz, .asm_1f4b - xor a - ld [$cf73], a - jr .asm_1f57 - -.asm_1f44 - ld a, $10 - ld [$cf73], a - jr .asm_1f57 - -.asm_1f4b - ld a, $20 - ld [$cf73], a - jr .asm_1f57 - -.asm_1f52 - ld a, $1 - ld [$cf73], a - -.asm_1f57 - call Function1ebd - ld a, [$cfa9] - ld l, a - ld h, $0 - add hl, de - ld a, [hl] - ld [MenuSelection], a - ld a, [$cfa9] - ld [$cf88], a - and a - ret - -.asm_1f6d - ld a, $2 - ld [$cf73], a - ld a, $ff - ld [MenuSelection], a - scf - ret -; 1f79 - -Function1f79: ; 1f79 - push de - ld hl, $cf97 - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [MenuSelection] - call GetNthString - ld d, h - ld e, l - pop hl - call PlaceString - ret -; 1f8d - -Function1f8d: ; 1f8d - push de - ld a, [MenuSelection] - call Function1fb1 - inc hl - inc hl - ld a, [hli] - ld d, [hl] - ld e, a - pop hl - call PlaceString - ret -; 1f9e - -Function1f9e: ; 1f9e - call Function1fb1 - inc hl - inc hl - ld a, [hli] - ld d, [hl] - ld e, a - ret -; 1fa7 - -Function1fa7: ; 1fa7 - ld a, [MenuSelection] - call Function1fb1 - ld a, [hli] - ld h, [hl] - ld l, a - jp [hl] -; 1fb1 - -Function1fb1: ; 1fb1 - ld e, a - ld d, $0 - ld hl, $cf97 - ld a, [hli] - ld h, [hl] - ld l, a - add hl, de - add hl, de - add hl, de - add hl, de - ret -; 1fbf - -Function1fbf: ; 1fbf - ld hl, $cf71 - call Function1ff0 - ld hl, $cf81 - call Function1ff0 - ld hl, $cf91 - call Function1ff0 - ld hl, $cfa1 - call Function1ff0 - ld a, [rSVBK] - push af - ld a, $7 - ld [rSVBK], a - xor a - ld hl, $dfff - ld [hld], a - ld [hld], a - ld a, l - ld [$cf71], a - ld a, h - ld [$cf72], a - pop af - ld [rSVBK], a - ret -; 1ff0 - -Function1ff0: ; 1ff0 - ld bc, $0010 - xor a - call ByteFill - ret -; 1ff8 - -Function1ff8: ; 1ff8 - push af - and $3 - jr z, .asm_2007 - ld hl, $cf81 - bit 3, [hl] - jr nz, .asm_2007 - call PlayClickSFX - -.asm_2007 - pop af - ret -; 2009 - - -PlayClickSFX: ; 2009 - push de - ld de, SFX_READ_TEXT_2 - call StartSFX - pop de - ret -; 0x2012 - -Function2012: ; 2012 - call Function1d4f - call Functiona46 - call Function1c07 - ret -; 201c - -Function201c: ; 201c - ld [hBuffer], a - ld a, [hROMBank] - push af - ld a, [hBuffer] - rst Bankswitch - - call PlaceString - pop af - rst Bankswitch - - ret -; 202a - -Function202a: ; 202a - ld a, [hROMBank] - ld [$cf94], a - ld a, $9 - ld hl, $400e - rst FarCall - ld a, [$cf88] - ret -; 2039 - -Function2039: ; 2039 - ld a, [hROMBank] - ld [$cf94], a - ld a, $9 - ld hl, $4022 - rst FarCall - ld a, [$cf88] - ret -; 2048 - -Function2048: ; 2048 - ld a, [hROMBank] - ld [$cf94], a - ld a, $9 - ld hl, $403c - rst FarCall - ld a, [$cf88] - ret -; 2057 - -Function2057: ; 2057 - ld a, [hROMBank] - push af - ld a, $21 - rst Bankswitch - - call $42db - pop af - rst Bankswitch - - ret -; 2063 - diff --git a/engine/palettes.asm b/engine/palettes.asm deleted file mode 100644 index accaa96b5..000000000 --- a/engine/palettes.asm +++ /dev/null @@ -1,347 +0,0 @@ -; Functions dealing with palettes. - - -UpdatePalsIfCGB: ; c2f -; update bgp data from BGPals -; update obp data from OBPals -; return carry if successful - -; check cgb - ld a, [hCGB] - and a - ret z - - -UpdateCGBPals: ; c33 -; return carry if successful -; any pals to update? - ld a, [hCGBPalUpdate] - and a - ret z - - -ForceUpdateCGBPals: ; c37 - - ld a, [rSVBK] - push af - ld a, 5 ; BANK(BGPals) - ld [rSVBK], a - - ld hl, BGPals ; 5:d080 - -; copy 8 pals to bgpd - ld a, %10000000 ; auto increment, index 0 - ld [rBGPI], a - ld c, rBGPD % $100 - ld b, 4 ; NUM_PALS / 2 -.bgp - rept $10 - ld a, [hli] - ld [$ff00+c], a - endr - - dec b - jr nz, .bgp - -; hl is now 5:d0c0 OBPals - -; copy 8 pals to obpd - ld a, %10000000 ; auto increment, index 0 - ld [rOBPI], a - ld c, rOBPD - rJOYP - ld b, 4 ; NUM_PALS / 2 -.obp - rept $10 - ld a, [hli] - ld [$ff00+c], a - endr - - dec b - jr nz, .obp - - pop af - ld [rSVBK], a - -; clear pal update queue - xor a - ld [hCGBPalUpdate], a - - scf - ret -; c9f - - -DmgToCgbBGPals: ; c9f -; exists to forego reinserting cgb-converted image data - -; input: a -> bgp - - ld [rBGP], a - push af - - ld a, [hCGB] - and a - jr z, .end - - push hl - push de - push bc - ld a, [rSVBK] - push af - - ld a, 5 - ld [rSVBK], a - -; copy & reorder bg pal buffer - ld hl, BGPals ; to - ld de, Unkn1Pals ; from -; order - ld a, [rBGP] - ld b, a -; all pals - ld c, 8 - call CopyPals -; request pal update - ld a, 1 - ld [hCGBPalUpdate], a - - pop af - ld [rSVBK], a - pop bc - pop de - pop hl -.end - pop af - ret -; ccb - - -DmgToCgbObjPals: ; ccb -; exists to forego reinserting cgb-converted image data - -; input: d -> obp1 -; e -> obp2 - - ld a, e - ld [rOBP0], a - ld a, d - ld [rOBP1], a - - ld a, [hCGB] - and a - ret z - - push hl - push de - push bc - ld a, [rSVBK] - push af - - ld a, 5 - ld [rSVBK], a - -; copy & reorder obj pal buffer - ld hl, OBPals ; to - ld de, Unkn2Pals ; from -; order - ld a, [rOBP0] - ld b, a -; all pals - ld c, 8 - call CopyPals -; request pal update - ld a, 1 - ld [hCGBPalUpdate], a - - pop af - ld [rSVBK], a - pop bc - pop de - pop hl - ret -; cf8 - - -Functioncf8: ; cf8 - ld [rOBP0], a - push af - ld a, [hCGB] - and a - jr z, .asm_d22 - push hl - push de - push bc - ld a, [rSVBK] - push af - ld a, $5 - ld [rSVBK], a - ld hl, $d0c0 - ld de, MartPointer - ld a, [rOBP0] - ld b, a - ld c, $1 - call CopyPals - ld a, $1 - ld [hCGBPalUpdate], a - pop af - ld [rSVBK], a - pop bc - pop de - pop hl - -.asm_d22 - pop af - ret -; d24 - -Functiond24: ; d24 - ld [rOBP1], a - push af - ld a, [hCGB] - and a - jr z, .asm_d4e - push hl - push de - push bc - ld a, [rSVBK] - push af - ld a, $5 - ld [rSVBK], a - ld hl, $d0c8 - ld de, $d048 - ld a, [rOBP1] - ld b, a - ld c, $1 - call CopyPals - ld a, $1 - ld [hCGBPalUpdate], a - pop af - ld [rSVBK], a - pop bc - pop de - pop hl - -.asm_d4e - pop af - ret -; d50 - - - -CopyPals: ; d50 -; copy c palettes in order b from de to hl - - push bc - ld c, 4 ; NUM_PAL_COLORS -.loop - push de - push hl - -; get pal color - ld a, b - and %11 ; color -; 2 bytes per color - add a - ld l, a - ld h, 0 - add hl, de - ld e, [hl] - inc hl - ld d, [hl] - -; dest - pop hl -; write color - ld [hl], e - inc hl - ld [hl], d - inc hl -; next pal color - srl b - srl b -; source - pop de -; done pal? - dec c - jr nz, .loop - -; de += 8 (next pal) - ld a, 8 ; NUM_PAL_COLORS * 2 ; bytes per pal - add e - jr nc, .ok - inc d -.ok - ld e, a - -; how many more pals? - pop bc - dec c - jr nz, CopyPals - ret -; d79 - - -Functiond79: ; d79 - ld a, [hCGB] - and a - ret z - ld a, 1 - ld [rVBK], a - ld hl, VTiles0 - ld bc, $2000 - xor a - call ByteFill - ld a, 0 - ld [rVBK], a - ret -; d90 - - -Functiond90: ; d90 - ret -; d91 - - -Functiond91: ; d91 - ld a, [hCGB] - and a - ret z - ld a, [rSVBK] - push af - ld a, 5 ; BANK(BGPals) - ld [rSVBK], a - ld hl, BGPals - ld bc, $40 + $10 - xor a - call ByteFill - pop af - ld [rSVBK], a - ld a, 1 - ld [hCGBPalUpdate], a - call DelayFrame - ret -; db1 - - -Functiondb1: ; db1 - ld a, [hROMBank] - push af - ld a, BANK(Function4c000) - rst Bankswitch - call Function4c000 - pop af - rst Bankswitch - ret -; dbd - -Functiondbd: ; dbd - ld a, [hROMBank] - push af - ld a, BANK(Function4c03f) - rst Bankswitch - call Function4c03f - pop af - rst Bankswitch - ret -; dc9 - diff --git a/engine/rtc.asm b/engine/rtc.asm deleted file mode 100644 index 91428d03b..000000000 --- a/engine/rtc.asm +++ /dev/null @@ -1,25 +0,0 @@ -RTC: ; 46f -; update time and time-sensitive palettes - -; rtc enabled? - ld a, [$c2ce] - cp 0 - ret z - - call UpdateTime - -; obj update on? - ld a, [VramState] - bit 0, a ; obj update - ret z - -TimeOfDayPals: ; 47e - callab _TimeOfDayPals - ret -; 485 - -UpdateTimePals: ; 485 - callab _UpdateTimePals - ret -; 48c - diff --git a/engine/serial.asm b/engine/serial.asm deleted file mode 100644 index fca9d82c3..000000000 --- a/engine/serial.asm +++ /dev/null @@ -1,408 +0,0 @@ -Serial: ; 6ef -; The serial interrupt. - - push af - push bc - push de - push hl - - ld a, [$ffc9] - and a - jr nz, .asm_71c - - ld a, [$c2d4] - bit 0, a - jr nz, .asm_721 - - ld a, [$ffcb] - inc a - jr z, .asm_726 - - ld a, [rSB] - ld [hSerialReceive], a - - ld a, [hSerialSend] - ld [rSB], a - - ld a, [$ffcb] - cp $2 - jr z, .asm_752 - - ld a, 0 << rSC_ON - ld [rSC], a - ld a, 1 << rSC_ON - ld [rSC], a - jr .asm_752 - -.asm_71c - call Function3e80 - jr .asm_75a - -.asm_721 - call Function2057 - jr .asm_75a - -.asm_726 - ld a, [rSB] - cp $1 - jr z, .asm_730 - cp $2 - jr nz, .asm_752 - -.asm_730 - ld [hSerialReceive], a - ld [$ffcb], a - cp $2 - jr z, .asm_74f - - xor a - ld [rSB], a - ld a, $3 - ld [rDIV], a - -.asm_73f - ld a, [rDIV] - bit 7, a - jr nz, .asm_73f - - ld a, 0 << rSC_ON - ld [rSC], a - ld a, 1 << rSC_ON - ld [rSC], a - jr .asm_752 - -.asm_74f - xor a - ld [rSB], a - -.asm_752 - ld a, $1 - ld [$ffca], a - ld a, $fe - ld [hSerialSend], a - -.asm_75a - pop hl - pop de - pop bc - pop af - reti -; 75f - -Function75f: ; 75f - ld a, $1 - ld [$ffcc], a -.asm_763 - ld a, [hl] - ld [hSerialSend], a - call Function78a - push bc - ld b, a - inc hl - ld a, $30 -.asm_76e - dec a - jr nz, .asm_76e - ld a, [$ffcc] - and a - ld a, b - pop bc - jr z, .asm_782 - dec hl - cp $fd - jr nz, .asm_763 - xor a - ld [$ffcc], a - jr .asm_763 - -.asm_782 - ld [de], a - inc de - dec bc - ld a, b - or c - jr nz, .asm_763 - ret -; 78a - -Function78a: ; 78a - xor a - ld [$ffca], a - ld a, [$ffcb] - cp $2 - jr nz, .asm_79b - ld a, $1 - ld [rSC], a - ld a, $81 - ld [rSC], a - -.asm_79b - ld a, [$ffca] - and a - jr nz, .asm_7e5 - ld a, [$ffcb] - cp $1 - jr nz, .asm_7c0 - call Function82b - jr z, .asm_7c0 - call .asm_825 - push hl - ld hl, $cf5c - inc [hl] - jr nz, .asm_7b7 - dec hl - inc [hl] - -.asm_7b7 - pop hl - call Function82b - jr nz, .asm_79b - jp Function833 - -.asm_7c0 - ld a, [rIE] - and $f - cp $8 - jr nz, .asm_79b - ld a, [$cf5d] - dec a - ld [$cf5d], a - jr nz, .asm_79b - ld a, [$cf5e] - dec a - ld [$cf5e], a - jr nz, .asm_79b - ld a, [$ffcb] - cp $1 - jr z, .asm_7e5 - ld a, $ff -.asm_7e2 - dec a - jr nz, .asm_7e2 - -.asm_7e5 - xor a - ld [$ffca], a - ld a, [rIE] - and $f - sub $8 - jr nz, .asm_7f8 - ld [$cf5d], a - ld a, $50 - ld [$cf5e], a - -.asm_7f8 - ld a, [hSerialReceive] - cp $fe - ret nz - call Function82b - jr z, .asm_813 - push hl - ld hl, $cf5c - ld a, [hl] - dec a - ld [hld], a - inc a - jr nz, .asm_80d - dec [hl] - -.asm_80d - pop hl - call Function82b - jr z, Function833 - -.asm_813 - ld a, [rIE] - and $f - cp $8 - ld a, $fe - ret z - ld a, [hl] - ld [hSerialSend], a - call DelayFrame - jp Function78a - -.asm_825 - ld a, $f -.asm_827 - dec a - jr nz, .asm_827 - ret -; 82b - -Function82b: ; 82b - push hl - ld hl, $cf5b - ld a, [hli] - or [hl] - pop hl - ret -; 833 - -Function833: ; 833 - dec a - ld [$cf5b], a - ld [$cf5c], a - ret -; 83b - -Function83b: ; 83b - ld hl, $cf56 - ld de, $cf51 - ld c, $2 - ld a, $1 - ld [$ffcc], a -.asm_847 - call DelayFrame - ld a, [hl] - ld [hSerialSend], a - call Function78a - ld b, a - inc hl - ld a, [$ffcc] - and a - ld a, $0 - ld [$ffcc], a - jr nz, .asm_847 - ld a, b - ld [de], a - inc de - dec c - jr nz, .asm_847 - ret -; 862 - -Function862: ; 862 - call Function309d - callab Function4000 - call Function87d - jp Function30b4 -; 871 - - -Function871: ; 871 - call Function309d - callab Function4000 - jp Function87d -; 87d - - - -Function87d: ; 87d - ld a, $ff - ld [$cf52], a -.asm_882 - call Function8c1 - call DelayFrame - call Function82b - jr z, .asm_89e - push hl - ld hl, $cf5c - dec [hl] - jr nz, .asm_89d - dec hl - dec [hl] - jr nz, .asm_89d - pop hl - xor a - jp Function833 - -.asm_89d - pop hl - -.asm_89e - ld a, [$cf52] - inc a - jr z, .asm_882 - ld b, $a -.asm_8a6 - call DelayFrame - call Function8c1 - dec b - jr nz, .asm_8a6 - ld b, $a -.asm_8b1 - call DelayFrame - call Function908 - dec b - jr nz, .asm_8b1 - ld a, [$cf52] - ld [$cf51], a - ret -; 8c1 - -Function8c1: ; 8c1 - push bc - ld b, $60 - ld a, [InLinkBattle] - cp $1 - jr z, .asm_8d7 - ld b, $60 - jr c, .asm_8d7 - cp $2 - ld b, $70 - jr z, .asm_8d7 - ld b, $80 - -.asm_8d7 - call Function8f3 - ld a, [$cf56] - add b - ld [hSerialSend], a - ld a, [$ffcb] - cp $2 - jr nz, .asm_8ee - ld a, $1 - ld [rSC], a - ld a, $81 - ld [rSC], a - -.asm_8ee - call Function8f3 - pop bc - ret -; 8f3 - -Function8f3: ; 8f3 - ld a, [hSerialReceive] - ld [$cf51], a - and $f0 - cp b - ret nz - xor a - ld [hSerialReceive], a - ld a, [$cf51] - and $f - ld [$cf52], a - ret -; 908 - -Function908: ; 908 - xor a - ld [hSerialSend], a - ld a, [$ffcb] - cp $2 - ret nz - ld a, $1 - ld [rSC], a - ld a, $81 - ld [rSC], a - ret -; 919 - -Function919: ; 919 - ld a, [InLinkBattle] - and a - ret nz - ld a, $2 - ld [rSB], a - xor a - ld [hSerialReceive], a - ld a, $0 - ld [rSC], a - ld a, $80 - ld [rSC], a - ret -; 92e - - diff --git a/engine/sine.asm b/engine/sine.asm deleted file mode 100644 index 09d06ca89..000000000 --- a/engine/sine.asm +++ /dev/null @@ -1,22 +0,0 @@ -Cosine: ; 1b0f -; Return d * cos(a) in hl - add $10 ; 90 degrees - -Sine: ; 1b11 -; Return d * sin(a) in hl -; a is a signed 6-bit value. - - ld e, a - - ld a, [hROMBank] - push af - ld a, BANK(_Sine) - rst Bankswitch - - call _Sine - - pop af - rst Bankswitch - ret -; 1b1e - diff --git a/engine/text.asm b/engine/text.asm deleted file mode 100644 index 4f39a95df..000000000 --- a/engine/text.asm +++ /dev/null @@ -1,1230 +0,0 @@ -ClearBox: ; fb6 -; Fill a c*b box at hl with blank tiles. - - ld a, " " -.y - push bc - push hl -.x - ld [hli], a - dec c - jr nz, .x - pop hl - ld bc, 20 ; screen width - add hl, bc - pop bc - dec b - jr nz, .y - ret -; fc8 - - -ClearTileMap: ; fc8 -; Fill TileMap with blank tiles. - - ld hl, TileMap - ld a, " " - ld bc, 360 ; screen dimensions 20*18 - call ByteFill - -; We aren't done if the LCD is on. - ld a, [rLCDC] - bit 7, a - ret z - jp WaitBGMap -; fdb - - -Functionfdb: ; fdb - ld a, $7 - ld hl, AttrMap - ld bc, $0168 - call ByteFill - jr ClearTileMap -; fe8 - - - -TextBox: ; fe8 -; Draw a text box width c height b at hl -; Dimensions do not include the border. - push bc - push hl - call TextBoxBorder - pop hl - pop bc - jr TextBoxPalette -; ff1 - - -TextBoxBorder: ; ff1 - -; Top - push hl - ld a, "┌" - ld [hli], a - inc a ; "─" - call NPlaceChar - inc a ; "┐" - ld [hl], a - -; Middle - pop hl - ld de, 20 ; screen width - add hl, de -.PlaceRow - push hl - ld a, "│" - ld [hli], a - ld a, " " - call NPlaceChar - ld [hl], "│" - pop hl - ld de, 20 ; screen width - add hl, de - dec b - jr nz, .PlaceRow - -; Bottom - ld a, "└" - ld [hli], a - ld a, "─" - call NPlaceChar - ld [hl], "┘" - - ret -; 101e - - -NPlaceChar: ; 101e -; Place char a c times - ld d,c -.loop - ld [hli],a - dec d - jr nz, .loop - ret -; 1024 - - -TextBoxPalette: ; 1024 -; Fill text box width c height b at hl with pal 7 - ld de, AttrMap - TileMap - add hl, de - inc b - inc b - inc c - inc c - ld a, 7 ; pal -.gotoy - push bc - push hl -.gotox - ld [hli], a - dec c - jr nz, .gotox - pop hl - ld de, 20 ; screen width - add hl, de - pop bc - dec b - jr nz, .gotoy - ret -; 103e - - -SpeechTextBox: ; 103e -; Standard textbox. - hlcoord 0, 12 - ld b, 4 ; height - ld c, 18 ; screen width - 2 (border) - jp TextBox -; 1048 - -UnknownText_0x1048: ; 1048 - db $0, "ゲームフりーク!", $57 -; 1052 - -Function1052: ; 1052 - ld hl, .text_1056 - ret -.text_1056 - db "@" -; 1057 - - -PrintText: ; 1057 - call Function106c -Function105a: ; 105a - push hl - hlcoord 1, 14 - ld bc, 18 + 3<<8 - call ClearBox - pop hl - -PrintTextBoxText: ; 1065 - bccoord 1, 14 - call Function13e5 - ret -; 106c - - -Function106c: ; 106c - push hl - call SpeechTextBox - call Function1ad2 - call Function321c - pop hl - ret -; 1078 - - - -PlaceString: ; 1078 - push hl - -PlaceNextChar: ; 1079 - ld a, [de] - cp "@" - jr nz, CheckDict - ld b, h - ld c, l - pop hl - ret - pop de - -NextChar: ; 1083 - inc de - jp PlaceNextChar - -CheckDict: ; 1087 - cp $15 - jp z, Function117b - cp $4f - jp z, Char4F - cp $4e - jp z, Function12a7 - cp $16 - jp z, Function12b9 - and a - jp z, Function1383 - cp $4c - jp z, $1337 - cp $4b - jp z, Char4B - cp $51 ; Player name - jp z, Function12f2 - cp $49 - jp z, Function1186 - cp $52 ; Mother name - jp z, Function118d - cp $53 - jp z, Function1194 - cp $35 - jp z, Function11e8 - cp $36 - jp z, Function11ef - cp $37 - jp z, Function11f6 - cp $38 - jp z, Function119b - cp $39 - jp z, Function11a2 - cp $54 - jp z, Function11c5 - cp $5b - jp z, Function11b7 - cp $5e - jp z, Function11be - cp $5c - jp z, Function11b0 - cp $5d - jp z, Function11a9 - cp $23 - jp z, Function11cc - cp $22 - jp z, Function12b0 - cp $55 - jp z, Char55 - cp $56 - jp z, Function11d3 - cp $57 - jp z, $137c - cp $58 - jp z, Function135a - cp $4a - jp z, Function11da - cp $24 - jp z, Function11e1 - cp $25 - jp z, NextChar - cp $1f - jr nz, .asm_1122 - ld a, $7f -.asm_1122 - cp $5f - jp z, Char5F - cp $59 - jp z, Function11fd - cp $5a - jp z, Char5D - cp $3f - jp z, $121b - cp $14 - jp z, $1252 - cp $e4 - jr z, .asm_1174 ; 0x113d $35 - cp $e5 - jr z, .asm_1174 ; 0x1141 $31 - jr .asm_114c ; 0x1143 $7 - ld b, a - call Function13c6 - jp NextChar -.asm_114c - cp $60 - jr nc, .asm_1174 ; 0x114e $24 - cp $40 - jr nc, .asm_1165 ; 0x1152 $11 - cp $20 - jr nc, .asm_115c ; 0x1156 $4 - add $80 - jr .asm_115e ; 0x115a $2 -.asm_115c - add $90 -.asm_115e - ld b, $e5 - call Function13c6 - jr .asm_1174 ; 0x1163 $f -.asm_1165 - cp $44 - jr nc, .asm_116d ; 0x1167 $4 - add $59 - jr .asm_116f ; 0x116b $2 -.asm_116d - add $86 -.asm_116f - ld b, $e4 - call Function13c6 -.asm_1174 - ld [hli], a - call PrintLetterDelay - jp NextChar -; 0x117b - - -Function117b: ; 117b - ld c, l - ld b, h - ld a, $5f - ld hl, $7036 - rst FarCall - jp PlaceNextChar -; 1186 - -Function1186: ; 1186 - push de - ld de, MomsName - jp $126a -; 118d - -Function118d: ; 118d - push de - ld de, PlayerName - jp $126a -; 1194 - -Function1194: ; 1194 - push de - ld de, RivalName - jp $126a -; 119b - -Function119b: ; 119b - push de - ld de, RedsName - jp $126a -; 11a2 - -Function11a2: ; 11a2 - push de - ld de, GreensName - jp $126a -; 11a9 - -Function11a9: ; 11a9 - push de - ld de, Char5DText - jp $126a -; 11b0 - -Function11b0: ; 11b0 - push de - ld de, Char5CText - jp $126a -; 11b7 - -Function11b7: ; 11b7 - push de - ld de, Char5BText - jp $126a -; 11be - -Function11be: ; 11be - push de - ld de, Char5EText - jp $126a -; 11c5 - -Function11c5: ; 11c5 - push de - ld de, Char54Text - jp $126a -; 11cc - -Function11cc: ; 11cc - push de - ld de, Char23Text - jp $126a -; 11d3 - -Function11d3: ; 11d3 - push de - ld de, $1292 - jp $126a -; 11da - -Function11da: ; 11da - push de - ld de, Char4AText - jp $126a -; 11e1 - -Function11e1: ; 11e1 - push de - ld de, Char24Text - jp $126a -; 11e8 - -Function11e8: ; 11e8 - push de - ld de, Char37Text - jp $126a -; 11ef - -Function11ef: ; 11ef - push de - ld de, Char37Text - jp $126a -; 11f6 - -Function11f6: ; 11f6 - push de - ld de, Char37Text - jp $126a -; 11fd - - -Function11fd: ; 11fd - ld a, [hBattleTurn] - xor $1 - jr Function1205 -; 1203 - -Char5D: ; 1203 - ld a, [hBattleTurn] -; 1205 - -Function1205: ; 1205 - push de - and a - jr nz, .asm_120e ; 0x1207 $5 - ld de, BattleMonNick - jr .asm_126a ; 0x120c $5c -.asm_120e - ld de, Char5AText ; Enemy - call PlaceString - ld h, b - ld l, c - ld de, EnemyMonNick - jr .asm_126a ; 0x1219 $4f - push de - ld a, [InLinkBattle] - and a - jr nz, .linkbattle - ld a, [TrainerClass] - cp $9 - jr z, .asm_1248 ; 0x1227 $1f - cp $2a - jr z, .asm_1248 ; 0x122b $1b - ld de, $c656 - call PlaceString - ld h, b - ld l, c - ld de, String12a2 - call PlaceString - push bc - ld hl, $5939 - ld a, $e - rst FarCall - pop hl - ld de, StringBuffer1 - jr .asm_126a ; 0x1246 $22 -.asm_1248 - ld de, RivalName - jr .asm_126a ; 0x124b $1d -.linkbattle - ld de, $c656 - jr .asm_126a ; 0x1250 $18 - push de - ld de, PlayerName - call PlaceString - ld h, b - ld l, c - ld a, [PlayerGender] - bit 0, a - ld de, String12a5 - jr z, .asm_126a ; 0x1263 $5 - ld de, String12a6 - jr .asm_126a ; 0x1268 $0 -.asm_126a - call PlaceString - ld h, b - ld l, c - pop de - jp NextChar -; 0x1273 - -Char5CText: ; 1273 - db "TM@" -Char5DText: ; 1276 - db "TRAINER@" -Char5BText: ; 127e - db "PC@" -Char5EText: ; 1281 - db "ROCKET@" -Char54Text: ; 1288 - db "POKé@" -Char23Text: ; 128d - db "こうげき@" -Char56Text:; 1292 - db "……@" -Char5AText: ; 1295 - db "Enemy @" -Char4AText: ; 129c - db $e1, $e2, "@" ; PK MN -Char24Text: ; 129f - db $70, $71, "@" ; PO KE -String12a2: ; 12a2 - db " @" -Char35Text: -Char36Text: -Char37Text: ; 12a4 - db "@" -String12a5: ; 12a5 - db "@" -String12a6: ; 12a6 - db "@" -; 12a7 - -Function12a7: ; 12a7 - pop hl - ld bc, $0028 - add hl, bc - push hl - jp NextChar -; 12b0 - -Function12b0: ; 12b0 - pop hl - ld bc, $0014 - add hl, bc - push hl - jp NextChar -; 12b9 - -Function12b9: ; 12b9 - pop hl - push de - ld bc, $3b60 - add hl, bc - ld de, $ffec - ld c, $1 -.asm_12c4 - ld a, h - and a - jr nz, .asm_12cd - ld a, l - cp $14 - jr c, .asm_12d1 - -.asm_12cd - add hl, de - inc c - jr .asm_12c4 - -.asm_12d1 - ld hl, TileMap - ld de, $0014 - ld a, c -.asm_12d8 - and a - jr z, .asm_12df - add hl, de - dec a - jr .asm_12d8 - -.asm_12df - pop de - inc de - ld a, [de] - ld c, a - ld b, $0 - add hl, bc - push hl - jp NextChar -; 12ea - - -Char4F: ; 12ea - pop hl - hlcoord 1, 16 - push hl - jp NextChar -; 0x12f2 - -Function12f2: ; 12f2 - push de - ld a, [InLinkBattle] - cp $3 - jr z, .asm_1301 - cp $4 - jr z, .asm_1301 - call Function13c7 - -.asm_1301 - call Function13b6 - call Functionaaf - ld hl, $c5b9 - ld bc, $0312 - call ClearBox - call Function13cd - ld c, $14 - call DelayFrames - ld hl, $c5b9 - pop de - jp NextChar -; 131f - - -Char4B: ; 131f - ld a, [InLinkBattle] - or a - jr nz, .asm_1328 - call Function13c7 - -.asm_1328 - call Function13b6 - - push de - call Functionaaf - pop de - - ld a, [InLinkBattle] - or a - call z, Function13cd - - push de - call Function138c - call Function138c - hlcoord 1, 16 - pop de - jp NextChar -; 1345 - - -Char55: ; 1345 - push de - ld de, Text_1354 - ld b, h - ld c, l - call PlaceString - ld h, b - ld l, c - pop de - jp NextChar -; 1354 - -Text_1354: ; 1354 - db $4b, "@" -; 1356 - - -Char5F: ; 1356 -; ends a Pokédex entry - ld [hl], "." - pop hl - ret -; 135a - -Function135a: ; 135a - ld a, [InLinkBattle] - cp $3 - jr z, .asm_1368 - cp $4 - jr z, .asm_1368 - call Function13c7 - -.asm_1368 - call Function13b6 - call Functionaaf - ld a, [InLinkBattle] - cp $3 - jr z, .asm_137c - cp $4 - jr z, .asm_137c - call Function13cd - -.asm_137c - pop hl - ld de, .string_1382 - dec de - ret - -.string_1382 - db "@" -; 1383 - -Function1383: ; 1383 - ld a, $e6 - ld [hli], a - call PrintLetterDelay - jp NextChar -; 138c - -Function138c: ; 138c - ld hl, $c5b9 - ld de, $c5a5 - ld a, $3 -.asm_1394 - push af - ld c, $12 -.asm_1397 - ld a, [hli] - ld [de], a - inc de - dec c - jr nz, .asm_1397 - inc de - inc de - inc hl - inc hl - pop af - dec a - jr nz, .asm_1394 - ld hl, $c5e1 - ld a, $7f - ld bc, $0012 - call ByteFill - ld c, $5 - call DelayFrames - ret -; 13b6 - -Function13b6: ; 13b6 - push bc - ld a, [hOAMUpdate] - push af - ld a, $1 - ld [hOAMUpdate], a - call WaitBGMap - pop af - ld [hOAMUpdate], a - pop bc - ret -; 13c6 - -Function13c6: ; 13c6 - ret -; 13c7 - -Function13c7: ; 13c7 - ld a, $ee - ld [$c606], a - ret -; 13cd - -Function13cd: ; 13cd - ld a, [$c605] - ld [$c606], a - ret -; 13d4 - -Function13d4: ; 13d4 - ld b, a - ld a, [hROMBank] - push af - ld a, b - rst Bankswitch - - call PlaceString - pop af - rst Bankswitch - - ret -; 13e0 - -Function13e0: ; 13e0 - ld hl, $13e4 - ret - -.string_13e4 - db "@" -; 13e5 - - -Function13e5: ; 13e5 - ld a, [$cfcf] - push af - set 1, a - ld [$cfcf], a - call Function13f6 - pop af - ld [$cfcf], a - ret -; 13f6 - -Function13f6: ; 13f6 -.asm_13f6 - ld a, [hli] - cp "@" - ret z - call Function13ff - jr .asm_13f6 -; 13ff - -Function13ff: ; 13ff - push hl - push bc - ld c, a - ld b, 0 - ld hl, TextCommands - add hl, bc - add hl, bc - ld e, [hl] - inc hl - ld d, [hl] - pop bc - pop hl - -; jp de - push de - ret -; 1410 - -TextCommands: ; 1410 - dw Text_00 - dw Text_01 - dw Text_02 - dw Text_03 - dw Text_04 - dw Text_05 - dw Text_06 - dw Text_07 - dw Text_08 - dw Text_09 - dw Text_0A - dw Text_PlaySound ; $0b - dw Text_0C - dw Text_0D - dw Text_PlaySound ; $0e - dw Text_PlaySound ; $0f - dw Text_PlaySound ; $10 - dw Text_PlaySound ; $11 - dw Text_PlaySound ; $12 - dw Text_PlaySound ; $13 - dw Text_14 - dw Text_15 - dw Text_16 -; 143e - -Text_00: ; 143e -; TX -; write text until "@" -; [$00]["...@"] - - ld d, h - ld e, l - ld h, b - ld l, c - call PlaceString - ld h, d - ld l, e - inc hl - ret -; 1449 - -Text_01: ; 1449 -; TX_RAM -; write text from a ram address -; little endian -; [$01][addr] - - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - push hl - ld h, b - ld l, c - call PlaceString - pop hl - ret -; 1455 - -Text_16: ; 1455 -; TX_FAR -; write text from a different bank -; little endian -; [$16][addr][bank] - - ld a, [hROMBank] - push af - - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - ld a, [hli] - - ld [hROMBank], a - ld [MBC3RomBank], a - - push hl - ld h, d - ld l, e - call Function13f6 - pop hl - - pop af - ld [hROMBank], a - ld [MBC3RomBank], a - ret -; 1470 - -Text_02: ; 1470 -; TX_NUM -; write bcdnumber from address, typically ram -; little endian -; [$02][addr][flags] -; flags: see PrintBCDNumber - - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - ld a, [hli] - push hl - ld h, b - ld l, c - ld c, a - call PrintBCDNumber - ld b, h - ld c, l - pop hl - ret -; 1480 - -Text_03: ; 1480 -; TX_MOVE -; move to a new tile -; little endian -; [$03][tileaddr] - - ld a, [hli] - ld [$d0e6], a - ld c, a - ld a, [hli] - ld [$d0e7], a - ld b, a - ret -; 148b - -Text_04: ; 148b -; TX_BOX -; draw a box -; little endian -; [$04][tileaddr][height][width] - - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - ld a, [hli] - ld b, a - ld a, [hli] - ld c, a - push hl - ld h, d - ld l, e - call TextBox - pop hl - ret -; 149b - -Text_05: ; 149b -; TX_LOW -; write text at (1,16) -; [$05] - - bccoord 1, 16 - ret -; 149f - -Text_06:: ; 149f -; TX_WAITBUTTON -; wait for button press -; show arrow -; [06] - - ld a, [InLinkBattle] - cp $3 - jp z, Text_0D - cp $4 - jp z, Text_0D - push hl - call Function13c7 - push bc - call Functionaaf - pop bc - call Function13cd - pop hl - ret -; 14ba - -Text_07: ; 14ba - push hl - call Function13cd - call Function138c - call Function138c - pop hl - bccoord 1, 16 - ret -; 14c9 - -Text_08: ; 14c9 -; TX_ASM - -; rom only? - bit 7, h - jr nz, .asm_14ce - jp [hl] - -.asm_14ce - ld a, "@" - ld [hl], a - ret -; 14d2 - -Text_09: ; 14d2 - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - ld a, [hli] - push hl - ld h, b - ld l, c - ld b, a - and $f - ld c, a - ld a, b - and $f0 - swap a - set 6, a - ld b, a - call PrintNum - ld b, h - ld c, l - pop hl - ret -; 14ed - -Text_0A: ; 14ed - push hl - push bc - call GetJoypadPublic - ld a, [hJoyDown] - and BUTTON_A | BUTTON_B - jr nz, .asm_14fd - ld c, 30 - call DelayFrames - -.asm_14fd - pop bc - pop hl - ret -; 1500 - -Text_PlaySound:: ; 1500 -; chars: -; $0b, $0e, $0f, $10, $11, $12, $13 -; see TextSFX - - push bc - dec hl - ld a, [hli] - ld b, a - push hl - ld hl, TextSFX -.asm_1508 - ld a, [hli] - cp $ff - jr z, .asm_151f - cp b - jr z, .asm_1514 - inc hl - inc hl - jr .asm_1508 - -.asm_1514 - push de - ld e, [hl] - inc hl - ld d, [hl] - call StartSFX - call WaitSFX - pop de - -.asm_151f - pop hl - pop bc - ret -; 1522 - -Function1522: ; 1522 - push de - ld e, [hl] - inc hl - ld d, [hl] - call Function37ce - pop de - pop hl - pop bc - ret -; 152d - -TextSFX: ; 152d - dbw $0b, SFX_DEX_FANFARE_50_79 - dbw $12, SFX_FANFARE - dbw $0e, SFX_DEX_FANFARE_20_49 - dbw $0f, SFX_ITEM - dbw $10, SFX_CAUGHT_MON - dbw $11, SFX_DEX_FANFARE_80_109 - dbw $13, SFX_SLOT_MACHINE_START - db $ff ; end -; 1543 - -Text_0C: ; 1543 - ld a, [hli] - ld d, a - push hl - ld h, b - ld l, c -.asm_1548 - push de - ld a, "…" - ld [hli], a - call GetJoypadPublic - ld a, [hJoyDown] - and BUTTON_A | BUTTON_B - jr nz, .asm_155a - ld c, 10 - call DelayFrames -.asm_155a - pop de - dec d - jr nz, .asm_1548 - ld b, h - ld c, l - pop hl - ret -; 1562 - -Text_0D: ; 1562 -; wait for key down -; display arrow - push hl - push bc - call Functionaaf - pop bc - pop hl - ret -; 156a - -Text_14: ; 156a -; TX_PREDEF -; [$14][id] - - ld a, [hli] - push hl - ld e, a - ld d, 0 - ld hl, $4000 - add hl, de - add hl, de - ld a, $9 - call GetFarHalfword - ld d, h - ld e, l - ld h, b - ld l, c - call PlaceString - pop hl - ret -; 1582 - -Text_15: ; 1582 -; TX_DAY - - call GetWeekday - push hl - push bc - ld c, a - ld b, 0 - ld hl, .Days - add hl, bc - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a - ld d, h - ld e, l - pop hl - call PlaceString - ld h, b - ld l, c - ld de, .Day - call PlaceString - pop hl - ret -; 15a2 - -.Days ; 15a2 - dw .Sun - dw .Mon - dw .Tues - dw .Wednes - dw .Thurs - dw .Fri - dw .Satur - -.Sun db "SUN@" -.Mon db "MON@" -.Tues db "TUES@" -.Wednes db "WEDNES@" -.Thurs db "THURS@" -.Fri db "FRI@" -.Satur db "SATUR@" -.Day db "DAY@" -; 15d8 - diff --git a/engine/time.asm b/engine/time.asm deleted file mode 100644 index fff52b173..000000000 --- a/engine/time.asm +++ /dev/null @@ -1,311 +0,0 @@ -; Functions relating to the timer interrupt and the real-time-clock. - - -AskTimer: ; 591 - push af - ld a, [$ffe9] - and a - jr z, .asm_59a - call Timer - -.asm_59a - pop af - reti -; 59c - - -LatchClock: ; 59c -; latch clock counter data - ld a, 0 - ld [MBC3LatchClock], a - ld a, 1 - ld [MBC3LatchClock], a - ret -; 5a7 - - -UpdateTime: ; 5a7 - call GetClock - call FixDays - call FixTime - callba GetTimeOfDay - ret -; 5b7 - - -GetClock: ; 5b7 -; store clock data in hRTCDayHi-hRTCSeconds - -; enable clock r/w - ld a, SRAM_ENABLE - ld [MBC3SRamEnable], a - -; clock data is 'backwards' in hram - - call LatchClock - ld hl, MBC3SRamBank - ld de, MBC3RTC - - ld [hl], RTC_S - ld a, [de] - and $3f - ld [hRTCSeconds], a - - ld [hl], RTC_M - ld a, [de] - and $3f - ld [hRTCMinutes], a - - ld [hl], RTC_H - ld a, [de] - and $1f - ld [hRTCHours], a - - ld [hl], RTC_DL - ld a, [de] - ld [hRTCDayLo], a - - ld [hl], RTC_DH - ld a, [de] - ld [hRTCDayHi], a - -; unlatch clock / disable clock r/w - call CloseSRAM - ret -; 5e8 - - -FixDays: ; 5e8 -; fix day count -; mod by 140 - -; check if day count > 255 (bit 8 set) - ld a, [hRTCDayHi] ; DH - bit 0, a - jr z, .daylo -; reset dh (bit 8) - res 0, a - ld [hRTCDayHi], a ; DH - -; mod 140 -; mod twice since bit 8 (DH) was set - ld a, [hRTCDayLo] ; DL -.modh - sub 140 - jr nc, .modh -.modl - sub 140 - jr nc, .modl - add 140 - -; update dl - ld [hRTCDayLo], a ; DL - -; unknown output - ld a, $40 ; %1000000 - jr .set - -.daylo -; quit if fewer than 140 days have passed - ld a, [hRTCDayLo] ; DL - cp 140 - jr c, .quit - -; mod 140 -.mod - sub 140 - jr nc, .mod - add 140 - -; update dl - ld [hRTCDayLo], a ; DL - -; unknown output - ld a, $20 ; %100000 - -.set -; update clock with modded day value - push af - call SetClock - pop af - scf - ret - -.quit - xor a - ret -; 61d - - -FixTime: ; 61d -; add ingame time (set at newgame) to current time -; day hr min sec -; store time in CurDay, hHours, hMinutes, hSeconds - -; second - ld a, [hRTCSeconds] ; S - ld c, a - ld a, [StartSecond] - add c - sub 60 - jr nc, .updatesec - add 60 -.updatesec - ld [hSeconds], a - -; minute - ccf ; carry is set, so turn it off - ld a, [hRTCMinutes] ; M - ld c, a - ld a, [StartMinute] - adc c - sub 60 - jr nc, .updatemin - add 60 -.updatemin - ld [hMinutes], a - -; hour - ccf ; carry is set, so turn it off - ld a, [hRTCHours] ; H - ld c, a - ld a, [StartHour] - adc c - sub 24 - jr nc, .updatehr - add 24 -.updatehr - ld [hHours], a - -; day - ccf ; carry is set, so turn it off - ld a, [hRTCDayLo] ; DL - ld c, a - ld a, [StartDay] - adc c - ld [CurDay], a - ret -; 658 - -Function658: ; 658 - xor a - ld [StringBuffer2], a - ld a, $0 - ld [$d089], a - jr .asm_677 - - call UpdateTime - ld a, [hHours] - ld [$d087], a - ld a, [hMinutes] - ld [$d088], a - ld a, [hSeconds] - ld [$d089], a - jr .asm_677 - -.asm_677 - ld a, $5 - ld hl, $40ed - rst FarCall - ret -; 67e - - - -Function67e: ; 67e - call Function685 - call SetClock - ret -; 685 - -Function685: ; 685 - xor a - ld [hRTCSeconds], a - ld [hRTCMinutes], a - ld [hRTCHours], a - ld [hRTCDayLo], a - ld [hRTCDayHi], a - ret -; 691 - - -SetClock: ; 691 -; set clock data from hram - -; enable clock r/w - ld a, SRAM_ENABLE - ld [MBC3SRamEnable], a - -; set clock data -; stored 'backwards' in hram - - call LatchClock - ld hl, MBC3SRamBank - ld de, MBC3RTC - -; seems to be a halt check that got partially commented out -; this block is totally pointless - ld [hl], RTC_DH - ld a, [de] - bit 6, a ; halt - ld [de], a - -; seconds - ld [hl], RTC_S - ld a, [hRTCSeconds] - ld [de], a -; minutes - ld [hl], RTC_M - ld a, [hRTCMinutes] - ld [de], a -; hours - ld [hl], RTC_H - ld a, [hRTCHours] - ld [de], a -; day lo - ld [hl], RTC_DL - ld a, [hRTCDayLo] - ld [de], a -; day hi - ld [hl], RTC_DH - ld a, [hRTCDayHi] - res 6, a ; make sure timer is active - ld [de], a - -; cleanup - call CloseSRAM ; unlatch clock, disable clock r/w - ret -; 6c4 - - -Function6c4: ; 6c4 - xor a - push af - ld a, $0 - call GetSRAMBank - pop af - ld [$ac60], a - call CloseSRAM - ret -; 6d3 - -Function6d3: ; 6d3 - ld hl, $ac60 - push af - ld a, $0 - call GetSRAMBank - pop af - or [hl] - ld [hl], a - call CloseSRAM - ret -; 6e3 - -Function6e3: ; 6e3 - ld a, $0 - call GetSRAMBank - ld a, [$ac60] - call CloseSRAM - ret -; 6ef - diff --git a/engine/vblank.asm b/engine/vblank.asm deleted file mode 100644 index 71114964e..000000000 --- a/engine/vblank.asm +++ /dev/null @@ -1,541 +0,0 @@ -; VBlank is the interrupt responsible for updating VRAM. - -; In Pokemon Crystal, VBlank has been hijacked to act as the -; main loop. After time-sensitive graphics operations have been -; performed, joypad input and sound functions are executed. - -; This prevents the display and audio output from lagging. - - -VBlank: ; 283 - push af - push bc - push de - push hl - -; get vblank type - ld a, [$ff9e] - and $7 - -; get fn pointer - ld e, a - ld d, $0 - ld hl, .VBlanks - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - -; down to business - call _hl_ - -; since this is called once per frame - call GameTimer - - pop hl - pop de - pop bc - pop af - reti -; 2a1 - -.VBlanks ; 2a1 - dw VBlank0 ; 0 - dw VBlank1 ; 1 - dw VBlank2 ; 2 - dw VBlank3 ; 3 - dw VBlank4 ; 4 - dw VBlank5 ; 5 - dw VBlank6 ; 6 - dw VBlank0 ; 7 -; 2b1 - - -VBlank0: ; 2b1 -; normal operation - -; rng -; scx, scy, wy, wx -; bg map buffer -; palettes -; dma transfer -; bg map -; tiles -; oam -; joypad -; sound - -; inc frame counter - ld hl, $ff9b - inc [hl] - -; advance rng - ld a, [rDIV] - ld b, a - ld a, [hRandomAdd] - adc b - ld [hRandomAdd], a - - ld a, [rDIV] - ld b, a - ld a, [hRandomSub] - sbc b - ld [hRandomSub], a - -; save bank - ld a, [hROMBank] ; current bank - ld [$ff8a], a - -; scroll x - ld a, [hSCX] - ld [rSCX], a -; scroll y - ld a, [hSCY] - ld [rSCY], a -; window y - ld a, [hWY] - ld [rWY], a -; window x + 7 - ld a, [hWX] - ld [rWX], a - -; some time management is in order -; only have time for one of these during vblank - -; bg map buffer has priority - call UpdateBGMapBuffer - jr c, .doneframeaction - -; then pals - call UpdatePalsIfCGB - jr c, .doneframeaction - -; dma transfer - call DMATransfer - jr c, .doneframeaction - -; bg map - call UpdateBGMap - -; these have their own timing checks - call Serve2bppRequest - call Serve1bppRequest - call AnimateTileset - -.doneframeaction -; oam update off? - ld a, [hOAMUpdate] - and a - jr nz, .vblankoccurred - -; update oam by dma transfer - call hPushOAM -; @PushOAM: -; ld a, Sprites >> 8 -; ld [rDMA], a -; ld a, $28 -; .loop -; dec a -; jr nz, .loop -; ret - - -; vblank-sensitive operations are done - -.vblankoccurred -; tell other fns vblank happened - xor a - ld [VBlankOccurred], a - -; dec OverworldDelay until 0 - ld a, [OverworldDelay] - and a - jr z, .textdelay - dec a - ld [OverworldDelay], a - -.textdelay -; dec text delay counter until 0 - ld a, [TextDelayFrames] - and a - jr z, .joypad - dec a - ld [TextDelayFrames], a - -.joypad - call Joypad - -; update sound - ld a, BANK(UpdateSound) - rst Bankswitch ; bankswitch - call UpdateSound - ld a, [$ff8a] - rst Bankswitch ; restore bank - -; - ld a, [hSeconds] - ld [$ffe3], a - - ret -; 325 - - -VBlank2: ; 325 -; sound only - -; save bank - ld a, [hROMBank] - ld [$ff8a], a - -; update sound - ld a, BANK(UpdateSound) - rst Bankswitch ; bankswitch - call UpdateSound - -; restore bank - ld a, [$ff8a] - rst Bankswitch - -; tell other fns vblank happened - xor a - ld [VBlankOccurred], a - ret -; 337 - - -VBlank1: ; 337 -; scx, scy -; palettes -; bg map -; tiles -; oam -; sound / lcd stat - -; save bank - ld a, [hROMBank] - ld [$ff8a], a - -; scroll x - ld a, [hSCX] - ld [rSCX], a - -; scroll y - ld a, [hSCY] - ld [rSCY], a - -; time-sensitive fns - call UpdatePals - jr c, .vblankoccurred - -; these have their own timing checks - call UpdateBGMap - call Serve2bppRequest@VBlank -; update oam by dma transfer - call hPushOAM -; @PushOAM: -; ld a, Sprites >> 8 -; ld [rDMA], a -; ld a, $28 -; .loop -; dec a -; jr nz, .loop -; ret - -.vblankoccurred -; tell other fns vblank happened - xor a - ld [VBlankOccurred], a - -; get requested ints - ld a, [rIF] - ld b, a -; discard requested ints - xor a - ld [rIF], a -; enable lcd stat - ld a, %10 ; lcd stat - ld [rIE], a -; rerequest serial int if applicable (still disabled) -; request lcd stat - ld a, b - and %1000 ; serial - or %10 ; lcd stat - ld [rIF], a - - ei -; update sound - ld a, BANK(UpdateSound) - rst Bankswitch ; bankswitch - call UpdateSound -; restore bank - ld a, [$ff8a] - rst Bankswitch - di - -; get requested ints - ld a, [rIF] - ld b, a -; discard requested ints - xor a - ld [rIF], a -; enable ints besides joypad - ld a, %1111 ; serial timer lcdstat vblank - ld [rIE], a -; rerequest ints - ld a, b - ld [rIF], a - ret -; 37f - - -UpdatePals: ; 37f -; update pals for either dmg or cgb - -; check cgb - ld a, [hCGB] - and a - jp nz, UpdateCGBPals - -; update gb pals - ld a, [$cfc7] - ld [rBGP], a - - ld a, [$cfc8] - ld [rOBP0], a - - ld a, [$cfc9] - ld [rOBP1], a - - and a - ret -; 396 - - -VBlank3: ; 396 -; scx, scy -; palettes -; bg map -; tiles -; oam -; sound / lcd stat - -; save bank - ld a, [hROMBank] - ld [$ff8a], a - -; scroll x - ld a, [hSCX] - ld [rSCX], a -; scroll y - ld a, [hSCY] - ld [rSCY], a - -; any pals to update? - ld a, [hCGBPalUpdate] - and a - call nz, ForceUpdateCGBPals - jr c, .vblankoccurred -; else - call UpdateBGMap - call Serve2bppRequest@VBlank - -; update oam by dma transfer - call hPushOAM -; @PushOAM: -; ld a, Sprites >> 8 -; ld [rDMA], a -; ld a, $28 -; .loop -; dec a -; jr nz, .loop -; ret - -.vblankoccurred -; tell other fns vblank happened - xor a - ld [VBlankOccurred], a - -; save int flag - ld a, [rIF] - push af -; reset ints - xor a - ld [rIF], a -; force lcdstat int during sound update - ld a, %10 ; lcd stat - ld [rIE], a - ld [rIF], a - - ei -; update sound - ld a, BANK(UpdateSound) - rst Bankswitch ; bankswitch - call UpdateSound -; restore bank - ld a, [$ff8a] - rst Bankswitch - di - -; request lcdstat - ld a, [rIF] - ld b, a -; and any other ints - pop af - or b - ld b, a -; reset ints - xor a - ld [rIF], a -; enable ints besides joypad - ld a, %1111 ; serial timer lcdstat vblank - ld [rIE], a -; request ints - ld a, b - ld [rIF], a - ret -; 3df - - -VBlank4: ; 3df -; bg map -; tiles -; oam -; joypad -; serial -; sound - -; save bank - ld a, [hROMBank] - ld [$ff8a], a - - call UpdateBGMap - call Serve2bppRequest - -; update oam by dma transfer - call hPushOAM -; @PushOAM: -; ld a, Sprites >> 8 -; ld [rDMA], a -; ld a, $28 -; .loop -; dec a -; jr nz, .loop -; ret - -; update joypad - call Joypad - -; tell other fns vblank happened - xor a - ld [VBlankOccurred], a - -; handshake - call AskSerial - -; update sound - ld a, BANK(UpdateSound) - rst Bankswitch ; bankswitch - call UpdateSound -; restore bank - ld a, [$ff8a] - rst Bankswitch - ret -; 400 - - -VBlank5: ; 400 -; scx -; palettes -; bg map -; tiles -; joypad -; - -; save bank - ld a, [hROMBank] - ld [$ff8a], a - -; scroll x - ld a, [hSCX] - ld [rSCX], a - -; if we can update pals, skip this part - call UpdatePalsIfCGB - jr c, .vblankoccurred - - call UpdateBGMap - call Serve2bppRequest - -.vblankoccurred -; tell other fns vblank happened - xor a - ld [VBlankOccurred], a - -; joypad - call Joypad - -; discard requested ints - xor a - ld [rIF], a -; enable lcd stat - ld a, %10 ; lcd stat - ld [rIE], a -; request lcd stat - ld [rIF], a - - ei -; update sound - ld a, BANK(UpdateSound) - rst Bankswitch ; bankswitch - call UpdateSound -; restore bank - ld a, [$ff8a] - rst Bankswitch - di - -; discard requested ints - xor a - ld [rIF], a -; enable ints besides joypad - ld a, %1111 ; serial timer lcdstat vblank - ld [rIE], a - ret -; 436 - - -VBlank6: ; 436 -; palettes -; tiles -; dma transfer -; sound - -; save bank - ld a, [hROMBank] - ld [$ff8a], a - -; inc frame counter - ld hl, $ff9b - inc [hl] - - call UpdateCGBPals - jr c, .vblankoccurred - - call Serve2bppRequest - call Serve1bppRequest - call DMATransfer - -.vblankoccurred -; tell other fns vblank happened - xor a - ld [VBlankOccurred], a - -; update sound - ld a, BANK(UpdateSound) - rst Bankswitch ; bankswitch - call UpdateSound -; restore bank - ld a, [$ff8a] - rst Bankswitch - ret -; 45a diff --git a/engine/video.asm b/engine/video.asm deleted file mode 100644 index 0d0aa272d..000000000 --- a/engine/video.asm +++ /dev/null @@ -1,487 +0,0 @@ -; Functions dealing with VRAM. - -DMATransfer: ; 15d8 -; Return carry if the transfer is completed. - - ld a, [hDMATransfer] - and a - ret z - -; Start transfer - ld [rHDMA5], a - -; Execution is halted until the transfer is complete. - - xor a - ld [hDMATransfer], a - scf - ret -; 15e3 - - -UpdateBGMapBuffer: ; 15e3 -; Copy [$ffdc] 16x8 tiles from BGMapBuffer -; to bg map addresses in BGMapBufferPtrs. - -; [$ffdc] must be even since this is done in pairs. - -; Return carry on success. - - ld a, [hBGMapUpdate] - and a - ret z - - ld a, [rVBK] - push af - ld [hSPBuffer], sp - - ld hl, BGMapBufferPtrs - ld sp, hl - -; We can now pop the addresses of affected spots on the BG Map - - ld hl, BGMapPalBuffer - ld de, BGMapBuffer - - -.next -; Copy a pair of 16x8 blocks (one 16x16 block) - -rept 2 -; Get our BG Map address - pop bc - -; Palettes - ld a, 1 - ld [rVBK], a - - ld a, [hli] - ld [bc], a - inc c - ld a, [hli] - ld [bc], a - dec c - -; Tiles - ld a, 0 - ld [rVBK], a - - ld a, [de] - inc de - ld [bc], a - inc c - ld a, [de] - inc de - ld [bc], a -endr - -; We've done 2 16x8 blocks - ld a, [$ffdc] - dec a - dec a - ld [$ffdc], a - - jr nz, .next - - - ld a, [hSPBuffer] - ld l, a - ld a, [hSPBuffer + 1] - ld h, a - ld sp, hl - - pop af - ld [rVBK], a - - xor a - ld [hBGMapUpdate], a - scf - ret -; 163a - - -WaitTop: ; 163a -; Wait until the top third of the BG Map is being updated. - - ld a, [hBGMapMode] - and a - ret z - - ld a, [hBGMapThird] - and a - jr z, .done - - call DelayFrame - jr WaitTop - -.done - xor a - ld [hBGMapMode], a - ret -; 164c - - -UpdateBGMap: ; 164c -; Update the BG Map, in thirds, from TileMap and AttrMap. - - ld a, [hBGMapMode] - and a - ret z - -; BG Map 0 - dec a ; 1 - jr z, .Tiles - dec a ; 2 - jr z, .Attr - -; BG Map 1 - dec a - - ld a, [hBGMapAddress] - ld l, a - ld a, [hBGMapAddress + 1] - ld h, a - push hl - - xor a - ld [hBGMapAddress], a - ld a, VBGMap1 >> 8 - ld [hBGMapAddress + 1], a - - ld a, [hBGMapMode] - push af - cp 3 - call z, .Tiles - pop af - cp 4 - call z, .Attr - - pop hl - ld a, l - ld [hBGMapAddress], a - ld a, h - ld [hBGMapAddress + 1], a - ret - - -.Attr - ld a, 1 - ld [rVBK], a - - ld hl, AttrMap - call .update - - ld a, 0 - ld [rVBK], a - ret - - -.Tiles - ld hl, TileMap - - -.update - ld [hSPBuffer], sp - -; Which third? - ld a, [hBGMapThird] - and a ; 0 - jr z, .top - dec a ; 1 - jr z, .middle - ; 2 - - -THIRD_HEIGHT EQU SCREEN_HEIGHT / 3 - - -.bottom - ld de, 2 * THIRD_HEIGHT * SCREEN_WIDTH - add hl, de - ld sp, hl - - ld a, [hBGMapAddress + 1] - ld h, a - ld a, [hBGMapAddress] - ld l, a - - ld de, 2 * THIRD_HEIGHT * BG_MAP_WIDTH - add hl, de - -; Next time: top third - xor a - jr .start - - -.middle - ld de, THIRD_HEIGHT * SCREEN_WIDTH - add hl, de - ld sp, hl - - ld a, [hBGMapAddress + 1] - ld h, a - ld a, [hBGMapAddress] - ld l, a - - ld de, THIRD_HEIGHT * BG_MAP_WIDTH - add hl, de - -; Next time: bottom third - ld a, 2 - jr .start - - -.top - ld sp, hl - - ld a, [hBGMapAddress + 1] - ld h, a - ld a, [hBGMapAddress] - ld l, a - -; Next time: middle third - ld a, 1 - - -.start -; Which third to update next time - ld [hBGMapThird], a - -; Rows of tiles in a third - ld a, SCREEN_HEIGHT / 3 - -; Discrepancy between TileMap and BGMap - ld bc, BG_MAP_WIDTH - (SCREEN_WIDTH - 1) - - -.row -; Copy a row of 20 tiles -rept SCREEN_WIDTH / 2 - 1 - pop de - ld [hl], e - inc l - ld [hl], d - inc l -endr - pop de - ld [hl], e - inc l - ld [hl], d - - add hl, bc - dec a - jr nz, .row - - - ld a, [hSPBuffer] - ld l, a - ld a, [hSPBuffer + 1] - ld h, a - ld sp, hl - ret -; 170a - - -Serve1bppRequest: ; 170a -; Only call during the first fifth of VBlank - - ld a, [Requested1bpp] - and a - ret z - -; Back out if we're too far into VBlank - ld a, [rLY] - cp 144 - ret c - cp 146 - ret nc - -; Copy [Requested1bpp] 1bpp tiles from [Requested1bppSource] to [Requested1bppDest] - - ld [hSPBuffer], sp - -; Source - ld hl, Requested1bppSource - ld a, [hli] - ld h, [hl] - ld l, a - ld sp, hl - -; Destination - ld hl, Requested1bppDest - ld a, [hli] - ld h, [hl] - ld l, a - -; # tiles to copy - ld a, [Requested1bpp] - ld b, a - - xor a - ld [Requested1bpp], a - -.next - -rept 3 - pop de - ld [hl], e - inc l - ld [hl], e - inc l - ld [hl], d - inc l - ld [hl], d - inc l -endr - pop de - ld [hl], e - inc l - ld [hl], e - inc l - ld [hl], d - inc l - ld [hl], d - - inc hl - dec b - jr nz, .next - - - ld a, l - ld [Requested1bppDest], a - ld a, h - ld [Requested1bppDest + 1], a - - ld [Requested1bppSource], sp - - ld a, [hSPBuffer] - ld l, a - ld a, [hSPBuffer + 1] - ld h, a - ld sp, hl - ret -; 1769 - - -Serve2bppRequest: ; 1769 -; Only call during the first fifth of VBlank - - ld a, [Requested2bpp] - and a - ret z - -; Back out if we're too far into VBlank - ld a, [rLY] - cp 144 - ret c - cp 146 - ret nc - jr _Serve2bppRequest - - -Serve2bppRequest@VBlank: ; 1778 - - ld a, [Requested2bpp] - and a - ret z - -_Serve2bppRequest: ; 177d -; Copy [Requested2bpp] 2bpp tiles from [Requested2bppSource] to [Requested2bppDest] - - ld [hSPBuffer], sp - -; Source - ld hl, Requested2bppSource - ld a, [hli] - ld h, [hl] - ld l, a - ld sp, hl - -; Destination - ld hl, Requested2bppDest - ld a, [hli] - ld h, [hl] - ld l, a - -; # tiles to copy - ld a, [Requested2bpp] - ld b, a - - xor a - ld [Requested2bpp], a - -.next - -rept 7 - pop de - ld [hl], e - inc l - ld [hl], d - inc l -endr - pop de - ld [hl], e - inc l - ld [hl], d - - inc hl - dec b - jr nz, .next - - - ld a, l - ld [Requested2bppDest], a - ld a, h - ld [Requested2bppDest + 1], a - - ld [Requested2bppSource], sp - - ld a, [hSPBuffer] - ld l, a - ld a, [hSPBuffer + 1] - ld h, a - ld sp, hl - ret -; 17d3 - - -AnimateTileset: ; 17d3 -; Only call during the first fifth of VBlank - - ld a, [$ffde] - and a - ret z - -; Back out if we're too far into VBlank - ld a, [rLY] - cp 144 - ret c - cp 151 - ret nc - - ld a, [hROMBank] - push af - ld a, BANK(_AnimateTileset) - rst Bankswitch - - ld a, [rSVBK] - push af - ld a, 1 - ld [rSVBK], a - - ld a, [rVBK] - push af - ld a, 0 - ld [rVBK], a - - call _AnimateTileset - - pop af - ld [rVBK], a - pop af - ld [rSVBK], a - pop af - rst Bankswitch - ret -; 17ff - diff --git a/main.asm b/main.asm index 5e0e782ba..30084dbf2 100644 --- a/main.asm +++ b/main.asm @@ -14,22 +14,22 @@ Start: SECTION "start",ROM0[$150] -INCLUDE "engine/init.asm" -INCLUDE "engine/vblank.asm" -INCLUDE "engine/delay.asm" -INCLUDE "engine/rtc.asm" -INCLUDE "engine/fade.asm" -INCLUDE "engine/lcd.asm" -INCLUDE "engine/time.asm" -INCLUDE "engine/serial.asm" -INCLUDE "engine/joypad.asm" -INCLUDE "engine/decompress.asm" -INCLUDE "engine/palettes.asm" -INCLUDE "engine/copy.asm" -INCLUDE "engine/text.asm" -INCLUDE "engine/video.asm" -INCLUDE "engine/map_objects.asm" -INCLUDE "engine/sine.asm" +INCLUDE "common/init.asm" +INCLUDE "common/vblank.asm" +INCLUDE "common/delay.asm" +INCLUDE "common/rtc.asm" +INCLUDE "common/fade.asm" +INCLUDE "common/lcd.asm" +INCLUDE "common/time.asm" +INCLUDE "common/serial.asm" +INCLUDE "common/joypad.asm" +INCLUDE "common/decompress.asm" +INCLUDE "common/palettes.asm" +INCLUDE "common/copy.asm" +INCLUDE "common/text.asm" +INCLUDE "common/video.asm" +INCLUDE "common/map_objects.asm" +INCLUDE "common/sine.asm" Function1b1e: ; 1b1e ld [$d003], a @@ -473,7 +473,7 @@ Function1d19: ; 1d19 ; 1d35 -INCLUDE "engine/menu.asm" +INCLUDE "common/menu.asm" AskSerial: ; 2063 @@ -515,7 +515,7 @@ AskSerial: ; 2063 ; 208a -INCLUDE "engine/game_time.asm" +INCLUDE "common/game_time.asm" Function210f: ; 210f @@ -2906,7 +2906,7 @@ Function2d43: ; 2d43 ; 2d54 -INCLUDE "engine/farcall.asm" +INCLUDE "common/farcall.asm" Predef: ; 2d83 -- cgit v1.2.3 From 847843d866aa79727f7d1dd98c2b212e8b5053ef Mon Sep 17 00:00:00 2001 From: yenatch Date: Sat, 7 Sep 2013 23:49:20 -0400 Subject: rename BUTTON_A and BUTTON_B constants to A_BUTTON and B_BUTTON --- common/joypad.asm | 12 ++++++------ common/text.asm | 4 ++-- constants.asm | 4 ++-- main.asm | 20 ++++++++++---------- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/common/joypad.asm b/common/joypad.asm index 388c84e22..198e1c47b 100644 --- a/common/joypad.asm +++ b/common/joypad.asm @@ -101,8 +101,8 @@ Joypad: ; 935 ; Now that we have the input, we can do stuff with it. ; For example, soft reset: - and BUTTON_A | BUTTON_B | SELECT | START - cp BUTTON_A | BUTTON_B | SELECT | START + and A_BUTTON | B_BUTTON | SELECT | START + cp A_BUTTON | B_BUTTON | SELECT | START jp z, Reset ret @@ -283,11 +283,11 @@ Functiona1b: ; a1b pop bc ld a, [hJoyDown] - cp D_UP | SELECT | BUTTON_B + cp D_UP | SELECT | B_BUTTON jr z, .asm_a34 ld a, [$ffa9] - and START | BUTTON_A + and START | A_BUTTON jr nz, .asm_a34 dec c @@ -306,7 +306,7 @@ Functiona36: ; a36 call DelayFrame call GetJoypadPublic ld a, [hJoyPressed] - and BUTTON_A | BUTTON_B + and A_BUTTON | B_BUTTON ret nz call RTC jr Functiona36 @@ -382,7 +382,7 @@ Functiona80: ; a80 Functionaa5: ; aa5 call Functiona57 ld a, [$ffa9] - and BUTTON_A | BUTTON_B + and A_BUTTON | B_BUTTON jr z, Functionaa5 ret ; aaf diff --git a/common/text.asm b/common/text.asm index 4f39a95df..e010de6d4 100644 --- a/common/text.asm +++ b/common/text.asm @@ -1054,7 +1054,7 @@ Text_0A: ; 14ed push bc call GetJoypadPublic ld a, [hJoyDown] - and BUTTON_A | BUTTON_B + and A_BUTTON | B_BUTTON jr nz, .asm_14fd ld c, 30 call DelayFrames @@ -1136,7 +1136,7 @@ Text_0C: ; 1543 ld [hli], a call GetJoypadPublic ld a, [hJoyDown] - and BUTTON_A | BUTTON_B + and A_BUTTON | B_BUTTON jr nz, .asm_155a ld c, 10 call DelayFrames diff --git a/constants.asm b/constants.asm index 70405446e..84d93f9dd 100644 --- a/constants.asm +++ b/constants.asm @@ -170,8 +170,8 @@ BUTTONS EQU %00010000 D_PAD EQU %00100000 NO_INPUT EQU %00000000 -BUTTON_A EQU %00000001 -BUTTON_B EQU %00000010 +A_BUTTON EQU %00000001 +B_BUTTON EQU %00000010 SELECT EQU %00000100 START EQU %00001000 D_RIGHT EQU %00010000 diff --git a/main.asm b/main.asm index 30084dbf2..e5f9675d7 100644 --- a/main.asm +++ b/main.asm @@ -23902,9 +23902,9 @@ StartMenu: ; 125cd call .PrintMenuAccount call Function1f1a ld a, [$cf73] - cp BUTTON_B + cp B_BUTTON jr z, .b - cp BUTTON_A + cp A_BUTTON jr z, .a jr .loop .a @@ -31482,11 +31482,11 @@ Function16be4: ; 16be4 call Functiona57 ld a, [hJoyPressed] - and BUTTON_B + and B_BUTTON jr nz, .asm_16c95 ld a, [hJoyPressed] - and BUTTON_A + and A_BUTTON jr nz, .asm_16c82 call Function16ca0 @@ -61158,7 +61158,7 @@ CheckForcedMovementInput: ; 802cb ld hl, .data_802e8 add hl, de ld a, [CurInput] - and BUTTON_A | BUTTON_B | SELECT | START + and A_BUTTON | B_BUTTON | SELECT | START or [hl] ld [CurInput], a ret @@ -70599,7 +70599,7 @@ OWPlayerInput: ; 96974 CheckAPressOW: ; 96999 ld a, [hJoyPressed] - and BUTTON_A + and A_BUTTON ret z call TryObjectEvent ret c @@ -75887,7 +75887,7 @@ Functione4512: ; e4512 Options_Cancel: ; e4520 ld a, [hJoyPressed] - and BUTTON_A + and A_BUTTON jr nz, .asm_e4528 and a ret @@ -90228,7 +90228,7 @@ Function1de299: ; 1de299 DudeAutoInput_A: ; 1de29f db NO_INPUT, $50 - db BUTTON_A, $00 + db A_BUTTON, $00 db NO_INPUT, $ff ; end ; 1de2a5 @@ -90236,7 +90236,7 @@ DudeAutoInput_RightA: ; 1de2a5 db NO_INPUT, $08 db D_RIGHT, $00 db NO_INPUT, $08 - db BUTTON_A, $00 + db A_BUTTON, $00 db NO_INPUT, $ff ; end ; 1de2af @@ -90250,7 +90250,7 @@ DudeAutoInput_DownA: ; 1de2af db NO_INPUT, $fe db NO_INPUT, $fe db NO_INPUT, $fe - db BUTTON_A, $00 + db A_BUTTON, $00 db NO_INPUT, $ff ; end ; 1de2c5 -- cgit v1.2.3 From f513cdd8883336096031f91b00791864ded473f9 Mon Sep 17 00:00:00 2001 From: yenatch Date: Sun, 8 Sep 2013 00:14:26 -0400 Subject: split map engine asm into common/map.asm --- common/map.asm | 2369 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.asm | 2367 +------------------------------------------------------ 2 files changed, 2370 insertions(+), 2366 deletions(-) create mode 100644 common/map.asm diff --git a/common/map.asm b/common/map.asm new file mode 100644 index 000000000..d4cfe1be9 --- /dev/null +++ b/common/map.asm @@ -0,0 +1,2369 @@ +; Functions dealing with rendering and interacting with maps. + +Function210f: ; 210f + ld hl, $c7e8 + ld bc, $0018 + ld a, $0 + call ByteFill + ret +; 211b + +Function211b: ; 211b + push hl + ld hl, $dbf7 + ld a, [hli] + ld h, [hl] + ld l, a + or h + ld a, [hl] + jr nz, .asm_2128 + ld a, $ff + +.asm_2128 + pop hl + ret +; 212a + +Function212a: ; 212a + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a + xor a + ld [$dbf7], a + ld [$dbf8], a + call Function2147 + ret c + ld a, e + ld [$dbf7], a + ld a, d + ld [$dbf8], a + xor a + ret +; 2147 + +Function2147: ; 2147 + push bc + ld a, [hROMBank] + push af + ld a, $13 + rst Bankswitch + + ld hl, $501e +.asm_2151 + push hl + ld a, [hli] + cp $ff + jr z, .asm_2167 + cp b + jr nz, .asm_2160 + ld a, [hli] + cp c + jr nz, .asm_2160 + jr .asm_216a + +.asm_2160 + pop hl + ld de, $0004 + add hl, de + jr .asm_2151 + +.asm_2167 + scf + jr .asm_216d + +.asm_216a + ld e, [hl] + inc hl + ld d, [hl] + +.asm_216d + pop hl + pop bc + ld a, b + rst Bankswitch + + pop bc + ret +; 2173 + +Function2173: ; 2173 + call Function217a + call Functiondb1 + ret +; 217a + +Function217a: ; 217a + ld a, [hROMBank] + push af + ld a, [TilesetBlocksBank] + rst Bankswitch + + call Function2198 + ld a, $60 + ld hl, TileMap + ld bc, $0168 + call ByteFill + ld a, $13 + rst Bankswitch + + call $515b + pop af + rst Bankswitch + + ret +; 2198 + +Function2198: ; 2198 + ld a, [$d194] + ld e, a + ld a, [$d195] + ld d, a + ld hl, EnemyMoveAnimation + ld b, $5 + +.asm_21a5 + push de + push hl + ld c, $6 + +.asm_21a9 + push de + push hl + ld a, [de] + and a + jr nz, .asm_21b2 + ld a, [$d19d] + +.asm_21b2 + ld e, l + ld d, h + add a + ld l, a + ld h, $0 + add hl, hl + add hl, hl + add hl, hl + ld a, [TilesetBlocksAddress] + add l + ld l, a + ld a, [TilesetBlocksAddress + 1] + adc h + ld h, a + +rept 3 + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + + ld a, e + add 20 + ld e, a + jr nc, .next\@ + inc d +.next\@ +endr + + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + + pop hl + ld de, $0004 + add hl, de + pop de + inc de + dec c + jp nz, .asm_21a9 + pop hl + ld de, $0060 + add hl, de + pop de + ld a, [$d19f] + add $6 + add e + ld e, a + jr nc, .asm_2225 + inc d + +.asm_2225 + dec b + jp nz, .asm_21a5 + ret +; 222a + +Function222a: ; 222a + ld a, $fa + ld [$ff9f], a + callba Function15363 + xor a + ld [$ff9f], a + ret +; 2238 + +Function2238: ; 2238 + call Function2252 + ret nc + push bc + callba Function149af + pop bc + ret nc + call Function22a7 + scf + ret +; 224a + + + +Function224a: ; 224a + call Function2252 + ret nc + call Function22a7 + ret +; 2252 + +Function2252: ; 2252 + callba Function1499a + ret nc + + ld a, [hROMBank] + push af + + call Function2c52 + call Function2266 + + pop de + ld a, d + rst Bankswitch + ret +; 2266 + +Function2266: ; 2266 + ld a, [MapY] + sub $4 + ld e, a + ld a, [MapX] + sub $4 + ld d, a + ld a, [$dbfb] + and a + ret z + ld c, a + ld hl, $dbfc + ld a, [hli] + ld h, [hl] + ld l, a +.asm_227e + push hl + ld a, [hli] + cp e + jr nz, .asm_2289 + ld a, [hli] + cp d + jr nz, .asm_2289 + jr .asm_2296 + +.asm_2289 + pop hl + ld a, $5 + add l + ld l, a + jr nc, .asm_2291 + inc h + +.asm_2291 + dec c + jr nz, .asm_227e + xor a + ret + +.asm_2296 + pop hl + call Function22a3 + ret nc + ld a, [$dbfb] + inc a + sub c + ld c, a + scf + ret +; 22a3 + +Function22a3: ; 22a3 + inc hl + inc hl + scf + ret +; 22a7 + +Function22a7: ; 22a7 + ld a, [hROMBank] + push af + + call Function2c52 + call Function22b4 + + pop af + rst Bankswitch + scf + ret +; 22b4 + +Function22b4: ; 22b4 + push bc + ld hl, $dbfc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, c + dec a + ld bc, $0005 + call AddNTimes + ld bc, $0002 + add hl, bc + ld a, [hli] + cp $ff + jr nz, .asm_22d0 + ld hl, $dcac + ld a, [hli] + +.asm_22d0 + pop bc + ld [$d146], a + ld a, [hli] + ld [$d147], a + ld a, [hli] + ld [$d148], a + ld a, c + ld [$d149], a + ld a, [MapGroup] + ld [$d14a], a + ld a, [MapNumber] + ld [$d14b], a + scf + ret +; 22ee + + + +CheckOutdoorMap: ; 22ee + cp ROUTE + ret z + cp TOWN + ret +; 22f4 + +CheckIndoorMap: ; 22f4 + cp INDOOR + ret z + cp CAVE + ret z + cp DUNGEON + ret z + cp GATE + ret +; 2300 + +Function2300: ; 2300 + cp INDOOR + ret z + cp GATE + ret z + cp $5 + ret +; 2309 + + +Function2309: ; 2309 + call Function2326 + call Function2c52 + call Function234f + xor a + call Function2336 + ret +; 2317 + +Function2317: ; 2317 + call Function2326 + call Function2c52 + call Function234f + ld a, $1 + call Function2336 + ret +; 2326 + +Function2326: ; 2326 + call Function2c3d + call Function2c1c + call GetSecondaryMapHeaderPointer + call Function235c + call Function2368 + ret +; 2336 + +Function2336: ; 2336 + push af + ld hl, $d1a6 + ld a, [hli] + ld h, [hl] + ld l, a + inc hl + inc hl + call Function23da + call Function23f1 + call Function2408 + pop af + and a + ret nz + call Function241f + ret +; 234f + +Function234f: ; 234f + ld hl, $d1a4 + ld a, [hli] + ld h, [hl] + ld l, a + call Function23ac + call Function23c3 + ret +; 235c + +Function235c: ; 235c + ld de, $d19d + ld c, $c +.asm_2361 + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .asm_2361 + ret +; 2368 + +Function2368: ; 2368 + ld a, $ff + ld [NorthConnectedMapGroup], a + ld [SouthConnectedMapGroup], a + ld [WestConnectedMapGroup], a + ld [EastConnectedMapGroup], a + + ld a, [$d1a8] + ld b, a + + bit 3, b + jr z, .asm_2384 + ld de, NorthMapConnection + call GetMapConnection + +.asm_2384 + bit 2, b + jr z, .asm_238e + ld de, SouthMapConnection + call GetMapConnection + +.asm_238e + bit 1, b + jr z, .asm_2398 + ld de, WestMapConnection + call GetMapConnection + +.asm_2398 + bit 0, b + jr z, .asm_23a2 + ld de, EastMapConnection + call GetMapConnection + +.asm_23a2 + ret +; 23a3 + + +GetMapConnection: ; 23a3 +; Load map connection struct at hl into de. + ld c, SouthMapConnection - NorthMapConnection +.loop + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .loop + ret +; 23ac + + +Function23ac: ; 23ac + ld a, [hli] + ld c, a + ld [$dc07], a + ld a, l + ld [$dc08], a + ld a, h + ld [$dc09], a + ld a, c + and a + ret z + ld bc, $0004 + call AddNTimes + ret +; 23c3 + +Function23c3: ; 23c3 + ld a, [hli] + ld c, a + ld [$dc0a], a + ld a, l + ld [$dc0b], a + ld a, h + ld [$dc0c], a + ld a, c + and a + ret z + ld bc, $0003 + call AddNTimes + ret +; 23da + +Function23da: ; 23da + ld a, [hli] + ld c, a + ld [$dbfb], a + ld a, l + ld [$dbfc], a + ld a, h + ld [$dbfd], a + ld a, c + and a + ret z + ld bc, $0005 + call AddNTimes + ret +; 23f1 + +Function23f1: ; 23f1 + ld a, [hli] + ld c, a + ld [$dbfe], a + ld a, l + ld [$dbff], a + ld a, h + ld [$dc00], a + ld a, c + and a + ret z + ld bc, $0008 + call AddNTimes + ret +; 2408 + +Function2408: ; 2408 + ld a, [hli] + ld c, a + ld [$dc01], a + ld a, l + ld [$dc02], a + ld a, h + ld [$dc03], a + ld a, c + and a + ret z + ld bc, $0005 + call AddNTimes + ret +; 241f + +Function241f: ; 241f + push hl + call Function2471 + pop de + ld hl, $d72e + ld a, [de] + inc de + ld [$dc04], a + ld a, e + ld [$dc05], a + ld a, d + ld [$dc06], a + ld a, [$dc04] + call Function2457 + ld a, [$dc04] + ld c, a + ld a, $10 + sub c + jr z, .asm_2454 + ld bc, $0001 + add hl, bc + ld bc, $0010 +.asm_244a + ld [hl], $0 + inc hl + ld [hl], $ff + dec hl + add hl, bc + dec a + jr nz, .asm_244a + +.asm_2454 + ld h, d + ld l, e + ret +; 2457 + +Function2457: ; 2457 + and a + ret z + ld c, a +.asm_245a + push bc + push hl + ld a, $ff + ld [hli], a + ld b, $d +.asm_2461 + ld a, [de] + inc de + ld [hli], a + dec b + jr nz, .asm_2461 + pop hl + ld bc, $0010 + add hl, bc + pop bc + dec c + jr nz, .asm_245a + ret +; 2471 + +Function2471: ; 2471 + ld hl, $d4fe + ld bc, $01e0 + xor a + call ByteFill + ld hl, $d4fe + ld de, $0028 + ld c, $c + xor a +.asm_2484 + ld [hl], a + add hl, de + dec c + jr nz, .asm_2484 + ret +; 248a + +Function248a: ; 248a + call GetMapEventBank + rst Bankswitch + + ld hl, $d1a6 + ld a, [hli] + ld h, [hl] + ld l, a + inc hl + inc hl + inc hl + ld a, [WarpNumber] + dec a + ld c, a + ld b, $0 + ld a, $5 + call AddNTimes + ld a, [hli] + ld [YCoord], a + ld a, [hli] + ld [XCoord], a + ld a, [hli] + cp $ff + jr nz, .asm_24b3 + call Function24ba + +.asm_24b3 + ld a, $41 + ld hl, $486d + rst FarCall + ret +; 24ba + +Function24ba: ; 24ba + ld a, [$d149] + ld [$dcac], a + ld a, [$d14a] + ld [BackupMapGroup], a + ld a, [$d14b] + ld [BackupMapNumber], a + ret +; 24cd + +Function24cd: ; 24cd + ld hl, OverworldMap + ld bc, $0514 + ld a, $0 + call ByteFill + call Function24e4 + call FillMapConnections + ld a, $1 + call Function263b + ret +; 24e4 + + + +Function24e4: ; 24e4 + ld a, [hROMBank] + push af + ld hl, OverworldMap + ld a, [$d19f] + ld [hConnectedMapWidth], a + add $6 + ld [hConnectionStripLength], a + ld c, a + ld b, $0 + add hl, bc + add hl, bc + add hl, bc + ld c, $3 + add hl, bc + ld a, [$d1a0] + rst Bankswitch + + ld a, [$d1a1] + ld e, a + ld a, [$d1a2] + ld d, a + ld a, [$d19e] + ld b, a +.asm_250c + push hl + ld a, [hConnectedMapWidth] + ld c, a +.asm_2510 + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .asm_2510 + pop hl + ld a, [hConnectionStripLength] + add l + ld l, a + jr nc, .asm_251e + inc h + +.asm_251e + dec b + jr nz, .asm_250c + pop af + rst Bankswitch + + ret +; 2524 + + + +FillMapConnections: ; 2524 + +; North + ld a, [NorthConnectedMapGroup] + cp $ff + jr z, .South + ld b, a + ld a, [NorthConnectedMapNumber] + ld c, a + call GetAnyMapBlockdataBank + + ld a, [NorthConnectionStripPointer] + ld l, a + ld a, [NorthConnectionStripPointer + 1] + ld h, a + ld a, [NorthConnectionStripLocation] + ld e, a + ld a, [NorthConnectionStripLocation + 1] + ld d, a + ld a, [NorthConnectionStripLength] + ld [hConnectionStripLength], a + ld a, [NorthConnectedMapWidth] + ld [hConnectedMapWidth], a + call FillNorthConnectionStrip + +.South + ld a, [SouthConnectedMapGroup] + cp $ff + jr z, .West + ld b, a + ld a, [SouthConnectedMapNumber] + ld c, a + call GetAnyMapBlockdataBank + + ld a, [SouthConnectionStripPointer] + ld l, a + ld a, [SouthConnectionStripPointer + 1] + ld h, a + ld a, [SouthConnectionStripLocation] + ld e, a + ld a, [SouthConnectionStripLocation + 1] + ld d, a + ld a, [SouthConnectionStripLength] + ld [hConnectionStripLength], a + ld a, [SouthConnectedMapWidth] + ld [hConnectedMapWidth], a + call FillSouthConnectionStrip + +.West + ld a, [WestConnectedMapGroup] + cp $ff + jr z, .East + ld b, a + ld a, [WestConnectedMapNumber] + ld c, a + call GetAnyMapBlockdataBank + + ld a, [WestConnectionStripPointer] + ld l, a + ld a, [WestConnectionStripPointer + 1] + ld h, a + ld a, [WestConnectionStripLocation] + ld e, a + ld a, [WestConnectionStripLocation + 1] + ld d, a + ld a, [WestConnectionStripLength] + ld b, a + ld a, [WestConnectedMapWidth] + ld [hConnectionStripLength], a + call FillWestConnectionStrip + +.East + ld a, [EastConnectedMapGroup] + cp $ff + jr z, .Done + ld b, a + ld a, [EastConnectedMapNumber] + ld c, a + call GetAnyMapBlockdataBank + + ld a, [EastConnectionStripPointer] + ld l, a + ld a, [EastConnectionStripPointer + 1] + ld h, a + ld a, [EastConnectionStripLocation] + ld e, a + ld a, [EastConnectionStripLocation + 1] + ld d, a + ld a, [EastConnectionStripLength] + ld b, a + ld a, [EastConnectedMapWidth] + ld [hConnectionStripLength], a + call FillEastConnectionStrip + +.Done + ret +; 25d3 + + +FillNorthConnectionStrip: +FillSouthConnectionStrip: ; 25d3 + + ld c, 3 +.y + push de + + push hl + ld a, [hConnectionStripLength] + ld b, a +.x + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .x + pop hl + + ld a, [hConnectedMapWidth] + ld e, a + ld d, 0 + add hl, de + pop de + + ld a, [$d19f] + add 6 + add e + ld e, a + jr nc, .asm_25f2 + inc d +.asm_25f2 + dec c + jr nz, .y + ret +; 25f6 + + +FillWestConnectionStrip: +FillEastConnectionStrip: ; 25f6 + +.asm_25f6 + ld a, [$d19f] + add 6 + ld [hConnectedMapWidth], a + + push de + + push hl + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + pop hl + + ld a, [hConnectionStripLength] + ld e, a + ld d, 0 + add hl, de + pop de + + ld a, [hConnectedMapWidth] + add e + ld e, a + jr nc, .asm_2617 + inc d +.asm_2617 + dec b + jr nz, .asm_25f6 + ret +; 261b + +Function261b: ; 261b + ld [$d432], a + ret +; 261f + + +CallScript: ; 261f +; Call a script at a:hl. + + ld [ScriptBank], a + ld a, l + ld [ScriptPos], a + ld a, h + ld [ScriptPos + 1], a + + ld a, $ff + ld [ScriptRunning], a + + scf + ret +; 2631 + +Function2631: ; 2631 + ld a, [ScriptRunning] + and a + ret nz + call GetMapEventBank + jr CallScript +; 263b + +Function263b: ; 263b + ld b, a + ld a, [hROMBank] + push af + call Function2c52 + call Function2653 + jr nc, .done + + call GetMapEventBank + ld b, a + ld d, h + ld e, l + call Function2674 + +.done + pop af + rst Bankswitch + ret +; 2653 + +Function2653: ; 2653 + ld a, [$dc0a] + ld c, a + and a + ret z + ld hl, $dc0b + ld a, [hli] + ld h, [hl] + ld l, a + or h + ret z + ld de, $0003 +.asm_2664 + ld a, [hl] + cp b + jr z, .asm_266e + add hl, de + dec c + jr nz, .asm_2664 + xor a + ret + +.asm_266e + inc hl + ld a, [hli] + ld h, [hl] + ld l, a + scf + ret +; 2674 + +Function2674: ; 2674 + callba Unknown_0x974f3 + ld a, [ScriptMode] + push af + ld hl, ScriptFlags + ld a, [hl] + push af + set 1, [hl] + callba Function96c56 + callba ScriptEvents + pop af + ld [ScriptFlags], a + pop af + ld [ScriptMode], a + ret +; 269a + +Function269a: ; 269a + ld a, [hROMBank] + push af + ld a, b + rst Bankswitch + + push hl + call SpeechTextBox + call Function2e31 + ld a, 1 + ld [hOAMUpdate], a + call Function321c + pop hl + call PrintTextBoxText + xor a + ld [hOAMUpdate], a + pop af + rst Bankswitch + + ret +; 26b7 + +Function26b7: ; 26b7 +; Call a:de. + + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + + call .de + + pop af + rst Bankswitch + ret + +.de + push de + ret +; 26c7 + +Function26c7: ; 26c7 + ld a, [hROMBank] + push af + ld a, b + rst Bankswitch + + ld a, c + call Function19e9 + + pop hl + ld a, h + rst Bankswitch + ret +; 26d4 + + +GetScriptByte: ; 0x26d4 +; Return byte at ScriptBank:ScriptPos in a. + + push hl + push bc + ld a, [hROMBank] + push af + ld a, [ScriptBank] + rst Bankswitch + + ld hl, ScriptPos + ld c, [hl] + inc hl + ld b, [hl] + + ld a, [bc] + + inc bc + ld [hl], b + dec hl + ld [hl], c + + ld b, a + pop af + rst Bankswitch + ld a, b + pop bc + pop hl + ret +; 0x26ef + + +ObjectEvent: ; 0x26ef + jumptextfaceplayer ObjectEventText +; 0x26f2 + +ObjectEventText: + TX_FAR _ObjectEventText + db "@" +; 0x26f7 + + +BGEvent: ; 26f7 + jumptext BGEventText +; 26fa + +BGEventText: ; 26fa + text_jump UnknownText_0x1c46fc, BANK(UnknownText_0x1c46fc) + db "@" +; 26ff + + +CoordinatesEvent: ; 26ff + jumptext CoordinatesEventText +; 2702 + +CoordinatesEventText: ; 2702 + text_jump UnknownText_0x1c4706, BANK(UnknownText_0x1c4706) + db "@" +; 2707 + + +Function2707: ; 2707 + ld a, [hConnectionStripLength] + ld e, a + ld d, $0 + ld hl, $d81e + add hl, de + ld a, [hl] + ret +; 2712 + +Function2712: ; 2712 + ld a, [hConnectionStripLength] + ld e, a + ld d, $0 + ld hl, $d81e + add hl, de + ld [hl], $ff + ret +; 271e + +Function271e: ; 271e + ld a, [hConnectionStripLength] + ld e, a + ld d, $0 + ld hl, $d81e + add hl, de + ld [hl], $0 + ret +; 272a + + +Function272a: ; 272a + ld hl, TileMap + ld de, BGMapBuffer + call Function27b7 + ld c, $28 + call Functiondbd + ld a, [$d152] + ld e, a + ld a, [$d153] + ld d, a + call Function27d3 + ld a, $1 + ld [hBGMapUpdate], a + ret +; 2748 + +Function2748: ; 2748 + ld hl, $c5e0 + ld de, BGMapBuffer + call Function27b7 + ld c, $28 + call Functiondbd + ld a, [$d152] + ld l, a + ld a, [$d153] + ld h, a + ld bc, $0200 + add hl, bc + ld a, h + and $3 + or $98 + ld e, l + ld d, a + call Function27d3 + ld a, $1 + ld [hBGMapUpdate], a + ret +; 2771 + +Function2771: ; 2771 + ld hl, TileMap + ld de, BGMapBuffer + call Function27c0 + ld c, $24 + call Functiondbd + ld a, [$d152] + ld e, a + ld a, [$d153] + ld d, a + call Function27f8 + ld a, $1 + ld [hBGMapUpdate], a + ret +; 278f + +Function278f: ; 278f + ld hl, $c4b2 + ld de, BGMapBuffer + call Function27c0 + ld c, $24 + call Functiondbd + ld a, [$d152] + ld e, a + and $e0 + ld b, a + ld a, e + add $12 + and $1f + or b + ld e, a + ld a, [$d153] + ld d, a + call Function27f8 + ld a, $1 + ld [hBGMapUpdate], a + ret +; 27b7 + +Function27b7: ; 27b7 + ld c, $28 +.asm_27b9 + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .asm_27b9 + ret +; 27c0 + +Function27c0: ; 27c0 + ld c, $12 +.asm_27c2 + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + inc de + ld a, $13 + add l + ld l, a + jr nc, .asm_27cf + inc h + +.asm_27cf + dec c + jr nz, .asm_27c2 + ret +; 27d3 + +Function27d3: ; 27d3 + ld hl, BGMapBufferPtrs + push de + call .asm_27df + pop de + ld a, $20 + add e + ld e, a + +.asm_27df + ld c, $a +.asm_27e1 + ld a, e + ld [hli], a + ld a, d + ld [hli], a + ld a, e + inc a + inc a + and $1f + ld b, a + ld a, e + and $e0 + or b + ld e, a + dec c + jr nz, .asm_27e1 + ld a, $14 + ld [$ffdc], a + ret +; 27f8 + +Function27f8: ; 27f8 + ld hl, BGMapBufferPtrs + ld c, $12 +.asm_27fd + ld a, e + ld [hli], a + ld a, d + ld [hli], a + ld a, $20 + add e + ld e, a + jr nc, .asm_280e + inc d + ld a, d + and $3 + or $98 + ld d, a + +.asm_280e + dec c + jr nz, .asm_27fd + ld a, $12 + ld [$ffdc], a + ret +; 2816 + +Function2816: ; 2816 + ld hl, BGMapBuffer + ld bc, $0078 + xor a + call ByteFill + ret +; 2821 + +Function2821: ; 2821 + ld hl, TilesetAddress + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [TilesetBank] + ld e, a + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + ld a, e + ld de, $d000 + call FarDecompress + ld hl, $d000 + ld de, VTiles2 + ld bc, $0600 + call CopyBytes + ld a, [rVBK] + push af + ld a, $1 + ld [rVBK], a + ld hl, $d600 + ld de, VTiles2 + ld bc, $0600 + call CopyBytes + pop af + ld [rVBK], a + pop af + ld [rSVBK], a + ld a, [$d199] + cp $1 + jr z, .asm_286f + cp $2 + jr z, .asm_286f + cp $4 + jr z, .asm_286f + jr .asm_2875 + +.asm_286f + ld a, $7 + ld hl, $4000 + rst FarCall + +.asm_2875 + xor a + ld [hTileAnimFrame], a + ret +; 2879 + +Function2879: ; 2879 + ld hl, $d194 + ld a, [hli] + ld h, [hl] + ld l, a + ld de, $dcb9 + ld c, $5 + ld b, $6 +.asm_2886 + push bc + push hl +.asm_2888 + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .asm_2888 + pop hl + ld a, [$d19f] + add $6 + ld c, a + ld b, $0 + add hl, bc + pop bc + dec c + jr nz, .asm_2886 + ret +; 289d + +Function289d: ; 289d + ld hl, $d194 + ld a, [hli] + ld h, [hl] + ld l, a + ld de, $dcb9 + ld a, [$d19f] + add $6 + ld [hConnectionStripLength], a + ld a, [$d151] + and a + jr z, .asm_28cb + cp $1 + jr z, .asm_28c0 + cp $2 + jr z, .asm_28d4 + cp $3 + jr z, .asm_28da + ret + +.asm_28c0 + ld de, $dcbf + ld a, [hConnectionStripLength] + ld c, a + ld b, $0 + add hl, bc + jr .asm_28ce + +.asm_28cb + ld de, $dcb9 + +.asm_28ce + ld b, $6 + ld c, $4 + jr .asm_28f7 + +.asm_28d4 + ld de, $dcba + inc hl + jr .asm_28dd + +.asm_28da + ld de, $dcb9 + +.asm_28dd + ld b, $5 + ld c, $5 + jr .asm_28f7 + + ld hl, $d194 + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [$d19f] + add $6 + ld [hConnectionStripLength], a + ld de, $dcb9 + ld b, $6 + ld c, $5 + +.asm_28f7 + push bc + push hl + push de +.asm_28fa + ld a, [de] + inc de + ld [hli], a + dec b + jr nz, .asm_28fa + pop de + ld a, e + add $6 + ld e, a + jr nc, .asm_2908 + inc d + +.asm_2908 + pop hl + ld a, [hConnectionStripLength] + ld c, a + ld b, $0 + add hl, bc + pop bc + dec c + jr nz, .asm_28f7 + ret +; 2914 + +Function2914: ; 2914 + xor a + ld [TilePermissions], a + call Function296c + call Function294d + ld a, [MapX] + ld d, a + ld a, [MapY] + ld e, a + call Function2a3c + ld [StandingTile], a + call Function29ff + ret nz + ld a, [StandingTile] + and 7 + ld hl, .data_2945 + add l + ld l, a + ld a, 0 + adc h + ld h, a + ld a, [hl] + ld hl, TilePermissions + or [hl] + ld [hl], a + ret +; 2945 + +.data_2945 ; 2945 + db 1, 2, 4, 8, 9, 10, 5, 6 +; 294d + +Function294d: ; 294d + ld a, [MapX] + ld d, a + ld a, [MapY] + ld e, a + push de + inc e + call Function2a3c + ld [TileDown], a + call Function298b + pop de + dec e + call Function2a3c + ld [TileUp], a + call Function29a8 + ret +; 296c + +Function296c: ; 296c + ld a, [MapX] + ld d, a + ld a, [MapY] + ld e, a + push de + dec d + call Function2a3c + ld [TileLeft], a + call Function29e2 + pop de + inc d + call Function2a3c + ld [TileRight], a + call Function29c5 + ret +; 298b + +Function298b: ; 298b + call Function29ff + ret nz + ld a, [TileDown] + and $7 + cp $2 + jr z, .asm_299f + cp $6 + jr z, .asm_299f + cp $7 + ret nz + +.asm_299f + ld a, [TilePermissions] + or $8 + ld [TilePermissions], a + ret +; 29a8 + +Function29a8: ; 29a8 + call Function29ff + ret nz + ld a, [TileUp] + and $7 + cp $3 + jr z, .asm_29bc + cp $4 + jr z, .asm_29bc + cp $5 + ret nz + +.asm_29bc + ld a, [TilePermissions] + or $4 + ld [TilePermissions], a + ret +; 29c5 + +Function29c5: ; 29c5 + call Function29ff + ret nz + ld a, [TileRight] + and $7 + cp $1 + jr z, .asm_29d9 + cp $5 + jr z, .asm_29d9 + cp $7 + ret nz + +.asm_29d9 + ld a, [TilePermissions] + or $1 + ld [TilePermissions], a + ret +; 29e2 + +Function29e2: ; 29e2 + call Function29ff + ret nz + ld a, [TileLeft] + and $7 + cp $0 + jr z, .asm_29f6 + cp $4 + jr z, .asm_29f6 + cp $6 + ret nz + +.asm_29f6 + ld a, [TilePermissions] + or $2 + ld [TilePermissions], a + ret +; 29ff + +Function29ff: ; 29ff + and $f0 + cp $b0 + ret z + cp $c0 + ret +; 2a07 + + +GetFacingTileCoord: ; 2a07 +; Return map coordinates in (d, e) and tile id in a +; of the tile the player is facing. + + ld a, [PlayerDirection] + and %1100 + srl a + srl a + ld l, a + ld h, 0 + add hl, hl + add hl, hl + ld de, .Directions + add hl, de + + ld d, [hl] + inc hl + ld e, [hl] + inc hl + + ld a, [hli] + ld h, [hl] + ld l, a + + ld a, [MapX] + add d + ld d, a + ld a, [MapY] + add e + ld e, a + ld a, [hl] + ret + +.Directions + ; x, y + db 0, 1 + dw TileDown + db 0, -1 + dw TileUp + db -1, 0 + dw TileLeft + db 1, 0 + dw TileRight +; 2a3c + + +Function2a3c: ; 2a3c + call Function2a66 + ld a, [hl] + and a + jr z, .asm_2a63 + ld l, a + ld h, $0 + add hl, hl + add hl, hl + ld a, [TilesetCollisionAddress] + ld c, a + ld a, [$d1e1] + ld b, a + add hl, bc + rr d + jr nc, .asm_2a56 + inc hl + +.asm_2a56 + rr e + jr nc, .asm_2a5c + inc hl + inc hl + +.asm_2a5c + ld a, [TilesetCollisionBank] + call GetFarByte + ret + +.asm_2a63 + ld a, $ff + ret +; 2a66 + +Function2a66: ; 2a66 + ld a, [$d19f] + add $6 + ld c, a + ld b, $0 + ld hl, $c801 + add hl, bc + ld a, e + srl a + jr z, .asm_2a84 + and a +.asm_2a78 + srl a + jr nc, .asm_2a7d + add hl, bc + +.asm_2a7d + sla c + rl b + and a + jr nz, .asm_2a78 + +.asm_2a84 + ld c, d + srl c + ld b, $0 + add hl, bc + ret +; 2a8b + + +CheckFacingSign: ; 2a8b + call GetFacingTileCoord + ld b, a + ld a, d + sub 4 + ld d, a + ld a, e + sub 4 + ld e, a + ld a, [$dc01] + and a + ret z + ld c, a + ld a, [hROMBank] + push af + call Function2c52 + call Function2aaa + pop hl + ld a, h + rst Bankswitch + ret +; 2aaa + +Function2aaa: ; 2aaa + ld hl, $dc02 + ld a, [hli] + ld h, [hl] + ld l, a +.asm_2ab0 + push hl + ld a, [hli] + cp e + jr nz, .asm_2abb + ld a, [hli] + cp d + jr nz, .asm_2abb + jr .asm_2ac8 + +.asm_2abb + pop hl + ld a, 5 + add l + ld l, a + jr nc, .asm_2ac3 + inc h + +.asm_2ac3 + dec c + jr nz, .asm_2ab0 + xor a + ret + +.asm_2ac8 + pop hl + ld de, EngineBuffer1 + ld bc, 5 + call CopyBytes + scf + ret +; 2ad4 + +Function2ad4: ; 2ad4 + ld a, [$dbfe] + and a + ret z + ld c, a + ld a, [hROMBank] + push af + call Function2c52 + call Function2ae7 + pop hl + ld a, h + rst Bankswitch + ret +; 2ae7 + +Function2ae7: ; 2ae7 + ld hl, $dbff + ld a, [hli] + ld h, [hl] + ld l, a + call Function211b + ld b, a + ld a, [MapX] + sub $4 + ld d, a + ld a, [MapY] + sub $4 + ld e, a +.asm_2afd + push hl + ld a, [hli] + cp b + jr z, .asm_2b06 + cp $ff + jr nz, .asm_2b10 + +.asm_2b06 + ld a, [hli] + cp e + jr nz, .asm_2b10 + ld a, [hli] + cp d + jr nz, .asm_2b10 + jr .asm_2b1d + +.asm_2b10 + pop hl + ld a, $8 + add l + ld l, a + jr nc, .asm_2b18 + inc h + +.asm_2b18 + dec c + jr nz, .asm_2afd + xor a + ret + +.asm_2b1d + pop hl + ld de, EngineBuffer1 + ld bc, $0008 + call CopyBytes + scf + ret +; 2b29 + + +FadeToMenu: ; 2b29 + xor a + ld [hBGMapMode], a + call Function1d6e + ld a, $23 + ld hl, $4084 + rst FarCall + call ClearSprites + call Function2ed3 + ret +; 2b3c + + +Function2b3c: ; 2b3c + call WhiteBGMap + call Function2bae + call Function1ad2 + call Function1d7d + call Functiond90 + jr Function2b5c +; 2b4d + +Function2b4d: ; 2b4d + call WhiteBGMap + call Function1d7d + call Function2bae + call Function1ad2 + call Functiond90 +; 2b5c + +Function2b5c: ; 2b5c + ld b, $9 + call GetSGBLayout + ld a, $12 + ld hl, $5409 + rst FarCall + call Function3200 + ld a, $23 + ld hl, $4079 + rst FarCall + call Function2ee4 + ret +; 2b74 + + +Function2b74: ; 0x2b74 + push af + ld a, $1 + ld [$c2ce], a + call WhiteBGMap + call ClearSprites + call Function2bae + ld hl, $c590 ; tile 0, 12 + ld bc, $0412 + call TextBox + ld hl, VramState + set 0, [hl] + call Function1ad2 + call Function3200 + ld b, $9 + call GetSGBLayout + callba Function49409 + call UpdateTimePals + call DelayFrame + ld a, $1 + ld [$ffde], a + pop af + ret +; 0x2bae + +Function2bae: ; 2bae + call DisableLCD + call ClearSprites + ld a, $5 + ld hl, $4168 + rst FarCall + call Functione51 + call Functione5f + ld a, [hROMBank] + push af + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a + call Function2c24 + ld a, $23 + ld hl, $4001 + rst FarCall + call Function2173 + call Function2821 + ld a, $9 + call Function3cb4 + pop af + rst Bankswitch + + call EnableLCD + ret +; 2be5 + + +GetMapHeaderPointer: ; 2be5 + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a +; 2bed + +GetAnyMapHeaderPointer: ; 0x2bed +; Prior to calling this function, you must have switched banks so that +; MapGroupPointers is visible. + +; inputs: +; b = map group, c = map number +; XXX de = ??? + +; outputs: +; hl points to the map header + push bc ; save map number for later + + ; get pointer to map group + dec b + ld c, b + ld b, $0 + ld hl, MapGroupPointers + add hl, bc + add hl, bc + + ld a, [hli] + ld h, [hl] + ld l, a + pop bc ; restore map number + + ; find the cth map header + dec c + ld b, $0 + ld a, OlivineGym_MapHeader - OlivinePokeCenter1F_MapHeader + call AddNTimes + ret +; 0x2c04 + +GetMapHeaderMember: ; 0x2c04 +; Extract data from the current map's header. + +; inputs: +; de = offset of desired data within the mapheader + +; outputs: +; bc = data from the current map's header +; (e.g., de = $0003 would return a pointer to the secondary map header) + + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a + ; fallthrough + +GetAnyMapHeaderMember: ; 0x2c0c + ; bankswitch + ld a, [hROMBank] + push af + ld a, BANK(MapGroupPointers) + rst Bankswitch + + call GetAnyMapHeaderPointer + add hl, de + ld c, [hl] + inc hl + ld b, [hl] + + ; bankswitch back + pop af + rst Bankswitch + ret +; 0x2c1c + + +Function2c1c: ; 2c1c + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a +; 2c24 + +Function2c24: ; 2c24 + call Function2c31 + rst Bankswitch + ret +; 2c29 + + +Function2c29: ; 2c29 + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a +; 2c31 + +Function2c31: ; 2c31 + push hl + push de + ld de, $0000 + call GetAnyMapHeaderMember + ld a, c + pop de + pop hl + ret +; 2c3d + +Function2c3d: ; 2c3d + ld a, [hROMBank] + push af + ld a, $25 + rst Bankswitch + call GetMapHeaderPointer + ld de, $d198 + ld bc, $0005 + call CopyBytes + pop af + rst Bankswitch + ret +; 2c52 + +Function2c52: ; 2c52 + ld a, [MapEventBank] + rst Bankswitch + ret +; 2c57 + + +GetMapEventBank: ; 2c57 + ld a, [MapEventBank] + ret +; 2c5b + +GetAnyMapBlockdataBank: ; 2c5b +; Return the blockdata bank for group b map c. + push hl + push de + push bc + + push bc + ld de, 3 ; second map header pointer + call GetAnyMapHeaderMember + ld l, c + ld h, b + pop bc + + push hl + ld de, 0 ; second map header bank + call GetAnyMapHeaderMember + pop hl + + ld de, 3 ; blockdata bank + add hl, de + ld a, c + call GetFarByte + rst Bankswitch + + pop bc + pop de + pop hl + ret +; 2c7d + +GetSecondaryMapHeaderPointer: ; 0x2c7d +; returns the current map's secondary map header pointer in hl. + push bc + push de + ld de, $0003 ; secondary map header pointer (offset within header) + call GetMapHeaderMember + ld l, c + ld h, b + pop de + pop bc + ret +; 2c8a + +GetMapPermission: ; 2c8a + push hl + push de + push bc + ld de, 2 + call GetMapHeaderMember + ld a, c + pop bc + pop de + pop hl + ret +; 2c98 + +Function2c98: ; 2c98 + ret +; 2c99 + +Function2c99: ; 2c99 + push hl + push de + push bc + ld de, $0002 + call GetAnyMapHeaderMember + ld a, c + pop bc + pop de + pop hl + ret +; 2ca7 + +Function2ca7: ; 2ca7 + ld de, $0001 + call GetAnyMapHeaderMember + ld a, c + ret +; 2caf + +GetWorldMapLocation: ; 0x2caf +; given a map group/id in bc, return its location on the Pokégear map. + push hl + push de + push bc + ld de, 5 + call GetAnyMapHeaderMember + ld a, c + pop bc + pop de + pop hl + ret +; 0x2cbd + +Function2cbd: ; 2cbd + push hl + push bc + ld de, $0006 + call GetMapHeaderMember + ld a, c + cp $64 + jr z, .asm_2cee + bit 7, c + jr nz, .asm_2cda + ld a, $22 + ld hl, $7342 + rst FarCall + ld e, c + ld d, $0 +.asm_2cd7 + pop bc + pop hl + ret + +.asm_2cda + ld a, [StatusFlags2] + bit 0, a + jr z, .asm_2ce6 + ld de, $0056 + jr .asm_2cd7 + +.asm_2ce6 + ld a, c + and $7f + ld e, a + ld d, $0 + jr .asm_2cd7 + +.asm_2cee + ld a, [StatusFlags2] + bit 7, a + jr z, .asm_2cfa + ld de, $0048 + jr .asm_2cd7 + +.asm_2cfa + ld de, $0026 + jr .asm_2cd7 +; 2cff + +Function2cff: ; 2cff + call Function2d0d + and $f + ret +; 2d05 + +Function2d05: ; 2d05 + call Function2d0d + and $f0 + swap a + ret +; 2d0d + +Function2d0d: ; 2d0d + push hl + push bc + ld de, $0007 + call GetMapHeaderMember + ld a, c + pop bc + pop hl + ret +; 2d19 + +Function2d19: ; 2d19 + push de + push hl + push bc + ld de, $0008 + call GetMapHeaderMember + ld a, c + pop bc + pop hl + pop de + ret +; 2d27 + +Function2d27: ; 2d27 + push hl + push bc + ld hl, $5596 + ld bc, $000f + ld a, [$d199] + call AddNTimes + ld de, TilesetBank + ld bc, $000f + ld a, $13 + call FarCopyBytes + pop bc + pop hl + ret +; 2d43 + diff --git a/main.asm b/main.asm index e5f9675d7..f53f5d4bf 100644 --- a/main.asm +++ b/main.asm @@ -517,2373 +517,8 @@ AskSerial: ; 2063 INCLUDE "common/game_time.asm" +INCLUDE "common/map.asm" -Function210f: ; 210f - ld hl, $c7e8 - ld bc, $0018 - ld a, $0 - call ByteFill - ret -; 211b - -Function211b: ; 211b - push hl - ld hl, $dbf7 - ld a, [hli] - ld h, [hl] - ld l, a - or h - ld a, [hl] - jr nz, .asm_2128 - ld a, $ff - -.asm_2128 - pop hl - ret -; 212a - -Function212a: ; 212a - ld a, [MapGroup] - ld b, a - ld a, [MapNumber] - ld c, a - xor a - ld [$dbf7], a - ld [$dbf8], a - call Function2147 - ret c - ld a, e - ld [$dbf7], a - ld a, d - ld [$dbf8], a - xor a - ret -; 2147 - -Function2147: ; 2147 - push bc - ld a, [hROMBank] - push af - ld a, $13 - rst Bankswitch - - ld hl, $501e -.asm_2151 - push hl - ld a, [hli] - cp $ff - jr z, .asm_2167 - cp b - jr nz, .asm_2160 - ld a, [hli] - cp c - jr nz, .asm_2160 - jr .asm_216a - -.asm_2160 - pop hl - ld de, $0004 - add hl, de - jr .asm_2151 - -.asm_2167 - scf - jr .asm_216d - -.asm_216a - ld e, [hl] - inc hl - ld d, [hl] - -.asm_216d - pop hl - pop bc - ld a, b - rst Bankswitch - - pop bc - ret -; 2173 - -Function2173: ; 2173 - call Function217a - call Functiondb1 - ret -; 217a - -Function217a: ; 217a - ld a, [hROMBank] - push af - ld a, [TilesetBlocksBank] - rst Bankswitch - - call Function2198 - ld a, $60 - ld hl, TileMap - ld bc, $0168 - call ByteFill - ld a, $13 - rst Bankswitch - - call $515b - pop af - rst Bankswitch - - ret -; 2198 - -Function2198: ; 2198 - ld a, [$d194] - ld e, a - ld a, [$d195] - ld d, a - ld hl, EnemyMoveAnimation - ld b, $5 - -.asm_21a5 - push de - push hl - ld c, $6 - -.asm_21a9 - push de - push hl - ld a, [de] - and a - jr nz, .asm_21b2 - ld a, [$d19d] - -.asm_21b2 - ld e, l - ld d, h - add a - ld l, a - ld h, $0 - add hl, hl - add hl, hl - add hl, hl - ld a, [TilesetBlocksAddress] - add l - ld l, a - ld a, [TilesetBlocksAddress + 1] - adc h - ld h, a - -rept 3 - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - - ld a, e - add 20 - ld e, a - jr nc, .next\@ - inc d -.next\@ -endr - - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - - pop hl - ld de, $0004 - add hl, de - pop de - inc de - dec c - jp nz, .asm_21a9 - pop hl - ld de, $0060 - add hl, de - pop de - ld a, [$d19f] - add $6 - add e - ld e, a - jr nc, .asm_2225 - inc d - -.asm_2225 - dec b - jp nz, .asm_21a5 - ret -; 222a - -Function222a: ; 222a - ld a, $fa - ld [$ff9f], a - callba Function15363 - xor a - ld [$ff9f], a - ret -; 2238 - -Function2238: ; 2238 - call Function2252 - ret nc - push bc - callba Function149af - pop bc - ret nc - call Function22a7 - scf - ret -; 224a - - - -Function224a: ; 224a - call Function2252 - ret nc - call Function22a7 - ret -; 2252 - -Function2252: ; 2252 - callba Function1499a - ret nc - - ld a, [hROMBank] - push af - - call Function2c52 - call Function2266 - - pop de - ld a, d - rst Bankswitch - ret -; 2266 - -Function2266: ; 2266 - ld a, [MapY] - sub $4 - ld e, a - ld a, [MapX] - sub $4 - ld d, a - ld a, [$dbfb] - and a - ret z - ld c, a - ld hl, $dbfc - ld a, [hli] - ld h, [hl] - ld l, a -.asm_227e - push hl - ld a, [hli] - cp e - jr nz, .asm_2289 - ld a, [hli] - cp d - jr nz, .asm_2289 - jr .asm_2296 - -.asm_2289 - pop hl - ld a, $5 - add l - ld l, a - jr nc, .asm_2291 - inc h - -.asm_2291 - dec c - jr nz, .asm_227e - xor a - ret - -.asm_2296 - pop hl - call Function22a3 - ret nc - ld a, [$dbfb] - inc a - sub c - ld c, a - scf - ret -; 22a3 - -Function22a3: ; 22a3 - inc hl - inc hl - scf - ret -; 22a7 - -Function22a7: ; 22a7 - ld a, [hROMBank] - push af - - call Function2c52 - call Function22b4 - - pop af - rst Bankswitch - scf - ret -; 22b4 - -Function22b4: ; 22b4 - push bc - ld hl, $dbfc - ld a, [hli] - ld h, [hl] - ld l, a - ld a, c - dec a - ld bc, $0005 - call AddNTimes - ld bc, $0002 - add hl, bc - ld a, [hli] - cp $ff - jr nz, .asm_22d0 - ld hl, $dcac - ld a, [hli] - -.asm_22d0 - pop bc - ld [$d146], a - ld a, [hli] - ld [$d147], a - ld a, [hli] - ld [$d148], a - ld a, c - ld [$d149], a - ld a, [MapGroup] - ld [$d14a], a - ld a, [MapNumber] - ld [$d14b], a - scf - ret -; 22ee - - - -CheckOutdoorMap: ; 22ee - cp ROUTE - ret z - cp TOWN - ret -; 22f4 - -CheckIndoorMap: ; 22f4 - cp INDOOR - ret z - cp CAVE - ret z - cp DUNGEON - ret z - cp GATE - ret -; 2300 - -Function2300: ; 2300 - cp INDOOR - ret z - cp GATE - ret z - cp $5 - ret -; 2309 - - -Function2309: ; 2309 - call Function2326 - call Function2c52 - call Function234f - xor a - call Function2336 - ret -; 2317 - -Function2317: ; 2317 - call Function2326 - call Function2c52 - call Function234f - ld a, $1 - call Function2336 - ret -; 2326 - -Function2326: ; 2326 - call Function2c3d - call Function2c1c - call GetSecondaryMapHeaderPointer - call Function235c - call Function2368 - ret -; 2336 - -Function2336: ; 2336 - push af - ld hl, $d1a6 - ld a, [hli] - ld h, [hl] - ld l, a - inc hl - inc hl - call Function23da - call Function23f1 - call Function2408 - pop af - and a - ret nz - call Function241f - ret -; 234f - -Function234f: ; 234f - ld hl, $d1a4 - ld a, [hli] - ld h, [hl] - ld l, a - call Function23ac - call Function23c3 - ret -; 235c - -Function235c: ; 235c - ld de, $d19d - ld c, $c -.asm_2361 - ld a, [hli] - ld [de], a - inc de - dec c - jr nz, .asm_2361 - ret -; 2368 - -Function2368: ; 2368 - ld a, $ff - ld [NorthConnectedMapGroup], a - ld [SouthConnectedMapGroup], a - ld [WestConnectedMapGroup], a - ld [EastConnectedMapGroup], a - - ld a, [$d1a8] - ld b, a - - bit 3, b - jr z, .asm_2384 - ld de, NorthMapConnection - call GetMapConnection - -.asm_2384 - bit 2, b - jr z, .asm_238e - ld de, SouthMapConnection - call GetMapConnection - -.asm_238e - bit 1, b - jr z, .asm_2398 - ld de, WestMapConnection - call GetMapConnection - -.asm_2398 - bit 0, b - jr z, .asm_23a2 - ld de, EastMapConnection - call GetMapConnection - -.asm_23a2 - ret -; 23a3 - - -GetMapConnection: ; 23a3 -; Load map connection struct at hl into de. - ld c, SouthMapConnection - NorthMapConnection -.loop - ld a, [hli] - ld [de], a - inc de - dec c - jr nz, .loop - ret -; 23ac - - -Function23ac: ; 23ac - ld a, [hli] - ld c, a - ld [$dc07], a - ld a, l - ld [$dc08], a - ld a, h - ld [$dc09], a - ld a, c - and a - ret z - ld bc, $0004 - call AddNTimes - ret -; 23c3 - -Function23c3: ; 23c3 - ld a, [hli] - ld c, a - ld [$dc0a], a - ld a, l - ld [$dc0b], a - ld a, h - ld [$dc0c], a - ld a, c - and a - ret z - ld bc, $0003 - call AddNTimes - ret -; 23da - -Function23da: ; 23da - ld a, [hli] - ld c, a - ld [$dbfb], a - ld a, l - ld [$dbfc], a - ld a, h - ld [$dbfd], a - ld a, c - and a - ret z - ld bc, $0005 - call AddNTimes - ret -; 23f1 - -Function23f1: ; 23f1 - ld a, [hli] - ld c, a - ld [$dbfe], a - ld a, l - ld [$dbff], a - ld a, h - ld [$dc00], a - ld a, c - and a - ret z - ld bc, $0008 - call AddNTimes - ret -; 2408 - -Function2408: ; 2408 - ld a, [hli] - ld c, a - ld [$dc01], a - ld a, l - ld [$dc02], a - ld a, h - ld [$dc03], a - ld a, c - and a - ret z - ld bc, $0005 - call AddNTimes - ret -; 241f - -Function241f: ; 241f - push hl - call Function2471 - pop de - ld hl, $d72e - ld a, [de] - inc de - ld [$dc04], a - ld a, e - ld [$dc05], a - ld a, d - ld [$dc06], a - ld a, [$dc04] - call Function2457 - ld a, [$dc04] - ld c, a - ld a, $10 - sub c - jr z, .asm_2454 - ld bc, $0001 - add hl, bc - ld bc, $0010 -.asm_244a - ld [hl], $0 - inc hl - ld [hl], $ff - dec hl - add hl, bc - dec a - jr nz, .asm_244a - -.asm_2454 - ld h, d - ld l, e - ret -; 2457 - -Function2457: ; 2457 - and a - ret z - ld c, a -.asm_245a - push bc - push hl - ld a, $ff - ld [hli], a - ld b, $d -.asm_2461 - ld a, [de] - inc de - ld [hli], a - dec b - jr nz, .asm_2461 - pop hl - ld bc, $0010 - add hl, bc - pop bc - dec c - jr nz, .asm_245a - ret -; 2471 - -Function2471: ; 2471 - ld hl, $d4fe - ld bc, $01e0 - xor a - call ByteFill - ld hl, $d4fe - ld de, $0028 - ld c, $c - xor a -.asm_2484 - ld [hl], a - add hl, de - dec c - jr nz, .asm_2484 - ret -; 248a - -Function248a: ; 248a - call GetMapEventBank - rst Bankswitch - - ld hl, $d1a6 - ld a, [hli] - ld h, [hl] - ld l, a - inc hl - inc hl - inc hl - ld a, [WarpNumber] - dec a - ld c, a - ld b, $0 - ld a, $5 - call AddNTimes - ld a, [hli] - ld [YCoord], a - ld a, [hli] - ld [XCoord], a - ld a, [hli] - cp $ff - jr nz, .asm_24b3 - call Function24ba - -.asm_24b3 - ld a, $41 - ld hl, $486d - rst FarCall - ret -; 24ba - -Function24ba: ; 24ba - ld a, [$d149] - ld [$dcac], a - ld a, [$d14a] - ld [BackupMapGroup], a - ld a, [$d14b] - ld [BackupMapNumber], a - ret -; 24cd - -Function24cd: ; 24cd - ld hl, OverworldMap - ld bc, $0514 - ld a, $0 - call ByteFill - call Function24e4 - call FillMapConnections - ld a, $1 - call Function263b - ret -; 24e4 - - - -Function24e4: ; 24e4 - ld a, [hROMBank] - push af - ld hl, OverworldMap - ld a, [$d19f] - ld [hConnectedMapWidth], a - add $6 - ld [hConnectionStripLength], a - ld c, a - ld b, $0 - add hl, bc - add hl, bc - add hl, bc - ld c, $3 - add hl, bc - ld a, [$d1a0] - rst Bankswitch - - ld a, [$d1a1] - ld e, a - ld a, [$d1a2] - ld d, a - ld a, [$d19e] - ld b, a -.asm_250c - push hl - ld a, [hConnectedMapWidth] - ld c, a -.asm_2510 - ld a, [de] - inc de - ld [hli], a - dec c - jr nz, .asm_2510 - pop hl - ld a, [hConnectionStripLength] - add l - ld l, a - jr nc, .asm_251e - inc h - -.asm_251e - dec b - jr nz, .asm_250c - pop af - rst Bankswitch - - ret -; 2524 - - - -FillMapConnections: ; 2524 - -; North - ld a, [NorthConnectedMapGroup] - cp $ff - jr z, .South - ld b, a - ld a, [NorthConnectedMapNumber] - ld c, a - call GetAnyMapBlockdataBank - - ld a, [NorthConnectionStripPointer] - ld l, a - ld a, [NorthConnectionStripPointer + 1] - ld h, a - ld a, [NorthConnectionStripLocation] - ld e, a - ld a, [NorthConnectionStripLocation + 1] - ld d, a - ld a, [NorthConnectionStripLength] - ld [hConnectionStripLength], a - ld a, [NorthConnectedMapWidth] - ld [hConnectedMapWidth], a - call FillNorthConnectionStrip - -.South - ld a, [SouthConnectedMapGroup] - cp $ff - jr z, .West - ld b, a - ld a, [SouthConnectedMapNumber] - ld c, a - call GetAnyMapBlockdataBank - - ld a, [SouthConnectionStripPointer] - ld l, a - ld a, [SouthConnectionStripPointer + 1] - ld h, a - ld a, [SouthConnectionStripLocation] - ld e, a - ld a, [SouthConnectionStripLocation + 1] - ld d, a - ld a, [SouthConnectionStripLength] - ld [hConnectionStripLength], a - ld a, [SouthConnectedMapWidth] - ld [hConnectedMapWidth], a - call FillSouthConnectionStrip - -.West - ld a, [WestConnectedMapGroup] - cp $ff - jr z, .East - ld b, a - ld a, [WestConnectedMapNumber] - ld c, a - call GetAnyMapBlockdataBank - - ld a, [WestConnectionStripPointer] - ld l, a - ld a, [WestConnectionStripPointer + 1] - ld h, a - ld a, [WestConnectionStripLocation] - ld e, a - ld a, [WestConnectionStripLocation + 1] - ld d, a - ld a, [WestConnectionStripLength] - ld b, a - ld a, [WestConnectedMapWidth] - ld [hConnectionStripLength], a - call FillWestConnectionStrip - -.East - ld a, [EastConnectedMapGroup] - cp $ff - jr z, .Done - ld b, a - ld a, [EastConnectedMapNumber] - ld c, a - call GetAnyMapBlockdataBank - - ld a, [EastConnectionStripPointer] - ld l, a - ld a, [EastConnectionStripPointer + 1] - ld h, a - ld a, [EastConnectionStripLocation] - ld e, a - ld a, [EastConnectionStripLocation + 1] - ld d, a - ld a, [EastConnectionStripLength] - ld b, a - ld a, [EastConnectedMapWidth] - ld [hConnectionStripLength], a - call FillEastConnectionStrip - -.Done - ret -; 25d3 - - -FillNorthConnectionStrip: -FillSouthConnectionStrip: ; 25d3 - - ld c, 3 -.y - push de - - push hl - ld a, [hConnectionStripLength] - ld b, a -.x - ld a, [hli] - ld [de], a - inc de - dec b - jr nz, .x - pop hl - - ld a, [hConnectedMapWidth] - ld e, a - ld d, 0 - add hl, de - pop de - - ld a, [$d19f] - add 6 - add e - ld e, a - jr nc, .asm_25f2 - inc d -.asm_25f2 - dec c - jr nz, .y - ret -; 25f6 - - -FillWestConnectionStrip: -FillEastConnectionStrip: ; 25f6 - -.asm_25f6 - ld a, [$d19f] - add 6 - ld [hConnectedMapWidth], a - - push de - - push hl - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - pop hl - - ld a, [hConnectionStripLength] - ld e, a - ld d, 0 - add hl, de - pop de - - ld a, [hConnectedMapWidth] - add e - ld e, a - jr nc, .asm_2617 - inc d -.asm_2617 - dec b - jr nz, .asm_25f6 - ret -; 261b - -Function261b: ; 261b - ld [$d432], a - ret -; 261f - - -CallScript: ; 261f -; Call a script at a:hl. - - ld [ScriptBank], a - ld a, l - ld [ScriptPos], a - ld a, h - ld [ScriptPos + 1], a - - ld a, $ff - ld [ScriptRunning], a - - scf - ret -; 2631 - -Function2631: ; 2631 - ld a, [ScriptRunning] - and a - ret nz - call GetMapEventBank - jr CallScript -; 263b - -Function263b: ; 263b - ld b, a - ld a, [hROMBank] - push af - call Function2c52 - call Function2653 - jr nc, .done - - call GetMapEventBank - ld b, a - ld d, h - ld e, l - call Function2674 - -.done - pop af - rst Bankswitch - ret -; 2653 - -Function2653: ; 2653 - ld a, [$dc0a] - ld c, a - and a - ret z - ld hl, $dc0b - ld a, [hli] - ld h, [hl] - ld l, a - or h - ret z - ld de, $0003 -.asm_2664 - ld a, [hl] - cp b - jr z, .asm_266e - add hl, de - dec c - jr nz, .asm_2664 - xor a - ret - -.asm_266e - inc hl - ld a, [hli] - ld h, [hl] - ld l, a - scf - ret -; 2674 - -Function2674: ; 2674 - callba Unknown_0x974f3 - ld a, [ScriptMode] - push af - ld hl, ScriptFlags - ld a, [hl] - push af - set 1, [hl] - callba Function96c56 - callba ScriptEvents - pop af - ld [ScriptFlags], a - pop af - ld [ScriptMode], a - ret -; 269a - -Function269a: ; 269a - ld a, [hROMBank] - push af - ld a, b - rst Bankswitch - - push hl - call SpeechTextBox - call Function2e31 - ld a, 1 - ld [hOAMUpdate], a - call Function321c - pop hl - call PrintTextBoxText - xor a - ld [hOAMUpdate], a - pop af - rst Bankswitch - - ret -; 26b7 - -Function26b7: ; 26b7 -; Call a:de. - - ld [hBuffer], a - ld a, [hROMBank] - push af - ld a, [hBuffer] - rst Bankswitch - - call .de - - pop af - rst Bankswitch - ret - -.de - push de - ret -; 26c7 - -Function26c7: ; 26c7 - ld a, [hROMBank] - push af - ld a, b - rst Bankswitch - - ld a, c - call Function19e9 - - pop hl - ld a, h - rst Bankswitch - ret -; 26d4 - - -GetScriptByte: ; 0x26d4 -; Return byte at ScriptBank:ScriptPos in a. - - push hl - push bc - ld a, [hROMBank] - push af - ld a, [ScriptBank] - rst Bankswitch - - ld hl, ScriptPos - ld c, [hl] - inc hl - ld b, [hl] - - ld a, [bc] - - inc bc - ld [hl], b - dec hl - ld [hl], c - - ld b, a - pop af - rst Bankswitch - ld a, b - pop bc - pop hl - ret -; 0x26ef - - -ObjectEvent: ; 0x26ef - jumptextfaceplayer ObjectEventText -; 0x26f2 - -ObjectEventText: - TX_FAR _ObjectEventText - db "@" -; 0x26f7 - - -BGEvent: ; 26f7 - jumptext BGEventText -; 26fa - -BGEventText: ; 26fa - text_jump UnknownText_0x1c46fc, BANK(UnknownText_0x1c46fc) - db "@" -; 26ff - - -CoordinatesEvent: ; 26ff - jumptext CoordinatesEventText -; 2702 - -CoordinatesEventText: ; 2702 - text_jump UnknownText_0x1c4706, BANK(UnknownText_0x1c4706) - db "@" -; 2707 - - -Function2707: ; 2707 - ld a, [hConnectionStripLength] - ld e, a - ld d, $0 - ld hl, $d81e - add hl, de - ld a, [hl] - ret -; 2712 - -Function2712: ; 2712 - ld a, [hConnectionStripLength] - ld e, a - ld d, $0 - ld hl, $d81e - add hl, de - ld [hl], $ff - ret -; 271e - -Function271e: ; 271e - ld a, [hConnectionStripLength] - ld e, a - ld d, $0 - ld hl, $d81e - add hl, de - ld [hl], $0 - ret -; 272a - - -Function272a: ; 272a - ld hl, TileMap - ld de, BGMapBuffer - call Function27b7 - ld c, $28 - call Functiondbd - ld a, [$d152] - ld e, a - ld a, [$d153] - ld d, a - call Function27d3 - ld a, $1 - ld [hBGMapUpdate], a - ret -; 2748 - -Function2748: ; 2748 - ld hl, $c5e0 - ld de, BGMapBuffer - call Function27b7 - ld c, $28 - call Functiondbd - ld a, [$d152] - ld l, a - ld a, [$d153] - ld h, a - ld bc, $0200 - add hl, bc - ld a, h - and $3 - or $98 - ld e, l - ld d, a - call Function27d3 - ld a, $1 - ld [hBGMapUpdate], a - ret -; 2771 - -Function2771: ; 2771 - ld hl, TileMap - ld de, BGMapBuffer - call Function27c0 - ld c, $24 - call Functiondbd - ld a, [$d152] - ld e, a - ld a, [$d153] - ld d, a - call Function27f8 - ld a, $1 - ld [hBGMapUpdate], a - ret -; 278f - -Function278f: ; 278f - ld hl, $c4b2 - ld de, BGMapBuffer - call Function27c0 - ld c, $24 - call Functiondbd - ld a, [$d152] - ld e, a - and $e0 - ld b, a - ld a, e - add $12 - and $1f - or b - ld e, a - ld a, [$d153] - ld d, a - call Function27f8 - ld a, $1 - ld [hBGMapUpdate], a - ret -; 27b7 - -Function27b7: ; 27b7 - ld c, $28 -.asm_27b9 - ld a, [hli] - ld [de], a - inc de - dec c - jr nz, .asm_27b9 - ret -; 27c0 - -Function27c0: ; 27c0 - ld c, $12 -.asm_27c2 - ld a, [hli] - ld [de], a - inc de - ld a, [hl] - ld [de], a - inc de - ld a, $13 - add l - ld l, a - jr nc, .asm_27cf - inc h - -.asm_27cf - dec c - jr nz, .asm_27c2 - ret -; 27d3 - -Function27d3: ; 27d3 - ld hl, BGMapBufferPtrs - push de - call .asm_27df - pop de - ld a, $20 - add e - ld e, a - -.asm_27df - ld c, $a -.asm_27e1 - ld a, e - ld [hli], a - ld a, d - ld [hli], a - ld a, e - inc a - inc a - and $1f - ld b, a - ld a, e - and $e0 - or b - ld e, a - dec c - jr nz, .asm_27e1 - ld a, $14 - ld [$ffdc], a - ret -; 27f8 - -Function27f8: ; 27f8 - ld hl, BGMapBufferPtrs - ld c, $12 -.asm_27fd - ld a, e - ld [hli], a - ld a, d - ld [hli], a - ld a, $20 - add e - ld e, a - jr nc, .asm_280e - inc d - ld a, d - and $3 - or $98 - ld d, a - -.asm_280e - dec c - jr nz, .asm_27fd - ld a, $12 - ld [$ffdc], a - ret -; 2816 - -Function2816: ; 2816 - ld hl, BGMapBuffer - ld bc, $0078 - xor a - call ByteFill - ret -; 2821 - -Function2821: ; 2821 - ld hl, TilesetAddress - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [TilesetBank] - ld e, a - ld a, [rSVBK] - push af - ld a, $6 - ld [rSVBK], a - ld a, e - ld de, $d000 - call FarDecompress - ld hl, $d000 - ld de, VTiles2 - ld bc, $0600 - call CopyBytes - ld a, [rVBK] - push af - ld a, $1 - ld [rVBK], a - ld hl, $d600 - ld de, VTiles2 - ld bc, $0600 - call CopyBytes - pop af - ld [rVBK], a - pop af - ld [rSVBK], a - ld a, [$d199] - cp $1 - jr z, .asm_286f - cp $2 - jr z, .asm_286f - cp $4 - jr z, .asm_286f - jr .asm_2875 - -.asm_286f - ld a, $7 - ld hl, $4000 - rst FarCall - -.asm_2875 - xor a - ld [hTileAnimFrame], a - ret -; 2879 - -Function2879: ; 2879 - ld hl, $d194 - ld a, [hli] - ld h, [hl] - ld l, a - ld de, $dcb9 - ld c, $5 - ld b, $6 -.asm_2886 - push bc - push hl -.asm_2888 - ld a, [hli] - ld [de], a - inc de - dec b - jr nz, .asm_2888 - pop hl - ld a, [$d19f] - add $6 - ld c, a - ld b, $0 - add hl, bc - pop bc - dec c - jr nz, .asm_2886 - ret -; 289d - -Function289d: ; 289d - ld hl, $d194 - ld a, [hli] - ld h, [hl] - ld l, a - ld de, $dcb9 - ld a, [$d19f] - add $6 - ld [hConnectionStripLength], a - ld a, [$d151] - and a - jr z, .asm_28cb - cp $1 - jr z, .asm_28c0 - cp $2 - jr z, .asm_28d4 - cp $3 - jr z, .asm_28da - ret - -.asm_28c0 - ld de, $dcbf - ld a, [hConnectionStripLength] - ld c, a - ld b, $0 - add hl, bc - jr .asm_28ce - -.asm_28cb - ld de, $dcb9 - -.asm_28ce - ld b, $6 - ld c, $4 - jr .asm_28f7 - -.asm_28d4 - ld de, $dcba - inc hl - jr .asm_28dd - -.asm_28da - ld de, $dcb9 - -.asm_28dd - ld b, $5 - ld c, $5 - jr .asm_28f7 - - ld hl, $d194 - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [$d19f] - add $6 - ld [hConnectionStripLength], a - ld de, $dcb9 - ld b, $6 - ld c, $5 - -.asm_28f7 - push bc - push hl - push de -.asm_28fa - ld a, [de] - inc de - ld [hli], a - dec b - jr nz, .asm_28fa - pop de - ld a, e - add $6 - ld e, a - jr nc, .asm_2908 - inc d - -.asm_2908 - pop hl - ld a, [hConnectionStripLength] - ld c, a - ld b, $0 - add hl, bc - pop bc - dec c - jr nz, .asm_28f7 - ret -; 2914 - -Function2914: ; 2914 - xor a - ld [TilePermissions], a - call Function296c - call Function294d - ld a, [MapX] - ld d, a - ld a, [MapY] - ld e, a - call Function2a3c - ld [StandingTile], a - call Function29ff - ret nz - ld a, [StandingTile] - and 7 - ld hl, .data_2945 - add l - ld l, a - ld a, 0 - adc h - ld h, a - ld a, [hl] - ld hl, TilePermissions - or [hl] - ld [hl], a - ret -; 2945 - -.data_2945 ; 2945 - db 1, 2, 4, 8, 9, 10, 5, 6 -; 294d - -Function294d: ; 294d - ld a, [MapX] - ld d, a - ld a, [MapY] - ld e, a - push de - inc e - call Function2a3c - ld [TileDown], a - call Function298b - pop de - dec e - call Function2a3c - ld [TileUp], a - call Function29a8 - ret -; 296c - -Function296c: ; 296c - ld a, [MapX] - ld d, a - ld a, [MapY] - ld e, a - push de - dec d - call Function2a3c - ld [TileLeft], a - call Function29e2 - pop de - inc d - call Function2a3c - ld [TileRight], a - call Function29c5 - ret -; 298b - -Function298b: ; 298b - call Function29ff - ret nz - ld a, [TileDown] - and $7 - cp $2 - jr z, .asm_299f - cp $6 - jr z, .asm_299f - cp $7 - ret nz - -.asm_299f - ld a, [TilePermissions] - or $8 - ld [TilePermissions], a - ret -; 29a8 - -Function29a8: ; 29a8 - call Function29ff - ret nz - ld a, [TileUp] - and $7 - cp $3 - jr z, .asm_29bc - cp $4 - jr z, .asm_29bc - cp $5 - ret nz - -.asm_29bc - ld a, [TilePermissions] - or $4 - ld [TilePermissions], a - ret -; 29c5 - -Function29c5: ; 29c5 - call Function29ff - ret nz - ld a, [TileRight] - and $7 - cp $1 - jr z, .asm_29d9 - cp $5 - jr z, .asm_29d9 - cp $7 - ret nz - -.asm_29d9 - ld a, [TilePermissions] - or $1 - ld [TilePermissions], a - ret -; 29e2 - -Function29e2: ; 29e2 - call Function29ff - ret nz - ld a, [TileLeft] - and $7 - cp $0 - jr z, .asm_29f6 - cp $4 - jr z, .asm_29f6 - cp $6 - ret nz - -.asm_29f6 - ld a, [TilePermissions] - or $2 - ld [TilePermissions], a - ret -; 29ff - -Function29ff: ; 29ff - and $f0 - cp $b0 - ret z - cp $c0 - ret -; 2a07 - - -GetFacingTileCoord: ; 2a07 -; Return map coordinates in (d, e) and tile id in a -; of the tile the player is facing. - - ld a, [PlayerDirection] - and %1100 - srl a - srl a - ld l, a - ld h, 0 - add hl, hl - add hl, hl - ld de, .Directions - add hl, de - - ld d, [hl] - inc hl - ld e, [hl] - inc hl - - ld a, [hli] - ld h, [hl] - ld l, a - - ld a, [MapX] - add d - ld d, a - ld a, [MapY] - add e - ld e, a - ld a, [hl] - ret - -.Directions - ; x, y - db 0, 1 - dw TileDown - db 0, -1 - dw TileUp - db -1, 0 - dw TileLeft - db 1, 0 - dw TileRight -; 2a3c - - -Function2a3c: ; 2a3c - call Function2a66 - ld a, [hl] - and a - jr z, .asm_2a63 - ld l, a - ld h, $0 - add hl, hl - add hl, hl - ld a, [TilesetCollisionAddress] - ld c, a - ld a, [$d1e1] - ld b, a - add hl, bc - rr d - jr nc, .asm_2a56 - inc hl - -.asm_2a56 - rr e - jr nc, .asm_2a5c - inc hl - inc hl - -.asm_2a5c - ld a, [TilesetCollisionBank] - call GetFarByte - ret - -.asm_2a63 - ld a, $ff - ret -; 2a66 - -Function2a66: ; 2a66 - ld a, [$d19f] - add $6 - ld c, a - ld b, $0 - ld hl, $c801 - add hl, bc - ld a, e - srl a - jr z, .asm_2a84 - and a -.asm_2a78 - srl a - jr nc, .asm_2a7d - add hl, bc - -.asm_2a7d - sla c - rl b - and a - jr nz, .asm_2a78 - -.asm_2a84 - ld c, d - srl c - ld b, $0 - add hl, bc - ret -; 2a8b - - -CheckFacingSign: ; 2a8b - call GetFacingTileCoord - ld b, a - ld a, d - sub 4 - ld d, a - ld a, e - sub 4 - ld e, a - ld a, [$dc01] - and a - ret z - ld c, a - ld a, [hROMBank] - push af - call Function2c52 - call Function2aaa - pop hl - ld a, h - rst Bankswitch - ret -; 2aaa - -Function2aaa: ; 2aaa - ld hl, $dc02 - ld a, [hli] - ld h, [hl] - ld l, a -.asm_2ab0 - push hl - ld a, [hli] - cp e - jr nz, .asm_2abb - ld a, [hli] - cp d - jr nz, .asm_2abb - jr .asm_2ac8 - -.asm_2abb - pop hl - ld a, 5 - add l - ld l, a - jr nc, .asm_2ac3 - inc h - -.asm_2ac3 - dec c - jr nz, .asm_2ab0 - xor a - ret - -.asm_2ac8 - pop hl - ld de, EngineBuffer1 - ld bc, 5 - call CopyBytes - scf - ret -; 2ad4 - -Function2ad4: ; 2ad4 - ld a, [$dbfe] - and a - ret z - ld c, a - ld a, [hROMBank] - push af - call Function2c52 - call Function2ae7 - pop hl - ld a, h - rst Bankswitch - ret -; 2ae7 - -Function2ae7: ; 2ae7 - ld hl, $dbff - ld a, [hli] - ld h, [hl] - ld l, a - call Function211b - ld b, a - ld a, [MapX] - sub $4 - ld d, a - ld a, [MapY] - sub $4 - ld e, a -.asm_2afd - push hl - ld a, [hli] - cp b - jr z, .asm_2b06 - cp $ff - jr nz, .asm_2b10 - -.asm_2b06 - ld a, [hli] - cp e - jr nz, .asm_2b10 - ld a, [hli] - cp d - jr nz, .asm_2b10 - jr .asm_2b1d - -.asm_2b10 - pop hl - ld a, $8 - add l - ld l, a - jr nc, .asm_2b18 - inc h - -.asm_2b18 - dec c - jr nz, .asm_2afd - xor a - ret - -.asm_2b1d - pop hl - ld de, EngineBuffer1 - ld bc, $0008 - call CopyBytes - scf - ret -; 2b29 - - -FadeToMenu: ; 2b29 - xor a - ld [hBGMapMode], a - call Function1d6e - ld a, $23 - ld hl, $4084 - rst FarCall - call ClearSprites - call Function2ed3 - ret -; 2b3c - - -Function2b3c: ; 2b3c - call WhiteBGMap - call Function2bae - call Function1ad2 - call Function1d7d - call Functiond90 - jr Function2b5c -; 2b4d - -Function2b4d: ; 2b4d - call WhiteBGMap - call Function1d7d - call Function2bae - call Function1ad2 - call Functiond90 -; 2b5c - -Function2b5c: ; 2b5c - ld b, $9 - call GetSGBLayout - ld a, $12 - ld hl, $5409 - rst FarCall - call Function3200 - ld a, $23 - ld hl, $4079 - rst FarCall - call Function2ee4 - ret -; 2b74 - - -Function2b74: ; 0x2b74 - push af - ld a, $1 - ld [$c2ce], a - call WhiteBGMap - call ClearSprites - call Function2bae - ld hl, $c590 ; tile 0, 12 - ld bc, $0412 - call TextBox - ld hl, VramState - set 0, [hl] - call Function1ad2 - call Function3200 - ld b, $9 - call GetSGBLayout - callba Function49409 - call UpdateTimePals - call DelayFrame - ld a, $1 - ld [$ffde], a - pop af - ret -; 0x2bae - -Function2bae: ; 2bae - call DisableLCD - call ClearSprites - ld a, $5 - ld hl, $4168 - rst FarCall - call Functione51 - call Functione5f - ld a, [hROMBank] - push af - ld a, [MapGroup] - ld b, a - ld a, [MapNumber] - ld c, a - call Function2c24 - ld a, $23 - ld hl, $4001 - rst FarCall - call Function2173 - call Function2821 - ld a, $9 - call Function3cb4 - pop af - rst Bankswitch - - call EnableLCD - ret -; 2be5 - - -GetMapHeaderPointer: ; 2be5 - ld a, [MapGroup] - ld b, a - ld a, [MapNumber] - ld c, a -; 2bed - -GetAnyMapHeaderPointer: ; 0x2bed -; Prior to calling this function, you must have switched banks so that -; MapGroupPointers is visible. - -; inputs: -; b = map group, c = map number -; XXX de = ??? - -; outputs: -; hl points to the map header - push bc ; save map number for later - - ; get pointer to map group - dec b - ld c, b - ld b, $0 - ld hl, MapGroupPointers - add hl, bc - add hl, bc - - ld a, [hli] - ld h, [hl] - ld l, a - pop bc ; restore map number - - ; find the cth map header - dec c - ld b, $0 - ld a, OlivineGym_MapHeader - OlivinePokeCenter1F_MapHeader - call AddNTimes - ret -; 0x2c04 - -GetMapHeaderMember: ; 0x2c04 -; Extract data from the current map's header. - -; inputs: -; de = offset of desired data within the mapheader - -; outputs: -; bc = data from the current map's header -; (e.g., de = $0003 would return a pointer to the secondary map header) - - ld a, [MapGroup] - ld b, a - ld a, [MapNumber] - ld c, a - ; fallthrough - -GetAnyMapHeaderMember: ; 0x2c0c - ; bankswitch - ld a, [hROMBank] - push af - ld a, BANK(MapGroupPointers) - rst Bankswitch - - call GetAnyMapHeaderPointer - add hl, de - ld c, [hl] - inc hl - ld b, [hl] - - ; bankswitch back - pop af - rst Bankswitch - ret -; 0x2c1c - - -Function2c1c: ; 2c1c - ld a, [MapGroup] - ld b, a - ld a, [MapNumber] - ld c, a -; 2c24 - -Function2c24: ; 2c24 - call Function2c31 - rst Bankswitch - ret -; 2c29 - - -Function2c29: ; 2c29 - ld a, [MapGroup] - ld b, a - ld a, [MapNumber] - ld c, a -; 2c31 - -Function2c31: ; 2c31 - push hl - push de - ld de, $0000 - call GetAnyMapHeaderMember - ld a, c - pop de - pop hl - ret -; 2c3d - -Function2c3d: ; 2c3d - ld a, [hROMBank] - push af - ld a, $25 - rst Bankswitch - call GetMapHeaderPointer - ld de, $d198 - ld bc, $0005 - call CopyBytes - pop af - rst Bankswitch - ret -; 2c52 - -Function2c52: ; 2c52 - ld a, [MapEventBank] - rst Bankswitch - ret -; 2c57 - - -GetMapEventBank: ; 2c57 - ld a, [MapEventBank] - ret -; 2c5b - -GetAnyMapBlockdataBank: ; 2c5b -; Return the blockdata bank for group b map c. - push hl - push de - push bc - - push bc - ld de, 3 ; second map header pointer - call GetAnyMapHeaderMember - ld l, c - ld h, b - pop bc - - push hl - ld de, 0 ; second map header bank - call GetAnyMapHeaderMember - pop hl - - ld de, 3 ; blockdata bank - add hl, de - ld a, c - call GetFarByte - rst Bankswitch - - pop bc - pop de - pop hl - ret -; 2c7d - -GetSecondaryMapHeaderPointer: ; 0x2c7d -; returns the current map's secondary map header pointer in hl. - push bc - push de - ld de, $0003 ; secondary map header pointer (offset within header) - call GetMapHeaderMember - ld l, c - ld h, b - pop de - pop bc - ret -; 2c8a - -GetMapPermission: ; 2c8a - push hl - push de - push bc - ld de, 2 - call GetMapHeaderMember - ld a, c - pop bc - pop de - pop hl - ret -; 2c98 - -Function2c98: ; 2c98 - ret -; 2c99 - -Function2c99: ; 2c99 - push hl - push de - push bc - ld de, $0002 - call GetAnyMapHeaderMember - ld a, c - pop bc - pop de - pop hl - ret -; 2ca7 - -Function2ca7: ; 2ca7 - ld de, $0001 - call GetAnyMapHeaderMember - ld a, c - ret -; 2caf - -GetWorldMapLocation: ; 0x2caf -; given a map group/id in bc, return its location on the Pokégear map. - push hl - push de - push bc - ld de, 5 - call GetAnyMapHeaderMember - ld a, c - pop bc - pop de - pop hl - ret -; 0x2cbd - -Function2cbd: ; 2cbd - push hl - push bc - ld de, $0006 - call GetMapHeaderMember - ld a, c - cp $64 - jr z, .asm_2cee - bit 7, c - jr nz, .asm_2cda - ld a, $22 - ld hl, $7342 - rst FarCall - ld e, c - ld d, $0 -.asm_2cd7 - pop bc - pop hl - ret - -.asm_2cda - ld a, [StatusFlags2] - bit 0, a - jr z, .asm_2ce6 - ld de, $0056 - jr .asm_2cd7 - -.asm_2ce6 - ld a, c - and $7f - ld e, a - ld d, $0 - jr .asm_2cd7 - -.asm_2cee - ld a, [StatusFlags2] - bit 7, a - jr z, .asm_2cfa - ld de, $0048 - jr .asm_2cd7 - -.asm_2cfa - ld de, $0026 - jr .asm_2cd7 -; 2cff - -Function2cff: ; 2cff - call Function2d0d - and $f - ret -; 2d05 - -Function2d05: ; 2d05 - call Function2d0d - and $f0 - swap a - ret -; 2d0d - -Function2d0d: ; 2d0d - push hl - push bc - ld de, $0007 - call GetMapHeaderMember - ld a, c - pop bc - pop hl - ret -; 2d19 - -Function2d19: ; 2d19 - push de - push hl - push bc - ld de, $0008 - call GetMapHeaderMember - ld a, c - pop bc - pop hl - pop de - ret -; 2d27 - -Function2d27: ; 2d27 - push hl - push bc - ld hl, $5596 - ld bc, $000f - ld a, [$d199] - call AddNTimes - ld de, TilesetBank - ld bc, $000f - ld a, $13 - call FarCopyBytes - pop bc - pop hl - ret -; 2d43 Function2d43: ; 2d43 nop -- cgit v1.2.3 From 82c3bb464f192c8d2ab29a8ef5bd8440f4567065 Mon Sep 17 00:00:00 2001 From: yenatch Date: Sun, 8 Sep 2013 00:19:52 -0400 Subject: split flag action asm into common/flag.asm --- common/flag.asm | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.asm | 111 +------------------------------------------------------ 2 files changed, 114 insertions(+), 110 deletions(-) create mode 100644 common/flag.asm diff --git a/common/flag.asm b/common/flag.asm new file mode 100644 index 000000000..e99248a3e --- /dev/null +++ b/common/flag.asm @@ -0,0 +1,113 @@ +Function2e50: ; 2e50 + xor a + ld hl, EventFlags + ld [hli], a + ret +; 2e56 + +Function2e56: ; 2e56 + xor a + ld hl, BikeFlags + ld [hli], a + ld [hl], a + ret +; 2e5d + +Function2e5d: ; 2e5d + ld a, [$d19a] + cp $2 + jr z, .asm_2e69 + cp $1 + jr z, .asm_2e69 + ret + +.asm_2e69 + ld hl, StatusFlags + res 2, [hl] + ret +; 2e6f + + +EventFlagAction: ; 0x2e6f + ld hl, EventFlags + call FlagAction + ret + +FlagAction: ; 0x2e76 +; Perform action b on bit de in flag array hl. + +; inputs: +; b: function +; 0 clear bit +; 1 set bit +; 2 check bit +; de: bit number +; hl: index within bit table + + ; get index within the byte + ld a, e + and 7 + + ; shift de right by three bits (get the index within memory) + srl d + rr e + srl d + rr e + srl d + rr e + add hl, de + + ; implement a decoder + ld c, 1 + rrca + jr nc, .one + rlc c +.one + rrca + jr nc, .two + rlc c + rlc c +.two + rrca + jr nc, .three + swap c +.three + + ; check b's value: 0, 1, 2 + ld a, b + cp 1 + jr c, .clearbit ; 0 + jr z, .setbit ; 1 + + ; check bit + ld a, [hl] + and c + ld c, a + ret + +.setbit + ; set bit + ld a, [hl] + or c + ld [hl], a + ret + +.clearbit + ; clear bit + ld a, c + cpl + and [hl] + ld [hl], a + ret +; 0x2ead + + +Function2ead: ; 2ead + ld de, ENGINE_POKEDEX + ld b, CHECK_FLAG + callba EngineFlagAction + ld a, c + and a + ret +; 2ebb + diff --git a/main.asm b/main.asm index f53f5d4bf..fc77d60ed 100644 --- a/main.asm +++ b/main.asm @@ -706,119 +706,10 @@ Function2e4e: ; 2e4e ret ; 2e50 -Function2e50: ; 2e50 - xor a - ld hl, EventFlags - ld [hli], a - ret -; 2e56 - -Function2e56: ; 2e56 - xor a - ld hl, BikeFlags - ld [hli], a - ld [hl], a - ret -; 2e5d -Function2e5d: ; 2e5d - ld a, [$d19a] - cp $2 - jr z, .asm_2e69 - cp $1 - jr z, .asm_2e69 - ret - -.asm_2e69 - ld hl, StatusFlags - res 2, [hl] - ret -; 2e6f +INCLUDE "common/flag.asm" -EventFlagAction: ; 0x2e6f - ld hl, EventFlags - call FlagAction - ret - -FlagAction: ; 0x2e76 -; Perform a function on a bit in memory. - -; inputs: -; b: function -; 0 clear bit -; 1 set bit -; 2 check bit -; de: bit number -; hl: index within bit table - - ; get index within the byte - ld a, e - and $7 - - ; shift de right by three bits (get the index within memory) - srl d - rr e - srl d - rr e - srl d - rr e - add hl, de - - ; implement a decoder - ld c, $1 - rrca - jr nc, .one - rlc c -.one - rrca - jr nc, .two - rlc c - rlc c -.two - rrca - jr nc, .three - swap c -.three - - ; check b's value: 0, 1, 2 - ld a, b - cp 1 - jr c, .clearbit ; 0 - jr z, .setbit ; 1 - - ; check bit - ld a, [hl] - and c - ld c, a - ret - -.setbit - ; set bit - ld a, [hl] - or c - ld [hl], a - ret - -.clearbit - ; clear bit - ld a, c - cpl - and [hl] - ld [hl], a - ret -; 0x2ead - - -Function2ead: ; 2ead - ld de, ENGINE_POKEDEX - ld b, CHECK_FLAG - callba EngineFlagAction - ld a, c - and a - ret -; 2ebb - Function2ebb: ; 2ebb ld a, [$c2cc] bit 1, a -- cgit v1.2.3 From 705e6824687ed247a28cfbaedd47bf33bd1da32a Mon Sep 17 00:00:00 2001 From: yenatch Date: Sun, 8 Sep 2013 00:22:33 -0400 Subject: split InitString asm into common/string.asm --- common/string.asm | 39 +++++++++++++++++++++++++++++++++++++++ main.asm | 38 +------------------------------------- 2 files changed, 40 insertions(+), 37 deletions(-) create mode 100644 common/string.asm diff --git a/common/string.asm b/common/string.asm new file mode 100644 index 000000000..a871b4d2a --- /dev/null +++ b/common/string.asm @@ -0,0 +1,39 @@ +InitString: ; 2ef6 +; Init a string of length c. + push hl + jr _InitString +; 2ef9 + +InitName: ; 2ef9 +; Intended for names, so this function is limited to ten characters. + push hl + ld c, 10 +; 2efc + +_InitString: ; 2efc +; if the string pointed to by hl is empty (defined as "zero or more spaces +; followed by a null"), then initialize it to the string pointed to by de. + push bc +.loop + ld a, [hli] + cp "@" + jr z, .blank + cp " " + jr nz, .notblank + dec c + jr nz, .loop +.blank + pop bc + ld l, e + ld h, d + pop de + ld b, 0 + inc c + call CopyBytes + ret +.notblank + pop bc + pop hl + ret +; 2f17 + diff --git a/main.asm b/main.asm index fc77d60ed..9a096202f 100644 --- a/main.asm +++ b/main.asm @@ -765,44 +765,8 @@ Function2ee4: ; 2ee4 ; 2ef6 -InitString: ; 2ef6 -; Init a string of length c. - push hl - jr _InitString -; 2ef9 - -InitName: ; 2ef9 -; Intended for names, so this function is limited to ten characters. - push hl - ld c, 10 -; 2efc +INCLUDE "common/string.asm" -_InitString: ; 2efc -; if the string pointed to by hl is empty (defined as "zero or more spaces -; followed by a null"), then initialize it to the string pointed to by de. - push bc -.loop - ld a, [hli] - cp "@" - jr z, .blank - cp " " - jr nz, .notblank - dec c - jr nz, .loop -.blank - pop bc - ld l, e - ld h, d - pop de - ld b, $0 - inc c - call CopyBytes - ret -.notblank - pop bc - pop hl - ret -; 2f17 Function2f17: ; 2f17 ld a, [MapGroup] -- cgit v1.2.3 From d05adc4f9881c2d5516a8884740a3c4128c29642 Mon Sep 17 00:00:00 2001 From: yenatch Date: Sun, 8 Sep 2013 00:46:25 -0400 Subject: Function2f17 -> IsInJohto --- main.asm | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/main.asm b/main.asm index 9a096202f..834679aec 100644 --- a/main.asm +++ b/main.asm @@ -768,32 +768,37 @@ Function2ee4: ; 2ee4 INCLUDE "common/string.asm" -Function2f17: ; 2f17 +IsInJohto: ; 2f17 +; Return 0 if the player is in Johto, and 1 in Kanto. + ld a, [MapGroup] ld b, a ld a, [MapNumber] ld c, a call GetWorldMapLocation - cp $5f - jr z, .asm_2f39 - cp $0 - jr nz, .asm_2f35 + + cp $5f ; SS Aqua + jr z, .Johto + + cp $0 ; Poke Center 2F + jr nz, .CheckRegion + ld a, [BackupMapGroup] ld b, a ld a, [BackupMapNumber] ld c, a call GetWorldMapLocation -.asm_2f35 - cp $2f - jr nc, .asm_2f3b +.CheckRegion + cp $2f ; Pallet Town + jr nc, .Kanto -.asm_2f39 +.Johto xor a ret -.asm_2f3b - ld a, $1 +.Kanto + ld a, 1 ret ; 2f3e @@ -36055,7 +36060,7 @@ Function2a200: ; 2a200 jr .asm_2a27a .asm_2a235 - call Function2f17 + call IsInJohto and a ret z ld h, d -- cgit v1.2.3 From f0cf86777ba012485003a05fb5988a9812051808 Mon Sep 17 00:00:00 2001 From: yenatch Date: Sun, 8 Sep 2013 01:35:10 -0400 Subject: fix item asm labels CheckItem was called PickUpItem by mistake Also label TossItem and ReceiveItem --- engine/scripting.asm | 8 +++--- main.asm | 70 ++++++++++++++++++++++++++-------------------------- stats/odd_eggs.asm | 2 +- 3 files changed, 40 insertions(+), 40 deletions(-) diff --git a/engine/scripting.asm b/engine/scripting.asm index e8921a265..12fd14283 100644 --- a/engine/scripting.asm +++ b/engine/scripting.asm @@ -539,7 +539,7 @@ Script_verbosegiveitem2: ; 0x96f8e ld a, [de] ld [$d10c], a ld hl, $d892 - call Function2f66 + call ReceiveItem ld a, $1 jr c, .asm_96fb0 ; 0x96fad $1 xor a @@ -2320,7 +2320,7 @@ Script_giveitem: ; 0x977ca call GetScriptByte ld [$d10c], a ld hl, $d892 - call Function2f66 + call ReceiveItem jr nc, .asm_977eb ; 0x977e3 $6 ld a, $1 ld [$c2dd], a @@ -2346,7 +2346,7 @@ Script_takeitem: ; 0x977f0 ld a, $ff ld [$d107], a ld hl, $d892 - call Function2f53 + call TossItem ret nc ld a, $1 ld [$c2dd], a @@ -2363,7 +2363,7 @@ Script_checkitem: ; 0x97812 call GetScriptByte ld [$d106], a ld hl, $d892 - call PickUpItem + call CheckItem ret nc ld a, $1 ld [$c2dd], a diff --git a/main.asm b/main.asm index 834679aec..a18461f51 100644 --- a/main.asm +++ b/main.asm @@ -823,56 +823,56 @@ CheckTossableItem: ; 2f46 ret ; 2f53 -Function2f53: ; 2f53 +TossItem: ; 2f53 push hl push de push bc ld a, [hROMBank] push af - ld a, $3 + ld a, BANK(_TossItem) rst Bankswitch - call $520d + call _TossItem + pop bc ld a, b rst Bankswitch - pop bc pop de pop hl ret ; 2f66 -Function2f66: ; 2f66 +ReceiveItem: ; 2f66 push bc ld a, [hROMBank] push af - ld a, $3 + ld a, BANK(_ReceiveItem) rst Bankswitch - push hl push de - call $51d5 + + call _ReceiveItem + pop de pop hl pop bc ld a, b rst Bankswitch - pop bc ret ; 2f79 -PickUpItem: ; 2f79 +CheckItem: ; 2f79 push hl push de push bc ld a, [hROMBank] push af - ld a, BANK(_PickUpItem) + ld a, BANK(_CheckItem) rst Bankswitch - call _PickUpItem + call _CheckItem pop bc ld a, b @@ -14138,7 +14138,7 @@ Functionc309: ; c309 ld a, $1 ld [$d10c], a ld hl, NumItems - call Function2f66 + call ReceiveItem jr nc, .asm_c33d xor a ld [$abe2], a @@ -14238,7 +14238,7 @@ Functionc3ae: ; c3ae ld a, $36 ld [CurItem], a ld hl, NumItems - call PickUpItem + call CheckItem jr nc, .asm_c3c9 and a ret @@ -16271,7 +16271,7 @@ UnknownText_0xd1d0: ; 0xd1d0 ; 0xd1d5 -Functiond1d5: ; d1d5 +_ReceiveItem: ; d1d5 call Functiond27b jp nz, Functiond29c push hl @@ -16318,7 +16318,7 @@ Functiond201: ; d201 ; d20d -Functiond20d: ; d20d +_TossItem: ; d20d call Functiond27b jr nz, .asm_d241 push hl @@ -16366,7 +16366,7 @@ Functiond20d: ; d20d jp Functiond2ff ; d244 -_PickUpItem: ; d244 +_CheckItem: ; d244 call Functiond27b jr nz, .asm_d278 push hl @@ -16424,7 +16424,7 @@ Functiond27b: ; d27b ; d283 Functiond283: ; d283 - ld c, $14 + ld c, 20 ld a, e cp TMsHMsEnd % $100 jr nz, .asm_d28e @@ -16433,7 +16433,7 @@ Functiond283: ; d283 ret z .asm_d28e - ld c, $32 + ld c, 50 ld a, e cp BallsEnd % $100 jr nz, .asm_d299 @@ -19469,7 +19469,7 @@ Functionf795: ; f795 ld hl, NumItems ld a, $1 ld [$d10c], a - jp Function2f53 + jp TossItem ; f7a0 Functionf7a0: ; f7a0 @@ -22296,7 +22296,7 @@ Function12cdf: ; 12cdf ld a, $1 ld [$d10c], a ld hl, NumItems - jp Function2f66 + jp ReceiveItem ; 12cea INCBIN "baserom.gbc", $12cea, $12cf5 - $12cea @@ -27034,14 +27034,14 @@ Function157e9: ; 0x157e9 ld a, [$d107] ld [Buffer2], a ld hl, NumItems - call Function2f66 + call ReceiveItem jr nc, .PackFull ld a, [Buffer1] ld [$d10c], a ld a, [Buffer2] ld [$d107], a ld hl, PCItems - call Function2f53 + call TossItem ld a, $3b call Predef ld hl, .WithdrewText @@ -27215,14 +27215,14 @@ Function1590a: ; 0x1590a ld a, [$d107] ld [Buffer2], a ld hl, PCItems - call Function2f66 + call ReceiveItem jr nc, .asm_15965 ld a, [Buffer1] ld [$d10c], a ld a, [Buffer2] ld [$d107], a ld hl, NumItems - call Function2f53 + call TossItem ld a, $3b call Predef ld hl, .DepositText @@ -27790,7 +27790,7 @@ Function15cef: ; 15cef call Function1600b jr c, .asm_15d79 ld hl, NumItems - call Function2f66 + call ReceiveItem jr nc, .asm_15d6f ld a, [$d107] ld e, a @@ -28008,7 +28008,7 @@ Function15efd: ; 15efd call Function15fd7 ld a, [$d107] ld hl, NumItems - call Function2f53 + call TossItem ld a, $3b call Predef ld hl, $c5b9 @@ -31297,7 +31297,7 @@ Function24c64: ; 24c64 push hl ld [CurItem], a ld hl, NumItems - call PickUpItem + call CheckItem pop hl jr nc, .asm_24c89 ld a, [hl] @@ -50166,7 +50166,7 @@ Function4484a: ; 0x4484a ld a, $1 ld [$d10c], a ld hl, NumItems - call Function2f66 + call ReceiveItem jr c, .asm_4489e ld hl, .PackFullText jp Function1d67 @@ -51580,12 +51580,12 @@ Function4a927: ; 4a927 ld a, [ScriptVar] ld [CurItem], a ld hl, PCItems - call PickUpItem + call CheckItem jr c, .asm_4a948 ld a, [ScriptVar] ld [CurItem], a ld hl, NumItems - call PickUpItem + call CheckItem jr c, .asm_4a948 xor a ld [ScriptVar], a @@ -60621,7 +60621,7 @@ Function88211: ; 88211 ld hl, NumItems ld a, b ld [$d10c], a - call Function2f53 + call TossItem pop bc ld a, c sub b @@ -62461,7 +62461,7 @@ Function8adef: ; 8adef ld a, WATER_STONE ld [CurItem], a ld hl, NumItems - call PickUpItem + call CheckItem jr c, .asm_8ae24 ld a, [PartyCount] @@ -62781,7 +62781,7 @@ Function8afd4: ; 8afd4 ld a, $1 ld [$d10c], a ld hl, NumItems - call Function2f66 + call ReceiveItem pop hl jr nc, .asm_8b04c ld a, [hl] @@ -76543,7 +76543,7 @@ Functionfd0c3: ; fd0c3 ld a, $1 ld [$d10c], a ld hl, PCItems - call Function2f66 + call ReceiveItem ret ; fd0eb diff --git a/stats/odd_eggs.asm b/stats/odd_eggs.asm index 6922a2de7..68062ec3b 100644 --- a/stats/odd_eggs.asm +++ b/stats/odd_eggs.asm @@ -45,7 +45,7 @@ GiveOddEgg: ; 1fb4b6 ld a, $ff ld [$d107], a ld hl, NumItems - call Function2f53 + call TossItem ld a, EGG ld [$cd2a], a ld a, $29 -- cgit v1.2.3 From 3b70005fb07750959a86c464a8a423a94f98f04b Mon Sep 17 00:00:00 2001 From: yenatch Date: Sun, 8 Sep 2013 01:45:54 -0400 Subject: split item interfaces into common/item.asm --- common/item.asm | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.asm | 75 +------------------------------------------------------- 2 files changed, 77 insertions(+), 74 deletions(-) create mode 100644 common/item.asm diff --git a/common/item.asm b/common/item.asm new file mode 100644 index 000000000..0906a19f6 --- /dev/null +++ b/common/item.asm @@ -0,0 +1,76 @@ +DoItemEffect: ; 2f3f + callba _DoItemEffect + ret +; 2f46 + +CheckTossableItem: ; 2f46 + push hl + push de + push bc + callba _CheckTossableItem + pop bc + pop de + pop hl + ret +; 2f53 + +TossItem: ; 2f53 + push hl + push de + push bc + ld a, [hROMBank] + push af + ld a, BANK(_TossItem) + rst Bankswitch + + call _TossItem + + pop bc + ld a, b + rst Bankswitch + pop bc + pop de + pop hl + ret +; 2f66 + +ReceiveItem: ; 2f66 + push bc + ld a, [hROMBank] + push af + ld a, BANK(_ReceiveItem) + rst Bankswitch + push hl + push de + + call _ReceiveItem + + pop de + pop hl + pop bc + ld a, b + rst Bankswitch + pop bc + ret +; 2f79 + +CheckItem: ; 2f79 + push hl + push de + push bc + ld a, [hROMBank] + push af + ld a, BANK(_CheckItem) + rst Bankswitch + + call _CheckItem + + pop bc + ld a, b + rst Bankswitch + pop bc + pop de + pop hl + ret +; 2f8c + diff --git a/main.asm b/main.asm index a18461f51..b514c8fbb 100644 --- a/main.asm +++ b/main.asm @@ -807,81 +807,8 @@ Function2f3e: ; 2f3e ret ; 2f3f -DoItemEffect: ; 2f3f - callba _DoItemEffect - ret -; 2f46 -CheckTossableItem: ; 2f46 - push hl - push de - push bc - callba _CheckTossableItem - pop bc - pop de - pop hl - ret -; 2f53 - -TossItem: ; 2f53 - push hl - push de - push bc - ld a, [hROMBank] - push af - ld a, BANK(_TossItem) - rst Bankswitch - - call _TossItem - - pop bc - ld a, b - rst Bankswitch - pop bc - pop de - pop hl - ret -; 2f66 - -ReceiveItem: ; 2f66 - push bc - ld a, [hROMBank] - push af - ld a, BANK(_ReceiveItem) - rst Bankswitch - push hl - push de - - call _ReceiveItem - - pop de - pop hl - pop bc - ld a, b - rst Bankswitch - pop bc - ret -; 2f79 - -CheckItem: ; 2f79 - push hl - push de - push bc - ld a, [hROMBank] - push af - ld a, BANK(_CheckItem) - rst Bankswitch - - call _CheckItem - - pop bc - ld a, b - rst Bankswitch - pop bc - pop de - pop hl - ret -; 2f8c +INCLUDE "common/item.asm" Random: ; 2f8c -- cgit v1.2.3 From edf939a07be9e0553a3ef91dd66291806dd3ad50 Mon Sep 17 00:00:00 2001 From: yenatch Date: Sun, 8 Sep 2013 02:47:52 -0400 Subject: split Random into common/random.asm --- common/random.asm | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.asm | 76 +------------------------------------------------------ 2 files changed, 77 insertions(+), 75 deletions(-) create mode 100644 common/random.asm diff --git a/common/random.asm b/common/random.asm new file mode 100644 index 000000000..0f46da9e4 --- /dev/null +++ b/common/random.asm @@ -0,0 +1,76 @@ +Random: ; 2f8c +; A simple hardware-based random number generator (RNG). + +; Two random numbers are generated by adding and subtracting +; the divider to the respective values every time it's called. + +; The divider is a register that increments at a rate of 16384Hz. +; For comparison, the Game Boy operates at a clock speed of 4.2MHz. + +; Additionally, an equivalent function is executed in VBlank. + +; This leaves a with the value in hRandomSub. + + push bc + + ld a, [rDIV] + ld b, a + ld a, [hRandomAdd] + adc b + ld [hRandomAdd], a + + ld a, [rDIV] + ld b, a + ld a, [hRandomSub] + sbc b + ld [hRandomSub], a + + pop bc + ret +; 2f9f + +BattleRandom: ; 2f9f +; _BattleRandom lives in another bank. + +; It handles all RNG calls in the battle engine, allowing +; link battles to remain in sync using a shared PRNG. + + ld a, [hROMBank] + push af + ld a, BANK(_BattleRandom) + rst Bankswitch + + call _BattleRandom + + ld [$cfb6], a + pop af + rst Bankswitch + ld a, [$cfb6] + ret +; 2fb1 + + +Function2fb1: ; 2fb1 + push bc + ld c, a + xor a + sub c +.asm_2fb5 + sub c + jr nc, .asm_2fb5 + add c + ld b, a + push bc +.asm_2fbb + call Random + ld a, [hRandomAdd] + ld c, a + add b + jr c, .asm_2fbb + ld a, c + pop bc + call SimpleDivide + pop bc + ret +; 2fcb + diff --git a/main.asm b/main.asm index b514c8fbb..1d57996ea 100644 --- a/main.asm +++ b/main.asm @@ -810,82 +810,8 @@ Function2f3e: ; 2f3e INCLUDE "common/item.asm" +INCLUDE "common/random.asm" -Random: ; 2f8c -; A simple hardware-based random number generator (RNG). - -; Two random numbers are generated by adding and subtracting -; the divider to the respective values every time it's called. - -; The divider is a register that increments at a rate of 16384Hz. -; For comparison, the Game Boy operates at a clock speed of 4.2MHz. - -; Additionally, an equivalent function is executed in VBlank. - -; This leaves a with the value in hRandomSub. - - push bc - - ld a, [rDIV] - ld b, a - ld a, [hRandomAdd] - adc b - ld [hRandomAdd], a - - ld a, [rDIV] - ld b, a - ld a, [hRandomSub] - sbc b - ld [hRandomSub], a - - pop bc - ret -; 2f9f - -BattleRandom: ; 2f9f -; _BattleRandom lives in another bank. - -; It handles all RNG calls in the battle engine, allowing -; link battles to remain in sync using a shared PRNG. - - ld a, [hROMBank] - push af - ld a, BANK(_BattleRandom) - rst Bankswitch - - call _BattleRandom - - ld [$cfb6], a - pop af - rst Bankswitch - ld a, [$cfb6] - ret -; 2fb1 - - -Function2fb1: ; 2fb1 - push bc - ld c, a - xor a - sub c -.asm_2fb5 - sub c - jr nc, .asm_2fb5 - add c - ld b, a - push bc -.asm_2fbb - call Random - ld a, [hRandomAdd] - ld c, a - add b - jr c, .asm_2fbb - ld a, c - pop bc - call SimpleDivide - pop bc - ret -; 2fcb GetSRAMBank: ; 2fcb ; load sram bank a -- cgit v1.2.3 From 844546f8495030b66e79aa30d96405065e2019dd Mon Sep 17 00:00:00 2001 From: yenatch Date: Sun, 8 Sep 2013 02:50:06 -0400 Subject: split sram access asm into common/sram.asm --- common/sram.asm | 34 ++++++++++++++++++++++++++++++++++ main.asm | 36 +----------------------------------- 2 files changed, 35 insertions(+), 35 deletions(-) create mode 100644 common/sram.asm diff --git a/common/sram.asm b/common/sram.asm new file mode 100644 index 000000000..3c42e7618 --- /dev/null +++ b/common/sram.asm @@ -0,0 +1,34 @@ +GetSRAMBank: ; 2fcb +; load sram bank a +; if invalid bank, sram is disabled + cp NUM_SRAM_BANKS + jr c, OpenSRAM + jr CloseSRAM +; 2fd1 + +OpenSRAM: ; 2fd1 +; switch to sram bank a + push af +; latch clock data + ld a, 1 + ld [MBC3LatchClock], a +; enable sram/clock write + ld a, SRAM_ENABLE + ld [MBC3SRamEnable], a +; select sram bank + pop af + ld [MBC3SRamBank], a + ret +; 2fe1 + +CloseSRAM: ; 2fe1 + push af + ld a, SRAM_DISABLE +; reset clock latch for next time + ld [MBC3LatchClock], a +; disable sram/clock write + ld [MBC3SRamEnable], a + pop af + ret +; 2fec + diff --git a/main.asm b/main.asm index 1d57996ea..a8660f1a6 100644 --- a/main.asm +++ b/main.asm @@ -812,41 +812,7 @@ INCLUDE "common/item.asm" INCLUDE "common/random.asm" - -GetSRAMBank: ; 2fcb -; load sram bank a -; if invalid bank, sram is disabled - cp NUM_SRAM_BANKS - jr c, OpenSRAM - jr CloseSRAM -; 2fd1 - -OpenSRAM: ; 2fd1 -; switch to sram bank a - push af -; latch clock data - ld a, 1 - ld [MBC3LatchClock], a -; enable sram/clock write - ld a, SRAM_ENABLE - ld [MBC3SRamEnable], a -; select sram bank - pop af - ld [MBC3SRamBank], a - ret -; 2fe1 - -CloseSRAM: ; 2fe1 -; preserve a - push af - ld a, SRAM_DISABLE -; reset clock latch for next time - ld [MBC3LatchClock], a -; disable sram/clock write - ld [MBC3SRamEnable], a - pop af - ret -; 2fec +INCLUDE "common/sram.asm" ; Register aliases -- cgit v1.2.3 From 4a04a09a6b7a80f97392563b1b1b115fa1cf6316 Mon Sep 17 00:00:00 2001 From: yenatch Date: Sun, 8 Sep 2013 03:12:48 -0400 Subject: labels for cgb double speed functions --- common/init.asm | 2 +- main.asm | 21 ++++++++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/common/init.asm b/common/init.asm index 3104c416d..ead75975c 100644 --- a/common/init.asm +++ b/common/init.asm @@ -156,7 +156,7 @@ Init: ; 17d ld a, [hCGB] and a jr z, .asm_22b - call Function2ff7 + call NormalSpeed .asm_22b xor a diff --git a/main.asm b/main.asm index a8660f1a6..bf2527f10 100644 --- a/main.asm +++ b/main.asm @@ -827,20 +827,27 @@ _de_: ; 2fed ; 2fef -Function2fef: ; 2fef +; The CGB hardware introduces Double Speed Mode. +; While active, the clock speed is doubled. + +; The hardware can switch between normal speed +; and double speed at any time, but LCD output +; collapses during the switch. + +DoubleSpeed: ; 2fef ld hl, rKEY1 bit 7, [hl] - jr z, Function2ffd + jr z, SwitchSpeed ret ; 2ff7 -Function2ff7: ; 2ff7 +NormalSpeed: ; 2ff7 ld hl, rKEY1 bit 7, [hl] ret z ; 2ffd -Function2ffd: ; 2ffd +SwitchSpeed: ; 2ffd set 0, [hl] xor a ld [rIF], a @@ -76483,7 +76490,7 @@ Function1000a4: ; 1000a4 ld [$ffe9], a xor a ld [$ff9e], a - call Function2ff7 + call NormalSpeed xor a ld [rIF], a ld a, [BGMapBuffer] @@ -81935,7 +81942,7 @@ Function1183cb: ; 1183cb di ld a, [rIE] ld [$cd32], a - call Function2fef + call DoubleSpeed xor a ld [rIF], a ld [$c300], a @@ -81984,7 +81991,7 @@ Function118452: ; 118452 ld [$ffc9], a ld [$ffe9], a ld [$ff9e], a - call Function2ff7 + call NormalSpeed xor a ld [rIF], a ld a, [$cd32] -- cgit v1.2.3 From e7318ed4bc38baebce0f26048b166c76d13c1838 Mon Sep 17 00:00:00 2001 From: yenatch Date: Sun, 8 Sep 2013 03:14:24 -0400 Subject: move double speed functions into common/double_speed.asm --- common/double_speed.asm | 31 +++++++++++++++++++++++++++++++ main.asm | 31 +------------------------------ 2 files changed, 32 insertions(+), 30 deletions(-) create mode 100644 common/double_speed.asm diff --git a/common/double_speed.asm b/common/double_speed.asm new file mode 100644 index 000000000..fc1234215 --- /dev/null +++ b/common/double_speed.asm @@ -0,0 +1,31 @@ +; The CGB hardware introduces Double Speed Mode. +; While active, the clock speed is doubled. + +; The hardware can switch between normal speed +; and double speed at any time, but LCD output +; collapses during the switch. + +DoubleSpeed: ; 2fef + ld hl, rKEY1 + bit 7, [hl] + jr z, SwitchSpeed + ret +; 2ff7 + +NormalSpeed: ; 2ff7 + ld hl, rKEY1 + bit 7, [hl] + ret z +; 2ffd + +SwitchSpeed: ; 2ffd + set 0, [hl] + xor a + ld [rIF], a + ld [rIE], a + ld a, $30 + ld [rJOYP], a + stop ; rgbasm adds a nop after this instruction by default + ret +; 300b + diff --git a/main.asm b/main.asm index bf2527f10..7213ea3f6 100644 --- a/main.asm +++ b/main.asm @@ -827,36 +827,7 @@ _de_: ; 2fed ; 2fef -; The CGB hardware introduces Double Speed Mode. -; While active, the clock speed is doubled. - -; The hardware can switch between normal speed -; and double speed at any time, but LCD output -; collapses during the switch. - -DoubleSpeed: ; 2fef - ld hl, rKEY1 - bit 7, [hl] - jr z, SwitchSpeed - ret -; 2ff7 - -NormalSpeed: ; 2ff7 - ld hl, rKEY1 - bit 7, [hl] - ret z -; 2ffd - -SwitchSpeed: ; 2ffd - set 0, [hl] - xor a - ld [rIF], a - ld [rIE], a - ld a, $30 - ld [rJOYP], a - stop ; rgbasm adds a nop after this instruction by default - ret -; 300b +INCLUDE "common/double_speed.asm" ClearSprites: ; 300b -- cgit v1.2.3 From 4778276f33c59bb0bc56cb381d4fe1dc8da1f9b8 Mon Sep 17 00:00:00 2001 From: yenatch Date: Sun, 8 Sep 2013 23:53:04 -0400 Subject: split serial handshake into common/handshake.asm --- common/handshake.asm | 38 ++++++++++++++++++++++++++++++++++++++ main.asm | 40 +--------------------------------------- 2 files changed, 39 insertions(+), 39 deletions(-) create mode 100644 common/handshake.asm diff --git a/common/handshake.asm b/common/handshake.asm new file mode 100644 index 000000000..8ed1473e4 --- /dev/null +++ b/common/handshake.asm @@ -0,0 +1,38 @@ +AskSerial: ; 2063 +; send out a handshake while serial int is off + ld a, [$c2d4] + bit 0, a + ret z + + ld a, [$c2d5] + and a + ret nz + +; once every 6 frames + ld hl, $ca8a + inc [hl] + ld a, [hl] + cp 6 + ret c + + xor a + ld [hl], a + + ld a, $c + ld [$c2d5], a + +; handshake + ld a, $88 + ld [rSB], a + +; switch to internal clock + ld a, %00000001 + ld [rSC], a + +; start transfer + ld a, %10000001 + ld [rSC], a + + ret +; 208a + diff --git a/main.asm b/main.asm index 7213ea3f6..63ac61d41 100644 --- a/main.asm +++ b/main.asm @@ -475,45 +475,7 @@ Function1d19: ; 1d19 INCLUDE "common/menu.asm" - -AskSerial: ; 2063 -; send out a handshake while serial int is off - ld a, [$c2d4] - bit 0, a - ret z - - ld a, [$c2d5] - and a - ret nz - -; once every 6 frames - ld hl, $ca8a - inc [hl] - ld a, [hl] - cp 6 - ret c - - xor a - ld [hl], a - - ld a, $c - ld [$c2d5], a - -; handshake - ld a, $88 - ld [rSB], a - -; switch to internal clock - ld a, %00000001 - ld [rSC], a - -; start transfer - ld a, %10000001 - ld [rSC], a - - ret -; 208a - +INCLUDE "common/handshake.asm" INCLUDE "common/game_time.asm" -- cgit v1.2.3 From abb7f2fa20e49cf56a55c81d4ec86431e3009098 Mon Sep 17 00:00:00 2001 From: yenatch Date: Sun, 8 Sep 2013 23:54:12 -0400 Subject: split Predef into common/predef.asm --- common/predef.asm | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.asm | 55 +------------------------------------------------------ 2 files changed, 55 insertions(+), 54 deletions(-) create mode 100644 common/predef.asm diff --git a/common/predef.asm b/common/predef.asm new file mode 100644 index 000000000..bd34a87a1 --- /dev/null +++ b/common/predef.asm @@ -0,0 +1,54 @@ +Predef: ; 2d83 +; Call predefined function a. +; Preserves bc, de, hl and f. + + ld [PredefID], a + ld a, [hROMBank] + push af + + ld a, BANK(GetPredefPointer) + rst Bankswitch + call GetPredefPointer ; stores hl in PredefTemp + +; Switch to the new function's bank + rst Bankswitch + +; Instead of directly calling stuff, +; push it to the stack in reverse. + + ld hl, .Return + push hl + +; Call the Predef function + ld a, [PredefAddress] + ld h, a + ld a, [PredefAddress + 1] + ld l, a + push hl + +; Get hl back + ld a, [PredefTemp] + ld h, a + ld a, [PredefTemp + 1] + ld l, a + ret + +.Return +; Clean up after the Predef call + + ld a, h + ld [PredefTemp], a + ld a, l + ld [PredefTemp+1], a + + pop hl + ld a, h + rst Bankswitch + + ld a, [PredefTemp] + ld h, a + ld a, [PredefTemp + 1] + ld l, a + ret +; 2dba + diff --git a/main.asm b/main.asm index 63ac61d41..650732a5e 100644 --- a/main.asm +++ b/main.asm @@ -505,60 +505,7 @@ Function2d43: ; 2d43 INCLUDE "common/farcall.asm" - -Predef: ; 2d83 -; Call predefined function a. -; Preserves bc, de, hl and f. - - ld [PredefID], a - ld a, [hROMBank] - push af - - ld a, BANK(GetPredefPointer) - rst Bankswitch - call GetPredefPointer ; stores hl in PredefTemp - -; Switch to the new function's bank - rst Bankswitch - -; Instead of directly calling stuff, -; push it to the stack in reverse. - - ld hl, .Return - push hl - -; Call the Predef function - ld a, [PredefAddress] - ld h, a - ld a, [PredefAddress + 1] - ld l, a - push hl - -; Get hl back - ld a, [PredefTemp] - ld h, a - ld a, [PredefTemp + 1] - ld l, a - ret - -.Return -; Clean up after the Predef call - - ld a, h - ld [PredefTemp], a - ld a, l - ld [PredefTemp+1], a - - pop hl - ld a, h - rst Bankswitch - - ld a, [PredefTemp] - ld h, a - ld a, [PredefTemp + 1] - ld l, a - ret -; 2dba +INCLUDE "common/predef.asm" ResetWindow: ; 2dba -- cgit v1.2.3 From 60c1061a67270f89b5f40ae1d807958b63608287 Mon Sep 17 00:00:00 2001 From: yenatch Date: Mon, 9 Sep 2013 00:59:06 -0400 Subject: clean up some common includes and give names to wram copy functions --- main.asm | 71 +++++++++++++++++++++++++++++++--------------------------------- 1 file changed, 34 insertions(+), 37 deletions(-) diff --git a/main.asm b/main.asm index 650732a5e..efa07aec5 100644 --- a/main.asm +++ b/main.asm @@ -474,15 +474,14 @@ Function1d19: ; 1d19 INCLUDE "common/menu.asm" - INCLUDE "common/handshake.asm" - INCLUDE "common/game_time.asm" - INCLUDE "common/map.asm" Function2d43: ; 2d43 +; Inexplicably empty. +; Seen in PredefPointers. nop nop nop @@ -504,7 +503,6 @@ Function2d43: ; 2d43 INCLUDE "common/farcall.asm" - INCLUDE "common/predef.asm" @@ -624,7 +622,7 @@ Function2ebb: ; 2ebb bit 1, a ret z ld a, [hJoyDown] - bit 1, a + bit A_BUTTON, a ret ; 2ec6 @@ -640,7 +638,6 @@ Function2ec8: ; 2ec8 ret ; 2ecb - Function2ecb: ; 2ecb push hl ld hl, $c2cc @@ -718,9 +715,7 @@ Function2f3e: ; 2f3e INCLUDE "common/item.asm" - INCLUDE "common/random.asm" - INCLUDE "common/sram.asm" @@ -764,6 +759,7 @@ HideSprites: ; 3016 ret ; 3026 + CopyBytes: ; 0x3026 ; copy bc bytes from hl to de inc b ; we bail the moment b hits 0, so include the last run @@ -794,9 +790,9 @@ SwapBytes: ; 0x3034 ; retrieve the previous value of [hl]; put it in [de] pop af ld [de], a + inc de ; handle loop stuff - inc de dec bc ld a, b or c @@ -858,7 +854,7 @@ GetFarHalfword: ; 0x305d ret ; 0x306b -Function306b: ; 306b +FarCopyWRAM: ; 306b ld [hBuffer], a ld a, [rSVBK] push af @@ -870,7 +866,7 @@ Function306b: ; 306b ret ; 307b -Function307b: ; 307b +GetFarWRAMByte: ; 307b ld [hBuffer], a ld a, [rSVBK] push af @@ -884,7 +880,7 @@ Function307b: ; 307b ret ; 308d -Function308d: ; 308d +GetFarWRAMWord: ; 308d ld [hBuffer], a ld a, [rSVBK] push af @@ -898,6 +894,7 @@ Function308d: ; 308d ret ; 309d + Function309d: ; 309d ld a, [rSVBK] push af @@ -12440,12 +12437,12 @@ Function8b07: ; 8b07 ld de, $d000 ld bc, $0008 ld a, $5 - call Function306b + call FarCopyWRAM ld hl, $4b37 ld de, MartPointer ld bc, $0008 ld a, $5 - call Function306b + call FarCopyWRAM call Function96a4 ld a, $1 ld [hCGBPalUpdate], a @@ -12480,7 +12477,7 @@ Function8c43: ; 8c43 add hl, bc ld bc, $0004 ld a, $5 - call Function306b + call FarCopyWRAM ld a, $1 ld [hCGBPalUpdate], a ret @@ -12543,7 +12540,7 @@ Function8cb4: ; 8cb4 ld de, $d000 ld bc, $0008 ld a, $5 - call Function306b + call FarCopyWRAM call Function96a4 call Function9699 call Function96b3 @@ -12671,7 +12668,7 @@ Function8db8: ; 8db8 ld de, $d050 ld bc, $0030 ld a, $5 - call Function306b + call FarCopyWRAM call Function96b3 ret ; 8e85 @@ -12689,7 +12686,7 @@ Function8e85: ; 8e85 ld de, $d038 ld bc, $0008 ld a, $5 - call Function306b + call FarCopyWRAM ret ; 8e9f @@ -12703,7 +12700,7 @@ Function8e9f: ; 8e9f ld de, $d000 ld bc, $0008 ld a, $5 - call Function306b + call FarCopyWRAM ret ; 8eb9 @@ -12721,7 +12718,7 @@ Function8eb9: ; 8eb9 ld de, $d000 ld bc, $0030 ld a, $5 - call Function306b + call FarCopyWRAM call Function96a4 ld a, $1 ld [hCGBPalUpdate], a @@ -12748,7 +12745,7 @@ Function8edb: ; 8edb ld de, $d018 ld bc, $0018 ld a, $5 - call Function306b + call FarCopyWRAM call Function9699 ld hl, AttrMap ld bc, $0814 @@ -12917,7 +12914,7 @@ Function96a4: ; 96a4 ld de, $d080 ld bc, $0080 ld a, $5 - call Function306b + call FarCopyWRAM ret ; 96b3 @@ -12999,7 +12996,7 @@ Function971a: ; 971a ld de, MartPointer ld bc, $0010 ld a, $5 - call Function306b + call FarCopyWRAM ret ; 9729 @@ -20807,7 +20804,7 @@ Function12434: ; 12434 ld de, CurMart ld bc, $0008 ld a, $5 - call Function306b + call FarCopyWRAM ld a, $1 ld [hCGBPalUpdate], a ret @@ -50219,7 +50216,7 @@ Function49409: ; 49409 ld de, $d038 ld bc, $0008 ld a, $5 - call Function306b + call FarCopyWRAM ret ; 49418 @@ -50282,7 +50279,7 @@ Function49811: ; 49811 ld de, $d010 ld bc, $0030 ld a, $5 - call Function306b + call FarCopyWRAM callba Function96a4 ret ; 49826 @@ -54331,7 +54328,7 @@ Function4ea0a: ; 4ea0a ld de, $cd53 ld bc, $000c ld a, $5 - call Function306b + call FarCopyWRAM ld a, [rSVBK] push af ld a, $1 @@ -54353,7 +54350,7 @@ Function4ea0a: ; 4ea0a Function4ea44: ; 4ea44 ld a, $0 ld hl, InLinkBattle - call Function307b + call GetFarWRAMByte cp $4 jr z, .asm_4ea59 ld a, [Options] @@ -54380,7 +54377,7 @@ Function4ea44: ; 4ea44 .asm_4ea72 ld a, $5 ld hl, $dc00 - call Function307b + call GetFarWRAMByte bit 0, a jr z, .asm_4ea80 and a @@ -57145,7 +57142,7 @@ Function51103: ; 51103 push hl ld a, $1 ld hl, BasePicSize - call Function307b + call GetFarWRAMByte pop hl and $f ld de, $d990 @@ -71107,11 +71104,11 @@ Functiond01d6: ; d01d6 ld [$d16e], a ld a, $1 ld hl, CurPartySpecies - call Function307b + call GetFarWRAMByte ld [$d16b], a ld a, $1 ld hl, UnownLetter - call Function307b + call GetFarWRAMByte ld [$d16c], a call Functiond065c ld [$d16d], a @@ -76812,7 +76809,7 @@ Function10039c: ; 10039c ld de, $d000 ld bc, $0054 ld a, $3 - call Function306b + call FarCopyWRAM ret ; 1003ab @@ -76824,7 +76821,7 @@ Function1003ba: ; 1003ba ld de, $d080 ld bc, $0054 ld a, $3 - call Function306b + call FarCopyWRAM ret ; 1003c9 @@ -76833,7 +76830,7 @@ Function1003c9: ; 1003c9 ld de, $ccb4 ld bc, $0054 ld a, $3 - call Function306b + call FarCopyWRAM ret ; 1003d8 @@ -77477,7 +77474,7 @@ Function100989: ; 100989 Function1009a5: ; 1009a5 ld bc, $0168 ld a, $3 - call Function306b + call FarCopyWRAM ret ; 1009ae @@ -78530,7 +78527,7 @@ Function10218d: ; 10218d ld de, EnemyMoveAnimation ld bc, $0026 ld a, $5 - call Function306b + call FarCopyWRAM ld de, EnemyMoveEffect ret ; 10219f -- cgit v1.2.3 From ee04a2fcd9c0da06f8d960c4627d6d2276e7de23 Mon Sep 17 00:00:00 2001 From: yenatch Date: Mon, 9 Sep 2013 01:11:41 -0400 Subject: split more copy functions into common/copy2.asm --- common/copy2.asm | 134 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.asm | 134 +------------------------------------------------------ 2 files changed, 135 insertions(+), 133 deletions(-) create mode 100644 common/copy2.asm diff --git a/common/copy2.asm b/common/copy2.asm new file mode 100644 index 000000000..bdfbe9fdf --- /dev/null +++ b/common/copy2.asm @@ -0,0 +1,134 @@ +CopyBytes: ; 0x3026 +; copy bc bytes from hl to de + inc b ; we bail the moment b hits 0, so include the last run + inc c ; same thing; include last byte + jr .HandleLoop +.CopyByte + ld a, [hli] + ld [de], a + inc de +.HandleLoop + dec c + jr nz, .CopyByte + dec b + jr nz, .CopyByte + ret + +SwapBytes: ; 0x3034 +; swap bc bytes between hl and de +.Loop + ; stash [hl] away on the stack + ld a, [hl] + push af + + ; copy a byte from [de] to [hl] + ld a, [de] + ld [hli], a + + ; retrieve the previous value of [hl]; put it in [de] + pop af + ld [de], a + inc de + + ; handle loop stuff + dec bc + ld a, b + or c + jr nz, .Loop + ret + +ByteFill: ; 0x3041 +; fill bc bytes with the value of a, starting at hl + inc b ; we bail the moment b hits 0, so include the last run + inc c ; same thing; include last byte + jr .HandleLoop +.PutByte + ld [hli], a +.HandleLoop + dec c + jr nz, .PutByte + dec b + jr nz, .PutByte + ret + +GetFarByte: ; 0x304d +; retrieve a single byte from a:hl, and return it in a. + ; bankswitch to new bank + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + + ; get byte from new bank + ld a, [hl] + ld [hBuffer], a + + ; bankswitch to previous bank + pop af + rst Bankswitch + + ; return retrieved value in a + ld a, [hBuffer] + ret + +GetFarHalfword: ; 0x305d +; retrieve a halfword from a:hl, and return it in hl. + ; bankswitch to new bank + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + + ; get halfword from new bank, put it in hl + ld a, [hli] + ld h, [hl] + ld l, a + + ; bankswitch to previous bank and return + pop af + rst Bankswitch + ret +; 0x306b + +FarCopyWRAM: ; 306b + ld [hBuffer], a + ld a, [rSVBK] + push af + ld a, [hBuffer] + ld [rSVBK], a + call CopyBytes + pop af + ld [rSVBK], a + ret +; 307b + +GetFarWRAMByte: ; 307b + ld [hBuffer], a + ld a, [rSVBK] + push af + ld a, [hBuffer] + ld [rSVBK], a + ld a, [hl] + ld [hBuffer], a + pop af + ld [rSVBK], a + ld a, [hBuffer] + ret +; 308d + +GetFarWRAMWord: ; 308d + ld [hBuffer], a + ld a, [rSVBK] + push af + ld a, [hBuffer] + ld [rSVBK], a + ld a, [hli] + ld h, [hl] + ld l, a + pop af + ld [rSVBK], a + ret +; 309d + diff --git a/main.asm b/main.asm index efa07aec5..7dfdbc060 100644 --- a/main.asm +++ b/main.asm @@ -760,139 +760,7 @@ HideSprites: ; 3016 ; 3026 -CopyBytes: ; 0x3026 -; copy bc bytes from hl to de - inc b ; we bail the moment b hits 0, so include the last run - inc c ; same thing; include last byte - jr .HandleLoop -.CopyByte - ld a, [hli] - ld [de], a - inc de -.HandleLoop - dec c - jr nz, .CopyByte - dec b - jr nz, .CopyByte - ret - -SwapBytes: ; 0x3034 -; swap bc bytes between hl and de -.Loop - ; stash [hl] away on the stack - ld a, [hl] - push af - - ; copy a byte from [de] to [hl] - ld a, [de] - ld [hli], a - - ; retrieve the previous value of [hl]; put it in [de] - pop af - ld [de], a - inc de - - ; handle loop stuff - dec bc - ld a, b - or c - jr nz, .Loop - ret - -ByteFill: ; 0x3041 -; fill bc bytes with the value of a, starting at hl - inc b ; we bail the moment b hits 0, so include the last run - inc c ; same thing; include last byte - jr .HandleLoop -.PutByte - ld [hli], a -.HandleLoop - dec c - jr nz, .PutByte - dec b - jr nz, .PutByte - ret - -GetFarByte: ; 0x304d -; retrieve a single byte from a:hl, and return it in a. - ; bankswitch to new bank - ld [hBuffer], a - ld a, [hROMBank] - push af - ld a, [hBuffer] - rst Bankswitch - - ; get byte from new bank - ld a, [hl] - ld [hBuffer], a - - ; bankswitch to previous bank - pop af - rst Bankswitch - - ; return retrieved value in a - ld a, [hBuffer] - ret - -GetFarHalfword: ; 0x305d -; retrieve a halfword from a:hl, and return it in hl. - ; bankswitch to new bank - ld [hBuffer], a - ld a, [hROMBank] - push af - ld a, [hBuffer] - rst Bankswitch - - ; get halfword from new bank, put it in hl - ld a, [hli] - ld h, [hl] - ld l, a - - ; bankswitch to previous bank and return - pop af - rst Bankswitch - ret -; 0x306b - -FarCopyWRAM: ; 306b - ld [hBuffer], a - ld a, [rSVBK] - push af - ld a, [hBuffer] - ld [rSVBK], a - call CopyBytes - pop af - ld [rSVBK], a - ret -; 307b - -GetFarWRAMByte: ; 307b - ld [hBuffer], a - ld a, [rSVBK] - push af - ld a, [hBuffer] - ld [rSVBK], a - ld a, [hl] - ld [hBuffer], a - pop af - ld [rSVBK], a - ld a, [hBuffer] - ret -; 308d - -GetFarWRAMWord: ; 308d - ld [hBuffer], a - ld a, [rSVBK] - push af - ld a, [hBuffer] - ld [rSVBK], a - ld a, [hli] - ld h, [hl] - ld l, a - pop af - ld [rSVBK], a - ret -; 309d +INCLUDE "common/copy2.asm" Function309d: ; 309d -- cgit v1.2.3 From 53b7926f5e2c06384f228dccd03c70c960ae16b0 Mon Sep 17 00:00:00 2001 From: yenatch Date: Mon, 9 Sep 2013 01:21:36 -0400 Subject: move multiplication/division functions into common/math.asm --- common/math.asm | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.asm | 76 +-------------------------------------------------------- 2 files changed, 77 insertions(+), 75 deletions(-) create mode 100644 common/math.asm diff --git a/common/math.asm b/common/math.asm new file mode 100644 index 000000000..87a00c412 --- /dev/null +++ b/common/math.asm @@ -0,0 +1,76 @@ +SimpleMultiply: ; 3105 +; Return a * c. + and a + ret z + + push bc + ld b, a + xor a +.loop + add c + dec b + jr nz, .loop + pop bc + ret +; 3110 + + +SimpleDivide: ; 3110 +; Divide a by c. Return quotient b and remainder a. + ld b, 0 +.loop + inc b + sub c + jr nc, .loop + dec b + add c + ret +; 3119 + + +Multiply: ; 3119 +; Multiply hMultiplicand (3 bytes) by hMultiplier. Result in hProduct. +; All values are big endian. + push hl + push bc + + callab _Multiply + + pop bc + pop hl + ret +; 3124 + + +Divide: ; 3124 +; Divide hDividend length b (max 4 bytes) by hDivisor. Result in hQuotient. +; All values are big endian. + push hl + push de + push bc + ld a, [hROMBank] + push af + ld a, BANK(_Divide) + rst Bankswitch + + call _Divide + + pop af + rst Bankswitch + pop bc + pop de + pop hl + ret +; 3136 + + +SubtractSigned: ; 3136 +; Return a - b, sign in carry. + sub b + ret nc + cpl + add 1 + scf + ret +; 313d + diff --git a/main.asm b/main.asm index 7dfdbc060..f805a700e 100644 --- a/main.asm +++ b/main.asm @@ -861,81 +861,7 @@ AddNTimes: ; 0x30fe ; 0x3105 -SimpleMultiply: ; 3105 -; Return a * c. - and a - ret z - - push bc - ld b, a - xor a -.loop - add c - dec b - jr nz, .loop - pop bc - ret -; 3110 - - -SimpleDivide: ; 3110 -; Divide a by c. Return quotient b and remainder a. - ld b, 0 -.loop - inc b - sub c - jr nc, .loop - dec b - add c - ret -; 3119 - - -Multiply: ; 3119 -; Multiply hMultiplicand (3 bytes) by hMultiplier. Result in hProduct. -; All values are big endian. - push hl - push bc - - callab _Multiply - - pop bc - pop hl - ret -; 3124 - - -Divide: ; 3124 -; Divide hDividend length b (max 4 bytes) by hDivisor. Result in hQuotient. -; All values are big endian. - push hl - push de - push bc - ld a, [hROMBank] - push af - ld a, BANK(_Divide) - rst Bankswitch - - call _Divide - - pop af - rst Bankswitch - pop bc - pop de - pop hl - ret -; 3136 - - -SubtractSigned: ; 3136 -; Return a - b, sign in carry. - sub b - ret nc - cpl - add 1 - scf - ret -; 313d +INCLUDE "common/math.asm" PrintLetterDelay: ; 313d -- cgit v1.2.3 From 106b0e139f0195f5fb27536ee573b6aa56311fc4 Mon Sep 17 00:00:00 2001 From: yenatch Date: Mon, 9 Sep 2013 02:22:04 -0400 Subject: clean up more bank 0 --- main.asm | 56 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 22 deletions(-) diff --git a/main.asm b/main.asm index f805a700e..2d6d4fe5b 100644 --- a/main.asm +++ b/main.asm @@ -950,6 +950,7 @@ PrintLetterDelay: ; 313d ret ; 318c + CopyDataUntil: ; 318c ; Copies [hl, bc) to [de, bc - hl). ; In other words, the source data is from hl up to but not including bc, @@ -966,12 +967,15 @@ CopyDataUntil: ; 318c ret ; 0x3198 + PrintNum: ; 3198 ld a, [hROMBank] push af ld a, BANK(_PrintNum) rst Bankswitch + call _PrintNum + pop af rst Bankswitch ret @@ -981,18 +985,18 @@ PrintNum: ; 3198 Function31a4: ; 31a4 ld a, [hROMBank] push af - ld a, $41 + ld a, BANK(Function1061ef) rst Bankswitch - call $61ef + call Function1061ef + pop af rst Bankswitch - ret ; 31b0 -Function31b0: ; 31b0 +FarPrintText: ; 31b0 ld [hBuffer], a ld a, [hROMBank] push af @@ -1000,13 +1004,14 @@ Function31b0: ; 31b0 rst Bankswitch call PrintText + pop af rst Bankswitch - ret ; 31be -Function31be: ; 31be + +CallPointerAt: ; 31be ld a, [hROMBank] push af ld a, [hli] @@ -1024,10 +1029,13 @@ Function31be: ; 31be ret ; 31cd + Function31cd: ; 31cd +; Push pointer hl in the current bank to $d0e8. ld a, [hROMBank] Function31cf: ; 31cf +; Push pointer a:hl to $d0e8. ld [$d0e8], a ld a, l ld [$d0e9], a @@ -1091,15 +1099,15 @@ Function3200: ; 0x3200 ld a, [hCGB] and a jr z, .asm_320e - ld a, $2 + ld a, 2 ld [hBGMapMode], a - ld c, $4 + ld c, 4 call DelayFrames .asm_320e - ld a, $1 + ld a, 1 ld [hBGMapMode], a - ld c, $4 + ld c, 4 call DelayFrames ret ; 0x3218 @@ -1116,9 +1124,11 @@ Function321c: ; 321c ld a, [hCGB] and a jr z, .asm_322e + ld a, [$c2ce] cp 0 jr z, .asm_322e + ld a, 1 ld [hBGMapMode], a jr Function323d @@ -1267,26 +1277,28 @@ ClearPalettes: ; 3317 ret .cgb -; Save WRAM bank ld a, [rSVBK] push af -; WRAM bank 5 + ld a, 5 ld [rSVBK], a + ; Fill BGPals and OBPals with $ffff (white) ld hl, BGPals - ld bc, $0080 + ld bc, $80 ld a, $ff call ByteFill -; Restore WRAM bank + pop af ld [rSVBK], a + ; Request palette update ld a, 1 ld [hCGBPalUpdate], a ret ; 333e + ClearSGB: ; 333e ld b, $ff GetSGBLayout: ; 3340 @@ -1360,9 +1372,9 @@ CountSetBits: ; 0x335f GetWeekday: ; 3376 ld a, [CurDay] -.loop +.mod sub 7 - jr nc, .loop + jr nc, .mod add 7 ret ; 3380 @@ -2177,7 +2189,7 @@ Function3718: ; 3718 ld h, [hl] ld l, a call GetMapEventBank - call Function31b0 + call FarPrintText call WaitBGMap call Functiona80 ret @@ -30456,7 +30468,7 @@ Function247f0: ; 247f0 ld d, h ld e, l ld hl, $cf98 - jp Function31be + jp CallPointerAt ; 2486e Function2486e: ; 2486e @@ -30464,7 +30476,7 @@ Function2486e: ; 2486e ld d, h ld e, l ld hl, $cf98 - call Function31be + call CallPointerAt pop hl ld a, [$cf93] and a @@ -30475,7 +30487,7 @@ Function2486e: ; 2486e ld d, h ld e, l ld hl, $cf9b - call Function31be + call CallPointerAt .asm_2488a ret @@ -30528,7 +30540,7 @@ Function248b8: ; 248b8 dec a call Function248d5 ld hl, $cf9e - call Function31be + call CallPointerAt ret ; 248d5 @@ -49955,7 +49967,7 @@ Function492b9: ; 492b9 pop de ld a, $b ld hl, $48ce - call Function31b0 + call FarPrintText jr .asm_49300 .asm_492e5 -- cgit v1.2.3 From 771ebcbf23a2b479ca5af4ed07f1bacf1fe03faf Mon Sep 17 00:00:00 2001 From: yenatch Date: Mon, 9 Sep 2013 02:34:07 -0400 Subject: PokedexSeen and PokedexCaught were swapped --- main.asm | 67 ++++++++++++++++++++++++++++++++-------------------------------- wram.asm | 8 ++++---- 2 files changed, 37 insertions(+), 38 deletions(-) diff --git a/main.asm b/main.asm index 2d6d4fe5b..29f8e3174 100644 --- a/main.asm +++ b/main.asm @@ -1383,39 +1383,38 @@ GetWeekday: ; 3376 SetSeenAndCaughtMon: ; 3380 push af ld c, a - ld hl, PokedexSeen - ld b, 1 - call GetWramFlag + ld hl, PokedexCaught + ld b, SET_FLAG + call PokedexFlagAction pop af ; fallthrough ; 338b -SetCaughtMon: ; 338b +SetSeenMon: ; 338b ld c, a - ld hl, PokedexCaught - ld b, 1 - jr GetWramFlag + ld hl, PokedexSeen + ld b, SET_FLAG + jr PokedexFlagAction ; 3393 -CheckSeenMon: ; 3393 +CheckCaughtMon: ; 3393 ld c, a - ld hl, PokedexSeen - ld b, 2 - jr GetWramFlag + ld hl, PokedexCaught + ld b, CHECK_FLAG + jr PokedexFlagAction ; 339b -CheckCaughtMon: ; 339b +CheckSeenMon: ; 339b ld c, a - ld hl, PokedexCaught - ld b, 2 + ld hl, PokedexSeen + ld b, CHECK_FLAG ; fallthrough ; 33a1 -GetWramFlag: ; 33a1 +PokedexFlagAction: ; 33a1 ld d, 0 ld a, PREDEF_FLAG call Predef - ld a, c and a ret @@ -8612,7 +8611,7 @@ Function5f6b: ; 5f6b bit 0, a ret z push hl - ld hl, PokedexSeen + ld hl, PokedexCaught ld b, $20 call CountSetBits pop hl @@ -13517,7 +13516,7 @@ Functionc225: ; c225 Functionc230: ; c230 ld a, [ScriptVar] dec a - call CheckSeenMon + call CheckCaughtMon ret nz ld a, [ScriptVar] dec a @@ -13533,7 +13532,7 @@ Functionc230: ; c230 Functionc252: ; c252 ld a, [ScriptVar] dec a - call SetCaughtMon + call SetSeenMon ret ; c25a @@ -17018,7 +17017,7 @@ Functiond88c: ; d88c ld [$d265], a dec a push de - call CheckSeenMon + call CheckCaughtMon ld a, [$d265] dec a call SetSeenAndCaughtMon @@ -17924,10 +17923,10 @@ Functiondf8c: ; df8c ld a, [CurPartySpecies] dec a push af - call CheckSeenMon + call CheckCaughtMon pop af push bc - call CheckCaughtMon + call CheckSeenMon push bc call Functiond88c pop bc @@ -17938,7 +17937,7 @@ Functiondf8c: ; df8c dec a ld c, a ld d, $0 - ld hl, PokedexSeen + ld hl, PokedexCaught ld b, $0 ld a, $3 call Predef @@ -17952,7 +17951,7 @@ Functiondf8c: ; df8c dec a ld c, a ld d, $0 - ld hl, PokedexCaught + ld hl, PokedexSeen ld b, $0 ld a, $3 call Predef @@ -31577,13 +31576,13 @@ Function26601: ; 0x26601 Rate: ; 0x26616 ; calculate Seen/Owned - ld hl, PokedexCaught - ld b, EndPokedexCaught - PokedexCaught - call CountSetBits - ld [DefaultFlypoint], a ld hl, PokedexSeen ld b, EndPokedexSeen - PokedexSeen call CountSetBits + ld [DefaultFlypoint], a + ld hl, PokedexCaught + ld b, EndPokedexCaught - PokedexCaught + call CountSetBits ld [$d003], a ; print appropriate rating @@ -35982,7 +35981,7 @@ Function2a4ab: ; 2a4ab push bc dec c ld a, c - call CheckCaughtMon + call CheckSeenMon pop bc jr nz, .asm_2a514 ld de, StringBuffer1 @@ -36474,7 +36473,7 @@ Function2c0c5: ; 2c0c5 ret nz ld a, [TempEnemyMonSpecies] dec a - call CheckSeenMon + call CheckCaughtMon ret z ld hl, $c4b5 ld [hl], $5d @@ -44694,7 +44693,7 @@ LoadEnemyMon: ; 3e8eb dec a ld c, a ld b, 1 ; set - ld hl, PokedexCaught + ld hl, PokedexSeen ld a, PREDEF_FLAG call Predef @@ -47986,7 +47985,7 @@ Function40bd0: ; 40bd0 push hl ld a, [$d265] dec a - call CheckCaughtMon + call CheckSeenMon pop hl pop de ret @@ -49198,7 +49197,7 @@ Function4424d: ; 4424d call PrintNum ld a, [$d265] dec a - call CheckSeenMon + call CheckCaughtMon pop hl pop bc ret z @@ -83255,7 +83254,7 @@ Function11d493: ; 11d493 ld hl, rSVBK ld e, $1 ld [hl], e - call CheckCaughtMon + call CheckSeenMon ld hl, rSVBK ld e, $5 ld [hl], e diff --git a/wram.asm b/wram.asm index 6b302f31c..6b4b29f4c 100644 --- a/wram.asm +++ b/wram.asm @@ -2026,12 +2026,12 @@ PartyMon6Nickname: ; de78 PartyMonNicknamesEnd SECTION "Pokedex",WRAMX[$de99],BANK[1] -PokedexSeen: ; de99 - ds 32 -EndPokedexSeen: -PokedexCaught: ; deb9 +PokedexCaught: ; de99 ds 32 EndPokedexCaught: +PokedexSeen: ; deb9 + ds 32 +EndPokedexSeen: UnownDex: ; ded9 ds 26 UnlockedUnowns: ; def3 -- cgit v1.2.3 From 2b4a5bdd8d9c711d8a8ad8dc822539f969744329 Mon Sep 17 00:00:00 2001 From: yenatch Date: Mon, 9 Sep 2013 12:47:02 -0400 Subject: comment flag predef this is like FlagAction but with index c instead of de --- main.asm | 58 +++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/main.asm b/main.asm index 29f8e3174..1a8ef637e 100644 --- a/main.asm +++ b/main.asm @@ -11988,7 +11988,7 @@ PredefPointers: ; 856b dwb Function6508, BANK(Function6508) dwb Function747a, BANK(Function747a) dwb Functionc658, BANK(Functionc658) - dwb Function4d7c1, BANK(Function4d7c1) + dwb FlagPredef, BANK(FlagPredef) dwb Functionc699, BANK(Functionc699) dwb FillPP, BANK(FillPP) dwb Functiond88c, BANK(Functiond88c) @@ -52635,57 +52635,73 @@ INCBIN "baserom.gbc", $4d580, $4d596 - $4d580 Tilesets: INCLUDE "tilesets/tileset_headers.asm" -Function4d7c1: ; 4d7c1 + +FlagPredef: ; 4d7c1 +; Perform action b on flag c in flag array hl. +; If checking a flag, check flag array d:hl unless d is 0. + +; For longer flag arrays, see FlagAction. + push hl push bc + +; Divide by 8 to get the byte we want. push bc srl c srl c srl c - ld b, $0 + ld b, 0 add hl, bc pop bc + +; Which bit we want from the byte ld a, c - and $7 + and 7 ld c, a - ld a, $1 - jr z, .asm_4d7da -.asm_4d7d6 + +; Shift left until we can mask the bit + ld a, 1 + jr z, .shifted +.shift add a dec c - jr nz, .asm_4d7d6 - -.asm_4d7da + jr nz, .shift +.shifted ld c, a + +; What are we doing to this flag? dec b - jr z, .asm_4d7e7 + jr z, .set ; 1 dec b - jr z, .asm_4d7ec + jr z, .check ; 2 + +.reset ld a, c cpl and [hl] ld [hl], a - jr .asm_4d7f9 + jr .done -.asm_4d7e7 +.set ld a, [hl] or c ld [hl], a - jr .asm_4d7f9 + jr .done -.asm_4d7ec +.check ld a, d - cp $0 - jr nz, .asm_4d7f5 + cp 0 + jr nz, .farcheck + ld a, [hl] and c - jr .asm_4d7f9 + jr .done -.asm_4d7f5 +.farcheck call GetFarByte and c -.asm_4d7f9 +.done pop bc pop hl ld c, a -- cgit v1.2.3 From 5bbcedb886eba1f3187b57c2759e4c4e20ee6975 Mon Sep 17 00:00:00 2001 From: yenatch Date: Mon, 9 Sep 2013 12:49:26 -0400 Subject: typo in CheckContestMon --- main.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.asm b/main.asm index 1a8ef637e..b6753a120 100644 --- a/main.asm +++ b/main.asm @@ -12140,7 +12140,7 @@ CheckShininess: ; 8a68 CheckContestMon: ; 8a88 ; Check a mon's DVs at hl in the bug catching contest. -; Return shiny if its DVs are good enough to place in the contest. +; Return carry if its DVs are good enough to place in the contest. ; Attack ld a, [hl] -- cgit v1.2.3 From a6c720078278fe9e043eb3b0ddfdcaebc9db394d Mon Sep 17 00:00:00 2001 From: yenatch Date: Mon, 9 Sep 2013 12:56:13 -0400 Subject: CheckCGB --- main.asm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/main.asm b/main.asm index b6753a120..4d0c8b432 100644 --- a/main.asm +++ b/main.asm @@ -12065,7 +12065,7 @@ PredefPointers: ; 856b Function864c: ; 864c ; LoadSGBLayout - call Function8d55 + call CheckCGB jp nz, Function8d59 ld a, b cp $ff @@ -12236,7 +12236,7 @@ Function8ade: ; 8ade ; 8b07 Function8b07: ; 8b07 - call Function8d55 + call CheckCGB ret z ld hl, $4b2f ld de, $d000 @@ -12317,7 +12317,7 @@ Function8cb4: ; 8cb4 add hl, hl ld de, $4d05 add hl, de - call Function8d55 + call CheckCGB jr nz, .asm_8cf0 push hl ld hl, $5ce6 @@ -12355,7 +12355,7 @@ Function8cb4: ; 8cb4 INCBIN "baserom.gbc", $8d05, $8d55 - $8d05 -Function8d55: ; 8d55 +CheckCGB: ; 8d55 ld a, [hCGB] and a ret @@ -12939,7 +12939,7 @@ Function981a: ; 981a ; 9853 Function9853: ; 9853 - call Function8d55 + call CheckCGB ret nz di ld a, [$cfbe] @@ -12972,7 +12972,7 @@ Function9853: ; 9853 Function9890: ; 9890 - call Function8d55 + call CheckCGB ret z ld a, $1 ld [rVBK], a -- cgit v1.2.3 From de8e7ca4222a52db05ef188c788e5675610ffa98 Mon Sep 17 00:00:00 2001 From: yenatch Date: Mon, 9 Sep 2013 14:17:03 -0400 Subject: sgb layout predef --- main.asm | 568 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 565 insertions(+), 3 deletions(-) diff --git a/main.asm b/main.asm index 4d0c8b432..f95d09263 100644 --- a/main.asm +++ b/main.asm @@ -12067,6 +12067,7 @@ Function864c: ; 864c ; LoadSGBLayout call CheckCGB jp nz, Function8d59 + ld a, b cp $ff jr nz, .asm_865a @@ -12078,7 +12079,7 @@ Function864c: ; 864c ld l, a ld h, 0 add hl, hl - ld de, $466f + ld de, Table866f add hl, de ld a, [hli] ld h, [hl] @@ -12088,7 +12089,563 @@ Function864c: ; 864c jp [hl] ; 866f -INCBIN "baserom.gbc", $866f, $8a60 - $866f +Table866f: ; 866f + dw Function86ad + dw Function86b4 + dw Function875c + dw Function8763 + dw Function87b2 + dw Function8852 + dw Function8859 + dw Function8867 + dw Function8860 + dw Function88b1 + dw Function87ab + dw Function88cd + dw Function8884 + dw Function891a + dw Function873c + dw Function8897 + dw Function882a + dw Function889e + dw Function8928 + dw Function8890 + dw Function884b + dw Function891a + dw Function8823 + dw Function87e9 + dw Function8921 + dw Function89a6 + dw Function89ad + dw Function89d9 + dw Function89e0 + dw Function8860 + dw Function8969 +; 86ad + +Function86ad: ; 86ad + ld hl, $5c66 + ld de, $5aa6 + ret +; 86b4 + +Function86b4: ; 86b4 + ld hl, $5aa6 + call Function9809 + ld hl, $5ce6 + ld de, $cda9 + ld bc, $0010 + call CopyBytes + ld a, [PlayerHPPal] + ld l, a + ld h, $0 + add hl, hl + add hl, hl + ld de, $68be + add hl, de + ld a, [hli] + ld [$cdac], a + ld a, [hli] + ld [$cdad], a + ld a, [hli] + ld [$cdae], a + ld a, [hl] + ld [$cdaf], a + ld a, [EnemyHPPal] + ld l, a + ld h, $0 + add hl, hl + add hl, hl + ld de, $68be + add hl, de + ld a, [hli] + ld [$cdb2], a + ld a, [hli] + ld [$cdb3], a + ld a, [hli] + ld [$cdb4], a + ld a, [hl] + ld [$cdb5], a + ld hl, $5cf6 + ld de, $cdb9 + ld bc, $0010 + call CopyBytes + call Function9729 + ld a, [hli] + ld [$cdbc], a + ld a, [hli] + ld [$cdbd], a + ld a, [hli] + ld [$cdbe], a + ld a, [hl] + ld [$cdbf], a + call Function973a + ld a, [hli] + ld [$cdc2], a + ld a, [hli] + ld [$cdc3], a + ld a, [hli] + ld [$cdc4], a + ld a, [hl] + ld [$cdc5], a + ld hl, $cda9 + ld de, $cdb9 + ld a, $1 + ld [SGBPredef], a + ret +; 873c + +Function873c: ; 873c + ld hl, $5bd6 + ld de, $cda9 + ld bc, $0010 + call CopyBytes + ld hl, $cdaa + ld [hl], $10 + inc hl + inc hl + ld a, [PlayerHPPal] + add $2f + ld [hl], a + ld hl, $cda9 + ld de, $5ad6 + ret +; 875c + +Function875c: ; 875c + ld hl, $5c76 + ld de, $5a86 + ret +; 8763 + +Function8763: ; 8763 + ld hl, $5ce6 + ld de, $cda9 + ld bc, $0010 + call CopyBytes + ld a, [$cda1] + ld l, a + ld h, $0 + add hl, hl + add hl, hl + ld de, $68be + add hl, de + ld a, [hli] + ld [$cdac], a + ld a, [hli] + ld [$cdad], a + ld a, [hli] + ld [$cdae], a + ld a, [hl] + ld [$cdaf], a + ld a, [CurPartySpecies] + ld bc, TempMonDVs + call Function974b + ld a, [hli] + ld [$cdb2], a + ld a, [hli] + ld [$cdb3], a + ld a, [hli] + ld [$cdb4], a + ld a, [hl] + ld [$cdb5], a + ld hl, $cda9 + ld de, $5ac6 + ret +; 87ab + +Function87ab: ; 87ab + ld hl, $5c56 + ld de, $cdaa + ret +; 87b2 + +Function87b2: ; 87b2 + ld hl, $5ce6 + ld de, $cda9 + ld bc, $0010 + call CopyBytes + ld hl, $cdac + ld [hl], $9f + inc hl + ld [hl], $2a + inc hl + ld [hl], $5a + inc hl + ld [hl], $19 + ld a, [CurPartySpecies] + call Function9775 + ld a, [hli] + ld [$cdb2], a + ld a, [hli] + ld [$cdb3], a + ld a, [hli] + ld [$cdb4], a + ld a, [hl] + ld [$cdb5], a + ld hl, $cda9 + ld de, $5ae6 + ret +; 87e9 + +Function87e9: ; 87e9 + ld hl, $5ce6 + ld de, $cda9 + ld bc, $0010 + call CopyBytes + ld hl, $cdac + ld [hl], $9f + inc hl + ld [hl], $2a + inc hl + ld [hl], $5a + inc hl + ld [hl], $19 + ld a, [CurPartySpecies] + ld bc, TempMonDVs + call Function974b + ld a, [hli] + ld [$cdb2], a + ld a, [hli] + ld [$cdb3], a + ld a, [hli] + ld [$cdb4], a + ld a, [hl] + ld [$cdb5], a + ld hl, $cda9 + ld de, $5ae6 + ret +; 8823 + +Function8823: ; 8823 + call Function87b2 + ld de, $5af6 + ret +; 882a + +Function882a: ; 882a + ld hl, $5ce6 + ld de, $cda9 + ld bc, $0010 + call CopyBytes + ld hl, $cdac + ld [hl], $9f + inc hl + ld [hl], $2a + inc hl + ld [hl], $5a + inc hl + ld [hl], $19 + ld hl, $cda9 + ld de, $5a86 + ret +; 884b + +Function884b: ; 884b + ld hl, $5c36 + ld de, $5a86 + ret +; 8852 + +Function8852: ; 8852 + ld hl, $5c96 + ld de, $5b06 + ret +; 8859 + +Function8859: ; 8859 + ld hl, $5ca6 + ld de, $5b76 + ret +; 8860 + +Function8860: ; 8860 + ld hl, $5cb6 + ld de, $5a86 + ret +; 8867 + +Function8867: ; 8867 + ld b, $0 + ld hl, $4878 + add hl, bc + add hl, bc + add hl, bc + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + inc hl + ld a, [hli] + ld h, [hl] + ld l, a + ret +; 8878 + +INCBIN "baserom.gbc", $8878, $8884 - $8878 + +Function8884: ; 8884 + ld hl, $5b96 + ld de, $5b56 + ld a, $8 + ld [SGBPredef], a + ret +; 8890 + +Function8890: ; 8890 + ld hl, $5ba6 + ld de, $5b86 + ret +; 8897 + +Function8897: ; 8897 + ld hl, $5c46 + ld de, $5a86 + ret +; 889e + +Function889e: ; 889e + ld hl, $5a86 + ld de, PlayerLightScreenCount + ld bc, $0010 + call CopyBytes + ld hl, $5bb6 + ld de, $5a86 + ret +; 88b1 + +Function88b1: ; 88b1 + ld hl, $5bd6 + ld de, $cda9 + ld bc, $0010 + call CopyBytes + call Function8a0c + ld hl, $cdaa + ld [hld], a + ld de, $5a86 + ld a, $9 + ld [SGBPredef], a + ret +; 88cd + +Function88cd: ; 88cd + push bc + ld hl, $5ce6 + ld de, $cda9 + ld bc, $0010 + call CopyBytes + pop bc + ld a, c + and a + jr z, .asm_88ef + ld hl, $cdac + ld [hl], $e7 + inc hl + ld [hl], $1c + inc hl + ld [hl], $62 + inc hl + ld [hl], $c + jr .asm_8913 + +.asm_88ef + ld hl, PartyMon1DVs + ld bc, $0030 + ld a, [CurPartyMon] + call AddNTimes + ld c, l + ld b, h + ld a, [PlayerHPPal] + call Function974b + ld a, [hli] + ld [$cdac], a + ld a, [hli] + ld [$cdad], a + ld a, [hli] + ld [$cdae], a + ld a, [hl] + ld [$cdaf], a + +.asm_8913 + ld hl, $cda9 + ld de, $5a86 + ret +; 891a + +Function891a: ; 891a + ld hl, $5cb6 + ld de, $5a86 + ret +; 8921 + +Function8921: ; 8921 + ld hl, $5bc6 + ld de, $5a86 + ret +; 8928 + +Function8928: ; 8928 + ld hl, $5bd6 + ld de, $cda9 + ld bc, $0010 + call CopyBytes + ld hl, $5a86 + ld de, $cdb9 + ld bc, $0010 + call CopyBytes + call Function8a0c + ld hl, $cdaa + ld [hl], a + ld hl, $cdac + ld [hl], $2e + ld hl, $cdbc + ld a, $5 + ld [hli], a + ld a, [$cf83] + ld [hli], a + ld a, [$cf82] + ld [hli], a + ld a, [$cf85] + ld [hli], a + ld a, [$cf84] + ld [hl], a + ld hl, $cda9 + ld de, $cdb9 + ret +; 8969 + +Function8969: ; 8969 + ld hl, $5ce6 + ld de, $cda9 + ld bc, $0010 + call CopyBytes + ld a, [CurPartySpecies] + ld l, a + ld h, $0 + add hl, hl + add hl, hl + add hl, hl + ld de, $68ce + add hl, de + ld a, [$cf65] + and $3 + sla a + sla a + ld c, a + ld b, $0 + add hl, bc + ld a, [hli] + ld [$cdac], a + ld a, [hli] + ld [$cdad], a + ld a, [hli] + ld [$cdae], a + ld a, [hl] + ld [$cdaf], a + ld hl, $cda9 + ld de, $5a86 + ret +; 89a6 + +Function89a6: ; 89a6 + ld hl, $5cd6 + ld de, $5a86 + ret +; 89ad + +Function89ad: ; 89ad + ld hl, $5ce6 + ld de, $cda9 + ld bc, $0010 + call CopyBytes + ld a, [CurPartySpecies] + ld bc, TempMonDVs + call Function974b + ld a, [hli] + ld [$cdac], a + ld a, [hli] + ld [$cdad], a + ld a, [hli] + ld [$cdae], a + ld a, [hl] + ld [$cdaf], a + ld hl, $cda9 + ld de, $5a86 + ret +; 89d9 + +Function89d9: ; 89d9 + ld hl, $5cc6 + ld de, $5a86 + ret +; 89e0 + +Function89e0: ; 89e0 + ld hl, $5ce6 + ld de, $cda9 + ld bc, $0010 + call CopyBytes + ld a, [CurPartySpecies] + ld bc, TempMonDVs + call Function9764 + ld a, [hli] + ld [$cdac], a + ld a, [hli] + ld [$cdad], a + ld a, [hli] + ld [$cdae], a + ld a, [hl] + ld [$cdaf], a + ld hl, $cda9 + ld de, $5a86 + ret +; 8a0c + +Function8a0c: ; 8a0c + ld a, [TimeOfDayPal] + cp $2 + jr c, .asm_8a16 + ld a, $19 + ret + +.asm_8a16 + ld a, [$d19a] + cp $2 + jr z, .asm_8a39 + cp $4 + jr z, .asm_8a3c + cp $7 + jr z, .asm_8a3c + cp $5 + jr z, .asm_8a3f + cp $6 + jr z, .asm_8a42 + ld a, [MapGroup] + ld e, a + ld d, $0 + ld hl, $4a45 + add hl, de + ld a, [hl] + ret + +.asm_8a39 + ld a, $0 + ret + +.asm_8a3c + ld a, $18 + ret + +.asm_8a3f + ld a, $6 + ret + +.asm_8a42 + ld a, $3 + ret +; 8a45 + +INCBIN "baserom.gbc", $8a45, $8a60 - $8a45 Function8a60: ; 8a60 push de @@ -12857,7 +13414,12 @@ Function9764: ; 9764 ret ; 9775 -INCBIN "baserom.gbc", $9775, $97ee - $9775 +Function9775: ; 9775 + call Function97ee + ret +; 9779 + +INCBIN "baserom.gbc", $9779, $97ee - $9779 Function97ee: ; 97ee ld l, a -- cgit v1.2.3 From e33423374b6a1468de8db7a8db0b588786cffa7a Mon Sep 17 00:00:00 2001 From: yenatch Date: Mon, 9 Sep 2013 14:33:04 -0400 Subject: split sgb stuff into predef/sgb.asm --- main.asm | 591 +-------------------------------------------------------- predef/sgb.asm | 591 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 592 insertions(+), 590 deletions(-) create mode 100644 predef/sgb.asm diff --git a/main.asm b/main.asm index f95d09263..b2ca179fa 100644 --- a/main.asm +++ b/main.asm @@ -12063,596 +12063,7 @@ PredefPointers: ; 856b ; 864c -Function864c: ; 864c -; LoadSGBLayout - call CheckCGB - jp nz, Function8d59 - - ld a, b - cp $ff - jr nz, .asm_865a - ld a, [SGBPredef] - -.asm_865a - cp $fc - jp z, Function8ade - ld l, a - ld h, 0 - add hl, hl - ld de, Table866f - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - ld de, Function8a60 - push de - jp [hl] -; 866f - -Table866f: ; 866f - dw Function86ad - dw Function86b4 - dw Function875c - dw Function8763 - dw Function87b2 - dw Function8852 - dw Function8859 - dw Function8867 - dw Function8860 - dw Function88b1 - dw Function87ab - dw Function88cd - dw Function8884 - dw Function891a - dw Function873c - dw Function8897 - dw Function882a - dw Function889e - dw Function8928 - dw Function8890 - dw Function884b - dw Function891a - dw Function8823 - dw Function87e9 - dw Function8921 - dw Function89a6 - dw Function89ad - dw Function89d9 - dw Function89e0 - dw Function8860 - dw Function8969 -; 86ad - -Function86ad: ; 86ad - ld hl, $5c66 - ld de, $5aa6 - ret -; 86b4 - -Function86b4: ; 86b4 - ld hl, $5aa6 - call Function9809 - ld hl, $5ce6 - ld de, $cda9 - ld bc, $0010 - call CopyBytes - ld a, [PlayerHPPal] - ld l, a - ld h, $0 - add hl, hl - add hl, hl - ld de, $68be - add hl, de - ld a, [hli] - ld [$cdac], a - ld a, [hli] - ld [$cdad], a - ld a, [hli] - ld [$cdae], a - ld a, [hl] - ld [$cdaf], a - ld a, [EnemyHPPal] - ld l, a - ld h, $0 - add hl, hl - add hl, hl - ld de, $68be - add hl, de - ld a, [hli] - ld [$cdb2], a - ld a, [hli] - ld [$cdb3], a - ld a, [hli] - ld [$cdb4], a - ld a, [hl] - ld [$cdb5], a - ld hl, $5cf6 - ld de, $cdb9 - ld bc, $0010 - call CopyBytes - call Function9729 - ld a, [hli] - ld [$cdbc], a - ld a, [hli] - ld [$cdbd], a - ld a, [hli] - ld [$cdbe], a - ld a, [hl] - ld [$cdbf], a - call Function973a - ld a, [hli] - ld [$cdc2], a - ld a, [hli] - ld [$cdc3], a - ld a, [hli] - ld [$cdc4], a - ld a, [hl] - ld [$cdc5], a - ld hl, $cda9 - ld de, $cdb9 - ld a, $1 - ld [SGBPredef], a - ret -; 873c - -Function873c: ; 873c - ld hl, $5bd6 - ld de, $cda9 - ld bc, $0010 - call CopyBytes - ld hl, $cdaa - ld [hl], $10 - inc hl - inc hl - ld a, [PlayerHPPal] - add $2f - ld [hl], a - ld hl, $cda9 - ld de, $5ad6 - ret -; 875c - -Function875c: ; 875c - ld hl, $5c76 - ld de, $5a86 - ret -; 8763 - -Function8763: ; 8763 - ld hl, $5ce6 - ld de, $cda9 - ld bc, $0010 - call CopyBytes - ld a, [$cda1] - ld l, a - ld h, $0 - add hl, hl - add hl, hl - ld de, $68be - add hl, de - ld a, [hli] - ld [$cdac], a - ld a, [hli] - ld [$cdad], a - ld a, [hli] - ld [$cdae], a - ld a, [hl] - ld [$cdaf], a - ld a, [CurPartySpecies] - ld bc, TempMonDVs - call Function974b - ld a, [hli] - ld [$cdb2], a - ld a, [hli] - ld [$cdb3], a - ld a, [hli] - ld [$cdb4], a - ld a, [hl] - ld [$cdb5], a - ld hl, $cda9 - ld de, $5ac6 - ret -; 87ab - -Function87ab: ; 87ab - ld hl, $5c56 - ld de, $cdaa - ret -; 87b2 - -Function87b2: ; 87b2 - ld hl, $5ce6 - ld de, $cda9 - ld bc, $0010 - call CopyBytes - ld hl, $cdac - ld [hl], $9f - inc hl - ld [hl], $2a - inc hl - ld [hl], $5a - inc hl - ld [hl], $19 - ld a, [CurPartySpecies] - call Function9775 - ld a, [hli] - ld [$cdb2], a - ld a, [hli] - ld [$cdb3], a - ld a, [hli] - ld [$cdb4], a - ld a, [hl] - ld [$cdb5], a - ld hl, $cda9 - ld de, $5ae6 - ret -; 87e9 - -Function87e9: ; 87e9 - ld hl, $5ce6 - ld de, $cda9 - ld bc, $0010 - call CopyBytes - ld hl, $cdac - ld [hl], $9f - inc hl - ld [hl], $2a - inc hl - ld [hl], $5a - inc hl - ld [hl], $19 - ld a, [CurPartySpecies] - ld bc, TempMonDVs - call Function974b - ld a, [hli] - ld [$cdb2], a - ld a, [hli] - ld [$cdb3], a - ld a, [hli] - ld [$cdb4], a - ld a, [hl] - ld [$cdb5], a - ld hl, $cda9 - ld de, $5ae6 - ret -; 8823 - -Function8823: ; 8823 - call Function87b2 - ld de, $5af6 - ret -; 882a - -Function882a: ; 882a - ld hl, $5ce6 - ld de, $cda9 - ld bc, $0010 - call CopyBytes - ld hl, $cdac - ld [hl], $9f - inc hl - ld [hl], $2a - inc hl - ld [hl], $5a - inc hl - ld [hl], $19 - ld hl, $cda9 - ld de, $5a86 - ret -; 884b - -Function884b: ; 884b - ld hl, $5c36 - ld de, $5a86 - ret -; 8852 - -Function8852: ; 8852 - ld hl, $5c96 - ld de, $5b06 - ret -; 8859 - -Function8859: ; 8859 - ld hl, $5ca6 - ld de, $5b76 - ret -; 8860 - -Function8860: ; 8860 - ld hl, $5cb6 - ld de, $5a86 - ret -; 8867 - -Function8867: ; 8867 - ld b, $0 - ld hl, $4878 - add hl, bc - add hl, bc - add hl, bc - add hl, bc - ld e, [hl] - inc hl - ld d, [hl] - inc hl - ld a, [hli] - ld h, [hl] - ld l, a - ret -; 8878 - -INCBIN "baserom.gbc", $8878, $8884 - $8878 - -Function8884: ; 8884 - ld hl, $5b96 - ld de, $5b56 - ld a, $8 - ld [SGBPredef], a - ret -; 8890 - -Function8890: ; 8890 - ld hl, $5ba6 - ld de, $5b86 - ret -; 8897 - -Function8897: ; 8897 - ld hl, $5c46 - ld de, $5a86 - ret -; 889e - -Function889e: ; 889e - ld hl, $5a86 - ld de, PlayerLightScreenCount - ld bc, $0010 - call CopyBytes - ld hl, $5bb6 - ld de, $5a86 - ret -; 88b1 - -Function88b1: ; 88b1 - ld hl, $5bd6 - ld de, $cda9 - ld bc, $0010 - call CopyBytes - call Function8a0c - ld hl, $cdaa - ld [hld], a - ld de, $5a86 - ld a, $9 - ld [SGBPredef], a - ret -; 88cd - -Function88cd: ; 88cd - push bc - ld hl, $5ce6 - ld de, $cda9 - ld bc, $0010 - call CopyBytes - pop bc - ld a, c - and a - jr z, .asm_88ef - ld hl, $cdac - ld [hl], $e7 - inc hl - ld [hl], $1c - inc hl - ld [hl], $62 - inc hl - ld [hl], $c - jr .asm_8913 - -.asm_88ef - ld hl, PartyMon1DVs - ld bc, $0030 - ld a, [CurPartyMon] - call AddNTimes - ld c, l - ld b, h - ld a, [PlayerHPPal] - call Function974b - ld a, [hli] - ld [$cdac], a - ld a, [hli] - ld [$cdad], a - ld a, [hli] - ld [$cdae], a - ld a, [hl] - ld [$cdaf], a - -.asm_8913 - ld hl, $cda9 - ld de, $5a86 - ret -; 891a - -Function891a: ; 891a - ld hl, $5cb6 - ld de, $5a86 - ret -; 8921 - -Function8921: ; 8921 - ld hl, $5bc6 - ld de, $5a86 - ret -; 8928 - -Function8928: ; 8928 - ld hl, $5bd6 - ld de, $cda9 - ld bc, $0010 - call CopyBytes - ld hl, $5a86 - ld de, $cdb9 - ld bc, $0010 - call CopyBytes - call Function8a0c - ld hl, $cdaa - ld [hl], a - ld hl, $cdac - ld [hl], $2e - ld hl, $cdbc - ld a, $5 - ld [hli], a - ld a, [$cf83] - ld [hli], a - ld a, [$cf82] - ld [hli], a - ld a, [$cf85] - ld [hli], a - ld a, [$cf84] - ld [hl], a - ld hl, $cda9 - ld de, $cdb9 - ret -; 8969 - -Function8969: ; 8969 - ld hl, $5ce6 - ld de, $cda9 - ld bc, $0010 - call CopyBytes - ld a, [CurPartySpecies] - ld l, a - ld h, $0 - add hl, hl - add hl, hl - add hl, hl - ld de, $68ce - add hl, de - ld a, [$cf65] - and $3 - sla a - sla a - ld c, a - ld b, $0 - add hl, bc - ld a, [hli] - ld [$cdac], a - ld a, [hli] - ld [$cdad], a - ld a, [hli] - ld [$cdae], a - ld a, [hl] - ld [$cdaf], a - ld hl, $cda9 - ld de, $5a86 - ret -; 89a6 - -Function89a6: ; 89a6 - ld hl, $5cd6 - ld de, $5a86 - ret -; 89ad - -Function89ad: ; 89ad - ld hl, $5ce6 - ld de, $cda9 - ld bc, $0010 - call CopyBytes - ld a, [CurPartySpecies] - ld bc, TempMonDVs - call Function974b - ld a, [hli] - ld [$cdac], a - ld a, [hli] - ld [$cdad], a - ld a, [hli] - ld [$cdae], a - ld a, [hl] - ld [$cdaf], a - ld hl, $cda9 - ld de, $5a86 - ret -; 89d9 - -Function89d9: ; 89d9 - ld hl, $5cc6 - ld de, $5a86 - ret -; 89e0 - -Function89e0: ; 89e0 - ld hl, $5ce6 - ld de, $cda9 - ld bc, $0010 - call CopyBytes - ld a, [CurPartySpecies] - ld bc, TempMonDVs - call Function9764 - ld a, [hli] - ld [$cdac], a - ld a, [hli] - ld [$cdad], a - ld a, [hli] - ld [$cdae], a - ld a, [hl] - ld [$cdaf], a - ld hl, $cda9 - ld de, $5a86 - ret -; 8a0c - -Function8a0c: ; 8a0c - ld a, [TimeOfDayPal] - cp $2 - jr c, .asm_8a16 - ld a, $19 - ret - -.asm_8a16 - ld a, [$d19a] - cp $2 - jr z, .asm_8a39 - cp $4 - jr z, .asm_8a3c - cp $7 - jr z, .asm_8a3c - cp $5 - jr z, .asm_8a3f - cp $6 - jr z, .asm_8a42 - ld a, [MapGroup] - ld e, a - ld d, $0 - ld hl, $4a45 - add hl, de - ld a, [hl] - ret - -.asm_8a39 - ld a, $0 - ret - -.asm_8a3c - ld a, $18 - ret - -.asm_8a3f - ld a, $6 - ret - -.asm_8a42 - ld a, $3 - ret -; 8a45 - -INCBIN "baserom.gbc", $8a45, $8a60 - $8a45 - -Function8a60: ; 8a60 - push de - call Function9809 - pop hl - jp Function9809 -; 8a68 +INCLUDE "predef/sgb.asm" CheckShininess: ; 8a68 diff --git a/predef/sgb.asm b/predef/sgb.asm new file mode 100644 index 000000000..323a0fbb7 --- /dev/null +++ b/predef/sgb.asm @@ -0,0 +1,591 @@ +Function864c: ; 864c +; LoadSGBLayout + call CheckCGB + jp nz, Function8d59 + + ld a, b + cp $ff + jr nz, .asm_865a + ld a, [SGBPredef] + +.asm_865a + cp $fc + jp z, Function8ade + ld l, a + ld h, 0 + add hl, hl + ld de, Table866f + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ld de, Function8a60 + push de + jp [hl] +; 866f + +Table866f: ; 866f + dw Function86ad + dw Function86b4 + dw Function875c + dw Function8763 + dw Function87b2 + dw Function8852 + dw Function8859 + dw Function8867 + dw Function8860 + dw Function88b1 + dw Function87ab + dw Function88cd + dw Function8884 + dw Function891a + dw Function873c + dw Function8897 + dw Function882a + dw Function889e + dw Function8928 + dw Function8890 + dw Function884b + dw Function891a + dw Function8823 + dw Function87e9 + dw Function8921 + dw Function89a6 + dw Function89ad + dw Function89d9 + dw Function89e0 + dw Function8860 + dw Function8969 +; 86ad + +Function86ad: ; 86ad + ld hl, $5c66 + ld de, $5aa6 + ret +; 86b4 + +Function86b4: ; 86b4 + ld hl, $5aa6 + call Function9809 + ld hl, $5ce6 + ld de, $cda9 + ld bc, $0010 + call CopyBytes + ld a, [PlayerHPPal] + ld l, a + ld h, $0 + add hl, hl + add hl, hl + ld de, $68be + add hl, de + ld a, [hli] + ld [$cdac], a + ld a, [hli] + ld [$cdad], a + ld a, [hli] + ld [$cdae], a + ld a, [hl] + ld [$cdaf], a + ld a, [EnemyHPPal] + ld l, a + ld h, $0 + add hl, hl + add hl, hl + ld de, $68be + add hl, de + ld a, [hli] + ld [$cdb2], a + ld a, [hli] + ld [$cdb3], a + ld a, [hli] + ld [$cdb4], a + ld a, [hl] + ld [$cdb5], a + ld hl, $5cf6 + ld de, $cdb9 + ld bc, $0010 + call CopyBytes + call Function9729 + ld a, [hli] + ld [$cdbc], a + ld a, [hli] + ld [$cdbd], a + ld a, [hli] + ld [$cdbe], a + ld a, [hl] + ld [$cdbf], a + call Function973a + ld a, [hli] + ld [$cdc2], a + ld a, [hli] + ld [$cdc3], a + ld a, [hli] + ld [$cdc4], a + ld a, [hl] + ld [$cdc5], a + ld hl, $cda9 + ld de, $cdb9 + ld a, $1 + ld [SGBPredef], a + ret +; 873c + +Function873c: ; 873c + ld hl, $5bd6 + ld de, $cda9 + ld bc, $0010 + call CopyBytes + ld hl, $cdaa + ld [hl], $10 + inc hl + inc hl + ld a, [PlayerHPPal] + add $2f + ld [hl], a + ld hl, $cda9 + ld de, $5ad6 + ret +; 875c + +Function875c: ; 875c + ld hl, $5c76 + ld de, $5a86 + ret +; 8763 + +Function8763: ; 8763 + ld hl, $5ce6 + ld de, $cda9 + ld bc, $0010 + call CopyBytes + ld a, [$cda1] + ld l, a + ld h, $0 + add hl, hl + add hl, hl + ld de, $68be + add hl, de + ld a, [hli] + ld [$cdac], a + ld a, [hli] + ld [$cdad], a + ld a, [hli] + ld [$cdae], a + ld a, [hl] + ld [$cdaf], a + ld a, [CurPartySpecies] + ld bc, TempMonDVs + call Function974b + ld a, [hli] + ld [$cdb2], a + ld a, [hli] + ld [$cdb3], a + ld a, [hli] + ld [$cdb4], a + ld a, [hl] + ld [$cdb5], a + ld hl, $cda9 + ld de, $5ac6 + ret +; 87ab + +Function87ab: ; 87ab + ld hl, $5c56 + ld de, $cdaa + ret +; 87b2 + +Function87b2: ; 87b2 + ld hl, $5ce6 + ld de, $cda9 + ld bc, $0010 + call CopyBytes + ld hl, $cdac + ld [hl], $9f + inc hl + ld [hl], $2a + inc hl + ld [hl], $5a + inc hl + ld [hl], $19 + ld a, [CurPartySpecies] + call Function9775 + ld a, [hli] + ld [$cdb2], a + ld a, [hli] + ld [$cdb3], a + ld a, [hli] + ld [$cdb4], a + ld a, [hl] + ld [$cdb5], a + ld hl, $cda9 + ld de, $5ae6 + ret +; 87e9 + +Function87e9: ; 87e9 + ld hl, $5ce6 + ld de, $cda9 + ld bc, $0010 + call CopyBytes + ld hl, $cdac + ld [hl], $9f + inc hl + ld [hl], $2a + inc hl + ld [hl], $5a + inc hl + ld [hl], $19 + ld a, [CurPartySpecies] + ld bc, TempMonDVs + call Function974b + ld a, [hli] + ld [$cdb2], a + ld a, [hli] + ld [$cdb3], a + ld a, [hli] + ld [$cdb4], a + ld a, [hl] + ld [$cdb5], a + ld hl, $cda9 + ld de, $5ae6 + ret +; 8823 + +Function8823: ; 8823 + call Function87b2 + ld de, $5af6 + ret +; 882a + +Function882a: ; 882a + ld hl, $5ce6 + ld de, $cda9 + ld bc, $0010 + call CopyBytes + ld hl, $cdac + ld [hl], $9f + inc hl + ld [hl], $2a + inc hl + ld [hl], $5a + inc hl + ld [hl], $19 + ld hl, $cda9 + ld de, $5a86 + ret +; 884b + +Function884b: ; 884b + ld hl, $5c36 + ld de, $5a86 + ret +; 8852 + +Function8852: ; 8852 + ld hl, $5c96 + ld de, $5b06 + ret +; 8859 + +Function8859: ; 8859 + ld hl, $5ca6 + ld de, $5b76 + ret +; 8860 + +Function8860: ; 8860 + ld hl, $5cb6 + ld de, $5a86 + ret +; 8867 + +Function8867: ; 8867 + ld b, $0 + ld hl, $4878 + add hl, bc + add hl, bc + add hl, bc + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + inc hl + ld a, [hli] + ld h, [hl] + ld l, a + ret +; 8878 + +INCBIN "baserom.gbc", $8878, $8884 - $8878 + +Function8884: ; 8884 + ld hl, $5b96 + ld de, $5b56 + ld a, $8 + ld [SGBPredef], a + ret +; 8890 + +Function8890: ; 8890 + ld hl, $5ba6 + ld de, $5b86 + ret +; 8897 + +Function8897: ; 8897 + ld hl, $5c46 + ld de, $5a86 + ret +; 889e + +Function889e: ; 889e + ld hl, $5a86 + ld de, PlayerLightScreenCount + ld bc, $0010 + call CopyBytes + ld hl, $5bb6 + ld de, $5a86 + ret +; 88b1 + +Function88b1: ; 88b1 + ld hl, $5bd6 + ld de, $cda9 + ld bc, $0010 + call CopyBytes + call Function8a0c + ld hl, $cdaa + ld [hld], a + ld de, $5a86 + ld a, $9 + ld [SGBPredef], a + ret +; 88cd + +Function88cd: ; 88cd + push bc + ld hl, $5ce6 + ld de, $cda9 + ld bc, $0010 + call CopyBytes + pop bc + ld a, c + and a + jr z, .asm_88ef + ld hl, $cdac + ld [hl], $e7 + inc hl + ld [hl], $1c + inc hl + ld [hl], $62 + inc hl + ld [hl], $c + jr .asm_8913 + +.asm_88ef + ld hl, PartyMon1DVs + ld bc, $0030 + ld a, [CurPartyMon] + call AddNTimes + ld c, l + ld b, h + ld a, [PlayerHPPal] + call Function974b + ld a, [hli] + ld [$cdac], a + ld a, [hli] + ld [$cdad], a + ld a, [hli] + ld [$cdae], a + ld a, [hl] + ld [$cdaf], a + +.asm_8913 + ld hl, $cda9 + ld de, $5a86 + ret +; 891a + +Function891a: ; 891a + ld hl, $5cb6 + ld de, $5a86 + ret +; 8921 + +Function8921: ; 8921 + ld hl, $5bc6 + ld de, $5a86 + ret +; 8928 + +Function8928: ; 8928 + ld hl, $5bd6 + ld de, $cda9 + ld bc, $0010 + call CopyBytes + ld hl, $5a86 + ld de, $cdb9 + ld bc, $0010 + call CopyBytes + call Function8a0c + ld hl, $cdaa + ld [hl], a + ld hl, $cdac + ld [hl], $2e + ld hl, $cdbc + ld a, $5 + ld [hli], a + ld a, [$cf83] + ld [hli], a + ld a, [$cf82] + ld [hli], a + ld a, [$cf85] + ld [hli], a + ld a, [$cf84] + ld [hl], a + ld hl, $cda9 + ld de, $cdb9 + ret +; 8969 + +Function8969: ; 8969 + ld hl, $5ce6 + ld de, $cda9 + ld bc, $0010 + call CopyBytes + ld a, [CurPartySpecies] + ld l, a + ld h, $0 + add hl, hl + add hl, hl + add hl, hl + ld de, $68ce + add hl, de + ld a, [$cf65] + and $3 + sla a + sla a + ld c, a + ld b, $0 + add hl, bc + ld a, [hli] + ld [$cdac], a + ld a, [hli] + ld [$cdad], a + ld a, [hli] + ld [$cdae], a + ld a, [hl] + ld [$cdaf], a + ld hl, $cda9 + ld de, $5a86 + ret +; 89a6 + +Function89a6: ; 89a6 + ld hl, $5cd6 + ld de, $5a86 + ret +; 89ad + +Function89ad: ; 89ad + ld hl, $5ce6 + ld de, $cda9 + ld bc, $0010 + call CopyBytes + ld a, [CurPartySpecies] + ld bc, TempMonDVs + call Function974b + ld a, [hli] + ld [$cdac], a + ld a, [hli] + ld [$cdad], a + ld a, [hli] + ld [$cdae], a + ld a, [hl] + ld [$cdaf], a + ld hl, $cda9 + ld de, $5a86 + ret +; 89d9 + +Function89d9: ; 89d9 + ld hl, $5cc6 + ld de, $5a86 + ret +; 89e0 + +Function89e0: ; 89e0 + ld hl, $5ce6 + ld de, $cda9 + ld bc, $0010 + call CopyBytes + ld a, [CurPartySpecies] + ld bc, TempMonDVs + call Function9764 + ld a, [hli] + ld [$cdac], a + ld a, [hli] + ld [$cdad], a + ld a, [hli] + ld [$cdae], a + ld a, [hl] + ld [$cdaf], a + ld hl, $cda9 + ld de, $5a86 + ret +; 8a0c + +Function8a0c: ; 8a0c + ld a, [TimeOfDayPal] + cp $2 + jr c, .asm_8a16 + ld a, $19 + ret + +.asm_8a16 + ld a, [$d19a] + cp $2 + jr z, .asm_8a39 + cp $4 + jr z, .asm_8a3c + cp $7 + jr z, .asm_8a3c + cp $5 + jr z, .asm_8a3f + cp $6 + jr z, .asm_8a42 + ld a, [MapGroup] + ld e, a + ld d, $0 + ld hl, $4a45 + add hl, de + ld a, [hl] + ret + +.asm_8a39 + ld a, $0 + ret + +.asm_8a3c + ld a, $18 + ret + +.asm_8a3f + ld a, $6 + ret + +.asm_8a42 + ld a, $3 + ret +; 8a45 + +INCBIN "baserom.gbc", $8a45, $8a60 - $8a45 + +Function8a60: ; 8a60 + push de + call Function9809 + pop hl + jp Function9809 +; 8a68 + -- cgit v1.2.3 From dab74d719e03c83ca6cbb03c9fde8368c9e39a40 Mon Sep 17 00:00:00 2001 From: yenatch Date: Mon, 9 Sep 2013 15:12:30 -0400 Subject: cgb replacements for sgb layouts --- main.asm | 949 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 941 insertions(+), 8 deletions(-) diff --git a/main.asm b/main.asm index b2ca179fa..2cd8c3dc7 100644 --- a/main.asm +++ b/main.asm @@ -12340,9 +12340,9 @@ Function8d59: ; 8d59 jp z, Function96f3 call Function9673 ld l, a - ld h, $0 + ld h, 0 add hl, hl - ld de, $4d7a + ld de, Table8d7a add hl, de ld a, [hli] ld h, [hl] @@ -12356,7 +12356,39 @@ Function8d79: ; 8d79 ret ; 8d7a -INCBIN "baserom.gbc", $8d7a, $8db8 - $8d7a +Table8d7a: ; 8d7a + dw Function8db8 + dw Function8ddb + dw Function8eb9 + dw Function8edb + dw Function8f70 + dw Function906e + dw Function90f8 + dw Function9122 + dw Function91ad + dw Function91c8 + dw Function91d1 + dw Function91e4 + dw Function9228 + dw Function9251 + dw Function9373 + dw Function93a6 + dw Function93ba + dw Function9195 + dw Function9499 + dw Function94d0 + dw Function93d3 + dw Function9289 + dw Function903e + dw Function8fca + dw Function925e + dw Function94fa + dw Function9529 + dw Function9555 + dw Function9578 + dw Function9591 + dw Function9542 +; 8db8 Function8db8: ; 8db8 ld hl, $5c67 @@ -12371,8 +12403,9 @@ Function8db8: ; 8db8 ld de, MartPointer ld c, $2 call $5615 - jr .asm_8e23 + jr Function8e23 +Function8ddb: ; 8ddb ld de, $d000 call Function9729 push hl @@ -12407,7 +12440,7 @@ Function8db8: ; 8db8 ld [SGBPredef], a call Function96a4 -.asm_8e23 +Function8e23: ; 8e23 call Function8e85 ld hl, AttrMap ld bc, $0168 @@ -12547,7 +12580,670 @@ Function8edb: ; 8edb ret ; 8f52 -INCBIN "baserom.gbc", $8f52, $9610 - $8f52 +INCBIN "baserom.gbc", $8f52, $8f70 - $8f52 + +Function8f70: ; 8f70 + ld de, Unkn1Pals + ld a, $1d + call Function9625 + call Function9630 + ld a, [CurPartySpecies] + cp $ff + jr nz, .asm_8f8a + ld hl, $4fba + call Function9630 + jr .asm_8f90 + +.asm_8f8a + call Function9775 + call Function9643 + +.asm_8f90 + call Function9699 + ld hl, $cdee + ld bc, $0707 + ld a, $1 + call Function9663 + call Function971a + ld hl, $4fc2 + ld de, $d078 + ld bc, $0008 + ld a, $5 + call FarCopyWRAM + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 8fba + +INCBIN "baserom.gbc", $8fba, $8fca - $8fba + +Function8fca: ; 8fca + ld de, Unkn1Pals + ld a, $1d + call Function9625 + call Function9630 + ld a, [CurPartySpecies] + cp $ff + jr nz, .asm_8fe4 + ld hl, $5036 + call Function9630 + jr .asm_8fed + +.asm_8fe4 + ld bc, TempMonDVs + call Function974b + call Function9643 + +.asm_8fed + call Function9699 + ld hl, $ce2a + ld bc, $0707 + ld a, $1 + call Function9663 + call Function971a + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 9009 + +INCBIN "baserom.gbc", $9009, $903e - $9009 + +Function903e: ; 903e + ld de, Unkn1Pals + ld a, $1d + call Function9625 + call Function9630 + ld a, [CurPartySpecies] + call Function9775 + call Function9643 + call Function9699 + ld hl, $ce44 + ld bc, $0707 + ld a, $1 + call Function9663 + call Function971a + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 906e + +Function906e: ; 906e + ld hl, $77a9 + ld de, Unkn1Pals + ld bc, $0080 + ld a, $5 + call FarCopyWRAM + call Function9699 + ld hl, $ce01 + ld bc, $0a03 + ld a, $2 + call Function9663 + ld hl, $ce12 + ld bc, $0a03 + ld a, $2 + call Function9663 + ld hl, $ce29 + ld bc, $0603 + ld a, $3 + call Function9663 + ld hl, $ce3a + ld bc, $0603 + ld a, $3 + call Function9663 + ld hl, $ce51 + ld bc, $0203 + ld a, $4 + call Function9663 + ld hl, $ce62 + ld bc, $0203 + ld a, $4 + call Function9663 + ld hl, $ce05 + ld bc, $020c + ld a, $1 + call Function9663 + ld hl, $ce04 + ld bc, $0a01 + ld a, $1 + call Function9663 + ld hl, $ce11 + ld bc, $0a01 + ld a, $1 + call Function9663 + ld hl, $cec9 + ld bc, $0078 + ld a, $7 + call ByteFill + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 90f8 + +Function90f8: ; 90f8 + ld hl, $5ca7 + call Function9610 + call Function9699 + ld de, Unkn2Pals + ld a, $3c + call Function9625 + call Function9630 + ld hl, $ce51 + ld bc, $0c14 + ld a, $1 + call Function9663 + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 9122 + +Function9122: ; 9122 + ld b, $0 + ld hl, $512d + add hl, bc + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 912d + +INCBIN "baserom.gbc", $912d, $9195 - $912d + +Function9195: ; 9195 + ld hl, $7789 + ld de, Unkn1Pals + ld bc, $0028 + ld a, $5 + call FarCopyWRAM + call Function96a4 + call Function9699 + call Function96b3 + ret +; 91ad + +Function91ad: ; 91ad + ld hl, $7641 + ld de, Unkn1Pals + ld bc, $0080 + ld a, $5 + call FarCopyWRAM + ld hl, $5cb7 + call Function9610 + call Function9699 + call Function96b3 + ret +; 91c8 + +Function91c8: ; 91c8 + call Functionb1de + ld a, $9 + ld [SGBPredef], a + ret +; 91d1 + +Function91d1: ; 91d1 + ld hl, $5c57 + call Function9610 + call Function8e9f + call Function8e85 + call Function971a + call Function96b3 + ret +; 91e4 + +Function91e4: ; 91e4 + ld de, Unkn1Pals + ld a, c + and a + jr z, .asm_91f5 + ld a, $1a + call Function9625 + call Function9630 + jr .asm_921a + +.asm_91f5 + ld hl, PartyMon1DVs + ld bc, $0030 + ld a, [CurPartyMon] + call AddNTimes + ld c, l + ld b, h + ld a, [PlayerHPPal] + call Function974b + call Function9643 + ld hl, $579c + ld de, $d050 + ld bc, $0030 + ld a, $5 + call FarCopyWRAM + +.asm_921a + call Function9699 + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 9228 + +Function9228: ; 9228 + ld hl, $76f1 + ld de, Unkn1Pals + ld bc, $0028 + ld a, $5 + call FarCopyWRAM + ld hl, $7719 + ld de, Unkn2Pals + ld bc, $0010 + ld a, $5 + call FarCopyWRAM + ld a, $8 + ld [SGBPredef], a + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 9251 + +Function9251: ; 9251 + ld hl, $5cb7 + call Function9610 + call Function9699 + call Function96b3 + ret +; 925e + +Function925e: ; 925e + ld hl, $5bc7 + call Function9610 + ld de, Unkn2Pals + ld a, $4c + call Function9625 + call Function9630 + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, Unkn2Pals + ld a, $1f + ld [hli], a + ld a, $0 + ld [hl], a + pop af + ld [rSVBK], a + call Function9699 + call Function96b3 + ret +; 9289 + +Function9289: ; 9289 + ld de, Unkn1Pals + xor a + call Function976b + call Function9643 + ld a, $1 + call Function976b + call Function9643 + ld a, $3 + call Function976b + call Function9643 + ld a, $2 + call Function976b + call Function9643 + ld a, $4 + call Function976b + call Function9643 + ld a, $7 + call Function976b + call Function9643 + ld a, $6 + call Function976b + call Function9643 + ld a, $5 + call Function976b + call Function9643 + ld a, $24 + call Function9625 + call Function9630 + ld hl, AttrMap + ld bc, $0168 + ld a, [PlayerGender] + and a + ld a, $1 + jr z, .asm_92e3 + ld a, $0 + +.asm_92e3 + call ByteFill + ld hl, $cdfb + ld bc, $0705 + ld a, [PlayerGender] + and a + ld a, $0 + jr z, .asm_92f6 + ld a, $1 + +.asm_92f6 + call Function9663 + ld hl, $cdff + ld [hl], $1 + ld hl, $ceb7 + ld bc, $0204 + ld a, $1 + call Function9663 + ld hl, $cebb + ld bc, $0204 + ld a, $2 + call Function9663 + ld hl, $cebf + ld bc, $0204 + ld a, $3 + call Function9663 + ld hl, $cec3 + ld bc, $0204 + ld a, $4 + call Function9663 + ld hl, $cef3 + ld bc, $0204 + ld a, $5 + call Function9663 + ld hl, $cef7 + ld bc, $0204 + ld a, $6 + call Function9663 + ld hl, $cefb + ld bc, $0204 + ld a, $7 + call Function9663 + ld a, [PlayerGender] + and a + push af + jr z, .asm_935d + ld hl, $ceff + ld bc, $0204 + ld a, $1 + call Function9663 + +.asm_935d + pop af + ld c, $0 + jr nz, .asm_9363 + inc c + +.asm_9363 + ld a, c + ld hl, $cdff + ld [hl], a + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 9373 + +Function9373: ; 9373 + ld de, Unkn1Pals + ld a, $10 + call Function9625 + call Function9630 + ld a, [PlayerHPPal] + ld l, a + ld h, $0 + add hl, hl + add hl, hl + ld bc, $68be + add hl, bc + call Function9643 + call Function9699 + ld hl, $cdf8 + ld bc, $0209 + ld a, $1 + call Function9663 + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 93a6 + +Function93a6: ; 93a6 + ld hl, $5c47 + call Function9610 + call Function9699 + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 93ba + +Function93ba: ; 93ba + ld de, Unkn1Pals + ld a, $1d + call Function9625 + call Function9630 + call Function9699 + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 93d3 + +Function93d3: ; 93d3 + ld a, [BattleType] + cp $3 + jr z, .asm_93e6 + ld a, [PlayerGender] + bit 0, a + jr z, .asm_93e6 + ld hl, $5469 + jr .asm_93e9 + +.asm_93e6 + ld hl, $5439 + +.asm_93e9 + ld de, Unkn1Pals + ld bc, $0040 + ld a, $5 + call FarCopyWRAM + call Function9699 + ld hl, AttrMap + ld bc, $010a + ld a, $1 + call Function9663 + ld hl, $cde3 + ld bc, $010a + ld a, $2 + call Function9663 + ld hl, $ce08 + ld bc, $0901 + ld a, $3 + call Function9663 + ld hl, $ce65 + ld bc, $0305 + ld a, $4 + call Function9663 + ld hl, $ce15 + ld bc, $0305 + ld a, $5 + call Function9663 + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 9439 + +INCBIN "baserom.gbc", $9439, $9499 - $9439 + +Function9499: ; 9499 + call Function91c8 + ld de, $0014 + ld hl, AttrMap + ld a, [$cf82] +.asm_94a5 + and a + jr z, .asm_94ac + dec a + add hl, de + jr .asm_94a5 + +.asm_94ac + ld a, [$cf83] + ld e, a + ld d, $0 + add hl, de + ld a, [$cf82] + ld b, a + ld a, [$cf84] + inc a + sub b + ld b, a + ld a, [$cf83] + ld c, a + ld a, [$cf85] + sub c + inc a + ld c, a + ld a, $0 + call Function9663 + call Function96b3 + ret +; 94d0 + +Function94d0: ; 94d0 + ld hl, $5ba7 + call Function9610 + call Function9699 + ld hl, $ce29 + ld bc, $0a14 + ld a, $2 + call Function9663 + ld hl, $ce51 + ld bc, $0614 + ld a, $1 + call Function9663 + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 94fa + +Function94fa: ; 94fa + ld de, Unkn1Pals + ld a, $4e + call Function9625 + call Function9630 + ld hl, $5521 + ld de, Unkn2Pals + call Function9630 + ld hl, $5521 + ld de, $d048 + call Function9630 + call Function9699 + call Function96b3 + call Function96a4 + ret +; 9521 + +INCBIN "baserom.gbc", $9521, $9529 - $9521 + +Function9529: ; 9529 + ld de, Unkn1Pals + ld a, [CurPartySpecies] + ld bc, TempMonDVs + call Function974b + call Function9643 + call Function9699 + call Function96b3 + call Function96a4 + ret +; 9542 + +Function9542: ; 9542 + ld de, Unkn1Pals + ld a, [CurPartySpecies] + call Function9775 + call Function9643 + call Function9699 + call Function96b3 + ret +; 9555 + +Function9555: ; 9555 + ld hl, $5cc7 + call Function9610 + ld hl, $7681 + ld de, Unkn2Pals + ld bc, $0008 + ld a, $5 + call FarCopyWRAM + ld de, $d078 + ld a, $1c + call Function9625 + call Function9630 + call Function9699 + ret +; 9578 + +Function9578: ; 9578 + ld de, Unkn1Pals + ld a, [CurPartySpecies] + ld bc, TempMonDVs + call Function9764 + call Function9643 + call Function9699 + call Function96b3 + call Function96a4 + ret +; 9591 + +Function9591: ; 9591 + ld hl, $55e0 + ld de, Unkn1Pals + ld bc, $0010 + ld a, $5 + call FarCopyWRAM + call Function96a4 + call Function9699 + ld hl, $ce68 + ld bc, $080e + ld a, $1 + call Function9663 + ld hl, $ce3e + ld bc, $0112 + ld a, $1 + call Function9663 + ld hl, $cf1a + ld bc, $0112 + ld a, $1 + call Function9663 + ld hl, AttrMap + ld bc, $1102 + ld a, $1 + call Function9663 + ld hl, $ce4f + ld bc, $0c01 + ld a, $1 + call Function9663 + call Function96b3 + ret +; 95e0 + +INCBIN "baserom.gbc", $95e0, $9610 - $95e0 Function9610: ; 9610 @@ -12816,6 +13512,8 @@ Function9764: ; 9764 and a jp nz, Function97f9 ld a, [TrainerClass] + +Function976b: ; 976b ld l, a ld h, $0 add hl, hl @@ -13248,7 +13946,106 @@ INCBIN "baserom.gbc", $b0ae, $b0d2 - $b0ae TrainerPalettes: INCLUDE "gfx/trainers/palette_pointers.asm" -INCBIN "baserom.gbc", $b1de, $b319 - $b1de +Functionb1de: ; b1de + callba Function494ac + jr c, .asm_b230 + ld a, [$d19a] + and $7 + ld e, a + ld d, $0 + ld hl, $7279 + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [TimeOfDayPal] + and $3 + add a + add a + add a + ld e, a + ld d, $0 + add hl, de + ld e, l + ld d, h + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, Unkn1Pals + ld b, $8 +.asm_b210 + ld a, [de] + push de + push hl + ld l, a + ld h, $0 + add hl, hl + add hl, hl + add hl, hl + ld de, MornPal + add hl, de + ld e, l + ld d, h + pop hl + ld c, $8 +.asm_b222 + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .asm_b222 + pop de + inc de + dec b + jr nz, .asm_b210 + pop af + ld [rSVBK], a + +.asm_b230 + ld a, [TimeOfDayPal] + and $3 + ld bc, $0040 + ld hl, $7469 + call AddNTimes + ld de, Unkn2Pals + ld bc, $0040 + ld a, $5 + call FarCopyWRAM + ld a, [$d19a] + cp $1 + jr z, .asm_b253 + cp $2 + ret nz + +.asm_b253 + ld a, [MapGroup] + ld l, a + ld h, $0 + add hl, hl + add hl, hl + add hl, hl + ld de, $7569 + add hl, de + ld a, [TimeOfDayPal] + and $3 + cp $2 + jr c, .asm_b26d + inc hl + inc hl + inc hl + inc hl + +.asm_b26d + ld de, $d032 + ld bc, $0004 + ld a, $5 + call FarCopyWRAM + ret +; b279 + +INCBIN "baserom.gbc", $b279, $b319 - $b279 MornPal: ; 0xb319 INCBIN "tilesets/morn.pal" @@ -49998,7 +50795,143 @@ Function49409: ; 49409 ret ; 49418 -INCBIN "baserom.gbc", $49418, $49797 - $49418 +INCBIN "baserom.gbc", $49418, $494ac - $49418 + +Function494ac: ; 494ac + ld a, [$d199] + cp $15 + jr z, .asm_494c9 + cp $16 + jr z, .asm_494ce + cp $1d + jr z, .asm_494d3 + cp $5 + jr z, .asm_494e1 + cp $1b + jr z, .asm_494e6 + cp $d + jr z, .asm_494eb + jr .asm_494f0 + +.asm_494c9 + call Function494f2 + scf + ret + +.asm_494ce + call Function49541 + scf + ret + +.asm_494d3 + ld a, [$d19a] + and $7 + cp $3 + jr z, .asm_494f0 + call Function49590 + scf + ret + +.asm_494e1 + call Function495df + scf + ret + +.asm_494e6 + call Function4962e + scf + ret + +.asm_494eb + call Function496c5 + scf + ret + +.asm_494f0 + and a + ret +; 494f2 + +Function494f2: ; 494f2 + ld a, $5 + ld de, Unkn1Pals + ld hl, $5501 + ld bc, $0040 + call FarCopyWRAM + ret +; 49501 + +INCBIN "baserom.gbc", $49501, $49541 - $49501 + +Function49541: ; 49541 + ld a, $5 + ld de, Unkn1Pals + ld hl, $5550 + ld bc, $0040 + call FarCopyWRAM + ret +; 49550 + +INCBIN "baserom.gbc", $49550, $49590 - $49550 + +Function49590: ; 49590 + ld a, $5 + ld de, Unkn1Pals + ld hl, $559f + ld bc, $0040 + call FarCopyWRAM + ret +; 4959f + +INCBIN "baserom.gbc", $4959f, $495df - $4959f + +Function495df: ; 495df + ld a, $5 + ld de, Unkn1Pals + ld hl, $55ee + ld bc, $0040 + call FarCopyWRAM + ret +; 495ee + +INCBIN "baserom.gbc", $495ee, $4962e - $495ee + +Function4962e: ; 4962e + ld a, $5 + ld de, Unkn1Pals + ld hl, $563d + ld bc, $0040 + call FarCopyWRAM + ret +; 4963d + +INCBIN "baserom.gbc", $4963d, $496c5 - $4963d + +Function496c5: ; 496c5 + ld a, $5 + ld de, Unkn1Pals + ld hl, $567d + ld bc, $0040 + call FarCopyWRAM + ld a, $5 + ld de, $d020 + ld hl, $56fe + ld bc, $0008 + call FarCopyWRAM + ld a, $5 + ld de, $d018 + ld hl, $56ad + ld bc, $0008 + call FarCopyWRAM + ld a, $5 + ld de, $d030 + ld hl, $56bd + ld bc, $0008 + call FarCopyWRAM + ret +; 496fe + +INCBIN "baserom.gbc", $496fe, $49797 - $496fe Function49797: ; 49797 ld hl, AttrMap -- cgit v1.2.3 From cc41f68c34cdd423300e468de245a570c345430e Mon Sep 17 00:00:00 2001 From: yenatch Date: Mon, 9 Sep 2013 15:33:03 -0400 Subject: split sgb-to-cgb asm into predef/cgb.asm --- main.asm | 919 +------------------------------------------------------- predef/cgb.asm | 922 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 923 insertions(+), 918 deletions(-) create mode 100644 predef/cgb.asm diff --git a/main.asm b/main.asm index 2cd8c3dc7..565f8ee6c 100644 --- a/main.asm +++ b/main.asm @@ -12323,925 +12323,8 @@ Function8cb4: ; 8cb4 INCBIN "baserom.gbc", $8d05, $8d55 - $8d05 -CheckCGB: ; 8d55 - ld a, [hCGB] - and a - ret -; 8d59 - -Function8d59: ; 8d59 - ld a, b - cp $ff - jr nz, .asm_8d61 - ld a, [SGBPredef] - -.asm_8d61 - cp $fc - jp z, Function96f3 - call Function9673 - ld l, a - ld h, 0 - add hl, hl - ld de, Table8d7a - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - ld de, Function8d79 - push de - jp [hl] -; 8d79 - -Function8d79: ; 8d79 - ret -; 8d7a - -Table8d7a: ; 8d7a - dw Function8db8 - dw Function8ddb - dw Function8eb9 - dw Function8edb - dw Function8f70 - dw Function906e - dw Function90f8 - dw Function9122 - dw Function91ad - dw Function91c8 - dw Function91d1 - dw Function91e4 - dw Function9228 - dw Function9251 - dw Function9373 - dw Function93a6 - dw Function93ba - dw Function9195 - dw Function9499 - dw Function94d0 - dw Function93d3 - dw Function9289 - dw Function903e - dw Function8fca - dw Function925e - dw Function94fa - dw Function9529 - dw Function9555 - dw Function9578 - dw Function9591 - dw Function9542 -; 8db8 - -Function8db8: ; 8db8 - ld hl, $5c67 - ld de, $d000 - ld c, $4 - call $5615 - ld hl, $5c67 - ld de, $d020 - ld c, $4 - call $5615 - ld hl, $5c67 - ld de, MartPointer - ld c, $2 - call $5615 - jr Function8e23 - -Function8ddb: ; 8ddb - ld de, $d000 - call Function9729 - push hl - call Function9643 - call Function973a - push hl - call Function9643 - ld a, [EnemyHPPal] - ld l, a - ld h, $0 - add hl, hl - add hl, hl - ld bc, $68be - add hl, bc - call Function9643 - ld a, [PlayerHPPal] - ld l, a - ld h, $0 - add hl, hl - add hl, hl - ld bc, $68be - add hl, bc - call Function9643 - ld hl, $68ca - call Function9643 - ld de, MartPointer - pop hl - call Function9643 - pop hl - call Function9643 - ld a, $1 - ld [SGBPredef], a - call Function96a4 - -Function8e23: ; 8e23 - call Function8e85 - ld hl, AttrMap - ld bc, $0168 - ld a, $2 - call ByteFill - ld hl, $ce29 - ld bc, $080a - ld a, $0 - call Function9663 - ld hl, $cde3 - ld bc, $070a - ld a, $1 - call Function9663 - ld hl, AttrMap - ld bc, $040a - ld a, $2 - call Function9663 - ld hl, $ce6f - ld bc, $050a - ld a, $3 - call Function9663 - ld hl, $cebf - ld bc, $0109 - ld a, $4 - call Function9663 - ld hl, $cec9 - ld bc, $0078 - ld a, $7 - call ByteFill - ld hl, $579c - ld de, $d050 - ld bc, $0030 - ld a, $5 - call FarCopyWRAM - call Function96b3 - ret -; 8e85 - - -Function8e85: ; 8e85 - ld a, $40 - ld hl, $4dc0 - rst FarCall - ld hl, $7311 - jr nc, .asm_8e93 - ld hl, $7309 - -.asm_8e93 - ld de, $d038 - ld bc, $0008 - ld a, $5 - call FarCopyWRAM - ret -; 8e9f - -Function8e9f: ; 8e9f - callba Function100dc0 - ld hl, $7311 - jr nc, .asm_8ead - ld hl, $7309 - -.asm_8ead - ld de, $d000 - ld bc, $0008 - ld a, $5 - call FarCopyWRAM - ret -; 8eb9 - -Function8eb9: ; 8eb9 - ld a, [PlayerGender] - bit 0, a - jr z, .asm_8ec5 - ld hl, $7759 - jr .asm_8ec8 - -.asm_8ec5 - ld hl, $7729 - -.asm_8ec8 - ld de, $d000 - ld bc, $0030 - ld a, $5 - call FarCopyWRAM - call Function96a4 - ld a, $1 - ld [hCGBPalUpdate], a - ret -; 8edb - -Function8edb: ; 8edb - ld de, $d000 - ld a, [$cda1] - ld l, a - ld h, $0 - add hl, hl - add hl, hl - ld bc, $68be - add hl, bc - call Function9643 - ld a, [CurPartySpecies] - ld bc, TempMonDVs - call Function974b - call Function9643 - ld hl, $68ca - call Function9643 - ld hl, $4f52 - ld de, $d018 - ld bc, $0018 - ld a, $5 - call FarCopyWRAM - call Function9699 - ld hl, AttrMap - ld bc, $0814 - ld a, $1 - call Function9663 - ld hl, $cf23 - ld bc, $000a - ld a, $2 - call ByteFill - ld hl, $ce4a - ld bc, $0202 - ld a, $3 - call Function9663 - ld hl, $ce4c - ld bc, $0202 - ld a, $4 - call Function9663 - ld hl, $ce4e - ld bc, $0202 - ld a, $5 - call Function9663 - call Function96b3 - call Function96a4 - ld a, $1 - ld [hCGBPalUpdate], a - ret -; 8f52 - -INCBIN "baserom.gbc", $8f52, $8f70 - $8f52 - -Function8f70: ; 8f70 - ld de, Unkn1Pals - ld a, $1d - call Function9625 - call Function9630 - ld a, [CurPartySpecies] - cp $ff - jr nz, .asm_8f8a - ld hl, $4fba - call Function9630 - jr .asm_8f90 - -.asm_8f8a - call Function9775 - call Function9643 - -.asm_8f90 - call Function9699 - ld hl, $cdee - ld bc, $0707 - ld a, $1 - call Function9663 - call Function971a - ld hl, $4fc2 - ld de, $d078 - ld bc, $0008 - ld a, $5 - call FarCopyWRAM - call Function96b3 - call Function96a4 - ld a, $1 - ld [hCGBPalUpdate], a - ret -; 8fba - -INCBIN "baserom.gbc", $8fba, $8fca - $8fba - -Function8fca: ; 8fca - ld de, Unkn1Pals - ld a, $1d - call Function9625 - call Function9630 - ld a, [CurPartySpecies] - cp $ff - jr nz, .asm_8fe4 - ld hl, $5036 - call Function9630 - jr .asm_8fed - -.asm_8fe4 - ld bc, TempMonDVs - call Function974b - call Function9643 - -.asm_8fed - call Function9699 - ld hl, $ce2a - ld bc, $0707 - ld a, $1 - call Function9663 - call Function971a - call Function96b3 - call Function96a4 - ld a, $1 - ld [hCGBPalUpdate], a - ret -; 9009 - -INCBIN "baserom.gbc", $9009, $903e - $9009 - -Function903e: ; 903e - ld de, Unkn1Pals - ld a, $1d - call Function9625 - call Function9630 - ld a, [CurPartySpecies] - call Function9775 - call Function9643 - call Function9699 - ld hl, $ce44 - ld bc, $0707 - ld a, $1 - call Function9663 - call Function971a - call Function96b3 - call Function96a4 - ld a, $1 - ld [hCGBPalUpdate], a - ret -; 906e - -Function906e: ; 906e - ld hl, $77a9 - ld de, Unkn1Pals - ld bc, $0080 - ld a, $5 - call FarCopyWRAM - call Function9699 - ld hl, $ce01 - ld bc, $0a03 - ld a, $2 - call Function9663 - ld hl, $ce12 - ld bc, $0a03 - ld a, $2 - call Function9663 - ld hl, $ce29 - ld bc, $0603 - ld a, $3 - call Function9663 - ld hl, $ce3a - ld bc, $0603 - ld a, $3 - call Function9663 - ld hl, $ce51 - ld bc, $0203 - ld a, $4 - call Function9663 - ld hl, $ce62 - ld bc, $0203 - ld a, $4 - call Function9663 - ld hl, $ce05 - ld bc, $020c - ld a, $1 - call Function9663 - ld hl, $ce04 - ld bc, $0a01 - ld a, $1 - call Function9663 - ld hl, $ce11 - ld bc, $0a01 - ld a, $1 - call Function9663 - ld hl, $cec9 - ld bc, $0078 - ld a, $7 - call ByteFill - call Function96b3 - call Function96a4 - ld a, $1 - ld [hCGBPalUpdate], a - ret -; 90f8 - -Function90f8: ; 90f8 - ld hl, $5ca7 - call Function9610 - call Function9699 - ld de, Unkn2Pals - ld a, $3c - call Function9625 - call Function9630 - ld hl, $ce51 - ld bc, $0c14 - ld a, $1 - call Function9663 - call Function96b3 - call Function96a4 - ld a, $1 - ld [hCGBPalUpdate], a - ret -; 9122 - -Function9122: ; 9122 - ld b, $0 - ld hl, $512d - add hl, bc - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a - jp [hl] -; 912d - -INCBIN "baserom.gbc", $912d, $9195 - $912d - -Function9195: ; 9195 - ld hl, $7789 - ld de, Unkn1Pals - ld bc, $0028 - ld a, $5 - call FarCopyWRAM - call Function96a4 - call Function9699 - call Function96b3 - ret -; 91ad - -Function91ad: ; 91ad - ld hl, $7641 - ld de, Unkn1Pals - ld bc, $0080 - ld a, $5 - call FarCopyWRAM - ld hl, $5cb7 - call Function9610 - call Function9699 - call Function96b3 - ret -; 91c8 - -Function91c8: ; 91c8 - call Functionb1de - ld a, $9 - ld [SGBPredef], a - ret -; 91d1 - -Function91d1: ; 91d1 - ld hl, $5c57 - call Function9610 - call Function8e9f - call Function8e85 - call Function971a - call Function96b3 - ret -; 91e4 - -Function91e4: ; 91e4 - ld de, Unkn1Pals - ld a, c - and a - jr z, .asm_91f5 - ld a, $1a - call Function9625 - call Function9630 - jr .asm_921a - -.asm_91f5 - ld hl, PartyMon1DVs - ld bc, $0030 - ld a, [CurPartyMon] - call AddNTimes - ld c, l - ld b, h - ld a, [PlayerHPPal] - call Function974b - call Function9643 - ld hl, $579c - ld de, $d050 - ld bc, $0030 - ld a, $5 - call FarCopyWRAM - -.asm_921a - call Function9699 - call Function96b3 - call Function96a4 - ld a, $1 - ld [hCGBPalUpdate], a - ret -; 9228 - -Function9228: ; 9228 - ld hl, $76f1 - ld de, Unkn1Pals - ld bc, $0028 - ld a, $5 - call FarCopyWRAM - ld hl, $7719 - ld de, Unkn2Pals - ld bc, $0010 - ld a, $5 - call FarCopyWRAM - ld a, $8 - ld [SGBPredef], a - call Function96a4 - ld a, $1 - ld [hCGBPalUpdate], a - ret -; 9251 - -Function9251: ; 9251 - ld hl, $5cb7 - call Function9610 - call Function9699 - call Function96b3 - ret -; 925e - -Function925e: ; 925e - ld hl, $5bc7 - call Function9610 - ld de, Unkn2Pals - ld a, $4c - call Function9625 - call Function9630 - ld a, [rSVBK] - push af - ld a, $5 - ld [rSVBK], a - ld hl, Unkn2Pals - ld a, $1f - ld [hli], a - ld a, $0 - ld [hl], a - pop af - ld [rSVBK], a - call Function9699 - call Function96b3 - ret -; 9289 - -Function9289: ; 9289 - ld de, Unkn1Pals - xor a - call Function976b - call Function9643 - ld a, $1 - call Function976b - call Function9643 - ld a, $3 - call Function976b - call Function9643 - ld a, $2 - call Function976b - call Function9643 - ld a, $4 - call Function976b - call Function9643 - ld a, $7 - call Function976b - call Function9643 - ld a, $6 - call Function976b - call Function9643 - ld a, $5 - call Function976b - call Function9643 - ld a, $24 - call Function9625 - call Function9630 - ld hl, AttrMap - ld bc, $0168 - ld a, [PlayerGender] - and a - ld a, $1 - jr z, .asm_92e3 - ld a, $0 - -.asm_92e3 - call ByteFill - ld hl, $cdfb - ld bc, $0705 - ld a, [PlayerGender] - and a - ld a, $0 - jr z, .asm_92f6 - ld a, $1 - -.asm_92f6 - call Function9663 - ld hl, $cdff - ld [hl], $1 - ld hl, $ceb7 - ld bc, $0204 - ld a, $1 - call Function9663 - ld hl, $cebb - ld bc, $0204 - ld a, $2 - call Function9663 - ld hl, $cebf - ld bc, $0204 - ld a, $3 - call Function9663 - ld hl, $cec3 - ld bc, $0204 - ld a, $4 - call Function9663 - ld hl, $cef3 - ld bc, $0204 - ld a, $5 - call Function9663 - ld hl, $cef7 - ld bc, $0204 - ld a, $6 - call Function9663 - ld hl, $cefb - ld bc, $0204 - ld a, $7 - call Function9663 - ld a, [PlayerGender] - and a - push af - jr z, .asm_935d - ld hl, $ceff - ld bc, $0204 - ld a, $1 - call Function9663 - -.asm_935d - pop af - ld c, $0 - jr nz, .asm_9363 - inc c - -.asm_9363 - ld a, c - ld hl, $cdff - ld [hl], a - call Function96b3 - call Function96a4 - ld a, $1 - ld [hCGBPalUpdate], a - ret -; 9373 - -Function9373: ; 9373 - ld de, Unkn1Pals - ld a, $10 - call Function9625 - call Function9630 - ld a, [PlayerHPPal] - ld l, a - ld h, $0 - add hl, hl - add hl, hl - ld bc, $68be - add hl, bc - call Function9643 - call Function9699 - ld hl, $cdf8 - ld bc, $0209 - ld a, $1 - call Function9663 - call Function96b3 - call Function96a4 - ld a, $1 - ld [hCGBPalUpdate], a - ret -; 93a6 - -Function93a6: ; 93a6 - ld hl, $5c47 - call Function9610 - call Function9699 - call Function96b3 - call Function96a4 - ld a, $1 - ld [hCGBPalUpdate], a - ret -; 93ba - -Function93ba: ; 93ba - ld de, Unkn1Pals - ld a, $1d - call Function9625 - call Function9630 - call Function9699 - call Function96b3 - call Function96a4 - ld a, $1 - ld [hCGBPalUpdate], a - ret -; 93d3 - -Function93d3: ; 93d3 - ld a, [BattleType] - cp $3 - jr z, .asm_93e6 - ld a, [PlayerGender] - bit 0, a - jr z, .asm_93e6 - ld hl, $5469 - jr .asm_93e9 - -.asm_93e6 - ld hl, $5439 - -.asm_93e9 - ld de, Unkn1Pals - ld bc, $0040 - ld a, $5 - call FarCopyWRAM - call Function9699 - ld hl, AttrMap - ld bc, $010a - ld a, $1 - call Function9663 - ld hl, $cde3 - ld bc, $010a - ld a, $2 - call Function9663 - ld hl, $ce08 - ld bc, $0901 - ld a, $3 - call Function9663 - ld hl, $ce65 - ld bc, $0305 - ld a, $4 - call Function9663 - ld hl, $ce15 - ld bc, $0305 - ld a, $5 - call Function9663 - call Function96b3 - call Function96a4 - ld a, $1 - ld [hCGBPalUpdate], a - ret -; 9439 - -INCBIN "baserom.gbc", $9439, $9499 - $9439 - -Function9499: ; 9499 - call Function91c8 - ld de, $0014 - ld hl, AttrMap - ld a, [$cf82] -.asm_94a5 - and a - jr z, .asm_94ac - dec a - add hl, de - jr .asm_94a5 - -.asm_94ac - ld a, [$cf83] - ld e, a - ld d, $0 - add hl, de - ld a, [$cf82] - ld b, a - ld a, [$cf84] - inc a - sub b - ld b, a - ld a, [$cf83] - ld c, a - ld a, [$cf85] - sub c - inc a - ld c, a - ld a, $0 - call Function9663 - call Function96b3 - ret -; 94d0 - -Function94d0: ; 94d0 - ld hl, $5ba7 - call Function9610 - call Function9699 - ld hl, $ce29 - ld bc, $0a14 - ld a, $2 - call Function9663 - ld hl, $ce51 - ld bc, $0614 - ld a, $1 - call Function9663 - call Function96b3 - call Function96a4 - ld a, $1 - ld [hCGBPalUpdate], a - ret -; 94fa - -Function94fa: ; 94fa - ld de, Unkn1Pals - ld a, $4e - call Function9625 - call Function9630 - ld hl, $5521 - ld de, Unkn2Pals - call Function9630 - ld hl, $5521 - ld de, $d048 - call Function9630 - call Function9699 - call Function96b3 - call Function96a4 - ret -; 9521 - -INCBIN "baserom.gbc", $9521, $9529 - $9521 - -Function9529: ; 9529 - ld de, Unkn1Pals - ld a, [CurPartySpecies] - ld bc, TempMonDVs - call Function974b - call Function9643 - call Function9699 - call Function96b3 - call Function96a4 - ret -; 9542 - -Function9542: ; 9542 - ld de, Unkn1Pals - ld a, [CurPartySpecies] - call Function9775 - call Function9643 - call Function9699 - call Function96b3 - ret -; 9555 - -Function9555: ; 9555 - ld hl, $5cc7 - call Function9610 - ld hl, $7681 - ld de, Unkn2Pals - ld bc, $0008 - ld a, $5 - call FarCopyWRAM - ld de, $d078 - ld a, $1c - call Function9625 - call Function9630 - call Function9699 - ret -; 9578 - -Function9578: ; 9578 - ld de, Unkn1Pals - ld a, [CurPartySpecies] - ld bc, TempMonDVs - call Function9764 - call Function9643 - call Function9699 - call Function96b3 - call Function96a4 - ret -; 9591 +INCLUDE "predef/cgb.asm" -Function9591: ; 9591 - ld hl, $55e0 - ld de, Unkn1Pals - ld bc, $0010 - ld a, $5 - call FarCopyWRAM - call Function96a4 - call Function9699 - ld hl, $ce68 - ld bc, $080e - ld a, $1 - call Function9663 - ld hl, $ce3e - ld bc, $0112 - ld a, $1 - call Function9663 - ld hl, $cf1a - ld bc, $0112 - ld a, $1 - call Function9663 - ld hl, AttrMap - ld bc, $1102 - ld a, $1 - call Function9663 - ld hl, $ce4f - ld bc, $0c01 - ld a, $1 - call Function9663 - call Function96b3 - ret -; 95e0 INCBIN "baserom.gbc", $95e0, $9610 - $95e0 diff --git a/predef/cgb.asm b/predef/cgb.asm new file mode 100644 index 000000000..aadc66a3d --- /dev/null +++ b/predef/cgb.asm @@ -0,0 +1,922 @@ +; Replaces the functionality of sgb.asm to work with CGB hardware. + +CheckCGB: ; 8d55 + ld a, [hCGB] + and a + ret +; 8d59 + +Function8d59: ; 8d59 + ld a, b + cp $ff + jr nz, .asm_8d61 + ld a, [SGBPredef] + +.asm_8d61 + cp $fc + jp z, Function96f3 + call Function9673 + ld l, a + ld h, 0 + add hl, hl + ld de, Table8d7a + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ld de, Function8d79 + push de + jp [hl] +; 8d79 + +Function8d79: ; 8d79 + ret +; 8d7a + +Table8d7a: ; 8d7a + dw Function8db8 + dw Function8ddb + dw Function8eb9 + dw Function8edb + dw Function8f70 + dw Function906e + dw Function90f8 + dw Function9122 + dw Function91ad + dw Function91c8 + dw Function91d1 + dw Function91e4 + dw Function9228 + dw Function9251 + dw Function9373 + dw Function93a6 + dw Function93ba + dw Function9195 + dw Function9499 + dw Function94d0 + dw Function93d3 + dw Function9289 + dw Function903e + dw Function8fca + dw Function925e + dw Function94fa + dw Function9529 + dw Function9555 + dw Function9578 + dw Function9591 + dw Function9542 +; 8db8 + +Function8db8: ; 8db8 + ld hl, $5c67 + ld de, $d000 + ld c, $4 + call $5615 + ld hl, $5c67 + ld de, $d020 + ld c, $4 + call $5615 + ld hl, $5c67 + ld de, MartPointer + ld c, $2 + call $5615 + jr Function8e23 + +Function8ddb: ; 8ddb + ld de, $d000 + call Function9729 + push hl + call Function9643 + call Function973a + push hl + call Function9643 + ld a, [EnemyHPPal] + ld l, a + ld h, $0 + add hl, hl + add hl, hl + ld bc, $68be + add hl, bc + call Function9643 + ld a, [PlayerHPPal] + ld l, a + ld h, $0 + add hl, hl + add hl, hl + ld bc, $68be + add hl, bc + call Function9643 + ld hl, $68ca + call Function9643 + ld de, MartPointer + pop hl + call Function9643 + pop hl + call Function9643 + ld a, $1 + ld [SGBPredef], a + call Function96a4 + +Function8e23: ; 8e23 + call Function8e85 + ld hl, AttrMap + ld bc, $0168 + ld a, $2 + call ByteFill + ld hl, $ce29 + ld bc, $080a + ld a, $0 + call Function9663 + ld hl, $cde3 + ld bc, $070a + ld a, $1 + call Function9663 + ld hl, AttrMap + ld bc, $040a + ld a, $2 + call Function9663 + ld hl, $ce6f + ld bc, $050a + ld a, $3 + call Function9663 + ld hl, $cebf + ld bc, $0109 + ld a, $4 + call Function9663 + ld hl, $cec9 + ld bc, $0078 + ld a, $7 + call ByteFill + ld hl, $579c + ld de, $d050 + ld bc, $0030 + ld a, $5 + call FarCopyWRAM + call Function96b3 + ret +; 8e85 + + +Function8e85: ; 8e85 + ld a, $40 + ld hl, $4dc0 + rst FarCall + ld hl, $7311 + jr nc, .asm_8e93 + ld hl, $7309 + +.asm_8e93 + ld de, $d038 + ld bc, $0008 + ld a, $5 + call FarCopyWRAM + ret +; 8e9f + +Function8e9f: ; 8e9f + callba Function100dc0 + ld hl, $7311 + jr nc, .asm_8ead + ld hl, $7309 + +.asm_8ead + ld de, $d000 + ld bc, $0008 + ld a, $5 + call FarCopyWRAM + ret +; 8eb9 + +Function8eb9: ; 8eb9 + ld a, [PlayerGender] + bit 0, a + jr z, .asm_8ec5 + ld hl, $7759 + jr .asm_8ec8 + +.asm_8ec5 + ld hl, $7729 + +.asm_8ec8 + ld de, $d000 + ld bc, $0030 + ld a, $5 + call FarCopyWRAM + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 8edb + +Function8edb: ; 8edb + ld de, $d000 + ld a, [$cda1] + ld l, a + ld h, $0 + add hl, hl + add hl, hl + ld bc, $68be + add hl, bc + call Function9643 + ld a, [CurPartySpecies] + ld bc, TempMonDVs + call Function974b + call Function9643 + ld hl, $68ca + call Function9643 + ld hl, $4f52 + ld de, $d018 + ld bc, $0018 + ld a, $5 + call FarCopyWRAM + call Function9699 + ld hl, AttrMap + ld bc, $0814 + ld a, $1 + call Function9663 + ld hl, $cf23 + ld bc, $000a + ld a, $2 + call ByteFill + ld hl, $ce4a + ld bc, $0202 + ld a, $3 + call Function9663 + ld hl, $ce4c + ld bc, $0202 + ld a, $4 + call Function9663 + ld hl, $ce4e + ld bc, $0202 + ld a, $5 + call Function9663 + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 8f52 + +INCBIN "baserom.gbc", $8f52, $8f70 - $8f52 + +Function8f70: ; 8f70 + ld de, Unkn1Pals + ld a, $1d + call Function9625 + call Function9630 + ld a, [CurPartySpecies] + cp $ff + jr nz, .asm_8f8a + ld hl, $4fba + call Function9630 + jr .asm_8f90 + +.asm_8f8a + call Function9775 + call Function9643 + +.asm_8f90 + call Function9699 + ld hl, $cdee + ld bc, $0707 + ld a, $1 + call Function9663 + call Function971a + ld hl, $4fc2 + ld de, $d078 + ld bc, $0008 + ld a, $5 + call FarCopyWRAM + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 8fba + +INCBIN "baserom.gbc", $8fba, $8fca - $8fba + +Function8fca: ; 8fca + ld de, Unkn1Pals + ld a, $1d + call Function9625 + call Function9630 + ld a, [CurPartySpecies] + cp $ff + jr nz, .asm_8fe4 + ld hl, $5036 + call Function9630 + jr .asm_8fed + +.asm_8fe4 + ld bc, TempMonDVs + call Function974b + call Function9643 + +.asm_8fed + call Function9699 + ld hl, $ce2a + ld bc, $0707 + ld a, $1 + call Function9663 + call Function971a + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 9009 + +INCBIN "baserom.gbc", $9009, $903e - $9009 + +Function903e: ; 903e + ld de, Unkn1Pals + ld a, $1d + call Function9625 + call Function9630 + ld a, [CurPartySpecies] + call Function9775 + call Function9643 + call Function9699 + ld hl, $ce44 + ld bc, $0707 + ld a, $1 + call Function9663 + call Function971a + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 906e + +Function906e: ; 906e + ld hl, $77a9 + ld de, Unkn1Pals + ld bc, $0080 + ld a, $5 + call FarCopyWRAM + call Function9699 + ld hl, $ce01 + ld bc, $0a03 + ld a, $2 + call Function9663 + ld hl, $ce12 + ld bc, $0a03 + ld a, $2 + call Function9663 + ld hl, $ce29 + ld bc, $0603 + ld a, $3 + call Function9663 + ld hl, $ce3a + ld bc, $0603 + ld a, $3 + call Function9663 + ld hl, $ce51 + ld bc, $0203 + ld a, $4 + call Function9663 + ld hl, $ce62 + ld bc, $0203 + ld a, $4 + call Function9663 + ld hl, $ce05 + ld bc, $020c + ld a, $1 + call Function9663 + ld hl, $ce04 + ld bc, $0a01 + ld a, $1 + call Function9663 + ld hl, $ce11 + ld bc, $0a01 + ld a, $1 + call Function9663 + ld hl, $cec9 + ld bc, $0078 + ld a, $7 + call ByteFill + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 90f8 + +Function90f8: ; 90f8 + ld hl, $5ca7 + call Function9610 + call Function9699 + ld de, Unkn2Pals + ld a, $3c + call Function9625 + call Function9630 + ld hl, $ce51 + ld bc, $0c14 + ld a, $1 + call Function9663 + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 9122 + +Function9122: ; 9122 + ld b, $0 + ld hl, $512d + add hl, bc + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 912d + +INCBIN "baserom.gbc", $912d, $9195 - $912d + +Function9195: ; 9195 + ld hl, $7789 + ld de, Unkn1Pals + ld bc, $0028 + ld a, $5 + call FarCopyWRAM + call Function96a4 + call Function9699 + call Function96b3 + ret +; 91ad + +Function91ad: ; 91ad + ld hl, $7641 + ld de, Unkn1Pals + ld bc, $0080 + ld a, $5 + call FarCopyWRAM + ld hl, $5cb7 + call Function9610 + call Function9699 + call Function96b3 + ret +; 91c8 + +Function91c8: ; 91c8 + call Functionb1de + ld a, $9 + ld [SGBPredef], a + ret +; 91d1 + +Function91d1: ; 91d1 + ld hl, $5c57 + call Function9610 + call Function8e9f + call Function8e85 + call Function971a + call Function96b3 + ret +; 91e4 + +Function91e4: ; 91e4 + ld de, Unkn1Pals + ld a, c + and a + jr z, .asm_91f5 + ld a, $1a + call Function9625 + call Function9630 + jr .asm_921a + +.asm_91f5 + ld hl, PartyMon1DVs + ld bc, $0030 + ld a, [CurPartyMon] + call AddNTimes + ld c, l + ld b, h + ld a, [PlayerHPPal] + call Function974b + call Function9643 + ld hl, $579c + ld de, $d050 + ld bc, $0030 + ld a, $5 + call FarCopyWRAM + +.asm_921a + call Function9699 + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 9228 + +Function9228: ; 9228 + ld hl, $76f1 + ld de, Unkn1Pals + ld bc, $0028 + ld a, $5 + call FarCopyWRAM + ld hl, $7719 + ld de, Unkn2Pals + ld bc, $0010 + ld a, $5 + call FarCopyWRAM + ld a, $8 + ld [SGBPredef], a + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 9251 + +Function9251: ; 9251 + ld hl, $5cb7 + call Function9610 + call Function9699 + call Function96b3 + ret +; 925e + +Function925e: ; 925e + ld hl, $5bc7 + call Function9610 + ld de, Unkn2Pals + ld a, $4c + call Function9625 + call Function9630 + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, Unkn2Pals + ld a, $1f + ld [hli], a + ld a, $0 + ld [hl], a + pop af + ld [rSVBK], a + call Function9699 + call Function96b3 + ret +; 9289 + +Function9289: ; 9289 + ld de, Unkn1Pals + xor a + call Function976b + call Function9643 + ld a, $1 + call Function976b + call Function9643 + ld a, $3 + call Function976b + call Function9643 + ld a, $2 + call Function976b + call Function9643 + ld a, $4 + call Function976b + call Function9643 + ld a, $7 + call Function976b + call Function9643 + ld a, $6 + call Function976b + call Function9643 + ld a, $5 + call Function976b + call Function9643 + ld a, $24 + call Function9625 + call Function9630 + ld hl, AttrMap + ld bc, $0168 + ld a, [PlayerGender] + and a + ld a, $1 + jr z, .asm_92e3 + ld a, $0 + +.asm_92e3 + call ByteFill + ld hl, $cdfb + ld bc, $0705 + ld a, [PlayerGender] + and a + ld a, $0 + jr z, .asm_92f6 + ld a, $1 + +.asm_92f6 + call Function9663 + ld hl, $cdff + ld [hl], $1 + ld hl, $ceb7 + ld bc, $0204 + ld a, $1 + call Function9663 + ld hl, $cebb + ld bc, $0204 + ld a, $2 + call Function9663 + ld hl, $cebf + ld bc, $0204 + ld a, $3 + call Function9663 + ld hl, $cec3 + ld bc, $0204 + ld a, $4 + call Function9663 + ld hl, $cef3 + ld bc, $0204 + ld a, $5 + call Function9663 + ld hl, $cef7 + ld bc, $0204 + ld a, $6 + call Function9663 + ld hl, $cefb + ld bc, $0204 + ld a, $7 + call Function9663 + ld a, [PlayerGender] + and a + push af + jr z, .asm_935d + ld hl, $ceff + ld bc, $0204 + ld a, $1 + call Function9663 + +.asm_935d + pop af + ld c, $0 + jr nz, .asm_9363 + inc c + +.asm_9363 + ld a, c + ld hl, $cdff + ld [hl], a + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 9373 + +Function9373: ; 9373 + ld de, Unkn1Pals + ld a, $10 + call Function9625 + call Function9630 + ld a, [PlayerHPPal] + ld l, a + ld h, $0 + add hl, hl + add hl, hl + ld bc, $68be + add hl, bc + call Function9643 + call Function9699 + ld hl, $cdf8 + ld bc, $0209 + ld a, $1 + call Function9663 + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 93a6 + +Function93a6: ; 93a6 + ld hl, $5c47 + call Function9610 + call Function9699 + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 93ba + +Function93ba: ; 93ba + ld de, Unkn1Pals + ld a, $1d + call Function9625 + call Function9630 + call Function9699 + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 93d3 + +Function93d3: ; 93d3 + ld a, [BattleType] + cp $3 + jr z, .asm_93e6 + ld a, [PlayerGender] + bit 0, a + jr z, .asm_93e6 + ld hl, $5469 + jr .asm_93e9 + +.asm_93e6 + ld hl, $5439 + +.asm_93e9 + ld de, Unkn1Pals + ld bc, $0040 + ld a, $5 + call FarCopyWRAM + call Function9699 + ld hl, AttrMap + ld bc, $010a + ld a, $1 + call Function9663 + ld hl, $cde3 + ld bc, $010a + ld a, $2 + call Function9663 + ld hl, $ce08 + ld bc, $0901 + ld a, $3 + call Function9663 + ld hl, $ce65 + ld bc, $0305 + ld a, $4 + call Function9663 + ld hl, $ce15 + ld bc, $0305 + ld a, $5 + call Function9663 + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 9439 + +INCBIN "baserom.gbc", $9439, $9499 - $9439 + +Function9499: ; 9499 + call Function91c8 + ld de, $0014 + ld hl, AttrMap + ld a, [$cf82] +.asm_94a5 + and a + jr z, .asm_94ac + dec a + add hl, de + jr .asm_94a5 + +.asm_94ac + ld a, [$cf83] + ld e, a + ld d, $0 + add hl, de + ld a, [$cf82] + ld b, a + ld a, [$cf84] + inc a + sub b + ld b, a + ld a, [$cf83] + ld c, a + ld a, [$cf85] + sub c + inc a + ld c, a + ld a, $0 + call Function9663 + call Function96b3 + ret +; 94d0 + +Function94d0: ; 94d0 + ld hl, $5ba7 + call Function9610 + call Function9699 + ld hl, $ce29 + ld bc, $0a14 + ld a, $2 + call Function9663 + ld hl, $ce51 + ld bc, $0614 + ld a, $1 + call Function9663 + call Function96b3 + call Function96a4 + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 94fa + +Function94fa: ; 94fa + ld de, Unkn1Pals + ld a, $4e + call Function9625 + call Function9630 + ld hl, $5521 + ld de, Unkn2Pals + call Function9630 + ld hl, $5521 + ld de, $d048 + call Function9630 + call Function9699 + call Function96b3 + call Function96a4 + ret +; 9521 + +INCBIN "baserom.gbc", $9521, $9529 - $9521 + +Function9529: ; 9529 + ld de, Unkn1Pals + ld a, [CurPartySpecies] + ld bc, TempMonDVs + call Function974b + call Function9643 + call Function9699 + call Function96b3 + call Function96a4 + ret +; 9542 + +Function9542: ; 9542 + ld de, Unkn1Pals + ld a, [CurPartySpecies] + call Function9775 + call Function9643 + call Function9699 + call Function96b3 + ret +; 9555 + +Function9555: ; 9555 + ld hl, $5cc7 + call Function9610 + ld hl, $7681 + ld de, Unkn2Pals + ld bc, $0008 + ld a, $5 + call FarCopyWRAM + ld de, $d078 + ld a, $1c + call Function9625 + call Function9630 + call Function9699 + ret +; 9578 + +Function9578: ; 9578 + ld de, Unkn1Pals + ld a, [CurPartySpecies] + ld bc, TempMonDVs + call Function9764 + call Function9643 + call Function9699 + call Function96b3 + call Function96a4 + ret +; 9591 + +Function9591: ; 9591 + ld hl, $55e0 + ld de, Unkn1Pals + ld bc, $0010 + ld a, $5 + call FarCopyWRAM + call Function96a4 + call Function9699 + ld hl, $ce68 + ld bc, $080e + ld a, $1 + call Function9663 + ld hl, $ce3e + ld bc, $0112 + ld a, $1 + call Function9663 + ld hl, $cf1a + ld bc, $0112 + ld a, $1 + call Function9663 + ld hl, AttrMap + ld bc, $1102 + ld a, $1 + call Function9663 + ld hl, $ce4f + ld bc, $0c01 + ld a, $1 + call Function9663 + call Function96b3 + ret +; 95e0 + -- cgit v1.2.3 From 429417da744d7d296c5dff93156b92af3f2cf933 Mon Sep 17 00:00:00 2001 From: yenatch Date: Mon, 9 Sep 2013 15:39:43 -0400 Subject: name a couple specials --- main.asm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/main.asm b/main.asm index 565f8ee6c..0350207f1 100644 --- a/main.asm +++ b/main.asm @@ -13242,7 +13242,7 @@ SpecialsPointers: ; c029 dbw BANK(Function1ad2), Function1ad2 dbw BANK(Functione4a), Functione4a dbw BANK(Functionc230), Functionc230 - dbw BANK(Functionc252), Functionc252 + dbw BANK(SpecialSeenMon), SpecialSeenMon dbw BANK(WaitSFX),WaitSFX dbw BANK(Function3cdf), Function3cdf dbw BANK(Function3d47), Function3d47 @@ -13352,10 +13352,10 @@ SpecialsPointers: ; c029 dbw BANK(Function4a927), Function4a927 dbw BANK(Function90a54), Function90a54 dbw BANK(Function90a88), Function90a88 - dbw BANK(Functionc224), Functionc224 + dbw BANK(SpecialNone), SpecialNone ; c224 -Functionc224: ; c224 +SpecialNone: ; c224 ret ; c225 @@ -13382,7 +13382,7 @@ Functionc230: ; c230 ret ; c252 -Functionc252: ; c252 +SpecialSeenMon: ; c252 ld a, [ScriptVar] dec a call SetSeenMon -- cgit v1.2.3 From 0fc0c0bebcb580d5d35460170c83a4fedaadd271 Mon Sep 17 00:00:00 2001 From: yenatch Date: Mon, 9 Sep 2013 15:47:32 -0400 Subject: name rater special --- main.asm | 117 +++++++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 91 insertions(+), 26 deletions(-) diff --git a/main.asm b/main.asm index 0350207f1..ffe42ca7b 100644 --- a/main.asm +++ b/main.asm @@ -13271,7 +13271,7 @@ SpecialsPointers: ; c029 dbw BANK(Functionc422), Functionc422 dbw BANK(Function4d9d3), Function4d9d3 dbw BANK(Function88018), Function88018 - dbw BANK(Functionc2b9), Functionc2b9 + dbw BANK(SpecialNameRater), SpecialNameRater dbw BANK(Functionc2da), Functionc2da dbw BANK(Function718d), Function718d dbw BANK(Function71ac), Function71ac @@ -13442,8 +13442,8 @@ SpecialNameRival: ; 0xc29d DefaultRivalName: ; 0xc2b2 db "SILVER@" -Functionc2b9: ; c2b9 - callba Functionfb6ed +SpecialNameRater: ; c2b9 + callba NameRater ret ; c2c0 @@ -73868,26 +73868,26 @@ Functionfb634: ; fb634 INCBIN "baserom.gbc", $fb656, $fb6ed - $fb656 -Functionfb6ed: ; fb6ed - ld hl, $780f +NameRater: ; fb6ed + ld hl, UnknownText_0xfb80f call PrintText call Function1dcf jp c, .asm_fb77e - ld hl, $7814 + ld hl, UnknownText_0xfb814 call PrintText callba Function50000 jr c, .asm_fb77e ld a, [CurPartySpecies] - cp $fd + cp EGG jr z, .asm_fb783 call GetCurNick call Functionfb78a jr c, .asm_fb779 - ld hl, $7819 + ld hl, UnknownText_0xfb819 call PrintText call Function1dcf jr c, .asm_fb77e - ld hl, $781e + ld hl, UnknownText_0xfb81e call PrintText xor a ld [MonType], a @@ -73895,14 +73895,14 @@ Functionfb6ed: ; fb6ed ld [$d265], a ld [CurSpecies], a call GetBaseData - ld b, $0 + ld b, 0 ld de, StringBuffer2 callba Function116b7 call Functionfb7be - ld hl, $7837 + ld hl, UnknownText_0xfb837 jr c, .asm_fb76c call Functionfb7d3 - ld hl, $7837 + ld hl, UnknownText_0xfb837 jr c, .asm_fb76c ld hl, PartyMon1Nickname ld bc, $000b @@ -73913,26 +73913,26 @@ Functionfb6ed: ; fb6ed ld hl, StringBuffer2 ld bc, $000b call CopyBytes - ld hl, $7823 + ld hl, UnknownText_0xfb823 .asm_fb76c push hl call GetCurNick - ld hl, $783c + ld hl, UnknownText_0xfb83c call PrintText pop hl jr .asm_fb786 .asm_fb779 - ld hl, $782d + ld hl, UnknownText_0xfb82d jr .asm_fb786 .asm_fb77e - ld hl, $7828 + ld hl, UnknownText_0xfb828 jr .asm_fb786 .asm_fb783 - ld hl, $7832 + ld hl, UnknownText_0xfb832 .asm_fb786 call PrintText @@ -73949,7 +73949,7 @@ Functionfb78a: ; fb78a call .asm_fb7b1 jr c, .asm_fb7bc ld hl, PartyMon1ID - ld bc, $0030 + ld bc, PartyMon2 - PartyMon1 ld a, [CurPartyMon] call AddNTimes ld de, PlayerID @@ -73972,12 +73972,12 @@ Functionfb78a: ; fb78a Functionfb7be: ; fb7be ld hl, StringBuffer2 - ld c, $a + ld c, 10 .asm_fb7c3 ld a, [hli] - cp $50 + cp "@" jr z, .asm_fb7cf - cp $7f + cp " " jr nz, .asm_fb7d1 dec c jr nz, .asm_fb7c3 @@ -74008,7 +74008,7 @@ Functionfb7d3: ; fb7d3 ld de, StringBuffer2 .asm_fb7f2 ld a, [de] - cp $50 + cp "@" jr z, .asm_fb800 cp [hl] jr nz, .asm_fb7fe @@ -74026,19 +74026,84 @@ Functionfb7d3: ; fb7d3 ; fb802 Functionfb802: ; fb802 - ld c, $0 + ld c, 0 .asm_fb804 ld a, [hli] - cp $50 + cp "@" ret z inc c ld a, c - cp $a + cp 10 jr nz, .asm_fb804 ret ; fb80f -INCBIN "baserom.gbc", $fb80f, $fb841 - $fb80f +UnknownText_0xfb80f: ; 0xfb80f + ; Hello, hello! I'm the NAME RATER. + ; I rate the names of #MON. + ; Would you like me to rate names? + text_jump UnknownText_0x1c0043, BANK(UnknownText_0x1c0043) + db "@" +; 0xfb814 + +UnknownText_0xfb814: ; 0xfb814 + ; Which #MON's nickname should I rate for you? + text_jump UnknownText_0x1c00a0, BANK(UnknownText_0x1c00a0) + db "@" +; 0xfb819 + +UnknownText_0xfb819: ; 0xfb819 + ; Hm… @ … That's a fairly decent name. + ; But, how about a slightly better nickname? + ; Want me to give it a better name? + text_jump UnknownText_0x1c00cd, BANK(UnknownText_0x1c00cd) + db "@" +; 0xfb81e + +UnknownText_0xfb81e: ; 0xfb81e + ; All right. What name should we give it, then? + text_jump UnknownText_0x1c0142, BANK(UnknownText_0x1c0142) + db "@" +; 0xfb823 + +UnknownText_0xfb823: ; 0xfb823 + ; That's a better name than before! Well done! + text_jump UnknownText_0x1c0171, BANK(UnknownText_0x1c0171) + db "@" +; 0xfb828 + +UnknownText_0xfb828: ; 0xfb828 + ; OK, then. Come again sometime. + text_jump UnknownText_0x1c019e, BANK(UnknownText_0x1c019e) + db "@" +; 0xfb82d + +UnknownText_0xfb82d: ; 0xfb82d + ; Hm… @ ? What a great name! It's perfect. + ; Treat @ with loving care. + text_jump UnknownText_0x1c01be, BANK(UnknownText_0x1c01be) + db "@" +; 0xfb832 + +UnknownText_0xfb832: ; 0xfb832 + ; Whoa… That's just an EGG. + text_jump UnknownText_0x1c0208, BANK(UnknownText_0x1c0208) + db "@" +; 0xfb837 + +UnknownText_0xfb837: ; 0xfb837 + ; It might look the same as before, + ; but this new name is much better! Well done! + text_jump UnknownText_0x1c0222, BANK(UnknownText_0x1c0222) + db "@" +; 0xfb83c + +UnknownText_0xfb83c: ; 0xfb83c + ; All right. This #MON is now named @ . + text_jump UnknownText_0x1c0272, BANK(UnknownText_0x1c0272) + db "@" +; 0xfb841 + Functionfb841: ; fb841 ld a, [ScriptVar] -- cgit v1.2.3 From 608d0d86e47b09f1c1ddbcf3b9c51e0ac628d7ed Mon Sep 17 00:00:00 2001 From: yenatch Date: Mon, 9 Sep 2013 16:09:34 -0400 Subject: move name rater asm into event/name_rater.asm --- event/name_rater.asm | 236 +++++++++++++++++++++++++++++++++++++++++++++++++++ main.asm | 235 +------------------------------------------------- 2 files changed, 237 insertions(+), 234 deletions(-) create mode 100644 event/name_rater.asm diff --git a/event/name_rater.asm b/event/name_rater.asm new file mode 100644 index 000000000..063376daf --- /dev/null +++ b/event/name_rater.asm @@ -0,0 +1,236 @@ +NameRater: ; fb6ed + ld hl, UnknownText_0xfb80f + call PrintText + call Function1dcf + jp c, .asm_fb77e + ld hl, UnknownText_0xfb814 + call PrintText + callba Function50000 + jr c, .asm_fb77e + ld a, [CurPartySpecies] + cp EGG + jr z, .asm_fb783 + call GetCurNick + call Functionfb78a + jr c, .asm_fb779 + ld hl, UnknownText_0xfb819 + call PrintText + call Function1dcf + jr c, .asm_fb77e + ld hl, UnknownText_0xfb81e + call PrintText + xor a + ld [MonType], a + ld a, [CurPartySpecies] + ld [$d265], a + ld [CurSpecies], a + call GetBaseData + ld b, 0 + ld de, StringBuffer2 + callba Function116b7 + call Functionfb7be + ld hl, UnknownText_0xfb837 + jr c, .asm_fb76c + call Functionfb7d3 + ld hl, UnknownText_0xfb837 + jr c, .asm_fb76c + ld hl, PartyMon1Nickname + ld bc, $000b + ld a, [CurPartyMon] + call AddNTimes + ld e, l + ld d, h + ld hl, StringBuffer2 + ld bc, $000b + call CopyBytes + ld hl, UnknownText_0xfb823 + +.asm_fb76c + push hl + call GetCurNick + ld hl, UnknownText_0xfb83c + call PrintText + pop hl + jr .asm_fb786 + +.asm_fb779 + ld hl, UnknownText_0xfb82d + jr .asm_fb786 + +.asm_fb77e + ld hl, UnknownText_0xfb828 + jr .asm_fb786 + +.asm_fb783 + ld hl, UnknownText_0xfb832 + +.asm_fb786 + call PrintText + ret +; fb78a + +Functionfb78a: ; fb78a + ld hl, PartyMon1OT + ld bc, $000b + ld a, [CurPartyMon] + call AddNTimes + ld de, PlayerName + ld c, $b + call .asm_fb7b1 + jr c, .asm_fb7bc + ld hl, PartyMon1ID + ld bc, PartyMon2 - PartyMon1 + ld a, [CurPartyMon] + call AddNTimes + ld de, PlayerID + ld c, $2 +.asm_fb7b1 + ld a, [de] + cp [hl] + jr nz, .asm_fb7bc + inc hl + inc de + dec c + jr nz, .asm_fb7b1 + and a + ret + +.asm_fb7bc + scf + ret +; fb7be + +Functionfb7be: ; fb7be + ld hl, StringBuffer2 + ld c, 10 +.asm_fb7c3 + ld a, [hli] + cp "@" + jr z, .asm_fb7cf + cp " " + jr nz, .asm_fb7d1 + dec c + jr nz, .asm_fb7c3 + +.asm_fb7cf + scf + ret + +.asm_fb7d1 + and a + ret +; fb7d3 + +Functionfb7d3: ; fb7d3 + ld hl, PartyMon1Nickname + ld bc, $000b + ld a, [CurPartyMon] + call AddNTimes + push hl + call Functionfb802 + ld b, c + ld hl, StringBuffer2 + call Functionfb802 + pop hl + ld a, c + cp b + jr nz, .asm_fb7fe + ld de, StringBuffer2 +.asm_fb7f2 + ld a, [de] + cp "@" + jr z, .asm_fb800 + cp [hl] + jr nz, .asm_fb7fe + inc hl + inc de + jr .asm_fb7f2 + +.asm_fb7fe + and a + ret + +.asm_fb800 + scf + ret +; fb802 + +Functionfb802: ; fb802 + ld c, 0 +.asm_fb804 + ld a, [hli] + cp "@" + ret z + inc c + ld a, c + cp 10 + jr nz, .asm_fb804 + ret +; fb80f + +UnknownText_0xfb80f: ; 0xfb80f + ; Hello, hello! I'm the NAME RATER. + ; I rate the names of #MON. + ; Would you like me to rate names? + text_jump UnknownText_0x1c0043, BANK(UnknownText_0x1c0043) + db "@" +; 0xfb814 + +UnknownText_0xfb814: ; 0xfb814 + ; Which #MON's nickname should I rate for you? + text_jump UnknownText_0x1c00a0, BANK(UnknownText_0x1c00a0) + db "@" +; 0xfb819 + +UnknownText_0xfb819: ; 0xfb819 + ; Hm… @ … That's a fairly decent name. + ; But, how about a slightly better nickname? + ; Want me to give it a better name? + text_jump UnknownText_0x1c00cd, BANK(UnknownText_0x1c00cd) + db "@" +; 0xfb81e + +UnknownText_0xfb81e: ; 0xfb81e + ; All right. What name should we give it, then? + text_jump UnknownText_0x1c0142, BANK(UnknownText_0x1c0142) + db "@" +; 0xfb823 + +UnknownText_0xfb823: ; 0xfb823 + ; That's a better name than before! Well done! + text_jump UnknownText_0x1c0171, BANK(UnknownText_0x1c0171) + db "@" +; 0xfb828 + +UnknownText_0xfb828: ; 0xfb828 + ; OK, then. Come again sometime. + text_jump UnknownText_0x1c019e, BANK(UnknownText_0x1c019e) + db "@" +; 0xfb82d + +UnknownText_0xfb82d: ; 0xfb82d + ; Hm… @ ? What a great name! It's perfect. + ; Treat @ with loving care. + text_jump UnknownText_0x1c01be, BANK(UnknownText_0x1c01be) + db "@" +; 0xfb832 + +UnknownText_0xfb832: ; 0xfb832 + ; Whoa… That's just an EGG. + text_jump UnknownText_0x1c0208, BANK(UnknownText_0x1c0208) + db "@" +; 0xfb837 + +UnknownText_0xfb837: ; 0xfb837 + ; It might look the same as before, + ; but this new name is much better! Well done! + text_jump UnknownText_0x1c0222, BANK(UnknownText_0x1c0222) + db "@" +; 0xfb83c + +UnknownText_0xfb83c: ; 0xfb83c + ; All right. This #MON is now named @ . + text_jump UnknownText_0x1c0272, BANK(UnknownText_0x1c0272) + db "@" +; 0xfb841 + diff --git a/main.asm b/main.asm index ffe42ca7b..d642284dd 100644 --- a/main.asm +++ b/main.asm @@ -73868,241 +73868,8 @@ Functionfb634: ; fb634 INCBIN "baserom.gbc", $fb656, $fb6ed - $fb656 -NameRater: ; fb6ed - ld hl, UnknownText_0xfb80f - call PrintText - call Function1dcf - jp c, .asm_fb77e - ld hl, UnknownText_0xfb814 - call PrintText - callba Function50000 - jr c, .asm_fb77e - ld a, [CurPartySpecies] - cp EGG - jr z, .asm_fb783 - call GetCurNick - call Functionfb78a - jr c, .asm_fb779 - ld hl, UnknownText_0xfb819 - call PrintText - call Function1dcf - jr c, .asm_fb77e - ld hl, UnknownText_0xfb81e - call PrintText - xor a - ld [MonType], a - ld a, [CurPartySpecies] - ld [$d265], a - ld [CurSpecies], a - call GetBaseData - ld b, 0 - ld de, StringBuffer2 - callba Function116b7 - call Functionfb7be - ld hl, UnknownText_0xfb837 - jr c, .asm_fb76c - call Functionfb7d3 - ld hl, UnknownText_0xfb837 - jr c, .asm_fb76c - ld hl, PartyMon1Nickname - ld bc, $000b - ld a, [CurPartyMon] - call AddNTimes - ld e, l - ld d, h - ld hl, StringBuffer2 - ld bc, $000b - call CopyBytes - ld hl, UnknownText_0xfb823 - -.asm_fb76c - push hl - call GetCurNick - ld hl, UnknownText_0xfb83c - call PrintText - pop hl - jr .asm_fb786 - -.asm_fb779 - ld hl, UnknownText_0xfb82d - jr .asm_fb786 - -.asm_fb77e - ld hl, UnknownText_0xfb828 - jr .asm_fb786 - -.asm_fb783 - ld hl, UnknownText_0xfb832 - -.asm_fb786 - call PrintText - ret -; fb78a - -Functionfb78a: ; fb78a - ld hl, PartyMon1OT - ld bc, $000b - ld a, [CurPartyMon] - call AddNTimes - ld de, PlayerName - ld c, $b - call .asm_fb7b1 - jr c, .asm_fb7bc - ld hl, PartyMon1ID - ld bc, PartyMon2 - PartyMon1 - ld a, [CurPartyMon] - call AddNTimes - ld de, PlayerID - ld c, $2 -.asm_fb7b1 - ld a, [de] - cp [hl] - jr nz, .asm_fb7bc - inc hl - inc de - dec c - jr nz, .asm_fb7b1 - and a - ret - -.asm_fb7bc - scf - ret -; fb7be - -Functionfb7be: ; fb7be - ld hl, StringBuffer2 - ld c, 10 -.asm_fb7c3 - ld a, [hli] - cp "@" - jr z, .asm_fb7cf - cp " " - jr nz, .asm_fb7d1 - dec c - jr nz, .asm_fb7c3 - -.asm_fb7cf - scf - ret - -.asm_fb7d1 - and a - ret -; fb7d3 - -Functionfb7d3: ; fb7d3 - ld hl, PartyMon1Nickname - ld bc, $000b - ld a, [CurPartyMon] - call AddNTimes - push hl - call Functionfb802 - ld b, c - ld hl, StringBuffer2 - call Functionfb802 - pop hl - ld a, c - cp b - jr nz, .asm_fb7fe - ld de, StringBuffer2 -.asm_fb7f2 - ld a, [de] - cp "@" - jr z, .asm_fb800 - cp [hl] - jr nz, .asm_fb7fe - inc hl - inc de - jr .asm_fb7f2 - -.asm_fb7fe - and a - ret -.asm_fb800 - scf - ret -; fb802 - -Functionfb802: ; fb802 - ld c, 0 -.asm_fb804 - ld a, [hli] - cp "@" - ret z - inc c - ld a, c - cp 10 - jr nz, .asm_fb804 - ret -; fb80f - -UnknownText_0xfb80f: ; 0xfb80f - ; Hello, hello! I'm the NAME RATER. - ; I rate the names of #MON. - ; Would you like me to rate names? - text_jump UnknownText_0x1c0043, BANK(UnknownText_0x1c0043) - db "@" -; 0xfb814 - -UnknownText_0xfb814: ; 0xfb814 - ; Which #MON's nickname should I rate for you? - text_jump UnknownText_0x1c00a0, BANK(UnknownText_0x1c00a0) - db "@" -; 0xfb819 - -UnknownText_0xfb819: ; 0xfb819 - ; Hm… @ … That's a fairly decent name. - ; But, how about a slightly better nickname? - ; Want me to give it a better name? - text_jump UnknownText_0x1c00cd, BANK(UnknownText_0x1c00cd) - db "@" -; 0xfb81e - -UnknownText_0xfb81e: ; 0xfb81e - ; All right. What name should we give it, then? - text_jump UnknownText_0x1c0142, BANK(UnknownText_0x1c0142) - db "@" -; 0xfb823 - -UnknownText_0xfb823: ; 0xfb823 - ; That's a better name than before! Well done! - text_jump UnknownText_0x1c0171, BANK(UnknownText_0x1c0171) - db "@" -; 0xfb828 - -UnknownText_0xfb828: ; 0xfb828 - ; OK, then. Come again sometime. - text_jump UnknownText_0x1c019e, BANK(UnknownText_0x1c019e) - db "@" -; 0xfb82d - -UnknownText_0xfb82d: ; 0xfb82d - ; Hm… @ ? What a great name! It's perfect. - ; Treat @ with loving care. - text_jump UnknownText_0x1c01be, BANK(UnknownText_0x1c01be) - db "@" -; 0xfb832 - -UnknownText_0xfb832: ; 0xfb832 - ; Whoa… That's just an EGG. - text_jump UnknownText_0x1c0208, BANK(UnknownText_0x1c0208) - db "@" -; 0xfb837 - -UnknownText_0xfb837: ; 0xfb837 - ; It might look the same as before, - ; but this new name is much better! Well done! - text_jump UnknownText_0x1c0222, BANK(UnknownText_0x1c0222) - db "@" -; 0xfb83c - -UnknownText_0xfb83c: ; 0xfb83c - ; All right. This #MON is now named @ . - text_jump UnknownText_0x1c0272, BANK(UnknownText_0x1c0272) - db "@" -; 0xfb841 +INCLUDE "event/name_rater.asm" Functionfb841: ; fb841 -- cgit v1.2.3 From 110477cd9e6ed4c9249f7bac28b5a84fa81e8efc Mon Sep 17 00:00:00 2001 From: yenatch Date: Mon, 9 Sep 2013 18:43:22 -0400 Subject: split curse effect into battle/effects/curse.asm --- battle/effect_commands.asm | 98 +--------------------------------------------- battle/effects/curse.asm | 98 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+), 97 deletions(-) create mode 100644 battle/effects/curse.asm diff --git a/battle/effect_commands.asm b/battle/effect_commands.asm index 5ac336ed9..a7dda2bf4 100644 --- a/battle/effect_commands.asm +++ b/battle/effect_commands.asm @@ -9542,103 +9542,7 @@ BattleCommand53: ; 37563 ; 37588 -BattleCommand54: ; 37588 -; curse - - ld de, BattleMonType1 - ld bc, PlayerStatLevels - ld a, [hBattleTurn] - and a - jr z, .go - ld de, EnemyMonType1 - ld bc, EnemyStatLevels - -.go - -; Curse is different for Ghost-types. - - ld a, [de] - cp GHOST - jr z, .ghost - inc de - ld a, [de] - cp GHOST - jr z, .ghost - - -; If no stats can be increased, don't. - -; Attack - ld a, [bc] - cp 13 ; max - jr c, .raise - -; Defense - inc bc - ld a, [bc] - cp 13 ; max - jr nc, .cantraise - -.raise - -; Raise Attack and Defense, and lower Speed. - - ld a, $1 - ld [$c689], a - call Function0x37e01 - ld a, $2 - call Function0x36532 - call SwitchTurn - call BattleCommand8d - call ResetMiss - call SwitchTurn - call BattleCommand70 - call BattleCommand8c - call ResetMiss - call BattleCommand71 - jp BattleCommand8c - - -.ghost - -; Cut HP in half and put a curse on the opponent. - - call CheckHiddenOpponent - jr nz, .failed - - call CheckSubstituteOpp - jr nz, .failed - - ld a, BATTLE_VARS_SUBSTATUS1_OPP - call GetBattleVarPair - bit 1, [hl] - jr nz, .failed - - set 1, [hl] - call Function0x37e01 - ld hl, GetHalfMaxHP - call CallBankF - ld hl, Function3cc3f - call CallBankF - call UpdateUserInParty - ld hl, PutACurseText - jp StdBattleTextBox - -.failed - call Function0x37e77 - jp PrintButItFailed - - -.cantraise - -; Can't raise either stat. - - ld b, $8 ; ABILITY - call GetStatName - call Function0x37e77 - ld hl, WontRiseAnymoreText - jp StdBattleTextBox -; 37618 +INCLUDE "battle/effects/curse.asm" BattleCommand55: ; 37618 diff --git a/battle/effects/curse.asm b/battle/effects/curse.asm new file mode 100644 index 000000000..41ffc3a8d --- /dev/null +++ b/battle/effects/curse.asm @@ -0,0 +1,98 @@ +BattleCommand54: ; 37588 +; curse + + ld de, BattleMonType1 + ld bc, PlayerStatLevels + ld a, [hBattleTurn] + and a + jr z, .go + ld de, EnemyMonType1 + ld bc, EnemyStatLevels + +.go + +; Curse is different for Ghost-types. + + ld a, [de] + cp GHOST + jr z, .ghost + inc de + ld a, [de] + cp GHOST + jr z, .ghost + + +; If no stats can be increased, don't. + +; Attack + ld a, [bc] + cp 13 ; max + jr c, .raise + +; Defense + inc bc + ld a, [bc] + cp 13 ; max + jr nc, .cantraise + +.raise + +; Raise Attack and Defense, and lower Speed. + + ld a, $1 + ld [$c689], a + call Function0x37e01 + ld a, $2 + call Function0x36532 + call SwitchTurn + call BattleCommand8d + call ResetMiss + call SwitchTurn + call BattleCommand70 + call BattleCommand8c + call ResetMiss + call BattleCommand71 + jp BattleCommand8c + + +.ghost + +; Cut HP in half and put a curse on the opponent. + + call CheckHiddenOpponent + jr nz, .failed + + call CheckSubstituteOpp + jr nz, .failed + + ld a, BATTLE_VARS_SUBSTATUS1_OPP + call GetBattleVarPair + bit 1, [hl] + jr nz, .failed + + set 1, [hl] + call Function0x37e01 + ld hl, GetHalfMaxHP + call CallBankF + ld hl, Function3cc3f + call CallBankF + call UpdateUserInParty + ld hl, PutACurseText + jp StdBattleTextBox + +.failed + call Function0x37e77 + jp PrintButItFailed + + +.cantraise + +; Can't raise either stat. + + ld b, $8 ; ABILITY + call GetStatName + call Function0x37e77 + ld hl, WontRiseAnymoreText + jp StdBattleTextBox +; 37618 + -- cgit v1.2.3 From d07cd794431090033b62b8438530a99e1f52bfad Mon Sep 17 00:00:00 2001 From: yenatch Date: Mon, 9 Sep 2013 21:23:42 -0400 Subject: consecutive protect/endure count in battle --- wram.asm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/wram.asm b/wram.asm index 6b4b29f4c..6f25a2f96 100644 --- a/wram.asm +++ b/wram.asm @@ -588,6 +588,7 @@ PlayerPerishCount: ; c677 ds 1 PlayerFuryCutterCount: ; c678 ds 1 +PlayerProtectCount: ; c679 ds 1 EnemyRolloutCount: ; c67a @@ -603,6 +604,7 @@ EnemyPerishCount: ; c67f ds 1 EnemyFuryCutterCount: ; c680 ds 1 +EnemyProtectCount: ; c681 ds 1 PlayerDamageTaken: ; c682 -- cgit v1.2.3 From aaf77957bf6e2a149827461a3126fea0a85102c9 Mon Sep 17 00:00:00 2001 From: yenatch Date: Mon, 9 Sep 2013 21:50:34 -0400 Subject: comment protect and endure move effects --- battle/effect_commands.asm | 57 ++++++++++++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/battle/effect_commands.asm b/battle/effect_commands.asm index a7dda2bf4..1ae8976ae 100644 --- a/battle/effect_commands.asm +++ b/battle/effect_commands.asm @@ -9547,66 +9547,77 @@ INCLUDE "battle/effects/curse.asm" BattleCommand55: ; 37618 ; protect - - call Function0x3762c + call ProtectChance ret c + ld a, BATTLE_VARS_SUBSTATUS1 call GetBattleVarPair - set 2, [hl] + set SUBSTATUS_PROTECT, [hl] + call Function0x37e01 + ld hl, ProtectedItselfText jp StdBattleTextBox ; 3762c -Function0x3762c: ; 3762c - ld de, $c679 +ProtectChance: ; 3762c + + ld de, PlayerProtectCount ld a, [hBattleTurn] and a jr z, .asm_37637 - ld de, $c681 - + ld de, EnemyProtectCount .asm_37637 + call Function0x36abf - jr nz, .asm_37665 + jr nz, .failed - ld a, $3 +; Can't have a substitute. + + ld a, BATTLE_VARS_SUBSTATUS4 call CleanGetBattleVarPair - bit 4, a - jr nz, .asm_37665 + bit SUBSTATUS_SUBSTITUTE, a + jr nz, .failed + +; Halve the chance of a successful Protect for each consecutive use. ld b, $ff ld a, [de] ld c, a -.asm_37649 +.loop ld a, c and a - jr z, .asm_37656 - + jr z, .done dec c + srl b ld a, b and a - jr nz, .asm_37649 - - jr .asm_37665 + jr nz, .loop + jr .failed +.done -.asm_37656 +.rand call BattleRandom and a - jr z, .asm_37656 + jr z, .rand dec a cp b - jr nc, .asm_37665 + jr nc, .failed + +; Another consecutive Protect use. ld a, [de] inc a ld [de], a + and a ret -.asm_37665 + +.failed xor a ld [de], a call Function0x37e77 @@ -9619,13 +9630,15 @@ Function0x3762c: ; 3762c BattleCommand5a: ; 3766f ; endure - call Function0x3762c + call ProtectChance ret c ld a, BATTLE_VARS_SUBSTATUS1 call GetBattleVarPair set SUBSTATUS_ENDURE, [hl] + call Function0x37e01 + ld hl, BracedItselfText jp StdBattleTextBox ; 37683 -- cgit v1.2.3 From 40010e2514bffb35e9895f5cb1185296f9020c02 Mon Sep 17 00:00:00 2001 From: yenatch Date: Mon, 9 Sep 2013 21:51:41 -0400 Subject: split protect and endure effects into battle/effects/ --- battle/effect_commands.asm | 99 +--------------------------------------------- battle/effects/endure.asm | 16 ++++++++ battle/effects/protect.asm | 81 +++++++++++++++++++++++++++++++++++++ 3 files changed, 99 insertions(+), 97 deletions(-) create mode 100644 battle/effects/endure.asm create mode 100644 battle/effects/protect.asm diff --git a/battle/effect_commands.asm b/battle/effect_commands.asm index 1ae8976ae..996634376 100644 --- a/battle/effect_commands.asm +++ b/battle/effect_commands.asm @@ -9544,104 +9544,9 @@ BattleCommand53: ; 37563 INCLUDE "battle/effects/curse.asm" +INCLUDE "battle/effects/protect.asm" -BattleCommand55: ; 37618 -; protect - call ProtectChance - ret c - - ld a, BATTLE_VARS_SUBSTATUS1 - call GetBattleVarPair - set SUBSTATUS_PROTECT, [hl] - - call Function0x37e01 - - ld hl, ProtectedItselfText - jp StdBattleTextBox -; 3762c - - -ProtectChance: ; 3762c - - ld de, PlayerProtectCount - ld a, [hBattleTurn] - and a - jr z, .asm_37637 - ld de, EnemyProtectCount -.asm_37637 - - call Function0x36abf - jr nz, .failed - -; Can't have a substitute. - - ld a, BATTLE_VARS_SUBSTATUS4 - call CleanGetBattleVarPair - bit SUBSTATUS_SUBSTITUTE, a - jr nz, .failed - -; Halve the chance of a successful Protect for each consecutive use. - - ld b, $ff - ld a, [de] - ld c, a -.loop - ld a, c - and a - jr z, .done - dec c - - srl b - ld a, b - and a - jr nz, .loop - jr .failed -.done - -.rand - call BattleRandom - and a - jr z, .rand - - dec a - cp b - jr nc, .failed - -; Another consecutive Protect use. - - ld a, [de] - inc a - ld [de], a - - and a - ret - - -.failed - xor a - ld [de], a - call Function0x37e77 - call PrintButItFailed - scf - ret -; 3766f - - -BattleCommand5a: ; 3766f -; endure - - call ProtectChance - ret c - - ld a, BATTLE_VARS_SUBSTATUS1 - call GetBattleVarPair - set SUBSTATUS_ENDURE, [hl] - - call Function0x37e01 - - ld hl, BracedItselfText - jp StdBattleTextBox -; 37683 +INCLUDE "battle/effects/endure.asm" BattleCommand56: ; 37683 diff --git a/battle/effects/endure.asm b/battle/effects/endure.asm new file mode 100644 index 000000000..b6ae9358e --- /dev/null +++ b/battle/effects/endure.asm @@ -0,0 +1,16 @@ +BattleCommand5a: ; 3766f +; endure + + call ProtectChance + ret c + + ld a, BATTLE_VARS_SUBSTATUS1 + call GetBattleVarPair + set SUBSTATUS_ENDURE, [hl] + + call Function0x37e01 + + ld hl, BracedItselfText + jp StdBattleTextBox +; 37683 + diff --git a/battle/effects/protect.asm b/battle/effects/protect.asm new file mode 100644 index 000000000..80edc0d85 --- /dev/null +++ b/battle/effects/protect.asm @@ -0,0 +1,81 @@ +BattleCommand55: ; 37618 +; protect + call ProtectChance + ret c + + ld a, BATTLE_VARS_SUBSTATUS1 + call GetBattleVarPair + set SUBSTATUS_PROTECT, [hl] + + call Function0x37e01 + + ld hl, ProtectedItselfText + jp StdBattleTextBox +; 3762c + + +ProtectChance: ; 3762c + + ld de, PlayerProtectCount + ld a, [hBattleTurn] + and a + jr z, .asm_37637 + ld de, EnemyProtectCount +.asm_37637 + + call Function0x36abf + jr nz, .failed + +; Can't have a substitute. + + ld a, BATTLE_VARS_SUBSTATUS4 + call CleanGetBattleVarPair + bit SUBSTATUS_SUBSTITUTE, a + jr nz, .failed + +; Halve the chance of a successful Protect for each consecutive use. + + ld b, $ff + ld a, [de] + ld c, a +.loop + ld a, c + and a + jr z, .done + dec c + + srl b + ld a, b + and a + jr nz, .loop + jr .failed +.done + +.rand + call BattleRandom + and a + jr z, .rand + + dec a + cp b + jr nc, .failed + +; Another consecutive Protect use. + + ld a, [de] + inc a + ld [de], a + + and a + ret + + +.failed + xor a + ld [de], a + call Function0x37e77 + call PrintButItFailed + scf + ret +; 3766f + -- cgit v1.2.3 From b437aaf3290489caf22cd916ce023a1a9b3578a4 Mon Sep 17 00:00:00 2001 From: yenatch Date: Mon, 9 Sep 2013 21:53:21 -0400 Subject: add a note to endure.asm this is easier than combining protect and endure --- battle/effects/endure.asm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/battle/effects/endure.asm b/battle/effects/endure.asm index b6ae9358e..79f657a24 100644 --- a/battle/effects/endure.asm +++ b/battle/effects/endure.asm @@ -1,6 +1,8 @@ BattleCommand5a: ; 3766f ; endure +; Endure shares code with Protect. See protect.asm. + call ProtectChance ret c -- cgit v1.2.3 From 91e89a29a20d075ffbdd3a2f75b507c8202b1dce Mon Sep 17 00:00:00 2001 From: yenatch Date: Mon, 9 Sep 2013 22:01:24 -0400 Subject: comment spikes move effect --- battle/effect_commands.asm | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/battle/effect_commands.asm b/battle/effect_commands.asm index 996634376..dc6ca521c 100644 --- a/battle/effect_commands.asm +++ b/battle/effect_commands.asm @@ -9557,13 +9557,19 @@ BattleCommand56: ; 37683 and a jr z, .asm_3768e ld hl, PlayerScreens - .asm_3768e - bit 0, [hl] + +; Fails if spikes are already down! + + bit SCREENS_SPIKES, [hl] jr nz, .failed - set 0, [hl] +; Nothing else stops it from working. + + set SCREENS_SPIKES, [hl] + call Function0x37e01 + ld hl, SpikesText jp StdBattleTextBox -- cgit v1.2.3 From 6439706943b53ad756d481dea683fa8ee97f4981 Mon Sep 17 00:00:00 2001 From: yenatch Date: Mon, 9 Sep 2013 22:02:26 -0400 Subject: split spikes effect into effects/spikes.asm --- battle/effect_commands.asm | 29 +---------------------------- battle/effects/spikes.asm | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 28 deletions(-) create mode 100644 battle/effects/spikes.asm diff --git a/battle/effect_commands.asm b/battle/effect_commands.asm index dc6ca521c..87196653a 100644 --- a/battle/effect_commands.asm +++ b/battle/effect_commands.asm @@ -9548,34 +9548,7 @@ INCLUDE "battle/effects/protect.asm" INCLUDE "battle/effects/endure.asm" - -BattleCommand56: ; 37683 -; spikes - - ld hl, EnemyScreens - ld a, [hBattleTurn] - and a - jr z, .asm_3768e - ld hl, PlayerScreens -.asm_3768e - -; Fails if spikes are already down! - - bit SCREENS_SPIKES, [hl] - jr nz, .failed - -; Nothing else stops it from working. - - set SCREENS_SPIKES, [hl] - - call Function0x37e01 - - ld hl, SpikesText - jp StdBattleTextBox - -.failed - jp Function0x37354 -; 376a0 +INCLUDE "battle/effects/spikes.asm" BattleCommand57: ; 376a0 diff --git a/battle/effects/spikes.asm b/battle/effects/spikes.asm new file mode 100644 index 000000000..1b93f9fa1 --- /dev/null +++ b/battle/effects/spikes.asm @@ -0,0 +1,28 @@ +BattleCommand56: ; 37683 +; spikes + + ld hl, EnemyScreens + ld a, [hBattleTurn] + and a + jr z, .asm_3768e + ld hl, PlayerScreens +.asm_3768e + +; Fails if spikes are already down! + + bit SCREENS_SPIKES, [hl] + jr nz, .failed + +; Nothing else stops it from working. + + set SCREENS_SPIKES, [hl] + + call Function0x37e01 + + ld hl, SpikesText + jp StdBattleTextBox + +.failed + jp Function0x37354 +; 376a0 + -- cgit v1.2.3 From 84a9b3907b9db08ee38e873554d8a6b4ac1b72b4 Mon Sep 17 00:00:00 2001 From: yenatch Date: Mon, 9 Sep 2013 22:44:48 -0400 Subject: rename common/ to home/ --- common/copy.asm | 431 --------- common/copy2.asm | 134 --- common/decompress.asm | 367 -------- common/delay.asm | 23 - common/double_speed.asm | 31 - common/fade.asm | 134 --- common/farcall.asm | 55 -- common/flag.asm | 113 --- common/game_time.asm | 132 --- common/handshake.asm | 38 - common/init.asm | 225 ----- common/item.asm | 76 -- common/joypad.asm | 491 ---------- common/lcd.asm | 81 -- common/map.asm | 2369 ----------------------------------------------- common/map_objects.asm | 683 -------------- common/math.asm | 76 -- common/menu.asm | 603 ------------ common/palettes.asm | 347 ------- common/predef.asm | 54 -- common/random.asm | 76 -- common/rtc.asm | 25 - common/serial.asm | 408 -------- common/sine.asm | 22 - common/sram.asm | 34 - common/string.asm | 39 - common/text.asm | 1230 ------------------------ common/time.asm | 311 ------- common/vblank.asm | 541 ----------- common/video.asm | 487 ---------- home/copy.asm | 431 +++++++++ home/copy2.asm | 134 +++ home/decompress.asm | 367 ++++++++ home/delay.asm | 23 + home/double_speed.asm | 31 + home/fade.asm | 134 +++ home/farcall.asm | 55 ++ home/flag.asm | 113 +++ home/game_time.asm | 132 +++ home/handshake.asm | 38 + home/init.asm | 225 +++++ home/item.asm | 76 ++ home/joypad.asm | 491 ++++++++++ home/lcd.asm | 81 ++ home/map.asm | 2369 +++++++++++++++++++++++++++++++++++++++++++++++ home/map_objects.asm | 683 ++++++++++++++ home/math.asm | 76 ++ home/menu.asm | 603 ++++++++++++ home/palettes.asm | 347 +++++++ home/predef.asm | 54 ++ home/random.asm | 76 ++ home/rtc.asm | 25 + home/serial.asm | 408 ++++++++ home/sine.asm | 22 + home/sram.asm | 34 + home/string.asm | 39 + home/text.asm | 1230 ++++++++++++++++++++++++ home/time.asm | 311 +++++++ home/vblank.asm | 541 +++++++++++ home/video.asm | 487 ++++++++++ main.asm | 60 +- 61 files changed, 9666 insertions(+), 9666 deletions(-) delete mode 100644 common/copy.asm delete mode 100644 common/copy2.asm delete mode 100644 common/decompress.asm delete mode 100644 common/delay.asm delete mode 100644 common/double_speed.asm delete mode 100644 common/fade.asm delete mode 100644 common/farcall.asm delete mode 100644 common/flag.asm delete mode 100644 common/game_time.asm delete mode 100644 common/handshake.asm delete mode 100644 common/init.asm delete mode 100644 common/item.asm delete mode 100644 common/joypad.asm delete mode 100644 common/lcd.asm delete mode 100644 common/map.asm delete mode 100644 common/map_objects.asm delete mode 100644 common/math.asm delete mode 100644 common/menu.asm delete mode 100644 common/palettes.asm delete mode 100644 common/predef.asm delete mode 100644 common/random.asm delete mode 100644 common/rtc.asm delete mode 100644 common/serial.asm delete mode 100644 common/sine.asm delete mode 100644 common/sram.asm delete mode 100644 common/string.asm delete mode 100644 common/text.asm delete mode 100644 common/time.asm delete mode 100644 common/vblank.asm delete mode 100644 common/video.asm create mode 100644 home/copy.asm create mode 100644 home/copy2.asm create mode 100644 home/decompress.asm create mode 100644 home/delay.asm create mode 100644 home/double_speed.asm create mode 100644 home/fade.asm create mode 100644 home/farcall.asm create mode 100644 home/flag.asm create mode 100644 home/game_time.asm create mode 100644 home/handshake.asm create mode 100644 home/init.asm create mode 100644 home/item.asm create mode 100644 home/joypad.asm create mode 100644 home/lcd.asm create mode 100644 home/map.asm create mode 100644 home/map_objects.asm create mode 100644 home/math.asm create mode 100644 home/menu.asm create mode 100644 home/palettes.asm create mode 100644 home/predef.asm create mode 100644 home/random.asm create mode 100644 home/rtc.asm create mode 100644 home/serial.asm create mode 100644 home/sine.asm create mode 100644 home/sram.asm create mode 100644 home/string.asm create mode 100644 home/text.asm create mode 100644 home/time.asm create mode 100644 home/vblank.asm create mode 100644 home/video.asm diff --git a/common/copy.asm b/common/copy.asm deleted file mode 100644 index ad25c96e6..000000000 --- a/common/copy.asm +++ /dev/null @@ -1,431 +0,0 @@ -; Functions to copy data from ROM. - - -Functiondc9: ; dc9 - ld a, [rLCDC] - bit 7, a - jp z, Copy2bpp - - ld a, [hROMBank] - push af - ld a, BANK(Function104284) - rst Bankswitch - call Function104284 - pop af - rst Bankswitch - - ret -; ddc - -Functionddc: ; ddc - ld a, [rLCDC] - bit 7, a - jp z, Copy1bpp - - ld a, [hROMBank] - push af - ld a, BANK(Function1042b2) - rst Bankswitch - call Function1042b2 - pop af - rst Bankswitch - - ret -; def - -Functiondef: ; def - ld [hBuffer], a - ld a, [hROMBank] - push af - ld a, [hBuffer] - rst Bankswitch - call FarCopyBytesDouble - pop af - rst Bankswitch - ret -; dfd - -Functiondfd: ; dfd - dec c - ld a, [hBGMapMode] - push af - xor a - ld [hBGMapMode], a - ld a, [hROMBank] - push af - ld a, b - rst Bankswitch - -.asm_e09 - ld a, d - ld [rHDMA1], a - ld a, e - and $f0 - ld [rHDMA2], a - ld a, h - and $1f - ld [rHDMA3], a - ld a, l - and $f0 - ld [rHDMA4], a - ld a, c - cp $8 - jr c, .asm_e3c - sub $8 - ld c, a - ld a, $f - ld [hDMATransfer], a - call DelayFrame - ld a, l - add $0 - ld l, a - ld a, h - adc $1 - ld h, a - ld a, e - add $0 - ld e, a - ld a, d - adc $1 - ld d, a - jr .asm_e09 - -.asm_e3c - ld a, c - and $7f - ld [hDMATransfer], a - call DelayFrame - pop af - rst Bankswitch - - pop af - ld [hBGMapMode], a - ret -; e4a - - - -Functione4a: ; e4a - ld a, $5 - ld hl, $4135 - rst FarCall - ret -; e51 - - - -Functione51: ; e51 - ld a, $3e - ld hl, $7449 - rst FarCall - ret -; e58 - -Functione58: ; e58 - ld a, $3e - ld hl, $74be - rst FarCall - ret -; e5f - - - -Functione5f: ; e5f - ld a, $3e - ld hl, $748a - rst FarCall - ld a, $3e - ld hl, $74b0 - rst FarCall - ret -; e6c - -Functione6c: ; e6c - ld a, $3e - ld hl, $74b0 - rst FarCall - ret -; e73 - -Functione73: ; e73 - push de - ld a, $0 - call GetSRAMBank - push bc - ld de, $a000 - ld a, b - call FarDecompress - pop bc - pop hl - ld de, $a000 - call Request2bpp - call CloseSRAM - ret -; e8d - - - -FarCopyBytes: ; e8d -; copy bc bytes from a:hl to de - - ld [hBuffer], a - ld a, [hROMBank] - push af - ld a, [hBuffer] - rst Bankswitch - - call CopyBytes - - pop af - rst Bankswitch - ret -; 0xe9b - - -FarCopyBytesDouble: ; e9b -; Copy bc bytes from a:hl to bc*2 bytes at de, -; doubling each byte in the process. - - ld [hBuffer], a - ld a, [hROMBank] - push af - ld a, [hBuffer] - rst Bankswitch - -; switcheroo, de <> hl - ld a, h - ld h, d - ld d, a - ld a, l - ld l, e - ld e, a - - inc b - inc c - jr .dec - -.loop - ld a, [de] - inc de - ld [hli], a - ld [hli], a -.dec - dec c - jr nz, .loop - dec b - jr nz, .loop - - pop af - rst Bankswitch - ret -; 0xeba - - -Request2bpp: ; eba - ld a, [hBGMapMode] - push af - xor a - ld [hBGMapMode], a - - ld a, [hROMBank] - push af - ld a, b - rst Bankswitch - - ld a, [$ffd3] - push af - - ld a, $8 - ld [$ffd3], a - ld a, [InLinkBattle] - cp $4 - jr nz, .asm_edc - ld a, [$ffe9] - and a - jr nz, .asm_edc - ld a, $6 - ld [$ffd3], a - -.asm_edc - ld a, e - ld [Requested2bppSource], a - ld a, d - ld [Requested2bppSource + 1], a - ld a, l - ld [Requested2bppDest], a - ld a, h - ld [Requested2bppDest + 1], a - -.asm_eec - ld a, c - ld hl, $ffd3 - cp [hl] - jr nc, .asm_f08 - - ld [Requested2bpp], a -.wait - call DelayFrame - ld a, [Requested2bpp] - and a - jr nz, .wait - - pop af - ld [$ffd3], a - - pop af - rst Bankswitch - - pop af - ld [hBGMapMode], a - ret - -.asm_f08 - ld a, [$ffd3] - ld [Requested2bpp], a -.asm_f0d - call DelayFrame - ld a, [Requested2bpp] - and a - jr nz, .asm_f0d - ld a, c - ld hl, $ffd3 - sub [hl] - ld c, a - jr .asm_eec -; f1e - - -Request1bpp: ; f1e - ld a, [hBGMapMode] - push af - xor a - ld [hBGMapMode], a - - ld a, [hROMBank] - push af - ld a, b - rst Bankswitch - - ld a, [$ffd3] - push af - - ld a, $8 - ld [$ffd3], a - ld a, [InLinkBattle] - cp $4 - jr nz, .asm_f40 - ld a, [$ffe9] - and a - jr nz, .asm_f40 - ld a, $6 - ld [$ffd3], a - -.asm_f40 - ld a, e - ld [Requested1bppSource], a - ld a, d - ld [Requested1bppSource + 1], a - ld a, l - ld [Requested1bppDest], a - ld a, h - ld [Requested1bppDest + 1], a -.asm_f50 - ld a, c - ld hl, $ffd3 - cp [hl] - jr nc, .asm_f6c - - ld [Requested1bpp], a -.wait - call DelayFrame - ld a, [Requested1bpp] - and a - jr nz, .wait - - pop af - ld [$ffd3], a - - pop af - rst Bankswitch - - pop af - ld [hBGMapMode], a - ret - -.asm_f6c - ld a, [$ffd3] - ld [Requested1bpp], a -.asm_f71 - call DelayFrame - ld a, [Requested1bpp] - and a - jr nz, .asm_f71 - ld a, c - ld hl, $ffd3 - sub [hl] - ld c, a - jr .asm_f50 -; f82 - - -Get2bpp: ; f82 - ld a, [rLCDC] - bit 7, a - jp nz, Request2bpp - -Copy2bpp: ; f89 -; copy c 2bpp tiles from b:de to hl - - push hl - ld h, d - ld l, e - pop de - -; bank - ld a, b - -; bc = c * $10 - push af - swap c - ld a, $f - and c - ld b, a - ld a, $f0 - and c - ld c, a - pop af - - jp FarCopyBytes -; f9d - - -Get1bpp: ; f9d - ld a, [rLCDC] - bit 7, a - jp nz, Request1bpp - -Copy1bpp: ; fa4 -; copy c 1bpp tiles from b:de to hl - - push de - ld d, h - ld e, l - -; bank - ld a, b - -; bc = c * $10 / 2 - push af - ld h, 0 - ld l, c - add hl, hl - add hl, hl - add hl, hl - ld b, h - ld c, l - pop af - - pop hl - jp FarCopyBytesDouble -; fb6 - diff --git a/common/copy2.asm b/common/copy2.asm deleted file mode 100644 index bdfbe9fdf..000000000 --- a/common/copy2.asm +++ /dev/null @@ -1,134 +0,0 @@ -CopyBytes: ; 0x3026 -; copy bc bytes from hl to de - inc b ; we bail the moment b hits 0, so include the last run - inc c ; same thing; include last byte - jr .HandleLoop -.CopyByte - ld a, [hli] - ld [de], a - inc de -.HandleLoop - dec c - jr nz, .CopyByte - dec b - jr nz, .CopyByte - ret - -SwapBytes: ; 0x3034 -; swap bc bytes between hl and de -.Loop - ; stash [hl] away on the stack - ld a, [hl] - push af - - ; copy a byte from [de] to [hl] - ld a, [de] - ld [hli], a - - ; retrieve the previous value of [hl]; put it in [de] - pop af - ld [de], a - inc de - - ; handle loop stuff - dec bc - ld a, b - or c - jr nz, .Loop - ret - -ByteFill: ; 0x3041 -; fill bc bytes with the value of a, starting at hl - inc b ; we bail the moment b hits 0, so include the last run - inc c ; same thing; include last byte - jr .HandleLoop -.PutByte - ld [hli], a -.HandleLoop - dec c - jr nz, .PutByte - dec b - jr nz, .PutByte - ret - -GetFarByte: ; 0x304d -; retrieve a single byte from a:hl, and return it in a. - ; bankswitch to new bank - ld [hBuffer], a - ld a, [hROMBank] - push af - ld a, [hBuffer] - rst Bankswitch - - ; get byte from new bank - ld a, [hl] - ld [hBuffer], a - - ; bankswitch to previous bank - pop af - rst Bankswitch - - ; return retrieved value in a - ld a, [hBuffer] - ret - -GetFarHalfword: ; 0x305d -; retrieve a halfword from a:hl, and return it in hl. - ; bankswitch to new bank - ld [hBuffer], a - ld a, [hROMBank] - push af - ld a, [hBuffer] - rst Bankswitch - - ; get halfword from new bank, put it in hl - ld a, [hli] - ld h, [hl] - ld l, a - - ; bankswitch to previous bank and return - pop af - rst Bankswitch - ret -; 0x306b - -FarCopyWRAM: ; 306b - ld [hBuffer], a - ld a, [rSVBK] - push af - ld a, [hBuffer] - ld [rSVBK], a - call CopyBytes - pop af - ld [rSVBK], a - ret -; 307b - -GetFarWRAMByte: ; 307b - ld [hBuffer], a - ld a, [rSVBK] - push af - ld a, [hBuffer] - ld [rSVBK], a - ld a, [hl] - ld [hBuffer], a - pop af - ld [rSVBK], a - ld a, [hBuffer] - ret -; 308d - -GetFarWRAMWord: ; 308d - ld [hBuffer], a - ld a, [rSVBK] - push af - ld a, [hBuffer] - ld [rSVBK], a - ld a, [hli] - ld h, [hl] - ld l, a - pop af - ld [rSVBK], a - ret -; 309d - diff --git a/common/decompress.asm b/common/decompress.asm deleted file mode 100644 index 8d39cd968..000000000 --- a/common/decompress.asm +++ /dev/null @@ -1,367 +0,0 @@ -FarDecompress: ; b40 -; Decompress graphics data at a:hl to de - -; put a away for a sec - ld [$c2c4], a -; save bank - ld a, [hROMBank] - push af -; bankswitch - ld a, [$c2c4] - rst Bankswitch - -; what we came here for - call Decompress - -; restore bank - pop af - rst Bankswitch - ret -; b50 - - -Decompress: ; b50 -; Pokemon Crystal uses an lz variant for compression. - -; This is mainly used for graphics, but the intro's -; tilemaps also use this compression. - -; This function decompresses lz-compressed data at hl to de. - - -; Basic rundown: - -; A typical control command consists of: -; -the command (bits 5-7) -; -the count (bits 0-4) -; -and any additional params - -; $ff is used as a terminator. - - -; Commands: - -; 0: literal -; literal data for some number of bytes -; 1: iterate -; one byte repeated for some number of bytes -; 2: alternate -; two bytes alternated for some number of bytes -; 3: zero (whitespace) -; 0x00 repeated for some number of bytes - -; Repeater control commands have a signed parameter used to determine the start point. -; Wraparound is simulated: -; Positive values are added to the start address of the decompressed data -; and negative values are subtracted from the current position. - -; 4: repeat -; repeat some number of bytes from decompressed data -; 5: flipped -; repeat some number of flipped bytes from decompressed data -; ex: $ad = %10101101 -> %10110101 = $b5 -; 6: reverse -; repeat some number of bytes in reverse from decompressed data - -; If the value in the count needs to be larger than 5 bits, -; control code 7 can be used to expand the count to 10 bits. - -; A new control command is read in bits 2-4. -; The new 10-bit count is split: -; bits 0-1 contain the top 2 bits -; another byte is added containing the latter 8 - -; So, the structure of the control command becomes: -; 111xxxyy yyyyyyyy -; | | | | -; | | our new count -; | the control command for this count -; 7 (this command) - -; For more information, refer to the code below and in extras/gfx.py . - -; save starting output address - ld a, e - ld [$c2c2], a - ld a, d - ld [$c2c3], a - -.loop -; get next byte - ld a, [hl] -; done? - cp $ff ; end - ret z - -; get control code - and %11100000 - -; 10-bit param? - cp $e0 ; LZ_HI - jr nz, .normal - - -; 10-bit param: - -; get next 3 bits (%00011100) - ld a, [hl] - add a - add a ; << 3 - add a - -; this is our new control code - and %11100000 - push af - -; get param hi - ld a, [hli] - and %00000011 - ld b, a - -; get param lo - ld a, [hli] - ld c, a - -; read at least 1 byte - inc bc - jr .readers - - -.normal -; push control code - push af -; get param - ld a, [hli] - and %00011111 - ld c, a - ld b, $0 -; read at least 1 byte - inc c - -.readers -; let's get started - -; inc loop counts since we bail as soon as they hit 0 - inc b - inc c - -; get control code - pop af -; command type - bit 7, a ; 80, a0, c0 - jr nz, .repeatertype - -; literals - cp $20 ; LZ_ITER - jr z, .iter - cp $40 ; LZ_ALT - jr z, .alt - cp $60 ; LZ_ZERO - jr z, .zero - ; else $00 - -; 00 ; LZ_LIT -; literal data for bc bytes -.loop1 -; done? - dec c - jr nz, .next1 - dec b - jp z, .loop - -.next1 - ld a, [hli] - ld [de], a - inc de - jr .loop1 - - -; 20 ; LZ_ITER -; write byte for bc bytes -.iter - ld a, [hli] - -.iterloop - dec c - jr nz, .iternext - dec b - jp z, .loop - -.iternext - ld [de], a - inc de - jr .iterloop - - -; 40 ; LZ_ALT -; alternate two bytes for bc bytes - -; next pair -.alt -; done? - dec c - jr nz, .alt0 - dec b - jp z, .altclose0 - -; alternate for bc -.alt0 - ld a, [hli] - ld [de], a - inc de - dec c - jr nz, .alt1 -; done? - dec b - jp z, .altclose1 -.alt1 - ld a, [hld] - ld [de], a - inc de - jr .alt - -; skip past the bytes we were alternating -.altclose0 - inc hl -.altclose1 - inc hl - jr .loop - - -; 60 ; LZ_ZERO -; write 00 for bc bytes -.zero - xor a - -.zeroloop - dec c - jr nz, .zeronext - dec b - jp z, .loop - -.zeronext - ld [de], a - inc de - jr .zeroloop - - -; repeats -; 80, a0, c0 -; repeat decompressed data from output -.repeatertype - push hl - push af -; get next byte - ld a, [hli] -; absolute? - bit 7, a - jr z, .absolute - -; relative -; a = -a - and %01111111 ; forget the bit we just looked at - cpl -; add de (current output address) - add e - ld l, a - ld a, $ff ; -1 - adc d - ld h, a - jr .repeaters - -.absolute -; get next byte (lo) - ld l, [hl] -; last byte (hi) - ld h, a -; add starting output address - ld a, [$c2c2] - add l - ld l, a - ld a, [$c2c3] - adc h - ld h, a - -.repeaters - pop af - cp $80 ; LZ_REPEAT - jr z, .repeat - cp $a0 ; LZ_FLIP - jr z, .flip - cp $c0 ; LZ_REVERSE - jr z, .reverse - -; e0 -> 80 - -; 80 ; LZ_REPEAT -; repeat some decompressed data -.repeat -; done? - dec c - jr nz, .repeatnext - dec b - jr z, .cleanup - -.repeatnext - ld a, [hli] - ld [de], a - inc de - jr .repeat - - -; a0 ; LZ_FLIP -; repeat some decompressed data w/ flipped bit order -.flip - dec c - jr nz, .flipnext - dec b - jp z, .cleanup - -.flipnext - ld a, [hli] - push bc - ld bc, $0008 - -.fliploop - rra - rl b - dec c - jr nz, .fliploop - ld a, b - pop bc - ld [de], a - inc de - jr .flip - - -; c0 ; LZ_REVERSE -; repeat some decompressed data in reverse -.reverse - dec c - jr nz, .reversenext - - dec b - jp z, .cleanup - -.reversenext - ld a, [hld] - ld [de], a - inc de - jr .reverse - - -.cleanup -; get type of repeat we just used - pop hl -; was it relative or absolute? - bit 7, [hl] - jr nz, .next - -; skip two bytes for absolute - inc hl -; skip one byte for relative -.next - inc hl - jp .loop -; c2f - diff --git a/common/delay.asm b/common/delay.asm deleted file mode 100644 index 4e8b2147c..000000000 --- a/common/delay.asm +++ /dev/null @@ -1,23 +0,0 @@ -DelayFrame: ; 45a -; Wait for one frame - ld a, 1 - ld [VBlankOccurred], a - -; Wait for the next VBlank, halting to conserve battery -.halt - halt ; rgbasm adds a nop after this instruction by default - ld a, [VBlankOccurred] - and a - jr nz, .halt - ret -; 468 - - -DelayFrames: ; 468 -; Wait c frames - call DelayFrame - dec c - jr nz, DelayFrames - ret -; 46f - diff --git a/common/double_speed.asm b/common/double_speed.asm deleted file mode 100644 index fc1234215..000000000 --- a/common/double_speed.asm +++ /dev/null @@ -1,31 +0,0 @@ -; The CGB hardware introduces Double Speed Mode. -; While active, the clock speed is doubled. - -; The hardware can switch between normal speed -; and double speed at any time, but LCD output -; collapses during the switch. - -DoubleSpeed: ; 2fef - ld hl, rKEY1 - bit 7, [hl] - jr z, SwitchSpeed - ret -; 2ff7 - -NormalSpeed: ; 2ff7 - ld hl, rKEY1 - bit 7, [hl] - ret z -; 2ffd - -SwitchSpeed: ; 2ffd - set 0, [hl] - xor a - ld [rIF], a - ld [rIE], a - ld a, $30 - ld [rJOYP], a - stop ; rgbasm adds a nop after this instruction by default - ret -; 300b - diff --git a/common/fade.asm b/common/fade.asm deleted file mode 100644 index d67211e29..000000000 --- a/common/fade.asm +++ /dev/null @@ -1,134 +0,0 @@ -; Functions to fade the screen in and out. - - -Function48c: ; 48c - ld a, [TimeOfDayPal] - ld b, a - ld hl, IncGradGBPalTable_11 - ld a, l - sub b - ld l, a - jr nc, .asm_499 - dec h - -.asm_499 - ld a, [hli] - ld [rBGP], a - ld a, [hli] - ld [rOBP0], a - ld a, [hli] - ld [rOBP1], a - ret -; 4a3 - - -Function4a3: ; 4a3 - ld a, [hCGB] - and a - jr z, .asm_4af - ld hl, IncGradGBPalTable_00 - ld b, 4 - jr FadeOut - -.asm_4af - ld hl, IncGradGBPalTable_08 - ld b, 4 - jr FadeOut -; 4b6 - -Function4b6: ; 4b6 - ld a, [hCGB] - and a - jr z, .asm_4c2 - ld hl, IncGradGBPalTable_05 - ld b, 3 - jr FadeOut - -.asm_4c2 - ld hl, IncGradGBPalTable_13 - ld b, 3 -; 4c7 - -FadeOut: ; 4c7 - push de - ld a, [hli] - call DmgToCgbBGPals - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - call DmgToCgbObjPals - ld c, 8 - call DelayFrames - pop de - dec b - jr nz, FadeOut - ret -; 4dd - -Function4dd: ; 4dd - ld a, [hCGB] - and a - jr z, .asm_4e9 - ld hl, IncGradGBPalTable_04 - 1 - ld b, 4 - jr FadeIn - -.asm_4e9 - ld hl, IncGradGBPalTable_12 - 1 - ld b, 4 - jr FadeIn -; 4f0 - -Function4f0: ; 4f0 - ld a, [hCGB] - and a - jr z, .asm_4fc - ld hl, IncGradGBPalTable_07 - 1 - ld b, 3 - jr FadeIn - -.asm_4fc - ld hl, IncGradGBPalTable_15 - 1 - ld b, 3 - ; fallthrough -; 501 - -FadeIn: ; 501 - push de - ld a, [hld] - ld d, a - ld a, [hld] - ld e, a - call DmgToCgbObjPals - ld a, [hld] - call DmgToCgbBGPals - ld c, 8 - call DelayFrames - pop de - dec b - jr nz, FadeIn - ret -; 517 - - -; 517 -IncGradGBPalTable_00: db %11111111, %11111111, %11111111 -IncGradGBPalTable_01: db %11111110, %11111110, %11111110 -IncGradGBPalTable_02: db %11111001, %11111001, %11111001 -IncGradGBPalTable_03: db %11100100, %11100100, %11100100 -IncGradGBPalTable_04: db %11100100, %11100100, %11100100 -IncGradGBPalTable_05: db %10010000, %10010000, %10010000 -IncGradGBPalTable_06: db %01000000, %01000000, %01000000 -IncGradGBPalTable_07: db %00000000, %00000000, %00000000 -; bgp obp1 obp2 -IncGradGBPalTable_08: db %11111111, %11111111, %11111111 -IncGradGBPalTable_09: db %11111110, %11111110, %11111000 -IncGradGBPalTable_10: db %11111001, %11100100, %11100100 -IncGradGBPalTable_11: db %11100100, %11010000, %11100000 -IncGradGBPalTable_12: db %11100100, %11010000, %11100000 -IncGradGBPalTable_13: db %10010000, %10000000, %10010000 -IncGradGBPalTable_14: db %01000000, %01000000, %01000000 -IncGradGBPalTable_15: db %00000000, %00000000, %00000000 -; 547 - diff --git a/common/farcall.asm b/common/farcall.asm deleted file mode 100644 index bdee3bf38..000000000 --- a/common/farcall.asm +++ /dev/null @@ -1,55 +0,0 @@ -FarCall_de: ; 2d54 -; Call a:de. -; Preserves other registers. - - ld [hBuffer], a - ld a, [hROMBank] - push af - ld a, [hBuffer] - rst Bankswitch - call .de - jr ReturnFarCall - -.de - push de - ret -; 2d63 - - -FarCall_hl: ; 2d63 -; Call a:hl. -; Preserves other registers. - - ld [hBuffer], a - ld a, [hROMBank] - push af - ld a, [hBuffer] - rst Bankswitch - call Function2d82 -; 2d6e - -ReturnFarCall: ; 2d6e -; We want to retain the contents of f. -; To do this, we can pop to bc instead of af. - - ld a, b - ld [$cfb9], a - ld a, c - ld [$cfba], a - -; Restore the working bank. - pop bc - ld a, b - rst Bankswitch - - ld a, [$cfb9] - ld b, a - ld a, [$cfba] - ld c, a - ret -; 2d82 - -Function2d82: ; 2d82 - jp [hl] -; 2d83 - diff --git a/common/flag.asm b/common/flag.asm deleted file mode 100644 index e99248a3e..000000000 --- a/common/flag.asm +++ /dev/null @@ -1,113 +0,0 @@ -Function2e50: ; 2e50 - xor a - ld hl, EventFlags - ld [hli], a - ret -; 2e56 - -Function2e56: ; 2e56 - xor a - ld hl, BikeFlags - ld [hli], a - ld [hl], a - ret -; 2e5d - -Function2e5d: ; 2e5d - ld a, [$d19a] - cp $2 - jr z, .asm_2e69 - cp $1 - jr z, .asm_2e69 - ret - -.asm_2e69 - ld hl, StatusFlags - res 2, [hl] - ret -; 2e6f - - -EventFlagAction: ; 0x2e6f - ld hl, EventFlags - call FlagAction - ret - -FlagAction: ; 0x2e76 -; Perform action b on bit de in flag array hl. - -; inputs: -; b: function -; 0 clear bit -; 1 set bit -; 2 check bit -; de: bit number -; hl: index within bit table - - ; get index within the byte - ld a, e - and 7 - - ; shift de right by three bits (get the index within memory) - srl d - rr e - srl d - rr e - srl d - rr e - add hl, de - - ; implement a decoder - ld c, 1 - rrca - jr nc, .one - rlc c -.one - rrca - jr nc, .two - rlc c - rlc c -.two - rrca - jr nc, .three - swap c -.three - - ; check b's value: 0, 1, 2 - ld a, b - cp 1 - jr c, .clearbit ; 0 - jr z, .setbit ; 1 - - ; check bit - ld a, [hl] - and c - ld c, a - ret - -.setbit - ; set bit - ld a, [hl] - or c - ld [hl], a - ret - -.clearbit - ; clear bit - ld a, c - cpl - and [hl] - ld [hl], a - ret -; 0x2ead - - -Function2ead: ; 2ead - ld de, ENGINE_POKEDEX - ld b, CHECK_FLAG - callba EngineFlagAction - ld a, c - and a - ret -; 2ebb - diff --git a/common/game_time.asm b/common/game_time.asm deleted file mode 100644 index ee52488f4..000000000 --- a/common/game_time.asm +++ /dev/null @@ -1,132 +0,0 @@ -ResetGameTime: ; 208a - xor a - ld [GameTimeCap], a - ld [GameTimeHours], a - ld [GameTimeHours + 1], a - ld [GameTimeMinutes], a - ld [GameTimeSeconds], a - ld [GameTimeFrames], a - ret -; 209e - - -GameTimer: ; 209e - - nop - - ld a, [rSVBK] - push af - ld a, 1 - ld [rSVBK], a - - call UpdateGameTimer - - pop af - ld [rSVBK], a - ret -; 20ad - - -UpdateGameTimer: ; 20ad -; Increment the game timer by one frame. -; The game timer is capped at 999:59:59.00. - - -; Don't update if game logic is paused. - ld a, [$c2cd] - and a - ret nz - -; Is the timer paused? - ld hl, GameTimerPause - bit 0, [hl] - ret z - -; Is the timer already capped? - ld hl, GameTimeCap - bit 0, [hl] - ret nz - - -; +1 frame - ld hl, GameTimeFrames - ld a, [hl] - inc a - - cp 60 ; frames/second - jr nc, .second - - ld [hl], a - ret - - -.second - xor a - ld [hl], a - -; +1 second - ld hl, GameTimeSeconds - ld a, [hl] - inc a - - cp 60 ; seconds/minute - jr nc, .minute - - ld [hl], a - ret - - -.minute - xor a - ld [hl], a - -; +1 minute - ld hl, GameTimeMinutes - ld a, [hl] - inc a - - cp 60 ; minutes/hour - jr nc, .hour - - ld [hl], a - ret - - -.hour - xor a - ld [hl], a - -; +1 hour - ld a, [GameTimeHours] - ld h, a - ld a, [GameTimeHours + 1] - ld l, a - inc hl - - -; Cap the timer after 1000 hours. - ld a, h - cp 1000 / $100 - jr c, .ok - - ld a, l - cp 1000 % $100 - jr c, .ok - - ld hl, GameTimeCap - set 0, [hl] - - ld a, 59 ; 999:59:59.00 - ld [GameTimeMinutes], a - ld [GameTimeSeconds], a - ret - - -.ok - ld a, h - ld [GameTimeHours], a - ld a, l - ld [GameTimeHours + 1], a - ret -; 210f - diff --git a/common/handshake.asm b/common/handshake.asm deleted file mode 100644 index 8ed1473e4..000000000 --- a/common/handshake.asm +++ /dev/null @@ -1,38 +0,0 @@ -AskSerial: ; 2063 -; send out a handshake while serial int is off - ld a, [$c2d4] - bit 0, a - ret z - - ld a, [$c2d5] - and a - ret nz - -; once every 6 frames - ld hl, $ca8a - inc [hl] - ld a, [hl] - cp 6 - ret c - - xor a - ld [hl], a - - ld a, $c - ld [$c2d5], a - -; handshake - ld a, $88 - ld [rSB], a - -; switch to internal clock - ld a, %00000001 - ld [rSC], a - -; start transfer - ld a, %10000001 - ld [rSC], a - - ret -; 208a - diff --git a/common/init.asm b/common/init.asm deleted file mode 100644 index ead75975c..000000000 --- a/common/init.asm +++ /dev/null @@ -1,225 +0,0 @@ -Reset: ; 150 - di - call CleanSoundRestart - xor a - ld [$ffde], a - call ClearPalettes - xor a - ld [rIF], a - ld a, 1 ; VBlank int - ld [rIE], a - ei - - ld hl, $cfbe - set 7, [hl] - - ld c, 32 - call DelayFrames - - jr Init -; 16e - - -_Start: ; 16e - cp $11 - jr z, .asm_175 - xor a - jr .asm_177 - -.asm_175 - ld a, $1 - -.asm_177 - ld [hCGB], a - ld a, $1 - ld [$ffea], a -; 17d - - -Init: ; 17d - - di - - xor a - ld [rIF], a - ld [rIE], a - ld [rRP], a - ld [rSCX], a - ld [rSCY], a - ld [rSB], a - ld [rSC], a - ld [rWX], a - ld [rWY], a - ld [rBGP], a - ld [rOBP0], a - ld [rOBP1], a - ld [rTMA], a - ld [rTAC], a - ld [$d000], a - - ld a, %100 ; Start timer at 4096Hz - ld [rTAC], a - -.wait - ld a, [rLY] - cp 145 - jr nz, .wait - - xor a - ld [rLCDC], a - -; Clear WRAM bank 0 - ld hl, $c000 - ld bc, $d000 - $c000 -.asm_1b1 - ld [hl], 0 - inc hl - dec bc - ld a, b - or c - jr nz, .asm_1b1 - - ld sp, Stack - -; Clear HRAM - ld a, [hCGB] - push af - ld a, [$ffea] - push af - xor a - ld hl, $ff80 - ld bc, $ffff - $ff80 - call ByteFill - pop af - ld [$ffea], a - pop af - ld [hCGB], a - - call ClearWRAM - ld a, 1 - ld [rSVBK], a - call ClearVRAM - call ClearSprites - call Function270 - - - ld a, BANK(LoadPushOAM) - rst Bankswitch - - call LoadPushOAM - - xor a - ld [$ffde], a - ld [hSCX], a - ld [hSCY], a - ld [rJOYP], a - - ld a, $8 ; HBlank int enable - ld [rSTAT], a - - ld a, $90 - ld [hWY], a - ld [rWY], a - - ld a, 7 - ld [hWX], a - ld [rWX], a - - ld a, %11100011 - ; LCD on - ; Win tilemap 1 - ; Win on - ; BG/Win tiledata 0 - ; BG Tilemap 0 - ; OBJ 8x8 - ; OBJ on - ; BG on - ld [rLCDC], a - - ld a, $ff - ld [$ffcb], a - - callba Function9890 - - ld a, $9c - ld [$ffd7], a - - xor a - ld [hBGMapAddress], a - - callba StartClock - - xor a - ld [MBC3LatchClock], a - ld [MBC3SRamEnable], a - - ld a, [hCGB] - and a - jr z, .asm_22b - call NormalSpeed -.asm_22b - - xor a - ld [rIF], a - ld a, %1111 ; VBlank, LCDStat, Timer, Serial interrupts - ld [rIE], a - ei - - call DelayFrame - - ld a, $30 - call Predef - - call CleanSoundRestart - xor a - ld [CurMusic], a - jp GameInit -; 245 - - -ClearVRAM: ; 245 -; Wipe VRAM banks 0 and 1 - - ld a, 1 - ld [rVBK], a - call .clear - - xor a - ld [rVBK], a -.clear - ld hl, VTiles0 - ld bc, $2000 - xor a - call ByteFill - ret -; 25a - -ClearWRAM: ; 25a -; Wipe swappable WRAM banks (1-7) - - ld a, 1 -.asm_25c - push af - ld [rSVBK], a - xor a - ld hl, $d000 - ld bc, $1000 - call ByteFill - pop af - inc a - cp 8 - jr nc, .asm_25c - ret -; 270 - -Function270: ; 270 - ld a, $0 - call GetSRAMBank - ld hl, $a000 - ld bc, $0020 - xor a - call ByteFill - call CloseSRAM - ret -; 283 - diff --git a/common/item.asm b/common/item.asm deleted file mode 100644 index 0906a19f6..000000000 --- a/common/item.asm +++ /dev/null @@ -1,76 +0,0 @@ -DoItemEffect: ; 2f3f - callba _DoItemEffect - ret -; 2f46 - -CheckTossableItem: ; 2f46 - push hl - push de - push bc - callba _CheckTossableItem - pop bc - pop de - pop hl - ret -; 2f53 - -TossItem: ; 2f53 - push hl - push de - push bc - ld a, [hROMBank] - push af - ld a, BANK(_TossItem) - rst Bankswitch - - call _TossItem - - pop bc - ld a, b - rst Bankswitch - pop bc - pop de - pop hl - ret -; 2f66 - -ReceiveItem: ; 2f66 - push bc - ld a, [hROMBank] - push af - ld a, BANK(_ReceiveItem) - rst Bankswitch - push hl - push de - - call _ReceiveItem - - pop de - pop hl - pop bc - ld a, b - rst Bankswitch - pop bc - ret -; 2f79 - -CheckItem: ; 2f79 - push hl - push de - push bc - ld a, [hROMBank] - push af - ld a, BANK(_CheckItem) - rst Bankswitch - - call _CheckItem - - pop bc - ld a, b - rst Bankswitch - pop bc - pop de - pop hl - ret -; 2f8c - diff --git a/common/joypad.asm b/common/joypad.asm deleted file mode 100644 index 198e1c47b..000000000 --- a/common/joypad.asm +++ /dev/null @@ -1,491 +0,0 @@ -JoypadInt: ; 92e -; Replaced by Joypad, called from VBlank instead of the useless -; joypad interrupt. - -; This is a placeholder in case the interrupt is somehow enabled. - reti -; 92f - -ClearJoypadPublic: ; 92f - xor a -; Pressed this frame (delta) - ld [hJoyPressed], a -; Currently pressed - ld [hJoyDown], a - ret -; 935 - -Joypad: ; 935 -; Read the joypad register and translate it to something more -; workable for use in-game. There are 8 buttons, so we can use -; one byte to contain all player input. - -; Updates: - -; hJoypadReleased: released this frame (delta) -; hJoypadPressed: pressed this frame (delta) -; hJoypadDown: currently pressed -; hJoypadSum: pressed so far - -; Any of these three bits can be used to disable input. - ld a, [$cfbe] - and %11010000 - ret nz - -; If we're saving, input is disabled. - ld a, [$c2cd] - and a - ret nz - -; We can only get four inputs at a time. -; We take d-pad first for no particular reason. - ld a, D_PAD - ld [rJOYP], a -; Read twice to give the request time to take. - ld a, [rJOYP] - ld a, [rJOYP] - -; The Joypad register output is in the lo nybble (inversed). -; We make the hi nybble of our new container d-pad input. - cpl - and $f - swap a - -; We'll keep this in b for now. - ld b, a - -; Buttons make 8 total inputs (A, B, Select, Start). -; We can fit this into one byte. - ld a, BUTTONS - ld [rJOYP], a -; Wait for input to stabilize. - ld a, [rJOYP] - ld a, [rJOYP] - ld a, [rJOYP] - ld a, [rJOYP] - ld a, [rJOYP] - ld a, [rJOYP] -; Buttons take the lo nybble. - cpl - and $f - or b - ld b, a - -; Reset the joypad register since we're done with it. - ld a, $30 - ld [rJOYP], a - -; To get the delta we xor the last frame's input with the new one. - ld a, [hJoypadDown] ; last frame - ld e, a - xor b - ld d, a -; Released this frame: - and e - ld [hJoypadReleased], a -; Pressed this frame: - ld a, d - and b - ld [hJoypadPressed], a - -; Add any new presses to the list of collective presses: - ld c, a - ld a, [hJoypadSum] - or c - ld [hJoypadSum], a - -; Currently pressed: - ld a, b - ld [hJoypadDown], a - -; Now that we have the input, we can do stuff with it. - -; For example, soft reset: - and A_BUTTON | B_BUTTON | SELECT | START - cp A_BUTTON | B_BUTTON | SELECT | START - jp z, Reset - - ret -; 984 - - -GetJoypadPublic: ; 984 -; Update mirror joypad input from hJoypadDown (real input) - -; hJoyReleased: released this frame (delta) -; hJoyPressed: pressed this frame (delta) -; hJoyDown: currently pressed - -; bit 0 A -; 1 B -; 2 SELECT -; 3 START -; 4 RIGHT -; 5 LEFT -; 6 UP -; 7 DOWN - - push af - push hl - push de - push bc - -; The player input can be automated using an input stream. -; See more below. - ld a, [InputType] - cp a, AUTO_INPUT - jr z, .auto - -; To get deltas, take this and last frame's input. - ld a, [hJoypadDown] ; real input - ld b, a - ld a, [hJoyDown] ; last frame mirror - ld e, a - -; Released this frame: - xor b - ld d, a - and e - ld [hJoyReleased], a - -; Pressed this frame: - ld a, d - and b - ld [hJoyPressed], a - -; It looks like the collective presses got commented out here. - ld c, a - -; Currently pressed: - ld a, b - ld [hJoyDown], a ; frame input - -.quit - pop bc - pop de - pop hl - pop af - ret - -.auto -; Use a predetermined input stream (used in the catching tutorial). - -; Stream format: [input][duration] -; A value of $ff will immediately end the stream. - -; Read from the input stream. - ld a, [hROMBank] - push af - ld a, [AutoInputBank] - rst Bankswitch - - ld hl, AutoInputAddress - ld a, [hli] - ld h, [hl] - ld l, a - -; We only update when the input duration has expired. - ld a, [AutoInputLength] - and a - jr z, .updateauto - -; Until then, don't change anything. - dec a - ld [AutoInputLength], a - pop af - rst Bankswitch - jr .quit - - -.updateauto -; An input of $ff will end the stream. - ld a, [hli] - cp a, $ff - jr z, .stopauto - ld b, a - -; A duration of $ff will end the stream indefinitely. - ld a, [hli] - ld [AutoInputLength], a - cp a, $ff - jr nz, .next - -; The current input is overwritten. - dec hl - dec hl - ld b, NO_INPUT - jr .finishauto - -.next -; On to the next input... - ld a, l - ld [AutoInputAddress], a - ld a, h - ld [AutoInputAddress+1], a - jr .finishauto - -.stopauto - call StopAutoInput - ld b, NO_INPUT - -.finishauto - pop af - rst Bankswitch - ld a, b - ld [hJoyPressed], a ; pressed - ld [hJoyDown], a ; input - jr .quit -; 9ee - - -StartAutoInput: ; 9ee -; Start reading automated input stream at a:hl. - - ld [AutoInputBank], a - ld a, l - ld [AutoInputAddress], a - ld a, h - ld [AutoInputAddress+1], a -; Start reading the stream immediately. - xor a - ld [AutoInputLength], a -; Reset input mirrors. - xor a - ld [hJoyPressed], a ; pressed this frame - ld [hJoyReleased], a ; released this frame - ld [hJoyDown], a ; currently pressed - - ld a, AUTO_INPUT - ld [InputType], a - ret -; a0a - - -StopAutoInput: ; a0a -; Clear variables related to automated input. - xor a - ld [AutoInputBank], a - ld [AutoInputAddress], a - ld [AutoInputAddress+1], a - ld [AutoInputLength], a -; Back to normal input. - ld [InputType], a - ret -; a1b - - -Functiona1b: ; a1b - - call DelayFrame - - push bc - call Functiona57 - pop bc - - ld a, [hJoyDown] - cp D_UP | SELECT | B_BUTTON - jr z, .asm_a34 - - ld a, [$ffa9] - and START | A_BUTTON - jr nz, .asm_a34 - - dec c - jr nz, Functiona1b - - and a - ret - -.asm_a34 - scf - ret -; a36 - - -Functiona36: ; a36 - call DelayFrame - call GetJoypadPublic - ld a, [hJoyPressed] - and A_BUTTON | B_BUTTON - ret nz - call RTC - jr Functiona36 -; a46 - -Functiona46: ; a46 - ld a, [hOAMUpdate] - push af - ld a, 1 - ld [hOAMUpdate], a - call WaitBGMap - call Functiona36 - pop af - ld [hOAMUpdate], a - ret -; a57 - -Functiona57: ; a57 - call GetJoypadPublic - ld a, [$ffaa] - and a - ld a, [hJoyPressed] - jr z, .asm_a63 - ld a, [hJoyDown] -.asm_a63 - ld [$ffa9], a - ld a, [hJoyPressed] - and a - jr z, .asm_a70 - ld a, 15 - ld [TextDelayFrames], a - ret - -.asm_a70 - ld a, [TextDelayFrames] - and a - jr z, .asm_a7a - xor a - ld [$ffa9], a - ret - -.asm_a7a - ld a, 5 - ld [TextDelayFrames], a - ret -; a80 - -Functiona80: ; a80 - ld a, [$ffaf] - push af - ld a, [$ffb0] - push af - xor a - ld [$ffaf], a - ld a, $6 - ld [$ffb0], a -.asm_a8d - push hl - ld hl, $c606 - call Functionb06 - pop hl - call Functiona57 - ld a, [$ffa9] - and $3 - jr z, .asm_a8d - pop af - ld [$ffb0], a - pop af - ld [$ffaf], a - ret -; aa5 - -Functionaa5: ; aa5 - call Functiona57 - ld a, [$ffa9] - and A_BUTTON | B_BUTTON - jr z, Functionaa5 - ret -; aaf - -Functionaaf: ; aaf - ld a, [InLinkBattle] - and a - jr nz, .asm_ac1 - call Functionac6 - push de - ld de, SFX_READ_TEXT_2 - call StartSFX - pop de - ret - -.asm_ac1 - ld c, 65 - jp DelayFrames -; ac6 - -Functionac6: ; ac6 - ld a, [hOAMUpdate] - push af - ld a, $1 - ld [hOAMUpdate], a - ld a, [InputType] - or a - jr z, .asm_ad9 - callba Function1de28a -.asm_ad9 - call Functionaf5 - call Functiona57 - ld a, [hJoyPressed] - and $3 - jr nz, .asm_af1 - call RTC - ld a, $1 - ld [hBGMapMode], a - call DelayFrame - jr .asm_ad9 - -.asm_af1 - pop af - ld [hOAMUpdate], a - ret -; af5 - -Functionaf5: ; af5 - ld a, [$ff9b] - and $10 - jr z, .asm_aff - ld a, $ee - jr .asm_b02 - -.asm_aff - ld a, [$c605] - -.asm_b02 - ld [$c606], a - ret -; b06 - -Functionb06: ; b06 - push bc - ld a, [hl] - ld b, a - ld a, $ee - cp b - pop bc - jr nz, .asm_b27 - ld a, [$ffaf] - dec a - ld [$ffaf], a - ret nz - ld a, [$ffb0] - dec a - ld [$ffb0], a - ret nz - ld a, $7a - ld [hl], a - ld a, $ff - ld [$ffaf], a - ld a, $6 - ld [$ffb0], a - ret - -.asm_b27 - ld a, [$ffaf] - and a - ret z - dec a - ld [$ffaf], a - ret nz - dec a - ld [$ffaf], a - ld a, [$ffb0] - dec a - ld [$ffb0], a - ret nz - ld a, $6 - ld [$ffb0], a - ld a, $ee - ld [hl], a - ret -; b40 - diff --git a/common/lcd.asm b/common/lcd.asm deleted file mode 100644 index 9c86eaa5c..000000000 --- a/common/lcd.asm +++ /dev/null @@ -1,81 +0,0 @@ -; LCD handling - - -Function547: ; 547 - ld a, [hLCDStatCustom] - cp rSCX & $ff - ret nz - ld c, a - ld a, [LYOverrides] - ld [$ff00+c], a - ret -; 552 - - -LCD: ; 552 - push af - ld a, [hLCDStatCustom] - and a - jr z, .done - -; At this point it's assumed we're in WRAM bank 5! - push bc - ld a, [rLY] - ld c, a - ld b, LYOverrides >> 8 - ld a, [bc] - ld b, a - ld a, [hLCDStatCustom] - ld c, a - ld a, b - ld [$ff00+c], a - pop bc - -.done - pop af - reti -; 568 - - -DisableLCD: ; 568 -; Turn the LCD off - -; Don't need to do anything if the LCD is already off - ld a, [rLCDC] - bit 7, a ; lcd enable - ret z - - xor a - ld [rIF], a - ld a, [rIE] - ld b, a - -; Disable VBlank - res 0, a ; vblank - ld [rIE], a - -.wait -; Wait until VBlank would normally happen - ld a, [rLY] - cp 145 - jr nz, .wait - - ld a, [rLCDC] - and %01111111 ; lcd enable off - ld [rLCDC], a - - xor a - ld [rIF], a - ld a, b - ld [rIE], a - ret -; 58a - - -EnableLCD: ; 58a - ld a, [rLCDC] - set 7, a ; lcd enable - ld [rLCDC], a - ret -; 591 - diff --git a/common/map.asm b/common/map.asm deleted file mode 100644 index d4cfe1be9..000000000 --- a/common/map.asm +++ /dev/null @@ -1,2369 +0,0 @@ -; Functions dealing with rendering and interacting with maps. - -Function210f: ; 210f - ld hl, $c7e8 - ld bc, $0018 - ld a, $0 - call ByteFill - ret -; 211b - -Function211b: ; 211b - push hl - ld hl, $dbf7 - ld a, [hli] - ld h, [hl] - ld l, a - or h - ld a, [hl] - jr nz, .asm_2128 - ld a, $ff - -.asm_2128 - pop hl - ret -; 212a - -Function212a: ; 212a - ld a, [MapGroup] - ld b, a - ld a, [MapNumber] - ld c, a - xor a - ld [$dbf7], a - ld [$dbf8], a - call Function2147 - ret c - ld a, e - ld [$dbf7], a - ld a, d - ld [$dbf8], a - xor a - ret -; 2147 - -Function2147: ; 2147 - push bc - ld a, [hROMBank] - push af - ld a, $13 - rst Bankswitch - - ld hl, $501e -.asm_2151 - push hl - ld a, [hli] - cp $ff - jr z, .asm_2167 - cp b - jr nz, .asm_2160 - ld a, [hli] - cp c - jr nz, .asm_2160 - jr .asm_216a - -.asm_2160 - pop hl - ld de, $0004 - add hl, de - jr .asm_2151 - -.asm_2167 - scf - jr .asm_216d - -.asm_216a - ld e, [hl] - inc hl - ld d, [hl] - -.asm_216d - pop hl - pop bc - ld a, b - rst Bankswitch - - pop bc - ret -; 2173 - -Function2173: ; 2173 - call Function217a - call Functiondb1 - ret -; 217a - -Function217a: ; 217a - ld a, [hROMBank] - push af - ld a, [TilesetBlocksBank] - rst Bankswitch - - call Function2198 - ld a, $60 - ld hl, TileMap - ld bc, $0168 - call ByteFill - ld a, $13 - rst Bankswitch - - call $515b - pop af - rst Bankswitch - - ret -; 2198 - -Function2198: ; 2198 - ld a, [$d194] - ld e, a - ld a, [$d195] - ld d, a - ld hl, EnemyMoveAnimation - ld b, $5 - -.asm_21a5 - push de - push hl - ld c, $6 - -.asm_21a9 - push de - push hl - ld a, [de] - and a - jr nz, .asm_21b2 - ld a, [$d19d] - -.asm_21b2 - ld e, l - ld d, h - add a - ld l, a - ld h, $0 - add hl, hl - add hl, hl - add hl, hl - ld a, [TilesetBlocksAddress] - add l - ld l, a - ld a, [TilesetBlocksAddress + 1] - adc h - ld h, a - -rept 3 - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - - ld a, e - add 20 - ld e, a - jr nc, .next\@ - inc d -.next\@ -endr - - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - - pop hl - ld de, $0004 - add hl, de - pop de - inc de - dec c - jp nz, .asm_21a9 - pop hl - ld de, $0060 - add hl, de - pop de - ld a, [$d19f] - add $6 - add e - ld e, a - jr nc, .asm_2225 - inc d - -.asm_2225 - dec b - jp nz, .asm_21a5 - ret -; 222a - -Function222a: ; 222a - ld a, $fa - ld [$ff9f], a - callba Function15363 - xor a - ld [$ff9f], a - ret -; 2238 - -Function2238: ; 2238 - call Function2252 - ret nc - push bc - callba Function149af - pop bc - ret nc - call Function22a7 - scf - ret -; 224a - - - -Function224a: ; 224a - call Function2252 - ret nc - call Function22a7 - ret -; 2252 - -Function2252: ; 2252 - callba Function1499a - ret nc - - ld a, [hROMBank] - push af - - call Function2c52 - call Function2266 - - pop de - ld a, d - rst Bankswitch - ret -; 2266 - -Function2266: ; 2266 - ld a, [MapY] - sub $4 - ld e, a - ld a, [MapX] - sub $4 - ld d, a - ld a, [$dbfb] - and a - ret z - ld c, a - ld hl, $dbfc - ld a, [hli] - ld h, [hl] - ld l, a -.asm_227e - push hl - ld a, [hli] - cp e - jr nz, .asm_2289 - ld a, [hli] - cp d - jr nz, .asm_2289 - jr .asm_2296 - -.asm_2289 - pop hl - ld a, $5 - add l - ld l, a - jr nc, .asm_2291 - inc h - -.asm_2291 - dec c - jr nz, .asm_227e - xor a - ret - -.asm_2296 - pop hl - call Function22a3 - ret nc - ld a, [$dbfb] - inc a - sub c - ld c, a - scf - ret -; 22a3 - -Function22a3: ; 22a3 - inc hl - inc hl - scf - ret -; 22a7 - -Function22a7: ; 22a7 - ld a, [hROMBank] - push af - - call Function2c52 - call Function22b4 - - pop af - rst Bankswitch - scf - ret -; 22b4 - -Function22b4: ; 22b4 - push bc - ld hl, $dbfc - ld a, [hli] - ld h, [hl] - ld l, a - ld a, c - dec a - ld bc, $0005 - call AddNTimes - ld bc, $0002 - add hl, bc - ld a, [hli] - cp $ff - jr nz, .asm_22d0 - ld hl, $dcac - ld a, [hli] - -.asm_22d0 - pop bc - ld [$d146], a - ld a, [hli] - ld [$d147], a - ld a, [hli] - ld [$d148], a - ld a, c - ld [$d149], a - ld a, [MapGroup] - ld [$d14a], a - ld a, [MapNumber] - ld [$d14b], a - scf - ret -; 22ee - - - -CheckOutdoorMap: ; 22ee - cp ROUTE - ret z - cp TOWN - ret -; 22f4 - -CheckIndoorMap: ; 22f4 - cp INDOOR - ret z - cp CAVE - ret z - cp DUNGEON - ret z - cp GATE - ret -; 2300 - -Function2300: ; 2300 - cp INDOOR - ret z - cp GATE - ret z - cp $5 - ret -; 2309 - - -Function2309: ; 2309 - call Function2326 - call Function2c52 - call Function234f - xor a - call Function2336 - ret -; 2317 - -Function2317: ; 2317 - call Function2326 - call Function2c52 - call Function234f - ld a, $1 - call Function2336 - ret -; 2326 - -Function2326: ; 2326 - call Function2c3d - call Function2c1c - call GetSecondaryMapHeaderPointer - call Function235c - call Function2368 - ret -; 2336 - -Function2336: ; 2336 - push af - ld hl, $d1a6 - ld a, [hli] - ld h, [hl] - ld l, a - inc hl - inc hl - call Function23da - call Function23f1 - call Function2408 - pop af - and a - ret nz - call Function241f - ret -; 234f - -Function234f: ; 234f - ld hl, $d1a4 - ld a, [hli] - ld h, [hl] - ld l, a - call Function23ac - call Function23c3 - ret -; 235c - -Function235c: ; 235c - ld de, $d19d - ld c, $c -.asm_2361 - ld a, [hli] - ld [de], a - inc de - dec c - jr nz, .asm_2361 - ret -; 2368 - -Function2368: ; 2368 - ld a, $ff - ld [NorthConnectedMapGroup], a - ld [SouthConnectedMapGroup], a - ld [WestConnectedMapGroup], a - ld [EastConnectedMapGroup], a - - ld a, [$d1a8] - ld b, a - - bit 3, b - jr z, .asm_2384 - ld de, NorthMapConnection - call GetMapConnection - -.asm_2384 - bit 2, b - jr z, .asm_238e - ld de, SouthMapConnection - call GetMapConnection - -.asm_238e - bit 1, b - jr z, .asm_2398 - ld de, WestMapConnection - call GetMapConnection - -.asm_2398 - bit 0, b - jr z, .asm_23a2 - ld de, EastMapConnection - call GetMapConnection - -.asm_23a2 - ret -; 23a3 - - -GetMapConnection: ; 23a3 -; Load map connection struct at hl into de. - ld c, SouthMapConnection - NorthMapConnection -.loop - ld a, [hli] - ld [de], a - inc de - dec c - jr nz, .loop - ret -; 23ac - - -Function23ac: ; 23ac - ld a, [hli] - ld c, a - ld [$dc07], a - ld a, l - ld [$dc08], a - ld a, h - ld [$dc09], a - ld a, c - and a - ret z - ld bc, $0004 - call AddNTimes - ret -; 23c3 - -Function23c3: ; 23c3 - ld a, [hli] - ld c, a - ld [$dc0a], a - ld a, l - ld [$dc0b], a - ld a, h - ld [$dc0c], a - ld a, c - and a - ret z - ld bc, $0003 - call AddNTimes - ret -; 23da - -Function23da: ; 23da - ld a, [hli] - ld c, a - ld [$dbfb], a - ld a, l - ld [$dbfc], a - ld a, h - ld [$dbfd], a - ld a, c - and a - ret z - ld bc, $0005 - call AddNTimes - ret -; 23f1 - -Function23f1: ; 23f1 - ld a, [hli] - ld c, a - ld [$dbfe], a - ld a, l - ld [$dbff], a - ld a, h - ld [$dc00], a - ld a, c - and a - ret z - ld bc, $0008 - call AddNTimes - ret -; 2408 - -Function2408: ; 2408 - ld a, [hli] - ld c, a - ld [$dc01], a - ld a, l - ld [$dc02], a - ld a, h - ld [$dc03], a - ld a, c - and a - ret z - ld bc, $0005 - call AddNTimes - ret -; 241f - -Function241f: ; 241f - push hl - call Function2471 - pop de - ld hl, $d72e - ld a, [de] - inc de - ld [$dc04], a - ld a, e - ld [$dc05], a - ld a, d - ld [$dc06], a - ld a, [$dc04] - call Function2457 - ld a, [$dc04] - ld c, a - ld a, $10 - sub c - jr z, .asm_2454 - ld bc, $0001 - add hl, bc - ld bc, $0010 -.asm_244a - ld [hl], $0 - inc hl - ld [hl], $ff - dec hl - add hl, bc - dec a - jr nz, .asm_244a - -.asm_2454 - ld h, d - ld l, e - ret -; 2457 - -Function2457: ; 2457 - and a - ret z - ld c, a -.asm_245a - push bc - push hl - ld a, $ff - ld [hli], a - ld b, $d -.asm_2461 - ld a, [de] - inc de - ld [hli], a - dec b - jr nz, .asm_2461 - pop hl - ld bc, $0010 - add hl, bc - pop bc - dec c - jr nz, .asm_245a - ret -; 2471 - -Function2471: ; 2471 - ld hl, $d4fe - ld bc, $01e0 - xor a - call ByteFill - ld hl, $d4fe - ld de, $0028 - ld c, $c - xor a -.asm_2484 - ld [hl], a - add hl, de - dec c - jr nz, .asm_2484 - ret -; 248a - -Function248a: ; 248a - call GetMapEventBank - rst Bankswitch - - ld hl, $d1a6 - ld a, [hli] - ld h, [hl] - ld l, a - inc hl - inc hl - inc hl - ld a, [WarpNumber] - dec a - ld c, a - ld b, $0 - ld a, $5 - call AddNTimes - ld a, [hli] - ld [YCoord], a - ld a, [hli] - ld [XCoord], a - ld a, [hli] - cp $ff - jr nz, .asm_24b3 - call Function24ba - -.asm_24b3 - ld a, $41 - ld hl, $486d - rst FarCall - ret -; 24ba - -Function24ba: ; 24ba - ld a, [$d149] - ld [$dcac], a - ld a, [$d14a] - ld [BackupMapGroup], a - ld a, [$d14b] - ld [BackupMapNumber], a - ret -; 24cd - -Function24cd: ; 24cd - ld hl, OverworldMap - ld bc, $0514 - ld a, $0 - call ByteFill - call Function24e4 - call FillMapConnections - ld a, $1 - call Function263b - ret -; 24e4 - - - -Function24e4: ; 24e4 - ld a, [hROMBank] - push af - ld hl, OverworldMap - ld a, [$d19f] - ld [hConnectedMapWidth], a - add $6 - ld [hConnectionStripLength], a - ld c, a - ld b, $0 - add hl, bc - add hl, bc - add hl, bc - ld c, $3 - add hl, bc - ld a, [$d1a0] - rst Bankswitch - - ld a, [$d1a1] - ld e, a - ld a, [$d1a2] - ld d, a - ld a, [$d19e] - ld b, a -.asm_250c - push hl - ld a, [hConnectedMapWidth] - ld c, a -.asm_2510 - ld a, [de] - inc de - ld [hli], a - dec c - jr nz, .asm_2510 - pop hl - ld a, [hConnectionStripLength] - add l - ld l, a - jr nc, .asm_251e - inc h - -.asm_251e - dec b - jr nz, .asm_250c - pop af - rst Bankswitch - - ret -; 2524 - - - -FillMapConnections: ; 2524 - -; North - ld a, [NorthConnectedMapGroup] - cp $ff - jr z, .South - ld b, a - ld a, [NorthConnectedMapNumber] - ld c, a - call GetAnyMapBlockdataBank - - ld a, [NorthConnectionStripPointer] - ld l, a - ld a, [NorthConnectionStripPointer + 1] - ld h, a - ld a, [NorthConnectionStripLocation] - ld e, a - ld a, [NorthConnectionStripLocation + 1] - ld d, a - ld a, [NorthConnectionStripLength] - ld [hConnectionStripLength], a - ld a, [NorthConnectedMapWidth] - ld [hConnectedMapWidth], a - call FillNorthConnectionStrip - -.South - ld a, [SouthConnectedMapGroup] - cp $ff - jr z, .West - ld b, a - ld a, [SouthConnectedMapNumber] - ld c, a - call GetAnyMapBlockdataBank - - ld a, [SouthConnectionStripPointer] - ld l, a - ld a, [SouthConnectionStripPointer + 1] - ld h, a - ld a, [SouthConnectionStripLocation] - ld e, a - ld a, [SouthConnectionStripLocation + 1] - ld d, a - ld a, [SouthConnectionStripLength] - ld [hConnectionStripLength], a - ld a, [SouthConnectedMapWidth] - ld [hConnectedMapWidth], a - call FillSouthConnectionStrip - -.West - ld a, [WestConnectedMapGroup] - cp $ff - jr z, .East - ld b, a - ld a, [WestConnectedMapNumber] - ld c, a - call GetAnyMapBlockdataBank - - ld a, [WestConnectionStripPointer] - ld l, a - ld a, [WestConnectionStripPointer + 1] - ld h, a - ld a, [WestConnectionStripLocation] - ld e, a - ld a, [WestConnectionStripLocation + 1] - ld d, a - ld a, [WestConnectionStripLength] - ld b, a - ld a, [WestConnectedMapWidth] - ld [hConnectionStripLength], a - call FillWestConnectionStrip - -.East - ld a, [EastConnectedMapGroup] - cp $ff - jr z, .Done - ld b, a - ld a, [EastConnectedMapNumber] - ld c, a - call GetAnyMapBlockdataBank - - ld a, [EastConnectionStripPointer] - ld l, a - ld a, [EastConnectionStripPointer + 1] - ld h, a - ld a, [EastConnectionStripLocation] - ld e, a - ld a, [EastConnectionStripLocation + 1] - ld d, a - ld a, [EastConnectionStripLength] - ld b, a - ld a, [EastConnectedMapWidth] - ld [hConnectionStripLength], a - call FillEastConnectionStrip - -.Done - ret -; 25d3 - - -FillNorthConnectionStrip: -FillSouthConnectionStrip: ; 25d3 - - ld c, 3 -.y - push de - - push hl - ld a, [hConnectionStripLength] - ld b, a -.x - ld a, [hli] - ld [de], a - inc de - dec b - jr nz, .x - pop hl - - ld a, [hConnectedMapWidth] - ld e, a - ld d, 0 - add hl, de - pop de - - ld a, [$d19f] - add 6 - add e - ld e, a - jr nc, .asm_25f2 - inc d -.asm_25f2 - dec c - jr nz, .y - ret -; 25f6 - - -FillWestConnectionStrip: -FillEastConnectionStrip: ; 25f6 - -.asm_25f6 - ld a, [$d19f] - add 6 - ld [hConnectedMapWidth], a - - push de - - push hl - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - pop hl - - ld a, [hConnectionStripLength] - ld e, a - ld d, 0 - add hl, de - pop de - - ld a, [hConnectedMapWidth] - add e - ld e, a - jr nc, .asm_2617 - inc d -.asm_2617 - dec b - jr nz, .asm_25f6 - ret -; 261b - -Function261b: ; 261b - ld [$d432], a - ret -; 261f - - -CallScript: ; 261f -; Call a script at a:hl. - - ld [ScriptBank], a - ld a, l - ld [ScriptPos], a - ld a, h - ld [ScriptPos + 1], a - - ld a, $ff - ld [ScriptRunning], a - - scf - ret -; 2631 - -Function2631: ; 2631 - ld a, [ScriptRunning] - and a - ret nz - call GetMapEventBank - jr CallScript -; 263b - -Function263b: ; 263b - ld b, a - ld a, [hROMBank] - push af - call Function2c52 - call Function2653 - jr nc, .done - - call GetMapEventBank - ld b, a - ld d, h - ld e, l - call Function2674 - -.done - pop af - rst Bankswitch - ret -; 2653 - -Function2653: ; 2653 - ld a, [$dc0a] - ld c, a - and a - ret z - ld hl, $dc0b - ld a, [hli] - ld h, [hl] - ld l, a - or h - ret z - ld de, $0003 -.asm_2664 - ld a, [hl] - cp b - jr z, .asm_266e - add hl, de - dec c - jr nz, .asm_2664 - xor a - ret - -.asm_266e - inc hl - ld a, [hli] - ld h, [hl] - ld l, a - scf - ret -; 2674 - -Function2674: ; 2674 - callba Unknown_0x974f3 - ld a, [ScriptMode] - push af - ld hl, ScriptFlags - ld a, [hl] - push af - set 1, [hl] - callba Function96c56 - callba ScriptEvents - pop af - ld [ScriptFlags], a - pop af - ld [ScriptMode], a - ret -; 269a - -Function269a: ; 269a - ld a, [hROMBank] - push af - ld a, b - rst Bankswitch - - push hl - call SpeechTextBox - call Function2e31 - ld a, 1 - ld [hOAMUpdate], a - call Function321c - pop hl - call PrintTextBoxText - xor a - ld [hOAMUpdate], a - pop af - rst Bankswitch - - ret -; 26b7 - -Function26b7: ; 26b7 -; Call a:de. - - ld [hBuffer], a - ld a, [hROMBank] - push af - ld a, [hBuffer] - rst Bankswitch - - call .de - - pop af - rst Bankswitch - ret - -.de - push de - ret -; 26c7 - -Function26c7: ; 26c7 - ld a, [hROMBank] - push af - ld a, b - rst Bankswitch - - ld a, c - call Function19e9 - - pop hl - ld a, h - rst Bankswitch - ret -; 26d4 - - -GetScriptByte: ; 0x26d4 -; Return byte at ScriptBank:ScriptPos in a. - - push hl - push bc - ld a, [hROMBank] - push af - ld a, [ScriptBank] - rst Bankswitch - - ld hl, ScriptPos - ld c, [hl] - inc hl - ld b, [hl] - - ld a, [bc] - - inc bc - ld [hl], b - dec hl - ld [hl], c - - ld b, a - pop af - rst Bankswitch - ld a, b - pop bc - pop hl - ret -; 0x26ef - - -ObjectEvent: ; 0x26ef - jumptextfaceplayer ObjectEventText -; 0x26f2 - -ObjectEventText: - TX_FAR _ObjectEventText - db "@" -; 0x26f7 - - -BGEvent: ; 26f7 - jumptext BGEventText -; 26fa - -BGEventText: ; 26fa - text_jump UnknownText_0x1c46fc, BANK(UnknownText_0x1c46fc) - db "@" -; 26ff - - -CoordinatesEvent: ; 26ff - jumptext CoordinatesEventText -; 2702 - -CoordinatesEventText: ; 2702 - text_jump UnknownText_0x1c4706, BANK(UnknownText_0x1c4706) - db "@" -; 2707 - - -Function2707: ; 2707 - ld a, [hConnectionStripLength] - ld e, a - ld d, $0 - ld hl, $d81e - add hl, de - ld a, [hl] - ret -; 2712 - -Function2712: ; 2712 - ld a, [hConnectionStripLength] - ld e, a - ld d, $0 - ld hl, $d81e - add hl, de - ld [hl], $ff - ret -; 271e - -Function271e: ; 271e - ld a, [hConnectionStripLength] - ld e, a - ld d, $0 - ld hl, $d81e - add hl, de - ld [hl], $0 - ret -; 272a - - -Function272a: ; 272a - ld hl, TileMap - ld de, BGMapBuffer - call Function27b7 - ld c, $28 - call Functiondbd - ld a, [$d152] - ld e, a - ld a, [$d153] - ld d, a - call Function27d3 - ld a, $1 - ld [hBGMapUpdate], a - ret -; 2748 - -Function2748: ; 2748 - ld hl, $c5e0 - ld de, BGMapBuffer - call Function27b7 - ld c, $28 - call Functiondbd - ld a, [$d152] - ld l, a - ld a, [$d153] - ld h, a - ld bc, $0200 - add hl, bc - ld a, h - and $3 - or $98 - ld e, l - ld d, a - call Function27d3 - ld a, $1 - ld [hBGMapUpdate], a - ret -; 2771 - -Function2771: ; 2771 - ld hl, TileMap - ld de, BGMapBuffer - call Function27c0 - ld c, $24 - call Functiondbd - ld a, [$d152] - ld e, a - ld a, [$d153] - ld d, a - call Function27f8 - ld a, $1 - ld [hBGMapUpdate], a - ret -; 278f - -Function278f: ; 278f - ld hl, $c4b2 - ld de, BGMapBuffer - call Function27c0 - ld c, $24 - call Functiondbd - ld a, [$d152] - ld e, a - and $e0 - ld b, a - ld a, e - add $12 - and $1f - or b - ld e, a - ld a, [$d153] - ld d, a - call Function27f8 - ld a, $1 - ld [hBGMapUpdate], a - ret -; 27b7 - -Function27b7: ; 27b7 - ld c, $28 -.asm_27b9 - ld a, [hli] - ld [de], a - inc de - dec c - jr nz, .asm_27b9 - ret -; 27c0 - -Function27c0: ; 27c0 - ld c, $12 -.asm_27c2 - ld a, [hli] - ld [de], a - inc de - ld a, [hl] - ld [de], a - inc de - ld a, $13 - add l - ld l, a - jr nc, .asm_27cf - inc h - -.asm_27cf - dec c - jr nz, .asm_27c2 - ret -; 27d3 - -Function27d3: ; 27d3 - ld hl, BGMapBufferPtrs - push de - call .asm_27df - pop de - ld a, $20 - add e - ld e, a - -.asm_27df - ld c, $a -.asm_27e1 - ld a, e - ld [hli], a - ld a, d - ld [hli], a - ld a, e - inc a - inc a - and $1f - ld b, a - ld a, e - and $e0 - or b - ld e, a - dec c - jr nz, .asm_27e1 - ld a, $14 - ld [$ffdc], a - ret -; 27f8 - -Function27f8: ; 27f8 - ld hl, BGMapBufferPtrs - ld c, $12 -.asm_27fd - ld a, e - ld [hli], a - ld a, d - ld [hli], a - ld a, $20 - add e - ld e, a - jr nc, .asm_280e - inc d - ld a, d - and $3 - or $98 - ld d, a - -.asm_280e - dec c - jr nz, .asm_27fd - ld a, $12 - ld [$ffdc], a - ret -; 2816 - -Function2816: ; 2816 - ld hl, BGMapBuffer - ld bc, $0078 - xor a - call ByteFill - ret -; 2821 - -Function2821: ; 2821 - ld hl, TilesetAddress - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [TilesetBank] - ld e, a - ld a, [rSVBK] - push af - ld a, $6 - ld [rSVBK], a - ld a, e - ld de, $d000 - call FarDecompress - ld hl, $d000 - ld de, VTiles2 - ld bc, $0600 - call CopyBytes - ld a, [rVBK] - push af - ld a, $1 - ld [rVBK], a - ld hl, $d600 - ld de, VTiles2 - ld bc, $0600 - call CopyBytes - pop af - ld [rVBK], a - pop af - ld [rSVBK], a - ld a, [$d199] - cp $1 - jr z, .asm_286f - cp $2 - jr z, .asm_286f - cp $4 - jr z, .asm_286f - jr .asm_2875 - -.asm_286f - ld a, $7 - ld hl, $4000 - rst FarCall - -.asm_2875 - xor a - ld [hTileAnimFrame], a - ret -; 2879 - -Function2879: ; 2879 - ld hl, $d194 - ld a, [hli] - ld h, [hl] - ld l, a - ld de, $dcb9 - ld c, $5 - ld b, $6 -.asm_2886 - push bc - push hl -.asm_2888 - ld a, [hli] - ld [de], a - inc de - dec b - jr nz, .asm_2888 - pop hl - ld a, [$d19f] - add $6 - ld c, a - ld b, $0 - add hl, bc - pop bc - dec c - jr nz, .asm_2886 - ret -; 289d - -Function289d: ; 289d - ld hl, $d194 - ld a, [hli] - ld h, [hl] - ld l, a - ld de, $dcb9 - ld a, [$d19f] - add $6 - ld [hConnectionStripLength], a - ld a, [$d151] - and a - jr z, .asm_28cb - cp $1 - jr z, .asm_28c0 - cp $2 - jr z, .asm_28d4 - cp $3 - jr z, .asm_28da - ret - -.asm_28c0 - ld de, $dcbf - ld a, [hConnectionStripLength] - ld c, a - ld b, $0 - add hl, bc - jr .asm_28ce - -.asm_28cb - ld de, $dcb9 - -.asm_28ce - ld b, $6 - ld c, $4 - jr .asm_28f7 - -.asm_28d4 - ld de, $dcba - inc hl - jr .asm_28dd - -.asm_28da - ld de, $dcb9 - -.asm_28dd - ld b, $5 - ld c, $5 - jr .asm_28f7 - - ld hl, $d194 - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [$d19f] - add $6 - ld [hConnectionStripLength], a - ld de, $dcb9 - ld b, $6 - ld c, $5 - -.asm_28f7 - push bc - push hl - push de -.asm_28fa - ld a, [de] - inc de - ld [hli], a - dec b - jr nz, .asm_28fa - pop de - ld a, e - add $6 - ld e, a - jr nc, .asm_2908 - inc d - -.asm_2908 - pop hl - ld a, [hConnectionStripLength] - ld c, a - ld b, $0 - add hl, bc - pop bc - dec c - jr nz, .asm_28f7 - ret -; 2914 - -Function2914: ; 2914 - xor a - ld [TilePermissions], a - call Function296c - call Function294d - ld a, [MapX] - ld d, a - ld a, [MapY] - ld e, a - call Function2a3c - ld [StandingTile], a - call Function29ff - ret nz - ld a, [StandingTile] - and 7 - ld hl, .data_2945 - add l - ld l, a - ld a, 0 - adc h - ld h, a - ld a, [hl] - ld hl, TilePermissions - or [hl] - ld [hl], a - ret -; 2945 - -.data_2945 ; 2945 - db 1, 2, 4, 8, 9, 10, 5, 6 -; 294d - -Function294d: ; 294d - ld a, [MapX] - ld d, a - ld a, [MapY] - ld e, a - push de - inc e - call Function2a3c - ld [TileDown], a - call Function298b - pop de - dec e - call Function2a3c - ld [TileUp], a - call Function29a8 - ret -; 296c - -Function296c: ; 296c - ld a, [MapX] - ld d, a - ld a, [MapY] - ld e, a - push de - dec d - call Function2a3c - ld [TileLeft], a - call Function29e2 - pop de - inc d - call Function2a3c - ld [TileRight], a - call Function29c5 - ret -; 298b - -Function298b: ; 298b - call Function29ff - ret nz - ld a, [TileDown] - and $7 - cp $2 - jr z, .asm_299f - cp $6 - jr z, .asm_299f - cp $7 - ret nz - -.asm_299f - ld a, [TilePermissions] - or $8 - ld [TilePermissions], a - ret -; 29a8 - -Function29a8: ; 29a8 - call Function29ff - ret nz - ld a, [TileUp] - and $7 - cp $3 - jr z, .asm_29bc - cp $4 - jr z, .asm_29bc - cp $5 - ret nz - -.asm_29bc - ld a, [TilePermissions] - or $4 - ld [TilePermissions], a - ret -; 29c5 - -Function29c5: ; 29c5 - call Function29ff - ret nz - ld a, [TileRight] - and $7 - cp $1 - jr z, .asm_29d9 - cp $5 - jr z, .asm_29d9 - cp $7 - ret nz - -.asm_29d9 - ld a, [TilePermissions] - or $1 - ld [TilePermissions], a - ret -; 29e2 - -Function29e2: ; 29e2 - call Function29ff - ret nz - ld a, [TileLeft] - and $7 - cp $0 - jr z, .asm_29f6 - cp $4 - jr z, .asm_29f6 - cp $6 - ret nz - -.asm_29f6 - ld a, [TilePermissions] - or $2 - ld [TilePermissions], a - ret -; 29ff - -Function29ff: ; 29ff - and $f0 - cp $b0 - ret z - cp $c0 - ret -; 2a07 - - -GetFacingTileCoord: ; 2a07 -; Return map coordinates in (d, e) and tile id in a -; of the tile the player is facing. - - ld a, [PlayerDirection] - and %1100 - srl a - srl a - ld l, a - ld h, 0 - add hl, hl - add hl, hl - ld de, .Directions - add hl, de - - ld d, [hl] - inc hl - ld e, [hl] - inc hl - - ld a, [hli] - ld h, [hl] - ld l, a - - ld a, [MapX] - add d - ld d, a - ld a, [MapY] - add e - ld e, a - ld a, [hl] - ret - -.Directions - ; x, y - db 0, 1 - dw TileDown - db 0, -1 - dw TileUp - db -1, 0 - dw TileLeft - db 1, 0 - dw TileRight -; 2a3c - - -Function2a3c: ; 2a3c - call Function2a66 - ld a, [hl] - and a - jr z, .asm_2a63 - ld l, a - ld h, $0 - add hl, hl - add hl, hl - ld a, [TilesetCollisionAddress] - ld c, a - ld a, [$d1e1] - ld b, a - add hl, bc - rr d - jr nc, .asm_2a56 - inc hl - -.asm_2a56 - rr e - jr nc, .asm_2a5c - inc hl - inc hl - -.asm_2a5c - ld a, [TilesetCollisionBank] - call GetFarByte - ret - -.asm_2a63 - ld a, $ff - ret -; 2a66 - -Function2a66: ; 2a66 - ld a, [$d19f] - add $6 - ld c, a - ld b, $0 - ld hl, $c801 - add hl, bc - ld a, e - srl a - jr z, .asm_2a84 - and a -.asm_2a78 - srl a - jr nc, .asm_2a7d - add hl, bc - -.asm_2a7d - sla c - rl b - and a - jr nz, .asm_2a78 - -.asm_2a84 - ld c, d - srl c - ld b, $0 - add hl, bc - ret -; 2a8b - - -CheckFacingSign: ; 2a8b - call GetFacingTileCoord - ld b, a - ld a, d - sub 4 - ld d, a - ld a, e - sub 4 - ld e, a - ld a, [$dc01] - and a - ret z - ld c, a - ld a, [hROMBank] - push af - call Function2c52 - call Function2aaa - pop hl - ld a, h - rst Bankswitch - ret -; 2aaa - -Function2aaa: ; 2aaa - ld hl, $dc02 - ld a, [hli] - ld h, [hl] - ld l, a -.asm_2ab0 - push hl - ld a, [hli] - cp e - jr nz, .asm_2abb - ld a, [hli] - cp d - jr nz, .asm_2abb - jr .asm_2ac8 - -.asm_2abb - pop hl - ld a, 5 - add l - ld l, a - jr nc, .asm_2ac3 - inc h - -.asm_2ac3 - dec c - jr nz, .asm_2ab0 - xor a - ret - -.asm_2ac8 - pop hl - ld de, EngineBuffer1 - ld bc, 5 - call CopyBytes - scf - ret -; 2ad4 - -Function2ad4: ; 2ad4 - ld a, [$dbfe] - and a - ret z - ld c, a - ld a, [hROMBank] - push af - call Function2c52 - call Function2ae7 - pop hl - ld a, h - rst Bankswitch - ret -; 2ae7 - -Function2ae7: ; 2ae7 - ld hl, $dbff - ld a, [hli] - ld h, [hl] - ld l, a - call Function211b - ld b, a - ld a, [MapX] - sub $4 - ld d, a - ld a, [MapY] - sub $4 - ld e, a -.asm_2afd - push hl - ld a, [hli] - cp b - jr z, .asm_2b06 - cp $ff - jr nz, .asm_2b10 - -.asm_2b06 - ld a, [hli] - cp e - jr nz, .asm_2b10 - ld a, [hli] - cp d - jr nz, .asm_2b10 - jr .asm_2b1d - -.asm_2b10 - pop hl - ld a, $8 - add l - ld l, a - jr nc, .asm_2b18 - inc h - -.asm_2b18 - dec c - jr nz, .asm_2afd - xor a - ret - -.asm_2b1d - pop hl - ld de, EngineBuffer1 - ld bc, $0008 - call CopyBytes - scf - ret -; 2b29 - - -FadeToMenu: ; 2b29 - xor a - ld [hBGMapMode], a - call Function1d6e - ld a, $23 - ld hl, $4084 - rst FarCall - call ClearSprites - call Function2ed3 - ret -; 2b3c - - -Function2b3c: ; 2b3c - call WhiteBGMap - call Function2bae - call Function1ad2 - call Function1d7d - call Functiond90 - jr Function2b5c -; 2b4d - -Function2b4d: ; 2b4d - call WhiteBGMap - call Function1d7d - call Function2bae - call Function1ad2 - call Functiond90 -; 2b5c - -Function2b5c: ; 2b5c - ld b, $9 - call GetSGBLayout - ld a, $12 - ld hl, $5409 - rst FarCall - call Function3200 - ld a, $23 - ld hl, $4079 - rst FarCall - call Function2ee4 - ret -; 2b74 - - -Function2b74: ; 0x2b74 - push af - ld a, $1 - ld [$c2ce], a - call WhiteBGMap - call ClearSprites - call Function2bae - ld hl, $c590 ; tile 0, 12 - ld bc, $0412 - call TextBox - ld hl, VramState - set 0, [hl] - call Function1ad2 - call Function3200 - ld b, $9 - call GetSGBLayout - callba Function49409 - call UpdateTimePals - call DelayFrame - ld a, $1 - ld [$ffde], a - pop af - ret -; 0x2bae - -Function2bae: ; 2bae - call DisableLCD - call ClearSprites - ld a, $5 - ld hl, $4168 - rst FarCall - call Functione51 - call Functione5f - ld a, [hROMBank] - push af - ld a, [MapGroup] - ld b, a - ld a, [MapNumber] - ld c, a - call Function2c24 - ld a, $23 - ld hl, $4001 - rst FarCall - call Function2173 - call Function2821 - ld a, $9 - call Function3cb4 - pop af - rst Bankswitch - - call EnableLCD - ret -; 2be5 - - -GetMapHeaderPointer: ; 2be5 - ld a, [MapGroup] - ld b, a - ld a, [MapNumber] - ld c, a -; 2bed - -GetAnyMapHeaderPointer: ; 0x2bed -; Prior to calling this function, you must have switched banks so that -; MapGroupPointers is visible. - -; inputs: -; b = map group, c = map number -; XXX de = ??? - -; outputs: -; hl points to the map header - push bc ; save map number for later - - ; get pointer to map group - dec b - ld c, b - ld b, $0 - ld hl, MapGroupPointers - add hl, bc - add hl, bc - - ld a, [hli] - ld h, [hl] - ld l, a - pop bc ; restore map number - - ; find the cth map header - dec c - ld b, $0 - ld a, OlivineGym_MapHeader - OlivinePokeCenter1F_MapHeader - call AddNTimes - ret -; 0x2c04 - -GetMapHeaderMember: ; 0x2c04 -; Extract data from the current map's header. - -; inputs: -; de = offset of desired data within the mapheader - -; outputs: -; bc = data from the current map's header -; (e.g., de = $0003 would return a pointer to the secondary map header) - - ld a, [MapGroup] - ld b, a - ld a, [MapNumber] - ld c, a - ; fallthrough - -GetAnyMapHeaderMember: ; 0x2c0c - ; bankswitch - ld a, [hROMBank] - push af - ld a, BANK(MapGroupPointers) - rst Bankswitch - - call GetAnyMapHeaderPointer - add hl, de - ld c, [hl] - inc hl - ld b, [hl] - - ; bankswitch back - pop af - rst Bankswitch - ret -; 0x2c1c - - -Function2c1c: ; 2c1c - ld a, [MapGroup] - ld b, a - ld a, [MapNumber] - ld c, a -; 2c24 - -Function2c24: ; 2c24 - call Function2c31 - rst Bankswitch - ret -; 2c29 - - -Function2c29: ; 2c29 - ld a, [MapGroup] - ld b, a - ld a, [MapNumber] - ld c, a -; 2c31 - -Function2c31: ; 2c31 - push hl - push de - ld de, $0000 - call GetAnyMapHeaderMember - ld a, c - pop de - pop hl - ret -; 2c3d - -Function2c3d: ; 2c3d - ld a, [hROMBank] - push af - ld a, $25 - rst Bankswitch - call GetMapHeaderPointer - ld de, $d198 - ld bc, $0005 - call CopyBytes - pop af - rst Bankswitch - ret -; 2c52 - -Function2c52: ; 2c52 - ld a, [MapEventBank] - rst Bankswitch - ret -; 2c57 - - -GetMapEventBank: ; 2c57 - ld a, [MapEventBank] - ret -; 2c5b - -GetAnyMapBlockdataBank: ; 2c5b -; Return the blockdata bank for group b map c. - push hl - push de - push bc - - push bc - ld de, 3 ; second map header pointer - call GetAnyMapHeaderMember - ld l, c - ld h, b - pop bc - - push hl - ld de, 0 ; second map header bank - call GetAnyMapHeaderMember - pop hl - - ld de, 3 ; blockdata bank - add hl, de - ld a, c - call GetFarByte - rst Bankswitch - - pop bc - pop de - pop hl - ret -; 2c7d - -GetSecondaryMapHeaderPointer: ; 0x2c7d -; returns the current map's secondary map header pointer in hl. - push bc - push de - ld de, $0003 ; secondary map header pointer (offset within header) - call GetMapHeaderMember - ld l, c - ld h, b - pop de - pop bc - ret -; 2c8a - -GetMapPermission: ; 2c8a - push hl - push de - push bc - ld de, 2 - call GetMapHeaderMember - ld a, c - pop bc - pop de - pop hl - ret -; 2c98 - -Function2c98: ; 2c98 - ret -; 2c99 - -Function2c99: ; 2c99 - push hl - push de - push bc - ld de, $0002 - call GetAnyMapHeaderMember - ld a, c - pop bc - pop de - pop hl - ret -; 2ca7 - -Function2ca7: ; 2ca7 - ld de, $0001 - call GetAnyMapHeaderMember - ld a, c - ret -; 2caf - -GetWorldMapLocation: ; 0x2caf -; given a map group/id in bc, return its location on the Pokégear map. - push hl - push de - push bc - ld de, 5 - call GetAnyMapHeaderMember - ld a, c - pop bc - pop de - pop hl - ret -; 0x2cbd - -Function2cbd: ; 2cbd - push hl - push bc - ld de, $0006 - call GetMapHeaderMember - ld a, c - cp $64 - jr z, .asm_2cee - bit 7, c - jr nz, .asm_2cda - ld a, $22 - ld hl, $7342 - rst FarCall - ld e, c - ld d, $0 -.asm_2cd7 - pop bc - pop hl - ret - -.asm_2cda - ld a, [StatusFlags2] - bit 0, a - jr z, .asm_2ce6 - ld de, $0056 - jr .asm_2cd7 - -.asm_2ce6 - ld a, c - and $7f - ld e, a - ld d, $0 - jr .asm_2cd7 - -.asm_2cee - ld a, [StatusFlags2] - bit 7, a - jr z, .asm_2cfa - ld de, $0048 - jr .asm_2cd7 - -.asm_2cfa - ld de, $0026 - jr .asm_2cd7 -; 2cff - -Function2cff: ; 2cff - call Function2d0d - and $f - ret -; 2d05 - -Function2d05: ; 2d05 - call Function2d0d - and $f0 - swap a - ret -; 2d0d - -Function2d0d: ; 2d0d - push hl - push bc - ld de, $0007 - call GetMapHeaderMember - ld a, c - pop bc - pop hl - ret -; 2d19 - -Function2d19: ; 2d19 - push de - push hl - push bc - ld de, $0008 - call GetMapHeaderMember - ld a, c - pop bc - pop hl - pop de - ret -; 2d27 - -Function2d27: ; 2d27 - push hl - push bc - ld hl, $5596 - ld bc, $000f - ld a, [$d199] - call AddNTimes - ld de, TilesetBank - ld bc, $000f - ld a, $13 - call FarCopyBytes - pop bc - pop hl - ret -; 2d43 - diff --git a/common/map_objects.asm b/common/map_objects.asm deleted file mode 100644 index 3ebc1b597..000000000 --- a/common/map_objects.asm +++ /dev/null @@ -1,683 +0,0 @@ -; Functions handling map objects. - - -GetSpritePalette: ; 17ff - push hl - push de - push bc - ld c, a - callba _GetSpritePalette - ld a, c - pop bc - pop de - pop hl - ret -; 180e - - -Function180e: ; 180e - push hl - push bc - ld hl, $d156 - ld c, $1f - ld b, a - ld a, [hConnectionStripLength] - cp $0 - jr z, .asm_182b - ld a, b -.asm_181d - cp [hl] - jr z, .asm_1830 - inc hl - inc hl - dec c - jr nz, .asm_181d - ld a, [$d155] - scf - jr .asm_1833 - -.asm_182b - ld a, [$d155] - jr .asm_1833 - -.asm_1830 - inc hl - xor a - ld a, [hl] - -.asm_1833 - pop bc - pop hl - ret -; 1836 - -Function1836: ; 1836 - push de - push hl - - ld b, a - ld a, [hROMBank] - push af - ld a, BANK(Function142a7) - rst Bankswitch - - ld a, b - call Function142a7 - ld c, a - - pop de - ld a, d - rst Bankswitch - - pop hl - pop de - ret -; 184a - - - -Function184a: ; 184a - ld a, [StandingTile] - call GetTileCollision - ld b, a - ret -; 1852 - -Function1852: ; 1852 - ld a, [StandingTile] - call GetTileCollision - sub 1 - ret z - and a - ret -; 185d - - -GetTileCollision: ; 185d -; Get the collision type of tile a. - - push de - push hl - - ld hl, TileCollisionTable - ld e, a - ld d, 0 - add hl, de - - ld a, [hROMBank] - push af - ld a, BANK(TileCollisionTable) - rst Bankswitch - ld e, [hl] - pop af - rst Bankswitch - - ld a, e - and $f ; lo nybble only - - pop hl - pop de - ret -; 1875 - - -Function1875: ; 1875 - ld d, a - and $f0 - cp $10 - jr z, .asm_1882 - cp $20 - jr z, .asm_1888 - scf - ret - -.asm_1882 - ld a, d - and 7 - ret z - scf - ret - -.asm_1888 - ld a, d - and 7 - ret z - scf - ret -; 188e - -Function188e: ; 188e - cp $14 - ret z - cp $1c - ret -; 1894 - -CheckCutTreeTile: ; 1894 - cp $12 - ret z - cp $1a - ret -; 189a - -CheckHeadbuttTreeTile: ; 189a - cp $15 - ret z - cp $1d - ret -; 18a0 - -CheckCounterTile: ; 18a0 - cp $90 - ret z - cp $98 - ret -; 18a6 - -CheckPitTile: ; 18a6 - cp $60 - ret z - cp $68 - ret -; 18ac - -CheckIceTile: ; 18ac - cp $23 - ret z - cp $2b - ret z - scf - ret -; 18b4 - -CheckWhirlpoolTile: ; 18b4 - nop - cp $24 - ret z - cp $2c - ret z - scf - ret -; 18bd - -CheckWaterfallTile: ; 18bd - cp $33 - ret z - cp $3b - ret -; 18c3 - -CheckStandingOnEntrance: ; 18c3 - ld a, [StandingTile] - cp $71 ; door - ret z - cp $79 - ret z - cp $7a ; stairs - ret z - cp $7b ; cave - ret -; 18d2 - - -GetMapObject: ; 18d2 -; Return the location of map object a in bc. - ld hl, MapObjects - ld bc, $10 - call AddNTimes - ld b, h - ld c, l - ret -; 18de - - -Function18de: ; 18de - ld [hConnectionStripLength], a - call GetMapObject - ld hl, $0000 - add hl, bc - ld a, [hl] - cp $ff - jr z, .asm_18f3 - ld [hConnectedMapWidth], a - call Function1ae5 - and a - ret - -.asm_18f3 - scf - ret -; 18f5 - -Function18f5: ; 18f5 - ld hl, $0006 - add hl, bc - ld a, [hl] - cp $ff - jr nz, .asm_1921 - ld hl, $0007 - add hl, bc - ld a, [hl] - cp $ff - jr z, .asm_191c - ld hl, .data_191e - ld a, [TimeOfDay] - add l - ld l, a - jr nc, .asm_1912 - inc h - -.asm_1912 - ld a, [hl] - ld hl, $0007 - add hl, bc - and [hl] - jr nz, .asm_191c - scf - ret - -.asm_191c - and a - ret - -.data_191e - db $1 - db $2 - db $4 - -.asm_1921 - ld hl, $0006 - add hl, bc - ld d, [hl] - ld hl, $0007 - add hl, bc - ld e, [hl] - ld hl, hHours - ld a, d - cp e - jr z, .asm_1949 - jr c, .asm_193f - ld a, [hl] - cp d - jr nc, .asm_1949 - cp e - jr c, .asm_1949 - jr z, .asm_1949 - jr .asm_194b - -.asm_193f - ld a, e - cp [hl] - jr c, .asm_194b - ld a, [hl] - cp d - jr nc, .asm_1949 - jr .asm_194b - -.asm_1949 - and a - ret - -.asm_194b - scf - ret -; 194d - -Function194d: ; 194d - ld [hConnectionStripLength], a - call GetMapObject - call $40e7 - ret -; 1956 - - - -Function1956: ; 1956 - ld [hConnectionStripLength], a - call Function271e - ld a, [hConnectionStripLength] - call GetMapObject - ld a, $2 - ld hl, $40e7 - rst FarCall - ret -; 1967 - -Function1967: ; 1967 - ld [hConnectionStripLength], a - call GetMapObject - ld hl, $0000 - add hl, bc - ld a, [hl] - cp $ff - ret z - ld [hl], $ff - push af - call Function1985 - pop af - call Function1ae5 - callba Function4357 - ret -; 1985 - -Function1985: ; 1985 - ld hl, $d4cd - cp [hl] - jr z, .asm_1990 - ld hl, $d4ce - cp [hl] - ret nz - -.asm_1990 - callba Function581f - ld a, $ff - ld [$d4cd], a - ld [$d4ce], a - ret -; 199f - -Function199f: ; 199f - call Function1967 - call Function2712 - ret -; 19a6 - -Function19a6: ; 19a6 - push hl - call GetMapObject - ld d, b - ld e, c - ld a, $ff - ld [de], a - inc de - pop hl - ld bc, $000f - call CopyBytes - ret -; 19b8 - -Function19b8: ; 19b8 - call GetMapObject - ld hl, $0000 - add hl, bc - ld a, [hl] - push af - ld [hl], $ff - inc hl - ld bc, $000f - xor a - call ByteFill - pop af - cp $ff - ret z - cp $d - ret nc - ld b, a - ld a, [$d4cd] - cp b - jr nz, .asm_19de - ld a, $ff - ld [$d4cd], a - -.asm_19de - ld a, b - call Function1ae5 - callba Function4357 - ret -; 19e9 - - - -Function19e9: ; 19e9 - ld [$c2e2], a - ld a, [hROMBank] - ld [$c2e3], a - ld a, l - ld [$c2e4], a - ld a, h - ld [$c2e5], a - ld a, [$c2e2] - call Function18de - ret c - ld hl, $0003 - add hl, bc - ld [hl], $14 - ld hl, $0009 - add hl, bc - ld [hl], $0 - ld hl, VramState - set 7, [hl] - and a - ret -; 1a13 - - - -Function1a13: ; 1a13 - push bc - push de - ld hl, $d4d6 - ld de, $0028 - ld c, $d -.asm_1a1d - ld a, [hl] - and a - jr z, .asm_1a28 - add hl, de - dec c - jr nz, .asm_1a1d - xor a - jr .asm_1a2c - -.asm_1a28 - ld a, $d - sub c - scf - -.asm_1a2c - pop de - pop bc - ret -; 1a2f - - - -Function1a2f: ; 1a2f - ld hl, $0003 - add hl, bc - ld a, [hl] - cp $25 - jr c, .asm_1a39 - xor a - -.asm_1a39 - ld hl, Data4273 - ld e, a - ld d, 0 - add hl, de - add hl, de - add hl, de - add hl, de - add hl, de - add hl, de - ld a, [hl] - ret -; 1a47 - -Function1a47: ; 1a47 - push bc - push de - ld e, a - ld d, 0 - ld hl, Data4273 + 1 - add hl, de - add hl, de - add hl, de - add hl, de - add hl, de - add hl, de - ld a, BANK(Data4273) - call GetFarByte - add a - add a - and $c - pop de - pop bc - ret -; 1a61 - - -Function1a61: ; 1a61 - ld l, a - ld a, [hROMBank] - push af - ld a, BANK(Data4273) - rst Bankswitch - ld a, l - push bc - - call Function1a71 - - pop bc - pop af - rst Bankswitch - - ret -; 1a71 - -Function1a71: ; 1a71 - ld hl, $0003 - add hl, de - ld [hl], a - push de - ld e, a - ld d, 0 - ld hl, Data4273 + 1 - add hl, de - add hl, de - add hl, de - add hl, de - add hl, de - add hl, de - ld b, h - ld c, l - pop de - ld a, [bc] - inc bc - rlca - rlca - and $c - ld hl, $0008 - add hl, de - ld [hl], a - ld a, [bc] - inc bc - ld hl, $000b - add hl, de - ld [hl], a - ld a, [bc] - inc bc - ld hl, $0004 - add hl, de - ld [hl], a - ld a, [bc] - inc bc - ld hl, $0005 - add hl, de - ld [hl], a - ld a, [bc] - inc bc - ld hl, $0006 - add hl, de - ld [hl], a - ret -; 1aae - -Function1aae: ; 1aae - ld a, [hROMBank] - push af - ld a, [hli] - rst Bankswitch - - ld a, [hli] - ld d, [hl] - ld hl, $001b - add hl, bc - add [hl] - ld e, a - ld a, d - adc $0 - ld d, a - inc [hl] - ld a, [de] - ld h, a - pop af - rst Bankswitch - - ld a, h - ret -; 1ac6 - -Function1ac6: ; 1ac6 - ld hl, VramState - set 0, [hl] - ret -; 1acc - -Function1acc: ; 1acc - ld hl, VramState - res 0, [hl] - ret -; 1ad2 - - -Function1ad2: ; 1ad2 - ld a, [VramState] - bit 0, a - ret z - callba Function55e0 - callba Function5920 - ret -; 1ae5 - - -Function1ae5: ; 1ae5 - ld bc, $0028 - ld hl, $d4d6 - call AddNTimes - ld b, h - ld c, l - ret -; 1af1 - -Function1af1: ; 1af1 - ld hl, $0000 - add hl, bc - ld a, [hl] - and a - ret -; 1af8 - -Function1af8: ; 1af8 - push af - ld hl, $0008 - add hl, bc - ld a, [hl] - and $f3 - ld e, a - pop af - and $c - or e - ld [hl], a - ret -; 1b07 - - -GetSpriteDirection: ; 1b07 - ld hl, $0008 - add hl, bc - ld a, [hl] - and $c - ret -; 1b0f - diff --git a/common/math.asm b/common/math.asm deleted file mode 100644 index 87a00c412..000000000 --- a/common/math.asm +++ /dev/null @@ -1,76 +0,0 @@ -SimpleMultiply: ; 3105 -; Return a * c. - and a - ret z - - push bc - ld b, a - xor a -.loop - add c - dec b - jr nz, .loop - pop bc - ret -; 3110 - - -SimpleDivide: ; 3110 -; Divide a by c. Return quotient b and remainder a. - ld b, 0 -.loop - inc b - sub c - jr nc, .loop - dec b - add c - ret -; 3119 - - -Multiply: ; 3119 -; Multiply hMultiplicand (3 bytes) by hMultiplier. Result in hProduct. -; All values are big endian. - push hl - push bc - - callab _Multiply - - pop bc - pop hl - ret -; 3124 - - -Divide: ; 3124 -; Divide hDividend length b (max 4 bytes) by hDivisor. Result in hQuotient. -; All values are big endian. - push hl - push de - push bc - ld a, [hROMBank] - push af - ld a, BANK(_Divide) - rst Bankswitch - - call _Divide - - pop af - rst Bankswitch - pop bc - pop de - pop hl - ret -; 3136 - - -SubtractSigned: ; 3136 -; Return a - b, sign in carry. - sub b - ret nc - cpl - add 1 - scf - ret -; 313d - diff --git a/common/menu.asm b/common/menu.asm deleted file mode 100644 index c761a927c..000000000 --- a/common/menu.asm +++ /dev/null @@ -1,603 +0,0 @@ -; Functions used in displaying and handling menus. - - -LoadMenuDataHeader: ; 0x1d35 - call Function1d3c - call Function1c00 - ret - -Function1d3c: ; 0x1d3c - ld de, $cf81 - ld bc, $0010 - call CopyBytes - ld a, [hROMBank] - ld [$cf8a], a - ret -; 0x1d4b - -Function1d4b: ; 1d4b - ld [$cf88], a - ret -; 1d4f - - -Function1d4f: ; 1d4f - push hl - call Function1d58 - pop hl - jp PrintText -; 1d57 - -Function1d57: ; 1d57 - ret -; 1d58 - -Function1d58: ; 1d58 - ld hl, MenuDataHeader_0x1d5f - call LoadMenuDataHeader - ret -; 1d5f - -MenuDataHeader_0x1d5f: ; 1d5f - db $40 ; tile backup - db 12, 0 ; start coords - db 17, 19 ; end coords - dw VTiles0 - db 0 ; default option -; 1d67 - -Function1d67: ; 1d67 - call Function1d4f - call Function1c17 - ret -; 1d6e - -Function1d6e: ; 1d6e - ld hl, MenuDataHeader_0x1d75 - call LoadMenuDataHeader - ret -; 1d75 - -MenuDataHeader_0x1d75: ; 1d75 - db $40 ; tile backup - db 0, 0 ; start coords - db 17, 19 ; end coords - dw $0000 - db 1 ; default option -; 1d7d - -Function1d7d: ; 1d7d - call Function1c07 - ret -; 1d81 - -Function1d81: ; 0x1d81 - xor a - ld [hBGMapMode], a - call Function1cbb - call Function1ad2 - call Function1c89 - call Function321c - call Function1c66 - ld a, [$cf91] - bit 7, a - jr z, .asm_1da7 ; 0x1d98 $d - call Function1c10 - call Function1bc9 - call Function1ff8 - bit 1, a - jr z, .asm_1da9 ; 0x1da5 $2 -.asm_1da7 - scf - ret -.asm_1da9 - and a - ret -; 0x1dab - -Function1dab: ; 1dab - call LoadMenuDataHeader - call Function1d81 - call Function1c17 - ld a, [$cfa9] - ret -; 1db8 - -Function1db8: ; 0x1db8 - push hl - push bc - push af - ld hl, $cf86 - ld a, [hli] - ld h, [hl] - ld l, a - inc hl - inc hl - pop af - call GetNthString - ld d, h - ld e, l - call CopyName1 - pop bc - pop hl - ret -; 0x1dcf - - -Function1dcf: ; 1dcf - ld bc, $0e07 - -Function1dd2: ; 1dd2 - jr Function1dd9 - -Function1dd4: ; 1dd4 - call LoadMenuDataHeader - jr Function1dfe - -Function1dd9: ; 1dd9 - push bc - ld hl, MenuDataHeader_0x1e1d - call Function1d3c - pop bc - ld a, b - cp $e - jr nz, .asm_1de9 - ld a, $e - ld b, a - -.asm_1de9 - ld a, b - ld [$cf83], a - add $5 - ld [$cf85], a - ld a, c - ld [$cf82], a - add $4 - ld [$cf84], a - call Function1c00 - -Function1dfe: ; 1dfe - call Function1d81 - push af - ld c, $f - call DelayFrames - call Function1c17 - pop af - jr c, .asm_1e16 - ld a, [$cfa9] - cp $2 - jr z, .asm_1e16 - and a - ret - -.asm_1e16 - ld a, $2 - ld [$cfa9], a - scf - ret -; 1e1d - -MenuDataHeader_0x1e1d: ; 1e1d - db $40 ; tile backup - db 5, 10 ; start coords - db 9, 15 ; end coords - dw MenuData2_0x1e25 - db 1 ; default option -; 1e25 - -MenuData2_0x1e25: ; 1e25 - db $c0 ; flags - db 2 - db "YES@" - db "NO@" -; 1e2e - -Function1e2e: ; 1e2e - call Function1e35 - call Function1c00 - ret -; 1e35 - -Function1e35: ; 1e35 - push de - call Function1d3c - pop de - ld a, [$cf83] - ld h, a - ld a, [$cf85] - sub h - ld h, a - ld a, d - ld [$cf83], a - add h - ld [$cf85], a - ld a, [$cf82] - ld l, a - ld a, [$cf84] - sub l - ld l, a - ld a, e - ld [$cf82], a - add l - ld [$cf84], a - ret -; 1e5d - -Function1e5d: ; 1e5d - call MenuFunc_1e7f - call MenuWriteText - call Function1eff - call Function1f23 - call Function1bdd - call Function1ff8 - ret -; 1e70 - -SetUpMenu: ; 1e70 - call MenuFunc_1e7f ; ??? - call MenuWriteText - call Function1eff ; set up selection pointer - ld hl, $cfa5 - set 7, [hl] - ret - -MenuFunc_1e7f: ; 0x1e7f - call Function1c66 - call Function1ebd - call Function1ea6 - call Function1cbb - ret - -MenuWriteText: ; 0x1e8c - xor a - ld [hBGMapMode], a - call Function1ebd ; sort out the text - call Function1eda ; actually write it - call Function2e31 - ld a, [hOAMUpdate] - push af - ld a, $1 - ld [hOAMUpdate], a - call Function321c - pop af - ld [hOAMUpdate], a - ret -; 0x1ea6 - -Function1ea6: ; 1ea6 - ld a, [$cf83] - ld c, a - ld a, [$cf85] - sub c - ld c, a - ld a, [$cf92] - add a - inc a - ld b, a - ld a, [$cf82] - add b - ld [$cf84], a - ret -; 1ebd - -Function1ebd: ; 1ebd - ld hl, $cf93 - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [$cf76] - and a - jr z, .asm_1ed3 - ld b, a - ld c, $ff -.asm_1ecc - ld a, [hli] - cp c - jr nz, .asm_1ecc - dec b - jr nz, .asm_1ecc - -.asm_1ed3 - ld d, h - ld e, l - ld a, [hl] - ld [$cf92], a - ret -; 1eda - -Function1eda: ; 1eda - call Function1cfd - ld bc, $002a - add hl, bc -.asm_1ee1 - inc de - ld a, [de] - cp $ff - ret z - ld [MenuSelection], a - push de - push hl - ld d, h - ld e, l - ld hl, $cf95 - call Function1efb - pop hl - ld de, $0028 - add hl, de - pop de - jr .asm_1ee1 -; 1efb - -Function1efb: ; 1efb - ld a, [hli] - ld h, [hl] - ld l, a - jp [hl] -; 1eff - -Function1eff: ; 1eff - call Function1c10 - ld hl, $cfa8 - ld a, [$cf91] - bit 3, a - jr z, .asm_1f0e - set 3, [hl] - -.asm_1f0e - ld a, [$cf91] - bit 2, a - jr z, .asm_1f19 - set 5, [hl] - set 4, [hl] - -.asm_1f19 - ret -; 1f1a - - -Function1f1a: ; 1f1a - call Function1bd3 - ld hl, $cfa8 - and [hl] - jr Function1f2a -; 1f23 - -Function1f23: ; 1f23 - xor a - ld [$cf73], a - call Function1bc9 -; 1f2a - -Function1f2a: ; 1f2a - bit 0, a - jr nz, .asm_1f52 - bit 1, a - jr nz, .asm_1f6d - bit 3, a - jr nz, .asm_1f6d - bit 4, a - jr nz, .asm_1f44 - bit 5, a - jr nz, .asm_1f4b - xor a - ld [$cf73], a - jr .asm_1f57 - -.asm_1f44 - ld a, $10 - ld [$cf73], a - jr .asm_1f57 - -.asm_1f4b - ld a, $20 - ld [$cf73], a - jr .asm_1f57 - -.asm_1f52 - ld a, $1 - ld [$cf73], a - -.asm_1f57 - call Function1ebd - ld a, [$cfa9] - ld l, a - ld h, $0 - add hl, de - ld a, [hl] - ld [MenuSelection], a - ld a, [$cfa9] - ld [$cf88], a - and a - ret - -.asm_1f6d - ld a, $2 - ld [$cf73], a - ld a, $ff - ld [MenuSelection], a - scf - ret -; 1f79 - -Function1f79: ; 1f79 - push de - ld hl, $cf97 - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [MenuSelection] - call GetNthString - ld d, h - ld e, l - pop hl - call PlaceString - ret -; 1f8d - -Function1f8d: ; 1f8d - push de - ld a, [MenuSelection] - call Function1fb1 - inc hl - inc hl - ld a, [hli] - ld d, [hl] - ld e, a - pop hl - call PlaceString - ret -; 1f9e - -Function1f9e: ; 1f9e - call Function1fb1 - inc hl - inc hl - ld a, [hli] - ld d, [hl] - ld e, a - ret -; 1fa7 - -Function1fa7: ; 1fa7 - ld a, [MenuSelection] - call Function1fb1 - ld a, [hli] - ld h, [hl] - ld l, a - jp [hl] -; 1fb1 - -Function1fb1: ; 1fb1 - ld e, a - ld d, $0 - ld hl, $cf97 - ld a, [hli] - ld h, [hl] - ld l, a - add hl, de - add hl, de - add hl, de - add hl, de - ret -; 1fbf - -Function1fbf: ; 1fbf - ld hl, $cf71 - call Function1ff0 - ld hl, $cf81 - call Function1ff0 - ld hl, $cf91 - call Function1ff0 - ld hl, $cfa1 - call Function1ff0 - ld a, [rSVBK] - push af - ld a, $7 - ld [rSVBK], a - xor a - ld hl, $dfff - ld [hld], a - ld [hld], a - ld a, l - ld [$cf71], a - ld a, h - ld [$cf72], a - pop af - ld [rSVBK], a - ret -; 1ff0 - -Function1ff0: ; 1ff0 - ld bc, $0010 - xor a - call ByteFill - ret -; 1ff8 - -Function1ff8: ; 1ff8 - push af - and $3 - jr z, .asm_2007 - ld hl, $cf81 - bit 3, [hl] - jr nz, .asm_2007 - call PlayClickSFX - -.asm_2007 - pop af - ret -; 2009 - - -PlayClickSFX: ; 2009 - push de - ld de, SFX_READ_TEXT_2 - call StartSFX - pop de - ret -; 0x2012 - -Function2012: ; 2012 - call Function1d4f - call Functiona46 - call Function1c07 - ret -; 201c - -Function201c: ; 201c - ld [hBuffer], a - ld a, [hROMBank] - push af - ld a, [hBuffer] - rst Bankswitch - - call PlaceString - pop af - rst Bankswitch - - ret -; 202a - -Function202a: ; 202a - ld a, [hROMBank] - ld [$cf94], a - ld a, $9 - ld hl, $400e - rst FarCall - ld a, [$cf88] - ret -; 2039 - -Function2039: ; 2039 - ld a, [hROMBank] - ld [$cf94], a - ld a, $9 - ld hl, $4022 - rst FarCall - ld a, [$cf88] - ret -; 2048 - -Function2048: ; 2048 - ld a, [hROMBank] - ld [$cf94], a - ld a, $9 - ld hl, $403c - rst FarCall - ld a, [$cf88] - ret -; 2057 - -Function2057: ; 2057 - ld a, [hROMBank] - push af - ld a, $21 - rst Bankswitch - - call $42db - pop af - rst Bankswitch - - ret -; 2063 - diff --git a/common/palettes.asm b/common/palettes.asm deleted file mode 100644 index accaa96b5..000000000 --- a/common/palettes.asm +++ /dev/null @@ -1,347 +0,0 @@ -; Functions dealing with palettes. - - -UpdatePalsIfCGB: ; c2f -; update bgp data from BGPals -; update obp data from OBPals -; return carry if successful - -; check cgb - ld a, [hCGB] - and a - ret z - - -UpdateCGBPals: ; c33 -; return carry if successful -; any pals to update? - ld a, [hCGBPalUpdate] - and a - ret z - - -ForceUpdateCGBPals: ; c37 - - ld a, [rSVBK] - push af - ld a, 5 ; BANK(BGPals) - ld [rSVBK], a - - ld hl, BGPals ; 5:d080 - -; copy 8 pals to bgpd - ld a, %10000000 ; auto increment, index 0 - ld [rBGPI], a - ld c, rBGPD % $100 - ld b, 4 ; NUM_PALS / 2 -.bgp - rept $10 - ld a, [hli] - ld [$ff00+c], a - endr - - dec b - jr nz, .bgp - -; hl is now 5:d0c0 OBPals - -; copy 8 pals to obpd - ld a, %10000000 ; auto increment, index 0 - ld [rOBPI], a - ld c, rOBPD - rJOYP - ld b, 4 ; NUM_PALS / 2 -.obp - rept $10 - ld a, [hli] - ld [$ff00+c], a - endr - - dec b - jr nz, .obp - - pop af - ld [rSVBK], a - -; clear pal update queue - xor a - ld [hCGBPalUpdate], a - - scf - ret -; c9f - - -DmgToCgbBGPals: ; c9f -; exists to forego reinserting cgb-converted image data - -; input: a -> bgp - - ld [rBGP], a - push af - - ld a, [hCGB] - and a - jr z, .end - - push hl - push de - push bc - ld a, [rSVBK] - push af - - ld a, 5 - ld [rSVBK], a - -; copy & reorder bg pal buffer - ld hl, BGPals ; to - ld de, Unkn1Pals ; from -; order - ld a, [rBGP] - ld b, a -; all pals - ld c, 8 - call CopyPals -; request pal update - ld a, 1 - ld [hCGBPalUpdate], a - - pop af - ld [rSVBK], a - pop bc - pop de - pop hl -.end - pop af - ret -; ccb - - -DmgToCgbObjPals: ; ccb -; exists to forego reinserting cgb-converted image data - -; input: d -> obp1 -; e -> obp2 - - ld a, e - ld [rOBP0], a - ld a, d - ld [rOBP1], a - - ld a, [hCGB] - and a - ret z - - push hl - push de - push bc - ld a, [rSVBK] - push af - - ld a, 5 - ld [rSVBK], a - -; copy & reorder obj pal buffer - ld hl, OBPals ; to - ld de, Unkn2Pals ; from -; order - ld a, [rOBP0] - ld b, a -; all pals - ld c, 8 - call CopyPals -; request pal update - ld a, 1 - ld [hCGBPalUpdate], a - - pop af - ld [rSVBK], a - pop bc - pop de - pop hl - ret -; cf8 - - -Functioncf8: ; cf8 - ld [rOBP0], a - push af - ld a, [hCGB] - and a - jr z, .asm_d22 - push hl - push de - push bc - ld a, [rSVBK] - push af - ld a, $5 - ld [rSVBK], a - ld hl, $d0c0 - ld de, MartPointer - ld a, [rOBP0] - ld b, a - ld c, $1 - call CopyPals - ld a, $1 - ld [hCGBPalUpdate], a - pop af - ld [rSVBK], a - pop bc - pop de - pop hl - -.asm_d22 - pop af - ret -; d24 - -Functiond24: ; d24 - ld [rOBP1], a - push af - ld a, [hCGB] - and a - jr z, .asm_d4e - push hl - push de - push bc - ld a, [rSVBK] - push af - ld a, $5 - ld [rSVBK], a - ld hl, $d0c8 - ld de, $d048 - ld a, [rOBP1] - ld b, a - ld c, $1 - call CopyPals - ld a, $1 - ld [hCGBPalUpdate], a - pop af - ld [rSVBK], a - pop bc - pop de - pop hl - -.asm_d4e - pop af - ret -; d50 - - - -CopyPals: ; d50 -; copy c palettes in order b from de to hl - - push bc - ld c, 4 ; NUM_PAL_COLORS -.loop - push de - push hl - -; get pal color - ld a, b - and %11 ; color -; 2 bytes per color - add a - ld l, a - ld h, 0 - add hl, de - ld e, [hl] - inc hl - ld d, [hl] - -; dest - pop hl -; write color - ld [hl], e - inc hl - ld [hl], d - inc hl -; next pal color - srl b - srl b -; source - pop de -; done pal? - dec c - jr nz, .loop - -; de += 8 (next pal) - ld a, 8 ; NUM_PAL_COLORS * 2 ; bytes per pal - add e - jr nc, .ok - inc d -.ok - ld e, a - -; how many more pals? - pop bc - dec c - jr nz, CopyPals - ret -; d79 - - -Functiond79: ; d79 - ld a, [hCGB] - and a - ret z - ld a, 1 - ld [rVBK], a - ld hl, VTiles0 - ld bc, $2000 - xor a - call ByteFill - ld a, 0 - ld [rVBK], a - ret -; d90 - - -Functiond90: ; d90 - ret -; d91 - - -Functiond91: ; d91 - ld a, [hCGB] - and a - ret z - ld a, [rSVBK] - push af - ld a, 5 ; BANK(BGPals) - ld [rSVBK], a - ld hl, BGPals - ld bc, $40 + $10 - xor a - call ByteFill - pop af - ld [rSVBK], a - ld a, 1 - ld [hCGBPalUpdate], a - call DelayFrame - ret -; db1 - - -Functiondb1: ; db1 - ld a, [hROMBank] - push af - ld a, BANK(Function4c000) - rst Bankswitch - call Function4c000 - pop af - rst Bankswitch - ret -; dbd - -Functiondbd: ; dbd - ld a, [hROMBank] - push af - ld a, BANK(Function4c03f) - rst Bankswitch - call Function4c03f - pop af - rst Bankswitch - ret -; dc9 - diff --git a/common/predef.asm b/common/predef.asm deleted file mode 100644 index bd34a87a1..000000000 --- a/common/predef.asm +++ /dev/null @@ -1,54 +0,0 @@ -Predef: ; 2d83 -; Call predefined function a. -; Preserves bc, de, hl and f. - - ld [PredefID], a - ld a, [hROMBank] - push af - - ld a, BANK(GetPredefPointer) - rst Bankswitch - call GetPredefPointer ; stores hl in PredefTemp - -; Switch to the new function's bank - rst Bankswitch - -; Instead of directly calling stuff, -; push it to the stack in reverse. - - ld hl, .Return - push hl - -; Call the Predef function - ld a, [PredefAddress] - ld h, a - ld a, [PredefAddress + 1] - ld l, a - push hl - -; Get hl back - ld a, [PredefTemp] - ld h, a - ld a, [PredefTemp + 1] - ld l, a - ret - -.Return -; Clean up after the Predef call - - ld a, h - ld [PredefTemp], a - ld a, l - ld [PredefTemp+1], a - - pop hl - ld a, h - rst Bankswitch - - ld a, [PredefTemp] - ld h, a - ld a, [PredefTemp + 1] - ld l, a - ret -; 2dba - diff --git a/common/random.asm b/common/random.asm deleted file mode 100644 index 0f46da9e4..000000000 --- a/common/random.asm +++ /dev/null @@ -1,76 +0,0 @@ -Random: ; 2f8c -; A simple hardware-based random number generator (RNG). - -; Two random numbers are generated by adding and subtracting -; the divider to the respective values every time it's called. - -; The divider is a register that increments at a rate of 16384Hz. -; For comparison, the Game Boy operates at a clock speed of 4.2MHz. - -; Additionally, an equivalent function is executed in VBlank. - -; This leaves a with the value in hRandomSub. - - push bc - - ld a, [rDIV] - ld b, a - ld a, [hRandomAdd] - adc b - ld [hRandomAdd], a - - ld a, [rDIV] - ld b, a - ld a, [hRandomSub] - sbc b - ld [hRandomSub], a - - pop bc - ret -; 2f9f - -BattleRandom: ; 2f9f -; _BattleRandom lives in another bank. - -; It handles all RNG calls in the battle engine, allowing -; link battles to remain in sync using a shared PRNG. - - ld a, [hROMBank] - push af - ld a, BANK(_BattleRandom) - rst Bankswitch - - call _BattleRandom - - ld [$cfb6], a - pop af - rst Bankswitch - ld a, [$cfb6] - ret -; 2fb1 - - -Function2fb1: ; 2fb1 - push bc - ld c, a - xor a - sub c -.asm_2fb5 - sub c - jr nc, .asm_2fb5 - add c - ld b, a - push bc -.asm_2fbb - call Random - ld a, [hRandomAdd] - ld c, a - add b - jr c, .asm_2fbb - ld a, c - pop bc - call SimpleDivide - pop bc - ret -; 2fcb - diff --git a/common/rtc.asm b/common/rtc.asm deleted file mode 100644 index 91428d03b..000000000 --- a/common/rtc.asm +++ /dev/null @@ -1,25 +0,0 @@ -RTC: ; 46f -; update time and time-sensitive palettes - -; rtc enabled? - ld a, [$c2ce] - cp 0 - ret z - - call UpdateTime - -; obj update on? - ld a, [VramState] - bit 0, a ; obj update - ret z - -TimeOfDayPals: ; 47e - callab _TimeOfDayPals - ret -; 485 - -UpdateTimePals: ; 485 - callab _UpdateTimePals - ret -; 48c - diff --git a/common/serial.asm b/common/serial.asm deleted file mode 100644 index fca9d82c3..000000000 --- a/common/serial.asm +++ /dev/null @@ -1,408 +0,0 @@ -Serial: ; 6ef -; The serial interrupt. - - push af - push bc - push de - push hl - - ld a, [$ffc9] - and a - jr nz, .asm_71c - - ld a, [$c2d4] - bit 0, a - jr nz, .asm_721 - - ld a, [$ffcb] - inc a - jr z, .asm_726 - - ld a, [rSB] - ld [hSerialReceive], a - - ld a, [hSerialSend] - ld [rSB], a - - ld a, [$ffcb] - cp $2 - jr z, .asm_752 - - ld a, 0 << rSC_ON - ld [rSC], a - ld a, 1 << rSC_ON - ld [rSC], a - jr .asm_752 - -.asm_71c - call Function3e80 - jr .asm_75a - -.asm_721 - call Function2057 - jr .asm_75a - -.asm_726 - ld a, [rSB] - cp $1 - jr z, .asm_730 - cp $2 - jr nz, .asm_752 - -.asm_730 - ld [hSerialReceive], a - ld [$ffcb], a - cp $2 - jr z, .asm_74f - - xor a - ld [rSB], a - ld a, $3 - ld [rDIV], a - -.asm_73f - ld a, [rDIV] - bit 7, a - jr nz, .asm_73f - - ld a, 0 << rSC_ON - ld [rSC], a - ld a, 1 << rSC_ON - ld [rSC], a - jr .asm_752 - -.asm_74f - xor a - ld [rSB], a - -.asm_752 - ld a, $1 - ld [$ffca], a - ld a, $fe - ld [hSerialSend], a - -.asm_75a - pop hl - pop de - pop bc - pop af - reti -; 75f - -Function75f: ; 75f - ld a, $1 - ld [$ffcc], a -.asm_763 - ld a, [hl] - ld [hSerialSend], a - call Function78a - push bc - ld b, a - inc hl - ld a, $30 -.asm_76e - dec a - jr nz, .asm_76e - ld a, [$ffcc] - and a - ld a, b - pop bc - jr z, .asm_782 - dec hl - cp $fd - jr nz, .asm_763 - xor a - ld [$ffcc], a - jr .asm_763 - -.asm_782 - ld [de], a - inc de - dec bc - ld a, b - or c - jr nz, .asm_763 - ret -; 78a - -Function78a: ; 78a - xor a - ld [$ffca], a - ld a, [$ffcb] - cp $2 - jr nz, .asm_79b - ld a, $1 - ld [rSC], a - ld a, $81 - ld [rSC], a - -.asm_79b - ld a, [$ffca] - and a - jr nz, .asm_7e5 - ld a, [$ffcb] - cp $1 - jr nz, .asm_7c0 - call Function82b - jr z, .asm_7c0 - call .asm_825 - push hl - ld hl, $cf5c - inc [hl] - jr nz, .asm_7b7 - dec hl - inc [hl] - -.asm_7b7 - pop hl - call Function82b - jr nz, .asm_79b - jp Function833 - -.asm_7c0 - ld a, [rIE] - and $f - cp $8 - jr nz, .asm_79b - ld a, [$cf5d] - dec a - ld [$cf5d], a - jr nz, .asm_79b - ld a, [$cf5e] - dec a - ld [$cf5e], a - jr nz, .asm_79b - ld a, [$ffcb] - cp $1 - jr z, .asm_7e5 - ld a, $ff -.asm_7e2 - dec a - jr nz, .asm_7e2 - -.asm_7e5 - xor a - ld [$ffca], a - ld a, [rIE] - and $f - sub $8 - jr nz, .asm_7f8 - ld [$cf5d], a - ld a, $50 - ld [$cf5e], a - -.asm_7f8 - ld a, [hSerialReceive] - cp $fe - ret nz - call Function82b - jr z, .asm_813 - push hl - ld hl, $cf5c - ld a, [hl] - dec a - ld [hld], a - inc a - jr nz, .asm_80d - dec [hl] - -.asm_80d - pop hl - call Function82b - jr z, Function833 - -.asm_813 - ld a, [rIE] - and $f - cp $8 - ld a, $fe - ret z - ld a, [hl] - ld [hSerialSend], a - call DelayFrame - jp Function78a - -.asm_825 - ld a, $f -.asm_827 - dec a - jr nz, .asm_827 - ret -; 82b - -Function82b: ; 82b - push hl - ld hl, $cf5b - ld a, [hli] - or [hl] - pop hl - ret -; 833 - -Function833: ; 833 - dec a - ld [$cf5b], a - ld [$cf5c], a - ret -; 83b - -Function83b: ; 83b - ld hl, $cf56 - ld de, $cf51 - ld c, $2 - ld a, $1 - ld [$ffcc], a -.asm_847 - call DelayFrame - ld a, [hl] - ld [hSerialSend], a - call Function78a - ld b, a - inc hl - ld a, [$ffcc] - and a - ld a, $0 - ld [$ffcc], a - jr nz, .asm_847 - ld a, b - ld [de], a - inc de - dec c - jr nz, .asm_847 - ret -; 862 - -Function862: ; 862 - call Function309d - callab Function4000 - call Function87d - jp Function30b4 -; 871 - - -Function871: ; 871 - call Function309d - callab Function4000 - jp Function87d -; 87d - - - -Function87d: ; 87d - ld a, $ff - ld [$cf52], a -.asm_882 - call Function8c1 - call DelayFrame - call Function82b - jr z, .asm_89e - push hl - ld hl, $cf5c - dec [hl] - jr nz, .asm_89d - dec hl - dec [hl] - jr nz, .asm_89d - pop hl - xor a - jp Function833 - -.asm_89d - pop hl - -.asm_89e - ld a, [$cf52] - inc a - jr z, .asm_882 - ld b, $a -.asm_8a6 - call DelayFrame - call Function8c1 - dec b - jr nz, .asm_8a6 - ld b, $a -.asm_8b1 - call DelayFrame - call Function908 - dec b - jr nz, .asm_8b1 - ld a, [$cf52] - ld [$cf51], a - ret -; 8c1 - -Function8c1: ; 8c1 - push bc - ld b, $60 - ld a, [InLinkBattle] - cp $1 - jr z, .asm_8d7 - ld b, $60 - jr c, .asm_8d7 - cp $2 - ld b, $70 - jr z, .asm_8d7 - ld b, $80 - -.asm_8d7 - call Function8f3 - ld a, [$cf56] - add b - ld [hSerialSend], a - ld a, [$ffcb] - cp $2 - jr nz, .asm_8ee - ld a, $1 - ld [rSC], a - ld a, $81 - ld [rSC], a - -.asm_8ee - call Function8f3 - pop bc - ret -; 8f3 - -Function8f3: ; 8f3 - ld a, [hSerialReceive] - ld [$cf51], a - and $f0 - cp b - ret nz - xor a - ld [hSerialReceive], a - ld a, [$cf51] - and $f - ld [$cf52], a - ret -; 908 - -Function908: ; 908 - xor a - ld [hSerialSend], a - ld a, [$ffcb] - cp $2 - ret nz - ld a, $1 - ld [rSC], a - ld a, $81 - ld [rSC], a - ret -; 919 - -Function919: ; 919 - ld a, [InLinkBattle] - and a - ret nz - ld a, $2 - ld [rSB], a - xor a - ld [hSerialReceive], a - ld a, $0 - ld [rSC], a - ld a, $80 - ld [rSC], a - ret -; 92e - - diff --git a/common/sine.asm b/common/sine.asm deleted file mode 100644 index 09d06ca89..000000000 --- a/common/sine.asm +++ /dev/null @@ -1,22 +0,0 @@ -Cosine: ; 1b0f -; Return d * cos(a) in hl - add $10 ; 90 degrees - -Sine: ; 1b11 -; Return d * sin(a) in hl -; a is a signed 6-bit value. - - ld e, a - - ld a, [hROMBank] - push af - ld a, BANK(_Sine) - rst Bankswitch - - call _Sine - - pop af - rst Bankswitch - ret -; 1b1e - diff --git a/common/sram.asm b/common/sram.asm deleted file mode 100644 index 3c42e7618..000000000 --- a/common/sram.asm +++ /dev/null @@ -1,34 +0,0 @@ -GetSRAMBank: ; 2fcb -; load sram bank a -; if invalid bank, sram is disabled - cp NUM_SRAM_BANKS - jr c, OpenSRAM - jr CloseSRAM -; 2fd1 - -OpenSRAM: ; 2fd1 -; switch to sram bank a - push af -; latch clock data - ld a, 1 - ld [MBC3LatchClock], a -; enable sram/clock write - ld a, SRAM_ENABLE - ld [MBC3SRamEnable], a -; select sram bank - pop af - ld [MBC3SRamBank], a - ret -; 2fe1 - -CloseSRAM: ; 2fe1 - push af - ld a, SRAM_DISABLE -; reset clock latch for next time - ld [MBC3LatchClock], a -; disable sram/clock write - ld [MBC3SRamEnable], a - pop af - ret -; 2fec - diff --git a/common/string.asm b/common/string.asm deleted file mode 100644 index a871b4d2a..000000000 --- a/common/string.asm +++ /dev/null @@ -1,39 +0,0 @@ -InitString: ; 2ef6 -; Init a string of length c. - push hl - jr _InitString -; 2ef9 - -InitName: ; 2ef9 -; Intended for names, so this function is limited to ten characters. - push hl - ld c, 10 -; 2efc - -_InitString: ; 2efc -; if the string pointed to by hl is empty (defined as "zero or more spaces -; followed by a null"), then initialize it to the string pointed to by de. - push bc -.loop - ld a, [hli] - cp "@" - jr z, .blank - cp " " - jr nz, .notblank - dec c - jr nz, .loop -.blank - pop bc - ld l, e - ld h, d - pop de - ld b, 0 - inc c - call CopyBytes - ret -.notblank - pop bc - pop hl - ret -; 2f17 - diff --git a/common/text.asm b/common/text.asm deleted file mode 100644 index e010de6d4..000000000 --- a/common/text.asm +++ /dev/null @@ -1,1230 +0,0 @@ -ClearBox: ; fb6 -; Fill a c*b box at hl with blank tiles. - - ld a, " " -.y - push bc - push hl -.x - ld [hli], a - dec c - jr nz, .x - pop hl - ld bc, 20 ; screen width - add hl, bc - pop bc - dec b - jr nz, .y - ret -; fc8 - - -ClearTileMap: ; fc8 -; Fill TileMap with blank tiles. - - ld hl, TileMap - ld a, " " - ld bc, 360 ; screen dimensions 20*18 - call ByteFill - -; We aren't done if the LCD is on. - ld a, [rLCDC] - bit 7, a - ret z - jp WaitBGMap -; fdb - - -Functionfdb: ; fdb - ld a, $7 - ld hl, AttrMap - ld bc, $0168 - call ByteFill - jr ClearTileMap -; fe8 - - - -TextBox: ; fe8 -; Draw a text box width c height b at hl -; Dimensions do not include the border. - push bc - push hl - call TextBoxBorder - pop hl - pop bc - jr TextBoxPalette -; ff1 - - -TextBoxBorder: ; ff1 - -; Top - push hl - ld a, "┌" - ld [hli], a - inc a ; "─" - call NPlaceChar - inc a ; "┐" - ld [hl], a - -; Middle - pop hl - ld de, 20 ; screen width - add hl, de -.PlaceRow - push hl - ld a, "│" - ld [hli], a - ld a, " " - call NPlaceChar - ld [hl], "│" - pop hl - ld de, 20 ; screen width - add hl, de - dec b - jr nz, .PlaceRow - -; Bottom - ld a, "└" - ld [hli], a - ld a, "─" - call NPlaceChar - ld [hl], "┘" - - ret -; 101e - - -NPlaceChar: ; 101e -; Place char a c times - ld d,c -.loop - ld [hli],a - dec d - jr nz, .loop - ret -; 1024 - - -TextBoxPalette: ; 1024 -; Fill text box width c height b at hl with pal 7 - ld de, AttrMap - TileMap - add hl, de - inc b - inc b - inc c - inc c - ld a, 7 ; pal -.gotoy - push bc - push hl -.gotox - ld [hli], a - dec c - jr nz, .gotox - pop hl - ld de, 20 ; screen width - add hl, de - pop bc - dec b - jr nz, .gotoy - ret -; 103e - - -SpeechTextBox: ; 103e -; Standard textbox. - hlcoord 0, 12 - ld b, 4 ; height - ld c, 18 ; screen width - 2 (border) - jp TextBox -; 1048 - -UnknownText_0x1048: ; 1048 - db $0, "ゲームフりーク!", $57 -; 1052 - -Function1052: ; 1052 - ld hl, .text_1056 - ret -.text_1056 - db "@" -; 1057 - - -PrintText: ; 1057 - call Function106c -Function105a: ; 105a - push hl - hlcoord 1, 14 - ld bc, 18 + 3<<8 - call ClearBox - pop hl - -PrintTextBoxText: ; 1065 - bccoord 1, 14 - call Function13e5 - ret -; 106c - - -Function106c: ; 106c - push hl - call SpeechTextBox - call Function1ad2 - call Function321c - pop hl - ret -; 1078 - - - -PlaceString: ; 1078 - push hl - -PlaceNextChar: ; 1079 - ld a, [de] - cp "@" - jr nz, CheckDict - ld b, h - ld c, l - pop hl - ret - pop de - -NextChar: ; 1083 - inc de - jp PlaceNextChar - -CheckDict: ; 1087 - cp $15 - jp z, Function117b - cp $4f - jp z, Char4F - cp $4e - jp z, Function12a7 - cp $16 - jp z, Function12b9 - and a - jp z, Function1383 - cp $4c - jp z, $1337 - cp $4b - jp z, Char4B - cp $51 ; Player name - jp z, Function12f2 - cp $49 - jp z, Function1186 - cp $52 ; Mother name - jp z, Function118d - cp $53 - jp z, Function1194 - cp $35 - jp z, Function11e8 - cp $36 - jp z, Function11ef - cp $37 - jp z, Function11f6 - cp $38 - jp z, Function119b - cp $39 - jp z, Function11a2 - cp $54 - jp z, Function11c5 - cp $5b - jp z, Function11b7 - cp $5e - jp z, Function11be - cp $5c - jp z, Function11b0 - cp $5d - jp z, Function11a9 - cp $23 - jp z, Function11cc - cp $22 - jp z, Function12b0 - cp $55 - jp z, Char55 - cp $56 - jp z, Function11d3 - cp $57 - jp z, $137c - cp $58 - jp z, Function135a - cp $4a - jp z, Function11da - cp $24 - jp z, Function11e1 - cp $25 - jp z, NextChar - cp $1f - jr nz, .asm_1122 - ld a, $7f -.asm_1122 - cp $5f - jp z, Char5F - cp $59 - jp z, Function11fd - cp $5a - jp z, Char5D - cp $3f - jp z, $121b - cp $14 - jp z, $1252 - cp $e4 - jr z, .asm_1174 ; 0x113d $35 - cp $e5 - jr z, .asm_1174 ; 0x1141 $31 - jr .asm_114c ; 0x1143 $7 - ld b, a - call Function13c6 - jp NextChar -.asm_114c - cp $60 - jr nc, .asm_1174 ; 0x114e $24 - cp $40 - jr nc, .asm_1165 ; 0x1152 $11 - cp $20 - jr nc, .asm_115c ; 0x1156 $4 - add $80 - jr .asm_115e ; 0x115a $2 -.asm_115c - add $90 -.asm_115e - ld b, $e5 - call Function13c6 - jr .asm_1174 ; 0x1163 $f -.asm_1165 - cp $44 - jr nc, .asm_116d ; 0x1167 $4 - add $59 - jr .asm_116f ; 0x116b $2 -.asm_116d - add $86 -.asm_116f - ld b, $e4 - call Function13c6 -.asm_1174 - ld [hli], a - call PrintLetterDelay - jp NextChar -; 0x117b - - -Function117b: ; 117b - ld c, l - ld b, h - ld a, $5f - ld hl, $7036 - rst FarCall - jp PlaceNextChar -; 1186 - -Function1186: ; 1186 - push de - ld de, MomsName - jp $126a -; 118d - -Function118d: ; 118d - push de - ld de, PlayerName - jp $126a -; 1194 - -Function1194: ; 1194 - push de - ld de, RivalName - jp $126a -; 119b - -Function119b: ; 119b - push de - ld de, RedsName - jp $126a -; 11a2 - -Function11a2: ; 11a2 - push de - ld de, GreensName - jp $126a -; 11a9 - -Function11a9: ; 11a9 - push de - ld de, Char5DText - jp $126a -; 11b0 - -Function11b0: ; 11b0 - push de - ld de, Char5CText - jp $126a -; 11b7 - -Function11b7: ; 11b7 - push de - ld de, Char5BText - jp $126a -; 11be - -Function11be: ; 11be - push de - ld de, Char5EText - jp $126a -; 11c5 - -Function11c5: ; 11c5 - push de - ld de, Char54Text - jp $126a -; 11cc - -Function11cc: ; 11cc - push de - ld de, Char23Text - jp $126a -; 11d3 - -Function11d3: ; 11d3 - push de - ld de, $1292 - jp $126a -; 11da - -Function11da: ; 11da - push de - ld de, Char4AText - jp $126a -; 11e1 - -Function11e1: ; 11e1 - push de - ld de, Char24Text - jp $126a -; 11e8 - -Function11e8: ; 11e8 - push de - ld de, Char37Text - jp $126a -; 11ef - -Function11ef: ; 11ef - push de - ld de, Char37Text - jp $126a -; 11f6 - -Function11f6: ; 11f6 - push de - ld de, Char37Text - jp $126a -; 11fd - - -Function11fd: ; 11fd - ld a, [hBattleTurn] - xor $1 - jr Function1205 -; 1203 - -Char5D: ; 1203 - ld a, [hBattleTurn] -; 1205 - -Function1205: ; 1205 - push de - and a - jr nz, .asm_120e ; 0x1207 $5 - ld de, BattleMonNick - jr .asm_126a ; 0x120c $5c -.asm_120e - ld de, Char5AText ; Enemy - call PlaceString - ld h, b - ld l, c - ld de, EnemyMonNick - jr .asm_126a ; 0x1219 $4f - push de - ld a, [InLinkBattle] - and a - jr nz, .linkbattle - ld a, [TrainerClass] - cp $9 - jr z, .asm_1248 ; 0x1227 $1f - cp $2a - jr z, .asm_1248 ; 0x122b $1b - ld de, $c656 - call PlaceString - ld h, b - ld l, c - ld de, String12a2 - call PlaceString - push bc - ld hl, $5939 - ld a, $e - rst FarCall - pop hl - ld de, StringBuffer1 - jr .asm_126a ; 0x1246 $22 -.asm_1248 - ld de, RivalName - jr .asm_126a ; 0x124b $1d -.linkbattle - ld de, $c656 - jr .asm_126a ; 0x1250 $18 - push de - ld de, PlayerName - call PlaceString - ld h, b - ld l, c - ld a, [PlayerGender] - bit 0, a - ld de, String12a5 - jr z, .asm_126a ; 0x1263 $5 - ld de, String12a6 - jr .asm_126a ; 0x1268 $0 -.asm_126a - call PlaceString - ld h, b - ld l, c - pop de - jp NextChar -; 0x1273 - -Char5CText: ; 1273 - db "TM@" -Char5DText: ; 1276 - db "TRAINER@" -Char5BText: ; 127e - db "PC@" -Char5EText: ; 1281 - db "ROCKET@" -Char54Text: ; 1288 - db "POKé@" -Char23Text: ; 128d - db "こうげき@" -Char56Text:; 1292 - db "……@" -Char5AText: ; 1295 - db "Enemy @" -Char4AText: ; 129c - db $e1, $e2, "@" ; PK MN -Char24Text: ; 129f - db $70, $71, "@" ; PO KE -String12a2: ; 12a2 - db " @" -Char35Text: -Char36Text: -Char37Text: ; 12a4 - db "@" -String12a5: ; 12a5 - db "@" -String12a6: ; 12a6 - db "@" -; 12a7 - -Function12a7: ; 12a7 - pop hl - ld bc, $0028 - add hl, bc - push hl - jp NextChar -; 12b0 - -Function12b0: ; 12b0 - pop hl - ld bc, $0014 - add hl, bc - push hl - jp NextChar -; 12b9 - -Function12b9: ; 12b9 - pop hl - push de - ld bc, $3b60 - add hl, bc - ld de, $ffec - ld c, $1 -.asm_12c4 - ld a, h - and a - jr nz, .asm_12cd - ld a, l - cp $14 - jr c, .asm_12d1 - -.asm_12cd - add hl, de - inc c - jr .asm_12c4 - -.asm_12d1 - ld hl, TileMap - ld de, $0014 - ld a, c -.asm_12d8 - and a - jr z, .asm_12df - add hl, de - dec a - jr .asm_12d8 - -.asm_12df - pop de - inc de - ld a, [de] - ld c, a - ld b, $0 - add hl, bc - push hl - jp NextChar -; 12ea - - -Char4F: ; 12ea - pop hl - hlcoord 1, 16 - push hl - jp NextChar -; 0x12f2 - -Function12f2: ; 12f2 - push de - ld a, [InLinkBattle] - cp $3 - jr z, .asm_1301 - cp $4 - jr z, .asm_1301 - call Function13c7 - -.asm_1301 - call Function13b6 - call Functionaaf - ld hl, $c5b9 - ld bc, $0312 - call ClearBox - call Function13cd - ld c, $14 - call DelayFrames - ld hl, $c5b9 - pop de - jp NextChar -; 131f - - -Char4B: ; 131f - ld a, [InLinkBattle] - or a - jr nz, .asm_1328 - call Function13c7 - -.asm_1328 - call Function13b6 - - push de - call Functionaaf - pop de - - ld a, [InLinkBattle] - or a - call z, Function13cd - - push de - call Function138c - call Function138c - hlcoord 1, 16 - pop de - jp NextChar -; 1345 - - -Char55: ; 1345 - push de - ld de, Text_1354 - ld b, h - ld c, l - call PlaceString - ld h, b - ld l, c - pop de - jp NextChar -; 1354 - -Text_1354: ; 1354 - db $4b, "@" -; 1356 - - -Char5F: ; 1356 -; ends a Pokédex entry - ld [hl], "." - pop hl - ret -; 135a - -Function135a: ; 135a - ld a, [InLinkBattle] - cp $3 - jr z, .asm_1368 - cp $4 - jr z, .asm_1368 - call Function13c7 - -.asm_1368 - call Function13b6 - call Functionaaf - ld a, [InLinkBattle] - cp $3 - jr z, .asm_137c - cp $4 - jr z, .asm_137c - call Function13cd - -.asm_137c - pop hl - ld de, .string_1382 - dec de - ret - -.string_1382 - db "@" -; 1383 - -Function1383: ; 1383 - ld a, $e6 - ld [hli], a - call PrintLetterDelay - jp NextChar -; 138c - -Function138c: ; 138c - ld hl, $c5b9 - ld de, $c5a5 - ld a, $3 -.asm_1394 - push af - ld c, $12 -.asm_1397 - ld a, [hli] - ld [de], a - inc de - dec c - jr nz, .asm_1397 - inc de - inc de - inc hl - inc hl - pop af - dec a - jr nz, .asm_1394 - ld hl, $c5e1 - ld a, $7f - ld bc, $0012 - call ByteFill - ld c, $5 - call DelayFrames - ret -; 13b6 - -Function13b6: ; 13b6 - push bc - ld a, [hOAMUpdate] - push af - ld a, $1 - ld [hOAMUpdate], a - call WaitBGMap - pop af - ld [hOAMUpdate], a - pop bc - ret -; 13c6 - -Function13c6: ; 13c6 - ret -; 13c7 - -Function13c7: ; 13c7 - ld a, $ee - ld [$c606], a - ret -; 13cd - -Function13cd: ; 13cd - ld a, [$c605] - ld [$c606], a - ret -; 13d4 - -Function13d4: ; 13d4 - ld b, a - ld a, [hROMBank] - push af - ld a, b - rst Bankswitch - - call PlaceString - pop af - rst Bankswitch - - ret -; 13e0 - -Function13e0: ; 13e0 - ld hl, $13e4 - ret - -.string_13e4 - db "@" -; 13e5 - - -Function13e5: ; 13e5 - ld a, [$cfcf] - push af - set 1, a - ld [$cfcf], a - call Function13f6 - pop af - ld [$cfcf], a - ret -; 13f6 - -Function13f6: ; 13f6 -.asm_13f6 - ld a, [hli] - cp "@" - ret z - call Function13ff - jr .asm_13f6 -; 13ff - -Function13ff: ; 13ff - push hl - push bc - ld c, a - ld b, 0 - ld hl, TextCommands - add hl, bc - add hl, bc - ld e, [hl] - inc hl - ld d, [hl] - pop bc - pop hl - -; jp de - push de - ret -; 1410 - -TextCommands: ; 1410 - dw Text_00 - dw Text_01 - dw Text_02 - dw Text_03 - dw Text_04 - dw Text_05 - dw Text_06 - dw Text_07 - dw Text_08 - dw Text_09 - dw Text_0A - dw Text_PlaySound ; $0b - dw Text_0C - dw Text_0D - dw Text_PlaySound ; $0e - dw Text_PlaySound ; $0f - dw Text_PlaySound ; $10 - dw Text_PlaySound ; $11 - dw Text_PlaySound ; $12 - dw Text_PlaySound ; $13 - dw Text_14 - dw Text_15 - dw Text_16 -; 143e - -Text_00: ; 143e -; TX -; write text until "@" -; [$00]["...@"] - - ld d, h - ld e, l - ld h, b - ld l, c - call PlaceString - ld h, d - ld l, e - inc hl - ret -; 1449 - -Text_01: ; 1449 -; TX_RAM -; write text from a ram address -; little endian -; [$01][addr] - - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - push hl - ld h, b - ld l, c - call PlaceString - pop hl - ret -; 1455 - -Text_16: ; 1455 -; TX_FAR -; write text from a different bank -; little endian -; [$16][addr][bank] - - ld a, [hROMBank] - push af - - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - ld a, [hli] - - ld [hROMBank], a - ld [MBC3RomBank], a - - push hl - ld h, d - ld l, e - call Function13f6 - pop hl - - pop af - ld [hROMBank], a - ld [MBC3RomBank], a - ret -; 1470 - -Text_02: ; 1470 -; TX_NUM -; write bcdnumber from address, typically ram -; little endian -; [$02][addr][flags] -; flags: see PrintBCDNumber - - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - ld a, [hli] - push hl - ld h, b - ld l, c - ld c, a - call PrintBCDNumber - ld b, h - ld c, l - pop hl - ret -; 1480 - -Text_03: ; 1480 -; TX_MOVE -; move to a new tile -; little endian -; [$03][tileaddr] - - ld a, [hli] - ld [$d0e6], a - ld c, a - ld a, [hli] - ld [$d0e7], a - ld b, a - ret -; 148b - -Text_04: ; 148b -; TX_BOX -; draw a box -; little endian -; [$04][tileaddr][height][width] - - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - ld a, [hli] - ld b, a - ld a, [hli] - ld c, a - push hl - ld h, d - ld l, e - call TextBox - pop hl - ret -; 149b - -Text_05: ; 149b -; TX_LOW -; write text at (1,16) -; [$05] - - bccoord 1, 16 - ret -; 149f - -Text_06:: ; 149f -; TX_WAITBUTTON -; wait for button press -; show arrow -; [06] - - ld a, [InLinkBattle] - cp $3 - jp z, Text_0D - cp $4 - jp z, Text_0D - push hl - call Function13c7 - push bc - call Functionaaf - pop bc - call Function13cd - pop hl - ret -; 14ba - -Text_07: ; 14ba - push hl - call Function13cd - call Function138c - call Function138c - pop hl - bccoord 1, 16 - ret -; 14c9 - -Text_08: ; 14c9 -; TX_ASM - -; rom only? - bit 7, h - jr nz, .asm_14ce - jp [hl] - -.asm_14ce - ld a, "@" - ld [hl], a - ret -; 14d2 - -Text_09: ; 14d2 - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - ld a, [hli] - push hl - ld h, b - ld l, c - ld b, a - and $f - ld c, a - ld a, b - and $f0 - swap a - set 6, a - ld b, a - call PrintNum - ld b, h - ld c, l - pop hl - ret -; 14ed - -Text_0A: ; 14ed - push hl - push bc - call GetJoypadPublic - ld a, [hJoyDown] - and A_BUTTON | B_BUTTON - jr nz, .asm_14fd - ld c, 30 - call DelayFrames - -.asm_14fd - pop bc - pop hl - ret -; 1500 - -Text_PlaySound:: ; 1500 -; chars: -; $0b, $0e, $0f, $10, $11, $12, $13 -; see TextSFX - - push bc - dec hl - ld a, [hli] - ld b, a - push hl - ld hl, TextSFX -.asm_1508 - ld a, [hli] - cp $ff - jr z, .asm_151f - cp b - jr z, .asm_1514 - inc hl - inc hl - jr .asm_1508 - -.asm_1514 - push de - ld e, [hl] - inc hl - ld d, [hl] - call StartSFX - call WaitSFX - pop de - -.asm_151f - pop hl - pop bc - ret -; 1522 - -Function1522: ; 1522 - push de - ld e, [hl] - inc hl - ld d, [hl] - call Function37ce - pop de - pop hl - pop bc - ret -; 152d - -TextSFX: ; 152d - dbw $0b, SFX_DEX_FANFARE_50_79 - dbw $12, SFX_FANFARE - dbw $0e, SFX_DEX_FANFARE_20_49 - dbw $0f, SFX_ITEM - dbw $10, SFX_CAUGHT_MON - dbw $11, SFX_DEX_FANFARE_80_109 - dbw $13, SFX_SLOT_MACHINE_START - db $ff ; end -; 1543 - -Text_0C: ; 1543 - ld a, [hli] - ld d, a - push hl - ld h, b - ld l, c -.asm_1548 - push de - ld a, "…" - ld [hli], a - call GetJoypadPublic - ld a, [hJoyDown] - and A_BUTTON | B_BUTTON - jr nz, .asm_155a - ld c, 10 - call DelayFrames -.asm_155a - pop de - dec d - jr nz, .asm_1548 - ld b, h - ld c, l - pop hl - ret -; 1562 - -Text_0D: ; 1562 -; wait for key down -; display arrow - push hl - push bc - call Functionaaf - pop bc - pop hl - ret -; 156a - -Text_14: ; 156a -; TX_PREDEF -; [$14][id] - - ld a, [hli] - push hl - ld e, a - ld d, 0 - ld hl, $4000 - add hl, de - add hl, de - ld a, $9 - call GetFarHalfword - ld d, h - ld e, l - ld h, b - ld l, c - call PlaceString - pop hl - ret -; 1582 - -Text_15: ; 1582 -; TX_DAY - - call GetWeekday - push hl - push bc - ld c, a - ld b, 0 - ld hl, .Days - add hl, bc - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a - ld d, h - ld e, l - pop hl - call PlaceString - ld h, b - ld l, c - ld de, .Day - call PlaceString - pop hl - ret -; 15a2 - -.Days ; 15a2 - dw .Sun - dw .Mon - dw .Tues - dw .Wednes - dw .Thurs - dw .Fri - dw .Satur - -.Sun db "SUN@" -.Mon db "MON@" -.Tues db "TUES@" -.Wednes db "WEDNES@" -.Thurs db "THURS@" -.Fri db "FRI@" -.Satur db "SATUR@" -.Day db "DAY@" -; 15d8 - diff --git a/common/time.asm b/common/time.asm deleted file mode 100644 index fff52b173..000000000 --- a/common/time.asm +++ /dev/null @@ -1,311 +0,0 @@ -; Functions relating to the timer interrupt and the real-time-clock. - - -AskTimer: ; 591 - push af - ld a, [$ffe9] - and a - jr z, .asm_59a - call Timer - -.asm_59a - pop af - reti -; 59c - - -LatchClock: ; 59c -; latch clock counter data - ld a, 0 - ld [MBC3LatchClock], a - ld a, 1 - ld [MBC3LatchClock], a - ret -; 5a7 - - -UpdateTime: ; 5a7 - call GetClock - call FixDays - call FixTime - callba GetTimeOfDay - ret -; 5b7 - - -GetClock: ; 5b7 -; store clock data in hRTCDayHi-hRTCSeconds - -; enable clock r/w - ld a, SRAM_ENABLE - ld [MBC3SRamEnable], a - -; clock data is 'backwards' in hram - - call LatchClock - ld hl, MBC3SRamBank - ld de, MBC3RTC - - ld [hl], RTC_S - ld a, [de] - and $3f - ld [hRTCSeconds], a - - ld [hl], RTC_M - ld a, [de] - and $3f - ld [hRTCMinutes], a - - ld [hl], RTC_H - ld a, [de] - and $1f - ld [hRTCHours], a - - ld [hl], RTC_DL - ld a, [de] - ld [hRTCDayLo], a - - ld [hl], RTC_DH - ld a, [de] - ld [hRTCDayHi], a - -; unlatch clock / disable clock r/w - call CloseSRAM - ret -; 5e8 - - -FixDays: ; 5e8 -; fix day count -; mod by 140 - -; check if day count > 255 (bit 8 set) - ld a, [hRTCDayHi] ; DH - bit 0, a - jr z, .daylo -; reset dh (bit 8) - res 0, a - ld [hRTCDayHi], a ; DH - -; mod 140 -; mod twice since bit 8 (DH) was set - ld a, [hRTCDayLo] ; DL -.modh - sub 140 - jr nc, .modh -.modl - sub 140 - jr nc, .modl - add 140 - -; update dl - ld [hRTCDayLo], a ; DL - -; unknown output - ld a, $40 ; %1000000 - jr .set - -.daylo -; quit if fewer than 140 days have passed - ld a, [hRTCDayLo] ; DL - cp 140 - jr c, .quit - -; mod 140 -.mod - sub 140 - jr nc, .mod - add 140 - -; update dl - ld [hRTCDayLo], a ; DL - -; unknown output - ld a, $20 ; %100000 - -.set -; update clock with modded day value - push af - call SetClock - pop af - scf - ret - -.quit - xor a - ret -; 61d - - -FixTime: ; 61d -; add ingame time (set at newgame) to current time -; day hr min sec -; store time in CurDay, hHours, hMinutes, hSeconds - -; second - ld a, [hRTCSeconds] ; S - ld c, a - ld a, [StartSecond] - add c - sub 60 - jr nc, .updatesec - add 60 -.updatesec - ld [hSeconds], a - -; minute - ccf ; carry is set, so turn it off - ld a, [hRTCMinutes] ; M - ld c, a - ld a, [StartMinute] - adc c - sub 60 - jr nc, .updatemin - add 60 -.updatemin - ld [hMinutes], a - -; hour - ccf ; carry is set, so turn it off - ld a, [hRTCHours] ; H - ld c, a - ld a, [StartHour] - adc c - sub 24 - jr nc, .updatehr - add 24 -.updatehr - ld [hHours], a - -; day - ccf ; carry is set, so turn it off - ld a, [hRTCDayLo] ; DL - ld c, a - ld a, [StartDay] - adc c - ld [CurDay], a - ret -; 658 - -Function658: ; 658 - xor a - ld [StringBuffer2], a - ld a, $0 - ld [$d089], a - jr .asm_677 - - call UpdateTime - ld a, [hHours] - ld [$d087], a - ld a, [hMinutes] - ld [$d088], a - ld a, [hSeconds] - ld [$d089], a - jr .asm_677 - -.asm_677 - ld a, $5 - ld hl, $40ed - rst FarCall - ret -; 67e - - - -Function67e: ; 67e - call Function685 - call SetClock - ret -; 685 - -Function685: ; 685 - xor a - ld [hRTCSeconds], a - ld [hRTCMinutes], a - ld [hRTCHours], a - ld [hRTCDayLo], a - ld [hRTCDayHi], a - ret -; 691 - - -SetClock: ; 691 -; set clock data from hram - -; enable clock r/w - ld a, SRAM_ENABLE - ld [MBC3SRamEnable], a - -; set clock data -; stored 'backwards' in hram - - call LatchClock - ld hl, MBC3SRamBank - ld de, MBC3RTC - -; seems to be a halt check that got partially commented out -; this block is totally pointless - ld [hl], RTC_DH - ld a, [de] - bit 6, a ; halt - ld [de], a - -; seconds - ld [hl], RTC_S - ld a, [hRTCSeconds] - ld [de], a -; minutes - ld [hl], RTC_M - ld a, [hRTCMinutes] - ld [de], a -; hours - ld [hl], RTC_H - ld a, [hRTCHours] - ld [de], a -; day lo - ld [hl], RTC_DL - ld a, [hRTCDayLo] - ld [de], a -; day hi - ld [hl], RTC_DH - ld a, [hRTCDayHi] - res 6, a ; make sure timer is active - ld [de], a - -; cleanup - call CloseSRAM ; unlatch clock, disable clock r/w - ret -; 6c4 - - -Function6c4: ; 6c4 - xor a - push af - ld a, $0 - call GetSRAMBank - pop af - ld [$ac60], a - call CloseSRAM - ret -; 6d3 - -Function6d3: ; 6d3 - ld hl, $ac60 - push af - ld a, $0 - call GetSRAMBank - pop af - or [hl] - ld [hl], a - call CloseSRAM - ret -; 6e3 - -Function6e3: ; 6e3 - ld a, $0 - call GetSRAMBank - ld a, [$ac60] - call CloseSRAM - ret -; 6ef - diff --git a/common/vblank.asm b/common/vblank.asm deleted file mode 100644 index 71114964e..000000000 --- a/common/vblank.asm +++ /dev/null @@ -1,541 +0,0 @@ -; VBlank is the interrupt responsible for updating VRAM. - -; In Pokemon Crystal, VBlank has been hijacked to act as the -; main loop. After time-sensitive graphics operations have been -; performed, joypad input and sound functions are executed. - -; This prevents the display and audio output from lagging. - - -VBlank: ; 283 - push af - push bc - push de - push hl - -; get vblank type - ld a, [$ff9e] - and $7 - -; get fn pointer - ld e, a - ld d, $0 - ld hl, .VBlanks - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - -; down to business - call _hl_ - -; since this is called once per frame - call GameTimer - - pop hl - pop de - pop bc - pop af - reti -; 2a1 - -.VBlanks ; 2a1 - dw VBlank0 ; 0 - dw VBlank1 ; 1 - dw VBlank2 ; 2 - dw VBlank3 ; 3 - dw VBlank4 ; 4 - dw VBlank5 ; 5 - dw VBlank6 ; 6 - dw VBlank0 ; 7 -; 2b1 - - -VBlank0: ; 2b1 -; normal operation - -; rng -; scx, scy, wy, wx -; bg map buffer -; palettes -; dma transfer -; bg map -; tiles -; oam -; joypad -; sound - -; inc frame counter - ld hl, $ff9b - inc [hl] - -; advance rng - ld a, [rDIV] - ld b, a - ld a, [hRandomAdd] - adc b - ld [hRandomAdd], a - - ld a, [rDIV] - ld b, a - ld a, [hRandomSub] - sbc b - ld [hRandomSub], a - -; save bank - ld a, [hROMBank] ; current bank - ld [$ff8a], a - -; scroll x - ld a, [hSCX] - ld [rSCX], a -; scroll y - ld a, [hSCY] - ld [rSCY], a -; window y - ld a, [hWY] - ld [rWY], a -; window x + 7 - ld a, [hWX] - ld [rWX], a - -; some time management is in order -; only have time for one of these during vblank - -; bg map buffer has priority - call UpdateBGMapBuffer - jr c, .doneframeaction - -; then pals - call UpdatePalsIfCGB - jr c, .doneframeaction - -; dma transfer - call DMATransfer - jr c, .doneframeaction - -; bg map - call UpdateBGMap - -; these have their own timing checks - call Serve2bppRequest - call Serve1bppRequest - call AnimateTileset - -.doneframeaction -; oam update off? - ld a, [hOAMUpdate] - and a - jr nz, .vblankoccurred - -; update oam by dma transfer - call hPushOAM -; @PushOAM: -; ld a, Sprites >> 8 -; ld [rDMA], a -; ld a, $28 -; .loop -; dec a -; jr nz, .loop -; ret - - -; vblank-sensitive operations are done - -.vblankoccurred -; tell other fns vblank happened - xor a - ld [VBlankOccurred], a - -; dec OverworldDelay until 0 - ld a, [OverworldDelay] - and a - jr z, .textdelay - dec a - ld [OverworldDelay], a - -.textdelay -; dec text delay counter until 0 - ld a, [TextDelayFrames] - and a - jr z, .joypad - dec a - ld [TextDelayFrames], a - -.joypad - call Joypad - -; update sound - ld a, BANK(UpdateSound) - rst Bankswitch ; bankswitch - call UpdateSound - ld a, [$ff8a] - rst Bankswitch ; restore bank - -; - ld a, [hSeconds] - ld [$ffe3], a - - ret -; 325 - - -VBlank2: ; 325 -; sound only - -; save bank - ld a, [hROMBank] - ld [$ff8a], a - -; update sound - ld a, BANK(UpdateSound) - rst Bankswitch ; bankswitch - call UpdateSound - -; restore bank - ld a, [$ff8a] - rst Bankswitch - -; tell other fns vblank happened - xor a - ld [VBlankOccurred], a - ret -; 337 - - -VBlank1: ; 337 -; scx, scy -; palettes -; bg map -; tiles -; oam -; sound / lcd stat - -; save bank - ld a, [hROMBank] - ld [$ff8a], a - -; scroll x - ld a, [hSCX] - ld [rSCX], a - -; scroll y - ld a, [hSCY] - ld [rSCY], a - -; time-sensitive fns - call UpdatePals - jr c, .vblankoccurred - -; these have their own timing checks - call UpdateBGMap - call Serve2bppRequest@VBlank -; update oam by dma transfer - call hPushOAM -; @PushOAM: -; ld a, Sprites >> 8 -; ld [rDMA], a -; ld a, $28 -; .loop -; dec a -; jr nz, .loop -; ret - -.vblankoccurred -; tell other fns vblank happened - xor a - ld [VBlankOccurred], a - -; get requested ints - ld a, [rIF] - ld b, a -; discard requested ints - xor a - ld [rIF], a -; enable lcd stat - ld a, %10 ; lcd stat - ld [rIE], a -; rerequest serial int if applicable (still disabled) -; request lcd stat - ld a, b - and %1000 ; serial - or %10 ; lcd stat - ld [rIF], a - - ei -; update sound - ld a, BANK(UpdateSound) - rst Bankswitch ; bankswitch - call UpdateSound -; restore bank - ld a, [$ff8a] - rst Bankswitch - di - -; get requested ints - ld a, [rIF] - ld b, a -; discard requested ints - xor a - ld [rIF], a -; enable ints besides joypad - ld a, %1111 ; serial timer lcdstat vblank - ld [rIE], a -; rerequest ints - ld a, b - ld [rIF], a - ret -; 37f - - -UpdatePals: ; 37f -; update pals for either dmg or cgb - -; check cgb - ld a, [hCGB] - and a - jp nz, UpdateCGBPals - -; update gb pals - ld a, [$cfc7] - ld [rBGP], a - - ld a, [$cfc8] - ld [rOBP0], a - - ld a, [$cfc9] - ld [rOBP1], a - - and a - ret -; 396 - - -VBlank3: ; 396 -; scx, scy -; palettes -; bg map -; tiles -; oam -; sound / lcd stat - -; save bank - ld a, [hROMBank] - ld [$ff8a], a - -; scroll x - ld a, [hSCX] - ld [rSCX], a -; scroll y - ld a, [hSCY] - ld [rSCY], a - -; any pals to update? - ld a, [hCGBPalUpdate] - and a - call nz, ForceUpdateCGBPals - jr c, .vblankoccurred -; else - call UpdateBGMap - call Serve2bppRequest@VBlank - -; update oam by dma transfer - call hPushOAM -; @PushOAM: -; ld a, Sprites >> 8 -; ld [rDMA], a -; ld a, $28 -; .loop -; dec a -; jr nz, .loop -; ret - -.vblankoccurred -; tell other fns vblank happened - xor a - ld [VBlankOccurred], a - -; save int flag - ld a, [rIF] - push af -; reset ints - xor a - ld [rIF], a -; force lcdstat int during sound update - ld a, %10 ; lcd stat - ld [rIE], a - ld [rIF], a - - ei -; update sound - ld a, BANK(UpdateSound) - rst Bankswitch ; bankswitch - call UpdateSound -; restore bank - ld a, [$ff8a] - rst Bankswitch - di - -; request lcdstat - ld a, [rIF] - ld b, a -; and any other ints - pop af - or b - ld b, a -; reset ints - xor a - ld [rIF], a -; enable ints besides joypad - ld a, %1111 ; serial timer lcdstat vblank - ld [rIE], a -; request ints - ld a, b - ld [rIF], a - ret -; 3df - - -VBlank4: ; 3df -; bg map -; tiles -; oam -; joypad -; serial -; sound - -; save bank - ld a, [hROMBank] - ld [$ff8a], a - - call UpdateBGMap - call Serve2bppRequest - -; update oam by dma transfer - call hPushOAM -; @PushOAM: -; ld a, Sprites >> 8 -; ld [rDMA], a -; ld a, $28 -; .loop -; dec a -; jr nz, .loop -; ret - -; update joypad - call Joypad - -; tell other fns vblank happened - xor a - ld [VBlankOccurred], a - -; handshake - call AskSerial - -; update sound - ld a, BANK(UpdateSound) - rst Bankswitch ; bankswitch - call UpdateSound -; restore bank - ld a, [$ff8a] - rst Bankswitch - ret -; 400 - - -VBlank5: ; 400 -; scx -; palettes -; bg map -; tiles -; joypad -; - -; save bank - ld a, [hROMBank] - ld [$ff8a], a - -; scroll x - ld a, [hSCX] - ld [rSCX], a - -; if we can update pals, skip this part - call UpdatePalsIfCGB - jr c, .vblankoccurred - - call UpdateBGMap - call Serve2bppRequest - -.vblankoccurred -; tell other fns vblank happened - xor a - ld [VBlankOccurred], a - -; joypad - call Joypad - -; discard requested ints - xor a - ld [rIF], a -; enable lcd stat - ld a, %10 ; lcd stat - ld [rIE], a -; request lcd stat - ld [rIF], a - - ei -; update sound - ld a, BANK(UpdateSound) - rst Bankswitch ; bankswitch - call UpdateSound -; restore bank - ld a, [$ff8a] - rst Bankswitch - di - -; discard requested ints - xor a - ld [rIF], a -; enable ints besides joypad - ld a, %1111 ; serial timer lcdstat vblank - ld [rIE], a - ret -; 436 - - -VBlank6: ; 436 -; palettes -; tiles -; dma transfer -; sound - -; save bank - ld a, [hROMBank] - ld [$ff8a], a - -; inc frame counter - ld hl, $ff9b - inc [hl] - - call UpdateCGBPals - jr c, .vblankoccurred - - call Serve2bppRequest - call Serve1bppRequest - call DMATransfer - -.vblankoccurred -; tell other fns vblank happened - xor a - ld [VBlankOccurred], a - -; update sound - ld a, BANK(UpdateSound) - rst Bankswitch ; bankswitch - call UpdateSound -; restore bank - ld a, [$ff8a] - rst Bankswitch - ret -; 45a diff --git a/common/video.asm b/common/video.asm deleted file mode 100644 index 0d0aa272d..000000000 --- a/common/video.asm +++ /dev/null @@ -1,487 +0,0 @@ -; Functions dealing with VRAM. - -DMATransfer: ; 15d8 -; Return carry if the transfer is completed. - - ld a, [hDMATransfer] - and a - ret z - -; Start transfer - ld [rHDMA5], a - -; Execution is halted until the transfer is complete. - - xor a - ld [hDMATransfer], a - scf - ret -; 15e3 - - -UpdateBGMapBuffer: ; 15e3 -; Copy [$ffdc] 16x8 tiles from BGMapBuffer -; to bg map addresses in BGMapBufferPtrs. - -; [$ffdc] must be even since this is done in pairs. - -; Return carry on success. - - ld a, [hBGMapUpdate] - and a - ret z - - ld a, [rVBK] - push af - ld [hSPBuffer], sp - - ld hl, BGMapBufferPtrs - ld sp, hl - -; We can now pop the addresses of affected spots on the BG Map - - ld hl, BGMapPalBuffer - ld de, BGMapBuffer - - -.next -; Copy a pair of 16x8 blocks (one 16x16 block) - -rept 2 -; Get our BG Map address - pop bc - -; Palettes - ld a, 1 - ld [rVBK], a - - ld a, [hli] - ld [bc], a - inc c - ld a, [hli] - ld [bc], a - dec c - -; Tiles - ld a, 0 - ld [rVBK], a - - ld a, [de] - inc de - ld [bc], a - inc c - ld a, [de] - inc de - ld [bc], a -endr - -; We've done 2 16x8 blocks - ld a, [$ffdc] - dec a - dec a - ld [$ffdc], a - - jr nz, .next - - - ld a, [hSPBuffer] - ld l, a - ld a, [hSPBuffer + 1] - ld h, a - ld sp, hl - - pop af - ld [rVBK], a - - xor a - ld [hBGMapUpdate], a - scf - ret -; 163a - - -WaitTop: ; 163a -; Wait until the top third of the BG Map is being updated. - - ld a, [hBGMapMode] - and a - ret z - - ld a, [hBGMapThird] - and a - jr z, .done - - call DelayFrame - jr WaitTop - -.done - xor a - ld [hBGMapMode], a - ret -; 164c - - -UpdateBGMap: ; 164c -; Update the BG Map, in thirds, from TileMap and AttrMap. - - ld a, [hBGMapMode] - and a - ret z - -; BG Map 0 - dec a ; 1 - jr z, .Tiles - dec a ; 2 - jr z, .Attr - -; BG Map 1 - dec a - - ld a, [hBGMapAddress] - ld l, a - ld a, [hBGMapAddress + 1] - ld h, a - push hl - - xor a - ld [hBGMapAddress], a - ld a, VBGMap1 >> 8 - ld [hBGMapAddress + 1], a - - ld a, [hBGMapMode] - push af - cp 3 - call z, .Tiles - pop af - cp 4 - call z, .Attr - - pop hl - ld a, l - ld [hBGMapAddress], a - ld a, h - ld [hBGMapAddress + 1], a - ret - - -.Attr - ld a, 1 - ld [rVBK], a - - ld hl, AttrMap - call .update - - ld a, 0 - ld [rVBK], a - ret - - -.Tiles - ld hl, TileMap - - -.update - ld [hSPBuffer], sp - -; Which third? - ld a, [hBGMapThird] - and a ; 0 - jr z, .top - dec a ; 1 - jr z, .middle - ; 2 - - -THIRD_HEIGHT EQU SCREEN_HEIGHT / 3 - - -.bottom - ld de, 2 * THIRD_HEIGHT * SCREEN_WIDTH - add hl, de - ld sp, hl - - ld a, [hBGMapAddress + 1] - ld h, a - ld a, [hBGMapAddress] - ld l, a - - ld de, 2 * THIRD_HEIGHT * BG_MAP_WIDTH - add hl, de - -; Next time: top third - xor a - jr .start - - -.middle - ld de, THIRD_HEIGHT * SCREEN_WIDTH - add hl, de - ld sp, hl - - ld a, [hBGMapAddress + 1] - ld h, a - ld a, [hBGMapAddress] - ld l, a - - ld de, THIRD_HEIGHT * BG_MAP_WIDTH - add hl, de - -; Next time: bottom third - ld a, 2 - jr .start - - -.top - ld sp, hl - - ld a, [hBGMapAddress + 1] - ld h, a - ld a, [hBGMapAddress] - ld l, a - -; Next time: middle third - ld a, 1 - - -.start -; Which third to update next time - ld [hBGMapThird], a - -; Rows of tiles in a third - ld a, SCREEN_HEIGHT / 3 - -; Discrepancy between TileMap and BGMap - ld bc, BG_MAP_WIDTH - (SCREEN_WIDTH - 1) - - -.row -; Copy a row of 20 tiles -rept SCREEN_WIDTH / 2 - 1 - pop de - ld [hl], e - inc l - ld [hl], d - inc l -endr - pop de - ld [hl], e - inc l - ld [hl], d - - add hl, bc - dec a - jr nz, .row - - - ld a, [hSPBuffer] - ld l, a - ld a, [hSPBuffer + 1] - ld h, a - ld sp, hl - ret -; 170a - - -Serve1bppRequest: ; 170a -; Only call during the first fifth of VBlank - - ld a, [Requested1bpp] - and a - ret z - -; Back out if we're too far into VBlank - ld a, [rLY] - cp 144 - ret c - cp 146 - ret nc - -; Copy [Requested1bpp] 1bpp tiles from [Requested1bppSource] to [Requested1bppDest] - - ld [hSPBuffer], sp - -; Source - ld hl, Requested1bppSource - ld a, [hli] - ld h, [hl] - ld l, a - ld sp, hl - -; Destination - ld hl, Requested1bppDest - ld a, [hli] - ld h, [hl] - ld l, a - -; # tiles to copy - ld a, [Requested1bpp] - ld b, a - - xor a - ld [Requested1bpp], a - -.next - -rept 3 - pop de - ld [hl], e - inc l - ld [hl], e - inc l - ld [hl], d - inc l - ld [hl], d - inc l -endr - pop de - ld [hl], e - inc l - ld [hl], e - inc l - ld [hl], d - inc l - ld [hl], d - - inc hl - dec b - jr nz, .next - - - ld a, l - ld [Requested1bppDest], a - ld a, h - ld [Requested1bppDest + 1], a - - ld [Requested1bppSource], sp - - ld a, [hSPBuffer] - ld l, a - ld a, [hSPBuffer + 1] - ld h, a - ld sp, hl - ret -; 1769 - - -Serve2bppRequest: ; 1769 -; Only call during the first fifth of VBlank - - ld a, [Requested2bpp] - and a - ret z - -; Back out if we're too far into VBlank - ld a, [rLY] - cp 144 - ret c - cp 146 - ret nc - jr _Serve2bppRequest - - -Serve2bppRequest@VBlank: ; 1778 - - ld a, [Requested2bpp] - and a - ret z - -_Serve2bppRequest: ; 177d -; Copy [Requested2bpp] 2bpp tiles from [Requested2bppSource] to [Requested2bppDest] - - ld [hSPBuffer], sp - -; Source - ld hl, Requested2bppSource - ld a, [hli] - ld h, [hl] - ld l, a - ld sp, hl - -; Destination - ld hl, Requested2bppDest - ld a, [hli] - ld h, [hl] - ld l, a - -; # tiles to copy - ld a, [Requested2bpp] - ld b, a - - xor a - ld [Requested2bpp], a - -.next - -rept 7 - pop de - ld [hl], e - inc l - ld [hl], d - inc l -endr - pop de - ld [hl], e - inc l - ld [hl], d - - inc hl - dec b - jr nz, .next - - - ld a, l - ld [Requested2bppDest], a - ld a, h - ld [Requested2bppDest + 1], a - - ld [Requested2bppSource], sp - - ld a, [hSPBuffer] - ld l, a - ld a, [hSPBuffer + 1] - ld h, a - ld sp, hl - ret -; 17d3 - - -AnimateTileset: ; 17d3 -; Only call during the first fifth of VBlank - - ld a, [$ffde] - and a - ret z - -; Back out if we're too far into VBlank - ld a, [rLY] - cp 144 - ret c - cp 151 - ret nc - - ld a, [hROMBank] - push af - ld a, BANK(_AnimateTileset) - rst Bankswitch - - ld a, [rSVBK] - push af - ld a, 1 - ld [rSVBK], a - - ld a, [rVBK] - push af - ld a, 0 - ld [rVBK], a - - call _AnimateTileset - - pop af - ld [rVBK], a - pop af - ld [rSVBK], a - pop af - rst Bankswitch - ret -; 17ff - diff --git a/home/copy.asm b/home/copy.asm new file mode 100644 index 000000000..ad25c96e6 --- /dev/null +++ b/home/copy.asm @@ -0,0 +1,431 @@ +; Functions to copy data from ROM. + + +Functiondc9: ; dc9 + ld a, [rLCDC] + bit 7, a + jp z, Copy2bpp + + ld a, [hROMBank] + push af + ld a, BANK(Function104284) + rst Bankswitch + call Function104284 + pop af + rst Bankswitch + + ret +; ddc + +Functionddc: ; ddc + ld a, [rLCDC] + bit 7, a + jp z, Copy1bpp + + ld a, [hROMBank] + push af + ld a, BANK(Function1042b2) + rst Bankswitch + call Function1042b2 + pop af + rst Bankswitch + + ret +; def + +Functiondef: ; def + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + call FarCopyBytesDouble + pop af + rst Bankswitch + ret +; dfd + +Functiondfd: ; dfd + dec c + ld a, [hBGMapMode] + push af + xor a + ld [hBGMapMode], a + ld a, [hROMBank] + push af + ld a, b + rst Bankswitch + +.asm_e09 + ld a, d + ld [rHDMA1], a + ld a, e + and $f0 + ld [rHDMA2], a + ld a, h + and $1f + ld [rHDMA3], a + ld a, l + and $f0 + ld [rHDMA4], a + ld a, c + cp $8 + jr c, .asm_e3c + sub $8 + ld c, a + ld a, $f + ld [hDMATransfer], a + call DelayFrame + ld a, l + add $0 + ld l, a + ld a, h + adc $1 + ld h, a + ld a, e + add $0 + ld e, a + ld a, d + adc $1 + ld d, a + jr .asm_e09 + +.asm_e3c + ld a, c + and $7f + ld [hDMATransfer], a + call DelayFrame + pop af + rst Bankswitch + + pop af + ld [hBGMapMode], a + ret +; e4a + + + +Functione4a: ; e4a + ld a, $5 + ld hl, $4135 + rst FarCall + ret +; e51 + + + +Functione51: ; e51 + ld a, $3e + ld hl, $7449 + rst FarCall + ret +; e58 + +Functione58: ; e58 + ld a, $3e + ld hl, $74be + rst FarCall + ret +; e5f + + + +Functione5f: ; e5f + ld a, $3e + ld hl, $748a + rst FarCall + ld a, $3e + ld hl, $74b0 + rst FarCall + ret +; e6c + +Functione6c: ; e6c + ld a, $3e + ld hl, $74b0 + rst FarCall + ret +; e73 + +Functione73: ; e73 + push de + ld a, $0 + call GetSRAMBank + push bc + ld de, $a000 + ld a, b + call FarDecompress + pop bc + pop hl + ld de, $a000 + call Request2bpp + call CloseSRAM + ret +; e8d + + + +FarCopyBytes: ; e8d +; copy bc bytes from a:hl to de + + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + + call CopyBytes + + pop af + rst Bankswitch + ret +; 0xe9b + + +FarCopyBytesDouble: ; e9b +; Copy bc bytes from a:hl to bc*2 bytes at de, +; doubling each byte in the process. + + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + +; switcheroo, de <> hl + ld a, h + ld h, d + ld d, a + ld a, l + ld l, e + ld e, a + + inc b + inc c + jr .dec + +.loop + ld a, [de] + inc de + ld [hli], a + ld [hli], a +.dec + dec c + jr nz, .loop + dec b + jr nz, .loop + + pop af + rst Bankswitch + ret +; 0xeba + + +Request2bpp: ; eba + ld a, [hBGMapMode] + push af + xor a + ld [hBGMapMode], a + + ld a, [hROMBank] + push af + ld a, b + rst Bankswitch + + ld a, [$ffd3] + push af + + ld a, $8 + ld [$ffd3], a + ld a, [InLinkBattle] + cp $4 + jr nz, .asm_edc + ld a, [$ffe9] + and a + jr nz, .asm_edc + ld a, $6 + ld [$ffd3], a + +.asm_edc + ld a, e + ld [Requested2bppSource], a + ld a, d + ld [Requested2bppSource + 1], a + ld a, l + ld [Requested2bppDest], a + ld a, h + ld [Requested2bppDest + 1], a + +.asm_eec + ld a, c + ld hl, $ffd3 + cp [hl] + jr nc, .asm_f08 + + ld [Requested2bpp], a +.wait + call DelayFrame + ld a, [Requested2bpp] + and a + jr nz, .wait + + pop af + ld [$ffd3], a + + pop af + rst Bankswitch + + pop af + ld [hBGMapMode], a + ret + +.asm_f08 + ld a, [$ffd3] + ld [Requested2bpp], a +.asm_f0d + call DelayFrame + ld a, [Requested2bpp] + and a + jr nz, .asm_f0d + ld a, c + ld hl, $ffd3 + sub [hl] + ld c, a + jr .asm_eec +; f1e + + +Request1bpp: ; f1e + ld a, [hBGMapMode] + push af + xor a + ld [hBGMapMode], a + + ld a, [hROMBank] + push af + ld a, b + rst Bankswitch + + ld a, [$ffd3] + push af + + ld a, $8 + ld [$ffd3], a + ld a, [InLinkBattle] + cp $4 + jr nz, .asm_f40 + ld a, [$ffe9] + and a + jr nz, .asm_f40 + ld a, $6 + ld [$ffd3], a + +.asm_f40 + ld a, e + ld [Requested1bppSource], a + ld a, d + ld [Requested1bppSource + 1], a + ld a, l + ld [Requested1bppDest], a + ld a, h + ld [Requested1bppDest + 1], a +.asm_f50 + ld a, c + ld hl, $ffd3 + cp [hl] + jr nc, .asm_f6c + + ld [Requested1bpp], a +.wait + call DelayFrame + ld a, [Requested1bpp] + and a + jr nz, .wait + + pop af + ld [$ffd3], a + + pop af + rst Bankswitch + + pop af + ld [hBGMapMode], a + ret + +.asm_f6c + ld a, [$ffd3] + ld [Requested1bpp], a +.asm_f71 + call DelayFrame + ld a, [Requested1bpp] + and a + jr nz, .asm_f71 + ld a, c + ld hl, $ffd3 + sub [hl] + ld c, a + jr .asm_f50 +; f82 + + +Get2bpp: ; f82 + ld a, [rLCDC] + bit 7, a + jp nz, Request2bpp + +Copy2bpp: ; f89 +; copy c 2bpp tiles from b:de to hl + + push hl + ld h, d + ld l, e + pop de + +; bank + ld a, b + +; bc = c * $10 + push af + swap c + ld a, $f + and c + ld b, a + ld a, $f0 + and c + ld c, a + pop af + + jp FarCopyBytes +; f9d + + +Get1bpp: ; f9d + ld a, [rLCDC] + bit 7, a + jp nz, Request1bpp + +Copy1bpp: ; fa4 +; copy c 1bpp tiles from b:de to hl + + push de + ld d, h + ld e, l + +; bank + ld a, b + +; bc = c * $10 / 2 + push af + ld h, 0 + ld l, c + add hl, hl + add hl, hl + add hl, hl + ld b, h + ld c, l + pop af + + pop hl + jp FarCopyBytesDouble +; fb6 + diff --git a/home/copy2.asm b/home/copy2.asm new file mode 100644 index 000000000..bdfbe9fdf --- /dev/null +++ b/home/copy2.asm @@ -0,0 +1,134 @@ +CopyBytes: ; 0x3026 +; copy bc bytes from hl to de + inc b ; we bail the moment b hits 0, so include the last run + inc c ; same thing; include last byte + jr .HandleLoop +.CopyByte + ld a, [hli] + ld [de], a + inc de +.HandleLoop + dec c + jr nz, .CopyByte + dec b + jr nz, .CopyByte + ret + +SwapBytes: ; 0x3034 +; swap bc bytes between hl and de +.Loop + ; stash [hl] away on the stack + ld a, [hl] + push af + + ; copy a byte from [de] to [hl] + ld a, [de] + ld [hli], a + + ; retrieve the previous value of [hl]; put it in [de] + pop af + ld [de], a + inc de + + ; handle loop stuff + dec bc + ld a, b + or c + jr nz, .Loop + ret + +ByteFill: ; 0x3041 +; fill bc bytes with the value of a, starting at hl + inc b ; we bail the moment b hits 0, so include the last run + inc c ; same thing; include last byte + jr .HandleLoop +.PutByte + ld [hli], a +.HandleLoop + dec c + jr nz, .PutByte + dec b + jr nz, .PutByte + ret + +GetFarByte: ; 0x304d +; retrieve a single byte from a:hl, and return it in a. + ; bankswitch to new bank + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + + ; get byte from new bank + ld a, [hl] + ld [hBuffer], a + + ; bankswitch to previous bank + pop af + rst Bankswitch + + ; return retrieved value in a + ld a, [hBuffer] + ret + +GetFarHalfword: ; 0x305d +; retrieve a halfword from a:hl, and return it in hl. + ; bankswitch to new bank + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + + ; get halfword from new bank, put it in hl + ld a, [hli] + ld h, [hl] + ld l, a + + ; bankswitch to previous bank and return + pop af + rst Bankswitch + ret +; 0x306b + +FarCopyWRAM: ; 306b + ld [hBuffer], a + ld a, [rSVBK] + push af + ld a, [hBuffer] + ld [rSVBK], a + call CopyBytes + pop af + ld [rSVBK], a + ret +; 307b + +GetFarWRAMByte: ; 307b + ld [hBuffer], a + ld a, [rSVBK] + push af + ld a, [hBuffer] + ld [rSVBK], a + ld a, [hl] + ld [hBuffer], a + pop af + ld [rSVBK], a + ld a, [hBuffer] + ret +; 308d + +GetFarWRAMWord: ; 308d + ld [hBuffer], a + ld a, [rSVBK] + push af + ld a, [hBuffer] + ld [rSVBK], a + ld a, [hli] + ld h, [hl] + ld l, a + pop af + ld [rSVBK], a + ret +; 309d + diff --git a/home/decompress.asm b/home/decompress.asm new file mode 100644 index 000000000..8d39cd968 --- /dev/null +++ b/home/decompress.asm @@ -0,0 +1,367 @@ +FarDecompress: ; b40 +; Decompress graphics data at a:hl to de + +; put a away for a sec + ld [$c2c4], a +; save bank + ld a, [hROMBank] + push af +; bankswitch + ld a, [$c2c4] + rst Bankswitch + +; what we came here for + call Decompress + +; restore bank + pop af + rst Bankswitch + ret +; b50 + + +Decompress: ; b50 +; Pokemon Crystal uses an lz variant for compression. + +; This is mainly used for graphics, but the intro's +; tilemaps also use this compression. + +; This function decompresses lz-compressed data at hl to de. + + +; Basic rundown: + +; A typical control command consists of: +; -the command (bits 5-7) +; -the count (bits 0-4) +; -and any additional params + +; $ff is used as a terminator. + + +; Commands: + +; 0: literal +; literal data for some number of bytes +; 1: iterate +; one byte repeated for some number of bytes +; 2: alternate +; two bytes alternated for some number of bytes +; 3: zero (whitespace) +; 0x00 repeated for some number of bytes + +; Repeater control commands have a signed parameter used to determine the start point. +; Wraparound is simulated: +; Positive values are added to the start address of the decompressed data +; and negative values are subtracted from the current position. + +; 4: repeat +; repeat some number of bytes from decompressed data +; 5: flipped +; repeat some number of flipped bytes from decompressed data +; ex: $ad = %10101101 -> %10110101 = $b5 +; 6: reverse +; repeat some number of bytes in reverse from decompressed data + +; If the value in the count needs to be larger than 5 bits, +; control code 7 can be used to expand the count to 10 bits. + +; A new control command is read in bits 2-4. +; The new 10-bit count is split: +; bits 0-1 contain the top 2 bits +; another byte is added containing the latter 8 + +; So, the structure of the control command becomes: +; 111xxxyy yyyyyyyy +; | | | | +; | | our new count +; | the control command for this count +; 7 (this command) + +; For more information, refer to the code below and in extras/gfx.py . + +; save starting output address + ld a, e + ld [$c2c2], a + ld a, d + ld [$c2c3], a + +.loop +; get next byte + ld a, [hl] +; done? + cp $ff ; end + ret z + +; get control code + and %11100000 + +; 10-bit param? + cp $e0 ; LZ_HI + jr nz, .normal + + +; 10-bit param: + +; get next 3 bits (%00011100) + ld a, [hl] + add a + add a ; << 3 + add a + +; this is our new control code + and %11100000 + push af + +; get param hi + ld a, [hli] + and %00000011 + ld b, a + +; get param lo + ld a, [hli] + ld c, a + +; read at least 1 byte + inc bc + jr .readers + + +.normal +; push control code + push af +; get param + ld a, [hli] + and %00011111 + ld c, a + ld b, $0 +; read at least 1 byte + inc c + +.readers +; let's get started + +; inc loop counts since we bail as soon as they hit 0 + inc b + inc c + +; get control code + pop af +; command type + bit 7, a ; 80, a0, c0 + jr nz, .repeatertype + +; literals + cp $20 ; LZ_ITER + jr z, .iter + cp $40 ; LZ_ALT + jr z, .alt + cp $60 ; LZ_ZERO + jr z, .zero + ; else $00 + +; 00 ; LZ_LIT +; literal data for bc bytes +.loop1 +; done? + dec c + jr nz, .next1 + dec b + jp z, .loop + +.next1 + ld a, [hli] + ld [de], a + inc de + jr .loop1 + + +; 20 ; LZ_ITER +; write byte for bc bytes +.iter + ld a, [hli] + +.iterloop + dec c + jr nz, .iternext + dec b + jp z, .loop + +.iternext + ld [de], a + inc de + jr .iterloop + + +; 40 ; LZ_ALT +; alternate two bytes for bc bytes + +; next pair +.alt +; done? + dec c + jr nz, .alt0 + dec b + jp z, .altclose0 + +; alternate for bc +.alt0 + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .alt1 +; done? + dec b + jp z, .altclose1 +.alt1 + ld a, [hld] + ld [de], a + inc de + jr .alt + +; skip past the bytes we were alternating +.altclose0 + inc hl +.altclose1 + inc hl + jr .loop + + +; 60 ; LZ_ZERO +; write 00 for bc bytes +.zero + xor a + +.zeroloop + dec c + jr nz, .zeronext + dec b + jp z, .loop + +.zeronext + ld [de], a + inc de + jr .zeroloop + + +; repeats +; 80, a0, c0 +; repeat decompressed data from output +.repeatertype + push hl + push af +; get next byte + ld a, [hli] +; absolute? + bit 7, a + jr z, .absolute + +; relative +; a = -a + and %01111111 ; forget the bit we just looked at + cpl +; add de (current output address) + add e + ld l, a + ld a, $ff ; -1 + adc d + ld h, a + jr .repeaters + +.absolute +; get next byte (lo) + ld l, [hl] +; last byte (hi) + ld h, a +; add starting output address + ld a, [$c2c2] + add l + ld l, a + ld a, [$c2c3] + adc h + ld h, a + +.repeaters + pop af + cp $80 ; LZ_REPEAT + jr z, .repeat + cp $a0 ; LZ_FLIP + jr z, .flip + cp $c0 ; LZ_REVERSE + jr z, .reverse + +; e0 -> 80 + +; 80 ; LZ_REPEAT +; repeat some decompressed data +.repeat +; done? + dec c + jr nz, .repeatnext + dec b + jr z, .cleanup + +.repeatnext + ld a, [hli] + ld [de], a + inc de + jr .repeat + + +; a0 ; LZ_FLIP +; repeat some decompressed data w/ flipped bit order +.flip + dec c + jr nz, .flipnext + dec b + jp z, .cleanup + +.flipnext + ld a, [hli] + push bc + ld bc, $0008 + +.fliploop + rra + rl b + dec c + jr nz, .fliploop + ld a, b + pop bc + ld [de], a + inc de + jr .flip + + +; c0 ; LZ_REVERSE +; repeat some decompressed data in reverse +.reverse + dec c + jr nz, .reversenext + + dec b + jp z, .cleanup + +.reversenext + ld a, [hld] + ld [de], a + inc de + jr .reverse + + +.cleanup +; get type of repeat we just used + pop hl +; was it relative or absolute? + bit 7, [hl] + jr nz, .next + +; skip two bytes for absolute + inc hl +; skip one byte for relative +.next + inc hl + jp .loop +; c2f + diff --git a/home/delay.asm b/home/delay.asm new file mode 100644 index 000000000..4e8b2147c --- /dev/null +++ b/home/delay.asm @@ -0,0 +1,23 @@ +DelayFrame: ; 45a +; Wait for one frame + ld a, 1 + ld [VBlankOccurred], a + +; Wait for the next VBlank, halting to conserve battery +.halt + halt ; rgbasm adds a nop after this instruction by default + ld a, [VBlankOccurred] + and a + jr nz, .halt + ret +; 468 + + +DelayFrames: ; 468 +; Wait c frames + call DelayFrame + dec c + jr nz, DelayFrames + ret +; 46f + diff --git a/home/double_speed.asm b/home/double_speed.asm new file mode 100644 index 000000000..fc1234215 --- /dev/null +++ b/home/double_speed.asm @@ -0,0 +1,31 @@ +; The CGB hardware introduces Double Speed Mode. +; While active, the clock speed is doubled. + +; The hardware can switch between normal speed +; and double speed at any time, but LCD output +; collapses during the switch. + +DoubleSpeed: ; 2fef + ld hl, rKEY1 + bit 7, [hl] + jr z, SwitchSpeed + ret +; 2ff7 + +NormalSpeed: ; 2ff7 + ld hl, rKEY1 + bit 7, [hl] + ret z +; 2ffd + +SwitchSpeed: ; 2ffd + set 0, [hl] + xor a + ld [rIF], a + ld [rIE], a + ld a, $30 + ld [rJOYP], a + stop ; rgbasm adds a nop after this instruction by default + ret +; 300b + diff --git a/home/fade.asm b/home/fade.asm new file mode 100644 index 000000000..d67211e29 --- /dev/null +++ b/home/fade.asm @@ -0,0 +1,134 @@ +; Functions to fade the screen in and out. + + +Function48c: ; 48c + ld a, [TimeOfDayPal] + ld b, a + ld hl, IncGradGBPalTable_11 + ld a, l + sub b + ld l, a + jr nc, .asm_499 + dec h + +.asm_499 + ld a, [hli] + ld [rBGP], a + ld a, [hli] + ld [rOBP0], a + ld a, [hli] + ld [rOBP1], a + ret +; 4a3 + + +Function4a3: ; 4a3 + ld a, [hCGB] + and a + jr z, .asm_4af + ld hl, IncGradGBPalTable_00 + ld b, 4 + jr FadeOut + +.asm_4af + ld hl, IncGradGBPalTable_08 + ld b, 4 + jr FadeOut +; 4b6 + +Function4b6: ; 4b6 + ld a, [hCGB] + and a + jr z, .asm_4c2 + ld hl, IncGradGBPalTable_05 + ld b, 3 + jr FadeOut + +.asm_4c2 + ld hl, IncGradGBPalTable_13 + ld b, 3 +; 4c7 + +FadeOut: ; 4c7 + push de + ld a, [hli] + call DmgToCgbBGPals + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + call DmgToCgbObjPals + ld c, 8 + call DelayFrames + pop de + dec b + jr nz, FadeOut + ret +; 4dd + +Function4dd: ; 4dd + ld a, [hCGB] + and a + jr z, .asm_4e9 + ld hl, IncGradGBPalTable_04 - 1 + ld b, 4 + jr FadeIn + +.asm_4e9 + ld hl, IncGradGBPalTable_12 - 1 + ld b, 4 + jr FadeIn +; 4f0 + +Function4f0: ; 4f0 + ld a, [hCGB] + and a + jr z, .asm_4fc + ld hl, IncGradGBPalTable_07 - 1 + ld b, 3 + jr FadeIn + +.asm_4fc + ld hl, IncGradGBPalTable_15 - 1 + ld b, 3 + ; fallthrough +; 501 + +FadeIn: ; 501 + push de + ld a, [hld] + ld d, a + ld a, [hld] + ld e, a + call DmgToCgbObjPals + ld a, [hld] + call DmgToCgbBGPals + ld c, 8 + call DelayFrames + pop de + dec b + jr nz, FadeIn + ret +; 517 + + +; 517 +IncGradGBPalTable_00: db %11111111, %11111111, %11111111 +IncGradGBPalTable_01: db %11111110, %11111110, %11111110 +IncGradGBPalTable_02: db %11111001, %11111001, %11111001 +IncGradGBPalTable_03: db %11100100, %11100100, %11100100 +IncGradGBPalTable_04: db %11100100, %11100100, %11100100 +IncGradGBPalTable_05: db %10010000, %10010000, %10010000 +IncGradGBPalTable_06: db %01000000, %01000000, %01000000 +IncGradGBPalTable_07: db %00000000, %00000000, %00000000 +; bgp obp1 obp2 +IncGradGBPalTable_08: db %11111111, %11111111, %11111111 +IncGradGBPalTable_09: db %11111110, %11111110, %11111000 +IncGradGBPalTable_10: db %11111001, %11100100, %11100100 +IncGradGBPalTable_11: db %11100100, %11010000, %11100000 +IncGradGBPalTable_12: db %11100100, %11010000, %11100000 +IncGradGBPalTable_13: db %10010000, %10000000, %10010000 +IncGradGBPalTable_14: db %01000000, %01000000, %01000000 +IncGradGBPalTable_15: db %00000000, %00000000, %00000000 +; 547 + diff --git a/home/farcall.asm b/home/farcall.asm new file mode 100644 index 000000000..bdee3bf38 --- /dev/null +++ b/home/farcall.asm @@ -0,0 +1,55 @@ +FarCall_de: ; 2d54 +; Call a:de. +; Preserves other registers. + + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + call .de + jr ReturnFarCall + +.de + push de + ret +; 2d63 + + +FarCall_hl: ; 2d63 +; Call a:hl. +; Preserves other registers. + + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + call Function2d82 +; 2d6e + +ReturnFarCall: ; 2d6e +; We want to retain the contents of f. +; To do this, we can pop to bc instead of af. + + ld a, b + ld [$cfb9], a + ld a, c + ld [$cfba], a + +; Restore the working bank. + pop bc + ld a, b + rst Bankswitch + + ld a, [$cfb9] + ld b, a + ld a, [$cfba] + ld c, a + ret +; 2d82 + +Function2d82: ; 2d82 + jp [hl] +; 2d83 + diff --git a/home/flag.asm b/home/flag.asm new file mode 100644 index 000000000..e99248a3e --- /dev/null +++ b/home/flag.asm @@ -0,0 +1,113 @@ +Function2e50: ; 2e50 + xor a + ld hl, EventFlags + ld [hli], a + ret +; 2e56 + +Function2e56: ; 2e56 + xor a + ld hl, BikeFlags + ld [hli], a + ld [hl], a + ret +; 2e5d + +Function2e5d: ; 2e5d + ld a, [$d19a] + cp $2 + jr z, .asm_2e69 + cp $1 + jr z, .asm_2e69 + ret + +.asm_2e69 + ld hl, StatusFlags + res 2, [hl] + ret +; 2e6f + + +EventFlagAction: ; 0x2e6f + ld hl, EventFlags + call FlagAction + ret + +FlagAction: ; 0x2e76 +; Perform action b on bit de in flag array hl. + +; inputs: +; b: function +; 0 clear bit +; 1 set bit +; 2 check bit +; de: bit number +; hl: index within bit table + + ; get index within the byte + ld a, e + and 7 + + ; shift de right by three bits (get the index within memory) + srl d + rr e + srl d + rr e + srl d + rr e + add hl, de + + ; implement a decoder + ld c, 1 + rrca + jr nc, .one + rlc c +.one + rrca + jr nc, .two + rlc c + rlc c +.two + rrca + jr nc, .three + swap c +.three + + ; check b's value: 0, 1, 2 + ld a, b + cp 1 + jr c, .clearbit ; 0 + jr z, .setbit ; 1 + + ; check bit + ld a, [hl] + and c + ld c, a + ret + +.setbit + ; set bit + ld a, [hl] + or c + ld [hl], a + ret + +.clearbit + ; clear bit + ld a, c + cpl + and [hl] + ld [hl], a + ret +; 0x2ead + + +Function2ead: ; 2ead + ld de, ENGINE_POKEDEX + ld b, CHECK_FLAG + callba EngineFlagAction + ld a, c + and a + ret +; 2ebb + diff --git a/home/game_time.asm b/home/game_time.asm new file mode 100644 index 000000000..ee52488f4 --- /dev/null +++ b/home/game_time.asm @@ -0,0 +1,132 @@ +ResetGameTime: ; 208a + xor a + ld [GameTimeCap], a + ld [GameTimeHours], a + ld [GameTimeHours + 1], a + ld [GameTimeMinutes], a + ld [GameTimeSeconds], a + ld [GameTimeFrames], a + ret +; 209e + + +GameTimer: ; 209e + + nop + + ld a, [rSVBK] + push af + ld a, 1 + ld [rSVBK], a + + call UpdateGameTimer + + pop af + ld [rSVBK], a + ret +; 20ad + + +UpdateGameTimer: ; 20ad +; Increment the game timer by one frame. +; The game timer is capped at 999:59:59.00. + + +; Don't update if game logic is paused. + ld a, [$c2cd] + and a + ret nz + +; Is the timer paused? + ld hl, GameTimerPause + bit 0, [hl] + ret z + +; Is the timer already capped? + ld hl, GameTimeCap + bit 0, [hl] + ret nz + + +; +1 frame + ld hl, GameTimeFrames + ld a, [hl] + inc a + + cp 60 ; frames/second + jr nc, .second + + ld [hl], a + ret + + +.second + xor a + ld [hl], a + +; +1 second + ld hl, GameTimeSeconds + ld a, [hl] + inc a + + cp 60 ; seconds/minute + jr nc, .minute + + ld [hl], a + ret + + +.minute + xor a + ld [hl], a + +; +1 minute + ld hl, GameTimeMinutes + ld a, [hl] + inc a + + cp 60 ; minutes/hour + jr nc, .hour + + ld [hl], a + ret + + +.hour + xor a + ld [hl], a + +; +1 hour + ld a, [GameTimeHours] + ld h, a + ld a, [GameTimeHours + 1] + ld l, a + inc hl + + +; Cap the timer after 1000 hours. + ld a, h + cp 1000 / $100 + jr c, .ok + + ld a, l + cp 1000 % $100 + jr c, .ok + + ld hl, GameTimeCap + set 0, [hl] + + ld a, 59 ; 999:59:59.00 + ld [GameTimeMinutes], a + ld [GameTimeSeconds], a + ret + + +.ok + ld a, h + ld [GameTimeHours], a + ld a, l + ld [GameTimeHours + 1], a + ret +; 210f + diff --git a/home/handshake.asm b/home/handshake.asm new file mode 100644 index 000000000..8ed1473e4 --- /dev/null +++ b/home/handshake.asm @@ -0,0 +1,38 @@ +AskSerial: ; 2063 +; send out a handshake while serial int is off + ld a, [$c2d4] + bit 0, a + ret z + + ld a, [$c2d5] + and a + ret nz + +; once every 6 frames + ld hl, $ca8a + inc [hl] + ld a, [hl] + cp 6 + ret c + + xor a + ld [hl], a + + ld a, $c + ld [$c2d5], a + +; handshake + ld a, $88 + ld [rSB], a + +; switch to internal clock + ld a, %00000001 + ld [rSC], a + +; start transfer + ld a, %10000001 + ld [rSC], a + + ret +; 208a + diff --git a/home/init.asm b/home/init.asm new file mode 100644 index 000000000..ead75975c --- /dev/null +++ b/home/init.asm @@ -0,0 +1,225 @@ +Reset: ; 150 + di + call CleanSoundRestart + xor a + ld [$ffde], a + call ClearPalettes + xor a + ld [rIF], a + ld a, 1 ; VBlank int + ld [rIE], a + ei + + ld hl, $cfbe + set 7, [hl] + + ld c, 32 + call DelayFrames + + jr Init +; 16e + + +_Start: ; 16e + cp $11 + jr z, .asm_175 + xor a + jr .asm_177 + +.asm_175 + ld a, $1 + +.asm_177 + ld [hCGB], a + ld a, $1 + ld [$ffea], a +; 17d + + +Init: ; 17d + + di + + xor a + ld [rIF], a + ld [rIE], a + ld [rRP], a + ld [rSCX], a + ld [rSCY], a + ld [rSB], a + ld [rSC], a + ld [rWX], a + ld [rWY], a + ld [rBGP], a + ld [rOBP0], a + ld [rOBP1], a + ld [rTMA], a + ld [rTAC], a + ld [$d000], a + + ld a, %100 ; Start timer at 4096Hz + ld [rTAC], a + +.wait + ld a, [rLY] + cp 145 + jr nz, .wait + + xor a + ld [rLCDC], a + +; Clear WRAM bank 0 + ld hl, $c000 + ld bc, $d000 - $c000 +.asm_1b1 + ld [hl], 0 + inc hl + dec bc + ld a, b + or c + jr nz, .asm_1b1 + + ld sp, Stack + +; Clear HRAM + ld a, [hCGB] + push af + ld a, [$ffea] + push af + xor a + ld hl, $ff80 + ld bc, $ffff - $ff80 + call ByteFill + pop af + ld [$ffea], a + pop af + ld [hCGB], a + + call ClearWRAM + ld a, 1 + ld [rSVBK], a + call ClearVRAM + call ClearSprites + call Function270 + + + ld a, BANK(LoadPushOAM) + rst Bankswitch + + call LoadPushOAM + + xor a + ld [$ffde], a + ld [hSCX], a + ld [hSCY], a + ld [rJOYP], a + + ld a, $8 ; HBlank int enable + ld [rSTAT], a + + ld a, $90 + ld [hWY], a + ld [rWY], a + + ld a, 7 + ld [hWX], a + ld [rWX], a + + ld a, %11100011 + ; LCD on + ; Win tilemap 1 + ; Win on + ; BG/Win tiledata 0 + ; BG Tilemap 0 + ; OBJ 8x8 + ; OBJ on + ; BG on + ld [rLCDC], a + + ld a, $ff + ld [$ffcb], a + + callba Function9890 + + ld a, $9c + ld [$ffd7], a + + xor a + ld [hBGMapAddress], a + + callba StartClock + + xor a + ld [MBC3LatchClock], a + ld [MBC3SRamEnable], a + + ld a, [hCGB] + and a + jr z, .asm_22b + call NormalSpeed +.asm_22b + + xor a + ld [rIF], a + ld a, %1111 ; VBlank, LCDStat, Timer, Serial interrupts + ld [rIE], a + ei + + call DelayFrame + + ld a, $30 + call Predef + + call CleanSoundRestart + xor a + ld [CurMusic], a + jp GameInit +; 245 + + +ClearVRAM: ; 245 +; Wipe VRAM banks 0 and 1 + + ld a, 1 + ld [rVBK], a + call .clear + + xor a + ld [rVBK], a +.clear + ld hl, VTiles0 + ld bc, $2000 + xor a + call ByteFill + ret +; 25a + +ClearWRAM: ; 25a +; Wipe swappable WRAM banks (1-7) + + ld a, 1 +.asm_25c + push af + ld [rSVBK], a + xor a + ld hl, $d000 + ld bc, $1000 + call ByteFill + pop af + inc a + cp 8 + jr nc, .asm_25c + ret +; 270 + +Function270: ; 270 + ld a, $0 + call GetSRAMBank + ld hl, $a000 + ld bc, $0020 + xor a + call ByteFill + call CloseSRAM + ret +; 283 + diff --git a/home/item.asm b/home/item.asm new file mode 100644 index 000000000..0906a19f6 --- /dev/null +++ b/home/item.asm @@ -0,0 +1,76 @@ +DoItemEffect: ; 2f3f + callba _DoItemEffect + ret +; 2f46 + +CheckTossableItem: ; 2f46 + push hl + push de + push bc + callba _CheckTossableItem + pop bc + pop de + pop hl + ret +; 2f53 + +TossItem: ; 2f53 + push hl + push de + push bc + ld a, [hROMBank] + push af + ld a, BANK(_TossItem) + rst Bankswitch + + call _TossItem + + pop bc + ld a, b + rst Bankswitch + pop bc + pop de + pop hl + ret +; 2f66 + +ReceiveItem: ; 2f66 + push bc + ld a, [hROMBank] + push af + ld a, BANK(_ReceiveItem) + rst Bankswitch + push hl + push de + + call _ReceiveItem + + pop de + pop hl + pop bc + ld a, b + rst Bankswitch + pop bc + ret +; 2f79 + +CheckItem: ; 2f79 + push hl + push de + push bc + ld a, [hROMBank] + push af + ld a, BANK(_CheckItem) + rst Bankswitch + + call _CheckItem + + pop bc + ld a, b + rst Bankswitch + pop bc + pop de + pop hl + ret +; 2f8c + diff --git a/home/joypad.asm b/home/joypad.asm new file mode 100644 index 000000000..198e1c47b --- /dev/null +++ b/home/joypad.asm @@ -0,0 +1,491 @@ +JoypadInt: ; 92e +; Replaced by Joypad, called from VBlank instead of the useless +; joypad interrupt. + +; This is a placeholder in case the interrupt is somehow enabled. + reti +; 92f + +ClearJoypadPublic: ; 92f + xor a +; Pressed this frame (delta) + ld [hJoyPressed], a +; Currently pressed + ld [hJoyDown], a + ret +; 935 + +Joypad: ; 935 +; Read the joypad register and translate it to something more +; workable for use in-game. There are 8 buttons, so we can use +; one byte to contain all player input. + +; Updates: + +; hJoypadReleased: released this frame (delta) +; hJoypadPressed: pressed this frame (delta) +; hJoypadDown: currently pressed +; hJoypadSum: pressed so far + +; Any of these three bits can be used to disable input. + ld a, [$cfbe] + and %11010000 + ret nz + +; If we're saving, input is disabled. + ld a, [$c2cd] + and a + ret nz + +; We can only get four inputs at a time. +; We take d-pad first for no particular reason. + ld a, D_PAD + ld [rJOYP], a +; Read twice to give the request time to take. + ld a, [rJOYP] + ld a, [rJOYP] + +; The Joypad register output is in the lo nybble (inversed). +; We make the hi nybble of our new container d-pad input. + cpl + and $f + swap a + +; We'll keep this in b for now. + ld b, a + +; Buttons make 8 total inputs (A, B, Select, Start). +; We can fit this into one byte. + ld a, BUTTONS + ld [rJOYP], a +; Wait for input to stabilize. + ld a, [rJOYP] + ld a, [rJOYP] + ld a, [rJOYP] + ld a, [rJOYP] + ld a, [rJOYP] + ld a, [rJOYP] +; Buttons take the lo nybble. + cpl + and $f + or b + ld b, a + +; Reset the joypad register since we're done with it. + ld a, $30 + ld [rJOYP], a + +; To get the delta we xor the last frame's input with the new one. + ld a, [hJoypadDown] ; last frame + ld e, a + xor b + ld d, a +; Released this frame: + and e + ld [hJoypadReleased], a +; Pressed this frame: + ld a, d + and b + ld [hJoypadPressed], a + +; Add any new presses to the list of collective presses: + ld c, a + ld a, [hJoypadSum] + or c + ld [hJoypadSum], a + +; Currently pressed: + ld a, b + ld [hJoypadDown], a + +; Now that we have the input, we can do stuff with it. + +; For example, soft reset: + and A_BUTTON | B_BUTTON | SELECT | START + cp A_BUTTON | B_BUTTON | SELECT | START + jp z, Reset + + ret +; 984 + + +GetJoypadPublic: ; 984 +; Update mirror joypad input from hJoypadDown (real input) + +; hJoyReleased: released this frame (delta) +; hJoyPressed: pressed this frame (delta) +; hJoyDown: currently pressed + +; bit 0 A +; 1 B +; 2 SELECT +; 3 START +; 4 RIGHT +; 5 LEFT +; 6 UP +; 7 DOWN + + push af + push hl + push de + push bc + +; The player input can be automated using an input stream. +; See more below. + ld a, [InputType] + cp a, AUTO_INPUT + jr z, .auto + +; To get deltas, take this and last frame's input. + ld a, [hJoypadDown] ; real input + ld b, a + ld a, [hJoyDown] ; last frame mirror + ld e, a + +; Released this frame: + xor b + ld d, a + and e + ld [hJoyReleased], a + +; Pressed this frame: + ld a, d + and b + ld [hJoyPressed], a + +; It looks like the collective presses got commented out here. + ld c, a + +; Currently pressed: + ld a, b + ld [hJoyDown], a ; frame input + +.quit + pop bc + pop de + pop hl + pop af + ret + +.auto +; Use a predetermined input stream (used in the catching tutorial). + +; Stream format: [input][duration] +; A value of $ff will immediately end the stream. + +; Read from the input stream. + ld a, [hROMBank] + push af + ld a, [AutoInputBank] + rst Bankswitch + + ld hl, AutoInputAddress + ld a, [hli] + ld h, [hl] + ld l, a + +; We only update when the input duration has expired. + ld a, [AutoInputLength] + and a + jr z, .updateauto + +; Until then, don't change anything. + dec a + ld [AutoInputLength], a + pop af + rst Bankswitch + jr .quit + + +.updateauto +; An input of $ff will end the stream. + ld a, [hli] + cp a, $ff + jr z, .stopauto + ld b, a + +; A duration of $ff will end the stream indefinitely. + ld a, [hli] + ld [AutoInputLength], a + cp a, $ff + jr nz, .next + +; The current input is overwritten. + dec hl + dec hl + ld b, NO_INPUT + jr .finishauto + +.next +; On to the next input... + ld a, l + ld [AutoInputAddress], a + ld a, h + ld [AutoInputAddress+1], a + jr .finishauto + +.stopauto + call StopAutoInput + ld b, NO_INPUT + +.finishauto + pop af + rst Bankswitch + ld a, b + ld [hJoyPressed], a ; pressed + ld [hJoyDown], a ; input + jr .quit +; 9ee + + +StartAutoInput: ; 9ee +; Start reading automated input stream at a:hl. + + ld [AutoInputBank], a + ld a, l + ld [AutoInputAddress], a + ld a, h + ld [AutoInputAddress+1], a +; Start reading the stream immediately. + xor a + ld [AutoInputLength], a +; Reset input mirrors. + xor a + ld [hJoyPressed], a ; pressed this frame + ld [hJoyReleased], a ; released this frame + ld [hJoyDown], a ; currently pressed + + ld a, AUTO_INPUT + ld [InputType], a + ret +; a0a + + +StopAutoInput: ; a0a +; Clear variables related to automated input. + xor a + ld [AutoInputBank], a + ld [AutoInputAddress], a + ld [AutoInputAddress+1], a + ld [AutoInputLength], a +; Back to normal input. + ld [InputType], a + ret +; a1b + + +Functiona1b: ; a1b + + call DelayFrame + + push bc + call Functiona57 + pop bc + + ld a, [hJoyDown] + cp D_UP | SELECT | B_BUTTON + jr z, .asm_a34 + + ld a, [$ffa9] + and START | A_BUTTON + jr nz, .asm_a34 + + dec c + jr nz, Functiona1b + + and a + ret + +.asm_a34 + scf + ret +; a36 + + +Functiona36: ; a36 + call DelayFrame + call GetJoypadPublic + ld a, [hJoyPressed] + and A_BUTTON | B_BUTTON + ret nz + call RTC + jr Functiona36 +; a46 + +Functiona46: ; a46 + ld a, [hOAMUpdate] + push af + ld a, 1 + ld [hOAMUpdate], a + call WaitBGMap + call Functiona36 + pop af + ld [hOAMUpdate], a + ret +; a57 + +Functiona57: ; a57 + call GetJoypadPublic + ld a, [$ffaa] + and a + ld a, [hJoyPressed] + jr z, .asm_a63 + ld a, [hJoyDown] +.asm_a63 + ld [$ffa9], a + ld a, [hJoyPressed] + and a + jr z, .asm_a70 + ld a, 15 + ld [TextDelayFrames], a + ret + +.asm_a70 + ld a, [TextDelayFrames] + and a + jr z, .asm_a7a + xor a + ld [$ffa9], a + ret + +.asm_a7a + ld a, 5 + ld [TextDelayFrames], a + ret +; a80 + +Functiona80: ; a80 + ld a, [$ffaf] + push af + ld a, [$ffb0] + push af + xor a + ld [$ffaf], a + ld a, $6 + ld [$ffb0], a +.asm_a8d + push hl + ld hl, $c606 + call Functionb06 + pop hl + call Functiona57 + ld a, [$ffa9] + and $3 + jr z, .asm_a8d + pop af + ld [$ffb0], a + pop af + ld [$ffaf], a + ret +; aa5 + +Functionaa5: ; aa5 + call Functiona57 + ld a, [$ffa9] + and A_BUTTON | B_BUTTON + jr z, Functionaa5 + ret +; aaf + +Functionaaf: ; aaf + ld a, [InLinkBattle] + and a + jr nz, .asm_ac1 + call Functionac6 + push de + ld de, SFX_READ_TEXT_2 + call StartSFX + pop de + ret + +.asm_ac1 + ld c, 65 + jp DelayFrames +; ac6 + +Functionac6: ; ac6 + ld a, [hOAMUpdate] + push af + ld a, $1 + ld [hOAMUpdate], a + ld a, [InputType] + or a + jr z, .asm_ad9 + callba Function1de28a +.asm_ad9 + call Functionaf5 + call Functiona57 + ld a, [hJoyPressed] + and $3 + jr nz, .asm_af1 + call RTC + ld a, $1 + ld [hBGMapMode], a + call DelayFrame + jr .asm_ad9 + +.asm_af1 + pop af + ld [hOAMUpdate], a + ret +; af5 + +Functionaf5: ; af5 + ld a, [$ff9b] + and $10 + jr z, .asm_aff + ld a, $ee + jr .asm_b02 + +.asm_aff + ld a, [$c605] + +.asm_b02 + ld [$c606], a + ret +; b06 + +Functionb06: ; b06 + push bc + ld a, [hl] + ld b, a + ld a, $ee + cp b + pop bc + jr nz, .asm_b27 + ld a, [$ffaf] + dec a + ld [$ffaf], a + ret nz + ld a, [$ffb0] + dec a + ld [$ffb0], a + ret nz + ld a, $7a + ld [hl], a + ld a, $ff + ld [$ffaf], a + ld a, $6 + ld [$ffb0], a + ret + +.asm_b27 + ld a, [$ffaf] + and a + ret z + dec a + ld [$ffaf], a + ret nz + dec a + ld [$ffaf], a + ld a, [$ffb0] + dec a + ld [$ffb0], a + ret nz + ld a, $6 + ld [$ffb0], a + ld a, $ee + ld [hl], a + ret +; b40 + diff --git a/home/lcd.asm b/home/lcd.asm new file mode 100644 index 000000000..9c86eaa5c --- /dev/null +++ b/home/lcd.asm @@ -0,0 +1,81 @@ +; LCD handling + + +Function547: ; 547 + ld a, [hLCDStatCustom] + cp rSCX & $ff + ret nz + ld c, a + ld a, [LYOverrides] + ld [$ff00+c], a + ret +; 552 + + +LCD: ; 552 + push af + ld a, [hLCDStatCustom] + and a + jr z, .done + +; At this point it's assumed we're in WRAM bank 5! + push bc + ld a, [rLY] + ld c, a + ld b, LYOverrides >> 8 + ld a, [bc] + ld b, a + ld a, [hLCDStatCustom] + ld c, a + ld a, b + ld [$ff00+c], a + pop bc + +.done + pop af + reti +; 568 + + +DisableLCD: ; 568 +; Turn the LCD off + +; Don't need to do anything if the LCD is already off + ld a, [rLCDC] + bit 7, a ; lcd enable + ret z + + xor a + ld [rIF], a + ld a, [rIE] + ld b, a + +; Disable VBlank + res 0, a ; vblank + ld [rIE], a + +.wait +; Wait until VBlank would normally happen + ld a, [rLY] + cp 145 + jr nz, .wait + + ld a, [rLCDC] + and %01111111 ; lcd enable off + ld [rLCDC], a + + xor a + ld [rIF], a + ld a, b + ld [rIE], a + ret +; 58a + + +EnableLCD: ; 58a + ld a, [rLCDC] + set 7, a ; lcd enable + ld [rLCDC], a + ret +; 591 + diff --git a/home/map.asm b/home/map.asm new file mode 100644 index 000000000..d4cfe1be9 --- /dev/null +++ b/home/map.asm @@ -0,0 +1,2369 @@ +; Functions dealing with rendering and interacting with maps. + +Function210f: ; 210f + ld hl, $c7e8 + ld bc, $0018 + ld a, $0 + call ByteFill + ret +; 211b + +Function211b: ; 211b + push hl + ld hl, $dbf7 + ld a, [hli] + ld h, [hl] + ld l, a + or h + ld a, [hl] + jr nz, .asm_2128 + ld a, $ff + +.asm_2128 + pop hl + ret +; 212a + +Function212a: ; 212a + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a + xor a + ld [$dbf7], a + ld [$dbf8], a + call Function2147 + ret c + ld a, e + ld [$dbf7], a + ld a, d + ld [$dbf8], a + xor a + ret +; 2147 + +Function2147: ; 2147 + push bc + ld a, [hROMBank] + push af + ld a, $13 + rst Bankswitch + + ld hl, $501e +.asm_2151 + push hl + ld a, [hli] + cp $ff + jr z, .asm_2167 + cp b + jr nz, .asm_2160 + ld a, [hli] + cp c + jr nz, .asm_2160 + jr .asm_216a + +.asm_2160 + pop hl + ld de, $0004 + add hl, de + jr .asm_2151 + +.asm_2167 + scf + jr .asm_216d + +.asm_216a + ld e, [hl] + inc hl + ld d, [hl] + +.asm_216d + pop hl + pop bc + ld a, b + rst Bankswitch + + pop bc + ret +; 2173 + +Function2173: ; 2173 + call Function217a + call Functiondb1 + ret +; 217a + +Function217a: ; 217a + ld a, [hROMBank] + push af + ld a, [TilesetBlocksBank] + rst Bankswitch + + call Function2198 + ld a, $60 + ld hl, TileMap + ld bc, $0168 + call ByteFill + ld a, $13 + rst Bankswitch + + call $515b + pop af + rst Bankswitch + + ret +; 2198 + +Function2198: ; 2198 + ld a, [$d194] + ld e, a + ld a, [$d195] + ld d, a + ld hl, EnemyMoveAnimation + ld b, $5 + +.asm_21a5 + push de + push hl + ld c, $6 + +.asm_21a9 + push de + push hl + ld a, [de] + and a + jr nz, .asm_21b2 + ld a, [$d19d] + +.asm_21b2 + ld e, l + ld d, h + add a + ld l, a + ld h, $0 + add hl, hl + add hl, hl + add hl, hl + ld a, [TilesetBlocksAddress] + add l + ld l, a + ld a, [TilesetBlocksAddress + 1] + adc h + ld h, a + +rept 3 + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + + ld a, e + add 20 + ld e, a + jr nc, .next\@ + inc d +.next\@ +endr + + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + + pop hl + ld de, $0004 + add hl, de + pop de + inc de + dec c + jp nz, .asm_21a9 + pop hl + ld de, $0060 + add hl, de + pop de + ld a, [$d19f] + add $6 + add e + ld e, a + jr nc, .asm_2225 + inc d + +.asm_2225 + dec b + jp nz, .asm_21a5 + ret +; 222a + +Function222a: ; 222a + ld a, $fa + ld [$ff9f], a + callba Function15363 + xor a + ld [$ff9f], a + ret +; 2238 + +Function2238: ; 2238 + call Function2252 + ret nc + push bc + callba Function149af + pop bc + ret nc + call Function22a7 + scf + ret +; 224a + + + +Function224a: ; 224a + call Function2252 + ret nc + call Function22a7 + ret +; 2252 + +Function2252: ; 2252 + callba Function1499a + ret nc + + ld a, [hROMBank] + push af + + call Function2c52 + call Function2266 + + pop de + ld a, d + rst Bankswitch + ret +; 2266 + +Function2266: ; 2266 + ld a, [MapY] + sub $4 + ld e, a + ld a, [MapX] + sub $4 + ld d, a + ld a, [$dbfb] + and a + ret z + ld c, a + ld hl, $dbfc + ld a, [hli] + ld h, [hl] + ld l, a +.asm_227e + push hl + ld a, [hli] + cp e + jr nz, .asm_2289 + ld a, [hli] + cp d + jr nz, .asm_2289 + jr .asm_2296 + +.asm_2289 + pop hl + ld a, $5 + add l + ld l, a + jr nc, .asm_2291 + inc h + +.asm_2291 + dec c + jr nz, .asm_227e + xor a + ret + +.asm_2296 + pop hl + call Function22a3 + ret nc + ld a, [$dbfb] + inc a + sub c + ld c, a + scf + ret +; 22a3 + +Function22a3: ; 22a3 + inc hl + inc hl + scf + ret +; 22a7 + +Function22a7: ; 22a7 + ld a, [hROMBank] + push af + + call Function2c52 + call Function22b4 + + pop af + rst Bankswitch + scf + ret +; 22b4 + +Function22b4: ; 22b4 + push bc + ld hl, $dbfc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, c + dec a + ld bc, $0005 + call AddNTimes + ld bc, $0002 + add hl, bc + ld a, [hli] + cp $ff + jr nz, .asm_22d0 + ld hl, $dcac + ld a, [hli] + +.asm_22d0 + pop bc + ld [$d146], a + ld a, [hli] + ld [$d147], a + ld a, [hli] + ld [$d148], a + ld a, c + ld [$d149], a + ld a, [MapGroup] + ld [$d14a], a + ld a, [MapNumber] + ld [$d14b], a + scf + ret +; 22ee + + + +CheckOutdoorMap: ; 22ee + cp ROUTE + ret z + cp TOWN + ret +; 22f4 + +CheckIndoorMap: ; 22f4 + cp INDOOR + ret z + cp CAVE + ret z + cp DUNGEON + ret z + cp GATE + ret +; 2300 + +Function2300: ; 2300 + cp INDOOR + ret z + cp GATE + ret z + cp $5 + ret +; 2309 + + +Function2309: ; 2309 + call Function2326 + call Function2c52 + call Function234f + xor a + call Function2336 + ret +; 2317 + +Function2317: ; 2317 + call Function2326 + call Function2c52 + call Function234f + ld a, $1 + call Function2336 + ret +; 2326 + +Function2326: ; 2326 + call Function2c3d + call Function2c1c + call GetSecondaryMapHeaderPointer + call Function235c + call Function2368 + ret +; 2336 + +Function2336: ; 2336 + push af + ld hl, $d1a6 + ld a, [hli] + ld h, [hl] + ld l, a + inc hl + inc hl + call Function23da + call Function23f1 + call Function2408 + pop af + and a + ret nz + call Function241f + ret +; 234f + +Function234f: ; 234f + ld hl, $d1a4 + ld a, [hli] + ld h, [hl] + ld l, a + call Function23ac + call Function23c3 + ret +; 235c + +Function235c: ; 235c + ld de, $d19d + ld c, $c +.asm_2361 + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .asm_2361 + ret +; 2368 + +Function2368: ; 2368 + ld a, $ff + ld [NorthConnectedMapGroup], a + ld [SouthConnectedMapGroup], a + ld [WestConnectedMapGroup], a + ld [EastConnectedMapGroup], a + + ld a, [$d1a8] + ld b, a + + bit 3, b + jr z, .asm_2384 + ld de, NorthMapConnection + call GetMapConnection + +.asm_2384 + bit 2, b + jr z, .asm_238e + ld de, SouthMapConnection + call GetMapConnection + +.asm_238e + bit 1, b + jr z, .asm_2398 + ld de, WestMapConnection + call GetMapConnection + +.asm_2398 + bit 0, b + jr z, .asm_23a2 + ld de, EastMapConnection + call GetMapConnection + +.asm_23a2 + ret +; 23a3 + + +GetMapConnection: ; 23a3 +; Load map connection struct at hl into de. + ld c, SouthMapConnection - NorthMapConnection +.loop + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .loop + ret +; 23ac + + +Function23ac: ; 23ac + ld a, [hli] + ld c, a + ld [$dc07], a + ld a, l + ld [$dc08], a + ld a, h + ld [$dc09], a + ld a, c + and a + ret z + ld bc, $0004 + call AddNTimes + ret +; 23c3 + +Function23c3: ; 23c3 + ld a, [hli] + ld c, a + ld [$dc0a], a + ld a, l + ld [$dc0b], a + ld a, h + ld [$dc0c], a + ld a, c + and a + ret z + ld bc, $0003 + call AddNTimes + ret +; 23da + +Function23da: ; 23da + ld a, [hli] + ld c, a + ld [$dbfb], a + ld a, l + ld [$dbfc], a + ld a, h + ld [$dbfd], a + ld a, c + and a + ret z + ld bc, $0005 + call AddNTimes + ret +; 23f1 + +Function23f1: ; 23f1 + ld a, [hli] + ld c, a + ld [$dbfe], a + ld a, l + ld [$dbff], a + ld a, h + ld [$dc00], a + ld a, c + and a + ret z + ld bc, $0008 + call AddNTimes + ret +; 2408 + +Function2408: ; 2408 + ld a, [hli] + ld c, a + ld [$dc01], a + ld a, l + ld [$dc02], a + ld a, h + ld [$dc03], a + ld a, c + and a + ret z + ld bc, $0005 + call AddNTimes + ret +; 241f + +Function241f: ; 241f + push hl + call Function2471 + pop de + ld hl, $d72e + ld a, [de] + inc de + ld [$dc04], a + ld a, e + ld [$dc05], a + ld a, d + ld [$dc06], a + ld a, [$dc04] + call Function2457 + ld a, [$dc04] + ld c, a + ld a, $10 + sub c + jr z, .asm_2454 + ld bc, $0001 + add hl, bc + ld bc, $0010 +.asm_244a + ld [hl], $0 + inc hl + ld [hl], $ff + dec hl + add hl, bc + dec a + jr nz, .asm_244a + +.asm_2454 + ld h, d + ld l, e + ret +; 2457 + +Function2457: ; 2457 + and a + ret z + ld c, a +.asm_245a + push bc + push hl + ld a, $ff + ld [hli], a + ld b, $d +.asm_2461 + ld a, [de] + inc de + ld [hli], a + dec b + jr nz, .asm_2461 + pop hl + ld bc, $0010 + add hl, bc + pop bc + dec c + jr nz, .asm_245a + ret +; 2471 + +Function2471: ; 2471 + ld hl, $d4fe + ld bc, $01e0 + xor a + call ByteFill + ld hl, $d4fe + ld de, $0028 + ld c, $c + xor a +.asm_2484 + ld [hl], a + add hl, de + dec c + jr nz, .asm_2484 + ret +; 248a + +Function248a: ; 248a + call GetMapEventBank + rst Bankswitch + + ld hl, $d1a6 + ld a, [hli] + ld h, [hl] + ld l, a + inc hl + inc hl + inc hl + ld a, [WarpNumber] + dec a + ld c, a + ld b, $0 + ld a, $5 + call AddNTimes + ld a, [hli] + ld [YCoord], a + ld a, [hli] + ld [XCoord], a + ld a, [hli] + cp $ff + jr nz, .asm_24b3 + call Function24ba + +.asm_24b3 + ld a, $41 + ld hl, $486d + rst FarCall + ret +; 24ba + +Function24ba: ; 24ba + ld a, [$d149] + ld [$dcac], a + ld a, [$d14a] + ld [BackupMapGroup], a + ld a, [$d14b] + ld [BackupMapNumber], a + ret +; 24cd + +Function24cd: ; 24cd + ld hl, OverworldMap + ld bc, $0514 + ld a, $0 + call ByteFill + call Function24e4 + call FillMapConnections + ld a, $1 + call Function263b + ret +; 24e4 + + + +Function24e4: ; 24e4 + ld a, [hROMBank] + push af + ld hl, OverworldMap + ld a, [$d19f] + ld [hConnectedMapWidth], a + add $6 + ld [hConnectionStripLength], a + ld c, a + ld b, $0 + add hl, bc + add hl, bc + add hl, bc + ld c, $3 + add hl, bc + ld a, [$d1a0] + rst Bankswitch + + ld a, [$d1a1] + ld e, a + ld a, [$d1a2] + ld d, a + ld a, [$d19e] + ld b, a +.asm_250c + push hl + ld a, [hConnectedMapWidth] + ld c, a +.asm_2510 + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .asm_2510 + pop hl + ld a, [hConnectionStripLength] + add l + ld l, a + jr nc, .asm_251e + inc h + +.asm_251e + dec b + jr nz, .asm_250c + pop af + rst Bankswitch + + ret +; 2524 + + + +FillMapConnections: ; 2524 + +; North + ld a, [NorthConnectedMapGroup] + cp $ff + jr z, .South + ld b, a + ld a, [NorthConnectedMapNumber] + ld c, a + call GetAnyMapBlockdataBank + + ld a, [NorthConnectionStripPointer] + ld l, a + ld a, [NorthConnectionStripPointer + 1] + ld h, a + ld a, [NorthConnectionStripLocation] + ld e, a + ld a, [NorthConnectionStripLocation + 1] + ld d, a + ld a, [NorthConnectionStripLength] + ld [hConnectionStripLength], a + ld a, [NorthConnectedMapWidth] + ld [hConnectedMapWidth], a + call FillNorthConnectionStrip + +.South + ld a, [SouthConnectedMapGroup] + cp $ff + jr z, .West + ld b, a + ld a, [SouthConnectedMapNumber] + ld c, a + call GetAnyMapBlockdataBank + + ld a, [SouthConnectionStripPointer] + ld l, a + ld a, [SouthConnectionStripPointer + 1] + ld h, a + ld a, [SouthConnectionStripLocation] + ld e, a + ld a, [SouthConnectionStripLocation + 1] + ld d, a + ld a, [SouthConnectionStripLength] + ld [hConnectionStripLength], a + ld a, [SouthConnectedMapWidth] + ld [hConnectedMapWidth], a + call FillSouthConnectionStrip + +.West + ld a, [WestConnectedMapGroup] + cp $ff + jr z, .East + ld b, a + ld a, [WestConnectedMapNumber] + ld c, a + call GetAnyMapBlockdataBank + + ld a, [WestConnectionStripPointer] + ld l, a + ld a, [WestConnectionStripPointer + 1] + ld h, a + ld a, [WestConnectionStripLocation] + ld e, a + ld a, [WestConnectionStripLocation + 1] + ld d, a + ld a, [WestConnectionStripLength] + ld b, a + ld a, [WestConnectedMapWidth] + ld [hConnectionStripLength], a + call FillWestConnectionStrip + +.East + ld a, [EastConnectedMapGroup] + cp $ff + jr z, .Done + ld b, a + ld a, [EastConnectedMapNumber] + ld c, a + call GetAnyMapBlockdataBank + + ld a, [EastConnectionStripPointer] + ld l, a + ld a, [EastConnectionStripPointer + 1] + ld h, a + ld a, [EastConnectionStripLocation] + ld e, a + ld a, [EastConnectionStripLocation + 1] + ld d, a + ld a, [EastConnectionStripLength] + ld b, a + ld a, [EastConnectedMapWidth] + ld [hConnectionStripLength], a + call FillEastConnectionStrip + +.Done + ret +; 25d3 + + +FillNorthConnectionStrip: +FillSouthConnectionStrip: ; 25d3 + + ld c, 3 +.y + push de + + push hl + ld a, [hConnectionStripLength] + ld b, a +.x + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .x + pop hl + + ld a, [hConnectedMapWidth] + ld e, a + ld d, 0 + add hl, de + pop de + + ld a, [$d19f] + add 6 + add e + ld e, a + jr nc, .asm_25f2 + inc d +.asm_25f2 + dec c + jr nz, .y + ret +; 25f6 + + +FillWestConnectionStrip: +FillEastConnectionStrip: ; 25f6 + +.asm_25f6 + ld a, [$d19f] + add 6 + ld [hConnectedMapWidth], a + + push de + + push hl + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + pop hl + + ld a, [hConnectionStripLength] + ld e, a + ld d, 0 + add hl, de + pop de + + ld a, [hConnectedMapWidth] + add e + ld e, a + jr nc, .asm_2617 + inc d +.asm_2617 + dec b + jr nz, .asm_25f6 + ret +; 261b + +Function261b: ; 261b + ld [$d432], a + ret +; 261f + + +CallScript: ; 261f +; Call a script at a:hl. + + ld [ScriptBank], a + ld a, l + ld [ScriptPos], a + ld a, h + ld [ScriptPos + 1], a + + ld a, $ff + ld [ScriptRunning], a + + scf + ret +; 2631 + +Function2631: ; 2631 + ld a, [ScriptRunning] + and a + ret nz + call GetMapEventBank + jr CallScript +; 263b + +Function263b: ; 263b + ld b, a + ld a, [hROMBank] + push af + call Function2c52 + call Function2653 + jr nc, .done + + call GetMapEventBank + ld b, a + ld d, h + ld e, l + call Function2674 + +.done + pop af + rst Bankswitch + ret +; 2653 + +Function2653: ; 2653 + ld a, [$dc0a] + ld c, a + and a + ret z + ld hl, $dc0b + ld a, [hli] + ld h, [hl] + ld l, a + or h + ret z + ld de, $0003 +.asm_2664 + ld a, [hl] + cp b + jr z, .asm_266e + add hl, de + dec c + jr nz, .asm_2664 + xor a + ret + +.asm_266e + inc hl + ld a, [hli] + ld h, [hl] + ld l, a + scf + ret +; 2674 + +Function2674: ; 2674 + callba Unknown_0x974f3 + ld a, [ScriptMode] + push af + ld hl, ScriptFlags + ld a, [hl] + push af + set 1, [hl] + callba Function96c56 + callba ScriptEvents + pop af + ld [ScriptFlags], a + pop af + ld [ScriptMode], a + ret +; 269a + +Function269a: ; 269a + ld a, [hROMBank] + push af + ld a, b + rst Bankswitch + + push hl + call SpeechTextBox + call Function2e31 + ld a, 1 + ld [hOAMUpdate], a + call Function321c + pop hl + call PrintTextBoxText + xor a + ld [hOAMUpdate], a + pop af + rst Bankswitch + + ret +; 26b7 + +Function26b7: ; 26b7 +; Call a:de. + + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + + call .de + + pop af + rst Bankswitch + ret + +.de + push de + ret +; 26c7 + +Function26c7: ; 26c7 + ld a, [hROMBank] + push af + ld a, b + rst Bankswitch + + ld a, c + call Function19e9 + + pop hl + ld a, h + rst Bankswitch + ret +; 26d4 + + +GetScriptByte: ; 0x26d4 +; Return byte at ScriptBank:ScriptPos in a. + + push hl + push bc + ld a, [hROMBank] + push af + ld a, [ScriptBank] + rst Bankswitch + + ld hl, ScriptPos + ld c, [hl] + inc hl + ld b, [hl] + + ld a, [bc] + + inc bc + ld [hl], b + dec hl + ld [hl], c + + ld b, a + pop af + rst Bankswitch + ld a, b + pop bc + pop hl + ret +; 0x26ef + + +ObjectEvent: ; 0x26ef + jumptextfaceplayer ObjectEventText +; 0x26f2 + +ObjectEventText: + TX_FAR _ObjectEventText + db "@" +; 0x26f7 + + +BGEvent: ; 26f7 + jumptext BGEventText +; 26fa + +BGEventText: ; 26fa + text_jump UnknownText_0x1c46fc, BANK(UnknownText_0x1c46fc) + db "@" +; 26ff + + +CoordinatesEvent: ; 26ff + jumptext CoordinatesEventText +; 2702 + +CoordinatesEventText: ; 2702 + text_jump UnknownText_0x1c4706, BANK(UnknownText_0x1c4706) + db "@" +; 2707 + + +Function2707: ; 2707 + ld a, [hConnectionStripLength] + ld e, a + ld d, $0 + ld hl, $d81e + add hl, de + ld a, [hl] + ret +; 2712 + +Function2712: ; 2712 + ld a, [hConnectionStripLength] + ld e, a + ld d, $0 + ld hl, $d81e + add hl, de + ld [hl], $ff + ret +; 271e + +Function271e: ; 271e + ld a, [hConnectionStripLength] + ld e, a + ld d, $0 + ld hl, $d81e + add hl, de + ld [hl], $0 + ret +; 272a + + +Function272a: ; 272a + ld hl, TileMap + ld de, BGMapBuffer + call Function27b7 + ld c, $28 + call Functiondbd + ld a, [$d152] + ld e, a + ld a, [$d153] + ld d, a + call Function27d3 + ld a, $1 + ld [hBGMapUpdate], a + ret +; 2748 + +Function2748: ; 2748 + ld hl, $c5e0 + ld de, BGMapBuffer + call Function27b7 + ld c, $28 + call Functiondbd + ld a, [$d152] + ld l, a + ld a, [$d153] + ld h, a + ld bc, $0200 + add hl, bc + ld a, h + and $3 + or $98 + ld e, l + ld d, a + call Function27d3 + ld a, $1 + ld [hBGMapUpdate], a + ret +; 2771 + +Function2771: ; 2771 + ld hl, TileMap + ld de, BGMapBuffer + call Function27c0 + ld c, $24 + call Functiondbd + ld a, [$d152] + ld e, a + ld a, [$d153] + ld d, a + call Function27f8 + ld a, $1 + ld [hBGMapUpdate], a + ret +; 278f + +Function278f: ; 278f + ld hl, $c4b2 + ld de, BGMapBuffer + call Function27c0 + ld c, $24 + call Functiondbd + ld a, [$d152] + ld e, a + and $e0 + ld b, a + ld a, e + add $12 + and $1f + or b + ld e, a + ld a, [$d153] + ld d, a + call Function27f8 + ld a, $1 + ld [hBGMapUpdate], a + ret +; 27b7 + +Function27b7: ; 27b7 + ld c, $28 +.asm_27b9 + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .asm_27b9 + ret +; 27c0 + +Function27c0: ; 27c0 + ld c, $12 +.asm_27c2 + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + inc de + ld a, $13 + add l + ld l, a + jr nc, .asm_27cf + inc h + +.asm_27cf + dec c + jr nz, .asm_27c2 + ret +; 27d3 + +Function27d3: ; 27d3 + ld hl, BGMapBufferPtrs + push de + call .asm_27df + pop de + ld a, $20 + add e + ld e, a + +.asm_27df + ld c, $a +.asm_27e1 + ld a, e + ld [hli], a + ld a, d + ld [hli], a + ld a, e + inc a + inc a + and $1f + ld b, a + ld a, e + and $e0 + or b + ld e, a + dec c + jr nz, .asm_27e1 + ld a, $14 + ld [$ffdc], a + ret +; 27f8 + +Function27f8: ; 27f8 + ld hl, BGMapBufferPtrs + ld c, $12 +.asm_27fd + ld a, e + ld [hli], a + ld a, d + ld [hli], a + ld a, $20 + add e + ld e, a + jr nc, .asm_280e + inc d + ld a, d + and $3 + or $98 + ld d, a + +.asm_280e + dec c + jr nz, .asm_27fd + ld a, $12 + ld [$ffdc], a + ret +; 2816 + +Function2816: ; 2816 + ld hl, BGMapBuffer + ld bc, $0078 + xor a + call ByteFill + ret +; 2821 + +Function2821: ; 2821 + ld hl, TilesetAddress + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [TilesetBank] + ld e, a + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + ld a, e + ld de, $d000 + call FarDecompress + ld hl, $d000 + ld de, VTiles2 + ld bc, $0600 + call CopyBytes + ld a, [rVBK] + push af + ld a, $1 + ld [rVBK], a + ld hl, $d600 + ld de, VTiles2 + ld bc, $0600 + call CopyBytes + pop af + ld [rVBK], a + pop af + ld [rSVBK], a + ld a, [$d199] + cp $1 + jr z, .asm_286f + cp $2 + jr z, .asm_286f + cp $4 + jr z, .asm_286f + jr .asm_2875 + +.asm_286f + ld a, $7 + ld hl, $4000 + rst FarCall + +.asm_2875 + xor a + ld [hTileAnimFrame], a + ret +; 2879 + +Function2879: ; 2879 + ld hl, $d194 + ld a, [hli] + ld h, [hl] + ld l, a + ld de, $dcb9 + ld c, $5 + ld b, $6 +.asm_2886 + push bc + push hl +.asm_2888 + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .asm_2888 + pop hl + ld a, [$d19f] + add $6 + ld c, a + ld b, $0 + add hl, bc + pop bc + dec c + jr nz, .asm_2886 + ret +; 289d + +Function289d: ; 289d + ld hl, $d194 + ld a, [hli] + ld h, [hl] + ld l, a + ld de, $dcb9 + ld a, [$d19f] + add $6 + ld [hConnectionStripLength], a + ld a, [$d151] + and a + jr z, .asm_28cb + cp $1 + jr z, .asm_28c0 + cp $2 + jr z, .asm_28d4 + cp $3 + jr z, .asm_28da + ret + +.asm_28c0 + ld de, $dcbf + ld a, [hConnectionStripLength] + ld c, a + ld b, $0 + add hl, bc + jr .asm_28ce + +.asm_28cb + ld de, $dcb9 + +.asm_28ce + ld b, $6 + ld c, $4 + jr .asm_28f7 + +.asm_28d4 + ld de, $dcba + inc hl + jr .asm_28dd + +.asm_28da + ld de, $dcb9 + +.asm_28dd + ld b, $5 + ld c, $5 + jr .asm_28f7 + + ld hl, $d194 + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [$d19f] + add $6 + ld [hConnectionStripLength], a + ld de, $dcb9 + ld b, $6 + ld c, $5 + +.asm_28f7 + push bc + push hl + push de +.asm_28fa + ld a, [de] + inc de + ld [hli], a + dec b + jr nz, .asm_28fa + pop de + ld a, e + add $6 + ld e, a + jr nc, .asm_2908 + inc d + +.asm_2908 + pop hl + ld a, [hConnectionStripLength] + ld c, a + ld b, $0 + add hl, bc + pop bc + dec c + jr nz, .asm_28f7 + ret +; 2914 + +Function2914: ; 2914 + xor a + ld [TilePermissions], a + call Function296c + call Function294d + ld a, [MapX] + ld d, a + ld a, [MapY] + ld e, a + call Function2a3c + ld [StandingTile], a + call Function29ff + ret nz + ld a, [StandingTile] + and 7 + ld hl, .data_2945 + add l + ld l, a + ld a, 0 + adc h + ld h, a + ld a, [hl] + ld hl, TilePermissions + or [hl] + ld [hl], a + ret +; 2945 + +.data_2945 ; 2945 + db 1, 2, 4, 8, 9, 10, 5, 6 +; 294d + +Function294d: ; 294d + ld a, [MapX] + ld d, a + ld a, [MapY] + ld e, a + push de + inc e + call Function2a3c + ld [TileDown], a + call Function298b + pop de + dec e + call Function2a3c + ld [TileUp], a + call Function29a8 + ret +; 296c + +Function296c: ; 296c + ld a, [MapX] + ld d, a + ld a, [MapY] + ld e, a + push de + dec d + call Function2a3c + ld [TileLeft], a + call Function29e2 + pop de + inc d + call Function2a3c + ld [TileRight], a + call Function29c5 + ret +; 298b + +Function298b: ; 298b + call Function29ff + ret nz + ld a, [TileDown] + and $7 + cp $2 + jr z, .asm_299f + cp $6 + jr z, .asm_299f + cp $7 + ret nz + +.asm_299f + ld a, [TilePermissions] + or $8 + ld [TilePermissions], a + ret +; 29a8 + +Function29a8: ; 29a8 + call Function29ff + ret nz + ld a, [TileUp] + and $7 + cp $3 + jr z, .asm_29bc + cp $4 + jr z, .asm_29bc + cp $5 + ret nz + +.asm_29bc + ld a, [TilePermissions] + or $4 + ld [TilePermissions], a + ret +; 29c5 + +Function29c5: ; 29c5 + call Function29ff + ret nz + ld a, [TileRight] + and $7 + cp $1 + jr z, .asm_29d9 + cp $5 + jr z, .asm_29d9 + cp $7 + ret nz + +.asm_29d9 + ld a, [TilePermissions] + or $1 + ld [TilePermissions], a + ret +; 29e2 + +Function29e2: ; 29e2 + call Function29ff + ret nz + ld a, [TileLeft] + and $7 + cp $0 + jr z, .asm_29f6 + cp $4 + jr z, .asm_29f6 + cp $6 + ret nz + +.asm_29f6 + ld a, [TilePermissions] + or $2 + ld [TilePermissions], a + ret +; 29ff + +Function29ff: ; 29ff + and $f0 + cp $b0 + ret z + cp $c0 + ret +; 2a07 + + +GetFacingTileCoord: ; 2a07 +; Return map coordinates in (d, e) and tile id in a +; of the tile the player is facing. + + ld a, [PlayerDirection] + and %1100 + srl a + srl a + ld l, a + ld h, 0 + add hl, hl + add hl, hl + ld de, .Directions + add hl, de + + ld d, [hl] + inc hl + ld e, [hl] + inc hl + + ld a, [hli] + ld h, [hl] + ld l, a + + ld a, [MapX] + add d + ld d, a + ld a, [MapY] + add e + ld e, a + ld a, [hl] + ret + +.Directions + ; x, y + db 0, 1 + dw TileDown + db 0, -1 + dw TileUp + db -1, 0 + dw TileLeft + db 1, 0 + dw TileRight +; 2a3c + + +Function2a3c: ; 2a3c + call Function2a66 + ld a, [hl] + and a + jr z, .asm_2a63 + ld l, a + ld h, $0 + add hl, hl + add hl, hl + ld a, [TilesetCollisionAddress] + ld c, a + ld a, [$d1e1] + ld b, a + add hl, bc + rr d + jr nc, .asm_2a56 + inc hl + +.asm_2a56 + rr e + jr nc, .asm_2a5c + inc hl + inc hl + +.asm_2a5c + ld a, [TilesetCollisionBank] + call GetFarByte + ret + +.asm_2a63 + ld a, $ff + ret +; 2a66 + +Function2a66: ; 2a66 + ld a, [$d19f] + add $6 + ld c, a + ld b, $0 + ld hl, $c801 + add hl, bc + ld a, e + srl a + jr z, .asm_2a84 + and a +.asm_2a78 + srl a + jr nc, .asm_2a7d + add hl, bc + +.asm_2a7d + sla c + rl b + and a + jr nz, .asm_2a78 + +.asm_2a84 + ld c, d + srl c + ld b, $0 + add hl, bc + ret +; 2a8b + + +CheckFacingSign: ; 2a8b + call GetFacingTileCoord + ld b, a + ld a, d + sub 4 + ld d, a + ld a, e + sub 4 + ld e, a + ld a, [$dc01] + and a + ret z + ld c, a + ld a, [hROMBank] + push af + call Function2c52 + call Function2aaa + pop hl + ld a, h + rst Bankswitch + ret +; 2aaa + +Function2aaa: ; 2aaa + ld hl, $dc02 + ld a, [hli] + ld h, [hl] + ld l, a +.asm_2ab0 + push hl + ld a, [hli] + cp e + jr nz, .asm_2abb + ld a, [hli] + cp d + jr nz, .asm_2abb + jr .asm_2ac8 + +.asm_2abb + pop hl + ld a, 5 + add l + ld l, a + jr nc, .asm_2ac3 + inc h + +.asm_2ac3 + dec c + jr nz, .asm_2ab0 + xor a + ret + +.asm_2ac8 + pop hl + ld de, EngineBuffer1 + ld bc, 5 + call CopyBytes + scf + ret +; 2ad4 + +Function2ad4: ; 2ad4 + ld a, [$dbfe] + and a + ret z + ld c, a + ld a, [hROMBank] + push af + call Function2c52 + call Function2ae7 + pop hl + ld a, h + rst Bankswitch + ret +; 2ae7 + +Function2ae7: ; 2ae7 + ld hl, $dbff + ld a, [hli] + ld h, [hl] + ld l, a + call Function211b + ld b, a + ld a, [MapX] + sub $4 + ld d, a + ld a, [MapY] + sub $4 + ld e, a +.asm_2afd + push hl + ld a, [hli] + cp b + jr z, .asm_2b06 + cp $ff + jr nz, .asm_2b10 + +.asm_2b06 + ld a, [hli] + cp e + jr nz, .asm_2b10 + ld a, [hli] + cp d + jr nz, .asm_2b10 + jr .asm_2b1d + +.asm_2b10 + pop hl + ld a, $8 + add l + ld l, a + jr nc, .asm_2b18 + inc h + +.asm_2b18 + dec c + jr nz, .asm_2afd + xor a + ret + +.asm_2b1d + pop hl + ld de, EngineBuffer1 + ld bc, $0008 + call CopyBytes + scf + ret +; 2b29 + + +FadeToMenu: ; 2b29 + xor a + ld [hBGMapMode], a + call Function1d6e + ld a, $23 + ld hl, $4084 + rst FarCall + call ClearSprites + call Function2ed3 + ret +; 2b3c + + +Function2b3c: ; 2b3c + call WhiteBGMap + call Function2bae + call Function1ad2 + call Function1d7d + call Functiond90 + jr Function2b5c +; 2b4d + +Function2b4d: ; 2b4d + call WhiteBGMap + call Function1d7d + call Function2bae + call Function1ad2 + call Functiond90 +; 2b5c + +Function2b5c: ; 2b5c + ld b, $9 + call GetSGBLayout + ld a, $12 + ld hl, $5409 + rst FarCall + call Function3200 + ld a, $23 + ld hl, $4079 + rst FarCall + call Function2ee4 + ret +; 2b74 + + +Function2b74: ; 0x2b74 + push af + ld a, $1 + ld [$c2ce], a + call WhiteBGMap + call ClearSprites + call Function2bae + ld hl, $c590 ; tile 0, 12 + ld bc, $0412 + call TextBox + ld hl, VramState + set 0, [hl] + call Function1ad2 + call Function3200 + ld b, $9 + call GetSGBLayout + callba Function49409 + call UpdateTimePals + call DelayFrame + ld a, $1 + ld [$ffde], a + pop af + ret +; 0x2bae + +Function2bae: ; 2bae + call DisableLCD + call ClearSprites + ld a, $5 + ld hl, $4168 + rst FarCall + call Functione51 + call Functione5f + ld a, [hROMBank] + push af + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a + call Function2c24 + ld a, $23 + ld hl, $4001 + rst FarCall + call Function2173 + call Function2821 + ld a, $9 + call Function3cb4 + pop af + rst Bankswitch + + call EnableLCD + ret +; 2be5 + + +GetMapHeaderPointer: ; 2be5 + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a +; 2bed + +GetAnyMapHeaderPointer: ; 0x2bed +; Prior to calling this function, you must have switched banks so that +; MapGroupPointers is visible. + +; inputs: +; b = map group, c = map number +; XXX de = ??? + +; outputs: +; hl points to the map header + push bc ; save map number for later + + ; get pointer to map group + dec b + ld c, b + ld b, $0 + ld hl, MapGroupPointers + add hl, bc + add hl, bc + + ld a, [hli] + ld h, [hl] + ld l, a + pop bc ; restore map number + + ; find the cth map header + dec c + ld b, $0 + ld a, OlivineGym_MapHeader - OlivinePokeCenter1F_MapHeader + call AddNTimes + ret +; 0x2c04 + +GetMapHeaderMember: ; 0x2c04 +; Extract data from the current map's header. + +; inputs: +; de = offset of desired data within the mapheader + +; outputs: +; bc = data from the current map's header +; (e.g., de = $0003 would return a pointer to the secondary map header) + + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a + ; fallthrough + +GetAnyMapHeaderMember: ; 0x2c0c + ; bankswitch + ld a, [hROMBank] + push af + ld a, BANK(MapGroupPointers) + rst Bankswitch + + call GetAnyMapHeaderPointer + add hl, de + ld c, [hl] + inc hl + ld b, [hl] + + ; bankswitch back + pop af + rst Bankswitch + ret +; 0x2c1c + + +Function2c1c: ; 2c1c + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a +; 2c24 + +Function2c24: ; 2c24 + call Function2c31 + rst Bankswitch + ret +; 2c29 + + +Function2c29: ; 2c29 + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a +; 2c31 + +Function2c31: ; 2c31 + push hl + push de + ld de, $0000 + call GetAnyMapHeaderMember + ld a, c + pop de + pop hl + ret +; 2c3d + +Function2c3d: ; 2c3d + ld a, [hROMBank] + push af + ld a, $25 + rst Bankswitch + call GetMapHeaderPointer + ld de, $d198 + ld bc, $0005 + call CopyBytes + pop af + rst Bankswitch + ret +; 2c52 + +Function2c52: ; 2c52 + ld a, [MapEventBank] + rst Bankswitch + ret +; 2c57 + + +GetMapEventBank: ; 2c57 + ld a, [MapEventBank] + ret +; 2c5b + +GetAnyMapBlockdataBank: ; 2c5b +; Return the blockdata bank for group b map c. + push hl + push de + push bc + + push bc + ld de, 3 ; second map header pointer + call GetAnyMapHeaderMember + ld l, c + ld h, b + pop bc + + push hl + ld de, 0 ; second map header bank + call GetAnyMapHeaderMember + pop hl + + ld de, 3 ; blockdata bank + add hl, de + ld a, c + call GetFarByte + rst Bankswitch + + pop bc + pop de + pop hl + ret +; 2c7d + +GetSecondaryMapHeaderPointer: ; 0x2c7d +; returns the current map's secondary map header pointer in hl. + push bc + push de + ld de, $0003 ; secondary map header pointer (offset within header) + call GetMapHeaderMember + ld l, c + ld h, b + pop de + pop bc + ret +; 2c8a + +GetMapPermission: ; 2c8a + push hl + push de + push bc + ld de, 2 + call GetMapHeaderMember + ld a, c + pop bc + pop de + pop hl + ret +; 2c98 + +Function2c98: ; 2c98 + ret +; 2c99 + +Function2c99: ; 2c99 + push hl + push de + push bc + ld de, $0002 + call GetAnyMapHeaderMember + ld a, c + pop bc + pop de + pop hl + ret +; 2ca7 + +Function2ca7: ; 2ca7 + ld de, $0001 + call GetAnyMapHeaderMember + ld a, c + ret +; 2caf + +GetWorldMapLocation: ; 0x2caf +; given a map group/id in bc, return its location on the Pokégear map. + push hl + push de + push bc + ld de, 5 + call GetAnyMapHeaderMember + ld a, c + pop bc + pop de + pop hl + ret +; 0x2cbd + +Function2cbd: ; 2cbd + push hl + push bc + ld de, $0006 + call GetMapHeaderMember + ld a, c + cp $64 + jr z, .asm_2cee + bit 7, c + jr nz, .asm_2cda + ld a, $22 + ld hl, $7342 + rst FarCall + ld e, c + ld d, $0 +.asm_2cd7 + pop bc + pop hl + ret + +.asm_2cda + ld a, [StatusFlags2] + bit 0, a + jr z, .asm_2ce6 + ld de, $0056 + jr .asm_2cd7 + +.asm_2ce6 + ld a, c + and $7f + ld e, a + ld d, $0 + jr .asm_2cd7 + +.asm_2cee + ld a, [StatusFlags2] + bit 7, a + jr z, .asm_2cfa + ld de, $0048 + jr .asm_2cd7 + +.asm_2cfa + ld de, $0026 + jr .asm_2cd7 +; 2cff + +Function2cff: ; 2cff + call Function2d0d + and $f + ret +; 2d05 + +Function2d05: ; 2d05 + call Function2d0d + and $f0 + swap a + ret +; 2d0d + +Function2d0d: ; 2d0d + push hl + push bc + ld de, $0007 + call GetMapHeaderMember + ld a, c + pop bc + pop hl + ret +; 2d19 + +Function2d19: ; 2d19 + push de + push hl + push bc + ld de, $0008 + call GetMapHeaderMember + ld a, c + pop bc + pop hl + pop de + ret +; 2d27 + +Function2d27: ; 2d27 + push hl + push bc + ld hl, $5596 + ld bc, $000f + ld a, [$d199] + call AddNTimes + ld de, TilesetBank + ld bc, $000f + ld a, $13 + call FarCopyBytes + pop bc + pop hl + ret +; 2d43 + diff --git a/home/map_objects.asm b/home/map_objects.asm new file mode 100644 index 000000000..3ebc1b597 --- /dev/null +++ b/home/map_objects.asm @@ -0,0 +1,683 @@ +; Functions handling map objects. + + +GetSpritePalette: ; 17ff + push hl + push de + push bc + ld c, a + callba _GetSpritePalette + ld a, c + pop bc + pop de + pop hl + ret +; 180e + + +Function180e: ; 180e + push hl + push bc + ld hl, $d156 + ld c, $1f + ld b, a + ld a, [hConnectionStripLength] + cp $0 + jr z, .asm_182b + ld a, b +.asm_181d + cp [hl] + jr z, .asm_1830 + inc hl + inc hl + dec c + jr nz, .asm_181d + ld a, [$d155] + scf + jr .asm_1833 + +.asm_182b + ld a, [$d155] + jr .asm_1833 + +.asm_1830 + inc hl + xor a + ld a, [hl] + +.asm_1833 + pop bc + pop hl + ret +; 1836 + +Function1836: ; 1836 + push de + push hl + + ld b, a + ld a, [hROMBank] + push af + ld a, BANK(Function142a7) + rst Bankswitch + + ld a, b + call Function142a7 + ld c, a + + pop de + ld a, d + rst Bankswitch + + pop hl + pop de + ret +; 184a + + + +Function184a: ; 184a + ld a, [StandingTile] + call GetTileCollision + ld b, a + ret +; 1852 + +Function1852: ; 1852 + ld a, [StandingTile] + call GetTileCollision + sub 1 + ret z + and a + ret +; 185d + + +GetTileCollision: ; 185d +; Get the collision type of tile a. + + push de + push hl + + ld hl, TileCollisionTable + ld e, a + ld d, 0 + add hl, de + + ld a, [hROMBank] + push af + ld a, BANK(TileCollisionTable) + rst Bankswitch + ld e, [hl] + pop af + rst Bankswitch + + ld a, e + and $f ; lo nybble only + + pop hl + pop de + ret +; 1875 + + +Function1875: ; 1875 + ld d, a + and $f0 + cp $10 + jr z, .asm_1882 + cp $20 + jr z, .asm_1888 + scf + ret + +.asm_1882 + ld a, d + and 7 + ret z + scf + ret + +.asm_1888 + ld a, d + and 7 + ret z + scf + ret +; 188e + +Function188e: ; 188e + cp $14 + ret z + cp $1c + ret +; 1894 + +CheckCutTreeTile: ; 1894 + cp $12 + ret z + cp $1a + ret +; 189a + +CheckHeadbuttTreeTile: ; 189a + cp $15 + ret z + cp $1d + ret +; 18a0 + +CheckCounterTile: ; 18a0 + cp $90 + ret z + cp $98 + ret +; 18a6 + +CheckPitTile: ; 18a6 + cp $60 + ret z + cp $68 + ret +; 18ac + +CheckIceTile: ; 18ac + cp $23 + ret z + cp $2b + ret z + scf + ret +; 18b4 + +CheckWhirlpoolTile: ; 18b4 + nop + cp $24 + ret z + cp $2c + ret z + scf + ret +; 18bd + +CheckWaterfallTile: ; 18bd + cp $33 + ret z + cp $3b + ret +; 18c3 + +CheckStandingOnEntrance: ; 18c3 + ld a, [StandingTile] + cp $71 ; door + ret z + cp $79 + ret z + cp $7a ; stairs + ret z + cp $7b ; cave + ret +; 18d2 + + +GetMapObject: ; 18d2 +; Return the location of map object a in bc. + ld hl, MapObjects + ld bc, $10 + call AddNTimes + ld b, h + ld c, l + ret +; 18de + + +Function18de: ; 18de + ld [hConnectionStripLength], a + call GetMapObject + ld hl, $0000 + add hl, bc + ld a, [hl] + cp $ff + jr z, .asm_18f3 + ld [hConnectedMapWidth], a + call Function1ae5 + and a + ret + +.asm_18f3 + scf + ret +; 18f5 + +Function18f5: ; 18f5 + ld hl, $0006 + add hl, bc + ld a, [hl] + cp $ff + jr nz, .asm_1921 + ld hl, $0007 + add hl, bc + ld a, [hl] + cp $ff + jr z, .asm_191c + ld hl, .data_191e + ld a, [TimeOfDay] + add l + ld l, a + jr nc, .asm_1912 + inc h + +.asm_1912 + ld a, [hl] + ld hl, $0007 + add hl, bc + and [hl] + jr nz, .asm_191c + scf + ret + +.asm_191c + and a + ret + +.data_191e + db $1 + db $2 + db $4 + +.asm_1921 + ld hl, $0006 + add hl, bc + ld d, [hl] + ld hl, $0007 + add hl, bc + ld e, [hl] + ld hl, hHours + ld a, d + cp e + jr z, .asm_1949 + jr c, .asm_193f + ld a, [hl] + cp d + jr nc, .asm_1949 + cp e + jr c, .asm_1949 + jr z, .asm_1949 + jr .asm_194b + +.asm_193f + ld a, e + cp [hl] + jr c, .asm_194b + ld a, [hl] + cp d + jr nc, .asm_1949 + jr .asm_194b + +.asm_1949 + and a + ret + +.asm_194b + scf + ret +; 194d + +Function194d: ; 194d + ld [hConnectionStripLength], a + call GetMapObject + call $40e7 + ret +; 1956 + + + +Function1956: ; 1956 + ld [hConnectionStripLength], a + call Function271e + ld a, [hConnectionStripLength] + call GetMapObject + ld a, $2 + ld hl, $40e7 + rst FarCall + ret +; 1967 + +Function1967: ; 1967 + ld [hConnectionStripLength], a + call GetMapObject + ld hl, $0000 + add hl, bc + ld a, [hl] + cp $ff + ret z + ld [hl], $ff + push af + call Function1985 + pop af + call Function1ae5 + callba Function4357 + ret +; 1985 + +Function1985: ; 1985 + ld hl, $d4cd + cp [hl] + jr z, .asm_1990 + ld hl, $d4ce + cp [hl] + ret nz + +.asm_1990 + callba Function581f + ld a, $ff + ld [$d4cd], a + ld [$d4ce], a + ret +; 199f + +Function199f: ; 199f + call Function1967 + call Function2712 + ret +; 19a6 + +Function19a6: ; 19a6 + push hl + call GetMapObject + ld d, b + ld e, c + ld a, $ff + ld [de], a + inc de + pop hl + ld bc, $000f + call CopyBytes + ret +; 19b8 + +Function19b8: ; 19b8 + call GetMapObject + ld hl, $0000 + add hl, bc + ld a, [hl] + push af + ld [hl], $ff + inc hl + ld bc, $000f + xor a + call ByteFill + pop af + cp $ff + ret z + cp $d + ret nc + ld b, a + ld a, [$d4cd] + cp b + jr nz, .asm_19de + ld a, $ff + ld [$d4cd], a + +.asm_19de + ld a, b + call Function1ae5 + callba Function4357 + ret +; 19e9 + + + +Function19e9: ; 19e9 + ld [$c2e2], a + ld a, [hROMBank] + ld [$c2e3], a + ld a, l + ld [$c2e4], a + ld a, h + ld [$c2e5], a + ld a, [$c2e2] + call Function18de + ret c + ld hl, $0003 + add hl, bc + ld [hl], $14 + ld hl, $0009 + add hl, bc + ld [hl], $0 + ld hl, VramState + set 7, [hl] + and a + ret +; 1a13 + + + +Function1a13: ; 1a13 + push bc + push de + ld hl, $d4d6 + ld de, $0028 + ld c, $d +.asm_1a1d + ld a, [hl] + and a + jr z, .asm_1a28 + add hl, de + dec c + jr nz, .asm_1a1d + xor a + jr .asm_1a2c + +.asm_1a28 + ld a, $d + sub c + scf + +.asm_1a2c + pop de + pop bc + ret +; 1a2f + + + +Function1a2f: ; 1a2f + ld hl, $0003 + add hl, bc + ld a, [hl] + cp $25 + jr c, .asm_1a39 + xor a + +.asm_1a39 + ld hl, Data4273 + ld e, a + ld d, 0 + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + ld a, [hl] + ret +; 1a47 + +Function1a47: ; 1a47 + push bc + push de + ld e, a + ld d, 0 + ld hl, Data4273 + 1 + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + ld a, BANK(Data4273) + call GetFarByte + add a + add a + and $c + pop de + pop bc + ret +; 1a61 + + +Function1a61: ; 1a61 + ld l, a + ld a, [hROMBank] + push af + ld a, BANK(Data4273) + rst Bankswitch + ld a, l + push bc + + call Function1a71 + + pop bc + pop af + rst Bankswitch + + ret +; 1a71 + +Function1a71: ; 1a71 + ld hl, $0003 + add hl, de + ld [hl], a + push de + ld e, a + ld d, 0 + ld hl, Data4273 + 1 + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + ld b, h + ld c, l + pop de + ld a, [bc] + inc bc + rlca + rlca + and $c + ld hl, $0008 + add hl, de + ld [hl], a + ld a, [bc] + inc bc + ld hl, $000b + add hl, de + ld [hl], a + ld a, [bc] + inc bc + ld hl, $0004 + add hl, de + ld [hl], a + ld a, [bc] + inc bc + ld hl, $0005 + add hl, de + ld [hl], a + ld a, [bc] + inc bc + ld hl, $0006 + add hl, de + ld [hl], a + ret +; 1aae + +Function1aae: ; 1aae + ld a, [hROMBank] + push af + ld a, [hli] + rst Bankswitch + + ld a, [hli] + ld d, [hl] + ld hl, $001b + add hl, bc + add [hl] + ld e, a + ld a, d + adc $0 + ld d, a + inc [hl] + ld a, [de] + ld h, a + pop af + rst Bankswitch + + ld a, h + ret +; 1ac6 + +Function1ac6: ; 1ac6 + ld hl, VramState + set 0, [hl] + ret +; 1acc + +Function1acc: ; 1acc + ld hl, VramState + res 0, [hl] + ret +; 1ad2 + + +Function1ad2: ; 1ad2 + ld a, [VramState] + bit 0, a + ret z + callba Function55e0 + callba Function5920 + ret +; 1ae5 + + +Function1ae5: ; 1ae5 + ld bc, $0028 + ld hl, $d4d6 + call AddNTimes + ld b, h + ld c, l + ret +; 1af1 + +Function1af1: ; 1af1 + ld hl, $0000 + add hl, bc + ld a, [hl] + and a + ret +; 1af8 + +Function1af8: ; 1af8 + push af + ld hl, $0008 + add hl, bc + ld a, [hl] + and $f3 + ld e, a + pop af + and $c + or e + ld [hl], a + ret +; 1b07 + + +GetSpriteDirection: ; 1b07 + ld hl, $0008 + add hl, bc + ld a, [hl] + and $c + ret +; 1b0f + diff --git a/home/math.asm b/home/math.asm new file mode 100644 index 000000000..87a00c412 --- /dev/null +++ b/home/math.asm @@ -0,0 +1,76 @@ +SimpleMultiply: ; 3105 +; Return a * c. + and a + ret z + + push bc + ld b, a + xor a +.loop + add c + dec b + jr nz, .loop + pop bc + ret +; 3110 + + +SimpleDivide: ; 3110 +; Divide a by c. Return quotient b and remainder a. + ld b, 0 +.loop + inc b + sub c + jr nc, .loop + dec b + add c + ret +; 3119 + + +Multiply: ; 3119 +; Multiply hMultiplicand (3 bytes) by hMultiplier. Result in hProduct. +; All values are big endian. + push hl + push bc + + callab _Multiply + + pop bc + pop hl + ret +; 3124 + + +Divide: ; 3124 +; Divide hDividend length b (max 4 bytes) by hDivisor. Result in hQuotient. +; All values are big endian. + push hl + push de + push bc + ld a, [hROMBank] + push af + ld a, BANK(_Divide) + rst Bankswitch + + call _Divide + + pop af + rst Bankswitch + pop bc + pop de + pop hl + ret +; 3136 + + +SubtractSigned: ; 3136 +; Return a - b, sign in carry. + sub b + ret nc + cpl + add 1 + scf + ret +; 313d + diff --git a/home/menu.asm b/home/menu.asm new file mode 100644 index 000000000..c761a927c --- /dev/null +++ b/home/menu.asm @@ -0,0 +1,603 @@ +; Functions used in displaying and handling menus. + + +LoadMenuDataHeader: ; 0x1d35 + call Function1d3c + call Function1c00 + ret + +Function1d3c: ; 0x1d3c + ld de, $cf81 + ld bc, $0010 + call CopyBytes + ld a, [hROMBank] + ld [$cf8a], a + ret +; 0x1d4b + +Function1d4b: ; 1d4b + ld [$cf88], a + ret +; 1d4f + + +Function1d4f: ; 1d4f + push hl + call Function1d58 + pop hl + jp PrintText +; 1d57 + +Function1d57: ; 1d57 + ret +; 1d58 + +Function1d58: ; 1d58 + ld hl, MenuDataHeader_0x1d5f + call LoadMenuDataHeader + ret +; 1d5f + +MenuDataHeader_0x1d5f: ; 1d5f + db $40 ; tile backup + db 12, 0 ; start coords + db 17, 19 ; end coords + dw VTiles0 + db 0 ; default option +; 1d67 + +Function1d67: ; 1d67 + call Function1d4f + call Function1c17 + ret +; 1d6e + +Function1d6e: ; 1d6e + ld hl, MenuDataHeader_0x1d75 + call LoadMenuDataHeader + ret +; 1d75 + +MenuDataHeader_0x1d75: ; 1d75 + db $40 ; tile backup + db 0, 0 ; start coords + db 17, 19 ; end coords + dw $0000 + db 1 ; default option +; 1d7d + +Function1d7d: ; 1d7d + call Function1c07 + ret +; 1d81 + +Function1d81: ; 0x1d81 + xor a + ld [hBGMapMode], a + call Function1cbb + call Function1ad2 + call Function1c89 + call Function321c + call Function1c66 + ld a, [$cf91] + bit 7, a + jr z, .asm_1da7 ; 0x1d98 $d + call Function1c10 + call Function1bc9 + call Function1ff8 + bit 1, a + jr z, .asm_1da9 ; 0x1da5 $2 +.asm_1da7 + scf + ret +.asm_1da9 + and a + ret +; 0x1dab + +Function1dab: ; 1dab + call LoadMenuDataHeader + call Function1d81 + call Function1c17 + ld a, [$cfa9] + ret +; 1db8 + +Function1db8: ; 0x1db8 + push hl + push bc + push af + ld hl, $cf86 + ld a, [hli] + ld h, [hl] + ld l, a + inc hl + inc hl + pop af + call GetNthString + ld d, h + ld e, l + call CopyName1 + pop bc + pop hl + ret +; 0x1dcf + + +Function1dcf: ; 1dcf + ld bc, $0e07 + +Function1dd2: ; 1dd2 + jr Function1dd9 + +Function1dd4: ; 1dd4 + call LoadMenuDataHeader + jr Function1dfe + +Function1dd9: ; 1dd9 + push bc + ld hl, MenuDataHeader_0x1e1d + call Function1d3c + pop bc + ld a, b + cp $e + jr nz, .asm_1de9 + ld a, $e + ld b, a + +.asm_1de9 + ld a, b + ld [$cf83], a + add $5 + ld [$cf85], a + ld a, c + ld [$cf82], a + add $4 + ld [$cf84], a + call Function1c00 + +Function1dfe: ; 1dfe + call Function1d81 + push af + ld c, $f + call DelayFrames + call Function1c17 + pop af + jr c, .asm_1e16 + ld a, [$cfa9] + cp $2 + jr z, .asm_1e16 + and a + ret + +.asm_1e16 + ld a, $2 + ld [$cfa9], a + scf + ret +; 1e1d + +MenuDataHeader_0x1e1d: ; 1e1d + db $40 ; tile backup + db 5, 10 ; start coords + db 9, 15 ; end coords + dw MenuData2_0x1e25 + db 1 ; default option +; 1e25 + +MenuData2_0x1e25: ; 1e25 + db $c0 ; flags + db 2 + db "YES@" + db "NO@" +; 1e2e + +Function1e2e: ; 1e2e + call Function1e35 + call Function1c00 + ret +; 1e35 + +Function1e35: ; 1e35 + push de + call Function1d3c + pop de + ld a, [$cf83] + ld h, a + ld a, [$cf85] + sub h + ld h, a + ld a, d + ld [$cf83], a + add h + ld [$cf85], a + ld a, [$cf82] + ld l, a + ld a, [$cf84] + sub l + ld l, a + ld a, e + ld [$cf82], a + add l + ld [$cf84], a + ret +; 1e5d + +Function1e5d: ; 1e5d + call MenuFunc_1e7f + call MenuWriteText + call Function1eff + call Function1f23 + call Function1bdd + call Function1ff8 + ret +; 1e70 + +SetUpMenu: ; 1e70 + call MenuFunc_1e7f ; ??? + call MenuWriteText + call Function1eff ; set up selection pointer + ld hl, $cfa5 + set 7, [hl] + ret + +MenuFunc_1e7f: ; 0x1e7f + call Function1c66 + call Function1ebd + call Function1ea6 + call Function1cbb + ret + +MenuWriteText: ; 0x1e8c + xor a + ld [hBGMapMode], a + call Function1ebd ; sort out the text + call Function1eda ; actually write it + call Function2e31 + ld a, [hOAMUpdate] + push af + ld a, $1 + ld [hOAMUpdate], a + call Function321c + pop af + ld [hOAMUpdate], a + ret +; 0x1ea6 + +Function1ea6: ; 1ea6 + ld a, [$cf83] + ld c, a + ld a, [$cf85] + sub c + ld c, a + ld a, [$cf92] + add a + inc a + ld b, a + ld a, [$cf82] + add b + ld [$cf84], a + ret +; 1ebd + +Function1ebd: ; 1ebd + ld hl, $cf93 + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [$cf76] + and a + jr z, .asm_1ed3 + ld b, a + ld c, $ff +.asm_1ecc + ld a, [hli] + cp c + jr nz, .asm_1ecc + dec b + jr nz, .asm_1ecc + +.asm_1ed3 + ld d, h + ld e, l + ld a, [hl] + ld [$cf92], a + ret +; 1eda + +Function1eda: ; 1eda + call Function1cfd + ld bc, $002a + add hl, bc +.asm_1ee1 + inc de + ld a, [de] + cp $ff + ret z + ld [MenuSelection], a + push de + push hl + ld d, h + ld e, l + ld hl, $cf95 + call Function1efb + pop hl + ld de, $0028 + add hl, de + pop de + jr .asm_1ee1 +; 1efb + +Function1efb: ; 1efb + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 1eff + +Function1eff: ; 1eff + call Function1c10 + ld hl, $cfa8 + ld a, [$cf91] + bit 3, a + jr z, .asm_1f0e + set 3, [hl] + +.asm_1f0e + ld a, [$cf91] + bit 2, a + jr z, .asm_1f19 + set 5, [hl] + set 4, [hl] + +.asm_1f19 + ret +; 1f1a + + +Function1f1a: ; 1f1a + call Function1bd3 + ld hl, $cfa8 + and [hl] + jr Function1f2a +; 1f23 + +Function1f23: ; 1f23 + xor a + ld [$cf73], a + call Function1bc9 +; 1f2a + +Function1f2a: ; 1f2a + bit 0, a + jr nz, .asm_1f52 + bit 1, a + jr nz, .asm_1f6d + bit 3, a + jr nz, .asm_1f6d + bit 4, a + jr nz, .asm_1f44 + bit 5, a + jr nz, .asm_1f4b + xor a + ld [$cf73], a + jr .asm_1f57 + +.asm_1f44 + ld a, $10 + ld [$cf73], a + jr .asm_1f57 + +.asm_1f4b + ld a, $20 + ld [$cf73], a + jr .asm_1f57 + +.asm_1f52 + ld a, $1 + ld [$cf73], a + +.asm_1f57 + call Function1ebd + ld a, [$cfa9] + ld l, a + ld h, $0 + add hl, de + ld a, [hl] + ld [MenuSelection], a + ld a, [$cfa9] + ld [$cf88], a + and a + ret + +.asm_1f6d + ld a, $2 + ld [$cf73], a + ld a, $ff + ld [MenuSelection], a + scf + ret +; 1f79 + +Function1f79: ; 1f79 + push de + ld hl, $cf97 + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [MenuSelection] + call GetNthString + ld d, h + ld e, l + pop hl + call PlaceString + ret +; 1f8d + +Function1f8d: ; 1f8d + push de + ld a, [MenuSelection] + call Function1fb1 + inc hl + inc hl + ld a, [hli] + ld d, [hl] + ld e, a + pop hl + call PlaceString + ret +; 1f9e + +Function1f9e: ; 1f9e + call Function1fb1 + inc hl + inc hl + ld a, [hli] + ld d, [hl] + ld e, a + ret +; 1fa7 + +Function1fa7: ; 1fa7 + ld a, [MenuSelection] + call Function1fb1 + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 1fb1 + +Function1fb1: ; 1fb1 + ld e, a + ld d, $0 + ld hl, $cf97 + ld a, [hli] + ld h, [hl] + ld l, a + add hl, de + add hl, de + add hl, de + add hl, de + ret +; 1fbf + +Function1fbf: ; 1fbf + ld hl, $cf71 + call Function1ff0 + ld hl, $cf81 + call Function1ff0 + ld hl, $cf91 + call Function1ff0 + ld hl, $cfa1 + call Function1ff0 + ld a, [rSVBK] + push af + ld a, $7 + ld [rSVBK], a + xor a + ld hl, $dfff + ld [hld], a + ld [hld], a + ld a, l + ld [$cf71], a + ld a, h + ld [$cf72], a + pop af + ld [rSVBK], a + ret +; 1ff0 + +Function1ff0: ; 1ff0 + ld bc, $0010 + xor a + call ByteFill + ret +; 1ff8 + +Function1ff8: ; 1ff8 + push af + and $3 + jr z, .asm_2007 + ld hl, $cf81 + bit 3, [hl] + jr nz, .asm_2007 + call PlayClickSFX + +.asm_2007 + pop af + ret +; 2009 + + +PlayClickSFX: ; 2009 + push de + ld de, SFX_READ_TEXT_2 + call StartSFX + pop de + ret +; 0x2012 + +Function2012: ; 2012 + call Function1d4f + call Functiona46 + call Function1c07 + ret +; 201c + +Function201c: ; 201c + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + + call PlaceString + pop af + rst Bankswitch + + ret +; 202a + +Function202a: ; 202a + ld a, [hROMBank] + ld [$cf94], a + ld a, $9 + ld hl, $400e + rst FarCall + ld a, [$cf88] + ret +; 2039 + +Function2039: ; 2039 + ld a, [hROMBank] + ld [$cf94], a + ld a, $9 + ld hl, $4022 + rst FarCall + ld a, [$cf88] + ret +; 2048 + +Function2048: ; 2048 + ld a, [hROMBank] + ld [$cf94], a + ld a, $9 + ld hl, $403c + rst FarCall + ld a, [$cf88] + ret +; 2057 + +Function2057: ; 2057 + ld a, [hROMBank] + push af + ld a, $21 + rst Bankswitch + + call $42db + pop af + rst Bankswitch + + ret +; 2063 + diff --git a/home/palettes.asm b/home/palettes.asm new file mode 100644 index 000000000..accaa96b5 --- /dev/null +++ b/home/palettes.asm @@ -0,0 +1,347 @@ +; Functions dealing with palettes. + + +UpdatePalsIfCGB: ; c2f +; update bgp data from BGPals +; update obp data from OBPals +; return carry if successful + +; check cgb + ld a, [hCGB] + and a + ret z + + +UpdateCGBPals: ; c33 +; return carry if successful +; any pals to update? + ld a, [hCGBPalUpdate] + and a + ret z + + +ForceUpdateCGBPals: ; c37 + + ld a, [rSVBK] + push af + ld a, 5 ; BANK(BGPals) + ld [rSVBK], a + + ld hl, BGPals ; 5:d080 + +; copy 8 pals to bgpd + ld a, %10000000 ; auto increment, index 0 + ld [rBGPI], a + ld c, rBGPD % $100 + ld b, 4 ; NUM_PALS / 2 +.bgp + rept $10 + ld a, [hli] + ld [$ff00+c], a + endr + + dec b + jr nz, .bgp + +; hl is now 5:d0c0 OBPals + +; copy 8 pals to obpd + ld a, %10000000 ; auto increment, index 0 + ld [rOBPI], a + ld c, rOBPD - rJOYP + ld b, 4 ; NUM_PALS / 2 +.obp + rept $10 + ld a, [hli] + ld [$ff00+c], a + endr + + dec b + jr nz, .obp + + pop af + ld [rSVBK], a + +; clear pal update queue + xor a + ld [hCGBPalUpdate], a + + scf + ret +; c9f + + +DmgToCgbBGPals: ; c9f +; exists to forego reinserting cgb-converted image data + +; input: a -> bgp + + ld [rBGP], a + push af + + ld a, [hCGB] + and a + jr z, .end + + push hl + push de + push bc + ld a, [rSVBK] + push af + + ld a, 5 + ld [rSVBK], a + +; copy & reorder bg pal buffer + ld hl, BGPals ; to + ld de, Unkn1Pals ; from +; order + ld a, [rBGP] + ld b, a +; all pals + ld c, 8 + call CopyPals +; request pal update + ld a, 1 + ld [hCGBPalUpdate], a + + pop af + ld [rSVBK], a + pop bc + pop de + pop hl +.end + pop af + ret +; ccb + + +DmgToCgbObjPals: ; ccb +; exists to forego reinserting cgb-converted image data + +; input: d -> obp1 +; e -> obp2 + + ld a, e + ld [rOBP0], a + ld a, d + ld [rOBP1], a + + ld a, [hCGB] + and a + ret z + + push hl + push de + push bc + ld a, [rSVBK] + push af + + ld a, 5 + ld [rSVBK], a + +; copy & reorder obj pal buffer + ld hl, OBPals ; to + ld de, Unkn2Pals ; from +; order + ld a, [rOBP0] + ld b, a +; all pals + ld c, 8 + call CopyPals +; request pal update + ld a, 1 + ld [hCGBPalUpdate], a + + pop af + ld [rSVBK], a + pop bc + pop de + pop hl + ret +; cf8 + + +Functioncf8: ; cf8 + ld [rOBP0], a + push af + ld a, [hCGB] + and a + jr z, .asm_d22 + push hl + push de + push bc + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, $d0c0 + ld de, MartPointer + ld a, [rOBP0] + ld b, a + ld c, $1 + call CopyPals + ld a, $1 + ld [hCGBPalUpdate], a + pop af + ld [rSVBK], a + pop bc + pop de + pop hl + +.asm_d22 + pop af + ret +; d24 + +Functiond24: ; d24 + ld [rOBP1], a + push af + ld a, [hCGB] + and a + jr z, .asm_d4e + push hl + push de + push bc + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, $d0c8 + ld de, $d048 + ld a, [rOBP1] + ld b, a + ld c, $1 + call CopyPals + ld a, $1 + ld [hCGBPalUpdate], a + pop af + ld [rSVBK], a + pop bc + pop de + pop hl + +.asm_d4e + pop af + ret +; d50 + + + +CopyPals: ; d50 +; copy c palettes in order b from de to hl + + push bc + ld c, 4 ; NUM_PAL_COLORS +.loop + push de + push hl + +; get pal color + ld a, b + and %11 ; color +; 2 bytes per color + add a + ld l, a + ld h, 0 + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + +; dest + pop hl +; write color + ld [hl], e + inc hl + ld [hl], d + inc hl +; next pal color + srl b + srl b +; source + pop de +; done pal? + dec c + jr nz, .loop + +; de += 8 (next pal) + ld a, 8 ; NUM_PAL_COLORS * 2 ; bytes per pal + add e + jr nc, .ok + inc d +.ok + ld e, a + +; how many more pals? + pop bc + dec c + jr nz, CopyPals + ret +; d79 + + +Functiond79: ; d79 + ld a, [hCGB] + and a + ret z + ld a, 1 + ld [rVBK], a + ld hl, VTiles0 + ld bc, $2000 + xor a + call ByteFill + ld a, 0 + ld [rVBK], a + ret +; d90 + + +Functiond90: ; d90 + ret +; d91 + + +Functiond91: ; d91 + ld a, [hCGB] + and a + ret z + ld a, [rSVBK] + push af + ld a, 5 ; BANK(BGPals) + ld [rSVBK], a + ld hl, BGPals + ld bc, $40 + $10 + xor a + call ByteFill + pop af + ld [rSVBK], a + ld a, 1 + ld [hCGBPalUpdate], a + call DelayFrame + ret +; db1 + + +Functiondb1: ; db1 + ld a, [hROMBank] + push af + ld a, BANK(Function4c000) + rst Bankswitch + call Function4c000 + pop af + rst Bankswitch + ret +; dbd + +Functiondbd: ; dbd + ld a, [hROMBank] + push af + ld a, BANK(Function4c03f) + rst Bankswitch + call Function4c03f + pop af + rst Bankswitch + ret +; dc9 + diff --git a/home/predef.asm b/home/predef.asm new file mode 100644 index 000000000..bd34a87a1 --- /dev/null +++ b/home/predef.asm @@ -0,0 +1,54 @@ +Predef: ; 2d83 +; Call predefined function a. +; Preserves bc, de, hl and f. + + ld [PredefID], a + ld a, [hROMBank] + push af + + ld a, BANK(GetPredefPointer) + rst Bankswitch + call GetPredefPointer ; stores hl in PredefTemp + +; Switch to the new function's bank + rst Bankswitch + +; Instead of directly calling stuff, +; push it to the stack in reverse. + + ld hl, .Return + push hl + +; Call the Predef function + ld a, [PredefAddress] + ld h, a + ld a, [PredefAddress + 1] + ld l, a + push hl + +; Get hl back + ld a, [PredefTemp] + ld h, a + ld a, [PredefTemp + 1] + ld l, a + ret + +.Return +; Clean up after the Predef call + + ld a, h + ld [PredefTemp], a + ld a, l + ld [PredefTemp+1], a + + pop hl + ld a, h + rst Bankswitch + + ld a, [PredefTemp] + ld h, a + ld a, [PredefTemp + 1] + ld l, a + ret +; 2dba + diff --git a/home/random.asm b/home/random.asm new file mode 100644 index 000000000..0f46da9e4 --- /dev/null +++ b/home/random.asm @@ -0,0 +1,76 @@ +Random: ; 2f8c +; A simple hardware-based random number generator (RNG). + +; Two random numbers are generated by adding and subtracting +; the divider to the respective values every time it's called. + +; The divider is a register that increments at a rate of 16384Hz. +; For comparison, the Game Boy operates at a clock speed of 4.2MHz. + +; Additionally, an equivalent function is executed in VBlank. + +; This leaves a with the value in hRandomSub. + + push bc + + ld a, [rDIV] + ld b, a + ld a, [hRandomAdd] + adc b + ld [hRandomAdd], a + + ld a, [rDIV] + ld b, a + ld a, [hRandomSub] + sbc b + ld [hRandomSub], a + + pop bc + ret +; 2f9f + +BattleRandom: ; 2f9f +; _BattleRandom lives in another bank. + +; It handles all RNG calls in the battle engine, allowing +; link battles to remain in sync using a shared PRNG. + + ld a, [hROMBank] + push af + ld a, BANK(_BattleRandom) + rst Bankswitch + + call _BattleRandom + + ld [$cfb6], a + pop af + rst Bankswitch + ld a, [$cfb6] + ret +; 2fb1 + + +Function2fb1: ; 2fb1 + push bc + ld c, a + xor a + sub c +.asm_2fb5 + sub c + jr nc, .asm_2fb5 + add c + ld b, a + push bc +.asm_2fbb + call Random + ld a, [hRandomAdd] + ld c, a + add b + jr c, .asm_2fbb + ld a, c + pop bc + call SimpleDivide + pop bc + ret +; 2fcb + diff --git a/home/rtc.asm b/home/rtc.asm new file mode 100644 index 000000000..91428d03b --- /dev/null +++ b/home/rtc.asm @@ -0,0 +1,25 @@ +RTC: ; 46f +; update time and time-sensitive palettes + +; rtc enabled? + ld a, [$c2ce] + cp 0 + ret z + + call UpdateTime + +; obj update on? + ld a, [VramState] + bit 0, a ; obj update + ret z + +TimeOfDayPals: ; 47e + callab _TimeOfDayPals + ret +; 485 + +UpdateTimePals: ; 485 + callab _UpdateTimePals + ret +; 48c + diff --git a/home/serial.asm b/home/serial.asm new file mode 100644 index 000000000..fca9d82c3 --- /dev/null +++ b/home/serial.asm @@ -0,0 +1,408 @@ +Serial: ; 6ef +; The serial interrupt. + + push af + push bc + push de + push hl + + ld a, [$ffc9] + and a + jr nz, .asm_71c + + ld a, [$c2d4] + bit 0, a + jr nz, .asm_721 + + ld a, [$ffcb] + inc a + jr z, .asm_726 + + ld a, [rSB] + ld [hSerialReceive], a + + ld a, [hSerialSend] + ld [rSB], a + + ld a, [$ffcb] + cp $2 + jr z, .asm_752 + + ld a, 0 << rSC_ON + ld [rSC], a + ld a, 1 << rSC_ON + ld [rSC], a + jr .asm_752 + +.asm_71c + call Function3e80 + jr .asm_75a + +.asm_721 + call Function2057 + jr .asm_75a + +.asm_726 + ld a, [rSB] + cp $1 + jr z, .asm_730 + cp $2 + jr nz, .asm_752 + +.asm_730 + ld [hSerialReceive], a + ld [$ffcb], a + cp $2 + jr z, .asm_74f + + xor a + ld [rSB], a + ld a, $3 + ld [rDIV], a + +.asm_73f + ld a, [rDIV] + bit 7, a + jr nz, .asm_73f + + ld a, 0 << rSC_ON + ld [rSC], a + ld a, 1 << rSC_ON + ld [rSC], a + jr .asm_752 + +.asm_74f + xor a + ld [rSB], a + +.asm_752 + ld a, $1 + ld [$ffca], a + ld a, $fe + ld [hSerialSend], a + +.asm_75a + pop hl + pop de + pop bc + pop af + reti +; 75f + +Function75f: ; 75f + ld a, $1 + ld [$ffcc], a +.asm_763 + ld a, [hl] + ld [hSerialSend], a + call Function78a + push bc + ld b, a + inc hl + ld a, $30 +.asm_76e + dec a + jr nz, .asm_76e + ld a, [$ffcc] + and a + ld a, b + pop bc + jr z, .asm_782 + dec hl + cp $fd + jr nz, .asm_763 + xor a + ld [$ffcc], a + jr .asm_763 + +.asm_782 + ld [de], a + inc de + dec bc + ld a, b + or c + jr nz, .asm_763 + ret +; 78a + +Function78a: ; 78a + xor a + ld [$ffca], a + ld a, [$ffcb] + cp $2 + jr nz, .asm_79b + ld a, $1 + ld [rSC], a + ld a, $81 + ld [rSC], a + +.asm_79b + ld a, [$ffca] + and a + jr nz, .asm_7e5 + ld a, [$ffcb] + cp $1 + jr nz, .asm_7c0 + call Function82b + jr z, .asm_7c0 + call .asm_825 + push hl + ld hl, $cf5c + inc [hl] + jr nz, .asm_7b7 + dec hl + inc [hl] + +.asm_7b7 + pop hl + call Function82b + jr nz, .asm_79b + jp Function833 + +.asm_7c0 + ld a, [rIE] + and $f + cp $8 + jr nz, .asm_79b + ld a, [$cf5d] + dec a + ld [$cf5d], a + jr nz, .asm_79b + ld a, [$cf5e] + dec a + ld [$cf5e], a + jr nz, .asm_79b + ld a, [$ffcb] + cp $1 + jr z, .asm_7e5 + ld a, $ff +.asm_7e2 + dec a + jr nz, .asm_7e2 + +.asm_7e5 + xor a + ld [$ffca], a + ld a, [rIE] + and $f + sub $8 + jr nz, .asm_7f8 + ld [$cf5d], a + ld a, $50 + ld [$cf5e], a + +.asm_7f8 + ld a, [hSerialReceive] + cp $fe + ret nz + call Function82b + jr z, .asm_813 + push hl + ld hl, $cf5c + ld a, [hl] + dec a + ld [hld], a + inc a + jr nz, .asm_80d + dec [hl] + +.asm_80d + pop hl + call Function82b + jr z, Function833 + +.asm_813 + ld a, [rIE] + and $f + cp $8 + ld a, $fe + ret z + ld a, [hl] + ld [hSerialSend], a + call DelayFrame + jp Function78a + +.asm_825 + ld a, $f +.asm_827 + dec a + jr nz, .asm_827 + ret +; 82b + +Function82b: ; 82b + push hl + ld hl, $cf5b + ld a, [hli] + or [hl] + pop hl + ret +; 833 + +Function833: ; 833 + dec a + ld [$cf5b], a + ld [$cf5c], a + ret +; 83b + +Function83b: ; 83b + ld hl, $cf56 + ld de, $cf51 + ld c, $2 + ld a, $1 + ld [$ffcc], a +.asm_847 + call DelayFrame + ld a, [hl] + ld [hSerialSend], a + call Function78a + ld b, a + inc hl + ld a, [$ffcc] + and a + ld a, $0 + ld [$ffcc], a + jr nz, .asm_847 + ld a, b + ld [de], a + inc de + dec c + jr nz, .asm_847 + ret +; 862 + +Function862: ; 862 + call Function309d + callab Function4000 + call Function87d + jp Function30b4 +; 871 + + +Function871: ; 871 + call Function309d + callab Function4000 + jp Function87d +; 87d + + + +Function87d: ; 87d + ld a, $ff + ld [$cf52], a +.asm_882 + call Function8c1 + call DelayFrame + call Function82b + jr z, .asm_89e + push hl + ld hl, $cf5c + dec [hl] + jr nz, .asm_89d + dec hl + dec [hl] + jr nz, .asm_89d + pop hl + xor a + jp Function833 + +.asm_89d + pop hl + +.asm_89e + ld a, [$cf52] + inc a + jr z, .asm_882 + ld b, $a +.asm_8a6 + call DelayFrame + call Function8c1 + dec b + jr nz, .asm_8a6 + ld b, $a +.asm_8b1 + call DelayFrame + call Function908 + dec b + jr nz, .asm_8b1 + ld a, [$cf52] + ld [$cf51], a + ret +; 8c1 + +Function8c1: ; 8c1 + push bc + ld b, $60 + ld a, [InLinkBattle] + cp $1 + jr z, .asm_8d7 + ld b, $60 + jr c, .asm_8d7 + cp $2 + ld b, $70 + jr z, .asm_8d7 + ld b, $80 + +.asm_8d7 + call Function8f3 + ld a, [$cf56] + add b + ld [hSerialSend], a + ld a, [$ffcb] + cp $2 + jr nz, .asm_8ee + ld a, $1 + ld [rSC], a + ld a, $81 + ld [rSC], a + +.asm_8ee + call Function8f3 + pop bc + ret +; 8f3 + +Function8f3: ; 8f3 + ld a, [hSerialReceive] + ld [$cf51], a + and $f0 + cp b + ret nz + xor a + ld [hSerialReceive], a + ld a, [$cf51] + and $f + ld [$cf52], a + ret +; 908 + +Function908: ; 908 + xor a + ld [hSerialSend], a + ld a, [$ffcb] + cp $2 + ret nz + ld a, $1 + ld [rSC], a + ld a, $81 + ld [rSC], a + ret +; 919 + +Function919: ; 919 + ld a, [InLinkBattle] + and a + ret nz + ld a, $2 + ld [rSB], a + xor a + ld [hSerialReceive], a + ld a, $0 + ld [rSC], a + ld a, $80 + ld [rSC], a + ret +; 92e + + diff --git a/home/sine.asm b/home/sine.asm new file mode 100644 index 000000000..09d06ca89 --- /dev/null +++ b/home/sine.asm @@ -0,0 +1,22 @@ +Cosine: ; 1b0f +; Return d * cos(a) in hl + add $10 ; 90 degrees + +Sine: ; 1b11 +; Return d * sin(a) in hl +; a is a signed 6-bit value. + + ld e, a + + ld a, [hROMBank] + push af + ld a, BANK(_Sine) + rst Bankswitch + + call _Sine + + pop af + rst Bankswitch + ret +; 1b1e + diff --git a/home/sram.asm b/home/sram.asm new file mode 100644 index 000000000..3c42e7618 --- /dev/null +++ b/home/sram.asm @@ -0,0 +1,34 @@ +GetSRAMBank: ; 2fcb +; load sram bank a +; if invalid bank, sram is disabled + cp NUM_SRAM_BANKS + jr c, OpenSRAM + jr CloseSRAM +; 2fd1 + +OpenSRAM: ; 2fd1 +; switch to sram bank a + push af +; latch clock data + ld a, 1 + ld [MBC3LatchClock], a +; enable sram/clock write + ld a, SRAM_ENABLE + ld [MBC3SRamEnable], a +; select sram bank + pop af + ld [MBC3SRamBank], a + ret +; 2fe1 + +CloseSRAM: ; 2fe1 + push af + ld a, SRAM_DISABLE +; reset clock latch for next time + ld [MBC3LatchClock], a +; disable sram/clock write + ld [MBC3SRamEnable], a + pop af + ret +; 2fec + diff --git a/home/string.asm b/home/string.asm new file mode 100644 index 000000000..a871b4d2a --- /dev/null +++ b/home/string.asm @@ -0,0 +1,39 @@ +InitString: ; 2ef6 +; Init a string of length c. + push hl + jr _InitString +; 2ef9 + +InitName: ; 2ef9 +; Intended for names, so this function is limited to ten characters. + push hl + ld c, 10 +; 2efc + +_InitString: ; 2efc +; if the string pointed to by hl is empty (defined as "zero or more spaces +; followed by a null"), then initialize it to the string pointed to by de. + push bc +.loop + ld a, [hli] + cp "@" + jr z, .blank + cp " " + jr nz, .notblank + dec c + jr nz, .loop +.blank + pop bc + ld l, e + ld h, d + pop de + ld b, 0 + inc c + call CopyBytes + ret +.notblank + pop bc + pop hl + ret +; 2f17 + diff --git a/home/text.asm b/home/text.asm new file mode 100644 index 000000000..e010de6d4 --- /dev/null +++ b/home/text.asm @@ -0,0 +1,1230 @@ +ClearBox: ; fb6 +; Fill a c*b box at hl with blank tiles. + + ld a, " " +.y + push bc + push hl +.x + ld [hli], a + dec c + jr nz, .x + pop hl + ld bc, 20 ; screen width + add hl, bc + pop bc + dec b + jr nz, .y + ret +; fc8 + + +ClearTileMap: ; fc8 +; Fill TileMap with blank tiles. + + ld hl, TileMap + ld a, " " + ld bc, 360 ; screen dimensions 20*18 + call ByteFill + +; We aren't done if the LCD is on. + ld a, [rLCDC] + bit 7, a + ret z + jp WaitBGMap +; fdb + + +Functionfdb: ; fdb + ld a, $7 + ld hl, AttrMap + ld bc, $0168 + call ByteFill + jr ClearTileMap +; fe8 + + + +TextBox: ; fe8 +; Draw a text box width c height b at hl +; Dimensions do not include the border. + push bc + push hl + call TextBoxBorder + pop hl + pop bc + jr TextBoxPalette +; ff1 + + +TextBoxBorder: ; ff1 + +; Top + push hl + ld a, "┌" + ld [hli], a + inc a ; "─" + call NPlaceChar + inc a ; "┐" + ld [hl], a + +; Middle + pop hl + ld de, 20 ; screen width + add hl, de +.PlaceRow + push hl + ld a, "│" + ld [hli], a + ld a, " " + call NPlaceChar + ld [hl], "│" + pop hl + ld de, 20 ; screen width + add hl, de + dec b + jr nz, .PlaceRow + +; Bottom + ld a, "└" + ld [hli], a + ld a, "─" + call NPlaceChar + ld [hl], "┘" + + ret +; 101e + + +NPlaceChar: ; 101e +; Place char a c times + ld d,c +.loop + ld [hli],a + dec d + jr nz, .loop + ret +; 1024 + + +TextBoxPalette: ; 1024 +; Fill text box width c height b at hl with pal 7 + ld de, AttrMap - TileMap + add hl, de + inc b + inc b + inc c + inc c + ld a, 7 ; pal +.gotoy + push bc + push hl +.gotox + ld [hli], a + dec c + jr nz, .gotox + pop hl + ld de, 20 ; screen width + add hl, de + pop bc + dec b + jr nz, .gotoy + ret +; 103e + + +SpeechTextBox: ; 103e +; Standard textbox. + hlcoord 0, 12 + ld b, 4 ; height + ld c, 18 ; screen width - 2 (border) + jp TextBox +; 1048 + +UnknownText_0x1048: ; 1048 + db $0, "ゲームフりーク!", $57 +; 1052 + +Function1052: ; 1052 + ld hl, .text_1056 + ret +.text_1056 + db "@" +; 1057 + + +PrintText: ; 1057 + call Function106c +Function105a: ; 105a + push hl + hlcoord 1, 14 + ld bc, 18 + 3<<8 + call ClearBox + pop hl + +PrintTextBoxText: ; 1065 + bccoord 1, 14 + call Function13e5 + ret +; 106c + + +Function106c: ; 106c + push hl + call SpeechTextBox + call Function1ad2 + call Function321c + pop hl + ret +; 1078 + + + +PlaceString: ; 1078 + push hl + +PlaceNextChar: ; 1079 + ld a, [de] + cp "@" + jr nz, CheckDict + ld b, h + ld c, l + pop hl + ret + pop de + +NextChar: ; 1083 + inc de + jp PlaceNextChar + +CheckDict: ; 1087 + cp $15 + jp z, Function117b + cp $4f + jp z, Char4F + cp $4e + jp z, Function12a7 + cp $16 + jp z, Function12b9 + and a + jp z, Function1383 + cp $4c + jp z, $1337 + cp $4b + jp z, Char4B + cp $51 ; Player name + jp z, Function12f2 + cp $49 + jp z, Function1186 + cp $52 ; Mother name + jp z, Function118d + cp $53 + jp z, Function1194 + cp $35 + jp z, Function11e8 + cp $36 + jp z, Function11ef + cp $37 + jp z, Function11f6 + cp $38 + jp z, Function119b + cp $39 + jp z, Function11a2 + cp $54 + jp z, Function11c5 + cp $5b + jp z, Function11b7 + cp $5e + jp z, Function11be + cp $5c + jp z, Function11b0 + cp $5d + jp z, Function11a9 + cp $23 + jp z, Function11cc + cp $22 + jp z, Function12b0 + cp $55 + jp z, Char55 + cp $56 + jp z, Function11d3 + cp $57 + jp z, $137c + cp $58 + jp z, Function135a + cp $4a + jp z, Function11da + cp $24 + jp z, Function11e1 + cp $25 + jp z, NextChar + cp $1f + jr nz, .asm_1122 + ld a, $7f +.asm_1122 + cp $5f + jp z, Char5F + cp $59 + jp z, Function11fd + cp $5a + jp z, Char5D + cp $3f + jp z, $121b + cp $14 + jp z, $1252 + cp $e4 + jr z, .asm_1174 ; 0x113d $35 + cp $e5 + jr z, .asm_1174 ; 0x1141 $31 + jr .asm_114c ; 0x1143 $7 + ld b, a + call Function13c6 + jp NextChar +.asm_114c + cp $60 + jr nc, .asm_1174 ; 0x114e $24 + cp $40 + jr nc, .asm_1165 ; 0x1152 $11 + cp $20 + jr nc, .asm_115c ; 0x1156 $4 + add $80 + jr .asm_115e ; 0x115a $2 +.asm_115c + add $90 +.asm_115e + ld b, $e5 + call Function13c6 + jr .asm_1174 ; 0x1163 $f +.asm_1165 + cp $44 + jr nc, .asm_116d ; 0x1167 $4 + add $59 + jr .asm_116f ; 0x116b $2 +.asm_116d + add $86 +.asm_116f + ld b, $e4 + call Function13c6 +.asm_1174 + ld [hli], a + call PrintLetterDelay + jp NextChar +; 0x117b + + +Function117b: ; 117b + ld c, l + ld b, h + ld a, $5f + ld hl, $7036 + rst FarCall + jp PlaceNextChar +; 1186 + +Function1186: ; 1186 + push de + ld de, MomsName + jp $126a +; 118d + +Function118d: ; 118d + push de + ld de, PlayerName + jp $126a +; 1194 + +Function1194: ; 1194 + push de + ld de, RivalName + jp $126a +; 119b + +Function119b: ; 119b + push de + ld de, RedsName + jp $126a +; 11a2 + +Function11a2: ; 11a2 + push de + ld de, GreensName + jp $126a +; 11a9 + +Function11a9: ; 11a9 + push de + ld de, Char5DText + jp $126a +; 11b0 + +Function11b0: ; 11b0 + push de + ld de, Char5CText + jp $126a +; 11b7 + +Function11b7: ; 11b7 + push de + ld de, Char5BText + jp $126a +; 11be + +Function11be: ; 11be + push de + ld de, Char5EText + jp $126a +; 11c5 + +Function11c5: ; 11c5 + push de + ld de, Char54Text + jp $126a +; 11cc + +Function11cc: ; 11cc + push de + ld de, Char23Text + jp $126a +; 11d3 + +Function11d3: ; 11d3 + push de + ld de, $1292 + jp $126a +; 11da + +Function11da: ; 11da + push de + ld de, Char4AText + jp $126a +; 11e1 + +Function11e1: ; 11e1 + push de + ld de, Char24Text + jp $126a +; 11e8 + +Function11e8: ; 11e8 + push de + ld de, Char37Text + jp $126a +; 11ef + +Function11ef: ; 11ef + push de + ld de, Char37Text + jp $126a +; 11f6 + +Function11f6: ; 11f6 + push de + ld de, Char37Text + jp $126a +; 11fd + + +Function11fd: ; 11fd + ld a, [hBattleTurn] + xor $1 + jr Function1205 +; 1203 + +Char5D: ; 1203 + ld a, [hBattleTurn] +; 1205 + +Function1205: ; 1205 + push de + and a + jr nz, .asm_120e ; 0x1207 $5 + ld de, BattleMonNick + jr .asm_126a ; 0x120c $5c +.asm_120e + ld de, Char5AText ; Enemy + call PlaceString + ld h, b + ld l, c + ld de, EnemyMonNick + jr .asm_126a ; 0x1219 $4f + push de + ld a, [InLinkBattle] + and a + jr nz, .linkbattle + ld a, [TrainerClass] + cp $9 + jr z, .asm_1248 ; 0x1227 $1f + cp $2a + jr z, .asm_1248 ; 0x122b $1b + ld de, $c656 + call PlaceString + ld h, b + ld l, c + ld de, String12a2 + call PlaceString + push bc + ld hl, $5939 + ld a, $e + rst FarCall + pop hl + ld de, StringBuffer1 + jr .asm_126a ; 0x1246 $22 +.asm_1248 + ld de, RivalName + jr .asm_126a ; 0x124b $1d +.linkbattle + ld de, $c656 + jr .asm_126a ; 0x1250 $18 + push de + ld de, PlayerName + call PlaceString + ld h, b + ld l, c + ld a, [PlayerGender] + bit 0, a + ld de, String12a5 + jr z, .asm_126a ; 0x1263 $5 + ld de, String12a6 + jr .asm_126a ; 0x1268 $0 +.asm_126a + call PlaceString + ld h, b + ld l, c + pop de + jp NextChar +; 0x1273 + +Char5CText: ; 1273 + db "TM@" +Char5DText: ; 1276 + db "TRAINER@" +Char5BText: ; 127e + db "PC@" +Char5EText: ; 1281 + db "ROCKET@" +Char54Text: ; 1288 + db "POKé@" +Char23Text: ; 128d + db "こうげき@" +Char56Text:; 1292 + db "……@" +Char5AText: ; 1295 + db "Enemy @" +Char4AText: ; 129c + db $e1, $e2, "@" ; PK MN +Char24Text: ; 129f + db $70, $71, "@" ; PO KE +String12a2: ; 12a2 + db " @" +Char35Text: +Char36Text: +Char37Text: ; 12a4 + db "@" +String12a5: ; 12a5 + db "@" +String12a6: ; 12a6 + db "@" +; 12a7 + +Function12a7: ; 12a7 + pop hl + ld bc, $0028 + add hl, bc + push hl + jp NextChar +; 12b0 + +Function12b0: ; 12b0 + pop hl + ld bc, $0014 + add hl, bc + push hl + jp NextChar +; 12b9 + +Function12b9: ; 12b9 + pop hl + push de + ld bc, $3b60 + add hl, bc + ld de, $ffec + ld c, $1 +.asm_12c4 + ld a, h + and a + jr nz, .asm_12cd + ld a, l + cp $14 + jr c, .asm_12d1 + +.asm_12cd + add hl, de + inc c + jr .asm_12c4 + +.asm_12d1 + ld hl, TileMap + ld de, $0014 + ld a, c +.asm_12d8 + and a + jr z, .asm_12df + add hl, de + dec a + jr .asm_12d8 + +.asm_12df + pop de + inc de + ld a, [de] + ld c, a + ld b, $0 + add hl, bc + push hl + jp NextChar +; 12ea + + +Char4F: ; 12ea + pop hl + hlcoord 1, 16 + push hl + jp NextChar +; 0x12f2 + +Function12f2: ; 12f2 + push de + ld a, [InLinkBattle] + cp $3 + jr z, .asm_1301 + cp $4 + jr z, .asm_1301 + call Function13c7 + +.asm_1301 + call Function13b6 + call Functionaaf + ld hl, $c5b9 + ld bc, $0312 + call ClearBox + call Function13cd + ld c, $14 + call DelayFrames + ld hl, $c5b9 + pop de + jp NextChar +; 131f + + +Char4B: ; 131f + ld a, [InLinkBattle] + or a + jr nz, .asm_1328 + call Function13c7 + +.asm_1328 + call Function13b6 + + push de + call Functionaaf + pop de + + ld a, [InLinkBattle] + or a + call z, Function13cd + + push de + call Function138c + call Function138c + hlcoord 1, 16 + pop de + jp NextChar +; 1345 + + +Char55: ; 1345 + push de + ld de, Text_1354 + ld b, h + ld c, l + call PlaceString + ld h, b + ld l, c + pop de + jp NextChar +; 1354 + +Text_1354: ; 1354 + db $4b, "@" +; 1356 + + +Char5F: ; 1356 +; ends a Pokédex entry + ld [hl], "." + pop hl + ret +; 135a + +Function135a: ; 135a + ld a, [InLinkBattle] + cp $3 + jr z, .asm_1368 + cp $4 + jr z, .asm_1368 + call Function13c7 + +.asm_1368 + call Function13b6 + call Functionaaf + ld a, [InLinkBattle] + cp $3 + jr z, .asm_137c + cp $4 + jr z, .asm_137c + call Function13cd + +.asm_137c + pop hl + ld de, .string_1382 + dec de + ret + +.string_1382 + db "@" +; 1383 + +Function1383: ; 1383 + ld a, $e6 + ld [hli], a + call PrintLetterDelay + jp NextChar +; 138c + +Function138c: ; 138c + ld hl, $c5b9 + ld de, $c5a5 + ld a, $3 +.asm_1394 + push af + ld c, $12 +.asm_1397 + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .asm_1397 + inc de + inc de + inc hl + inc hl + pop af + dec a + jr nz, .asm_1394 + ld hl, $c5e1 + ld a, $7f + ld bc, $0012 + call ByteFill + ld c, $5 + call DelayFrames + ret +; 13b6 + +Function13b6: ; 13b6 + push bc + ld a, [hOAMUpdate] + push af + ld a, $1 + ld [hOAMUpdate], a + call WaitBGMap + pop af + ld [hOAMUpdate], a + pop bc + ret +; 13c6 + +Function13c6: ; 13c6 + ret +; 13c7 + +Function13c7: ; 13c7 + ld a, $ee + ld [$c606], a + ret +; 13cd + +Function13cd: ; 13cd + ld a, [$c605] + ld [$c606], a + ret +; 13d4 + +Function13d4: ; 13d4 + ld b, a + ld a, [hROMBank] + push af + ld a, b + rst Bankswitch + + call PlaceString + pop af + rst Bankswitch + + ret +; 13e0 + +Function13e0: ; 13e0 + ld hl, $13e4 + ret + +.string_13e4 + db "@" +; 13e5 + + +Function13e5: ; 13e5 + ld a, [$cfcf] + push af + set 1, a + ld [$cfcf], a + call Function13f6 + pop af + ld [$cfcf], a + ret +; 13f6 + +Function13f6: ; 13f6 +.asm_13f6 + ld a, [hli] + cp "@" + ret z + call Function13ff + jr .asm_13f6 +; 13ff + +Function13ff: ; 13ff + push hl + push bc + ld c, a + ld b, 0 + ld hl, TextCommands + add hl, bc + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + pop bc + pop hl + +; jp de + push de + ret +; 1410 + +TextCommands: ; 1410 + dw Text_00 + dw Text_01 + dw Text_02 + dw Text_03 + dw Text_04 + dw Text_05 + dw Text_06 + dw Text_07 + dw Text_08 + dw Text_09 + dw Text_0A + dw Text_PlaySound ; $0b + dw Text_0C + dw Text_0D + dw Text_PlaySound ; $0e + dw Text_PlaySound ; $0f + dw Text_PlaySound ; $10 + dw Text_PlaySound ; $11 + dw Text_PlaySound ; $12 + dw Text_PlaySound ; $13 + dw Text_14 + dw Text_15 + dw Text_16 +; 143e + +Text_00: ; 143e +; TX +; write text until "@" +; [$00]["...@"] + + ld d, h + ld e, l + ld h, b + ld l, c + call PlaceString + ld h, d + ld l, e + inc hl + ret +; 1449 + +Text_01: ; 1449 +; TX_RAM +; write text from a ram address +; little endian +; [$01][addr] + + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + push hl + ld h, b + ld l, c + call PlaceString + pop hl + ret +; 1455 + +Text_16: ; 1455 +; TX_FAR +; write text from a different bank +; little endian +; [$16][addr][bank] + + ld a, [hROMBank] + push af + + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld a, [hli] + + ld [hROMBank], a + ld [MBC3RomBank], a + + push hl + ld h, d + ld l, e + call Function13f6 + pop hl + + pop af + ld [hROMBank], a + ld [MBC3RomBank], a + ret +; 1470 + +Text_02: ; 1470 +; TX_NUM +; write bcdnumber from address, typically ram +; little endian +; [$02][addr][flags] +; flags: see PrintBCDNumber + + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld a, [hli] + push hl + ld h, b + ld l, c + ld c, a + call PrintBCDNumber + ld b, h + ld c, l + pop hl + ret +; 1480 + +Text_03: ; 1480 +; TX_MOVE +; move to a new tile +; little endian +; [$03][tileaddr] + + ld a, [hli] + ld [$d0e6], a + ld c, a + ld a, [hli] + ld [$d0e7], a + ld b, a + ret +; 148b + +Text_04: ; 148b +; TX_BOX +; draw a box +; little endian +; [$04][tileaddr][height][width] + + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld a, [hli] + ld b, a + ld a, [hli] + ld c, a + push hl + ld h, d + ld l, e + call TextBox + pop hl + ret +; 149b + +Text_05: ; 149b +; TX_LOW +; write text at (1,16) +; [$05] + + bccoord 1, 16 + ret +; 149f + +Text_06:: ; 149f +; TX_WAITBUTTON +; wait for button press +; show arrow +; [06] + + ld a, [InLinkBattle] + cp $3 + jp z, Text_0D + cp $4 + jp z, Text_0D + push hl + call Function13c7 + push bc + call Functionaaf + pop bc + call Function13cd + pop hl + ret +; 14ba + +Text_07: ; 14ba + push hl + call Function13cd + call Function138c + call Function138c + pop hl + bccoord 1, 16 + ret +; 14c9 + +Text_08: ; 14c9 +; TX_ASM + +; rom only? + bit 7, h + jr nz, .asm_14ce + jp [hl] + +.asm_14ce + ld a, "@" + ld [hl], a + ret +; 14d2 + +Text_09: ; 14d2 + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld a, [hli] + push hl + ld h, b + ld l, c + ld b, a + and $f + ld c, a + ld a, b + and $f0 + swap a + set 6, a + ld b, a + call PrintNum + ld b, h + ld c, l + pop hl + ret +; 14ed + +Text_0A: ; 14ed + push hl + push bc + call GetJoypadPublic + ld a, [hJoyDown] + and A_BUTTON | B_BUTTON + jr nz, .asm_14fd + ld c, 30 + call DelayFrames + +.asm_14fd + pop bc + pop hl + ret +; 1500 + +Text_PlaySound:: ; 1500 +; chars: +; $0b, $0e, $0f, $10, $11, $12, $13 +; see TextSFX + + push bc + dec hl + ld a, [hli] + ld b, a + push hl + ld hl, TextSFX +.asm_1508 + ld a, [hli] + cp $ff + jr z, .asm_151f + cp b + jr z, .asm_1514 + inc hl + inc hl + jr .asm_1508 + +.asm_1514 + push de + ld e, [hl] + inc hl + ld d, [hl] + call StartSFX + call WaitSFX + pop de + +.asm_151f + pop hl + pop bc + ret +; 1522 + +Function1522: ; 1522 + push de + ld e, [hl] + inc hl + ld d, [hl] + call Function37ce + pop de + pop hl + pop bc + ret +; 152d + +TextSFX: ; 152d + dbw $0b, SFX_DEX_FANFARE_50_79 + dbw $12, SFX_FANFARE + dbw $0e, SFX_DEX_FANFARE_20_49 + dbw $0f, SFX_ITEM + dbw $10, SFX_CAUGHT_MON + dbw $11, SFX_DEX_FANFARE_80_109 + dbw $13, SFX_SLOT_MACHINE_START + db $ff ; end +; 1543 + +Text_0C: ; 1543 + ld a, [hli] + ld d, a + push hl + ld h, b + ld l, c +.asm_1548 + push de + ld a, "…" + ld [hli], a + call GetJoypadPublic + ld a, [hJoyDown] + and A_BUTTON | B_BUTTON + jr nz, .asm_155a + ld c, 10 + call DelayFrames +.asm_155a + pop de + dec d + jr nz, .asm_1548 + ld b, h + ld c, l + pop hl + ret +; 1562 + +Text_0D: ; 1562 +; wait for key down +; display arrow + push hl + push bc + call Functionaaf + pop bc + pop hl + ret +; 156a + +Text_14: ; 156a +; TX_PREDEF +; [$14][id] + + ld a, [hli] + push hl + ld e, a + ld d, 0 + ld hl, $4000 + add hl, de + add hl, de + ld a, $9 + call GetFarHalfword + ld d, h + ld e, l + ld h, b + ld l, c + call PlaceString + pop hl + ret +; 1582 + +Text_15: ; 1582 +; TX_DAY + + call GetWeekday + push hl + push bc + ld c, a + ld b, 0 + ld hl, .Days + add hl, bc + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld d, h + ld e, l + pop hl + call PlaceString + ld h, b + ld l, c + ld de, .Day + call PlaceString + pop hl + ret +; 15a2 + +.Days ; 15a2 + dw .Sun + dw .Mon + dw .Tues + dw .Wednes + dw .Thurs + dw .Fri + dw .Satur + +.Sun db "SUN@" +.Mon db "MON@" +.Tues db "TUES@" +.Wednes db "WEDNES@" +.Thurs db "THURS@" +.Fri db "FRI@" +.Satur db "SATUR@" +.Day db "DAY@" +; 15d8 + diff --git a/home/time.asm b/home/time.asm new file mode 100644 index 000000000..fff52b173 --- /dev/null +++ b/home/time.asm @@ -0,0 +1,311 @@ +; Functions relating to the timer interrupt and the real-time-clock. + + +AskTimer: ; 591 + push af + ld a, [$ffe9] + and a + jr z, .asm_59a + call Timer + +.asm_59a + pop af + reti +; 59c + + +LatchClock: ; 59c +; latch clock counter data + ld a, 0 + ld [MBC3LatchClock], a + ld a, 1 + ld [MBC3LatchClock], a + ret +; 5a7 + + +UpdateTime: ; 5a7 + call GetClock + call FixDays + call FixTime + callba GetTimeOfDay + ret +; 5b7 + + +GetClock: ; 5b7 +; store clock data in hRTCDayHi-hRTCSeconds + +; enable clock r/w + ld a, SRAM_ENABLE + ld [MBC3SRamEnable], a + +; clock data is 'backwards' in hram + + call LatchClock + ld hl, MBC3SRamBank + ld de, MBC3RTC + + ld [hl], RTC_S + ld a, [de] + and $3f + ld [hRTCSeconds], a + + ld [hl], RTC_M + ld a, [de] + and $3f + ld [hRTCMinutes], a + + ld [hl], RTC_H + ld a, [de] + and $1f + ld [hRTCHours], a + + ld [hl], RTC_DL + ld a, [de] + ld [hRTCDayLo], a + + ld [hl], RTC_DH + ld a, [de] + ld [hRTCDayHi], a + +; unlatch clock / disable clock r/w + call CloseSRAM + ret +; 5e8 + + +FixDays: ; 5e8 +; fix day count +; mod by 140 + +; check if day count > 255 (bit 8 set) + ld a, [hRTCDayHi] ; DH + bit 0, a + jr z, .daylo +; reset dh (bit 8) + res 0, a + ld [hRTCDayHi], a ; DH + +; mod 140 +; mod twice since bit 8 (DH) was set + ld a, [hRTCDayLo] ; DL +.modh + sub 140 + jr nc, .modh +.modl + sub 140 + jr nc, .modl + add 140 + +; update dl + ld [hRTCDayLo], a ; DL + +; unknown output + ld a, $40 ; %1000000 + jr .set + +.daylo +; quit if fewer than 140 days have passed + ld a, [hRTCDayLo] ; DL + cp 140 + jr c, .quit + +; mod 140 +.mod + sub 140 + jr nc, .mod + add 140 + +; update dl + ld [hRTCDayLo], a ; DL + +; unknown output + ld a, $20 ; %100000 + +.set +; update clock with modded day value + push af + call SetClock + pop af + scf + ret + +.quit + xor a + ret +; 61d + + +FixTime: ; 61d +; add ingame time (set at newgame) to current time +; day hr min sec +; store time in CurDay, hHours, hMinutes, hSeconds + +; second + ld a, [hRTCSeconds] ; S + ld c, a + ld a, [StartSecond] + add c + sub 60 + jr nc, .updatesec + add 60 +.updatesec + ld [hSeconds], a + +; minute + ccf ; carry is set, so turn it off + ld a, [hRTCMinutes] ; M + ld c, a + ld a, [StartMinute] + adc c + sub 60 + jr nc, .updatemin + add 60 +.updatemin + ld [hMinutes], a + +; hour + ccf ; carry is set, so turn it off + ld a, [hRTCHours] ; H + ld c, a + ld a, [StartHour] + adc c + sub 24 + jr nc, .updatehr + add 24 +.updatehr + ld [hHours], a + +; day + ccf ; carry is set, so turn it off + ld a, [hRTCDayLo] ; DL + ld c, a + ld a, [StartDay] + adc c + ld [CurDay], a + ret +; 658 + +Function658: ; 658 + xor a + ld [StringBuffer2], a + ld a, $0 + ld [$d089], a + jr .asm_677 + + call UpdateTime + ld a, [hHours] + ld [$d087], a + ld a, [hMinutes] + ld [$d088], a + ld a, [hSeconds] + ld [$d089], a + jr .asm_677 + +.asm_677 + ld a, $5 + ld hl, $40ed + rst FarCall + ret +; 67e + + + +Function67e: ; 67e + call Function685 + call SetClock + ret +; 685 + +Function685: ; 685 + xor a + ld [hRTCSeconds], a + ld [hRTCMinutes], a + ld [hRTCHours], a + ld [hRTCDayLo], a + ld [hRTCDayHi], a + ret +; 691 + + +SetClock: ; 691 +; set clock data from hram + +; enable clock r/w + ld a, SRAM_ENABLE + ld [MBC3SRamEnable], a + +; set clock data +; stored 'backwards' in hram + + call LatchClock + ld hl, MBC3SRamBank + ld de, MBC3RTC + +; seems to be a halt check that got partially commented out +; this block is totally pointless + ld [hl], RTC_DH + ld a, [de] + bit 6, a ; halt + ld [de], a + +; seconds + ld [hl], RTC_S + ld a, [hRTCSeconds] + ld [de], a +; minutes + ld [hl], RTC_M + ld a, [hRTCMinutes] + ld [de], a +; hours + ld [hl], RTC_H + ld a, [hRTCHours] + ld [de], a +; day lo + ld [hl], RTC_DL + ld a, [hRTCDayLo] + ld [de], a +; day hi + ld [hl], RTC_DH + ld a, [hRTCDayHi] + res 6, a ; make sure timer is active + ld [de], a + +; cleanup + call CloseSRAM ; unlatch clock, disable clock r/w + ret +; 6c4 + + +Function6c4: ; 6c4 + xor a + push af + ld a, $0 + call GetSRAMBank + pop af + ld [$ac60], a + call CloseSRAM + ret +; 6d3 + +Function6d3: ; 6d3 + ld hl, $ac60 + push af + ld a, $0 + call GetSRAMBank + pop af + or [hl] + ld [hl], a + call CloseSRAM + ret +; 6e3 + +Function6e3: ; 6e3 + ld a, $0 + call GetSRAMBank + ld a, [$ac60] + call CloseSRAM + ret +; 6ef + diff --git a/home/vblank.asm b/home/vblank.asm new file mode 100644 index 000000000..71114964e --- /dev/null +++ b/home/vblank.asm @@ -0,0 +1,541 @@ +; VBlank is the interrupt responsible for updating VRAM. + +; In Pokemon Crystal, VBlank has been hijacked to act as the +; main loop. After time-sensitive graphics operations have been +; performed, joypad input and sound functions are executed. + +; This prevents the display and audio output from lagging. + + +VBlank: ; 283 + push af + push bc + push de + push hl + +; get vblank type + ld a, [$ff9e] + and $7 + +; get fn pointer + ld e, a + ld d, $0 + ld hl, .VBlanks + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + +; down to business + call _hl_ + +; since this is called once per frame + call GameTimer + + pop hl + pop de + pop bc + pop af + reti +; 2a1 + +.VBlanks ; 2a1 + dw VBlank0 ; 0 + dw VBlank1 ; 1 + dw VBlank2 ; 2 + dw VBlank3 ; 3 + dw VBlank4 ; 4 + dw VBlank5 ; 5 + dw VBlank6 ; 6 + dw VBlank0 ; 7 +; 2b1 + + +VBlank0: ; 2b1 +; normal operation + +; rng +; scx, scy, wy, wx +; bg map buffer +; palettes +; dma transfer +; bg map +; tiles +; oam +; joypad +; sound + +; inc frame counter + ld hl, $ff9b + inc [hl] + +; advance rng + ld a, [rDIV] + ld b, a + ld a, [hRandomAdd] + adc b + ld [hRandomAdd], a + + ld a, [rDIV] + ld b, a + ld a, [hRandomSub] + sbc b + ld [hRandomSub], a + +; save bank + ld a, [hROMBank] ; current bank + ld [$ff8a], a + +; scroll x + ld a, [hSCX] + ld [rSCX], a +; scroll y + ld a, [hSCY] + ld [rSCY], a +; window y + ld a, [hWY] + ld [rWY], a +; window x + 7 + ld a, [hWX] + ld [rWX], a + +; some time management is in order +; only have time for one of these during vblank + +; bg map buffer has priority + call UpdateBGMapBuffer + jr c, .doneframeaction + +; then pals + call UpdatePalsIfCGB + jr c, .doneframeaction + +; dma transfer + call DMATransfer + jr c, .doneframeaction + +; bg map + call UpdateBGMap + +; these have their own timing checks + call Serve2bppRequest + call Serve1bppRequest + call AnimateTileset + +.doneframeaction +; oam update off? + ld a, [hOAMUpdate] + and a + jr nz, .vblankoccurred + +; update oam by dma transfer + call hPushOAM +; @PushOAM: +; ld a, Sprites >> 8 +; ld [rDMA], a +; ld a, $28 +; .loop +; dec a +; jr nz, .loop +; ret + + +; vblank-sensitive operations are done + +.vblankoccurred +; tell other fns vblank happened + xor a + ld [VBlankOccurred], a + +; dec OverworldDelay until 0 + ld a, [OverworldDelay] + and a + jr z, .textdelay + dec a + ld [OverworldDelay], a + +.textdelay +; dec text delay counter until 0 + ld a, [TextDelayFrames] + and a + jr z, .joypad + dec a + ld [TextDelayFrames], a + +.joypad + call Joypad + +; update sound + ld a, BANK(UpdateSound) + rst Bankswitch ; bankswitch + call UpdateSound + ld a, [$ff8a] + rst Bankswitch ; restore bank + +; + ld a, [hSeconds] + ld [$ffe3], a + + ret +; 325 + + +VBlank2: ; 325 +; sound only + +; save bank + ld a, [hROMBank] + ld [$ff8a], a + +; update sound + ld a, BANK(UpdateSound) + rst Bankswitch ; bankswitch + call UpdateSound + +; restore bank + ld a, [$ff8a] + rst Bankswitch + +; tell other fns vblank happened + xor a + ld [VBlankOccurred], a + ret +; 337 + + +VBlank1: ; 337 +; scx, scy +; palettes +; bg map +; tiles +; oam +; sound / lcd stat + +; save bank + ld a, [hROMBank] + ld [$ff8a], a + +; scroll x + ld a, [hSCX] + ld [rSCX], a + +; scroll y + ld a, [hSCY] + ld [rSCY], a + +; time-sensitive fns + call UpdatePals + jr c, .vblankoccurred + +; these have their own timing checks + call UpdateBGMap + call Serve2bppRequest@VBlank +; update oam by dma transfer + call hPushOAM +; @PushOAM: +; ld a, Sprites >> 8 +; ld [rDMA], a +; ld a, $28 +; .loop +; dec a +; jr nz, .loop +; ret + +.vblankoccurred +; tell other fns vblank happened + xor a + ld [VBlankOccurred], a + +; get requested ints + ld a, [rIF] + ld b, a +; discard requested ints + xor a + ld [rIF], a +; enable lcd stat + ld a, %10 ; lcd stat + ld [rIE], a +; rerequest serial int if applicable (still disabled) +; request lcd stat + ld a, b + and %1000 ; serial + or %10 ; lcd stat + ld [rIF], a + + ei +; update sound + ld a, BANK(UpdateSound) + rst Bankswitch ; bankswitch + call UpdateSound +; restore bank + ld a, [$ff8a] + rst Bankswitch + di + +; get requested ints + ld a, [rIF] + ld b, a +; discard requested ints + xor a + ld [rIF], a +; enable ints besides joypad + ld a, %1111 ; serial timer lcdstat vblank + ld [rIE], a +; rerequest ints + ld a, b + ld [rIF], a + ret +; 37f + + +UpdatePals: ; 37f +; update pals for either dmg or cgb + +; check cgb + ld a, [hCGB] + and a + jp nz, UpdateCGBPals + +; update gb pals + ld a, [$cfc7] + ld [rBGP], a + + ld a, [$cfc8] + ld [rOBP0], a + + ld a, [$cfc9] + ld [rOBP1], a + + and a + ret +; 396 + + +VBlank3: ; 396 +; scx, scy +; palettes +; bg map +; tiles +; oam +; sound / lcd stat + +; save bank + ld a, [hROMBank] + ld [$ff8a], a + +; scroll x + ld a, [hSCX] + ld [rSCX], a +; scroll y + ld a, [hSCY] + ld [rSCY], a + +; any pals to update? + ld a, [hCGBPalUpdate] + and a + call nz, ForceUpdateCGBPals + jr c, .vblankoccurred +; else + call UpdateBGMap + call Serve2bppRequest@VBlank + +; update oam by dma transfer + call hPushOAM +; @PushOAM: +; ld a, Sprites >> 8 +; ld [rDMA], a +; ld a, $28 +; .loop +; dec a +; jr nz, .loop +; ret + +.vblankoccurred +; tell other fns vblank happened + xor a + ld [VBlankOccurred], a + +; save int flag + ld a, [rIF] + push af +; reset ints + xor a + ld [rIF], a +; force lcdstat int during sound update + ld a, %10 ; lcd stat + ld [rIE], a + ld [rIF], a + + ei +; update sound + ld a, BANK(UpdateSound) + rst Bankswitch ; bankswitch + call UpdateSound +; restore bank + ld a, [$ff8a] + rst Bankswitch + di + +; request lcdstat + ld a, [rIF] + ld b, a +; and any other ints + pop af + or b + ld b, a +; reset ints + xor a + ld [rIF], a +; enable ints besides joypad + ld a, %1111 ; serial timer lcdstat vblank + ld [rIE], a +; request ints + ld a, b + ld [rIF], a + ret +; 3df + + +VBlank4: ; 3df +; bg map +; tiles +; oam +; joypad +; serial +; sound + +; save bank + ld a, [hROMBank] + ld [$ff8a], a + + call UpdateBGMap + call Serve2bppRequest + +; update oam by dma transfer + call hPushOAM +; @PushOAM: +; ld a, Sprites >> 8 +; ld [rDMA], a +; ld a, $28 +; .loop +; dec a +; jr nz, .loop +; ret + +; update joypad + call Joypad + +; tell other fns vblank happened + xor a + ld [VBlankOccurred], a + +; handshake + call AskSerial + +; update sound + ld a, BANK(UpdateSound) + rst Bankswitch ; bankswitch + call UpdateSound +; restore bank + ld a, [$ff8a] + rst Bankswitch + ret +; 400 + + +VBlank5: ; 400 +; scx +; palettes +; bg map +; tiles +; joypad +; + +; save bank + ld a, [hROMBank] + ld [$ff8a], a + +; scroll x + ld a, [hSCX] + ld [rSCX], a + +; if we can update pals, skip this part + call UpdatePalsIfCGB + jr c, .vblankoccurred + + call UpdateBGMap + call Serve2bppRequest + +.vblankoccurred +; tell other fns vblank happened + xor a + ld [VBlankOccurred], a + +; joypad + call Joypad + +; discard requested ints + xor a + ld [rIF], a +; enable lcd stat + ld a, %10 ; lcd stat + ld [rIE], a +; request lcd stat + ld [rIF], a + + ei +; update sound + ld a, BANK(UpdateSound) + rst Bankswitch ; bankswitch + call UpdateSound +; restore bank + ld a, [$ff8a] + rst Bankswitch + di + +; discard requested ints + xor a + ld [rIF], a +; enable ints besides joypad + ld a, %1111 ; serial timer lcdstat vblank + ld [rIE], a + ret +; 436 + + +VBlank6: ; 436 +; palettes +; tiles +; dma transfer +; sound + +; save bank + ld a, [hROMBank] + ld [$ff8a], a + +; inc frame counter + ld hl, $ff9b + inc [hl] + + call UpdateCGBPals + jr c, .vblankoccurred + + call Serve2bppRequest + call Serve1bppRequest + call DMATransfer + +.vblankoccurred +; tell other fns vblank happened + xor a + ld [VBlankOccurred], a + +; update sound + ld a, BANK(UpdateSound) + rst Bankswitch ; bankswitch + call UpdateSound +; restore bank + ld a, [$ff8a] + rst Bankswitch + ret +; 45a diff --git a/home/video.asm b/home/video.asm new file mode 100644 index 000000000..0d0aa272d --- /dev/null +++ b/home/video.asm @@ -0,0 +1,487 @@ +; Functions dealing with VRAM. + +DMATransfer: ; 15d8 +; Return carry if the transfer is completed. + + ld a, [hDMATransfer] + and a + ret z + +; Start transfer + ld [rHDMA5], a + +; Execution is halted until the transfer is complete. + + xor a + ld [hDMATransfer], a + scf + ret +; 15e3 + + +UpdateBGMapBuffer: ; 15e3 +; Copy [$ffdc] 16x8 tiles from BGMapBuffer +; to bg map addresses in BGMapBufferPtrs. + +; [$ffdc] must be even since this is done in pairs. + +; Return carry on success. + + ld a, [hBGMapUpdate] + and a + ret z + + ld a, [rVBK] + push af + ld [hSPBuffer], sp + + ld hl, BGMapBufferPtrs + ld sp, hl + +; We can now pop the addresses of affected spots on the BG Map + + ld hl, BGMapPalBuffer + ld de, BGMapBuffer + + +.next +; Copy a pair of 16x8 blocks (one 16x16 block) + +rept 2 +; Get our BG Map address + pop bc + +; Palettes + ld a, 1 + ld [rVBK], a + + ld a, [hli] + ld [bc], a + inc c + ld a, [hli] + ld [bc], a + dec c + +; Tiles + ld a, 0 + ld [rVBK], a + + ld a, [de] + inc de + ld [bc], a + inc c + ld a, [de] + inc de + ld [bc], a +endr + +; We've done 2 16x8 blocks + ld a, [$ffdc] + dec a + dec a + ld [$ffdc], a + + jr nz, .next + + + ld a, [hSPBuffer] + ld l, a + ld a, [hSPBuffer + 1] + ld h, a + ld sp, hl + + pop af + ld [rVBK], a + + xor a + ld [hBGMapUpdate], a + scf + ret +; 163a + + +WaitTop: ; 163a +; Wait until the top third of the BG Map is being updated. + + ld a, [hBGMapMode] + and a + ret z + + ld a, [hBGMapThird] + and a + jr z, .done + + call DelayFrame + jr WaitTop + +.done + xor a + ld [hBGMapMode], a + ret +; 164c + + +UpdateBGMap: ; 164c +; Update the BG Map, in thirds, from TileMap and AttrMap. + + ld a, [hBGMapMode] + and a + ret z + +; BG Map 0 + dec a ; 1 + jr z, .Tiles + dec a ; 2 + jr z, .Attr + +; BG Map 1 + dec a + + ld a, [hBGMapAddress] + ld l, a + ld a, [hBGMapAddress + 1] + ld h, a + push hl + + xor a + ld [hBGMapAddress], a + ld a, VBGMap1 >> 8 + ld [hBGMapAddress + 1], a + + ld a, [hBGMapMode] + push af + cp 3 + call z, .Tiles + pop af + cp 4 + call z, .Attr + + pop hl + ld a, l + ld [hBGMapAddress], a + ld a, h + ld [hBGMapAddress + 1], a + ret + + +.Attr + ld a, 1 + ld [rVBK], a + + ld hl, AttrMap + call .update + + ld a, 0 + ld [rVBK], a + ret + + +.Tiles + ld hl, TileMap + + +.update + ld [hSPBuffer], sp + +; Which third? + ld a, [hBGMapThird] + and a ; 0 + jr z, .top + dec a ; 1 + jr z, .middle + ; 2 + + +THIRD_HEIGHT EQU SCREEN_HEIGHT / 3 + + +.bottom + ld de, 2 * THIRD_HEIGHT * SCREEN_WIDTH + add hl, de + ld sp, hl + + ld a, [hBGMapAddress + 1] + ld h, a + ld a, [hBGMapAddress] + ld l, a + + ld de, 2 * THIRD_HEIGHT * BG_MAP_WIDTH + add hl, de + +; Next time: top third + xor a + jr .start + + +.middle + ld de, THIRD_HEIGHT * SCREEN_WIDTH + add hl, de + ld sp, hl + + ld a, [hBGMapAddress + 1] + ld h, a + ld a, [hBGMapAddress] + ld l, a + + ld de, THIRD_HEIGHT * BG_MAP_WIDTH + add hl, de + +; Next time: bottom third + ld a, 2 + jr .start + + +.top + ld sp, hl + + ld a, [hBGMapAddress + 1] + ld h, a + ld a, [hBGMapAddress] + ld l, a + +; Next time: middle third + ld a, 1 + + +.start +; Which third to update next time + ld [hBGMapThird], a + +; Rows of tiles in a third + ld a, SCREEN_HEIGHT / 3 + +; Discrepancy between TileMap and BGMap + ld bc, BG_MAP_WIDTH - (SCREEN_WIDTH - 1) + + +.row +; Copy a row of 20 tiles +rept SCREEN_WIDTH / 2 - 1 + pop de + ld [hl], e + inc l + ld [hl], d + inc l +endr + pop de + ld [hl], e + inc l + ld [hl], d + + add hl, bc + dec a + jr nz, .row + + + ld a, [hSPBuffer] + ld l, a + ld a, [hSPBuffer + 1] + ld h, a + ld sp, hl + ret +; 170a + + +Serve1bppRequest: ; 170a +; Only call during the first fifth of VBlank + + ld a, [Requested1bpp] + and a + ret z + +; Back out if we're too far into VBlank + ld a, [rLY] + cp 144 + ret c + cp 146 + ret nc + +; Copy [Requested1bpp] 1bpp tiles from [Requested1bppSource] to [Requested1bppDest] + + ld [hSPBuffer], sp + +; Source + ld hl, Requested1bppSource + ld a, [hli] + ld h, [hl] + ld l, a + ld sp, hl + +; Destination + ld hl, Requested1bppDest + ld a, [hli] + ld h, [hl] + ld l, a + +; # tiles to copy + ld a, [Requested1bpp] + ld b, a + + xor a + ld [Requested1bpp], a + +.next + +rept 3 + pop de + ld [hl], e + inc l + ld [hl], e + inc l + ld [hl], d + inc l + ld [hl], d + inc l +endr + pop de + ld [hl], e + inc l + ld [hl], e + inc l + ld [hl], d + inc l + ld [hl], d + + inc hl + dec b + jr nz, .next + + + ld a, l + ld [Requested1bppDest], a + ld a, h + ld [Requested1bppDest + 1], a + + ld [Requested1bppSource], sp + + ld a, [hSPBuffer] + ld l, a + ld a, [hSPBuffer + 1] + ld h, a + ld sp, hl + ret +; 1769 + + +Serve2bppRequest: ; 1769 +; Only call during the first fifth of VBlank + + ld a, [Requested2bpp] + and a + ret z + +; Back out if we're too far into VBlank + ld a, [rLY] + cp 144 + ret c + cp 146 + ret nc + jr _Serve2bppRequest + + +Serve2bppRequest@VBlank: ; 1778 + + ld a, [Requested2bpp] + and a + ret z + +_Serve2bppRequest: ; 177d +; Copy [Requested2bpp] 2bpp tiles from [Requested2bppSource] to [Requested2bppDest] + + ld [hSPBuffer], sp + +; Source + ld hl, Requested2bppSource + ld a, [hli] + ld h, [hl] + ld l, a + ld sp, hl + +; Destination + ld hl, Requested2bppDest + ld a, [hli] + ld h, [hl] + ld l, a + +; # tiles to copy + ld a, [Requested2bpp] + ld b, a + + xor a + ld [Requested2bpp], a + +.next + +rept 7 + pop de + ld [hl], e + inc l + ld [hl], d + inc l +endr + pop de + ld [hl], e + inc l + ld [hl], d + + inc hl + dec b + jr nz, .next + + + ld a, l + ld [Requested2bppDest], a + ld a, h + ld [Requested2bppDest + 1], a + + ld [Requested2bppSource], sp + + ld a, [hSPBuffer] + ld l, a + ld a, [hSPBuffer + 1] + ld h, a + ld sp, hl + ret +; 17d3 + + +AnimateTileset: ; 17d3 +; Only call during the first fifth of VBlank + + ld a, [$ffde] + and a + ret z + +; Back out if we're too far into VBlank + ld a, [rLY] + cp 144 + ret c + cp 151 + ret nc + + ld a, [hROMBank] + push af + ld a, BANK(_AnimateTileset) + rst Bankswitch + + ld a, [rSVBK] + push af + ld a, 1 + ld [rSVBK], a + + ld a, [rVBK] + push af + ld a, 0 + ld [rVBK], a + + call _AnimateTileset + + pop af + ld [rVBK], a + pop af + ld [rSVBK], a + pop af + rst Bankswitch + ret +; 17ff + diff --git a/main.asm b/main.asm index 9f87c49d0..011e7d966 100644 --- a/main.asm +++ b/main.asm @@ -14,22 +14,22 @@ Start: SECTION "start",ROM0[$150] -INCLUDE "common/init.asm" -INCLUDE "common/vblank.asm" -INCLUDE "common/delay.asm" -INCLUDE "common/rtc.asm" -INCLUDE "common/fade.asm" -INCLUDE "common/lcd.asm" -INCLUDE "common/time.asm" -INCLUDE "common/serial.asm" -INCLUDE "common/joypad.asm" -INCLUDE "common/decompress.asm" -INCLUDE "common/palettes.asm" -INCLUDE "common/copy.asm" -INCLUDE "common/text.asm" -INCLUDE "common/video.asm" -INCLUDE "common/map_objects.asm" -INCLUDE "common/sine.asm" +INCLUDE "home/init.asm" +INCLUDE "home/vblank.asm" +INCLUDE "home/delay.asm" +INCLUDE "home/rtc.asm" +INCLUDE "home/fade.asm" +INCLUDE "home/lcd.asm" +INCLUDE "home/time.asm" +INCLUDE "home/serial.asm" +INCLUDE "home/joypad.asm" +INCLUDE "home/decompress.asm" +INCLUDE "home/palettes.asm" +INCLUDE "home/copy.asm" +INCLUDE "home/text.asm" +INCLUDE "home/video.asm" +INCLUDE "home/map_objects.asm" +INCLUDE "home/sine.asm" Function1b1e: ; 1b1e ld [$d003], a @@ -473,10 +473,10 @@ Function1d19: ; 1d19 ; 1d35 -INCLUDE "common/menu.asm" -INCLUDE "common/handshake.asm" -INCLUDE "common/game_time.asm" -INCLUDE "common/map.asm" +INCLUDE "home/menu.asm" +INCLUDE "home/handshake.asm" +INCLUDE "home/game_time.asm" +INCLUDE "home/map.asm" Function2d43: ; 2d43 @@ -502,8 +502,8 @@ Function2d43: ; 2d43 ; 2d54 -INCLUDE "common/farcall.asm" -INCLUDE "common/predef.asm" +INCLUDE "home/farcall.asm" +INCLUDE "home/predef.asm" ResetWindow: ; 2dba @@ -614,7 +614,7 @@ Function2e4e: ; 2e4e ; 2e50 -INCLUDE "common/flag.asm" +INCLUDE "home/flag.asm" Function2ebb: ; 2ebb @@ -671,7 +671,7 @@ Function2ee4: ; 2ee4 ; 2ef6 -INCLUDE "common/string.asm" +INCLUDE "home/string.asm" IsInJohto: ; 2f17 @@ -714,9 +714,9 @@ Function2f3e: ; 2f3e ; 2f3f -INCLUDE "common/item.asm" -INCLUDE "common/random.asm" -INCLUDE "common/sram.asm" +INCLUDE "home/item.asm" +INCLUDE "home/random.asm" +INCLUDE "home/sram.asm" ; Register aliases @@ -731,7 +731,7 @@ _de_: ; 2fed ; 2fef -INCLUDE "common/double_speed.asm" +INCLUDE "home/double_speed.asm" ClearSprites: ; 300b @@ -760,7 +760,7 @@ HideSprites: ; 3016 ; 3026 -INCLUDE "common/copy2.asm" +INCLUDE "home/copy2.asm" Function309d: ; 309d @@ -861,7 +861,7 @@ AddNTimes: ; 0x30fe ; 0x3105 -INCLUDE "common/math.asm" +INCLUDE "home/math.asm" PrintLetterDelay: ; 313d -- cgit v1.2.3