From a9149c6cc3be2a1cab6a374b2c10f359ce5f29f5 Mon Sep 17 00:00:00 2001 From: 2Tie Date: Sat, 16 Jun 2018 18:27:10 -0600 Subject: work on talk_to_npc done, naming of some overworld logic and wram values. --- home/map.asm | 10 +- home/map_objects.asm | 14 +-- home/talk_to_npc.asm | 260 ++++++++++++++++++++++++++++++++++++++++++++------ home/unknown_388f.asm | 14 +-- home/util.asm | 5 +- home/window.asm | 2 +- shim.sym | 7 +- tools/make_shim.py | 38 ++++---- wram.asm | 16 +++- 9 files changed, 285 insertions(+), 81 deletions(-) diff --git a/home/map.asm b/home/map.asm index aac770c..1f7c27d 100644 --- a/home/map.asm +++ b/home/map.asm @@ -1593,7 +1593,7 @@ Function2a8d:: ; 00:2a8d dbbw $05, $33, Function14777 Function2ae5:: -.asm_2ae5: ; 00:2ae5 +.loop: ; 00:2ae5 ld hl, wJoypadFlags set 4, [hl] set 6, [hl] @@ -1608,7 +1608,7 @@ Function2ae5:: bit 7, [hl] res 7, [hl] ret nz - call Function38e3 + call TestWildBattleStart ret nz call OverworldStartButtonCheck ret nz @@ -1619,16 +1619,16 @@ Function2ae5:: and a ret nz call Function2c4a - jr nc, .asm_2ae5 + jr nc, .loop callba Function824c ld a, [wc5ed] bit 6, a - jr nz, .asm_2ae5 + jr nz, .loop call CheckMovingOffEdgeOfMap ret c call WarpCheck ret c - jr .asm_2ae5 + jr .loop Function2b39:: ld hl, wJoypadFlags diff --git a/home/map_objects.asm b/home/map_objects.asm index 70cba50..ca7ca0b 100644 --- a/home/map_objects.asm +++ b/home/map_objects.asm @@ -315,6 +315,7 @@ UpdateSprites:: ; 00:17a8 ret GetObjectStruct:: ; 00:17bf +; Puts the start of the a'th object struct into bc ld bc, $28 ld hl, wObjectStructs call AddNTimes @@ -334,26 +335,27 @@ Function17cb:: call Bankswitch ret -Function17de:: +CheckNonTurningSprite:: ; 00:17de + ; sets carry flag if a is equal to any of the sprites below push hl push bc ld c, a ld b, $ff ld hl, .Data -.asm_17e6: ; 00:17e6 +.loop: ; 00:17e6 ld a, [hli] cp b - jr z, .asm_17ee + jr z, .escape ; if a == $FF, escape cp c - jr nz, .asm_17e6 + jr nz, .loop ; if a != c, loop scf -.asm_17ee: ; 00:17ee +.escape: ; 00:17ee pop bc pop hl ret .Data: ; 00:17f1 - db $51, $55, $56, $57, $58, $5a, $5b, $ff + db SPRITE_KABIGON, SPRITE_POKE_BALL, SPRITE_POKEDEX, SPRITE_PAPER, SPRITE_OLD_LINK_RECEPTIONIST, SPRITE_EGG, SPRITE_BOULDER, $ff Function17f9:: call GetMapObject diff --git a/home/talk_to_npc.asm b/home/talk_to_npc.asm index 9ef5dd3..1820692 100644 --- a/home/talk_to_npc.asm +++ b/home/talk_to_npc.asm @@ -22,8 +22,8 @@ Function3036:: ; 3036 .Text: ; 00:303a db "@" -CallMapTextSubroutine:: - ld a, [wcdb0] +CallMapTextSubroutine:: ; 00:303b + ld a, [wTalkingTargetType] bit 0, a jr z, asm_3062 call Function3055 @@ -43,16 +43,16 @@ CallMapTextSubroutine:: Function3055:: ; 00:3055 ldh a, [hFFEA] ld b, a -.asm_3058: ; 00:3058 +.Loop: ; 00:3058 ld a, [hli] cp $ff ret z cp b - jp z, Function3240 - jr .asm_3058 + jp z, SetFFInAccumulator + jr .Loop asm_3062: ; 00:3062 - ld a, [wcdb0] + ld a, [wTalkingTargetType] bit 1, a ret z ld h, d @@ -71,28 +71,29 @@ asm_3062: ; 00:3062 jp hl Function307a:: ; 00:307a - ld hl, wcdb0 + ld hl, wTalkingTargetType res 0, [hl] res 1, [hl] - call Function3240 + call SetFFInAccumulator ret -Function3085:: ; 00:3085 +PrintTextboxDebugNumbers:: ; 00:3085 push hl push de push bc - ld de, $99 - ld a, [wcdb0] + ld de, $0099 ; default address to print from (not a sign or NPC) + ld a, [wTalkingTargetType] bit 0, a - jr z, .asm_3097 - ld de, hFFEA - jr .asm_309e + jr z, .CheckSign + ld de, hFFEA ; address if we're talking to an NPC + jr .PrintNum -.asm_3097: ; 00:3097 +.CheckSign: ; 00:3097 bit 1, a - jr z, .asm_309e - ld de, hFFEE -.asm_309e: ; 00:309e + jr z, .PrintNum + ld de, hFFEE ; address if we're talking to a sign + +.PrintNum: ; 00:309e hlcoord 4, 12 lb bc, PRINTNUM_LEADINGZEROS | 1, 2 call PrintNumber @@ -105,17 +106,17 @@ Function3085:: ; 00:3085 pop hl ret -QueueMapTextSubroutine:: +QueueMapTextSubroutine:: ; 00:30b7 ldh a, [hJoyState] bit A_BUTTON_F, a - jp z, Function323e + jp z, ClearAccumulator ; if we didn't press a call GetFacingPersonText - jp nc, Function30e8 + jp nc, Function30e8 ; if not talking to a person ld d, $0 ld e, a ld a, [wce63] bit 1, a - call nz, Function3085 + call nz, PrintTextboxDebugNumbers ; if debug, print these ld hl, wMapTextPtr ld a, [hli] ld h, [hl] @@ -128,14 +129,14 @@ QueueMapTextSubroutine:: inc de ld a, [hl] ld [de], a - ld hl, wcdb0 - set 0, [hl] - call Function3240 + ld hl, wTalkingTargetType + set 0, [hl] ; we're talking to an NPC + call SetFFInAccumulator ret Function30e8:: ; 00:30e8 call GetFacingSignpost - jp nc, Function323e + jp nc, ClearAccumulator ; if not facing person or sign ld a, e ldh [hFFEB], a ld a, d @@ -144,14 +145,213 @@ Function30e8:: ; 00:30e8 ldh [hFFED], a ld a, [hl] ldh [hFFEE], a - ld hl, wcdb0 - set 1, [hl] - call Function3240 + ld hl, wTalkingTargetType + set 1, [hl] ; we're talking to a sign + call SetFFInAccumulator ret GetFacingPersonText:: ; 00:3103 callba Function776e ret nc - call Function319b + call TurnNPCTalkingTo + scf + ret + +Function3111:: ; 00:3111 + push hl + call PrepareTextbox + ld a, [wce63] + bit 1, a + call nz, PrintTextboxDebugNumbers ; if debug, print text IDs + pop hl + call TextboxIdle + ret + +Function3122:: ; 00:3122 + push hl + call PrepareTextbox + pop hl + +TextboxIdle:: ; 00:3127 + call PrintTextBoxText +.loop + ld a, [wJoypadFlags] + bit 5, a + res 5, a + ld [wJoypadFlags], a + jr nz, .escape ; if bit 5 of joyflags is set, escape + call GetJoypad + ldh a, [hJoyDown] + and A_BUTTON | B_BUTTON + jr nz, .escape ; if A or B are down, escape + call UpdateTime + call UpdateTimeOfDayPalettes + call DelayFrame + jr .loop +.escape + call TextboxCleanup + ret + +PrepareTextbox:: ; 00:314E + call ClearWindowData + ldh a, [hROMBank] + push af + ld a, 01 + call Bankswitch + call ReanchorBGMap_NoOAMUpdate + ld hl, $C390 ;in the tilemap in WRAM + ld b, 04 + ld c, $12 + call DrawTextBox + call WaitBGMap + call LoadFonts_NoOAMUpdate + pop af + call Bankswitch + ret + +TextboxCleanup ; 00:3171 + callab ReanchorBGMap_NoOAMUpdate + call UpdateSprites + xor a + ldh [hBGMapMode], a ;reset this + ld a, $90 + ldh [hWY], a ;set window Y to $90 + call Function318f + ld hl, wToolgearFlags + res 7, [hl] ; show toolgear + call InitToolgearBuffer + ret + +Function318f ; 00:318f + callab Function140ea + call Function0d02 + ret + +TurnNPCTalkingTo:: ; 00:319b + ldh a, [hObjectStructIndexBuffer] + call GetObjectStruct + ld hl, $0000 + add hl, bc ; bc is the address of the a'th object struct + ld a, [hl] + call CheckNonTurningSprite + jr c, .jump ;if it's a non-turning sprite, skip this + ld a, [wPlayerWalking] ; shouldn't this be direction? + xor 04 ; get opposite direction from player + ld hl, $0007 + add hl, bc ; get NPC's direction + ld [hl], a ; overwrite it + push bc + call UpdateSprites + pop bc +.jump + ld hl, $0001 + add hl, bc + ld a, [hl] + sub 02 + ldh [hFFEA], a + ret + +Function31C3:: ; 00:31C3 + ret + +CheckInlineTrainer:: ; 00:31C4 + ; passed de is the start of a map_object struct. if it's an inline trainer, write to relevant wram region. + ld hl, $0000 + add hl, de + ld a, [hl] + call GetObjectStruct ; de is the address of the number of object we want + call $31EB + jr nc, .escape ; if c flag isn't set, leave + ld hl, $000B ; map_object script + add hl, de + ld a, [hl] + cp b + jr c, .escape ;if action is less than b, return + ld hl, $0000 ; obj id + add hl, de + ld a, [hl] + add a, a ; objid*2 + ld hl, wCurrMapInlineTrainers + add a, l + ld l, a + jr nc, .noCarry + inc h +.noCarry + ld [hl], b ; store bc (distance, direction) in new hl + inc hl + ld [hl], c +.escape + ret + +GetInlineMapObject:: ; 00:31EB + ;bc is start of object struct. if c flag set, returns distance in B and direction in C + ld hl, $0010 ; offset for StandingMapX + add hl, bc + ld a, [wPlayerStandingMapX] + cp [hl] + jr z, .equalX ; if player x == object x + ld hl, $0011 ; offset for StandingMapY + add hl, bc + ld a, [wPlayerStandingMapY] + cp [hl] + jr z, .equalY ; if player y == object y and px != ox, jump + and a ; clears c for the ret + ret +.equalX ; player x == object x + ld hl, $0011 + add hl, bc + ld a, [wPlayerStandingMapY] + sub [hl] ; py - oy + jr z, .reset ; if py == oy, jump + jr nc, .setDown ; if py > oy, jump + cpl + inc a + ld b, a + ld c, 01 ; 1 in c means player has smaller Y, same x + scf ; sets c for the ret + ret +.setDown ; 3214 + ld b, a ; b is difference in y + ld c, 00 ; 0 in c means player has bigger Y, same x + scf ; set c + ret +.equalY ; 3219 + ld hl, $0010 + add hl, bc + ld a, [wPlayerStandingMapX] + sub [hl] + jr z, .reset ; if px == ox, jump (this is impossible) + jr nc, .setRight ; if px > ox, jump + cpl + inc a + ld b, a + ld c, 02 ; 2 in c means player has smaller x, equal y + scf + ret +.setRight ; 322C + ld b, a + ld c, 03 ; 3 in c means player has bigger x, equal y scf ret +.reset ; 3231 + and a ; clear c + ret + +CheckAPressedDebug ; 3233 + ld a, [wce63] + bit 1, a + ret z ; return if not debug + ldh a, [hJoyState] + bit A_BUTTON, a + ret + +ClearAccumulator:: ; 323E + xor a ; clear a + ret + +SetFFInAccumulator:: ; 3240 + xor a + dec a + ret + +; 3243 \ No newline at end of file diff --git a/home/unknown_388f.asm b/home/unknown_388f.asm index 453c2f8..bf99129 100644 --- a/home/unknown_388f.asm +++ b/home/unknown_388f.asm @@ -49,19 +49,19 @@ Function38d8:: ld [wd637], a ret -Function38e3:: +TestWildBattleStart:: ldh a, [hJoyState] - and $f0 - ret z - call Function3233 - jp nz, Function323e + and D_PAD + ret z ; if no directions are down, don't try and trigger a wild encounter + call CheckAPressedDebug + jp nz, ClearAccumulator ; if b button is down, clear acc callab Function3ee3e ld a, [wBattleMode] and a - ret z + ret z ; if no battle, return ld a, $3 call WriteIntod637 - call Function3240 + call SetFFInAccumulator ret Function3904:: diff --git a/home/util.asm b/home/util.asm index 880513b..ccc990a 100644 --- a/home/util.asm +++ b/home/util.asm @@ -65,12 +65,13 @@ SkipNames:: ; 341f ret AddNTimes:: ; 3429 (0:3429) +; Adds bc to hl, a times and a ret z -.asm_342b +.loop add hl, bc dec a - jr nz, .asm_342b + jr nz, .loop ret ; 0x3430 diff --git a/home/window.asm b/home/window.asm index c2dc212..9e86453 100644 --- a/home/window.asm +++ b/home/window.asm @@ -17,7 +17,7 @@ RefreshScreen:: ret Function1fea:: - call Function3171 + call TextboxCleanup call ClearWindowData call InitToolgearBuffer ret diff --git a/shim.sym b/shim.sym index 95b1d2f..6428d4d 100644 --- a/shim.sym +++ b/shim.sym @@ -1,10 +1,4 @@ ; ROM0 -00:3111 Function3111 -00:3171 Function3171 -00:319B Function319b -00:3233 Function3233 -00:323E Function323e -00:3240 Function3240 00:3CA8 InitSpriteAnimStruct 00:3D86 WaitSFX 00:3D87 WaitSFX.wait @@ -100,6 +94,7 @@ 05:405B AddIndoorSprites 05:40AA AddOutdoorSprites 05:40D9 Function140d9 +05:40EA Function140ea 05:40FB LoadUsedSpritesGfx ; TODO: maybe there's a better name 05:43B6 InitAllSRAMBanks 05:43E0 Function143e0 diff --git a/tools/make_shim.py b/tools/make_shim.py index 65d9362..e2e4bf2 100644 --- a/tools/make_shim.py +++ b/tools/make_shim.py @@ -5,19 +5,19 @@ import argparse from sys import stderr from collections import OrderedDict, namedtuple -Section = namedtuple('Section', ('end', 'invalud', 'banked')) -section_list = OrderedDict( - ROM0=Section(0x4000, False, False), - ROMX=Section(0x8000, False, True), - VRAM=Section(0xA000, False, True), - SRAM=Section(0xC000, False, True), - WRAM0=Section(0xD000, False, False), - WRAMX=Section(0xE000, False, True), - EchoRAM=Section(0xFE00, True, False), - OAM=Section(0xFEA0, False, False), - IO=Section(0xFF80, True, False), - HRAM=Section(0xFFFF, False, False) -) +Section = namedtuple('Section', ('end', 'invalid', 'banked')) +section_list = OrderedDict(( + ('ROM0', Section(0x4000, False, False)), + ('ROMX', Section(0x8000, False, True)), + ('VRAM', Section(0xA000, False, True)), + ('SRAM', Section(0xC000, False, True)), + ('WRAM0', Section(0xD000, False, False)), + ('WRAMX', Section(0xE000, False, True)), + ('EchoRAM', Section(0xFE00, True, False)), + ('OAM', Section(0xFEA0, False, False)), + ('IO', Section(0xFF80, True, False)), + ('HRAM', Section(0xFFFF, False, False)) +)) parser = argparse.ArgumentParser() parser.add_argument('files', nargs='+', type=argparse.FileType()) @@ -28,14 +28,14 @@ args = parser.parse_args() if args.w or args.d: - section_list['WRAM0'].end = 0xE000 + section_list['WRAM0'] = Section(0xE000, *section_list['WRAM0'][1:]) if args.t: - section_list['ROM0'].end = 0x8000 + section_list['ROM0'] = Section(0x8000, *section_list['ROM0'][1:]) -for file_name in args.files: - for line in open(file_name, "rt"): +for f in args.files: + for line in f: # Strip out the comment line = line.split(";")[0].strip() @@ -50,13 +50,13 @@ for file_name in args.files: pointer = int(pointer, 16) except ValueError: print("Error: Cannot parse line: %s" % line, file=stderr) - raise from None + raise section = None for name, section_type in section_list.items(): if pointer < section_type.end: if section_type.invalid: - print("Warning: cannot shim '%s' in section type '%s'" % (symbol, section_type['name']), file=stderr) + print("Warning: cannot shim '%s' in section type '%s'" % (symbol, name), file=stderr) section = False else: section = name diff --git a/wram.asm b/wram.asm index 132a833..45e1a89 100644 --- a/wram.asm +++ b/wram.asm @@ -108,7 +108,7 @@ wMapScriptNumber:: db ; c5e8 wMapScriptNumberLocation:: dw ; c5e9 wUnknownMapPointer:: dw ; c5eb ; TODO wc5ed:: db ; c5ed - ds 18 ; TODO + ds 18 wMapBufferEnd:: ; c600 @@ -445,8 +445,9 @@ wcd9e:: db SECTION "CDB0", WRAM0 [$CDB0] -wcdb0:: ; bit 0 = has engaged NPC in dialogue (?) - db +wTalkingTargetType:: db ; cdb0 +;bit 0 = has engaged NPC in dialogue +;bit 1 = has engaged sign in dialogue SECTION "CDBA", WRAM0[$CDBA] @@ -726,10 +727,15 @@ ENDR wCurrMapObjectCount:: ; d5f6 db + +wCurrMapInlineTrainers:: ; d5f7 +REPT 32 ; TODO: confirm this + ds 2 ; inline trainers. each pair of bytes is direction, distance +ENDR SECTION "D637", WRAM0[$D637] -wd637:: db ; d637 -wd638:: db ; d638 +wd637:: db ; d637 ;OW battle state? $3 wild battle, $8 is trainer battle $4 is left battle, $B is load overworld? $0 is in overworld +wd638:: db ; d638 ;wd637's last written-to value SECTION "Used sprites", WRAM0[$D643] -- cgit v1.2.3 From f123dd89d49f6f70d823947a47a3ce117d6cd01a Mon Sep 17 00:00:00 2001 From: 2Tie Date: Sun, 17 Jun 2018 01:05:52 -0600 Subject: more npc code and some audio stuff, slimmin down the shim --- home/audio.asm | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++ home/talk_to_npc.asm | 20 +++++++- shim.sym | 16 ------- 3 files changed, 145 insertions(+), 18 deletions(-) diff --git a/home/audio.asm b/home/audio.asm index 03a0990..e50abc1 100644 --- a/home/audio.asm +++ b/home/audio.asm @@ -140,3 +140,130 @@ PlaySFX:: ; 3d63 ret WaitPlaySFX:: ; 3d7f + call WaitSFX + call PlaySFX + ret + +WaitSFX:: ; 3d86 + push hl +.loop + ld hl, wChannel5Flags1 + bit 0, [hl] + jr nz, .loop + ld hl, wChannel6Flags1 + bit 0, [hl] + jr nz, .loop + ld hl, wChannel7Flags1 + bit 0, [hl] + jr nz, .loop + ld hl, wChannel8Flags1 + bit 0, [hl] + jr nz, .loop + pop hl + ret + +MaxVolume:: ; 3DA5 + ld a, $77 + ld [wVolume], a + ret + +LowVolume:: ; 3DAB + ld a, $33 + ld [wVolume], a + ret + +VolumeOff:: ; 3DB1 + xor a + ld [wVolume], a + ret + +UpdateSoundNTimes:: ; 3DB6 +.loop + and a + ret z + dec a + call UpdateSound + jr .loop + +FadeToMapMusic:: ; 3DBE + push hl + push de + push bc + push af + call GetMapMusic + ld a, [wMapMusic] + cp e + jr z, .jump + ld a, $08 + ld [wMusicFade], a + ld a, e + ld [wMusicFadeID], a + ld a, d + ld [wMusicFadeID+1], a + ld a, e + ld [wMapMusic], a +.jump + pop af + pop bc + pop de + pop hl + ret + +PlayMapMusic:: ; 3DE1 + push hl + push de + push bc + push af + call GetMapMusic + ld a, [wMapMusic] + cp e + jr z, .jump + push de + ld de, $0000 + call PlayMusic + call DelayFrame + pop de + ld a, e + ld [wMapMusic], a + call PlayMusic +.jump + pop af + pop bc + pop de + pop hl + ret + +SpecialMapMusic:: ; 3E05 + ld a, [wPlayerBikeSurfState] + and a + jr z, .normal + cp $02 + jr z, .state2 + ld de, $0009 + scf + ret + +.state2 ; 3E14 + ld de, $0000 + scf + ret + +.normal ; 3E19 + and a + ret + +GetMapMusic:: ; 3E1B + call SpecialMapMusic + ret c + ld a, [wMapPermissions] + cp $01 + jr z, .jump + cp $03 + jr z, .jump + ld de, $0002 + ret +.jump ; 3E2E + ld de, $0007 + ret + +; 3E32, this is likely not a function. \ No newline at end of file diff --git a/home/talk_to_npc.asm b/home/talk_to_npc.asm index 1820692..3371b3c 100644 --- a/home/talk_to_npc.asm +++ b/home/talk_to_npc.asm @@ -260,7 +260,7 @@ CheckInlineTrainer:: ; 00:31C4 add hl, de ld a, [hl] call GetObjectStruct ; de is the address of the number of object we want - call $31EB + call GetInlineMapObject jr nc, .escape ; if c flag isn't set, leave ld hl, $000B ; map_object script add hl, de @@ -354,4 +354,20 @@ SetFFInAccumulator:: ; 3240 dec a ret -; 3243 \ No newline at end of file +Function3243:: ; 3243 + ldh a, [hROMBank] + push af + ld a, $03 + call Bankswitch + push hl + push de + push bc + call _TossItem + pop bc + pop de + pop hl + pop af + call Bankswitch + ret + +;3259 \ No newline at end of file diff --git a/shim.sym b/shim.sym index 6428d4d..3948316 100644 --- a/shim.sym +++ b/shim.sym @@ -1,21 +1,5 @@ ; ROM0 00:3CA8 InitSpriteAnimStruct -00:3D86 WaitSFX -00:3D87 WaitSFX.wait -00:3DA5 MaxVolume -00:3DAB LowVolume -00:3DB1 VolumeOff -00:3DB6 UpdateSoundNTimes -00:3DBE FadeToMapMusic -00:3DDC FadeToMapMusic.dontfade -00:3DE1 PlayMapMusic -00:3E00 PlayMapMusic.dontplay -00:3E05 SpecialMapMusic -00:3E14 SpecialMapMusic.state2 -00:3E19 SpecialMapMusic.normal -00:3E1B GetMapMusic -00:3E2E GetMapMusic.unk_3E2E -00:3E32 Unk_3E32 01:4031 Function4031 01:4031 DebugMenu -- cgit v1.2.3 From 130f5f1bb94ddcc609b5b5344a72d803b68a1102 Mon Sep 17 00:00:00 2001 From: 2Tie Date: Sun, 17 Jun 2018 03:42:21 -0600 Subject: happy birthday, here's the main menu debug menu... menu --- data/predef_pointers.inc | 2 +- engine/menu/debug_menu.asm | 109 +++++++++++++++++++++++++++++++++++++++++++++ home/unknown.asm | 4 +- shim.sym | 6 +-- wram.asm | 2 +- 5 files changed, 115 insertions(+), 8 deletions(-) create mode 100644 engine/menu/debug_menu.asm diff --git a/data/predef_pointers.inc b/data/predef_pointers.inc index 0b39ae2..64dd7fd 100644 --- a/data/predef_pointers.inc +++ b/data/predef_pointers.inc @@ -15,7 +15,7 @@ PredefPointers:: ; 1:62d3 add_predef Function5d27 add_predef Function6713 add_predef Function66b1 - add_predef Function4031 + add_predef DebugMenu add_predef Functionce10 add_predef Functioncd6f add_predef Functioncde3 diff --git a/engine/menu/debug_menu.asm b/engine/menu/debug_menu.asm new file mode 100644 index 0000000..cc19edb --- /dev/null +++ b/engine/menu/debug_menu.asm @@ -0,0 +1,109 @@ +INCLUDE "constants.asm" + +SECTION "Debug Menu", ROMX[$4031], BANK[$01] + +DebugMenu:: ; $4031 +call ClearTileMap +call ClearWindowData +call LoadFont +call LoadFontsBattleExtra +call ClearSprites +call GetMemSGBLayout +xor a +ld [wWhichIndexSet], a +ld hl, DebugMenuData +call LoadMenuHeader +call OpenMenu +call CloseWindow +jp c, TitleSequenceStart +ld a, $41 +ld [wce5f], a +ld a, [wMenuSelection] +ld hl, DebugJumpTable1 +jp CallJumptable + +DebugJumpTable1:: ; 4064 + dw DebugMenuOptionFight + dw DebugMenuOptionField + dw Function094c ; sound test + dw DebugMenuOptionSubGames + dw DebugMenuOptionMonsterTest + dw DebugMenuOptionName + +DebugMenuData: ; 4070 + db MENU_BACKUP_TILES ; flags + menu_coords 05, 02, SCREEN_WIDTH - 7, SCREEN_HEIGHT - 1 + dw .MenuData + db 01 ; default option + +.MenuData: ; 4078 + db $A0 + db 0 ; items + dw $40A0 + db $8A, $1F + dw .Strings + +.Strings + db "ファイト@" + db "フィールド@" + db "サウンド@" + db "サブゲーム@" + db "モンスター@" + db "なまえ@" + +DebugMenuItems: + db 06 + db 00 + db 01 + db 02 + db 03 + db 04 + db 05 + db -1 + +DebugMenuOptionField:: ; 40A8 + ld hl, wce63 + set 1, [hl] ; set debug mode + jp Function555C + +DebugMenuOptionFight:: ; 40B0 + ld hl, wce63 + set 0, [hl] + ld a, $54 + call Predef + ld hl, wce63 + res 0, [hl] + ret + +DebugMenuOptionSubGames:: ; 40C0 + callab CallSubGameMenu + jp DebugMenu + +DebugMenuOptionMonsterTest:: ; 40CB + ld hl, wPokedexOwned + ld de, wPokedexSeen + ld b, $1F + ld a, $FF +.loop + ld [hl+], a + ld [de], a + inc de + dec b + jr nz, .loop + ld a, $03 + ld [hl], a + ld [de], a + callab MonsterTest + ld a, $e4 + ldh [rBGP], a + +Function40eb:: + jp DebugMenu + +DebugMenuOptionName:: ; 40EE + callab OpenPokegear + ld a, $e4 + ldh [rBGP], a + jp DebugMenu + +; 40FD \ No newline at end of file diff --git a/home/unknown.asm b/home/unknown.asm index 6568b5d..3962377 100644 --- a/home/unknown.asm +++ b/home/unknown.asm @@ -53,10 +53,8 @@ Function094c:: push af ld a, BANK(Functionfe255) call Bankswitch - call Functionfe255 pop af call Bankswitch - - jp Function4031 + jp DebugMenu diff --git a/shim.sym b/shim.sym index 3948316..3525f84 100644 --- a/shim.sym +++ b/shim.sym @@ -1,14 +1,12 @@ ; ROM0 00:3CA8 InitSpriteAnimStruct -01:4031 Function4031 -01:4031 DebugMenu -01:40EB Function40eb 01:5007 Function5007 01:50B9 Function50b9 01:5190 _UpdateSprites 01:5190 Function5190 01:53CC MainMenu +01:555C Function555C 01:5D27 Function5d27 01:63D8 ReanchorBGMap_NoOAMUpdate 01:6437 LoadFonts_NoOAMUpdate @@ -29,6 +27,7 @@ 02:4786 Function8786 02:4856 DecompTownMapTilemap 02:48DA DecompTownMapTilemap.tilemap +02:4AAB OpenPokegear 02:4C7C DrawMap 02:4DC2 TownMapGfx 02:4F32 PokegearRadioGfx @@ -446,6 +445,7 @@ 3F:654E PicTest 3F:6750 PicTestMenu 3F:6755 PicTestMenu.loop +3F:67A1 CallSubGameMenu 00:CB6F wPlayerStepDirection 00:CE67 wPlayerName diff --git a/wram.asm b/wram.asm index 45e1a89..c9d7287 100644 --- a/wram.asm +++ b/wram.asm @@ -570,7 +570,7 @@ wTimeOfDay:: db ; ce3d SECTION "CE5F", WRAM0[$CE5F] -wce5f:: ; ce5f ; TODO +wce5f:: ; ce5f ; debug menu writes $41 to it db SECTION "CE61", WRAM0[$CE61] -- cgit v1.2.3 From b095e626305a4c99f8b14c46b46c1bf97fe00262 Mon Sep 17 00:00:00 2001 From: 2Tie Date: Sun, 17 Jun 2018 11:16:28 -0600 Subject: some more tidying up --- constants/wram_constants.asm | 6 +- engine/menu/debug_menu.asm | 14 ++--- home/map.asm | 10 ++- home/map_objects.asm | 8 +-- home/overworld.asm | 4 +- home/talk_to_npc.asm | 144 ++++++++++++++++++++++--------------------- home/time.asm | 4 +- home/unknown_388f.asm | 2 +- wram.asm | 5 +- 9 files changed, 102 insertions(+), 95 deletions(-) diff --git a/constants/wram_constants.asm b/constants/wram_constants.asm index a5e3044..381bdeb 100644 --- a/constants/wram_constants.asm +++ b/constants/wram_constants.asm @@ -5,4 +5,8 @@ const UP ; 1 const LEFT ; 2 const RIGHT ; 3 -NUM_DIRECTIONS EQU const_value \ No newline at end of file +NUM_DIRECTIONS EQU const_value + + const_def + const DEBUG_BATTLE_F + const DEBUG_FIELD_F \ No newline at end of file diff --git a/engine/menu/debug_menu.asm b/engine/menu/debug_menu.asm index cc19edb..2b07211 100644 --- a/engine/menu/debug_menu.asm +++ b/engine/menu/debug_menu.asm @@ -39,7 +39,7 @@ DebugMenuData: ; 4070 .MenuData: ; 4078 db $A0 db 0 ; items - dw $40A0 + dw DebugMenuItems db $8A, $1F dw .Strings @@ -62,17 +62,17 @@ DebugMenuItems: db -1 DebugMenuOptionField:: ; 40A8 - ld hl, wce63 - set 1, [hl] ; set debug mode + ld hl, wDebugFlags + set DEBUG_FIELD_F, [hl] ; set debug mode jp Function555C DebugMenuOptionFight:: ; 40B0 - ld hl, wce63 - set 0, [hl] + ld hl, wDebugFlags + set DEBUG_BATTLE_F, [hl] ld a, $54 call Predef - ld hl, wce63 - res 0, [hl] + ld hl, wDebugFlags + res DEBUG_BATTLE_F, [hl] ret DebugMenuOptionSubGames:: ; 40C0 diff --git a/home/map.asm b/home/map.asm index 1f7c27d..a13a2d4 100644 --- a/home/map.asm +++ b/home/map.asm @@ -1612,9 +1612,7 @@ Function2ae5:: ret nz call OverworldStartButtonCheck ret nz - ld hl, PlaceWaitingText - ld a, $3 - call FarCall_hl + callab Functionc000 ldh a, [hMapEntryMethod] and a ret nz @@ -1634,7 +1632,7 @@ Function2b39:: ld hl, wJoypadFlags res 4, [hl] res 6, [hl] - ld hl, wce63 + ld hl, wDebugFlags res 6, [hl] res 7, [hl] ld hl, wVramState @@ -1714,8 +1712,8 @@ Function2ba8:: ; 00:2ba8 scf ret -Function2be5:: ; 00:2be5 - ld a, [wce63] +Function2be5:: ; 00:2be5 ; TODO + ld a, [wDebugFlags] bit 7, a ret nz ld a, [wMapGroup] diff --git a/home/map_objects.asm b/home/map_objects.asm index ca7ca0b..079897a 100644 --- a/home/map_objects.asm +++ b/home/map_objects.asm @@ -342,14 +342,14 @@ CheckNonTurningSprite:: ; 00:17de ld c, a ld b, $ff ld hl, .Data -.loop: ; 00:17e6 +.loop: ld a, [hli] cp b - jr z, .escape ; if a == $FF, escape + jr z, .escape cp c - jr nz, .loop ; if a != c, loop + jr nz, .loop scf -.escape: ; 00:17ee +.escape: pop bc pop hl ret diff --git a/home/overworld.asm b/home/overworld.asm index afa73cc..e1e7dfb 100644 --- a/home/overworld.asm +++ b/home/overworld.asm @@ -14,8 +14,8 @@ if DEBUG and (START | B_BUTTON) cp (START | B_BUTTON) jr nz, .regularMenu - ld a, [wce63] - bit 1, a + ld a, [wDebugFlags] + bit DEBUG_FIELD_F, a ret z ; debug disabled callba InGameDebugMenu jr CheckStartmenuSelectHook diff --git a/home/talk_to_npc.asm b/home/talk_to_npc.asm index 3371b3c..69d59db 100644 --- a/home/talk_to_npc.asm +++ b/home/talk_to_npc.asm @@ -8,7 +8,7 @@ endc Function3025:: ld hl, .Text - call Function3111 + call StartTextboxWithDebug ret .Text: ; 00:302c @@ -85,13 +85,13 @@ PrintTextboxDebugNumbers:: ; 00:3085 ld a, [wTalkingTargetType] bit 0, a jr z, .CheckSign - ld de, hFFEA ; address if we're talking to an NPC + ld de, hFFEA jr .PrintNum .CheckSign: ; 00:3097 bit 1, a jr z, .PrintNum - ld de, hFFEE ; address if we're talking to a sign + ld de, hFFEE .PrintNum: ; 00:309e hlcoord 4, 12 @@ -114,8 +114,8 @@ QueueMapTextSubroutine:: ; 00:30b7 jp nc, Function30e8 ; if not talking to a person ld d, $0 ld e, a - ld a, [wce63] - bit 1, a + ld a, [wDebugFlags] + bit DEBUG_FIELD_F, a call nz, PrintTextboxDebugNumbers ; if debug, print these ld hl, wMapTextPtr ld a, [hli] @@ -157,38 +157,40 @@ GetFacingPersonText:: ; 00:3103 scf ret -Function3111:: ; 00:3111 +StartTextboxWithDebug:: ; 00:3111 + ; Identical to StartTextbox except it prints debug numbers if in debug mode. push hl call PrepareTextbox - ld a, [wce63] - bit 1, a - call nz, PrintTextboxDebugNumbers ; if debug, print text IDs + ld a, [wDebugFlags] + bit DEBUG_FIELD_F, a + call nz, PrintTextboxDebugNumbers pop hl call TextboxIdle ret -Function3122:: ; 00:3122 +StartTextbox:: ; 00:3122 push hl call PrepareTextbox pop hl TextboxIdle:: ; 00:3127 + ; Prints text, then waits for A or B to be pressed, unless bit 5 of JoypadFlags is set. call PrintTextBoxText -.loop +.Loop ld a, [wJoypadFlags] bit 5, a res 5, a ld [wJoypadFlags], a - jr nz, .escape ; if bit 5 of joyflags is set, escape + jr nz, .Escape call GetJoypad ldh a, [hJoyDown] and A_BUTTON | B_BUTTON - jr nz, .escape ; if A or B are down, escape + jr nz, .Escape call UpdateTime call UpdateTimeOfDayPalettes call DelayFrame - jr .loop -.escape + jr .Loop +.Escape call TextboxCleanup ret @@ -199,7 +201,7 @@ PrepareTextbox:: ; 00:314E ld a, 01 call Bankswitch call ReanchorBGMap_NoOAMUpdate - ld hl, $C390 ;in the tilemap in WRAM + hlcoord 0, 12 ;in the tilemap in WRAM ld b, 04 ld c, $12 call DrawTextBox @@ -213,12 +215,12 @@ TextboxCleanup ; 00:3171 callab ReanchorBGMap_NoOAMUpdate call UpdateSprites xor a - ldh [hBGMapMode], a ;reset this + ldh [hBGMapMode], a ld a, $90 - ldh [hWY], a ;set window Y to $90 + ldh [hWY], a call Function318f ld hl, wToolgearFlags - res 7, [hl] ; show toolgear + res 7, [hl] call InitToolgearBuffer ret @@ -228,23 +230,24 @@ Function318f ; 00:318f ret TurnNPCTalkingTo:: ; 00:319b + ; If an NPC is allowed to turn when talked to, turn it. ldh a, [hObjectStructIndexBuffer] call GetObjectStruct - ld hl, $0000 - add hl, bc ; bc is the address of the a'th object struct + ld hl, OBJECT_SPRITE + add hl, bc ld a, [hl] call CheckNonTurningSprite - jr c, .jump ;if it's a non-turning sprite, skip this - ld a, [wPlayerWalking] ; shouldn't this be direction? - xor 04 ; get opposite direction from player - ld hl, $0007 - add hl, bc ; get NPC's direction - ld [hl], a ; overwrite it + jr c, .Jump + ld a, [wPlayerWalking] + xor 04 + ld hl, OBJECT_DIRECTION_WALKING + add hl, bc + ld [hl], a push bc call UpdateSprites pop bc -.jump - ld hl, $0001 +.Jump + ld hl, OBJECT_MAP_OBJECT_INDEX add hl, bc ld a, [hl] sub 02 @@ -255,98 +258,99 @@ Function31C3:: ; 00:31C3 ret CheckInlineTrainer:: ; 00:31C4 - ; passed de is the start of a map_object struct. if it's an inline trainer, write to relevant wram region. - ld hl, $0000 + ; Passed de is the pointer to a map_object struct. If it's an inline trainer, write to relevant wram region. + ld hl, MAPOBJECT_OBJECT_STRUCT_ID add hl, de ld a, [hl] - call GetObjectStruct ; de is the address of the number of object we want + call GetObjectStruct call GetInlineMapObject - jr nc, .escape ; if c flag isn't set, leave - ld hl, $000B ; map_object script + jr nc, .Escape + ld hl, MAPOBJECT_POINTER_HI add hl, de ld a, [hl] cp b - jr c, .escape ;if action is less than b, return - ld hl, $0000 ; obj id + jr c, .Escape + ld hl, MAPOBJECT_OBJECT_STRUCT_ID add hl, de ld a, [hl] - add a, a ; objid*2 + add a, a ld hl, wCurrMapInlineTrainers add a, l ld l, a - jr nc, .noCarry + jr nc, .NoCarry inc h -.noCarry - ld [hl], b ; store bc (distance, direction) in new hl +.NoCarry + ld [hl], b inc hl ld [hl], c -.escape +.Escape ret GetInlineMapObject:: ; 00:31EB ;bc is start of object struct. if c flag set, returns distance in B and direction in C - ld hl, $0010 ; offset for StandingMapX + ld hl, OBJECT_NEXT_MAP_X add hl, bc ld a, [wPlayerStandingMapX] cp [hl] - jr z, .equalX ; if player x == object x - ld hl, $0011 ; offset for StandingMapY + jr z, .EqualX + ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld a, [wPlayerStandingMapY] cp [hl] - jr z, .equalY ; if player y == object y and px != ox, jump - and a ; clears c for the ret + jr z, .EqualY + and a ret -.equalX ; player x == object x - ld hl, $0011 +.EqualX + ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld a, [wPlayerStandingMapY] - sub [hl] ; py - oy - jr z, .reset ; if py == oy, jump - jr nc, .setDown ; if py > oy, jump + sub [hl] + jr z, .Reset + jr nc, .SetDown cpl inc a ld b, a - ld c, 01 ; 1 in c means player has smaller Y, same x - scf ; sets c for the ret + ld c, UP + scf ret -.setDown ; 3214 - ld b, a ; b is difference in y - ld c, 00 ; 0 in c means player has bigger Y, same x - scf ; set c +.SetDown ; 3214 + ld b, a + ld c, DOWN + scf ret -.equalY ; 3219 - ld hl, $0010 +.EqualY ; 3219 + ld hl, OBJECT_NEXT_MAP_X add hl, bc ld a, [wPlayerStandingMapX] sub [hl] - jr z, .reset ; if px == ox, jump (this is impossible) - jr nc, .setRight ; if px > ox, jump + jr z, .Reset ; (this condition is impossible to meet) + jr nc, .SetRight cpl inc a ld b, a - ld c, 02 ; 2 in c means player has smaller x, equal y + ld c, LEFT scf ret -.setRight ; 322C +.SetRight ; 322C ld b, a - ld c, 03 ; 3 in c means player has bigger x, equal y + ld c, RIGHT scf ret -.reset ; 3231 - and a ; clear c +.Reset ; 3231 + and a ret CheckAPressedDebug ; 3233 - ld a, [wce63] - bit 1, a - ret z ; return if not debug + ; If in debug mode, returns a check on the A button. + ld a, [wDebugFlags] + bit DEBUG_FIELD_F, a + ret z ldh a, [hJoyState] bit A_BUTTON, a ret ClearAccumulator:: ; 323E - xor a ; clear a + xor a ret SetFFInAccumulator:: ; 3240 diff --git a/home/time.asm b/home/time.asm index 3eba96c..d82235d 100644 --- a/home/time.asm +++ b/home/time.asm @@ -32,8 +32,8 @@ UpdateTime:: ; 436 (0:0436) and $1f ldh [hRTCHours], a call CloseSRAM - ld a, [wce63] - bit 1, a + ld a, [wDebugFlags] + bit DEBUG_FIELD_F, a jr z, .asm_0478 ld a, [wd153] bit 7, a diff --git a/home/unknown_388f.asm b/home/unknown_388f.asm index bf99129..5fdad1c 100644 --- a/home/unknown_388f.asm +++ b/home/unknown_388f.asm @@ -92,7 +92,7 @@ Function3920:: ld hl, wJoypadFlags res 4, [hl] ld hl, .text - call Function3111 + call StartTextboxWithDebug call RotateFourPalettesLeft jp Init diff --git a/wram.asm b/wram.asm index c9d7287..03fd52e 100644 --- a/wram.asm +++ b/wram.asm @@ -579,9 +579,10 @@ wActiveFrame:: db ; ce61 wTextBoxFlags:: db ; ce62 -wce63:: db ; ce63 +wDebugFlags:: db ; ce63 ; 76543210 -; \-- global debug enable +; |\- debug battle indicator +; \-- debug field indicator SECTION "Mom's Name", WRAM0[$CE6D] wMomsName:: ds 6 ; ce6d -- cgit v1.2.3 From c557bd661357b1371633a40b7ae6a8e2996de6e2 Mon Sep 17 00:00:00 2001 From: 2Tie Date: Sun, 17 Jun 2018 23:04:49 -0600 Subject: main menu progress for the day, still have a bunch more to go. --- constants.asm | 1 + constants/main_menu_constants.asm | 12 + engine/menu/debug_menu.asm | 42 +-- engine/menu/main_menu.asm | 633 +++++++++++++++++++++++++++++++++++++- home/misc_32c8.asm | 4 +- home/text.asm | 2 +- shim.sym | 9 +- wram.asm | 41 ++- 8 files changed, 696 insertions(+), 48 deletions(-) create mode 100644 constants/main_menu_constants.asm diff --git a/constants.asm b/constants.asm index 88dd7ee..fd4a90f 100644 --- a/constants.asm +++ b/constants.asm @@ -35,3 +35,4 @@ INCLUDE "constants/menu_constants.asm" INCLUDE "constants/wram_constants.asm" INCLUDE "constants/sgb_constants.asm" INCLUDE "constants/map_object_constants.asm" +INCLUDE "constants/main_menu_constants.asm" diff --git a/constants/main_menu_constants.asm b/constants/main_menu_constants.asm new file mode 100644 index 0000000..033e396 --- /dev/null +++ b/constants/main_menu_constants.asm @@ -0,0 +1,12 @@ + const_def + const M_NEW_GAME + const M_CONTINUE + const M_PLAY_GAME + const M_SET_TIME + + const_def + const CONTINUE + const NEW_GAME + const OPTION + const PLAY_POKEMON + const SET_TIME \ No newline at end of file diff --git a/engine/menu/debug_menu.asm b/engine/menu/debug_menu.asm index 2b07211..be46a00 100644 --- a/engine/menu/debug_menu.asm +++ b/engine/menu/debug_menu.asm @@ -3,26 +3,26 @@ INCLUDE "constants.asm" SECTION "Debug Menu", ROMX[$4031], BANK[$01] DebugMenu:: ; $4031 -call ClearTileMap -call ClearWindowData -call LoadFont -call LoadFontsBattleExtra -call ClearSprites -call GetMemSGBLayout -xor a -ld [wWhichIndexSet], a -ld hl, DebugMenuData -call LoadMenuHeader -call OpenMenu -call CloseWindow -jp c, TitleSequenceStart -ld a, $41 -ld [wce5f], a -ld a, [wMenuSelection] -ld hl, DebugJumpTable1 -jp CallJumptable + call ClearTileMap + call ClearWindowData + call LoadFont + call LoadFontsBattleExtra + call ClearSprites + call GetMemSGBLayout + xor a + ld [wWhichIndexSet], a + ld hl, DebugMenuHeader + call LoadMenuHeader + call OpenMenu + call CloseWindow + jp c, TitleSequenceStart + ld a, $41 + ld [wce5f], a + ld a, [wMenuSelection] + ld hl, DebugJumpTable + jp CallJumptable -DebugJumpTable1:: ; 4064 +DebugJumpTable:: ; 4064 dw DebugMenuOptionFight dw DebugMenuOptionField dw Function094c ; sound test @@ -30,7 +30,7 @@ DebugJumpTable1:: ; 4064 dw DebugMenuOptionMonsterTest dw DebugMenuOptionName -DebugMenuData: ; 4070 +DebugMenuHeader: ; 4070 db MENU_BACKUP_TILES ; flags menu_coords 05, 02, SCREEN_WIDTH - 7, SCREEN_HEIGHT - 1 dw .MenuData @@ -64,7 +64,7 @@ DebugMenuItems: DebugMenuOptionField:: ; 40A8 ld hl, wDebugFlags set DEBUG_FIELD_F, [hl] ; set debug mode - jp Function555C + jp StartNewGame DebugMenuOptionFight:: ; 40B0 ld hl, wDebugFlags diff --git a/engine/menu/main_menu.asm b/engine/menu/main_menu.asm index 8a37093..d7870ea 100644 --- a/engine/menu/main_menu.asm +++ b/engine/menu/main_menu.asm @@ -1,8 +1,44 @@ INCLUDE "constants.asm" -SECTION "Main Menu Definition", ROMX[$5418], BANK[$01] +SECTION "Main Menu", ROMX[$53CC], BANK[$01] -MainMenuHeader: +MainMenu:: ; 01:53CC + ld hl, wd4a9 + res 0, [hl] + call ClearTileMap + call GetMemSGBLayout + call LoadFontExtra + call LoadFont + call ClearWindowData + call Function5388 + ld hl, wce60 + bit 0, [hl] + jr nz, .setMenuContinue + xor a + jr .skip +.setMenuContinue + ld a, M_CONTINUE +.skip + ldh a, [hJoyState] + and D_DOWN | B_BUTTON | A_BUTTON + cp D_DOWN | B_BUTTON | A_BUTTON + jr nz, .setMenuPlay + ld a, M_SET_TIME + jr .triggerMenu +.setMenuPlay + ld a, M_PLAY_GAME +.triggerMenu + ld [wWhichIndexSet], a + ld hl, MainMenuHeader + call LoadMenuHeader + call OpenMenu + call CloseWindow + jp c, TitleSequenceStart + ld hl, MainMenuJumptable + ld a, [wMenuSelection] + jp CallJumptable + +MainMenuHeader: ; 01:5418 db $40 menu_coords 0, 0, 13, 7 dw .MenuData @@ -23,17 +59,11 @@ MainMenuHeader: db "じかんセット@" MainMenuJumptable: ; 01:5457 - dw $547c - dw $555c + dw MainMenuOptionContinue + dw StartNewGame dw $5cf3 - dw $555c - dw $5473 - -CONTINUE EQU 0 -NEW_GAME EQU 1 -OPTION EQU 2 -PLAY_POKEMON EQU 3 -SET_TIME EQU 4 + dw StartNewGame + dw MainMenuOptionSetTime MainMenuItems: @@ -62,3 +92,582 @@ PlayPokemonSetTimeMenu: db OPTION db SET_TIME db -1 + +MainMenuOptionSetTime:: ; 5473 + callab SetTime + ret + +MainMenuOptionContinue:: ;547C + callab Function14624 + call DisplayContinueGameInfo +.loop + call ClearJoypad + call GetJoypad + ldh a, [hJoyState] + bit A_BUTTON_F, a + jr nz, .escape + bit B_BUTTON_F, a + jp nz, MainMenu + jr .loop +.escape + call $5397 ; todo + call $53B0 ; todo + ld hl, wDebugFlags + res DEBUG_FIELD_F, [hl] + set 2, [hl] + set 3, [hl] + ldh a, [hJoyState] + bit SELECT_F, a + jr z, .skip + set 1, [hl] +.skip + call ClearBGPalettes + call ClearTileMap + ld c, $0A + call DelayFrames + jp OverworldStart ; todo + +DisplayContinueGameInfo:: ; 54BF + xor a + ldh [hBGMapMode], a + hlcoord 4, 7 + ld b, $08 + ld c, $0D + call DrawTextBox + hlcoord 5, 9 + ld de, PlayerInfoText + call PlaceString + hlcoord 13, 9 + ld de, wPlayerName + call PlaceString + hlcoord 14, 11 + call PrintNumBadges + hlcoord 13, 13 + call PrintNumOwnedMons + hlcoord 12, 15 + call PrintPlayTime + ld a, $01 + ldh [hBGMapMode], a + ld c, $1E + call DelayFrames + ret + +PrintNumBadges:: ;54FA + push hl + ld hl, wd163 ; badges? + ld b, $01 + call CountSetBits + pop hl + ld de, wCountSetBitsResult + ld bc, $0102 ; flags and constants for this? 1 byte source, 2 digit display + jp PrintNumber + +PrintNumOwnedMons:: ; 550D + push hl + ld hl, wPokedexOwned + ld b, $20 ; flag_array NUM_POKEMON? + call CountSetBits + pop hl + ld de, wCountSetBitsResult + ld bc, $0103 ; 1 byte, 3 digit + jp PrintNumber + +PrintPlayTime:: ; 5520 + ld de, hRTCHours + ld bc, $0103 ; 1 byte, 3 digit + call PrintNumber + ld [hl], ":" + inc hl + ld de, hRTCMinutes + ld bc, $8102 ; PRINTNUM_LEADINGZEROS, 1 byte, 2 digit + jp PrintNumber + +PlayerInfoText: + db "しゅじんこう" + next "もっているバッジ    こ" + next "#ずかん    ひき" + next "プレイじかん" + text_end + +StartNewGame:: ; 555C + ld de, MUSIC_NONE + call PlayMusic + ld de, MUSIC_OAK_INTRO + call PlayMusic + call LoadFontExtra + xor a + ldh [hBGMapMode], a + callba Function52f9 + call ClearTileMap + call ClearWindowData + xor a + ldh [hMapAnims], a + ld a, [wDebugFlags] + bit DEBUG_FIELD_F, a + jp z, DemoStart + call DebugSetUpPlayer ; todo - sets up debug stuff? + jp IntroCleanup ; todo - gives strter & does shrinkydink? + +DemoStart:: ; 558D + ld de, $4BD4 + ld bc, $1200 + call Function5d27 + call $5CF7 ; todo + ld hl, OakSpeechDemo ; todo + call PrintText + call RotateThreePalettesRight + call ClearTileMap + ld de, $4D10 + ld bc, $1200 + call Function5d27 + call $5D0E ; todo + ld a, $D0 ; todo + ldh [rOBP0], a + call DemoSetUpPlayer ; todo + jp IntroCleanup ; todo + +GameStart:: ; 55BB + ld de, $4BD4 + ld bc, $1200 + call Function5d27 + call $5CF7 + ld hl, OakSpeech1 + call PrintText + call RotateThreePalettesRight + call ClearTileMap + ld a, $C8 + ld [$CB5B], a + ld [$CD78], a + call GetMonHeader + ld hl, $C2F6 + ld hl, $C2F6 + call PrepMonFrontpic + call $5D0E + ld hl, OakSpeech2 + call PrintText + ld a, $C8 ; this should be a constant methinks + call PlayCry + ld hl, OakSpeech3 + call PrintText + call RotateThreePalettesRight + call ClearTileMap + ld de, $4D10 + ld bc, $1200 + call Function5d27 + call $5D0E + ld hl, OakSpeech4 + call PrintText + call $5B25 + call RotateThreePalettesRight + call ClearTileMap + ld de, $4ab7 + ld bc, $1200 + call Function5d27 + call $5CF7 + ld hl, OakSpeech5 + call PrintText + call $5BA9 + call RotateThreePalettesRight + call ClearTileMap + ld de, $4BD4 + ld bc, $1200 + call Function5d27 + call $5CF7 + ld hl, OakSpeech6 + call PrintText + ld a, $24 + ld hl, $4000 + call FarCall_hl + call Function04ac + call RotateThreePalettesRight + call ClearTileMap + ld de, $4D10 + ld bc, $1200 + call Function5d27 + call RotateThreePalettesLeft + ld hl, OakSpeech7 + call PrintText + ldh a, [hROMBank] + push af + ld a, $20 + ld [wMusicFade], a + ld de, MUSIC_NONE + ld a, e + ld [wMusicFadeID], a + ld a, d + ld [$C1A8], a + ld de, $000B ; should be a constant - shrink noise? + call PlaySFX + pop af + call Bankswitch + ld c, $04 + call DelayFrames + +IntroCleanup:: ; 568E + ld de, $4743 + ld bc, $0400 + call $5D27 + ld c, $04 + call DelayFrames + ld de, $479D + ld bc, $0400 + call $5D27 + ld c, $14 + call DelayFrames + ld hl, $C30A + ld b, $07 + ld c, $07 + call ClearBox + ld c, $14 + call DelayFrames + call $5D5D + call LoadFontExtra + ld c, $32 + call DelayFrames + call RotateThreePalettesRight + call ClearTileMap + call Function0502 + ld a, $00 + ld [wd638], a + ld [wd637], a + +OverworldStart:: + call SetUpGameEntry + ld hl, wDebugFlags + bit 2, [hl] ; ? + call z, Function15b5 + ld hl, wd4a9 + set 0, [hl] + jp Function2a85 + +SetUpGameEntry:: ; 56E8 + ld a, $04 + ld [wd65e], a + ld a, $F2 + ldh [hMapEntryMethod], a + ld hl, wDebugFlags + bit 2, [hl] ; ? + ret nz + ld a, $F1 + ldh [hMapEntryMethod], a + ld a, $00 + ld [wDebugWarpSelection], a + ld hl, GameStartPlacement + ld de, wMapGroup + ld bc, $0008 + call CopyBytes + ret + +GameStartPlacement:: ; 570D + db $01 ; map group + db $09 ; map + dw $C633 ; screen anchor + db $04 ; metatile x + db $04 ; metatile y + db $00 ; in-metatile x + db $01 ; in-metatile y + +DebugSetUpPlayer:: ; 5715 + call $5B07 + ld a, $0F + ld [wd15d], a + ld a, $42 + ld [wd15e], a + ld a, $3F + ld [wd15f], a + ld a, $FF + ld [wd163], a + ld [wd164], a + call GiveRandomJohto + ld a, $03 + call Function57eb + call FillTMs + ld de, DebugBagItems + call FillBagWithList + ld hl, wPokedexOwned + call DebugFillPokedex + ld hl, wPokedexSeen + call DebugFillPokedex + ld hl, wAnnonDex + ld [hl], $01 + call $40FD + ret + +DebugFillPokedex:: ; 5755 + ld b, $1F + ld a, $FF +.loop + ld [hl+], a + dec b + jr nz, .loop + ld [hl], $07 + ret + +FillBagWithList:: ; 5760 + ld hl, wNumBagItems +.loop + ld a, [de] + cp $FF + jr z, .yump + ld [wCurItem], a + inc de + ld a, [de] + inc de + ld [wItemQuantity], a + call AddItemToInventory + jr .loop +.yump + ret + +DebugBagItems:: ; 5777 + db ITEM_IMPORTANT_BAG, $01 + db ITEM_BAG, $01 + db ITEM_TM_HOLDER, $01 + db ITEM_BALL_HOLDER, $01 + db ITEM_BICYCLE, $01 + db ITEM_MAIL, $06 + db ITEM_ULTRA_BALL, $1E + db ITEM_POKE_BALL, $63 + db ITEM_POTION, $1E + db ITEM_RARE_CANDY, $14 + db ITEM_MOON_STONE, $63 + db ITEM_FULL_HEAL, $63 + db ITEM_PROTEIN, $63 + db ITEM_QUICK_NEEDLE, $63 + db ITEM_SNAKESKIN, $63 + db ITEM_KINGS_ROCK, $63 + db ITEM_FLEE_FEATHER, $63 + db ITEM_FOCUS_ORB, $63 + db ITEM_SHARP_SCYTHE, $63 + db ITEM_DETECT_ORB, $63 + db $FF + +Function57A0 ; 57A0 + and a + ret z +.loop + push af + call RandomOver246 + ld b, $0A + call GivePokemon + pop af + dec a + jr nz, .loop + ret + +GiveRandomJohto:: ; 57B0 +.loop + call Random + and $03 + jr z, .loop + dec a + ld b, a + add a, a + add a, b + add a, $98 ; maybe should be a constant - 152, aka the number of kanto pokes + ld b, $08 + call GivePokemon + ld a, $8D + ld [wd6b3], a + ret + +GiveKantoStarters:: ; 57C8 + ld a, $03 + ld b, $20 + call GivePokemon + ld a, $06 + ld b, $24 + call GivePokemon + ld a, $09 + ld b, $24 + call GivePokemon + ret + +GivePokemon:: ; 57DE + ld [wMonDexIndex], a + ld a, b + ld [wCurPartyLevel], a + ld a, $10 + call Predef + ret + +Function57eb ; 57EB + and a + ret z +.loop + push af + xor a + ld [wca44], a + call RandomOver246 + ld [wcdd7], a + ld a, $05 + ld [wCurPartyLevel], a + callab Function3e043 + ld a, [wcdd7] + ld [wMonDexIndex], a + callab Functiondd5c + pop af + dec a + jr nz, .loop + ret + +RandomOver246:: ; 5818 +.loop + call Random + and a + jr z, .loop + cp $F6 + jr nc, .loop + ret + +FillTMs:: ; 5823 + ld b, $39 + ld a, $01 + ld hl, wTMsHMs +.loop + ld [hl+], a + dec b + jr nz, .loop + ret + +DebugGiveKeyItems:: ; 582F + ld hl, DebugKeyItemsList + ld de, wKeyItems + ld c, $FF +.loop + inc c + ld a, [hl+] + ld [de], a + inc de + cp $FF + jr nz, .loop + ld a, c + ld [wNumKeyItems], a + ret + +DebugKeyItemsList:: ; 5844 + db ITEM_TM_HOLDER + db ITEM_BALL_HOLDER + db ITEM_BAG + db ITEM_BICYCLE + db $FF + +DemoSetUpPlayer:: ; 5849 + ld hl, wPlayerName + ld de, DemoPlayerName + call CopyString + ld hl, wRivalName + ld de, DemoRivalName + call CopyString + call $40FD + ld de, DemoItemList + call FillBagWithList + call GiveRandomJohto + ret + +DemoItemList:: ; 5868 + db ITEM_POKE_BALL, $05 + db ITEM_POTION, $0A + db ITEM_FULL_HEAL, $0A + db ITEM_STIMULUS_ORB, $01 + db ITEM_FOCUS_ORB, $01 + db $FF + +DemoPlayerName:: ; 5873 + db "サトシ@" + +DemoRivalName:: ; 5877 + db "シゲル@" + +OakSpeechDemo:: ; 587B + text "ようこそ" + line "ポケット モンスターの せかいへ!" + cont "ごぞんじ わしが オーキドじゃ!" + + para "きょう きみに きてもらったのは" + line "ほかでもない" + cont "あたらしい ずかんづくりを" + cont "てつだって ほしいのじゃ!" + + para "もちろん" + line "きみの パートナーとなる ポケモンと" + cont "りュックは ようい しておる" + + para "りュックの なかには" + line "キズぐすりと" + cont "モンスターボールが" + cont "はいっておるから あんしんじゃ!" + + para "すでに きみの ライバルは" + line "しゅっぱつ しとる" + + para "まけないよう がんばって くれい!" + prompt + +OakSpeech1:: ; 5956 + text "いやあ またせた!" + + para "ポケット モンスターの せかいへ" + line "ようこそ!" + + para "わたしの なまえは オーキド" + + para "みんなからは # はかせと" + line "したわれて おるよ" + prompt + +OakSpeech2:: ; 599F + text "きみも もちろん" + line "しっているとは おもうが" + + para "この せかいには" + line "ポケット モンスターと よばれる" + cont "いきもの たちが" + cont "いたるところに すんでいる!" + prompt + +OakSpeech3:: ; 59E8 + text "その # という いきものを" + line "ひとは ぺットに したり" + cont "しょうぶに つかったり" + cont "そして・・・" + + para "わたしは この #の" + line "けんきゅうを してる というわけだ" + prompt + +OakSpeech4:: ; 5A35 + text "では はじめに きみの なまえを" + line "おしえて もらおう!" + prompt + +OakSpeech5:: ; 5A52 + text "そして この しょうねんは" + line "きみの おさななじみであり" + cont"ライバルである" + + para "・・・えーと?" + line "なまえは なんて いったかな?" + prompt + +OakSpeech6:: ; 5A8F + text "さて きみの きねんすべき" + line "たびだちのひを" + cont "きろくしておこう!" + + para "じかんも なるべく せいかくにな!" + prompt + +OakSpeech7:: ; 5AC2 + text "!" + + para "いよいよ これから" + line "きみの ものがたりの はじまりだ!" + + para "ゆめと ぼうけんと!" + line "ポケット モンスターの せかいへ!" + + para "レッツ ゴー!" + done + +; 5B07 \ No newline at end of file diff --git a/home/misc_32c8.asm b/home/misc_32c8.asm index 3eabb12..bb19d59 100644 --- a/home/misc_32c8.asm +++ b/home/misc_32c8.asm @@ -78,7 +78,7 @@ WaitPressedAny:: ; 369a CountSetBits:: ; 36b1 ; Count the number of bits set in b bytes at hl. -; Return to a, c, and wce37. +; Return to a, c, and wCountSetBitsResult. ld c, $0 .asm_36b3: ; 00:36b3 ld a, [hli] @@ -94,5 +94,5 @@ CountSetBits:: ; 36b1 dec b jr nz, .asm_36b3 ld a, c - ld [wce37], a + ld [wCountSetBitsResult], a ret diff --git a/home/text.asm b/home/text.asm index b3cd75c..20119dd 100644 --- a/home/text.asm +++ b/home/text.asm @@ -244,7 +244,7 @@ ENDM PrintMomsName:: print_name wMomsName PrintPlayerName:: print_name wPlayerName -PrintRivalName:: print_name wRivalsName +PrintRivalName:: print_name wRivalName TrainerChar:: print_name TrainerCharText TMChar:: print_name TMCharText diff --git a/shim.sym b/shim.sym index 3525f84..edd137f 100644 --- a/shim.sym +++ b/shim.sym @@ -5,8 +5,8 @@ 01:50B9 Function50b9 01:5190 _UpdateSprites 01:5190 Function5190 -01:53CC MainMenu -01:555C Function555C +01:52F9 Function52f9 +01:5388 Function5388 01:5D27 Function5d27 01:63D8 ReanchorBGMap_NoOAMUpdate 01:6437 LoadFonts_NoOAMUpdate @@ -84,6 +84,7 @@ 05:457A Function1457a 05:45B8 Function145b8 05:45DE Function145de +05:4624 Function14624 05:46DC Function146dc ; Structure: ; byte Map group ($ff = end) @@ -123,6 +124,7 @@ 0F:508C Function3d08c 0F:55CE Function3d5ce 0F:567C Function3d67c +0F:6043 Function3e043 0F:61A4 Function3e1a4 0F:6874 Function3e874 0F:691E Function3e91e @@ -423,6 +425,7 @@ 36:73E8 MtFujiRoute_MapAttributes 36:7444 FontoRoute5_MapAttributes 36:7530 BullForestRoute3_MapAttributes +36:7AE4 SetTime 38:4000 PikachuMiniGame 39:4000 GameFreakIntro 39:432F OpeningCutscene @@ -448,10 +451,8 @@ 3F:67A1 CallSubGameMenu 00:CB6F wPlayerStepDirection -00:CE67 wPlayerName 01:D19E wItems -01:D258 wRivalName 01:D264 wPlayerBikeSurfState ; The starting house's map script number is stored at d29a. Others are probably nearby. 01:D35F wOptions diff --git a/wram.asm b/wram.asm index 03fd52e..5945bbe 100644 --- a/wram.asm +++ b/wram.asm @@ -184,8 +184,12 @@ wEnemyMonNickname:: ds 6 ; c9fc wPlayerSubStatus3:: db ; ca3d ds $4 wEnemySubStatus3:: db ; ca42 -; ca43 - ds $14 + +wca43:: db ; ca43 + +wca44:: db ; ca44 + + ds $12 wTrainerClass:: ; ca57 db ; ca58 @@ -470,6 +474,8 @@ wPrevWarp:: db ; cdc1 ds 11 wLinkBattleRNs:: ds 10 ; cdcd + +wcdd7:: db ; cdd7 ; cddd SECTION "CE00", WRAM0[$CE00] @@ -549,6 +555,7 @@ wce2e:: ; ce2e SECTION "CE37", WRAM0[$CE37] wNamedObjectIndexBuffer:: +wCountSetBitsResult:: wce37:: ; ce37 db @@ -573,7 +580,8 @@ SECTION "CE5F", WRAM0[$CE5F] wce5f:: ; ce5f ; debug menu writes $41 to it db -SECTION "CE61", WRAM0[$CE61] +wce60:: ; ce60 + db ; main menu checks this, maybe states if there's a save present? wActiveFrame:: db ; ce61 @@ -584,7 +592,9 @@ wDebugFlags:: db ; ce63 ; |\- debug battle indicator ; \-- debug field indicator -SECTION "Mom's Name", WRAM0[$CE6D] +SECTION "Player And Mom Names", WRAM0[$CE67] +wPlayerName:: ds 6 ; ce67 + wMomsName:: ds 6 ; ce6d SECTION "CE7F", WRAM0[$CE76] @@ -672,7 +682,19 @@ wTimeOfDayPalset:: db ; d158 wCurTimeOfDay:: db ; d159 -SECTION "D165", WRAM0[$D165] +SECTION "D15D", WRAM0[$D15D] + +wd15d:: db ; d15d + +wd15e:: db ; d15e + +wd15f:: db ; d15f + +SECTION "D163", WRAM0[$D163] + +wd163:: db ; d163 + +wd164:: db ; d164 wTMsHMs:: db ; d165 @@ -691,7 +713,7 @@ wNumBallItems:: db ; d1de wBallQuantities:: db ; d1df SECTION "Rival's Name", WRAM0[$D258] -wRivalsName:: ds 6 ; d258 +wRivalName:: ds 6 ; d258 SECTION "D4AB", WRAM0[$D4A9] @@ -763,7 +785,7 @@ wXCoord:: db ; d65b wMetatileStandingY:: db ; d65c wMetatileStandingX:: db ; d65d -; d65f +wd65e:: ; d65e ds 1 ; TODO wMapPartial:: ; d65f @@ -812,6 +834,9 @@ wTilesetCollisionAddress:: ; d6a4 ds 4 ; TODO wTilesetEnd:: ; d6aa +SECTION "D6B3", WRAM0[$D6B3] + +wd6b3 :: db ; d6b3 SECTION "PokeDexFlags", WRAM0[$D81A] @@ -827,7 +852,7 @@ wAnnonDex:: ds 26 ; d85a wAnnonID:: ds 1 ; d874 - + SECTION "Wild mon buffer", WRAM0[$D91B] wWildMons:: ; d91b -- cgit v1.2.3 From 0a2d5a66cd53e7bad4883eaa683eb7743da3c337 Mon Sep 17 00:00:00 2001 From: 2Tie Date: Mon, 18 Jun 2018 19:37:04 -0600 Subject: more disassembly in bank 1 --- Makefile | 6 +- data/predef_pointers.inc | 2 +- engine/menu/main_menu.asm | 403 ++++++++++++++++++++++++++++++++++++++++++---- shim.sym | 3 +- wram.asm | 6 +- 5 files changed, 378 insertions(+), 42 deletions(-) diff --git a/Makefile b/Makefile index 37561a9..dc06ca6 100644 --- a/Makefile +++ b/Makefile @@ -76,14 +76,14 @@ $(CORRECTEDROM): %-correctheader.gb: %.gb $(ROM): poke%-spaceworld.gb: $(OBJS) | $(BASEROM) $(RGBLINK) -d -n $(@:.gb=.sym) -m $(@:.gb=.map) -O $(BASEROM) -o $@ $^ $(RGBFIX) -f lh -k 01 -l 0x33 -m 0x03 -p 0 -r 3 -t "POKEMON2$(shell echo $* | cut -d _ -f 1 | tr '[:lower:]' '[:upper:]')" $@ - $(sort_sym) $(@:.gb=.sym) +# $(sort_sym) $(@:.gb=.sym) $(BASEROM): @echo "Please obtain a copy of Gold_debug.sgb and put it in this directory as $@" @exit 1 -$(BUILD)/shim.asm: tools/make_shim $(SHIM) | $$(dir $$@) - tools/make_shim -w $(filter-out $<, $^) > $@ +$(BUILD)/shim.asm: tools/make_shim.py $(SHIM) | $$(dir $$@) + $(PYTHON3) tools/make_shim.py -w $(filter-out $<, $^) > $@ $(BUILD)/gfx.o: | $(GFX) $(BUILD)/%.o: $(BUILD)/%.asm | $$(dir $$@) diff --git a/data/predef_pointers.inc b/data/predef_pointers.inc index 64dd7fd..3f5e848 100644 --- a/data/predef_pointers.inc +++ b/data/predef_pointers.inc @@ -12,7 +12,7 @@ PredefPointers:: ; 1:62d3 ; WE NEED LABELS! ; Thank youu~ add_predef Function6445 ; 0 - add_predef Function5d27 + add_predef IntroDisplayPicCenteredOrUpperRight add_predef Function6713 add_predef Function66b1 add_predef DebugMenu diff --git a/engine/menu/main_menu.asm b/engine/menu/main_menu.asm index d7870ea..320df82 100644 --- a/engine/menu/main_menu.asm +++ b/engine/menu/main_menu.asm @@ -61,7 +61,7 @@ MainMenuHeader: ; 01:5418 MainMenuJumptable: ; 01:5457 dw MainMenuOptionContinue dw StartNewGame - dw $5cf3 + dw MenuCallSettings dw StartNewGame dw MainMenuOptionSetTime @@ -205,44 +205,44 @@ StartNewGame:: ; 555C ld a, [wDebugFlags] bit DEBUG_FIELD_F, a jp z, DemoStart - call DebugSetUpPlayer ; todo - sets up debug stuff? - jp IntroCleanup ; todo - gives strter & does shrinkydink? + call DebugSetUpPlayer + jp IntroCleanup DemoStart:: ; 558D - ld de, $4BD4 + ld de, $4BD4 ; maybe this should be a macro - b is bank, de is address, c is flag ld bc, $1200 - call Function5d27 - call $5CF7 ; todo - ld hl, OakSpeechDemo ; todo + call IntroDisplayPicCenteredOrUpperRight + call FadeInIntroPic + ld hl, OakSpeechDemo call PrintText call RotateThreePalettesRight call ClearTileMap ld de, $4D10 ld bc, $1200 - call Function5d27 - call $5D0E ; todo + call IntroDisplayPicCenteredOrUpperRight + call MovePicLeft ld a, $D0 ; todo ldh [rOBP0], a - call DemoSetUpPlayer ; todo - jp IntroCleanup ; todo + call DemoSetUpPlayer + jp IntroCleanup GameStart:: ; 55BB ld de, $4BD4 ld bc, $1200 - call Function5d27 - call $5CF7 + call IntroDisplayPicCenteredOrUpperRight + call FadeInIntroPic ld hl, OakSpeech1 call PrintText call RotateThreePalettesRight call ClearTileMap - ld a, $C8 + ld a, $C8 ; pokemon preview ID ld [$CB5B], a ld [$CD78], a call GetMonHeader ld hl, $C2F6 ld hl, $C2F6 call PrepMonFrontpic - call $5D0E + call MovePicLeft ld hl, OakSpeech2 call PrintText ld a, $C8 ; this should be a constant methinks @@ -253,37 +253,35 @@ GameStart:: ; 55BB call ClearTileMap ld de, $4D10 ld bc, $1200 - call Function5d27 - call $5D0E + call IntroDisplayPicCenteredOrUpperRight + call MovePicLeft ld hl, OakSpeech4 call PrintText - call $5B25 + call ChoosePlayerName call RotateThreePalettesRight call ClearTileMap ld de, $4ab7 ld bc, $1200 - call Function5d27 - call $5CF7 + call IntroDisplayPicCenteredOrUpperRight + call FadeInIntroPic ld hl, OakSpeech5 call PrintText - call $5BA9 + call ChooseRivalName call RotateThreePalettesRight call ClearTileMap ld de, $4BD4 ld bc, $1200 - call Function5d27 - call $5CF7 + call IntroDisplayPicCenteredOrUpperRight + call FadeInIntroPic ld hl, OakSpeech6 call PrintText - ld a, $24 - ld hl, $4000 - call FarCall_hl + callba SetClockDialog call Function04ac call RotateThreePalettesRight call ClearTileMap ld de, $4D10 ld bc, $1200 - call Function5d27 + call IntroDisplayPicCenteredOrUpperRight call RotateThreePalettesLeft ld hl, OakSpeech7 call PrintText @@ -293,9 +291,9 @@ GameStart:: ; 55BB ld [wMusicFade], a ld de, MUSIC_NONE ld a, e - ld [wMusicFadeID], a + ld [wMusicFadeIDLow], a ld a, d - ld [$C1A8], a + ld [wMusicFadeIDHigh], a ld de, $000B ; should be a constant - shrink noise? call PlaySFX pop af @@ -306,12 +304,12 @@ GameStart:: ; 55BB IntroCleanup:: ; 568E ld de, $4743 ld bc, $0400 - call $5D27 + call IntroDisplayPicCenteredOrUpperRight ld c, $04 call DelayFrames ld de, $479D ld bc, $0400 - call $5D27 + call IntroDisplayPicCenteredOrUpperRight ld c, $14 call DelayFrames ld hl, $C30A @@ -361,14 +359,14 @@ SetUpGameEntry:: ; 56E8 GameStartPlacement:: ; 570D db $01 ; map group db $09 ; map - dw $C633 ; screen anchor + dw $C633 ; screen anchor - should be coords db $04 ; metatile x db $04 ; metatile y db $00 ; in-metatile x db $01 ; in-metatile y DebugSetUpPlayer:: ; 5715 - call $5B07 + call SetPlayerNamesDebug ld a, $0F ld [wd15d], a ld a, $42 @@ -390,7 +388,7 @@ DebugSetUpPlayer:: ; 5715 call DebugFillPokedex ld hl, wAnnonDex ld [hl], $01 - call $40FD + call $40FD ; todo ret DebugFillPokedex:: ; 5755 @@ -670,4 +668,339 @@ OakSpeech7:: ; 5AC2 para "レッツ ゴー!" done -; 5B07 \ No newline at end of file +SetPlayerNamesDebug:: ; 5B07 + ld hl, DebugPlayerName + ld de, wPlayerName + call CopyNameDebug + ld hl, DebugRivalName + ld de, wRivalName + +CopyNameDebug: + ld bc, 0006 ; constant - name length + call CopyBytes + ret + +DebugPlayerName: ; 5B1D + db "コージ@" + +DebugRivalName: ; 5B21 + db "レッド@" + +ChoosePlayerName:: ; 5B25 + call PanPortraitRight + ld hl, PlayerNameMenuHeader + call NamingWindow + ld a, [wMenuCursorY] + dec a + jr z, .loop + ld de, wPlayerName + call SaveCustomName + jr .farjump + +.loop + ld b, $01 + ld de, wPlayerName + callba Function113f4 + ld a, [wPlayerName] + cp "@" + jr z, .loop + + call RotateThreePalettesRight + call ClearTileMap + call LoadFontExtra + call WaitBGMap + ld de, $4D10 + ld bc, $1200 + call IntroDisplayPicCenteredOrUpperRight + call RotateThreePalettesLeft +.farjump + ld hl, ChoosePlayerNameEndText + call PrintText + ret + +ChoosePlayerNameEndText: ; 5B6F + text "ふむ・・・" + line " と いうんだな!" + prompt + +PlayerNameMenuHeader: ; 5B81 + db $40 + menu_coords 00, 00, 10, 11 + dw $5B89 + db 01 ; initial selection + +; 5B89 + db "ツオ゛じぶんできめる@" + +; 5B93 + db "ゴールド@" + +; 5B98 + db "サトシ@" + +; 5B9C + db "ジャック@" + +; 5BA1 + db "エ゛なまえこうほ@" + +ChooseRivalName:: ; 5BA9 + call PanPortraitRight + ld hl, RivalNameMenuHeader + call NamingWindow + ld a, [wMenuCursorY] + dec a + jr z, .loop + ld de, wRivalName + call SaveCustomName + jr .farjump + +.loop + ld b, $02 + ld de, wRivalName + callba Function113f4 ; manual text entry box? + ld a, [wRivalName] + cp "@" + jr z, .loop + + call RotateThreePalettesRight + call ClearTileMap + call LoadFontExtra + call WaitBGMap + ld de, $4BD4 + ld bc, $1200 + call IntroDisplayPicCenteredOrUpperRight + call RotateThreePalettesLeft +.farjump + ld hl, ChooseRivalNameEndText + call PrintText + ret + +ChooseRivalNameEndText: ; 5BF3 + text "そうか そうだったな" + line " という なまえだ" + prompt + +RivalNameMenuHeader: ; 5C0A + db $40 + menu_coords 00, 00, 10, 11 + dw RivalNameMenuData + db 01 ; initial selection + +RivalNameMenuData: ; 5C12 + db $91 + db 04 ; items + dw $3C2C + db $DE, $33 + dw $D2B7 + + db $D9, $50 + +; 5C1C + db "シルバー@" + +; 5C21 + db "シゲル@" + +; 5C25 + db "ジョン@" + +; 5C29 + db "エ゛なまえこうほ@" + +MomNamePrompt:: ; 5C31 + ld hl, MomNameMenuHeader + call NamingWindow + ld a, [wMenuCursorY] + dec a + jr z, .loop + ld de, wMomsName + call SaveCustomName + jr .escape + +.loop + ld b, $03 + ld de, wMomsName + callba Function113f4 + ld a, [wMomsName] + cp "@" + jr z, .loop + + call ClearPalettes + call ClearTileMap + callab Function140d9 + call LoadFontExtra + call GetMemSGBLayout + call WaitBGMap +.escape + ret + +MomNameMenuHeader: ; 5C71 + db $40 ; flags + menu_coords 00, 00, 10, 11 + dw .MomNameMenuData + db 01 ; initial selection + +.MomNameMenuData: ; 5C79 + db $91 + db 04 ; items + dw $3C2C + db $DE, $33 + dw $B77F + +; 5C81 + db "める@" + +; 5C84 + db "おかあさん@" + +; 5C8A + db "ママ@" + +; 5C8D + db "かあちゃん@" + +; 5C93 + db "エ゛なまえこうほ@" + +NamingWindow:: ; 5C9B + ; loads the menu header put into hl + call LoadMenuHeader + call VerticalMenu + ld a, [wMenuCursorY] + dec a + call CopyNameFromMenu + call CloseWindow + ret + +SaveCustomName:: ; 5CAC + ld hl, wcd31 + ld bc, $0006 ; constant, player name length + call CopyBytes + ret + +PanPortraitRight:: ; 5CB6 + ld hl, $C2F5 ; should be a hlcoord i think + ld d, $06 + ld e, $7E + ld b, d + ld c, e + ld d, $00 + add hl, de +.loop + xor a + ldh [hBGMapMode], a + push hl + push bc +.innerLoop + ;pans all the tiles onscreen to the right one + ld a, [hl+] + ld [hl-], a + dec hl + dec c + jr nz, .innerLoop + + call WaitBGMap + pop bc + pop hl + inc hl + dec b ; passed c - how many tiles right to pan? + jr nz, .loop + ret + +PanPortraitLeft:: ; 5CD7 + ld hl, $C2FC ; hlcoord + ld b, $06 + ld c, $7E +.loop + xor a + ldh [hBGMapMode], a + push hl + push bc +.innerloop + ld a, [hl-] + ld [hl+], a + inc hl + dec c + jr nz, .innerloop + + call WaitBGMap + pop bc + pop hl + inc hl + dec b + jr nz, .loop + ret + +MenuCallSettings:: ; 5CF3 + call SettingsScreen + ret + +FadeInIntroPic: ; 5CF7 + ld hl, IntroFadePalettes + ld b, 6 +.next + ld a, [hl+] + ldh [rBGP], a + ld c, 10 + call DelayFrames + dec b + jr nz, .next + ret + +IntroFadePalettes: + db %01010100 + db %10101000 + db %11111100 + db %11111000 + db %11110100 + db %11100100 + +MovePicLeft: ; 5D0E + ld a, 119 + ldh [hWX], a + call DelayFrame + + ld a, %11100100 + ldh [rBGP], a +.next + call DelayFrame + ldh a, [hWX] + sub 8 + cp $FF + ret z + ldh [hWX], a + jr .next + +IntroDisplayPicCenteredOrUpperRight:: ; 5D27 +; b = bank +; de = address of compressed pic +; c: 0 = centred, non-zero = upper-right + ld a, c + and a + hlcoord 13, 4 + jr nz, .skip + hlcoord 6, 4 +.skip + push hl + ld a, b + call UncompressSpriteFromDE + ld a, $00 + call OpenSRAM + ld hl, $A188 + ld de, $A000 + ld bc, $0310 + call CopyBytes + call CloseSRAM + ld de, $9000 + call InterlaceMergeSpriteBuffers + pop hl + xor a + ldh [hGraphicStartTile], a + ld bc, $0707 + ; ld a, $1F + ; call Predef + predef PlaceGraphic + ret + +; 5D5D \ No newline at end of file diff --git a/shim.sym b/shim.sym index edd137f..9f3ddb1 100644 --- a/shim.sym +++ b/shim.sym @@ -7,13 +7,13 @@ 01:5190 Function5190 01:52F9 Function52f9 01:5388 Function5388 -01:5D27 Function5d27 01:63D8 ReanchorBGMap_NoOAMUpdate 01:6437 LoadFonts_NoOAMUpdate 01:6445 Function6445 01:66B1 Function66b1 01:6713 Function6713 01:776E Function776e +01:78E5 SettingsScreen 02:4000 Function8000 02:4098 _InitializeVisibleSprites @@ -65,6 +65,7 @@ 04:528F Function1128f 04:52C1 Function112c1 04:530A Function1130a +04:53F4 Function113f4 04:5677 DoPlayerMovement 04:5DBE DisplayStartMenu 04:640B Function1240b diff --git a/wram.asm b/wram.asm index 5945bbe..d2b45fb 100644 --- a/wram.asm +++ b/wram.asm @@ -54,7 +54,9 @@ wMusicFade:: ; c1a5 ; $00 = none (default) db wMusicFadeCount:: db ; c1a6 -wMusicFadeID:: dw ; c1a7 +wMusicFadeID:: +wMusicFadeIDLow:: db ; c1a7 +wMusicFadeIDHigh:: db ; c1a8 ds 2 ; TODO @@ -786,7 +788,7 @@ wMetatileStandingY:: db ; d65c wMetatileStandingX:: db ; d65d wd65e:: ; d65e - ds 1 ; TODO + db wMapPartial:: ; d65f wMapAttributesBank:: ; d65f -- cgit v1.2.3 From a1d5ddac4c62f2731b72f4d7f39b9f09e69e5fa8 Mon Sep 17 00:00:00 2001 From: 2Tie Date: Mon, 18 Jun 2018 22:15:42 -0600 Subject: more bank 1 disasm --- constants/gfx_constants.asm | 1 + constants/text_constants.asm | 2 +- constants/wram_constants.asm | 3 +- engine/menu/main_menu.asm | 185 ++++++++++++++++++++++--------------------- shim.sym | 7 +- wram.asm | 5 +- 6 files changed, 107 insertions(+), 96 deletions(-) diff --git a/constants/gfx_constants.asm b/constants/gfx_constants.asm index 536f4a4..52f74e5 100644 --- a/constants/gfx_constants.asm +++ b/constants/gfx_constants.asm @@ -35,6 +35,7 @@ HP_YELLOW EQU 1 HP_RED EQU 2 SPRITEBUFFERSIZE EQU 7*7 * 8 ; 7 * 7 (tiles) * 8 (bytes per tile) +DOUBLESPRITEBUFFERSIZE EQU 2*SPRITEBUFFERSIZE ; sprite_oam_struct members (see macros/wram.asm) const_def diff --git a/constants/text_constants.asm b/constants/text_constants.asm index f899ea3..e487d4c 100644 --- a/constants/text_constants.asm +++ b/constants/text_constants.asm @@ -1,6 +1,6 @@ ; name lengths NAME_LENGTH EQU 11 ; English -PLAYER_NAME_LENGTH EQU 8 ; English +PLAYER_NAME_LENGTH EQU 6 ; Japanese BOX_NAME_LENGTH EQU 9 ; English MON_NAME_LENGTH EQU 6 MOVE_NAME_LENGTH EQU 13 ; English diff --git a/constants/wram_constants.asm b/constants/wram_constants.asm index 381bdeb..4b63ba7 100644 --- a/constants/wram_constants.asm +++ b/constants/wram_constants.asm @@ -9,4 +9,5 @@ NUM_DIRECTIONS EQU const_value const_def const DEBUG_BATTLE_F - const DEBUG_FIELD_F \ No newline at end of file + const DEBUG_FIELD_F + const CONTINUED_F \ No newline at end of file diff --git a/engine/menu/main_menu.asm b/engine/menu/main_menu.asm index 320df82..1f4a9e1 100644 --- a/engine/menu/main_menu.asm +++ b/engine/menu/main_menu.asm @@ -39,7 +39,7 @@ MainMenu:: ; 01:53CC jp CallJumptable MainMenuHeader: ; 01:5418 - db $40 + db MENU_BACKUP_TILES menu_coords 0, 0, 13, 7 dw .MenuData db 1 ; default option @@ -110,11 +110,11 @@ MainMenuOptionContinue:: ;547C jp nz, MainMenu jr .loop .escape - call $5397 ; todo - call $53B0 ; todo + call Function5397 + call Function53b0 ld hl, wDebugFlags res DEBUG_FIELD_F, [hl] - set 2, [hl] + set CONTINUED_F, [hl] set 3, [hl] ldh a, [hJoyState] bit SELECT_F, a @@ -125,7 +125,7 @@ MainMenuOptionContinue:: ;547C call ClearTileMap ld c, $0A call DelayFrames - jp OverworldStart ; todo + jp OverworldStart DisplayContinueGameInfo:: ; 54BF xor a @@ -209,50 +209,50 @@ StartNewGame:: ; 555C jp IntroCleanup DemoStart:: ; 558D - ld de, $4BD4 ; maybe this should be a macro - b is bank, de is address, c is flag - ld bc, $1200 + ld de, OakPic + lb bc, BANK(OakPic), $00 call IntroDisplayPicCenteredOrUpperRight call FadeInIntroPic ld hl, OakSpeechDemo call PrintText call RotateThreePalettesRight call ClearTileMap - ld de, $4D10 - ld bc, $1200 + ld de, ProtagonistPic + lb bc, BANK(ProtagonistPic), $00 call IntroDisplayPicCenteredOrUpperRight call MovePicLeft - ld a, $D0 ; todo + ld a, %11010000 ldh [rOBP0], a call DemoSetUpPlayer jp IntroCleanup GameStart:: ; 55BB - ld de, $4BD4 - ld bc, $1200 + ld de, OakPic + lb bc, BANK(OakPic), $00 call IntroDisplayPicCenteredOrUpperRight call FadeInIntroPic ld hl, OakSpeech1 call PrintText call RotateThreePalettesRight call ClearTileMap - ld a, $C8 ; pokemon preview ID - ld [$CB5B], a - ld [$CD78], a + ld a, DEX_YADOKING + ld [wCurSpecies], a + ld [wMonDexIndex], a call GetMonHeader - ld hl, $C2F6 + ld hl, $C2F6 ; tilemap coord ld hl, $C2F6 call PrepMonFrontpic call MovePicLeft ld hl, OakSpeech2 call PrintText - ld a, $C8 ; this should be a constant methinks + ld a, DEX_YADOKING call PlayCry ld hl, OakSpeech3 call PrintText call RotateThreePalettesRight call ClearTileMap - ld de, $4D10 - ld bc, $1200 + ld de, ProtagonistPic + lb bc, BANK(ProtagonistPic), $00 call IntroDisplayPicCenteredOrUpperRight call MovePicLeft ld hl, OakSpeech4 @@ -260,8 +260,8 @@ GameStart:: ; 55BB call ChoosePlayerName call RotateThreePalettesRight call ClearTileMap - ld de, $4ab7 - ld bc, $1200 + ld de, RivalPic + lb bc, BANK(RivalPic), $00 call IntroDisplayPicCenteredOrUpperRight call FadeInIntroPic ld hl, OakSpeech5 @@ -269,8 +269,8 @@ GameStart:: ; 55BB call ChooseRivalName call RotateThreePalettesRight call ClearTileMap - ld de, $4BD4 - ld bc, $1200 + ld de, OakPic + lb bc, BANK(OakPic), $00 call IntroDisplayPicCenteredOrUpperRight call FadeInIntroPic ld hl, OakSpeech6 @@ -279,8 +279,8 @@ GameStart:: ; 55BB call Function04ac call RotateThreePalettesRight call ClearTileMap - ld de, $4D10 - ld bc, $1200 + ld de, ProtagonistPic + lb bc, BANK(ProtagonistPic), $00 call IntroDisplayPicCenteredOrUpperRight call RotateThreePalettesLeft ld hl, OakSpeech7 @@ -302,23 +302,23 @@ GameStart:: ; 55BB call DelayFrames IntroCleanup:: ; 568E - ld de, $4743 - ld bc, $0400 + ld de, ShrinkPic1 + lb bc, BANK(ShrinkPic1), $00 call IntroDisplayPicCenteredOrUpperRight ld c, $04 call DelayFrames - ld de, $479D - ld bc, $0400 + ld de, ShrinkPic2 + lb bc, BANK(ShrinkPic2), $00 call IntroDisplayPicCenteredOrUpperRight ld c, $14 call DelayFrames - ld hl, $C30A + hlcoord 6, 5 ld b, $07 ld c, $07 call ClearBox ld c, $14 call DelayFrames - call $5D5D + call LoadStartingSprites call LoadFontExtra ld c, $32 call DelayFrames @@ -332,7 +332,7 @@ IntroCleanup:: ; 568E OverworldStart:: call SetUpGameEntry ld hl, wDebugFlags - bit 2, [hl] ; ? + bit CONTINUED_F, [hl] call z, Function15b5 ld hl, wd4a9 set 0, [hl] @@ -344,7 +344,7 @@ SetUpGameEntry:: ; 56E8 ld a, $F2 ldh [hMapEntryMethod], a ld hl, wDebugFlags - bit 2, [hl] ; ? + bit CONTINUED_F, [hl] ; if we loaded a game ret nz ld a, $F1 ldh [hMapEntryMethod], a @@ -352,14 +352,14 @@ SetUpGameEntry:: ; 56E8 ld [wDebugWarpSelection], a ld hl, GameStartPlacement ld de, wMapGroup - ld bc, $0008 + ld bc, wd65e - wMapGroup call CopyBytes ret GameStartPlacement:: ; 570D db $01 ; map group - db $09 ; map - dw $C633 ; screen anchor - should be coords + db PLAYER_HOUSE_2F+1 ; map + dwcoord 15, 45 ; screen anchor db $04 ; metatile x db $04 ; metatile y db $00 ; in-metatile x @@ -378,7 +378,7 @@ DebugSetUpPlayer:: ; 5715 ld [wd164], a call GiveRandomJohto ld a, $03 - call Function57eb + call AddRandomPokemonToBox call FillTMs ld de, DebugBagItems call FillBagWithList @@ -388,7 +388,7 @@ DebugSetUpPlayer:: ; 5715 call DebugFillPokedex ld hl, wAnnonDex ld [hl], $01 - call $40FD ; todo + call Function40fd ret DebugFillPokedex:: ; 5755 @@ -440,12 +440,12 @@ DebugBagItems:: ; 5777 db ITEM_DETECT_ORB, $63 db $FF -Function57A0 ; 57A0 +GiveRandomPokemon:: ; 57A0 and a ret z .loop push af - call RandomOver246 + call RandomUnder246 ld b, $0A call GivePokemon pop af @@ -489,18 +489,18 @@ GivePokemon:: ; 57DE call Predef ret -Function57eb ; 57EB +AddRandomPokemonToBox: ; 57EB and a ret z .loop push af xor a ld [wca44], a - call RandomOver246 + call RandomUnder246 ld [wcdd7], a ld a, $05 ld [wCurPartyLevel], a - callab Function3e043 + callab AddPokemonToBox ld a, [wcdd7] ld [wMonDexIndex], a callab Functiondd5c @@ -509,7 +509,7 @@ Function57eb ; 57EB jr nz, .loop ret -RandomOver246:: ; 5818 +RandomUnder246:: ; 5818 .loop call Random and a @@ -557,7 +557,7 @@ DemoSetUpPlayer:: ; 5849 ld hl, wRivalName ld de, DemoRivalName call CopyString - call $40FD + call Function40fd ld de, DemoItemList call FillBagWithList call GiveRandomJohto @@ -676,7 +676,7 @@ SetPlayerNamesDebug:: ; 5B07 ld de, wRivalName CopyNameDebug: - ld bc, 0006 ; constant - name length + ld bc, PLAYER_NAME_LENGTH call CopyBytes ret @@ -724,21 +724,17 @@ ChoosePlayerNameEndText: ; 5B6F prompt PlayerNameMenuHeader: ; 5B81 - db $40 + db MENU_BACKUP_TILES ; flags menu_coords 00, 00, 10, 11 dw $5B89 db 01 ; initial selection ; 5B89 - db "ツオ゛じぶんできめる@" - -; 5B93 + db STATICMENU_CURSOR | STATICMENU_PLACE_TITLE | STATICMENU_DISABLE_B + db 04 ; items + db "じぶんできめる@" db "ゴールド@" - -; 5B98 db "サトシ@" - -; 5B9C db "ジャック@" ; 5BA1 @@ -782,27 +778,17 @@ ChooseRivalNameEndText: ; 5BF3 prompt RivalNameMenuHeader: ; 5C0A - db $40 + db MENU_BACKUP_TILES ; flags menu_coords 00, 00, 10, 11 dw RivalNameMenuData db 01 ; initial selection RivalNameMenuData: ; 5C12 - db $91 + db STATICMENU_CURSOR | STATICMENU_PLACE_TITLE | STATICMENU_DISABLE_B db 04 ; items - dw $3C2C - db $DE, $33 - dw $D2B7 - - db $D9, $50 - -; 5C1C + db "じぶんできめる@" db "シルバー@" - -; 5C21 db "シゲル@" - -; 5C25 db "ジョン@" ; 5C29 @@ -836,28 +822,17 @@ MomNamePrompt:: ; 5C31 ret MomNameMenuHeader: ; 5C71 - db $40 ; flags + db MENU_BACKUP_TILES ; flags menu_coords 00, 00, 10, 11 dw .MomNameMenuData db 01 ; initial selection .MomNameMenuData: ; 5C79 - db $91 + db STATICMENU_CURSOR | STATICMENU_PLACE_TITLE | STATICMENU_DISABLE_B db 04 ; items - dw $3C2C - db $DE, $33 - dw $B77F - -; 5C81 - db "める@" - -; 5C84 + db "じぶんで きめる@" db "おかあさん@" - -; 5C8A db "ママ@" - -; 5C8D db "かあちゃん@" ; 5C93 @@ -875,12 +850,12 @@ NamingWindow:: ; 5C9B SaveCustomName:: ; 5CAC ld hl, wcd31 - ld bc, $0006 ; constant, player name length + ld bc, PLAYER_NAME_LENGTH call CopyBytes ret PanPortraitRight:: ; 5CB6 - ld hl, $C2F5 ; should be a hlcoord i think + hlcoord 5, 4 ld d, $06 ld e, $7E ld b, d @@ -909,7 +884,7 @@ PanPortraitRight:: ; 5CB6 ret PanPortraitLeft:: ; 5CD7 - ld hl, $C2FC ; hlcoord + hlcoord 12, 4 ld b, $06 ld c, $7E .loop @@ -987,20 +962,48 @@ IntroDisplayPicCenteredOrUpperRight:: ; 5D27 call UncompressSpriteFromDE ld a, $00 call OpenSRAM - ld hl, $A188 - ld de, $A000 - ld bc, $0310 + ld hl, sSpriteBuffer1 + ld de, sSpriteBuffer0 + ld bc, DOUBLESPRITEBUFFERSIZE call CopyBytes call CloseSRAM - ld de, $9000 + ld de, VRAM_Begin + $1000 call InterlaceMergeSpriteBuffers pop hl xor a ldh [hGraphicStartTile], a ld bc, $0707 - ; ld a, $1F - ; call Predef predef PlaceGraphic ret -; 5D5D \ No newline at end of file +LoadStartingSprites: ; 5D5D + ld de, GoldSpriteGFX + lb bc, BANK(GoldSpriteGFX), $0C + ld hl, VRAM_Begin + call Request2bpp + ld hl, wVirtualOAM + ld de, GameStartSprites + ld c, $04 +.loop + ld a, [de] + inc de + ld [hl+], a + ld a, [de] + inc de + ld [hl+], a + ld a, [de] + inc de + ld [hl+], a + xor a + ld [hl+], a + dec c + jr nz, .loop + ret + +GameStartSprites: ; 5D80 + db $50, $48, $00 + db $50, $50, $01 + db $58, $48, $02 + db $58, $50, $03 + +; 5D8C \ No newline at end of file diff --git a/shim.sym b/shim.sym index 9f3ddb1..38299a2 100644 --- a/shim.sym +++ b/shim.sym @@ -1,12 +1,15 @@ ; ROM0 00:3CA8 InitSpriteAnimStruct +01:40FD Function40fd 01:5007 Function5007 01:50B9 Function50b9 01:5190 _UpdateSprites 01:5190 Function5190 01:52F9 Function52f9 01:5388 Function5388 +01:5397 Function5397 +01:53B0 Function53b0 01:63D8 ReanchorBGMap_NoOAMUpdate 01:6437 LoadFonts_NoOAMUpdate 01:6445 Function6445 @@ -62,6 +65,8 @@ 03:5F7D Functiondf7d 03:5F91 Functiondf91 +04:4743 ShrinkPic1 +04:479D ShrinkPic2 04:528F Function1128f 04:52C1 Function112c1 04:530A Function1130a @@ -125,7 +130,7 @@ 0F:508C Function3d08c 0F:55CE Function3d5ce 0F:567C Function3d67c -0F:6043 Function3e043 +0F:6043 AddPokemonToBox 0F:61A4 Function3e1a4 0F:6874 Function3e874 0F:691E Function3e91e diff --git a/wram.asm b/wram.asm index d2b45fb..d4999e7 100644 --- a/wram.asm +++ b/wram.asm @@ -591,8 +591,9 @@ wTextBoxFlags:: db ; ce62 wDebugFlags:: db ; ce63 ; 76543210 -; |\- debug battle indicator -; \-- debug field indicator +; \/|\- debug battle indicator +; | \-- debug field indicator +; \---- loaded/continued game SECTION "Player And Mom Names", WRAM0[$CE67] wPlayerName:: ds 6 ; ce67 -- cgit v1.2.3 From 753cec9bd6b6904879fde5c02fb75e3c92801c2f Mon Sep 17 00:00:00 2001 From: 2Tie Date: Mon, 18 Jun 2018 22:17:42 -0600 Subject: forgot to save this change, oops --- engine/menu/main_menu.asm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/engine/menu/main_menu.asm b/engine/menu/main_menu.asm index 1f4a9e1..d710b1c 100644 --- a/engine/menu/main_menu.asm +++ b/engine/menu/main_menu.asm @@ -239,8 +239,8 @@ GameStart:: ; 55BB ld [wCurSpecies], a ld [wMonDexIndex], a call GetMonHeader - ld hl, $C2F6 ; tilemap coord - ld hl, $C2F6 + hlcoord 6, 4 + hlcoord 6, 4 call PrepMonFrontpic call MovePicLeft ld hl, OakSpeech2 -- cgit v1.2.3 From b44077ed3180b57a852db48f784312f6a1b0221a Mon Sep 17 00:00:00 2001 From: 2Tie Date: Mon, 18 Jun 2018 22:36:17 -0600 Subject: this was a silly mistake --- home/talk_to_npc.asm | 6 +++--- home/unknown_388f.asm | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/home/talk_to_npc.asm b/home/talk_to_npc.asm index 69d59db..4b2261b 100644 --- a/home/talk_to_npc.asm +++ b/home/talk_to_npc.asm @@ -340,13 +340,13 @@ GetInlineMapObject:: ; 00:31EB and a ret -CheckAPressedDebug ; 3233 - ; If in debug mode, returns a check on the A button. +CheckBPressedDebug ; 3233 + ; If in debug mode, returns a check on the B button. ld a, [wDebugFlags] bit DEBUG_FIELD_F, a ret z ldh a, [hJoyState] - bit A_BUTTON, a + bit B_BUTTON_F, a ret ClearAccumulator:: ; 323E diff --git a/home/unknown_388f.asm b/home/unknown_388f.asm index 5fdad1c..447f6cf 100644 --- a/home/unknown_388f.asm +++ b/home/unknown_388f.asm @@ -53,7 +53,7 @@ TestWildBattleStart:: ldh a, [hJoyState] and D_PAD ret z ; if no directions are down, don't try and trigger a wild encounter - call CheckAPressedDebug + call CheckBPressedDebug jp nz, ClearAccumulator ; if b button is down, clear acc callab Function3ee3e ld a, [wBattleMode] -- cgit v1.2.3 From 2f0b152e5a52d39bfe938f8f19cdd49d3dcd4671 Mon Sep 17 00:00:00 2001 From: 2Tie Date: Mon, 18 Jun 2018 22:53:06 -0600 Subject: this is how you fix conflicts, right? --- constants/wram_constants.asm | 16 ++++++++++++++++ data/predef_pointers.inc | 16 ++++++++-------- wram.asm | 3 ++- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/constants/wram_constants.asm b/constants/wram_constants.asm index 4b63ba7..18b7e4a 100644 --- a/constants/wram_constants.asm +++ b/constants/wram_constants.asm @@ -7,6 +7,22 @@ const RIGHT ; 3 NUM_DIRECTIONS EQU const_value +; wMonType:: ; cb5a + const_def + const PARTYMON ; 0 + const OTPARTYMON ; 1 + const BOXMON ; 2 + const TEMPMON ; 3 + const WILDMON ; 4 + +; wPlayerState:: ; d95d +PLAYER_NORMAL EQU 0 +PLAYER_BIKE EQU 1 +PLAYER_SKATE EQU 2 +PLAYER_SURF EQU 4 +PLAYER_SURF_PIKA EQU 8 + +; wDebugFlags:: ; ce63 const_def const DEBUG_BATTLE_F const DEBUG_FIELD_F diff --git a/data/predef_pointers.inc b/data/predef_pointers.inc index 3f5e848..7d2e65a 100644 --- a/data/predef_pointers.inc +++ b/data/predef_pointers.inc @@ -16,14 +16,14 @@ PredefPointers:: ; 1:62d3 add_predef Function6713 add_predef Function66b1 add_predef DebugMenu - add_predef Functionce10 - add_predef Functioncd6f - add_predef Functioncde3 - add_predef Functioncde3_2 ; 8 - add_predef Functioncde3_3 - add_predef Functioncdf9 - add_predef Functionce10_2 - add_predef Functioncd33 + add_predef GetItemAmount + add_predef HealParty + add_predef AddBCD + dba AddBCD ; 8 + dba AddBCD + add_predef SubBCD + dba GetItemAmount + add_predef SmallFarFlagAction GiveItemPredef:: dbw 3, GiveItem add_predef Functionce3c diff --git a/wram.asm b/wram.asm index d4999e7..d7ca4f0 100644 --- a/wram.asm +++ b/wram.asm @@ -595,7 +595,8 @@ wDebugFlags:: db ; ce63 ; | \-- debug field indicator ; \---- loaded/continued game -SECTION "Player And Mom Names", WRAM0[$CE67] + ds 3 + wPlayerName:: ds 6 ; ce67 wMomsName:: ds 6 ; ce6d -- cgit v1.2.3 From beae22ccbd4c43c15f9100dd6cbe983d545e5e97 Mon Sep 17 00:00:00 2001 From: 2Tie Date: Mon, 18 Jun 2018 23:25:39 -0600 Subject: spoilers: it wasn't --- data/predef_pointers.inc | 16 ++++++++-------- engine/menu/main_menu.asm | 2 +- shim.sym | 1 - wram.asm | 25 ++++++++++++++++++++----- 4 files changed, 29 insertions(+), 15 deletions(-) diff --git a/data/predef_pointers.inc b/data/predef_pointers.inc index 7d2e65a..3f5e848 100644 --- a/data/predef_pointers.inc +++ b/data/predef_pointers.inc @@ -16,14 +16,14 @@ PredefPointers:: ; 1:62d3 add_predef Function6713 add_predef Function66b1 add_predef DebugMenu - add_predef GetItemAmount - add_predef HealParty - add_predef AddBCD - dba AddBCD ; 8 - dba AddBCD - add_predef SubBCD - dba GetItemAmount - add_predef SmallFarFlagAction + add_predef Functionce10 + add_predef Functioncd6f + add_predef Functioncde3 + add_predef Functioncde3_2 ; 8 + add_predef Functioncde3_3 + add_predef Functioncdf9 + add_predef Functionce10_2 + add_predef Functioncd33 GiveItemPredef:: dbw 3, GiveItem add_predef Functionce3c diff --git a/engine/menu/main_menu.asm b/engine/menu/main_menu.asm index d710b1c..85e1078 100644 --- a/engine/menu/main_menu.asm +++ b/engine/menu/main_menu.asm @@ -466,7 +466,7 @@ GiveRandomJohto:: ; 57B0 ld b, $08 call GivePokemon ld a, $8D - ld [wd6b3], a + ld [wPartyMon1 + 1], a ret GiveKantoStarters:: ; 57C8 diff --git a/shim.sym b/shim.sym index 38299a2..b6f4512 100644 --- a/shim.sym +++ b/shim.sym @@ -463,5 +463,4 @@ ; The starting house's map script number is stored at d29a. Others are probably nearby. 01:D35F wOptions 01:D513 wWarpNumber -01:D7D2 wPartyMonOT 01:DA3B wOTPartyMonOT diff --git a/wram.asm b/wram.asm index d7ca4f0..bda0505 100644 --- a/wram.asm +++ b/wram.asm @@ -838,11 +838,26 @@ wTilesetCollisionAddress:: ; d6a4 ds 4 ; TODO wTilesetEnd:: ; d6aa -SECTION "D6B3", WRAM0[$D6B3] - -wd6b3 :: db ; d6b3 - -SECTION "PokeDexFlags", WRAM0[$D81A] +wPartyCount:: db +wPartySpecies:: ds PARTY_LENGTH +wPartyEnd:: db + +wPartyMons:: +wPartyMon1:: party_struct wPartyMon1 ; d6b2 +wPartyMon2:: party_struct wPartyMon2 ; d6e2 +wPartyMon3:: party_struct wPartyMon3 ; d712 +wPartyMon4:: party_struct wPartyMon4 ; d742 +wPartyMon5:: party_struct wPartyMon5 ; d772 +wPartyMon6:: party_struct wPartyMon6 ; d7a2 +wPlayerPartyEnd:: ; d7d2 + +wPartyMonOT:: ; d7d2 + ds PARTY_LENGTH * 6 +wPartyMonOTEnd:: ; d7f6 + +wPartyMonNicknames:: ; d7f6 + ds PARTY_LENGTH * MON_NAME_LENGTH ; = $24 +wPartyMonNicknamesEnd:: ; d81a wPokedexOwned:: ; d81a flag_array NUM_POKEMON -- cgit v1.2.3 From 26edac4db6b17102822aa67791178d5fe2505d36 Mon Sep 17 00:00:00 2001 From: 2Tie Date: Tue, 19 Jun 2018 12:48:42 -0600 Subject: additional menu data tidying up/figuring out --- engine/menu/main_menu.asm | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/engine/menu/main_menu.asm b/engine/menu/main_menu.asm index 85e1078..4bd4a45 100644 --- a/engine/menu/main_menu.asm +++ b/engine/menu/main_menu.asm @@ -726,19 +726,18 @@ ChoosePlayerNameEndText: ; 5B6F PlayerNameMenuHeader: ; 5B81 db MENU_BACKUP_TILES ; flags menu_coords 00, 00, 10, 11 - dw $5B89 + dw PlayerNameMenuData db 01 ; initial selection -; 5B89 +PlayerNameMenuData; 5B89 db STATICMENU_CURSOR | STATICMENU_PLACE_TITLE | STATICMENU_DISABLE_B db 04 ; items db "じぶんできめる@" db "ゴールド@" db "サトシ@" db "ジャック@" - -; 5BA1 - db "エ゛なまえこうほ@" + db 3 ; x offset for the title string + db "なまえこうほ@" ChooseRivalName:: ; 5BA9 call PanPortraitRight @@ -790,9 +789,8 @@ RivalNameMenuData: ; 5C12 db "シルバー@" db "シゲル@" db "ジョン@" - -; 5C29 - db "エ゛なまえこうほ@" + db 3 + db "なまえこうほ@" MomNamePrompt:: ; 5C31 ld hl, MomNameMenuHeader @@ -834,9 +832,8 @@ MomNameMenuHeader: ; 5C71 db "おかあさん@" db "ママ@" db "かあちゃん@" - -; 5C93 - db "エ゛なまえこうほ@" + db 3 + db "なまえこうほ@" NamingWindow:: ; 5C9B ; loads the menu header put into hl -- cgit v1.2.3 From 368f929da21478a5cadc4568f90f6558342f60ef Mon Sep 17 00:00:00 2001 From: pfero Date: Fri, 22 Jun 2018 17:18:23 +0200 Subject: Fix landmark constants --- constants/landmark_constants.asm | 90 +++++---- data/maps/maps.asm | 418 +++++++++++++++++++-------------------- 2 files changed, 253 insertions(+), 255 deletions(-) diff --git a/constants/landmark_constants.asm b/constants/landmark_constants.asm index b7a7542..56a7b02 100644 --- a/constants/landmark_constants.asm +++ b/constants/landmark_constants.asm @@ -1,47 +1,45 @@ const_def - const LANDMARK_NONE ; 00 - const LANDMARK_SILENT ; 01 - const LANDMARK_OLD ; 02 - const LANDMARK_WEST ; 03 - const LANDMARK_HIGH_TECH ; 04 - const LANDMARK_FOUNT ; 05 - const LANDMARK_BIRDON ; 06 - const LANDMARK_NEW_TYPE ; 07 - const LANDMARK_SUGAR ; 08 - const LANDMARK_BLUE_FOREST ; 09 - const LANDMARK_STAND ; 0a - const LANDMARK_KANTO ; 0b - const LANDMARK_PRINCE ; 0c - const LANDMARK_MT_FUJI ; 0d - const LANDMARK_SOUTH ; 0e - const LANDMARK_NORTH ; 0f - const LANDMARK_ROUTE_15 ; 10 - const LANDMARK_ROUTE_18 ; 11 - const LANDMARK_POWER_PLANT_1 ; 12 - const LANDMARK_POWER_PLANT_2 ; 13 - const LANDMARK_POWER_PLANT_3 ; 14 - const LANDMARK_POWER_PLANT_4 ; 15 - const LANDMARK_RUINS_1 ; 16 - const LANDMARK_RUINS_2 ; 17 - const LANDMARK_MINES_1 ; 18 - const LANDMARK_MINES_2 ; 19 - const LANDMARK_MINES_3 ; 1a - const LANDMARK_MINES_4 ; 1b - const LANDMARK_MINES_5 ; 1c - const LANDMARK_MINES_6 ; 1d - const LANDMARK_MINES_7 ; 1e - const LANDMARK_HIDEOUT_1 ; 1f - const LANDMARK_HIDEOUT_2 ; 20 - const LANDMARK_HIDEOUT_3 ; 21 - const LANDMARK_SLOWPOKE_WELL_1 ; 22 - const LANDMARK_SLOWPOKE_WELL_2 ; 23 - const LANDMARK_POKEMON_LEAGUE_1 ; 24 - const LANDMARK_POKEMON_LEAGUE_1_2 ; 25 - const LANDMARK_POKEMON_LEAGUE_2 ; 26 - const LANDMARK_POKEMON_LEAGUE_3 ; 27 - const LANDMARK_POKEMON_LEAGUE_4 ; 28 - const LANDMARK_POKEMON_LEAGUE_5 ; 29 - const LANDMARK_POKEMON_LEAGUE_6 ; 2a - const LANDMARK_POKEMON_LEAGUE_7 ; 2b - const LANDMARK_POKEMON_LEAGUE_7_2 ; 2c - const LANDMARK_SILENT_HILL ; 2d + const LANDMARK_NONE ; 00 + const LANDMARK_NORTH ; 01 + const LANDMARK_BULL_FOREST_ROUTE_3 ; 02 + const LANDMARK_BULL_FOREST ; 03 + const LANDMARK_BULL_FOREST_ROUTE_2 ; 04 + const LANDMARK_STAND ; 05 + const LANDMARK_STAND_ROUTE ; 06 + const LANDMARK_KANTO_EAST_ROUTE ; 07 + const LANDMARK_KANTO ; 08 + const LANDMARK_ROUTE_SILENT_EAST ; 09 + const LANDMARK_SILENT_HILL ; 0a + const LANDMARK_PRINCE ; 0b + const LANDMARK_MT_FUJI ; 0c + const LANDMARK_ROUTE_1_P1 ; 0d + const LANDMARK_ROUTE_1_P2 ; 0e + const LANDMARK_OLD_CITY ; 0f + const LANDMARK_ROUTE_2 ; 10 + const LANDMARK_WEST ; 11 + const LANDMARK_BAADON_ROUTE_1 ; 12 + const LANDMARK_BAADON ; 13 + const LANDMARK_BAADON_ROUTE_2 ; 14 + const LANDMARK_BAADON_ROUTE_3 ; 15 + const LANDMARK_ROUTE_15 ; 16 + const LANDMARK_NEWTYPE ; 17 + const LANDMARK_SUGAR_ROUTE ; 18 + const LANDMARK_SUGAR ; 19 + const LANDMARK_NEWTYPE_ROUTE ; 1a + const LANDMARK_ROUTE_18 ; 1b + const LANDMARK_BULL_FOREST_ROUTE_1 ; 1c + const LANDMARK_1C ; 1d + const LANDMARK_1D ; 1e + const LANDMARK_FONTO_ROUTE_3 ; 1f + const LANDMARK_FONTO ; 20 + const LANDMARK_FONTO_ROUTE_2 ; 21 + const LANDMARK_FONTO_ROUTE_6 ; 22 + const LANDMARK_FONTO_ROUTE_5 ; 23 + const LANDMARK_SOUTH ; 24 + const LANDMARK_FONTO_ROUTE_1 ; 25 + const LANDMARK_HAITEKU_WEST_ROUTE_OCEAN ; 26 + const LANDMARK_HAITEKU_WEST_ROUTE ; 27 + const LANDMARK_HAITEKU ; 28 + const LANDMARK_WASTE_BRIDGE ; 29 + const LANDMARK_FONTO_ROUTE_4 ; 2a + const LANDMARK_FONTO_BRIDGE ; 2b diff --git a/data/maps/maps.asm b/data/maps/maps.asm index 28ba8f4..1332a0e 100644 --- a/data/maps/maps.asm +++ b/data/maps/maps.asm @@ -35,244 +35,244 @@ MapGroupPointers: dw MapGroup_Empty MapGroup_SilentHill: - map Route1P1, TILESET_SILENT_HILL, ROUTE, LANDMARK_MT_FUJI - map Route1P2, TILESET_SILENT_HILL, ROUTE, LANDMARK_SOUTH - map RouteSilentEast, TILESET_SILENT_HILL, ROUTE, LANDMARK_BLUE_FOREST - map SilentHill, TILESET_SILENT_HILL, TOWN, LANDMARK_STAND - map Route1Gate1F, TILESET_ROUTE_GATE, GATE, LANDMARK_SOUTH - map Route1Gate2F, TILESET_ROUTE_GATE, GATE, LANDMARK_SOUTH - map RouteSilentEastGate, TILESET_ROUTE_GATE, GATE, LANDMARK_BLUE_FOREST - map PlayerHouse1F, TILESET_HOUSE, INDOOR, LANDMARK_STAND - map PlayerHouse2F, TILESET_HOUSE, INDOOR, LANDMARK_STAND - map SilentPokecenter, TILESET_POKECENTER, INDOOR, LANDMARK_STAND - map SilentHillHouse, TILESET_HOUSE, INDOOR, LANDMARK_STAND - map SilentHillLab, TILESET_LAB, INDOOR, LANDMARK_STAND - map SilentHillLab2, TILESET_LAB, INDOOR, LANDMARK_STAND - map Unused13, TILESET_LAB, INDOOR, LANDMARK_STAND + map Route1P1, TILESET_SILENT_HILL, ROUTE, LANDMARK_ROUTE_1_P1 + map Route1P2, TILESET_SILENT_HILL, ROUTE, LANDMARK_ROUTE_1_P2 + map RouteSilentEast, TILESET_SILENT_HILL, ROUTE, LANDMARK_ROUTE_SILENT_EAST + map SilentHill, TILESET_SILENT_HILL, TOWN, LANDMARK_SILENT_HILL + map Route1Gate1F, TILESET_ROUTE_GATE, GATE, LANDMARK_ROUTE_1_P2 + map Route1Gate2F, TILESET_ROUTE_GATE, GATE, LANDMARK_ROUTE_1_P2 + map RouteSilentEastGate, TILESET_ROUTE_GATE, GATE, LANDMARK_ROUTE_SILENT_EAST + map PlayerHouse1F, TILESET_HOUSE, INDOOR, LANDMARK_SILENT_HILL + map PlayerHouse2F, TILESET_HOUSE, INDOOR, LANDMARK_SILENT_HILL + map SilentPokecenter, TILESET_POKECENTER, INDOOR, LANDMARK_SILENT_HILL + map SilentHillHouse, TILESET_HOUSE, INDOOR, LANDMARK_SILENT_HILL + map SilentHillLab, TILESET_LAB, INDOOR, LANDMARK_SILENT_HILL + map SilentHillLab2, TILESET_LAB, INDOOR, LANDMARK_SILENT_HILL + map Unused13, TILESET_LAB, INDOOR, LANDMARK_SILENT_HILL map ShizukanaOka, TILESET_FOREST, CAVE, LANDMARK_NONE MapGroup_OldCity: - map Route2, TILESET_OLD_CITY, ROUTE, LANDMARK_ROUTE_15 - map OldCity, TILESET_OLD_CITY, TOWN, LANDMARK_NORTH - map Route2Gate1F, TILESET_ROUTE_GATE, GATE, LANDMARK_ROUTE_15 - map Route2Gate2F, TILESET_ROUTE_GATE, GATE, LANDMARK_ROUTE_15 - map Route2House, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_15 - map OldCityMuseum, TILESET_TOWER, INDOOR, LANDMARK_NORTH - map OldCityGym, TILESET_GYM, INDOOR, LANDMARK_NORTH - map OldCityTower1F, TILESET_TOWER, INDOOR, LANDMARK_NORTH - map OldCityTower2F, TILESET_TOWER, INDOOR, LANDMARK_NORTH - map OldCityTower3F, TILESET_TOWER, INDOOR, LANDMARK_NORTH - map OldCityTower4F, TILESET_TOWER, INDOOR, LANDMARK_NORTH - map OldCityTower5F, TILESET_TOWER, INDOOR, LANDMARK_NORTH - map OldCityBillsHouse, TILESET_JAPANESE_HOUSE, INDOOR, LANDMARK_NORTH - map OldCityMart, TILESET_MART, INDOOR, LANDMARK_NORTH - map OldCityHouse, TILESET_JAPANESE_HOUSE, INDOOR, LANDMARK_NORTH - map OldCityPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_NORTH - map OldCityPokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_NORTH - map OldCityPokecenterTrade, TILESET_ROUTE_GATE, GATE, LANDMARK_NORTH - map OldCityPokecenterBattle, TILESET_ROUTE_GATE, GATE, LANDMARK_NORTH - map OldCityPokecenterTimeMachine, TILESET_POKECENTER, INDOOR, LANDMARK_NORTH - map OldCityKurtsHouse, TILESET_JAPANESE_HOUSE, INDOOR, LANDMARK_NORTH - map OldCitySchool, TILESET_TOWER, INDOOR, LANDMARK_NORTH + map Route2, TILESET_OLD_CITY, ROUTE, LANDMARK_ROUTE_2 + map OldCity, TILESET_OLD_CITY, TOWN, LANDMARK_OLD_CITY + map Route2Gate1F, TILESET_ROUTE_GATE, GATE, LANDMARK_ROUTE_2 + map Route2Gate2F, TILESET_ROUTE_GATE, GATE, LANDMARK_ROUTE_2 + map Route2House, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_2 + map OldCityMuseum, TILESET_TOWER, INDOOR, LANDMARK_OLD_CITY + map OldCityGym, TILESET_GYM, INDOOR, LANDMARK_OLD_CITY + map OldCityTower1F, TILESET_TOWER, INDOOR, LANDMARK_OLD_CITY + map OldCityTower2F, TILESET_TOWER, INDOOR, LANDMARK_OLD_CITY + map OldCityTower3F, TILESET_TOWER, INDOOR, LANDMARK_OLD_CITY + map OldCityTower4F, TILESET_TOWER, INDOOR, LANDMARK_OLD_CITY + map OldCityTower5F, TILESET_TOWER, INDOOR, LANDMARK_OLD_CITY + map OldCityBillsHouse, TILESET_JAPANESE_HOUSE, INDOOR, LANDMARK_OLD_CITY + map OldCityMart, TILESET_MART, INDOOR, LANDMARK_OLD_CITY + map OldCityHouse, TILESET_JAPANESE_HOUSE, INDOOR, LANDMARK_OLD_CITY + map OldCityPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_OLD_CITY + map OldCityPokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_OLD_CITY + map OldCityPokecenterTrade, TILESET_ROUTE_GATE, GATE, LANDMARK_OLD_CITY + map OldCityPokecenterBattle, TILESET_ROUTE_GATE, GATE, LANDMARK_OLD_CITY + map OldCityPokecenterTimeMachine, TILESET_POKECENTER, INDOOR, LANDMARK_OLD_CITY + map OldCityKurtsHouse, TILESET_JAPANESE_HOUSE, INDOOR, LANDMARK_OLD_CITY + map OldCitySchool, TILESET_TOWER, INDOOR, LANDMARK_OLD_CITY MapGroup_West: - map West, TILESET_WEST, TOWN, LANDMARK_ROUTE_18 - map WestMart1F, TILESET_BIG_MART, INDOOR, LANDMARK_ROUTE_18 - map WestMart2F, TILESET_BIG_MART, INDOOR, LANDMARK_ROUTE_18 - map WestMart3F, TILESET_BIG_MART, INDOOR, LANDMARK_ROUTE_18 - map WestMart4F, TILESET_BIG_MART, INDOOR, LANDMARK_ROUTE_18 - map WestMart5F, TILESET_BIG_MART, INDOOR, LANDMARK_ROUTE_18 - map WestMart6F, TILESET_BIG_MART, INDOOR, LANDMARK_ROUTE_18 - map WestMartElevator, TILESET_BIG_MART, INDOOR, LANDMARK_ROUTE_18 - map WestRadioTower1F, TILESET_RADIO_TOWER, INDOOR, LANDMARK_ROUTE_18 - map WestRadioTower2F, TILESET_RADIO_TOWER, INDOOR, LANDMARK_ROUTE_18 - map WestRadioTower3F, TILESET_RADIO_TOWER, INDOOR, LANDMARK_ROUTE_18 - map WestRadioTower4F, TILESET_RADIO_TOWER, INDOOR, LANDMARK_ROUTE_18 - map WestRadioTower5F, TILESET_RADIO_TOWER, INDOOR, LANDMARK_ROUTE_18 - map WestRocketRaidedHouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_18 - map WestPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_ROUTE_18 - map WestPokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_ROUTE_18 - map WestGym, TILESET_GYM, INDOOR, LANDMARK_ROUTE_18 - map WestHouse1, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_18 - map WestHouse2, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_18 + map West, TILESET_WEST, TOWN, LANDMARK_WEST + map WestMart1F, TILESET_BIG_MART, INDOOR, LANDMARK_WEST + map WestMart2F, TILESET_BIG_MART, INDOOR, LANDMARK_WEST + map WestMart3F, TILESET_BIG_MART, INDOOR, LANDMARK_WEST + map WestMart4F, TILESET_BIG_MART, INDOOR, LANDMARK_WEST + map WestMart5F, TILESET_BIG_MART, INDOOR, LANDMARK_WEST + map WestMart6F, TILESET_BIG_MART, INDOOR, LANDMARK_WEST + map WestMartElevator, TILESET_BIG_MART, INDOOR, LANDMARK_WEST + map WestRadioTower1F, TILESET_RADIO_TOWER, INDOOR, LANDMARK_WEST + map WestRadioTower2F, TILESET_RADIO_TOWER, INDOOR, LANDMARK_WEST + map WestRadioTower3F, TILESET_RADIO_TOWER, INDOOR, LANDMARK_WEST + map WestRadioTower4F, TILESET_RADIO_TOWER, INDOOR, LANDMARK_WEST + map WestRadioTower5F, TILESET_RADIO_TOWER, INDOOR, LANDMARK_WEST + map WestRocketRaidedHouse, TILESET_HOUSE, INDOOR, LANDMARK_WEST + map WestPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_WEST + map WestPokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_WEST + map WestGym, TILESET_GYM, INDOOR, LANDMARK_WEST + map WestHouse1, TILESET_HOUSE, INDOOR, LANDMARK_WEST + map WestHouse2, TILESET_HOUSE, INDOOR, LANDMARK_WEST MapGroup_Haiteku: - map HaitekuWestRoute, TILESET_HAITEKU, ROUTE, LANDMARK_POKEMON_LEAGUE_3 - map HaitekuWestRouteOcean, TILESET_HAITEKU, ROUTE, LANDMARK_POKEMON_LEAGUE_2 - map Haiteku, TILESET_HAITEKU, TOWN, LANDMARK_POKEMON_LEAGUE_4 - map HaitekuWestRouteGate, TILESET_ROUTE_GATE, GATE, LANDMARK_POKEMON_LEAGUE_2 - map HaitekuPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_POKEMON_LEAGUE_4 - map HaitekuPokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_POKEMON_LEAGUE_4 - map HaitekuLeague1F, TILESET_TOWER, INDOOR, LANDMARK_POKEMON_LEAGUE_4 - map HaitekuLeague2F, TILESET_GYM, INDOOR, LANDMARK_POKEMON_LEAGUE_4 - map HaitekuMart, TILESET_MART, INDOOR, LANDMARK_POKEMON_LEAGUE_4 - map HaitekuHouse1, TILESET_HOUSE, INDOOR, LANDMARK_POKEMON_LEAGUE_4 - map HaitekuHouse2, TILESET_HOUSE, INDOOR, LANDMARK_POKEMON_LEAGUE_4 - map HaitekuImposterOakHouse, TILESET_HOUSE, INDOOR, LANDMARK_POKEMON_LEAGUE_4 - map HaitekuAquarium1F, TILESET_AQUARIUM, INDOOR, LANDMARK_POKEMON_LEAGUE_4 - map HaitekuAquarium2F, TILESET_AQUARIUM, INDOOR, LANDMARK_POKEMON_LEAGUE_4 + map HaitekuWestRoute, TILESET_HAITEKU, ROUTE, LANDMARK_HAITEKU_WEST_ROUTE + map HaitekuWestRouteOcean, TILESET_HAITEKU, ROUTE, LANDMARK_HAITEKU_WEST_ROUTE_OCEAN + map Haiteku, TILESET_HAITEKU, TOWN, LANDMARK_HAITEKU + map HaitekuWestRouteGate, TILESET_ROUTE_GATE, GATE, LANDMARK_HAITEKU_WEST_ROUTE_OCEAN + map HaitekuPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_HAITEKU + map HaitekuPokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_HAITEKU + map HaitekuLeague1F, TILESET_TOWER, INDOOR, LANDMARK_HAITEKU + map HaitekuLeague2F, TILESET_GYM, INDOOR, LANDMARK_HAITEKU + map HaitekuMart, TILESET_MART, INDOOR, LANDMARK_HAITEKU + map HaitekuHouse1, TILESET_HOUSE, INDOOR, LANDMARK_HAITEKU + map HaitekuHouse2, TILESET_HOUSE, INDOOR, LANDMARK_HAITEKU + map HaitekuImposterOakHouse, TILESET_HOUSE, INDOOR, LANDMARK_HAITEKU + map HaitekuAquarium1F, TILESET_AQUARIUM, INDOOR, LANDMARK_HAITEKU + map HaitekuAquarium2F, TILESET_AQUARIUM, INDOOR, LANDMARK_HAITEKU MapGroup_Fonto: - map FontoRoute1, TILESET_FONTO, ROUTE, LANDMARK_POKEMON_LEAGUE_1_2 - map FontoRoute2, TILESET_FONTO, ROUTE, LANDMARK_HIDEOUT_3 - map FontoRoute3, TILESET_FONTO, ROUTE, LANDMARK_HIDEOUT_1 - map FontoRoute4, TILESET_FONTO, ROUTE, LANDMARK_POKEMON_LEAGUE_6 - map FontoRoute5, TILESET_FONTO, ROUTE, LANDMARK_SLOWPOKE_WELL_2 - map FontoRoute6, TILESET_FONTO, ROUTE, LANDMARK_SLOWPOKE_WELL_1 - map Fonto, TILESET_FONTO, TOWN, LANDMARK_HIDEOUT_2 - map FontoRouteGate1, TILESET_ROUTE_GATE, GATE, LANDMARK_POKEMON_LEAGUE_1_2 - map FontoRouteGate2, TILESET_ROUTE_GATE, GATE, LANDMARK_POKEMON_LEAGUE_6 - map FontoRouteGate3, TILESET_ROUTE_GATE, GATE, LANDMARK_SLOWPOKE_WELL_2 - map FontoRocketHouse, TILESET_ROCKET_HOUSE, INDOOR, LANDMARK_HIDEOUT_2 - map FontoMart, TILESET_MART, INDOOR, LANDMARK_HIDEOUT_2 - map FontoHouse, TILESET_HOUSE, INDOOR, LANDMARK_HIDEOUT_2 - map FontoPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_HIDEOUT_2 - map FontoPokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_HIDEOUT_2 - map FontoLab, TILESET_LAB, INDOOR, LANDMARK_HIDEOUT_2 + map FontoRoute1, TILESET_FONTO, ROUTE, LANDMARK_FONTO_ROUTE_1 + map FontoRoute2, TILESET_FONTO, ROUTE, LANDMARK_FONTO_ROUTE_2 + map FontoRoute3, TILESET_FONTO, ROUTE, LANDMARK_FONTO_ROUTE_3 + map FontoRoute4, TILESET_FONTO, ROUTE, LANDMARK_FONTO_ROUTE_4 + map FontoRoute5, TILESET_FONTO, ROUTE, LANDMARK_FONTO_ROUTE_5 + map FontoRoute6, TILESET_FONTO, ROUTE, LANDMARK_FONTO_ROUTE_6 + map Fonto, TILESET_FONTO, TOWN, LANDMARK_FONTO + map FontoRouteGate1, TILESET_ROUTE_GATE, GATE, LANDMARK_FONTO_ROUTE_1 + map FontoRouteGate2, TILESET_ROUTE_GATE, GATE, LANDMARK_FONTO_ROUTE_4 + map FontoRouteGate3, TILESET_ROUTE_GATE, GATE, LANDMARK_FONTO_ROUTE_5 + map FontoRocketHouse, TILESET_ROCKET_HOUSE, INDOOR, LANDMARK_FONTO + map FontoMart, TILESET_MART, INDOOR, LANDMARK_FONTO + map FontoHouse, TILESET_HOUSE, INDOOR, LANDMARK_FONTO + map FontoPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_FONTO + map FontoPokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_FONTO + map FontoLab, TILESET_LAB, INDOOR, LANDMARK_FONTO MapGroup_Baadon: - map BaadonRoute1, TILESET_BAADON, ROUTE, LANDMARK_POWER_PLANT_1 - map BaadonRoute2, TILESET_BAADON, ROUTE, LANDMARK_POWER_PLANT_3 - map BaadonRoute3, TILESET_BAADON, ROUTE, LANDMARK_POWER_PLANT_4 - map Baadon, TILESET_BAADON, TOWN, LANDMARK_POWER_PLANT_2 - map BaadonRouteGateWest, TILESET_ROUTE_GATE, GATE, LANDMARK_POWER_PLANT_1 - map BaadonRouteGateNewtype, TILESET_ROUTE_GATE, GATE, LANDMARK_POWER_PLANT_4 - map BaadonMart, TILESET_MART, INDOOR, LANDMARK_POWER_PLANT_2 - map BaadonPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_POWER_PLANT_2 - map BaadonPokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_POWER_PLANT_2 - map BaadonHouse1, TILESET_JAPANESE_HOUSE, INDOOR, LANDMARK_POWER_PLANT_2 - map BaadonWallpaperHouse, TILESET_AQUARIUM, INDOOR, LANDMARK_POWER_PLANT_2 - map BaadonHouse2, TILESET_HOUSE, INDOOR, LANDMARK_POWER_PLANT_2 - map BaadonLeague1F, TILESET_TOWER, INDOOR, LANDMARK_POWER_PLANT_2 - map BaadonLeague2F, TILESET_GYM, INDOOR, LANDMARK_POWER_PLANT_2 + map BaadonRoute1, TILESET_BAADON, ROUTE, LANDMARK_BAADON_ROUTE_1 + map BaadonRoute2, TILESET_BAADON, ROUTE, LANDMARK_BAADON_ROUTE_2 + map BaadonRoute3, TILESET_BAADON, ROUTE, LANDMARK_BAADON_ROUTE_3 + map Baadon, TILESET_BAADON, TOWN, LANDMARK_BAADON + map BaadonRouteGateWest, TILESET_ROUTE_GATE, GATE, LANDMARK_BAADON_ROUTE_1 + map BaadonRouteGateNewtype, TILESET_ROUTE_GATE, GATE, LANDMARK_BAADON_ROUTE_3 + map BaadonMart, TILESET_MART, INDOOR, LANDMARK_BAADON + map BaadonPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_BAADON + map BaadonPokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_BAADON + map BaadonHouse1, TILESET_JAPANESE_HOUSE, INDOOR, LANDMARK_BAADON + map BaadonWallpaperHouse, TILESET_AQUARIUM, INDOOR, LANDMARK_BAADON + map BaadonHouse2, TILESET_HOUSE, INDOOR, LANDMARK_BAADON + map BaadonLeague1F, TILESET_TOWER, INDOOR, LANDMARK_BAADON + map BaadonLeague2F, TILESET_GYM, INDOOR, LANDMARK_BAADON MapGroup_Newtype: - map Route15, TILESET_SILENT_HILL, ROUTE, LANDMARK_RUINS_1 - map NewtypeRoute, TILESET_SILENT_HILL, ROUTE, LANDMARK_MINES_3 - map Route18, TILESET_SILENT_HILL, ROUTE, LANDMARK_MINES_4 - map Newtype, TILESET_SILENT_HILL, TOWN, LANDMARK_RUINS_2 - map Route15Pokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_RUINS_1 - map Route15Pokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_RUINS_1 - map NewtypeRouteGate, TILESET_ROUTE_GATE, GATE, LANDMARK_MINES_4 - map Route18Pokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_MINES_4 - map Route18Pokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_MINES_4 - map NewtypePokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_RUINS_2 - map NewtypePokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_RUINS_2 - map NewtypeLeague1F, TILESET_TOWER, INDOOR, LANDMARK_RUINS_2 - map NewtypeLeague2F, TILESET_GYM, INDOOR, LANDMARK_RUINS_2 - map NewtypeSailorHouse, TILESET_HOUSE, INDOOR, LANDMARK_RUINS_2 - map NewtypeMart, TILESET_MART, INDOOR, LANDMARK_RUINS_2 - map NewtypeDojo, TILESET_JAPANESE_HOUSE, INDOOR, LANDMARK_RUINS_2 - map NewtypeHouse1, TILESET_HOUSE, INDOOR, LANDMARK_RUINS_2 - map NewtypeDiner, TILESET_AQUARIUM, INDOOR, LANDMARK_RUINS_2 - map NewtypeHouse2, TILESET_HOUSE, INDOOR, LANDMARK_RUINS_2 - map NewtypeHouse3, TILESET_HOUSE, INDOOR, LANDMARK_RUINS_2 + map Route15, TILESET_SILENT_HILL, ROUTE, LANDMARK_ROUTE_15 + map NewtypeRoute, TILESET_SILENT_HILL, ROUTE, LANDMARK_NEWTYPE_ROUTE + map Route18, TILESET_SILENT_HILL, ROUTE, LANDMARK_ROUTE_18 + map Newtype, TILESET_SILENT_HILL, TOWN, LANDMARK_NEWTYPE + map Route15Pokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_ROUTE_15 + map Route15Pokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_ROUTE_15 + map NewtypeRouteGate, TILESET_ROUTE_GATE, GATE, LANDMARK_ROUTE_18 + map Route18Pokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_ROUTE_18 + map Route18Pokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_ROUTE_18 + map NewtypePokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_NEWTYPE + map NewtypePokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_NEWTYPE + map NewtypeLeague1F, TILESET_TOWER, INDOOR, LANDMARK_NEWTYPE + map NewtypeLeague2F, TILESET_GYM, INDOOR, LANDMARK_NEWTYPE + map NewtypeSailorHouse, TILESET_HOUSE, INDOOR, LANDMARK_NEWTYPE + map NewtypeMart, TILESET_MART, INDOOR, LANDMARK_NEWTYPE + map NewtypeDojo, TILESET_JAPANESE_HOUSE, INDOOR, LANDMARK_NEWTYPE + map NewtypeHouse1, TILESET_HOUSE, INDOOR, LANDMARK_NEWTYPE + map NewtypeDiner, TILESET_AQUARIUM, INDOOR, LANDMARK_NEWTYPE + map NewtypeHouse2, TILESET_HOUSE, INDOOR, LANDMARK_NEWTYPE + map NewtypeHouse3, TILESET_HOUSE, INDOOR, LANDMARK_NEWTYPE MapGroup_Sugar: - map SugarRoute, TILESET_HAITEKU, ROUTE, LANDMARK_MINES_1 - map Sugar, TILESET_HAITEKU, TOWN, LANDMARK_MINES_2 - map SugarRouteGate, TILESET_ROUTE_GATE, GATE, LANDMARK_MINES_1 - map SugarHouse, TILESET_GYM, INDOOR, LANDMARK_MINES_2 - map SugarHouse2, TILESET_JAPANESE_HOUSE, INDOOR, LANDMARK_MINES_2 - map SugarMart, TILESET_MART, INDOOR, LANDMARK_MINES_2 - map SugarPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_MINES_2 - map SugarPokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_MINES_2 + map SugarRoute, TILESET_HAITEKU, ROUTE, LANDMARK_SUGAR_ROUTE + map Sugar, TILESET_HAITEKU, TOWN, LANDMARK_SUGAR + map SugarRouteGate, TILESET_ROUTE_GATE, GATE, LANDMARK_SUGAR_ROUTE + map SugarHouse, TILESET_GYM, INDOOR, LANDMARK_SUGAR + map SugarHouse2, TILESET_JAPANESE_HOUSE, INDOOR, LANDMARK_SUGAR + map SugarMart, TILESET_MART, INDOOR, LANDMARK_SUGAR + map SugarPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_SUGAR + map SugarPokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_SUGAR MapGroup_Bull: - map BullForestRoute1, TILESET_BULL_FOREST, ROUTE, LANDMARK_MINES_5 - map BullForestRoute2, TILESET_BULL_FOREST, ROUTE, LANDMARK_HIGH_TECH - map BullForestRoute3, TILESET_BULL_FOREST, ROUTE, LANDMARK_OLD - map BullForest, TILESET_BULL_FOREST, TOWN, LANDMARK_WEST - map BullForestRoute1House, TILESET_HOUSE, INDOOR, LANDMARK_MINES_5 - map BullForestRouteGateStand, TILESET_ROUTE_GATE, GATE, LANDMARK_HIGH_TECH - map BullMart, TILESET_MART, INDOOR, LANDMARK_WEST - map BullHouse1, TILESET_JAPANESE_HOUSE, INDOOR, LANDMARK_WEST - map BullHouse2, TILESET_HOUSE, INDOOR, LANDMARK_WEST - map BullHouse3, TILESET_HOUSE, INDOOR, LANDMARK_WEST - map BullPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_WEST - map BullPokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_WEST - map BullLeague1F, TILESET_TOWER, INDOOR, LANDMARK_WEST - map BullLeague2F, TILESET_GYM, INDOOR, LANDMARK_WEST - map BullHouse4, TILESET_HOUSE, INDOOR, LANDMARK_WEST + map BullForestRoute1, TILESET_BULL_FOREST, ROUTE, LANDMARK_BULL_FOREST_ROUTE_1 + map BullForestRoute2, TILESET_BULL_FOREST, ROUTE, LANDMARK_BULL_FOREST_ROUTE_2 + map BullForestRoute3, TILESET_BULL_FOREST, ROUTE, LANDMARK_BULL_FOREST_ROUTE_3 + map BullForest, TILESET_BULL_FOREST, TOWN, LANDMARK_BULL_FOREST + map BullForestRoute1House, TILESET_HOUSE, INDOOR, LANDMARK_BULL_FOREST_ROUTE_1 + map BullForestRouteGateStand, TILESET_ROUTE_GATE, GATE, LANDMARK_BULL_FOREST_ROUTE_2 + map BullMart, TILESET_MART, INDOOR, LANDMARK_BULL_FOREST + map BullHouse1, TILESET_JAPANESE_HOUSE, INDOOR, LANDMARK_BULL_FOREST + map BullHouse2, TILESET_HOUSE, INDOOR, LANDMARK_BULL_FOREST + map BullHouse3, TILESET_HOUSE, INDOOR, LANDMARK_BULL_FOREST + map BullPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_BULL_FOREST + map BullPokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_BULL_FOREST + map BullLeague1F, TILESET_TOWER, INDOOR, LANDMARK_BULL_FOREST + map BullLeague2F, TILESET_GYM, INDOOR, LANDMARK_BULL_FOREST + map BullHouse4, TILESET_HOUSE, INDOOR, LANDMARK_BULL_FOREST MapGroup_Stand: - map StandRoute, TILESET_SILENT_HILL, ROUTE, LANDMARK_BIRDON - map Stand, TILESET_SILENT_HILL, TOWN, LANDMARK_FOUNT - map StandRouteGateKanto, TILESET_ROUTE_GATE, GATE, LANDMARK_BIRDON - map StandLab, TILESET_POKECENTER, INDOOR, LANDMARK_FOUNT - map StandPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_FOUNT - map StandPokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_FOUNT - map StandOffice, TILESET_RADIO_TOWER, INDOOR, LANDMARK_FOUNT - map StandMart, TILESET_MART, INDOOR, LANDMARK_FOUNT - map StandHouse, TILESET_HOUSE, INDOOR, LANDMARK_FOUNT - map StandRocketHouse1F, TILESET_ROCKET_HOUSE, INDOOR, LANDMARK_FOUNT - map StandRocketHouse2F, TILESET_ROCKET_HOUSE, INDOOR, LANDMARK_FOUNT - map StandLeague1F, TILESET_TOWER, INDOOR, LANDMARK_FOUNT - map StandLeague2F, TILESET_GYM, INDOOR, LANDMARK_FOUNT + map StandRoute, TILESET_SILENT_HILL, ROUTE, LANDMARK_STAND_ROUTE + map Stand, TILESET_SILENT_HILL, TOWN, LANDMARK_STAND + map StandRouteGateKanto, TILESET_ROUTE_GATE, GATE, LANDMARK_STAND_ROUTE + map StandLab, TILESET_POKECENTER, INDOOR, LANDMARK_STAND + map StandPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_STAND + map StandPokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_STAND + map StandOffice, TILESET_RADIO_TOWER, INDOOR, LANDMARK_STAND + map StandMart, TILESET_MART, INDOOR, LANDMARK_STAND + map StandHouse, TILESET_HOUSE, INDOOR, LANDMARK_STAND + map StandRocketHouse1F, TILESET_ROCKET_HOUSE, INDOOR, LANDMARK_STAND + map StandRocketHouse2F, TILESET_ROCKET_HOUSE, INDOOR, LANDMARK_STAND + map StandLeague1F, TILESET_TOWER, INDOOR, LANDMARK_STAND + map StandLeague2F, TILESET_GYM, INDOOR, LANDMARK_STAND MapGroup_Kanto: - map KantoEastRoute, TILESET_KANTO, ROUTE, LANDMARK_NEW_TYPE - map Kanto, TILESET_KANTO, TOWN, LANDMARK_SUGAR - map KantoCeruleanHouse, TILESET_ROUTE_GATE, GATE, LANDMARK_SUGAR - map KantoPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_SUGAR - map KantoPokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_SUGAR - map KantoLeague1F, TILESET_TOWER, INDOOR, LANDMARK_SUGAR - map KantoLeague2F, TILESET_GYM, INDOOR, LANDMARK_SUGAR - map KantoLavenderHouse, TILESET_HOUSE, INDOOR, LANDMARK_SUGAR - map KantoCeladonMart1F, TILESET_BIG_MART, INDOOR, LANDMARK_SUGAR - map KantoCeladonMart2F, TILESET_BIG_MART, INDOOR, LANDMARK_SUGAR - map KantoCeladonMart3F, TILESET_BIG_MART, INDOOR, LANDMARK_SUGAR - map KantoCeladonMart4F, TILESET_BIG_MART, INDOOR, LANDMARK_SUGAR - map KantoCeladonMart5F, TILESET_BIG_MART, INDOOR, LANDMARK_SUGAR - map KantoCeladonElevator, TILESET_BIG_MART, INDOOR, LANDMARK_SUGAR - map KantoMart, TILESET_MART, INDOOR, LANDMARK_SUGAR - map KantoGamefreakHQ1, TILESET_LAB, INDOOR, LANDMARK_SUGAR - map KantoGamefreakHQ2, TILESET_LAB, INDOOR, LANDMARK_SUGAR - map KantoGamefreakHQ3, TILESET_LAB, INDOOR, LANDMARK_SUGAR - map KantoGamefreakHQ4, TILESET_MART, INDOOR, LANDMARK_SUGAR - map KantoGamefreakHQ5, TILESET_LAB, INDOOR, LANDMARK_SUGAR - map KantoSilphCo, TILESET_ROCKET_HOUSE, INDOOR, LANDMARK_SUGAR - map KantoViridianHouse, TILESET_HOUSE, INDOOR, LANDMARK_SUGAR - map KantoGameCorner, TILESET_AQUARIUM, INDOOR, LANDMARK_SUGAR - map KantoUnusedArea, TILESET_ROUTE_GATE, INDOOR, LANDMARK_SUGAR - map KantoGameCornerPrizes, TILESET_AQUARIUM, INDOOR, LANDMARK_SUGAR - map KantoDiner, TILESET_AQUARIUM, INDOOR, LANDMARK_SUGAR - map KantoSchool, TILESET_TOWER, INDOOR, LANDMARK_SUGAR - map KantoHospital, TILESET_BIG_MART, INDOOR, LANDMARK_SUGAR - map KantoPokecenter21F, TILESET_POKECENTER, INDOOR, LANDMARK_SUGAR - map KantoPokecenter22F, TILESET_POKECENTER, INDOOR, LANDMARK_SUGAR - map KantoRedsHouse, TILESET_HOUSE, INDOOR, LANDMARK_SUGAR - map KantoGreensHouse1F, TILESET_HOUSE, INDOOR, LANDMARK_SUGAR - map KantoGreensHouse2F, TILESET_HOUSE, INDOOR, LANDMARK_SUGAR - map KantoEldersHouse, TILESET_HOUSE, INDOOR, LANDMARK_SUGAR - map KantoOaksLab, TILESET_LAB, INDOOR, LANDMARK_SUGAR - map KantoLeague21F, TILESET_TOWER, INDOOR, LANDMARK_SUGAR - map KantoLeague22F, TILESET_GYM, INDOOR, LANDMARK_SUGAR - map KantoFishingGuru, TILESET_HOUSE, INDOOR, LANDMARK_SUGAR + map KantoEastRoute, TILESET_KANTO, ROUTE, LANDMARK_KANTO_EAST_ROUTE + map Kanto, TILESET_KANTO, TOWN, LANDMARK_KANTO + map KantoCeruleanHouse, TILESET_ROUTE_GATE, GATE, LANDMARK_KANTO + map KantoPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_KANTO + map KantoPokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_KANTO + map KantoLeague1F, TILESET_TOWER, INDOOR, LANDMARK_KANTO + map KantoLeague2F, TILESET_GYM, INDOOR, LANDMARK_KANTO + map KantoLavenderHouse, TILESET_HOUSE, INDOOR, LANDMARK_KANTO + map KantoCeladonMart1F, TILESET_BIG_MART, INDOOR, LANDMARK_KANTO + map KantoCeladonMart2F, TILESET_BIG_MART, INDOOR, LANDMARK_KANTO + map KantoCeladonMart3F, TILESET_BIG_MART, INDOOR, LANDMARK_KANTO + map KantoCeladonMart4F, TILESET_BIG_MART, INDOOR, LANDMARK_KANTO + map KantoCeladonMart5F, TILESET_BIG_MART, INDOOR, LANDMARK_KANTO + map KantoCeladonElevator, TILESET_BIG_MART, INDOOR, LANDMARK_KANTO + map KantoMart, TILESET_MART, INDOOR, LANDMARK_KANTO + map KantoGamefreakHQ1, TILESET_LAB, INDOOR, LANDMARK_KANTO + map KantoGamefreakHQ2, TILESET_LAB, INDOOR, LANDMARK_KANTO + map KantoGamefreakHQ3, TILESET_LAB, INDOOR, LANDMARK_KANTO + map KantoGamefreakHQ4, TILESET_MART, INDOOR, LANDMARK_KANTO + map KantoGamefreakHQ5, TILESET_LAB, INDOOR, LANDMARK_KANTO + map KantoSilphCo, TILESET_ROCKET_HOUSE, INDOOR, LANDMARK_KANTO + map KantoViridianHouse, TILESET_HOUSE, INDOOR, LANDMARK_KANTO + map KantoGameCorner, TILESET_AQUARIUM, INDOOR, LANDMARK_KANTO + map KantoUnusedArea, TILESET_ROUTE_GATE, INDOOR, LANDMARK_KANTO + map KantoGameCornerPrizes, TILESET_AQUARIUM, INDOOR, LANDMARK_KANTO + map KantoDiner, TILESET_AQUARIUM, INDOOR, LANDMARK_KANTO + map KantoSchool, TILESET_TOWER, INDOOR, LANDMARK_KANTO + map KantoHospital, TILESET_BIG_MART, INDOOR, LANDMARK_KANTO + map KantoPokecenter21F, TILESET_POKECENTER, INDOOR, LANDMARK_KANTO + map KantoPokecenter22F, TILESET_POKECENTER, INDOOR, LANDMARK_KANTO + map KantoRedsHouse, TILESET_HOUSE, INDOOR, LANDMARK_KANTO + map KantoGreensHouse1F, TILESET_HOUSE, INDOOR, LANDMARK_KANTO + map KantoGreensHouse2F, TILESET_HOUSE, INDOOR, LANDMARK_KANTO + map KantoEldersHouse, TILESET_HOUSE, INDOOR, LANDMARK_KANTO + map KantoOaksLab, TILESET_LAB, INDOOR, LANDMARK_KANTO + map KantoLeague21F, TILESET_TOWER, INDOOR, LANDMARK_KANTO + map KantoLeague22F, TILESET_GYM, INDOOR, LANDMARK_KANTO + map KantoFishingGuru, TILESET_HOUSE, INDOOR, LANDMARK_KANTO MapGroup_Prince: - map PrinceRoute, TILESET_SILENT_HILL, ROUTE, LANDMARK_KANTO - map Prince, TILESET_SILENT_HILL, TOWN, LANDMARK_KANTO + map PrinceRoute, TILESET_SILENT_HILL, ROUTE, LANDMARK_PRINCE + map Prince, TILESET_SILENT_HILL, TOWN, LANDMARK_PRINCE MapGroup_MtFuji: - map MtFujiRoute, TILESET_SILENT_HILL, ROUTE, LANDMARK_PRINCE - map MtFuji, TILESET_SILENT_HILL, TOWN, LANDMARK_PRINCE + map MtFujiRoute, TILESET_SILENT_HILL, ROUTE, LANDMARK_MT_FUJI + map MtFuji, TILESET_SILENT_HILL, TOWN, LANDMARK_MT_FUJI MapGroup_South: - map South, TILESET_SOUTH, TOWN, LANDMARK_POKEMON_LEAGUE_1 - map SouthHouse1, TILESET_HOUSE, INDOOR, LANDMARK_POKEMON_LEAGUE_1 - map SouthPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_POKEMON_LEAGUE_1 - map SouthPokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_POKEMON_LEAGUE_1 - map SouthMart, TILESET_MART, INDOOR, LANDMARK_POKEMON_LEAGUE_1 - map SouthHouse2, TILESET_HOUSE, INDOOR, LANDMARK_POKEMON_LEAGUE_1 + map South, TILESET_SOUTH, TOWN, LANDMARK_SOUTH + map SouthHouse1, TILESET_HOUSE, INDOOR, LANDMARK_SOUTH + map SouthPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_SOUTH + map SouthPokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_SOUTH + map SouthMart, TILESET_MART, INDOOR, LANDMARK_SOUTH + map SouthHouse2, TILESET_HOUSE, INDOOR, LANDMARK_SOUTH MapGroup_North: - map North, TILESET_BULL_FOREST, TOWN, LANDMARK_SILENT - map NorthHouse1, TILESET_HOUSE, INDOOR, LANDMARK_SILENT - map NorthMart, TILESET_MART, INDOOR, LANDMARK_SILENT - map NorthHouse2, TILESET_HOUSE, INDOOR, LANDMARK_SILENT - map NorthPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_SILENT - map NorthPokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_SILENT + map North, TILESET_BULL_FOREST, TOWN, LANDMARK_NORTH + map NorthHouse1, TILESET_HOUSE, INDOOR, LANDMARK_NORTH + map NorthMart, TILESET_MART, INDOOR, LANDMARK_NORTH + map NorthHouse2, TILESET_HOUSE, INDOOR, LANDMARK_NORTH + map NorthPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_NORTH + map NorthPokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_NORTH MapGroup_Misc: map PowerPlant1, TILESET_POWER_PLANT, INDOOR, LANDMARK_NONE -- cgit v1.2.3 From 67388aeeda060f7d08e7e2b6ca90097b978886f6 Mon Sep 17 00:00:00 2001 From: pfero Date: Sat, 23 Jun 2018 14:25:46 +0200 Subject: Disassemble all map attributes --- constants/map_constants.asm | 520 +++++++++-------- constants/map_data_constants.asm | 20 +- data/maps/attributes.asm | 836 +++++++++++++++++++++++++++ home/map.asm | 8 +- home/tileset.asm | 2 +- shim.sym | 1147 ++++++++++++++++++++++++++++++-------- wram.asm | 5 +- 7 files changed, 2065 insertions(+), 473 deletions(-) create mode 100644 data/maps/attributes.asm diff --git a/constants/map_constants.asm b/constants/map_constants.asm index d5e130e..828b01a 100644 --- a/constants/map_constants.asm +++ b/constants/map_constants.asm @@ -1,231 +1,293 @@ -; Map IDs +newgroup: MACRO +const_value = const_value + 1 + enum_start 1 +ENDM + +map_const: MACRO +;\1: map id +;\2: width: in blocks +;\3: height: in blocks +GROUP_\1 EQU const_value + enum MAP_\1 +\1_WIDTH EQU \2 +\1_HEIGHT EQU \3 +ENDM +; Map IDs const_def - const ROUTE_1_P1 - const ROUTE_1_P2 - const ROUTE_SILENT_EAST - const SILENT_HILL - const ROUTE_1_GATE_1F - const ROUTE_1_GATE_2F - const ROUTE_SILENT_EAST_GATE - const PLAYER_HOUSE_1F - const PLAYER_HOUSE_2F - const SILENT_POKECENTER - const SILENT_HILL_HOUSE - const SILENT_HILL_LAB - const SILENT_HILL_LAB_2 - const UNUSED_13 - const SHIZUKANA_OKA - const ROUTE_2 - const OLD_CITY - const ROUTE_2_GATE_1F - const ROUTE_2_GATE_2F - const ROUTE_2_HOUSE - const OLD_CITY_MUSEUM - const OLD_CITY_GYM - const OLD_CITY_TOWER_1F - const OLD_CITY_TOWER_2F - const OLD_CITY_TOWER_3F - const OLD_CITY_TOWER_4F - const OLD_CITY_TOWER_5F - const OLD_CITY_BILLS_HOUSE - const OLD_CITY_MART - const OLD_CITY_HOUSE - const OLD_CITY_POKECENTER_1F - const OLD_CITY_POKECENTER_2F - const OLD_CITY_POKECENTER_TRADE - const OLD_CITY_POKECENTER_BATTLE - const OLD_CITY_POKECENTER_TIME_MACHINE - const OLD_CITY_KURTS_HOUSE - const OLD_CITY_SCHOOL - const WEST - const WEST_MART_1F - const WEST_MART_2F - const WEST_MART_3F - const WEST_MART_4F - const WEST_MART_5F - const WEST_MART_6F - const WEST_MART_ELEVATOR - const WEST_RADIO_TOWER_1F - const WEST_RADIO_TOWER_2F - const WEST_RADIO_TOWER_3F - const WEST_RADIO_TOWER_4F - const WEST_RADIO_TOWER_5F - const WEST_ROCKET_RAIDED_HOUSE - const WEST_POKECENTER_1F - const WEST_POKECENTER_2F - const WEST_GYM - const WEST_HOUSE_1 - const WEST_HOUSE_2 - const HAITEKU_WEST_ROUTE - const HAITEKU_WEST_ROUTE_OCEAN - const HAITEKU - const HAITEKU_WEST_ROUTE_GATE - const HAITEKU_POKECENTER_1F - const HAITEKU_POKECENTER_2F - const HAITEKU_LEAGUE_1F - const HAITEKU_LEAGUE_2F - const HAITEKU_MART - const HAITEKU_HOUSE_1 - const HAITEKU_HOUSE_2 - const HAITEKU_IMPOSTER_OAK_HOUSE - const HAITEKU_AQUARIUM_1F - const HAITEKU_AQUARIUM_2F - const FONTO_ROUTE_1 - const FONTO_ROUTE_2 - const FONTO_ROUTE_3 - const FONTO_ROUTE_4 - const FONTO_ROUTE_5 - const FONTO_ROUTE_6 - const FONTO - const FONTO_ROUTE_GATE_1 - const FONTO_ROUTE_GATE_2 - const FONTO_ROUTE_GATE_3 - const FONTO_ROCKET_HOUSE - const FONTO_MART - const FONTO_HOUSE - const FONTO_POKECENTER_1F - const FONTO_POKECENTER_2F - const FONTO_LAB - const BAADON_ROUTE_1 - const BAADON_ROUTE_2 - const BAADON_ROUTE_3 - const BAADON - const BAADON_ROUTE_GATE_WEST - const BAADON_ROUTE_GATE_NEWTYPE - const BAADON_MART - const BAADON_POKECENTER_1F - const BAADON_POKECENTER_2F - const BAADON_HOUSE_1 - const BAADON_WALLPAPER_HOUSE - const BAADON_HOUSE_2 - const BAADON_LEAGUE_1F - const BAADON_LEAGUE_2F - const ROUTE_15 - const NEWTYPE_ROUTE - const ROUTE_18 - const NEWTYPE - const ROUTE_15_POKECENTER_1F - const ROUTE_15_POKECENTER_2F - const NEWTYPE_ROUTE_GATE - const ROUTE_18_POKECENTER_1F - const ROUTE_18_POKECENTER_2F - const NEWTYPE_POKECENTER_1F - const NEWTYPE_POKECENTER_2F - const NEWTYPE_LEAGUE_1F - const NEWTYPE_LEAGUE_2F - const NEWTYPE_SAILOR_HOUSE - const NEWTYPE_MART - const NEWTYPE_DOJO - const NEWTYPE_HOUSE_1 - const NEWTYPE_DINER - const NEWTYPE_HOUSE_2 - const NEWTYPE_HOUSE_3 - const SUGAR_ROUTE - const SUGAR - const SUGAR_ROUTE_GATE - const SUGAR_HOUSE - const SUGAR_HOUSE_2 - const SUGAR_MART - const SUGAR_POKECENTER_1F - const SUGAR_POKECENTER_2F - const BULL_FOREST_ROUTE_1 - const BULL_FOREST_ROUTE_2 - const BULL_FOREST_ROUTE_3 - const BULL_FOREST - const BULL_FOREST_ROUTE_1_HOUSE - const BULL_FOREST_ROUTE_GATE_STAND - const BULL_MART - const BULL_HOUSE_1 - const BULL_HOUSE_2 - const BULL_HOUSE_3 - const BULL_POKECENTER_1F - const BULL_POKECENTER_2F - const BULL_LEAGUE_1F - const BULL_LEAGUE_2F - const BULL_HOUSE_4 - const STAND_ROUTE - const STAND - const STAND_ROUTE_GATE_KANTO - const STAND_LAB - const STAND_POKECENTER_1F - const STAND_POKECENTER_2F - const STAND_OFFICE - const STAND_MART - const STAND_HOUSE - const STAND_ROCKET_HOUSE_1F - const STAND_ROCKET_HOUSE_2F - const STAND_LEAGUE_1F - const STAND_LEAGUE_2F - const KANTO_EAST_ROUTE - const KANTO - const KANTO_CERULEAN_HOUSE - const KANTO_POKECENTER_1F - const KANTO_POKECENTER_2F - const KANTO_LEAGUE_1F - const KANTO_LEAGUE_2F - const KANTO_LAVENDER_HOUSE - const KANTO_CELADON_MART_1F - const KANTO_CELADON_MART_2F - const KANTO_CELADON_MART_3F - const KANTO_CELADON_MART_4F - const KANTO_CELADON_MART_5F - const KANTO_CELADON_ELEVATOR - const KANTO_MART - const KANTO_GAMEFREAK_HQ_1 - const KANTO_GAMEFREAK_HQ_2 - const KANTO_GAMEFREAK_HQ_3 - const KANTO_GAMEFREAK_HQ_4 - const KANTO_GAMEFREAK_HQ_5 - const KANTO_SILPH_CO - const KANTO_VIRIDIAN_HOUSE - const KANTO_GAME_CORNER - const KANTO_UNUSED_AREA - const KANTO_GAME_CORNER_PRIZES - const KANTO_DINER - const KANTO_SCHOOL - const KANTO_HOSPITAL - const KANTO_POKECENTER_2_1F - const KANTO_POKECENTER_2_2F - const KANTO_REDS_HOUSE - const KANTO_GREENS_HOUSE_1F - const KANTO_GREENS_HOUSE_2F - const KANTO_ELDERS_HOUSE - const KANTO_OAKS_LAB - const KANTO_LEAGUE_2_1F - const KANTO_LEAGUE_2_2F - const KANTO_FISHING_GURU - const PRINCE_ROUTE - const PRINCE - const MT_FUJI_ROUTE - const MT_FUJI - const SOUTH - const SOUTH_HOUSE_1 - const SOUTH_POKECENTER_1F - const SOUTH_POKECENTER_2F - const SOUTH_MART - const SOUTH_HOUSE_2 - const NORTH - const NORTH_HOUSE_1 - const NORTH_MART - const NORTH_HOUSE_2 - const NORTH_POKECENTER_1F - const NORTH_POKECENTER_2F - const POWER_PLANT_1 - const POWER_PLANT_2 - const POWER_PLANT_3 - const POWER_PLANT_4 - const RUINS_OF_ALPH_ENTRANCE - const RUINS_OF_ALPH_MAIN - const CAVE_MINECARTS_1 - const CAVE_MINECARTS_2 - const CAVE_MINECARTS_3 - const CAVE_MINECARTS_4 - const CAVE_MINECARTS_5 - const CAVE_MINECARTS_6 - const CAVE_MINECARTS_7 - const OFFICE_1 - const OFFICE_2 - const OFFICE_3 - const SLOWPOKE_WELL_ENTRANCE - const SLOWPOKE_WELL_MAIN + + newgroup ; 1 + + map_const ROUTE_1_P1, 15, 9 ; 1 + map_const ROUTE_1_P2, 10, 18 ; 2 + map_const ROUTE_SILENT_EAST, 30, 9 ; 3 + map_const SILENT_HILL, 10, 9 ; 4 + map_const ROUTE_1_GATE_1F, 5, 4 ; 5 + map_const ROUTE_1_GATE_2F, 4, 3 ; 6 + map_const ROUTE_SILENT_EAST_GATE, 5, 4 ; 7 + map_const PLAYER_HOUSE_1F, 5, 4 ; 8 + map_const PLAYER_HOUSE_2F, 5, 4 ; 9 + map_const SILENT_POKECENTER, 8, 4 ; 10 + map_const SILENT_HILL_HOUSE, 5, 4 ; 11 + map_const SILENT_HILL_LAB, 4, 8 ; 12 + map_const SILENT_HILL_LAB_2, 4, 4 ; 13 + map_const UNUSED_13, 4, 4 ; 14 + map_const SHIZUKANA_OKA, 25, 18 ; 15 + + newgroup ; 2 + + map_const ROUTE_2, 15, 9 ; 1 + map_const OLD_CITY, 20, 18 ; 2 + map_const ROUTE_2_GATE_1F, 5, 4 ; 3 + map_const ROUTE_2_GATE_2F, 4, 3 ; 4 + map_const ROUTE_2_HOUSE, 4, 4 ; 5 + map_const OLD_CITY_MUSEUM, 8, 4 ; 6 + map_const OLD_CITY_GYM, 5, 9 ; 7 + map_const OLD_CITY_TOWER_1F, 4, 4 ; 8 + map_const OLD_CITY_TOWER_2F, 4, 4 ; 9 + map_const OLD_CITY_TOWER_3F, 4, 4 ; 10 + map_const OLD_CITY_TOWER_4F, 4, 4 ; 11 + map_const OLD_CITY_TOWER_5F, 3, 3 ; 12 + map_const OLD_CITY_BILLS_HOUSE, 4, 4 ; 13 + map_const OLD_CITY_MART, 6, 4 ; 14 + map_const OLD_CITY_HOUSE, 4, 4 ; 15 + map_const OLD_CITY_POKECENTER_1F, 8, 4 ; 16 + map_const OLD_CITY_POKECENTER_2F, 8, 4 ; 17 + map_const OLD_CITY_POKECENTER_TRADE, 5, 4 ; 18 + map_const OLD_CITY_POKECENTER_BATTLE, 5, 4 ; 19 + map_const OLD_CITY_POKECENTER_TIME_MACHINE, 8, 4 ; 20 + map_const OLD_CITY_KURTS_HOUSE, 8, 4 ; 21 + map_const OLD_CITY_SCHOOL, 4, 8 ; 22 + + newgroup ; 3 + + map_const WEST, 20, 18 ; 1 + map_const WEST_MART_1F, 8, 4 ; 2 + map_const WEST_MART_2F, 8, 4 ; 3 + map_const WEST_MART_3F, 8, 4 ; 4 + map_const WEST_MART_4F, 8, 4 ; 5 + map_const WEST_MART_5F, 8, 4 ; 6 + map_const WEST_MART_6F, 8, 4 ; 7 + map_const WEST_MART_ELEVATOR, 2, 2 ; 8 + map_const WEST_RADIO_TOWER_1F, 4, 4 ; 9 + map_const WEST_RADIO_TOWER_2F, 4, 4 ; 10 + map_const WEST_RADIO_TOWER_3F, 4, 4 ; 11 + map_const WEST_RADIO_TOWER_4F, 4, 4 ; 12 + map_const WEST_RADIO_TOWER_5F, 4, 4 ; 13 + map_const WEST_ROCKET_RAIDED_HOUSE, 5, 4 ; 14 + map_const WEST_POKECENTER_1F, 8, 4 ; 15 + map_const WEST_POKECENTER_2F, 8, 4 ; 16 + map_const WEST_GYM, 5, 9 ; 17 + map_const WEST_HOUSE_1, 5, 4 ; 18 + map_const WEST_HOUSE_2, 5, 4 ; 19 + + newgroup ; 4 + + map_const HAITEKU_WEST_ROUTE, 25, 9 ; 1 + map_const HAITEKU_WEST_ROUTE_OCEAN, 10, 27 ; 2 + map_const HAITEKU, 20, 18 ; 3 + map_const HAITEKU_WEST_ROUTE_GATE, 5, 4 ; 4 + map_const HAITEKU_POKECENTER_1F, 8, 4 ; 5 + map_const HAITEKU_POKECENTER_2F, 8, 4 ; 6 + map_const HAITEKU_LEAGUE_1F, 4, 8 ; 7 + map_const HAITEKU_LEAGUE_2F, 5, 9 ; 8 + map_const HAITEKU_MART, 6, 4 ; 9 + map_const HAITEKU_HOUSE_1, 5, 4 ; 10 + map_const HAITEKU_HOUSE_2, 5, 4 ; 11 + map_const HAITEKU_IMPOSTER_OAK_HOUSE, 5, 4 ; 12 + map_const HAITEKU_AQUARIUM_1F, 8, 4 ; 13 + map_const HAITEKU_AQUARIUM_2F, 8, 4 ; 14 + + newgroup + + map_const FONTO_ROUTE_1, 35, 9 + map_const FONTO_ROUTE_2, 10, 18 + map_const FONTO_ROUTE_3, 25, 9 + map_const FONTO_ROUTE_4, 10, 18 + map_const FONTO_ROUTE_5, 10, 18 + map_const FONTO_ROUTE_6, 35, 9 + map_const FONTO, 10, 9 + map_const FONTO_ROUTE_GATE_1, 5, 4 + map_const FONTO_ROUTE_GATE_2, 5, 4 + map_const FONTO_ROUTE_GATE_3, 5, 4 + map_const FONTO_ROCKET_HOUSE, 8, 4 + map_const FONTO_MART, 8, 4 + map_const FONTO_HOUSE, 5, 4 + map_const FONTO_POKECENTER_1F, 8, 4 + map_const FONTO_POKECENTER_2F, 8, 4 + map_const FONTO_LAB, 5, 4 + + newgroup + + map_const BAADON_ROUTE_1, 10, 27 + map_const BAADON_ROUTE_2, 50, 9 + map_const BAADON_ROUTE_3, 10, 18 + map_const BAADON, 10, 9 + map_const BAADON_ROUTE_GATE_WEST, 5, 4 + map_const BAADON_ROUTE_GATE_NEWTYPE, 5, 4 + map_const BAADON_MART, 8, 4 + map_const BAADON_POKECENTER_1F, 8, 4 + map_const BAADON_POKECENTER_2F, 8, 4 + map_const BAADON_HOUSE_1, 4, 4 + map_const BAADON_WALLPAPER_HOUSE, 4, 4 + map_const BAADON_HOUSE_2, 5, 4 + map_const BAADON_LEAGUE_1F, 4, 8 + map_const BAADON_LEAGUE_2F, 5, 9 + + newgroup + + map_const ROUTE_15, 15, 9 + map_const NEWTYPE_ROUTE, 15, 9 + map_const ROUTE_18, 10, 45 + map_const NEWTYPE, 20, 18 + map_const ROUTE_15_POKECENTER_1F, 8, 4 + map_const ROUTE_15_POKECENTER_2F, 8, 4 + map_const NEWTYPE_ROUTE_GATE, 5, 4 + map_const ROUTE_18_POKECENTER_1F, 8, 4 + map_const ROUTE_18_POKECENTER_2F, 8, 4 + map_const NEWTYPE_POKECENTER_1F, 8, 4 + map_const NEWTYPE_POKECENTER_2F, 8, 4 + map_const NEWTYPE_LEAGUE_1F, 4, 8 + map_const NEWTYPE_LEAGUE_2F, 5, 9 + map_const NEWTYPE_SAILOR_HOUSE, 5, 4 + map_const NEWTYPE_MART, 8, 4 + map_const NEWTYPE_DOJO, 4, 8 + map_const NEWTYPE_HOUSE_1, 5, 4 + map_const NEWTYPE_DINER, 4, 4 + map_const NEWTYPE_HOUSE_2, 5, 4 + map_const NEWTYPE_HOUSE_3, 5, 4 + + newgroup + + map_const SUGAR_ROUTE, 10, 27 + map_const SUGAR, 10, 9 + map_const SUGAR_ROUTE_GATE, 5, 4 + map_const SUGAR_HOUSE, 4, 8 + map_const SUGAR_HOUSE_2, 4, 4 + map_const SUGAR_MART, 8, 4 + map_const SUGAR_POKECENTER_1F, 8, 4 + map_const SUGAR_POKECENTER_2F, 8, 4 + + newgroup + + map_const BULL_FOREST_ROUTE_1, 25, 9 + map_const BULL_FOREST_ROUTE_2, 10, 27 + map_const BULL_FOREST_ROUTE_3, 10, 27 + map_const BULL_FOREST, 20, 18 + map_const BULL_FOREST_ROUTE_1_HOUSE, 5, 4 + map_const BULL_FOREST_ROUTE_GATE_STAND, 5, 4 + map_const BULL_MART, 8, 4 + map_const BULL_HOUSE_1, 4, 4 + map_const BULL_HOUSE_2, 5, 4 + map_const BULL_HOUSE_3, 5, 4 + map_const BULL_POKECENTER_1F, 8, 4 + map_const BULL_POKECENTER_2F, 8, 4 + map_const BULL_LEAGUE_1F, 4, 8 + map_const BULL_LEAGUE_2F, 5, 9 + map_const BULL_HOUSE_4, 5, 4 + + newgroup + + map_const STAND_ROUTE, 10, 27 + map_const STAND, 20, 18 + map_const STAND_ROUTE_GATE_KANTO, 5, 4 + map_const STAND_LAB, 4, 4 + map_const STAND_POKECENTER_1F, 8, 4 + map_const STAND_POKECENTER_2F, 8, 4 + map_const STAND_OFFICE, 8, 4 + map_const STAND_MART, 8, 4 + map_const STAND_HOUSE, 5, 4 + map_const STAND_ROCKET_HOUSE_1F, 8, 4 + map_const STAND_ROCKET_HOUSE_2F, 8, 4 + map_const STAND_LEAGUE_1F, 4, 8 + map_const STAND_LEAGUE_2F, 5, 9 + + newgroup + + map_const KANTO_EAST_ROUTE, 20, 9 + map_const KANTO, 30, 27 + map_const KANTO_CERULEAN_HOUSE, 5, 4 + map_const KANTO_POKECENTER_1F, 8, 4 + map_const KANTO_POKECENTER_2F, 8, 4 + map_const KANTO_LEAGUE_1F, 4, 8 + map_const KANTO_LEAGUE_2F, 5, 9 + map_const KANTO_LAVENDER_HOUSE, 5, 4 + map_const KANTO_CELADON_MART_1F, 8, 4 + map_const KANTO_CELADON_MART_2F, 8, 4 + map_const KANTO_CELADON_MART_3F, 8, 4 + map_const KANTO_CELADON_MART_4F, 8, 4 + map_const KANTO_CELADON_MART_5F, 8, 4 + map_const KANTO_CELADON_ELEVATOR, 2, 2 + map_const KANTO_MART, 8, 4 + map_const KANTO_GAMEFREAK_HQ_1, 4, 6 + map_const KANTO_GAMEFREAK_HQ_2, 4, 6 + map_const KANTO_GAMEFREAK_HQ_3, 4, 6 + map_const KANTO_GAMEFREAK_HQ_4, 4, 6 + map_const KANTO_GAMEFREAK_HQ_5, 4, 4 + map_const KANTO_SILPH_CO, 12, 8 + map_const KANTO_VIRIDIAN_HOUSE, 5, 4 + map_const KANTO_GAME_CORNER, 10, 7 + map_const KANTO_UNUSED_AREA, 4, 4 + map_const KANTO_GAME_CORNER_PRIZES, 5, 4 + map_const KANTO_DINER, 5, 4 + map_const KANTO_SCHOOL, 4, 8 + map_const KANTO_HOSPITAL, 8, 4 + map_const KANTO_POKECENTER_2_1F, 8, 4 + map_const KANTO_POKECENTER_2_2F, 8, 4 + map_const KANTO_REDS_HOUSE, 5, 4 + map_const KANTO_GREENS_HOUSE_1F, 4, 4 + map_const KANTO_GREENS_HOUSE_2F, 4, 4 + map_const KANTO_ELDERS_HOUSE, 5, 4 + map_const KANTO_OAKS_LAB, 4, 4 + map_const KANTO_LEAGUE_2_1F, 4, 8 + map_const KANTO_LEAGUE_2_2F, 5, 9 + map_const KANTO_FISHING_GURU, 5, 4 + + newgroup + + map_const PRINCE_ROUTE, 10, 5 + map_const PRINCE, 10, 9 + + newgroup + + map_const MT_FUJI_ROUTE, 10, 5 + map_const MT_FUJI, 10, 9 + + newgroup + + map_const SOUTH, 20, 18 + map_const SOUTH_HOUSE_1, 5, 4 + map_const SOUTH_POKECENTER_1F, 8, 4 + map_const SOUTH_POKECENTER_2F, 8, 4 + map_const SOUTH_MART, 8, 4 + map_const SOUTH_HOUSE_2, 5, 4 + + newgroup + + map_const NORTH, 10, 9 + map_const NORTH_HOUSE_1, 5, 4 + map_const NORTH_MART, 6, 4 + map_const NORTH_HOUSE_2, 5, 4 + map_const NORTH_POKECENTER_1F, 8, 4 + map_const NORTH_POKECENTER_2F, 8, 4 + + newgroup + + map_const POWER_PLANT_1, 10, 9 + map_const POWER_PLANT_2, 10, 9 + map_const POWER_PLANT_3, 15, 18 + map_const POWER_PLANT_4, 15, 18 + map_const RUINS_OF_ALPH_ENTRANCE, 10, 9 + map_const RUINS_OF_ALPH_MAIN, 25, 27 + map_const CAVE_MINECARTS_1, 20, 18 + map_const CAVE_MINECARTS_2, 20, 18 + map_const CAVE_MINECARTS_3, 20, 18 + map_const CAVE_MINECARTS_4, 20, 18 + map_const CAVE_MINECARTS_5, 20, 18 + map_const CAVE_MINECARTS_6, 10, 18 + map_const CAVE_MINECARTS_7, 10, 18 + map_const OFFICE_1, 10, 9 + map_const OFFICE_2, 15, 18 + map_const OFFICE_3, 10, 18 + map_const SLOWPOKE_WELL_ENTRANCE, 10, 9 + map_const SLOWPOKE_WELL_MAIN, 10, 18 diff --git a/constants/map_data_constants.asm b/constants/map_data_constants.asm index e711e1d..8a60442 100644 --- a/constants/map_data_constants.asm +++ b/constants/map_data_constants.asm @@ -8,11 +8,25 @@ const GATE const DUNGEON +; connection directions (see data/maps/data.asm) + const_def + const EAST_F + const WEST_F + const SOUTH_F + const NORTH_F + +; wMapConnections + const_def + shift_const EAST + shift_const WEST + shift_const SOUTH + shift_const NORTH + ; SpawnPoints indexes (see data/maps/spawn_points.asm) const_value = -1 const SPAWN_N_A - + NUM_SPAWNS EQU 18 - + ; size of each spawn point data -SPAWN_POINT_SIZE EQU 4 \ No newline at end of file +SPAWN_POINT_SIZE EQU 4 diff --git a/data/maps/attributes.asm b/data/maps/attributes.asm new file mode 100644 index 0000000..4ff1d0e --- /dev/null +++ b/data/maps/attributes.asm @@ -0,0 +1,836 @@ +INCLUDE "constants.asm" + +map_id: MACRO +;\1: map id + db GROUP_\1, MAP_\1 +ENDM + +map_attributes: MACRO +;\1: map name +;\2: map id +;\3: connections: combo of NORTH, SOUTH, WEST, and/or EAST, or 0 for none +CURRENT_MAP_WIDTH = \2_WIDTH +CURRENT_MAP_HEIGHT = \2_HEIGHT +\1_MapAttributes:: + db CURRENT_MAP_HEIGHT, CURRENT_MAP_WIDTH + dw \1_Blocks + dw \1_Unk + dw \1_MapScripts + dw \1_MapEvents + db \3 +ENDM + +; Connections go in order: north, south, west, east +connection: MACRO +;\1: direction +;\2: map name +;\3: map id +;\4: final y offset for east/west, x offset for north/south +;\5: map data y offset for east/west, x offset for north/south +;\6: strip length +if "\1" == "north" + map_id \3 + dw \2_Blocks + \3_WIDTH * (\3_HEIGHT - 3) + \5 + dw wOverworldMapBlocks + \4 + 3 + db \6 + db \3_WIDTH + db \3_HEIGHT * 2 - 1 + db (\4 - \5) * -2 + dw wOverworldMapBlocks + \3_HEIGHT * (\3_WIDTH + 6) + 1 +elif "\1" == "south" + map_id \3 + dw \2_Blocks + \5 + dw wOverworldMapBlocks + (CURRENT_MAP_HEIGHT + 3) * (CURRENT_MAP_WIDTH + 6) + \4 + 3 + db \6 + db \3_WIDTH + db 0 + db (\4 - \5) * -2 + dw wOverworldMapBlocks + \3_WIDTH + 7 +elif "\1" == "west" + map_id \3 + dw \2_Blocks + (\3_WIDTH * \5) + \3_WIDTH - 3 + dw wOverworldMapBlocks + (CURRENT_MAP_WIDTH + 6) * (\4 + 3) + db \6 + db \3_WIDTH + db (\4 - \5) * -2 + db \3_WIDTH * 2 - 1 + dw wOverworldMapBlocks + \3_WIDTH * 2 + 6 +elif "\1" == "east" + map_id \3 + dw \2_Blocks + (\3_WIDTH * \5) + dw wOverworldMapBlocks + (CURRENT_MAP_WIDTH + 6) * (\4 + 3 + 1) - 3 + db \6 + db \3_WIDTH + db (\4 - \5) * -2 + db 0 + dw wOverworldMapBlocks + \3_WIDTH + 7 +endc +ENDM + +SECTION "Route2Gate1F", ROMX[$4000], BANK[$25] + map_attributes Route2Gate1F, ROUTE_2_GATE_1F, 0 + +SECTION "Route2Gate2F", ROMX[$407C], BANK[$25] + map_attributes Route2Gate2F, ROUTE_2_GATE_2F, 0 + +SECTION "Route2House", ROMX[$40DC], BANK[$25] + map_attributes Route2House, ROUTE_2_HOUSE, 0 + +SECTION "OldCityMuseum", ROMX[$414A], BANK[$25] + map_attributes OldCityMuseum, OLD_CITY_MUSEUM, 0 + +SECTION "OldCityGym", ROMX[$41CD], BANK[$25] + map_attributes OldCityGym, OLD_CITY_GYM, 0 + +SECTION "OldCityTower1F", ROMX[$4289], BANK[$25] + map_attributes OldCityTower1F, OLD_CITY_TOWER_1F, 0 + +SECTION "OldCityTower2F", ROMX[$4319], BANK[$25] + map_attributes OldCityTower2F, OLD_CITY_TOWER_2F, 0 + +SECTION "OldCityTower3F", ROMX[$439E], BANK[$25] + map_attributes OldCityTower3F, OLD_CITY_TOWER_3F, 0 + +SECTION "OldCityTower4F", ROMX[$4423], BANK[$25] + map_attributes OldCityTower4F, OLD_CITY_TOWER_4F, 0 + +SECTION "OldCityTower5F", ROMX[$44A8], BANK[$25] + map_attributes OldCityTower5F, OLD_CITY_TOWER_5F, 0 + +SECTION "OldCityBillsHouse", ROMX[$44FC], BANK[$25] + map_attributes OldCityBillsHouse, OLD_CITY_BILLS_HOUSE, 0 + +SECTION "OldCityMart", ROMX[$456A], BANK[$25] + map_attributes OldCityMart, OLD_CITY_MART, 0 + +SECTION "OldCityHouse", ROMX[$45EE], BANK[$25] + map_attributes OldCityHouse, OLD_CITY_HOUSE, 0 + +SECTION "OldCityPokecenter1F", ROMX[$466E], BANK[$25] + map_attributes OldCityPokecenter1F, OLD_CITY_POKECENTER_1F, 0 + +SECTION "OldCityPokecenter2F", ROMX[$46FE], BANK[$25] + map_attributes OldCityPokecenter2F, OLD_CITY_POKECENTER_2F, 0 + +SECTION "OldCityPokecenterTrade", ROMX[$4826], BANK[$25] + map_attributes OldCityPokecenterTrade, OLD_CITY_POKECENTER_TRADE, 0 + +SECTION "OldCityPokecenterBattle", ROMX[$48AC], BANK[$25] + map_attributes OldCityPokecenterBattle, OLD_CITY_POKECENTER_BATTLE, 0 + +SECTION "OldCityPokecenterTimeMachine", ROMX[$492F], BANK[$25] + map_attributes OldCityPokecenterTimeMachine, OLD_CITY_POKECENTER_TIME_MACHINE, 0 + +SECTION "OldCityKurtsHouse", ROMX[$49AC], BANK[$25] + map_attributes OldCityKurtsHouse, OLD_CITY_KURTS_HOUSE, 0 + +SECTION "OldCitySchool", ROMX[$4A26], BANK[$25] + map_attributes OldCitySchool, OLD_CITY_SCHOOL, 0 + +SECTION "Route1Gate1F", ROMX[$4000], BANK[$26] + map_attributes Route1Gate1F, ROUTE_1_GATE_1F, 0 + +SECTION "Route1Gate2F", ROMX[$40DA], BANK[$26] + map_attributes Route1Gate2F, ROUTE_1_GATE_2F, 0 + +SECTION "WestMart1F", ROMX[$4224], BANK[$26] + map_attributes WestMart1F, WEST_MART_1F, 0 + +SECTION "WestMart2F", ROMX[$42A0], BANK[$26] + map_attributes WestMart2F, WEST_MART_2F, 0 + +SECTION "WestMart3F", ROMX[$4374], BANK[$26] + map_attributes WestMart3F, WEST_MART_3F, 0 + +SECTION "WestMart4F", ROMX[$4433], BANK[$26] + map_attributes WestMart4F, WEST_MART_4F, 0 + +SECTION "WestMart5F", ROMX[$44F2], BANK[$26] + map_attributes WestMart5F, WEST_MART_5F, 0 + +SECTION "WestMart6F", ROMX[$4581], BANK[$26] + map_attributes WestMart6F, WEST_MART_6F, 0 + +SECTION "WestMartElevator", ROMX[$460E], BANK[$26] + map_attributes WestMartElevator, WEST_MART_ELEVATOR, 0 + +SECTION "WestRadioTower1F", ROMX[$464B], BANK[$26] + map_attributes WestRadioTower1F, WEST_RADIO_TOWER_1F, 0 + +SECTION "WestRadioTower2F", ROMX[$46CA], BANK[$26] + map_attributes WestRadioTower2F, WEST_RADIO_TOWER_2F, 0 + +SECTION "WestRadioTower3F", ROMX[$4772], BANK[$26] + map_attributes WestRadioTower3F, WEST_RADIO_TOWER_3F, 0 + +SECTION "WestRadioTower4F", ROMX[$4827], BANK[$26] + map_attributes WestRadioTower4F, WEST_RADIO_TOWER_4F, 0 + +SECTION "WestRadioTower5F", ROMX[$48E9], BANK[$26] + map_attributes WestRadioTower5F, WEST_RADIO_TOWER_5F, 0 + +SECTION "WestRocketRaidedHouse", ROMX[$499F], BANK[$26] + map_attributes WestRocketRaidedHouse, WEST_ROCKET_RAIDED_HOUSE, 0 + +SECTION "WestPokecenter1F", ROMX[$4A49], BANK[$26] + map_attributes WestPokecenter1F, WEST_POKECENTER_1F, 0 + +SECTION "WestPokecenter2F", ROMX[$4AE1], BANK[$26] + map_attributes WestPokecenter2F, WEST_POKECENTER_2F, 0 + +SECTION "WestGym", ROMX[$4B5E], BANK[$26] + map_attributes WestGym, WEST_GYM, 0 + +SECTION "WestHouse1", ROMX[$4C1A], BANK[$26] + map_attributes WestHouse1, WEST_HOUSE_1, 0 + +SECTION "WestHouse2", ROMX[$4C9E], BANK[$26] + map_attributes WestHouse2, WEST_HOUSE_2, 0 + +SECTION "HaitekuWestRouteGate", ROMX[$4000], BANK[$27] + map_attributes HaitekuWestRouteGate, HAITEKU_WEST_ROUTE_GATE, 0 + +SECTION "HaitekuPokecenter1F", ROMX[$405B], BANK[$27] + map_attributes HaitekuPokecenter1F, HAITEKU_POKECENTER_1F, 0 + +SECTION "HaitekuPokecenter2F", ROMX[$40EF], BANK[$27] + map_attributes HaitekuPokecenter2F, HAITEKU_POKECENTER_2F, 0 + +SECTION "HaitekuLeague1F", ROMX[$4168], BANK[$27] + map_attributes HaitekuLeague1F, HAITEKU_LEAGUE_1F, 0 + +SECTION "HaitekuLeague2F", ROMX[$4209], BANK[$27] + map_attributes HaitekuLeague2F, HAITEKU_LEAGUE_2F, 0 + +SECTION "HaitekuMart", ROMX[$42A9], BANK[$27] + map_attributes HaitekuMart, HAITEKU_MART, 0 + +SECTION "HaitekuHouse1", ROMX[$4329], BANK[$27] + map_attributes HaitekuHouse1, HAITEKU_HOUSE_1, 0 + +SECTION "HaitekuHouse2", ROMX[$4383], BANK[$27] + map_attributes HaitekuHouse2, HAITEKU_HOUSE_2, 0 + +SECTION "HaitekuImposterOakHouse", ROMX[$43DD], BANK[$27] + map_attributes HaitekuImposterOakHouse, HAITEKU_IMPOSTER_OAK_HOUSE, 0 + +SECTION "HaitekuAquarium1F", ROMX[$4444], BANK[$27] + map_attributes HaitekuAquarium1F, HAITEKU_AQUARIUM_1F, 0 + +SECTION "HaitekuAquarium2F", ROMX[$44CB], BANK[$27] + map_attributes HaitekuAquarium2F, HAITEKU_AQUARIUM_2F, 0 + +SECTION "FontoRouteGate1", ROMX[$4537], BANK[$27] + map_attributes FontoRouteGate1, FONTO_ROUTE_GATE_1, 0 + +SECTION "FontoRouteGate2", ROMX[$4592], BANK[$27] + map_attributes FontoRouteGate2, FONTO_ROUTE_GATE_2, 0 + +SECTION "FontoRouteGate3", ROMX[$45ED], BANK[$27] + map_attributes FontoRouteGate3, FONTO_ROUTE_GATE_3, 0 + +SECTION "FontoRocketHouse", ROMX[$4648], BANK[$27] + map_attributes FontoRocketHouse, FONTO_ROCKET_HOUSE, 0 + +SECTION "FontoMart", ROMX[$46D5], BANK[$27] + map_attributes FontoMart, FONTO_MART, 0 + +SECTION "FontoHouse", ROMX[$4755], BANK[$27] + map_attributes FontoHouse, FONTO_HOUSE, 0 + +SECTION "FontoPokecenter1F", ROMX[$47AF], BANK[$27] + map_attributes FontoPokecenter1F, FONTO_POKECENTER_1F, 0 + +SECTION "FontoPokecenter2F", ROMX[$4843], BANK[$27] + map_attributes FontoPokecenter2F, FONTO_POKECENTER_2F, 0 + +SECTION "FontoLab", ROMX[$48BC], BANK[$27] + map_attributes FontoLab, FONTO_LAB, 0 + +SECTION "BaadonMart", ROMX[$4923], BANK[$27] + map_attributes BaadonMart, BAADON_MART, 0 + +SECTION "BaadonPokecenter1F", ROMX[$49A3], BANK[$27] + map_attributes BaadonPokecenter1F, BAADON_POKECENTER_1F, 0 + +SECTION "BaadonPokecenter2F", ROMX[$4A2A], BANK[$27] + map_attributes BaadonPokecenter2F, BAADON_POKECENTER_2F, 0 + +SECTION "BaadonHouse1", ROMX[$4AA3], BANK[$27] + map_attributes BaadonHouse1, BAADON_HOUSE_1, 0 + +SECTION "BaadonWallpaperHouse", ROMX[$4AF9], BANK[$27] + map_attributes BaadonWallpaperHouse, BAADON_WALLPAPER_HOUSE, 0 + +SECTION "BaadonHouse2", ROMX[$4B42], BANK[$27] + map_attributes BaadonHouse2, BAADON_HOUSE_2, 0 + +SECTION "BaadonLeague1F", ROMX[$4B9C], BANK[$27] + map_attributes BaadonLeague1F, BAADON_LEAGUE_1F, 0 + +SECTION "BaadonLeague2F", ROMX[$4C3D], BANK[$27] + map_attributes BaadonLeague2F, BAADON_LEAGUE_2F, 0 + +SECTION "BaadonRouteGateWest", ROMX[$4CDD], BANK[$27] + map_attributes BaadonRouteGateWest, BAADON_ROUTE_GATE_WEST, 0 + +SECTION "BaadonRouteGateNewtype", ROMX[$4D38], BANK[$27] + map_attributes BaadonRouteGateNewtype, BAADON_ROUTE_GATE_NEWTYPE, 0 + +SECTION "NewtypePokecenter1F", ROMX[$4D93], BANK[$27] + map_attributes NewtypePokecenter1F, NEWTYPE_POKECENTER_1F, 0 + +SECTION "NewtypePokecenter2F", ROMX[$4E27], BANK[$27] + map_attributes NewtypePokecenter2F, NEWTYPE_POKECENTER_2F, 0 + +SECTION "NewtypeLeague1F", ROMX[$4EA0], BANK[$27] + map_attributes NewtypeLeague1F, NEWTYPE_LEAGUE_1F, 0 + +SECTION "NewtypeLeague2F", ROMX[$4F41], BANK[$27] + map_attributes NewtypeLeague2F, NEWTYPE_LEAGUE_2F, 0 + +SECTION "NewtypeSailorHouse", ROMX[$4FE1], BANK[$27] + map_attributes NewtypeSailorHouse, NEWTYPE_SAILOR_HOUSE, 0 + +SECTION "NewtypeMart", ROMX[$503B], BANK[$27] + map_attributes NewtypeMart, NEWTYPE_MART, 0 + +SECTION "NewtypeDojo", ROMX[$50BB], BANK[$27] + map_attributes NewtypeDojo, NEWTYPE_DOJO, 0 + +SECTION "NewtypeHouse1", ROMX[$5155], BANK[$27] + map_attributes NewtypeHouse1, NEWTYPE_HOUSE_1, 0 + +SECTION "NewtypeDiner", ROMX[$51AF], BANK[$27] + map_attributes NewtypeDiner, NEWTYPE_DINER, 0 + +SECTION "NewtypeHouse2", ROMX[$522C], BANK[$27] + map_attributes NewtypeHouse2, NEWTYPE_HOUSE_2, 0 + +SECTION "NewtypeHouse3", ROMX[$5286], BANK[$27] + map_attributes NewtypeHouse3, NEWTYPE_HOUSE_3, 0 + +SECTION "Route15Pokecenter1F", ROMX[$52E0], BANK[$27] + map_attributes Route15Pokecenter1F, ROUTE_15_POKECENTER_1F, 0 + +SECTION "Route15Pokecenter2F", ROMX[$5374], BANK[$27] + map_attributes Route15Pokecenter2F, ROUTE_15_POKECENTER_2F, 0 + +SECTION "NewtypeRouteGate", ROMX[$53C6], BANK[$27] + map_attributes NewtypeRouteGate, NEWTYPE_ROUTE_GATE, 0 + +SECTION "Route18Pokecenter1F", ROMX[$5421], BANK[$27] + map_attributes Route18Pokecenter1F, ROUTE_18_POKECENTER_1F, 0 + +SECTION "Route18Pokecenter2F", ROMX[$54B5], BANK[$27] + map_attributes Route18Pokecenter2F, ROUTE_18_POKECENTER_2F, 0 + +SECTION "SugarRouteGate", ROMX[$5507], BANK[$27] + map_attributes SugarRouteGate, SUGAR_ROUTE_GATE, 0 + +SECTION "SugarHouse", ROMX[$5562], BANK[$27] + map_attributes SugarHouse, SUGAR_HOUSE, 0 + +SECTION "SugarHouse2", ROMX[$55E2], BANK[$27] + map_attributes SugarHouse2, SUGAR_HOUSE_2, 0 + +SECTION "SugarMart", ROMX[$5638], BANK[$27] + map_attributes SugarMart, SUGAR_MART, 0 + +SECTION "SugarPokecenter1F", ROMX[$56B8], BANK[$27] + map_attributes SugarPokecenter1F, SUGAR_POKECENTER_1F, 0 + +SECTION "SugarPokecenter2F", ROMX[$574C], BANK[$27] + map_attributes SugarPokecenter2F, SUGAR_POKECENTER_2F, 0 + +SECTION "BullForestRoute1House", ROMX[$57C5], BANK[$27] + map_attributes BullForestRoute1House, BULL_FOREST_ROUTE_1_HOUSE, 0 + +SECTION "BullForestRouteGateStand", ROMX[$581F], BANK[$27] + map_attributes BullForestRouteGateStand, BULL_FOREST_ROUTE_GATE_STAND, 0 + +SECTION "BullMart", ROMX[$587A], BANK[$27] + map_attributes BullMart, BULL_MART, 0 + +SECTION "BullHouse1", ROMX[$58FA], BANK[$27] + map_attributes BullHouse1, BULL_HOUSE_1, 0 + +SECTION "BullHouse2", ROMX[$5950], BANK[$27] + map_attributes BullHouse2, BULL_HOUSE_2, 0 + +SECTION "BullHouse3", ROMX[$59AA], BANK[$27] + map_attributes BullHouse3, BULL_HOUSE_3, 0 + +SECTION "BullPokecenter1F", ROMX[$5A04], BANK[$27] + map_attributes BullPokecenter1F, BULL_POKECENTER_1F, 0 + +SECTION "BullPokecenter2F", ROMX[$5A98], BANK[$27] + map_attributes BullPokecenter2F, BULL_POKECENTER_2F, 0 + +SECTION "BullLeague1F", ROMX[$5B11], BANK[$27] + map_attributes BullLeague1F, BULL_LEAGUE_1F, 0 + +SECTION "BullLeague2F", ROMX[$5BB2], BANK[$27] + map_attributes BullLeague2F, BULL_LEAGUE_2F, 0 + +SECTION "BullHouse4", ROMX[$5C52], BANK[$27] + map_attributes BullHouse4, BULL_HOUSE_4, 0 + +SECTION "StandRouteGateKanto", ROMX[$5C9F], BANK[$27] + map_attributes StandRouteGateKanto, STAND_ROUTE_GATE_KANTO, 0 + +SECTION "StandLab", ROMX[$5CFA], BANK[$27] + map_attributes StandLab, STAND_LAB, 0 + +SECTION "StandPokecenter1F", ROMX[$5D50], BANK[$27] + map_attributes StandPokecenter1F, STAND_POKECENTER_1F, 0 + +SECTION "StandPokecenter2F", ROMX[$5DE4], BANK[$27] + map_attributes StandPokecenter2F, STAND_POKECENTER_2F, 0 + +SECTION "StandOffice", ROMX[$5E5D], BANK[$27] + map_attributes StandOffice, STAND_OFFICE, 0 + +SECTION "StandMart", ROMX[$5EDD], BANK[$27] + map_attributes StandMart, STAND_MART, 0 + +SECTION "StandHouse", ROMX[$5F5D], BANK[$27] + map_attributes StandHouse, STAND_HOUSE, 0 + +SECTION "StandRocketHouse1F", ROMX[$5FB7], BANK[$27] + map_attributes StandRocketHouse1F, STAND_ROCKET_HOUSE_1F, 0 + +SECTION "StandRocketHouse2F", ROMX[$6024], BANK[$27] + map_attributes StandRocketHouse2F, STAND_ROCKET_HOUSE_2F, 0 + +SECTION "StandLeague1F", ROMX[$6083], BANK[$27] + map_attributes StandLeague1F, STAND_LEAGUE_1F, 0 + +SECTION "StandLeague2F", ROMX[$6124], BANK[$27] + map_attributes StandLeague2F, STAND_LEAGUE_2F, 0 + +SECTION "KantoCeruleanHouse", ROMX[$61C4], BANK[$27] + map_attributes KantoCeruleanHouse, KANTO_CERULEAN_HOUSE, 0 + +SECTION "KantoPokecenter1F", ROMX[$621E], BANK[$27] + map_attributes KantoPokecenter1F, KANTO_POKECENTER_1F, 0 + +SECTION "KantoPokecenter2F", ROMX[$62B2], BANK[$27] + map_attributes KantoPokecenter2F, KANTO_POKECENTER_2F, 0 + +SECTION "KantoLeague1F", ROMX[$632B], BANK[$27] + map_attributes KantoLeague1F, KANTO_LEAGUE_1F, 0 + +SECTION "KantoLeague2F", ROMX[$63CC], BANK[$27] + map_attributes KantoLeague2F, KANTO_LEAGUE_2F, 0 + +SECTION "KantoLavenderHouse", ROMX[$646C], BANK[$27] + map_attributes KantoLavenderHouse, KANTO_LAVENDER_HOUSE, 0 + +SECTION "KantoCeladonMart1F", ROMX[$64D3], BANK[$27] + map_attributes KantoCeladonMart1F, KANTO_CELADON_MART_1F, 0 + +SECTION "KantoCeladonMart2F", ROMX[$6547], BANK[$27] + map_attributes KantoCeladonMart2F, KANTO_CELADON_MART_2F, 0 + +SECTION "KantoCeladonMart3F", ROMX[$65C1], BANK[$27] + map_attributes KantoCeladonMart3F, KANTO_CELADON_MART_3F, 0 + +SECTION "KantoCeladonMart4F", ROMX[$663B], BANK[$27] + map_attributes KantoCeladonMart4F, KANTO_CELADON_MART_4F, 0 + +SECTION "KantoCeladonMart5F", ROMX[$66C2], BANK[$27] + map_attributes KantoCeladonMart5F, KANTO_CELADON_MART_5F, 0 + +SECTION "KantoCeladonElevator", ROMX[$6742], BANK[$27] + map_attributes KantoCeladonElevator, KANTO_CELADON_ELEVATOR, 0 + +SECTION "KantoMart", ROMX[$677F], BANK[$27] + map_attributes KantoMart, KANTO_MART, 0 + +SECTION "KantoGamefreakHQ1", ROMX[$67FF], BANK[$27] + map_attributes KantoGamefreakHQ1, KANTO_GAMEFREAK_HQ_1, 0 + +SECTION "KantoGamefreakHQ2", ROMX[$6899], BANK[$27] + map_attributes KantoGamefreakHQ2, KANTO_GAMEFREAK_HQ_2, 0 + +SECTION "KantoGamefreakHQ3", ROMX[$6905], BANK[$27] + map_attributes KantoGamefreakHQ3, KANTO_GAMEFREAK_HQ_3, 0 + +SECTION "KantoGamefreakHQ4", ROMX[$698B], BANK[$27] + map_attributes KantoGamefreakHQ4, KANTO_GAMEFREAK_HQ_4, 0 + +SECTION "KantoGamefreakHQ5", ROMX[$69E3], BANK[$27] + map_attributes KantoGamefreakHQ5, KANTO_GAMEFREAK_HQ_5, 0 + +SECTION "KantoSilphCo", ROMX[$6A2C], BANK[$27] + map_attributes KantoSilphCo, KANTO_SILPH_CO, 0 + +SECTION "KantoViridianHouse", ROMX[$6ADF], BANK[$27] + map_attributes KantoViridianHouse, KANTO_VIRIDIAN_HOUSE, 0 + +SECTION "KantoGameCorner", ROMX[$6B46], BANK[$27] + map_attributes KantoGameCorner, KANTO_GAME_CORNER, 0 + +SECTION "KantoUnusedArea", ROMX[$6C55], BANK[$27] + map_attributes KantoUnusedArea, KANTO_UNUSED_AREA, 0 + +SECTION "KantoGameCornerPrizes", ROMX[$6C90], BANK[$27] + map_attributes KantoGameCornerPrizes, KANTO_GAME_CORNER_PRIZES, 0 + +SECTION "KantoDiner", ROMX[$6D04], BANK[$27] + map_attributes KantoDiner, KANTO_DINER, 0 + +SECTION "KantoSchool", ROMX[$6D51], BANK[$27] + map_attributes KantoSchool, KANTO_SCHOOL, 0 + +SECTION "KantoHospital", ROMX[$6DEB], BANK[$27] + map_attributes KantoHospital, KANTO_HOSPITAL, 0 + +SECTION "KantoPokecenter21F", ROMX[$6E6B], BANK[$27] + map_attributes KantoPokecenter21F, KANTO_POKECENTER_2_1F, 0 + +SECTION "KantoPokecenter22F", ROMX[$6EFF], BANK[$27] + map_attributes KantoPokecenter22F, KANTO_POKECENTER_2_2F, 0 + +SECTION "KantoRedsHouse", ROMX[$6F78], BANK[$27] + map_attributes KantoRedsHouse, KANTO_REDS_HOUSE, 0 + +SECTION "KantoGreensHouse1F", ROMX[$6FDF], BANK[$27] + map_attributes KantoGreensHouse1F, KANTO_GREENS_HOUSE_1F, 0 + +SECTION "KantoGreensHouse2F", ROMX[$703C], BANK[$27] + map_attributes KantoGreensHouse2F, KANTO_GREENS_HOUSE_2F, 0 + +SECTION "KantoEldersHouse", ROMX[$707E], BANK[$27] + map_attributes KantoEldersHouse, KANTO_ELDERS_HOUSE, 0 + +SECTION "KantoOaksLab", ROMX[$70E5], BANK[$27] + map_attributes KantoOaksLab, KANTO_OAKS_LAB, 0 + +SECTION "KantoLeague21F", ROMX[$713B], BANK[$27] + map_attributes KantoLeague21F, KANTO_LEAGUE_2_1F, 0 + +SECTION "KantoLeague22F", ROMX[$71DC], BANK[$27] + map_attributes KantoLeague22F, KANTO_LEAGUE_2_2F, 0 + +SECTION "KantoFishingGuru", ROMX[$727C], BANK[$27] + map_attributes KantoFishingGuru, KANTO_FISHING_GURU, 0 + +SECTION "SouthHouse1", ROMX[$72D6], BANK[$27] + map_attributes SouthHouse1, SOUTH_HOUSE_1, 0 + +SECTION "SouthPokecenter1F", ROMX[$7330], BANK[$27] + map_attributes SouthPokecenter1F, SOUTH_POKECENTER_1F, 0 + +SECTION "SouthPokecenter2F", ROMX[$73C4], BANK[$27] + map_attributes SouthPokecenter2F, SOUTH_POKECENTER_2F, 0 + +SECTION "SouthMart", ROMX[$743D], BANK[$27] + map_attributes SouthMart, SOUTH_MART, 0 + +SECTION "SouthHouse2", ROMX[$74BD], BANK[$27] + map_attributes SouthHouse2, SOUTH_HOUSE_2, 0 + +SECTION "NorthHouse1", ROMX[$7517], BANK[$27] + map_attributes NorthHouse1, NORTH_HOUSE_1, 0 + +SECTION "NorthMart", ROMX[$7571], BANK[$27] + map_attributes NorthMart, NORTH_MART, 0 + +SECTION "NorthHouse2", ROMX[$75F1], BANK[$27] + map_attributes NorthHouse2, NORTH_HOUSE_2, 0 + +SECTION "NorthPokecenter1F", ROMX[$764B], BANK[$27] + map_attributes NorthPokecenter1F, NORTH_POKECENTER_1F, 0 + +SECTION "NorthPokecenter2F", ROMX[$76DF], BANK[$27] + map_attributes NorthPokecenter2F, NORTH_POKECENTER_2F, 0 + +SECTION "PowerPlant1", ROMX[$4000], BANK[$2F] + map_attributes PowerPlant1, POWER_PLANT_1, 0 + +SECTION "PowerPlant2", ROMX[$407D], BANK[$2F] + map_attributes PowerPlant2, POWER_PLANT_2, 0 + +SECTION "PowerPlant3", ROMX[$40FA], BANK[$2F] + map_attributes PowerPlant3, POWER_PLANT_3, 0 + +SECTION "PowerPlant4", ROMX[$422B], BANK[$2F] + map_attributes PowerPlant4, POWER_PLANT_4, 0 + +SECTION "RuinsOfAlphEntrance", ROMX[$435C], BANK[$2F] + map_attributes RuinsOfAlphEntrance, RUINS_OF_ALPH_ENTRANCE, 0 + +SECTION "RuinsOfAlphMain", ROMX[$43D9], BANK[$2F] + map_attributes RuinsOfAlphMain, RUINS_OF_ALPH_MAIN, 0 + +SECTION "CaveMinecarts1", ROMX[$469F], BANK[$2F] + map_attributes CaveMinecarts1, CAVE_MINECARTS_1, 0 + +SECTION "CaveMinecarts2", ROMX[$482A], BANK[$2F] + map_attributes CaveMinecarts2, CAVE_MINECARTS_2, 0 + +SECTION "CaveMinecarts3", ROMX[$49B5], BANK[$2F] + map_attributes CaveMinecarts3, CAVE_MINECARTS_3, 0 + +SECTION "CaveMinecarts4", ROMX[$4B40], BANK[$2F] + map_attributes CaveMinecarts4, CAVE_MINECARTS_4, 0 + +SECTION "CaveMinecarts5", ROMX[$4CCB], BANK[$2F] + map_attributes CaveMinecarts5, CAVE_MINECARTS_5, 0 + +SECTION "CaveMinecarts6", ROMX[$4E56], BANK[$2F] + map_attributes CaveMinecarts6, CAVE_MINECARTS_6, 0 + +SECTION "CaveMinecarts7", ROMX[$4F2D], BANK[$2F] + map_attributes CaveMinecarts7, CAVE_MINECARTS_7, 0 + +SECTION "Office1", ROMX[$5004], BANK[$2F] + map_attributes Office1, OFFICE_1, 0 + +SECTION "Office2", ROMX[$5081], BANK[$2F] + map_attributes Office2, OFFICE_2, 0 + +SECTION "Office3", ROMX[$51B2], BANK[$2F] + map_attributes Office3, OFFICE_3, 0 + +SECTION "SlowpokeWellEntrance", ROMX[$5289], BANK[$2F] + map_attributes SlowpokeWellEntrance, SLOWPOKE_WELL_ENTRANCE, 0 + +SECTION "SlowpokeWellMain", ROMX[$5306], BANK[$2F] + map_attributes SlowpokeWellMain, SLOWPOKE_WELL_MAIN, 0 + +SECTION "ShizukanaOka", ROMX[$53DD], BANK[$2F] + map_attributes ShizukanaOka, SHIZUKANA_OKA, 0 + +SECTION "RouteSilentEastGate", ROMX[$4000], BANK[$34] + map_attributes RouteSilentEastGate, ROUTE_SILENT_EAST_GATE, 0 + +SECTION "PlayerHouse1F", ROMX[$4042], BANK[$34] + map_attributes PlayerHouse1F, PLAYER_HOUSE_1F, 0 + +SECTION "PlayerHouse2F", ROMX[$4132], BANK[$34] + map_attributes PlayerHouse2F, PLAYER_HOUSE_2F, 0 + +SECTION "SilentPokecenter", ROMX[$45FF], BANK[$34] + map_attributes SilentPokecenter, SILENT_POKECENTER, 0 + +SECTION "SilentHillHouse", ROMX[$47D5], BANK[$34] + map_attributes SilentHillHouse, SILENT_HILL_HOUSE, 0 + +SECTION "SilentHillLab", ROMX[$4AAC], BANK[$34] + map_attributes SilentHillLab, SILENT_HILL_LAB, 0 + +SECTION "SilentHillLab2", ROMX[$5BE6], BANK[$34] + map_attributes SilentHillLab2, SILENT_HILL_LAB_2, 0 + +SECTION "Unused13", ROMX[$605D], BANK[$34] + map_attributes Unused13, UNUSED_13, 0 + +SECTION "SilentHill", ROMX[$4014], BANK[$36] + map_attributes SilentHill, SILENT_HILL, NORTH | WEST | EAST + connection north, PrinceRoute, PRINCE_ROUTE, 0, 0, 10 + connection west, Route1P1, ROUTE_1_P1, 0, 0, 9 + connection east, RouteSilentEast, ROUTE_SILENT_EAST, 0, 0, 9 + +SECTION "OldCity", ROMX[$410D], BANK[$36] + map_attributes OldCity, OLD_CITY, SOUTH | WEST + connection south, Route1P2, ROUTE_1_P2, 5, 0, 10 + connection west, Route2, ROUTE_2, 5, 0, 9 + +SECTION "West", ROMX[$4372], BANK[$36] + map_attributes West, WEST, NORTH | EAST + connection north, BaadonRoute1, BAADON_ROUTE_1, 5, 0, 10 + connection east, Route2, ROUTE_2, 5, 0, 9 + +SECTION "Haiteku", ROMX[$45D2], BANK[$36] + map_attributes Haiteku, HAITEKU, WEST + connection west, HaitekuWestRoute, HAITEKU_WEST_ROUTE, 0, 0, 9 + +SECTION "Fonto", ROMX[$47F8], BANK[$36] + map_attributes Fonto, FONTO, NORTH | WEST | EAST + connection north, FontoRoute2, FONTO_ROUTE_2, 0, 0, 10 + connection west, FontoRoute1, FONTO_ROUTE_1, 0, 0, 9 + connection east, FontoRoute3, FONTO_ROUTE_3, 0, 0, 9 + +SECTION "Baadon", ROMX[$48F3], BANK[$36] + map_attributes Baadon, BAADON, NORTH | SOUTH | EAST + connection north, FontoRoute4, FONTO_ROUTE_4, 0, 0, 10 + connection south, BaadonRoute1, BAADON_ROUTE_1, 0, 0, 10 + connection east, BaadonRoute2, BAADON_ROUTE_2, 0, 0, 9 + +SECTION "Newtype", ROMX[$49F9], BANK[$36] + map_attributes Newtype, NEWTYPE, NORTH | WEST | EAST + connection north, SugarRoute, SUGAR_ROUTE, 5, 0, 10 + connection west, Route15, ROUTE_15, 0, 0, 9 + connection east, NewtypeRoute, NEWTYPE_ROUTE, 9, 0, 9 + +SECTION "Sugar", ROMX[$4C3A], BANK[$36] + map_attributes Sugar, SUGAR, SOUTH + connection south, SugarRoute, SUGAR_ROUTE, 0, 0, 10 + +SECTION "BullForest", ROMX[$4D05], BANK[$36] + map_attributes BullForest, BULL_FOREST, NORTH | SOUTH | WEST + connection north, BullForestRoute3, BULL_FOREST_ROUTE_3, 5, 0, 10 + connection south, BullForestRoute2, BULL_FOREST_ROUTE_2, 5, 0, 10 + connection west, BullForestRoute1, BULL_FOREST_ROUTE_1, 9, 0, 9 + +SECTION "Stand", ROMX[$4F28], BANK[$36] + map_attributes Stand, STAND, NORTH | SOUTH + connection north, BullForestRoute2, BULL_FOREST_ROUTE_2, 10, 0, 10 + connection south, StandRoute, STAND_ROUTE, 10, 0, 10 + +SECTION "Kanto", ROMX[$519D], BANK[$36] + map_attributes Kanto, KANTO, WEST | EAST + connection west, RouteSilentEast, ROUTE_SILENT_EAST, 9, 0, 9 + connection east, KantoEastRoute, KANTO_EAST_ROUTE, 9, 0, 9 + +SECTION "Prince", ROMX[$55F3], BANK[$36] + map_attributes Prince, PRINCE, NORTH | SOUTH + connection north, MtFujiRoute, MT_FUJI_ROUTE, 0, 0, 10 + connection south, PrinceRoute, PRINCE_ROUTE, 0, 0, 10 + +SECTION "MtFuji", ROMX[$5677], BANK[$36] + map_attributes MtFuji, MT_FUJI, SOUTH + connection south, MtFujiRoute, MT_FUJI_ROUTE, 0, 0, 10 + +SECTION "South", ROMX[$56EF], BANK[$36] + map_attributes South, SOUTH, NORTH | SOUTH | EAST + connection north, FontoRoute5, FONTO_ROUTE_5, 10, 0, 10 + connection south, HaitekuWestRouteOcean, HAITEKU_WEST_ROUTE_OCEAN, 10, 0, 10 + connection east, FontoRoute1, FONTO_ROUTE_1, 0, 0, 9 + +SECTION "North", ROMX[$5914], BANK[$36] + map_attributes North, NORTH, SOUTH + connection south, BullForestRoute3, BULL_FOREST_ROUTE_3, 0, 0, 10 + +SECTION "Route1P1", ROMX[$59DF], BANK[$36] + map_attributes Route1P1, ROUTE_1_P1, WEST | EAST + connection west, Route1P2, ROUTE_1_P2, -3, 6, 12 + connection east, SilentHill, SILENT_HILL, 0, 0, 9 + +SECTION "Route1P2", ROMX[$5ABE], BANK[$36] + map_attributes Route1P2, ROUTE_1_P2, NORTH | EAST + connection north, OldCity, OLD_CITY, -3, 2, 16 + connection east, Route1P1, ROUTE_1_P1, 9, 0, 9 + +SECTION "Route2", ROMX[$5BD4], BANK[$36] + map_attributes Route2, ROUTE_2, WEST | EAST + connection west, West, WEST, -3, 2, 15 + connection east, OldCity, OLD_CITY, -3, 2, 15 + +SECTION "HaitekuWestRoute", ROMX[$5CC6], BANK[$36] + map_attributes HaitekuWestRoute, HAITEKU_WEST_ROUTE, WEST | EAST + connection west, HaitekuWestRouteOcean, HAITEKU_WEST_ROUTE_OCEAN, -3, 15, 12 + connection east, Haiteku, HAITEKU, 0, 0, 12 + +SECTION "HaitekuWestRouteOcean", ROMX[$5DD1], BANK[$36] + map_attributes HaitekuWestRouteOcean, HAITEKU_WEST_ROUTE_OCEAN, NORTH | EAST + connection north, South, SOUTH, -3, 7, 13 + connection east, HaitekuWestRoute, HAITEKU_WEST_ROUTE, 18, 0, 9 + +SECTION "FontoRoute1", ROMX[$5F17], BANK[$36] + map_attributes FontoRoute1, FONTO_ROUTE_1, WEST | EAST + connection west, South, SOUTH, 0, 0, 12 + connection east, Fonto, FONTO, 0, 0, 9 + +SECTION "FontoRoute6", ROMX[$6083], BANK[$36] + map_attributes FontoRoute6, FONTO_ROUTE_6, WEST | EAST + connection west, FontoRoute5, FONTO_ROUTE_5, 0, 0, 12 + connection east, FontoRoute2, FONTO_ROUTE_2, 0, 0, 12 + +SECTION "FontoRoute2", ROMX[$61E8], BANK[$36] + map_attributes FontoRoute2, FONTO_ROUTE_2, SOUTH | WEST + connection south, Fonto, FONTO, 0, 0, 10 + connection west, FontoRoute6, FONTO_ROUTE_6, 0, 0, 9 + +SECTION "FontoRoute4", ROMX[$62C6], BANK[$36] + map_attributes FontoRoute4, FONTO_ROUTE_4, SOUTH | WEST + connection south, Baadon, BAADON, 0, 0, 10 + connection west, FontoRoute3, FONTO_ROUTE_3, 0, 0, 9 + +SECTION "FontoRoute3", ROMX[$63B2], BANK[$36] + map_attributes FontoRoute3, FONTO_ROUTE_3, WEST | EAST + connection west, Fonto, FONTO, 0, 0, 9 + connection east, FontoRoute4, FONTO_ROUTE_4, 0, 0, 12 + +SECTION "BaadonRoute1", ROMX[$64BD], BANK[$36] + map_attributes BaadonRoute1, BAADON_ROUTE_1, NORTH | SOUTH + connection north, Baadon, BAADON, 0, 0, 10 + connection south, West, WEST, -3, 2, 16 + +SECTION "BaadonRoute2", ROMX[$6603], BANK[$36] + map_attributes BaadonRoute2, BAADON_ROUTE_2, WEST | EAST + connection west, Baadon, BAADON, 0, 0, 9 + connection east, BaadonRoute3, BAADON_ROUTE_3, 0, 0, 12 + +SECTION "BaadonRoute3", ROMX[$67EF], BANK[$36] + map_attributes BaadonRoute3, BAADON_ROUTE_3, SOUTH | WEST + connection south, Route15, ROUTE_15, 0, 0, 13 + connection west, BaadonRoute2, BAADON_ROUTE_2, 0, 0, 9 + +SECTION "Route15", ROMX[$68DB], BANK[$36] + map_attributes Route15, ROUTE_15, NORTH | EAST + connection north, BaadonRoute3, BAADON_ROUTE_3, 0, 0, 10 + connection east, Newtype, NEWTYPE, 0, 0, 12 + +SECTION "NewtypeRoute", ROMX[$69BD], BANK[$36] + map_attributes NewtypeRoute, NEWTYPE_ROUTE, WEST | EAST + connection west, Newtype, NEWTYPE, -3, 6, 12 + connection east, Route18, ROUTE_18, -3, 33, 12 + +SECTION "Route18", ROMX[$6A6E], BANK[$36] + map_attributes Route18, ROUTE_18, NORTH | WEST + connection north, BullForestRoute1, BULL_FOREST_ROUTE_1, 0, 0, 13 + connection west, NewtypeRoute, NEWTYPE_ROUTE, 36, 0, 9 + +SECTION "BullForestRoute1", ROMX[$6C6F], BANK[$36] + map_attributes BullForestRoute1, BULL_FOREST_ROUTE_1, SOUTH | EAST + connection south, Route18, ROUTE_18, 0, 0, 10 + connection east, BullForest, BULL_FOREST, -3, 6, 12 + +SECTION "SugarRoute", ROMX[$6D8F], BANK[$36] + map_attributes SugarRoute, SUGAR_ROUTE, NORTH | SOUTH + connection north, Sugar, SUGAR, 0, 0, 10 + connection south, Newtype, NEWTYPE, -3, 2, 16 + +SECTION "BullForestRoute2", ROMX[$6ED5], BANK[$36] + map_attributes BullForestRoute2, BULL_FOREST_ROUTE_2, NORTH | SOUTH + connection north, BullForest, BULL_FOREST, -3, 2, 16 + connection south, Stand, STAND, -3, 7, 13 + +SECTION "StandRoute", ROMX[$701B], BANK[$36] + map_attributes StandRoute, STAND_ROUTE, NORTH | SOUTH + connection north, Stand, STAND, -3, 7, 13 + connection south, KantoEastRoute, KANTO_EAST_ROUTE, -3, 7, 13 + +SECTION "KantoEastRoute", ROMX[$7161], BANK[$36] + map_attributes KantoEastRoute, KANTO_EAST_ROUTE, NORTH | WEST + connection north, StandRoute, STAND_ROUTE, 10, 0, 10 + connection west, Kanto, KANTO, -3, 6, 15 + +SECTION "RouteSilentEast", ROMX[$724D], BANK[$36] + map_attributes RouteSilentEast, ROUTE_SILENT_EAST, WEST | EAST + connection west, SilentHill, SILENT_HILL, 0, 0, 9 + connection east, Kanto, KANTO, -3, 6, 15 + +SECTION "PrinceRoute", ROMX[$738C], BANK[$36] + map_attributes PrinceRoute, PRINCE_ROUTE, NORTH | SOUTH + connection north, Prince, PRINCE, 0, 0, 10 + connection south, SilentHill, SILENT_HILL, 0, 0, 10 + +SECTION "MtFujiRoute", ROMX[$73E8], BANK[$36] + map_attributes MtFujiRoute, MT_FUJI_ROUTE, NORTH | SOUTH + connection north, MtFuji, MT_FUJI, 0, 0, 10 + connection south, Prince, PRINCE, 0, 0, 10 + +SECTION "FontoRoute5", ROMX[$7444], BANK[$36] + map_attributes FontoRoute5, FONTO_ROUTE_5, SOUTH | EAST + connection south, South, SOUTH, -3, 7, 13 + connection east, FontoRoute6, FONTO_ROUTE_6, 0, 0, 9 + +SECTION "BullForestRoute3", ROMX[$7530], BANK[$36] + map_attributes BullForestRoute3, BULL_FOREST_ROUTE_3, NORTH | SOUTH + connection north, North, NORTH, 0, 0, 10 + connection south, BullForest, BULL_FOREST, -3, 2, 16 diff --git a/home/map.asm b/home/map.asm index 8105781..63810dd 100644 --- a/home/map.asm +++ b/home/map.asm @@ -1036,7 +1036,7 @@ Function275e:: ; 275e ; TODO: is this used? GetCoordOfUpperLeftCorner:: ; 277a - ld hl, wOverworldMap + ld hl, wOverworldMapBlocks ld a, [wXCoord] bit 0, a jr nz, .increment_then_halve1 @@ -1324,12 +1324,12 @@ ENDR ChangeMap:: ; 294d - ld hl, wOverworldMap - ld bc, wOverworldMapEnd - wOverworldMap + ld hl, wOverworldMapBlocks + ld bc, wOverworldMapBlocksEnd - wOverworldMapBlocks ld a, 0 call ByteFill - ld hl, wOverworldMap + ld hl, wOverworldMapBlocks ld a, [wMapWidth] ldh [hConnectedMapWidth], a add a, 6 diff --git a/home/tileset.asm b/home/tileset.asm index aabf249..38b9779 100644 --- a/home/tileset.asm +++ b/home/tileset.asm @@ -331,7 +331,7 @@ GetBlockLocation:: ; 2ef8 add a, 6 ld c, a ld b, 0 - ld hl, wOverworldMap + 1 + ld hl, wOverworldMapBlocks + 1 add hl, bc ld a, e srl a diff --git a/shim.sym b/shim.sym index 0d89369..f969e3b 100644 --- a/shim.sym +++ b/shim.sym @@ -192,189 +192,6 @@ 24:4000 SetClockDialog 24:4239 SlotMachineGame -25:4000 Route2Gate1F_MapAttributes -25:407C Route2Gate2F_MapAttributes -25:40DC Route2House_MapAttributes -25:414A OldCityMuseum_MapAttributes -25:41CD OldCityGym_MapAttributes -25:4289 OldCityTower1F_MapAttributes -25:4319 OldCityTower2F_MapAttributes -25:439E OldCityTower3F_MapAttributes -25:4423 OldCityTower4F_MapAttributes -25:44A8 OldCityTower5F_MapAttributes -25:44FC OldCityBillsHouse_MapAttributes -25:456A OldCityMart_MapAttributes -25:45EE OldCityHouse_MapAttributes -25:466E OldCityPokecenter1F_MapAttributes -25:46FE OldCityPokecenter2F_MapAttributes -25:4826 OldCityPokecenterTrade_MapAttributes -25:48AC OldCityPokecenterBattle_MapAttributes -25:492F OldCityPokecenterTimeMachine_MapAttributes -25:49AC OldCityKurtsHouse_MapAttributes -25:4A26 OldCitySchool_MapAttributes - -26:4000 Route1Gate1F_MapAttributes -26:40DA Route1Gate2F_MapAttributes -26:4224 WestMart1F_MapAttributes -26:42A0 WestMart2F_MapAttributes -26:4374 WestMart3F_MapAttributes -26:4433 WestMart4F_MapAttributes -26:44F2 WestMart5F_MapAttributes -26:4581 WestMart6F_MapAttributes -26:460E WestMartElevator_MapAttributes -26:464B WestRadioTower1F_MapAttributes -26:46CA WestRadioTower2F_MapAttributes -26:4772 WestRadioTower3F_MapAttributes -26:4827 WestRadioTower4F_MapAttributes -26:48E9 WestRadioTower5F_MapAttributes -26:499F WestRocketRaidedHouse_MapAttributes -26:4A49 WestPokecenter1F_MapAttributes -26:4AE1 WestPokecenter2F_MapAttributes -26:4B5E WestGym_MapAttributes -26:4C1A WestHouse1_MapAttributes -26:4C9E WestHouse2_MapAttributes - -27:4000 HaitekuWestRouteGate_MapAttributes -27:405B HaitekuPokecenter1F_MapAttributes -27:40EF HaitekuPokecenter2F_MapAttributes -27:4168 HaitekuLeague1F_MapAttributes -27:4209 HaitekuLeague2F_MapAttributes -27:42A9 HaitekuMart_MapAttributes -27:4329 HaitekuHouse1_MapAttributes -27:4383 HaitekuHouse2_MapAttributes -27:43DD HaitekuImposterOakHouse_MapAttributes -27:4444 HaitekuAquarium1F_MapAttributes -27:44CB HaitekuAquarium2F_MapAttributes -27:4537 FontoRouteGate1_MapAttributes -27:4592 FontoRouteGate2_MapAttributes -27:45ED FontoRouteGate3_MapAttributes -27:4648 FontoRocketHouse_MapAttributes -27:46D5 FontoMart_MapAttributes -27:4755 FontoHouse_MapAttributes -27:47AF FontoPokecenter1F_MapAttributes -27:4843 FontoPokecenter2F_MapAttributes -27:48BC FontoLab_MapAttributes -27:4923 BaadonMart_MapAttributes -27:49A3 BaadonPokecenter1F_MapAttributes -27:4A2A BaadonPokecenter2F_MapAttributes -27:4AA3 BaadonHouse1_MapAttributes -27:4AF9 BaadonWallpaperHouse_MapAttributes -27:4B42 BaadonHouse2_MapAttributes -27:4B9C BaadonLeague1F_MapAttributes -27:4C3D BaadonLeague2F_MapAttributes -27:4CDD BaadonRouteGateWest_MapAttributes -27:4D38 BaadonRouteGateNewtype_MapAttributes -27:4D93 NewtypePokecenter1F_MapAttributes -27:4E27 NewtypePokecenter2F_MapAttributes -27:4EA0 NewtypeLeague1F_MapAttributes -27:4F41 NewtypeLeague2F_MapAttributes -27:4FE1 NewtypeSailorHouse_MapAttributes -27:503B NewtypeMart_MapAttributes -27:50BB NewtypeDojo_MapAttributes -27:5155 NewtypeHouse1_MapAttributes -27:51AF NewtypeDiner_MapAttributes -27:522C NewtypeHouse2_MapAttributes -27:5286 NewtypeHouse3_MapAttributes -27:52E0 Route15Pokecenter1F_MapAttributes -27:5374 Route15Pokecenter2F_MapAttributes -27:53C6 NewtypeRouteGate_MapAttributes -27:5421 Route18Pokecenter1F_MapAttributes -27:54B5 Route18Pokecenter2F_MapAttributes -27:5507 SugarRouteGate_MapAttributes -27:5562 SugarHouse_MapAttributes -27:55E2 SugarHouse2_MapAttributes -27:5638 SugarMart_MapAttributes -27:56B8 SugarPokecenter1F_MapAttributes -27:574C SugarPokecenter2F_MapAttributes -27:57C5 BullForestRoute1House_MapAttributes -27:581F BullForestRouteGateStand_MapAttributes -27:587A BullMart_MapAttributes -27:58FA BullHouse1_MapAttributes -27:5950 BullHouse2_MapAttributes -27:59AA BullHouse3_MapAttributes -27:5A04 BullPokecenter1F_MapAttributes -27:5A98 BullPokecenter2F_MapAttributes -27:5B11 BullLeague1F_MapAttributes -27:5BB2 BullLeague2F_MapAttributes -27:5C52 BullHouse4_MapAttributes -27:5C9F StandRouteGateKanto_MapAttributes -27:5CFA StandLab_MapAttributes -27:5D50 StandPokecenter1F_MapAttributes -27:5DE4 StandPokecenter2F_MapAttributes -27:5E5D StandOffice_MapAttributes -27:5EDD StandMart_MapAttributes -27:5F5D StandHouse_MapAttributes -27:5FB7 StandRocketHouse1F_MapAttributes -27:6024 StandRocketHouse2F_MapAttributes -27:6083 StandLeague1F_MapAttributes -27:6124 StandLeague2F_MapAttributes -27:61C4 KantoCeruleanHouse_MapAttributes -27:621E KantoPokecenter1F_MapAttributes -27:62B2 KantoPokecenter2F_MapAttributes -27:632B KantoLeague1F_MapAttributes -27:63CC KantoLeague2F_MapAttributes -27:646C KantoLavenderHouse_MapAttributes -27:64D3 KantoCeladonMart1F_MapAttributes -27:6547 KantoCeladonMart2F_MapAttributes -27:65C1 KantoCeladonMart3F_MapAttributes -27:663B KantoCeladonMart4F_MapAttributes -27:66C2 KantoCeladonMart5F_MapAttributes -27:6742 KantoCeladonElevator_MapAttributes -27:677F KantoMart_MapAttributes -27:67FF KantoGamefreakHQ1_MapAttributes -27:6899 KantoGamefreakHQ2_MapAttributes -27:6905 KantoGamefreakHQ3_MapAttributes -27:698B KantoGamefreakHQ4_MapAttributes -27:69E3 KantoGamefreakHQ5_MapAttributes -27:6A2C KantoSilphCo_MapAttributes -27:6ADF KantoViridianHouse_MapAttributes -27:6B46 KantoGameCorner_MapAttributes -27:6C55 KantoUnusedArea_MapAttributes -27:6C90 KantoGameCornerPrizes_MapAttributes -27:6D04 KantoDiner_MapAttributes -27:6D51 KantoSchool_MapAttributes -27:6DEB KantoHospital_MapAttributes -27:6E6B KantoPokecenter21F_MapAttributes -27:6EFF KantoPokecenter22F_MapAttributes -27:6F78 KantoRedsHouse_MapAttributes -27:6FDF KantoGreensHouse1F_MapAttributes -27:703C KantoGreensHouse2F_MapAttributes -27:707E KantoEldersHouse_MapAttributes -27:70E5 KantoOaksLab_MapAttributes -27:713B KantoLeague21F_MapAttributes -27:71DC KantoLeague22F_MapAttributes -27:727C KantoFishingGuru_MapAttributes -27:72D6 SouthHouse1_MapAttributes -27:7330 SouthPokecenter1F_MapAttributes -27:73C4 SouthPokecenter2F_MapAttributes -27:743D SouthMart_MapAttributes -27:74BD SouthHouse2_MapAttributes -27:7517 NorthHouse1_MapAttributes -27:7571 NorthMart_MapAttributes -27:75F1 NorthHouse2_MapAttributes -27:764B NorthPokecenter1F_MapAttributes -27:76DF NorthPokecenter2F_MapAttributes - -2F:4000 PowerPlant1_MapAttributes -2F:407D PowerPlant2_MapAttributes -2F:40FA PowerPlant3_MapAttributes -2F:422B PowerPlant4_MapAttributes -2F:435C RuinsOfAlphEntrance_MapAttributes -2F:43D9 RuinsOfAlphMain_MapAttributes -2F:469F CaveMinecarts1_MapAttributes -2F:482A CaveMinecarts2_MapAttributes -2F:49B5 CaveMinecarts3_MapAttributes -2F:4B40 CaveMinecarts4_MapAttributes -2F:4CCB CaveMinecarts5_MapAttributes -2F:4E56 CaveMinecarts6_MapAttributes -2F:4F2D CaveMinecarts7_MapAttributes -2F:5004 Office1_MapAttributes -2F:5081 Office2_MapAttributes -2F:51B2 Office3_MapAttributes -2F:5289 SlowpokeWellEntrance_MapAttributes -2F:5306 SlowpokeWellMain_MapAttributes -2F:53DD ShizukanaOka_MapAttributes - 32:76FF Functioncb6ff 32:7710 Functioncb710 32:7733 Functioncb733 @@ -386,56 +203,6 @@ 33:625D BattleAnim_Sine_e 33:6263 BattleAnim_Cosine_e -34:4000 RouteSilentEastGate_MapAttributes -34:4042 PlayerHouse1F_MapAttributes -34:4132 PlayerHouse2F_MapAttributes -34:45FF SilentPokecenter_MapAttributes -34:47D5 SilentHillHouse_MapAttributes -34:4AAC SilentHillLab_MapAttributes -34:5BE6 SilentHillLab2_MapAttributes -34:605D Unused13_MapAttributes - -36:4014 SilentHill_MapAttributes -36:410D OldCity_MapAttributes -36:4372 West_MapAttributes -36:45D2 Haiteku_MapAttributes -36:47F8 Fonto_MapAttributes -36:48F3 Baadon_MapAttributes -36:49F9 Newtype_MapAttributes -36:4C3A Sugar_MapAttributes -36:4D05 BullForest_MapAttributes -36:4F28 Stand_MapAttributes -36:519D Kanto_MapAttributes -36:55F3 Prince_MapAttributes -36:5677 MtFuji_MapAttributes -36:56EF South_MapAttributes -36:5914 North_MapAttributes -36:59DF Route1P1_MapAttributes -36:5ABE Route1P2_MapAttributes -36:5BD4 Route2_MapAttributes -36:5CC6 HaitekuWestRoute_MapAttributes -36:5DD1 HaitekuWestRouteOcean_MapAttributes -36:5F17 FontoRoute1_MapAttributes -36:6083 FontoRoute6_MapAttributes -36:61E8 FontoRoute2_MapAttributes -36:62C6 FontoRoute4_MapAttributes -36:63B2 FontoRoute3_MapAttributes -36:64BD BaadonRoute1_MapAttributes -36:6603 BaadonRoute2_MapAttributes -36:67EF BaadonRoute3_MapAttributes -36:68DB Route15_MapAttributes -36:69BD NewtypeRoute_MapAttributes -36:6A6E Route18_MapAttributes -36:6C6F BullForestRoute1_MapAttributes -36:6D8F SugarRoute_MapAttributes -36:6ED5 BullForestRoute2_MapAttributes -36:701B StandRoute_MapAttributes -36:7161 KantoEastRoute_MapAttributes -36:724D RouteSilentEast_MapAttributes -36:738C PrinceRoute_MapAttributes -36:73E8 MtFujiRoute_MapAttributes -36:7444 FontoRoute5_MapAttributes -36:7530 BullForestRoute3_MapAttributes 38:4000 PikachuMiniGame 39:4000 GameFreakIntro 39:432F OpeningCutscene @@ -468,3 +235,917 @@ 01:D35F wOptions 01:D513 wWarpNumber 01:DA3B wOTPartyMonOT + +; Maps +25:404D Route2Gate1F_Blocks +25:4062 Route2Gate1F_Unk +25:4061 Route2Gate1F_MapScripts +25:400B Route2Gate1F_MapEvents +25:40B5 Route2Gate2F_Blocks +25:40C2 Route2Gate2F_Unk +25:40C1 Route2Gate2F_MapScripts +25:4087 Route2Gate2F_MapEvents +25:411F Route2House_Blocks +25:4130 Route2House_Unk +25:412F Route2House_MapScripts +25:40E7 Route2House_MapEvents +25:4192 OldCityMuseum_Blocks +25:41B3 OldCityMuseum_Unk +25:41B2 OldCityMuseum_MapScripts +25:4155 OldCityMuseum_MapEvents +25:4241 OldCityGym_Blocks +25:426F OldCityGym_Unk +25:426E OldCityGym_MapScripts +25:41D8 OldCityGym_MapEvents +25:42EE OldCityTower1F_Blocks +25:42FF OldCityTower1F_Unk +25:42FE OldCityTower1F_MapScripts +25:4294 OldCityTower1F_MapEvents +25:4373 OldCityTower2F_Blocks +25:4384 OldCityTower2F_Unk +25:4383 OldCityTower2F_MapScripts +25:4324 OldCityTower2F_MapEvents +25:43F8 OldCityTower3F_Blocks +25:4409 OldCityTower3F_Unk +25:4408 OldCityTower3F_MapScripts +25:43A9 OldCityTower3F_MapEvents +25:447D OldCityTower4F_Blocks +25:448E OldCityTower4F_Unk +25:448D OldCityTower4F_MapScripts +25:442E OldCityTower4F_MapEvents +25:44D8 OldCityTower5F_Blocks +25:44E2 OldCityTower5F_Unk +25:44E1 OldCityTower5F_MapScripts +25:44B3 OldCityTower5F_MapEvents +25:453F OldCityBillsHouse_Blocks +25:4550 OldCityBillsHouse_Unk +25:454F OldCityBillsHouse_MapScripts +25:4507 OldCityBillsHouse_MapEvents +25:45B3 OldCityMart_Blocks +25:45D4 OldCityMart_Unk +25:45D3 OldCityMart_MapScripts +25:4575 OldCityMart_MapEvents +25:4643 OldCityHouse_Blocks +25:4654 OldCityHouse_Unk +25:4653 OldCityHouse_MapScripts +25:45F9 OldCityHouse_MapEvents +25:46CB OldCityPokecenter1F_Blocks +25:46EC OldCityPokecenter1F_Unk +25:46EB OldCityPokecenter1F_MapScripts +25:4679 OldCityPokecenter1F_MapEvents +25:4762 OldCityPokecenter2F_Blocks +25:47A4 OldCityPokecenter2F_Unk +25:4782 OldCityPokecenter2F_MapScripts +25:4709 OldCityPokecenter2F_MapEvents +25:4851 OldCityPokecenterTrade_Blocks +25:4882 OldCityPokecenterTrade_Unk +25:4866 OldCityPokecenterTrade_MapScripts +25:4831 OldCityPokecenterTrade_MapEvents +25:48D7 OldCityPokecenterBattle_Blocks +25:4907 OldCityPokecenterBattle_Unk +25:48EB OldCityPokecenterBattle_MapScripts +25:48B7 OldCityPokecenterBattle_MapEvents +25:495E OldCityPokecenterTimeMachine_Blocks +25:499D OldCityPokecenterTimeMachine_Unk +25:497E OldCityPokecenterTimeMachine_MapScripts +25:493A OldCityPokecenterTimeMachine_MapEvents +25:49EB OldCityKurtsHouse_Blocks +25:4A0C OldCityKurtsHouse_Unk +25:4A0B OldCityKurtsHouse_MapScripts +25:49B7 OldCityKurtsHouse_MapEvents +25:4AA2 OldCitySchool_Blocks +25:4AC3 OldCitySchool_Unk +25:4AC2 OldCitySchool_MapScripts +25:4A31 OldCitySchool_MapEvents +26:404D Route1Gate1F_Blocks +26:4074 Route1Gate1F_Unk +26:4061 Route1Gate1F_MapScripts +26:400B Route1Gate1F_MapEvents +26:4113 Route1Gate2F_Blocks +26:4134 Route1Gate2F_Unk +26:411F Route1Gate2F_MapScripts +26:40E5 Route1Gate2F_MapEvents +26:4265 WestMart1F_Blocks +26:4286 WestMart1F_Unk +26:4285 WestMart1F_MapScripts +26:422F WestMart1F_MapEvents +26:4339 WestMart2F_Blocks +26:435A WestMart2F_Unk +26:4359 WestMart2F_MapScripts +26:42AB WestMart2F_MapEvents +26:43F8 WestMart3F_Blocks +26:4419 WestMart3F_Unk +26:4418 WestMart3F_MapScripts +26:437F WestMart3F_MapEvents +26:44B7 WestMart4F_Blocks +26:44D8 WestMart4F_Unk +26:44D7 WestMart4F_MapScripts +26:443E WestMart4F_MapEvents +26:4546 WestMart5F_Blocks +26:4567 WestMart5F_Unk +26:4566 WestMart5F_MapScripts +26:44FD WestMart5F_MapEvents +26:45D3 WestMart6F_Blocks +26:45F4 WestMart6F_Unk +26:45F3 WestMart6F_MapScripts +26:458C WestMart6F_MapEvents +26:462C WestMartElevator_Blocks +26:4631 WestMartElevator_Unk +26:4630 WestMartElevator_MapScripts +26:4619 WestMartElevator_MapEvents +26:469F WestRadioTower1F_Blocks +26:46B0 WestRadioTower1F_Unk +26:46AF WestRadioTower1F_MapScripts +26:4656 WestRadioTower1F_MapEvents +26:4747 WestRadioTower2F_Blocks +26:4758 WestRadioTower2F_Unk +26:4757 WestRadioTower2F_MapScripts +26:46D5 WestRadioTower2F_MapEvents +26:47FC WestRadioTower3F_Blocks +26:480D WestRadioTower3F_Unk +26:480C WestRadioTower3F_MapScripts +26:477D WestRadioTower3F_MapEvents +26:48BE WestRadioTower4F_Blocks +26:48CF WestRadioTower4F_Unk +26:48CE WestRadioTower4F_MapScripts +26:4832 WestRadioTower4F_MapEvents +26:4974 WestRadioTower5F_Blocks +26:4985 WestRadioTower5F_Unk +26:4984 WestRadioTower5F_MapScripts +26:48F4 WestRadioTower5F_MapEvents +26:4A1A WestRocketRaidedHouse_Blocks +26:4A2F WestRocketRaidedHouse_Unk +26:4A2E WestRocketRaidedHouse_MapScripts +26:49AA WestRocketRaidedHouse_MapEvents +26:4AA6 WestPokecenter1F_Blocks +26:4AC7 WestPokecenter1F_Unk +26:4AC6 WestPokecenter1F_MapScripts +26:4A54 WestPokecenter1F_MapEvents +26:4B23 WestPokecenter2F_Blocks +26:4B44 WestPokecenter2F_Unk +26:4B43 WestPokecenter2F_MapScripts +26:4AEC WestPokecenter2F_MapEvents +26:4BD2 WestGym_Blocks +26:4C00 WestGym_Unk +26:4BFF WestGym_MapScripts +26:4B69 WestGym_MapEvents +26:4C6F WestHouse1_Blocks +26:4C84 WestHouse1_Unk +26:4C83 WestHouse1_MapScripts +26:4C25 WestHouse1_MapEvents +26:4CF3 WestHouse2_Blocks +26:4D08 WestHouse2_Unk +26:4D07 WestHouse2_MapScripts +26:4CA9 WestHouse2_MapEvents +27:402C HaitekuWestRouteGate_Blocks +27:4041 HaitekuWestRouteGate_Unk +27:4040 HaitekuWestRouteGate_MapScripts +27:400B HaitekuWestRouteGate_MapEvents +27:40B4 HaitekuPokecenter1F_Blocks +27:40D5 HaitekuPokecenter1F_Unk +27:40D4 HaitekuPokecenter1F_MapScripts +27:4066 HaitekuPokecenter1F_MapEvents +27:412D HaitekuPokecenter2F_Blocks +27:414E HaitekuPokecenter2F_Unk +27:414D HaitekuPokecenter2F_MapScripts +27:40FA HaitekuPokecenter2F_MapEvents +27:41CE HaitekuLeague1F_Blocks +27:41EF HaitekuLeague1F_Unk +27:41EE HaitekuLeague1F_MapScripts +27:4173 HaitekuLeague1F_MapEvents +27:4261 HaitekuLeague2F_Blocks +27:428F HaitekuLeague2F_Unk +27:428E HaitekuLeague2F_MapScripts +27:4214 HaitekuLeague2F_MapEvents +27:42EE HaitekuMart_Blocks +27:430F HaitekuMart_Unk +27:430E HaitekuMart_MapScripts +27:42B4 HaitekuMart_MapEvents +27:4354 HaitekuHouse1_Blocks +27:4369 HaitekuHouse1_Unk +27:4368 HaitekuHouse1_MapScripts +27:4334 HaitekuHouse1_MapEvents +27:43AE HaitekuHouse2_Blocks +27:43C3 HaitekuHouse2_Unk +27:43C2 HaitekuHouse2_MapScripts +27:438E HaitekuHouse2_MapEvents +27:4415 HaitekuImposterOakHouse_Blocks +27:442A HaitekuImposterOakHouse_Unk +27:4429 HaitekuImposterOakHouse_MapScripts +27:43E8 HaitekuImposterOakHouse_MapEvents +27:4490 HaitekuAquarium1F_Blocks +27:44B1 HaitekuAquarium1F_Unk +27:44B0 HaitekuAquarium1F_MapScripts +27:444F HaitekuAquarium1F_MapEvents +27:44FC HaitekuAquarium2F_Blocks +27:451D HaitekuAquarium2F_Unk +27:451C HaitekuAquarium2F_MapScripts +27:44D6 HaitekuAquarium2F_MapEvents +27:4563 FontoRouteGate1_Blocks +27:4578 FontoRouteGate1_Unk +27:4577 FontoRouteGate1_MapScripts +27:4542 FontoRouteGate1_MapEvents +27:45BE FontoRouteGate2_Blocks +27:45D3 FontoRouteGate2_Unk +27:45D2 FontoRouteGate2_MapScripts +27:459D FontoRouteGate2_MapEvents +27:4619 FontoRouteGate3_Blocks +27:462E FontoRouteGate3_Unk +27:462D FontoRouteGate3_MapScripts +27:45F8 FontoRouteGate3_MapEvents +27:469A FontoRocketHouse_Blocks +27:46BB FontoRocketHouse_Unk +27:46BA FontoRocketHouse_MapScripts +27:4653 FontoRocketHouse_MapEvents +27:471A FontoMart_Blocks +27:473B FontoMart_Unk +27:473A FontoMart_MapScripts +27:46E0 FontoMart_MapEvents +27:4780 FontoHouse_Blocks +27:4795 FontoHouse_Unk +27:4794 FontoHouse_MapScripts +27:4760 FontoHouse_MapEvents +27:4808 FontoPokecenter1F_Blocks +27:4829 FontoPokecenter1F_Unk +27:4828 FontoPokecenter1F_MapScripts +27:47BA FontoPokecenter1F_MapEvents +27:4881 FontoPokecenter2F_Blocks +27:48A2 FontoPokecenter2F_Unk +27:48A1 FontoPokecenter2F_MapScripts +27:484E FontoPokecenter2F_MapEvents +27:48F4 FontoLab_Blocks +27:4909 FontoLab_Unk +27:4908 FontoLab_MapScripts +27:48C7 FontoLab_MapEvents +27:4968 BaadonMart_Blocks +27:4989 BaadonMart_Unk +27:4988 BaadonMart_MapScripts +27:492E BaadonMart_MapEvents +27:49EF BaadonPokecenter1F_Blocks +27:4A10 BaadonPokecenter1F_Unk +27:4A0F BaadonPokecenter1F_MapScripts +27:49AE BaadonPokecenter1F_MapEvents +27:4A68 BaadonPokecenter2F_Blocks +27:4A89 BaadonPokecenter2F_Unk +27:4A88 BaadonPokecenter2F_MapScripts +27:4A35 BaadonPokecenter2F_MapEvents +27:4ACE BaadonHouse1_Blocks +27:4ADF BaadonHouse1_Unk +27:4ADE BaadonHouse1_MapScripts +27:4AAE BaadonHouse1_MapEvents +27:4B17 BaadonWallpaperHouse_Blocks +27:4B28 BaadonWallpaperHouse_Unk +27:4B27 BaadonWallpaperHouse_MapScripts +27:4B04 BaadonWallpaperHouse_MapEvents +27:4B6D BaadonHouse2_Blocks +27:4B82 BaadonHouse2_Unk +27:4B81 BaadonHouse2_MapScripts +27:4B4D BaadonHouse2_MapEvents +27:4C02 BaadonLeague1F_Blocks +27:4C23 BaadonLeague1F_Unk +27:4C22 BaadonLeague1F_MapScripts +27:4BA7 BaadonLeague1F_MapEvents +27:4C95 BaadonLeague2F_Blocks +27:4CC3 BaadonLeague2F_Unk +27:4CC2 BaadonLeague2F_MapScripts +27:4C48 BaadonLeague2F_MapEvents +27:4D09 BaadonRouteGateWest_Blocks +27:4D1E BaadonRouteGateWest_Unk +27:4D1D BaadonRouteGateWest_MapScripts +27:4CE8 BaadonRouteGateWest_MapEvents +27:4D64 BaadonRouteGateNewtype_Blocks +27:4D79 BaadonRouteGateNewtype_Unk +27:4D78 BaadonRouteGateNewtype_MapScripts +27:4D43 BaadonRouteGateNewtype_MapEvents +27:4DEC NewtypePokecenter1F_Blocks +27:4E0D NewtypePokecenter1F_Unk +27:4E0C NewtypePokecenter1F_MapScripts +27:4D9E NewtypePokecenter1F_MapEvents +27:4E65 NewtypePokecenter2F_Blocks +27:4E86 NewtypePokecenter2F_Unk +27:4E85 NewtypePokecenter2F_MapScripts +27:4E32 NewtypePokecenter2F_MapEvents +27:4F06 NewtypeLeague1F_Blocks +27:4F27 NewtypeLeague1F_Unk +27:4F26 NewtypeLeague1F_MapScripts +27:4EAB NewtypeLeague1F_MapEvents +27:4F99 NewtypeLeague2F_Blocks +27:4FC7 NewtypeLeague2F_Unk +27:4FC6 NewtypeLeague2F_MapScripts +27:4F4C NewtypeLeague2F_MapEvents +27:500C NewtypeSailorHouse_Blocks +27:5021 NewtypeSailorHouse_Unk +27:5020 NewtypeSailorHouse_MapScripts +27:4FEC NewtypeSailorHouse_MapEvents +27:5080 NewtypeMart_Blocks +27:50A1 NewtypeMart_Unk +27:50A0 NewtypeMart_MapScripts +27:5046 NewtypeMart_MapEvents +27:511A NewtypeDojo_Blocks +27:513B NewtypeDojo_Unk +27:513A NewtypeDojo_MapScripts +27:50C6 NewtypeDojo_MapEvents +27:5180 NewtypeHouse1_Blocks +27:5195 NewtypeHouse1_Unk +27:5194 NewtypeHouse1_MapScripts +27:5160 NewtypeHouse1_MapEvents +27:5201 NewtypeDiner_Blocks +27:5212 NewtypeDiner_Unk +27:5211 NewtypeDiner_MapScripts +27:51BA NewtypeDiner_MapEvents +27:5257 NewtypeHouse2_Blocks +27:526C NewtypeHouse2_Unk +27:526B NewtypeHouse2_MapScripts +27:5237 NewtypeHouse2_MapEvents +27:52B1 NewtypeHouse3_Blocks +27:52C6 NewtypeHouse3_Unk +27:52C5 NewtypeHouse3_MapScripts +27:5291 NewtypeHouse3_MapEvents +27:5339 Route15Pokecenter1F_Blocks +27:535A Route15Pokecenter1F_Unk +27:5359 Route15Pokecenter1F_MapScripts +27:52EB Route15Pokecenter1F_MapEvents +27:538B Route15Pokecenter2F_Blocks +27:53AC Route15Pokecenter2F_Unk +27:53AB Route15Pokecenter2F_MapScripts +27:537F Route15Pokecenter2F_MapEvents +27:53F2 NewtypeRouteGate_Blocks +27:5407 NewtypeRouteGate_Unk +27:5406 NewtypeRouteGate_MapScripts +27:53D1 NewtypeRouteGate_MapEvents +27:547A Route18Pokecenter1F_Blocks +27:549B Route18Pokecenter1F_Unk +27:549A Route18Pokecenter1F_MapScripts +27:542C Route18Pokecenter1F_MapEvents +27:54CC Route18Pokecenter2F_Blocks +27:54ED Route18Pokecenter2F_Unk +27:54EC Route18Pokecenter2F_MapScripts +27:54C0 Route18Pokecenter2F_MapEvents +27:5533 SugarRouteGate_Blocks +27:5548 SugarRouteGate_Unk +27:5547 SugarRouteGate_MapScripts +27:5512 SugarRouteGate_MapEvents +27:55A7 SugarHouse_Blocks +27:55C8 SugarHouse_Unk +27:55C7 SugarHouse_MapScripts +27:556D SugarHouse_MapEvents +27:560D SugarHouse2_Blocks +27:561E SugarHouse2_Unk +27:561D SugarHouse2_MapScripts +27:55ED SugarHouse2_MapEvents +27:567D SugarMart_Blocks +27:569E SugarMart_Unk +27:569D SugarMart_MapScripts +27:5643 SugarMart_MapEvents +27:5711 SugarPokecenter1F_Blocks +27:5732 SugarPokecenter1F_Unk +27:5731 SugarPokecenter1F_MapScripts +27:56C3 SugarPokecenter1F_MapEvents +27:578A SugarPokecenter2F_Blocks +27:57AB SugarPokecenter2F_Unk +27:57AA SugarPokecenter2F_MapScripts +27:5757 SugarPokecenter2F_MapEvents +27:57F0 BullForestRoute1House_Blocks +27:5805 BullForestRoute1House_Unk +27:5804 BullForestRoute1House_MapScripts +27:57D0 BullForestRoute1House_MapEvents +27:584B BullForestRouteGateStand_Blocks +27:5860 BullForestRouteGateStand_Unk +27:585F BullForestRouteGateStand_MapScripts +27:582A BullForestRouteGateStand_MapEvents +27:58BF BullMart_Blocks +27:58E0 BullMart_Unk +27:58DF BullMart_MapScripts +27:5885 BullMart_MapEvents +27:5925 BullHouse1_Blocks +27:5936 BullHouse1_Unk +27:5935 BullHouse1_MapScripts +27:5905 BullHouse1_MapEvents +27:597B BullHouse2_Blocks +27:5990 BullHouse2_Unk +27:598F BullHouse2_MapScripts +27:595B BullHouse2_MapEvents +27:59D5 BullHouse3_Blocks +27:59EA BullHouse3_Unk +27:59E9 BullHouse3_MapScripts +27:59B5 BullHouse3_MapEvents +27:5A5D BullPokecenter1F_Blocks +27:5A7E BullPokecenter1F_Unk +27:5A7D BullPokecenter1F_MapScripts +27:5A0F BullPokecenter1F_MapEvents +27:5AD6 BullPokecenter2F_Blocks +27:5AF7 BullPokecenter2F_Unk +27:5AF6 BullPokecenter2F_MapScripts +27:5AA3 BullPokecenter2F_MapEvents +27:5B77 BullLeague1F_Blocks +27:5B98 BullLeague1F_Unk +27:5B97 BullLeague1F_MapScripts +27:5B1C BullLeague1F_MapEvents +27:5C0A BullLeague2F_Blocks +27:5C38 BullLeague2F_Unk +27:5C37 BullLeague2F_MapScripts +27:5BBD BullLeague2F_MapEvents +27:5C70 BullHouse4_Blocks +27:5C85 BullHouse4_Unk +27:5C84 BullHouse4_MapScripts +27:5C5D BullHouse4_MapEvents +27:5CCB StandRouteGateKanto_Blocks +27:5CE0 StandRouteGateKanto_Unk +27:5CDF StandRouteGateKanto_MapScripts +27:5CAA StandRouteGateKanto_MapEvents +27:5D25 StandLab_Blocks +27:5D36 StandLab_Unk +27:5D35 StandLab_MapScripts +27:5D05 StandLab_MapEvents +27:5DA9 StandPokecenter1F_Blocks +27:5DCA StandPokecenter1F_Unk +27:5DC9 StandPokecenter1F_MapScripts +27:5D5B StandPokecenter1F_MapEvents +27:5E22 StandPokecenter2F_Blocks +27:5E43 StandPokecenter2F_Unk +27:5E42 StandPokecenter2F_MapScripts +27:5DEF StandPokecenter2F_MapEvents +27:5EA2 StandOffice_Blocks +27:5EC3 StandOffice_Unk +27:5EC2 StandOffice_MapScripts +27:5E68 StandOffice_MapEvents +27:5F22 StandMart_Blocks +27:5F43 StandMart_Unk +27:5F42 StandMart_MapScripts +27:5EE8 StandMart_MapEvents +27:5F88 StandHouse_Blocks +27:5F9D StandHouse_Unk +27:5F9C StandHouse_MapScripts +27:5F68 StandHouse_MapEvents +27:5FE9 StandRocketHouse1F_Blocks +27:600A StandRocketHouse1F_Unk +27:6009 StandRocketHouse1F_MapScripts +27:5FC2 StandRocketHouse1F_MapEvents +27:6048 StandRocketHouse2F_Blocks +27:6069 StandRocketHouse2F_Unk +27:6068 StandRocketHouse2F_MapScripts +27:602F StandRocketHouse2F_MapEvents +27:60E9 StandLeague1F_Blocks +27:610A StandLeague1F_Unk +27:6109 StandLeague1F_MapScripts +27:608E StandLeague1F_MapEvents +27:617C StandLeague2F_Blocks +27:61AA StandLeague2F_Unk +27:61A9 StandLeague2F_MapScripts +27:612F StandLeague2F_MapEvents +27:61EF KantoCeruleanHouse_Blocks +27:6204 KantoCeruleanHouse_Unk +27:6203 KantoCeruleanHouse_MapScripts +27:61CF KantoCeruleanHouse_MapEvents +27:6277 KantoPokecenter1F_Blocks +27:6298 KantoPokecenter1F_Unk +27:6297 KantoPokecenter1F_MapScripts +27:6229 KantoPokecenter1F_MapEvents +27:62F0 KantoPokecenter2F_Blocks +27:6311 KantoPokecenter2F_Unk +27:6310 KantoPokecenter2F_MapScripts +27:62BD KantoPokecenter2F_MapEvents +27:6391 KantoLeague1F_Blocks +27:63B2 KantoLeague1F_Unk +27:63B1 KantoLeague1F_MapScripts +27:6336 KantoLeague1F_MapEvents +27:6424 KantoLeague2F_Blocks +27:6452 KantoLeague2F_Unk +27:6451 KantoLeague2F_MapScripts +27:63D7 KantoLeague2F_MapEvents +27:64A4 KantoLavenderHouse_Blocks +27:64B9 KantoLavenderHouse_Unk +27:64B8 KantoLavenderHouse_MapScripts +27:6477 KantoLavenderHouse_MapEvents +27:650C KantoCeladonMart1F_Blocks +27:652D KantoCeladonMart1F_Unk +27:652C KantoCeladonMart1F_MapScripts +27:64DE KantoCeladonMart1F_MapEvents +27:6586 KantoCeladonMart2F_Blocks +27:65A7 KantoCeladonMart2F_Unk +27:65A6 KantoCeladonMart2F_MapScripts +27:6552 KantoCeladonMart2F_MapEvents +27:6600 KantoCeladonMart3F_Blocks +27:6621 KantoCeladonMart3F_Unk +27:6620 KantoCeladonMart3F_MapScripts +27:65CC KantoCeladonMart3F_MapEvents +27:6687 KantoCeladonMart4F_Blocks +27:66A8 KantoCeladonMart4F_Unk +27:66A7 KantoCeladonMart4F_MapScripts +27:6646 KantoCeladonMart4F_MapEvents +27:6707 KantoCeladonMart5F_Blocks +27:6728 KantoCeladonMart5F_Unk +27:6727 KantoCeladonMart5F_MapScripts +27:66CD KantoCeladonMart5F_MapEvents +27:6760 KantoCeladonElevator_Blocks +27:6765 KantoCeladonElevator_Unk +27:6764 KantoCeladonElevator_MapScripts +27:674D KantoCeladonElevator_MapEvents +27:67C4 KantoMart_Blocks +27:67E5 KantoMart_Unk +27:67E4 KantoMart_MapScripts +27:678A KantoMart_MapEvents +27:6866 KantoGamefreakHQ1_Blocks +27:687F KantoGamefreakHQ1_Unk +27:687E KantoGamefreakHQ1_MapScripts +27:680A KantoGamefreakHQ1_MapEvents +27:68D2 KantoGamefreakHQ2_Blocks +27:68EB KantoGamefreakHQ2_Unk +27:68EA KantoGamefreakHQ2_MapScripts +27:68A4 KantoGamefreakHQ2_MapEvents +27:6958 KantoGamefreakHQ3_Blocks +27:6971 KantoGamefreakHQ3_Unk +27:6970 KantoGamefreakHQ3_MapScripts +27:6910 KantoGamefreakHQ3_MapEvents +27:69B0 KantoGamefreakHQ4_Blocks +27:69C9 KantoGamefreakHQ4_Unk +27:69C8 KantoGamefreakHQ4_MapScripts +27:6996 KantoGamefreakHQ4_MapEvents +27:6A01 KantoGamefreakHQ5_Blocks +27:6A12 KantoGamefreakHQ5_Unk +27:6A11 KantoGamefreakHQ5_MapScripts +27:69EE KantoGamefreakHQ5_MapEvents +27:6A64 KantoSilphCo_Blocks +27:6AC5 KantoSilphCo_Unk +27:6AC4 KantoSilphCo_MapScripts +27:6A37 KantoSilphCo_MapEvents +27:6B17 KantoViridianHouse_Blocks +27:6B2C KantoViridianHouse_Unk +27:6B2B KantoViridianHouse_MapScripts +27:6AEA KantoViridianHouse_MapEvents +27:6BF4 KantoGameCorner_Blocks +27:6C3B KantoGameCorner_Unk +27:6C3A KantoGameCorner_MapScripts +27:6B51 KantoGameCorner_MapEvents +27:6C65 KantoUnusedArea_Blocks +27:6C76 KantoUnusedArea_Unk +27:6C75 KantoUnusedArea_MapScripts +27:6C60 KantoUnusedArea_MapEvents +27:6CD5 KantoGameCornerPrizes_Blocks +27:6CEA KantoGameCornerPrizes_Unk +27:6CE9 KantoGameCornerPrizes_MapScripts +27:6C9B KantoGameCornerPrizes_MapEvents +27:6D22 KantoDiner_Blocks +27:6D37 KantoDiner_Unk +27:6D36 KantoDiner_MapScripts +27:6D0F KantoDiner_MapEvents +27:6DB0 KantoSchool_Blocks +27:6DD1 KantoSchool_Unk +27:6DD0 KantoSchool_MapScripts +27:6D5C KantoSchool_MapEvents +27:6E30 KantoHospital_Blocks +27:6E51 KantoHospital_Unk +27:6E50 KantoHospital_MapScripts +27:6DF6 KantoHospital_MapEvents +27:6EC4 KantoPokecenter21F_Blocks +27:6EE5 KantoPokecenter21F_Unk +27:6EE4 KantoPokecenter21F_MapScripts +27:6E76 KantoPokecenter21F_MapEvents +27:6F3D KantoPokecenter22F_Blocks +27:6F5E KantoPokecenter22F_Unk +27:6F5D KantoPokecenter22F_MapScripts +27:6F0A KantoPokecenter22F_MapEvents +27:6FB0 KantoRedsHouse_Blocks +27:6FC5 KantoRedsHouse_Unk +27:6FC4 KantoRedsHouse_MapScripts +27:6F83 KantoRedsHouse_MapEvents +27:7011 KantoGreensHouse1F_Blocks +27:7022 KantoGreensHouse1F_Unk +27:7021 KantoGreensHouse1F_MapScripts +27:6FEA KantoGreensHouse1F_MapEvents +27:7053 KantoGreensHouse2F_Blocks +27:7064 KantoGreensHouse2F_Unk +27:7063 KantoGreensHouse2F_MapScripts +27:7047 KantoGreensHouse2F_MapEvents +27:70B6 KantoEldersHouse_Blocks +27:70CB KantoEldersHouse_Unk +27:70CA KantoEldersHouse_MapScripts +27:7089 KantoEldersHouse_MapEvents +27:7110 KantoOaksLab_Blocks +27:7121 KantoOaksLab_Unk +27:7120 KantoOaksLab_MapScripts +27:70F0 KantoOaksLab_MapEvents +27:71A1 KantoLeague21F_Blocks +27:71C2 KantoLeague21F_Unk +27:71C1 KantoLeague21F_MapScripts +27:7146 KantoLeague21F_MapEvents +27:7234 KantoLeague22F_Blocks +27:7262 KantoLeague22F_Unk +27:7261 KantoLeague22F_MapScripts +27:71E7 KantoLeague22F_MapEvents +27:72A7 KantoFishingGuru_Blocks +27:72BC KantoFishingGuru_Unk +27:72BB KantoFishingGuru_MapScripts +27:7287 KantoFishingGuru_MapEvents +27:7301 SouthHouse1_Blocks +27:7316 SouthHouse1_Unk +27:7315 SouthHouse1_MapScripts +27:72E1 SouthHouse1_MapEvents +27:7389 SouthPokecenter1F_Blocks +27:73AA SouthPokecenter1F_Unk +27:73A9 SouthPokecenter1F_MapScripts +27:733B SouthPokecenter1F_MapEvents +27:7402 SouthPokecenter2F_Blocks +27:7423 SouthPokecenter2F_Unk +27:7422 SouthPokecenter2F_MapScripts +27:73CF SouthPokecenter2F_MapEvents +27:7482 SouthMart_Blocks +27:74A3 SouthMart_Unk +27:74A2 SouthMart_MapScripts +27:7448 SouthMart_MapEvents +27:74E8 SouthHouse2_Blocks +27:74FD SouthHouse2_Unk +27:74FC SouthHouse2_MapScripts +27:74C8 SouthHouse2_MapEvents +27:7542 NorthHouse1_Blocks +27:7557 NorthHouse1_Unk +27:7556 NorthHouse1_MapScripts +27:7522 NorthHouse1_MapEvents +27:75B6 NorthMart_Blocks +27:75D7 NorthMart_Unk +27:75D6 NorthMart_MapScripts +27:757C NorthMart_MapEvents +27:761C NorthHouse2_Blocks +27:7631 NorthHouse2_Unk +27:7630 NorthHouse2_MapScripts +27:75FC NorthHouse2_MapEvents +27:76A4 NorthPokecenter1F_Blocks +27:76C5 NorthPokecenter1F_Unk +27:76C4 NorthPokecenter1F_MapScripts +27:7656 NorthPokecenter1F_MapEvents +27:771D NorthPokecenter2F_Blocks +27:773E NorthPokecenter2F_Unk +27:773D NorthPokecenter2F_MapScripts +27:76EA NorthPokecenter2F_MapEvents +2F:4010 PowerPlant1_Blocks +2F:406B PowerPlant1_Unk +2F:406A PowerPlant1_MapScripts +2F:400B PowerPlant1_MapEvents +2F:408D PowerPlant2_Blocks +2F:40E8 PowerPlant2_Unk +2F:40E7 PowerPlant2_MapScripts +2F:4088 PowerPlant2_MapEvents +2F:410A PowerPlant3_Blocks +2F:4219 PowerPlant3_Unk +2F:4218 PowerPlant3_MapScripts +2F:4105 PowerPlant3_MapEvents +2F:423B PowerPlant4_Blocks +2F:434A PowerPlant4_Unk +2F:4349 PowerPlant4_MapScripts +2F:4236 PowerPlant4_MapEvents +2F:436C RuinsOfAlphEntrance_Blocks +2F:43C7 RuinsOfAlphEntrance_Unk +2F:43C6 RuinsOfAlphEntrance_MapScripts +2F:4367 RuinsOfAlphEntrance_MapEvents +2F:43E9 RuinsOfAlphMain_Blocks +2F:468D RuinsOfAlphMain_Unk +2F:468C RuinsOfAlphMain_MapScripts +2F:43E4 RuinsOfAlphMain_MapEvents +2F:46AF CaveMinecarts1_Blocks +2F:4818 CaveMinecarts1_Unk +2F:4817 CaveMinecarts1_MapScripts +2F:46AA CaveMinecarts1_MapEvents +2F:483A CaveMinecarts2_Blocks +2F:49A3 CaveMinecarts2_Unk +2F:49A2 CaveMinecarts2_MapScripts +2F:4835 CaveMinecarts2_MapEvents +2F:49C5 CaveMinecarts3_Blocks +2F:4B2E CaveMinecarts3_Unk +2F:4B2D CaveMinecarts3_MapScripts +2F:49C0 CaveMinecarts3_MapEvents +2F:4B50 CaveMinecarts4_Blocks +2F:4CB9 CaveMinecarts4_Unk +2F:4CB8 CaveMinecarts4_MapScripts +2F:4B4B CaveMinecarts4_MapEvents +2F:4CDB CaveMinecarts5_Blocks +2F:4E44 CaveMinecarts5_Unk +2F:4E43 CaveMinecarts5_MapScripts +2F:4CD6 CaveMinecarts5_MapEvents +2F:4E66 CaveMinecarts6_Blocks +2F:4F1B CaveMinecarts6_Unk +2F:4F1A CaveMinecarts6_MapScripts +2F:4E61 CaveMinecarts6_MapEvents +2F:4F3D CaveMinecarts7_Blocks +2F:4FF2 CaveMinecarts7_Unk +2F:4FF1 CaveMinecarts7_MapScripts +2F:4F38 CaveMinecarts7_MapEvents +2F:5014 Office1_Blocks +2F:506F Office1_Unk +2F:506E Office1_MapScripts +2F:500F Office1_MapEvents +2F:5091 Office2_Blocks +2F:51A0 Office2_Unk +2F:519F Office2_MapScripts +2F:508C Office2_MapEvents +2F:51C2 Office3_Blocks +2F:5277 Office3_Unk +2F:5276 Office3_MapScripts +2F:51BD Office3_MapEvents +2F:5299 SlowpokeWellEntrance_Blocks +2F:52F4 SlowpokeWellEntrance_Unk +2F:52F3 SlowpokeWellEntrance_MapScripts +2F:5294 SlowpokeWellEntrance_MapEvents +2F:5316 SlowpokeWellMain_Blocks +2F:53CB SlowpokeWellMain_Unk +2F:53CA SlowpokeWellMain_MapScripts +2F:5311 SlowpokeWellMain_MapEvents +2F:5489 ShizukanaOka_Blocks +2F:5664 ShizukanaOka_Unk +2F:564B ShizukanaOka_MapScripts +2F:53E8 ShizukanaOka_MapEvents +34:402C RouteSilentEastGate_Blocks +34:4041 RouteSilentEastGate_Unk +34:4040 RouteSilentEastGate_MapScripts +34:400B RouteSilentEastGate_MapEvents +34:4088 PlayerHouse1F_Blocks +34:40CF PlayerHouse1F_Unk +34:409C PlayerHouse1F_MapScripts +34:404D PlayerHouse1F_MapEvents +34:4177 PlayerHouse2F_Blocks +34:419D PlayerHouse2F_Unk +34:418B PlayerHouse2F_MapScripts +34:413D PlayerHouse2F_MapEvents +34:4662 SilentPokecenter_Blocks +34:46BC SilentPokecenter_Unk +34:4682 SilentPokecenter_MapScripts +34:460A SilentPokecenter_MapEvents +34:4825 SilentHillHouse_Blocks +34:494C SilentHillHouse_Unk +34:4839 SilentHillHouse_MapScripts +34:47E0 SilentHillHouse_MapEvents +34:4B9C SilentHillLab_Blocks +34:4C48 SilentHillLab_Unk +34:4BBC SilentHillLab_MapScripts +34:4AB7 SilentHillLab_MapEvents +34:5C59 SilentHillLab2_Blocks +34:5CA1 SilentHillLab2_Unk +34:5C69 SilentHillLab2_MapScripts +34:5BF1 SilentHillLab2_MapEvents +34:6068 Unused13_Blocks +34:6089 Unused13_Unk +34:6078 Unused13_MapScripts +34:6068 Unused13_MapEvents +36:40B3 SilentHill_Blocks +36:78D5 SilentHill_Unk +36:7669 SilentHill_MapScripts +36:4043 SilentHill_MapEvents +36:4208 OldCity_Blocks +36:4000 OldCity_Unk +36:4370 OldCity_MapScripts +36:4130 OldCity_MapEvents +36:4468 West_Blocks +36:4000 West_Unk +36:45D0 West_MapScripts +36:4395 West_MapEvents +36:468E Haiteku_Blocks +36:4000 Haiteku_Unk +36:47F6 Haiteku_MapScripts +36:45E9 Haiteku_MapEvents +36:4897 Fonto_Blocks +36:4000 Fonto_Unk +36:48F1 Fonto_MapScripts +36:4827 Fonto_MapEvents +36:499D Baadon_Blocks +36:4000 Baadon_Unk +36:49F7 Baadon_MapScripts +36:4922 Baadon_MapEvents +36:4AD0 Newtype_Blocks +36:4000 Newtype_Unk +36:4C38 Newtype_MapScripts +36:4A28 Newtype_MapEvents +36:4CA9 Sugar_Blocks +36:4000 Sugar_Unk +36:4D03 Sugar_MapScripts +36:4C51 Sugar_MapEvents +36:4DBE BullForest_Blocks +36:4000 BullForest_Unk +36:4F26 BullForest_MapScripts +36:4D34 BullForest_MapEvents +36:5033 Stand_Blocks +36:4000 Stand_Unk +36:519B Stand_MapScripts +36:4F4B Stand_MapEvents +36:52C7 Kanto_Blocks +36:4000 Kanto_Unk +36:55F1 Kanto_MapScripts +36:51C0 Kanto_MapEvents +36:561B Prince_Blocks +36:4000 Prince_Unk +36:5675 Prince_MapScripts +36:5616 Prince_MapEvents +36:5693 MtFuji_Blocks +36:4000 MtFuji_Unk +36:56ED MtFuji_MapScripts +36:568E MtFuji_MapEvents +36:57AA South_Blocks +36:4000 South_Unk +36:5912 South_MapScripts +36:571E South_MapEvents +36:5983 North_Blocks +36:4000 North_Unk +36:59DD North_MapScripts +36:592B North_MapEvents +36:5A37 Route1P1_Blocks +36:7BAD Route1P1_Unk +36:7B98 Route1P1_MapScripts +36:5A02 Route1P1_MapEvents +36:5B20 Route1P2_Blocks +36:7C7B Route1P2_Unk +36:7C68 Route1P2_MapScripts +36:5AE1 Route1P2_MapEvents +36:5C3D Route2_Blocks +36:4000 Route2_Unk +36:5CC4 Route2_MapScripts +36:5BF7 Route2_MapEvents +36:5CEE HaitekuWestRoute_Blocks +36:4000 HaitekuWestRoute_Unk +36:5DCF HaitekuWestRoute_MapScripts +36:5CE9 HaitekuWestRoute_MapEvents +36:5E07 HaitekuWestRouteOcean_Blocks +36:4000 HaitekuWestRouteOcean_Unk +36:5F15 HaitekuWestRouteOcean_MapScripts +36:5DF4 HaitekuWestRouteOcean_MapEvents +36:5F46 FontoRoute1_Blocks +36:4000 FontoRoute1_Unk +36:6081 FontoRoute1_MapScripts +36:5F3A FontoRoute1_MapEvents +36:60AB FontoRoute6_Blocks +36:4000 FontoRoute6_Unk +36:61E6 FontoRoute6_MapScripts +36:60A6 FontoRoute6_MapEvents +36:6210 FontoRoute2_Blocks +36:4000 FontoRoute2_Unk +36:62C4 FontoRoute2_MapScripts +36:620B FontoRoute2_MapEvents +36:62FC FontoRoute4_Blocks +36:4000 FontoRoute4_Unk +36:63B0 FontoRoute4_MapScripts +36:62E9 FontoRoute4_MapEvents +36:63DA FontoRoute3_Blocks +36:4000 FontoRoute3_Unk +36:64BB FontoRoute3_MapScripts +36:63D5 FontoRoute3_MapEvents +36:64F3 BaadonRoute1_Blocks +36:4000 BaadonRoute1_Unk +36:6601 BaadonRoute1_MapScripts +36:64E0 BaadonRoute1_MapEvents +36:662B BaadonRoute2_Blocks +36:4000 BaadonRoute2_Unk +36:67ED BaadonRoute2_MapScripts +36:6626 BaadonRoute2_MapEvents +36:6825 BaadonRoute3_Blocks +36:4000 BaadonRoute3_Unk +36:68D9 BaadonRoute3_MapScripts +36:6812 BaadonRoute3_MapEvents +36:6934 Route15_Blocks +36:4000 Route15_Unk +36:69BB Route15_MapScripts +36:68FE Route15_MapEvents +36:69E5 NewtypeRoute_Blocks +36:4000 NewtypeRoute_Unk +36:6A6C NewtypeRoute_MapScripts +36:69E0 NewtypeRoute_MapEvents +36:6AAB Route18_Blocks +36:4000 Route18_Unk +36:6C6D Route18_MapScripts +36:6A91 Route18_MapEvents +36:6CAC BullForestRoute1_Blocks +36:4000 BullForestRoute1_Unk +36:6D8D BullForestRoute1_MapScripts +36:6C92 BullForestRoute1_MapEvents +36:6DC5 SugarRoute_Blocks +36:4000 SugarRoute_Unk +36:6ED3 SugarRoute_MapScripts +36:6DB2 SugarRoute_MapEvents +36:6F0B BullForestRoute2_Blocks +36:4000 BullForestRoute2_Unk +36:7019 BullForestRoute2_MapScripts +36:6EF8 BullForestRoute2_MapEvents +36:7051 StandRoute_Blocks +36:4000 StandRoute_Unk +36:715F StandRoute_MapScripts +36:703E StandRoute_MapEvents +36:7197 KantoEastRoute_Blocks +36:4000 KantoEastRoute_Unk +36:724B KantoEastRoute_MapScripts +36:7184 KantoEastRoute_MapEvents +36:727C RouteSilentEast_Blocks +36:4000 RouteSilentEast_Unk +36:738A RouteSilentEast_MapScripts +36:7270 RouteSilentEast_MapEvents +36:73B4 PrinceRoute_Blocks +36:4000 PrinceRoute_Unk +36:73E6 PrinceRoute_MapScripts +36:73AF PrinceRoute_MapEvents +36:7410 MtFujiRoute_Blocks +36:4000 MtFujiRoute_Unk +36:7442 MtFujiRoute_MapScripts +36:740B MtFujiRoute_MapEvents +36:747A FontoRoute5_Blocks +36:4000 FontoRoute5_Unk +36:752E FontoRoute5_MapScripts +36:7467 FontoRoute5_MapEvents +36:7558 BullForestRoute3_Blocks +36:4000 BullForestRoute3_Unk +36:7666 BullForestRoute3_MapScripts +36:7553 BullForestRoute3_MapEvents diff --git a/wram.asm b/wram.asm index b196ac4..5f91fb6 100644 --- a/wram.asm +++ b/wram.asm @@ -114,9 +114,8 @@ wMapBufferEnd:: ; c600 UNION -wOverworldMap:: ; c600 - ds $514 ; TODO: constantify this -wOverworldMapEnd:: ; cb14 +wOverworldMapBlocks:: ds 1300 ; c600 +wOverworldMapBlocksEnd:: ; cb14 NEXTU -- cgit v1.2.3 From 0369ef51b4461cf516488c2e13b24ad6d5c13d65 Mon Sep 17 00:00:00 2001 From: 2Tie Date: Sat, 23 Jun 2018 10:19:49 -0600 Subject: split the oak speeches and game setup into two files --- engine/Intro.asm | 800 ++++++++++++++++++++++++++++++++++++++++++++++ engine/menu/main_menu.asm | 797 +-------------------------------------------- 2 files changed, 801 insertions(+), 796 deletions(-) create mode 100644 engine/Intro.asm diff --git a/engine/Intro.asm b/engine/Intro.asm new file mode 100644 index 0000000..fb26d95 --- /dev/null +++ b/engine/Intro.asm @@ -0,0 +1,800 @@ +include "constants.asm" + +SECTION "Oak Intro and Game Setup", ROMX[$558D], BANK[$01] + +DemoStart:: ; 558D + ld de, OakPic + lb bc, BANK(OakPic), $00 + call IntroDisplayPicCenteredOrUpperRight + call FadeInIntroPic + ld hl, OakSpeechDemo + call PrintText + call RotateThreePalettesRight + call ClearTileMap + ld de, ProtagonistPic + lb bc, BANK(ProtagonistPic), $00 + call IntroDisplayPicCenteredOrUpperRight + call MovePicLeft + ld a, %11010000 + ldh [rOBP0], a + call DemoSetUpPlayer + jp IntroCleanup + +GameStart:: ; 55BB + ld de, OakPic + lb bc, BANK(OakPic), $00 + call IntroDisplayPicCenteredOrUpperRight + call FadeInIntroPic + ld hl, OakSpeech1 + call PrintText + call RotateThreePalettesRight + call ClearTileMap + ld a, DEX_YADOKING + ld [wCurSpecies], a + ld [wMonDexIndex], a + call GetMonHeader + hlcoord 6, 4 + hlcoord 6, 4 + call PrepMonFrontpic + call MovePicLeft + ld hl, OakSpeech2 + call PrintText + ld a, DEX_YADOKING + call PlayCry + ld hl, OakSpeech3 + call PrintText + call RotateThreePalettesRight + call ClearTileMap + ld de, ProtagonistPic + lb bc, BANK(ProtagonistPic), $00 + call IntroDisplayPicCenteredOrUpperRight + call MovePicLeft + ld hl, OakSpeech4 + call PrintText + call ChoosePlayerName + call RotateThreePalettesRight + call ClearTileMap + ld de, RivalPic + lb bc, BANK(RivalPic), $00 + call IntroDisplayPicCenteredOrUpperRight + call FadeInIntroPic + ld hl, OakSpeech5 + call PrintText + call ChooseRivalName + call RotateThreePalettesRight + call ClearTileMap + ld de, OakPic + lb bc, BANK(OakPic), $00 + call IntroDisplayPicCenteredOrUpperRight + call FadeInIntroPic + ld hl, OakSpeech6 + call PrintText + callba SetClockDialog + call Function04ac + call RotateThreePalettesRight + call ClearTileMap + ld de, ProtagonistPic + lb bc, BANK(ProtagonistPic), $00 + call IntroDisplayPicCenteredOrUpperRight + call RotateThreePalettesLeft + ld hl, OakSpeech7 + call PrintText + ldh a, [hROMBank] + push af + ld a, $20 + ld [wMusicFade], a + ld de, MUSIC_NONE + ld a, e + ld [wMusicFadeIDLow], a + ld a, d + ld [wMusicFadeIDHigh], a + ld de, $000B ; should be a constant - shrink noise? + call PlaySFX + pop af + call Bankswitch + ld c, $04 + call DelayFrames + +IntroCleanup:: ; 568E + ld de, ShrinkPic1 + lb bc, BANK(ShrinkPic1), $00 + call IntroDisplayPicCenteredOrUpperRight + ld c, $04 + call DelayFrames + ld de, ShrinkPic2 + lb bc, BANK(ShrinkPic2), $00 + call IntroDisplayPicCenteredOrUpperRight + ld c, $14 + call DelayFrames + hlcoord 6, 5 + ld b, $07 + ld c, $07 + call ClearBox + ld c, $14 + call DelayFrames + call LoadStartingSprites + call LoadFontExtra + ld c, $32 + call DelayFrames + call RotateThreePalettesRight + call ClearTileMap + call Function0502 + ld a, $00 + ld [wd638], a + ld [wd637], a + +OverworldStart:: + call SetUpGameEntry + ld hl, wDebugFlags + bit CONTINUED_F, [hl] + call z, Function15b5 + ld hl, wd4a9 + set 0, [hl] + jp Function2a85 + +SetUpGameEntry:: ; 56E8 + ld a, $04 + ld [wd65e], a + ld a, $F2 + ldh [hMapEntryMethod], a + ld hl, wDebugFlags + bit CONTINUED_F, [hl] ; if we loaded a game + ret nz + ld a, $F1 + ldh [hMapEntryMethod], a + ld a, $00 + ld [wDebugWarpSelection], a + ld hl, GameStartPlacement + ld de, wMapGroup + ld bc, wd65e - wMapGroup + call CopyBytes + ret + +GameStartPlacement:: ; 570D + db $01 ; map group + db PLAYER_HOUSE_2F+1 ; map + dwcoord 15, 45 ; screen anchor + db $04 ; metatile x + db $04 ; metatile y + db $00 ; in-metatile x + db $01 ; in-metatile y + +DebugSetUpPlayer:: ; 5715 + call SetPlayerNamesDebug + ld a, $0F + ld [wd15d], a + ld a, $42 + ld [wd15e], a + ld a, $3F + ld [wd15f], a + ld a, $FF + ld [wd163], a + ld [wd164], a + call GiveRandomJohto + ld a, $03 + call AddRandomPokemonToBox + call FillTMs + ld de, DebugBagItems + call FillBagWithList + ld hl, wPokedexOwned + call DebugFillPokedex + ld hl, wPokedexSeen + call DebugFillPokedex + ld hl, wAnnonDex + ld [hl], $01 + call Function40fd + ret + +DebugFillPokedex:: ; 5755 + ld b, $1F + ld a, $FF +.loop + ld [hl+], a + dec b + jr nz, .loop + ld [hl], $07 + ret + +FillBagWithList:: ; 5760 + ld hl, wNumBagItems +.loop + ld a, [de] + cp $FF + jr z, .yump + ld [wCurItem], a + inc de + ld a, [de] + inc de + ld [wItemQuantity], a + call AddItemToInventory + jr .loop +.yump + ret + +DebugBagItems:: ; 5777 + db ITEM_IMPORTANT_BAG, $01 + db ITEM_BAG, $01 + db ITEM_TM_HOLDER, $01 + db ITEM_BALL_HOLDER, $01 + db ITEM_BICYCLE, $01 + db ITEM_MAIL, $06 + db ITEM_ULTRA_BALL, $1E + db ITEM_POKE_BALL, $63 + db ITEM_POTION, $1E + db ITEM_RARE_CANDY, $14 + db ITEM_MOON_STONE, $63 + db ITEM_FULL_HEAL, $63 + db ITEM_PROTEIN, $63 + db ITEM_QUICK_NEEDLE, $63 + db ITEM_SNAKESKIN, $63 + db ITEM_KINGS_ROCK, $63 + db ITEM_FLEE_FEATHER, $63 + db ITEM_FOCUS_ORB, $63 + db ITEM_SHARP_SCYTHE, $63 + db ITEM_DETECT_ORB, $63 + db $FF + +GiveRandomPokemon:: ; 57A0 + and a + ret z +.loop + push af + call RandomUnder246 + ld b, $0A + call GivePokemon + pop af + dec a + jr nz, .loop + ret + +GiveRandomJohto:: ; 57B0 +.loop + call Random + and $03 + jr z, .loop + dec a + ld b, a + add a, a + add a, b + add a, $98 ; maybe should be a constant - 152, aka the number of kanto pokes + ld b, $08 + call GivePokemon + ld a, $8D + ld [wPartyMon1 + 1], a + ret + +GiveKantoStarters:: ; 57C8 + ld a, $03 + ld b, $20 + call GivePokemon + ld a, $06 + ld b, $24 + call GivePokemon + ld a, $09 + ld b, $24 + call GivePokemon + ret + +GivePokemon:: ; 57DE + ld [wMonDexIndex], a + ld a, b + ld [wCurPartyLevel], a + ld a, $10 + call Predef + ret + +AddRandomPokemonToBox: ; 57EB + and a + ret z +.loop + push af + xor a + ld [wca44], a + call RandomUnder246 + ld [wcdd7], a + ld a, $05 + ld [wCurPartyLevel], a + callab AddPokemonToBox + ld a, [wcdd7] + ld [wMonDexIndex], a + callab Functiondd5c + pop af + dec a + jr nz, .loop + ret + +RandomUnder246:: ; 5818 +.loop + call Random + and a + jr z, .loop + cp $F6 + jr nc, .loop + ret + +FillTMs:: ; 5823 + ld b, $39 + ld a, $01 + ld hl, wTMsHMs +.loop + ld [hl+], a + dec b + jr nz, .loop + ret + +DebugGiveKeyItems:: ; 582F + ld hl, DebugKeyItemsList + ld de, wKeyItems + ld c, $FF +.loop + inc c + ld a, [hl+] + ld [de], a + inc de + cp $FF + jr nz, .loop + ld a, c + ld [wNumKeyItems], a + ret + +DebugKeyItemsList:: ; 5844 + db ITEM_TM_HOLDER + db ITEM_BALL_HOLDER + db ITEM_BAG + db ITEM_BICYCLE + db $FF + +DemoSetUpPlayer:: ; 5849 + ld hl, wPlayerName + ld de, DemoPlayerName + call CopyString + ld hl, wRivalName + ld de, DemoRivalName + call CopyString + call Function40fd + ld de, DemoItemList + call FillBagWithList + call GiveRandomJohto + ret + +DemoItemList:: ; 5868 + db ITEM_POKE_BALL, $05 + db ITEM_POTION, $0A + db ITEM_FULL_HEAL, $0A + db ITEM_STIMULUS_ORB, $01 + db ITEM_FOCUS_ORB, $01 + db $FF + +DemoPlayerName:: ; 5873 + db "サトシ@" + +DemoRivalName:: ; 5877 + db "シゲル@" + +OakSpeechDemo:: ; 587B + text "ようこそ" + line "ポケット モンスターの せかいへ!" + cont "ごぞんじ わしが オーキドじゃ!" + + para "きょう きみに きてもらったのは" + line "ほかでもない" + cont "あたらしい ずかんづくりを" + cont "てつだって ほしいのじゃ!" + + para "もちろん" + line "きみの パートナーとなる ポケモンと" + cont "りュックは ようい しておる" + + para "りュックの なかには" + line "キズぐすりと" + cont "モンスターボールが" + cont "はいっておるから あんしんじゃ!" + + para "すでに きみの ライバルは" + line "しゅっぱつ しとる" + + para "まけないよう がんばって くれい!" + prompt + +OakSpeech1:: ; 5956 + text "いやあ またせた!" + + para "ポケット モンスターの せかいへ" + line "ようこそ!" + + para "わたしの なまえは オーキド" + + para "みんなからは # はかせと" + line "したわれて おるよ" + prompt + +OakSpeech2:: ; 599F + text "きみも もちろん" + line "しっているとは おもうが" + + para "この せかいには" + line "ポケット モンスターと よばれる" + cont "いきもの たちが" + cont "いたるところに すんでいる!" + prompt + +OakSpeech3:: ; 59E8 + text "その # という いきものを" + line "ひとは ぺットに したり" + cont "しょうぶに つかったり" + cont "そして・・・" + + para "わたしは この #の" + line "けんきゅうを してる というわけだ" + prompt + +OakSpeech4:: ; 5A35 + text "では はじめに きみの なまえを" + line "おしえて もらおう!" + prompt + +OakSpeech5:: ; 5A52 + text "そして この しょうねんは" + line "きみの おさななじみであり" + cont"ライバルである" + + para "・・・えーと?" + line "なまえは なんて いったかな?" + prompt + +OakSpeech6:: ; 5A8F + text "さて きみの きねんすべき" + line "たびだちのひを" + cont "きろくしておこう!" + + para "じかんも なるべく せいかくにな!" + prompt + +OakSpeech7:: ; 5AC2 + text "!" + + para "いよいよ これから" + line "きみの ものがたりの はじまりだ!" + + para "ゆめと ぼうけんと!" + line "ポケット モンスターの せかいへ!" + + para "レッツ ゴー!" + done + +SetPlayerNamesDebug:: ; 5B07 + ld hl, DebugPlayerName + ld de, wPlayerName + call CopyNameDebug + ld hl, DebugRivalName + ld de, wRivalName + +CopyNameDebug: + ld bc, PLAYER_NAME_LENGTH + call CopyBytes + ret + +DebugPlayerName: ; 5B1D + db "コージ@" + +DebugRivalName: ; 5B21 + db "レッド@" + +ChoosePlayerName:: ; 5B25 + call PanPortraitRight + ld hl, PlayerNameMenuHeader + call NamingWindow + ld a, [wMenuCursorY] + dec a + jr z, .loop + ld de, wPlayerName + call SaveCustomName + jr .farjump + +.loop + ld b, $01 + ld de, wPlayerName + callba Function113f4 + ld a, [wPlayerName] + cp "@" + jr z, .loop + + call RotateThreePalettesRight + call ClearTileMap + call LoadFontExtra + call WaitBGMap + ld de, $4D10 + ld bc, $1200 + call IntroDisplayPicCenteredOrUpperRight + call RotateThreePalettesLeft +.farjump + ld hl, ChoosePlayerNameEndText + call PrintText + ret + +ChoosePlayerNameEndText: ; 5B6F + text "ふむ・・・" + line " と いうんだな!" + prompt + +PlayerNameMenuHeader: ; 5B81 + db MENU_BACKUP_TILES ; flags + menu_coords 00, 00, 10, 11 + dw PlayerNameMenuData + db 01 ; initial selection + +PlayerNameMenuData; 5B89 + db STATICMENU_CURSOR | STATICMENU_PLACE_TITLE | STATICMENU_DISABLE_B + db 04 ; items + db "じぶんできめる@" + db "ゴールド@" + db "サトシ@" + db "ジャック@" + db 3 ; x offset for the title string + db "なまえこうほ@" + +ChooseRivalName:: ; 5BA9 + call PanPortraitRight + ld hl, RivalNameMenuHeader + call NamingWindow + ld a, [wMenuCursorY] + dec a + jr z, .loop + ld de, wRivalName + call SaveCustomName + jr .farjump + +.loop + ld b, $02 + ld de, wRivalName + callba Function113f4 ; manual text entry box? + ld a, [wRivalName] + cp "@" + jr z, .loop + + call RotateThreePalettesRight + call ClearTileMap + call LoadFontExtra + call WaitBGMap + ld de, $4BD4 + ld bc, $1200 + call IntroDisplayPicCenteredOrUpperRight + call RotateThreePalettesLeft +.farjump + ld hl, ChooseRivalNameEndText + call PrintText + ret + +ChooseRivalNameEndText: ; 5BF3 + text "そうか そうだったな" + line " という なまえだ" + prompt + +RivalNameMenuHeader: ; 5C0A + db MENU_BACKUP_TILES ; flags + menu_coords 00, 00, 10, 11 + dw RivalNameMenuData + db 01 ; initial selection + +RivalNameMenuData: ; 5C12 + db STATICMENU_CURSOR | STATICMENU_PLACE_TITLE | STATICMENU_DISABLE_B + db 04 ; items + db "じぶんできめる@" + db "シルバー@" + db "シゲル@" + db "ジョン@" + db 3 + db "なまえこうほ@" + +MomNamePrompt:: ; 5C31 + ld hl, MomNameMenuHeader + call NamingWindow + ld a, [wMenuCursorY] + dec a + jr z, .loop + ld de, wMomsName + call SaveCustomName + jr .escape + +.loop + ld b, $03 + ld de, wMomsName + callba Function113f4 + ld a, [wMomsName] + cp "@" + jr z, .loop + + call ClearPalettes + call ClearTileMap + callab Function140d9 + call LoadFontExtra + call GetMemSGBLayout + call WaitBGMap +.escape + ret + +MomNameMenuHeader: ; 5C71 + db MENU_BACKUP_TILES ; flags + menu_coords 00, 00, 10, 11 + dw .MomNameMenuData + db 01 ; initial selection + +.MomNameMenuData: ; 5C79 + db STATICMENU_CURSOR | STATICMENU_PLACE_TITLE | STATICMENU_DISABLE_B + db 04 ; items + db "じぶんで きめる@" + db "おかあさん@" + db "ママ@" + db "かあちゃん@" + db 3 + db "なまえこうほ@" + +NamingWindow:: ; 5C9B + ; loads the menu header put into hl + call LoadMenuHeader + call VerticalMenu + ld a, [wMenuCursorY] + dec a + call CopyNameFromMenu + call CloseWindow + ret + +SaveCustomName:: ; 5CAC + ld hl, wcd31 + ld bc, PLAYER_NAME_LENGTH + call CopyBytes + ret + +PanPortraitRight:: ; 5CB6 + hlcoord 5, 4 + ld d, $06 + ld e, $7E + ld b, d + ld c, e + ld d, $00 + add hl, de +.loop + xor a + ldh [hBGMapMode], a + push hl + push bc +.innerLoop + ;pans all the tiles onscreen to the right one + ld a, [hl+] + ld [hl-], a + dec hl + dec c + jr nz, .innerLoop + + call WaitBGMap + pop bc + pop hl + inc hl + dec b ; passed c - how many tiles right to pan? + jr nz, .loop + ret + +PanPortraitLeft:: ; 5CD7 + hlcoord 12, 4 + ld b, $06 + ld c, $7E +.loop + xor a + ldh [hBGMapMode], a + push hl + push bc +.innerloop + ld a, [hl-] + ld [hl+], a + inc hl + dec c + jr nz, .innerloop + + call WaitBGMap + pop bc + pop hl + inc hl + dec b + jr nz, .loop + ret + +MenuCallSettings:: ; 5CF3 + call SettingsScreen + ret + +FadeInIntroPic: ; 5CF7 + ld hl, IntroFadePalettes + ld b, 6 +.next + ld a, [hl+] + ldh [rBGP], a + ld c, 10 + call DelayFrames + dec b + jr nz, .next + ret + +IntroFadePalettes: + db %01010100 + db %10101000 + db %11111100 + db %11111000 + db %11110100 + db %11100100 + +MovePicLeft: ; 5D0E + ld a, 119 + ldh [hWX], a + call DelayFrame + + ld a, %11100100 + ldh [rBGP], a +.next + call DelayFrame + ldh a, [hWX] + sub 8 + cp $FF + ret z + ldh [hWX], a + jr .next + +IntroDisplayPicCenteredOrUpperRight:: ; 5D27 +; b = bank +; de = address of compressed pic +; c: 0 = centred, non-zero = upper-right + ld a, c + and a + hlcoord 13, 4 + jr nz, .skip + hlcoord 6, 4 +.skip + push hl + ld a, b + call UncompressSpriteFromDE + ld a, $00 + call OpenSRAM + ld hl, sSpriteBuffer1 + ld de, sSpriteBuffer0 + ld bc, DOUBLESPRITEBUFFERSIZE + call CopyBytes + call CloseSRAM + ld de, VRAM_Begin + $1000 + call InterlaceMergeSpriteBuffers + pop hl + xor a + ldh [hGraphicStartTile], a + ld bc, $0707 + predef PlaceGraphic + ret + +LoadStartingSprites: ; 5D5D + ld de, GoldSpriteGFX + lb bc, BANK(GoldSpriteGFX), $0C + ld hl, VRAM_Begin + call Request2bpp + ld hl, wVirtualOAM + ld de, GameStartSprites + ld c, $04 +.loop + ld a, [de] + inc de + ld [hl+], a + ld a, [de] + inc de + ld [hl+], a + ld a, [de] + inc de + ld [hl+], a + xor a + ld [hl+], a + dec c + jr nz, .loop + ret + +GameStartSprites: ; 5D80 + db $50, $48, $00 + db $50, $50, $01 + db $58, $48, $02 + db $58, $50, $03 + +; 5D8C \ No newline at end of file diff --git a/engine/menu/main_menu.asm b/engine/menu/main_menu.asm index 4bd4a45..5cc6177 100644 --- a/engine/menu/main_menu.asm +++ b/engine/menu/main_menu.asm @@ -208,799 +208,4 @@ StartNewGame:: ; 555C call DebugSetUpPlayer jp IntroCleanup -DemoStart:: ; 558D - ld de, OakPic - lb bc, BANK(OakPic), $00 - call IntroDisplayPicCenteredOrUpperRight - call FadeInIntroPic - ld hl, OakSpeechDemo - call PrintText - call RotateThreePalettesRight - call ClearTileMap - ld de, ProtagonistPic - lb bc, BANK(ProtagonistPic), $00 - call IntroDisplayPicCenteredOrUpperRight - call MovePicLeft - ld a, %11010000 - ldh [rOBP0], a - call DemoSetUpPlayer - jp IntroCleanup - -GameStart:: ; 55BB - ld de, OakPic - lb bc, BANK(OakPic), $00 - call IntroDisplayPicCenteredOrUpperRight - call FadeInIntroPic - ld hl, OakSpeech1 - call PrintText - call RotateThreePalettesRight - call ClearTileMap - ld a, DEX_YADOKING - ld [wCurSpecies], a - ld [wMonDexIndex], a - call GetMonHeader - hlcoord 6, 4 - hlcoord 6, 4 - call PrepMonFrontpic - call MovePicLeft - ld hl, OakSpeech2 - call PrintText - ld a, DEX_YADOKING - call PlayCry - ld hl, OakSpeech3 - call PrintText - call RotateThreePalettesRight - call ClearTileMap - ld de, ProtagonistPic - lb bc, BANK(ProtagonistPic), $00 - call IntroDisplayPicCenteredOrUpperRight - call MovePicLeft - ld hl, OakSpeech4 - call PrintText - call ChoosePlayerName - call RotateThreePalettesRight - call ClearTileMap - ld de, RivalPic - lb bc, BANK(RivalPic), $00 - call IntroDisplayPicCenteredOrUpperRight - call FadeInIntroPic - ld hl, OakSpeech5 - call PrintText - call ChooseRivalName - call RotateThreePalettesRight - call ClearTileMap - ld de, OakPic - lb bc, BANK(OakPic), $00 - call IntroDisplayPicCenteredOrUpperRight - call FadeInIntroPic - ld hl, OakSpeech6 - call PrintText - callba SetClockDialog - call Function04ac - call RotateThreePalettesRight - call ClearTileMap - ld de, ProtagonistPic - lb bc, BANK(ProtagonistPic), $00 - call IntroDisplayPicCenteredOrUpperRight - call RotateThreePalettesLeft - ld hl, OakSpeech7 - call PrintText - ldh a, [hROMBank] - push af - ld a, $20 - ld [wMusicFade], a - ld de, MUSIC_NONE - ld a, e - ld [wMusicFadeIDLow], a - ld a, d - ld [wMusicFadeIDHigh], a - ld de, $000B ; should be a constant - shrink noise? - call PlaySFX - pop af - call Bankswitch - ld c, $04 - call DelayFrames - -IntroCleanup:: ; 568E - ld de, ShrinkPic1 - lb bc, BANK(ShrinkPic1), $00 - call IntroDisplayPicCenteredOrUpperRight - ld c, $04 - call DelayFrames - ld de, ShrinkPic2 - lb bc, BANK(ShrinkPic2), $00 - call IntroDisplayPicCenteredOrUpperRight - ld c, $14 - call DelayFrames - hlcoord 6, 5 - ld b, $07 - ld c, $07 - call ClearBox - ld c, $14 - call DelayFrames - call LoadStartingSprites - call LoadFontExtra - ld c, $32 - call DelayFrames - call RotateThreePalettesRight - call ClearTileMap - call Function0502 - ld a, $00 - ld [wd638], a - ld [wd637], a - -OverworldStart:: - call SetUpGameEntry - ld hl, wDebugFlags - bit CONTINUED_F, [hl] - call z, Function15b5 - ld hl, wd4a9 - set 0, [hl] - jp Function2a85 - -SetUpGameEntry:: ; 56E8 - ld a, $04 - ld [wd65e], a - ld a, $F2 - ldh [hMapEntryMethod], a - ld hl, wDebugFlags - bit CONTINUED_F, [hl] ; if we loaded a game - ret nz - ld a, $F1 - ldh [hMapEntryMethod], a - ld a, $00 - ld [wDebugWarpSelection], a - ld hl, GameStartPlacement - ld de, wMapGroup - ld bc, wd65e - wMapGroup - call CopyBytes - ret - -GameStartPlacement:: ; 570D - db $01 ; map group - db PLAYER_HOUSE_2F+1 ; map - dwcoord 15, 45 ; screen anchor - db $04 ; metatile x - db $04 ; metatile y - db $00 ; in-metatile x - db $01 ; in-metatile y - -DebugSetUpPlayer:: ; 5715 - call SetPlayerNamesDebug - ld a, $0F - ld [wd15d], a - ld a, $42 - ld [wd15e], a - ld a, $3F - ld [wd15f], a - ld a, $FF - ld [wd163], a - ld [wd164], a - call GiveRandomJohto - ld a, $03 - call AddRandomPokemonToBox - call FillTMs - ld de, DebugBagItems - call FillBagWithList - ld hl, wPokedexOwned - call DebugFillPokedex - ld hl, wPokedexSeen - call DebugFillPokedex - ld hl, wAnnonDex - ld [hl], $01 - call Function40fd - ret - -DebugFillPokedex:: ; 5755 - ld b, $1F - ld a, $FF -.loop - ld [hl+], a - dec b - jr nz, .loop - ld [hl], $07 - ret - -FillBagWithList:: ; 5760 - ld hl, wNumBagItems -.loop - ld a, [de] - cp $FF - jr z, .yump - ld [wCurItem], a - inc de - ld a, [de] - inc de - ld [wItemQuantity], a - call AddItemToInventory - jr .loop -.yump - ret - -DebugBagItems:: ; 5777 - db ITEM_IMPORTANT_BAG, $01 - db ITEM_BAG, $01 - db ITEM_TM_HOLDER, $01 - db ITEM_BALL_HOLDER, $01 - db ITEM_BICYCLE, $01 - db ITEM_MAIL, $06 - db ITEM_ULTRA_BALL, $1E - db ITEM_POKE_BALL, $63 - db ITEM_POTION, $1E - db ITEM_RARE_CANDY, $14 - db ITEM_MOON_STONE, $63 - db ITEM_FULL_HEAL, $63 - db ITEM_PROTEIN, $63 - db ITEM_QUICK_NEEDLE, $63 - db ITEM_SNAKESKIN, $63 - db ITEM_KINGS_ROCK, $63 - db ITEM_FLEE_FEATHER, $63 - db ITEM_FOCUS_ORB, $63 - db ITEM_SHARP_SCYTHE, $63 - db ITEM_DETECT_ORB, $63 - db $FF - -GiveRandomPokemon:: ; 57A0 - and a - ret z -.loop - push af - call RandomUnder246 - ld b, $0A - call GivePokemon - pop af - dec a - jr nz, .loop - ret - -GiveRandomJohto:: ; 57B0 -.loop - call Random - and $03 - jr z, .loop - dec a - ld b, a - add a, a - add a, b - add a, $98 ; maybe should be a constant - 152, aka the number of kanto pokes - ld b, $08 - call GivePokemon - ld a, $8D - ld [wPartyMon1 + 1], a - ret - -GiveKantoStarters:: ; 57C8 - ld a, $03 - ld b, $20 - call GivePokemon - ld a, $06 - ld b, $24 - call GivePokemon - ld a, $09 - ld b, $24 - call GivePokemon - ret - -GivePokemon:: ; 57DE - ld [wMonDexIndex], a - ld a, b - ld [wCurPartyLevel], a - ld a, $10 - call Predef - ret - -AddRandomPokemonToBox: ; 57EB - and a - ret z -.loop - push af - xor a - ld [wca44], a - call RandomUnder246 - ld [wcdd7], a - ld a, $05 - ld [wCurPartyLevel], a - callab AddPokemonToBox - ld a, [wcdd7] - ld [wMonDexIndex], a - callab Functiondd5c - pop af - dec a - jr nz, .loop - ret - -RandomUnder246:: ; 5818 -.loop - call Random - and a - jr z, .loop - cp $F6 - jr nc, .loop - ret - -FillTMs:: ; 5823 - ld b, $39 - ld a, $01 - ld hl, wTMsHMs -.loop - ld [hl+], a - dec b - jr nz, .loop - ret - -DebugGiveKeyItems:: ; 582F - ld hl, DebugKeyItemsList - ld de, wKeyItems - ld c, $FF -.loop - inc c - ld a, [hl+] - ld [de], a - inc de - cp $FF - jr nz, .loop - ld a, c - ld [wNumKeyItems], a - ret - -DebugKeyItemsList:: ; 5844 - db ITEM_TM_HOLDER - db ITEM_BALL_HOLDER - db ITEM_BAG - db ITEM_BICYCLE - db $FF - -DemoSetUpPlayer:: ; 5849 - ld hl, wPlayerName - ld de, DemoPlayerName - call CopyString - ld hl, wRivalName - ld de, DemoRivalName - call CopyString - call Function40fd - ld de, DemoItemList - call FillBagWithList - call GiveRandomJohto - ret - -DemoItemList:: ; 5868 - db ITEM_POKE_BALL, $05 - db ITEM_POTION, $0A - db ITEM_FULL_HEAL, $0A - db ITEM_STIMULUS_ORB, $01 - db ITEM_FOCUS_ORB, $01 - db $FF - -DemoPlayerName:: ; 5873 - db "サトシ@" - -DemoRivalName:: ; 5877 - db "シゲル@" - -OakSpeechDemo:: ; 587B - text "ようこそ" - line "ポケット モンスターの せかいへ!" - cont "ごぞんじ わしが オーキドじゃ!" - - para "きょう きみに きてもらったのは" - line "ほかでもない" - cont "あたらしい ずかんづくりを" - cont "てつだって ほしいのじゃ!" - - para "もちろん" - line "きみの パートナーとなる ポケモンと" - cont "りュックは ようい しておる" - - para "りュックの なかには" - line "キズぐすりと" - cont "モンスターボールが" - cont "はいっておるから あんしんじゃ!" - - para "すでに きみの ライバルは" - line "しゅっぱつ しとる" - - para "まけないよう がんばって くれい!" - prompt - -OakSpeech1:: ; 5956 - text "いやあ またせた!" - - para "ポケット モンスターの せかいへ" - line "ようこそ!" - - para "わたしの なまえは オーキド" - - para "みんなからは # はかせと" - line "したわれて おるよ" - prompt - -OakSpeech2:: ; 599F - text "きみも もちろん" - line "しっているとは おもうが" - - para "この せかいには" - line "ポケット モンスターと よばれる" - cont "いきもの たちが" - cont "いたるところに すんでいる!" - prompt - -OakSpeech3:: ; 59E8 - text "その # という いきものを" - line "ひとは ぺットに したり" - cont "しょうぶに つかったり" - cont "そして・・・" - - para "わたしは この #の" - line "けんきゅうを してる というわけだ" - prompt - -OakSpeech4:: ; 5A35 - text "では はじめに きみの なまえを" - line "おしえて もらおう!" - prompt - -OakSpeech5:: ; 5A52 - text "そして この しょうねんは" - line "きみの おさななじみであり" - cont"ライバルである" - - para "・・・えーと?" - line "なまえは なんて いったかな?" - prompt - -OakSpeech6:: ; 5A8F - text "さて きみの きねんすべき" - line "たびだちのひを" - cont "きろくしておこう!" - - para "じかんも なるべく せいかくにな!" - prompt - -OakSpeech7:: ; 5AC2 - text "!" - - para "いよいよ これから" - line "きみの ものがたりの はじまりだ!" - - para "ゆめと ぼうけんと!" - line "ポケット モンスターの せかいへ!" - - para "レッツ ゴー!" - done - -SetPlayerNamesDebug:: ; 5B07 - ld hl, DebugPlayerName - ld de, wPlayerName - call CopyNameDebug - ld hl, DebugRivalName - ld de, wRivalName - -CopyNameDebug: - ld bc, PLAYER_NAME_LENGTH - call CopyBytes - ret - -DebugPlayerName: ; 5B1D - db "コージ@" - -DebugRivalName: ; 5B21 - db "レッド@" - -ChoosePlayerName:: ; 5B25 - call PanPortraitRight - ld hl, PlayerNameMenuHeader - call NamingWindow - ld a, [wMenuCursorY] - dec a - jr z, .loop - ld de, wPlayerName - call SaveCustomName - jr .farjump - -.loop - ld b, $01 - ld de, wPlayerName - callba Function113f4 - ld a, [wPlayerName] - cp "@" - jr z, .loop - - call RotateThreePalettesRight - call ClearTileMap - call LoadFontExtra - call WaitBGMap - ld de, $4D10 - ld bc, $1200 - call IntroDisplayPicCenteredOrUpperRight - call RotateThreePalettesLeft -.farjump - ld hl, ChoosePlayerNameEndText - call PrintText - ret - -ChoosePlayerNameEndText: ; 5B6F - text "ふむ・・・" - line " と いうんだな!" - prompt - -PlayerNameMenuHeader: ; 5B81 - db MENU_BACKUP_TILES ; flags - menu_coords 00, 00, 10, 11 - dw PlayerNameMenuData - db 01 ; initial selection - -PlayerNameMenuData; 5B89 - db STATICMENU_CURSOR | STATICMENU_PLACE_TITLE | STATICMENU_DISABLE_B - db 04 ; items - db "じぶんできめる@" - db "ゴールド@" - db "サトシ@" - db "ジャック@" - db 3 ; x offset for the title string - db "なまえこうほ@" - -ChooseRivalName:: ; 5BA9 - call PanPortraitRight - ld hl, RivalNameMenuHeader - call NamingWindow - ld a, [wMenuCursorY] - dec a - jr z, .loop - ld de, wRivalName - call SaveCustomName - jr .farjump - -.loop - ld b, $02 - ld de, wRivalName - callba Function113f4 ; manual text entry box? - ld a, [wRivalName] - cp "@" - jr z, .loop - - call RotateThreePalettesRight - call ClearTileMap - call LoadFontExtra - call WaitBGMap - ld de, $4BD4 - ld bc, $1200 - call IntroDisplayPicCenteredOrUpperRight - call RotateThreePalettesLeft -.farjump - ld hl, ChooseRivalNameEndText - call PrintText - ret - -ChooseRivalNameEndText: ; 5BF3 - text "そうか そうだったな" - line " という なまえだ" - prompt - -RivalNameMenuHeader: ; 5C0A - db MENU_BACKUP_TILES ; flags - menu_coords 00, 00, 10, 11 - dw RivalNameMenuData - db 01 ; initial selection - -RivalNameMenuData: ; 5C12 - db STATICMENU_CURSOR | STATICMENU_PLACE_TITLE | STATICMENU_DISABLE_B - db 04 ; items - db "じぶんできめる@" - db "シルバー@" - db "シゲル@" - db "ジョン@" - db 3 - db "なまえこうほ@" - -MomNamePrompt:: ; 5C31 - ld hl, MomNameMenuHeader - call NamingWindow - ld a, [wMenuCursorY] - dec a - jr z, .loop - ld de, wMomsName - call SaveCustomName - jr .escape - -.loop - ld b, $03 - ld de, wMomsName - callba Function113f4 - ld a, [wMomsName] - cp "@" - jr z, .loop - - call ClearPalettes - call ClearTileMap - callab Function140d9 - call LoadFontExtra - call GetMemSGBLayout - call WaitBGMap -.escape - ret - -MomNameMenuHeader: ; 5C71 - db MENU_BACKUP_TILES ; flags - menu_coords 00, 00, 10, 11 - dw .MomNameMenuData - db 01 ; initial selection - -.MomNameMenuData: ; 5C79 - db STATICMENU_CURSOR | STATICMENU_PLACE_TITLE | STATICMENU_DISABLE_B - db 04 ; items - db "じぶんで きめる@" - db "おかあさん@" - db "ママ@" - db "かあちゃん@" - db 3 - db "なまえこうほ@" - -NamingWindow:: ; 5C9B - ; loads the menu header put into hl - call LoadMenuHeader - call VerticalMenu - ld a, [wMenuCursorY] - dec a - call CopyNameFromMenu - call CloseWindow - ret - -SaveCustomName:: ; 5CAC - ld hl, wcd31 - ld bc, PLAYER_NAME_LENGTH - call CopyBytes - ret - -PanPortraitRight:: ; 5CB6 - hlcoord 5, 4 - ld d, $06 - ld e, $7E - ld b, d - ld c, e - ld d, $00 - add hl, de -.loop - xor a - ldh [hBGMapMode], a - push hl - push bc -.innerLoop - ;pans all the tiles onscreen to the right one - ld a, [hl+] - ld [hl-], a - dec hl - dec c - jr nz, .innerLoop - - call WaitBGMap - pop bc - pop hl - inc hl - dec b ; passed c - how many tiles right to pan? - jr nz, .loop - ret - -PanPortraitLeft:: ; 5CD7 - hlcoord 12, 4 - ld b, $06 - ld c, $7E -.loop - xor a - ldh [hBGMapMode], a - push hl - push bc -.innerloop - ld a, [hl-] - ld [hl+], a - inc hl - dec c - jr nz, .innerloop - - call WaitBGMap - pop bc - pop hl - inc hl - dec b - jr nz, .loop - ret - -MenuCallSettings:: ; 5CF3 - call SettingsScreen - ret - -FadeInIntroPic: ; 5CF7 - ld hl, IntroFadePalettes - ld b, 6 -.next - ld a, [hl+] - ldh [rBGP], a - ld c, 10 - call DelayFrames - dec b - jr nz, .next - ret - -IntroFadePalettes: - db %01010100 - db %10101000 - db %11111100 - db %11111000 - db %11110100 - db %11100100 - -MovePicLeft: ; 5D0E - ld a, 119 - ldh [hWX], a - call DelayFrame - - ld a, %11100100 - ldh [rBGP], a -.next - call DelayFrame - ldh a, [hWX] - sub 8 - cp $FF - ret z - ldh [hWX], a - jr .next - -IntroDisplayPicCenteredOrUpperRight:: ; 5D27 -; b = bank -; de = address of compressed pic -; c: 0 = centred, non-zero = upper-right - ld a, c - and a - hlcoord 13, 4 - jr nz, .skip - hlcoord 6, 4 -.skip - push hl - ld a, b - call UncompressSpriteFromDE - ld a, $00 - call OpenSRAM - ld hl, sSpriteBuffer1 - ld de, sSpriteBuffer0 - ld bc, DOUBLESPRITEBUFFERSIZE - call CopyBytes - call CloseSRAM - ld de, VRAM_Begin + $1000 - call InterlaceMergeSpriteBuffers - pop hl - xor a - ldh [hGraphicStartTile], a - ld bc, $0707 - predef PlaceGraphic - ret - -LoadStartingSprites: ; 5D5D - ld de, GoldSpriteGFX - lb bc, BANK(GoldSpriteGFX), $0C - ld hl, VRAM_Begin - call Request2bpp - ld hl, wVirtualOAM - ld de, GameStartSprites - ld c, $04 -.loop - ld a, [de] - inc de - ld [hl+], a - ld a, [de] - inc de - ld [hl+], a - ld a, [de] - inc de - ld [hl+], a - xor a - ld [hl+], a - dec c - jr nz, .loop - ret - -GameStartSprites: ; 5D80 - db $50, $48, $00 - db $50, $50, $01 - db $58, $48, $02 - db $58, $50, $03 - -; 5D8C \ No newline at end of file +; 558D \ No newline at end of file -- cgit v1.2.3 From 147d0964d8d8cddc4749f301692d495cd9b6f49a Mon Sep 17 00:00:00 2001 From: Tauwasser Date: Sun, 24 Jun 2018 23:09:15 +0200 Subject: hram: rename hTextErrno to hEventID Signed-off-by: Tauwasser --- home/text.asm | 2 +- hram.asm | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/home/text.asm b/home/text.asm index b3cd75c..d528d08 100644 --- a/home/text.asm +++ b/home/text.asm @@ -232,7 +232,7 @@ NullChar:: ; 00:0f66 ret .Text: - deciram hTextErrno, 1, 2 + deciram hEventID, 1, 2 text "エラー" done diff --git a/hram.asm b/hram.asm index 676a6e5..9d8da3f 100644 --- a/hram.asm +++ b/hram.asm @@ -66,8 +66,8 @@ UNION hTextBoxCursorBlinkInterval:: ds 2 ; ffaf NEXTU - ds 1 ; TODO -hTextErrno:: db ; ffb0 +hEventCollisionException:: db ; ffaf +hEventID:: db ;; ffb0 NEXTU -- cgit v1.2.3 From 57481cc9421d2ea830480d3c1cb5b9f5c7d907aa Mon Sep 17 00:00:00 2001 From: Tauwasser Date: Sun, 24 Jun 2018 23:10:16 +0200 Subject: home/copy2: rename Function0d02 to RedrawPlayerSprite Signed-off-by: Tauwasser --- engine/events/field_moves.asm | 2 +- home/copy2.asm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/engine/events/field_moves.asm b/engine/events/field_moves.asm index 49729d2..f6e53a3 100755 --- a/engine/events/field_moves.asm +++ b/engine/events/field_moves.asm @@ -248,7 +248,7 @@ SurfScript: ; 03:5145 call MenuTextBoxBackup ld a, PLAYER_SURF ld [wPlayerState], a - call Function0d02 + call RedrawPlayerSprite call PlayMapMusic call MovePlayerIntoWater call Function1fea diff --git a/home/copy2.asm b/home/copy2.asm index 9baad62..7274d8d 100644 --- a/home/copy2.asm +++ b/home/copy2.asm @@ -2,7 +2,7 @@ INCLUDE "constants.asm" SECTION "Video Copy functions", ROM0[$0D02] -Function0d02:: +RedrawPlayerSprite:: jpab Function14000 LoadFont:: ; 00:0d0a -- cgit v1.2.3 From 906ea8bdfcf024cb5011948a319764047f8fa41f Mon Sep 17 00:00:00 2001 From: Tauwasser Date: Sun, 24 Jun 2018 23:15:07 +0200 Subject: engine: disassemble player movement (WIP) Signed-off-by: Tauwasser --- constants.asm | 2 + constants/collision_constants.asm | 128 ++++ constants/metatile_constants.asm | 32 + data/collision/collision_type_table.bin | Bin 0 -> 256 bytes engine/overworld/player_movement.asm | 1115 +++++++++++++++++++++++++++++++ home/map.asm | 2 +- shim.sym | 1 - wram.asm | 9 +- 8 files changed, 1286 insertions(+), 3 deletions(-) create mode 100644 constants/collision_constants.asm create mode 100644 constants/metatile_constants.asm create mode 100644 data/collision/collision_type_table.bin create mode 100644 engine/overworld/player_movement.asm diff --git a/constants.asm b/constants.asm index c559622..9da5ddc 100644 --- a/constants.asm +++ b/constants.asm @@ -24,6 +24,8 @@ INCLUDE "constants/landmark_constants.asm" INCLUDE "constants/map_constants.asm" INCLUDE "constants/map_setup_constants.asm" INCLUDE "constants/tileset_constants.asm" +INCLUDE "constants/collision_constants.asm" +INCLUDE "constants/metatile_constants.asm" INCLUDE "constants/map_data_constants.asm" INCLUDE "constants/script_constants.asm" diff --git a/constants/collision_constants.asm b/constants/collision_constants.asm new file mode 100644 index 0000000..580d397 --- /dev/null +++ b/constants/collision_constants.asm @@ -0,0 +1,128 @@ +; collision IDs are built like this: +; 76543210 +; \__/|\_/ +; | | \-- SubType +; | \---- Flag +; \------ Type +; +; What exactly flag means or if it +; means anything is up to Type. +; Old Types: +; ??? +; New Types: +; 0 - Regular 8 - ??? +; 1 - Trees, Grass etc. 9 - Special Talk Action +; 2 - Water A - Jump Action +; 3 - Water 2 B - unused +; 4 - Land C - unused +; 5 - Land 2 D - unused +; 6 - ??? E - unused +; 7 - Warps F - unused + +COLLISION_TYPE_MASK EQU $f0 +COLLISION_SUBTYPE_MASK EQU $07 +COLLISION_WATER_SUBTYPE_MASK EQU $03 + +COLLISION_FLAG EQU $08 + +; old collision constants + +OLD_COLLISION_TYPE_REGULAR EQU $00 +OLD_COLLISION_TYPE_SCENERY EQU $10 +OLD_COLLISION_TYPE_WATER EQU $20 +OLD_COLLISION_TYPE_WATER2 EQU $40 + +OLD_COLLISION_WALKABLE EQU $00 +OLD_COLLISION_SOLID EQU $01 +OLD_COLLISION_FLOOR EQU $03 +OLD_COLLISION_WALL EQU $04 + +OLD_COLLISION_LEDGE EQU $11 + +OLD_COLLISION_WATER2_S EQU $40 + +OLD_COLLISION_ROCK EQU $51 + +OLD_COLLISION_CARPED EQU $60 +OLD_COLLISION_DOOR EQU $61 + +OLD_COLLISION_SIGNPOST EQU $70 +OLD_COLLISION_SHOP_SIGN EQU $71 +OLD_COLLISION_MART_ITEM EQU $72 +OLD_COLLISION_COUNTER EQU $73 + +OLD_COLLISION_CUT_TREE EQU $80 +OLD_COLLISION_GRASS EQU $82 + +; new collision constants + +COLLISION_TYPE_REGULAR EQU $00 +COLLISION_TYPE_SCENERY EQU $10 +COLLISION_TYPE_WATER EQU $20 +COLLISION_TYPE_WATER2 EQU $30 +COLLISION_TYPE_LAND EQU $40 +COLLISION_TYPE_LAND2 EQU $50 +COLLISION_TYPE_UNK EQU $60 +COLLISION_TYPE_WARPS EQU $70 +COLLISION_TYPE_UNKN2 EQU $80 +COLLISION_TYPE_SPECIAL EQU $90 +COLLISION_TYPE_JUMP EQU $A0 + +COLLISION_WALKABLE EQU $00 +COLLISION_SOLID EQU $07 +COLLISION_CUT_TREE EQU $12 +COLLISION_GRASS EQU $18 + +; water collisions + +COLLISION_WATER EQU $21 +COLLISION_WATERFALL EQU $22 +COLLISION_WATER_SOLID EQU $27 + +; water collisions 2 +COLLISION_WATER2_E EQU $30 +COLLISION_WATER2_W EQU $31 +COLLISION_WATER2_N EQU $32 +COLLISION_WATER2_S EQU $33 +; $34..$37 will behave like COLLISION_WATER2_E..COLLISION_WATER2_S + +; land collisions +COLLISION_LAND_SLOW EQU $40 +COLLISION_LAND_E EQU $41 +COLLISION_LAND_W EQU $42 +COLLISION_LAND_N EQU $43 +COLLISION_LAND_S EQU $44 +; $45..$47 will behave like COLLISION_LAND_E + +; land collisions 2 +COLLISION_LAND2_E EQU $50 +COLLISION_LAND2_W EQU $51 +COLLISION_LAND2_N EQU $52 +COLLISION_LAND2_S EQU $53 +; $54..$57 will behave like COLLISION_LAND2_E + + +; warp collisions +COLLISION_CARPET EQU $70 +COLLISION_DOOR EQU $71 +COLLISION_STEPS EQU $72 + +; special collisions +COLLISION_COUNTER EQU $90 +COLLISION_BOOKCASE EQU $91 +COLLISION_PC EQU $93 +COLLISION_RADIO EQU $94 +COLLISION_SIGNPOST EQU $95 +COLLISION_STRAIGHT_SIGNPOST EQU $97 + +; jump collisions +; perform jump in marked direction, else +; regular walking +COLLISION_JUMP_E EQU $a0 +COLLISION_JUMP_W EQU $a1 +COLLISION_JUMP_N EQU $a2 +COLLISION_JUMP_S EQU $a3 +COLLISION_JUMP_SE EQU $a4 +COLLISION_JUMP_SW EQU $a5 +COLLISION_JUMP_NE EQU $a6 +COLLISION_JUMP_NW EQU $a7 diff --git a/constants/metatile_constants.asm b/constants/metatile_constants.asm new file mode 100644 index 0000000..8d86ac5 --- /dev/null +++ b/constants/metatile_constants.asm @@ -0,0 +1,32 @@ + +; all outside tileset share certain metatiles +; this is used in overworld code when editing the map +; D - dirt +; L - lawn +; T - small tree +; C - cut tree +; G - grass +METATILE_GROUND EQU $01 ; DD + ; DD +METATILE_LAWN EQU $04 ; LL + ; LL +METATILE_SMALL_TREES_N EQU $25 ; TT + ; LL +METATILE_SMALL_TREES_W EQU $28 ; TL + ; TL +METATILE_SMALL_TREES_E EQU $2a ; LT + ; LT +METATILE_CUT_SE_TREES_N EQU $30 ; TT + ; LC +METATILE_CUT_NW_TREES_E EQU $31 ; CT + ; LT +METATILE_CUT_NE_TREE_NW EQU $32 ; TC + ; LL +METATILE_CUT_NE_TREE_SE EQU $33 ; LC + ; LT +METATILE_SMALL_TREE_NW EQU $34 ; TL + ; LL +METATILE_SMALL_TREE_SE EQU $35 ; TL + ; LL +METATILE_GRASS EQU $3b ; GG + ; GG diff --git a/data/collision/collision_type_table.bin b/data/collision/collision_type_table.bin new file mode 100644 index 0000000..c70e2bd Binary files /dev/null and b/data/collision/collision_type_table.bin differ diff --git a/engine/overworld/player_movement.asm b/engine/overworld/player_movement.asm new file mode 100644 index 0000000..44938aa --- /dev/null +++ b/engine/overworld/player_movement.asm @@ -0,0 +1,1115 @@ +INCLUDE "constants.asm" + +SECTION "Player Movement", ROMX[$4000], BANK[$3] + +OverworldMovementCheck:: + jp _OverworldMovementCheck + +UnusedOverworldMovementCheck:: + ld a, $01 + ldh [hEventCollisionException], a + ld a, [wPlayerDirection] + and a + jr z, _SetPlayerIdle ; player movement is disabled + ldh a, [hJoyState] + ld d, a + ld hl, wce63 + bit 1, [hl] + jr z, .skip_debug_move + bit B_BUTTON_F, d + jp nz, CheckMovementDebug +.skip_debug_move + ld a, [wPlayerState] + cp PLAYER_SKATE + jp z, OldCheckMovementSkateboard + cp PLAYER_SURF + jp z, OldCheckMovementSurf + jp CheckMovementWalkOrBike +_SetPlayerIdle: + ld a, $2a +_SetPlayerAnimation: + ld [wcb77], a + ld a, [wPlayerLastMapX] + ld [wPlayerStandingMapX], a + ld a, [wPlayerLastMapY] + ld [wPlayerStandingMapY], a + and a + ret + +CheckMovementWalkOrBike: + call _CheckMovementWalkOrBike + jp _SetPlayerAnimation + +_CheckMovementWalkOrBike: + ld a, d + and (D_DOWN | D_UP | D_LEFT | D_RIGHT) + jp z, .done + ld a, d + bit D_DOWN_F, a + jp nz, .moveDown + bit D_UP_F, a + jp nz, .moveUp + bit D_LEFT_F, a + jp nz, .moveLeft + bit D_RIGHT_F, a + jr nz, .moveRight +.done: + ld a, $2a + ret +.moveRight: + ld a, [wPlayerLastMapX] + inc a + ld [wPlayerStandingMapX], a + call _CheckPlayerObjectCollision + jr c, .faceRight + call IsPlayerCollisionTileSolid + jr nc, .canMoveRight + jr .faceRight +.canMoveRight + ld a, [wPlayerState] + cp PLAYER_BIKE + ld a, $0f + ret z + ld a, $0b + ret +.faceRight: + ld a, $03 + ret + +.moveLeft: + ld a, [wPlayerLastMapX] + dec a + ld [wPlayerStandingMapX], a + call _CheckPlayerObjectCollision + jr c, .faceLeft + call IsPlayerCollisionTileSolid + jr nc, .canMoveLeft + jr .faceLeft +.canMoveLeft + ld a, [wPlayerState] + cp PLAYER_BIKE + ld a, $0e + ret z + ld a, $0a + ret +.faceLeft: + ld a, $02 + ret + +.moveDown: + ld a, [wPlayerLastMapY] + inc a + ld [wPlayerStandingMapY], a + call _CheckPlayerObjectCollision + jr c, .faceDown + call IsPlayerCollisionTileSolid + jr nc, .canMoveDown + cp OLD_COLLISION_LEDGE + jr nz, .faceDown +.jumpDown: + ld a, $18 + ret +.canMoveDown + ld a, [wPlayerState] + cp PLAYER_BIKE + ld a, $0c + ret z + ld a, $08 + ret +.faceDown: + ld a, $00 + ret + +.moveUp: + ld a, [wPlayerLastMapY] + dec a + ld [wPlayerStandingMapY], a + call _CheckPlayerObjectCollision + jr c, .faceUp + call IsPlayerCollisionTileSolid + jr nc, .canMoveUp + jr .faceUp +.canMoveUp + ld a, [wPlayerState] + cp PLAYER_BIKE + ld a, $0d + ret z + ld a, $09 + ret +.faceUp: + ld a, $01 + ret + +CheckMovementDebug:: + ld a, d + call _CheckMovementDebug + jp _SetPlayerAnimation + +_CheckMovementDebug: + bit D_DOWN_F, a + jr nz, .moveDown + bit D_UP_F, a + jr nz, .moveUp + bit D_LEFT_F, a + jr nz, .moveLeft + bit D_RIGHT_F, a + jr nz, .moveRight +.idle: + ld a, $2a + ret +.moveDown: + ld a, [wTileDown] + cp $ff + ld a, $0c + ret nz + ld a, $19 + ret +.moveUp: + ld a, [wTileUp] + cp $ff + ld a, $0d + ret nz + ld a, $18 + ret +.moveLeft: + ld a, [wTileLeft] + cp $ff + ld a, $0e + ret nz + ld a, $1b + ret +.moveRight: + ld a, [wTileRight] + cp $ff + ld a, $0f + ret nz + ld a, $1a + ret + +OldCheckMovementSkateboard:: + call _OldCheckMovementSkateboard + jp _SetPlayerAnimation + +_OldCheckMovementSkateboard: + ld a, [wSkatingDirection] + cp $ff + jp z, .skateStand + push de + ld e, a + ld d, $00 + ld hl, .skateMovementTable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + pop de + jp hl +.skateMovementTable: + dw .skateDown + dw .skateUp + dw .skateLeft + dw .skateRight + +.skateStand: + ld a, d + and (D_DOWN | D_UP | D_LEFT | D_RIGHT) + jp z, .done + bit D_DOWN_F, d + jp nz, .skateDown + bit D_UP_F, d + jp nz, .skateUp + bit D_LEFT_F, d + jp nz, .skateLeft + bit D_RIGHT_F, d + jp nz, .skateRight +.done: + ld a, $ff + ld [wSkatingDirection], a + ld a, $2a + ret + +.skateDown: + ld a, [wPlayerLastMapY] + inc a + ld [wPlayerStandingMapY], a + ld a, $00 + ld [wSkatingDirection], a + call _CheckPlayerObjectCollision + jr c, .skateDownCollision + call IsPlayerCollisionTileSolid + jr nc, .canSkateDown + cp OLD_COLLISION_LEDGE + jr z, .skateJumpDown + cp (OLD_COLLISION_ROCK | COLLISION_FLAG) + jr nz, .skateDownCollision +.skateJumpDown: + ld a, $1c + ret +.canSkateDown: + call OldIsTileCollisionGrass + jr z, .skateDownSlowly + ld a, $0c + ret +.skateDownSlowly: + ld a, $08 + ret +.skateDownCollision: + ld a, $ff + ld [wSkatingDirection], a + ld a, $00 + ret + +.skateUp: + ld a, [wPlayerLastMapY] + dec a + ld [wPlayerStandingMapY], a + ld a, $01 + ld [wSkatingDirection], a + call _CheckPlayerObjectCollision + jr c, .skateUpCollision + call IsPlayerCollisionTileSolid + jr nc, .canSkateUp + cp $59 + jr nz, .skateUpCollision +.skateJumpUp: + ld a, $1d + ret +.canSkateUp: + call OldIsTileCollisionGrass + jr z, .skateUpSlowly + ld a, $0d + ret +.skateUpSlowly: + ld a, $09 + ret +.skateUpCollision: + ld a, $ff + ld [wSkatingDirection], a + ld a, $01 + ret + +.skateLeft: + ld a, [wPlayerLastMapX] + dec a + ld [wPlayerStandingMapX], a + ld a, $02 + ld [wSkatingDirection], a + call _CheckPlayerObjectCollision + jr c, .skateLeftCollision + call IsPlayerCollisionTileSolid + jr nc, .canSkateLeft + cp $59 + jr nz, .skateLeftCollision +.skateJumpLeft: + ld a, $1e + ret +.canSkateLeft: + call OldIsTileCollisionGrass + jr z, .skateLeftSlowly + ld a, $0e + ret +.skateLeftSlowly: + ld a, $0a + ret +.skateLeftCollision: + ld a, $ff + ld [wSkatingDirection], a + ld a, $02 + ret + +.skateRight: + ld a, [wPlayerLastMapX] + inc a + ld [wPlayerStandingMapX], a + ld a, $03 + ld [wSkatingDirection], a + call _CheckPlayerObjectCollision + jr c, .skateRightCollision + call IsPlayerCollisionTileSolid + jr nc, .canSkateRight + cp $59 + jr nz, .skateRightCollision +.skateJumpRight: + ld a, $1f + ret +.canSkateRight: + call OldIsTileCollisionGrass + jr z, .skateRightSlowly + ld a, $0f + ret +.skateRightSlowly: + ld a, $0b + ret +.skateRightCollision: + ld a, $ff + ld [wSkatingDirection], a + ld a, $03 + ret + +OldIsTileCollisionGrass:: +; Check whether collision ID in a is +; grass +; Result: +; nz - not grass +; z - grass + cp $82 + ret z + cp $83 + ret z + cp $8a + ret z + cp $8b + ret + +OldCheckMovementSurf:: + call _OldCheckMovementSurf + jp _SetPlayerAnimation + +_OldCheckMovementSurf: + ld a, d + and (D_DOWN | D_UP | D_LEFT | D_RIGHT) + bit D_DOWN_F, a + jp nz, .trySurfDown + bit D_UP_F, a + jp nz, .trySurfUp + bit D_LEFT_F, a + jp nz, .trySurfLeft + bit D_RIGHT_F, a + jr nz, .trySurfRight +.idle: + ld a, $2a + ret + +.trySurfDown: + ld a, [wPlayerLastMapY] + inc a + ld [wPlayerStandingMapY], a + call _CheckPlayerObjectCollision + jr c, .faceDown + call IsPlayerCollisionTileSolid + jr nc, .surfDownLand ; FIXME: This assumes cut-trees are solid, which they aren't. + ; You can walk into them from water because of this. + call OldIsTileCollisionWater + jr c, .faceDown +.surfDown: + ld a, $08 + ret +.faceDown: + ld a, $00 + ret +.surfDownLand: + call SetPlayerStateWalk + ld a, $04 + ret + +.trySurfUp: + ld a, [wPlayerLastMapY] + dec a + ld [wPlayerStandingMapY], a + call _CheckPlayerObjectCollision + jr c, .faceUp + call IsPlayerCollisionTileSolid + jr nc, .surfUpLand ; FIXME: This assumes cut-trees are solid, which they aren't. + ; You can walk into them from water because of this. + call OldIsTileCollisionWater + jr c, .faceUp +.surfUp: + ld a, $09 + ret +.faceUp: + ld a, $01 + ret +.surfUpLand: + call SetPlayerStateWalk + ld a, $05 + ret + +.trySurfLeft: + ld a, [wPlayerLastMapX] + dec a + ld [wPlayerStandingMapX], a + call _CheckPlayerObjectCollision + jr c, .faceLeft + call IsPlayerCollisionTileSolid + jr nc, .surfLeftLand ; FIXME: This assumes cut-trees are solid, which they aren't. + ; You can walk into them from water because of this. + call OldIsTileCollisionWater + jr c, .faceLeft +.surfLeft: + ld a, $0a + ret +.faceLeft: + ld a, $02 + ret +.surfLeftLand + call SetPlayerStateWalk + ld a, $06 + ret + +.trySurfRight + ld a, [wPlayerLastMapX] + inc a + ld [wPlayerStandingMapX], a + call _CheckPlayerObjectCollision + jr c, .faceRight + call IsPlayerCollisionTileSolid + jr nc, .surfRightLand ; FIXME: This assumes cut-trees are solid, which they aren't. + ; You can walk into them from water because of this. + call OldIsTileCollisionWater + jr c, .faceRight +.surfRight: + ld a, $0b + ret +.faceRight: + ld a, $03 + ret +.surfRightLand + call SetPlayerStateWalk + ld a, $07 + ret + +OldIsTileCollisionWater:: ; c2ee (3:42ee) +; Check if collision ID in a is water +; Input: +; a - collision ID +; Result: +; c - water +; nc - not water + and COLLISION_TYPE_MASK + cp OLD_COLLISION_TYPE_WATER + ret z + cp OLD_COLLISION_TYPE_WATER2 + ret z + scf + ret + +SetPlayerStateWalk:: + push bc + ld a, PLAYER_NORMAL + ld [wPlayerState], a + call RedrawPlayerSprite + pop bc + ret + +IsPlayerCollisionTileSolid:: +; Return whether the collision under player's feet +; is solid/sometimes solid or non-solid. +; Clobbers: a +; Results: +; a - collision ID under player's feet +; nc - non-solid +; c - solid/sometimes solid + push de + ld bc, wPlayerStruct + ld hl, $775a + ld a, $01 + call FarCall_hl + ld a, e + pop de + ret + +_CheckPlayerObjectCollision:: +; Check whether player object currentl +; collides with any other object. +; Result: +; nc - no collision +; c - collision + push de + ld hl, $7894 + ld a, $01 + call FarCall_hl + pop de + ret nc + jp _CheckCompanionObjectCollision + +_CheckCompanionObjectCollision:: +; Marks the object struct pointed to by hl +; as having collided with player object. +; If object struct (as identified by hEventID) +; is companion, cancel collision on 5th frames. +; Result: +; nc - no collision +; c - collision + ld hl, (wPlayerFlags + 1) - wPlayerStruct + add hl, bc + set 1, [hl] ; mark object as having collided with player + ldh a, [hEventID] + cp $02 + jr z, .isCompanion + xor a + ld [wCompanionCollisionFrameCounter], a + scf + ret +.isCompanion + ld a, [wCompanionCollisionFrameCounter] + inc a + cp $05 + ld [wCompanionCollisionFrameCounter], a + jr z, .cancelCollision + scf + ret +.cancelCollision + xor a + ld [wCompanionCollisionFrameCounter], a + ret + +_OverworldMovementCheck:: + ld a, $01 + ldh [hEventCollisionException], a + ld a, [wPlayerDirection] + and a + jp z, _SetPlayerIdle + ldh a, [hJoyState] + ld d, a + ld hl, wce63 + bit 1, [hl] + jr z, .skip_debug_move + bit B_BUTTON_F, d + jp nz, CheckMovementDebug +.skip_debug_move + call .checkMovementRelease + jp _SetPlayerAnimation + +.checkMovementRelease: + ld a, [wPlayerState] + cp PLAYER_SKATE + jp z, OldCheckMovementSkateboard ; FIXME: OldCheckMovementSkateboard already calls _SetPlayerAnimation + ; The skateboard doesn't work, because it uses the current + ; coordinate as player animation. + cp PLAYER_SURF + jp z, CheckMovementSurf + jp CheckMovementWalk + +CheckMovementWalk:: + ld a, [wPlayerStandingTile] + swap a + and LOW((COLLISION_TYPE_MASK >> 4) | (COLLISION_TYPE_MASK << 4)) + ld hl, .walkingCollisionTable + jp CallJumptable + +.walkingCollisionTable: + dw CheckMovementWalkRegular ; regular + dw CheckMovementWalkSolid ; trees, grass, etc. + dw CheckMovementWalkSolid ; water + dw CheckMovementWalkSolid ; water current + dw CheckMovementWalkLand ; slowdown and fixed movement + dw CheckMovementWalkLand2 ; fixed movement + dw CheckMovementWalkRegular ; ??? + dw CheckMovementWalkWarp ; warps + dw CheckMovementWalkMisc ; ??? + dw CheckMovementWalkSpecial ; counters, signposts, book cases + dw CheckMovementWalkJump ; jumps + dw CheckMovementWalkRegular ; unused -- movement prohibit not yet implemented + dw CheckMovementWalkRegular ; unused + dw CheckMovementWalkRegular ; unused + dw CheckMovementWalkRegular ; unused + dw CheckMovementWalkRegular ; unused + +_MovementDone: + ld a, $2a + ret + +CheckMovementWalkSolid:: + jp CheckMovementWalkRegular + +CheckMovementWalkLand:: + ld a, [wPlayerStandingTile] + and COLLISION_SUBTYPE_MASK + jr nz, .slowdown + call CheckMovementWalkRegular + call .slowMovementDown + ret +.slowdown + ld b, $08 + cp (COLLISION_LAND_S & COLLISION_SUBTYPE_MASK) + jr z, .slowdownDone + ld b, $09 + cp (COLLISION_LAND_N & COLLISION_SUBTYPE_MASK) + jr z, .slowdownDone + ld b, $0a + cp (COLLISION_LAND_W & COLLISION_SUBTYPE_MASK) + jr z, .slowdownDone + ld b, $0b + cp (COLLISION_LAND_E & COLLISION_SUBTYPE_MASK) + jr z, .slowdownDone + ; fall-through --> map other codes to COLLISION_LAND_E +.slowdownDone + ld a, b + ret +.slowMovementDown: + ld b, $04 + cp $08 + jr z, .slowMovementDownDone + ld b, $05 + cp $09 + jr z, .slowMovementDownDone + ld b, $06 + cp $0a + jr z, .slowMovementDownDone + ld b, $07 + cp $0b + jr z, .slowMovementDownDone + ret +.slowMovementDownDone + ld a, b + ret + +CheckMovementWalkLand2:: + ld a, [wPlayerStandingTile] + and COLLISION_SUBTYPE_MASK + ld b, $08 + cp (COLLISION_LAND2_S & COLLISION_SUBTYPE_MASK) + jr z, .done + ld b, $09 + cp (COLLISION_LAND2_N & COLLISION_SUBTYPE_MASK) + jr z, .done + ld b, $0a + cp (COLLISION_LAND2_W & COLLISION_SUBTYPE_MASK) + jr z, .done + ld b, $0b + cp (COLLISION_LAND2_E & COLLISION_SUBTYPE_MASK) + jr z, .done + ; fall-through --> map other codes to COLLISION_LAND2_E +.done + ld a, b + ret + +UnusedCheckMovementWalk60:: + jp CheckMovementWalkRegular + +CheckMovementWalkWarp:: + ld a, [wPlayerStandingTile] + and COLLISION_SUBTYPE_MASK + jr z, .exitWarpDpadDirection + cp $01 + jr z, .exitWarpDownNoBoundsCheck + ld a, [wPlayerStandingTile] + cp $7a + jr z, .exitWarpDownNoBoundsCheck + jp CheckMovementWalkRegular +.exitWarpDownNoBoundsCheck + ld a, $08 + ret +.exitWarpDpadDirection + ldh a, [hJoyState] + bit D_DOWN_F, a + jr nz, .exitWarpDown + bit D_UP_F, a + jr nz, .exitWarpUp + bit D_LEFT_F, a + jr nz, .exitWarpLeft + bit D_RIGHT_F, a + jr nz, .exitWarpRight + jp _MovementDone +.exitWarpDown + ld a, [wTileDown] + cp $ff + jp nz, CheckMovementWalkRegular + call z, _ReportMovementOutOfBounds +.faceDown: + ld a, $00 + ret +.exitWarpUp + ld a, [wTileUp] + cp $ff + jp nz, CheckMovementWalkRegular + call z, _ReportMovementOutOfBounds +.faceUp: + ld a, $01 + ret +.exitWarpLeft + ld a, [wTileLeft] + cp $ff + jp nz, CheckMovementWalkRegular + call z, _ReportMovementOutOfBounds +.faceLeft: + ld a, $02 + ret +.exitWarpRight + ld a, [wTileRight] + cp $ff + jp nz, CheckMovementWalkRegular + call z, _ReportMovementOutOfBounds +.faceRight: + ld a, $03 + ret + +_ReportMovementOutOfBounds:: + ret + +CheckMovementWalkMisc:: + jp CheckMovementWalkRegular + +CheckMovementWalkSpecial:: + jp CheckMovementWalkRegular + +CheckMovementWalkRegular:: + ldh a, [hJoyState] + bit D_DOWN_F, a + jp nz, TryWalkDown + bit D_UP_F, a + jp nz, TryWalkUp + bit D_LEFT_F, a + jp nz, TryWalkLeft + bit D_RIGHT_F, a + jp nz, TryWalkRight + jp _MovementDone + +CheckMovementWalkJump: + ldh a, [hJoyState] + bit D_DOWN_F, a + jr nz, .checkJumpDown + bit D_UP_F, a + jr nz, .checkJumpUp + bit D_LEFT_F, a + jr nz, .checkJumpLeft + bit D_RIGHT_F, a + jr nz, .checkJumpRight + jp _MovementDone +.checkJumpDown: + ld a, [wPlayerStandingTile] + and COLLISION_SUBTYPE_MASK + cp (COLLISION_JUMP_S & COLLISION_SUBTYPE_MASK) + jr z, .jumpDown + cp (COLLISION_JUMP_SE & COLLISION_SUBTYPE_MASK) + jr z, .jumpDown + cp (COLLISION_JUMP_SW & COLLISION_SUBTYPE_MASK) + jr z, .jumpDown + jp TryWalkDown +.jumpDown: + ld a, $18 + ret +.checkJumpUp: + ld a, [wPlayerStandingTile] + and COLLISION_SUBTYPE_MASK + cp (COLLISION_JUMP_N & COLLISION_SUBTYPE_MASK) + jr z, .jumpUp + cp (COLLISION_JUMP_NE & COLLISION_SUBTYPE_MASK) + jr z, .jumpUp + cp (COLLISION_JUMP_NW & COLLISION_SUBTYPE_MASK) + jr z, .jumpUp + jp TryWalkUp +.jumpUp: + ld a, $19 + ret +.checkJumpLeft: + ld a, [wPlayerStandingTile] + and COLLISION_SUBTYPE_MASK + cp (COLLISION_JUMP_W & COLLISION_SUBTYPE_MASK) + jr z, .jumpLeft + cp (COLLISION_JUMP_SW & COLLISION_SUBTYPE_MASK) + jr z, .jumpLeft + cp (COLLISION_JUMP_NW & COLLISION_SUBTYPE_MASK) + jr z, .jumpLeft + jp TryWalkLeft +.jumpLeft: + ld a, $1a + ret +.checkJumpRight + ld a, [wPlayerStandingTile] + and COLLISION_SUBTYPE_MASK + cp (COLLISION_JUMP_E & COLLISION_SUBTYPE_MASK) + jr z, .jumpRight + cp (COLLISION_JUMP_SE & COLLISION_SUBTYPE_MASK) + jr z, .jumpRight + cp (COLLISION_JUMP_NE & COLLISION_SUBTYPE_MASK) + jr z, .jumpRight + jp TryWalkRight +.jumpRight + ld a, $1b + ret + +TryWalkDown:: + ld d, 0 + ld e, 1 + call _CheckObjectCollision + jr c, .faceDown + ld a, [wTileDown] + call CheckCollisionSolid + jr c, .faceDown +.moveDown: + ld a, $08 + ret +.faceDown: + ld a, $00 + ret + +TryWalkUp:: + ld d, 0 + ld e, -1 + call _CheckObjectCollision + jr c, .faceUp + ld a, [wTileUp] + call CheckCollisionSolid + jr c, .faceUp +.moveUp: + ld a, $09 + ret +.faceUp: + ld a, $01 + ret + +TryWalkLeft:: + ld d, -1 + ld e, 0 + call _CheckObjectCollision + jr c, .faceLeft + ld a, [wTileLeft] + call CheckCollisionSolid + jr c, .faceLeft +.moveLeft: + ld a, $0a + ret +.faceLeft: + ld a, $02 + ret + +TryWalkRight:: + ld d, 1 + ld e, 0 + call _CheckObjectCollision + jr c, .faceRight + ld a, [wTileRight] + call CheckCollisionSolid + jr c, .faceRight +.moveRight: + ld a, $0b + ret +.faceRight: + ld a, $03 + ret + +CheckMovementSurf:: + ld a, [wPlayerStandingTile] + swap a + and LOW((COLLISION_TYPE_MASK >> 4) | (COLLISION_TYPE_MASK << 4)) + ld hl, .surfCollisionTable + jp CallJumptable + +.surfCollisionTable + dw CheckMovementSurfRegular + dw CheckMovementSurfRegular + dw CheckMovementSurfWater + dw CheckMovementSurfWater2 + dw CheckMovementSurfRegular + dw CheckMovementSurfRegular + dw CheckMovementSurfRegular + dw CheckMovementSurfRegular + dw CheckMovementSurfRegular + dw CheckMovementSurfRegular + dw CheckMovementSurfRegular + dw CheckMovementSurfRegular + dw CheckMovementSurfRegular + dw CheckMovementSurfRegular + dw CheckMovementSurfRegular + dw CheckMovementSurfRegular + +CheckMovementSurfRegular:: + ldh a, [hJoyState] + bit D_DOWN_F, a + jp nz, TrySurfDown + bit D_UP_F, a + jp nz, TrySurfUp + bit D_LEFT_F, a + jp nz, TrySurfLeft + bit D_RIGHT_F, a + jp nz, TrySurfRight + jp _MovementDone + +CheckMovementSurfWater:: + ld a, [wPlayerStandingTile] + and COLLISION_SUBTYPE_MASK + cp (COLLISION_WATERFALL & COLLISION_SUBTYPE_MASK) + jr nz, CheckMovementSurfRegular +.waterfall: + ld a, $0c + ret + +CheckMovementSurfWater2:: + ld a, [wPlayerStandingTile] + and COLLISION_WATER_SUBTYPE_MASK + ld d, $0b + jr z, .done ; COLLISION_WATER2_E + ld d, $0a + cp (COLLISION_WATER2_W & COLLISION_WATER_SUBTYPE_MASK) + jr z, .done + ld d, $09 + cp (COLLISION_WATER2_N & COLLISION_WATER_SUBTYPE_MASK) + jr z, .done + ld d, $08 + cp (COLLISION_WATER2_S & COLLISION_WATER_SUBTYPE_MASK) + jr z, .done + ; fall-through --> no aliasing due to mask +.done + ld a, d + ret + +TrySurfDown: + ld d, 0 + ld e, 1 + call _CheckObjectCollision + jr c, .faceDown + ld a, [wTileDown] + call CheckCollisionSometimesSolid + jr c, .faceDown ; FIXME: This assumes cut-trees are solid, which they aren't. + ; You can walk into them from water because of this. + call nz, SurfDismount + ld a, $08 + ret +.faceDown: + ld a, $00 + ret + +TrySurfUp: + ld d, 0 + ld e, -1 + call _CheckObjectCollision + jr c, .faceUp + ld a, [wTileUp] + call CheckCollisionSometimesSolid + jr c, .faceUp ; FIXME: This assumes cut-trees are solid, which they aren't. + ; You can walk into them from water because of this. + call nz, SurfDismount + ld a, $09 + ret +.faceUp: + ld a, $01 + ret + +TrySurfLeft: + ld d, -1 + ld e, 0 + call _CheckObjectCollision + jr c, .faceLeft + ld a, [wTileLeft] + call CheckCollisionSometimesSolid + jr c, .faceLeft ; FIXME: This assumes cut-trees are solid, which they aren't. + ; You can walk into them from water because of this. + call nz, SurfDismount + ld a, $0a + ret +.faceLeft: + ld a, $02 + ret + +TrySurfRight: + ld d, 1 + ld e, 0 + call _CheckObjectCollision + jr c, .faceRight + ld a, [wTileRight] + call CheckCollisionSometimesSolid + jr c, .faceRight ; FIXME: This assumes cut-trees are solid, which they aren't. + ; You can walk into them from water because of this. + call nz, SurfDismount + ld a, $0b + ret +.faceRight: + ld a, $03 + ret +SurfDismount: + jp SetPlayerStateWalk + +_CheckObjectCollision:: +; Check if coordinates relative +; to player collide with another object +; Clobbers: +; a, hl +; Input: +; de - Relative coords x, y +; Output: +; nc - no collision +; c - collision +; hEventID - Event ID of colliding event + ld a, $01 + ldh [hEventCollisionException], a + ld a, [wPlayerStandingMapX] + add d + ld d, a + ld a, [wPlayerStandingMapY] + add e + ld e, a + ld hl, $77dd + ld a, $01 + call FarCall_hl + ret nc + jp _CheckCompanionObjectCollision + +CheckCollisionSolid:: +; Checks whether collision ID in a +; is solid or not. +; Clobbers: +; hl +; Input: +; a - collision ID +; Result: +; a - collision type +; c - solid +; nc - not solid + call GetCollisionType + and a + ret z + scf + ret + +GetCollisionType:: +; Get collision type for collision ID in a +; Clobbers: hl +; Input: +; a - collision ID +; Result: +; a - collision type +; 00 - not solid +; 01 - sometimes solid (cut tree, water etc.) +; 0F - always solid + push de + ld hl, .collisionTypeTable + ld e, a + ld d, $00 + add hl, de + ld a, [hl] + pop de + ret + +.collisionTypeTable: +INCBIN "data/collision/collision_type_table.bin" + +_UnusedReturnFalse:: + xor a + ret + +_UnusedReturnTrue:: + xor a + scf + ret + +CheckCollisionSometimesSolid:: +; Checks whether collision ID in a +; is sometimes, always or never solid. +; Clobbers: +; hl +; Input: +; a - collision ID +; Result: +; c - always solid +; nc - sometimes not solid, check a +; a - result +; 00 - sometimes solid +; 01 - never solid + call GetCollisionType + cp $01 + jr z, .sometimesSolid + and a + jr z, .solid + jr .alwaysSolid +.sometimesSolid: + xor a + ret +.solid: + ld a, $01 + and a + ret +.alwaysSolid: + scf + ret diff --git a/home/map.asm b/home/map.asm index 8105781..8c03d9f 100644 --- a/home/map.asm +++ b/home/map.asm @@ -1679,7 +1679,7 @@ Function2b87:: call GetJoypad call OverworldStartButtonCheck ret nz - callab Functionc000 + callab OverworldMovementCheck call Function2ba8 jr nc, .asm_2b87 callba Function824c diff --git a/shim.sym b/shim.sym index 8390904..da80057 100644 --- a/shim.sym +++ b/shim.sym @@ -58,7 +58,6 @@ 02:528B Function928b 02:5695 CheckSGB -03:4000 Functionc000 03:47D5 SpawnPoints 03:488D Tilesets 03:54E6 Functiond4e6 diff --git a/wram.asm b/wram.asm index b196ac4..62a4a23 100644 --- a/wram.asm +++ b/wram.asm @@ -343,7 +343,10 @@ wMovementBufferObject:: db ; cc3b wMovementBuffer:: ; cc3f ds 55 -SECTION "CC9C", WRAM0[$CC9C] +SECTION "CC9A", WRAM0[$CC9A] + +wSkatingDirection:: db ; cc9a +wCompanionCollisionFrameCounter:: db ; cc9b wUnknownWordcc9c:: ; cc9c dw @@ -735,6 +738,10 @@ wRivalsName:: ds 6 ; d258 SECTION "PlayerState", WRAM0[$D264] wPlayerState:: db ; d264 +; 00 - walking +; 01 - bicycle +; 02 - skateboard +; 04 - surfing SECTION "D4AB", WRAM0[$D4A9] -- cgit v1.2.3 From 3d44a334949f387304144dbb331a4b6f74fbdb79 Mon Sep 17 00:00:00 2001 From: 2Tie Date: Sun, 24 Jun 2018 16:43:11 -0600 Subject: all the non-dummy map scripts until Silent Hill are disassebled. five left! --- Makefile | 2 +- home/map.asm | 2 +- home/map_objects.asm | 3 +- home/talk_to_npc.asm | 16 +- home/unknown_388f.asm | 2 +- maps/Map13.asm | 26 ++ maps/PlayersHouse1F.asm | 60 +++ maps/PlayersHouse2F.asm | 263 +++++++++++ maps/Route1Gate1F.asm | 55 +++ maps/Route1Gate2F.asm | 86 ++++ maps/Route1P1.asm | 75 +++ maps/Route1P2.asm | 117 +++++ maps/SilentHills.asm | 420 +++++++++++++++++ maps/SilentHouse.asm | 171 +++++++ maps/SilentLabP1.asm | 1108 +++++++++++++++++++++++++++++++++++++++++++++ maps/SilentLabP2.asm | 360 +++++++++++++++ maps/SilentPokecenter.asm | 113 +++++ shim.sym | 4 +- wram.asm | 35 +- 19 files changed, 2902 insertions(+), 16 deletions(-) create mode 100644 maps/Map13.asm create mode 100644 maps/PlayersHouse1F.asm create mode 100644 maps/PlayersHouse2F.asm create mode 100644 maps/Route1Gate1F.asm create mode 100644 maps/Route1Gate2F.asm create mode 100644 maps/Route1P1.asm create mode 100644 maps/Route1P2.asm create mode 100644 maps/SilentHills.asm create mode 100644 maps/SilentHouse.asm create mode 100644 maps/SilentLabP1.asm create mode 100644 maps/SilentLabP2.asm create mode 100644 maps/SilentPokecenter.asm diff --git a/Makefile b/Makefile index dc06ca6..19a623f 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ SHIM := shim.sym CORRECTEDROM := $(ROM:%.gb=%-correctheader.gb) rwildcard = $(foreach d, $(wildcard $1*), $(filter $(subst *, %, $2), $d) $(call rwildcard, $d/, $2)) -DIRS := home engine data audio +DIRS := home engine data audio maps OBJS := $(addprefix $(BUILD)/, gfx.o vram.o sram.o wram.o hram.o shim.o) OBJS += $(patsubst %.asm, $(BUILD)/%.o, $(call rwildcard, $(DIRS), *.asm)) diff --git a/home/map.asm b/home/map.asm index a13a2d4..e295894 100644 --- a/home/map.asm +++ b/home/map.asm @@ -470,7 +470,7 @@ Function2407:: ; 00:2407 ld [wPlayerFacing], a ld a, $0 ld d, $0 - call Function19c0 + call SetObjectFacing ret MapSetup_Connection:: ; 2439 diff --git a/home/map_objects.asm b/home/map_objects.asm index 079897a..faa4bb9 100644 --- a/home/map_objects.asm +++ b/home/map_objects.asm @@ -663,7 +663,8 @@ Function19b5:: res 7, [hl] ret -Function19c0:: +SetObjectFacing:: ; 19C0 + ; a is NPC number, d is direction push de call CheckObjectVisibility pop de diff --git a/home/talk_to_npc.asm b/home/talk_to_npc.asm index 4b2261b..9edee7d 100644 --- a/home/talk_to_npc.asm +++ b/home/talk_to_npc.asm @@ -6,9 +6,9 @@ else SECTION "Unknown 3025", ROM0 [$2fe9] endc -Function3025:: +MapDefaultText:: ld hl, .Text - call StartTextboxWithDebug + call OpenTextbox ret .Text: ; 00:302c @@ -157,8 +157,8 @@ GetFacingPersonText:: ; 00:3103 scf ret -StartTextboxWithDebug:: ; 00:3111 - ; Identical to StartTextbox except it prints debug numbers if in debug mode. +OpenTextbox:: ; 00:3111 + ; Opens a textbox and waits for input push hl call PrepareTextbox ld a, [wDebugFlags] @@ -168,7 +168,7 @@ StartTextboxWithDebug:: ; 00:3111 call TextboxIdle ret -StartTextbox:: ; 00:3122 +OpenTextboxNoInput:: ; 00:3122 push hl call PrepareTextbox pop hl @@ -211,7 +211,7 @@ PrepareTextbox:: ; 00:314E call Bankswitch ret -TextboxCleanup ; 00:3171 +TextboxCleanup: ; 00:3171 callab ReanchorBGMap_NoOAMUpdate call UpdateSprites xor a @@ -224,7 +224,7 @@ TextboxCleanup ; 00:3171 call InitToolgearBuffer ret -Function318f ; 00:318f +Function318f: ; 00:318f callab Function140ea call Function0d02 ret @@ -340,7 +340,7 @@ GetInlineMapObject:: ; 00:31EB and a ret -CheckBPressedDebug ; 3233 +CheckBPressedDebug: ; 3233 ; If in debug mode, returns a check on the B button. ld a, [wDebugFlags] bit DEBUG_FIELD_F, a diff --git a/home/unknown_388f.asm b/home/unknown_388f.asm index 447f6cf..1182506 100644 --- a/home/unknown_388f.asm +++ b/home/unknown_388f.asm @@ -92,7 +92,7 @@ Function3920:: ld hl, wJoypadFlags res 4, [hl] ld hl, .text - call StartTextboxWithDebug + call OpenTextbox call RotateFourPalettesLeft jp Init diff --git a/maps/Map13.asm b/maps/Map13.asm new file mode 100644 index 0000000..b69dc4b --- /dev/null +++ b/maps/Map13.asm @@ -0,0 +1,26 @@ +include "constants.asm" + +SECTION "Map 13 Script", ROMX[$6078], BANK[$34] + +Map13ScriptLoader:: ; 6078 + ld hl, Map13ScriptPointers + call RunMapScript + call WriteBackMapScriptNumber + ret + +Map13ScriptPointers: ; 6082 + dw Map13Script + dw Map13NPCIDs + +Map13NPCIDs: ; 6086 + db $FF + +Map13TextPointers: ; 6087 + dw MapDefaultText + dw MapDefaultText + +Map13Script: ; 608B + ld hl, Map13NPCIDs + ld de, Map13TextPointers + call CallMapTextSubroutine + ret \ No newline at end of file diff --git a/maps/PlayersHouse1F.asm b/maps/PlayersHouse1F.asm new file mode 100644 index 0000000..5157d63 --- /dev/null +++ b/maps/PlayersHouse1F.asm @@ -0,0 +1,60 @@ +include "constants.asm" + +SECTION "Player's House 1F", ROMX[$409C], BANK[$34] + +PlayersHouse1FScriptLoader:: ; 409C + ld hl, PlayersHouse1FScriptPointers + call RunMapScript + call WriteBackMapScriptNumber + ret + +PlayersHouse1FScriptPointers: ; 40A6 + dw PlayersHouse1FScript1 + dw PlayersHouse1FNPCIDs1 + dw PlayersHouse1FScript2 + dw PlayersHouse1FNPCIDs2 + +PlayersHouse1FNPCIDs1: ; 40AE + db $FF + +PlayersHouse1FNPCIDs2: ; 40AF + db 0 + db $FF + +PlayersHouse1FScript1: ; 40B1 + ld hl, PlayersHouse1FNPCIDs1 + ld de, PlayersHouse1FTextPointers + call CallMapTextSubroutine + ret + +PlayersHouse1FScript2: ; 40BB + ld hl, PlayersHouse1FNPCIDs2 + ld de, PlayersHouse1FTextPointers + call CallMapTextSubroutine + ret + +PlayersHouse1FTextPointers: ; 40C5 + dw Function38ab + dw Function38b4 + dw Function38a2 + dw Function38bd + dw Function3899 + dw PlayersHouse1FNPCText1 + +PlayersHouse1FNPCText1: ; 40D1 + ld hl, PlayersHouse1FTextString1 + call OpenTextbox + ret + +PlayersHouse1FTextString1: ; 40D8 + text "おかあさん『えっ あなた" + line "オーキドはかせに" + cont "ポケモンずかんを つくってくれって" + cont "たのまれたの?" + + para "すごいじゃない!" + line "わたしも ポケモン きらいって" + cont "わけじゃないし がんばるのよ!" + done + +; 4132 \ No newline at end of file diff --git a/maps/PlayersHouse2F.asm b/maps/PlayersHouse2F.asm new file mode 100644 index 0000000..08a5b4e --- /dev/null +++ b/maps/PlayersHouse2F.asm @@ -0,0 +1,263 @@ +include "constants.asm" + +SECTION "Player's House 2F", ROMX[$418B], BANK[$34] + +PlayersHouse2FScriptLoader:: ; 418B + ld hl, PlayersHouse2FScriptPointers + call RunMapScript + call WriteBackMapScriptNumber + ret + +PlayersHouse2FScriptPointers: ; 4195 + dw PlayersHouse2FScript1 + dw PlayersHouse2FNPCIDs1 + dw PlayersHouse2FScript2 + dw PlayersHouse2FNPCIDs2 + dw PlayersHouse2FScript3 + dw PlayersHouse2FDollText + +PlayersHouse2FNPCIDs1: ; 41A1 + db 0 + db 1 + db $FF + +PlayersHouse2FNPCIDs2: ; 41A4 + db 1 + db $FF + +PlayersHouse2FTextPointers: ; 41A6 + dw Function3899 + dw PlayersHouse2FRadioText + dw PlayersHouse2FComputerText + dw Function3899 + dw PlayersHouse2FN64Text + +PlayersHouse2FScript1: ; 41B0 + call PlayersHouse2PositionCheck + ret z + ld hl, PlayersHouse2FNPCIDs1 + ld de, PlayersHouse2FTextPointers + call CallMapTextSubroutine + ret nz + ret + +PlayersHouse2PositionCheck: ; 41BF + ld hl, wd41a + bit 0, [hl] + ret nz + ld a, [wYCoord] + cp 1 + ret nz + ld a, [wXCoord] + cp 9 + ret nz + ld hl, wJoypadFlags + set 6, [hl] + ld a, LEFT + ld d, 0 + call SetObjectFacing + ld hl, PlayersHouse2FTextString2 + call OpenTextbox + call PlayersHouse2FMovePlayer + call ClearAccumulator + ret + +PlayersHouse2FMovePlayer: ; 41EA + ld a, 0 + ld hl, Movement + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 1 + call WriteIntod637 + ret + +Movement: ; 41FD + db $08 + db $04 + db $32 + +PlayersHouse2FScript2: ; 4200 + ld hl, PlayersHouse2FNPCIDs2 + ld de, PlayersHouse2FTextPointers + call CallMapTextSubroutine + ret + +PlayersHouse2FScript3: ; 420A + ld hl, wd41a + bit 3, [hl] + jr nz, .jump + ld hl, PlayersHouse2FTextString1 + call OpenTextbox + ld hl, wd41a + set 3, [hl] + ld c, 3 + call DelayFrames +.jump + ld hl, PlayersHouse2FTextString2 + call OpenTextbox + ret + +PlayersHouse2FDollText: ; 4228 + ld hl, PlayersHouse2FTextString3 + call OpenTextbox + ret + +PlayersHouse2FRadioText: ; 422F + ld hl, PlayersHouse2FTextString9 + call OpenTextbox + ret + +PlayersHouse2FComputerText: ; 4236 + ld hl, wd41a + bit 0, [hl] + jr nz, .jump + ld hl, PlayersHouse2FTextString5 + call OpenTextbox + ret + +.jump +; 4244 + call RefreshScreen + callab Function1477D + call Function1fea + ret + +PlayersHouse2FCheckEmail: ; 4253 + call YesNoBox + jr c, .jump2 + ld hl, wd41a + set 0, [hl] + ld hl, PlayersHouse2FTextString6 + call PrintText + ret + +.jump2 +; 4264 + ld hl, PlayersHouse2FTextString7 + call PrintText + ret + +PlayersHouse2FN64Text: ; 426B + ld hl, PlayersHouse2FTextString4 + call OpenTextbox + ret + +PlayersHouse2FTextString1: ; 4272 + text "ケン『おっ おまえの うでで" + line "ひかりかがやく そのとけいは……" + cont "も ついに" + cont "トレーナーギアを かったのか!" + + para "すごいじゃないか!" + line "でも かったばかりじゃ じかんしか" + cont "わからないだろ?" + cont "あとで マップが" + cont "みられるように してやるよ!" + cont "おまえ どうせ" + cont "あそびに いくんだろう?" + + para "ざんねんながら おふくろは" + line "かいものに いってるから" + cont "おこづかいを もらおうなんて" + cont "きょうは むり だぜ!" + done + +PlayersHouse2FTextString2: ; 4332 + text "そうだ おまえの パソコンに" + line "メールが とどいていたな" + cont "でかけるんなら" + cont "メールぐらい よんでおけよ" + done + +PlayersHouse2FTextString3: ; 4365 + text "クりスマスに カントーの" + line "しんせきに プレゼント" + cont "してもらった にんぎょうだ" + done + +PlayersHouse2FTextString4: ; 438D + text "ニンテンドウ64を してる!" + cont "…… …… さてと!" + cont "そろそろ そとに あそびに" + cont "でかけるか!" + done + +PlayersHouse2FTextString5: ; 43BD + text "は" + line "パソコンの スイッチを いれた!" + + para "おや? あてに" + line "メールが とどいている ようだ" + cont "よんでみる?@" + + db $08 + +; 43F3 + call PlayersHouse2FCheckEmail + call Function3036 + ret + +PlayersHouse2FTextString6: ; 43FA + text "とつぜん メールを さしあげる" + line "しつれいを おゆるしあれ" + + para "じつは きみに どうしても" + line "わたしたい ものが あるのじゃが" + cont "うけとって もらえんかのう" + cont "ポケモンけんきゅうしゃ オーキド" + done + +PlayersHouse2FTextString7: ; 4456 + text "あとで" + line "よもっと<……>" + done + +PlayersHouse2FTextString8: ; 4461 (unused?) + text "しんはつばい トレーナーギア!" + line "ポケモントレーナーの ための" + cont "さいせんたんの とけい です" + + para "じかんが わかるのは あたりまえ" + line "カセットを ついかすれば" + cont "ばしょも わかる! " + cont "でんわが かけられる!" + + para "とどめは" + line "ラジオを きくことができる!" + + para "もうしこみさきは……" + line "………………………………" + cont "シルフの ホームぺージだ" + done + +PlayersHouse2FTextString9: ; 44FE + text "は" + line "ラジオのスイッチを おした!" + + para "ジェイ オー ピー エム" + line "こちらは" + cont "# ほうそうきょく です" + + para "#ニュースを おおくりします" + line "<……> #の せかいてきな" + cont "けんきゅうしゃ オーキドはかせが" + cont "カントー から" + cont "すがたを けしました" + cont "あらたな けんきゅうの ばしょを" + cont "もとめて いどうした との" + cont "みかたも ありますが" + cont "なんらかの じけんに まきこまれた" + cont "かのうせいも あり" + cont "かんけいしゃは とても" + cont "しんぱい しています" + + para "<……><……>いじょう" + line "#ニュースでした" + + para "<……><……><……><……><……><……>" + line "それでは ひきつづき" + cont "おんがくを おたのしみ ください" + done + +; 45FF \ No newline at end of file diff --git a/maps/Route1Gate1F.asm b/maps/Route1Gate1F.asm new file mode 100644 index 0000000..4772da7 --- /dev/null +++ b/maps/Route1Gate1F.asm @@ -0,0 +1,55 @@ +include "constants.asm" + +SECTION "Route 1 Gate 1F", ROMX[$4061], BANK[$26] + +Route1Gate1FScriptLoader: ;4061 + ld hl, Route1Gate1FScriptPointers + call RunMapScript + call WriteBackMapScriptNumber + ret + +Route1Gate1FScriptPointers: + dw Route1Gate1FScript ;>> routine + dw Route1Gate1FNPCIDs ;>> data + +Route1Gate1FNPCIDs: ; 406F + db $00 + db $01 + db $FF + +Route1Gate1FTextPointers: + dw MapDefaultText ;no signs + dw Route1Gate1FText1 + dw Route1Gate1FText2 + +Route1Gate1FScript: ; 4078 + ld hl, Route1Gate1FNPCIDs + ld de, Route1Gate1FTextPointers + call CallMapTextSubroutine + ret + +Route1Gate1FText1: ; 4082 + ld hl, Route1Gate1FText1String + call OpenTextbox + ret + +Route1Gate1FText2: ; 4089 + ld hl, Route1Gate1FText2String + call OpenTextbox + ret + +Route1Gate1FText1String: ; 4090 + text "このゲートを ぬけると" + line "すぐに オールドシティ です" + done + +Route1Gate1FText2String: ; 40AC + text "オールドシティには" + line "あの ゆうめいな" + cont "ごじゅうのとう が あるの" + + para "いってみたこと ある?" + done + +;ends at 40D9 + diff --git a/maps/Route1Gate2F.asm b/maps/Route1Gate2F.asm new file mode 100644 index 0000000..0ab81a8 --- /dev/null +++ b/maps/Route1Gate2F.asm @@ -0,0 +1,86 @@ +include "constants.asm" + +SECTION "Route 1 Gate 2F", ROMX[$411F], BANK[$26] + +Route1Gate2FScriptLoader:: ; 411F + ld hl, Route1Gate2FScriptPointers + call RunMapScript + call WriteBackMapScriptNumber + ret + +Route1Gate2FScriptPointers: ; 4129 + dw Route1Gate2FScript + dw Route1Gate2FNPCIDs + +Route1Gate2FNPCIDs: ; 412D + db 0 + db 1 + db $FF + +Route1Gate2FTextPointers: ; 4130 + dw Route1Gate2FTextSign1 + dw Route1Gate2FTextSign2 + dw Route1Gate2FTextNPC1 + dw Route1Gate2FTextNPC2 + +Route1Gate2FScript:: ; 4138 + ld hl, Route1Gate2FNPCIDs + ld de, Route1Gate2FTextPointers + call CallMapTextSubroutine + ret + +Route1Gate2FTextNPC1: ; 4142 + ld hl, Route1Gate2FTextString1 + call OpenTextbox + ret + +Route1Gate2FTextNPC2: ; 4149 + ld hl, Route1Gate2FTextString2 + call OpenTextbox + ret + +Route1Gate2FTextSign1: ; 4150 + ld hl, Route1Gate2FTextString3 + call OpenTextbox + ret + +Route1Gate2FTextSign2: ; 4157 + ld hl, Route1Gate2FTextString4 + call OpenTextbox + ret + +Route1Gate2FTextString1: ; 415E + text "ガンテツさんって しってる?" + + para "ガンテツさんに" + line "きに いられるように なれば" + cont "トレーナーとして たいしたもの よ" + done + +Route1Gate2FTextString2: ; 4197 + text "あなた かんこうで きたの?" + line "なら ざんねんね" + + para "オールドシティの" + line "ごじゅうのとう は" + cont "だれでも はいれる って" + cont "ものじゃないわ" + done + +Route1Gate2FTextString3: ; 41D8 + text "は" + line "ぼうえんきょうを のぞいた!" + + para "むむむ!" + line "たかーい とう が みえる!" + done + +Route1Gate2FTextString4: ; 41FF + text "は" + line "ぼうえんきょうを のぞいた!" + + para "むむ?" + line "ながーい かわ が みえる" + done + +; 4224 \ No newline at end of file diff --git a/maps/Route1P1.asm b/maps/Route1P1.asm new file mode 100644 index 0000000..5f3a1b8 --- /dev/null +++ b/maps/Route1P1.asm @@ -0,0 +1,75 @@ +include "constants.asm" + +SECTION "Route 1 East", ROMX[$7B98], BANK[$36] + +Route1P1ScriptLoader:: ; 7B98 + ld hl, Route1P1ScriptPointers + call RunMapScript + call WriteBackMapScriptNumber + ret + +Route1P1ScriptPointers: ; 7BA2 + dw Route1P1Script + dw Route1P1NPCIDs + +Route1P1NPCIDs: ; 7BA6 + db 0 + db 1 + db $FF + +Route1P1TextPointers: ;7BA9 + dw Route1P1TextSign1 + dw Route1P1TextSign2 + dw Route1P1TextNPC1 + dw Route1P1TextNPC2 + +Route1P1Script:: ; 7BB1 + ld hl, Route1P1NPCIDs + ld de, Route1P1TextPointers + call CallMapTextSubroutine + ret + +Route1P1TextNPC1: ; 7BBB + ld hl, Route1P1TextString1 + call OpenTextbox + ret + +Route1P1TextNPC2: ; 7BC2 + ld hl, Route1P1TextString2 + call OpenTextbox + ret + +Route1P1TextSign1: ; 7BC9 + ld hl, Route1P1TextString3 + call OpenTextbox + ret + +Route1P1TextSign2: ; 7BD0 + ld hl, Route1P1TextString4 + call OpenTextbox + ret + +Route1P1TextString1: ; 7BD7 + text "しょうねん!" + + para "モンスターボールは" + line "やせいの ポケモンを よわらせてから" + cont "つかうのが きほんだ!" + done + +Route1P1TextString2: ; 7C08 + text "ぼく ゆうがた じゅくの かえりに" + line "かわった ポケモンを みたよ" + done + +Route1P1TextString3: ; 7C2A + text "このさき しずかな おか" + line "やせいの ポケモンに ちゅうい" + done + +Route1P1TextString4:; 7C48 + text "ここは 1ばん どうろ" + line "サイレントヒル …… オールドシティ" + done + +; 7C68 \ No newline at end of file diff --git a/maps/Route1P2.asm b/maps/Route1P2.asm new file mode 100644 index 0000000..133b42d --- /dev/null +++ b/maps/Route1P2.asm @@ -0,0 +1,117 @@ +include "constants.asm" + +SECTION "Route 1 West", ROMX[$7C68], BANK[$36] + +Route1P2ScriptLoader:: ; 7C67 + ld hl, Route1P2ScriptPointers + call RunMapScript + call WriteBackMapScriptNumber + ret + +Route1P2ScriptPointers: + dw Route1P2Script + dw Route1P2NPCIDs + +Route1P2NPCIDs: ; 7C76 + db $00 + db $01 + db $FF + +Route1P2TextPointers: + dw Route1P2TextSign1 + dw Route1P2Text1 + dw Route1P2Text2 + +Route1P2Script:: ; 7C7F + ld a, [wYCoord] + cp $06 + jr nz, .skipCheck + ld a, [wXCoord] + cp $09 + jr nz, .skipCheck + ld a, 0 ; player + ld d, LEFT + call SetObjectFacing + ld a, 2 + ld d, RIGHT + call SetObjectFacing + jr .endDemo +.skipCheck + ld hl, Route1P2NPCIDs ;data + ld de, Route1P2TextPointers ;start of textld pointers? + call CallMapTextSubroutine + ret + +.endDemo +Route1P2Text1: ; 7CA7 + ld hl, Route1P2TextString4 + call OpenTextbox + call RotateFourPalettesLeft + jp Init + +Route1P2Text2: ; 7CB3 + ld hl, $D3A2 ; trainer flags? + bit 1, [hl] + jr nz, .Text2Jump ; already fought + ld hl, Route1P2TextString1 + call OpenTextbox + ld hl, $D3A2 + set 1, [hl] + ld a, $3C + ld [wce02], a + ld a, $02 + ld [wce05], a + ld hl, wc5ed + set 7, [hl] + ld a, $08 + ld [wd637], a + ret + +.Text2Jump +Route1P2Text3: ; 7CDA + ld hl, Route1P2TextString3 + call OpenTextbox + ret + +Route1P2TextSign1: ; 7CE1 + ld hl, Route1P2TextString5 + call OpenTextbox + ret + +Route1P2TextString1: ; 7CE8 + text "まあ かわいらしい トレーナーやこと" + line "うちと ポケモン しはります?" + done + +Route1P2TextString2: ; 7D0C (unused?) + text "いやあ かんにんやわあ" + done + +Route1P2TextString3: ; 7D19 + text "かわいい かおして つよおすなあ" + line "その ちょうしで おきばりやす" + done + +Route1P2TextString4: ; 7D3B + text "シゲル『おっ サトシじゃないか!" + + para "なんとか ここまで これた" + line "って かんじだな" + + para "じつりょくが ないのに" + line "むり するなよな" + + para "もっと ポケモン あつめるとか" + line "いろんな ポケモン そだてるとか" + cont "やること あるだろ?" + + para "ここで ひきかえしたほうが いいぜ!" + line "じゃあな" + done + +Route1P2TextString5: ; 7DBD + text "ここは 1ばん どうろ" + line "サイレントヒル …… オールドシティ" + done + +;7DDD \ No newline at end of file diff --git a/maps/SilentHills.asm b/maps/SilentHills.asm new file mode 100644 index 0000000..1657673 --- /dev/null +++ b/maps/SilentHills.asm @@ -0,0 +1,420 @@ +include "constants.asm" + +SECTION "Silent Hills Script", ROMX[$7669], BANK[$36] + +SilentHillsScriptLoader:: ; 7669 + ld hl, SilentHillsScriptPointers1 + call RunMapScript + call WriteBackMapScriptNumber + ret + +SilentHillsNPCIDs1: ; 7673 + db 0 + db 2 + db 3 + db $FF + +SilentHillsNPCIDs2: ; 7677 + db 2 + db 3 + db $FF + +SilentHillsNPCIDs3: ; 767A + db 1 + db 2 + db 3 + db $FF + +SilentHillsScriptPointers1: ; 767E + dw SilentHillsScript1 + dw SilentHillsNPCIDs1 + +SilentHillsScriptPointers2: ; 7682 + dw SilentHillsScript2 + dw SilentHillsNPCIDs1 + +SilentHillsScriptPointers3: ; 7686 + dw SilentHillsScript3 + dw SilentHillsNPCIDs1 + +SilentHillsScriptPointers4: ; 768A + dw SilentHillsScript4 + dw SilentHillsNPCIDs2 + +SilentHillsScriptPointers5: ; 768E + dw SilentHillsScript5 + dw SilentHillsNPCIDs3 + +SilentHillsScriptPointers6: ; 7692 + dw SilentHillsScript6 + dw SilentHillsNPCIDs2 + +SilentHillsScriptPointers7: ; 7696 + dw SilentHillsScript7 + dw SilentHillsNPCIDs2 + +SilentHillsScript1: ; 769A + ld a, [wYCoord] + cp 5 + ret nz + ld a, [wXCoord] + cp 5 + ret nz + ld hl, wJoypadFlags + set 4, [hl] + ld a, 02 + call Function17f9 + ld a, 02 + ld hl, SilentHillsMovement1 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 1 + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + ret + +SilentHillsMovement1: ; 76C8 + db $0D + db $0D + db $0D + db $09 + db $05 + db $02 + db $32 + +SilentHillsScript2: ; 76CF + ld a, 0 + ld d, RIGHT + call SetObjectFacing + ld hl, SilentHillsTextRival1 + call OpenTextbox + ld hl, SilentHillsTextRival2 + call OpenTextbox + ld hl, wJoypadFlags + set 4, [hl] + ld a, 2 + ld hl, SilentHillsMovement2 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 1 + call WriteIntod637 + ld a, 2 + ld [wMapScriptNumber], a + ret + +SilentHillsMovement2: ; 76FF + db $00, $04, $08, $0C, $0C, $0C, $33 + +SilentHillsScript3: ;7706 + call Function1848 + ld a, 3 + ld [wMapScriptNumber], a + call InitUnknownBuffercc9e + ret + +SilentHillsScript4: ; 7712 + ld a, [wXCoord] + cp 0 + jr nz, .bigjump + ld a, [wYCoord] + cp 8 + jr z, .jump + cp 09 + jr nz, .bigjump +.jump + call Function776a + ld hl, SilentHillsTextNorthExit + call OpenTextbox + ld hl, wJoypadFlags + set 4, [hl] + ld a, 3 + call Function15ed + ld a, 3 + call Function17f9 + ld a, [wYCoord] + cp 9 + jr z, .jump2 + ld hl, SilentHillsMovement3 + jr .skip +.jump2 + ld hl, SilentHillsMovement4 +.skip + ld a, 03 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 1 + call WriteIntod637 + ld a, 4 + ld [wMapScriptNumber], a + ret + +.bigjump + ld hl, SilentHillsNPCIDs2 + ld de, SilentHillsTextPointers + call CallMapTextSubroutine + ret + +Function776a: ; 776A + ld hl, wd41a + set 7, [hl] + ld a, 1 + ld hl, wd29d + ld [hl], a + ret + +SilentHillsMovement3: ; 7776 + db $0A, $0A, $0A, $09, $0A, $06, $02, $32 + +SilentHillsMovement4: ; 777E + db $0A, $0A, $0A, $0A, $06, $02, $32 + +SilentHillsScript5: ; 7785 + ld a, 0 + ld d, RIGHT + call SetObjectFacing + ld hl, SilentHillsTextPokemonInGrassString + call OpenTextbox + ld hl, wJoypadFlags + set 4, [hl] + ld a, 3 + call Function17f9 + ld a, 0 + call Function186a + ld b, 3 + ld c, 0 + call StartFollow + ld a, [wYCoord] + cp 9 + jr z, .jump + ld hl, SilentHillsMovement5 + jr .skip +.jump + ld hl, SilentHillsMovement6 +.skip + ld a, 3 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 1 + call WriteIntod637 + ld a, 5 + ld [wMapScriptNumber], a + ret + +SilentHillsMovement5: ; 77CC + db $0B, $0B, $0B, $0B, $0B, $0B, $08, $08, $08, $08, $0B, $0B, $0B, $0B, $0B, $0B, $0B, $0B, $05, $33 + +SilentHillsMovement6: ; 77E0 + db $0B, $0B, $0B, $0B, $0B, $0B, $08, $08, $08, $0B, $0B, $0B, $0B, $0B, $0B, $0B, $0B, $05, $33 + +SilentHillsScript6: ; 77F3 + ld hl, SilentHillsNPCIDs2 + ld de, SilentHillsTextPointers + call CallMapTextSubroutine + ld hl, wd41b + bit 2, [hl] + ret z + ld a, $12 + ld [wd29d], a + ld a, 6 + ld [wMapScriptNumber], a + ret + +SilentHillsScript7: ; 780D + call CheckLabDoor + ret z + ld hl, SilentHillsNPCIDs2 + ld de, SilentHillsTextPointers + call CallMapTextSubroutine + ret + +CheckLabDoor: ; 781B + ld a, [wYCoord] + cp $C + ret nz + ld a, [wXCoord] + cp $E + jr z, .jump + ld a, [wXCoord] + cp $F + ret nz +.jump + ldh a, [hJoyState] + bit 6, a + ret z + ld a, 0 + ld d, UP + call SetObjectFacing + ld hl, wJoypadFlags + set 6, [hl] + ld hl, SilentHillsTextString1 + call OpenTextbox + call LabClosed + call ClearAccumulator + ret + +LabClosed: ; 784C + ld a, 0 + ld hl, SilentHillsMovement7 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 1 + call WriteIntod637 + ret + +SilentHillsTextString1: ; 785F + text "あれ? カギが かかっている" + done + +SilentHillsMovement7: ; 786F + db $04, $32 + +SilentHillsTextPointers: ; 7871 + dw SilentHillsPlayerHouseText + dw Function38c6 + dw SilentHillsSignText1 + dw SilentHillsLabText + dw SilentHillsRivalHouseText + +SilentHillsLabText: ; 787B + ld hl, SilentHillsTextString2 + call OpenTextbox + ret + +SilentHillsTextString2: ; 7882 + text "にゅうきょしゃ ぼしゅうちゅう!" + done + +SilentHillsSignText1: ; 7894 + ld hl, SilentHillsTextString3 + call OpenTextbox + ret + +SilentHillsTextString3: ; 789B + text "ここは サイレント ヒル" + line "しずかな おか" + done + +SilentHillsPlayerHouseText: ; 78B1 + ld hl, SilentHillsTextString4 + call OpenTextbox + ret + +SilentHillsTextString4: ; 78B8 + text "ここは  のいえ" + done + +SilentHillsRivalHouseText: ; 78C3 + ld hl, SilentHillsTextString5 + call OpenTextbox + ret + +SilentHillsTextString5: ; 78CA + text "ここは  のいえ" + done + +; 78D5 + dw SilentHillsTextRival1 ; west + dw SilentHillsTextNorthExit ; north + dw SilentHillsTextBackpack ; npc1 + dw SilentHillsTextPokemonHate ; npc2 + +SilentHillsTextRival1: ; 78DD + text "『よう ちょっと おまえに" + cont "じまん したいことが" + cont "あってきたんだよ" + + para "おれ あの ゆうめいなオーキドから" + line "メール もらっちゃった!" + cont "え? おまえにも きたの?" + cont "ちぇっ! つまんねーの!" + + para "……ふん!" + line "じゃあさ じゃあさー おまえさー" + cont "じぶんの ははおや のこと" + cont "いつも なんて よんでる?@" + + db $08 + +LoadMomNamePromptUnused: ; 796F + call LoadStandardMenuHeader + callab MomNamePrompt + call CloseWindow + call GetMemSGBLayout + call UpdateSprites + call UpdateTimePals + jp Function3036 + +MomNameMenuHeaderUnused: ; 7989 + db MENU_BACKUP_TILES ; flags + menu_coords 00, 00, 10, 11 + dw .MomNameMenuDataUnused + db 01 ; initial selection + +.MomNameMenuDataUnused: ; 7991 + db STATICMENU_CURSOR + db 04 ; items + db "じぶんで きめる@" + db "おかあさん @" + db "ママ@" + db "かあちゃん@" + +SilentHillsTextRival2: ; 79AC - BYTE OFF + text "『えー かっこわりい!" + line "そんな こどもっぽい" + cont "よびかた してるなんて" + cont "おわらいだぜ!" + cont"あー ちょっとだけ すっきりした!" + + para "そんじゃあ" + line "おれは ひとあし おさきに" + cont "オーキドのところへ" + cont "いくことに するぜ!" + done + +SilentHillsTextNorthExit: ; 7A14 + text "ちょいまち!" + line "まってよ! まてっ てば!" + done + +SilentHillsTextPokemonInGrassString: ; 7A2A + text "きみは まったく" + line "なんにも しらないんだね!" + cont "くさむらでは" + cont "やせいの ポケモンが とびだす!" + + para "じぶんも ポケモンを" + line "もって いれば" + cont "たたかえるんだ……" + + para "あっ! ひょっとして きみは" + line "……ちょっと" + cont "ぼくに ついて きて!" + done + +SilentHillsTextBackpack: ; 7A99 + ld hl, SilentHillsTextBackpackString + call OpenTextbox + ret + +SilentHillsTextBackpackString: ; 7AA0 + text "あなたの りュック かっこいいわよ" + line "どこで てに いれたの?" + done + +SilentHillsTextPokemonHate: ; 7AC0 + ld hl, SilentHillsTextPokemonHateString + call OpenTextbox + ret + +SilentHillsTextPokemonHateString: ; 7AC7 + text "よのなかに ポケモンが きらいな" + line "ひとは いるのかな?" + done + +; 7AE4 \ No newline at end of file diff --git a/maps/SilentHouse.asm b/maps/SilentHouse.asm new file mode 100644 index 0000000..f5eab62 --- /dev/null +++ b/maps/SilentHouse.asm @@ -0,0 +1,171 @@ +include "constants.asm" + +SECTION "Silent Hills House", ROMX[$4839], BANK[$34] + +SilentHouseScriptLoader:: ; 4839 + ld hl, SilentHouseScriptPointers + call RunMapScript + call WriteBackMapScriptNumber + ret + +SilentHouseScriptPointers: ; 4843 + dw SilentHouseScript1 + dw SilentHouseNPCIDs1 + dw SilentHouseScript2 + dw SilentHouseNPCIDs2 + dw SilentHouseScript3 + dw SilentHouseNPCIDs1 + +SilentHouseScript1: ; 484F + ld hl, SilentHouseNPCIDs1 + ld de, SilentHouseTextPointers1 + call CallMapTextSubroutine + ret + +SilentHouseScript2: ; 4859 + ld hl, SilentHouseNPCIDs2 + ld de, SilentHouseTextPointers1 + call CallMapTextSubroutine + ret + +SilentHouseScript3: ; 4863 + ld hl, SilentHouseNPCIDs1 + ld de, SilentHouseTextPointers1 + call CallMapTextSubroutine + ret + +SilentHouseNPCIDs1: + db 0 + db $FF + +SilentHouseNPCIDs2: + db 0 + db 1 + db $FF + +SilentHouseTextPointers1:: ; 4872 + dw SilentHouseNPCText1 + dw Function38bd + dw Function3899 + dw Function38b4 + dw Function38ab + dw Function38cf + +SilentHouseNPCText1: ; 487E + ld hl, wd41a + bit 6, [hl] + jr nz, .jump + ld hl, SilentHouseTextString1 + call OpenTextbox + ret + +.jump +; 488C + call RefreshScreen + callab Function1477D + call Function1fea + ret + +SilentHouseTextString1: ; 489B + text "おや? あてに メールが" + line "とどいている ようだ" + cont "よんでみる?@" + db $08 + +SilentHouseNPCText2: ; 48BD (unused due to typo in the text pointers?) + call YesNoBox + jr c, .jump + ld hl, wd41a + set 6, [hl] + ld hl, SilentHouseTextString2 + call PrintText + call Function3036 + ret +.jump + ld hl, SilentHouseTextString3 + call PrintText + call Function3036 + ret + +SilentHouseTextString2: ; 48DB + text "とつぜん メールを さしあげる" + line "しつれいを おゆるしあれ" + + para "じつは きみに どうしても" + line "わたしたい ものが あるのじゃが" + cont "うけとって もらえんかのう" + cont "ポケモンけんきゅうしゃ オーキド" + done + +SilentHouseTextString3: ; 4937 + text "ひとのメールは" + line "みちゃ いけないよな<……>" + done + +SilentHouseTextPointers2:: ; 494C + dw SilentHouseNPCText3 + dw SilentHouseNPCText4 + +SilentHouseNPCText3: ; 4950 + ld hl, SilentHouseTextString4 + call OpenTextbox + ret + +SilentHouseTextString4: ; 4957 + text "このまえ かわったいろの" + line "ポッポを みかけたわ" + done + +SilentHouseNPCText4: ; 4970 + ld hl, wd41e + bit 2, [hl] + jr nz, .jump + ld hl, wd41e + set 2, [hl] + ld hl, SilentHouseTextString5 + call OpenTextbox + call WaitBGMap + ld hl, SilentHouseTextString6 + jr .skip +.jump + ld hl, SilentHouseTextString7 +.skip + call OpenTextbox + ret + +SilentHouseTextString5: ; 4991 + text "ケン『ななな" + line "なんだ  じゃないか!" + + para "おれは ちょっと あのー" + line"がっこうの しゅくだいを" + cont "おしえに きてるんだ!" + + para "えっ マップ?" + line "そうか そんな やくそくも してたな" + cont "わかった" + cont "トレーナーギアを かしてみな" + + para "スロットに マップの カセットを " + line "さしこんでっと……" + cont "よし これで マップが みれるぞ!" + done + +SilentHouseTextString6: ; 4A29 + text "もし オールドにいくなら" + line "マサキって やつに あうといい" + + para "おれの ともだちで" + line "すごい ポケモン マニアだ!" + cont "きっと おまえの" + cont "てだすけを してくれるぜ" + done + +SilentHouseTextString7: ; 4A76 + text "ケン『" + line "オーキドはかせに みこまれて" + cont "ポケモンずかんを つくるんだって?" + cont "すごいじゃないか がんばれよ" + done + +; 4AAC \ No newline at end of file diff --git a/maps/SilentLabP1.asm b/maps/SilentLabP1.asm new file mode 100644 index 0000000..578a59d --- /dev/null +++ b/maps/SilentLabP1.asm @@ -0,0 +1,1108 @@ +include "constants.asm" + +SECTION "Silent Lab P1", ROMX[$4BBC], BANK[$34] + +SilentLabP1ScriptLoader:: ; 4BBC + ld hl, SilentLabP1ScriptPointers + call RunMapScript + call WriteBackMapScriptNumber + ret + +SilentLabP1ScriptPointers: ; 4BC6 + dw SilentLabP1Script1 + dw SilentLabP1NPCIDs1 + + dw SilentLabP1Script2 + dw SilentLabP1NPCIDs2 + + dw SilentLabP1Script3 + dw SilentLabP1NPCIDs2 + + dw SilentLabP1Script4 + dw SilentLabP1NPCIDs2 + + dw SilentLabP1Conversation1 + dw SilentLabP1NPCIDs2 + + dw SilentLabP1Script6 + dw SilentLabP1NPCIDs3 + + dw SilentLabP1Script7 + dw SilentLabP1NPCIDs4 + + dw SilentLabP1Script8 + dw SilentLabP1NPCIDs5 + + dw SilentLabP1Script9 + dw SilentLabP1NPCIDs5 + + dw SilentLabP1Script10 + dw SilentLabP1NPCIDs5 + + dw SilentLabP1Script11 + dw SilentLabP1NPCIDs5 + + dw SilentLabP1Script12 + dw SilentLabP1NPCIDs6 + + dw SilentLabP1Script13 + dw SilentLabP1NPCIDs6 + + dw SilentLabP1Script14 + dw SilentLabP1NPCIDs6 + + dw SilentLabP1Script15 + dw SilentLabP1NPCIDs7 + + dw SilentLabP1Script16 + dw SilentLabP1NPCIDs7 + + dw SilentLabP1Script17 + dw SilentLabP1NPCIDs7 + + dw SilentLabP1Script18 + dw SilentLabP1NPCIDs7 + + dw SilentLabP1Script19 + dw SilentLabP1NPCIDs9 + +SilentLabP1NPCIDs1: ; 4C12 + db $02 + db $09 + db $0A + db $FF +SilentLabP1NPCIDs2: ; 4C16 + db $00 + db $02 + db $04 + db $09 + db $0A + db $FF +SilentLabP1NPCIDs3: ; 4C1C + db $02 + db $04 + db $09 + db $0A + db $FF +SilentLabP1NPCIDs4: ; 4C21 + db $04 + db $09 + db $0A + db $FF +SilentLabP1NPCIDs5: ; 4C25 + db $01 + db $03 + db $05 + db $06 + db $07 + db $08 + db $09 + db $0A + db $FF +SilentLabP1NPCIDs6: ; 4C2E + db $01 + db $03 + db $05 + db $06 + db $07 + db $08 + db $FF +SilentLabP1NPCIDs7: ; 4C35 + db $00 + db $05 + db $06 + db $07 + db $08 + db $FF +SilentLabP1NPCIDs8: ; 4C3B (unused?) + db $00 + db $03 + db $05 + db $06 + db $07 + db $08 + db $09 + db $0A + db $FF +SilentLabP1NPCIDs9: ; 4C44 + db $00 + db $07 + db $08 + db $FF + +SilentLabP1TextPointers1:: ; 4C48 + dw SilentLabP1Text4 + dw SilentLabP1Text7 + dw SilentLabP1Text10 + dw SilentLabP1Text11 + dw SilentLabP1TextString20 + dw SilentLabP1Text12 + dw SilentLabP1Text13 + dw SilentLabP1Text14 + dw SilentLabP1Text15 + dw SilentLabP1Text16 + dw SilentLabP1Text16 + +SilentLabP1Script1: ; 4C5E + call SilentLabP1MoveDown + ret z + ld hl, SilentLabP1NPCIDs1 + ld de, SilentLabP1TextPointers2 + call CallMapTextSubroutine + ret + +SilentLabP1MoveDown: ; 4C6C + ld a, [wXCoord] + cp 4 + ret nz + ld a, [wYCoord] + cp 1 + ret nz + ldh a, [hJoyState] + bit 6, a + jp z, SetFFInAccumulator + call SilentLabP1Text3 + ld hl, wJoypadFlags + set 4, [hl] + ld a, 0 + call Function17f9 + ld a, 0 + ld hl, SilentLabP1Movement1 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 1 + call WriteIntod637 + call ClearAccumulator + ret + +SilentLabP1Movement1: ; 4CA2 + db $06, $32 + +SilentLabP1Script2: ; 4CA4 + ld a, 2 + ld [wMapScriptNumber], a + ret + +SilentLabP1Script3: ; 4CAA + ld a, 6 + call Function17f9 + ld a, 0 + call Function186a + ld b, 6 + ld c, 0 + call StartFollow + ld hl, SilentLabP1Movement2 + ld a, 6 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 3 + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + ret + +SilentLabP1Movement2: ; 4CD3 + db 09, 09, 09, 09, 09, 09, 09, 09, 09, 05, 07, 01, $32 + +SilentLabP1Script4: ; 4CE0 + call Function1828 + ld a, 4 + ld [wMapScriptNumber], a + ret + +SilentLabP1Conversation1: ; 4CE9 + ld a, 4 + ld d, RIGHT + call SetObjectFacing + ld hl, SilentLabP1TextString20 + call OpenTextbox + ld hl, SilentLabP1TextString4 + call OpenTextbox + ld a, 4 + ld d, UP + call SetObjectFacing + ld hl, SilentLabP1TextString28 + call OpenTextbox + ld hl, SilentLabP1TextString5 + call OpenTextbox + ld a, 4 + ld d, RIGHT + call SetObjectFacing + ld hl, SilentLabP1TextString29 + call OpenTextbox + ld hl, SilentLabP1TextString7 + call OpenTextbox + call SilentLabP1Script5 + ret + +SilentLabP1Script5: ; 4D26 + ld hl, wJoypadFlags + set 4, [hl] + ld a, 2 + call Function17f9 + ld a, 2 + ld hl, SilentLabP1Movement3 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 5 + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + ret + +SilentLabP1Movement3: ; 4D48 + db 9, 5, $33 + +SilentLabP1Script6: ; 4D4B + ld hl, wJoypadFlags + set 4, [hl] + ld a, 4 + call Function17f9 + ld a, 4 + ld hl, SilentLabP1Movement4 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 6 + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + ret + +SilentLabP1Movement4: ; 4D6D + db $0D, $0D, $0F, $0D, $0D, $33 + +SilentLabP1Script7: ; 4D73 + ld hl, wJoypadFlags + set 4, [hl] + ld a, 0 + call Function17f9 + ld a, 0 + ld hl, SilentLabP1Movement5 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 7 + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + ret + +SilentLabP1Movement5: ; 4D95 + db 09, 09, 09, 05, $32 + +SilentLabP1Script8: ; 4D9A + ld a, 3 + call Function1989 + ld a, 5 + call Function1989 + ld hl, wJoypadFlags + set 4, [hl] + ld a, 0 + call Function17f9 + ld a, 0 + ld hl, SilentLabP1Movement6 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 8 + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + ret + +SilentLabP1Movement6: ; 4DC6 + db 8, 8, 8, $0A, 6, $32 + +SilentLabP1Script9: ; 4DCC + ld hl, wJoypadFlags + set 4, [hl] + ld a, 5 + call Function17f9 + ld a, 5 + call Function197e + ld a, 5 + ld hl, SilentLabP1Movement7 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 9 + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + ret + +SilentLabP1Movement7: ; 4DF3 + db $08, $08, $08, $08, $0A, $06, $32 + +SilentLabP1Script10: ; 4DFA + ld a, 5 + ld d, RIGHT + call SetObjectFacing + ld hl, SilentLabP1TextString21 + call OpenTextbox + ld hl, wJoypadFlags + set 4, [hl] + ld a, 0 + ld d, RIGHT + call SetObjectFacing + ld a, 5 + ld d, RIGHT + call SetObjectFacing + ld a, 3 + call Function17f9 + ld a, 3 + call Function197e + ld a, 3 + ld hl, SilentLabP1Movement8 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, $0A + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + ret + +SilentLabP1Movement8: ; 4E3C + db $08, $04, $32 + +SilentLabP1Script11: ; 4E3F + ld hl, SilentLabP1TextString8 + call OpenTextbox + ld hl, SilentLabP1TextString9 + call OpenTextbox + ld a, $0B + call Function1617 + ld a, $0C + call Function1617 + ld hl, SilentLabP1TextString10 + call OpenTextbox + ld hl, SilentLabP1TextString15 + call OpenTextbox + ld hl, wd41c + set 4, [hl] + call Function20f8 + ld a, $0B + ld [wMapScriptNumber], a + call InitUnknownBuffercc9e + ret + +SilentLabP1Script12: ; 4E72 + call SilentLabP1MoveDown + ret z + call SilentLabP1RivalMovePokemon + ret z + ld hl, SilentLabP1NPCIDs6 + ld de, SilentLabP1TextPointers2 + call CallMapTextSubroutine + ret + +SilentLabP1RivalMovePokemon: ; 4E84 + ld a, [wYCoord] + cp 8 + ret nz + ld hl, SilentLabP1Movement9 + ld a, [wXCoord] + cp 3 + jr z, .jump + cp 4 + ret nz + ld hl, SilentLabP1Movement10 +.jump + push hl + ld hl, wJoypadFlags + set 4, [hl] + ld a, 5 + call Function17f9 + pop hl + ld a, 5 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, $0C + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + call ClearAccumulator + ret + +SilentLabP1Movement9: ; 4EDE + db $08, $0B, $0B, $08, $08, $04, $32 + +SilentLabP1Movement10: ; 4EC5 + db $08, $0B, $08, $08, $04, $32 + +SilentLabP1Script13: ; 4ECB + ld hl, SilentLabP1TextString17 + call OpenTextbox + call GetLabPokemon + ld hl, wc5ed + set 7, [hl] + ld a, 8 + ld [wd637], a + ld a, $0D + ld [wMapScriptNumber], a + call InitUnknownBuffercc9e + ret + +GetLabPokemon: ; 4EE7 + ld hl, LabPokemon + ld a, [wd266] + ld b, a +.loop + ld a, [hl+] + cp b + jr nz, .jump + ld a, [hl] + ld [wce05], a + ld a, 9 + ld [wce02], a + ret +.jump + inc hl + jr .loop + +LabPokemon: ; 4EFF + db DEX_KURUSU + db 1 + db DEX_HAPPA + db 2 + db DEX_HONOGUMA + db 3 + +SilentLabP1Script14: ; 4F05 + ld hl, SilentLabP1TextString19 + ld a, [wcd5d] + and a + jr nz, .skip + ld hl, SilentLabP1TextString18 +.skip + call OpenTextbox + ld hl, wJoypadFlags + set 4, [hl] + ld a, 5 + call Function17f9 + ld a, 5 + ld hl, SilentLabP1Movement11 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, $0E + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + ret + +SilentLabP1Movement11: ; 4F36 + db $04, $08, $08, $08, $33 + +SilentLabP1Script15: ; 4F3B + call Function20f8 + ld a, $0F + ld [wMapScriptNumber], a + call InitUnknownBuffercc9e + ret + +SilentLabP1Script16: ; 4F47 + call SilentLabP1MoveDown + ret z + call SilentLabP1MoveRivalLeave + ret z + ld hl, SilentLabP1NPCIDs7 + ld de, SilentLabP1TextPointers2 + call CallMapTextSubroutine + ret + +SilentLabP1MoveRivalLeave: ; 4F59 + ld a, [wYCoord] + cp $0B + ret nz + ld hl, Movememt12+1 + ld a, [wXCoord] + cp 3 + jr z, .jump + cp 4 + ret nz + ld hl, Movememt12 +.jump + push hl + ld hl, wJoypadFlags + set 4, [hl] + ld a, 8 + call Function17f9 + pop hl + ld a, 8 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, $10 + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + call ClearAccumulator + ret + +Movememt12:; 4F93 + db $07, $07, $07, $05, $32 + +SilentLabP1Script17: ; 4F98 + ld hl, SilentLabP1TextString23 + call OpenTextbox + ld hl, wd41d + set 2, [hl] + ld hl, wNumBagItems + ld a, 5 + ld [wCurItem], a + ld a, 6 + ld [wItemQuantity], a + call AddItemToInventory + call Function20f8 + ld a, $11 + ld [wMapScriptNumber], a + ret + +SilentLabP1Script18: ; 4FBC + call SilentLabP1MoveDown + ret z + ld hl, SilentLabP1NPCIDs7 + ld de, SilentLabP1TextPointers2 + call CallMapTextSubroutine + ret + +SilentLabP1Script19: ; 4FCA + call SilentLabP1MoveDown + ret z + ld hl, SilentLabP1NPCIDs9 + ld de, SilentLabP1TextPointers2 + call CallMapTextSubroutine + ret + +SilentLabP1TextPointers2: ; 4FD8 + dw SilentLabP1Text1 + dw SilentLabP1Text2 + dw Function3899 + dw Function3899 + dw Function3899 + dw Function3899 + dw Function3899 + dw Function3899 + dw Function3899 + dw Function3899 + dw Function3899 + dw Function3899 + dw Function3899 + dw Function3899 + dw SilentLabP1Text3 + +SilentLabP1Text1: ; 4FF6 + ld hl, SilentLabP1TextString1 + call OpenTextbox + ret + +SilentLabP1TextString1: ; 4FFD + text "パソコンを みると" + line "なんと メールが きていた!" + + para "<……> <……> <……>" + line "オーキドはかせ!" + cont "あなたが ゆくえふめいに" + cont "なっていると せけんは" + cont "おおさわぎ です!" + + para "それは そうと" + line "はかせ から みつけるように" + cont "たのまれた れいの#" + cont "みつけるどころか" + cont "まだ てがかりも" + cont "つかむことが できません" + + para "やはり あいつは" + line "かくうの #なのでは" + cont "ないでしょうか<……>" + cont "<……> <……> <……>じょしゅより" + done + +SilentLabP1Text2: ; 50B3 + ld hl, wd39d + bit 0, [hl] + set 0, [hl] + jr z, .jump + res 0, [hl] + ld hl, SilentLabP1TextString2A + jr .skip +.jump + ld hl, SilentLabP1TextString2B +.skip + call OpenTextbox + ret + +SilentLabP1TextString2A: ; 50CA + text "スタート ボタンを プシュ!" + line "おすと メニューが ひらくなり" + done + +SilentLabP1TextString2B: ; 50EA + text "セーブするには # レポート" + line "こまめに かくと いいなり" + done + +SilentLabP1Text3: ; 5108 + ld hl, SilentLabP1TextString3 + call OpenTextbox + ret + +SilentLabP1TextString3: ; 510F + text "カギが かかっている" + done + +SilentLabP1Text4: ; 511B + ld a, [wMapScriptNumber] + cp $0E + jp nc, SilentLabP1Text7 + ld hl, SilentLabP1TextString4 + call OpenTextbox + ret + +SilentLabP1TextString4: ; 512A + text "オーキド『ごくろうさん!" + done + +SilentLabP1TextString5: ; 5138 + text "オーキド『そうとも!" + line "わしが オーキドじゃ!" + cont "じじいで わるかったな!" + + para "おまえたち ふたりは" + line "この オーキドが よんだのじゃ!" + + para "すこし わしの はなしを" + line "きいては くれんか?@" + db $08 + +SilentLabP1Text6: ; 5192 + call YesNoBox + jr c, .jump +.loop + ld hl, SilentLabP1TextString6A + call PrintText + call Function3036 + ret + +.jump + ld hl, SilentLabP1TextString6B + call PrintText + call YesNoBox + jr c, .jump + jr .loop + +SilentLabP1TextString6A: ; 51AE + text "オーキド『いまから 1ねんまえ" + line "わしは カントーで" + cont "きみたちの ような しょうねんに" + cont "#の けんきゅうの ため" + cont "#と ずかんを わたした" + + para "そして かれらは" + line "じつに よくやってくれた!" + + para "150しゅるいの" + line "#を みつけることに" + cont "せいこう したのじゃ!" + cont "が <……> <……> <……>" + cont "しかし <……> <……>" + + para "せかいは ひろいものじゃ" + line "そのご ぜんこく かくちで" + cont "あたらしい #が ぞくぞくと" + cont "みつかっておる!" + + para "そこで わしは カントーから" + line "ここ サイレントヒルに" + cont "けんきゅうの ばしょを うつした" + + para "ばしょが かわれば" + line "あたらしい #にも" + cont "であうことが できるからな" + cont "<……> <……> <……> <……>" + + para "これからも どんどんと" + line "けんきゅうを すすめるが" + cont "わしも ごらんのとおりの おいぼれ" + cont "まごや じょしゅたちも おるが" + cont "それでも やはり かずが たらん!" + + para "! !" + line "#けんきゅうの ために" + cont "ちからを かして くれんか!" + done + +SilentLabP1TextString6B: ; 5332 + text "オーキド『そうか<……>" + line "わしに ひとを みるめが" + cont "なかったと いうことじゃな<……>" + + para "いや!" + line "わしの ひとを みるめは" + cont "まちがっては おらんはず!" + + para "な?" + cont "わしの はなしを きいてくれるな?" + done + +SilentLabP1TextString7: ; 538D + text "オーキド『ふたりとも!" + line "ちょっと わしに ついてこい!" + done + +SilentLabP1Text7: ; 53AA + ld a, [wMapScriptNumber] + cp $12 + jr z, .jump + ld hl, SilentLabP1TextString11A + call OpenTextbox + ret + +.jump + ld hl, SilentLabP1TextString11B + call OpenTextbox + ret + +SilentLabP1TextString8: ; 53BF + text "オーキド『!" + line "このずかんを" + cont "おまえたちに あずける!" + done + +SilentLabP1TextString9: ; 53DE + text "は オーキドから" + line "#ずかんを もらった!" + done + +SilentLabP1TextString10: ; 53F5 + text "オーキド『この せかいの すべての" + line "#を きろくした" + cont "かんぺきな ずかんを つくること!" + cont "それが わしの ゆめ だった!" + + para "しかし しんしゅの #は" + cont "ぞくぞくと みつかっている!" + + para "わしに のこされた" + line "じかんは すくない!" + + para "そこで おまえ たちには" + line "わしの かわりに" + cont "ゆめを はたして ほしいのじゃ!" + + para "さあ ふたりとも" + line "さっそく しゅっぱつ してくれい!" + cont "これは #の れきしに のこる" + cont "いだいな しごとじゃー!" + done + +SilentLabP1TextString11A: ; 54C3 + text "オーキド『せかい じゅうの" + line "#たちが" + cont "を まって おるぞー" + done + +SilentLabP1TextString11B: ; 54E3 + text "オーキド『おう! " + line "どうだ?" + cont "わしの あげた #は<……>?" + + para "ほう!" + cont "だいぶ なついた みたいだな" + + para "おまえには #トレーナーの" + line "さいのうが あるかもしれん" + cont "これからも ときどきは" + cont "わしのところへ かおを だせ!" + + para "#ずかんの ぺージが" + line "きに なるからな" + done + +SilentLabP1Text8: ; 5560 + ld hl, SilentLabP1TextString12 + call OpenTextbox + ret + +SilentLabP1TextString12: ; 5567 + text "オーキド『よく きたな!" + line "#ずかんの" + cont "ちょうしは どうかな?" + + para "どれ<……> ちょっと" + cont "みて あげようか!" + done + +SilentLabP1Text9: ; 559A + ld hl, SilentLabP1TextString13 + call OpenTextbox + ret + +SilentLabP1TextString13: ; 55A1 + text "オーキド『<……> おっほんッ!" + line "よくやったな !" + + para "ちょっと" + line "わしに ついて きなさい!" + + para "は すまんが" + line "そこで まっていなさい!" + + para "『えー!" + line "なんだよ ケチー!" + + para "オーキド『は" + line "でんせつの #が" + cont "ほしかった だけじゃないのか?" + cont "『ギクッ!" + done + +SilentLabP1Text10: ; 561A + ld hl, SilentLabP1TextString14 + call OpenTextbox + ret + +SilentLabP1TextString14: ; 5621 + text "『なんだ" + line "じゃないか!" + cont "おれも ここが" + cont "あやしいと おもって きたんだけど" + cont "だれも いないみたいだな<……>" + done + +SilentLabP1Text11: ; 5658 + ld hl, SilentLabP1TextString16 + call OpenTextbox + ret + +SilentLabP1TextString15: ; 565F + text "『よっしゃあ!" + line "じいさん! おれにまかせな!" + done + +SilentLabP1TextString16: ; 5678 + text "『おれが えらんだ" + line "#のほうが つよそうだぜ!" + cont "こっちに したかったんじゃないの?" + done + +SilentLabP1TextString17: ; 56A4 + text "!" + line "せっかく じいさんに" + cont "# もらったんだから" + cont "<……> ちょっと" + cont "たたかわせて みようぜ!" + done + +SilentLabP1TextString18: ; 56D4 + text "『くっそー!" + line "こんどは ぜったい まけないぞ!" + done + +SilentLabP1TextString19: ; 56EE + text "『よーし!" + line "ほかの #と たたかわせて" + cont "もっと もっと つよくしよう!" + + para "そんじゃ ばいばい!" + done + +SilentLabP1TextString20: ; 571F + text "じいちゃん!" + line "つれてきたよー!" + done + +SilentLabP1TextString21: ; 5730 + text "ぼくは かつて" + line "#トレーナーの ちょうてんを" + cont "めざしたことが あるんだ" + cont "そのとき いいきに なっていた" + cont "ぼくの てんぐのはなを" + cont "へしおった やつに" + cont "きみは どことなく にている" + + para "あいつの おかげで ぼくは" + line "こころを いれかえて" + cont "じいさんの けんきゅうを" + cont "てつだうように なったのさ" + cont "<……> <……> <……> <……> <……>" + + para "さあ!" + line "これが #ずかんだ!" + + para "みつけた #の データが" + line "じどうてきに かきこまれて" + cont "ぺージが ふえて いく という" + cont "とても ハイテクな ずかん だよ!" + done + +SilentLabP1Text12: ; 5814 + ld hl, SilentLabP1TextString22 + call OpenTextbox + ret + +SilentLabP1TextString22: ; 581B + text "ぼくも むかし やったけど" + line "なかなか たいへんだよ<……>" + cont "がんばってね!" + done + +SilentLabP1Text13: ; 583F + ld hl, SilentLabP1TextString24 + call OpenTextbox + ret + +SilentLabP1TextString23: ; 5846 + text "ナナミ『さっき あなたを " + line "つれてきた わかい おとこのこ<……>" + cont "あれは わたしの おとうとなの" + cont "<……>ということは つまり" + + para "そう!" + line "わたしも オーキドの まご なの!" + + para "おじいちゃんは りっぱな" + cont "#けんきゅうしゃよ" + cont "わたしは おてつだい できることが" + cont "とっても うれしいの!" + cont "あっ こんなこと しられたら" + cont "おじいちゃん ちょうしに のるから" + cont "ないしょに しておいてね!" + + para "<……>おじいちゃん すっかり" + line "わすれている みたいだから" + + para "わたしが かわりに これを あげる!" + line "さいしんがた #りュックよ" + + para "は" + line "#りュックを もらった!" + + para "ナナミ『この りュックには" + line "モンスターボールを" + cont "まとめて いれられる" + cont "ボールホルダと" + cont "わざマシンを まとめて いれられる" + cont "わざマシンホルダが ついているの" + + para "モンスターボール 6こと " + line "わざマシンひとつは オマケしておくわ" + cont "ホルダに なんにも はいってないと" + cont "さびしいもんね!" + + para "ねえ くン" + line "あなたの おかあさんが" + cont "しんぱいすると いけないから" + cont "このまちを でるまえに" + cont "かおを みせに いってあげてね" + + para "<……>あなたの かつやく" + line "いのっているわ" + done + +SilentLabP1TextString24: ; 5A23 + text "<……>あなたの かつやく" + line "いのってるわ" + done + +SilentLabP1Text14: ; 5A36 + ld hl, SilentLabP1TextString25 + call OpenTextbox + ret + +SilentLabP1TextString25: ; 5A3D + text "わたしは" + line "はかせの じょしゅ です" + + para "わたしは もちろん" + line "はかせを ソンケー しております" + + para "あなた とは また どこかで" + line "おあい することに" + cont "なるような きがします" + done + +SilentLabP1Text15: ; 5A90 + ld hl, SilentLabP1TextString26 + call OpenTextbox + ret + +SilentLabP1TextString26: ; 5A97 + text "わたしは" + line "はかせの じょしゅ です" + + para "わたしは もちろん" + line "はかせを ソンケー しております" + + para "あなた とは また どこかで" + line "おあい することに" + cont "なるような きがします" + done + +SilentLabP1Text16: ; 5AEA + ld hl, SilentLabP1TextString27 + call OpenTextbox + ret + +SilentLabP1TextString27: ; 5AF1 + text "なんだろう?" + line "でんし てちょう かな?" + done + +SilentLabP1Text17: ; 5B05 + ld hl, SilentLabP1TextString28 + call OpenTextbox + ret + +SilentLabP1TextString28: ; 5B0D + text "『あのメールを くれた" + line "オーキドって こんな じじい<……>" + + para "あっ ゴメン" + line "こんな じいさん なのか?" + cont "ほんもの はじめて みたよ!" + done + +SilentLabP1TextString29: ; 5B4F + text "!" + line "なんだか" + cont "おもしろく なってきたな!" + done + +SilentLabP1Text18: ; 5B68 + ld hl, SilentLabP1TextString30 + call OpenTextbox + ret + +SilentLabP1TextString30: ; 5B6F + text "わたしは" + line "はかせの じょしゅ です" + + para "あなた とは また どこかで" + line "おあい することに" + cont "なるような きがします" + done + +SilentLabP1Text19: ; 5BA7 + ld hl, SilentLabP1TextString31 + call OpenTextbox + ret + +SilentLabP1TextString31: ; 5BAE + text "わたしは" + line "はかせの じょしゅ です" + + para "あなた とは また どこかで" + line "おあい することに" + cont "なるような きがします" + done + +; 5BE6 \ No newline at end of file diff --git a/maps/SilentLabP2.asm b/maps/SilentLabP2.asm new file mode 100644 index 0000000..de99711 --- /dev/null +++ b/maps/SilentLabP2.asm @@ -0,0 +1,360 @@ +include "constants.asm" + +SECTION "Silent Lab P2 Script", ROMX[$5C69], BANK[$34] + +SilentLabP2ScriptLoader:: ; 5C69 + ld hl, SilentLabP2ScriptPointers + call RunMapScript + call WriteBackMapScriptNumber + ret + +SilentLabP2ScriptPointers: ; 5C73 + dw SilentLabP2Script1 + dw SilentLabP2NPCIDs1 + dw SilentLabP2Script2 + dw SilentLabP2NPCIDs1 + dw SilentLabP2Script3 + dw SilentLabP2NPCIDs1 + dw SilentLabP2RivalChoosePokemon + dw SilentLabP2NPCIDs1 + dw SilentLabP2Script5 + dw SilentLabP2NPCIDs1 + dw SilentLabP2Script6 + dw SilentLabP2NPCIDs1 + dw SilentLabP2Script7 + dw SilentLabP2NPCIDs1 + +SilentLabP2NPCIDs1: ; 5C8F + db 00, 01, 02, 03, 04, $FF +SilentLabP2NPCIDs2: ; 5C95 + db 00, 01, 04, $FF +SilentLabP2NPCIDs3: ; 5C99 + db 00, 01, 02, $FF +SilentLabP2NPCIDs4: ; 5C9D + db 00, 01, 03, $FF + +SilentLabP2TextPointers1: ; 5CA1 + dw SilentLabP2Text1 + dw SilentLabP2Func3 + dw SilentLabP2Func4 + dw SilentLabP2Func4 + dw SilentLabP2Func4 + +SilentLabP2Script1: ; 5CAB + ld hl, wJoypadFlags + set 4, [hl] + ld a, 0 + call Function17f9 + ld a, 0 + ld hl, SilentLabP2Movement1 + call LoadMovementDataPointer + ld hl, wd41b + set 1, [hl] + ld hl, wc5ed + set 7, [hl] + ld a, 1 + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + ret + +SilentLabP2Movement1: ; 5CD2 + db 09, 09, 05, $32 + +SilentLabP2Script2: ; 5CD6 + ld hl, wc5ed + set 6, [hl] + call Function20f8 + ld a, 3 + ld d, UP + call SetObjectFacing + ld hl, SilentLabP2TextString1 + call OpenTextbox + ld hl, SilentLabP2TextString10 + call OpenTextbox + ld hl, SilentLabP2TextString2 + call OpenTextbox + ld a, 2 + ld [wMapScriptNumber], a + ret + +SilentLabP2Script3: ; 5CFD + ld hl, SilentLabP2NPCIDs1 + ld de, SilentLabP2TextPointers2 + call CallMapTextSubroutine + ret + +SilentLabP2RivalChoosePokemon: ; 5D07 + ld hl, wJoypadFlags + set 4, [hl] + ld a, 3 + call Function17f9 + ld hl, SilentLabP2MovementPointers + ld a, [wChosenStarter] + ld d, 0 + ld e, a + add hl, de + add hl, de + ld a, [hl+] + ld h, [hl] + ld l, a + ld a, 3 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 4 + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + ret + +SilentLabP2MovementPointers: ; 5D34 + dw SilentLabP2Movement2+1 + dw SilentLabP2Movement2 + dw SilentLabP2Movement2+2 + +SilentLabP2Movement2: ; 5D3A + db $0B, $0B, $0B, $0B, $05, $32 + +SilentLabP2Script5: ; 5D40 + ld hl, SilentLabP2TextString12 + call OpenTextbox + ld a, [wd266] + ld [wNamedObjectIndexBuffer], a + call GetPokemonName + ld hl, SilentLabP2TextString13 + call OpenTextbox + ld a, 5 + ld [wMapScriptNumber], a + ret + +SilentLabP2Script6: ; 5D5B + call Function20f8 + ld hl, wc5ed + res 6, [hl] + ld a, 6 + ld[wMapScriptNumber], a + ret + +SilentLabP2Script7: ; 5D69 + ld hl, SilentLabP2NPCIDs1 + ld de, SilentLabP2TextPointers2 + call CallMapTextSubroutine + ret + +SilentLabP2Text1: ; 5D73 + ld hl, wd41b + bit 2, [hl] + ld hl, SilentLabP2TextString3 + jr z, .skip + ld hl, SilentLabP2TextString9 +.skip + call OpenTextbox + ret + +SilentLabP2TextString1: ; 5D84 + text "オーキド『ほれ そこに 3びき" + cont "ポケモンが いる じゃろう!" + cont "ほっほ!" + + para "こいつらを きみたちに" + cont "いっぴき づつ やろう!" + cont "…… さあ えらべ!" + done + +SilentLabP2TextString2: ; 5DCD + text "オーキド『まあ" + line "あわてるな !" + cont "おまえも すきなものを とれ!" + done + +SilentLabP2TextString3: ; 5DEF + text "オーキド『さあ " + line "どの ポケモンに するかね?" + done + +SilentLabP2TextString4: ; 5E1C + text "オーキド『ほう! ほのおのポケモン" + line "@" + ld bc, wStringBuffer1 + text "に するんじゃな?@" + db 08 + call ConfirmPokemonSelection + call Function3036 + ret + +SilentLabP2TextString5: ; 5E32 + text "オーキド『ふむ みずのポケモン" + line "@" + ld bc, wStringBuffer1 + text "に きめるのじゃな?@" + db 08 + call ConfirmPokemonSelection + call Function3036 + ret + +SilentLabP2TextString6: ; 5E6E + text "オーキド『おお! くさのポケモン" + line "@" + ld bc, wStringBuffer1 + text "が いいんじゃな?@" + db 08 + call ConfirmPokemonSelection + call Function3036 + ret + +ConfirmPokemonSelection: ; 5E85 + call YesNoBox + jr c, .bigJump + ld hl, wd41b + set 2, [hl] + ld a, 1 + ld [wd29b], a + ld a, 1 + ld [wd29a], a + ld a, 1 + ld [wd2a0], a + ld hl, SilentLabP2TextString8 + call PrintText + ld hl, wJoypadFlags + set 5, [hl] + ld a, [wd265] + ld [wMonDexIndex], a + ld a, 5 + ld [wCurPartyLevel], a + callab Function60a0 + xor a + ld [wPartyMon1 + 1], a + ld a, 3 + ld [wMapScriptNumber], a + ret +.bigJump ; 5EC6 + ld hl, SilentLabP2TextString7 + call PrintText + ret + +SilentLabP2TextString7: ; 5ECD + text "では" + line "どれに するのじゃ?" + done + +SilentLabP2TextString8: ; 5EDC + text "オーキド『この ポケモンは" + line "ほんとに げんきが いいぞ!" + + para "は オーキドはかせから" + line "@" + ld bc, wStringBuffer1 + text "を もらった!" + +SilentLabP2TextString9: ; 5F14 + text "オーキド『そうじゃ!" + line "やせいの ポケモンが でて きても" + cont "そいつを たたかわせて いけば" + cont "となりまちへ いける!" + done + +SilentLabP2Func3: ; 5F4E + ld hl, wd41b + bit 2, [hl] + ld hl, SilentLabP2TextString11 + jr z, .skip + ld hl, SilentLabP2TextString14 +.skip + call OpenTextbox + ret + +SilentLabP2TextString10: ; 5F5F + text "『あッ! おれにも!" + line "じいさん おれにもくれよう!" + done + +SilentLabP2TextString11: ; 5F7B + text "『いいぜ !" + line "さきに えらんで!" + cont "おれは こころが ひろいからな" + done + +SilentLabP2TextString12: ; 5F9F + text "『じゃ おれは これ!" + done + +SilentLabP2TextString13: ; 5FAD + text "は オーキドから" + line "@" + ld bc, wStringBuffer1 + text "を もらった!" + done + +SilentLabP2TextString14: ; 5FC5 + text "の#" + line "いいなあ!" + cont "でも おれのポケモンも" + cont "ちょっと いいだろ?" + done + +SilentLabP2Func4: ; 5FE9 + ld hl, wd41b + bit 2, [hl] + jr nz, .bigjump + ldh a, [hFFEA] + sub 2 + ld [wChosenStarter], a + ld d, 0 + ld e, a + ld hl, SilentLabP2StarterData + add hl, de + add hl, de + add hl, de + add hl, de + ld a, [hl+] + ld [wd265], a + push hl + ld [wNamedObjectIndexBuffer], a + callba Function6734 + ld a, [wd265] + ld [wNamedObjectIndexBuffer], a + call GetPokemonName + pop hl + push hl + ld a, [hl+] + ld h, [hl] + ld l, a + call OpenTextbox + pop hl + inc hl + inc hl + ld a, [hl] + ld [wd266], a + ret +.bigjump + ld hl, SilentLabP2TextString15 + call OpenTextbox + ret + +SilentLabP2StarterData: ; 6031 + db DEX_HONOGUMA + dw $5E09 + db DEX_KURUSU + + db DEX_KURUSU + dw $5E33 + db DEX_HAPPA + + db DEX_HAPPA + dw $5E5C + db DEX_HONOGUMA + +SilentLabP2TextString15: ; 603D + text "オーキド『これ!" + line "よくばっちゃ いかん!" + done + +SilentLabP2TextPointers2: ; 6053 + dw Function3899 + dw Function3899 + dw Function3899 + dw Function3899 + dw MapDefaultText + +; 605D \ No newline at end of file diff --git a/maps/SilentPokecenter.asm b/maps/SilentPokecenter.asm new file mode 100644 index 0000000..dc1a35a --- /dev/null +++ b/maps/SilentPokecenter.asm @@ -0,0 +1,113 @@ +include "constants.asm" + +SECTION "Silent Hills Pokecenter", ROMX[$4682], BANK[$34] + +SilentPokecenterScriptLoader:: ; 4682 + ld hl, SilentPokecenterScriptPointers + call RunMapScript + call WriteBackMapScriptNumber + ret + +SilentPokecenterScriptPointers: ; 468C + dw SilentPokecenterScript + dw SilentPokecenterNPCIDs + +SilentPokecenterScript: ; 4690 + ld hl, SilentPokecenterNPCIDs + ld de, SilentPokecenterPCPointer + call CallMapTextSubroutine + ret + +; 469A + dw SilentPokecenterNPCIDs + +SilentPokecenterNPCIDs: ; 469C + db 0 + db 1 + db 2 + db 3 + db 4 + db $FF + +SilentPokecenterPCPointer: ; 46A2 + dw SilentPokecenterPCText + +SilentPokecenterPCText: ; 46A4 + ld hl, SilentPokecenterTextString1 + call OpenTextbox + ret + +SilentPokecenterTextString1: ; 46AB + text "げんざい ちょうせいちゅうです" + done + +SilentPokecenterTextPointers:: ; 46BC + dw SilentPokecenterNPCText1 + dw SilentPokecenterNPCText2 + dw SilentPokecenterNPCText3 + dw SilentPokecenterNPCText4 + dw SilentPokecenterNPCText5 + +SilentPokecenterNPCText1: ; 46C6 + ld hl, SilentPokecenterTextString2 + call OpenTextbox + ret + +SilentPokecenterTextString2: ; 46CD + text "もうしわけありませんが" + line "ただいま しゅうりちゅう でして" + + para "かいふくは できません" + + para "まちから でるときは" + line "じゅうぶんに おきをつけ ください" + done + +SilentPokecenterNPCText2: ; 4714 + ld hl, SilentPokecenterTextString3 + call OpenTextbox + ret + +SilentPokecenterTextString3: ; 471B + text "あそこに ある パソコンは" + line "トレーナー だったら" + cont "いつでも むりょうで" + cont "つかうことが できるよ" + cont "きが きいてるよな!" + done + +SilentPokecenterNPCText3: ; 4757 + ld hl, SilentPokecenterTextString4 + call OpenTextbox + ret + +SilentPokecenterTextString4: ; 475E + text "いま じゅんびちゅうの" + line "きかいは すごいらしいよ" + + para "なんでも ときを こえて" + line "ポケモンが こうかん できるって!" + + para "ほんとかな?" + done + +SilentPokecenterNPCText4: ; 479E + ld hl, SilentPokecenterTextString5 + call OpenTextbox + ret + +SilentPokecenterTextString5: ; 47A5 + text "こいつ へルガー" + line "いままでにない タイプの ポケモンさ" + done + +SilentPokecenterNPCText5: ; 47C2 + ld hl, SilentPokecenterTextString6 + call OpenTextbox + ret + +SilentPokecenterTextString6: ; 47C9 + text "へルガー『ぐるるうー" + done + +; 47D5 \ No newline at end of file diff --git a/shim.sym b/shim.sym index b6f4512..28c5ef3 100644 --- a/shim.sym +++ b/shim.sym @@ -64,6 +64,8 @@ 03:5E79 Functionde79 03:5F7D Functiondf7d 03:5F91 Functiondf91 +03:60A0 Function60a0 +03:6734 Function6734 04:4743 ShrinkPic1 04:479D ShrinkPic2 @@ -100,6 +102,7 @@ ; word Unknown (2 bytes) 05:470E UnknownMapBufferPointers 05:4777 Function14777 +05:477D Function1477D 05:4CAC Function14cac 05:4DAC Function14dac 05:4DC4 Function14dc4 @@ -459,7 +462,6 @@ 00:CB6F wPlayerStepDirection 01:D19E wItems -01:D264 wPlayerBikeSurfState ; The starting house's map script number is stored at d29a. Others are probably nearby. 01:D35F wOptions 01:D513 wWarpNumber diff --git a/wram.asm b/wram.asm index bda0505..ca24aff 100644 --- a/wram.asm +++ b/wram.asm @@ -430,6 +430,8 @@ wVramState:: db ; cd59 ds 3 ; TODO wcd5d:: db ; cd5d + db +wChosenStarter:: db ; cd5f SECTION "CD72", WRAM0[$CD72] wcd72:: dw ; cd72 @@ -482,8 +484,11 @@ wcdd7:: db ; cdd7 SECTION "CE00", WRAM0[$CE00] -wBattleMode:: ; ce00 +wBattleMode:: db ; ce00 db +wce02:: db ; ce02 + ds 2 +wce05:: db ; ce05 SECTION "CE07", WRAM0[$CE07] @@ -718,8 +723,32 @@ wBallQuantities:: db ; d1df SECTION "Rival's Name", WRAM0[$D258] wRivalName:: ds 6 ; d258 + ds 6 + +wPlayerBikeSurfState:: db ; d264 +wd265:: db ; d265 +wd266:: db ; d266 + +SECTION "D29A", WRAM0[$D29A] +wd29a:: db ; d29a +wd29b:: db ; d29b + db ; d29c +wd29d:: db ; d29d + db + db +wd2a0:: db ; d2a0 + +SECTION "D39D", WRAM0[$D39D] +wd39d:: db + +SECTION "Game Event Flags", WRAM0[$D41A] +wd41a:: db +wd41b:: db +wd41c:: db +wd41d:: db +wd41e:: db -SECTION "D4AB", WRAM0[$D4A9] +SECTION "D4A9", WRAM0[$D4A9] wd4a9:: db ; d4a9 ds 1 ; TODO @@ -727,7 +756,7 @@ wJoypadFlags:: db ; d4ab ; 76543210 ; ||||\__/ ; |||| \-- unkn -; |||\----- unkn +; |||\----- set for rival intro textbox ; ||\------ don't wait for keypress to close text box ; |\------- joypad sync mtx ; \-------- joypad disabled -- cgit v1.2.3 From f3de47a1d575b63ae52a3bb667f2a70f8c5e26c5 Mon Sep 17 00:00:00 2001 From: 2Tie Date: Sun, 24 Jun 2018 17:01:24 -0600 Subject: fixed the 3-dot leaders at SatoMew's request --- charmap.asm | 4 ++-- maps/PlayersHouse2F.asm | 16 ++++++++-------- maps/Route1P1.asm | 2 +- maps/Route1P2.asm | 2 +- maps/SilentHills.asm | 6 +++--- maps/SilentHouse.asm | 4 ++-- maps/SilentLabP1.asm | 42 +++++++++++++++++++++--------------------- maps/SilentLabP2.asm | 2 +- 8 files changed, 39 insertions(+), 39 deletions(-) diff --git a/charmap.asm b/charmap.asm index 575a8eb..be20a37 100644 --- a/charmap.asm +++ b/charmap.asm @@ -101,7 +101,7 @@ charmap "", $53 ; wRivalName charmap "#", $54 ; "POKé" charmap "", $55 - charmap "<……>", $56 ; "……" + charmap "<⋯⋯>", $56 ; "⋯⋯" charmap "", $57 charmap "", $58 charmap "", $59 @@ -140,7 +140,7 @@ charmap "『", $72 charmap "』", $73 charmap "・", $74 - charmap "…", $75 + charmap "⋯", $75 charmap "ぁ", $76 charmap "ぇ", $77 diff --git a/maps/PlayersHouse2F.asm b/maps/PlayersHouse2F.asm index 08a5b4e..e96a07b 100644 --- a/maps/PlayersHouse2F.asm +++ b/maps/PlayersHouse2F.asm @@ -145,7 +145,7 @@ PlayersHouse2FN64Text: ; 426B PlayersHouse2FTextString1: ; 4272 text "ケン『おっ おまえの うでで" - line "ひかりかがやく そのとけいは……" + line "ひかりかがやく そのとけいは⋯⋯" cont "も ついに" cont "トレーナーギアを かったのか!" @@ -178,7 +178,7 @@ PlayersHouse2FTextString3: ; 4365 PlayersHouse2FTextString4: ; 438D text "ニンテンドウ64を してる!" - cont "…… …… さてと!" + cont "⋯⋯ ⋯⋯ さてと!" cont "そろそろ そとに あそびに" cont "でかけるか!" done @@ -210,7 +210,7 @@ PlayersHouse2FTextString6: ; 43FA PlayersHouse2FTextString7: ; 4456 text "あとで" - line "よもっと<……>" + line "よもっと<⋯⋯>" done PlayersHouse2FTextString8: ; 4461 (unused?) @@ -226,8 +226,8 @@ PlayersHouse2FTextString8: ; 4461 (unused?) para "とどめは" line "ラジオを きくことができる!" - para "もうしこみさきは……" - line "………………………………" + para "もうしこみさきは⋯⋯" + line "⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯" cont "シルフの ホームぺージだ" done @@ -240,7 +240,7 @@ PlayersHouse2FTextString9: ; 44FE cont "# ほうそうきょく です" para "#ニュースを おおくりします" - line "<……> #の せかいてきな" + line "<⋯⋯> #の せかいてきな" cont "けんきゅうしゃ オーキドはかせが" cont "カントー から" cont "すがたを けしました" @@ -252,10 +252,10 @@ PlayersHouse2FTextString9: ; 44FE cont "かんけいしゃは とても" cont "しんぱい しています" - para "<……><……>いじょう" + para "<⋯⋯><⋯⋯>いじょう" line "#ニュースでした" - para "<……><……><……><……><……><……>" + para "<⋯⋯><⋯⋯><⋯⋯><⋯⋯><⋯⋯><⋯⋯>" line "それでは ひきつづき" cont "おんがくを おたのしみ ください" done diff --git a/maps/Route1P1.asm b/maps/Route1P1.asm index 5f3a1b8..d67ffd9 100644 --- a/maps/Route1P1.asm +++ b/maps/Route1P1.asm @@ -69,7 +69,7 @@ Route1P1TextString3: ; 7C2A Route1P1TextString4:; 7C48 text "ここは 1ばん どうろ" - line "サイレントヒル …… オールドシティ" + line "サイレントヒル ⋯⋯ オールドシティ" done ; 7C68 \ No newline at end of file diff --git a/maps/Route1P2.asm b/maps/Route1P2.asm index 133b42d..9fa72ec 100644 --- a/maps/Route1P2.asm +++ b/maps/Route1P2.asm @@ -111,7 +111,7 @@ Route1P2TextString4: ; 7D3B Route1P2TextString5: ; 7DBD text "ここは 1ばん どうろ" - line "サイレントヒル …… オールドシティ" + line "サイレントヒル ⋯⋯ オールドシティ" done ;7DDD \ No newline at end of file diff --git a/maps/SilentHills.asm b/maps/SilentHills.asm index 1657673..ed7639c 100644 --- a/maps/SilentHills.asm +++ b/maps/SilentHills.asm @@ -334,7 +334,7 @@ SilentHillsTextRival1: ; 78DD cont "え? おまえにも きたの?" cont "ちぇっ! つまんねーの!" - para "……ふん!" + para "⋯⋯ふん!" line "じゃあさ じゃあさー おまえさー" cont "じぶんの ははおや のこと" cont "いつも なんて よんでる?@" @@ -390,10 +390,10 @@ SilentHillsTextPokemonInGrassString: ; 7A2A para "じぶんも ポケモンを" line "もって いれば" - cont "たたかえるんだ……" + cont "たたかえるんだ⋯⋯" para "あっ! ひょっとして きみは" - line "……ちょっと" + line "⋯⋯ちょっと" cont "ぼくに ついて きて!" done diff --git a/maps/SilentHouse.asm b/maps/SilentHouse.asm index f5eab62..70a6649 100644 --- a/maps/SilentHouse.asm +++ b/maps/SilentHouse.asm @@ -99,7 +99,7 @@ SilentHouseTextString2: ; 48DB SilentHouseTextString3: ; 4937 text "ひとのメールは" - line "みちゃ いけないよな<……>" + line "みちゃ いけないよな<⋯⋯>" done SilentHouseTextPointers2:: ; 494C @@ -147,7 +147,7 @@ SilentHouseTextString5: ; 4991 cont "トレーナーギアを かしてみな" para "スロットに マップの カセットを " - line "さしこんでっと……" + line "さしこんでっと⋯⋯" cont "よし これで マップが みれるぞ!" done diff --git a/maps/SilentLabP1.asm b/maps/SilentLabP1.asm index 578a59d..1426e7d 100644 --- a/maps/SilentLabP1.asm +++ b/maps/SilentLabP1.asm @@ -607,7 +607,7 @@ SilentLabP1TextString1: ; 4FFD text "パソコンを みると" line "なんと メールが きていた!" - para "<……> <……> <……>" + para "<⋯⋯> <⋯⋯> <⋯⋯>" line "オーキドはかせ!" cont "あなたが ゆくえふめいに" cont "なっていると せけんは" @@ -622,8 +622,8 @@ SilentLabP1TextString1: ; 4FFD para "やはり あいつは" line "かくうの #なのでは" - cont "ないでしょうか<……>" - cont "<……> <……> <……>じょしゅより" + cont "ないでしょうか<⋯⋯>" + cont "<⋯⋯> <⋯⋯> <⋯⋯>じょしゅより" done SilentLabP1Text2: ; 50B3 @@ -712,8 +712,8 @@ SilentLabP1TextString6A: ; 51AE para "150しゅるいの" line "#を みつけることに" cont "せいこう したのじゃ!" - cont "が <……> <……> <……>" - cont "しかし <……> <……>" + cont "が <⋯⋯> <⋯⋯> <⋯⋯>" + cont "しかし <⋯⋯> <⋯⋯>" para "せかいは ひろいものじゃ" line "そのご ぜんこく かくちで" @@ -727,7 +727,7 @@ SilentLabP1TextString6A: ; 51AE para "ばしょが かわれば" line "あたらしい #にも" cont "であうことが できるからな" - cont "<……> <……> <……> <……>" + cont "<⋯⋯> <⋯⋯> <⋯⋯> <⋯⋯>" para "これからも どんどんと" line "けんきゅうを すすめるが" @@ -741,9 +741,9 @@ SilentLabP1TextString6A: ; 51AE done SilentLabP1TextString6B: ; 5332 - text "オーキド『そうか<……>" + text "オーキド『そうか<⋯⋯>" line "わしに ひとを みるめが" - cont "なかったと いうことじゃな<……>" + cont "なかったと いうことじゃな<⋯⋯>" para "いや!" line "わしの ひとを みるめは" @@ -813,7 +813,7 @@ SilentLabP1TextString11A: ; 54C3 SilentLabP1TextString11B: ; 54E3 text "オーキド『おう! " line "どうだ?" - cont "わしの あげた #は<……>?" + cont "わしの あげた #は<⋯⋯>?" para "ほう!" cont "だいぶ なついた みたいだな" @@ -837,7 +837,7 @@ SilentLabP1TextString12: ; 5567 line "#ずかんの" cont "ちょうしは どうかな?" - para "どれ<……> ちょっと" + para "どれ<⋯⋯> ちょっと" cont "みて あげようか!" done @@ -847,7 +847,7 @@ SilentLabP1Text9: ; 559A ret SilentLabP1TextString13: ; 55A1 - text "オーキド『<……> おっほんッ!" + text "オーキド『<⋯⋯> おっほんッ!" line "よくやったな !" para "ちょっと" @@ -875,7 +875,7 @@ SilentLabP1TextString14: ; 5621 line "じゃないか!" cont "おれも ここが" cont "あやしいと おもって きたんだけど" - cont "だれも いないみたいだな<……>" + cont "だれも いないみたいだな<⋯⋯>" done SilentLabP1Text11: ; 5658 @@ -898,7 +898,7 @@ SilentLabP1TextString17: ; 56A4 text "!" line "せっかく じいさんに" cont "# もらったんだから" - cont "<……> ちょっと" + cont "<⋯⋯> ちょっと" cont "たたかわせて みようぜ!" done @@ -933,7 +933,7 @@ SilentLabP1TextString21: ; 5730 line "こころを いれかえて" cont "じいさんの けんきゅうを" cont "てつだうように なったのさ" - cont "<……> <……> <……> <……> <……>" + cont "<⋯⋯> <⋯⋯> <⋯⋯> <⋯⋯> <⋯⋯>" para "さあ!" line "これが #ずかんだ!" @@ -951,7 +951,7 @@ SilentLabP1Text12: ; 5814 SilentLabP1TextString22: ; 581B text "ぼくも むかし やったけど" - line "なかなか たいへんだよ<……>" + line "なかなか たいへんだよ<⋯⋯>" cont "がんばってね!" done @@ -962,9 +962,9 @@ SilentLabP1Text13: ; 583F SilentLabP1TextString23: ; 5846 text "ナナミ『さっき あなたを " - line "つれてきた わかい おとこのこ<……>" + line "つれてきた わかい おとこのこ<⋯⋯>" cont "あれは わたしの おとうとなの" - cont "<……>ということは つまり" + cont "<⋯⋯>ということは つまり" para "そう!" line "わたしも オーキドの まご なの!" @@ -977,7 +977,7 @@ SilentLabP1TextString23: ; 5846 cont "おじいちゃん ちょうしに のるから" cont "ないしょに しておいてね!" - para "<……>おじいちゃん すっかり" + para "<⋯⋯>おじいちゃん すっかり" line "わすれている みたいだから" para "わたしが かわりに これを あげる!" @@ -1004,12 +1004,12 @@ SilentLabP1TextString23: ; 5846 cont "このまちを でるまえに" cont "かおを みせに いってあげてね" - para "<……>あなたの かつやく" + para "<⋯⋯>あなたの かつやく" line "いのっているわ" done SilentLabP1TextString24: ; 5A23 - text "<……>あなたの かつやく" + text "<⋯⋯>あなたの かつやく" line "いのってるわ" done @@ -1064,7 +1064,7 @@ SilentLabP1Text17: ; 5B05 SilentLabP1TextString28: ; 5B0D text "『あのメールを くれた" - line "オーキドって こんな じじい<……>" + line "オーキドって こんな じじい<⋯⋯>" para "あっ ゴメン" line "こんな じいさん なのか?" diff --git a/maps/SilentLabP2.asm b/maps/SilentLabP2.asm index de99711..54aab8f 100644 --- a/maps/SilentLabP2.asm +++ b/maps/SilentLabP2.asm @@ -159,7 +159,7 @@ SilentLabP2TextString1: ; 5D84 para "こいつらを きみたちに" cont "いっぴき づつ やろう!" - cont "…… さあ えらべ!" + cont "⋯⋯ さあ えらべ!" done SilentLabP2TextString2: ; 5DCD -- cgit v1.2.3 From 3c966f7df4170f58f8274f444977c5a29225d9be Mon Sep 17 00:00:00 2001 From: Pokeglitch Date: Mon, 25 Jun 2018 22:43:31 -0400 Subject: Disassembled all routines related to sprite movement/collisions. Added in constants --- constants.asm | 1 + constants/collision_constants.asm | 4 + constants/map_object_constants.asm | 4 + constants/metatile_constants.asm | 1 - constants/movement_constants.asm | 44 ++ constants/sprite_constants.asm | 2 + data/sprites/sprites.asm | 102 --- engine/overworld/object_collision.asm | 157 +++++ engine/overworld/player_movement.asm | 1123 ++++++++++++++++++--------------- engine/sprites/sprites.asm | 155 +++++ home/copy2.asm | 2 +- home/map.asm | 16 +- home/map_objects.asm | 26 +- home/tileset.asm | 20 +- hram.asm | 12 +- macros/wram.asm | 4 +- shim.sym | 2 - wram.asm | 5 +- 18 files changed, 1029 insertions(+), 651 deletions(-) create mode 100755 constants/movement_constants.asm delete mode 100644 data/sprites/sprites.asm create mode 100755 engine/overworld/object_collision.asm create mode 100644 engine/sprites/sprites.asm diff --git a/constants.asm b/constants.asm index 9da5ddc..7043c32 100644 --- a/constants.asm +++ b/constants.asm @@ -38,3 +38,4 @@ INCLUDE "constants/menu_constants.asm" INCLUDE "constants/wram_constants.asm" INCLUDE "constants/sgb_constants.asm" INCLUDE "constants/map_object_constants.asm" +INCLUDE "constants/movement_constants.asm" diff --git a/constants/collision_constants.asm b/constants/collision_constants.asm index 580d397..ebe3856 100644 --- a/constants/collision_constants.asm +++ b/constants/collision_constants.asm @@ -126,3 +126,7 @@ COLLISION_JUMP_SE EQU $a4 COLLISION_JUMP_SW EQU $a5 COLLISION_JUMP_NE EQU $a6 COLLISION_JUMP_NW EQU $a7 + +NEVER_SOLID EQU 0 +SOMETIMES_SOLID EQU 1 +ALWAYS_SOLID EQU 15 diff --git a/constants/map_object_constants.asm b/constants/map_object_constants.asm index c9bce93..81c52a3 100644 --- a/constants/map_object_constants.asm +++ b/constants/map_object_constants.asm @@ -70,3 +70,7 @@ MAPOBJECTTEMPLATE_SCRIPT_POINTER rb 1 ; 9 MAPOBJECTTEMPLATE_POINTER_HI rb 1 ; a MAPOBJECTTEMPLATE_EVENT_FLAG rw 1 ; b MAP_OBJECT_TEMPLATE_LENGTH SET _RS + +PLAYER_OBJECT_INDEX EQU 1 +COMPANION_OBJECT_INDEX EQU 2 +NUM_OBJECT_STRUCTS EQU 10 diff --git a/constants/metatile_constants.asm b/constants/metatile_constants.asm index 8d86ac5..88d54ab 100644 --- a/constants/metatile_constants.asm +++ b/constants/metatile_constants.asm @@ -1,4 +1,3 @@ - ; all outside tileset share certain metatiles ; this is used in overworld code when editing the map ; D - dirt diff --git a/constants/movement_constants.asm b/constants/movement_constants.asm new file mode 100755 index 0000000..f0c1a88 --- /dev/null +++ b/constants/movement_constants.asm @@ -0,0 +1,44 @@ + const_def + const FACE_DOWN ; $00 + const FACE_UP ; $01 + const FACE_LEFT ; $02 + const FACE_RIGHT ; $03 + const SLOW_STEP_DOWN ; $04 + const SLOW_STEP_UP ; $05 + const SLOW_STEP_LEFT ; $06 + const SLOW_STEP_RIGHT ; $07 + const STEP_DOWN ; $08 + const STEP_UP ; $09 + const STEP_LEFT ; $0a + const STEP_RIGHT ; $0b + const FAST_STEP_DOWN ; $0c + const FAST_STEP_UP ; $0d + const FAST_STEP_LEFT ; $0e + const FAST_STEP_RIGHT ; $0f + const FAST_STEP_DOWN2 ; $10 + const FAST_STEP_UP2 ; $11 + const FAST_STEP_LEFT2 ; $12 + const FAST_STEP_RIGHT2 ; $13 + const SLOW_JUMP_DOWN ; $14 + const SLOW_JUMP_UP ; $15 + const SLOW_JUMP_LEFT ; $16 + const SLOW_JUMP_RIGHT ; $17 + const JUMP_DOWN ; $18 + const JUMP_UP ; $19 + const JUMP_LEFT ; $1a + const JUMP_RIGHT ; $1b + const FAST_JUMP_DOWN ; $1c + const FAST_JUMP_UP ; $1d + const FAST_JUMP_LEFT ; $1e + const FAST_JUMP_RIGHT ; $1f + const FAST_JUMP_DOWN2 ; $20 + const FAST_JUMP_UP2 ; $21 + const FAST_JUMP_LEFT2 ; $22 + const FAST_JUMP_RIGHT2 ; $23 + const MOVEMENT_24 ; $24 + const MOVEMENT_25 ; $25 + const MOVEMENT_26 ; $26 + const MOVEMENT_27 ; $27 + const MOVEMENT_28 ; $28 + const MOVEMENT_29 ; $29 + const NO_MOVEMENT ; $2a diff --git a/constants/sprite_constants.asm b/constants/sprite_constants.asm index 50b5d84..c53866b 100644 --- a/constants/sprite_constants.asm +++ b/constants/sprite_constants.asm @@ -91,3 +91,5 @@ const SPRITE_59 ; 59 duplicate SPRITE_OLD_LINK_RECEPTIONIST const SPRITE_EGG ; 5a const SPRITE_BOULDER ; 5b + +SPRITE_TILE_SIZE EQU 64 diff --git a/data/sprites/sprites.asm b/data/sprites/sprites.asm deleted file mode 100644 index b901b7a..0000000 --- a/data/sprites/sprites.asm +++ /dev/null @@ -1,102 +0,0 @@ -INCLUDE "constants.asm" - -SECTION "OverworldSprites", ROMX[$423B], BANK[$05] - -overworld_sprite: MACRO -; pointer, length, bank - dw \1 - db \2 tiles, BANK(\1) -ENDM - -OverworldSprites:: - overworld_sprite GoldSpriteGFX, 12 - overworld_sprite GoldBikeSpriteGFX, 12 - overworld_sprite GoldSkateboardSpriteGFX, 12 - overworld_sprite SilverSpriteGFX, 12 - overworld_sprite OkidoSpriteGFX, 12 - overworld_sprite RedSpriteGFX, 12 - overworld_sprite BlueSpriteGFX, 12 - overworld_sprite MasakiSpriteGFX, 12 - overworld_sprite ElderSpriteGFX, 12 - overworld_sprite SakakiSpriteGFX, 12 - overworld_sprite GantetsuSpriteGFX, 12 - overworld_sprite MomSpriteGFX, 12 - overworld_sprite SilversMomSpriteGFX, 12 - overworld_sprite RedsMomSpriteGFX, 12 - overworld_sprite RedsMomSpriteGFX, 12 - overworld_sprite NanamiSpriteGFX, 12 - overworld_sprite EvilOkidoSpriteGFX, 12 - overworld_sprite KikukoSpriteGFX, 12 - overworld_sprite HayatoSpriteGFX, 12 - overworld_sprite TsukushiSpriteGFX, 12 - overworld_sprite TsukushiSpriteGFX, 12 - overworld_sprite EnokiSpriteGFX, 12 - overworld_sprite MikanSpriteGFX, 12 - overworld_sprite MikanSpriteGFX, 12 - overworld_sprite CooltrainerMSpriteGFX, 12 - overworld_sprite CooltrainerMSpriteGFX, 12 - overworld_sprite CooltrainerMSpriteGFX, 12 - overworld_sprite CooltrainerMSpriteGFX, 12 - overworld_sprite CooltrainerMSpriteGFX, 12 - overworld_sprite CooltrainerMSpriteGFX, 12 - overworld_sprite CooltrainerMSpriteGFX, 12 - overworld_sprite CooltrainerMSpriteGFX, 12 - overworld_sprite CooltrainerMSpriteGFX, 12 - overworld_sprite CooltrainerMSpriteGFX, 12 - overworld_sprite CooltrainerMSpriteGFX, 12 - overworld_sprite CooltrainerMSpriteGFX, 12 - overworld_sprite CooltrainerFSpriteGFX, 12 - overworld_sprite BugCatcherBoySpriteGFX, 12 - overworld_sprite TwinSpriteGFX, 12 - overworld_sprite YoungsterSpriteGFX, 12 - overworld_sprite LassSpriteGFX, 12 - overworld_sprite TeacherSpriteGFX, 12 - overworld_sprite GirlSpriteGFX, 12 - overworld_sprite SuperNerdSpriteGFX, 12 - overworld_sprite RockerSpriteGFX, 12 - overworld_sprite PokefanMSpriteGFX, 12 - overworld_sprite PokefanFSpriteGFX, 12 - overworld_sprite GrampsSpriteGFX, 12 - overworld_sprite GrannySpriteGFX, 12 - overworld_sprite SwimmerMSpriteGFX, 12 - overworld_sprite SwimmerFSpriteGFX, 12 - overworld_sprite RocketMSpriteGFX, 12 - overworld_sprite RocketMSpriteGFX, 12 - overworld_sprite RocketMSpriteGFX, 12 - overworld_sprite RocketFSpriteGFX, 12 - overworld_sprite NurseSpriteGFX, 12 - overworld_sprite LinkReceptionistSpriteGFX, 12 - overworld_sprite ClerkSpriteGFX, 12 - overworld_sprite FisherSpriteGFX, 12 - overworld_sprite FishingGuruSpriteGFX, 12 - overworld_sprite ScientistSpriteGFX, 12 - overworld_sprite MediumSpriteGFX, 12 - overworld_sprite SageSpriteGFX, 12 - overworld_sprite FrowningManSpriteGFX, 12 - overworld_sprite GentlemanSpriteGFX, 12 - overworld_sprite BlackbeltSpriteGFX, 12 - overworld_sprite ReceptionistSpriteGFX, 12 - overworld_sprite OfficerSpriteGFX, 12 - overworld_sprite CaptainSpriteGFX, 12 - overworld_sprite CaptainSpriteGFX, 12 - overworld_sprite CaptainSpriteGFX, 12 - overworld_sprite MohawkSpriteGFX, 12 - overworld_sprite GymGuySpriteGFX, 12 - overworld_sprite SailorSpriteGFX, 12 - overworld_sprite HelmetSpriteGFX, 12 - overworld_sprite BurglarSpriteGFX, 12 - overworld_sprite SidonSpriteGFX, 12 - overworld_sprite PippiSpriteGFX, 12 - overworld_sprite PoppoSpriteGFX, 12 - overworld_sprite LizardonSpriteGFX, 12 - overworld_sprite KabigonSpriteGFX, 4 - overworld_sprite PawouSpriteGFX, 12 - overworld_sprite NyorobonSpriteGFX, 12 - overworld_sprite LaplaceSpriteGFX, 12 - overworld_sprite PokeBallSpriteGFX, 4 - overworld_sprite PokedexSpriteGFX, 4 - overworld_sprite PaperSpriteGFX, 4 - overworld_sprite OldLinkReceptionistSpriteGFX, 4 - overworld_sprite OldLinkReceptionistSpriteGFX, 4 - overworld_sprite EggSpriteGFX, 4 - overworld_sprite BoulderSpriteGFX, 4 diff --git a/engine/overworld/object_collision.asm b/engine/overworld/object_collision.asm new file mode 100755 index 0000000..a04000b --- /dev/null +++ b/engine/overworld/object_collision.asm @@ -0,0 +1,157 @@ +INCLUDE "constants.asm" + +SECTION "GetSpritesNextTile", ROMX[$774a], BANK[$01] + +; Get the tile that the sprite will walk onto next +GetSpritesNextTile: ; 01:774a + ld hl, OBJECT_NEXT_MAP_X + add hl, bc + ld d, [hl] + ld hl, OBJECT_NEXT_MAP_Y + add hl, bc + ld e, [hl] + push bc + call GetCoordTile + pop bc + ret + +; Sets carry flag if the object (bc) next tile is a collision +_IsObjectCollisionTileSolid: ; 01:775a + call GetSpritesNextTile + ld e, a + ld d, 0 + ld hl, CollisionTypeTable + add hl, de + ld a, BANK(CollisionTypeTable) + call GetFarByte + and ALWAYS_SOLID ; also covers SOMETIMES_SOLID + ret z + scf + ret + + + +SECTION "_CheckObjectCollision", ROMX[$77dd], BANK[$01] + +; returns the carry flag if a sprite is at coords d, e +; will not collide with sprite index stored in hEventCollisionException +_CheckObjectCollision: ; 01:77dd + ld bc, wObjectStructs + xor a +.loop + ldh [hObjectStructIndexBuffer], a + ld hl, OBJECT_SPRITE + add hl, bc + ld a, [hl] + and a + jr z, .next + ld hl, OBJECT_NEXT_MAP_X + add hl, bc + ld a, [hl] + cp d + jr nz, .check_last_position + ld hl, OBJECT_NEXT_MAP_Y + add hl, bc + ld a, [hl] + cp e + jr nz, .check_last_position + ldh a, [hEventCollisionException] + ld l, a + ldh a, [hObjectStructIndexBuffer] + cp l + jr nz, .collision +.check_last_position + ld hl, OBJECT_MAP_X + add hl, bc + ld a, [hl] + cp d + jr nz, .next + ld hl, OBJECT_MAP_Y + add hl, bc + ld a, [hl] + cp e + jr nz, .next + ldh a, [hEventCollisionException] + ld l, a + ldh a, [hObjectStructIndexBuffer] + cp l + jr nz, .collision +.next + ld hl, OBJECT_LENGTH + add hl, bc + ld b, h + ld c, l + ldh a, [hObjectStructIndexBuffer] + inc a + cp NUM_OBJECT_STRUCTS + jr nz, .loop + and a + ret + +.collision + scf + ret + +SECTION "_CheckPlayerObjectCollision", ROMX[$7894], BANK[$01] + +; Sets the carry flag if the player will collide with another sprite's current or next position +_CheckPlayerObjectCollision: ; 01:7894 + ld a, [wPlayerNextMapX] + ld d, a + ld a, [wPlayerNextMapY] + ld e, a + ld bc, wObjectStructs + xor a + +.loop + ldh [hObjectStructIndexBuffer], a + ld hl, OBJECT_SPRITE + add hl, bc + ld a, [hl] + and a + jr z, .next + ld hl, OBJECT_NEXT_MAP_Y + add hl, bc + ld a, [hl] + cp e + jr nz, .check_last_position + ld hl, OBJECT_NEXT_MAP_X + add hl, bc + ld a, [hl] + cp d + jr nz, .check_last_position + +; skip the player sprite + ldh a, [hObjectStructIndexBuffer] + cp PLAYER_OBJECT_INDEX + jr z, .next + jr .collision + +.check_last_position + ld hl, OBJECT_MAP_Y + add hl, bc + ld a, [hl] + cp e + jr nz, .next + ld hl, OBJECT_MAP_X + add hl, bc + ld a, [hl] + cp d + jr nz, .next + jr .collision + +.next + ld hl, OBJECT_LENGTH + add hl, bc + ld b, h + ld c, l + ldh a, [hObjectStructIndexBuffer] + inc a + cp NUM_OBJECT_STRUCTS + jr nz, .loop + xor a + ret + +.collision + scf + ret diff --git a/engine/overworld/player_movement.asm b/engine/overworld/player_movement.asm index 44938aa..0fcd6e9 100644 --- a/engine/overworld/player_movement.asm +++ b/engine/overworld/player_movement.asm @@ -2,15 +2,15 @@ INCLUDE "constants.asm" SECTION "Player Movement", ROMX[$4000], BANK[$3] -OverworldMovementCheck:: +OverworldMovementCheck:: ; 03:4000 jp _OverworldMovementCheck -UnusedOverworldMovementCheck:: - ld a, $01 +UnusedOverworldMovementCheck:: ; 03:4003 + ld a, PLAYER_OBJECT_INDEX ldh [hEventCollisionException], a ld a, [wPlayerDirection] and a - jr z, _SetPlayerIdle ; player movement is disabled + jr z, SetPlayerIdle ; player movement is disabled ldh a, [hJoyState] ld d, a ld hl, wce63 @@ -21,183 +21,188 @@ UnusedOverworldMovementCheck:: .skip_debug_move ld a, [wPlayerState] cp PLAYER_SKATE - jp z, OldCheckMovementSkateboard + jp z, CheckMovementSkateboard cp PLAYER_SURF jp z, OldCheckMovementSurf jp CheckMovementWalkOrBike -_SetPlayerIdle: - ld a, $2a -_SetPlayerAnimation: - ld [wcb77], a + +SetPlayerIdle: ; 03:402c + ld a, NO_MOVEMENT + +SetPlayerMovement: ; 03:402e + ld [wPlayerMovement], a ld a, [wPlayerLastMapX] - ld [wPlayerStandingMapX], a + ld [wPlayerNextMapX], a ld a, [wPlayerLastMapY] - ld [wPlayerStandingMapY], a + ld [wPlayerNextMapY], a and a ret -CheckMovementWalkOrBike: +CheckMovementWalkOrBike: ; 03:403f call _CheckMovementWalkOrBike - jp _SetPlayerAnimation + jp SetPlayerMovement -_CheckMovementWalkOrBike: +_CheckMovementWalkOrBike: ; 03:4045 ld a, d - and (D_DOWN | D_UP | D_LEFT | D_RIGHT) - jp z, .done + and D_PAD + jp z, .idle ld a, d bit D_DOWN_F, a - jp nz, .moveDown + jp nz, .check_down bit D_UP_F, a - jp nz, .moveUp + jp nz, .check_up bit D_LEFT_F, a - jp nz, .moveLeft + jp nz, .check_left bit D_RIGHT_F, a - jr nz, .moveRight -.done: - ld a, $2a + jr nz, .check_right +.idle + ld a, NO_MOVEMENT ret -.moveRight: + +.check_right ld a, [wPlayerLastMapX] inc a - ld [wPlayerStandingMapX], a - call _CheckPlayerObjectCollision - jr c, .faceRight + ld [wPlayerNextMapX], a + call CheckPlayerObjectCollision + jr c, .face_right call IsPlayerCollisionTileSolid - jr nc, .canMoveRight - jr .faceRight -.canMoveRight + jr nc, .move_right + jr .face_right +.move_right ld a, [wPlayerState] cp PLAYER_BIKE - ld a, $0f + ld a, FAST_STEP_RIGHT ret z - ld a, $0b + ld a, STEP_RIGHT ret -.faceRight: - ld a, $03 +.face_right + ld a, FACE_RIGHT ret -.moveLeft: +.check_left: ld a, [wPlayerLastMapX] dec a - ld [wPlayerStandingMapX], a - call _CheckPlayerObjectCollision - jr c, .faceLeft + ld [wPlayerNextMapX], a + call CheckPlayerObjectCollision + jr c, .face_left call IsPlayerCollisionTileSolid - jr nc, .canMoveLeft - jr .faceLeft -.canMoveLeft + jr nc, .move_left + jr .face_left +.move_left ld a, [wPlayerState] cp PLAYER_BIKE - ld a, $0e + ld a, FAST_STEP_LEFT ret z - ld a, $0a + ld a, STEP_LEFT ret -.faceLeft: - ld a, $02 +.face_left + ld a, FACE_LEFT ret -.moveDown: +.check_down ld a, [wPlayerLastMapY] inc a - ld [wPlayerStandingMapY], a - call _CheckPlayerObjectCollision - jr c, .faceDown + ld [wPlayerNextMapY], a + call CheckPlayerObjectCollision + jr c, .face_down call IsPlayerCollisionTileSolid - jr nc, .canMoveDown + jr nc, .move_down cp OLD_COLLISION_LEDGE - jr nz, .faceDown -.jumpDown: - ld a, $18 + jr nz, .face_down + ld a, JUMP_DOWN ret -.canMoveDown +.move_down ld a, [wPlayerState] cp PLAYER_BIKE - ld a, $0c + ld a, FAST_STEP_DOWN ret z - ld a, $08 + ld a, STEP_DOWN ret -.faceDown: - ld a, $00 +.face_down + ld a, FACE_DOWN ret -.moveUp: +.check_up ld a, [wPlayerLastMapY] dec a - ld [wPlayerStandingMapY], a - call _CheckPlayerObjectCollision - jr c, .faceUp + ld [wPlayerNextMapY], a + call CheckPlayerObjectCollision + jr c, .face_up call IsPlayerCollisionTileSolid - jr nc, .canMoveUp - jr .faceUp -.canMoveUp + jr nc, .move_up + jr .face_up +.move_up ld a, [wPlayerState] cp PLAYER_BIKE - ld a, $0d + ld a, FAST_STEP_UP ret z - ld a, $09 + ld a, STEP_UP ret -.faceUp: - ld a, $01 +.face_up + ld a, FACE_UP ret -CheckMovementDebug:: +CheckMovementDebug:: ; 03:40eb ld a, d call _CheckMovementDebug - jp _SetPlayerAnimation + jp SetPlayerMovement -_CheckMovementDebug: +_CheckMovementDebug: ; 03:40f2 bit D_DOWN_F, a - jr nz, .moveDown + jr nz, .move_down bit D_UP_F, a - jr nz, .moveUp + jr nz, .move_up bit D_LEFT_F, a - jr nz, .moveLeft + jr nz, .move_left bit D_RIGHT_F, a - jr nz, .moveRight -.idle: - ld a, $2a + jr nz, .move_right + ld a, NO_MOVEMENT ret -.moveDown: + +.move_down ld a, [wTileDown] - cp $ff - ld a, $0c + cp -1 + ld a, FAST_STEP_DOWN ret nz - ld a, $19 + ld a, JUMP_UP ret -.moveUp: + +.move_up ld a, [wTileUp] - cp $ff - ld a, $0d + cp -1 + ld a, FAST_STEP_UP ret nz - ld a, $18 + ld a, JUMP_DOWN ret -.moveLeft: + +.move_left ld a, [wTileLeft] - cp $ff - ld a, $0e + cp -1 + ld a, FAST_STEP_LEFT ret nz - ld a, $1b + ld a, JUMP_RIGHT ret -.moveRight: + +.move_right ld a, [wTileRight] - cp $ff - ld a, $0f + cp -1 + ld a, FAST_STEP_RIGHT ret nz - ld a, $1a + ld a, JUMP_LEFT ret -OldCheckMovementSkateboard:: - call _OldCheckMovementSkateboard - jp _SetPlayerAnimation +CheckMovementSkateboard:: ; 03:4131 + call _CheckMovementSkateboard + jp SetPlayerMovement -_OldCheckMovementSkateboard: +_CheckMovementSkateboard: ; 03:4137 ld a, [wSkatingDirection] - cp $ff - jp z, .skateStand + cp STANDING + jp z, .not_moving push de ld e, a ld d, $00 - ld hl, .skateMovementTable + ld hl, .SkateMovementTable add hl, de add hl, de ld a, [hli] @@ -205,149 +210,161 @@ _OldCheckMovementSkateboard: ld l, a pop de jp hl -.skateMovementTable: - dw .skateDown - dw .skateUp - dw .skateLeft - dw .skateRight -.skateStand: +.SkateMovementTable ; 03:414d + dw CheckSkateDown + dw CheckSkateUp + dw CheckSkateLeft + dw CheckSkateRight + +.not_moving ; 03:4155 ld a, d - and (D_DOWN | D_UP | D_LEFT | D_RIGHT) - jp z, .done + and D_PAD + jp z, .idle bit D_DOWN_F, d - jp nz, .skateDown + jp nz, CheckSkateDown bit D_UP_F, d - jp nz, .skateUp + jp nz, CheckSkateUp bit D_LEFT_F, d - jp nz, .skateLeft + jp nz, CheckSkateLeft bit D_RIGHT_F, d - jp nz, .skateRight -.done: - ld a, $ff + jp nz, CheckSkateRight + +.idle + ld a, STANDING ld [wSkatingDirection], a - ld a, $2a + ld a, NO_MOVEMENT ret -.skateDown: +CheckSkateDown: ; 03:4177 ld a, [wPlayerLastMapY] inc a - ld [wPlayerStandingMapY], a - ld a, $00 + ld [wPlayerNextMapY], a + ld a, DOWN ld [wSkatingDirection], a - call _CheckPlayerObjectCollision - jr c, .skateDownCollision + call CheckPlayerObjectCollision + jr c, .collision call IsPlayerCollisionTileSolid - jr nc, .canSkateDown + jr nc, .can_skate cp OLD_COLLISION_LEDGE - jr z, .skateJumpDown + jr z, .jump cp (OLD_COLLISION_ROCK | COLLISION_FLAG) - jr nz, .skateDownCollision -.skateJumpDown: - ld a, $1c + jr nz, .collision + +.jump + ld a, FAST_JUMP_DOWN ret -.canSkateDown: + +.can_skate call OldIsTileCollisionGrass - jr z, .skateDownSlowly - ld a, $0c + jr z, .slow + ld a, FAST_STEP_DOWN ret -.skateDownSlowly: - ld a, $08 + +.slow + ld a, STEP_DOWN ret -.skateDownCollision: - ld a, $ff + +.collision + ld a, STANDING ld [wSkatingDirection], a - ld a, $00 + ld a, FACE_DOWN ret -.skateUp: +CheckSkateUp: ; 03:41ab ld a, [wPlayerLastMapY] dec a - ld [wPlayerStandingMapY], a - ld a, $01 + ld [wPlayerNextMapY], a + ld a, UP ld [wSkatingDirection], a - call _CheckPlayerObjectCollision - jr c, .skateUpCollision + call CheckPlayerObjectCollision + jr c, .collision call IsPlayerCollisionTileSolid - jr nc, .canSkateUp - cp $59 - jr nz, .skateUpCollision -.skateJumpUp: - ld a, $1d + jr nc, .can_skate + cp (OLD_COLLISION_ROCK | COLLISION_FLAG) + jr nz, .collision + ld a, FAST_JUMP_UP ret -.canSkateUp: + +.can_skate call OldIsTileCollisionGrass - jr z, .skateUpSlowly - ld a, $0d + jr z, .slow + ld a, FAST_STEP_UP ret -.skateUpSlowly: - ld a, $09 + +.slow + ld a, STEP_UP ret -.skateUpCollision: - ld a, $ff + +.collision + ld a, STANDING ld [wSkatingDirection], a - ld a, $01 + ld a, FACE_UP ret -.skateLeft: +CheckSkateLeft: ; 03:41db ld a, [wPlayerLastMapX] dec a - ld [wPlayerStandingMapX], a - ld a, $02 + ld [wPlayerNextMapX], a + ld a, LEFT ld [wSkatingDirection], a - call _CheckPlayerObjectCollision - jr c, .skateLeftCollision + call CheckPlayerObjectCollision + jr c, .collision call IsPlayerCollisionTileSolid - jr nc, .canSkateLeft - cp $59 - jr nz, .skateLeftCollision -.skateJumpLeft: - ld a, $1e + jr nc, .can_skate + cp (OLD_COLLISION_ROCK | COLLISION_FLAG) + jr nz, .collision + ld a, FAST_JUMP_LEFT ret -.canSkateLeft: + +.can_skate call OldIsTileCollisionGrass - jr z, .skateLeftSlowly - ld a, $0e + jr z, .slow + ld a, FAST_STEP_LEFT ret -.skateLeftSlowly: - ld a, $0a + +.slow + ld a, STEP_LEFT ret -.skateLeftCollision: - ld a, $ff + +.collision + ld a, STANDING ld [wSkatingDirection], a - ld a, $02 + ld a, FACE_LEFT ret -.skateRight: +CheckSkateRight: ; 03:420b ld a, [wPlayerLastMapX] inc a - ld [wPlayerStandingMapX], a - ld a, $03 + ld [wPlayerNextMapX], a + ld a, RIGHT ld [wSkatingDirection], a - call _CheckPlayerObjectCollision - jr c, .skateRightCollision + call CheckPlayerObjectCollision + jr c, .collision call IsPlayerCollisionTileSolid - jr nc, .canSkateRight - cp $59 - jr nz, .skateRightCollision -.skateJumpRight: - ld a, $1f + jr nc, .can_skate + cp (OLD_COLLISION_ROCK | COLLISION_FLAG) + jr nz, .collision + ld a, FAST_JUMP_RIGHT ret -.canSkateRight: + +.can_skate call OldIsTileCollisionGrass - jr z, .skateRightSlowly - ld a, $0f + jr z, .slow + ld a, FAST_STEP_RIGHT ret -.skateRightSlowly: - ld a, $0b + +.slow + ld a, STEP_RIGHT ret -.skateRightCollision: - ld a, $ff + +.collision + ld a, STANDING ld [wSkatingDirection], a - ld a, $03 + ld a, FACE_RIGHT ret -OldIsTileCollisionGrass:: +OldIsTileCollisionGrass:: ; 03:423b ; Check whether collision ID in a is ; grass ; Result: @@ -362,114 +379,109 @@ OldIsTileCollisionGrass:: cp $8b ret -OldCheckMovementSurf:: +OldCheckMovementSurf:: ; 03:4247 call _OldCheckMovementSurf - jp _SetPlayerAnimation + jp SetPlayerMovement -_OldCheckMovementSurf: +_OldCheckMovementSurf: ; 03:424d ld a, d - and (D_DOWN | D_UP | D_LEFT | D_RIGHT) + and D_PAD bit D_DOWN_F, a - jp nz, .trySurfDown + jp nz, .check_down bit D_UP_F, a - jp nz, .trySurfUp + jp nz, .check_up bit D_LEFT_F, a - jp nz, .trySurfLeft + jp nz, .check_left bit D_RIGHT_F, a - jr nz, .trySurfRight -.idle: - ld a, $2a + jr nz, .check_right + ld a, NO_MOVEMENT ret -.trySurfDown: +.check_down ld a, [wPlayerLastMapY] inc a - ld [wPlayerStandingMapY], a - call _CheckPlayerObjectCollision - jr c, .faceDown + ld [wPlayerNextMapY], a + call CheckPlayerObjectCollision + jr c, .face_down call IsPlayerCollisionTileSolid - jr nc, .surfDownLand ; FIXME: This assumes cut-trees are solid, which they aren't. - ; You can walk into them from water because of this. + jr nc, .exit_water_down ; FIXME: This assumes cut-trees are solid, which they aren't. + ; You can walk into them from water because of this. call OldIsTileCollisionWater - jr c, .faceDown -.surfDown: - ld a, $08 + jr c, .face_down + ld a, STEP_DOWN ret -.faceDown: - ld a, $00 +.face_down + ld a, FACE_DOWN ret -.surfDownLand: +.exit_water_down call SetPlayerStateWalk - ld a, $04 + ld a, SLOW_STEP_DOWN ret -.trySurfUp: +.check_up ld a, [wPlayerLastMapY] dec a - ld [wPlayerStandingMapY], a - call _CheckPlayerObjectCollision - jr c, .faceUp + ld [wPlayerNextMapY], a + call CheckPlayerObjectCollision + jr c, .face_up call IsPlayerCollisionTileSolid - jr nc, .surfUpLand ; FIXME: This assumes cut-trees are solid, which they aren't. - ; You can walk into them from water because of this. + jr nc, .exit_water_up ; FIXME: This assumes cut-trees are solid, which they aren't. + ; You can walk into them from water because of this. call OldIsTileCollisionWater - jr c, .faceUp -.surfUp: - ld a, $09 + jr c, .face_up + ld a, STEP_UP ret -.faceUp: - ld a, $01 +.face_up + ld a, FACE_UP ret -.surfUpLand: +.exit_water_up call SetPlayerStateWalk - ld a, $05 + ld a, SLOW_STEP_UP ret -.trySurfLeft: +.check_left ld a, [wPlayerLastMapX] dec a - ld [wPlayerStandingMapX], a - call _CheckPlayerObjectCollision - jr c, .faceLeft + ld [wPlayerNextMapX], a + call CheckPlayerObjectCollision + jr c, .face_left call IsPlayerCollisionTileSolid - jr nc, .surfLeftLand ; FIXME: This assumes cut-trees are solid, which they aren't. - ; You can walk into them from water because of this. + jr nc, .exit_water_left ; FIXME: This assumes cut-trees are solid, which they aren't. + ; You can walk into them from water because of this. call OldIsTileCollisionWater - jr c, .faceLeft -.surfLeft: - ld a, $0a + jr c, .face_left + ld a, STEP_LEFT ret -.faceLeft: - ld a, $02 +.face_left + ld a, FACE_LEFT ret -.surfLeftLand +.exit_water_left call SetPlayerStateWalk - ld a, $06 + ld a, SLOW_STEP_LEFT ret -.trySurfRight +.check_right ld a, [wPlayerLastMapX] inc a - ld [wPlayerStandingMapX], a - call _CheckPlayerObjectCollision - jr c, .faceRight + ld [wPlayerNextMapX], a + call CheckPlayerObjectCollision + jr c, .face_right call IsPlayerCollisionTileSolid - jr nc, .surfRightLand ; FIXME: This assumes cut-trees are solid, which they aren't. + jr nc, .exit_water_right ; FIXME: This assumes cut-trees are solid, which they aren't. ; You can walk into them from water because of this. call OldIsTileCollisionWater - jr c, .faceRight -.surfRight: - ld a, $0b + jr c, .face_right + ld a, STEP_RIGHT ret -.faceRight: - ld a, $03 +.face_right + ld a, FACE_RIGHT ret -.surfRightLand +.exit_water_right call SetPlayerStateWalk - ld a, $07 + ld a, SLOW_STEP_RIGHT ret -OldIsTileCollisionWater:: ; c2ee (3:42ee) +OldIsTileCollisionWater:: ; 03:42ee ; Check if collision ID in a is water ; Input: ; a - collision ID @@ -484,7 +496,7 @@ OldIsTileCollisionWater:: ; c2ee (3:42ee) scf ret -SetPlayerStateWalk:: +SetPlayerStateWalk:: ; 03:42f8 push bc ld a, PLAYER_NORMAL ld [wPlayerState], a @@ -492,7 +504,7 @@ SetPlayerStateWalk:: pop bc ret -IsPlayerCollisionTileSolid:: +IsPlayerCollisionTileSolid:: ; 03:4303 ; Return whether the collision under player's feet ; is solid/sometimes solid or non-solid. ; Clobbers: a @@ -502,64 +514,60 @@ IsPlayerCollisionTileSolid:: ; c - solid/sometimes solid push de ld bc, wPlayerStruct - ld hl, $775a - ld a, $01 - call FarCall_hl + callab _IsObjectCollisionTileSolid ld a, e pop de ret -_CheckPlayerObjectCollision:: +CheckPlayerObjectCollision:: ; 03:4312 ; Check whether player object currentl ; collides with any other object. ; Result: ; nc - no collision ; c - collision push de - ld hl, $7894 - ld a, $01 - call FarCall_hl + callab _CheckPlayerObjectCollision pop de ret nc - jp _CheckCompanionObjectCollision + jp CheckCompanionObjectCollision -_CheckCompanionObjectCollision:: +CheckCompanionObjectCollision:: ; 03:4320 ; Marks the object struct pointed to by hl ; as having collided with player object. -; If object struct (as identified by hEventID) +; If object struct (as identified by hObjectStructIndexBuffer) ; is companion, cancel collision on 5th frames. ; Result: ; nc - no collision ; c - collision - ld hl, (wPlayerFlags + 1) - wPlayerStruct + ld hl, OBJECT_FLAGS + 1 add hl, bc set 1, [hl] ; mark object as having collided with player - ldh a, [hEventID] - cp $02 - jr z, .isCompanion + ldh a, [hObjectStructIndexBuffer] + cp COMPANION_OBJECT_INDEX + jr z, .is_companion xor a ld [wCompanionCollisionFrameCounter], a scf ret -.isCompanion +.is_companion ld a, [wCompanionCollisionFrameCounter] inc a - cp $05 + cp 5 ld [wCompanionCollisionFrameCounter], a - jr z, .cancelCollision + jr z, .cancel_collision scf ret -.cancelCollision +.cancel_collision xor a ld [wCompanionCollisionFrameCounter], a ret -_OverworldMovementCheck:: - ld a, $01 +_OverworldMovementCheck:: ; 03:4344 + ld a, PLAYER_OBJECT_INDEX ldh [hEventCollisionException], a ld a, [wPlayerDirection] and a - jp z, _SetPlayerIdle + jp z, SetPlayerIdle ldh a, [hJoyState] ld d, a ld hl, wce63 @@ -567,28 +575,29 @@ _OverworldMovementCheck:: jr z, .skip_debug_move bit B_BUTTON_F, d jp nz, CheckMovementDebug + .skip_debug_move - call .checkMovementRelease - jp _SetPlayerAnimation + call GetPlayerMovementByState + jp SetPlayerMovement -.checkMovementRelease: +GetPlayerMovementByState: ; 03:4364 ld a, [wPlayerState] cp PLAYER_SKATE - jp z, OldCheckMovementSkateboard ; FIXME: OldCheckMovementSkateboard already calls _SetPlayerAnimation + jp z, CheckMovementSkateboard ; FIXME: CheckMovementSkateboard already calls SetPlayerMovement ; The skateboard doesn't work, because it uses the current ; coordinate as player animation. cp PLAYER_SURF jp z, CheckMovementSurf jp CheckMovementWalk -CheckMovementWalk:: +CheckMovementWalk:: ; 03:4374 ld a, [wPlayerStandingTile] swap a and LOW((COLLISION_TYPE_MASK >> 4) | (COLLISION_TYPE_MASK << 4)) - ld hl, .walkingCollisionTable + ld hl, .WalkingCollisionTable jp CallJumptable -.walkingCollisionTable: +.WalkingCollisionTable ; 03:4381 dw CheckMovementWalkRegular ; regular dw CheckMovementWalkSolid ; trees, grass, etc. dw CheckMovementWalkSolid ; water @@ -606,288 +615,288 @@ CheckMovementWalk:: dw CheckMovementWalkRegular ; unused dw CheckMovementWalkRegular ; unused -_MovementDone: - ld a, $2a +NoWalkMovement: ; 03:43a1 + ld a, NO_MOVEMENT ret -CheckMovementWalkSolid:: +CheckMovementWalkSolid:: ; 03:43a4 jp CheckMovementWalkRegular -CheckMovementWalkLand:: +CheckMovementWalkLand:: ; 03:43a7 ld a, [wPlayerStandingTile] and COLLISION_SUBTYPE_MASK - jr nz, .slowdown + jr nz, .force_movement call CheckMovementWalkRegular - call .slowMovementDown + call SlowDownMovementWalk ret -.slowdown - ld b, $08 + +.force_movement + ld b, STEP_DOWN cp (COLLISION_LAND_S & COLLISION_SUBTYPE_MASK) - jr z, .slowdownDone - ld b, $09 + jr z, .finish + ld b, STEP_UP cp (COLLISION_LAND_N & COLLISION_SUBTYPE_MASK) - jr z, .slowdownDone - ld b, $0a + jr z, .finish + ld b, STEP_LEFT cp (COLLISION_LAND_W & COLLISION_SUBTYPE_MASK) - jr z, .slowdownDone - ld b, $0b + jr z, .finish + ld b, STEP_RIGHT cp (COLLISION_LAND_E & COLLISION_SUBTYPE_MASK) - jr z, .slowdownDone + jr z, .finish ; fall-through --> map other codes to COLLISION_LAND_E -.slowdownDone +.finish ld a, b ret -.slowMovementDown: - ld b, $04 - cp $08 - jr z, .slowMovementDownDone - ld b, $05 - cp $09 - jr z, .slowMovementDownDone - ld b, $06 - cp $0a - jr z, .slowMovementDownDone - ld b, $07 - cp $0b - jr z, .slowMovementDownDone - ret -.slowMovementDownDone + +SlowDownMovementWalk: ; 03:43cf + ld b, SLOW_STEP_DOWN + cp STEP_DOWN + jr z, .finish + ld b, SLOW_STEP_UP + cp STEP_UP + jr z, .finish + ld b, SLOW_STEP_LEFT + cp STEP_LEFT + jr z, .finish + ld b, SLOW_STEP_RIGHT + cp STEP_RIGHT + jr z, .finish + ret +.finish ld a, b ret -CheckMovementWalkLand2:: +CheckMovementWalkLand2:: ; 03:43ea ld a, [wPlayerStandingTile] and COLLISION_SUBTYPE_MASK - ld b, $08 + ld b, STEP_DOWN cp (COLLISION_LAND2_S & COLLISION_SUBTYPE_MASK) - jr z, .done - ld b, $09 + jr z, .finish + ld b, STEP_UP cp (COLLISION_LAND2_N & COLLISION_SUBTYPE_MASK) - jr z, .done - ld b, $0a + jr z, .finish + ld b, STEP_LEFT cp (COLLISION_LAND2_W & COLLISION_SUBTYPE_MASK) - jr z, .done - ld b, $0b + jr z, .finish + ld b, STEP_RIGHT cp (COLLISION_LAND2_E & COLLISION_SUBTYPE_MASK) - jr z, .done + jr z, .finish ; fall-through --> map other codes to COLLISION_LAND2_E -.done +.finish ld a, b ret -UnusedCheckMovementWalk60:: +UnusedCheckMovementWalk60:: ; 03:4409 jp CheckMovementWalkRegular -CheckMovementWalkWarp:: +CheckMovementWalkWarp:: ; 03:440c ld a, [wPlayerStandingTile] and COLLISION_SUBTYPE_MASK - jr z, .exitWarpDpadDirection - cp $01 - jr z, .exitWarpDownNoBoundsCheck + jr z, .check_dpad + cp 1 + jr z, .move_down ld a, [wPlayerStandingTile] cp $7a - jr z, .exitWarpDownNoBoundsCheck + jr z, .move_down jp CheckMovementWalkRegular -.exitWarpDownNoBoundsCheck - ld a, $08 +.move_down + ld a, STEP_DOWN ret -.exitWarpDpadDirection + +.check_dpad ldh a, [hJoyState] bit D_DOWN_F, a - jr nz, .exitWarpDown + jr nz, .down bit D_UP_F, a - jr nz, .exitWarpUp + jr nz, .up bit D_LEFT_F, a - jr nz, .exitWarpLeft + jr nz, .left bit D_RIGHT_F, a - jr nz, .exitWarpRight - jp _MovementDone -.exitWarpDown + jr nz, .right + jp NoWalkMovement + +.down ld a, [wTileDown] - cp $ff + cp -1 jp nz, CheckMovementWalkRegular - call z, _ReportMovementOutOfBounds -.faceDown: - ld a, $00 + call z, .moved_out_of_bounds + ld a, FACE_DOWN ret -.exitWarpUp +.up ld a, [wTileUp] - cp $ff + cp -1 jp nz, CheckMovementWalkRegular - call z, _ReportMovementOutOfBounds -.faceUp: - ld a, $01 + call z, .moved_out_of_bounds + ld a, FACE_UP ret -.exitWarpLeft +.left ld a, [wTileLeft] - cp $ff + cp -1 jp nz, CheckMovementWalkRegular - call z, _ReportMovementOutOfBounds -.faceLeft: - ld a, $02 + call z, .moved_out_of_bounds + ld a, FACE_LEFT ret -.exitWarpRight +.right ld a, [wTileRight] - cp $ff + cp -1 jp nz, CheckMovementWalkRegular - call z, _ReportMovementOutOfBounds -.faceRight: - ld a, $03 + call z, .moved_out_of_bounds + ld a, FACE_RIGHT ret -_ReportMovementOutOfBounds:: +.moved_out_of_bounds ret -CheckMovementWalkMisc:: +CheckMovementWalkMisc:: ; 03:4472 jp CheckMovementWalkRegular -CheckMovementWalkSpecial:: +CheckMovementWalkSpecial:: ; 03:4475 jp CheckMovementWalkRegular -CheckMovementWalkRegular:: +CheckMovementWalkRegular:: ; 03:4478 ldh a, [hJoyState] bit D_DOWN_F, a - jp nz, TryWalkDown + jp nz, CheckWalkDown bit D_UP_F, a - jp nz, TryWalkUp + jp nz, CheckWalkUp bit D_LEFT_F, a - jp nz, TryWalkLeft + jp nz, CheckWalkLeft bit D_RIGHT_F, a - jp nz, TryWalkRight - jp _MovementDone + jp nz, CheckWalkRight + jp NoWalkMovement -CheckMovementWalkJump: +CheckMovementWalkJump: ; 03:4491 ldh a, [hJoyState] bit D_DOWN_F, a - jr nz, .checkJumpDown + jr nz, .down bit D_UP_F, a - jr nz, .checkJumpUp + jr nz, .up bit D_LEFT_F, a - jr nz, .checkJumpLeft + jr nz, .left bit D_RIGHT_F, a - jr nz, .checkJumpRight - jp _MovementDone -.checkJumpDown: + jr nz, .right + jp NoWalkMovement + +.down ld a, [wPlayerStandingTile] and COLLISION_SUBTYPE_MASK cp (COLLISION_JUMP_S & COLLISION_SUBTYPE_MASK) - jr z, .jumpDown + jr z, .jump_down cp (COLLISION_JUMP_SE & COLLISION_SUBTYPE_MASK) - jr z, .jumpDown + jr z, .jump_down cp (COLLISION_JUMP_SW & COLLISION_SUBTYPE_MASK) - jr z, .jumpDown - jp TryWalkDown -.jumpDown: - ld a, $18 + jr z, .jump_down + jp CheckWalkDown +.jump_down + ld a, JUMP_DOWN ret -.checkJumpUp: + +.up ld a, [wPlayerStandingTile] and COLLISION_SUBTYPE_MASK cp (COLLISION_JUMP_N & COLLISION_SUBTYPE_MASK) - jr z, .jumpUp + jr z, .jump_up cp (COLLISION_JUMP_NE & COLLISION_SUBTYPE_MASK) - jr z, .jumpUp + jr z, .jump_up cp (COLLISION_JUMP_NW & COLLISION_SUBTYPE_MASK) - jr z, .jumpUp - jp TryWalkUp -.jumpUp: - ld a, $19 + jr z, .jump_up + jp CheckWalkUp +.jump_up + ld a, JUMP_UP ret -.checkJumpLeft: + +.left ld a, [wPlayerStandingTile] and COLLISION_SUBTYPE_MASK cp (COLLISION_JUMP_W & COLLISION_SUBTYPE_MASK) - jr z, .jumpLeft + jr z, .jump_left cp (COLLISION_JUMP_SW & COLLISION_SUBTYPE_MASK) - jr z, .jumpLeft + jr z, .jump_left cp (COLLISION_JUMP_NW & COLLISION_SUBTYPE_MASK) - jr z, .jumpLeft - jp TryWalkLeft -.jumpLeft: - ld a, $1a + jr z, .jump_left + jp CheckWalkLeft +.jump_left + ld a, JUMP_LEFT ret -.checkJumpRight + +.right ld a, [wPlayerStandingTile] and COLLISION_SUBTYPE_MASK cp (COLLISION_JUMP_E & COLLISION_SUBTYPE_MASK) - jr z, .jumpRight + jr z, .jump_right cp (COLLISION_JUMP_SE & COLLISION_SUBTYPE_MASK) - jr z, .jumpRight + jr z, .jump_right cp (COLLISION_JUMP_NE & COLLISION_SUBTYPE_MASK) - jr z, .jumpRight - jp TryWalkRight -.jumpRight - ld a, $1b + jr z, .jump_right + jp CheckWalkRight +.jump_right + ld a, JUMP_RIGHT ret -TryWalkDown:: +CheckWalkDown:: ; 03:4502 ld d, 0 ld e, 1 - call _CheckObjectCollision - jr c, .faceDown + call CheckObjectCollision + jr c, .face_down ld a, [wTileDown] call CheckCollisionSolid - jr c, .faceDown -.moveDown: - ld a, $08 + jr c, .face_down + ld a, STEP_DOWN ret -.faceDown: - ld a, $00 +.face_down + ld a, FACE_DOWN ret -TryWalkUp:: +CheckWalkUp:: ; 03:4519 ld d, 0 ld e, -1 - call _CheckObjectCollision - jr c, .faceUp + call CheckObjectCollision + jr c, .face_up ld a, [wTileUp] call CheckCollisionSolid - jr c, .faceUp -.moveUp: - ld a, $09 + jr c, .face_up + ld a, STEP_UP ret -.faceUp: - ld a, $01 +.face_up + ld a, FACE_UP ret -TryWalkLeft:: +CheckWalkLeft:: ; 03:4530 ld d, -1 ld e, 0 - call _CheckObjectCollision - jr c, .faceLeft + call CheckObjectCollision + jr c, .face_left ld a, [wTileLeft] call CheckCollisionSolid - jr c, .faceLeft -.moveLeft: - ld a, $0a + jr c, .face_left + ld a, STEP_LEFT ret -.faceLeft: - ld a, $02 +.face_left + ld a, FACE_LEFT ret -TryWalkRight:: +CheckWalkRight:: ; 03:4547 ld d, 1 ld e, 0 - call _CheckObjectCollision - jr c, .faceRight + call CheckObjectCollision + jr c, .face_right ld a, [wTileRight] call CheckCollisionSolid - jr c, .faceRight -.moveRight: - ld a, $0b + jr c, .face_right + ld a, STEP_RIGHT ret -.faceRight: - ld a, $03 +.face_right + ld a, FACE_RIGHT ret -CheckMovementSurf:: +CheckMovementSurf:: ; 03:455e ld a, [wPlayerStandingTile] swap a and LOW((COLLISION_TYPE_MASK >> 4) | (COLLISION_TYPE_MASK << 4)) - ld hl, .surfCollisionTable + ld hl, .SurfCollisionTable jp CallJumptable -.surfCollisionTable +.SurfCollisionTable ; 03:456b dw CheckMovementSurfRegular dw CheckMovementSurfRegular dw CheckMovementSurfWater @@ -905,113 +914,114 @@ CheckMovementSurf:: dw CheckMovementSurfRegular dw CheckMovementSurfRegular -CheckMovementSurfRegular:: +CheckMovementSurfRegular:: ; 03:458b ldh a, [hJoyState] bit D_DOWN_F, a - jp nz, TrySurfDown + jp nz, CheckSurfDown bit D_UP_F, a - jp nz, TrySurfUp + jp nz, CheckSurfUp bit D_LEFT_F, a - jp nz, TrySurfLeft + jp nz, CheckSurfLeft bit D_RIGHT_F, a - jp nz, TrySurfRight - jp _MovementDone + jp nz, CheckSurfRight + jp NoWalkMovement -CheckMovementSurfWater:: +CheckMovementSurfWater:: ; 03:45a4 ld a, [wPlayerStandingTile] and COLLISION_SUBTYPE_MASK cp (COLLISION_WATERFALL & COLLISION_SUBTYPE_MASK) jr nz, CheckMovementSurfRegular -.waterfall: - ld a, $0c +; waterfall + ld a, FAST_STEP_DOWN ret -CheckMovementSurfWater2:: +CheckMovementSurfWater2:: ; 03:45b0 ld a, [wPlayerStandingTile] and COLLISION_WATER_SUBTYPE_MASK - ld d, $0b - jr z, .done ; COLLISION_WATER2_E - ld d, $0a + ld d, STEP_RIGHT + jr z, .finish ; COLLISION_WATER2_E + ld d, STEP_LEFT cp (COLLISION_WATER2_W & COLLISION_WATER_SUBTYPE_MASK) - jr z, .done - ld d, $09 + jr z, .finish + ld d, STEP_UP cp (COLLISION_WATER2_N & COLLISION_WATER_SUBTYPE_MASK) - jr z, .done - ld d, $08 + jr z, .finish + ld d, STEP_DOWN cp (COLLISION_WATER2_S & COLLISION_WATER_SUBTYPE_MASK) - jr z, .done + jr z, .finish ; fall-through --> no aliasing due to mask -.done +.finish ld a, d ret -TrySurfDown: +CheckSurfDown: ; 03:45cd ld d, 0 ld e, 1 - call _CheckObjectCollision - jr c, .faceDown + call CheckObjectCollision + jr c, .face_down ld a, [wTileDown] call CheckCollisionSometimesSolid - jr c, .faceDown ; FIXME: This assumes cut-trees are solid, which they aren't. + jr c, .face_down ; FIXME: This assumes cut-trees are solid, which they aren't. ; You can walk into them from water because of this. call nz, SurfDismount - ld a, $08 + ld a, STEP_DOWN ret -.faceDown: - ld a, $00 +.face_down + ld a, FACE_DOWN ret -TrySurfUp: +CheckSurfUp: ; 03:45e7 ld d, 0 ld e, -1 - call _CheckObjectCollision - jr c, .faceUp + call CheckObjectCollision + jr c, .face_up ld a, [wTileUp] call CheckCollisionSometimesSolid - jr c, .faceUp ; FIXME: This assumes cut-trees are solid, which they aren't. + jr c, .face_up ; FIXME: This assumes cut-trees are solid, which they aren't. ; You can walk into them from water because of this. call nz, SurfDismount - ld a, $09 + ld a, STEP_UP ret -.faceUp: - ld a, $01 +.face_up + ld a, FACE_UP ret -TrySurfLeft: +CheckSurfLeft: ; 03:4601 ld d, -1 ld e, 0 - call _CheckObjectCollision - jr c, .faceLeft + call CheckObjectCollision + jr c, .face_left ld a, [wTileLeft] call CheckCollisionSometimesSolid - jr c, .faceLeft ; FIXME: This assumes cut-trees are solid, which they aren't. + jr c, .face_left ; FIXME: This assumes cut-trees are solid, which they aren't. ; You can walk into them from water because of this. call nz, SurfDismount - ld a, $0a + ld a, STEP_LEFT ret -.faceLeft: - ld a, $02 +.face_left + ld a, FACE_LEFT ret -TrySurfRight: +CheckSurfRight: ; 03:461b ld d, 1 ld e, 0 - call _CheckObjectCollision - jr c, .faceRight + call CheckObjectCollision + jr c, .face_right ld a, [wTileRight] call CheckCollisionSometimesSolid - jr c, .faceRight ; FIXME: This assumes cut-trees are solid, which they aren't. + jr c, .face_right ; FIXME: This assumes cut-trees are solid, which they aren't. ; You can walk into them from water because of this. call nz, SurfDismount - ld a, $0b + ld a, STEP_RIGHT ret -.faceRight: - ld a, $03 +.face_right + ld a, FACE_RIGHT ret -SurfDismount: + +SurfDismount: ; 03:4635 jp SetPlayerStateWalk -_CheckObjectCollision:: +CheckObjectCollision:: ; 03:4638 ; Check if coordinates relative ; to player collide with another object ; Clobbers: @@ -1021,20 +1031,18 @@ _CheckObjectCollision:: ; Output: ; nc - no collision ; c - collision -; hEventID - Event ID of colliding event - ld a, $01 +; hObjectStructIndexBuffer - Event ID of colliding event + ld a, PLAYER_OBJECT_INDEX ldh [hEventCollisionException], a - ld a, [wPlayerStandingMapX] + ld a, [wPlayerNextMapX] add d ld d, a - ld a, [wPlayerStandingMapY] + ld a, [wPlayerNextMapY] add e ld e, a - ld hl, $77dd - ld a, $01 - call FarCall_hl + callab _CheckObjectCollision ret nc - jp _CheckCompanionObjectCollision + jp CheckCompanionObjectCollision CheckCollisionSolid:: ; Checks whether collision ID in a @@ -1064,27 +1072,90 @@ GetCollisionType:: ; 01 - sometimes solid (cut tree, water etc.) ; 0F - always solid push de - ld hl, .collisionTypeTable + ld hl, CollisionTypeTable ld e, a - ld d, $00 + ld d, 0 add hl, de ld a, [hl] pop de ret -.collisionTypeTable: -INCBIN "data/collision/collision_type_table.bin" - -_UnusedReturnFalse:: +CollisionTypeTable: ; 03:4664 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $00 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $04 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $08 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $0C + db NEVER_SOLID, NEVER_SOLID, SOMETIMES_SOLID, NEVER_SOLID ; $10 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $14 + db NEVER_SOLID, NEVER_SOLID, SOMETIMES_SOLID, NEVER_SOLID ; $18 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $1C + db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $20 + db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, ALWAYS_SOLID ; $24 + db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $28 + db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, ALWAYS_SOLID ; $30 + db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $34 + db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $38 + db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $3C + db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $40 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $44 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $48 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $4C + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $50 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $54 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $58 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $5C + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $60 + db NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID, NEVER_SOLID ; $64 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $68 + db NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID, NEVER_SOLID ; $6C + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $70 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $74 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $78 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $7C + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $80 + db ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID ; $84 + db ALWAYS_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $88 + db ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID ; $8C + db ALWAYS_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $90 + db ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID ; $94 + db ALWAYS_SOLID, ALWAYS_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $98 + db ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID ; $9C + db ALWAYS_SOLID, ALWAYS_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $A0 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $A4 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $A8 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $AC + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $B0 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $B4 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $B8 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $BC + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $C0 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $C4 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $C8 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $CC + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $D0 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $D4 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $D8 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $DC + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $E0 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $E4 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $E8 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $EC + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $F0 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $F4 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $F8 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $FC + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $100 + +_UnusedReturnFalse:: ; 03:4764 xor a ret -_UnusedReturnTrue:: +_UnusedReturnTrue:: ; 03:4766 xor a scf ret -CheckCollisionSometimesSolid:: +CheckCollisionSometimesSolid:: ; 03:4769 ; Checks whether collision ID in a ; is sometimes, always or never solid. ; Clobbers: @@ -1098,18 +1169,58 @@ CheckCollisionSometimesSolid:: ; 00 - sometimes solid ; 01 - never solid call GetCollisionType - cp $01 - jr z, .sometimesSolid + cp SOMETIMES_SOLID + jr z, .sometimes_solid and a - jr z, .solid - jr .alwaysSolid -.sometimesSolid: + jr z, .never_solid + jr .always_solid +.sometimes_solid xor a ret -.solid: - ld a, $01 +.never_solid + ld a, 1 and a ret -.alwaysSolid: +.always_solid scf ret + + +SECTION "_RedrawPlayerSprite", ROMX[$4000], BANK[$05] + +_RedrawPlayerSprite: ; 05:4000 + call GetPlayerSprite + ld hl, vChars0 + call LoadOverworldSprite + ret + +GetPlayerSprite: ; 05:400a + ld a, [wPlayerState] + ld hl, PlayerSpriteTable + ld c, a +.loop + ld a, [hli] + cp c + jr z, .match + inc hl + cp -1 + jr nz, .loop + xor a + ld [wPlayerState], a + ld a, SPRITE_GOLD + jr .skip +.match + ld a, [hl] +.skip + ld [wUsedSprites], a + ld [wPlayerSprite], a + ld [wPlayerObjectSprite], a + ret + +PlayerSpriteTable: ; 03:402d +; state, sprite + db PLAYER_NORMAL, SPRITE_GOLD + db PLAYER_BIKE, SPRITE_GOLD_BIKE + db PLAYER_SKATE, SPRITE_GOLD_SKATEBOARD + db PLAYER_SURF, SPRITE_LAPLACE + db -1 diff --git a/engine/sprites/sprites.asm b/engine/sprites/sprites.asm new file mode 100644 index 0000000..a1dc401 --- /dev/null +++ b/engine/sprites/sprites.asm @@ -0,0 +1,155 @@ +INCLUDE "constants.asm" + +SECTION "LoadOverworldSprite", ROMX[$4150], BANK[$05] + +LoadOverworldSprite: ; 05:4150 + push af + call GetOverworldSpriteData + push bc + push hl + push de + ld a, [wcdaf] + bit 7, a + jr nz, .dont_copy + call Get2bpp +.dont_copy + pop de + ld hl, SPRITE_TILE_SIZE * 3 + add hl, de + ld d, h + ld e, l + pop hl + ld bc, vChars1 - vChars0 + add hl, bc + pop bc + pop af + call IsAnimatedSprite + ret c + ld a, [wcdaf] + bit 6, a + ret nz + call Get2bpp + ret + +; get the data for overworld sprite in a +; returns: gfx ptr in hl, length in c, bank in b +GetOverworldSpriteData: ; 05:417d + push hl + dec a + ld l, a + ld h, 0 + add hl, hl + add hl, hl + ld bc, OverworldSprites + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + inc hl + ld c, [hl] + swap c + inc hl + ld b, [hl] + pop hl + ret + +SECTION "OverworldSprites", ROMX[$423B], BANK[$05] + +overworld_sprite: MACRO +; pointer, length, bank + dw \1 + db \2 tiles, BANK(\1) +ENDM + +OverworldSprites:: + overworld_sprite GoldSpriteGFX, 12 + overworld_sprite GoldBikeSpriteGFX, 12 + overworld_sprite GoldSkateboardSpriteGFX, 12 + overworld_sprite SilverSpriteGFX, 12 + overworld_sprite OkidoSpriteGFX, 12 + overworld_sprite RedSpriteGFX, 12 + overworld_sprite BlueSpriteGFX, 12 + overworld_sprite MasakiSpriteGFX, 12 + overworld_sprite ElderSpriteGFX, 12 + overworld_sprite SakakiSpriteGFX, 12 + overworld_sprite GantetsuSpriteGFX, 12 + overworld_sprite MomSpriteGFX, 12 + overworld_sprite SilversMomSpriteGFX, 12 + overworld_sprite RedsMomSpriteGFX, 12 + overworld_sprite RedsMomSpriteGFX, 12 + overworld_sprite NanamiSpriteGFX, 12 + overworld_sprite EvilOkidoSpriteGFX, 12 + overworld_sprite KikukoSpriteGFX, 12 + overworld_sprite HayatoSpriteGFX, 12 + overworld_sprite TsukushiSpriteGFX, 12 + overworld_sprite TsukushiSpriteGFX, 12 + overworld_sprite EnokiSpriteGFX, 12 + overworld_sprite MikanSpriteGFX, 12 + overworld_sprite MikanSpriteGFX, 12 + overworld_sprite CooltrainerMSpriteGFX, 12 + overworld_sprite CooltrainerMSpriteGFX, 12 + overworld_sprite CooltrainerMSpriteGFX, 12 + overworld_sprite CooltrainerMSpriteGFX, 12 + overworld_sprite CooltrainerMSpriteGFX, 12 + overworld_sprite CooltrainerMSpriteGFX, 12 + overworld_sprite CooltrainerMSpriteGFX, 12 + overworld_sprite CooltrainerMSpriteGFX, 12 + overworld_sprite CooltrainerMSpriteGFX, 12 + overworld_sprite CooltrainerMSpriteGFX, 12 + overworld_sprite CooltrainerMSpriteGFX, 12 + overworld_sprite CooltrainerMSpriteGFX, 12 + overworld_sprite CooltrainerFSpriteGFX, 12 + overworld_sprite BugCatcherBoySpriteGFX, 12 + overworld_sprite TwinSpriteGFX, 12 + overworld_sprite YoungsterSpriteGFX, 12 + overworld_sprite LassSpriteGFX, 12 + overworld_sprite TeacherSpriteGFX, 12 + overworld_sprite GirlSpriteGFX, 12 + overworld_sprite SuperNerdSpriteGFX, 12 + overworld_sprite RockerSpriteGFX, 12 + overworld_sprite PokefanMSpriteGFX, 12 + overworld_sprite PokefanFSpriteGFX, 12 + overworld_sprite GrampsSpriteGFX, 12 + overworld_sprite GrannySpriteGFX, 12 + overworld_sprite SwimmerMSpriteGFX, 12 + overworld_sprite SwimmerFSpriteGFX, 12 + overworld_sprite RocketMSpriteGFX, 12 + overworld_sprite RocketMSpriteGFX, 12 + overworld_sprite RocketMSpriteGFX, 12 + overworld_sprite RocketFSpriteGFX, 12 + overworld_sprite NurseSpriteGFX, 12 + overworld_sprite LinkReceptionistSpriteGFX, 12 + overworld_sprite ClerkSpriteGFX, 12 + overworld_sprite FisherSpriteGFX, 12 + overworld_sprite FishingGuruSpriteGFX, 12 + overworld_sprite ScientistSpriteGFX, 12 + overworld_sprite MediumSpriteGFX, 12 + overworld_sprite SageSpriteGFX, 12 + overworld_sprite FrowningManSpriteGFX, 12 + overworld_sprite GentlemanSpriteGFX, 12 + overworld_sprite BlackbeltSpriteGFX, 12 + overworld_sprite ReceptionistSpriteGFX, 12 + overworld_sprite OfficerSpriteGFX, 12 + overworld_sprite CaptainSpriteGFX, 12 + overworld_sprite CaptainSpriteGFX, 12 + overworld_sprite CaptainSpriteGFX, 12 + overworld_sprite MohawkSpriteGFX, 12 + overworld_sprite GymGuySpriteGFX, 12 + overworld_sprite SailorSpriteGFX, 12 + overworld_sprite HelmetSpriteGFX, 12 + overworld_sprite BurglarSpriteGFX, 12 + overworld_sprite SidonSpriteGFX, 12 + overworld_sprite PippiSpriteGFX, 12 + overworld_sprite PoppoSpriteGFX, 12 + overworld_sprite LizardonSpriteGFX, 12 + overworld_sprite KabigonSpriteGFX, 4 + overworld_sprite PawouSpriteGFX, 12 + overworld_sprite NyorobonSpriteGFX, 12 + overworld_sprite LaplaceSpriteGFX, 12 + overworld_sprite PokeBallSpriteGFX, 4 + overworld_sprite PokedexSpriteGFX, 4 + overworld_sprite PaperSpriteGFX, 4 + overworld_sprite OldLinkReceptionistSpriteGFX, 4 + overworld_sprite OldLinkReceptionistSpriteGFX, 4 + overworld_sprite EggSpriteGFX, 4 + overworld_sprite BoulderSpriteGFX, 4 diff --git a/home/copy2.asm b/home/copy2.asm index 7274d8d..e74ef8b 100644 --- a/home/copy2.asm +++ b/home/copy2.asm @@ -3,7 +3,7 @@ INCLUDE "constants.asm" SECTION "Video Copy functions", ROM0[$0D02] RedrawPlayerSprite:: - jpab Function14000 + jpab _RedrawPlayerSprite LoadFont:: ; 00:0d0a jpab LoadFontGraphics diff --git a/home/map.asm b/home/map.asm index 8c03d9f..21e41c8 100644 --- a/home/map.asm +++ b/home/map.asm @@ -448,8 +448,8 @@ FadeIn:: ; 23e5 ; This is not OverworldFadeIn, but I don't know what it is ret Function2407:: ; 00:2407 - ld a, $2a - ld [wcb77], a + ld a, NO_MOVEMENT + ld [wPlayerMovement], a xor a ld [wPlayerAction], a ld a, [wPlayerFacing] @@ -505,7 +505,7 @@ CheckMovingOffEdgeOfMap:: ; 245e ret .down - ld a, [wPlayerStandingMapY] + ld a, [wPlayerNextMapY] sub 4 ld b, a ld a, [wMapHeight] @@ -516,7 +516,7 @@ CheckMovingOffEdgeOfMap:: ; 245e ret .up - ld a, [wPlayerStandingMapY] + ld a, [wPlayerNextMapY] sub 4 cp -1 jr z, .ok @@ -524,7 +524,7 @@ CheckMovingOffEdgeOfMap:: ; 245e ret .left - ld a, [wPlayerStandingMapX] + ld a, [wPlayerNextMapX] sub 4 cp -1 jr z, .ok @@ -532,7 +532,7 @@ CheckMovingOffEdgeOfMap:: ; 245e ret .right - ld a, [wPlayerStandingMapX] + ld a, [wPlayerNextMapX] sub 4 ld b, a ld a, [wMapWidth] @@ -701,10 +701,10 @@ WarpCheck:: ; 259f ret GetDestinationWarpPointer: ; 25b9 - ld a, [wPlayerStandingMapY] + ld a, [wPlayerNextMapY] sub 4 ld d, a - ld a, [wPlayerStandingMapX] + ld a, [wPlayerNextMapX] sub 4 ld e, a ld a, [wCurrMapWarpCount] diff --git a/home/map_objects.asm b/home/map_objects.asm index 70cba50..cc82ef3 100644 --- a/home/map_objects.asm +++ b/home/map_objects.asm @@ -334,26 +334,34 @@ Function17cb:: call Bankswitch ret -Function17de:: +; sets carry flag if the sprite data includes "in-motion" sprites +IsAnimatedSprite:: ; 00:17de push hl push bc ld c, a - ld b, $ff - ld hl, .Data -.asm_17e6: ; 00:17e6 + ld b, -1 + ld hl, .NonAnimatedSprites +.loop ld a, [hli] cp b - jr z, .asm_17ee + jr z, .done cp c - jr nz, .asm_17e6 + jr nz, .loop scf -.asm_17ee: ; 00:17ee +.done pop bc pop hl ret -.Data: ; 00:17f1 - db $51, $55, $56, $57, $58, $5a, $5b, $ff +.NonAnimatedSprites: ; 00:17f1 + db SPRITE_KABIGON + db SPRITE_POKE_BALL + db SPRITE_POKEDEX + db SPRITE_PAPER + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_EGG + db SPRITE_BOULDER + db -1 Function17f9:: call GetMapObject diff --git a/home/tileset.asm b/home/tileset.asm index aabf249..4929159 100644 --- a/home/tileset.asm +++ b/home/tileset.asm @@ -50,7 +50,7 @@ RefreshPlayerCoords:: ; 2d74 ld a, [wXCoord] add a, 4 ld d, a - ld hl, wPlayerStandingMapX + ld hl, wPlayerNextMapX sub [hl] ld [hl], d ld hl, wPlayerObjectXCoord @@ -61,7 +61,7 @@ RefreshPlayerCoords:: ; 2d74 ld a, [wYCoord] add a, 4 ld e, a - ld hl, wPlayerStandingMapY + ld hl, wPlayerNextMapY sub [hl] ld [hl], e ld hl, wPlayerObjectYCoord @@ -211,18 +211,18 @@ SaveScreen:: ; 2df1 RefreshTiles:: ; 2e52 call .left_right call .up_down - ld a, [wPlayerStandingMapX] + ld a, [wPlayerNextMapX] ld d, a - ld a, [wPlayerStandingMapY] + ld a, [wPlayerNextMapY] ld e, a call GetCoordTile ld [wPlayerStandingTile], a ret .up_down ; 2e67 - ld a, [wPlayerStandingMapX] + ld a, [wPlayerNextMapX] ld d, a - ld a, [wPlayerStandingMapY] + ld a, [wPlayerNextMapY] ld e, a push de inc e @@ -235,9 +235,9 @@ RefreshTiles:: ; 2e52 ret .left_right ; 2e80 - ld a, [wPlayerStandingMapX] + ld a, [wPlayerNextMapX] ld d, a - ld a, [wPlayerStandingMapY] + ld a, [wPlayerNextMapY] ld e, a push de dec d @@ -270,10 +270,10 @@ GetFacingTileCoord:: ; 2e99 ld h, [hl] ld l, a - ld a, [wPlayerStandingMapX] + ld a, [wPlayerNextMapX] add a, d ld d, a - ld a, [wPlayerStandingMapY] + ld a, [wPlayerNextMapY] add a, e ld e, a ld a, [hl] diff --git a/hram.asm b/hram.asm index 9d8da3f..1803496 100644 --- a/hram.asm +++ b/hram.asm @@ -79,17 +79,13 @@ hSpriteHeight:: ; ffb0 NEXTU -hConnectionStripLength:: ; ffaf - db -hConnectedMapWidth:: ; ffb0 - db +hConnectionStripLength:: db ; ffaf +hConnectedMapWidth:: db ; ffb0 NEXTU -hMapObjectIndexBuffer:: ; ffaf - db -hObjectStructIndexBuffer:: ; ffb0 - db +hMapObjectIndexBuffer:: db ; ffaf +hObjectStructIndexBuffer:: db ; ffb0 ENDU diff --git a/macros/wram.asm b/macros/wram.asm index da67ba5..4433267 100644 --- a/macros/wram.asm +++ b/macros/wram.asm @@ -275,8 +275,8 @@ object_struct: MACRO \1Facing:: ds 1 \1StandingTile:: ds 1 ; collision \1LastTile:: ds 1 ; collision -\1StandingMapX:: ds 1 -\1StandingMapY:: ds 1 +\1NextMapX:: ds 1 +\1NextMapY:: ds 1 \1LastMapX:: ds 1 \1LastMapY:: ds 1 \1ObjectInitX:: ds 1 diff --git a/shim.sym b/shim.sym index da80057..104b756 100644 --- a/shim.sym +++ b/shim.sym @@ -81,8 +81,6 @@ 04:640B Function1240b 04:6C58 CheckRegisteredItem -05:4000 Function14000 -05:400A GetPlayerSprite 05:4036 RefreshSprites 05:404C CheckInteriorMap 05:405B AddIndoorSprites diff --git a/wram.asm b/wram.asm index 62a4a23..999dac1 100644 --- a/wram.asm +++ b/wram.asm @@ -252,7 +252,7 @@ wVBCopyFarSize:: ds 1 ; cb71 wVBCopyFarSrc:: ds 2 ; cb72 wVBCopyFarDst:: ds 2 ; cb74 wVBCopyFarSrcBank:: ds 1 ; cb76 -wcb77:: db ; cb77 +wPlayerMovement:: db ; cb77 wMovementObject:: db ; cb78 ptrba wMovementData ; cb79 @@ -466,7 +466,8 @@ SECTION "CD9E", WRAM0 [$CD9E] wcd9e:: db -SECTION "CDB0", WRAM0 [$CDB0] +SECTION "CDAF", WRAM0 [$CDAF] +wcdaf:: db ; cdaf wcdb0:: ; bit 0 = has engaged NPC in dialogue (?) db -- cgit v1.2.3 From 2dfc7fc635b13291588ba8aae65fd0ece7211799 Mon Sep 17 00:00:00 2001 From: Pokeglitch Date: Mon, 25 Jun 2018 22:55:48 -0400 Subject: Moved CollisionTypeTable to separate file --- data/collision/collision_type_table.asm | 69 ++++++++++++++++++++++++++++++++ data/collision/collision_type_table.bin | Bin 256 -> 0 bytes engine/overworld/player_movement.asm | 68 +------------------------------ 3 files changed, 71 insertions(+), 66 deletions(-) create mode 100755 data/collision/collision_type_table.asm delete mode 100644 data/collision/collision_type_table.bin diff --git a/data/collision/collision_type_table.asm b/data/collision/collision_type_table.asm new file mode 100755 index 0000000..aa53802 --- /dev/null +++ b/data/collision/collision_type_table.asm @@ -0,0 +1,69 @@ +INCLUDE "constants.asm" + +SECTION "Collision Type Table", ROMX[$4664], BANK[$3] + +CollisionTypeTable: ; 03:4664 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $00 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $04 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $08 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $0C + db NEVER_SOLID, NEVER_SOLID, SOMETIMES_SOLID, NEVER_SOLID ; $10 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $14 + db NEVER_SOLID, NEVER_SOLID, SOMETIMES_SOLID, NEVER_SOLID ; $18 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $1C + db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $20 + db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, ALWAYS_SOLID ; $24 + db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $28 + db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, ALWAYS_SOLID ; $30 + db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $34 + db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $38 + db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $3C + db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $40 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $44 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $48 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $4C + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $50 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $54 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $58 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $5C + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $60 + db NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID, NEVER_SOLID ; $64 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $68 + db NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID, NEVER_SOLID ; $6C + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $70 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $74 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $78 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $7C + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $80 + db ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID ; $84 + db ALWAYS_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $88 + db ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID ; $8C + db ALWAYS_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $90 + db ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID ; $94 + db ALWAYS_SOLID, ALWAYS_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $98 + db ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID ; $9C + db ALWAYS_SOLID, ALWAYS_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $A0 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $A4 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $A8 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $AC + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $B0 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $B4 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $B8 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $BC + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $C0 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $C4 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $C8 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $CC + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $D0 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $D4 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $D8 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $DC + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $E0 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $E4 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $E8 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $EC + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $F0 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $F4 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $F8 + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $FC + db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $100 diff --git a/data/collision/collision_type_table.bin b/data/collision/collision_type_table.bin deleted file mode 100644 index c70e2bd..0000000 Binary files a/data/collision/collision_type_table.bin and /dev/null differ diff --git a/engine/overworld/player_movement.asm b/engine/overworld/player_movement.asm index 0fcd6e9..f425e69 100644 --- a/engine/overworld/player_movement.asm +++ b/engine/overworld/player_movement.asm @@ -1080,72 +1080,8 @@ GetCollisionType:: pop de ret -CollisionTypeTable: ; 03:4664 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $00 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $04 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $08 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $0C - db NEVER_SOLID, NEVER_SOLID, SOMETIMES_SOLID, NEVER_SOLID ; $10 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $14 - db NEVER_SOLID, NEVER_SOLID, SOMETIMES_SOLID, NEVER_SOLID ; $18 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $1C - db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $20 - db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, ALWAYS_SOLID ; $24 - db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $28 - db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, ALWAYS_SOLID ; $30 - db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $34 - db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $38 - db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $3C - db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $40 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $44 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $48 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $4C - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $50 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $54 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $58 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $5C - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $60 - db NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID, NEVER_SOLID ; $64 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $68 - db NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID, NEVER_SOLID ; $6C - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $70 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $74 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $78 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $7C - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $80 - db ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID ; $84 - db ALWAYS_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $88 - db ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID ; $8C - db ALWAYS_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $90 - db ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID ; $94 - db ALWAYS_SOLID, ALWAYS_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $98 - db ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID ; $9C - db ALWAYS_SOLID, ALWAYS_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $A0 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $A4 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $A8 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $AC - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $B0 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $B4 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $B8 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $BC - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $C0 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $C4 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $C8 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $CC - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $D0 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $D4 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $D8 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $DC - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $E0 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $E4 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $E8 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $EC - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $F0 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $F4 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $F8 - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $FC - db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $100 - +SECTION "Rest of Player Movement", ROMX[$4764], BANK[$3] + _UnusedReturnFalse:: ; 03:4764 xor a ret -- cgit v1.2.3 From e596d41c1790bb9b77c9e941aab5eb4b1305dbb5 Mon Sep 17 00:00:00 2001 From: obskyr Date: Tue, 3 Jul 2018 04:59:38 +0200 Subject: A few small formatting fixes --- audio/engine.asm | 2 +- data/collision/collision_type_table.asm | 2 +- data/trainers/parties.asm | 96 ++++++++++++++++----------------- engine/overworld/player_movement.asm | 4 +- engine/palettes.asm | 4 +- engine/title.asm | 4 +- home/oam_dma.asm | 2 +- sram.asm | 6 +-- vram.asm | 2 +- wram.asm | 7 ++- 10 files changed, 64 insertions(+), 65 deletions(-) diff --git a/audio/engine.asm b/audio/engine.asm index 8d66a08..e4f3a2f 100644 --- a/audio/engine.asm +++ b/audio/engine.asm @@ -502,7 +502,7 @@ FadeMusic: ; 3a:43ce ld [wVolume], a ret -SECTION "Audio engine, part 2", ROMX[$4CEE],BANK[$3A] ; TODO: disassemble what's above (gulp) and remove this +SECTION "Audio engine, part 2", ROMX[$4CEE], BANK[$3A] ; TODO: disassemble what's above (gulp) and remove this SetGlobalTempo: ; 3a:4cee push bc diff --git a/data/collision/collision_type_table.asm b/data/collision/collision_type_table.asm index aa53802..6919535 100755 --- a/data/collision/collision_type_table.asm +++ b/data/collision/collision_type_table.asm @@ -1,6 +1,6 @@ INCLUDE "constants.asm" -SECTION "Collision Type Table", ROMX[$4664], BANK[$3] +SECTION "Collision Type Table", ROMX[$4664], BANK[$03] CollisionTypeTable: ; 03:4664 db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $00 diff --git a/data/trainers/parties.asm b/data/trainers/parties.asm index 8c702d1..1889583 100644 --- a/data/trainers/parties.asm +++ b/data/trainers/parties.asm @@ -622,7 +622,7 @@ KimonoGirlGroup:: else -SECTION "Trainer Parties 1 TEMPORARY", ROMX[$51BF],BANK[$E] +SECTION "Trainer Parties 1 TEMPORARY", ROMX[$51BF], BANK[$E] AkaneGroup:: BugCatcherBoyGroup:: ; BUG_CATCHER_BOY_KENJI @@ -635,47 +635,47 @@ BugCatcherBoyGroup:: db 7, DEX_KONGPANG, ITEM_NONE, MOVE_STUN_SPORE, MOVE_LEECH_LIFE, MOVE_NONE, MOVE_NONE db -1 ; end -SECTION "Trainer Parties 2 TEMPORARY", ROMX[$52B4],BANK[$E] +SECTION "Trainer Parties 2 TEMPORARY", ROMX[$52B4], BANK[$E] MikanGroup:: -SECTION "Trainer Parties 3 TEMPORARY", ROMX[$53BC],BANK[$E] +SECTION "Trainer Parties 3 TEMPORARY", ROMX[$53BC], BANK[$E] OkidoGroup:: -SECTION "Trainer Parties 4 TEMPORARY", ROMX[$54BA],BANK[$E] +SECTION "Trainer Parties 4 TEMPORARY", ROMX[$54BA], BANK[$E] WataruGroup:: -SECTION "Trainer Parties 5 TEMPORARY", ROMX[$54E0],BANK[$E] +SECTION "Trainer Parties 5 TEMPORARY", ROMX[$54E0], BANK[$E] GerugeMemberMGroup:: -SECTION "Trainer Parties 6 TEMPORARY", ROMX[$54FE],BANK[$E] +SECTION "Trainer Parties 6 TEMPORARY", ROMX[$54FE], BANK[$E] Trio1Group:: BeautyGroup:: -SECTION "Trainer Parties 7 TEMPORARY", ROMX[$55EB],BANK[$E] +SECTION "Trainer Parties 7 TEMPORARY", ROMX[$55EB], BANK[$E] FledglingGroup:: -SECTION "Trainer Parties 8 TEMPORARY", ROMX[$56CE],BANK[$E] +SECTION "Trainer Parties 8 TEMPORARY", ROMX[$56CE], BANK[$E] PokeManiacGroup:: -SECTION "Trainer Parties 9 TEMPORARY", ROMX[$57BC],BANK[$E] +SECTION "Trainer Parties 9 TEMPORARY", ROMX[$57BC], BANK[$E] GentlemanGroup:: -SECTION "Trainer Parties 10 TEMPORARY", ROMX[$57E0],BANK[$E] +SECTION "Trainer Parties 10 TEMPORARY", ROMX[$57E0], BANK[$E] TeacherMGroup:: -SECTION "Trainer Parties 11 TEMPORARY", ROMX[$57EC],BANK[$E] +SECTION "Trainer Parties 11 TEMPORARY", ROMX[$57EC], BANK[$E] TeacherFGroup:: -SECTION "Trainer Parties 12 TEMPORARY", ROMX[$57F2],BANK[$E] +SECTION "Trainer Parties 12 TEMPORARY", ROMX[$57F2], BANK[$E] ManchildGroup:: -SECTION "Trainer Parties 13 TEMPORARY", ROMX[$58C3],BANK[$E] +SECTION "Trainer Parties 13 TEMPORARY", ROMX[$58C3], BANK[$E] RockerGroup:: -SECTION "Trainer Parties 14 TEMPORARY", ROMX[$58F2],BANK[$E] +SECTION "Trainer Parties 14 TEMPORARY", ROMX[$58F2], BANK[$E] HikerGroup:: -SECTION "Trainer Parties 15 TEMPORARY", ROMX[$5995],BANK[$E] +SECTION "Trainer Parties 15 TEMPORARY", ROMX[$5995], BANK[$E] KimonoGirlGroup:: ; KIMONO_GIRL_KOUME db "こうめ@", TRAINERTYPE_ITEM_MOVES @@ -687,112 +687,112 @@ KimonoGirlGroup:: db 10, DEX_PURIN, ITEM_NONE, MOVE_CHARM, MOVE_POUND, MOVE_ENCORE, MOVE_NONE db -1 ; end -SECTION "Trainer Parties 16 TEMPORARY", ROMX[$518A],BANK[$E] +SECTION "Trainer Parties 16 TEMPORARY", ROMX[$518A], BANK[$E] HayatoGroup:: -SECTION "Trainer Parties 17 TEMPORARY", ROMX[$5216],BANK[$E] +SECTION "Trainer Parties 17 TEMPORARY", ROMX[$5216], BANK[$E] TsukishiGroup:: LassGroup:: -SECTION "Trainer Parties 18 TEMPORARY", ROMX[$526F],BANK[$E] +SECTION "Trainer Parties 18 TEMPORARY", ROMX[$526F], BANK[$E] EnokiGroup:: -SECTION "Trainer Parties 19 TEMPORARY", ROMX[$528F],BANK[$E] +SECTION "Trainer Parties 19 TEMPORARY", ROMX[$528F], BANK[$E] OkeraGroup:: -SECTION "Trainer Parties 20 TEMPORARY", ROMX[$533D],BANK[$E] +SECTION "Trainer Parties 20 TEMPORARY", ROMX[$533D], BANK[$E] GamaGroup:: -SECTION "Trainer Parties 21 TEMPORARY", ROMX[$5542],BANK[$E] +SECTION "Trainer Parties 21 TEMPORARY", ROMX[$5542], BANK[$E] Trio2Group:: -SECTION "Trainer Parties 22 TEMPORARY", ROMX[$5554],BANK[$E] +SECTION "Trainer Parties 22 TEMPORARY", ROMX[$5554], BANK[$E] Trio3Group:: -SECTION "Trainer Parties 23 TEMPORARY", ROMX[$5673],BANK[$E] +SECTION "Trainer Parties 23 TEMPORARY", ROMX[$5673], BANK[$E] ProfessionalMGroup:: ProfessionalFGroup:: -SECTION "Trainer Parties 24 TEMPORARY", ROMX[$5812],BANK[$E] +SECTION "Trainer Parties 24 TEMPORARY", ROMX[$5812], BANK[$E] SwimmerMGroup:: -SECTION "Trainer Parties 25 TEMPORARY", ROMX[$5821],BANK[$E] +SECTION "Trainer Parties 25 TEMPORARY", ROMX[$5821], BANK[$E] SuperNerdGroup:: -SECTION "Trainer Parties 26 TEMPORARY", ROMX[$5833],BANK[$E] +SECTION "Trainer Parties 26 TEMPORARY", ROMX[$5833], BANK[$E] EngineerGroup:: -SECTION "Trainer Parties 27 TEMPORARY", ROMX[$5965],BANK[$E] +SECTION "Trainer Parties 27 TEMPORARY", ROMX[$5965], BANK[$E] JugglerGroup:: -SECTION "Trainer Parties 28 TEMPORARY", ROMX[$5971],BANK[$E] +SECTION "Trainer Parties 28 TEMPORARY", ROMX[$5971], BANK[$E] TwinsGroup:: -SECTION "Trainer Parties 29 TEMPORARY", ROMX[$5976],BANK[$E] +SECTION "Trainer Parties 29 TEMPORARY", ROMX[$5976], BANK[$E] SchoolboyGroup:: ; SCHOOLBOY_TETSUYA db "てつや@", TRAINERTYPE_ITEM db 8, DEX_YADOKING, ITEM_NONE db -1 ; end -SECTION "Trainer Parties 30 TEMPORARY", ROMX[$597F],BANK[$E] +SECTION "Trainer Parties 30 TEMPORARY", ROMX[$597F], BANK[$E] FirebreatherGroup:: ; FIREBREATHER_AKITO db "あきと@", TRAINERTYPE_ITEM db 8, DEX_BOOBY, ITEM_NONE db -1 ; end -SECTION "Trainer Parties 31 TEMPORARY", ROMX[$5320],BANK[$E] +SECTION "Trainer Parties 31 TEMPORARY", ROMX[$5320], BANK[$E] BlueGroup:: -SECTION "Trainer Parties 32 TEMPORARY", ROMX[$5375],BANK[$E] +SECTION "Trainer Parties 32 TEMPORARY", ROMX[$5375], BANK[$E] RivalGroup:: -SECTION "Trainer Parties 33 TEMPORARY", ROMX[$5404],BANK[$E] +SECTION "Trainer Parties 33 TEMPORARY", ROMX[$5404], BANK[$E] SakakiGroup:: -SECTION "Trainer Parties 34 TEMPORARY", ROMX[$5427],BANK[$E] +SECTION "Trainer Parties 34 TEMPORARY", ROMX[$5427], BANK[$E] ProtagonistGroup:: -SECTION "Trainer Parties 35 TEMPORARY", ROMX[$5433],BANK[$E] +SECTION "Trainer Parties 35 TEMPORARY", ROMX[$5433], BANK[$E] SibaGroup:: KasumiGroup:: FisherGroup:: -SECTION "Trainer Parties 36 TEMPORARY", ROMX[$5476],BANK[$E] +SECTION "Trainer Parties 36 TEMPORARY", ROMX[$5476], BANK[$E] KannaGroup:: -SECTION "Trainer Parties 37 TEMPORARY", ROMX[$555D],BANK[$E] +SECTION "Trainer Parties 37 TEMPORARY", ROMX[$555D], BANK[$E] RocketFGroup:: -SECTION "Trainer Parties 38 TEMPORARY", ROMX[$557E],BANK[$E] +SECTION "Trainer Parties 38 TEMPORARY", ROMX[$557E], BANK[$E] YoungsterGroup:: -SECTION "Trainer Parties 39 TEMPORARY", ROMX[$564F],BANK[$E] +SECTION "Trainer Parties 39 TEMPORARY", ROMX[$564F], BANK[$E] ProdigyGroup:: -SECTION "Trainer Parties 40 TEMPORARY", ROMX[$578C],BANK[$E] +SECTION "Trainer Parties 40 TEMPORARY", ROMX[$578C], BANK[$E] RocketMGroup:: -SECTION "Trainer Parties 41 TEMPORARY", ROMX[$5808],BANK[$E] +SECTION "Trainer Parties 41 TEMPORARY", ROMX[$5808], BANK[$E] SwimmerFGroup:: -SECTION "Trainer Parties 42 TEMPORARY", ROMX[$5817],BANK[$E] +SECTION "Trainer Parties 42 TEMPORARY", ROMX[$5817], BANK[$E] SailorGroup:: -SECTION "Trainer Parties 43 TEMPORARY", ROMX[$58FE],BANK[$E] +SECTION "Trainer Parties 43 TEMPORARY", ROMX[$58FE], BANK[$E] BikerGroup:: -SECTION "Trainer Parties 44 TEMPORARY", ROMX[$594D],BANK[$E] +SECTION "Trainer Parties 44 TEMPORARY", ROMX[$594D], BANK[$E] RockClimberGroup:: -SECTION "Trainer Parties 45 TEMPORARY", ROMX[$5959],BANK[$E] +SECTION "Trainer Parties 45 TEMPORARY", ROMX[$5959], BANK[$E] BurglarGroup:: -SECTION "Trainer Parties 46 TEMPORARY", ROMX[$5969],BANK[$E] +SECTION "Trainer Parties 46 TEMPORARY", ROMX[$5969], BANK[$E] BlackbeltGroup:: -SECTION "Trainer Parties 47 TEMPORARY", ROMX[$596D],BANK[$E] +SECTION "Trainer Parties 47 TEMPORARY", ROMX[$596D], BANK[$E] PsychicGroup:: KungFuMasterGroup:: FortuneTellerGroup:: @@ -802,7 +802,7 @@ MediumGroup:: SoldierGroup:: GerugeMemberFGroup:: -SECTION "Trainer Parties 48 TEMPORARY", ROMX[$5988],BANK[$E] +SECTION "Trainer Parties 48 TEMPORARY", ROMX[$5988], BANK[$E] SportsmanGroup:: ; SPORTSMAN_SHIGEKI db "てつじ@", TRAINERTYPE_ITEM_MOVES diff --git a/engine/overworld/player_movement.asm b/engine/overworld/player_movement.asm index 0954dc2..3c8cf7c 100644 --- a/engine/overworld/player_movement.asm +++ b/engine/overworld/player_movement.asm @@ -1,6 +1,6 @@ INCLUDE "constants.asm" -SECTION "Player Movement", ROMX[$4000], BANK[$3] +SECTION "Player Movement", ROMX[$4000], BANK[$03] OverworldMovementCheck:: ; 03:4000 jp _OverworldMovementCheck @@ -1080,7 +1080,7 @@ GetCollisionType:: pop de ret -SECTION "Rest of Player Movement", ROMX[$4764], BANK[$3] +SECTION "Rest of Player Movement", ROMX[$4764], BANK[$03] _UnusedReturnFalse:: ; 03:4764 xor a diff --git a/engine/palettes.asm b/engine/palettes.asm index d1f93c0..67ed9fe 100644 --- a/engine/palettes.asm +++ b/engine/palettes.asm @@ -1,6 +1,6 @@ INCLUDE "constants.asm" -SECTION "Overworld fade", ROMX[$433e],BANK[$23] +SECTION "Overworld fade", ROMX[$433e], BANK[$23] OverworldFadeIn:: ; 23:433e ld c, 0 @@ -18,7 +18,7 @@ OverworldFadeOut:: ; 23:4349 ; TODO: merge this -SECTION "Palette fading, part 2?", ROMX[$43d1],BANK[$23] +SECTION "Palette fading, part 2?", ROMX[$43d1], BANK[$23] ApplyPalettesAtHL:: ; 23:43d1 push hl diff --git a/engine/title.asm b/engine/title.asm index 7f9d707..d7ae3a7 100644 --- a/engine/title.asm +++ b/engine/title.asm @@ -630,9 +630,9 @@ SetTitleGfxNext:: ret if DEBUG -SECTION "Title screen TEMPORARY", ROMX[$62A5],BANK[1] ; TODO: merge this with the main section above +SECTION "Title screen TEMPORARY", ROMX[$62A5], BANK[$01] ; TODO: merge this with the main section above else -SECTION "Title screen TEMPORARY", ROMX[$62A2],BANK[1] ; TODO: merge this with the main section above +SECTION "Title screen TEMPORARY", ROMX[$62A2], BANK[$01] ; TODO: merge this with the main section above endc diff --git a/home/oam_dma.asm b/home/oam_dma.asm index 42ecaaf..42c68e7 100644 --- a/home/oam_dma.asm +++ b/home/oam_dma.asm @@ -1,6 +1,6 @@ INCLUDE "constants.asm" -SECTION "OAM DMA", ROMX[$4153],BANK[1] +SECTION "OAM DMA", ROMX[$4153], BANK[$01] WriteOAMDMACodeToHRAM:: ; 4153 ld c, LOW(hOAMDMA) diff --git a/sram.asm b/sram.asm index b619fa1..fbdd966 100644 --- a/sram.asm +++ b/sram.asm @@ -1,15 +1,15 @@ INCLUDE "constants.asm" -SECTION "Sprite Buffers", SRAM, BANK[0] +SECTION "Sprite Buffers", SRAM, BANK[$00] sSpriteBuffer0:: ds SPRITEBUFFERSIZE ; a000 sSpriteBuffer1:: ds SPRITEBUFFERSIZE ; a188 sSpriteBuffer2:: ds SPRITEBUFFERSIZE ; a310 -SECTION "Unknown, bank 0", SRAM[$A600],BANK[0] +SECTION "Unknown, bank 0", SRAM[$A600], BANK[$00] s0_a600:: ; TODO: properly label this ds 7 ; TODO: figure out exact size -SECTION "Window Stack Top", SRAM[$BFFE], BANK[0] +SECTION "Window Stack Top", SRAM[$BFFE], BANK[$00] sWindowStackTop:: dw diff --git a/vram.asm b/vram.asm index 3ebac0f..a6b91c2 100644 --- a/vram.asm +++ b/vram.asm @@ -1,6 +1,6 @@ INCLUDE "constants.asm" -SECTION "VRAM", VRAM[$8000],BANK[0] ; Get around a RGBLINK bug. Remove this when it doesn't yield an error about fixing the section +SECTION "VRAM", VRAM[$8000], BANK[$00] ; Get around a RGBLINK bug. Remove this when it doesn't yield an error about fixing the section UNION diff --git a/wram.asm b/wram.asm index ac9eeee..c11d342 100644 --- a/wram.asm +++ b/wram.asm @@ -635,10 +635,9 @@ wActiveFrame:: db ; ce61 wTextBoxFlags:: db ; ce62 wDebugFlags:: db ; ce63 -; 76543210 -; \/|\- debug battle indicator -; | \-- debug field indicator -; \---- loaded/continued game +; Bit 0: Debug battle indicator +; Bit 1: Debug field indicator +; Bit 2-3: Game is continued (set when selecting continue on the main menu) ds 3 -- cgit v1.2.3 From 3fab27f221a8d5400d4b203809ff9b13355d55a3 Mon Sep 17 00:00:00 2001 From: obskyr Date: Tue, 3 Jul 2018 05:07:59 +0200 Subject: Yet a few more formatting fixes --- data/trainers/parties.asm | 98 +++++++++++++++++++++++------------------------ 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/data/trainers/parties.asm b/data/trainers/parties.asm index 1889583..013cf58 100644 --- a/data/trainers/parties.asm +++ b/data/trainers/parties.asm @@ -9,7 +9,7 @@ INCLUDE "constants.asm" ; * for TRAINERTYPE_ITEM_MOVES: db level, species, item, 4 moves ; - db -1 ; end -SECTION "Trainer Parties", ROMX[$5110], BANK[$E] +SECTION "Trainer Parties", ROMX[$5110], BANK[$0E] INCLUDE "data/trainers/party_pointers.inc" @@ -622,7 +622,7 @@ KimonoGirlGroup:: else -SECTION "Trainer Parties 1 TEMPORARY", ROMX[$51BF], BANK[$E] +SECTION "Trainer Parties 1 TEMPORARY", ROMX[$51BF], BANK[$0E] AkaneGroup:: BugCatcherBoyGroup:: ; BUG_CATCHER_BOY_KENJI @@ -635,47 +635,47 @@ BugCatcherBoyGroup:: db 7, DEX_KONGPANG, ITEM_NONE, MOVE_STUN_SPORE, MOVE_LEECH_LIFE, MOVE_NONE, MOVE_NONE db -1 ; end -SECTION "Trainer Parties 2 TEMPORARY", ROMX[$52B4], BANK[$E] +SECTION "Trainer Parties 2 TEMPORARY", ROMX[$52B4], BANK[$0E] MikanGroup:: -SECTION "Trainer Parties 3 TEMPORARY", ROMX[$53BC], BANK[$E] +SECTION "Trainer Parties 3 TEMPORARY", ROMX[$53BC], BANK[$0E] OkidoGroup:: -SECTION "Trainer Parties 4 TEMPORARY", ROMX[$54BA], BANK[$E] +SECTION "Trainer Parties 4 TEMPORARY", ROMX[$54BA], BANK[$0E] WataruGroup:: -SECTION "Trainer Parties 5 TEMPORARY", ROMX[$54E0], BANK[$E] +SECTION "Trainer Parties 5 TEMPORARY", ROMX[$54E0], BANK[$0E] GerugeMemberMGroup:: -SECTION "Trainer Parties 6 TEMPORARY", ROMX[$54FE], BANK[$E] +SECTION "Trainer Parties 6 TEMPORARY", ROMX[$54FE], BANK[$0E] Trio1Group:: BeautyGroup:: -SECTION "Trainer Parties 7 TEMPORARY", ROMX[$55EB], BANK[$E] +SECTION "Trainer Parties 7 TEMPORARY", ROMX[$55EB], BANK[$0E] FledglingGroup:: -SECTION "Trainer Parties 8 TEMPORARY", ROMX[$56CE], BANK[$E] +SECTION "Trainer Parties 8 TEMPORARY", ROMX[$56CE], BANK[$0E] PokeManiacGroup:: -SECTION "Trainer Parties 9 TEMPORARY", ROMX[$57BC], BANK[$E] +SECTION "Trainer Parties 9 TEMPORARY", ROMX[$57BC], BANK[$0E] GentlemanGroup:: -SECTION "Trainer Parties 10 TEMPORARY", ROMX[$57E0], BANK[$E] +SECTION "Trainer Parties 10 TEMPORARY", ROMX[$57E0], BANK[$0E] TeacherMGroup:: -SECTION "Trainer Parties 11 TEMPORARY", ROMX[$57EC], BANK[$E] +SECTION "Trainer Parties 11 TEMPORARY", ROMX[$57EC], BANK[$0E] TeacherFGroup:: -SECTION "Trainer Parties 12 TEMPORARY", ROMX[$57F2], BANK[$E] +SECTION "Trainer Parties 12 TEMPORARY", ROMX[$57F2], BANK[$0E] ManchildGroup:: -SECTION "Trainer Parties 13 TEMPORARY", ROMX[$58C3], BANK[$E] +SECTION "Trainer Parties 13 TEMPORARY", ROMX[$58C3], BANK[$0E] RockerGroup:: -SECTION "Trainer Parties 14 TEMPORARY", ROMX[$58F2], BANK[$E] +SECTION "Trainer Parties 14 TEMPORARY", ROMX[$58F2], BANK[$0E] HikerGroup:: -SECTION "Trainer Parties 15 TEMPORARY", ROMX[$5995], BANK[$E] +SECTION "Trainer Parties 15 TEMPORARY", ROMX[$5995], BANK[$0E] KimonoGirlGroup:: ; KIMONO_GIRL_KOUME db "こうめ@", TRAINERTYPE_ITEM_MOVES @@ -687,112 +687,112 @@ KimonoGirlGroup:: db 10, DEX_PURIN, ITEM_NONE, MOVE_CHARM, MOVE_POUND, MOVE_ENCORE, MOVE_NONE db -1 ; end -SECTION "Trainer Parties 16 TEMPORARY", ROMX[$518A], BANK[$E] +SECTION "Trainer Parties 16 TEMPORARY", ROMX[$518A], BANK[$0E] HayatoGroup:: -SECTION "Trainer Parties 17 TEMPORARY", ROMX[$5216], BANK[$E] +SECTION "Trainer Parties 17 TEMPORARY", ROMX[$5216], BANK[$0E] TsukishiGroup:: LassGroup:: -SECTION "Trainer Parties 18 TEMPORARY", ROMX[$526F], BANK[$E] +SECTION "Trainer Parties 18 TEMPORARY", ROMX[$526F], BANK[$0E] EnokiGroup:: -SECTION "Trainer Parties 19 TEMPORARY", ROMX[$528F], BANK[$E] +SECTION "Trainer Parties 19 TEMPORARY", ROMX[$528F], BANK[$0E] OkeraGroup:: -SECTION "Trainer Parties 20 TEMPORARY", ROMX[$533D], BANK[$E] +SECTION "Trainer Parties 20 TEMPORARY", ROMX[$533D], BANK[$0E] GamaGroup:: -SECTION "Trainer Parties 21 TEMPORARY", ROMX[$5542], BANK[$E] +SECTION "Trainer Parties 21 TEMPORARY", ROMX[$5542], BANK[$0E] Trio2Group:: -SECTION "Trainer Parties 22 TEMPORARY", ROMX[$5554], BANK[$E] +SECTION "Trainer Parties 22 TEMPORARY", ROMX[$5554], BANK[$0E] Trio3Group:: -SECTION "Trainer Parties 23 TEMPORARY", ROMX[$5673], BANK[$E] +SECTION "Trainer Parties 23 TEMPORARY", ROMX[$5673], BANK[$0E] ProfessionalMGroup:: ProfessionalFGroup:: -SECTION "Trainer Parties 24 TEMPORARY", ROMX[$5812], BANK[$E] +SECTION "Trainer Parties 24 TEMPORARY", ROMX[$5812], BANK[$0E] SwimmerMGroup:: -SECTION "Trainer Parties 25 TEMPORARY", ROMX[$5821], BANK[$E] +SECTION "Trainer Parties 25 TEMPORARY", ROMX[$5821], BANK[$0E] SuperNerdGroup:: -SECTION "Trainer Parties 26 TEMPORARY", ROMX[$5833], BANK[$E] +SECTION "Trainer Parties 26 TEMPORARY", ROMX[$5833], BANK[$0E] EngineerGroup:: -SECTION "Trainer Parties 27 TEMPORARY", ROMX[$5965], BANK[$E] +SECTION "Trainer Parties 27 TEMPORARY", ROMX[$5965], BANK[$0E] JugglerGroup:: -SECTION "Trainer Parties 28 TEMPORARY", ROMX[$5971], BANK[$E] +SECTION "Trainer Parties 28 TEMPORARY", ROMX[$5971], BANK[$0E] TwinsGroup:: -SECTION "Trainer Parties 29 TEMPORARY", ROMX[$5976], BANK[$E] +SECTION "Trainer Parties 29 TEMPORARY", ROMX[$5976], BANK[$0E] SchoolboyGroup:: ; SCHOOLBOY_TETSUYA db "てつや@", TRAINERTYPE_ITEM db 8, DEX_YADOKING, ITEM_NONE db -1 ; end -SECTION "Trainer Parties 30 TEMPORARY", ROMX[$597F], BANK[$E] +SECTION "Trainer Parties 30 TEMPORARY", ROMX[$597F], BANK[$0E] FirebreatherGroup:: ; FIREBREATHER_AKITO db "あきと@", TRAINERTYPE_ITEM db 8, DEX_BOOBY, ITEM_NONE db -1 ; end -SECTION "Trainer Parties 31 TEMPORARY", ROMX[$5320], BANK[$E] +SECTION "Trainer Parties 31 TEMPORARY", ROMX[$5320], BANK[$0E] BlueGroup:: -SECTION "Trainer Parties 32 TEMPORARY", ROMX[$5375], BANK[$E] +SECTION "Trainer Parties 32 TEMPORARY", ROMX[$5375], BANK[$0E] RivalGroup:: -SECTION "Trainer Parties 33 TEMPORARY", ROMX[$5404], BANK[$E] +SECTION "Trainer Parties 33 TEMPORARY", ROMX[$5404], BANK[$0E] SakakiGroup:: -SECTION "Trainer Parties 34 TEMPORARY", ROMX[$5427], BANK[$E] +SECTION "Trainer Parties 34 TEMPORARY", ROMX[$5427], BANK[$0E] ProtagonistGroup:: -SECTION "Trainer Parties 35 TEMPORARY", ROMX[$5433], BANK[$E] +SECTION "Trainer Parties 35 TEMPORARY", ROMX[$5433], BANK[$0E] SibaGroup:: KasumiGroup:: FisherGroup:: -SECTION "Trainer Parties 36 TEMPORARY", ROMX[$5476], BANK[$E] +SECTION "Trainer Parties 36 TEMPORARY", ROMX[$5476], BANK[$0E] KannaGroup:: -SECTION "Trainer Parties 37 TEMPORARY", ROMX[$555D], BANK[$E] +SECTION "Trainer Parties 37 TEMPORARY", ROMX[$555D], BANK[$0E] RocketFGroup:: -SECTION "Trainer Parties 38 TEMPORARY", ROMX[$557E], BANK[$E] +SECTION "Trainer Parties 38 TEMPORARY", ROMX[$557E], BANK[$0E] YoungsterGroup:: -SECTION "Trainer Parties 39 TEMPORARY", ROMX[$564F], BANK[$E] +SECTION "Trainer Parties 39 TEMPORARY", ROMX[$564F], BANK[$0E] ProdigyGroup:: -SECTION "Trainer Parties 40 TEMPORARY", ROMX[$578C], BANK[$E] +SECTION "Trainer Parties 40 TEMPORARY", ROMX[$578C], BANK[$0E] RocketMGroup:: -SECTION "Trainer Parties 41 TEMPORARY", ROMX[$5808], BANK[$E] +SECTION "Trainer Parties 41 TEMPORARY", ROMX[$5808], BANK[$0E] SwimmerFGroup:: -SECTION "Trainer Parties 42 TEMPORARY", ROMX[$5817], BANK[$E] +SECTION "Trainer Parties 42 TEMPORARY", ROMX[$5817], BANK[$0E] SailorGroup:: -SECTION "Trainer Parties 43 TEMPORARY", ROMX[$58FE], BANK[$E] +SECTION "Trainer Parties 43 TEMPORARY", ROMX[$58FE], BANK[$0E] BikerGroup:: -SECTION "Trainer Parties 44 TEMPORARY", ROMX[$594D], BANK[$E] +SECTION "Trainer Parties 44 TEMPORARY", ROMX[$594D], BANK[$0E] RockClimberGroup:: -SECTION "Trainer Parties 45 TEMPORARY", ROMX[$5959], BANK[$E] +SECTION "Trainer Parties 45 TEMPORARY", ROMX[$5959], BANK[$0E] BurglarGroup:: -SECTION "Trainer Parties 46 TEMPORARY", ROMX[$5969], BANK[$E] +SECTION "Trainer Parties 46 TEMPORARY", ROMX[$5969], BANK[$0E] BlackbeltGroup:: -SECTION "Trainer Parties 47 TEMPORARY", ROMX[$596D], BANK[$E] +SECTION "Trainer Parties 47 TEMPORARY", ROMX[$596D], BANK[$0E] PsychicGroup:: KungFuMasterGroup:: FortuneTellerGroup:: @@ -802,7 +802,7 @@ MediumGroup:: SoldierGroup:: GerugeMemberFGroup:: -SECTION "Trainer Parties 48 TEMPORARY", ROMX[$5988], BANK[$E] +SECTION "Trainer Parties 48 TEMPORARY", ROMX[$5988], BANK[$0E] SportsmanGroup:: ; SPORTSMAN_SHIGEKI db "てつじ@", TRAINERTYPE_ITEM_MOVES -- cgit v1.2.3