diff options
-rwxr-xr-x | constants/hide_show_constants.asm | 4 | ||||
-rwxr-xr-x | data/mapObjects/pallettown.asm | 2 | ||||
-rwxr-xr-x | main.asm | 16 | ||||
-rwxr-xr-x | scripts/pallettown.asm | 286 |
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 @@ -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 "@" |