diff options
Diffstat (limited to 'src/engine')
| -rw-r--r-- | src/engine/bank01.asm | 4 | ||||
| -rw-r--r-- | src/engine/bank02.asm | 37 | ||||
| -rw-r--r-- | src/engine/bank03.asm | 4956 | ||||
| -rw-r--r-- | src/engine/bank04.asm | 331 | ||||
| -rw-r--r-- | src/engine/bank07.asm | 309 | ||||
| -rw-r--r-- | src/engine/bank1c.asm | 4 | ||||
| -rw-r--r-- | src/engine/bank20.asm | 238 | ||||
| -rw-r--r-- | src/engine/home.asm | 148 | 
8 files changed, 4885 insertions, 1142 deletions
| diff --git a/src/engine/bank01.asm b/src/engine/bank01.asm index b73b47c..51fb0ef 100644 --- a/src/engine/bank01.asm +++ b/src/engine/bank01.asm @@ -6288,10 +6288,10 @@ DiscardSavedDuelData: ; 6785 (1:6785)  ; 0x6793  ; loads a player deck (sDeck*Cards) from SRAM to wPlayerDeck -; s0b700 determines which sDeck*Cards source (0-3) +; sCurrentlySelectedDeck determines which sDeck*Cards source (0-3)  LoadPlayerDeck: ; 6793 (1:6793)  	call EnableSRAM -	ld a, [s0b700] +	ld a, [sCurrentlySelectedDeck]  	ld l, a  	ld h, sDeck2Cards - sDeck1Cards  	call HtimesL diff --git a/src/engine/bank02.asm b/src/engine/bank02.asm index d48250f..5a7761e 100644 --- a/src/engine/bank02.asm +++ b/src/engine/bank02.asm @@ -2171,7 +2171,7 @@ Func_8f8a: ; 8f8a (2:4f8a)  Func_8f9d: ; 8f9d (2:4f9d)  	call EnableSRAM -	ld a, [s0b700] +	ld a, [sCurrentlySelectedDeck]  	call DisableSRAM  	ld h, $3  	ld l, a @@ -2185,7 +2185,7 @@ Func_8f9d: ; 8f9d (2:4f9d)  	call FillRectangle  	ld a, [wceb1]  	call EnableSRAM -	ld [s0b700], a +	ld [sCurrentlySelectedDeck], a  	call DisableSRAM  	call Func_9326  	call GetPointerToDeckName @@ -2519,7 +2519,7 @@ Func_9168: ; 9168 (2:5168)  	ld [wceb5], a  .asm_9214  	call EnableSRAM -	ld a, [s0b700] +	ld a, [sCurrentlySelectedDeck]  	ld c, a  	ld b, $0  	ld d, $2 @@ -2539,7 +2539,7 @@ Func_9168: ; 9168 (2:5168)  	jr .asm_921f  .asm_9234  	ld a, c -	ld [s0b700], a +	ld [sCurrentlySelectedDeck], a  	call DisableSRAM  	call Func_9326  	call EnableLCD @@ -2628,7 +2628,7 @@ Func_9314: ; 9314 (2:5314)  Func_9326: ; 9326 (2:5326)  	call EnableSRAM -	ld a, [s0b700] +	ld a, [sCurrentlySelectedDeck]  	call DisableSRAM  	ld h, 3  	ld l, a @@ -2643,7 +2643,32 @@ Func_9326: ; 9326 (2:5326)  	ret  Func_9345: ; 9345 (2:5345) -	INCROM $9345, $9843 +	INCROM $9345, $9649 + +; checks if selected deck has any basics +Func_9649: ; 9649 (2:5649) +	ld hl, wcf17 +.asm_964c +	ld a, [hli] +	ld e, a +	or a +	jr z, .asm_9665 +	call LoadCardDataToBuffer1_FromCardID +	jr c, .asm_9665 +	ld a, [wLoadedCard1Type] +	and $08 +	jr nz, .asm_964c +	ld a, [wLoadedCard1Stage] +	or a +	jr nz, .asm_964c +	scf +	ret +.asm_9665 +	or a +	ret +; 0x9667 + +	INCROM $9667, $9843  Func_9843: ; 9843 (2:5843)  	INCROM $9843, $98a6 diff --git a/src/engine/bank03.asm b/src/engine/bank03.asm index b33fd35..07e903e 100644 --- a/src/engine/bank03.asm +++ b/src/engine/bank03.asm @@ -29,11 +29,11 @@ LoadMap: ; c000 (3:4000)  	ld a, PLAYER_TURN  	ldh [hWhoseTurn], a  	farcall Func_1c440 -	ld a, [wd0bb] +	ld a, [wTempMap]  	ld [wCurMap], a -	ld a, [wd0bc] +	ld a, [wTempPlayerXCoord]  	ld [wPlayerXCoord], a -	ld a, [wd0bd] +	ld a, [wTempPlayerYCoord]  	ld [wPlayerYCoord], a  	call Func_c36a  	call Func_c184 @@ -54,7 +54,7 @@ LoadMap: ; c000 (3:4000)  .asm_c092  	call DoFrameIfLCDEnabled  	call SetScreenScroll -	call Func_c0ce +	call HandleOverworldMode  	ld hl, wd0b4  	ld a, [hl]  	and $d0 @@ -79,13 +79,13 @@ LoadMap: ; c000 (3:4000)  	call Func_c280  	ret -Func_c0ce: ; c0ce (3:40ce) -	ld a, [wd0bf] +HandleOverworldMode: ; c0ce (3:40ce) +	ld a, [wOverworldMode]  	res 7, a  	rlca -	add LOW(PointerTable_c0e0) +	add LOW(OverworldModePointers)  	ld l, a -	ld a, HIGH(PointerTable_c0e0) +	ld a, HIGH(OverworldModePointers)  	adc $0  	ld h, a  	ld a, [hli] @@ -93,58 +93,59 @@ Func_c0ce: ; c0ce (3:40ce)  	ld l, a  	jp hl -PointerTable_c0e0: ; c0e0 (3:40e0) -	dw Func_c0e8 -	dw Func_c0ed -	dw Func_c0f1 -	dw Func_c10a +OverworldModePointers: ; c0e0 (3:40e0) +	dw Func_c0e8         ; on map +	dw CallHandlePlayerMoveMode +	dw SetScriptData +	dw EnterScript  Func_c0e8: ; c0e8 (3:40e8)  	farcall Func_10e55  	ret -Func_c0ed: ; c0ed (3:40ed) -	call Func_c510 +CallHandlePlayerMoveMode: ; c0ed (3:40ed) +	call HandlePlayerMoveMode  	ret -Func_c0f1: ; c0f1 (3:40f1) -	ld a, [wd3b6] -	ld [wd3aa], a -	farcall Func_1c768 +SetScriptData: ; c0f1 (3:40f1) +	ld a, [wScriptNPC] +	ld [wLoadedNPCTempIndex], a +	farcall SetNewScriptNPC  	ld a, c -	ld [wd0c6], a +	ld [wNextScript], a  	ld a, b -	ld [wd0c7], a +	ld [wNextScript+1], a  	ld a, $3 -	ld [wd0bf], a -	jr Func_c10a +	ld [wOverworldMode], a +	jr EnterScript -Func_c10a: ; c10a (3:410a) -	ld hl, wd0c6 +EnterScript: ; c10a (3:410a) +	ld hl, wNextScript  	ld a, [hli]  	ld h, [hl]  	ld l, a  	jp hl  ; closes dialogue window. seems to be for other things as well. -CloseDialogueBox: ; c111 (3:4111) +CloseAdvancedDialogueBox: ; c111 (3:4111)  	ld a, [wd0c1]  	bit 0, a -	call nz, Func_c135 +	call nz, CloseTextBox  	ld a, [wd0c1]  	bit 1, a  	jr z, .asm_c12a -	ld a, [wd3b6] -	ld [wd3aa], a +	ld a, [wScriptNPC] +	ld [wLoadedNPCTempIndex], a  	farcall Func_1c5e9  .asm_c12a  	xor a  	ld [wd0c1], a  	ld a, [wd0c0] -	ld [wd0bf], a +	ld [wOverworldMode], a  	ret -Func_c135: ; c135 (3:4135) +; redraws the background and removes textbox control +CloseTextBox: ; c135 (3:4135)  	push hl  	farcall Func_80028  	ld hl, wd0c1 @@ -175,12 +176,12 @@ Func_c158: ; c158 (3:4158)  	cp $1  	ret nz  	ld a, [wd0c4] -	ld [wd3ab], a -	call Func_39c3 +	ld [wTempNPC], a +	call FindLoadedNPC  	jr c, .asm_c179 -	ld a, [wd3aa] -	ld l, $4 -	call Func_39ad +	ld a, [wLoadedNPCTempIndex] +	ld l, LOADED_NPC_DIRECTION +	call GetItemInLoadedNPCIndex  	ld a, [wd0c5]  	ld [hl], a  	farcall Func_1c58e @@ -188,7 +189,7 @@ Func_c158: ; c158 (3:4158)  	ret  Func_c17a: ; c17a (3:417a) -	ld a, [wd0bf] +	ld a, [wOverworldMode]  	cp $3  	ret z  	call Func_c9b8 @@ -203,7 +204,7 @@ Func_c184: ; c184 (3:4184)  	ld c, $0  .asm_c190  	ld a, c -	ld [wd0bf], a +	ld [wOverworldMode], a  	ld [wd0c0], a  	pop bc  	ret @@ -230,13 +231,13 @@ Func_c1b1: ; c1b1 (3:41b1)  	ld a, $c  	ld [wd32e], a  	ld a, $0 -	ld [wd0bb], a +	ld [wTempMap], a  	ld a, $c -	ld [wd0bc], a +	ld [wTempPlayerXCoord], a  	ld a, $c -	ld [wd0bd], a +	ld [wTempPlayerYCoord], a  	ld a, $2 -	ld [wd0be], a +	ld [wTempPlayerDirection], a  	call Func_c9cb  	call Func_c9dd  	farcall Func_80b7a @@ -277,13 +278,13 @@ Func_c1f8: ; c1f8 (3:41f8)  Func_c228: ; c228 (3:4228)  	ld a, [wCurMap] -	ld [wd0bb], a +	ld [wTempMap], a  	ld a, [wPlayerXCoord] -	ld [wd0bc], a +	ld [wTempPlayerXCoord], a  	ld a, [wPlayerYCoord] -	ld [wd0bd], a -	ld a, [wd334] -	ld [wd0be], a +	ld [wTempPlayerYCoord], a +	ld a, [wPlayerDirection] +	ld [wTempPlayerDirection], a  	ret  Func_c241: ; c241 (3:4241) @@ -579,24 +580,24 @@ Func_c4b9: ; c4b9 (3:44b9)  	ld a, b  	ld [wd337], a  	ld a, $0 -	farcall Func_1299f +	farcall CreateSpriteAndAnimBufferEntry  	ld a, [wWhichSprite] -	ld [wd336], a +	ld [wPlayerSpriteIndex], a  	ld b, $2  	ld a, [wCurMap]  	cp OVERWORLD_MAP  	jr z, .asm_c4ee -	ld a, [wd0be] +	ld a, [wTempPlayerDirection]  	ld b, a  .asm_c4ee  	ld a, b -	ld [wd334], a -	call Func_c5e9 +	ld [wPlayerDirection], a +	call UpdatePlayerSprite  	ld a, [wCurMap]  	cp OVERWORLD_MAP  	call nz, Func_c6f7  	xor a -	ld [wd335], a +	ld [wPlayerCurrentlyMoving], a  	ld [wd338], a  	ld a, [wCurMap]  	cp OVERWORLD_MAP @@ -605,42 +606,42 @@ Func_c4b9: ; c4b9 (3:44b9)  .asm_c50f  	ret -Func_c510: ; c510 (3:4510) -	ld a, [wd336] +HandlePlayerMoveMode: ; c510 (3:4510) +	ld a, [wPlayerSpriteIndex]  	ld [wWhichSprite], a -	ld a, [wd335] +	ld a, [wPlayerCurrentlyMoving]  	bit 4, a  	ret nz  	bit 0, a -	call z, Func_c5ac -	ld a, [wd335] +	call z, HandlePlayerMoveModeInput +	ld a, [wPlayerCurrentlyMoving]  	or a -	jr z, .asm_c535 +	jr z, .notMoving  	bit 0, a  	call nz, Func_c66c -	ld a, [wd335] +	ld a, [wPlayerCurrentlyMoving]  	bit 1, a  	call nz, Func_c6dc  	ret -.asm_c535 +.notMoving  	ldh a, [hKeysPressed]  	and START -	call nz, Func_c74d +	call nz, OpenStartMenu  	ret  Func_c53d: ; c53d (3:453d) -	ld a, [wd336] +	ld a, [wPlayerSpriteIndex]  	ld [wWhichSprite], a -	ld a, [wd335] +	ld a, [wPlayerCurrentlyMoving]  	bit 0, a  	call nz, Func_c687 -	ld a, [wd335] +	ld a, [wPlayerCurrentlyMoving]  	bit 1, a  	call nz, Func_c6dc  	ret  Func_c554: ; c554 (3:4554) -	ld a, [wd336] +	ld a, [wPlayerSpriteIndex]  	ld [wWhichSprite], a  	ld a, [wCurMap]  	cp OVERWORLD_MAP @@ -694,80 +695,81 @@ Func_c58b: ; c58b (3:458b)  	pop hl  	ret -Func_c5ac: ; c5ac (3:45ac) +HandlePlayerMoveModeInput: ; c5ac (3:45ac)  	ldh a, [hKeysHeld]  	and D_PAD -	jr z, .asm_c5bf -	call Func_c5cb -	call Func_c5fe -	ld a, [wd335] +	jr z, .skipMoving +	call UpdatePlayerDirectionFromDPad +	call AttemptPlayerMovementFromDirection +	ld a, [wPlayerCurrentlyMoving]  	and $1 -	jr nz, .asm_c5ca -.asm_c5bf +	jr nz, .done +.skipMoving  	ldh a, [hKeysPressed]  	and A_BUTTON -	jr z, .asm_c5ca -	call Func_c71e -	jr .asm_c5ca -.asm_c5ca +	jr z, .done +	call FindNPCOrObject +	jr .done +.done  	ret -Func_c5cb: ; c5cb (3:45cb) -	call Func_c5d5 -Func_c5ce: ; c5ce (3:45ce) -	ld [wd334], a -	call Func_c5e9 +UpdatePlayerDirectionFromDPad: ; c5cb (3:45cb) +	call GetDirectionFromDPad +UpdatePlayerDirection: ; c5ce (3:45ce) +	ld [wPlayerDirection], a +	call UpdatePlayerSprite  	ret -Func_c5d5: ; c5d5 (3:45d5) +GetDirectionFromDPad: ; c5d5 (3:45d5)  	push hl -	ld hl, Unknown_c5e5 +	ld hl, KeypadDirectionMap  	or a -	jr z, .asm_c5e2 -.asm_c5dc +	jr z, .loadDirectionMapping +.findDirectionMappingLoop  	rlca -	jr c, .asm_c5e2 +	jr c, .loadDirectionMapping  	inc hl -	jr .asm_c5dc -.asm_c5e2 +	jr .findDirectionMappingLoop +.loadDirectionMapping  	ld a, [hl]  	pop hl  	ret -Unknown_c5e5: ; c5e5 (3:45e5) -	db $02,$00,$03,$01 +KeypadDirectionMap: ; c5e5 (3:45e5) +	db SOUTH, NORTH, WEST, EAST -Func_c5e9: ; c5e9 (3:45e9) +; Updates sprite depending on direction +UpdatePlayerSprite: ; c5e9 (3:45e9)  	push bc -	ld a, [wd336] +	ld a, [wPlayerSpriteIndex]  	ld [wWhichSprite], a  	ld a, [wd337]  	ld b, a -	ld a, [wd334] +	ld a, [wPlayerDirection]  	add b  	farcall Func_12ab5  	pop bc  	ret -Func_c5fe: ; c5fe (3:45fe) +AttemptPlayerMovementFromDirection: ; c5fe (3:45fe)  	push bc -	call Func_c653 -	call AttemptScriptedMovement +	call FindPlayerMovementFromDirection +	call AttemptPlayerMovement  	pop bc  	ret -StartScriptedMovement: ; c607 (3:4607) +StartScript_dMovement: ; c607 (3:4607)  	push bc -	ld a, [wd336] +	ld a, [wPlayerSpriteIndex]  	ld [wWhichSprite], a  	ld a, [wd339] -	call FindScriptedMovementWithOffset -	call AttemptScriptedMovement +	call FindPlayerMovementWithOffset +	call AttemptPlayerMovement  	pop bc  	ret  ; bc is the location the player is being scripted to move towards. -AttemptScriptedMovement: ; c619 (3:4619) +AttemptPlayerMovement: ; c619 (3:4619)  	push hl  	push bc  	ld a, b @@ -783,9 +785,9 @@ AttemptScriptedMovement: ; c619 (3:4619)  	ld [wPlayerXCoord], a  	ld a, c  	ld [wPlayerYCoord], a -	ld a, [wd335] ; I believe everything starting here is animation related. +	ld a, [wPlayerCurrentlyMoving] ; I believe everything starting here is animation related.  	or $1 -	ld [wd335], a +	ld [wPlayerCurrentlyMoving], a  	ld a, $10  	ld [wd338], a  	ld c, SPRITE_ANIM_FIELD_0F @@ -800,15 +802,15 @@ AttemptScriptedMovement: ; c619 (3:4619)  	pop hl  	ret -Func_c653: ; c653 (3:4653) -	ld a, [wd334] +FindPlayerMovementFromDirection: ; c653 (3:4653) +	ld a, [wPlayerDirection] -FindScriptedMovementWithOffset: ; c656 (3:4656) +FindPlayerMovementWithOffset: ; c656 (3:4656)  	rlca  	ld c, a  	ld b, $0  	push hl -	ld hl, ScriptedMovementOffsetTable +	ld hl, PlayerMovementOffsetTable  	add hl, bc  	ld a, [wPlayerXCoord]  	add [hl] @@ -832,7 +834,7 @@ Func_c66c: ; c66c (3:466c)  	jr c, .asm_c67e  	inc c  .asm_c67e -	ld a, [wd334] +	ld a, [wPlayerDirection]  	call Func_c694  	pop bc  	pop hl @@ -876,7 +878,7 @@ Func_c694: ; c694 (3:4694)  	ld a, [wd338]  	or a  	jr nz, .asm_c6c3 -	ld hl, wd335 +	ld hl, wPlayerCurrentlyMoving  	set 1, [hl]  .asm_c6c3  	call Func_c41c @@ -903,20 +905,20 @@ Func_c6d4: ; c6d4 (3:46d4)  Func_c6dc: ; c6dc (3:46dc)  	push hl -	ld hl, wd335 +	ld hl, wPlayerCurrentlyMoving  	res 0, [hl]  	res 1, [hl]  	call Func_c6f7  	call Func_3997  	call Func_c70d -	ld a, [wd0bf] +	ld a, [wOverworldMode]  	cp $1  	call z, Func_c9c0  	pop hl  	ret  Func_c6f7: ; c6f7 (3:46f7) -	ld a, [wd336] +	ld a, [wPlayerSpriteIndex]  	ld [wWhichSprite], a  	ld c, SPRITE_ANIM_FIELD_0F  	call GetSpriteAnimBufferProperty @@ -929,7 +931,7 @@ Func_c6f7: ; c6f7 (3:46f7)  Func_c70d: ; c70d (3:470d)  	push hl -	ld hl, wd0bb +	ld hl, wTempMap  	ld a, [wCurMap]  	cp [hl]  	jr z, .asm_c71c @@ -939,38 +941,40 @@ Func_c70d: ; c70d (3:470d)  	pop hl  	ret -Func_c71e: ; c71e (3:471e) +; Arrives here if A button is pressed when not moving + in map move state +FindNPCOrObject: ; c71e (3:471e)  	ld a, $ff -	ld [wd3b6], a -	call Func_c653 +	ld [wScriptNPC], a +	call FindPlayerMovementFromDirection  	call GetPermissionOfMapPosition  	and $40 -	jr z, .asm_c73d -	farcall Func_1c72e -	jr c, .asm_c73d -	ld a, [wd3aa] -	ld [wd3b6], a -	ld a, $2 -	jr .asm_c748 -.asm_c73d -	call Func_3a5e -	jr nc, .asm_c746 -	ld a, $3 -	jr .asm_c748 -.asm_c746 +	jr z, .noNPC +	farcall FindNPCAtLocation +	jr c, .noNPC +	ld a, [wLoadedNPCTempIndex] +	ld [wScriptNPC], a +	ld a, OWMODE_START_SCRIPT +	jr .changeStateExit + +.noNPC +	call HandleMoveModeAPress +	jr nc, .exit +	ld a, OWMODE_SCRIPT +	jr .changeStateExit +.exit  	or a  	ret -.asm_c748 -	ld [wd0bf], a +.changeStateExit +	ld [wOverworldMode], a  	scf  	ret -Func_c74d: ; c74d (3:474d) +OpenStartMenu: ; c74d (3:474d)  	push hl  	push bc  	push de  	call MainMenu_c75a -	call CloseDialogueBox +	call CloseAdvancedDialogueBox  	pop de  	pop bc  	pop hl @@ -1060,7 +1064,7 @@ PC_c7ea: ; c7ea (3:47ea)  	ld a, MUSIC_PC_MAIN_MENU  	call PlaySong  	call Func_c241 -	call $4915 +	call Func_c915  	call DoFrameIfLCDEnabled  	ldtx hl, TurnedPCOnText  	call PrintScrollableText_NoTextBoxLabel @@ -1087,11 +1091,11 @@ PC_c7ea: ; c7ea (3:47ea)  	call Func_c32b  	jr .asm_c801  .asm_c82f -	call Func_c135 +	call CloseTextBox  	call DoFrameIfLCDEnabled  	ldtx hl, TurnedPCOffText  	call Func_c891 -	call CloseDialogueBox +	call CloseAdvancedDialogueBox  	xor a  	ld [wd112], a  	call Func_39fc @@ -1108,7 +1112,7 @@ Func_c891: ; c891 (3:4891)  	ld hl, wd3b9  	ld a, [hli]  	or [hl] -	call nz, Func_c135 +	call nz, CloseTextBox  .asm_c8a1  	xor a @@ -1119,7 +1123,7 @@ Func_c891: ; c891 (3:4891)  	ld a, $1  	call Func_c29b  	call Func_c241 -	call $4915 +	call Func_c915  	call DoFrameIfLCDEnabled  	call PrintScrollableText_NoTextBoxLabel  	ret @@ -1141,7 +1145,7 @@ Func_c8ba: ; c8ba (3:48ba)  	jr z, .asm_c8d4  .asm_c8d1 -	call Func_c135 +	call CloseTextBox  .asm_c8d4  	ld hl, wd3b9 @@ -1152,20 +1156,20 @@ Func_c8ba: ; c8ba (3:48ba)  	ld a, $1  	call Func_c29b  	call Func_c241 -	call $4915 +	call Func_c915  	call DoFrameIfLCDEnabled  	call $2c62  	ret  ; 0xc8ed -Func_c8ed: ; c8ed (3:c8ed) +Func_c8ed: ; c8ed (3:48ed)  	push hl  	push bc  	push de  	push hl  	ld a, $1  	call Func_c29b -	call $4915 +	call Func_c915  	call DoFrameIfLCDEnabled  	pop hl  	ld a, l @@ -1200,22 +1204,23 @@ Func_c915: ; c915 (3:4915)  	pop bc  	ret -Func_c926: ; c926 (3:4926) +SetNextNPCAndScript: ; c926 (3:4926)  	push bc -	call Func_39c3 -	ld a, [wd3aa] -	ld [wd3b6], a -	farcall Func_1c768 +	call FindLoadedNPC +	ld a, [wLoadedNPCTempIndex] +	ld [wScriptNPC], a +	farcall SetNewScriptNPC  	pop bc +;	fallthrough -Func_c935: ; c935 (3:4935) +SetNextScript: ; c935 (3:4935)  	push hl -	ld hl, wd0c6 +	ld hl, wNextScript  	ld [hl], c  	inc hl  	ld [hl], b  	ld a, $3 -	ld [wd0bf], a +	ld [wOverworldMode], a  	pop hl  	ret @@ -1223,51 +1228,51 @@ Func_c943: ; c943 (3:4943)  	push hl  	push bc  	push de -	ld l, $0 -	call Func_3abd -	jr nc, .asm_c98f -.asm_c94d +	ld l, MAP_SCRIPT_NPCS +	call GetMapScriptPointer +	jr nc, .quit +.loadNPCLoop  	ld a, l -	ld [wd4c4], a +	ld [wTempPointer], a  	ld a, h -	ld [wd4c5], a -	ld a, $4 -	ld [wd4c6], a -	ld de, wd3ab -	ld bc, $0006 -	call Func_3bf5 -	ld a, [wd3ab] +	ld [wTempPointer + 1], a +	ld a, BANK(MapScripts) +	ld [wTempPointerBank], a +	ld de, wTempNPC +	ld bc, NPC_MAP_SIZE +	call CopyBankedDataToDE +	ld a, [wTempNPC]  	or a -	jr z, .asm_c98f +	jr z, .quit  	push hl -	ld a, [wd3af] +	ld a, [wLoadNPCFunction]  	ld l, a -	ld a, [wd3b0] +	ld a, [wLoadNPCFunction+1]  	ld h, a  	or l -	jr z, .asm_c97a +	jr z, .noScript  	call CallHL2 -	jr nc, .asm_c988 -.asm_c97a -	ld a, [wd3ab] -	farcall Func_11857 +	jr nc, .nextNPC +.noScript +	ld a, [wTempNPC] +	farcall LoadNPCSpriteData  	call Func_c998  	farcall Func_1c485 -.asm_c988 +.nextNPC  	pop hl -	ld bc, $0006 +	ld bc, NPC_MAP_SIZE  	add hl, bc -	jr .asm_c94d -.asm_c98f -	ld l, $2 -	call Func_c9c2 +	jr .loadNPCLoop +.quit +	ld l, MAP_SCRIPT_POST_NPC +	call CallMapScriptPointerIfExists  	pop de  	pop bc  	pop hl  	ret  Func_c998: ; c998 (3:4998) -	ld a, [wd3ab] +	ld a, [wTempNPC]  	cp $22  	ret nz  	ld a, [wd3d0] @@ -1286,24 +1291,24 @@ Func_c998: ; c998 (3:4998)  	ret  Func_c9b8: ; c9b8 (3:49b8) -	ld l, $8 -	jr Func_c9c2 +	ld l, MAP_SCRIPT_LOAD_MAP +	jr CallMapScriptPointerIfExists  Func_c9bc: ; c9bc (3:49bc) -	ld l, $a -	jr Func_c9c2 +	ld l, MAP_SCRIPT_AFTER_DUEL +	jr CallMapScriptPointerIfExists  Func_c9c0: ; c9c0 (3:49c0) -	ld l, $c +	ld l, MAP_SCRIPT_MOVED_PLAYER -Func_c9c2: ; c9c2 (3:49c2) -	call Func_3abd +CallMapScriptPointerIfExists: ; c9c2 (3:49c2) +	call GetMapScriptPointer  	ret nc  	jp hl  Func_c9c7: ; c9c7 (3:49c7) -	ld l, $e -	jr Func_c9c2 +	ld l, MAP_SCRIPT_CLOSE_TEXTBOX +	jr CallMapScriptPointerIfExists  Func_c9cb: ; c9cb (3:49cb)  	push hl @@ -1321,48 +1326,50 @@ Func_c9cb: ; c9cb (3:49cb)  	pop hl  	ret +; Clears temporary flags before determining Imakuni Room  Func_c9dd: ; c9dd (3:49dd)  	xor a -	ld [wd411], a -	call Func_c9e8 +	ld [wEventFlags + EVENT_FLAG_BYTES - 1], a +	call DetermineImakuniRoom  	call Func_ca0e  	ret -Func_c9e8: ; c9e8 (3:49e8) +; Determines what room Imakuni is in when you reset +; Skips current room and does not occur if you haven't talked to Imakuni +DetermineImakuniRoom: ; c9e8 (3:49e8)  	ld c, $0 -	call Func_ca69 -	db $13 -	cp $2 -	jr c, .asm_ca04 -.asm_c9f2 +	get_flag_value EVENT_IMAKUNI_STATE +	cp IMAKUNI_TALKED +	jr c, .finish +.tryLoadImakuniLoop  	call UpdateRNGSources  	and $3  	ld c, a  	ld b, $0 -	ld hl, Unknown_ca0a +	ld hl, ImakuniPossibleRooms  	add hl, bc -	ld a, [wd0bb] +	ld a, [wTempMap]  	cp [hl] -	jr z, .asm_c9f2 -.asm_ca04 +	jr z, .tryLoadImakuniLoop +.finish  	ld a, c -	call Func_ca8f -	db $34 +	set_flag_value EVENT_IMAKUNI_ROOM  	ret -Unknown_ca0a: ; ca0a (3:4a04) -	INCROM $ca0a, $ca0e +ImakuniPossibleRooms: ; ca0a (3:4a04) +	db FIGHTING_CLUB_LOBBY +	db SCIENCE_CLUB_LOBBY +	db LIGHTNING_CLUB_LOBBY +	db WATER_CLUB_LOBBY  Func_ca0e: ; ca0e (3:4a0e)  	ld a, [wd32e]  	cp $b  	jr z, .asm_ca68 -	call Func_ca69 -	db $22 +	get_flag_value EVENT_RECEIVED_LEGENDARY_CARD  	or a  	jr nz, .asm_ca4a -	call Func_ca69 -	db $40 +	get_flag_value EVENT_FLAG_40  	cp $7  	jr z, .asm_ca68  	or a @@ -1370,12 +1377,10 @@ Func_ca0e: ; ca0e (3:4a0e)  	cp $2  	jr z, .asm_ca62  	ld c, $1 -	call Func_ca8f -	db $40 +	set_flag_value EVENT_FLAG_40  	jr .asm_ca62  .asm_ca33 -	call Func_ca69 -	db $3f +	get_flag_value EVENT_FLAG_3F  	cp $7  	jr z, .asm_ca68  	or a @@ -1383,8 +1388,7 @@ Func_ca0e: ; ca0e (3:4a0e)  	cp $2  	jr z, .asm_ca68  	ld c, $1 -	call Func_ca8f -	db $3f +	set_flag_value EVENT_FLAG_3F  	jr .asm_ca68  .asm_ca4a  	call UpdateRNGSources @@ -1394,35 +1398,36 @@ Func_ca0e: ; ca0e (3:4a0e)  	jr z, .asm_ca56  	ld c, $0  .asm_ca56 -	call Func_ca8f -	db $41 +	set_flag_value EVENT_FLAG_41  	jr .asm_ca5c  .asm_ca5c  	ld c, $7 -	call Func_ca8f -	db $40 +	set_flag_value EVENT_FLAG_40  .asm_ca62  	ld c, $7 -	call Func_ca8f -	db $3f +	set_flag_value EVENT_FLAG_3F  .asm_ca68  	ret -Func_ca69: ; ca69 (3:4a69) -	call Func_cab3 -CheckIfEventFlagSet: ; ca6c (3:4a6c) +GetStackFlagValue: ; ca69 (3:4a69) +	call GetByteAfterCall +;	fallthrough + +; returns the event flag's value in a +; also ors it with itself before returning +GetEventFlagValue: ; ca6c (3:4a6c)  	push hl  	push bc -	call GetEventFlagMod +	call GetEventFlag  	ld c, [hl] -	ld a, [wd3d1] -.asm_ca75 +	ld a, [wLoadedFlagBits] +.shiftLoop  	bit 0, a -	jr nz, .asm_ca7f +	jr nz, .lsbReached  	srl a  	srl c -	jr .asm_ca75 -.asm_ca7f +	jr .shiftLoop +.lsbReached  	and c  	pop bc  	pop hl @@ -1430,17 +1435,27 @@ CheckIfEventFlagSet: ; ca6c (3:4a6c)  	ret  ; 0xca84 -	INCROM $ca84, $ca8f +ZeroStackFlagValue2: ; ca84 (3:4a84) +	call GetByteAfterCall +	push bc +	ld c, $00 +	call SetEventFlagValue +	pop bc +	ret -Func_ca8f: ; ca8f (3:4a8f) -	call Func_cab3 +; Use macro set_flag_value. The byte db'd after this func is called +; is used at the flag argument for SetEventFlagValue +SetStackFlagValue: ; ca8f (3:4a8f) +	call GetByteAfterCall +;	fallthrough -; a - pointer on table for cb1d, c - set or reset control bit -ModifyEventFlags: ; ca92 (3:4a92) +; a - flag +; c - value - truncated to fit only the flag's bounds +SetEventFlagValue: ; ca92 (3:4a92)  	push hl  	push bc -	call GetEventFlagMod -	ld a, [wd3d1] +	call GetEventFlag +	ld a, [wLoadedFlagBits]  .asm_ca9a  	bit 0, a  	jr nz, .asm_caa4 @@ -1448,10 +1463,10 @@ ModifyEventFlags: ; ca92 (3:4a92)  	sla c  	jr .asm_ca9a  .asm_caa4 -	ld a, [wd3d1] +	ld a, [wLoadedFlagBits]  	and c  	ld c, a -	ld a, [wd3d1] +	ld a, [wLoadedFlagBits]  	cpl  	and [hl]  	or c @@ -1460,7 +1475,8 @@ ModifyEventFlags: ; ca92 (3:4a92)  	pop hl  	ret -Func_cab3: ; cab3 (3:4ab3) +; returns in a the byte db'd after the call to a function that calls this +GetByteAfterCall: ; cab3 (3:4ab3)  	push hl  	ld hl, sp+$4  	push bc @@ -1477,73 +1493,86 @@ Func_cab3: ; cab3 (3:4ab3)  	ret  ; 0xcac2 -	INCROM $cac2, $cac5 +MaxStackFlagValue: ; cac2 (3:4ac2) +	call GetByteAfterCall +;	fallthrough -SetEventFlags: ; cac5 (3:4ac5) +MaxOutEventFlag: ; cac5 (3:4ac5)  	push bc  	ld c, $ff -	call ModifyEventFlags +	call SetEventFlagValue  	pop bc  	ret  ; 0xcacd -	INCROM $cacd, $cad0 +ZeroStackFlagValue: ; cacd (3:4acd) +	call GetByteAfterCall +;	fallthrough -Func_cad0: ; cad0 (3:4ad0) +ZeroOutEventFlag: ; cad0 (3:4ad0)  	push bc  	ld c, $0 -	call ModifyEventFlags +	call SetEventFlagValue  	pop bc  	ret -Func_cad8: ; cad8 (3:4ad8) +TryGiveMedalPCPacks: ; cad8 (3:4ad8)  	push hl  	push bc -	ld hl, $4b15 +	ld hl, MedalEventFlags  	ld bc, $0008 -.asm_cae0 +.countMedalsLoop  	ld a, [hli] -	call CheckIfEventFlagSet -	jr z, .asm_cae7 +	call GetEventFlagValue +	jr z, .noMedal  	inc b - -.asm_cae7 +.noMedal  	dec c -	jr nz, .asm_cae0 +	jr nz, .countMedalsLoop +  	ld c, b -	call Func_ca8f -	ld l, $79 +	set_flag_value EVENT_MEDAL_COUNT +	ld a, c  	push af  	cp $8 -	jr nc, .asm_caff +	jr nc, .givePacksForEightMedals  	cp $7 -	jr nc, .asm_cb05 +	jr nc, .givePacksForSevenMedals  	cp $3 -	jr nc, .asm_cb0b -	jr .asm_cb11 +	jr nc, .givePacksForTwoMedals +	jr .finish -.asm_caff +.givePacksForEightMedals  	ld a, $c -	farcall $4, $4a70 +	farcall TryGivePCPack -.asm_cb05 +.givePacksForSevenMedals  	ld a, $b -	farcall $4, $4a70 +	farcall TryGivePCPack -.asm_cb0b +.givePacksForTwoMedals  	ld a, $a -	farcall $4, $4a70 +	farcall TryGivePCPack -.asm_cb11 +.finish  	pop af  	pop bc  	pop hl  	ret  ; 0xcb15 -	INCROM $cb15, $cb1d - -GetEventFlagMod: ; cb1d (3:4b1d) +MedalEventFlags: ; cb15 (3:4b15) +	db EVENT_FLAG_08 +	db EVENT_FLAG_09 +	db EVENT_FLAG_0A +	db EVENT_BEAT_AMY +	db EVENT_FLAG_0C +	db EVENT_FLAG_0D +	db EVENT_FLAG_0E +	db EVENT_FLAG_0F + +; returns wEventFlags byte in hl, related bits in wLoadedFlagBits +GetEventFlag: ; cb1d (3:4b1d)  	push bc  	ld c, a  	ld b, $0 @@ -1554,7 +1583,7 @@ GetEventFlagMod: ; cb1d (3:4b1d)  	ld a, [hli]  	ld c, a  	ld a, [hl] -	ld [wd3d1], a +	ld [wLoadedFlagBits], a  	ld b, $0  	ld hl, wEventFlags  	add hl, bc @@ -1563,76 +1592,207 @@ GetEventFlagMod: ; cb1d (3:4b1d)  ; offset - bytes to set or reset  EventFlagMods: ; cb37 (3:4b37) -	INCROM $cb37, $cc32 +	flag_def $3f, %10000000 ; EVENT_FLAG_00 ; 0-7 are reset when game resets +	flag_def $3f, %01000000 ; EVENT_FLAG_01 +	flag_def $3f, %00100000 ; EVENT_TEMP_TALKED_TO_IMAKUNI +	flag_def $3f, %00010000 ; EVENT_TEMP_BATTLED_IMAKUNI +	flag_def $3f, %00001000 ; EVENT_FLAG_04 +	flag_def $3f, %00000100 ; EVENT_FLAG_05 +	flag_def $3f, %00000010 ; EVENT_FLAG_06 +	flag_def $3f, %00000001 ; EVENT_FLAG_07 +	flag_def $00, %10000000 ; EVENT_FLAG_08 +	flag_def $00, %01000000 ; EVENT_FLAG_09 +	flag_def $00, %00100000 ; EVENT_FLAG_0A +	flag_def $00, %00010000 ; EVENT_BEAT_AMY +	flag_def $00, %00001000 ; EVENT_FLAG_0C +	flag_def $00, %00000100 ; EVENT_FLAG_0D +	flag_def $00, %00000010 ; EVENT_FLAG_0E +	flag_def $00, %00000001 ; EVENT_FLAG_0F +	flag_def $00, %11111111 ; EVENT_FLAG_10 +	flag_def $01, %11110000 ; EVENT_FLAG_11 +	flag_def $01, %00001111 ; EVENT_FLAG_12 +	flag_def $02, %11000000 ; EVENT_IMAKUNI_STATE +	flag_def $02, %00110000 ; EVENT_FLAG_14 +	flag_def $02, %00001000 ; EVENT_BEAT_SARA +	flag_def $02, %00000100 ; EVENT_BEAT_AMANDA +	flag_def $03, %11110000 ; EVENT_FLAG_17 +	flag_def $03, %00001111 ; EVENT_FLAG_18 +	flag_def $04, %11110000 ; EVENT_FLAG_19 +	flag_def $04, %00001111 ; EVENT_FLAG_1A +	flag_def $05, %10000000 ; EVENT_FLAG_1B +	flag_def $05, %01000000 ; EVENT_FLAG_1C +	flag_def $05, %00100000 ; EVENT_FLAG_1D +	flag_def $05, %00010000 ; EVENT_FLAG_1E +	flag_def $05, %00001111 ; EVENT_FLAG_1F +	flag_def $06, %11110000 ; EVENT_FLAG_20 +	flag_def $06, %00001100 ; EVENT_FLAG_21 +	flag_def $06, %00000010 ; EVENT_RECEIVED_LEGENDARY_CARD +	flag_def $06, %00000001 ; EVENT_FLAG_23 +	flag_def $07, %11000000 ; EVENT_FLAG_24 +	flag_def $07, %00100000 ; EVENT_FLAG_25 +	flag_def $07, %00010000 ; EVENT_FLAG_26 +	flag_def $07, %00001000 ; EVENT_FLAG_27 +	flag_def $07, %00000100 ; EVENT_FLAG_28 +	flag_def $07, %00000010 ; EVENT_FLAG_29 +	flag_def $07, %00000001 ; EVENT_FLAG_2A +	flag_def $08, %11111111 ; EVENT_FLAG_2B +	flag_def $09, %11100000 ; EVENT_FLAG_2C +	flag_def $09, %00011111 ; EVENT_FLAG_2D +	flag_def $0a, %11110000 ; EVENT_MEDAL_COUNT +	flag_def $0a, %00001000 ; EVENT_FLAG_2F +	flag_def $0a, %00000100 ; EVENT_FLAG_30 +	flag_def $0a, %00000011 ; EVENT_FLAG_31 +	flag_def $0b, %10000000 ; EVENT_FLAG_32 +	flag_def $0b, %01110000 ; EVENT_JOSHUA_STATE +	flag_def $0b, %00001100 ; EVENT_IMAKUNI_ROOM +	flag_def $0b, %00000011 ; EVENT_FLAG_35 +	flag_def $0c, %11100000 ; EVENT_IMAKUNI_WIN_COUNT +	flag_def $0c, %00011100 ; EVENT_FLAG_37 +	flag_def $0c, %00000010 ; EVENT_FLAG_38 +	flag_def $0c, %00000001 ; EVENT_FLAG_39 +	flag_def $0d, %10000000 ; EVENT_FLAG_3A +	flag_def $0d, %01000000 ; EVENT_FLAG_3B +	flag_def $0d, %00100000 ; FLAG_BEAT_BRITTANY +	flag_def $0d, %00010000 ; EVENT_FLAG_3D +	flag_def $0d, %00001110 ; EVENT_FLAG_3E +	flag_def $0e, %11100000 ; EVENT_FLAG_3F +	flag_def $0e, %00011100 ; EVENT_FLAG_40 +	flag_def $0f, %11100000 ; EVENT_FLAG_41 +	flag_def $10, %10000000 ; EVENT_FLAG_42 +	flag_def $10, %01000000 ; EVENT_FLAG_43 +	flag_def $10, %00110000 ; EVENT_FLAG_44 +	flag_def $10, %00001100 ; EVENT_FLAG_45 +	flag_def $10, %00000010 ; EVENT_FLAG_46 +	flag_def $10, %00000001 ; EVENT_FLAG_47 +	flag_def $11, %11100000 ; EVENT_FLAG_48 +	flag_def $11, %00011100 ; EVENT_FLAG_49 +	flag_def $12, %11100000 ; EVENT_FLAG_4A +	flag_def $13, %10000000 ; EVENT_FLAG_4B +	flag_def $13, %01100000 ; EVENT_FLAG_4C +	flag_def $13, %00011000 ; EVENT_FLAG_4D +	flag_def $13, %00000100 ; EVENT_FLAG_4E +	flag_def $13, %00000010 ; EVENT_FLAG_4F +	flag_def $14, %10000000 ; EVENT_FLAG_50 +	flag_def $14, %01000000 ; EVENT_FLAG_51 +	flag_def $14, %00100000 ; EVENT_FLAG_52 +	flag_def $14, %00010000 ; EVENT_FLAG_53 +	flag_def $14, %00001000 ; EVENT_FLAG_54 +	flag_def $14, %00000100 ; EVENT_FLAG_55 +	flag_def $14, %00000010 ; EVENT_FLAG_56 +	flag_def $14, %00000001 ; EVENT_FLAG_57 +	flag_def $15, %11110000 ; EVENT_FLAG_58 +	flag_def $15, %00001000 ; EVENT_FLAG_59 +	flag_def $16, %10000000 ; EVENT_FLAG_5A +	flag_def $16, %01000000 ; EVENT_FLAG_5B +	flag_def $16, %00100000 ; EVENT_FLAG_5C +	flag_def $16, %00010000 ; EVENT_FLAG_5D +	flag_def $16, %00001000 ; EVENT_FLAG_5E +	flag_def $16, %00000100 ; EVENT_FLAG_5F +	flag_def $16, %00000010 ; EVENT_FLAG_60 +	flag_def $16, %00000001 ; EVENT_FLAG_61 +	flag_def $16, %11111111 ; EVENT_FLAG_62 +	flag_def $17, %10000000 ; EVENT_FLAG_63 +	flag_def $17, %01000000 ; EVENT_FLAG_64 +	flag_def $17, %00110000 ; EVENT_FLAG_65 +	flag_def $17, %00001000 ; EVENT_FLAG_66 +	flag_def $17, %00000100 ; EVENT_FLAG_67 +	flag_def $18, %11000000 ; EVENT_FLAG_68 +	flag_def $18, %00110000 ; EVENT_FLAG_69 +	flag_def $18, %00001100 ; EVENT_FLAG_6A +	flag_def $18, %00000011 ; EVENT_FLAG_6B +	flag_def $19, %11000000 ; EVENT_FLAG_6C +	flag_def $19, %00100000 ; EVENT_FLAG_6D +	flag_def $19, %00010000 ; EVENT_FLAG_6E +	flag_def $19, %00001000 ; EVENT_FLAG_6F +	flag_def $19, %00000100 ; EVENT_FLAG_70 +	flag_def $19, %00111100 ; EVENT_FLAG_71 +	flag_def $1a, %11111100 ; EVENT_FLAG_72 +	flag_def $1a, %00000011 ; EVENT_FLAG_73 +	flag_def $1b, %11111111 ; EVENT_FLAG_74 +	flag_def $1c, %11110000 ; EVENT_FLAG_75 +	flag_def $1c, %00001111 ; EVENT_FLAG_76 + +; Used for basic level objects that just print text and quit +PrintInteractableObjectText: ; cc25 (3:4c25) +	ld hl, wDefaultObjectText +	ld a, [hli] +	ld h, [hl] +	ld l, a +	call Func_cc32 +	call CloseAdvancedDialogueBox +	ret  Func_cc32: ; cc32 (3:4c32)  	push hl -	ld hl, wd0c8 +	ld hl, wCurrentNPCNameTx  	ld e, [hl]  	inc hl  	ld d, [hl]  	pop hl  	call Func_c8ba  	ret -; 0xcc3e -	INCROM $cc3e, $cc42 +; Used for things that are represented as NPCs but don't have a Script +; EX: Clerks and legendary cards that interact through Level Objects +NoOverworldSequence: ; cc3e (3:4c3e) +	call CloseAdvancedDialogueBox +	ret -; called when pressing a in front of an object. creates a pointer to the data right after an RST20 -; was called, then runs RunOverworldScript to handle that data +; Enters into the script loop, continuing until wBreakScriptLoop > 0 +; When the loop is broken, it resumes normal code execution where script ended +; Note: Some scripts "double return" and skip this.  RST20: ; cc42 (3:4c42)  	pop hl  	ld a, l -	ld [wOWScriptPointer], a +	ld [wScriptPointer], a  	ld a, h -	ld [wOWScriptPointer+1], a +	ld [wScriptPointer+1], a  	xor a -	ld [wBreakOWScriptLoop], a -.asm_cc4f +	ld [wBreakScriptLoop], a +.continueScriptLoop  	call RunOverworldScript -	ld a, [wBreakOWScriptLoop] ; if you break out, it jumps +	ld a, [wBreakScriptLoop] ; if you break out, it jumps  	or a -	jr z, .asm_cc4f -	ld hl, wOWScriptPointer +	jr z, .continueScriptLoop +	ld hl, wScriptPointer  	ld a, [hli]  	ld c, a  	ld b, [hl] -	push bc -	ret +	retbc -IncreaseOWScriptPointerBy1: ; cc60 (3:4c60) +IncreaseScriptPointerBy1: ; cc60 (3:4c60)  	ld a, 1 -	jr IncreaseOWScriptPointer -IncreaseOWScriptPointerBy2: ; cc64 (3:4c64) +	jr IncreaseScriptPointer +IncreaseScriptPointerBy2: ; cc64 (3:4c64)  	ld a, 2 -	jr IncreaseOWScriptPointer -IncreaseOWScriptPointerBy4: ; cc68 (3:4c68) +	jr IncreaseScriptPointer +IncreaseScriptPointerBy4: ; cc68 (3:4c68)  	ld a, 4 -	jr IncreaseOWScriptPointer -IncreaseOWScriptPointerBy5: ; cc6c (3:4c6c) +	jr IncreaseScriptPointer +IncreaseScriptPointerBy5: ; cc6c (3:4c6c)  	ld a, 5 -	jr IncreaseOWScriptPointer -IncreaseOWScriptPointerBy6: ; cc70 (3:4c70) +	jr IncreaseScriptPointer +IncreaseScriptPointerBy6: ; cc70 (3:4c70)  	ld a, 6 -	jr IncreaseOWScriptPointer -IncreaseOWScriptPointerBy7: ; cc74 (3:4c74) +	jr IncreaseScriptPointer +IncreaseScriptPointerBy7: ; cc74 (3:4c74)  	ld a, 7 -	jr IncreaseOWScriptPointer -IncreaseOWScriptPointerBy3: ; cc78 (3:4c78) +	jr IncreaseScriptPointer +IncreaseScriptPointerBy3: ; cc78 (3:4c78)  	ld a, 3 -IncreaseOWScriptPointer: ; cc7a (3:4c7a) +IncreaseScriptPointer: ; cc7a (3:4c7a)  	ld c, a -	ld a, [wOWScriptPointer] +	ld a, [wScriptPointer]  	add c -	ld [wOWScriptPointer], a -	ld a, [wOWScriptPointer+1] +	ld [wScriptPointer], a +	ld a, [wScriptPointer+1]  	adc 0 -	ld [wOWScriptPointer+1], a +	ld [wScriptPointer+1], a  	ret -SetOWScriptPointer: ; cc8b (3:4c8b) -	ld hl, wOWScriptPointer +SetScriptPointer: ; cc8b (3:4c8b) +	ld hl, wScriptPointer  	ld [hl], c  	inc hl  	ld [hl], b @@ -1641,23 +1801,23 @@ SetOWScriptPointer: ; cc8b (3:4c8b)  	INCROM $cc92, $cc96 -GetOWSArgs1AfterPointer: ; cc96 (3:4c96) +GetScriptArgs1AfterPointer: ; cc96 (3:4c96)  	ld a, $1 -	jr GetOWSArgsAfterPointer +	jr GetScriptArgsAfterPointer -GetOWSArgs2AfterPointer: ; cc9a (3:4c9a) +GetScriptArgs2AfterPointer: ; cc9a (3:4c9a)  	ld a, $2 -	jr GetOWSArgsAfterPointer -GetOWSArgs3AfterPointer: ; cc9e (3:4c9e) +	jr GetScriptArgsAfterPointer +GetScriptArgs3AfterPointer: ; cc9e (3:4c9e)  	ld a, $3 -GetOWSArgsAfterPointer: ; cca0 (3:4ca0) +GetScriptArgsAfterPointer: ; cca0 (3:4ca0)  	push hl  	ld l, a -	ld a, [wOWScriptPointer] +	ld a, [wScriptPointer]  	add l  	ld l, a -	ld a, [wOWScriptPointer+1] +	ld a, [wScriptPointer+1]  	adc $0  	ld h, a  	ld a, [hli] @@ -1667,79 +1827,82 @@ GetOWSArgsAfterPointer: ; cca0 (3:4ca0)  	or b  	ret -Func_ccb3: ; ccb3 (3:4cb3) +SetScriptControlBytePass: ; ccb3 (3:4cb3)  	ld a, $ff -	ld [wd415], a +	ld [wScriptControlByte], a  	ret -Func_ccb9: ; ccb9 (3:4cb9) +SetScriptControlByteFail: ; ccb9 (3:4cb9)  	xor a -	ld [wd415], a -	ret - -OWScript_EndScriptLoop1: ; ccbe (3:4cbe) -OWScript_EndScriptLoop2: ; ccbe (3:4cbe) -OWScript_EndScriptLoop3: ; ccbe (3:4cbe) -OWScript_EndScriptLoop4: ; ccbe (3:4cbe) -OWScript_EndScriptLoop5: ; ccbe (3:4cbe) -OWScript_EndScriptLoop6: ; ccbe (3:4cbe) -OWScript_EndScriptLoop7: ; ccbe (3:4cbe) -OWScript_EndScriptLoop8: ; ccbe (3:4cbe) -OWScript_EndScriptLoop9: ; ccbe (3:4cbe) -OWScript_EndScriptLoop10: ; ccbe (3:4cbe) +	ld [wScriptControlByte], a +	ret + +; Exits Script mode and runs the next instruction like normal +ScriptCommand_EndScriptLoop1: ; ccbe (3:4cbe) +ScriptCommand_EndScriptLoop2: ; ccbe (3:4cbe) +ScriptCommand_EndScriptLoop3: ; ccbe (3:4cbe) +ScriptCommand_EndScriptLoop4: ; ccbe (3:4cbe) +ScriptCommand_EndScriptLoop5: ; ccbe (3:4cbe) +ScriptCommand_EndScriptLoop6: ; ccbe (3:4cbe) +ScriptCommand_EndScriptLoop7: ; ccbe (3:4cbe) +ScriptCommand_EndScriptLoop8: ; ccbe (3:4cbe) +ScriptCommand_EndScriptLoop9: ; ccbe (3:4cbe) +ScriptCommand_EndScriptLoop10: ; ccbe (3:4cbe)  	ld a, $01 -	ld [wBreakOWScriptLoop], a -	jp IncreaseOWScriptPointerBy1 +	ld [wBreakScriptLoop], a +	jp IncreaseScriptPointerBy1 -OWScript_CloseTextBox: ; ccc6 (3:4cc6) -	call CloseDialogueBox -	jp IncreaseOWScriptPointerBy1 +ScriptCommand_CloseAdvancedTextBox: ; ccc6 (3:4cc6) +	call CloseAdvancedDialogueBox +	jp IncreaseScriptPointerBy1 -OWScript_EndScriptCloseText: ; cccc (3:4ccc) -	call OWScript_CloseTextBox -	call OWScript_EndScriptLoop1 +ScriptCommand_QuitScriptFully: ; cccc (3:4ccc) +	call ScriptCommand_CloseAdvancedTextBox +	call ScriptCommand_EndScriptLoop1  	pop hl  	ret  ; args: 2-Text String Index -OWScript_PrintTextString: ; ccd4 (3:4cd4) +ScriptCommand_PrintTextString: ; ccd4 (3:4cd4)  	ld l, c  	ld h, b  	call Func_cc32 -	jp IncreaseOWScriptPointerBy3 +	jp IncreaseScriptPointerBy3  Func_ccdc: ; ccdc (3:4cdc)  	ld l, c  	ld h, b  	call Func_c891 -	jp IncreaseOWScriptPointerBy3 +	jp IncreaseScriptPointerBy3 -Func_cce4: ; cce4 (3:4ce4) +ScriptCommand_AskQuestionJumpDefaultYes: ; cce4 (3:4ce4)  	ld a, $1  	ld [wDefaultYesOrNo], a +;	fallthrough -; Asks the player a question then jumps if they answer yes -OWScript_AskQuestionJump: ; cce9 (3:4ce9) +; Asks the player a question then jumps if they answer yes. Seem to be able to +; take a text of 0000 to overwrite last with (yes no) prompt at the bottom +ScriptCommand_AskQuestionJump: ; cce9 (3:4ce9)  	ld l, c  	ld h, b  	call Func_c8ed  	ld a, [hCurMenuItem] -	ld [wd415], a +	ld [wScriptControlByte], a  	jr c, .asm_ccfe -	call GetOWSArgs3AfterPointer +	call GetScriptArgs3AfterPointer  	jr z, .asm_ccfe -	jp SetOWScriptPointer +	jp SetScriptPointer  .asm_ccfe -	jp IncreaseOWScriptPointerBy5 +	jp IncreaseScriptPointerBy5  ; args - prize cards, deck id, duel theme index  ; sets a battle up, doesn't start until we break out of the script system. -OWScript_StartBattle: ; cd01 (3:4d01) +ScriptCommand_StartBattle: ; cd01 (3:4d01)  	call Func_cd66 -	ld a, [wd3b6] -	ld l, $0 -	call Func_39ad +	ld a, [wScriptNPC] +	ld l, LOADED_NPC_ID +	call GetItemInLoadedNPCIndex  	ld a, [hl]  	farcall Func_118d3  	ld a, [wcc19] @@ -1748,14 +1911,14 @@ OWScript_StartBattle: ; cd01 (3:4d01)  	ld a, [wd695]  	ld c, a  	ld b, $0 -	ld hl, $4d63 +	ld hl, AaronDeckIDs  	add hl, bc  	ld a, [hl]  	ld [wcc19], a  .asm_cd26 -	ld a, [wd3b6] -	ld l, $0 -	call Func_39ad +	ld a, [wScriptNPC] +	ld l, LOADED_NPC_ID +	call GetItemInLoadedNPCIndex  	ld a, [hl]  asm_cd2f  	ld [wd0c4], a @@ -1769,7 +1932,7 @@ asm_cd2f  	ld [wGameEvent], a  	ld hl, wd0b4  	set 6, [hl] -	jp IncreaseOWScriptPointerBy4 +	jp IncreaseScriptPointerBy4  Func_cd4f: ; cd4f (3:4d4f)  	call Func_cd66 @@ -1780,15 +1943,17 @@ Func_cd4f: ; cd4f (3:4d4f)  	ld a, [wd696]  	jr asm_cd2f -Unknown_dd63: ; cd4f (3:4d4f) -	INCROM $cd63, $cd66 +AaronDeckIDs: ; cd63 (3:4d63) +	db LIGHTNING_AND_FIRE_DECK_ID +	db WATER_AND_FIGHTING_DECK_ID +	db GRASS_AND_PSYCHIC_DECK_ID  Func_cd66: ; cd66 (3:4d66)  	ld a, c  	ld [wcc18], a  	ld a, b  	ld [wcc19], a -	call GetOWSArgs3AfterPointer +	call GetScriptArgs3AfterPointer  	ld a, c  	ld [wDuelTheme], a  	ret @@ -1798,103 +1963,106 @@ Func_cd76: ; cd76 (3:4d76)  	ld [wGameEvent], a  	ld hl, wd0b4  	set 6, [hl] -	jp IncreaseOWScriptPointerBy1 +	jp IncreaseScriptPointerBy1 -Func_cd83: ; cd83 (3:4d83) -	ld a, [wd415] +; prints text arg 1 or arg 2 depending on wScriptControlByte. +ScriptCommand_PrintVariableText: ; cd83 (3:4d83) +	ld a, [wScriptControlByte]  	or a -	jr nz, .asm_cd8c -	call GetOWSArgs3AfterPointer -.asm_cd8c +	jr nz, .printText +	call GetScriptArgs3AfterPointer +.printText  	ld l, c  	ld h, b  	call Func_cc32 -	jp IncreaseOWScriptPointerBy5 +	jp IncreaseScriptPointerBy5  Func_cd94: ; cd94 (3:4d94) -	call Func_ca69 -	ld b, h +	get_flag_value EVENT_FLAG_44  Unknown_cd98:  	dec a  	and $3  	add a  	inc a -	call GetOWSArgsAfterPointer +	call GetScriptArgsAfterPointer  	ld l, c  	ld h, b  	call Func_cc32 -	jp IncreaseOWScriptPointerBy7 +	jp IncreaseScriptPointerBy7  Func_cda8: ; cda8 (3:4da8) -	ld a, [wd415] +	ld a, [wScriptControlByte]  	or a  	jr nz, .asm_cdb1 -	call GetOWSArgs3AfterPointer +	call GetScriptArgs3AfterPointer  .asm_cdb1  	ld l, c  	ld h, b  	call Func_c891 -	jp IncreaseOWScriptPointerBy5 +	jp IncreaseScriptPointerBy5 -OWScript_PrintTextCloseBox: ; cdb9 (3:4db9) +; Does not return to RST20 - pops an extra time to skip that. +ScriptCommand_PrintTextQuitFully: ; cdb9 (3:4db9)  	ld l, c  	ld h, b  	call Func_cc32 -	call CloseDialogueBox +	call CloseAdvancedDialogueBox  	ld a, $1 -	ld [wBreakOWScriptLoop], a -	call IncreaseOWScriptPointerBy3 +	ld [wBreakScriptLoop], a +	call IncreaseScriptPointerBy3  	pop hl  	ret  Func_cdcb: ; cdcb (3:4dcb) -	ld a, [wd3b6] -	ld [wd3aa], a +	ld a, [wScriptNPC] +	ld [wLoadedNPCTempIndex], a  Func_cdd1: ; cdd1 (3:4dd1)  	farcall Func_1c50a -	jp IncreaseOWScriptPointerBy1 +	jp IncreaseScriptPointerBy1  Func_cdd8: ; cdd8 (3:4dd8) -	ld a, [wd3aa] +	ld a, [wLoadedNPCTempIndex]  	push af -	ld a, [wd3ab] +	ld a, [wTempNPC]  	push af  	ld a, [wd696] -	ld [wd3ab], a -	call Func_39c3 +	ld [wTempNPC], a +	call FindLoadedNPC  	call Func_cdd1  	pop af -	ld [wd3ab], a +	ld [wTempNPC], a  	pop af -	ld [wd3aa], a +	ld [wLoadedNPCTempIndex], a  	ret  Func_cdf5: ; cdf5 (3:4df5) -	ld a, [wd3aa] +	ld a, [wLoadedNPCTempIndex]  	push af -	ld a, [wd3ab] +	ld a, [wTempNPC]  	push af  	ld a, [wd696] -	ld [wd3ab], a +	ld [wTempNPC], a  	ld a, c -	ld [wd3ac], a +	ld [wLoadNPCXPos], a  	ld a, b -	ld [wd3ad], a +	ld [wLoadNPCYPos], a  	ld a, $2 -	ld [wd3ae], a -	ld a, [wd3ab] -	farcall Func_11857 +	ld [wLoadNPCDirection], a +	ld a, [wTempNPC] +	farcall LoadNPCSpriteData  	farcall Func_1c485  	pop af -	ld [wd3ab], a +	ld [wTempNPC], a  	pop af -	ld [wd3aa], a -	jp IncreaseOWScriptPointerBy3 - -Func_ce26: ; ce26 (3:4e26) -	ld a, [wd3b6] -	ld [wd3aa], a -	farcall Func_1c455 +	ld [wLoadedNPCTempIndex], a +	jp IncreaseScriptPointerBy3 + +; Finds and executes an NPCMovement script in the table provided in bc +; based on the active NPC's current direction +ScriptCommand_MoveActiveNPCByDirection: ; ce26 (3:4e26) +	ld a, [wScriptNPC] +	ld [wLoadedNPCTempIndex], a +	farcall GetNPCDirection  	rlca  	add c  	ld l, a @@ -1904,56 +2072,67 @@ Func_ce26: ; ce26 (3:4e26)  	ld c, [hl]  	inc hl  	ld b, [hl] +;	fallthrough -Func_ce3a: ; ce3a (3:4e3a) +; Moves an NPC given the list of directions pointed to by bc +; set bit 7 to only rotate the NPC +ExecuteNPCMovement: ; ce3a (3:4e3a)  	farcall Func_1c78d  .asm_ce3e  	call DoFrameIfLCDEnabled  	farcall Func_1c7de  	jr nz, .asm_ce3e -	jp IncreaseOWScriptPointerBy3 - -Func_ce4a: ; ce4a (3:4e4a) -	ld a, [wd3b6] -	ld [wd3aa], a -	jr Func_ce3a - -Func_ce52: ; ce52 (3:4e52) -	ld a, [wd3aa] +	jp IncreaseScriptPointerBy3 + +; Begin a series of NPC movements on the currently talking NPC +; based on the series of directions pointed to by bc +ScriptCommand_MoveActiveNPC: ; ce4a (3:4e4a) +	ld a, [wScriptNPC] +	ld [wLoadedNPCTempIndex], a +	jr ExecuteNPCMovement + +; Begin a series of NPC movements on an arbitrary NPC +; based on the series of directions pointed to by bc +ScriptCommand_MoveWramNPC: ; ce52 (3:4e52) +	ld a, [wLoadedNPCTempIndex]  	push af -	ld a, [wd3ab] +	ld a, [wTempNPC]  	push af  	ld a, [wd696] -asm_ce5d -	ld [wd3ab], a -	call Func_39c3 -	call Func_ce3a +;	fallthrough + +; Executes movement on an arbitrary NPC using values in a and on the stack +; Changes and fixes Temp NPC using stack values +ExecuteArbitraryNPCMovementFromStack +	ld [wTempNPC], a +	call FindLoadedNPC +	call ExecuteNPCMovement  	pop af -	ld [wd3ab], a +	ld [wTempNPC], a  	pop af -	ld [wd3aa], a +	ld [wLoadedNPCTempIndex], a  	ret -Func_ce6f: ; ce6f (3:4e6f) -	ld a, [wd3aa] +ScriptCommand_MoveArbitraryNPC: ; ce6f (3:4e6f) +	ld a, [wLoadedNPCTempIndex]  	push af -	ld a, [wd3ab] +	ld a, [wTempNPC]  	push af  	ld a, c  	push af -	call GetOWSArgs2AfterPointer +	call GetScriptArgs2AfterPointer  	push bc -	call IncreaseOWScriptPointerBy1 +	call IncreaseScriptPointerBy1  	pop bc  	pop af -	jr asm_ce5d +	jr ExecuteArbitraryNPCMovementFromStack -Func_ce84: ; ce84 (3:4e84) -	call Func_c135 -	jp IncreaseOWScriptPointerBy1 +ScriptCommand_CloseTextBox: ; ce84 (3:4e84) +	call CloseTextBox +	jp IncreaseScriptPointerBy1  ; args: booster pack index, booster pack index, booster pack index -OWScript_GiveBoosterPacks: ; ce8a (3:4e8a) +ScriptCommand_GiveBoosterPacks: ; ce8a (3:4e8a)  	xor a  	ld [wd117], a  	push bc @@ -1966,42 +2145,48 @@ OWScript_GiveBoosterPacks: ; ce8a (3:4e8a)  	ld [wd117], a  	pop bc  	ld a, b -	cp $ff +	cp NO_BOOSTER  	jr z, .asm_ceb4  	farcall BoosterPack_1031b -	call GetOWSArgs3AfterPointer +	call GetScriptArgs3AfterPointer  	ld a, c -	cp $ff +	cp NO_BOOSTER  	jr z, .asm_ceb4  	farcall BoosterPack_1031b  .asm_ceb4  	call Func_c2d4 -	jp IncreaseOWScriptPointerBy4 +	jp IncreaseScriptPointerBy4 -Func_ceba: ; ceba (3:4eba) +ScriptCommand_GiveOneOfEachTrainerBooster: ; ceba (3:4eba)  	xor a  	ld [wd117], a  	call Func_c2a3 -	ld hl, $4edd -.asm_cec4 +	ld hl, .booster_type_table +.giveBoosterLoop  	ld a, [hl] -	cp $ff -	jr z, .asm_ced7 +	cp NO_BOOSTER +	jr z, .done  	push hl  	farcall BoosterPack_1031b  	ld a, $1  	ld [wd117], a  	pop hl  	inc hl -	jr .asm_cec4 -.asm_ced7 +	jr .giveBoosterLoop +.done  	call Func_c2d4 -	jp IncreaseOWScriptPointerBy1 -; 0xcedd - -	INCROM $cedd, $cee2 - -Func_cee2: ; cee2 (3:4ee2) +	jp IncreaseScriptPointerBy1 + +.booster_type_table +	db BOOSTER_COLOSSEUM_TRAINER +	db BOOSTER_EVOLUTION_TRAINER +	db BOOSTER_MYSTERY_TRAINER_COLORLESS +	db BOOSTER_LABORATORY_TRAINER +	db NO_BOOSTER ; $ff + +; Shows the card received screen for a given promotional card +; arg can either be the card, $00 for a wram card, or $ff for the 4 legends +ScriptCommand_ShowCardReceivedScreen: ; cee2 (3:4ee2)  	call Func_c2a3  	ld a, c  	cp $ff @@ -2019,7 +2204,7 @@ Func_cee2: ; cee2 (3:4ee2)  	call WhiteOutDMGPals  	call DoFrameIfLCDEnabled  	call Func_c2d4 -	jp IncreaseOWScriptPointerBy2 +	jp IncreaseScriptPointerBy2  .asm_cf09  	xor a @@ -2039,21 +2224,21 @@ asm_cf16  	jr nz, asm_cf1f  asm_cf19 -	call Func_ccb9 -	jp IncreaseOWScriptPointerBy4 +	call SetScriptControlByteFail +	jp IncreaseScriptPointerBy4  asm_cf1f -	call Func_ccb3 -	call GetOWSArgs2AfterPointer +	call SetScriptControlBytePass +	call GetScriptArgs2AfterPointer  	jr z, asm_cf2a -	jp SetOWScriptPointer +	jp SetScriptPointer  asm_cf2a -	jp IncreaseOWScriptPointerBy4 +	jp IncreaseScriptPointerBy4  Func_cf2d: ; cf2d (3:4f2d)  	push bc -	call IncreaseOWScriptPointerBy1 +	call IncreaseScriptPointerBy1  	pop bc  	call GetRawAmountOfCardsOwned  	ld a, h @@ -2066,20 +2251,21 @@ Func_cf2d: ; cf2d (3:4f2d)  	jr nc, asm_cf1f  	jr asm_cf19 -Func_cf3f: ; cf3f (3:4f3f) +; Gives the first arg as a card. If that's 0 pulls from wd697 +ScriptCommand_GiveCard: ; cf3f (3:4f3f)  	ld a, c  	or a -	jr nz, .asm_cf46 +	jr nz, .giveCard  	ld a, [wd697] -.asm_cf46 +.giveCard  	call AddCardToCollection -	jp IncreaseOWScriptPointerBy2 +	jp IncreaseScriptPointerBy2 -Func_cf4c: ; cf4c (3:4f4c) +ScriptCommand_TakeCard: ; cf4c (3:4f4c)  	ld a, c  	call RemoveCardFromCollection -	jp IncreaseOWScriptPointerBy2 +	jp IncreaseScriptPointerBy2  Func_cf53: ; cf53 (3:4f53)  	ld c, $1 @@ -2097,17 +2283,17 @@ Func_cf53: ; cf53 (3:4f53)  	or a  	jr nz, Func_cf6d  Func_cf67: ; cf67 (3:4f67) -	call Func_ccb9 -	jp IncreaseOWScriptPointerBy3 +	call SetScriptControlByteFail +	jp IncreaseScriptPointerBy3  Func_cf6d: ; cf6d (3:4f6d) -	call Func_ccb3 -	call GetOWSArgs1AfterPointer +	call SetScriptControlBytePass +	call GetScriptArgs1AfterPointer  	jr z, .asm_cf78 -	jp SetOWScriptPointer +	jp SetScriptPointer  .asm_cf78 -	jp IncreaseOWScriptPointerBy3 +	jp IncreaseScriptPointerBy3  Func_cf7b: ; cf7b (3:4f7b)  	ld c, $1 @@ -2129,50 +2315,48 @@ Func_cf7b: ; cf7b (3:4f7b)  	ld a, c  	cp $8  	jr c, .asm_cf7d -	jp IncreaseOWScriptPointerBy1 +	jp IncreaseScriptPointerBy1 -; This function doesn't look like a valid function, but it's pointed to in the table.  Func_cf96: ; cf96 (3:4f96)  	ld c, $0 -	call Func_ca69 -	ld de, $28b7 -	ld hl, $08fe +	get_flag_value EVENT_FLAG_11 +	or a +	jr z, Func_cfc0 +	cp a, $08  	jr c, .asm_cfa4  	inc c  .asm_cfa4 -	call Func_ca69 -	rla +	get_flag_value EVENT_FLAG_17  	cp $8  	jr c, .asm_cfad  	inc c  .asm_cfad -	call Func_ca69 -.asm_cfb0 -	jr nz, .asm_cfb0 -	ld [$0138], sp +	get_flag_value EVENT_FLAG_20 +	cp a, $08 +	jr c, .asm_cfb6  	inc c +.asm_cfb6  	ld a, c  	rlca  	add $3 -	call GetOWSArgsAfterPointer -	jp SetOWScriptPointer +	call GetScriptArgsAfterPointer +	jp SetScriptPointer  Func_cfc0: ; cfc0 (3:4fc0) -	call GetOWSArgs1AfterPointer -	jp SetOWScriptPointer +	call GetScriptArgs1AfterPointer +	jp SetScriptPointer  Func_cfc6: ; cfc6 (3:4fc6) -	ld a, [wd3b6] -	ld [wd3aa], a +	ld a, [wScriptNPC] +	ld [wLoadedNPCTempIndex], a  	ld a, c  	farcall Func_1c52e -	jp IncreaseOWScriptPointerBy2 +	jp IncreaseScriptPointerBy2  Func_cfd4: ; cfd4 (3:4fd4) -	call Func_ca69 -	dec l +	get_flag_value EVENT_FLAG_2D  	ld b, a  .asm_cfd9  	ld a, $5 @@ -2196,17 +2380,16 @@ Func_cfd4: ; cfd4 (3:4fd4)  	or b  	push bc  	ld c, a -	call Func_ca8f -	dec l +	set_flag_value EVENT_FLAG_2D  	pop bc  	ld b, $0 -	ld hl, $5006 +	ld hl, Data_d006  	add hl, bc  	ld c, [hl] -	call Func_ca8f -	dec hl -	jp IncreaseOWScriptPointerBy1 +	set_flag_value EVENT_FLAG_2B +	jp IncreaseScriptPointerBy1 +Data_d006: ; d006 (3:5006)  	INCROM $d006, $d00b  Func_d00b: ; d00b (3:500b) @@ -2215,8 +2398,7 @@ Func_d00b: ; d00b (3:500b)  	ld hl, wTxRam2  	add hl, bc  	push hl -	call Func_ca69 -	dec hl +	get_flag_value EVENT_FLAG_2B  	ld e, a  	ld d, $0  	call GetCardName @@ -2224,79 +2406,77 @@ Func_d00b: ; d00b (3:500b)  	ld [hl], e  	inc hl  	ld [hl], d -	jp IncreaseOWScriptPointerBy2 +	jp IncreaseScriptPointerBy2  Func_d025: ; d025 (3:5025) -	call Func_ca69 -	dec hl +	get_flag_value EVENT_FLAG_2B  	call GetCardCountInCollectionAndDecks  	jp c, Func_cf67  	jp Func_cf6d  Func_d032: ; d032 (3:5032) -	call Func_ca69 -	dec hl +	get_flag_value EVENT_FLAG_2B  	call GetCardCountInCollection  	jp c, Func_cf67  	jp Func_cf6d  Func_d03f: ; d03f (3:503f) -	call Func_ca69 -	dec hl +	get_flag_value EVENT_FLAG_2B  	call RemoveCardFromCollection -	jp IncreaseOWScriptPointerBy1 +	jp IncreaseScriptPointerBy1 -OWScript_ScriptJump: ; d049 (3:5049) -	call GetOWSArgs1AfterPointer -	jp SetOWScriptPointer +ScriptCommand_Jump: ; d049 (3:5049) +	call GetScriptArgs1AfterPointer +	jp SetScriptPointer -Func_d04f: ; d04f (3:504f) -	call Func_cad8 -	jp IncreaseOWScriptPointerBy1 +ScriptCommand_TryGiveMedalPCPacks: ; d04f (3:504f) +	call TryGiveMedalPCPacks +	jp IncreaseScriptPointerBy1 -Func_d055: ; d055 (3:5055) +ScriptCommand_SetPlayerDirection: ; d055 (3:5055)  	ld a, c -	call Func_c5ce -	jp IncreaseOWScriptPointerBy2 +	call UpdatePlayerDirection +	jp IncreaseScriptPointerBy2 - -OWScript_MovePlayer: ; 505c (3:505c) +; arg1 - Direction (index in PlayerMovementOffsetTable) +; arg2 - Tiles Moves (Speed) +ScriptCommand_MovePlayer: ; 505c (3:505c)  	ld a, c  	ld [wd339], a  	ld a, b  	ld [wd33a], a -	call StartScriptedMovement +	call StartScript_dMovement  .asm_d067  	call DoFrameIfLCDEnabled  	call SetScreenScroll  	call Func_c53d -	ld a, [wd335] +	ld a, [wPlayerCurrentlyMoving]  	and $03  	jr nz, .asm_d067  	call DoFrameIfLCDEnabled  	call SetScreenScroll -	jp IncreaseOWScriptPointerBy3 +	jp IncreaseScriptPointerBy3 -Func_d080: ; d080 (3:5080) +ScriptCommand_SetDialogName: ; d080 (3:5080)  	ld a, c -	farcall Func_11893 -	jp IncreaseOWScriptPointerBy2 +	farcall SetNPCDialogName +	jp IncreaseScriptPointerBy2 -Func_d088: ; d088 (3:5088) +ScriptCommand_SetNextNPCandScript: ; d088 (3:5088)  	ld a, c -	ld [wd3ab], a -	call GetOWSArgs2AfterPointer -	call Func_c926 -	jp IncreaseOWScriptPointerBy4 +	ld [wTempNPC], a +	call GetScriptArgs2AfterPointer +	call SetNextNPCAndScript +	jp IncreaseScriptPointerBy4  Func_d095: ; d095 (3:5095) -	ld a, [wd3b6] -	ld [wd3aa], a +	ld a, [wScriptNPC] +	ld [wLoadedNPCTempIndex], a  	push bc -	call GetOWSArgs3AfterPointer -	ld a, [wd3b6] -	ld l, $5 -	call Func_39ad +	call GetScriptArgs3AfterPointer +	ld a, [wScriptNPC] +	ld l, LOADED_NPC_FIELD_05 +	call GetItemInLoadedNPCIndex  	res 4, [hl]  	ld a, [hl]  	or c @@ -2311,56 +2491,56 @@ Func_d095: ; d095 (3:5095)  .asm_d0b6  	ld a, e  	farcall Func_1c57b -	jp IncreaseOWScriptPointerBy4 +	jp IncreaseScriptPointerBy4  Func_d0be: ; d0be (3:50be) -	ld a, [wd3b6] -	ld [wd3aa], a +	ld a, [wScriptNPC] +	ld [wLoadedNPCTempIndex], a  	ld a, c  	ld c, b  	ld b, a  	farcall Func_1c461 -	jp IncreaseOWScriptPointerBy3 +	jp IncreaseScriptPointerBy3 -Func_d0ce: ; d0ce (3:50ce) +ScriptCommand_DoFrames: ; d0ce (3:50ce)  	push bc  	call DoFrameIfLCDEnabled  	pop bc  	dec c -	jr nz, Func_d0ce -	jp IncreaseOWScriptPointerBy2 +	jr nz, ScriptCommand_DoFrames +	jp IncreaseScriptPointerBy2  Func_d0d9: ; d0d9 (3:50d9) -	ld a, [wd3b6] -	ld [wd3aa], a +	ld a, [wScriptNPC] +	ld [wLoadedNPCTempIndex], a  	ld d, c  	ld e, b  	farcall Func_1c477  	ld a, e  	cp c -	jp nz, Func_d48a +	jp nz, ScriptEventFailedNoJump  	ld a, d  	cp b -	jp nz, Func_d48a -	jp Func_d490 +	jp nz, ScriptEventFailedNoJump +	jp ScriptEventPassedTryJump -Func_d0f2: ; d0f2 (3:50f2) +ScriptCommand_JumpIfPlayerCoordMatches: ; d0f2 (3:50f2)  	ld a, [wPlayerXCoord]  	cp c -	jp nz, Func_d48a +	jp nz, ScriptEventFailedNoJump  	ld a, [wPlayerYCoord]  	cp b -	jp nz, Func_d48a -	jp Func_d490 +	jp nz, ScriptEventFailedNoJump +	jp ScriptEventPassedTryJump  Func_d103: ; d103 (3:5103) -	ld a, [wd3aa] +	ld a, [wLoadedNPCTempIndex]  	push af -	ld a, [wd3ab] +	ld a, [wTempNPC]  	push af  	ld a, c -	ld [wd3ab], a -	call Func_39c3 +	ld [wTempNPC], a +	call FindLoadedNPC  	jr c, .asm_d119  	call $54d1  	jr .asm_d11c @@ -2370,9 +2550,9 @@ Func_d103: ; d103 (3:5103)  .asm_d11c  	pop af -	ld [wd3ab], a +	ld [wTempNPC], a  	pop af -	ld [wd3aa], a +	ld [wLoadedNPCTempIndex], a  	ret  Func_d125: ; d125 (3:5125) @@ -2382,7 +2562,7 @@ Func_d125: ; d125 (3:5125)  	pop af  	farcall Medal_1029e  	call Func_c2d4 -	jp IncreaseOWScriptPointerBy2 +	jp IncreaseScriptPointerBy2  Func_d135: ; d135 (3:5135)  	sla c @@ -2403,12 +2583,12 @@ Func_d135: ; d135 (3:5135)  	ld [hl], e  	inc hl  	ld [hl], d -	jp IncreaseOWScriptPointerBy2 +	jp IncreaseScriptPointerBy2  	INCROM $d153, $d16b  Func_d16b: ; d16b (3:516b) -	ld hl, wd0c8 +	ld hl, wCurrentNPCNameTx  	ld e, [hl]  	inc hl  	ld d, [hl] @@ -2419,46 +2599,44 @@ Func_d16b: ; d16b (3:516b)  	add hl, bc  	push hl  	ld a, [wd696] -	farcall Func_11893 +	farcall SetNPCDialogName  	pop hl -	ld a, [wd0c8] +	ld a, [wCurrentNPCNameTx]  	ld [hli], a -	ld a, [wd0c9] +	ld a, [wCurrentNPCNameTx+1]  	ld [hl], a  	pop de -	ld hl, wd0c8 +	ld hl, wCurrentNPCNameTx  	ld [hl], e  	inc hl  	ld [hl], d -	jp IncreaseOWScriptPointerBy2 +	jp IncreaseScriptPointerBy2  Func_d195: ; d195 (3:5195) -	ld a, [wd3ab] +	ld a, [wTempNPC]  	push af -	call Func_ca69 -	ld b, l +	get_flag_value EVENT_FLAG_45  	inc a  	ld c, a -	call Func_ca8f -	ld b, l +	set_flag_value EVENT_FLAG_45  	call Func_f580  	pop af -	ld [wd3ab], a -	jp IncreaseOWScriptPointerBy1 +	ld [wTempNPC], a +	jp IncreaseScriptPointerBy1  Func_d1ad: ; d1ad (3:51ad)  	call MainMenu_c75a -	jp IncreaseOWScriptPointerBy1 +	jp IncreaseScriptPointerBy1  Func_d1b3: ; d1b3 (3:51b3) -	call Func_ca69 -	ld b, h +	get_flag_value EVENT_FLAG_44  	dec a  	cp $2  	jr c, .asm_d1c3  	ld a, $d  	call Random  	add $2 +;	fallthrough  .asm_d1c3  	ld hl, $51dc @@ -2475,13 +2653,12 @@ asm_d1c6  	ld [wTxRam2], a  	ld a, [hl]  	ld [wTxRam2 + 1], a -	jp IncreaseOWScriptPointerBy1 +	jp IncreaseScriptPointerBy1  	INCROM $d1dc, $d209  Func_d209: ; d209 (3:5209) -	call Func_ca69 -	ld [hl], c +	get_flag_value EVENT_FLAG_71  	ld e, a  .asm_d20e  	call UpdateRNGSources @@ -2501,21 +2678,35 @@ Func_d209: ; d209 (3:5209)  	jr nz, .asm_d20e  	push bc  	ld b, $0 -	ld hl, $5240 +	ld hl, Flags_d240  	add hl, bc  	ld a, [hl] -	call SetEventFlags +	call MaxOutEventFlag  	pop bc -	ld hl, $5234 +	ld hl, LegendaryCards  	ld a, c  	jr asm_d1c6 -	INCROM $d234, $d244 +LegendaryCards: ; d234 (3:5234) +	db ZAPDOS3 +	tx Text03f0 +	db MOLTRES2 +	tx Text03f1 +	db ARTICUNO2 +	tx Text03f2 +	db DRAGONITE1 +	tx Text03f3 + +Flags_d240: ; d240 (3:5240) +	db EVENT_FLAG_6D +	db EVENT_FLAG_6E +	db EVENT_FLAG_6F +	db EVENT_FLAG_70  Func_d244: ; d244 (3:5244)  	ld a, c  	farcall Func_80ba4 -	jp IncreaseOWScriptPointerBy2 +	jp IncreaseScriptPointerBy2  Func_d24c: ; d24c (3:524c)  	ld hl, $525e @@ -2523,9 +2714,8 @@ Func_d24c: ; d24c (3:524c)  	call Func_d28c  	ld a, [wd695]  	ld c, a -	call Func_ca8f -	halt -	jp IncreaseOWScriptPointerBy1 +	set_flag_value EVENT_FLAG_76 +	jp IncreaseScriptPointerBy1  	INCROM $d25e, $d271 @@ -2533,7 +2723,7 @@ Func_d271: ; d271 (3:5271)  	ld hl, $527b  	xor a  	call Func_d28c -	jp IncreaseOWScriptPointerBy1 +	jp IncreaseScriptPointerBy1  ; 0xd27b  	INCROM $d27b, $d28c @@ -2620,11 +2810,10 @@ Func_d2f6: ; d2f6 (3:52f6)  	call Func_d28c  	ld a, [wd694]  	ld c, a -	call Func_ca8f -	ld [hl], l +	set_flag_value EVENT_FLAG_75  	xor a  	ld [wd694], a -	jp IncreaseOWScriptPointerBy1 +	jp IncreaseScriptPointerBy1  ; 0xd30c  	INCROM $d30c, $d317 @@ -2635,14 +2824,13 @@ Func_d317: ; d317 (3:5317)  	call Func_d28c  	ld a, [wd694]  	ld c, a -	call Func_ca8f -	ld [hl], l -	jp IncreaseOWScriptPointerBy1 - +	set_flag_value EVENT_FLAG_75 +	jp IncreaseScriptPointerBy1 +Unknown_d32b: ; d32b (3:532b)  	INCROM $d32b, $d336 -OWScript_OpenDeckMachine: ; d336 (3:5336) +ScriptCommand_OpenDeckMachine: ; d336 (3:5336)  	push bc  	call Func_c2a3  	call PauseSong @@ -2667,34 +2855,35 @@ OWScript_OpenDeckMachine: ; d336 (3:5336)  .asm_d364  	call ResumeSong  	call Func_c2d4 -	jp IncreaseOWScriptPointerBy2 +	jp IncreaseScriptPointerBy2 -Func_d36d: ; d36d (3:536d) -	ld a, [wOWScriptPointer] +; args: unused, room, new player x, new player y, new player direction +ScriptCommand_EnterMap: ; d36d (3:536d) +	ld a, [wScriptPointer]  	ld l, a -	ld a, [wOWScriptPointer+1] +	ld a, [wScriptPointer+1]  	ld h, a  	inc hl  	ld a, [hli]  	ld a, [hli] -	ld [wd0bb], a +	ld [wTempMap], a  	ld a, [hli] -	ld [wd0bc], a +	ld [wTempPlayerXCoord], a  	ld a, [hli] -	ld [wd0bd], a +	ld [wTempPlayerYCoord], a  	ld a, [hli] -	ld [wd0be], a +	ld [wTempPlayerDirection], a  	ld hl, wd0b4  	set 4, [hl] -	jp IncreaseOWScriptPointerBy6 +	jp IncreaseScriptPointerBy6  Func_d38f: ; d38f (3:538f)  	farcall Func_10c96 -	jp IncreaseOWScriptPointerBy2 +	jp IncreaseScriptPointerBy2  Func_d396: ; d396 (3:5396)  	farcall Func_1157c -	jp IncreaseOWScriptPointerBy2 +	jp IncreaseScriptPointerBy2  Func_d39d: ; d39d (3:539d)  	ld a, c @@ -2702,8 +2891,7 @@ Func_d39d: ; d39d (3:539d)  	jr nz, .asm_d3ac  	farcall Func_10dba  	ld c, a -	call Func_ca8f -	ld [hl], d +	set_flag_value EVENT_FLAG_72  	jr .asm_d3b6  .asm_d3ac @@ -2713,7 +2901,7 @@ Func_d39d: ; d39d (3:539d)  	set 6, [hl]  .asm_d3b6 -	jp IncreaseOWScriptPointerBy2 +	jp IncreaseScriptPointerBy2  Func_d3b9: ; d3b9 (3:53b9)  	call Func_3917 @@ -2721,20 +2909,20 @@ Func_d3b9: ; d3b9 (3:53b9)  	ld [wGameEvent], a  	ld hl, wd0b4  	set 6, [hl] -	jp IncreaseOWScriptPointerBy1 +	jp IncreaseScriptPointerBy1 -Func_d3c9: ; d3c9 (3:53c9) +ScriptCommand_TryGivePCPack: ; d3c9 (3:53c9)  	ld a, c -	farcall Func_10a70 -	jp IncreaseOWScriptPointerBy2 +	farcall TryGivePCPack +	jp IncreaseScriptPointerBy2 -Func_d3d1: ; d3d1 (3:53d1) -    jp IncreaseOWScriptPointerBy1 +ScriptCommand_nop: ; d3d1 (3:53d1) +    jp IncreaseScriptPointerBy1  Func_d3d4: ; d3d4 (3:53d4)  	ld a, [wd693]  	bank1call Func_7576 -	jp IncreaseOWScriptPointerBy1 +	jp IncreaseScriptPointerBy1  	INCROM $d3dd, $d3e0 @@ -2749,236 +2937,1096 @@ Func_d3e0: ; d3e0 (3:53e0)  	cp $2  	jr nz, .asm_d3e9  	farcall Func_10f2e -	jp IncreaseOWScriptPointerBy1 +	jp IncreaseScriptPointerBy1  Func_d3fe: ; d3fe (3:53fe)  	ld a, c  	ld [wd112], a  	call PlaySong -	jp IncreaseOWScriptPointerBy2 +	jp IncreaseScriptPointerBy2  Func_d408: ; d408 (3:5408)  	ld a, c  	ld [wd111], a -	jp IncreaseOWScriptPointerBy2 +	jp IncreaseScriptPointerBy2  Func_d40f: ; d40f (3:540f)  	ld a, c -	call Func_3c83 -	jp IncreaseOWScriptPointerBy2 +	call CallPlaySong +	jp IncreaseScriptPointerBy2 -Func_d416: ; d416 (3:5416) +ScriptCommand_PlaySFX: ; d416 (3:5416)  	ld a, c  	call PlaySFX -	jp IncreaseOWScriptPointerBy2 +	jp IncreaseScriptPointerBy2  Func_d41d: ; d41d (3:541d)  	call Func_39fc -	jp IncreaseOWScriptPointerBy1 +	jp IncreaseScriptPointerBy1 -Func_d423: ; d423 (3:5423) +ScriptCommand_PauseSong: ; d423 (3:5423)  	call PauseSong -	jp IncreaseOWScriptPointerBy1 +	jp IncreaseScriptPointerBy1 -Func_d429: ; d429 (3:5429) +ScriptCommand_ResumeSong: ; d429 (3:5429)  	call ResumeSong -	jp IncreaseOWScriptPointerBy1 +	jp IncreaseScriptPointerBy1 -Func_d42f: ; d42f (3:542f) -	call Func_3c96 -	jp IncreaseOWScriptPointerBy1 +ScriptCommand_WaitForSongToFinish: ; d42f (3:542f) +	call WaitForSongToFinish +	jp IncreaseScriptPointerBy1  Func_d435: ; d435 (3:5435)  	ld a, c  	farcall Func_1c83d -	jp IncreaseOWScriptPointerBy2 +	jp IncreaseScriptPointerBy2  Func_d43d: ; d43d (3:543d)  	ld a, GAME_EVENT_CHALLENGE_MACHINE  	ld [wGameEvent], a  	ld hl, wd0b4  	set 6, [hl] -	jp IncreaseOWScriptPointerBy1 +	jp IncreaseScriptPointerBy1 -OWScript_CustomModifyEventFlags: ; d44a (3:544a) +; sets the event flag in arg 1 to the value in arg 2 +ScriptCommand_SetFlagValue: ; d44a (3:544a)  	ld a, c  	ld c, b -	call ModifyEventFlags -	jp IncreaseOWScriptPointerBy3 +	call SetEventFlagValue +	jp IncreaseScriptPointerBy3 -Func_d452: ; d452 (3:5452) +ScriptCommand_IncrementFlagValue: ; d452 (3:5452)  	ld a, c  	push af -	call CheckIfEventFlagSet +	call GetEventFlagValue  	inc a  	ld c, a  	pop af -	call ModifyEventFlags -	jp IncreaseOWScriptPointerBy2 +	call SetEventFlagValue +	jp IncreaseScriptPointerBy2 -Func_d460: ; d460 (3:5460) +ScriptCommand_JumpIfFlagZero1: ; d460 (3:5460)  	ld a, c -	call CheckIfEventFlagSet +	call GetEventFlagValue  	or a -	jr z, asm_d46d -asm_d467 -	call Func_ccb9 -	jp IncreaseOWScriptPointerBy4 +	jr z, ScriptCommand_JumpIfFlagZero1.passTryJump -asm_d46d -	call Func_ccb3 -	call GetOWSArgs2AfterPointer -	jr z, .asm_d478 -	jp SetOWScriptPointer +.fail +	call SetScriptControlByteFail +	jp IncreaseScriptPointerBy4 -.asm_d478 -	jp IncreaseOWScriptPointerBy4 +.passTryJump +	call SetScriptControlBytePass +	call GetScriptArgs2AfterPointer +	jr z, .noJumpTarget +	jp SetScriptPointer -OWScript_JumpIfFlagSet: ; d47b (3:547b) +.noJumpTarget +	jp IncreaseScriptPointerBy4 + +ScriptCommand_JumpIfFlagNonzero1: ; d47b (3:547b)  	ld a, c -	call CheckIfEventFlagSet +	call GetEventFlagValue  	or a -	jr nz, asm_d46d -	jr asm_d467 +	jr nz, ScriptCommand_JumpIfFlagZero1.passTryJump +	jr ScriptCommand_JumpIfFlagZero1.fail -Func_d484: ; d484 (3:5484) -	call Func_d4b6 +; args - event flag, value, jump address +ScriptCommand_JumpIfFlagEqual: ; d484 (3:5484) +	call GetEventFlagValueBC  	cp c -	jr z, Func_d490 +	jr z, ScriptEventPassedTryJump -Func_d48a: ; d48a (3:548a) -	call Func_ccb9 -	jp IncreaseOWScriptPointerBy5 +ScriptEventFailedNoJump ; d48a (3:548a) +	call SetScriptControlByteFail +	jp IncreaseScriptPointerBy5 -Func_d490: ; d490 (3:5490) -	call Func_ccb3 -	call GetOWSArgs3AfterPointer -	jr z, .asm_d49b -	jp SetOWScriptPointer +ScriptEventPassedTryJump ; d490 (3:5490) +	call SetScriptControlBytePass +	call GetScriptArgs3AfterPointer +	jr z, .noJumpAddress +	jp SetScriptPointer -.asm_d49b -	jp IncreaseOWScriptPointerBy5 +.noJumpAddress +	jp IncreaseScriptPointerBy5 -Func_d49e: ; d49e (3:549e) -	call Func_d4b6 +ScriptCommand_JumpIfFlagNotEqual: ; d49e (3:549e) +	call GetEventFlagValueBC  	cp c -	jr nz, Func_d490 -	jr Func_d48a +	jr nz, ScriptEventPassedTryJump +	jr ScriptEventFailedNoJump -Func_d4a6: ; d4a6 (3:54a6) -	call Func_d4b6 +ScriptCommand_JumpIfFlagNotLessThan: ; d4a6 (3:54a6) +	call GetEventFlagValueBC  	cp c -	jr nc, Func_d490 -	jr Func_d48a +	jr nc, ScriptEventPassedTryJump +	jr ScriptEventFailedNoJump -Func_d4ae: ; d4ae (3:54ae) -	call Func_d4b6 +ScriptCommand_JumpIfFlagLessThan: ; d4ae (3:54ae) +	call GetEventFlagValueBC  	cp c -	jr c, Func_d490 ; 0xd4b2 $dc -	jr Func_d48a ; 0xd4b4 $d4 +	jr c, ScriptEventPassedTryJump +	jr ScriptEventFailedNoJump -Func_d4b6: ; d4b6 (3:54b6) +; Gets event flag at c (Script defaults) +; c takes on the value of b as a side effect +GetEventFlagValueBC: ; d4b6 (3:54b6)  	ld a, c  	ld c, b -	call CheckIfEventFlagSet +	call GetEventFlagValue  	ret -OWScript_SetEventFlags: ; d4bc (3:54bc) +ScriptCommand_MaxOutFlagValue: ; d4bc (3:54bc)  	ld a, c -	call SetEventFlags -	jp IncreaseOWScriptPointerBy2 +	call MaxOutEventFlag +	jp IncreaseScriptPointerBy2 -Func_d4c3: ; d4c3 (3:54c3) +ScriptCommand_ZeroOutFlagValue: ; d4c3 (3:54c3)  	ld a, c -	call Func_cad0 -	jp IncreaseOWScriptPointerBy2 +	call ZeroOutEventFlag +	jp IncreaseScriptPointerBy2 -Func_d4ca: ; d4ca (3:54ca) +ScriptCommand_JumpIfFlagNonzero2: ; d4ca (3:54ca)  	ld a, c -	call CheckIfEventFlagSet +	call GetEventFlagValue  	or a -	jr z, asm_d4e6 -Func_d4d1: -	call Func_ccb3 -	call GetOWSArgs2AfterPointer -	jr z, .asm_d4dc -	jp SetOWScriptPointer -.asm_d4dc -	jp IncreaseOWScriptPointerBy4 - -OWScript_JumpIfFlagNotSet: +	jr z, ScriptCommand_JumpIfFlagZero2.fail + +.passTryJump: +	call SetScriptControlBytePass +	call GetScriptArgs2AfterPointer +	jr z, .noJumpArgs +	jp SetScriptPointer +.noJumpArgs +	jp IncreaseScriptPointerBy4 + +ScriptCommand_JumpIfFlagZero2:  	ld a, c -	call CheckIfEventFlagSet +	call GetEventFlagValue  	or a -	jr z, Func_d4d1 -asm_d4e6 -	call Func_ccb9 -	jp IncreaseOWScriptPointerBy4 +	jr z, ScriptCommand_JumpIfFlagNonzero2.passTryJump + +.fail +	call SetScriptControlByteFail +	jp IncreaseScriptPointerBy4  ; 0xd4ec -	INCROM $d4ec, $d753 +LoadOverworld: ; d4ec (3:54ec) +	call Func_d4fb +	get_flag_value EVENT_FLAG_3E +	or a +	ret nz +	ld bc, Script_BeginGame +	jp SetNextScript + +Func_d4fb: ; d4fb (3:54fb) +	zero_flag_value EVENT_FLAG_59 +	call Func_f602 +	get_flag_value EVENT_FLAG_3F +	cp $02 +	jr z, .asm_d527 +	get_flag_value EVENT_FLAG_40 +	cp $02 +	jr z, .asm_d521 +	get_flag_value EVENT_FLAG_41 +	cp $02 +	jr z, .asm_d51b +	ret +.asm_d51b +	ld c, $07 +	set_flag_value EVENT_FLAG_41 +.asm_d521 +	ld c, $07 +	set_flag_value EVENT_FLAG_40 +.asm_d527 +	ld c, $07 +	set_flag_value EVENT_FLAG_3F +	ret -OWSequence_d753: ; d753 (3:5753) +Script_BeginGame: ; d52e (3:552e)  	start_script -	run_script OWScript_MovePlayer -	db $00 +	run_command ScriptCommand_DoFrames +	db $3c +	run_command Func_d3e0 +	run_command ScriptCommand_DoFrames +	db $78 +	run_command ScriptCommand_EnterMap  	db $02 -	run_script OWScript_MovePlayer +	db MASON_LABORATORY +	db 14 +	db 26 +	db NORTH +	run_command ScriptCommand_QuitScriptFully + +MasonLaboratoryAfterDuel: ; d53b (3:553b) +	ld hl, .after_duel_table +	call FindEndOfBattleScript +	ret + +.after_duel_table +	db NPC_SAM +	db NPC_SAM +	dw $568a +	dw $569f  	db $00 -	db $02 -	run_script OWScript_MovePlayer + +MasonLabLoadMap: ; d549 (3:5549) +	get_flag_value EVENT_FLAG_3E +	cp $03 +	ret nc +	ld a, NPC_DRMASON +	ld [wTempNPC], a +	call FindLoadedNPC +	ld bc, Script_EnterLabFirstTime +	jp SetNextNPCAndScript + +MasonLabCloseTextBox: ; d55e (3:555e) +	ld a, $0a +	farcall Func_80b89 +	ret + +; Lets you access the Challenge Machine if available +MasonLabPressedA: ; d565 (3:5565) +	get_flag_value EVENT_RECEIVED_LEGENDARY_CARD +	or a +	ret z +	ld hl, ChallengeMachineObjectTable +	call FindExtraInteractableObjects +	ret + +ChallengeMachineObjectTable: ; d572 (3:5572) +	db 10, 4, NORTH +	dw Script_ChallengeMachine +	db 12, 4, NORTH +	dw Script_ChallengeMachine  	db $00 + +Script_ChallengeMachine: ; d57d (3:557d) +	start_script +	run_command Func_ccdc +	tx Text05bd +	run_command Func_d43d +	run_command ScriptCommand_QuitScriptFully + +	INCROM $d583, $d753 + +Script_EnterLabFirstTime: ; d753 (3:5753) +	start_script +	run_command ScriptCommand_MovePlayer +	db NORTH  	db $02 -	run_script OWScript_MovePlayer -	db $00 +	run_command ScriptCommand_MovePlayer +	db NORTH  	db $02 -	run_script OWScript_MovePlayer -	db $00 +	run_command ScriptCommand_MovePlayer +	db NORTH  	db $02 -	run_script OWScript_MovePlayer -	db $00 +	run_command ScriptCommand_MovePlayer +	db NORTH  	db $02 -	run_script OWScript_MovePlayer -	db $00 +	run_command ScriptCommand_MovePlayer +	db NORTH  	db $02 -	run_script OWScript_MovePlayer -	db $00 +	run_command ScriptCommand_MovePlayer +	db NORTH  	db $02 -	run_script OWScript_MovePlayer -	db $00 +	run_command ScriptCommand_MovePlayer +	db NORTH +	db $02 +	run_command ScriptCommand_MovePlayer +	db NORTH  	db $02 -	run_script OWScript_PrintTextString +	run_command ScriptCommand_MovePlayer +	db NORTH +	db $02 +	run_command ScriptCommand_PrintTextString  	tx Text05e3 -	run_script OWScript_CloseTextBox -	run_script Func_d088 +	run_command ScriptCommand_CloseAdvancedTextBox +	run_command ScriptCommand_SetNextNPCandScript +	db NPC_SAM +	dw Script_d779 +	run_command ScriptCommand_EndScriptLoop1 +	ret + +Script_d779: ; d779 (03:5779) +	start_script +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_d880 +	run_command ScriptCommand_PrintTextString +	tx Text05e4 +	run_command ScriptCommand_SetDialogName +	db NPC_DRMASON +	run_command ScriptCommand_PrintTextString +	tx Text05e5 +	run_command ScriptCommand_CloseTextBox +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_d882 +	run_command Func_cfc6 +	db $01 +	run_command ScriptCommand_SetPlayerDirection +	db $03 +	run_command ScriptCommand_CloseAdvancedTextBox +	run_command ScriptCommand_SetNextNPCandScript +	db NPC_DRMASON +	dw Script_d794 +	run_command ScriptCommand_EndScriptLoop1 +	ret + +Script_d794: ; d794 (3:5794) +	start_script +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_d88b +	run_command ScriptCommand_DoFrames +	db 40 +	run_command ScriptCommand_PrintTextString +	tx Text05e6 +	run_command ScriptCommand_CloseTextBox +	run_command ScriptCommand_MovePlayer +	db WEST +	db $01 +	run_command ScriptCommand_MovePlayer +	db WEST +	db $01 +	run_command ScriptCommand_SetPlayerDirection +	db SOUTH +	run_command ScriptCommand_MovePlayer +	db SOUTH +	db $01 +	run_command ScriptCommand_MovePlayer +	db SOUTH +	db $01 +	run_command ScriptCommand_MovePlayer +	db SOUTH +	db $01 +	run_command ScriptCommand_SetPlayerDirection +	db WEST +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_d894 +	run_command ScriptCommand_PrintTextString +	tx Text05e7 +	run_command ScriptCommand_SetDialogName +	db $07 +	run_command ScriptCommand_PrintTextString +	tx Text05e8 + +.ows_d7bc +	run_command ScriptCommand_CloseTextBox +	run_command Func_d317 +	run_command ScriptCommand_CloseTextBox +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_75 +	db $07 +	dw .ows_d80c +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_75 +	db $01 +	dw .ows_d7e8 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_75 +	db $02 +	dw .ows_d7ee +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_75 +	db $03 +	dw .ows_d7f4 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_75 +	db $04 +	dw .ows_d7fa +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_75 +	db $05 +	dw .ows_d800 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_75 +	db $06 +	dw .ows_d806 +	run_command ScriptCommand_PrintTextString +	tx Text05d6 +	run_command ScriptCommand_Jump +	dw .ows_d7bc + +.ows_d7e8 +	run_command ScriptCommand_PrintTextString +	tx Text05d7 +	run_command ScriptCommand_Jump +	dw .ows_d7bc + +.ows_d7ee +	run_command ScriptCommand_PrintTextString +	tx Text05d8 +	run_command ScriptCommand_Jump +	dw .ows_d7bc + +.ows_d7f4 +	run_command ScriptCommand_PrintTextString +	tx Text05d9 +	run_command ScriptCommand_Jump +	dw .ows_d7bc + +.ows_d7fa +	run_command ScriptCommand_PrintTextString +	tx Text05da +	run_command ScriptCommand_Jump +	dw .ows_d7bc + +.ows_d800 +	run_command ScriptCommand_PrintTextString +	tx Text05db +	run_command ScriptCommand_Jump +	dw .ows_d7bc + +.ows_d806 +	run_command ScriptCommand_PrintTextString +	tx Text05dc +	run_command ScriptCommand_Jump +	dw .ows_d7bc + +.ows_d80c +	run_command ScriptCommand_PrintTextString +	tx Text05e9 +	run_command ScriptCommand_AskQuestionJumpDefaultYes +	dw 0000 +	dw .ows_d817 +	run_command ScriptCommand_Jump +	dw .ows_d7bc + +.ows_d817 +	run_command ScriptCommand_SetDialogName +	db $01 +	run_command ScriptCommand_PrintTextString +	tx Text05ea +	run_command ScriptCommand_nop +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_3E +	db $01 +	run_command ScriptCommand_CloseAdvancedTextBox +	run_command ScriptCommand_SetNextNPCandScript +	db NPC_SAM +	dw Script_d827 +	run_command ScriptCommand_EndScriptLoop1 +	ret + +Script_d827: ; d827 (3:5827) +	start_script +	run_command ScriptCommand_StartBattle +	db PRIZES_2 +	db SAMS_PRACTICE_DECK_ID +	db MUSIC_DUEL_THEME_1 +	run_command ScriptCommand_QuitScriptFully +; 0xd82d + +	INCROM $d82d, $d880 + +NPCMovement_d880: ; d880 (3:5880) +	db EAST +	db $ff + +NPCMovement_d882: ; d882 (3:5882) +	db SOUTH +	db SOUTH +	db WEST +	db WEST +	db WEST +	db WEST +	db SOUTH +	db EAST | NO_MOVE +	db $ff + +NPCMovement_d88b: ; d88b (3:588b) +	db WEST +	db SOUTH +	db SOUTH +	db SOUTH +	db WEST +	db WEST +	db WEST +	db EAST | NO_MOVE +	db $ff + +NPCMovement_d894: ; d894 (4:5894) +	db SOUTH | NO_MOVE +	db $ff + +	INCROM $d896, $d932 + +Script_d932: ; d932 (3:5932) +	start_script +	run_command Func_ccdc +	tx Text0605 +	run_command ScriptCommand_AskQuestionJumpDefaultYes +	tx Text0606 +	dw .ows_d93c +	run_command ScriptCommand_QuitScriptFully + +.ows_d93c +	run_command ScriptCommand_OpenDeckMachine +	db $09 +	run_command ScriptCommand_QuitScriptFully +; 0xd93f + +	INCROM $d93f, $dadd + +Preload_NikkiInIshiharasHouse: ; dadd (3:5add) +	get_flag_value EVENT_FLAG_35 +	cp $01 +	jr nz, .dontLoadNikki +	scf +	ret +.dontLoadNikki +	or a +	ret +; 0xdae9 + +	INCROM $dae9, $db3d + +Preload_IshiharaInIshiharasHouse: ; db3d (3:5b3d) +	get_flag_value EVENT_FLAG_1C +	or a +	ret z +	get_flag_value EVENT_FLAG_1F +	cp $08 +	ret + +Script_Ishihara: ; db4a (3:5b4a) +	start_script +	run_command ScriptCommand_MaxOutFlagValue +	db EVENT_FLAG_1D +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_1F +	db $00 +	dw .ows_db80 +	run_command ScriptCommand_JumpIfFlagNonzero2 +	db EVENT_FLAG_39 +	dw .ows_db5a +	run_command ScriptCommand_JumpIfFlagNonzero2 +	db EVENT_RECEIVED_LEGENDARY_CARD +	dw .ows_dc3e +.ows_db5a +	run_command ScriptCommand_JumpIfFlagNonzero2 +	db EVENT_FLAG_00 +	dw .ows_db90 +	run_command ScriptCommand_JumpIfFlagZero2 +	db EVENT_FLAG_38 +	dw .ows_db90 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_1F +	db $01 +	dw .ows_db93 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_1F +	db $02 +	dw .ows_db93 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_1F +	db $03 +	dw .ows_dbcc +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_1F +	db $04 +	dw .ows_dbcc +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_1F +	db $05 +	dw .ows_dc05 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_1F +	db $06 +	dw .ows_dc05 +.ows_db80 +	run_command ScriptCommand_MaxOutFlagValue +	db EVENT_FLAG_00 +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_1F +	db $01 +	run_command ScriptCommand_ZeroOutFlagValue +	db EVENT_FLAG_38 +	run_command ScriptCommand_JumpIfFlagZero2 +	db EVENT_RECEIVED_LEGENDARY_CARD +	dw .ows_db8d +	run_command ScriptCommand_MaxOutFlagValue +	db EVENT_FLAG_39 +.ows_db8d +	run_command ScriptCommand_PrintTextQuitFully +	tx Text0727 + +.ows_db90 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text0728 + +.ows_db93 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_1F +	db $01 +	dw NO_JUMP +	run_command ScriptCommand_PrintVariableText +	tx Text0729 +	tx Text072a +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_1F +	db $02 +	run_command ScriptCommand_AskQuestionJump +	tx Text072b +	dw .ows_dba8 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text072c + +.ows_dba8 +	run_command Func_cf0c +	db $ac +	dw .ows_dbaf +	run_command ScriptCommand_PrintTextQuitFully +	tx Text072d + +.ows_dbaf +	run_command Func_cf12 +	db $ac +	dw .ows_dbb6 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text072e + +.ows_dbb6 +	run_command ScriptCommand_MaxOutFlagValue +	db EVENT_FLAG_00 +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_1F +	db $03 +	run_command ScriptCommand_ZeroOutFlagValue +	db EVENT_FLAG_38 +	run_command ScriptCommand_PrintTextString +	tx Text072f +	run_command Func_ccdc +	tx Text0730 +	run_command ScriptCommand_TakeCard +	db CLEFABLE +	run_command ScriptCommand_GiveCard +	db SURFING_PIKACHU1 +	run_command ScriptCommand_ShowCardReceivedScreen +	db SURFING_PIKACHU1 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text0731 + +.ows_dbcc +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_1F +	db $03 +	dw NO_JUMP +	run_command ScriptCommand_PrintVariableText +	tx Text0732 +	tx Text0733 +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_1F +	db $04 +	run_command ScriptCommand_AskQuestionJump +	tx Text072b +	dw .ows_dbe1 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text072c + +.ows_dbe1 +	run_command Func_cf0c +	db $bb +	dw .ows_dbe8 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text0734 + +.ows_dbe8 +	run_command Func_cf12 +	db $bb +	dw .ows_dbef +	run_command ScriptCommand_PrintTextQuitFully +	tx Text0735 + +.ows_dbef +	run_command ScriptCommand_MaxOutFlagValue +	db EVENT_FLAG_00 +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_1F +	db $05 +	run_command ScriptCommand_ZeroOutFlagValue +	db EVENT_FLAG_38 +	run_command ScriptCommand_PrintTextString +	tx Text072f +	run_command Func_ccdc +	tx Text0736 +	run_command ScriptCommand_TakeCard +	db DITTO +	run_command ScriptCommand_GiveCard +	db FLYING_PIKACHU +	run_command ScriptCommand_ShowCardReceivedScreen +	db FLYING_PIKACHU +	run_command ScriptCommand_PrintTextQuitFully +	tx Text0737 + +.ows_dc05 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_1F +	db $05 +	dw NO_JUMP +	run_command ScriptCommand_PrintVariableText +	tx Text0738 +	tx Text0739 +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_1F +	db $06 +	run_command ScriptCommand_AskQuestionJump +	tx Text072b +	dw .ows_dc1a +	run_command ScriptCommand_PrintTextQuitFully +	tx Text072c + +.ows_dc1a +	run_command Func_cf0c +	db $b8 +	dw .ows_dc21 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text073a + +.ows_dc21 +	run_command Func_cf12 +	db $b8 +	dw .ows_dc28 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text073b + +.ows_dc28 +	run_command ScriptCommand_MaxOutFlagValue +	db EVENT_FLAG_00 +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_1F +	db $07 +	run_command ScriptCommand_ZeroOutFlagValue +	db EVENT_FLAG_38 +	run_command ScriptCommand_PrintTextString +	tx Text072f +	run_command Func_ccdc +	tx Text073c +	run_command ScriptCommand_TakeCard +	db CHANSEY +	run_command ScriptCommand_GiveCard +	db SURFING_PIKACHU2 +	run_command ScriptCommand_ShowCardReceivedScreen +	db SURFING_PIKACHU2 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text073d + +.ows_dc3e +	run_command ScriptCommand_MaxOutFlagValue +	db EVENT_FLAG_39 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text073e + +Preload_Ronald1InIshiharasHouse: ; dc43 (3:5c43) +	get_flag_value EVENT_RECEIVED_LEGENDARY_CARD +	cp $01 +	ccf +	ret + +Script_Ronald: ; dc4b (3:5c4b) +	start_script +	run_command ScriptCommand_JumpIfFlagNonzero2 +	db EVENT_FLAG_4E +	dw .ows_dc55 +	run_command ScriptCommand_MaxOutFlagValue +	db EVENT_FLAG_4E +	run_command ScriptCommand_PrintTextQuitFully +	tx Text073f + +.ows_dc55 +	run_command ScriptCommand_PrintTextString +	tx Text0740 +	run_command ScriptCommand_AskQuestionJump +	tx Text0741 +	dw .ows_dc60 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text0742 + +.ows_dc60 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text0743 +; 0xdc63 + +	; could be a commented function, or could be placed by mistake from +	; someone thinking that the Ronald script ended with more code execution +	ret + +Script_Clerk1: ; dc64 (3:5c64) +	start_script +	run_command ScriptCommand_PrintTextQuitFully +	tx Text045a + +FightingClubLobbyAfterDuel: ; dc68 (3:5c68) +	ld hl, .after_duel_table +	call FindEndOfBattleScript +	ret +.after_duel_table +	db NPC_IMAKUNI +	db NPC_IMAKUNI +	dw Script_BeatImakuni +	dw Script_LostToImakuni +	db $00 + +	INCROM $dc76, $dd0d + +Script_Imakuni: ; dd0d (3:5d0d) +	start_script +	run_command ScriptCommand_SetFlagValue +	db EVENT_IMAKUNI_STATE +	db IMAKUNI_TALKED +	run_command ScriptCommand_JumpIfFlagZero2 +	db EVENT_TEMP_TALKED_TO_IMAKUNI +	dw NO_JUMP +	run_command ScriptCommand_PrintVariableText +	tx Text0467 +	tx Text0468 +	run_command ScriptCommand_MaxOutFlagValue +	db EVENT_TEMP_TALKED_TO_IMAKUNI +	run_command ScriptCommand_AskQuestionJump +	tx Text0469 +	dw .declineDuel +	run_command ScriptCommand_PrintTextString +	tx Text046a +	run_command ScriptCommand_QuitScriptFully + +.declineDuel +	run_command ScriptCommand_PrintTextString +	tx Text046b +	run_command ScriptCommand_StartBattle +	db PRIZES_6 +	db IMAKUNI_DECK_ID +	db MUSIC_IMAKUNI +	run_command ScriptCommand_QuitScriptFully +; 0xdd2d + +Script_BeatImakuni: ; dd2d (3:5d2d) +	start_script +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_IMAKUNI_WIN_COUNT  	db $07 -	db $79 -	db $57 -	run_script OWScript_EndScriptLoop1 +	dw .giveBoosters +	run_command ScriptCommand_IncrementFlagValue +	db EVENT_IMAKUNI_WIN_COUNT +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_IMAKUNI_WIN_COUNT +	db $03 +	dw .threeWins +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_IMAKUNI_WIN_COUNT +	db $06 +	dw .sixWins +.giveBoosters +	run_command ScriptCommand_PrintTextString +	tx Text046c +	run_command ScriptCommand_GiveOneOfEachTrainerBooster +	run_command ScriptCommand_Jump +	dw .done + +.threeWins +	run_command ScriptCommand_PrintTextString +	tx Text046d +	run_command ScriptCommand_Jump +	dw .giveImakuniCard + +.sixWins +	run_command ScriptCommand_PrintTextString +	tx Text046e +.giveImakuniCard +	run_command ScriptCommand_PrintTextString +	tx Text046f +	run_command ScriptCommand_GiveCard +	db IMAKUNI_CARD +	run_command ScriptCommand_ShowCardReceivedScreen +	db IMAKUNI_CARD +.done +	run_command ScriptCommand_PrintTextString +	tx Text0470 +	run_command ScriptCommand_Jump +	dw ScriptJump_ImakuniCommon + +Script_LostToImakuni: ; dd5c (3:5d5c) +	start_script +	run_command ScriptCommand_PrintTextString +	tx Text0471 + +ScriptJump_ImakuniCommon: ; dd60 (3:5d60) +	run_command ScriptCommand_CloseTextBox +	run_command ScriptCommand_JumpIfPlayerCoordMatches +	db 18 +	db 4 +	dw .ows_dd69 +	run_command ScriptCommand_Jump +	dw .ows_dd6e + +.ows_dd69 +	run_command ScriptCommand_SetPlayerDirection +	db EAST +	run_command ScriptCommand_MovePlayer +	db WEST +	db $01 + +.ows_dd6e +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_dd78 +	run_command Func_cdcb +	run_command ScriptCommand_MaxOutFlagValue +	db EVENT_TEMP_BATTLED_IMAKUNI +	run_command Func_d408 +	db $09 +	run_command Func_d41d +	run_command ScriptCommand_QuitScriptFully +; 0xdd78 + +NPCMovement_dd78 ; dd78 (3:5d78) +	db SOUTH +	db SOUTH +	db SOUTH +	db SOUTH +	db EAST +	db EAST +	db EAST +	db EAST +	db EAST +	db $ff + +	INCROM $dd82, $e0b0 + +Preload_ImakuniInWaterClubLobby: ; e0b0 (3:60b0) +	get_flag_value EVENT_IMAKUNI_STATE +	cp IMAKUNI_TALKED +	jr c, .asm_e0c6 +	get_flag_value EVENT_TEMP_BATTLED_IMAKUNI +	jr nz, .asm_e0c6 +	get_flag_value EVENT_IMAKUNI_ROOM +	cp IMAKUNI_WATER_CLUB +	jr z, .asm_e0c8 +.asm_e0c6 +	or a  	ret +.asm_e0c8 +	ld a, $10 +	ld [wd111], a +	scf +	ret +; 0xe0cf +Script_Gal1: ; e0cf (3:60cf)  	start_script -	run_script Func_ce4a -	db $80 -	db $58 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_12 +	db $02 +	dw .ows_e10e +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_12 +	db $00 +	dw NO_JUMP +	run_command ScriptCommand_PrintVariableText +	tx Text041d +	tx Text041e +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_12 +	db $01 +	run_command ScriptCommand_AskQuestionJump +	tx Text041f +	dw .ows_e0eb +	run_command ScriptCommand_PrintTextString +	tx Text0420 +	run_command ScriptCommand_QuitScriptFully + +.ows_e0eb +	run_command Func_cf0c +	db $59 +	dw .ows_e0f3 +	run_command ScriptCommand_PrintTextString +	tx Text0421 +	run_command ScriptCommand_QuitScriptFully + +.ows_e0f3 +	run_command Func_cf12 +	db $59 +	dw .ows_e0fb +	run_command ScriptCommand_PrintTextString +	tx Text0422 +	run_command ScriptCommand_QuitScriptFully + +.ows_e0fb +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_12  	db $02 +	run_command ScriptCommand_PrintTextString +	tx Text0423 +	run_command Func_ccdc +	tx Text0424 +	run_command ScriptCommand_TakeCard +	db LAPRAS +	run_command ScriptCommand_GiveCard +	db ARCANINE1 +	run_command ScriptCommand_ShowCardReceivedScreen +	db ARCANINE1 +	run_command ScriptCommand_PrintTextString +	tx Text0425 +	run_command ScriptCommand_QuitScriptFully + +.ows_e10e +	run_command ScriptCommand_PrintTextQuitFully +	tx Text0426 + +Script_Lass1: ; e111 (3:6111) +	start_script +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_14 +	db $01 +	dw .ows_e121 +	run_command ScriptCommand_PrintTextString +	tx Text0427 +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_14 +	db $01 +	run_command ScriptCommand_SetFlagValue +	db EVENT_IMAKUNI_STATE +	db IMAKUNI_MENTIONED +	run_command ScriptCommand_QuitScriptFully + +.ows_e121 +	run_command ScriptCommand_JumpIfFlagNotEqual +	db EVENT_IMAKUNI_ROOM +	db IMAKUNI_WATER_CLUB +	dw .ows_e12d +	run_command ScriptCommand_JumpIfFlagNonzero2 +	db EVENT_TEMP_BATTLED_IMAKUNI +	dw .ows_e12d +	run_command ScriptCommand_PrintTextQuitFully +	tx Text0428 + +.ows_e12d +	run_command ScriptCommand_PrintTextQuitFully +	tx Text0429 + +Preload_Man2InWaterClubLobby: ; e130 (3:6130) +	get_flag_value EVENT_JOSHUA_STATE +	cp JOSHUA_BEATEN +	ret -	; there's more to this script but it hasn't been disassembled yet +Script_Man2: ; e137 (3:6137) +	start_script +	run_command ScriptCommand_PrintTextQuitFully +	tx Text042a -	INCROM $d77e, $e13f +Script_Pappy2: ; e13b (3:613b) +	start_script +	run_command ScriptCommand_PrintTextQuitFully +	tx Text042b  WaterClubMovePlayer: ; e13f (3:613f)  	ld a, [wPlayerYCoord]  	cp $8  	ret nz -	call Func_ca69 -	inc sp +	get_flag_value EVENT_JOSHUA_STATE  	cp $2  	ret nc -	ld a, $21 -	ld [wd3ab], a -	ld bc, OWSequence_NotReadyToSeeAmy -	jp Func_c926 +	ld a, NPC_JOSHUA +	ld [wTempNPC], a +	ld bc, Script_NotReadyToSeeAmy +	jp SetNextNPCAndScript  WaterClubAfterDuel: ;e157 (3:6157)  	ld hl, .after_duel_table @@ -2986,135 +4034,503 @@ WaterClubAfterDuel: ;e157 (3:6157)  	ret  .after_duel_table -	dw $1f1f -	dw OWSequence_BeatSara -	dw OWSequence_LostToSara - -	dw $2020 -	dw OWSequence_BeatAmanda -	dw OWSequence_LostToAmanda - -	dw $2121 -	dw $626c -	dw $6260 - -	dw $2222 -	dw $6322 -	dw $6344 +	db NPC_SARA +	db NPC_SARA +	dw Script_BeatSara +	dw Script_LostToSara + +	db NPC_AMANDA +	db NPC_AMANDA +	dw Script_BeatAmanda +	dw Script_LostToAmanda + +	db NPC_JOSHUA +	db NPC_JOSHUA +	dw Script_BeatJoshua +	dw Script_LostToJoshua + +	db NPC_AMY +	db NPC_AMY +	dw Script_BeatAmy +	dw Script_LostToAmy  	db $00 -OWSequence_Sara: ; e177 (3:6177) +Script_Sara: ; e177 (3:6177)  	start_script -	run_script OWScript_PrintTextString +	run_command ScriptCommand_PrintTextString  	tx Text042c -	run_script OWScript_AskQuestionJump +	run_command ScriptCommand_AskQuestionJump  	tx Text042d  	dw .yes_duel -	run_script OWScript_PrintTextString +	run_command ScriptCommand_PrintTextString  	tx Text042e -	run_script OWScript_EndScriptCloseText +	run_command ScriptCommand_QuitScriptFully  .yes_duel -	run_script OWScript_PrintTextString +	run_command ScriptCommand_PrintTextString  	tx Text042f -	run_script OWScript_StartBattle -	db 2 -	db WATERFRONT_POKEMON_DECK_ID ; 6189 +	run_command ScriptCommand_StartBattle +	db PRIZES_2 +	db WATERFRONT_POKEMON_DECK_ID  	db MUSIC_DUEL_THEME_1 -	run_script OWScript_EndScriptCloseText +	run_command ScriptCommand_QuitScriptFully -OWSequence_BeatSara: ; e18c (3:618c) +Script_BeatSara: ; e18c (3:618c)  	start_script -	run_script OWScript_SetEventFlags +	run_command ScriptCommand_MaxOutFlagValue  	db EVENT_BEAT_SARA -	run_script OWScript_PrintTextString +	run_command ScriptCommand_PrintTextString  	tx Text0430 -	run_script OWScript_GiveBoosterPacks +	run_command ScriptCommand_GiveBoosterPacks  	db BOOSTER_COLOSSEUM_WATER  	db BOOSTER_COLOSSEUM_WATER  	db NO_BOOSTER -	run_script OWScript_PrintTextString +	run_command ScriptCommand_PrintTextString  	tx Text0431 -	run_script OWScript_EndScriptCloseText +	run_command ScriptCommand_QuitScriptFully -OWSequence_LostToSara: ; e19a (03:619a) +Script_LostToSara: ; e19a (03:619a)  	start_script -	run_script OWScript_PrintTextCloseBox +	run_command ScriptCommand_PrintTextQuitFully  	tx Text0432 -OWSequence_Amanda: ; e19e (03:619e) +Script_Amanda: ; e19e (03:619e)  	start_script -	run_script OWScript_PrintTextString +	run_command ScriptCommand_PrintTextString  	tx Text0433 -	run_script OWScript_AskQuestionJump +	run_command ScriptCommand_AskQuestionJump  	tx Text0434  	dw .yes_duel -	run_script OWScript_PrintTextString +	run_command ScriptCommand_PrintTextString  	tx Text0435 -	run_script OWScript_EndScriptCloseText +	run_command ScriptCommand_QuitScriptFully  .yes_duel -	run_script OWScript_PrintTextString +	run_command ScriptCommand_PrintTextString  	tx Text0436 -	run_script OWScript_StartBattle -	db 03 +	run_command ScriptCommand_StartBattle +	db PRIZES_3  	db LONELY_FRIENDS_DECK_ID  	db MUSIC_DUEL_THEME_1 -	run_script OWScript_EndScriptCloseText +	run_command ScriptCommand_QuitScriptFully -OWSequence_BeatAmanda: ; e1b3 (03:61b3) +Script_BeatAmanda: ; e1b3 (03:61b3)  	start_script -	run_script OWScript_SetEventFlags +	run_command ScriptCommand_MaxOutFlagValue  	db EVENT_BEAT_AMANDA -	run_script OWScript_PrintTextString +	run_command ScriptCommand_PrintTextString  	tx Text0437 -	run_script OWScript_GiveBoosterPacks +	run_command ScriptCommand_GiveBoosterPacks  	db BOOSTER_MYSTERY_LIGHTNING_COLORLESS  	db BOOSTER_MYSTERY_LIGHTNING_COLORLESS  	db NO_BOOSTER -	run_script OWScript_PrintTextString +	run_command ScriptCommand_PrintTextString  	tx Text0438 -	run_script OWScript_EndScriptCloseText +	run_command ScriptCommand_QuitScriptFully -OWSequence_LostToAmanda: ; e1c1 (03:61c1) +Script_LostToAmanda: ; e1c1 (03:61c1)  	start_script -	run_script OWScript_PrintTextCloseBox +	run_command ScriptCommand_PrintTextQuitFully  	tx Text0439 -OWSequence_NotReadyToSeeAmy: -	INCROM $e1c5, $e21c - -OWSequence_Joshua: +Script_NotReadyToSeeAmy: ; e1c5 (03:61c5)  	start_script -	run_script OWScript_JumpIfFlagNotSet +	run_command ScriptCommand_JumpIfPlayerCoordMatches +	db $12 +	db $08 +	dw .ows_e1ec +	run_command ScriptCommand_JumpIfPlayerCoordMatches +	db $14 +	db $08 +	dw .ows_e1f2 +	run_command ScriptCommand_JumpIfPlayerCoordMatches +	db $18 +	db $08 +	dw .ows_e1f8 +.ows_e1d5 +	run_command ScriptCommand_MovePlayer +	db SOUTH +	db $04 +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_e213 +	run_command ScriptCommand_PrintTextString +	tx Text043a +	run_command ScriptCommand_JumpIfPlayerCoordMatches +	db $12 +	db $0a +	dw .ows_e1fe +	run_command ScriptCommand_JumpIfPlayerCoordMatches +	db $14 +	db $0a +	dw .ows_e202 +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_e215 +	run_command ScriptCommand_QuitScriptFully + +.ows_e1ec +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_e206 +	run_command ScriptCommand_Jump +	dw .ows_e1d5 +.ows_e1f2 +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_e20b +	run_command ScriptCommand_Jump +	dw .ows_e1d5 +.ows_e1f8 +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_e20f +	run_command ScriptCommand_Jump +	dw .ows_e1d5 +.ows_e1fe +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_e218 +	run_command ScriptCommand_QuitScriptFully + +.ows_e202 +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_e219 +	run_command ScriptCommand_QuitScriptFully + +NPCMovement_e206: ; e206 (3:6206) +	db NORTH +	db WEST +	db WEST +	db SOUTH | NO_MOVE +	db $ff + +NPCMovement_e20b: ; e20b (3:620b) +	db NORTH +	db WEST +	db SOUTH | NO_MOVE +	db $ff + +NPCMovement_e20f: ; e20f (3:620f) +	db NORTH +	db EAST +	db SOUTH | NO_MOVE +	db $ff + +NPCMovement_e213: ; e213 (3:6213) +	db SOUTH +	db $ff + +NPCMovement_e215: ; e215 (3:6215) +	db WEST +	db SOUTH | NO_MOVE +	db $ff + +NPCMovement_e218: ; e218 (3:6218) +	db EAST +;	fallthrough + +NPCMovement_e219: ; e219 (3:6219) +	db EAST +	db SOUTH | NO_MOVE +	db $ff + +Script_Joshua: ; e21c (3:621c) +	start_script +	run_command ScriptCommand_JumpIfFlagZero2  	db EVENT_BEAT_AMANDA  	dw .sara_and_amanda_not_beaten -	run_script OWScript_JumpIfFlagNotSet +	run_command ScriptCommand_JumpIfFlagZero2  	db EVENT_BEAT_SARA  	dw .sara_and_amanda_not_beaten -	run_script OWScript_ScriptJump +	run_command ScriptCommand_Jump  	dw .beat_sara_and_amanda  .sara_and_amanda_not_beaten -	run_script OWScript_CustomModifyEventFlags -	db $33 ; offset on flagmod table -	db $01 ; the control bit -	run_script OWScript_PrintTextString +	run_command ScriptCommand_SetFlagValue +	db EVENT_JOSHUA_STATE +	db JOSHUA_TALKED +	run_command ScriptCommand_PrintTextString  	tx Text043b -	run_script OWScript_EndScriptCloseText +	run_command ScriptCommand_QuitScriptFully +  .beat_sara_and_amanda -	run_script OWScript_JumpIfFlagSet -	db $33 -	dw $623c -	run_script OWScript_CustomModifyEventFlags -	db $33 -	db $01 -	run_script OWScript_PrintTextString +	run_command ScriptCommand_JumpIfFlagNonzero1 +	db EVENT_JOSHUA_STATE +	dw .already_talked +	run_command ScriptCommand_SetFlagValue +	db EVENT_JOSHUA_STATE +	db JOSHUA_TALKED +	run_command ScriptCommand_PrintTextString  	tx Text043b -	run_script OWScript_PrintTextString +	run_command ScriptCommand_PrintTextString  	tx Text043c -	run_script Func_d484 -	db $33 -	db $01 +.already_talked +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_JOSHUA_STATE +	db JOSHUA_TALKED +	dw NO_JUMP +	run_command ScriptCommand_PrintVariableText +	tx Text043d +	tx Text043e +	run_command ScriptCommand_AskQuestionJump +	tx Text043f +	dw .startDuel +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_JOSHUA_STATE +	db JOSHUA_TALKED +	dw NO_JUMP +	run_command ScriptCommand_PrintVariableText +	tx Text0440 +	tx Text0441 +	run_command ScriptCommand_QuitScriptFully + +.startDuel: +	run_command ScriptCommand_PrintTextString +	tx Text0442 +	run_command ScriptCommand_TryGivePCPack +	db $04 +	run_command ScriptCommand_StartBattle +	db PRIZES_4 +	db SOUND_OF_THE_WAVES_DECK_ID +	db MUSIC_DUEL_THEME_1 +	run_command ScriptCommand_QuitScriptFully + +Script_LostToJoshua: ; e260 (3:6260) +	start_script +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_JOSHUA_STATE +	db JOSHUA_TALKED +	dw NO_JUMP +	run_command ScriptCommand_PrintVariableText +	tx Text0443 +	tx Text0444 +	run_command ScriptCommand_QuitScriptFully + +Script_BeatJoshua: ; e26c (3:626c) +	start_script +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_JOSHUA_STATE +	db JOSHUA_TALKED +	dw NO_JUMP +	run_command ScriptCommand_PrintVariableText +	tx Text0445 +	tx Text0446 +	run_command ScriptCommand_GiveBoosterPacks +	db BOOSTER_MYSTERY_WATER_COLORLESS +	db BOOSTER_MYSTERY_WATER_COLORLESS +	db NO_BOOSTER +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_JOSHUA_STATE +	db JOSHUA_TALKED +	dw NO_JUMP +	run_command ScriptCommand_PrintVariableText +	tx Text0447 +	tx Text0448 +	run_command ScriptCommand_JumpIfFlagNotEqual +	db EVENT_JOSHUA_STATE +	db JOSHUA_BEATEN +	dw .firstJoshuaWin +	run_command ScriptCommand_QuitScriptFully + +.firstJoshuaWin: +	run_command ScriptCommand_SetFlagValue +	db EVENT_JOSHUA_STATE +	db JOSHUA_BEATEN +	run_command ScriptCommand_PrintTextString +	tx Text0449 +	run_command ScriptCommand_CloseTextBox +	run_command ScriptCommand_MoveActiveNPCByDirection +	dw NPCMovementTable_e2a1 +	run_command ScriptCommand_PrintTextString +	tx Text044a +	run_command Func_cfc6 +	db $00 +	run_command ScriptCommand_CloseAdvancedTextBox +	run_command ScriptCommand_SetNextNPCandScript +	db NPC_AMY +	dw Script_MeetAmy +	run_command ScriptCommand_EndScriptLoop1 +	ret + +NPCMovementTable_e2a1: ; e2a1 (3:62a1) +	dw NPCMovement_e2a9 +	dw NPCMovement_e2a9 +	dw NPCMovement_e2a9 +	dw NPCMovement_e2a9 -	INCROM $e23f, $e52c +NPCMovement_e2a9: ; e2a9 (3:62a9) +	db NORTH +	db $ff + +NPCMovement_e2ab: ; e2ab (3:62ab) +	db SOUTH +	db $ff + +Preload_Amy: ; e2ad (3:62ad) +	xor a +	ld [wd3d0], a +	ld a, [wd0c2] +	or a +	jr z, .asm_e2cf +	ld a, [wPlayerXCoord] +	cp $14 +	jr nz, .asm_e2cf +	ld a, [wPlayerYCoord] +	cp $06 +	jr nz, .asm_e2cf +	ld a, $14 +	ld [wLoadNPCXPos], a +	ld a, $01 +	ld [wd3d0], a +.asm_e2cf +	scf +	ret + +Script_MeetAmy: ; e2d1 (3:62d1) +	start_script +	run_command ScriptCommand_PrintTextString +	tx Text044b +	run_command ScriptCommand_SetDialogName +	db NPC_JOSHUA +	run_command ScriptCommand_PrintTextString +	tx Text044c +	run_command ScriptCommand_SetDialogName +	db NPC_AMY +	run_command ScriptCommand_PrintTextString +	tx Text044d +	run_command ScriptCommand_CloseTextBox +	run_command Func_d095 +	db $09 +	db $2f +	db $10 +	run_command ScriptCommand_DoFrames +	db $20 +	run_command Func_d095 +	db $04 +	db $0e +	db $00 +	run_command Func_d0be +	db $14 +	db $04 +	run_command ScriptCommand_SetPlayerDirection +	db $03 +	run_command ScriptCommand_MovePlayer +	db WEST +	db $01 +	run_command ScriptCommand_SetPlayerDirection +	db $00 +	run_command ScriptCommand_MovePlayer +	db NORTH +	db $01 +	run_command ScriptCommand_MovePlayer +	db NORTH +	db $01 +	run_command ScriptCommand_MoveArbitraryNPC +	db NPC_JOSHUA +	dw NPCMovement_e2ab +	run_command ScriptCommand_PrintTextString +	tx Text044e +	run_command ScriptCommand_Jump +	dw Script_Amy.askConfirmDuel + +Script_Amy: ; e304 (3:6304) +	start_script +	run_command ScriptCommand_JumpIfFlagNonzero2 +	db EVENT_BEAT_AMY +	dw ScriptJump_TalkToAmyAgain +	run_command ScriptCommand_PrintTextString +	tx Text044f +.askConfirmDuel +	run_command ScriptCommand_AskQuestionJump +	tx Text0450 +	dw .startDuel + +.denyDuel +	run_command ScriptCommand_PrintTextString +	tx Text0451 +	run_command Func_d0d9 +	db $14 +	db $04 +	dw Script_LostToAmy.ows_e34e +	run_command ScriptCommand_QuitScriptFully + +.startDuel +	run_command ScriptCommand_PrintTextString +	tx Text0452 +	run_command ScriptCommand_StartBattle +	db PRIZES_6 +	db GO_GO_RAIN_DANCE_DECK_ID +	db MUSIC_DUEL_THEME_2 +	run_command ScriptCommand_QuitScriptFully + +Script_BeatAmy: ; e322 (3:6322) +	start_script +	run_command ScriptCommand_PrintTextString +	tx Text0453 +	run_command ScriptCommand_JumpIfFlagNonzero2 +	db EVENT_BEAT_AMY +	dw .beatAmyCommon +	run_command ScriptCommand_PrintTextString +	tx Text0454 +	run_command ScriptCommand_MaxOutFlagValue +	db EVENT_BEAT_AMY +	run_command ScriptCommand_TryGiveMedalPCPacks +	run_command Func_d125 +	db EVENT_BEAT_AMY +	run_command Func_d435 +	db $03 +	run_command ScriptCommand_PrintTextString +	tx Text0455 +.beatAmyCommon +	run_command ScriptCommand_GiveBoosterPacks +	db BOOSTER_LABORATORY_WATER +	db BOOSTER_LABORATORY_WATER +	db NO_BOOSTER +	run_command ScriptCommand_PrintTextString +	tx Text0456 +	run_command Func_d0d9 +	db $14 +	db $04 +	dw Script_LostToAmy.ows_e34e +	run_command ScriptCommand_QuitScriptFully + +Script_LostToAmy: ; e344 (3:6344) +	start_script +	run_command ScriptCommand_PrintTextString +	tx Text0457 +	run_command Func_d0d9 +	db $14 +	db $04 +	dw .ows_e34e +	run_command ScriptCommand_QuitScriptFully + +.ows_e34e +	run_command Func_d095 +	db $08 +	db $2e +	db $10 +	run_command Func_d0be +	db $16 +	db $04 +	run_command ScriptCommand_QuitScriptFully + +ScriptJump_TalkToAmyAgain: ; e356 (3:6356) +	run_command ScriptCommand_PrintTextString +	tx Text0458 +	run_command ScriptCommand_AskQuestionJump +	tx Text0450 +	dw .startDuel +	run_command ScriptCommand_Jump +	dw Script_Amy.denyDuel + +.startDuel +	run_command ScriptCommand_PrintTextString +	tx Text0459 +	run_command ScriptCommand_StartBattle +	db PRIZES_6 +	db GO_GO_RAIN_DANCE_DECK_ID +	db MUSIC_DUEL_THEME_2 +	run_command ScriptCommand_QuitScriptFully +; 0xe369 + +	INCROM $e369, $e525 + +GrassClubEntranceAfterDuel: ; e525 (3:6525) +	ld hl, GrassClubEntranceAfterDuelTable +	call FindEndOfBattleScript +	ret  FindEndOfBattleScript: ; e52c (3:652c)  	ld c, $0 @@ -3138,24 +4554,1693 @@ FindEndOfBattleScript: ; e52c (3:652c)  .found_enemy  	ld a, [hli] -	ld [wd3ab], a +	ld [wTempNPC], a  	ld b, $0  	add hl, bc  	ld c, [hl]  	inc hl  	ld b, [hl] -	jp Func_c926 +	jp SetNextNPCAndScript  ; 0xe553 -	INCROM $e553, $f580 +GrassClubEntranceAfterDuelTable: ; e553 (3:6553) +	db NPC_MICHAEL +	db NPC_MICHAEL +	dw $6597 +	dw $65ab + +	db NPC_RONALD2 +	db NPC_RONALD2 +	dw Script_BeatFirstRonaldFight +	dw Script_LostToFirstRonaldFight + +	db NPC_RONALD3 +	db NPC_RONALD3 +	dw Script_BeatSecondRonaldFight +	dw Script_LostToSecondRonaldFight +	db $00 + +	INCROM $e566, $e5c4 + +GrassClubLobbyAfterDuel: ; e5c4 (3:65c4) +	ld hl, .after_duel_table +	call FindEndOfBattleScript +	ret + +.after_duel_table +	db NPC_BRITTANY +	db NPC_BRITTANY +	dw Script_BeatBrittany +	dw Script_LostToBrittany +	db $00 + +Script_Brittany: ; e5d2 (3:65d2) +	start_script +	run_command ScriptCommand_JumpIfFlagLessThan +	db EVENT_FLAG_35 +	db $01 +	dw NO_JUMP +	run_command ScriptCommand_PrintVariableText +	tx Text06e0 +	tx Text06e1 +	run_command ScriptCommand_AskQuestionJump +	tx Text06e2 +	dw .wantToDuel +	run_command ScriptCommand_PrintTextString +	tx Text06e3 +	run_command ScriptCommand_QuitScriptFully + +.wantToDuel +	run_command ScriptCommand_PrintTextString +	tx Text06e4 +	run_command ScriptCommand_StartBattle +	db PRIZES_4 +	db ETCETERA_DECK_ID +	db MUSIC_DUEL_THEME_1 +	run_command ScriptCommand_QuitScriptFully + +Script_BeatBrittany: ; e5ee (3:65ee) +	start_script +	run_command ScriptCommand_PrintTextString +	tx Text06e5 +	run_command ScriptCommand_GiveBoosterPacks +	db BOOSTER_MYSTERY_GRASS_COLORLESS +	db BOOSTER_MYSTERY_GRASS_COLORLESS +	db NO_BOOSTER +	run_command ScriptCommand_JumpIfFlagLessThan +	db EVENT_FLAG_35 +	db $02 +	dw NO_JUMP +	run_command ScriptCommand_PrintVariableText +	tx Text06e6 +	tx Text06e7 +	run_command ScriptCommand_MaxOutFlagValue +	db FLAG_BEAT_BRITTANY +	run_command ScriptCommand_JumpIfFlagNotLessThan +	db EVENT_FLAG_35 +	db $02 +	dw .finishSequence +	run_command ScriptCommand_JumpIfFlagZero2 +	db EVENT_FLAG_3A +	dw .finishSequence +	run_command ScriptCommand_JumpIfFlagZero2 +	db EVENT_FLAG_3B +	dw .finishSequence +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_35 +	db $01 +	run_command ScriptCommand_MaxOutFlagValue +	db EVENT_FLAG_1E +	run_command ScriptCommand_PrintTextString +	tx Text06e8 +.finishSequence +	run_command ScriptCommand_QuitScriptFully + +Script_LostToBrittany: ; e618 (3:6618) +	start_script +	run_command ScriptCommand_PrintTextQuitFully +	tx Text06e9 +; 0xe61c + +Script_e61c: ; e61c (3:661c) +	run_command ScriptCommand_PrintTextQuitFully +	tx Text06ea + +Script_e61f: ; e61f (3:661f) +	start_script +	run_command ScriptCommand_JumpIfFlagNonzero2 +	db EVENT_FLAG_04 +	dw Script_e61c +	run_command ScriptCommand_JumpIfFlagNotLessThan +	db EVENT_FLAG_37 +	db $06 +	dw Script_e61c +	run_command ScriptCommand_JumpIfFlagNotLessThan +	db EVENT_FLAG_37 +	db $04 +	dw .ows_e6a1 +	run_command ScriptCommand_JumpIfFlagNotLessThan +	db EVENT_FLAG_37 +	db $02 +	dw .ows_e66a +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_37 +	db $00 +	dw NO_JUMP +	run_command ScriptCommand_PrintVariableText +	tx Text06eb +	tx Text06ec +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_37 +	db $01 +	run_command ScriptCommand_AskQuestionJump +	tx Text06ed +	dw .ows_e648 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text06ee + +.ows_e648 +	run_command Func_cf0c +	db $1c +	dw .ows_e64f +	run_command ScriptCommand_PrintTextQuitFully +	tx Text06ef + +.ows_e64f +	run_command Func_cf12 +	db $1c +	dw .ows_e656 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text06f0 + +.ows_e656 +	run_command ScriptCommand_MaxOutFlagValue +	db EVENT_FLAG_04 +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_37 +	db $02 +	run_command ScriptCommand_PrintTextString +	tx Text06f1 +	run_command Func_ccdc +	tx Text06f2 +	run_command ScriptCommand_TakeCard +	db ODDISH +	run_command ScriptCommand_GiveCard +	db VILEPLUME +	run_command ScriptCommand_ShowCardReceivedScreen +	db VILEPLUME +	run_command ScriptCommand_PrintTextQuitFully +	tx Text06f3 + +.ows_e66a +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_37 +	db $02 +	dw NO_JUMP +	run_command ScriptCommand_PrintVariableText +	tx Text06f4 +	tx Text06f5 +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_37 +	db $03 +	run_command ScriptCommand_AskQuestionJump +	tx Text06ed +	dw .ows_e67f +	run_command ScriptCommand_PrintTextQuitFully +	tx Text06f6 + +.ows_e67f +	run_command Func_cf0c +	db $ab +	dw .ows_e686 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text06f7 + +.ows_e686 +	run_command Func_cf12 +	db $ab +	dw .ows_e68d +	run_command ScriptCommand_PrintTextQuitFully +	tx Text06f8 + +.ows_e68d +	run_command ScriptCommand_MaxOutFlagValue +	db EVENT_FLAG_04 +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_37 +	db $04 +	run_command ScriptCommand_PrintTextString +	tx Text06f9 +	run_command Func_ccdc +	tx Text06fa +	run_command ScriptCommand_TakeCard +	db CLEFAIRY +	run_command ScriptCommand_GiveCard +	db PIKACHU3 +	run_command ScriptCommand_ShowCardReceivedScreen +	db PIKACHU3 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text06f3 + +.ows_e6a1 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_37 +	db $04 +	dw NO_JUMP +	run_command ScriptCommand_PrintVariableText +	tx Text06fb +	tx Text06fc +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_37 +	db $05 +	run_command ScriptCommand_AskQuestionJump +	tx Text06ed +	dw .ows_e6b6 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text06fd + +.ows_e6b6 +	run_command Func_cf0c +	db $32 +	dw .ows_e6bd +	run_command ScriptCommand_PrintTextQuitFully +	tx Text06fe + +.ows_e6bd +	run_command Func_cf12 +	db $32 +	dw .ows_e6c4 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text06ff + +.ows_e6c4 +	run_command ScriptCommand_MaxOutFlagValue +	db EVENT_FLAG_04 +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_37 +	db $06 +	run_command ScriptCommand_PrintTextString +	tx Text0700 +	run_command Func_ccdc +	tx Text0701 +	run_command ScriptCommand_TakeCard +	db CHARIZARD +	run_command ScriptCommand_GiveCard +	db BLASTOISE +	run_command ScriptCommand_ShowCardReceivedScreen +	db BLASTOISE +	run_command ScriptCommand_PrintTextQuitFully +	tx Text06f3 +; 0xe6d8 + +	INCROM $e6d8, $e7f6 + +ClubEntranceAfterDuel: ; e7f6 (3:67f6) +	ld hl, .after_duel_table +	jp FindEndOfBattleScript + +.after_duel_table +	db NPC_RONALD2 +	db NPC_RONALD2 +	dw Script_BeatFirstRonaldFight +	dw Script_LostToFirstRonaldFight + +	db NPC_RONALD3 +	db NPC_RONALD3 +	dw Script_BeatSecondRonaldFight +	dw Script_LostToSecondRonaldFight +	db $00 + +; A Ronald is already loaded or not loaded depending on Pre-Load scripts +; in data/npc_map_data.asm. This just starts a sequence if possible. +LoadClubEntrance: ; e809 (3:6809) +	call TryFirstRonaldFight +	call TrySecondRonaldFight +	call TryFirstRonaldEncounter +	ret + +TryFirstRonaldEncounter: ; e813 (3:6813) +	ld a, NPC_RONALD1 +	ld [wTempNPC], a +	call FindLoadedNPC +	ret c +	ld bc, Script_FirstRonaldEncounter +	jp SetNextNPCAndScript + +TryFirstRonaldFight: ; e822 (3:6822) +	ld a, NPC_RONALD2 +	ld [$d3ab], a +	call FindLoadedNPC +	ret c +	get_flag_value EVENT_FLAG_4C +	or a +	ret nz +	ld bc, Script_FirstRonaldFight +	jp SetNextNPCAndScript + +TrySecondRonaldFight: ; e837 (3:6837) +	ld a, NPC_RONALD3 +	ld [$d3ab], a +	call FindLoadedNPC +	ret c +	get_flag_value EVENT_FLAG_4D +	or a +	ret nz +	ld bc, ScriptSecondRonaldFight +	jp SetNextNPCAndScript +; 0xe84c + +	INCROM $e84c, $e862 + +Script_FirstRonaldEncounter: ; e862 (3:6862) +	start_script +	run_command ScriptCommand_MaxOutFlagValue +	db EVENT_FLAG_4B +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_e894 +	run_command Func_d135 +	db $00 +	run_command ScriptCommand_PrintTextString +	tx Text0645 +	run_command ScriptCommand_CloseTextBox +	run_command ScriptCommand_MovePlayer +	db NORTH +	db $01 +	run_command ScriptCommand_MovePlayer +	db NORTH +	db $01 +	run_command ScriptCommand_PrintTextString +	tx Text0646 +	run_command ScriptCommand_AskQuestionJumpDefaultYes +	dw 0000 +	dw .ows_e882 +	run_command ScriptCommand_PrintTextString +	tx Text0647 +	run_command ScriptCommand_Jump +	dw .ows_e885 + +.ows_e882 +	run_command ScriptCommand_PrintTextString +	tx Text0648 +.ows_e885 +	run_command ScriptCommand_PrintTextString +	tx Text0649 +	run_command ScriptCommand_CloseTextBox +	run_command ScriptCommand_SetPlayerDirection +	db $03 +	run_command ScriptCommand_MovePlayer +	db EAST +	db $04 +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_e894 +	run_command Func_cdcb +	run_command Func_d41d +	run_command ScriptCommand_QuitScriptFully + +NPCMovement_e894: ; e894 (3:6894) +	db SOUTH +	db SOUTH +	db SOUTH +	db SOUTH +	db SOUTH +	db $ff +; e89a + +	INCROM $e89a, $e8c0 + +Script_FirstRonaldFight: ; e8c0 (3:68c0) +	start_script +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_e905 +	run_command ScriptCommand_DoFrames +	db $3c +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_e90d +	run_command ScriptCommand_PrintTextString +	tx Text064a +	run_command ScriptCommand_JumpIfPlayerCoordMatches +	db $08 +	db $02 +	dw $68d6 +	run_command ScriptCommand_SetPlayerDirection +	db WEST +	run_command ScriptCommand_MovePlayer +	db WEST +	db $01 +	run_command ScriptCommand_SetPlayerDirection +	db SOUTH +	run_command ScriptCommand_MovePlayer +	db SOUTH +	db $01 +	run_command ScriptCommand_MovePlayer +	db SOUTH +	db $01 +	run_command ScriptCommand_PrintTextString +	tx Text064b +	run_command ScriptCommand_SetFlagValue +	db $4c +	db $01 +	run_command ScriptCommand_StartBattle +	db PRIZES_6 +	db IM_RONALD_DECK_ID +	db MUSIC_RONALD +	run_command ScriptCommand_QuitScriptFully + +Script_BeatFirstRonaldFight: ; e8e9 (3:68e9) +	start_script +	run_command ScriptCommand_PrintTextString +	tx Text064c +	run_command ScriptCommand_GiveCard +	db JIGGLYPUFF1 +	run_command ScriptCommand_ShowCardReceivedScreen +	db JIGGLYPUFF1 +	run_command ScriptCommand_PrintTextString +	tx Text064d +	run_command ScriptCommand_Jump +	dw ScriptJump_FinishedFirstRonaldFight + +Script_LostToFirstRonaldFight: ; e8f7 (3:68f7) +	start_script +	run_command ScriptCommand_PrintTextString +	tx Text064e + +ScriptJump_FinishedFirstRonaldFight +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_4C +	db $02 +	run_command ScriptCommand_CloseTextBox +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_e90f +	run_command Func_cdcb +	run_command Func_d41d +	run_command ScriptCommand_QuitScriptFully + +NPCMovement_e905: ; e905 (3:6905) +	db EAST +	db EAST +	db EAST +	db EAST +	db EAST +	db SOUTH +	db NORTH | NO_MOVE +	db $ff + +NPCMovement_e90d: ; e90d (3:690d) +	db NORTH +	db $ff + +NPCMovement_e90f: ; e90f (3:690f) +	db SOUTH +	db SOUTH +	db SOUTH +	db SOUTH +	db SOUTH +	db $ff +; e915 + +	INCROM $e915, $e91e + +ScriptSecondRonaldFight: ; e91e (3:691e) +	start_script +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_e905 +	run_command ScriptCommand_DoFrames +	db 60 +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_e90d +	run_command ScriptCommand_PrintTextString +	tx Text064f +	run_command ScriptCommand_JumpIfPlayerCoordMatches +	db $08 +	db $02 +	dw .ows_6934 +	run_command ScriptCommand_SetPlayerDirection +	db WEST +	run_command ScriptCommand_MovePlayer +	db WEST +	db $01 +.ows_6934 +	run_command ScriptCommand_SetPlayerDirection +	db SOUTH +	run_command ScriptCommand_MovePlayer +	db SOUTH +	db $01 +	run_command ScriptCommand_MovePlayer +	db SOUTH +	db $01 +	run_command ScriptCommand_PrintTextString +	tx Text0650 +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_4D +	db $01 +	run_command ScriptCommand_StartBattle +	db PRIZES_6 +	db POWERFUL_RONALD_DECK_ID +	db MUSIC_RONALD +	run_command ScriptCommand_QuitScriptFully + +Script_BeatSecondRonaldFight: ; e947 (3:6947) +	start_script +	run_command ScriptCommand_PrintTextString +	tx Text0651 +	run_command ScriptCommand_GiveCard +	db SUPER_ENERGY_RETRIEVAL +	run_command ScriptCommand_ShowCardReceivedScreen +	db SUPER_ENERGY_RETRIEVAL +	run_command ScriptCommand_PrintTextString +	tx Text0652 +	run_command ScriptCommand_Jump +	dw ScriptJump_FinishedSecondRonaldFight + +Script_LostToSecondRonaldFight: ; e955 (3:6955) +	start_script +	run_command ScriptCommand_PrintTextString +	tx Text0653 + +ScriptJump_FinishedSecondRonaldFight ; e959 (3:6959) +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_4D +	db $02 +	run_command ScriptCommand_CloseTextBox +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_e90f +	run_command Func_cdcb +	run_command Func_d41d +	run_command ScriptCommand_QuitScriptFully +; 0xe963 + +	INCROM $e963, $ed57 + +FireClubPressedA: ; ed57 (3:6d57) +	ld hl, SlowpokePaintingObjectTable +	call FindExtraInteractableObjects +	ret + +SlowpokePaintingObjectTable: ; ed5e (3:6d5e) +	db 16, 2, NORTH +	dw Script_ee76 +	db $00 + +; Given a table with data of the form: +;	X, Y, Dir, Script +; Searches to try to find a match, and starts a Script if possible +FindExtraInteractableObjects: ; ed64 (3:6d64) +	ld de, $5 +.findObjectMatchLoop +	ld a, [hl] +	or a +	ret z +	push hl +	ld a, [wPlayerXCoord] +	cp [hl] +	jr nz, .didNotMatch +	inc hl +	ld a, [wPlayerYCoord] +	cp [hl] +	jr nz, .didNotMatch +	inc hl +	ld a, [wPlayerDirection] +	cp [hl] +	jr z, .foundObject +.didNotMatch +	pop hl +	add hl, de +	jr .findObjectMatchLoop +.foundObject +	inc hl +	ld c, [hl] +	inc hl +	ld b, [hl] +	pop hl +	call SetNextScript +	scf +	ret +; 0xed8d + +	INCROM $ed8d, $ee76 + +Script_ee76: ; ee76 (3:6e76) +	start_script +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_21 +	db $01 +	dw .ows_ee7d +	run_command ScriptCommand_QuitScriptFully + +.ows_ee7d +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_21 +	db $02 +	run_command Func_ccdc +	tx Text06a2 +	run_command ScriptCommand_GiveCard +	db SLOWPOKE1 +	run_command ScriptCommand_ShowCardReceivedScreen +	db SLOWPOKE1 +	run_command ScriptCommand_QuitScriptFully +; 0xee88 + +	INCROM $ee88, $ef96 + +Preload_Clerk9: ; ef96 (3:6f96) +	call TryGiveMedalPCPacks +	get_flag_value EVENT_MEDAL_COUNT +	ld hl, .jumpTable +	cp $09 +	jp c, JumpToFunctionInTable +	debug_ret +	jr .asm_efe4 + +.jumpTable +	dw .asm_efe4 +	dw .asm_efe4 +	dw .asm_efe4 +	dw .asm_efba +	dw .asm_efde +	dw .asm_efc9 +	dw .asm_efd8 +	dw .asm_efd8 +	dw .asm_efd8 + +.asm_efba +	get_flag_value EVENT_FLAG_3F +	or a +	jr nz, .asm_efe4 +	ld c, $01 +	set_flag_value EVENT_FLAG_3F +	jr .asm_efe4 + +.asm_efc9 +	get_flag_value EVENT_FLAG_40 +	or a +	jr nz, .asm_efde +	ld c, $01 +	set_flag_value EVENT_FLAG_40 +	jr .asm_efde + +.asm_efd8 +	ld c, $07 +	set_flag_value EVENT_FLAG_40 +.asm_efde +	ld c, $07 +	set_flag_value EVENT_FLAG_3F +.asm_efe4 +	zero_flag_value EVENT_FLAG_42 +	get_flag_value EVENT_FLAG_3F +	cp $00 +	jr z, .asm_eff8 +	cp $07 +	jr z, .asm_eff8 +	ld c, $01 +	jr .asm_f016 + +.asm_eff8 +	get_flag_value EVENT_FLAG_40 +	cp $00 +	jr z, .asm_f008 +	cp $07 +	jr z, .asm_f008 +	ld c, $02 +	jr .asm_f016 + +.asm_f008 +	get_flag_value EVENT_FLAG_41 +	cp $00 +	jr z, .asm_f023 +	cp $07 +	jr z, .asm_f023 +	ld c, $03 +.asm_f016 +	set_flag_value EVENT_FLAG_44 +	max_flag_value EVENT_FLAG_42 +	ld a, $0b +	ld [wd111], a +.asm_f023 +	scf +	ret + +Script_Clerk9: ; f025 (3:7025) +	start_script +	run_command ScriptCommand_JumpIfFlagZero1 +	db EVENT_FLAG_3F +	dw .ows_f066 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_41 +	db $07 +	dw .ows_f069 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_41 +	db $03 +	dw .ows_f06f +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_41 +	db $02 +	dw .ows_f072 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_41 +	db $01 +	dw .ows_f06c +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_40 +	db $07 +	dw .ows_f069 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_40 +	db $03 +	dw .ows_f06f +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_40 +	db $02 +	dw .ows_f072 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_40 +	db $01 +	dw .ows_f06c +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_3F +	db $07 +	dw .ows_f069 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_3F +	db $03 +	dw .ows_f06f +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_3F +	db $02 +	dw .ows_f072 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_3F +	db $01 +	dw .ows_f06c +.ows_f066 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text050a + +.ows_f069 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text050b + +.ows_f06c +	run_command ScriptCommand_PrintTextQuitFully +	tx Text050c + +.ows_f06f +	run_command ScriptCommand_PrintTextQuitFully +	tx Text050d + +.ows_f072 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text050e + +Preload_ChallengeHallNPCs2: ; f075 (3:7075) +	call Preload_ChallengeHallNPCs1 +	ccf +	ret + +Preload_ChallengeHallNPCs1: ; f07a (3:707a) +	get_flag_value EVENT_FLAG_42 +	or a +	jr z, .quit +	ld a, $0b +	ld [wd111], a +	scf +.quit +	ret + +ChallengeHallLobbyLoadMap: ; f088 (3:7088) +	get_flag_value EVENT_FLAG_58 +	or a +	ret z +	ld a, $02 +	ld [wTempNPC], a +	call FindLoadedNPC +	ld bc, $7166 +	jp SetNextNPCAndScript + +Script_Pappy3: ; f09c (3:709c) +	start_script +	run_command ScriptCommand_PrintTextQuitFully +	tx Text050f + +Script_Gal4: ; f0a0 (3:70a0) +	start_script +	run_command ScriptCommand_PrintTextQuitFully +	tx Text0510 + +Script_Champ: ; f0a4 (3:70a4) +	start_script +	run_command ScriptCommand_PrintTextQuitFully +	tx Text0511 + +Script_Hood2: ; f0a8 (3:70a8) +	start_script +	run_command ScriptCommand_PrintTextQuitFully +	tx Text0512 + +Script_Lass5: ; f0ac (3:70ac) +	start_script +	run_command ScriptCommand_PrintTextQuitFully +	tx Text0513 + +Script_Chap5: ; f0b0 (3:70b0) +	start_script +	run_command ScriptCommand_PrintTextQuitFully +	tx Text0514 + +Preload_ChallengeHallLobbyRonald1: ; f0b4 (3:70b4) +	zero_flag_value2 EVENT_FLAG_58 +	get_flag_value EVENT_RECEIVED_LEGENDARY_CARD +	or a +	jr nz, .asm_f0ff +	get_flag_value EVENT_FLAG_59 +	or a +	jr nz, .asm_f11f +	get_flag_value EVENT_FLAG_40 +	cp $00 +	jr z, .asm_f0e5 +	call .asm_710f +	get_flag_value EVENT_FLAG_40 +	ld e, a +	get_flag_value EVENT_FLAG_49 +	ld d, a +	ld hl, Unknown_f156 +	call Func_f121 +	jr nc, .asm_f11f +	jr .asm_f0f7 +.asm_f0e5 +	get_flag_value EVENT_FLAG_3F +	ld e, a +	get_flag_value EVENT_FLAG_48 +	ld d, a +	ld hl, Unknown_f146 +	call Func_f121 +	jr nc, .asm_f11f +.asm_f0f7 +	ld a, [wPlayerYCoord] +	ld [wLoadNPCYPos], a +	scf +	ret +.asm_f0ff +	max_flag_value EVENT_FLAG_54 +	max_flag_value EVENT_FLAG_55 +	max_flag_value EVENT_FLAG_56 +	max_flag_value EVENT_FLAG_57 +.asm_710f +	max_flag_value EVENT_FLAG_50 +	max_flag_value EVENT_FLAG_51 +	max_flag_value EVENT_FLAG_52 +	max_flag_value EVENT_FLAG_53 +.asm_f11f +	or a +	ret + +Func_f121: ; f121 (3:7121) +	ld c, $04 +.asm_f123 +	ld a, [hli] +	cp e +	jr nz, .asm_f13e +	ld a, [hli] +	cp d +	jr nz, .asm_f13f +	ld a, [hl] +	call GetEventFlagValue +	or a +	jr nz, .asm_f13f +	ld a, [hl] +	call MaxOutEventFlag +	inc hl +	ld c, [hl] +	set_flag_value EVENT_FLAG_58 +	scf +	ret +.asm_f13e +	inc hl +.asm_f13f +	inc hl +	inc hl +	dec c +	jr nz, .asm_f123 +	or a +	ret +; 0xf146 + +Unknown_f146: ; f146 (3:7146) +	INCROM $f146, $f156 + +Unknown_f156: ; f156 (3:7156) +	INCROM $f156, $f239 + +ChallengeHallAfterDuel: ; f239 (3:7239) +	ld c, $00 +	ld a, [wDuelResult] +	or a +	jr z, .won +	ld c, $02 +.won +	ld b, $00 +	ld hl, ChallengeHallAfterDuelTable +	add hl, bc +	ld c, [hl] +	inc hl +	ld b, [hl] +	ld a, NPC_HOST +	ld [wTempNPC], a +	jp SetNextNPCAndScript + +ChallengeHallAfterDuelTable: +	dw WonAtChallengeHall +	dw LostAtChallengeHall + +ChallengeHallLoadMap: ; f258 (3:7258) +	get_flag_value EVENT_FLAG_47 +	or a +	ret z +	ld a, NPC_HOST +	ld [wTempNPC], a +	call FindLoadedNPC +	ld bc, Script_f433 +	jp SetNextNPCAndScript + +Script_Clerk13: ; f26c (3:726c) +	start_script +	run_command ScriptCommand_PrintTextQuitFully +	tx Text0525 + +Preload_Guide: ; f270 (3:7270) +	get_flag_value EVENT_FLAG_42 +	or a +	jr z, .asm_f281 +	ld a, $1c +	ld [wLoadNPCXPos], a +	ld a, $02 +	ld [wLoadNPCYPos], a +.asm_f281 +	scf +	ret +; 0xf283 + +Script_Guide: ; f283 (3:7283) +	start_script +	run_command ScriptCommand_JumpIfFlagZero2 +	db EVENT_FLAG_42 +	dw .ows_f28b +	run_command ScriptCommand_PrintTextQuitFully +	tx Text0526 + +.ows_f28b +	run_command ScriptCommand_JumpIfFlagZero1 +	db $3f +	dw .ows_f292 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text0527 + +.ows_f292 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text0528 + +Script_Clerk12: ; f295 (3:7295) +	start_script +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_41 +	db $03 +	dw .ows_f2c4 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_41 +	db $02 +	dw .ows_f2c1 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_40 +	db $03 +	dw .ows_f2c4 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_40 +	db $02 +	dw .ows_f2c1 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_3F +	db $03 +	dw .ows_f2c4 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_3F +	db $02 +	dw .ows_f2c1 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_44 +	db $02 +	dw .ows_f2cd +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_44 +	db $03 +	dw .ows_f2d3 +	run_command ScriptCommand_Jump +	dw .ows_f2c7 + +.ows_f2c1 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text0529 + +.ows_f2c4 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text052a + +.ows_f2c7 +	run_command ScriptCommand_PrintTextString +	tx Text052b +	run_command ScriptCommand_Jump +	dw .ows_f2d6 + +.ows_f2cd +	run_command ScriptCommand_PrintTextString +	tx Text052c +	run_command ScriptCommand_Jump +	dw .ows_f2d6 + +.ows_f2d3 +	run_command ScriptCommand_PrintTextString +	tx Text052d +.ows_f2d6 +	run_command ScriptCommand_PrintTextString +	tx Text052e +	run_command ScriptCommand_AskQuestionJump +	tx Text052f +	dw .ows_f2e1 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text0530 + +.ows_f2e1 +	run_command ScriptCommand_MaxOutFlagValue +	db EVENT_FLAG_59 +	run_command ScriptCommand_PrintTextString +	tx Text0531 +	run_command ScriptCommand_CloseTextBox +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_f349 +	run_command ScriptCommand_JumpIfPlayerCoordMatches +	db 8 +	db 18 +	dw .ows_f2fa +	run_command ScriptCommand_JumpIfPlayerCoordMatches +	db 12 +	db 18 +	dw .ows_f302 +	run_command ScriptCommand_MovePlayer +	db NORTH +	db $02 +	run_command ScriptCommand_Jump +	dw .ows_f307 + +.ows_f2fa +	run_command ScriptCommand_SetPlayerDirection +	db EAST +	run_command ScriptCommand_MovePlayer +	db EAST +	db $02 +	run_command ScriptCommand_Jump +	dw .ows_f307 + +.ows_f302 +	run_command ScriptCommand_SetPlayerDirection +	db WEST +	run_command ScriptCommand_MovePlayer +	db WEST +	db $02 +.ows_f307 +	run_command ScriptCommand_SetPlayerDirection +	db NORTH +	run_command ScriptCommand_MovePlayer +	db NORTH +	db $01 +	run_command ScriptCommand_MovePlayer +	db NORTH +	db $01 +	run_command ScriptCommand_MovePlayer +	db NORTH +	db $01 +	run_command ScriptCommand_MovePlayer +	db NORTH +	db $01 +	run_command ScriptCommand_MovePlayer +	db NORTH +	db $01 +	run_command ScriptCommand_JumpIfFlagNonzero2 +	db EVENT_FLAG_43 +	dw .ows_f33a +	run_command ScriptCommand_MaxOutFlagValue +	db EVENT_FLAG_43 +	run_command ScriptCommand_MovePlayer +	db NORTH +	db $01 +	run_command ScriptCommand_MovePlayer +	db NORTH +	db $01 +	run_command ScriptCommand_SetPlayerDirection +	db EAST +	run_command ScriptCommand_DoFrames +	db 30 +	run_command ScriptCommand_SetPlayerDirection +	db SOUTH +	run_command ScriptCommand_DoFrames +	db 20 +	run_command ScriptCommand_SetPlayerDirection +	db EAST +	run_command ScriptCommand_DoFrames +	db 20 +	run_command ScriptCommand_SetPlayerDirection +	db SOUTH +	run_command ScriptCommand_DoFrames +	db 30 +	run_command ScriptCommand_MovePlayer +	db SOUTH +	db $01 +	run_command ScriptCommand_MovePlayer +	db SOUTH +	db $01 +.ows_f33a +	run_command ScriptCommand_SetPlayerDirection +	db EAST +	run_command ScriptCommand_MovePlayer +	db EAST +	db $01 +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_f34e +	run_command ScriptCommand_CloseAdvancedTextBox +	run_command ScriptCommand_SetNextNPCandScript +	db $4a +	dw Script_f353 +	run_command ScriptCommand_EndScriptLoop1 +	ret +; f349 + +NPCMovement_f349: ; f349 (3:7349) +	db NORTH +	db NORTH +	db EAST +;	fallthrough + +NPCMovement_f34c: ; f34c (3:734c) +	db WEST | NO_MOVE +	db $ff + +NPCMovement_f34e: ; f34e (3:734e) +	db WEST +	db SOUTH +	db SOUTH +	db $ff + +Script_HostStubbed: ; f352 (3:7352) +	ret + +Script_f353: ; f353 (3:7353) +	start_script +	run_command ScriptCommand_DoFrames +	db 20 +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_f37d +	run_command ScriptCommand_DoFrames +	db 20 +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_f390 +	run_command Func_d16b +	db $00 +	run_command ScriptCommand_PrintTextString +	tx Text0532 +	run_command ScriptCommand_CloseTextBox +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_f37f +	run_command ScriptCommand_PrintTextString +	tx Text0533 +	run_command ScriptCommand_CloseTextBox +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_f388 +	run_command ScriptCommand_PrintTextString +	tx Text0534 +	run_command ScriptCommand_CloseTextBox +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_f38e +	run_command ScriptCommand_PrintTextString +	tx Text0535 +	run_command Func_cd4f +	db $04 +	db $00 +	db $00 +	run_command ScriptCommand_QuitScriptFully + +NPCMovement_f37d: ; f37d (3:737d) +	db EAST | NO_MOVE +	db $ff + +NPCMovement_f37f: ; f37f (3:737f) +	db EAST +	db EAST +	db SOUTH +	db $ff + +NPCMovement_f383: ; f383 (3:7383) +	db NORTH +	db WEST +	db WEST +	db SOUTH | NO_MOVE +	db $ff + +NPCMovement_f388: ; f388 (3:7388) +	db NORTH +	db WEST +	db WEST +;	fallthrough + +NPCMovement_f38b: ; f38b (3:738b) +	db WEST +	db SOUTH +	db $ff + +NPCMovement_f38e: ; f38e (3:738e) +	db NORTH +	db EAST +;	fallthrough + +NPCMovement_f390: ; f390 (3:7390) +	db SOUTH | NO_MOVE +	db $ff + +LostAtChallengeHall: ; f392 (3:7392) +	start_script +	run_command ScriptCommand_DoFrames +	db 20 +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_f37d +	run_command ScriptCommand_DoFrames +	db 20 +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_f390 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_45 +	db $02 +	dw ScriptJump_f410 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_45 +	db $03 +	dw ScriptJump_f410.ows_f41a +	run_command Func_d16b +	db $00 +	run_command Func_d16b +	db $01 +	run_command ScriptCommand_PrintTextString +	tx Text0536 +.ows_f3ae +	run_command ScriptCommand_CloseTextBox +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_f38b +	run_command ScriptCommand_PrintTextString +	tx Text0537 +	run_command ScriptCommand_CloseTextBox +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_f38e +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_44 +	db $02 +	dw .ows_f3ce +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_44 +	db $03 +	dw .ows_f3d9 +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_3F +	db $03 +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_48 +	db $03 +	run_command ScriptCommand_ZeroOutFlagValue +	db EVENT_FLAG_51 +	run_command ScriptCommand_Jump +	dw .ows_f3e2 +.ows_f3ce +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_40 +	db $03 +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_49 +	db $03 +	run_command ScriptCommand_ZeroOutFlagValue +	db EVENT_FLAG_55 +	run_command ScriptCommand_Jump +	dw .ows_f3e2 +.ows_f3d9 +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_41 +	db $03 +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_4A +	db $03 +	run_command ScriptCommand_Jump +	dw .ows_f3e2 +.ows_f3e2 +	run_command ScriptCommand_CloseAdvancedTextBox +	run_command ScriptCommand_SetNextNPCandScript +	db NPC_CLERK12 +	dw Script_f3e9 +	run_command ScriptCommand_EndScriptLoop1 +	ret + +Script_f3e9: ; f3e9 (3:73e9) +	start_script +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_f40a +	run_command ScriptCommand_SetPlayerDirection +	db WEST +	run_command ScriptCommand_MovePlayer +	db WEST +	db $01 +	run_command ScriptCommand_SetPlayerDirection +	db SOUTH +	run_command ScriptCommand_MovePlayer +	db SOUTH +	db $01 +	run_command ScriptCommand_MovePlayer +	db SOUTH +	db $01 +	run_command ScriptCommand_MovePlayer +	db SOUTH +	db $01 +	run_command ScriptCommand_MovePlayer +	db SOUTH +	db $01 +	run_command ScriptCommand_MovePlayer +	db SOUTH +	db $01 +	run_command ScriptCommand_MovePlayer +	db SOUTH +	db $01 +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_f40d +	run_command ScriptCommand_QuitScriptFully + +NPCMovement_f40a: ; f40a (3:740a) +	db WEST +	db EAST | NO_MOVE +	db $ff + +NPCMovement_f40d: ; f40d (3:740d) +	db EAST +	db SOUTH | NO_MOVE +	db $ff + +ScriptJump_f410: ; f410 (4:7410) +	run_command Func_d16b +	db $00 +	run_command Func_d16b +	db $01 +	run_command ScriptCommand_PrintTextString +	tx Text0538 +	run_command ScriptCommand_Jump +	dw LostAtChallengeHall.ows_f3ae + +.ows_f41a +	run_command ScriptCommand_PrintTextString +	tx Text0539 +	run_command ScriptCommand_SetDialogName +	db NPC_RONALD1 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_44 +	db $03 +	dw .ows_f42e +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_44 +	db $01 +	dw NO_JUMP +	run_command ScriptCommand_PrintVariableText +	tx Text053a +	tx Text053b +.ows_f42e +	run_command ScriptCommand_SetDialogName +	db NPC_HOST +	run_command ScriptCommand_Jump +	dw LostAtChallengeHall.ows_f3ae + +Script_f433: ; f433 (3:7433) +	start_script +	run_command ScriptCommand_DoFrames +	db 20 +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_f37d +	run_command ScriptCommand_DoFrames +	db 20 +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_f390 +	run_command ScriptCommand_Jump +	dw WonAtChallengeHall.ows_f4a4 + +WonAtChallengeHall; f441 (3:7441) +	start_script +	run_command ScriptCommand_DoFrames +	db 20 +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_f37d +	run_command ScriptCommand_DoFrames +	db 20 +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_f390 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_45 +	db $03 +	dw ScriptJump_f4db +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_45 +	db $02 +	dw .ows_f456 +.ows_f456 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_45 +	db $01 +	dw NO_JUMP +	run_command ScriptCommand_PrintVariableText +	tx Text053c +	tx Text053d +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_f37f +	run_command Func_d16b +	db $00 +	run_command ScriptCommand_PrintTextString +	tx Text053e +	run_command ScriptCommand_CloseTextBox +	run_command ScriptCommand_MoveWramNPC +	dw NPCMovement_f4c8 +	run_command Func_cdd8 +	run_command ScriptCommand_PrintTextString +	tx Text053f +	run_command ScriptCommand_CloseTextBox +	run_command Func_d195 +	run_command Func_cdf5 +	db $14 +	db $14 +	run_command ScriptCommand_MoveWramNPC +	dw NPCMovement_f4d0 +	run_command Func_d16b +	db $00 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_45 +	db $02 +	dw NO_JUMP +	run_command ScriptCommand_PrintVariableText +	tx Text0540 +	tx Text0541 +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_f383 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_45 +	db $02 +	dw .ows_f4a4 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_44 +	db $03 +	dw .ows_f4a1 +	run_command ScriptCommand_CloseTextBox +	run_command ScriptCommand_SetDialogName +	db $02 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_44 +	db $01 +	dw NO_JUMP +	run_command ScriptCommand_PrintVariableText +	tx Text0542 +	tx Text0543 +	run_command ScriptCommand_SetDialogName +	db NPC_HOST +	run_command ScriptCommand_CloseTextBox +.ows_f4a1 +	run_command ScriptCommand_PrintTextString +	tx Text0544 +.ows_f4a4 +	run_command ScriptCommand_ZeroOutFlagValue +	db EVENT_FLAG_47 +	run_command ScriptCommand_PrintTextString +	tx Text0545 +	run_command ScriptCommand_AskQuestionJumpDefaultYes +	tx Text0546 +	dw .ows_f4bd +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_45 +	db $02 +	dw NO_JUMP +	run_command ScriptCommand_PrintVariableText +	tx Text0547 +	tx Text0548 +	run_command Func_cd4f +	db $04 +	db $00 +	db $00 +	run_command ScriptCommand_QuitScriptFully +.ows_f4bd +	run_command ScriptCommand_PrintTextString +	tx Text0549 +	run_command ScriptCommand_CloseTextBox +	run_command ScriptCommand_MaxOutFlagValue +	db EVENT_FLAG_47 +	run_command Func_d1ad +	run_command ScriptCommand_CloseTextBox +	run_command ScriptCommand_Jump +	dw .ows_f4a4 + +NPCMovement_f4c8: ; f4c8 (3:74c8) +	db EAST +NPCMovement_f4c9: ; f4c9 (3:74c9) +	db SOUTH +	db SOUTH +	db SOUTH +	db SOUTH +	db SOUTH +	db SOUTH +	db $ff + +NPCMovement_f4d0: ; f4d0 (3:74d0) +	db NORTH +	db NORTH +	db NORTH +	db NORTH +	db NORTH +	db NORTH +	db WEST +	db $ff + +NPCMovement_f4d8: ; f4d8 (3:74d8) +	db EAST +	db SOUTH | NO_MOVE +	db $ff + +ScriptJump_f4db: ; f4db (3:74db) +	run_command ScriptCommand_PrintTextString +	tx Text054a +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_f37f +	run_command Func_d16b +	db $00 +	run_command ScriptCommand_PrintTextString +	tx Text054b +	run_command ScriptCommand_CloseTextBox +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_44 +	db $03 +	dw .ows_f513 +	run_command ScriptCommand_SetDialogName +	db $02 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_44 +	db $01 +	dw NO_JUMP +	run_command ScriptCommand_PrintVariableText +	tx Text054c +	tx Text054d +	run_command ScriptCommand_MoveWramNPC +	dw NPCMovement_f4d8 +	run_command ScriptCommand_DoFrames +	db 40 +	run_command ScriptCommand_MoveWramNPC +	dw NPCMovement_f34c +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_44 +	db $01 +	dw NO_JUMP +	run_command ScriptCommand_PrintVariableText +	tx Text054e +	tx Text054f +	run_command ScriptCommand_SetDialogName +	db NPC_HOST +	run_command ScriptCommand_CloseTextBox +	run_command ScriptCommand_MoveWramNPC +	dw NPCMovement_f4c9 +	run_command ScriptCommand_Jump +	dw .ows_f516 +.ows_f513 +	run_command ScriptCommand_MoveWramNPC +	dw NPCMovement_f4c8 +.ows_f516 +	run_command Func_cdd8 +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_f383 +	run_command ScriptCommand_PrintTextString +	tx Text0550 +	run_command ScriptCommand_CloseTextBox +	run_command ScriptCommand_MoveActiveNPC +	dw NPCMovement_f38b +	run_command Func_d1b3 +	run_command ScriptCommand_PrintTextString +	tx Text0551 +	run_command ScriptCommand_GiveCard +	db $00 +	run_command ScriptCommand_ShowCardReceivedScreen +	db $00 +	run_command ScriptCommand_PrintTextString +	tx Text0552 +	run_command ScriptCommand_CloseTextBox +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_44 +	db $02 +	dw .ows_f540 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_44 +	db $03 +	dw .ows_f549 +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_3F +	db $02 +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_48 +	db $02 +	run_command ScriptCommand_Jump +	dw .ows_f552 +.ows_f540 +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_40 +	db $02 +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_49 +	db $02 +	run_command ScriptCommand_Jump +	dw .ows_f552 +.ows_f549 +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_41 +	db $02 +	run_command ScriptCommand_SetFlagValue +	db EVENT_FLAG_4A +	db $02 +	run_command ScriptCommand_Jump +	dw .ows_f552 +.ows_f552 +	run_command ScriptCommand_CloseAdvancedTextBox +	run_command ScriptCommand_SetNextNPCandScript +	db NPC_CLERK12 +	dw Script_f3e9 +	run_command ScriptCommand_EndScriptLoop1 +	ret +; f559 + +; Loads the NPC to fight at the challenge hall +Preload_ChallengeHallOpponent: ; f559 (3:7559) +	get_flag_value EVENT_FLAG_42 +	or a +	ret z +	get_flag_value EVENT_FLAG_46 +	or a +	jr z, .asm_f56e +	ld a, [wd696] +	ld [wTempNPC], a +	scf +	ret +.asm_f56e +	call Func_f5db +	ld c, $01 +	set_flag_value EVENT_FLAG_45 +	call Func_f580 +	max_flag_value EVENT_FLAG_46 +	scf +	ret  Func_f580: ; f580 (3:7580) -	call Func_ca69 -	ld b, h +	get_flag_value EVENT_FLAG_44  	cp $3  	jr z, .asm_f596 -	call Func_ca69 -	ld b, l +	get_flag_value EVENT_FLAG_45  	cp $3  	ld d, $18  	jr nz, .asm_f598 @@ -3178,12 +6263,106 @@ Func_f580: ; f580 (3:7580)  	ld a, [hl]  .asm_f5ac -	ld [wd3ab], a +	ld [wTempNPC], a  	ld [wd696], a  	ret  ; 0xf5b3 -	INCROM $f5b3, $fc2b +	INCROM $f5b3, $f5db + +Func_f5db: ; f5db (3:75db) +	xor a +	ld [$d698], a +	ld [$d699], a +	ld [$d69a], a +	ld [$d69b], a +	ret +; 0xf5e9 + +	INCROM $f5e9, $f602 + +Func_f602: ; f602 (3:7602) +	INCROM $f602, $f631 + +Script_f631: ; f631 (3:7631) +	start_script +	run_command ScriptCommand_PrintTextString +	tx Text0508 +	run_command ScriptCommand_CloseAdvancedTextBox +	run_command ScriptCommand_SetNextNPCandScript +	db $02 +	dw $763c +	run_command ScriptCommand_EndScriptLoop1 + +	ret +; 0xf63c + +	INCROM $f63c, $fbdb + +HallOfHonorLoadMap: ; fbdb (3:7bdb) +	ld a, SFX_10 +	call PlaySFX +	ret +; 0xfbe1 + +	INCROM $fbe1, $fbf1 + +Script_fbf1: ; fbf1 (3:7bf1) +	start_script +	run_command ScriptCommand_JumpIfFlagNonzero2 +	db EVENT_RECEIVED_LEGENDARY_CARD +	dw .ows_fc10 +	run_command ScriptCommand_MaxOutFlagValue +	db EVENT_RECEIVED_LEGENDARY_CARD +	run_command Func_ccdc +	tx Text05b8 +	run_command ScriptCommand_GiveCard +	db ZAPDOS3 +	run_command ScriptCommand_GiveCard +	db MOLTRES2 +	run_command ScriptCommand_GiveCard +	db ARTICUNO2 +	run_command ScriptCommand_GiveCard +	db DRAGONITE1 +	run_command ScriptCommand_ShowCardReceivedScreen +	db $ff +.ows_fc05 +	run_command Func_d38f +	db $00 +	run_command Func_ccdc +	tx Text05b9 +.ows_fc0a +	run_command Func_d38f +	db $01 +	run_command Func_d396 +	db $01 +	run_command Func_d3b9 +	run_command ScriptCommand_QuitScriptFully + +.ows_fc10 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_71 +	db $0f +	dw .ows_fc20 +	run_command Func_d209 +	run_command Func_ccdc +	tx Text05ba +	run_command ScriptCommand_GiveCard +	db $00 +	run_command ScriptCommand_ShowCardReceivedScreen +	db $00 +	run_command ScriptCommand_Jump +	dw .ows_fc05 + +.ows_fc20 +	run_command Func_ccdc +	tx Text05bb +	run_command Func_d38f +	db $00 +	run_command Func_ccdc +	tx Text05bc +	run_command ScriptCommand_Jump +	dw .ows_fc0a  Func_fc2b: ; fc2b (3:7c2b)  	ld a, [wDuelResult] @@ -3200,17 +6379,29 @@ Func_fc2b: ; fc2b (3:7c2b)  	inc hl  	ld b, [hl]  	ld a, $b0 -	ld [wd0c8], a +	ld [wCurrentNPCNameTx], a  	ld a, $3 -	ld [wd0c9], a -	jp Func_c935 +	ld [wCurrentNPCNameTx+1], a +	jp SetNextScript  PointerTable_fc4c: ; fc4c (3:7c4c)  	dw Unknown_fc64  	dw Unknown_fc68  	dw Unknown_fc60 -	INCROM $fc52, $fc60 +Script_fc52: ; fc52 (3:7c52) +	start_script +	run_command ScriptCommand_PrintTextString +	tx Text06c8 +	run_command ScriptCommand_AskQuestionJumpDefaultYes +	dw $0000 +	dw .ows_fc5e +	run_command ScriptCommand_PrintTextQuitFully +	tx Text06c9 + +.ows_fc5e +	run_command Func_cd76 +	run_command ScriptCommand_QuitScriptFully  Unknown_fc60: ; fc60 (3:7c60)  	INCROM $fc60, $fc64 @@ -3219,7 +6410,120 @@ Unknown_fc64: ; fc64 (3:7c64)  	INCROM $fc64, $fc68  Unknown_fc68: ; fc68 (3:7c68) -	INCROM $fc68, $fcad +	INCROM $fc68, $fc6c + +; Clerk looks away from you if you can't use infrared +; This is one of the preloads that does not change whether or not they appear +Preload_GiftCenterClerk: ; fc6c (3:7c6c) +	ld a, [wConsole] +	cp CONSOLE_CGB +	jr z, .notCGB +	ld a, NORTH +	ld [wLoadNPCDirection], a +.notCGB +	scf +	ret + +Func_fc7a: ; fc7a (3:7c7a) +	ld a, [wConsole] +	ld c, a +	set_flag_value EVENT_FLAG_74 + +	start_script +	run_command ScriptCommand_JumpIfFlagNotEqual +	db EVENT_FLAG_74 +	db $02 +	dw Func_fcad.ows_fcd5 +	run_command ScriptCommand_PrintTextString +	tx Text06cd +	run_command Func_d39d +	db $00 +	run_command ScriptCommand_JumpIfFlagNotLessThan +	db EVENT_FLAG_72 +	db $04 +	dw Func_fc7a.ows_fcaa +	run_command ScriptCommand_PrintTextString +	tx Text06ce +	run_command ScriptCommand_AskQuestionJumpDefaultYes +	tx Text06cf +	dw .ows_fca0 +	run_command ScriptCommand_PrintTextString +	tx Text06d0 +	run_command ScriptCommand_Jump +	dw Func_fc7a.ows_fcaa + +.ows_fca0 +	run_command Func_d396 +	db $00 +	run_command ScriptCommand_PlaySFX +	db $56 +	run_command Func_ccdc +	tx Text06d1 +	run_command Func_d39d +	db $01 +	run_command ScriptCommand_QuitScriptFully + +.ows_fcaa +	run_command ScriptCommand_PrintTextQuitFully +	tx Text06d2  Func_fcad: ; fcad (3:7cad) -	INCROM $fcad, $10000 +	ld a, [wd10e] +	ld c, a +	set_flag_value EVENT_FLAG_72 + +	start_script +	run_command ScriptCommand_PlaySFX +	db $56 +	run_command Func_d396 +	db $00 +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_72 +	db $00 +	dw .ows_fccc +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_72 +	db $02 +	dw .ows_fccf +	run_command ScriptCommand_JumpIfFlagEqual +	db EVENT_FLAG_72 +	db $03 +	dw .ows_fcd2 +	run_command ScriptCommand_Jump +	dw Func_fc7a.ows_fcaa + +.ows_fccc +	run_command ScriptCommand_PrintTextQuitFully +	tx Text06d3 + +.ows_fccf +	run_command ScriptCommand_PrintTextQuitFully +	tx Text06d4 + +.ows_fcd2 +	run_command ScriptCommand_PrintTextQuitFully +	tx Text06d5 + +.ows_fcd5 +	run_command ScriptCommand_MoveArbitraryNPC +	db NPC_GIFT_CENTER_CLERK +	dw NPCMovement_fce1 +	run_command ScriptCommand_PrintTextString +	tx Text06d6 +	run_command ScriptCommand_MoveArbitraryNPC +	db NPC_GIFT_CENTER_CLERK +	dw NPCMovement_fce3 +	run_command ScriptCommand_QuitScriptFully + +NPCMovement_fce1: ; fce1 (3:7ce1) +	db SOUTH | NO_MOVE +	db $ff + +NPCMovement_fce3: ; fce3 (3:7ce3) +	db NORTH | NO_MOVE +	db $ff +; fce5 + +rept $31b +	db $ff +endr diff --git a/src/engine/bank04.asm b/src/engine/bank04.asm index e2ca66c..13df81b 100644 --- a/src/engine/bank04.asm +++ b/src/engine/bank04.asm @@ -92,7 +92,7 @@ Medal_1029e: ; 1029e (4:429e)  	jr nz, .asm_102e2  	ldtx hl, WonTheMedalText  	call PrintScrollableText_NoTextBoxLabel -	call Func_3c96 +	call WaitForSongToFinish  	call ResumeSong  	pop af  	ld [wd291], a @@ -149,7 +149,7 @@ BoosterPack_1031b: ; 1031b (4:431b)  	ldtx hl, AndAnotherBoosterPackText  .asm_10373  	call PrintScrollableText_NoTextBoxLabel -	call Func_3c96 +	call WaitForSongToFinish  	call ResumeSong  	ldtx hl, CheckedCardsInBoosterPackText  	call PrintScrollableText_NoTextBoxLabel @@ -224,7 +224,7 @@ Duel_Init: ; 103d3 (4:43d3)  	lb de, 18, 17 ; x, y  	call SetCursorParametersForTextBox  	call WaitForButtonAorB -	call Func_3c96 +	call WaitForSongToFinish  	call Func_10ab4 ; fade out  	pop af  	ld [wd291], a @@ -239,38 +239,39 @@ Func_10548: ; 10548 (4:4548)  Func_10756: ; 10756 (4:4756)  	INCROM $10756, $10a70 -Func_10a70: ; 10a70 (4:4a70) +; gives the pc pack described in a +TryGivePCPack: ; 10a70 (4:4a70)  	push hl  	push bc  	push de  	ld b, a -	ld c, $f +	ld c, $f ; number of packs possible  	ld hl, wPCPacks -.asm_10a79 +.searchLoop1  	ld a, [hli]  	and $7f  	cp b -	jr z, .asm_10a97 +	jr z, .quit  	dec c -	jr nz, .asm_10a79 +	jr nz, .searchLoop1  	ld c, $f  	ld hl, wPCPacks -.asm_10a87 +.findFreeSlotLoop  	ld a, [hl]  	and $7f -	jr z, .asm_10a93 +	jr z, .foundFreeSlot  	inc hl  	dec c -	jr nz, .asm_10a87 +	jr nz, .findFreeSlotLoop  	debug_ret -	jr .asm_10a97 +	jr .quit -.asm_10a93 +.foundFreeSlot  	ld a, b -	or $80 +	or $80 ; mark pack as unopened  	ld [hl], a -.asm_10a97 +.quit  	pop de  	pop bc  	pop hl @@ -332,7 +333,7 @@ Func_10dba: ; 10dba (4:4dba)  	push af  	ld hl, $4df0  	call JumpToFunctionInTable -	farcall Func_c135 +	farcall CloseTextBox  	call DoFrameIfLCDEnabled  	pop af  	ret @@ -344,7 +345,7 @@ Func_10e28: ; 10e28 (4:4e28)  	INCROM $10e28, $10e55  Func_10e55: ; 10e55 (4:4e55) -	ld a, [wd336] +	ld a, [wPlayerSpriteIndex]  	ld [wWhichSprite], a  	ld a, [wd33e]  	or a @@ -364,8 +365,8 @@ Func_10e71: ; 10e71 (4:4e71)  	ldh a, [hKeysPressed]  	and D_PAD  	jr z, .asm_10e83 -	farcall Func_c5d5 -	ld [wd334], a +	farcall GetDirectionFromDPad +	ld [wPlayerDirection], a  	call Func_10e97  	jr .asm_10e96  .asm_10e83 @@ -387,7 +388,7 @@ Func_10e97: ; 10e97 (4:4e97)  	rlca  	rlca  	ld c, a -	ld a, [wd334] +	ld a, [wPlayerDirection]  	add c  	ld c, a  	ld b, $0 @@ -457,7 +458,7 @@ Func_10f4a: ; 10f4a (4:4f4a)  	jr nz, .asm_10f5f  	ld c, a  	ld a, $1e -	farcall CheckIfEventFlagSet +	farcall GetEventFlagValue  	or a  	ld a, c  	jr nz, .asm_10f5f @@ -477,13 +478,13 @@ LoadOverworldMapSelection: ; 10f61 (4:4f61)  	ld hl, OverworldMapIndexes  	add hl, bc  	ld a, [hli] -	ld [wd0bb], a +	ld [wTempMap], a  	ld a, [hli] -	ld [wd0bc], a +	ld [wTempPlayerXCoord], a  	ld a, [hli] -	ld [wd0bd], a +	ld [wTempPlayerYCoord], a  	ld a, $0 -	ld [wd0be], a +	ld [wTempPlayerDirection], a  	ld hl, wd0b4  	set 4, [hl]  	pop bc @@ -494,7 +495,7 @@ INCLUDE "data/overworld_indexes.asm"  Func_10fbc: ; 10fbc (4:4fbc)  	ld a, $25 -	farcall Func_1299f +	farcall CreateSpriteAndAnimBufferEntry  	ld c, SPRITE_ANIM_COORD_X  	call GetSpriteAnimBufferProperty  	ld a, $80 @@ -517,7 +518,7 @@ Func_10fde: ; 10fde (4:4fde)  	xor a  	ld [wd33e], a  	ld a, $25 -	call Func_1299f +	call CreateSpriteAndAnimBufferEntry  	ld a, [wWhichSprite]  	ld [wd33b], a  	ld b, $35 @@ -530,7 +531,7 @@ Func_10fde: ; 10fde (4:4fde)  	ld [wd33c], a  	call Func_12ab5  	ld a, $3e -	farcall CheckIfEventFlagSet +	farcall GetEventFlagValue  	or a  	jr nz, .asm_11015  	ld c, SPRITE_ANIM_FIELD_0F @@ -550,7 +551,7 @@ Func_11016: ; 11016 (4:5016)  Func_11024: ; 11024 (4:5024)  	ld a, SFX_57  	call PlaySFX -	ld a, [wd336] +	ld a, [wPlayerSpriteIndex]  	ld [wWhichSprite], a  	ld c, SPRITE_ANIM_FIELD_0F  	call GetSpriteAnimBufferProperty @@ -582,7 +583,7 @@ Func_11024: ; 11024 (4:5024)  	ret  Func_11060: ; 11060 (4:5060) -	ld a, [wd336] +	ld a, [wPlayerSpriteIndex]  	ld [wWhichSprite], a  	ld a, [wd341]  	or a @@ -672,7 +673,7 @@ Func_110a6: ; 110a6 (4:50a6)  	xor a  	ld [wd347], a  	ld [wd348], a -	farcall Func_c5e9 +	farcall UpdatePlayerSprite  	pop hl  	ret @@ -710,7 +711,7 @@ Func_11102: ; 11102 (4:5102)  	jr z, .asm_1113a  	ld a, $3  .asm_1113a -	ld [wd334], a +	ld [wPlayerDirection], a  	ret  Func_1113e: ; 1113e (4:513e) @@ -746,7 +747,7 @@ Func_1113e: ; 1113e (4:513e)  	jr z, .asm_11175  	ld a, $0  .asm_11175 -	ld [wd334], a +	ld [wPlayerDirection], a  	ret  Func_11179: ; 11179 (4:5179) @@ -818,13 +819,13 @@ Func_1157c: ; 1157c (4:557c)  .asm_11586  	ld a, $2 -	ld [wd0bc], a +	ld [wTempPlayerXCoord], a  	ld a, $4 -	ld [wd0bd], a +	ld [wTempPlayerYCoord], a  	ld a, $2 -	ld [wd0be], a +	ld [wTempPlayerDirection], a  	ld a, $1 -	ld [wd0bb], a +	ld [wTempMap], a  	ld a, $1  	ld [wd32e], a @@ -838,13 +839,13 @@ Func_115a3: ; 115a3 (4:55a3)  INCLUDE "data/map_scripts.asm" -; loads a pointer into hl found on PointerTable_118f5 -Func_1184a: ; 1184a (4:584a) +; loads a pointer into hl found on NPCDataTable +GetNPCDataPointer: ; 1184a (4:584a)  	; this may have been a macro  	rlca -	add LOW(PointerTable_118f5) +	add LOW(NPCDataTable)  	ld l, a -	ld a, HIGH(PointerTable_118f5) +	ld a, HIGH(NPCDataTable)  	adc $00  	ld h, a  	ld a, [hli] @@ -852,12 +853,12 @@ Func_1184a: ; 1184a (4:584a)  	ld l, a  	ret -Func_11857: ; 11857 (4:5857) +LoadNPCSpriteData: ; 11857 (4:5857)  	push hl  	push bc -	call Func_1184a +	call GetNPCDataPointer  	ld a, [hli] -	ld [wd3ab], a +	ld [wTempNPC], a  	ld a, [hli]  	ld [wd3b3], a  	ld a, [hli] @@ -868,7 +869,7 @@ Func_11857: ; 11857 (4:5857)  	ld [wd3b2], a  	pop bc  	ld a, [wConsole] -	cp $2 +	cp CONSOLE_CGB  	jr nz, .asm_1187a  	ld a, b  	ld [wd3b1], a @@ -877,33 +878,34 @@ Func_11857: ; 11857 (4:5857)  	pop hl  	ret -; this appears to find data about the NPC we're talking to -Func_1187d: ; 1187d (4:587d) +; Loads Name into wCurrentNPCNameTx and gets Script ptr into bc +GetNPCNameAndScript: ; 1187d (4:587d)  	push hl -	call Func_1184a -	ld bc, $5 +	call GetNPCDataPointer +	ld bc, NPC_DATA_OWSEQUENCE_PTR  	add hl, bc  	ld c, [hl]  	inc hl  	ld b, [hl]  	inc hl  	ld a, [hli] -	ld [wd0c8], a +	ld [wCurrentNPCNameTx], a  	ld a, [hli] -	ld [wd0c9], a +	ld [wCurrentNPCNameTx+1], a  	pop hl  	ret -Func_11893: ; 11893 (4:5893) +; Sets Dialog Box title to the name of the npc in 'a' +SetNPCDialogName: ; 11893 (4:5893)  	push hl  	push bc -	call Func_1184a -	ld bc, $0007 +	call GetNPCDataPointer +	ld bc, NPC_DATA_NAME_TEXT  	add hl, bc  	ld a, [hli] -	ld [wd0c8], a +	ld [wCurrentNPCNameTx], a  	ld a, [hli] -	ld [wd0c9], a +	ld [wCurrentNPCNameTx+1], a  	pop bc  	pop hl  	ret @@ -911,7 +913,7 @@ Func_11893: ; 11893 (4:5893)  Func_118a7: ; 118a7 (4:58a7)  	push hl  	push bc -	call Func_1184a +	call GetNPCDataPointer  	ld bc, $0007  	add hl, bc  	ld a, [hli] @@ -927,7 +929,7 @@ Func_118a7: ; 118a7 (4:58a7)  Func_118bf: ; 118bf (4:58bf)  	push hl  	push bc -	call Func_1184a +	call GetNPCDataPointer  	ld bc, $000a  	add hl, bc  	ld a, [hli] @@ -942,7 +944,7 @@ Func_118d3: ; 118d3 (4:58d3)  	push hl  	push bc  	push af -	call Func_1184a +	call GetNPCDataPointer  	ld bc, $000c  	add hl, bc  	ld a, [hli] @@ -967,23 +969,23 @@ Func_11f4e: ; 11f4e (4:5f4e)  	INCROM $11f4e, $1217b  OverworldScriptTable: ; 1217b (4:617b) -	dw OWScript_EndScriptLoop1 -	dw OWScript_CloseTextBox -	dw OWScript_PrintTextString +	dw ScriptCommand_EndScriptLoop1 +	dw ScriptCommand_CloseAdvancedTextBox +	dw ScriptCommand_PrintTextString  	dw Func_ccdc -	dw OWScript_AskQuestionJump -	dw OWScript_StartBattle -	dw Func_cd83 +	dw ScriptCommand_AskQuestionJump +	dw ScriptCommand_StartBattle +	dw ScriptCommand_PrintVariableText  	dw Func_cda8 -	dw OWScript_PrintTextCloseBox +	dw ScriptCommand_PrintTextQuitFully  	dw Func_cdcb -	dw Func_ce26 -	dw Func_ce84 -	dw OWScript_GiveBoosterPacks +	dw ScriptCommand_MoveActiveNPCByDirection +	dw ScriptCommand_CloseTextBox +	dw ScriptCommand_GiveBoosterPacks  	dw Func_cf0c  	dw Func_cf12 -	dw Func_cf3f -	dw Func_cf4c +	dw ScriptCommand_GiveCard +	dw ScriptCommand_TakeCard  	dw Func_cf53  	dw Func_cf7b  	dw Func_cf2d @@ -994,83 +996,83 @@ OverworldScriptTable: ; 1217b (4:617b)  	dw Func_d025  	dw Func_d032  	dw Func_d03f -	dw OWScript_ScriptJump -	dw Func_d04f -	dw Func_d055 -	dw OWScript_MovePlayer -	dw Func_cee2 -	dw Func_d080 -	dw Func_d088 +	dw ScriptCommand_Jump +	dw ScriptCommand_TryGiveMedalPCPacks +	dw ScriptCommand_SetPlayerDirection +	dw ScriptCommand_MovePlayer +	dw ScriptCommand_ShowCardReceivedScreen +	dw ScriptCommand_SetDialogName +	dw ScriptCommand_SetNextNPCandScript  	dw Func_d095  	dw Func_d0be -	dw Func_d0ce +	dw ScriptCommand_DoFrames  	dw Func_d0d9 -	dw Func_d0f2 -	dw Func_ce4a -	dw Func_ceba +	dw ScriptCommand_JumpIfPlayerCoordMatches +	dw ScriptCommand_MoveActiveNPC +	dw ScriptCommand_GiveOneOfEachTrainerBooster  	dw Func_d103  	dw Func_d125  	dw Func_d135  	dw Func_d16b  	dw Func_cd4f  	dw Func_cd94 -	dw Func_ce52 +	dw ScriptCommand_MoveWramNPC  	dw Func_cdd8  	dw Func_cdf5  	dw Func_d195  	dw Func_d1ad  	dw Func_d1b3 -	dw OWScript_EndScriptCloseText +	dw ScriptCommand_QuitScriptFully  	dw Func_d244  	dw Func_d24c -	dw OWScript_OpenDeckMachine +	dw ScriptCommand_OpenDeckMachine  	dw Func_d271 -	dw Func_d36d -	dw Func_ce6f +	dw ScriptCommand_EnterMap +	dw ScriptCommand_MoveArbitraryNPC  	dw Func_d209  	dw Func_d38f  	dw Func_d396  	dw Func_cd76  	dw Func_d39d  	dw Func_d3b9 -	dw Func_d3c9 -	dw Func_d3d1 +	dw ScriptCommand_TryGivePCPack +	dw ScriptCommand_nop  	dw Func_d3d4  	dw Func_d3e0  	dw Func_d3fe  	dw Func_d408  	dw Func_d40f -	dw Func_d416 -	dw Func_d423 -	dw Func_d429 +	dw ScriptCommand_PlaySFX +	dw ScriptCommand_PauseSong +	dw ScriptCommand_ResumeSong  	dw Func_d41d -	dw Func_d42f +	dw ScriptCommand_WaitForSongToFinish  	dw Func_d435 -	dw Func_cce4 +	dw ScriptCommand_AskQuestionJumpDefaultYes  	dw Func_d2f6  	dw Func_d317  	dw Func_d43d -	dw OWScript_EndScriptLoop2 -	dw OWScript_EndScriptLoop3 -	dw OWScript_EndScriptLoop4 -	dw OWScript_EndScriptLoop5 -	dw OWScript_EndScriptLoop6 -	dw OWScript_CustomModifyEventFlags -	dw Func_d460 -	dw OWScript_JumpIfFlagSet -	dw Func_d484 -	dw Func_d49e -	dw Func_d4a6 -	dw Func_d4ae -	dw OWScript_SetEventFlags -	dw Func_d4c3 -	dw Func_d4ca -	dw OWScript_JumpIfFlagNotSet -	dw Func_d452 -	dw OWScript_EndScriptLoop7 -	dw OWScript_EndScriptLoop8 -	dw OWScript_EndScriptLoop9 -	dw OWScript_EndScriptLoop10 +	dw ScriptCommand_EndScriptLoop2 +	dw ScriptCommand_EndScriptLoop3 +	dw ScriptCommand_EndScriptLoop4 +	dw ScriptCommand_EndScriptLoop5 +	dw ScriptCommand_EndScriptLoop6 +	dw ScriptCommand_SetFlagValue +	dw ScriptCommand_JumpIfFlagZero1 +	dw ScriptCommand_JumpIfFlagNonzero1 +	dw ScriptCommand_JumpIfFlagEqual +	dw ScriptCommand_JumpIfFlagNotEqual +	dw ScriptCommand_JumpIfFlagNotLessThan +	dw ScriptCommand_JumpIfFlagLessThan +	dw ScriptCommand_MaxOutFlagValue +	dw ScriptCommand_ZeroOutFlagValue +	dw ScriptCommand_JumpIfFlagNonzero2 +	dw ScriptCommand_JumpIfFlagZero2 +	dw ScriptCommand_IncrementFlagValue +	dw ScriptCommand_EndScriptLoop7 +	dw ScriptCommand_EndScriptLoop8 +	dw ScriptCommand_EndScriptLoop9 +	dw ScriptCommand_EndScriptLoop10  	INCROM $1224b, $1229f @@ -1229,14 +1231,15 @@ Unknown_128fb: ; 128fb  Func_1296e: ; 1296e (4:696e)  	INCROM $1296e, $1299f -Func_1299f: ; 1299f (4:699f) +; creates a new entry in SpriteAnimBuffer, Alse loads the sprite if need be +CreateSpriteAndAnimBufferEntry: ; 1299f (4:699f)  	push af  	ld a, [wd5d7]  	or a -	jr z, .asm_129a8 +	jr z, .continue  	pop af  	ret -.asm_129a8 +.continue  	pop af  	push bc  	push hl @@ -1244,50 +1247,50 @@ Func_1299f: ; 1299f (4:699f)  	ld [wd5d3], a  	xor a  	ld [wWhichSprite], a -	call Func_3db7 -	ld bc, $0010 -.asm_129bb +	call GetFirstSpriteAnimBufferProperty +	ld bc, SPRITE_ANIM_LENGTH +.findFirstEmptyAnimField  	ld a, [hl]  	or a -	jr z, .asm_129cf +	jr z, .foundEmptyAnimField  	add hl, bc  	ld a, [wWhichSprite]  	inc a  	ld [wWhichSprite], a  	cp $10 -	jr nz, .asm_129bb +	jr nz, .findFirstEmptyAnimField  	debug_ret  	scf -	jr .asm_129d6 -.asm_129cf +	jr .quit +.foundEmptyAnimField  	ld a, $1  	ld [hl], a -	call Func_129d9 +	call FillNewSpriteAnimBufferEntry  	or a -.asm_129d6 +.quit  	pop hl  	pop bc  	ret -Func_129d9: ; 129d9 (4:69d9) +FillNewSpriteAnimBufferEntry: ; 129d9 (4:69d9)  	push hl  	push bc  	push hl  	inc hl -	ld c, $f +	ld c, SPRITE_ANIM_LENGTH - 1  	xor a -.asm_129e0 +.clearSpriteAnimBufferEntryLoop  	ld [hli], a  	dec c -	jr nz, .asm_129e0 +	jr nz, .clearSpriteAnimBufferEntryLoop  	pop hl -	ld bc, $0004 +	ld bc, SPRITE_ANIM_FIELD_05 - 1  	add hl, bc  	ld a, [wd5d3]  	ld [hli], a  	ld a, $ff  	ld [hl], a -	ld bc, $0009 +	ld bc, SPRITE_ANIM_MOVEMENT_COUNTER - SPRITE_ANIM_FIELD_05  	add hl, bc  	ld a, $ff  	ld [hl], a @@ -1322,7 +1325,7 @@ Func_12ab5: ; 12ab5 (4:6ab5)  Func_12ae2: ; 12ae2 (4:6ae2)  	push bc  	push af -	call Func_3db7 +	call GetFirstSpriteAnimBufferProperty  	pop af  	push hl  	ld bc, $0005 @@ -1330,15 +1333,15 @@ Func_12ae2: ; 12ae2 (4:6ae2)  	ld [hli], a  	push hl  	ld l, $6 -	farcall Func_8020f +	farcall GetMapDataPointer  	farcall Func_80229  	pop hl -	ld a, [wd4c6] +	ld a, [wTempPointerBank]  	ld [hli], a -	ld a, [wd4c4] +	ld a, [wTempPointer]  	ld [hli], a  	ld c, a -	ld a, [wd4c5] +	ld a, [wTempPointer + 1]  	ld [hli], a  	ld b, a  	ld a, $3 @@ -1360,20 +1363,20 @@ Func_12b13: ; 12b13 (4:6b13)  	ld bc, $0006  	add hl, bc  	ld a, [hli] -	ld [wd4c6], a +	ld [wTempPointerBank], a  	inc hl  	inc hl  	ld a, [hl] -	ld [wd4c4], a +	ld [wTempPointer], a  	add $4  	ld [hli], a  	ld a, [hl] -	ld [wd4c5], a +	ld [wTempPointer + 1], a  	adc $0  	ld [hl], a  	ld de, wd23e  	ld bc, $0004 -	call Func_3bf5 +	call CopyBankedDataToDE  	pop hl  	ld de, wd23e  	ld a, [de] @@ -1421,11 +1424,11 @@ Func_12b6a: ; 12b6a (4:6b6a)  	ld bc, $0006  	add hl, bc  	ld a, [hli] -	ld [wd4c6], a +	ld [wTempPointerBank], a  	ld a, [hli] -	ld [wd4c4], a +	ld [wTempPointer], a  	ld a, [hli] -	ld [wd4c5], a +	ld [wTempPointer + 1], a  	pop hl  	call Func_3d72  	pop de @@ -1465,6 +1468,8 @@ Func_12ba7: ; 12ba7 (4:6ba7)  Func_12bcd: ; 12bcd (4:6bcd)  	INCROM $12bcd, $12c05 +; gets some value based on the sprite in b and wd5d8 +; loads the sprites data if it doesn't already exist  Func_12c05: ; 12c05 (4:6c05)  	push hl  	push bc @@ -1475,23 +1480,24 @@ Func_12c05: ; 12c05 (4:6c05)  	ld c, a  	ld hl, wd5d8  	or a -	jr z, .asm_12c22 -.asm_12c15 +	jr z, .tryToAddSprite + +.findSpriteMatchLoop  	inc hl  	ld a, [hl]  	cp b -	jr z, .asm_12c3a +	jr z, .foundSpriteMatch  	inc hl  	ld a, [hli]  	add [hl]  	ld d, a  	inc hl  	dec c -	jr nz, .asm_12c15 -.asm_12c22 +	jr nz, .findSpriteMatchLoop +.tryToAddSprite  	ld a, [wd618]  	cp $10 -	jr nc, .asm_12c48 +	jr nc, .quitFail  	inc a  	ld [wd618], a  	inc hl @@ -1505,7 +1511,7 @@ Func_12c05: ; 12c05 (4:6c05)  	pop af  	ld [hl], a  	pop hl -.asm_12c3a +.foundSpriteMatch  	dec hl  	inc [hl]  	inc hl @@ -1513,15 +1519,15 @@ Func_12c05: ; 12c05 (4:6c05)  	ld a, [hli]  	add [hl]  	cp $81 -	jr nc, .asm_12c48 +	jr nc, .quitFail  	ld a, d  	or a -	jr .asm_12c4b -.asm_12c48 +	jr .quitSucceed +.quitFail  	debug_ret  	xor a  	scf -.asm_12c4b +.quitSucceed  	pop de  	pop bc  	pop hl @@ -1555,7 +1561,7 @@ Func_1344d: ; 1344d (4:744d)  	call PlaySong  	ldtx hl, DefeatedFiveOpponentsText  	call PrintScrollableText_NoTextBoxLabel -	call Func_3c96 +	call WaitForSongToFinish  	call ResumeSong  	ret  ; 0x13462 @@ -1577,9 +1583,16 @@ Func_13485: ; 13485 (4:7485)  	call PlaySong  	ldtx hl, ConsecutiveWinRecordIncreasedText  	call PrintScrollableText_NoTextBoxLabel -	call Func_3c96 +	call WaitForSongToFinish  	call ResumeSong  	ret  ; 0x134b1 -	INCROM $134b1, $14000 +	INCROM $134b1, $1372f + +INCLUDE "data/npc_map_data.asm" +INCLUDE "data/map_objects.asm" + +rept $119 +	db $ff +endr diff --git a/src/engine/bank07.asm b/src/engine/bank07.asm index 7a2d90a..45cc8b1 100644 --- a/src/engine/bank07.asm +++ b/src/engine/bank07.asm @@ -35,13 +35,13 @@ Func_1c056: ; 1c056 (7:4056)  	inc hl  	inc hl  	ld a, [hli] -	ld [wd0bb], a +	ld [wTempMap], a  	ld a, [hli] -	ld [wd0bc], a +	ld [wTempPlayerXCoord], a  	ld a, [hli] -	ld [wd0bd], a -	ld a, [wd334] -	ld [wd0be], a +	ld [wTempPlayerYCoord], a +	ld a, [wPlayerDirection] +	ld [wTempPlayerDirection], a  .asm_1c095  	pop de  	pop bc @@ -93,11 +93,11 @@ INCLUDE "data/map_headers.asm"  Func_1c440: ; 1c440 (7:4440)  	INCROM $1c440, $1c455 -Func_1c455: ; 1c455 (7:4455) +GetNPCDirection: ; 1c455 (7:4455)  	push hl -	ld a, [wd3aa] -	ld l, $4 -	call Func_39ad +	ld a, [wLoadedNPCTempIndex] +	ld l, LOADED_NPC_DIRECTION +	call GetItemInLoadedNPCIndex  	ld a, [hl]  	pop hl  	ret @@ -106,9 +106,9 @@ Func_1c461: ; 1c461 (7:4461)  	push hl  	push bc  	call Func_1c719 -	ld a, [wd3aa] -	ld l, $2 -	call Func_39ad +	ld a, [wLoadedNPCTempIndex] +	ld l, LOADED_NPC_COORD_X +	call GetItemInLoadedNPCIndex  	ld a, b  	ld [hli], a  	ld [hl], c @@ -119,23 +119,98 @@ Func_1c461: ; 1c461 (7:4461)  Func_1c477: ; 1c477 (7:4477)  	push hl -	ld a, [wd3aa] -	ld l, $2 -	call Func_39ad +	ld a, [wLoadedNPCTempIndex] +	ld l, LOADED_NPC_COORD_X +	call GetItemInLoadedNPCIndex  	ld a, [hli]  	ld b, a  	ld c, [hl]  	pop hl  	ret +; Loads NPC Sprite Data  Func_1c485: ; 1c485 (7:4485) -	INCROM $1c485, $1c50a +	push hl +	push bc +	push de +	xor a +	ld [wLoadedNPCTempIndex], a +	ld b, a +	ld c, LOADED_NPC_MAX +	ld hl, wLoadedNPCs +	ld de, LOADED_NPC_LENGTH +.findEmptyIndexLoop +	ld a, [hl] +	or a +	jr z, .foundEmptyIndex +	add hl, de +	inc b +	dec c +	jr nz, .findEmptyIndexLoop +	ld hl, wLoadedNPCs +	debug_ret +	jr .exit +.foundEmptyIndex +	ld a, b +	ld [wLoadedNPCTempIndex], a +	ld a, [wd3b3] +	farcall CreateSpriteAndAnimBufferEntry +	jr c, .exit +	ld a, [wLoadedNPCTempIndex] +	call GetLoadedNPCID +	push hl +	ld a, [wTempNPC] +	ld [hli], a +	ld a, [wWhichSprite] +	ld [hli], a +	ld a, [wLoadNPCXPos] +	ld [hli], a +	ld a, [wLoadNPCYPos] +	ld [hli], a +	ld a, [wLoadNPCDirection] +	ld [hli], a +	ld a, [wd3b2] +	ld [hli], a +	ld a, [wd3b1] +	ld [hli], a +	ld a, [wLoadNPCDirection] +	ld [hli], a +	call Func_1c58e +	call Func_1c5b9 +	ld hl, wd349 +	inc [hl] +	pop hl +	call Func_1c665 +	call Func_1c6e3 +	ld a, [wTempNPC] +	call Func_1c4fa +	jr nc, .exit +	ld a, $01 +	ld [wd3b8], a +.exit +	pop de +	pop bc +	pop hl +	ret + +Func_1c4fa: ; 1c4fa (7:44fa) +	cp NPC_RONALD1 +	jr z, .asm_1c508 +	cp NPC_RONALD2 +	jr z, .asm_1c508 +	cp NPC_RONALD3 +	jr z, .asm_1c508 +	or a +	ret +.asm_1c508 +	scf +	ret  Func_1c50a: ; 1c50a (7:450a)  	push hl  	call Func_1c719 -	ld a, [wd3aa] -	call Func_39a7 +	ld a, [wLoadedNPCTempIndex] +	call GetLoadedNPCID  	ld a, [hl]  	or a  	jr z, .asm_1c52c @@ -159,9 +234,9 @@ Func_1c50a: ; 1c50a (7:450a)  Func_1c52e: ; 1c52e (7:452e)  	push hl  	push af -	ld a, [wd3aa] -	ld l, $7 -	call Func_39ad +	ld a, [wLoadedNPCTempIndex] +	ld l, LOADED_NPC_FIELD_07 +	call GetItemInLoadedNPCIndex  	pop af  	ld [hl], a  	call Func_1c5e9 @@ -171,9 +246,9 @@ Func_1c52e: ; 1c52e (7:452e)  Func_1c53f: ; 1c53f (7:453f)  	push hl  	push bc -	ld a, [wd3aa] -	ld l, $4 -	call Func_39ad +	ld a, [wLoadedNPCTempIndex] +	ld l, LOADED_NPC_DIRECTION +	call GetItemInLoadedNPCIndex  	ld a, [hl]  	ld bc, $0003  	add hl, bc @@ -188,23 +263,23 @@ Func_1c53f: ; 1c53f (7:453f)  Func_1c557: ; 1c557 (7:4557)  	push bc  	ld c, a -	ld a, [wd3aa] +	ld a, [wLoadedNPCTempIndex]  	push af -	ld a, [wd3ab] +	ld a, [wTempNPC]  	push af  	ld a, c -	ld [wd3ab], a +	ld [wTempNPC], a  	ld c, $0 -	call Func_39c3 +	call FindLoadedNPC  	jr c, .asm_1c570  	call Func_1c53f  	ld c, a  .asm_1c570  	pop af -	ld [wd3ab], a +	ld [wTempNPC], a  	pop af -	ld [wd3aa], a +	ld [wLoadedNPCTempIndex], a  	ld a, c  	pop bc  	ret @@ -213,9 +288,9 @@ Func_1c57b: ; 1c57b (7:457b)  	push hl  	push bc  	push af -	ld a, [wd3aa] -	ld l, $6 -	call Func_39ad +	ld a, [wLoadedNPCTempIndex] +	ld l, LOADED_NPC_FIELD_06 +	call GetItemInLoadedNPCIndex  	pop af  	ld [hl], a  	call Func_1c58e @@ -224,13 +299,76 @@ Func_1c57b: ; 1c57b (7:457b)  	ret  Func_1c58e: ; 1c58e (7:458e) -	INCROM $1c58e, $1c5e9 +	push hl +	push bc +	ld a, [wWhichSprite] +	push af +	ld a, [wLoadedNPCTempIndex] +	call GetLoadedNPCID +	ld a, [hli] +	or a +	jr z, .quit +	ld a, [hl] +	ld [wWhichSprite], a +	ld bc, LOADED_NPC_FIELD_06 - LOADED_NPC_SPRITE +	add hl, bc +	ld a, [hld] +	bit 4, [hl] +	jr nz, .asm_1c5ae +	dec hl +	add [hl] +	inc hl +.asm_1c5ae +	farcall Func_12ab5 +.quit +	pop af +	ld [wWhichSprite], a +	pop bc +	pop hl +	ret +; 0x1c5b9 + +Func_1c5b9: ; 1c5b9 (7:45b9) +	INCROM $1c5b9, $1c5e9  Func_1c5e9: ; 1c5e9 (7:45e9) -	INCROM $1c5e9, $1c610 +	push hl +	push bc +	ld a, [wLoadedNPCTempIndex] +	ld l, LOADED_NPC_FIELD_07 +	call GetItemInLoadedNPCIndex +	ld a, [hl] +	ld bc, $fffd +	add hl, bc +	ld [hl], a +	call Func_1c58e +	pop bc +	pop hl +	ret +; 0x1c5ff + +	INCROM $1c5ff, $1c610  Func_1c610: ; 1c610 (7:4610) -	INCROM $1c610, $1c6f8 +	INCROM $1c610, $1c665 + +Func_1c665: ; 1c665 (7:4665) +	INCROM $1c665, $1c6e3 + +Func_1c6e3: ; 1c6e3 (7:46e3) +	push hl +	push bc +	ld a, [wLoadedNPCTempIndex] +	ld l, LOADED_NPC_COORD_X +	call GetItemInLoadedNPCIndex +	ld a, [hli] +	ld b, a +	ld c, [hl] +	ld a, $40 +	call SetPermissionOfMapPosition +	pop bc +	pop hl +	ret  Func_1c6f8: ; 1c6f8 (7:46f8)  	INCROM $1c6f8, $1c719 @@ -238,9 +376,9 @@ Func_1c6f8: ; 1c6f8 (7:46f8)  Func_1c719: ; 1c719 (7:4719)  	push hl  	push bc -	ld a, [wd3aa] -	ld l, $2 -	call Func_39ad +	ld a, [wLoadedNPCTempIndex] +	ld l, LOADED_NPC_COORD_X +	call GetItemInLoadedNPCIndex  	ld a, [hli]  	ld b, a  	ld c, [hl] @@ -250,36 +388,85 @@ Func_1c719: ; 1c719 (7:4719)  	pop hl  	ret -Func_1c72e: ; 1c72e (7:472e) -	INCROM $1c72e, $1c768 +; Find NPC at coords b (x) c (y) +FindNPCAtLocation: ; 1c72e (7:472e) +	push hl +	push bc +	push de +	ld d, $00 +	ld e, LOADED_NPC_MAX +	ld hl, wLoadedNPC1CoordX +.findValidNPCLoop +	ld a, [hli] +	cp b +	jr nz, .noValidNPCHere +	ld a, [hl] +	cp c +	jr nz, .noValidNPCHere +	push hl +	inc hl +	inc hl +	bit 6, [hl] +	pop hl +	jr nz, .noValidNPCHere +	push hl +	dec hl +	dec hl +	ld a, [hl] +	or a +	pop hl +	jr nz, .foundNPCExit +.noValidNPCHere +	ld a, LOADED_NPC_LENGTH - 1 +	add l +	ld l, a +	ld a, h +	adc $00 +	ld h, a +	inc d +	dec e +	jr nz, .findValidNPCLoop +	scf +	jr .exit +.foundNPCExit +	ld a, d +	ld [wLoadedNPCTempIndex], a +	or a +.exit +	pop de +	pop bc +	pop hl +	ret -Func_1c768: ; 1c768 (7:4768) +; Probably needs a new name. Loads data for NPC that the next Script is for +; Sets direction, Loads Image data for it, loads name, and more +SetNewScriptNPC: ; 1c768 (7:4768)  	push hl -	ld a, [wd3aa] -	ld l, $04 -	call Func_39ad -	ld a, [wd334] +	ld a, [wLoadedNPCTempIndex] +	ld l, LOADED_NPC_DIRECTION +	call GetItemInLoadedNPCIndex +	ld a, [wPlayerDirection]  	xor $02  	ld [hl], a  	call Func_1c58e  	ld a, $02  	farcall Func_c29b -	ld a, [wd3aa] -	call Func_39a7 +	ld a, [wLoadedNPCTempIndex] +	call GetLoadedNPCID  	ld a, [hl] -	farcall Func_1187d +	farcall GetNPCNameAndScript  	pop hl  	ret  Func_1c78d: ; 1c78d (7:478d)  	push hl -	ld a, [wd3aa] -	ld l, $5 -	call Func_39ad +	ld a, [wLoadedNPCTempIndex] +	ld l, LOADED_NPC_FIELD_05 +	call GetItemInLoadedNPCIndex  	set 5, [hl] -	ld a, [wd3aa] -	ld l, $8 -	call Func_39ad +	ld a, [wLoadedNPCTempIndex] +	ld l, LOADED_NPC_FIELD_08 +	call GetItemInLoadedNPCIndex  	xor a  	ld [hli], a  .asm_1c7a2 @@ -319,9 +506,9 @@ Func_1c78d: ; 1c78d (7:478d)  	jr .asm_1c7a2  .asm_1c7d2 -	ld a, [wd3aa] -	ld l, $5 -	call Func_39ad +	ld a, [wLoadedNPCTempIndex] +	ld l, LOADED_NPC_FIELD_05 +	call GetItemInLoadedNPCIndex  	res 5, [hl]  .asm_1c7dc @@ -429,7 +616,7 @@ Func_1c8ef: ; 1c8ef (7:48ef)  	ld c, a  	pop hl -	call PushBC_Ret ; call bc +	call CallBC  .return  	pop de  	pop bc @@ -451,7 +638,7 @@ Func_1c94a:  	dec c  	jr nz, .loop  	ld a, [hli] -	farcall Func_1299f +	farcall CreateSpriteAndAnimBufferEntry  	ld a, [wWhichSprite]  	ld [wAnimationQueue], a ; push an animation to the queue  	xor a @@ -887,7 +1074,7 @@ Credits_1d6ad: ; 1d6ad (7:56ad)  	ld a, [wd633]  	cp $ff  	jr nz, .asm_1d6c8 -	call Func_3c96 +	call WaitForSongToFinish  	ld a, $8  	farcall $4, $6863  	ld a, MUSIC_STOP diff --git a/src/engine/bank1c.asm b/src/engine/bank1c.asm index 7b5cbc5..7fa5bf4 100644 --- a/src/engine/bank1c.asm +++ b/src/engine/bank1c.asm @@ -4,7 +4,7 @@ Func_70000: ; 70000 (1c:4000)  	ret nz  	ld b, $1  	ld a, $22 -	farcall CheckIfEventFlagSet +	farcall GetEventFlagValue  	or a  	jr z, .asm_70013  	ld b, $2 @@ -294,7 +294,7 @@ Func_70214: ; 70214 (1c:4214)  	ret nz  	ld hl, Unknown_7024a  	ld a, $10 -	farcall CheckIfEventFlagSet +	farcall GetEventFlagValue  	ld c, $8  .asm_70227  	push bc diff --git a/src/engine/bank20.asm b/src/engine/bank20.asm index d2acf6a..b656f90 100644 --- a/src/engine/bank20.asm +++ b/src/engine/bank20.asm @@ -30,12 +30,12 @@ Func_80077: ; 80077 (20:4077)  	ld [hl], e  	inc hl  	ld [hl], d -	call $43b9 -	ld a, [wd4c6] +	call Func_803b9 +	ld a, [wTempPointerBank]  	ld [wd23d], a  	ld de, wd23e  	ld bc, $0006 -	call Func_3bf5 +	call CopyBankedDataToDE  	ld l, e  	ld h, d  	ld a, [hli] @@ -48,14 +48,163 @@ Func_80077: ; 80077 (20:4077)  	ld [wd23b], a  	ld a, [hli]  	ld [wd23c], a -	call $40bd +	call Func_800bd  	pop de  	pop bc  	pop hl  	ret -; 0x800bd -	INCROM $800bd, $801a1 +Func_800bd: ; 800bd (20:40bd) +	push hl +	push bc +	push de +	ld a, [wTempPointer] +	add $05 +	ld e, a +	ld a, [wTempPointer + 1] +	adc $00 +	ld d, a +	ld b, $c0 +	call Func_08bf +	ld a, [wd4c2] +	ld e, a +	ld a, [wd4c3] +	ld d, a +	call Func_800e0 +	pop de +	pop bc +	pop hl +	ret + +Func_800e0: ; 800e0 (20:40e0) +	push hl +	ld hl, $d28e +	ld a, [wd12f] +	ld [hl], a +	ld a, [wd23c] +	or a +	jr z, .asm_800f0 +	sla [hl] +.asm_800f0 +	ld c, $40 +	ld hl, wd23e +	xor a +.asm_800f6 +	ld [hli], a +	dec c +	jr nz, .asm_800f6 +	ld a, [wd130] +	ld c, a +.asm_800fe +	push bc +	push de +	ld b, $00 +	ld a, [$d28e] +	ld c, a +	ld de, wd23e +	call Func_3be4 +	ld a, [wd12f] +	ld b, a +	pop de +	push de +	ld hl, wd23e +	call Func_8016e +	ld a, [wConsole] +	cp $02 +	jr nz, .asm_8013b +	call BankswitchVRAM1 +	ld a, [wd12f] +	ld c, a +	ld b, $00 +	ld hl, wd23e +	add hl, bc +	pop de +	push de +	ld a, [wd12f] +	ld b, a +	call Func_80148 +	call Func_8016e +	call BankswitchVRAM0 +.asm_8013b +	pop de +	ld hl, $20 +	add hl, de +	ld e, l +	ld d, h +	pop bc +	dec c +	jr nz, .asm_800fe +	pop hl +	ret +; 0x80148 + +Func_80148: ; 80148 (20:4148) +	ld a, [$d291] +	or a +	ret z +	ld a, [$d23c] +	or a +	jr z, .asm_80162 +	push hl +	push bc +.asm_80155 +	push bc +	ld a, [$d291] +	add [hl] +	ld [hli], a +	pop bc +	dec b +	jr nz, .asm_80155 +	pop bc +	pop hl +	ret +.asm_80162 +	push hl +	push bc +	ld a, [$d291] +.asm_80167 +	ld [hli], a +	dec b +	jr nz, .asm_80167 +	pop bc +	pop hl +	ret + +Func_8016e: ; 8016e (20:416e) +	ld a, [wd292] +	or a +	jp z, SafeCopyDataHLtoDE +	push hl +	push bc +	push de +	ldh a, [hBankSRAM] +	push af +	ld a, $01 +	call BankswitchSRAM +	push hl +	ld hl, $800 +	ldh a, [hBankVRAM] +	or a +	jr z, .asm_8018c +	ld hl, $c00 +.asm_8018c +	add hl, de +	ld e, l +	ld d, h +	pop hl +.asm_80190 +	ld a, [hli] +	ld [de], a +	inc de +	dec b +	jr nz, .asm_80190 +	pop af +	call BankswitchSRAM +	call DisableSRAM +	pop de +	pop bc +	pop hl +	ret  Func_801a1: ; 801a1 (20:41a1)  	push hl @@ -108,6 +257,7 @@ Func_801a1: ; 801a1 (20:41a1)  	pop hl  	ret +; Clears the first x800 bytes of S1:a000  Func_801f1: ; 801f1 (20:41f1)  	push hl  	push bc @@ -118,7 +268,7 @@ Func_801f1: ; 801f1 (20:41f1)  	ld hl, $a000  	ld bc, $0800  	xor a -	call $3c10 +	call FillMemoryWithA  	pop af  	call BankswitchSRAM  	call DisableSRAM @@ -126,7 +276,7 @@ Func_801f1: ; 801f1 (20:41f1)  	pop hl  	ret -Func_8020f: ; 8020f (20:420f) +GetMapDataPointer: ; 8020f (20:420f)  	push bc  	push af  	ld bc, MapDataPointers @@ -148,12 +298,12 @@ Func_8020f: ; 8020f (20:420f)  Func_80229: ; 80229 (20:4229)  	ld a, [hli] -	ld [wd4c4], a +	ld [wTempPointer], a  	ld a, [hli] -	ld [wd4c5], a +	ld [wTempPointer + 1], a  	ld a, [hli]  	add $20 -	ld [wd4c6], a +	ld [wTempPointerBank], a  	ret  ; 0x80238 @@ -162,7 +312,7 @@ Func_80229: ; 80229 (20:4229)  Func_8025b: ; 8025b (20:425b)  	push hl  	ld l, $4 -	call Func_8020f +	call GetMapDataPointer  	call Func_80229  	ld a, [hl]  	push af @@ -192,7 +342,7 @@ asm_8027c  	ld e, [hl]  	inc hl  	ld d, [hl] -	ld hl, wd4c4 +	ld hl, wTempPointer  	ld a, [hli]  	ld h, [hl]  	ld l, a @@ -234,7 +384,19 @@ Func_802bb: ; 802bb (20:42bb)  	ret  ; 0x802d4 -	INCROM $802d4, $80418 +	INCROM $802d4, $803b9 + +Func_803b9: ; 803b9 (20:43b9) +	ld l, $00 +	ld a, [wd131] +	call GetMapDataPointer +	call Func_80229 +	ld a, [hl] +	ld [$d239], a +	ret +; 0x803c9 + +	INCROM $803c9, $80418  Func_80418: ; 80418 (20:4418)  	INCROM $80418, $80480 @@ -246,13 +408,37 @@ Func_804d8: ; 804d8 (20:44d8)  	INCROM $804d8, $80b7a  Func_80b7a: ; 80b7a (20:4b7a) -	INCROM $80b7a, $80ba4 +	INCROM $80b7a, $80b89 + +Func_80b89: ; 80b89 (20:4b89) +	push hl +	push bc +	push af +	ld c, a +	ld a, $01 +	ld [$d292], a +	ld b, $00 +	ld hl, $d323 +	add hl, bc +	ld a, [hl] +	or a +	jr z, .asm_80ba0 +	ld a, c +	call Func_80baa +.asm_80ba0 +	pop af +	pop bc +	pop hl +	ret  Func_80ba4: ; 80ba4 (20:4ba4)  	push af  	xor a  	ld [wd292], a  	pop af +;	Fallthrough + +Func_80baa: ; 80baa (20:4baa)  	push hl  	push bc  	push de @@ -332,5 +518,25 @@ Func_80ba4: ; 80ba4 (20:4ba4)  Unknown_80e5a: ; 80e5a (20:4e5a)  	INCROM $80e5a, $80e5d +; might be closer to "screen specific data" than map data  MapDataPointers: ; 80e5d (20:4e5d) -	INCROM $80e5d, $84000 +	dw MapDataPointers_80e67 +	dw MapDataPointers_8100f +	dw MapDataPointers_8116b +	dw MapDataPointers_81333 +	dw MapDataPointers_81697 + +MapDataPointers_80e67: ; 80e67 (20:4e67) +	INCROM $80e67, $8100f + +MapDataPointers_8100f: ; 8100f (20:500f) +	INCROM $8100f, $8116b + +MapDataPointers_8116b: ; 8116b (20:516b) +	INCROM $8116b, $81333 + +MapDataPointers_81333: ; 81333 (20:5333) +	INCROM $81333, $81697 + +MapDataPointers_81697: ; 81697 (20:5697) +	INCROM $81697, $84000 diff --git a/src/engine/home.asm b/src/engine/home.asm index 545995a..478aa39 100644 --- a/src/engine/home.asm +++ b/src/engine/home.asm @@ -1552,7 +1552,7 @@ Func_08bf: ; 08bf (0:08bf)  	ld [hli], a  	ld [hl], b  	inc hl -	ld [hli], a +	ld [hli], a ; 0  	ld [hl], $ef  	ld h, b  	ld l, $0 @@ -10800,8 +10800,8 @@ GameEvent_Credits: ; 3911 (0:3911)  	ret  Func_3917: ; 3917 (0:3917) -	ld a, $22 -	farcall CheckIfEventFlagSet +	ld a, EVENT_RECEIVED_LEGENDARY_CARD +	farcall GetEventFlagValue  	call EnableSRAM  	ld [s0a00a], a  	call DisableSRAM @@ -10865,7 +10865,7 @@ GetPermissionByteOfMapPosition: ; 3946 (0:3946)  Func_395a: ; 395a (0:395a)  	ldh a, [hBankROM]  	push af -	ld a, [wd4c6] +	ld a, [wTempPointerBank]  	call BankswitchROM  	call CopyGfxData  	pop af @@ -10875,8 +10875,8 @@ Func_395a: ; 395a (0:395a)  Unknown_396b: ; 396b (0:396b)  	db $00, -$01, $01, $00, $00, $01, -$01, $00 -; Movement offsets for scripted movements -ScriptedMovementOffsetTable: ; 3973 (0:3973) +; Movement offsets for player movements +PlayerMovementOffsetTable: ; 3973 (0:3973)  	db  0, -2 ; move 2 tiles up  	db  2,  0 ; move 2 tiles right  	db  0,  2 ; move 2 tiles down @@ -10908,15 +10908,16 @@ Func_3997: ; 3997 (0:3997)  	call BankswitchROM  	ret -Func_39a7: ; 39a7 (0:39a7) -	ld l, $0 -	call Func_39ad +; returns in hl a pointer to the first element for the a'th NPC +GetLoadedNPCID: ; 39a7 (0:39a7) +	ld l, LOADED_NPC_ID +	call GetItemInLoadedNPCIndex  	ret -; return hl = wd34a + a * $c + l, with a < $8 -Func_39ad: ; 39ad (0:39ad) +; return in hl a pointer to the a'th items element l +GetItemInLoadedNPCIndex: ; 39ad (0:39ad)  	push bc -	cp $8 +	cp LOADED_NPC_MAX  	jr c, .asm_39b4  	debug_ret  	xor a @@ -10929,36 +10930,39 @@ Func_39ad: ; 39ad (0:39ad)  	add l  	ld l, a  	ld h, $0 -	ld bc, wd34a +	ld bc, wLoadedNPCs  	add hl, bc  	pop bc  	ret -Func_39c3: ; 39c3 (0:39c3) +; Finds the index on wLoadedNPCs table of the npc in wTempNPC +; returns it in a and puts it into wLoadedNPCTempIndex +; c flag set if no npc found +FindLoadedNPC: ; 39c3 (0:39c3)  	push hl  	push bc  	push de  	xor a -	ld [wd3aa], a +	ld [wLoadedNPCTempIndex], a  	ld b, a -	ld c, $8 -	ld de, $000c -	ld hl, wd34a -	ld a, [wd3ab] -.asm_39d6 +	ld c, LOADED_NPC_MAX +	ld de, LOADED_NPC_LENGTH +	ld hl, wLoadedNPCs +	ld a, [wTempNPC] +.findNPCLoop  	cp [hl] -	jr z, .asm_39e1 +	jr z, .foundNPCMatch  	add hl, de  	inc b  	dec c -	jr nz, .asm_39d6 +	jr nz, .findNPCLoop  	scf -	jr z, .asm_39e6 -.asm_39e1 +	jr z, .exit +.foundNPCMatch  	ld a, b -	ld [wd3aa], a +	ld [wLoadedNPCTempIndex], a  	or a -.asm_39e6 +.exit  	pop de  	pop bc  	pop hl @@ -11055,65 +11059,68 @@ Func_3a4f: ; 3a4f (0:3a4f)  	ret  ; 0x3a5e -Func_3a5e: ; 3a5e (0:3a5e) +HandleMoveModeAPress: ; 3a5e (0:3a5e)  	ldh a, [hBankROM]  	push af -	ld l, $4 -	call Func_3abd -	jr nc, .asm_3ab3 -	ld a, BANK(Func_c653) +	ld l, MAP_SCRIPT_OBJECTS +	call GetMapScriptPointer +	jr nc, .handleSecondAPressScript +	ld a, BANK(FindPlayerMovementFromDirection)  	call BankswitchROM -	call Func_c653 -	ld a, $4 +	call FindPlayerMovementFromDirection +	ld a, BANK(MapScripts)  	call BankswitchROM -	ld a, [wd334] +	ld a, [wPlayerDirection]  	ld d, a -.asm_3a79 +.findAPressMatchLoop  	ld a, [hli]  	bit 7, a -	jr nz, .asm_3ab3 +	jr nz, .handleSecondAPressScript  	push bc  	push hl  	cp d -	jr nz, .asm_3aab +	jr nz, .noMatch  	ld a, [hli]  	cp b -	jr nz, .asm_3aab +	jr nz, .noMatch  	ld a, [hli]  	cp c -	jr nz, .asm_3aab +	jr nz, .noMatch  	ld a, [hli] -	ld [wd0c6], a +	ld [wNextScript], a  	ld a, [hli] -	ld [wd0c7], a +	ld [wNextScript+1], a  	ld a, [hli] -	ld [wd0ca], a +	ld [wDefaultObjectText], a  	ld a, [hli] -	ld [wd0cb], a +	ld [wDefaultObjectText+1], a  	ld a, [hli] -	ld [wd0c8], a +	ld [wCurrentNPCNameTx], a  	ld a, [hli] -	ld [wd0c9], a +	ld [wCurrentNPCNameTx+1], a  	pop hl  	pop bc  	pop af  	call BankswitchROM  	scf  	ret -.asm_3aab +.noMatch  	pop hl -	ld bc, $0008 +	ld bc, MAP_OBJECT_SIZE - 1  	add hl, bc  	pop bc -	jr .asm_3a79 -.asm_3ab3 +	jr .findAPressMatchLoop +.handleSecondAPressScript  	pop af  	call BankswitchROM -	ld l, $6 -	call $49c2 +	ld l, MAP_SCRIPT_PRESSED_A +	call CallMapScriptPointerIfExists  	ret -Func_3abd: ; 3abd (0:3abd) +; returns a map script pointer in hl given +; current map in wCurMap and which sub-script in l +; sets c if pointer is found +GetMapScriptPointer: ; 3abd (0:3abd)  	push bc  	push hl  	ld a, [wCurMap] @@ -11152,9 +11159,9 @@ Func_3ae8: ; 3ae8 (0:3ae8)  	ret  ; 0x3aed -; finds an OWScript from the first byte and puts the next two bytes (usually arguments?) into cb +; finds a Script from the first byte and puts the next two bytes (usually arguments?) into cb  RunOverworldScript: ; 3aed (0:3aed) -	ld hl, wOWScriptPointer +	ld hl, wScriptPointer  	ld a, [hli]  	ld h, [hl]  	ld l, a @@ -11321,7 +11328,7 @@ ResetDoFrameFunction: ; 3bdb (0:3bdb)  Func_3be4: ; 3be4 (0:3be4)  	ldh a, [hBankROM]  	push af -	ld a, [wd4c6] +	ld a, [wTempPointerBank]  	call BankswitchROM  	call Func_08de  	pop af @@ -11329,15 +11336,16 @@ Func_3be4: ; 3be4 (0:3be4)  	ret  ; 0x3bf5 -Func_3bf5: ; 3bf5 (0:3bf5) +; Copies bc bytes from [wTempPointer] to de +CopyBankedDataToDE: ; 3bf5 (0:3bf5)  	ldh a, [hBankROM]  	push af  	push hl -	ld a, [wd4c6] +	ld a, [wTempPointerBank]  	call BankswitchROM -	ld a, [wd4c4] +	ld a, [wTempPointer]  	ld l, a -	ld a, [wd4c5] +	ld a, [wTempPointer + 1]  	ld h, a  	call CopyDataHLtoDE_SaveRegisters  	pop hl @@ -11407,9 +11415,8 @@ CallHL2: ; 3c45 (0:3c45)  	jp hl  ; 0x3c46 -PushBC_Ret: ; 3c46 (0:3c46) -	push bc -	ret +CallBC: ; 3c46 (0:3c46) +	retbc  ; 0x3c48  DoFrameIfLCDEnabled: ; 3c48 (0:3c48) @@ -11460,7 +11467,7 @@ DivideBCbyDE: ; 3c5a (0:3c5a)  	jr nz, .asm_3c63  	ret -Func_3c83: ; 3c83 (0:3c83) +CallPlaySong: ; 3c83 (0:3c83)  	call PlaySong  	ret  ; 0x3c87 @@ -11470,18 +11477,19 @@ Func_3c87: ; 3c87 (0:3c87)  	call PauseSong  	pop af  	call PlaySong -	call Func_3c96 +	call WaitForSongToFinish  	call ResumeSong  	ret  ; 0x3c96 -Func_3c96: ; 3c96 (0:3c96) +WaitForSongToFinish: ; 3c96 (0:3c96)  	call DoFrameIfLCDEnabled  	call AssertSongFinished  	or a -	jr nz, Func_3c96 +	jr nz, WaitForSongToFinish  	ret +; clear [SOMETHING] - something relating to animations  Func_3ca0: ; 3ca0 (0:3ca0)  	xor a  	ld [wd5d7], a @@ -11634,11 +11642,11 @@ Func_3d72: ; 3d72 (0:3d72)  	xor a  	jr .asm_3da1  .asm_3d84 -	ld a, [wd4c4] +	ld a, [wTempPointer]  	ld l, a -	ld a, [wd4c5] +	ld a, [wTempPointer + 1]  	ld h, a -	ld a, [wd4c6] +	ld a, [wTempPointerBank]  	call BankswitchROM  	ld a, [hli]  	push af @@ -11669,7 +11677,7 @@ Func_3d72: ; 3d72 (0:3d72)  	call BankswitchROM  	ret -Func_3db7: ; 3db7 (0:3db7) +GetFirstSpriteAnimBufferProperty: ; 3db7 (0:3db7)  	push bc  	ld c, SPRITE_ANIM_FIELD_00  	call GetSpriteAnimBufferProperty | 
