summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpikalaxalt <PikalaxALT@gmail.com>2016-05-26 22:02:52 -0400
committerpikalaxalt <PikalaxALT@gmail.com>2016-05-26 22:02:52 -0400
commitedafbab453e53564e1826fb6b73bbc72e7f9edd3 (patch)
tree16c509d7828d809787bded820175b877ff617529
parentc1be6f73744896d8230c9665ee0850bb90a030fb (diff)
Disassemble Pallet Town
-rwxr-xr-xconstants/hide_show_constants.asm4
-rwxr-xr-xdata/mapObjects/pallettown.asm2
-rwxr-xr-xmain.asm16
-rwxr-xr-xscripts/pallettown.asm286
4 files changed, 199 insertions, 109 deletions
diff --git a/constants/hide_show_constants.asm b/constants/hide_show_constants.asm
index 02ebc54e..9d009f5e 100755
--- a/constants/hide_show_constants.asm
+++ b/constants/hide_show_constants.asm
@@ -6,8 +6,8 @@
const_value = 0
- const HS_PIKACHU ; 00
- const HS_PALLET_TOWN_OAK ; 01
+ const HS_PALLET_TOWN_OAK ; 00
+ const HS_PIKACHU ; 01
const HS_LYING_OLD_MAN ; 02
const HS_OLD_MAN ; 03
const HS_MUSEUM_GUY ; 04
diff --git a/data/mapObjects/pallettown.asm b/data/mapObjects/pallettown.asm
index 4832246f..0d45fea3 100755
--- a/data/mapObjects/pallettown.asm
+++ b/data/mapObjects/pallettown.asm
@@ -13,7 +13,7 @@ PalletTownObject: ; 0x182c3 (size=58)
db $5, $b, $7 ; PalletTownText7
db $3 ; objects
- object SPRITE_OAK, $8, $5, STAY, NONE, $1 ; person
+ object SPRITE_OAK, $a, $4, STAY, NONE, $1 ; person
object SPRITE_GIRL, $3, $8, WALK, $0, $2 ; person
object SPRITE_FISHER2, $b, $e, WALK, $0, $3 ; person
diff --git a/main.asm b/main.asm
index e78f650d..c53ba358 100755
--- a/main.asm
+++ b/main.asm
@@ -236,9 +236,8 @@ INCLUDE "data/mapHeaders/celadoncity.asm"
INCLUDE "data/mapObjects/celadoncity.asm"
CeladonCityBlocks: INCBIN "maps/celadoncity.blk"
- dr $182a1,$182fd ; headers, objects, blocks
-; INCLUDE "data/mapHeaders/pallettown.asm"
-; INCLUDE "data/mapObjects/pallettown.asm"
+INCLUDE "data/mapHeaders/pallettown.asm"
+INCLUDE "data/mapObjects/pallettown.asm"
PalletTownBlocks: INCBIN "maps/pallettown.blk"
INCLUDE "data/mapHeaders/viridiancity.asm"
@@ -252,7 +251,7 @@ PewterCityBlocks: INCBIN "maps/pewtercity.blk"
INCLUDE "data/mapHeaders/ceruleancity.asm"
INCLUDE "data/mapObjects/ceruleancity.asm"
CeruleanCityBlocks: INCBIN "maps/ceruleancity.blk" ; 18836
- dr $1899e,$18dee ; headers, objects, blocks
+ dr $1899e,$18dfa ; headers, objects, blocks
; INCLUDE "data/mapHeaders/vermilioncity.asm"
; INCLUDE "data/mapObjects/vermilioncity.asm"
@@ -262,9 +261,9 @@ CeruleanCityBlocks: INCBIN "maps/ceruleancity.blk" ; 18836
; INCLUDE "data/mapObjects/fuchsiacity.asm"
; FuchsiaCityBlocks: INCBIN "maps/fuchsiacity.blk"
- dr $18dee,$1902a ; map scripts
+ ; dr $18dee,$1902a ; map scripts
-; INCLUDE "scripts/pallettown.asm"
+INCLUDE "scripts/pallettown.asm"
INCLUDE "scripts/viridiancity.asm"
INCLUDE "scripts/pewtercity.asm"
INCLUDE "scripts/ceruleancity.asm"
@@ -836,7 +835,10 @@ INCBIN "maps/route5.blk"
dr $5468e,$54706
Route9Blocks: ; 54706
INCBIN "maps/route9.blk"
- dr $54814,$5525f
+ dr $54814,$5507d
+Route21Blocks: ; 5507d
+INCBIN "maps/route21.blk"
+ dr $5523f,$5525f
INCLUDE "engine/battle/experience.asm"
diff --git a/scripts/pallettown.asm b/scripts/pallettown.asm
index 106d8ec0..131ecaea 100755
--- a/scripts/pallettown.asm
+++ b/scripts/pallettown.asm
@@ -1,11 +1,11 @@
PalletTownScript: ; 18e5b (6:4e5b)
CheckEvent EVENT_GOT_POKEBALLS_FROM_OAK
- jr z,.next
+ jr z, .next
SetEvent EVENT_PALLET_AFTER_GETTING_POKEBALLS
.next
call EnableAutoTextBoxDrawing
- ld hl,PalletTownScriptPointers
- ld a,[W_PALLETTOWNCURSCRIPT]
+ ld hl, PalletTownScriptPointers
+ ld a, [W_PALLETTOWNCURSCRIPT]
jp CallFunctionInTable
PalletTownScriptPointers: ; 18e73 (6:4e73)
@@ -16,136 +16,208 @@ PalletTownScriptPointers: ; 18e73 (6:4e73)
dw PalletTownScript4
dw PalletTownScript5
dw PalletTownScript6
+ dw PalletTownScript7
+ dw PalletTownScript8
+ dw PalletTownScript9
PalletTownScript0: ; 18e81 (6:4e81)
CheckEvent EVENT_FOLLOWED_OAK_INTO_LAB
ret nz
- ld a,[wYCoord]
- cp 1 ; is player near north exit?
+ ld a, [wYCoord]
+ cp 0 ; is player at north exit?
ret nz
+ ResetEvent EVENT_005
+ ld a, [wXCoord]
+ cp 10
+ jr z, .asm_18e40
+ SetEventReuseHL EVENT_005
+.asm_18e40
xor a
- ld [hJoyHeld],a
- ld a,PLAYER_DIR_DOWN
- ld [wPlayerMovingDirection],a
- ld a,$FF
- call PlaySound ; stop music
+ ld [hJoyHeld], a
+ ld a, $ff
+ ld [wJoyIgnore], a
+ ld a, PLAYER_DIR_UP
+ ld [wPlayerMovingDirection], a
+ call StopAllMusic
ld a, BANK(Music_MeetProfOak)
- ld c,a
+ ld c, a
ld a, MUSIC_MEET_PROF_OAK ; “oak appears” music
call PlayMusic
- ld a,$FC
- ld [wJoyIgnore],a
SetEvent EVENT_OAK_APPEARED_IN_PALLET
; trigger the next script
- ld a,1
- ld [W_PALLETTOWNCURSCRIPT],a
+ ld a, 1
+ ld [W_PALLETTOWNCURSCRIPT], a
ret
PalletTownScript1: ; 18eb2 (6:4eb2)
+ ld a, $FF ^ (A_BUTTON | B_BUTTON)
+ ld [wJoyIgnore], a
xor a
- ld [wcf0d],a
- ld a,1
- ld [hSpriteIndexOrTextID],a
+ ld [wcf0d], a
+ ld a, 1
+ ld [hSpriteIndexOrTextID], a
call DisplayTextID
- ld a,$FF
- ld [wJoyIgnore],a
- ld a,HS_PALLET_TOWN_OAK
- ld [wMissableObjectIndex],a
+ ld a, $FF
+ ld [wJoyIgnore], a
+ ld hl, wSpriteStateData2 + 1 * $10 + 4
+ ld a, $8
+ ld [hli], a
+ ld a, $e
+ ld [hl], a
+ ld a, HS_PALLET_TOWN_OAK
+ ld [wMissableObjectIndex], a
predef ShowObject
; trigger the next script
- ld a,2
- ld [W_PALLETTOWNCURSCRIPT],a
+ ld a, $2
+ ld [wSpriteStateData1 + 1 * $10 + 1], a
+ ld a, SPRITE_FACING_UP
+ ld [wSpriteStateData1 + 1 * $10 + 9], a
+ ld a, 2
+ ld [W_PALLETTOWNCURSCRIPT], a
ret
PalletTownScript2: ; 18ed2 (6:4ed2)
- ld a,1
- ld [H_SPRITEINDEX],a
- ld a,SPRITE_FACING_UP
- ld [hSpriteFacingDirection],a
- call SetSpriteFacingDirectionAndDelay
call Delay3
- ld a,1
- ld [wYCoord],a
- ld a,1
- ld [hNPCPlayerRelativePosPerspective],a
- ld a,1
+ ld a, 0
+ ld [wYCoord], a
+ ld a, 1
+ ld [hNPCPlayerRelativePosPerspective], a
+ ld a, 1
swap a
- ld [hNPCSpriteOffset],a
+ ld [hNPCSpriteOffset], a
predef CalcPositionOfPlayerRelativeToNPC
- ld hl,hNPCPlayerYDistance
+ ld hl, hNPCPlayerYDistance
dec [hl]
predef FindPathToPlayer ; load Oak’s movement into wNPCMovementDirections2
- ld de,wNPCMovementDirections2
- ld a,1 ; oak
- ld [H_SPRITEINDEX],a
+ ld de, wNPCMovementDirections2
+ ld a, 1 ; oak
+ ld [H_SPRITEINDEX], a
call MoveSprite
- ld a,$FF
- ld [wJoyIgnore],a
; trigger the next script
- ld a,3
- ld [W_PALLETTOWNCURSCRIPT],a
+ ld a, 3
+ ld [W_PALLETTOWNCURSCRIPT], a
ret
PalletTownScript3: ; 18f12 (6:4f12)
- ld a,[wd730]
- bit 0,a
+ ld a, [wd730]
+ bit 0, a
ret nz
- xor a ; ld a, SPRITE_FACING_DOWN
- ld [wSpriteStateData1 + 9],a
- ld a,1
- ld [wcf0d],a
- ld a,$FC
- ld [wJoyIgnore],a
- ld a,1
- ld [hSpriteIndexOrTextID],a
+ ld a, $FF ^ (A_BUTTON | B_BUTTON)
+ ld [wJoyIgnore], a
+ ld a, 1
+ ld [wcf0d], a
+ ld a, $2
+ ld [wSpriteStateData1 + 1 * $10 + 1], a
+ ld a, SPRITE_FACING_UP
+ ld [wSpriteStateData1 + 1 * $10 + 9], a
+ ld a, 1
+ ld [hSpriteIndexOrTextID], a
call DisplayTextID
-; set up movement script that causes the player to follow Oak to his lab
- ld a,$FF
- ld [wJoyIgnore],a
- ld a,1
- ld [wSpriteIndex],a
- xor a
- ld [wNPCMovementScriptFunctionNum],a
- ld a,1
- ld [wNPCMovementScriptPointerTableNum],a
- ld a,[H_LOADEDROMBANK]
- ld [wNPCMovementScriptBank],a
-
+ ; oak faces the horizontally adjacent patch of grass to face pikachu
+ ld a, $FF
+ ld [wJoyIgnore], a
+ ld a, $2
+ ld [wSpriteStateData1 + 1 * $10 + 1], a
+ CheckEvent EVENT_005
+ ld a, SPRITE_FACING_RIGHT
+ jr z, .asm_18f01
+ ld a, SPRITE_FACING_LEFT
+.asm_18f01
+ ld [wSpriteStateData1 + 1 * $10 + 9], a
+
; trigger the next script
- ld a,4
- ld [W_PALLETTOWNCURSCRIPT],a
+ ld a, 4
+ ld [W_PALLETTOWNCURSCRIPT], a
ret
PalletTownScript4: ; 18f4b (6:4f4b)
- ld a,[wNPCMovementScriptPointerTableNum]
- and a ; is the movement script over?
- ret nz
+ ; start the pikachu battle
+ ld a, $FF ^ (A_BUTTON | B_BUTTON)
+ ld [wJoyIgnore], a
+ xor a
+ ld [wListScrollOffset], a
+ ld a, STARTER_PIKACHU_BATTLE
+ ld [wBattleType], a
+ ld a, PIKACHU
+ ld [wCurOpponent], a
+ ld a, 5
+ ld [wCurEnemyLVL], a
; trigger the next script
- ld a,5
- ld [W_PALLETTOWNCURSCRIPT],a
+ ld a, 5
+ ld [W_PALLETTOWNCURSCRIPT], a
ret
PalletTownScript5: ; 18f56 (6:4f56)
+ ld a, $2
+ ld [wcf0d], a
+ ld a, $1
+ ld [hSpriteIndexOrTextID], a
+ call DisplayTextID
+ ld a, $2
+ ld [wSpriteStateData1 + 1 * $10 + 1], a
+ ld a, SPRITE_FACING_UP
+ ld [wSpriteStateData1 + 1 * $10 + 9], a
+ ld a, $8
+ ld [hSpriteIndexOrTextID], a
+ call DisplayTextID
+ ld a, $ff
+ ld [wJoyIgnore], a
+
+ ; trigger the next script
+ ld a, 6
+ ld [W_PALLETTOWNCURSCRIPT], a
+ ret
+
+PalletTownScript6: ; 18f87 (6:4f87)
+ xor a
+ ld [wSpriteStateData1 + 9], a
+ ld a, $1
+ ld [wSpriteIndex], a
+ xor a
+ ld [wNPCMovementScriptFunctionNum], a
+ ld a, $1
+ ld [wNPCMovementScriptPointerTableNum], a
+ ld a, [H_LOADEDROMBANK]
+ ld [wNPCMovementScriptBank], a
+
+ ; trigger the next script
+ ld a, 7
+ ld [W_PALLETTOWNCURSCRIPT], a
+ ret
+
+PalletTownScript7:
+ ld a, [wNPCMovementScriptPointerTableNum]
+ and a
+ ret nz
+
+ ; trigger the next script
+ ld a, 8
+ ld [W_PALLETTOWNCURSCRIPT], a
+ ret
+
+PalletTownScript8:
CheckEvent EVENT_DAISY_WALKING
- jr nz,.next
- CheckBothEventsSet EVENT_GOT_TOWN_MAP, EVENT_ENTERED_BLUES_HOUSE, 1
- jr nz,.next
+ jr nz, .asm_18f9e
+ and $3 ; (EVENT_GOT_TOWN_MAP | EVENT_ENTERED_BLUES_HOUSE)
+ cp $3
+ jr nz, .asm_18f9e
SetEvent EVENT_DAISY_WALKING
- ld a,HS_DAISY_SITTING
- ld [wMissableObjectIndex],a
+ ld a, HS_DAISY_SITTING
+ ld [wMissableObjectIndex], a
predef HideObject
- ld a,HS_DAISY_WALKING
- ld [wMissableObjectIndex],a
+ ld a, HS_DAISY_WALKING
+ ld [wMissableObjectIndex], a
predef_jump ShowObject
-.next
+
+.asm_18f9e
CheckEvent EVENT_GOT_POKEBALLS_FROM_OAK
ret z
SetEvent EVENT_PALLET_AFTER_GETTING_POKEBALLS_2
-PalletTownScript6: ; 18f87 (6:4f87)
+PalletTownScript9:
ret
PalletTownTextPointers: ; 18f88 (6:4f88)
@@ -156,18 +228,25 @@ PalletTownTextPointers: ; 18f88 (6:4f88)
dw PalletTownText5
dw PalletTownText6
dw PalletTownText7
+ dw PalletTownText8
PalletTownText1: ; 18f96 (6:4f96)
TX_ASM
- ld a,[wcf0d]
+ ld a, [wcf0d]
and a
- jr nz,.next
- ld a,1
- ld [wDoNotWaitForButtonPressAfterDisplayingText],a
- ld hl,OakAppearsText
+ jr nz, .next
+ ld a, 1
+ ld [wDoNotWaitForButtonPressAfterDisplayingText], a
+ ld hl, OakAppearsText
jr .done
.next
- ld hl,OakWalksUpText
+ dec a
+ jr nz, .asm_18fd3
+ ld hl, OakWalksUpText
+ jr .done
+
+.asm_18fd3
+ ld hl, PalletTownText_19002
.done
call PrintText
jp TextScriptEnd
@@ -175,40 +254,49 @@ PalletTownText1: ; 18f96 (6:4f96)
OakAppearsText: ; 18fb0 (6:4fb0)
TX_FAR _OakAppearsText
TX_ASM
- ld c,10
+ ld c, 10
call DelayFrames
- xor a
- ld [wEmotionBubbleSpriteIndex],a ; player's sprite
- ld [wWhichEmotionBubble],a ; EXCLAMATION_BUBBLE
+ ld a, PLAYER_DIR_DOWN
+ ld [wPlayerMovingDirection], a
+ ld a, 0
+ ld [wEmotionBubbleSpriteIndex], a ; player's sprite
+ ld a, 0
+ ld [wWhichEmotionBubble], a ; EXCLAMATION_BUBBLE
predef EmotionBubble
- ld a,PLAYER_DIR_DOWN
- ld [wPlayerMovingDirection],a
jp TextScriptEnd
OakWalksUpText: ; 18fce (6:4fce)
TX_FAR _OakWalksUpText
db "@"
-PalletTownText2: ; 0x18fd3 girl
+PalletTownText_19002:
+ TX_FAR _OakWhewText
+ db "@"
+
+PalletTownText8: ; 0x18fd3 girl
+ TX_FAR _OakGrassText
+ db "@"
+
+PalletTownText2: ; 0x18fd8 fat man
TX_FAR _PalletTownText2
db "@"
-PalletTownText3: ; 0x18fd8 fat man
+PalletTownText3: ; 0x18fdd sign by lab
TX_FAR _PalletTownText3
db "@"
-PalletTownText4: ; 0x18fdd sign by lab
+PalletTownText4: ; 0x18fe2 sign by fence
TX_FAR _PalletTownText4
db "@"
-PalletTownText5: ; 0x18fe2 sign by fence
+PalletTownText5: ; 0x18fe7 sign by Red’s house
TX_FAR _PalletTownText5
db "@"
-PalletTownText6: ; 0x18fe7 sign by Red’s house
+PalletTownText6: ; 0x18fec sign by Blue’s house
TX_FAR _PalletTownText6
db "@"
-PalletTownText7: ; 0x18fec sign by Blue’s house
+PalletTownText7:
TX_FAR _PalletTownText7
db "@"