Conflicts:
	engine/town_map.asm
This commit is contained in:
dannye 2015-07-14 00:58:09 -05:00
commit e25a7148d0
43 changed files with 1136 additions and 847 deletions

View file

@ -12,3 +12,9 @@ ITEM_NAME EQU 4
PLAYEROT_NAME EQU 5
ENEMYOT_NAME EQU 6
TRAINER_NAME EQU 7
INIT_ENEMYOT_LIST EQU 1
INIT_BAG_ITEM_LIST EQU 2
INIT_OTHER_ITEM_LIST EQU 3
INIT_PLAYEROT_LIST EQU 4
INIT_MON_LIST EQU 5

View file

@ -58,6 +58,57 @@ TRADE_CANCEL_MENU EQU 5
HEAL_CANCEL_MENU EQU 6
NO_YES_MENU EQU 7
; menu exit method constants for list menus and the buy/sell/quit menu
CHOSE_MENU_ITEM EQU 1 ; pressed A
CANCELLED_MENU EQU 2 ; pressed B
; menu exit method constants for two-option menus
CHOSE_FIRST_ITEM EQU 1
CHOSE_SECOND_ITEM EQU 2
; move mon constants
BOX_TO_PARTY EQU 0
PARTY_TO_BOX EQU 1
DAYCARE_TO_PARTY EQU 2
PARTY_TO_DAYCARE EQU 3
; emotion bubbles
EXCLAMATION_BUBBLE EQU 0
QUESTION_BUBBLE EQU 1
SMILE_BUBBLE EQU 2
; slot symbols
SLOTS7 EQU $0200
SLOTSBAR EQU $0604
SLOTSCHERRY EQU $0A08
SLOTSFISH EQU $0E0C
SLOTSBIRD EQU $1210
SLOTSMOUSE EQU $1614
; party menu types
NORMAL_PARTY_MENU EQU 0
USE_ITEM_PARTY_MENU EQU 1
BATTLE_PARTY_MENU EQU 2
TMHM_PARTY_MENU EQU 3
SWAP_MONS_PARTY_MENU EQU 4
EVO_STONE_PARTY_MENU EQU 5
; party memu message IDs
ANTIDOTE_MSG EQU $F0
BURN_HEAL_MSG EQU $F1
ICE_HEAL_MSG EQU $F2
AWAKENING_MSG EQU $F3
PARALYZ_HEAL_MSG EQU $F4
POTION_MSG EQU $F5
FULL_HEAL_MSG EQU $F6
REVIVE_MSG EQU $F7
RARE_CANDY_MSG EQU $F8
; naming screen types
NAME_PLAYER_SCREEN EQU 0
NAME_RIVAL_SCREEN EQU 1
NAME_MON_SCREEN EQU 2
; serial
ESTABLISH_CONNECTION_WITH_INTERNAL_CLOCK EQU $01

View file

@ -77,7 +77,7 @@ DisplayCreditsMon: ; 740cb (1d:40cb)
call Func_74164
call FillMiddleOfScreenWithWhite
ld a,$FC
ld [$FF47],a
ld [rBGP],a
ld bc,7
.next
call Func_74140
@ -94,7 +94,7 @@ DisplayCreditsMon: ; 740cb (1d:40cb)
xor a
ld [hWY],a
ld a,$C0
ld [$FF47],a
ld [rBGP],a
ret
INCLUDE "data/credit_mons.asm"
@ -133,7 +133,7 @@ Func_74164: ; 74164 (1d:4164)
ld a, l
ld [H_AUTOBGTRANSFERDEST], a
ld a, h
ld [$ffbd], a
ld [H_AUTOBGTRANSFERDEST + 1], a
ld a, $1
ld [H_AUTOBGTRANSFERENABLED], a
jp Delay3

View file

@ -336,14 +336,14 @@ LoadAnimationTileset: ; 781d2 (1e:41d2)
ld d,0
add hl,de
ld a,[hli]
ld [wd07d],a ; number of tiles
ld [wTempTilesetNumTiles],a ; number of tiles
ld a,[hli]
ld e,a
ld a,[hl]
ld d,a ; de = address of tileset
ld hl,vSprites + $310
ld b, BANK(AnimationTileset1) ; ROM bank
ld a,[wd07d]
ld a,[wTempTilesetNumTiles]
ld c,a ; number of tiles
jp CopyVideoData ; load tileset
@ -835,9 +835,9 @@ DoRockSlideSpecialEffects: ; 78fd9 (1e:4fd9)
; if the subaninmation counter is between 8 and 11, shake the screen horizontally and vertically
.shakeScreen
ld b,1
predef Func_48125 ; shake horizontally
predef PredefShakeScreenHorizontally ; shake horizontally
ld b,1
predef_jump Func_480ff ; shake vertically
predef_jump PredefShakeScreenVertically ; shake vertically
FlashScreenEveryEightFrameBlocks: ; 78ff7 (1e:4ff7)
ld a,[W_SUBANIMCOUNTER]
@ -1225,14 +1225,14 @@ SetAnimationBGPalette: ; 791fc (1e:51fc)
ld b, $5
AnimationShakeScreenVertically: ; 79209 (1e:5209)
predef_jump Func_480ff
predef_jump PredefShakeScreenVertically
AnimationShakeScreen: ; 7920e (1e:520e)
; Shakes the screen for a while. Used in Earthquake/Fissure/etc. animations.
ld b, $8
AnimationShakeScreenHorizontallyFast: ; 79210 (1e:5210)
predef_jump Func_48125
predef_jump PredefShakeScreenHorizontally
AnimationWaterDropletsEverywhere: ; 79215 (1e:5215)
; Draws water droplets all over the screen and makes them
@ -1292,12 +1292,12 @@ AnimationSlideMonUp: ; 7927a (1e:527a)
ld c, $7
ld a, [H_WHOSETURN]
and a
ld hl, wTileMap + $79
ld de, wTileMap + $65
hlCoord 1, 6
deCoord 1, 5
ld a, $30
jr z, .asm_79291
ld hl, wTileMap + $20
ld de, wTileMap + $c
hlCoord 12, 1
deCoord 12, 0
ld a, $ff
.asm_79291
ld [wd09f], a
@ -1345,16 +1345,16 @@ _AnimationSlideMonUp: ; 792bf (1e:52bf)
call CopyData
pop de
pop hl
ld bc, $0028
ld bc, SCREEN_WIDTH * 2
add hl, bc
pop bc
dec b
jr nz, .asm_792c4
ld a, [H_WHOSETURN]
and a
ld hl, wTileMap + $dd
hlCoord 1, 11
jr z, .asm_792e2
ld hl, wTileMap + $84
hlCoord 12, 6
.asm_792e2
ld a, [wd09f]
inc a
@ -1513,11 +1513,11 @@ AnimationShakeBackAndForth: ; 793b1 (1e:53b1)
; The mon's sprite disappears after this animation.
ld a, [H_WHOSETURN]
and a
ld hl, wTileMap + $64
ld de, wTileMap + $66
hlCoord 0, 5
deCoord 2, 5
jr z, .asm_793c2
ld hl, wTileMap + $b
ld de, wTileMap + $d
hlCoord 11, 0
deCoord 13, 0
.asm_793c2
xor a
@ -2061,23 +2061,24 @@ CopySlowbroSpriteData: ; 7973f (1e:573f)
ld a, BANK(SlowbroSprite)
jp FarCopyData2
Func_79747: ; 79747 (1e:5747)
HideSubstituteShowMonAnim: ; 79747 (1e:5747)
ld a, [H_WHOSETURN]
and a
ld hl, wccf7
ld hl, wPlayerMonMinimized
ld a, [W_PLAYERBATTSTATUS2]
jr z, .asm_79758
ld hl, wccf3
jr z, .next1
ld hl, wEnemyMonMinimized
ld a, [W_ENEMYBATTSTATUS2]
.asm_79758
.next1
push hl
bit 4, a
jr nz, .asm_79762
; if the substitute broke, slide it down, else slide it offscreen horizontally
bit HasSubstituteUp, a
jr nz, .substituteStillUp
call AnimationSlideMonDown
jr .asm_79765
.asm_79762
jr .next2
.substituteStillUp
call AnimationSlideMonOut
.asm_79765
.next2
pop hl
ld a, [hl]
and a
@ -2085,7 +2086,7 @@ Func_79747: ; 79747 (1e:5747)
call AnimationFlashMonPic
jp AnimationShowMonPic
Func_79771: ; 79771 (1e:5771)
ReshowSubstituteAnim: ; 79771 (1e:5771)
call AnimationSlideMonOut
call AnimationSubstitute
jp AnimationShowMonPic
@ -2644,16 +2645,16 @@ Unknown_79c50: ; 79c50 (1e:5c50)
AnimationLeavesFalling: ; 79c74 (1e:5c74)
; Makes leaves float down from the top of the screen. This is used
; in Razor Leaf's animation.
ld a, [$ff48]
ld a, [rOBP0]
push af
ld a, [wcc79]
ld [$ff48], a
ld [rOBP0], a
ld d, $37
ld a, $3
ld [W_SUBANIMTRANSFORM], a
call Func_79c97
pop af
ld [$ff48], a
ld [rOBP0], a
ret
AnimationPetalsFalling: ; 79c8a (1e:5c8a)
@ -2870,7 +2871,7 @@ Func_79de9: ; 79de9 (1e:5de9)
Func_79e0d: ; 79e0d (1e:5e0d)
ld a, h
ld [$ffbd], a
ld [H_AUTOBGTRANSFERDEST + 1], a
ld a, l
ld [H_AUTOBGTRANSFERDEST], a
jp Delay3

View file

@ -53,29 +53,29 @@ FormatMovesString: ; 39b87 (e:5b87)
; XXX this is called in a few places, but it doesn't appear to do anything useful
InitList: ; 39bd5 (e:5bd5)
ld a, [wd11b]
cp $1
ld a, [wInitListType]
cp INIT_ENEMYOT_LIST
jr nz, .notEnemy
ld hl, wEnemyPartyCount
ld de, wEnemyMonOT
ld a, ENEMYOT_NAME
jr .done
.notEnemy
cp $4
cp INIT_PLAYEROT_LIST
jr nz, .notPlayer
ld hl, wPartyCount
ld de, wPartyMonOT
ld a, PLAYEROT_NAME
jr .done
.notPlayer
cp $5
cp INIT_MON_LIST
jr nz, .notMonster
ld hl, wStringBuffer2 + 11
ld de, MonsterNames
ld a, MONSTER_NAME
jr .done
.notMonster
cp $2
cp INIT_BAG_ITEM_LIST
jr nz, .notBag
ld hl, wNumBagItems
ld de, ItemNames

View file

@ -848,7 +848,7 @@ FaintEnemyPokemon: ; 0x3c567
ld [hl], a
ld [W_ENEMYDISABLEDMOVE], a
ld [wEnemyDisabledMoveNumber], a
ld [wccf3], a
ld [wEnemyMonMinimized], a
ld hl, wPlayerUsedMove
ld [hli], a
ld [hl], a
@ -1142,8 +1142,8 @@ DoUseNextMonDialogue: ; 3c79b (f:479b)
ld a, TWO_OPTION_MENU
ld [wTextBoxID], a
call DisplayTextBoxID
ld a, [wd12e]
cp $2 ; did the player choose NO?
ld a, [wMenuExitMethod]
cp CHOSE_SECOND_ITEM ; did the player choose NO?
jr z, .tryRunning ; if the player chose NO, try running
and a ; reset carry
ret
@ -1162,8 +1162,8 @@ UseNextMonText: ; 3c7d3 (f:47d3)
; choose next player mon to send out
; stores whether enemy mon has no HP left in Z flag
ChooseNextMon: ; 3c7d8 (f:47d8)
ld a, $2
ld [wd07d], a
ld a, BATTLE_PARTY_MENU
ld [wPartyMenuTypeOrMessageID], a
call DisplayPartyMenu
.checkIfMonChosen
jr nc, .monChosen
@ -1376,7 +1376,7 @@ EnemySendOutFirstMon: ; 3c92a (f:492a)
ld [hl],a
ld [W_ENEMYDISABLEDMOVE],a
ld [wEnemyDisabledMoveNumber],a
ld [wccf3],a
ld [wEnemyMonMinimized],a
ld hl,wPlayerUsedMove
ld [hli],a
ld [hl],a
@ -1462,8 +1462,8 @@ EnemySendOutFirstMon: ; 3c92a (f:492a)
ld a,[wCurrentMenuItem]
and a
jr nz,.next4
ld a,2
ld [wd07d],a
ld a,BATTLE_PARTY_MENU
ld [wPartyMenuTypeOrMessageID],a
call DisplayPartyMenu
.next9
ld a,1
@ -1826,7 +1826,7 @@ SendOutMon: ; 3cc91 (f:4c91)
ld [hl], a
ld [W_PLAYERDISABLEDMOVE], a
ld [wPlayerDisabledMoveNumber], a
ld [wccf7], a
ld [wPlayerMonMinimized], a
ld b, $1
call GoPAL_SET
ld hl, W_ENEMYBATTSTATUS1
@ -2296,7 +2296,7 @@ DisplayPlayerBag:
DisplayBagMenu:
xor a
ld [wcf93], a
ld [wPrintItemPrices], a
ld a, ITEMLISTMENU
ld [wListMenuID], a
ld a, [wcc2c]
@ -2305,7 +2305,7 @@ DisplayBagMenu:
ld a, [wCurrentMenuItem]
ld [wcc2c], a
ld a, $0
ld [wcc37], a
ld [wMenuWatchMovingOutOfBounds], a
ld [wMenuItemToSwap], a
jp c, DisplayBattleMenu ; go back to battle menu if an item was not selected
@ -2384,8 +2384,8 @@ PartyMenuOrRockOrRun:
jp UseBagItem
.partyMenuWasSelected
call LoadScreenTilesFromBuffer1
xor a
ld [wd07d], a
xor a ; NORMAL_PARTY_MENU
ld [wPartyMenuTypeOrMessageID], a
ld [wMenuItemToSwap], a
call DisplayPartyMenu
.checkIfPartyMonWasSelected
@ -2403,8 +2403,8 @@ PartyMenuOrRockOrRun:
ld bc, $81
ld a, $7f
call FillMemory
xor a
ld [wd07d], a
xor a ; NORMAL_PARTY_MENU
ld [wPartyMenuTypeOrMessageID], a
call GoBackToPartyMenu
jr .checkIfPartyMonWasSelected
.partyMonWasSelected
@ -2448,7 +2448,7 @@ PartyMenuOrRockOrRun:
ld hl, AnimationSubstitute
jr nz, .doEnemyMonAnimation
; enemy mon doesn't have substitute
ld a, [wccf3]
ld a, [wEnemyMonMinimized]
and a ; has the enemy mon used Minimise?
ld hl, AnimationMinimizeMon
jr nz, .doEnemyMonAnimation
@ -3215,9 +3215,9 @@ getPlayerAnimationType
playPlayerMoveAnimation
push af
ld a,[W_PLAYERBATTSTATUS2]
bit 4,a
ld hl,Func_79747
ld b,BANK(Func_79747)
bit HasSubstituteUp,a
ld hl,HideSubstituteShowMonAnim
ld b,BANK(HideSubstituteShowMonAnim)
call nz,Bankswitch
pop af
ld [wAnimationType],a
@ -3226,9 +3226,9 @@ playPlayerMoveAnimation
call HandleExplodingAnimation
call DrawPlayerHUDAndHPBar
ld a,[W_PLAYERBATTSTATUS2]
bit 4,a
ld hl,Func_79771
ld b,BANK(Func_79771)
bit HasSubstituteUp,a
ld hl,ReshowSubstituteAnim
ld b,BANK(ReshowSubstituteAnim)
call nz,Bankswitch
jr MirrorMoveCheck
playerCheckIfFlyOrChargeEffect
@ -3958,7 +3958,7 @@ PrintMoveFailureText: ; 3dbe2 (f:5be2)
ld hl, KeptGoingAndCrashedText
call PrintText
ld b, $4
predef Func_48125
predef PredefShakeScreenHorizontally
ld a, [H_WHOSETURN]
and a
jr nz, .enemyTurn
@ -5089,7 +5089,7 @@ AttackSubstitute: ; 3e25e (f:625e)
ld a,[H_WHOSETURN]
xor a,$01
ld [H_WHOSETURN],a
callab Func_79747 ; animate the substitute breaking
callab HideSubstituteShowMonAnim ; animate the substitute breaking
; flip the turn back to the way it was
ld a,[H_WHOSETURN]
xor a,$01
@ -5767,8 +5767,8 @@ playEnemyMoveAnimation: ; 3e7a4 (f:67a4)
push af
ld a, [W_ENEMYBATTSTATUS2]
bit HasSubstituteUp, a ; does mon have a substitute?
ld hl, Func_79747
ld b, BANK(Func_79747)
ld hl, HideSubstituteShowMonAnim
ld b, BANK(HideSubstituteShowMonAnim)
call nz, Bankswitch
pop af
ld [wAnimationType], a
@ -5778,8 +5778,8 @@ playEnemyMoveAnimation: ; 3e7a4 (f:67a4)
call DrawEnemyHUDAndHPBar
ld a, [W_ENEMYBATTSTATUS2]
bit HasSubstituteUp, a ; does mon have a substitute?
ld hl, Func_79771
ld b, BANK(Func_79771)
ld hl, ReshowSubstituteAnim
ld b, BANK(ReshowSubstituteAnim)
call nz, Bankswitch ; slide the substitute's sprite out
jr EnemyCheckIfMirrorMoveEffect
@ -6943,12 +6943,12 @@ InitBattle_Common: ; 3efeb (f:6feb)
call SaveScreenTilesToBuffer1
call ClearScreen
ld a, $98
ld [$ffbd], a
ld [H_AUTOBGTRANSFERDEST + 1], a
ld a, $1
ld [H_AUTOBGTRANSFERENABLED], a
call Delay3
ld a, $9c
ld [$ffbd], a
ld [H_AUTOBGTRANSFERDEST + 1], a
call LoadScreenTilesFromBuffer1
hlCoord 9, 7
ld bc, $50a
@ -7657,24 +7657,26 @@ UpdateStatDone: ; 3f4ca (f:74ca)
call PrintStatText
ld hl, W_PLAYERBATTSTATUS2
ld de, W_PLAYERMOVENUM
ld bc, wccf7
ld bc, wPlayerMonMinimized
ld a, [H_WHOSETURN]
and a
jr z, .asm_3f4e6
ld hl, W_ENEMYBATTSTATUS2
ld de, W_ENEMYMOVENUM
ld bc, wccf3
ld bc, wEnemyMonMinimized
.asm_3f4e6
ld a, [de]
cp MINIMIZE
jr nz, .asm_3f4f9
bit HasSubstituteUp, [hl] ; substitute
; if a substitute is up, slide off the substitute and show the mon pic before
; playing the minimize animation
bit HasSubstituteUp, [hl]
push af
push bc
ld hl, Func_79747
ld b, BANK(Func_79747)
ld hl, HideSubstituteShowMonAnim
ld b, BANK(HideSubstituteShowMonAnim)
push de
call nz, Bankswitch ; play Minimize animation unless there's Substitute involved
call nz, Bankswitch
pop de
.asm_3f4f9
call PlayCurrentMoveAnimation
@ -7684,8 +7686,8 @@ UpdateStatDone: ; 3f4ca (f:74ca)
pop bc
ld a, $1
ld [bc], a
ld hl, Func_79771
ld b, BANK(Func_79771)
ld hl, ReshowSubstituteAnim
ld b, BANK(ReshowSubstituteAnim)
pop af
call nz, Bankswitch
.applyBadgeBoostsAndStatusPenalties

View file

@ -26,8 +26,8 @@ TransformEffect_: ; 3bab1 (e:7ab1)
; animation(s) played are different if target has Substitute up
bit HasSubstituteUp, [hl]
push af
ld hl, Func_79747
ld b, BANK(Func_79747)
ld hl, HideSubstituteShowMonAnim
ld b, BANK(HideSubstituteShowMonAnim)
call nz, Bankswitch
ld a, [W_OPTIONS]
add a
@ -38,8 +38,8 @@ TransformEffect_: ; 3bab1 (e:7ab1)
ld b, BANK(AnimationTransformMon)
.gotAnimToPlay
call Bankswitch
ld hl, Func_79771
ld b, BANK(Func_79771)
ld hl, ReshowSubstituteAnim
ld b, BANK(ReshowSubstituteAnim)
pop af
call nz, Bankswitch
pop bc

View file

@ -317,7 +317,7 @@ TradeCenter_SelectMon:
ld [hli], a
ld [hli], a
ld [hl], a
ld [wcc37], a
ld [wMenuWatchMovingOutOfBounds], a
ld [wCurrentMenuItem], a
ld [wLastMenuItem], a
ld [wMenuJoypadPollCount], a
@ -326,7 +326,7 @@ TradeCenter_SelectMon:
jp .playerMonMenu
.enemyMonMenu
xor a
ld [wcc37], a
ld [wMenuWatchMovingOutOfBounds], a
inc a
ld [wWhichTradeMonSelectionMenu], a
ld a, D_DOWN | D_LEFT | A_BUTTON
@ -357,9 +357,9 @@ TradeCenter_SelectMon:
dec a
ld [wCurrentMenuItem], a
.displayEnemyMonStats
ld a, $1
ld [wd11b], a
callab InitList
ld a, INIT_ENEMYOT_LIST
ld [wInitListType], a
callab InitList ; the list isn't used
ld hl, wEnemyMons
call TradeCenter_DisplayStats
jp .getNewInput
@ -390,7 +390,7 @@ TradeCenter_SelectMon:
.playerMonMenu
xor a ; player mon menu
ld [wWhichTradeMonSelectionMenu], a
ld [wcc37], a
ld [wMenuWatchMovingOutOfBounds], a
ld a, D_DOWN | D_RIGHT | A_BUTTON
ld [wMenuWatchedKeys], a
ld a, [wPartyCount]
@ -416,9 +416,9 @@ TradeCenter_SelectMon:
jr z, .playerMonMenu_ANotPressed
jp .chosePlayerMon ; jump if A button pressed
; unreachable code
ld a, $4
ld [wd11b], a
callab InitList
ld a, INIT_PLAYEROT_LIST
ld [wInitListType], a
callab InitList ; the list isn't used
call TradeCenter_DisplayStats
jp .getNewInput
.playerMonMenu_ANotPressed
@ -511,9 +511,9 @@ TradeCenter_SelectMon:
.displayPlayerMonStats
pop af
ld [wCurrentMenuItem], a
ld a, $4
ld [wd11b], a
callab InitList
ld a, INIT_PLAYEROT_LIST
ld [wInitListType], a
callab InitList ; the list isn't used
call TradeCenter_DisplayStats
call LoadScreenTilesFromBuffer1
jp .playerMonMenu
@ -682,7 +682,7 @@ TradeCenter_Trade:
xor a
ld [wSerialExchangeNybbleSendData + 1], a ; unnecessary
ld [wSerialExchangeNybbleReceiveData], a
ld [wcc37], a
ld [wMenuWatchMovingOutOfBounds], a
ld [wMenuJoypadPollCount], a
hlCoord 0, 12
ld b, 4
@ -793,7 +793,7 @@ TradeCenter_Trade:
ld a, [hl]
ld [wTradedPlayerMonSpecies], a
xor a
ld [wcf95], a
ld [wRemoveMonFromBox], a
call RemovePokemon
ld a, [wTradingWhichEnemyMon]
ld c, a

View file

@ -1,5 +1,5 @@
StartSlotMachine: ; 37e2d (d:7e2d)
ld a, [wTrainerSpriteOffset]
ld a, [wHiddenObjectFunctionArgument]
cp $fd
jr z, .printOutOfOrder
cp $fe
@ -7,23 +7,23 @@ StartSlotMachine: ; 37e2d (d:7e2d)
cp $ff
jr z, .printSomeonesKeys
callba AbleToPlaySlotsCheck
ld a, [wTrainerSpriteOffset]
ld a, [wHiddenObjectFunctionArgument]
and a
ret z
ld a, [wUnknownSlotVar]
ld a, [wLuckySlotHiddenObjectIndex]
ld b, a
ld a, [wTrainerFacingDirection]
ld a, [wHiddenObjectIndex]
inc a
cp b
jr z, .asm_37e58
ld a, $fd
jr .asm_37e5a
.asm_37e58
ld a, $fa
.asm_37e5a
ld [wcc5b], a
jr z, .match
ld a, 253
jr .next
.match
ld a, 250
.next
ld [wSlotMachineSevenAndBarModeChance], a
ld a, [H_LOADEDROMBANK]
ld [wcc5e], a
ld [wSlotMachineSavedROMBank], a
call PromptUserToPlaySlots
ret
.printOutOfOrder

View file

@ -87,8 +87,8 @@ InGameTrade_GetMonName: ; 71b6a (1c:5b6a)
INCLUDE "data/trades.asm"
InGameTrade_DoTrade: ; 71c07 (1c:5c07)
xor a
ld [wd07d],a
xor a ; NORMAL_PARTY_MENU
ld [wPartyMenuTypeOrMessageID],a
dec a
ld [wUpdateSpritesEnabled],a
call DisplayPartyMenu
@ -131,7 +131,7 @@ InGameTrade_DoTrade: ; 71c07 (1c:5c07)
ld [wcf91],a
xor a
ld [wcc49],a
ld [wcf95],a
ld [wRemoveMonFromBox],a
call RemovePokemon
ld a,$80
ld [wcc49],a

View file

@ -450,7 +450,7 @@ ItemUseBall: ; d687 (3:5687)
ret nz
ld hl,wNumBagItems
inc a
ld [wcf96],a
ld [wItemQuantity],a
jp RemoveItemFromInventory
ItemUseBallText00: ; d937 (3:5937)
;"It dodged the thrown ball!"
@ -633,8 +633,8 @@ ItemUseEvoStone: ; da5b (3:5a5b)
ld a,[wcf91]
ld [wd156],a
push af
ld a,$05 ; evolution stone party menu
ld [wd07d],a
ld a,EVO_STONE_PARTY_MENU
ld [wPartyMenuTypeOrMessageID],a
ld a,$ff
ld [wUpdateSpritesEnabled],a
call DisplayPartyMenu
@ -655,7 +655,7 @@ ItemUseEvoStone: ; da5b (3:5a5b)
ld [wWhichPokemon],a
ld hl,wNumBagItems
ld a,1 ; remove 1 stone
ld [wcf96],a
ld [wItemQuantity],a
jp RemoveItemFromInventory
.noEffect
call ItemUseNoEffect
@ -678,8 +678,8 @@ ItemUseMedicine: ; dabb (3:5abb)
push af
ld a,[wcf91]
push af
ld a,$01
ld [wd07d],a ; item use party menu
ld a,USE_ITEM_PARTY_MENU
ld [wPartyMenuTypeOrMessageID],a
ld a,$ff
ld [wUpdateSpritesEnabled],a
ld a,[wd152]
@ -737,22 +737,22 @@ ItemUseMedicine: ; dabb (3:5abb)
ld bc,4
add hl,bc ; hl now points to status
ld a,[wcf91]
ld bc,$f008
ld bc, (ANTIDOTE_MSG << 8) | (1 << PSN)
cp a,ANTIDOTE
jr z,.checkMonStatus
ld bc,$f110
ld bc, (BURN_HEAL_MSG << 8) | (1 << BRN)
cp a,BURN_HEAL
jr z,.checkMonStatus
ld bc,$f220
ld bc, (ICE_HEAL_MSG << 8) | (1 << FRZ)
cp a,ICE_HEAL
jr z,.checkMonStatus
ld bc,$f307
ld bc, (AWAKENING_MSG << 8) | SLP
cp a,AWAKENING
jr z,.checkMonStatus
ld bc,$f440
ld bc, (PARALYZ_HEAL_MSG << 8) | (1 << PAR)
cp a,PARLYZ_HEAL
jr z,.checkMonStatus
ld bc,$f6ff ; Full Heal
ld bc, (FULL_HEAL_MSG << 8) | $ff ; Full Heal
.checkMonStatus
ld a,[hl] ; pokemon's status
and c ; does the pokemon have a status ailment the item can cure?
@ -761,7 +761,7 @@ ItemUseMedicine: ; dabb (3:5abb)
xor a
ld [hl],a ; remove the status ailment in the party data
ld a,b
ld [wd07d],a ; the message to display for the item used
ld [wPartyMenuTypeOrMessageID],a ; the message to display for the item used
ld a,[wPlayerMonNumber]
cp d ; is pokemon the item was used on active in battle?
jp nz,.doneHealing
@ -1078,15 +1078,15 @@ ItemUseMedicine: ; dabb (3:5abb)
ld a,[hFlags_0xFFF6]
res 0,a
ld [hFlags_0xFFF6],a
ld a,$f7 ; revived message
ld [wd07d],a
ld a,REVIVE_MSG
ld [wPartyMenuTypeOrMessageID],a
ld a,[wcf91]
cp a,REVIVE
jr z,.showHealingItemMessage
cp a,MAX_REVIVE
jr z,.showHealingItemMessage
ld a,$f5 ; standard HP healed message
ld [wd07d],a
ld a,POTION_MSG
ld [wPartyMenuTypeOrMessageID],a
jr .showHealingItemMessage
.playStatusAilmentCuringSound
ld a,(SFX_02_3e - SFX_Headers_02) / 3 ; status ailment curing sound
@ -1257,8 +1257,8 @@ ItemUseMedicine: ; dabb (3:5abb)
ld a,[hl]
adc b
ld [hl],a
ld a,$f8 ; level up message
ld [wd07d],a
ld a,RARE_CANDY_MSG
ld [wPartyMenuTypeOrMessageID],a
call RedrawPartyMenu
pop de
ld a,d
@ -1878,8 +1878,8 @@ ItemUsePPRestore: ; e31e (3:631e)
.chooseMon
xor a
ld [wUpdateSpritesEnabled],a
ld a,$01 ; item use party menu
ld [wd07d],a
ld a,USE_ITEM_PARTY_MENU
ld [wPartyMenuTypeOrMessageID],a
call DisplayPartyMenu
jr nc,.chooseMove
jp .itemNotUsed
@ -2118,8 +2118,8 @@ ItemUseTMHM: ; e479 (3:6479)
call CopyData
ld a,$ff
ld [wUpdateSpritesEnabled],a
ld a,$03 ; teach TM/HM party menu
ld [wd07d],a
ld a,TMHM_PARTY_MENU
ld [wPartyMenuTypeOrMessageID],a
call DisplayPartyMenu
push af
ld hl,wd036
@ -2193,7 +2193,7 @@ PrintItemUseTextAndRemoveItem: ; e563 (3:6563)
RemoveUsedItem: ; e571 (3:6571)
ld hl,wNumBagItems
ld a,1 ; one item
ld [wcf96],a ; store quantity
ld [wItemQuantity],a
jp RemoveItemFromInventory
ItemUseNoEffect: ; e57c (3:657c)
@ -2464,7 +2464,7 @@ GetSelectedMoveOffset2: ; e6e9 (3:66e9)
; hl = address of inventory (either wNumBagItems or wNumBoxItems)
; [wcf91] = item ID
; [wWhichPokemon] = index of item within inventory
; [wcf96] = quantity to toss
; [wItemQuantity] = quantity to toss
; OUTPUT:
; clears carry flag if the item is tossed, sets carry flag if not
TossItem_: ; e6f1 (3:66f1)
@ -2475,7 +2475,7 @@ TossItem_: ; e6f1 (3:66f1)
jr c,.tooImportantToToss
push hl
call IsKeyItem_
ld a,[wd124]
ld a,[wIsKeyItem]
pop hl
and a
jr nz,.tooImportantToToss
@ -2491,11 +2491,11 @@ TossItem_: ; e6f1 (3:66f1)
ld a,TWO_OPTION_MENU
ld [wTextBoxID],a
call DisplayTextBoxID ; yes/no menu
ld a,[wd12e]
cp a,2
ld a,[wMenuExitMethod]
cp a,CHOSE_SECOND_ITEM
pop hl
scf
ret z
ret z ; return if the player chose No
; if the player chose Yes
push hl
ld a,[wWhichPokemon]
@ -2533,12 +2533,12 @@ TooImportantToTossText: ; e75f (3:675f)
; INPUT:
; [wcf91] = item ID
; OUTPUT:
; [wd124] = result
; [wIsKeyItem] = result
; 00: item is not key item
; 01: item is key item
IsKeyItem_: ; e764 (3:6764)
ld a,$01
ld [wd124],a
ld [wIsKeyItem],a
ld a,[wcf91]
cp a,HM_01 ; is the item an HM or TM?
jr nc,.checkIfItemIsHM
@ -2562,7 +2562,7 @@ IsKeyItem_: ; e764 (3:6764)
call IsItemHM
ret c
xor a
ld [wd124],a
ld [wIsKeyItem],a
ret
INCLUDE "data/key_items.asm"
@ -2650,8 +2650,8 @@ SendNewMonToBox: ; e7a4 (3:67a4)
jr nz, .asm_e817
.asm_e82a
ld hl, wBoxMonNicks
ld a, $2
ld [wd07d], a
ld a, NAME_MON_SCREEN
ld [wNamingScreenType], a
predef AskName
ld a, [W_NUMINBOX]
dec a

View file

@ -229,11 +229,11 @@ BillsPCDeposit:
ld a, [wcf91]
call GetCryData
call PlaySoundWaitForCurrent
ld a, $1
ld [wcf95], a
call Func_3a68
ld a, PARTY_TO_BOX
ld [wMoveMonType], a
call MoveMon
xor a
ld [wcf95], a
ld [wRemoveMonFromBox], a
call RemovePokemon
call WaitForSoundToFinish
ld hl, wWhichTrade
@ -281,11 +281,11 @@ Func_21618: ; 21618 (8:5618)
ld a, [wcf91]
call GetCryData
call PlaySoundWaitForCurrent
xor a
ld [wcf95], a
call Func_3a68
ld a, $1
ld [wcf95], a
xor a ; BOX_TO_PARTY
ld [wMoveMonType], a
call MoveMon
ld a, 1
ld [wRemoveMonFromBox], a
call RemovePokemon
call WaitForSoundToFinish
ld hl, MonIsTakenOutText
@ -310,7 +310,7 @@ Func_21673: ; 21673 (8:5673)
and a
jr nz, .asm_21682
inc a
ld [wcf95], a
ld [wRemoveMonFromBox], a
call RemovePokemon
call WaitForSoundToFinish
ld a, [wcf91]
@ -329,7 +329,7 @@ Func_216be: ; 216be (8:56be)
ld a, h
ld [wList + 1], a
xor a
ld [wcf93], a
ld [wPrintItemPrices], a
ld [wListMenuID], a
inc a ; MONSTER_NAME
ld [wNameListType], a

View file

@ -56,7 +56,7 @@ DisplayDiploma: ; 566e2 (15:66e2)
call Delay3
call GBPalNormal
ld a, $90
ld [$ff48], a
ld [rOBP0], a
call WaitForTextScrollButtonPress
ld hl, wd730
res 6, [hl]

View file

@ -27,8 +27,8 @@ AskName: ; 64eb (1:64eb)
xor a
ld [wUpdateSpritesEnabled], a
push hl
ld a, $2
ld [wd07d], a
ld a, NAME_MON_SCREEN
ld [wNamingScreenType], a
call DisplayNamingScreen
ld a, [W_ISINBATTLE]
and a
@ -53,12 +53,12 @@ DoYouWantToNicknameText: ; 0x6557
TX_FAR _DoYouWantToNicknameText
db "@"
Func_655c: ; 655c (1:655c)
DisplayNameRaterScreen: ; 655c (1:655c)
ld hl, wHPBarMaxHP
xor a
ld [wUpdateSpritesEnabled], a
ld a, $2
ld [wd07d], a
ld a, NAME_MON_SCREEN
ld [wNamingScreenType], a
call DisplayNamingScreen
call GBPalWhiteOutWithDelay3
call RestoreScreenTilesAndReloadTilePatterns
@ -114,7 +114,7 @@ DisplayNamingScreen: ; 6596 (1:6596)
ld hl, wHPBarMaxHP + 1
ld [hli], a
ld [hli], a
ld [wPartyMonAnimCounter], a
ld [wAnimCounter], a
.asm_65ed
call PrintAlphabet
call GBPalNormal
@ -236,8 +236,8 @@ DisplayNamingScreen: ; 6596 (1:6596)
cp $e4
ld de, Handakutens
jr z, .asm_66e3
ld a, [wd07d]
cp $2
ld a, [wNamingScreenType]
cp NAME_MON_SCREEN
jr nc, .checkMonNameLength
ld a, [wHPBarMaxHP]
cp $7 ; max length of player/rival names
@ -377,8 +377,8 @@ Func_680e: ; 680e (1:680e)
ld de, wcf4b
call PlaceString
hlCoord 10, 3
ld a, [wd07d]
cp $2
ld a, [wNamingScreenType]
cp NAME_MON_SCREEN
jr nc, .asm_6835
ld b, $7
jr .asm_6837
@ -390,8 +390,8 @@ Func_680e: ; 680e (1:680e)
ld [hli], a
dec b
jr nz, .asm_6839
ld a, [wd07d]
cp $2
ld a, [wNamingScreenType]
cp NAME_MON_SCREEN
ld a, [wHPBarMaxHP]
jr nc, .asm_684b
cp $7
@ -405,8 +405,8 @@ Func_680e: ; 680e (1:680e)
ld [wTopMenuItemX], a
ld a, $5
ld [wCurrentMenuItem], a
ld a, [wd07d]
cp $2
ld a, [wNamingScreenType]
cp NAME_MON_SCREEN
ld a, $9
jr nc, .asm_6867
ld a, $6
@ -462,7 +462,7 @@ CalcStringLength: ; 68eb (1:68eb)
PrintNamingText: ; 68f8 (1:68f8)
hlCoord 0, 1
ld a, [wd07d]
ld a, [wNamingScreenType]
ld de, YourTextString
and a
jr z, .notNickname

View file

@ -1,4 +1,4 @@
; [wd07d] = menu type / message ID
; [wPartyMenuTypeOrMessageID] = menu type / message ID
; if less than $F0, it is a menu type
; menu types:
; 00: normal pokemon menu (e.g. Start menu)
@ -25,11 +25,11 @@ DrawPartyMenu_: ; 12cd2 (4:6cd2)
callba LoadMonPartySpriteGfxWithLCDDisabled ; load pokemon icon graphics
RedrawPartyMenu_: ; 12ce3 (4:6ce3)
ld a,[wd07d]
cp a,$04
ld a,[wPartyMenuTypeOrMessageID]
cp a,SWAP_MONS_PARTY_MENU
jp z,.printMessage
call ErasePartyMenuCursors
callba SendBlkPacket_PartyMenu ; loads some data to wcf2e
callba SendBlkPacket_PartyMenu
hlCoord 3, 0
ld de,wPartySpecies
xor a
@ -75,10 +75,10 @@ RedrawPartyMenu_: ; 12ce3 (4:6ce3)
inc hl
inc hl
.skipUnfilledRightArrow
ld a,[wd07d] ; menu type
cp a,$03
ld a,[wPartyMenuTypeOrMessageID] ; menu type
cp a,TMHM_PARTY_MENU
jr z,.teachMoveMenu
cp a,$05
cp a,EVO_STONE_PARTY_MENU
jr z,.evolutionStoneMenu
push hl
ld bc,14 ; 14 columns to the right
@ -196,7 +196,7 @@ RedrawPartyMenu_: ; 12ce3 (4:6ce3)
push af
push hl
set 6,[hl] ; turn off letter printing delay
ld a,[wd07d] ; message ID
ld a,[wPartyMenuTypeOrMessageID] ; message ID
cp a,$F0
jr nc,.printItemUseMessage
add a

View file

@ -135,7 +135,7 @@ RemoveItemByID: ; 17f37 (5:7f37)
jr .asm_17f40
.asm_17f4f
ld a, $1
ld [wcf96], a
ld [wItemQuantity], a
ld a, [$ffdc]
ld [wWhichPokemon], a
ld hl, wNumBagItems

View file

@ -101,15 +101,15 @@ Func_79ab: ; 79ab (1:79ab)
ld a, h
ld [wList + 1], a
xor a
ld [wcf93], a
ld [wPrintItemPrices], a
ld a, $3
ld [wListMenuID], a
call DisplayListMenuID
jp c, Func_790c
call IsKeyItem
ld a, $1
ld [wcf96], a
ld a, [wd124]
ld [wItemQuantity], a
ld a, [wIsKeyItem]
and a
jr nz, .asm_79e7
ld hl, DepositHowManyText
@ -155,15 +155,15 @@ Func_7a28: ; 7a28 (1:7a28)
ld a, h
ld [wList + 1], a
xor a
ld [wcf93], a
ld [wPrintItemPrices], a
ld a, $3
ld [wListMenuID], a
call DisplayListMenuID
jp c, Func_790c
call IsKeyItem
ld a, $1
ld [wcf96], a
ld a, [wd124]
ld [wItemQuantity], a
ld a, [wIsKeyItem]
and a
jr nz, .asm_7a64
ld hl, WithdrawHowManyText
@ -209,7 +209,7 @@ Func_7aa5: ; 7aa5 (1:7aa5)
ld a, h
ld [wList + 1], a
xor a
ld [wcf93], a
ld [wPrintItemPrices], a
ld a, $3
ld [wListMenuID], a
push hl
@ -220,8 +220,8 @@ Func_7aa5: ; 7aa5 (1:7aa5)
call IsKeyItem
pop hl
ld a, $1
ld [wcf96], a
ld a, [wd124]
ld [wItemQuantity], a
ld a, [wIsKeyItem]
and a
jr nz, .asm_7aef
ld a, [wcf91]

View file

@ -22,7 +22,7 @@ ShowPokedexMenu: ; 40000 (10:4000)
xor a
ld [hli],a ; top menu item X
inc a
ld [wcc37],a
ld [wMenuWatchMovingOutOfBounds],a
inc hl
inc hl
ld a,6
@ -32,7 +32,7 @@ ShowPokedexMenu: ; 40000 (10:4000)
jr c,.goToSideMenu ; if the player chose a pokemon from the list
.exitPokedex
xor a
ld [wcc37],a
ld [wMenuWatchMovingOutOfBounds],a
ld [wCurrentMenuItem],a
ld [wLastMenuItem],a
ld [hJoy7],a
@ -91,7 +91,7 @@ HandlePokedexSideMenu: ; 4006d (10:406d)
ld [hli],a ; menu watched keys (A button and B button)
xor a
ld [hli],a ; old menu item ID
ld [wcc37],a
ld [wMenuWatchMovingOutOfBounds],a
.handleMenuInput
call HandleMenuInput
bit 1,a ; was the B button pressed?

View file

@ -12,14 +12,14 @@ StartMenu_Pokemon: ; 130a9 (4:70a9)
jp z,RedisplayStartMenu
xor a
ld [wMenuItemToSwap],a
ld [wd07d],a
ld [wPartyMenuTypeOrMessageID],a
ld [wUpdateSpritesEnabled],a
call DisplayPartyMenu
jr .checkIfPokemonChosen
.loop
xor a
ld [wMenuItemToSwap],a
ld [wd07d],a
ld [wPartyMenuTypeOrMessageID],a
call GoBackToPartyMenu
.checkIfPokemonChosen
jr nc,.chosePokemon
@ -89,8 +89,8 @@ StartMenu_Pokemon: ; 130a9 (4:70a9)
cp a,2 ; is there more than one pokemon in the party?
jp c,StartMenu_Pokemon ; if not, no switching
call SwitchPartyMon_Stats
ld a,$04 ; swap pokemon positions menu
ld [wd07d],a
ld a,SWAP_MONS_PARTY_MENU
ld [wPartyMenuTypeOrMessageID],a
call GoBackToPartyMenu
jp .checkIfPokemonChosen
.choseStats
@ -313,7 +313,7 @@ StartMenu_Item: ; 13302 (4:7302)
ld [hli],a
ld [hl],b ; store item bag pointer at wList (for DisplayListMenuID)
xor a
ld [wcf93],a
ld [wPrintItemPrices],a
ld a,ITEMLISTMENU
ld [wListMenuID],a
ld a,[wcc2c]
@ -423,7 +423,7 @@ StartMenu_Item: ; 13302 (4:7302)
jp ItemMenuLoop
.tossItem
call IsKeyItem
ld a,[wd124]
ld a,[wIsKeyItem]
and a
jr nz,.skipAskingQuantity
ld a,[wcf91]
@ -747,7 +747,7 @@ SwitchPartyMon_Stats: ; 13653 (4:7653)
ret
.asm_13661
xor a
ld [wd07d], a
ld [wPartyMenuTypeOrMessageID], a
ld a, [wMenuItemToSwap]
dec a
ld b, a
@ -757,7 +757,7 @@ SwitchPartyMon_Stats: ; 13653 (4:7653)
jr nz, .asm_1367b
xor a
ld [wMenuItemToSwap], a
ld [wd07d], a
ld [wPartyMenuTypeOrMessageID], a
ret
.asm_1367b
ld a, b
@ -845,7 +845,7 @@ SwitchPartyMon_Stats: ; 13653 (4:7653)
ld [wWhichTrade], a
xor a
ld [wMenuItemToSwap], a
ld [wd07d], a
ld [wPartyMenuTypeOrMessageID], a
pop de
pop hl
ret

View file

@ -27,7 +27,7 @@ GetAnimationSpeed: ; 7170a (1c:570a)
ld c, a
add a
ld b, a
ld a, [wPartyMonAnimCounter]
ld a, [wAnimCounter]
and a
jr z, .resetSprites
cp c
@ -38,7 +38,7 @@ GetAnimationSpeed: ; 7170a (1c:570a)
jr nz, .skipResetTimer
xor a ; reset timer
.skipResetTimer
ld [wPartyMonAnimCounter], a
ld [wAnimCounter], a
jp DelayFrame
.resetSprites
push bc
@ -315,7 +315,7 @@ WriteMonPartySpriteOAMByPartyIndex: ; 71868 (1c:5868)
add hl, de
ld a, [hl]
call GetPartyMonSpriteID
ld [wcd5b], a
ld [wOAMBaseTile], a
call WriteMonPartySpriteOAM
pop bc
pop de
@ -329,7 +329,7 @@ WriteMonPartySpriteOAMBySpecies: ; 71882 (1c:5882)
ld [hPartyMonIndex], a
ld a, [wMonPartySpriteSpecies]
call GetPartyMonSpriteID
ld [wcd5b], a
ld [wOAMBaseTile], a
jr WriteMonPartySpriteOAM
UnusedPartyMonSpriteFunction: ; 71890 (1c:5890)

View file

@ -46,7 +46,7 @@ OakSpeech: ; 6115 (1:6115)
ld a,POTION
ld [wcf91],a
ld a,1
ld [wcf96],a
ld [wItemQuantity],a
call AddItemToInventory ; give one potion
ld a,[W_ANIMATIONID]
ld [wDestinationMap],a

View file

@ -12,8 +12,8 @@ LoadDefaultNamesPlayer: ; 695d (1:695d)
jr .asm_6999
.asm_697a
ld hl, wPlayerName
xor a
ld [wd07d], a
xor a ; NAME_PLAYER_SCREEN
ld [wNamingScreenType], a
call DisplayNamingScreen
ld a, [wcf4b]
cp $50
@ -45,8 +45,8 @@ LoadDefaultNamesRival: ; 69a4 (1:69a4)
jr .asm_69e1
.asm_69c1
ld hl, W_RIVALNAME
ld a, $1
ld [wd07d], a
ld a, NAME_RIVAL_SCREEN
ld [wNamingScreenType], a
call DisplayNamingScreen
ld a, [wcf4b]
cp $50

View file

@ -1,30 +1,34 @@
DisplayPokemartDialogue_: ; 6c20 (1:6c20)
ld a,[wListScrollOffset]
ld [wd07e],a
ld [wSavedListScrollOffset],a
call UpdateSprites
xor a
ld [wcf0a],a ; flag that is set if something is sold or bought
ld [wBoughtOrSoldItemInMart],a
.loop
xor a
ld [wListScrollOffset],a
ld [wCurrentMenuItem],a
ld [wPlayerMonNumber],a
inc a
ld [wcf93],a
ld [wPrintItemPrices],a
ld a,MONEY_BOX
ld [wTextBoxID],a
call DisplayTextBoxID ; draw money text box
call DisplayTextBoxID
ld a,BUY_SELL_QUIT_MENU
ld [wTextBoxID],a
call DisplayTextBoxID ; do buy/sell/quit menu
ld hl,wd128 ; pointer to this pokemart's inventory
call DisplayTextBoxID
; This code is useless. It copies the address of the pokemart's inventory to hl,
; but the address is never used.
ld hl,wItemListPointer
ld a,[hli]
ld l,[hl]
ld h,a ; hl = address of inventory
ld a,[wd12e]
cp a,$02
ld h,a
ld a,[wMenuExitMethod]
cp a,CANCELLED_MENU
jp z,.done
ld a,[wd12d] ; ID of the chosen menu item
ld a,[wChosenMenuItem]
and a ; buying?
jp z,.buyMenu
dec a ; selling?
@ -32,11 +36,14 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20)
dec a ; quitting?
jp z,.done
.sellMenu
; the same variables are set again below, so this code has no effect
xor a
ld [wcf93],a
ld a,$02
ld [wd11b],a
ld [wPrintItemPrices],a
ld a,INIT_BAG_ITEM_LIST
ld [wInitListType],a
callab InitList
ld a,[wNumBagItems]
and a
jp z,.bagEmpty
@ -54,15 +61,15 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20)
ld a,h
ld [wList + 1],a
xor a
ld [wcf93],a
ld [wPrintItemPrices],a
ld [wCurrentMenuItem],a
ld a,ITEMLISTMENU
ld [wListMenuID],a
call DisplayListMenuID
jp c,.returnToMainPokemartMenu ; if the player closed the menu
.confirmItemSale ; if the player is trying to sell a specific item
call IsKeyItem ; check if item is unsellable
ld a,[wd124]
call IsKeyItem
ld a,[wIsKeyItem]
and a
jr nz,.unsellableItem
ld a,[wcf91]
@ -70,7 +77,7 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20)
jr c,.unsellableItem
ld a,PRICEDITEMLISTMENU
ld [wListMenuID],a
ld [$ff8e],a ; halve prices when selling
ld [hHalveItemPrices],a ; halve prices when selling
call DisplayChooseQuantityMenu
inc a
jr z,.sellMenuLoop ; if the player closed the choose quantity menu with the B button
@ -82,18 +89,22 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20)
ld a,TWO_OPTION_MENU
ld [wTextBoxID],a
call DisplayTextBoxID ; yes/no menu
ld a,[wd12e]
cp a,$02
jr z,.sellMenuLoop ; if the player pressed the B button
ld a,[wd12d] ; ID of the chosen menu item
ld a,[wMenuExitMethod]
cp a,CHOSE_SECOND_ITEM
jr z,.sellMenuLoop ; if the player chose No or pressed the B button
; The following code is supposed to check if the player chose No, but the above
; check already catches it.
ld a,[wChosenMenuItem]
dec a
jr z,.sellMenuLoop ; if the player chose No
jr z,.sellMenuLoop
.sellItem
ld a,[wcf0a] ; flag that is set if something is sold or bought
ld a,[wBoughtOrSoldItemInMart]
and a
jr nz,.skipSettingFlag1
inc a
ld [wcf0a],a
ld [wBoughtOrSoldItemInMart],a
.skipSettingFlag1
call AddAmountSoldToMoney
ld hl,wNumBagItems
@ -106,22 +117,25 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20)
.bagEmpty
ld hl,PokemartItemBagEmptyText
call PrintText
call SaveScreenTilesToBuffer1 ; save screen
call SaveScreenTilesToBuffer1
jp .returnToMainPokemartMenu
.buyMenu
ld a,$01
ld [wcf93],a
ld a,$03
ld [wd11b],a
; the same variables are set again below, so this code has no effect
ld a,1
ld [wPrintItemPrices],a
ld a,INIT_OTHER_ITEM_LIST
ld [wInitListType],a
callab InitList
ld hl,PokemartBuyingGreetingText
call PrintText
call SaveScreenTilesToBuffer1 ; save screen
call SaveScreenTilesToBuffer1
.buyMenuLoop
call LoadScreenTilesFromBuffer1 ; restore saved screen
call LoadScreenTilesFromBuffer1
ld a,MONEY_BOX
ld [wTextBoxID],a
call DisplayTextBoxID ; draw money text box
call DisplayTextBoxID
ld hl,wStringBuffer2 + 11
ld a,l
ld [wList],a
@ -130,15 +144,15 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20)
xor a
ld [wCurrentMenuItem],a
inc a
ld [wcf93],a
ld [wPrintItemPrices],a
inc a ; a = 2 (PRICEDITEMLISTMENU)
ld [wListMenuID],a
call DisplayListMenuID
jr c,.returnToMainPokemartMenu ; if the player closed the menu
ld a,$63
ld [wcf97],a
ld a,99
ld [wMaxItemQuantity],a
xor a
ld [$ff8e],a
ld [hHalveItemPrices],a ; don't halve item prices when buying
call DisplayChooseQuantityMenu
inc a
jr z,.buyMenuLoop ; if the player closed the choose quantity menu with the B button
@ -153,12 +167,16 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20)
ld a,TWO_OPTION_MENU
ld [wTextBoxID],a
call DisplayTextBoxID ; yes/no menu
ld a,[wd12e]
cp a,$02
jp z,.buyMenuLoop ; if the player pressed the B button
ld a,[wd12d] ; ID of the chosen menu item
ld a,[wMenuExitMethod]
cp a,CHOSE_SECOND_ITEM
jp z,.buyMenuLoop ; if the player chose No or pressed the B button
; The following code is supposed to check if the player chose No, but the above
; check already catches it.
ld a,[wChosenMenuItem]
dec a
jr z,.buyMenuLoop ; if the player chose No
jr z,.buyMenuLoop
.buyItem
call .isThereEnoughMoney
jr c,.notEnoughMoney
@ -166,11 +184,11 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20)
call AddItemToInventory
jr nc,.bagFull
call SubtractAmountPaidFromMoney
ld a,[wcf0a] ; flag that is set if something is sold or bought
ld a,[wBoughtOrSoldItemInMart]
and a
jr nz,.skipSettingFlag2
ld a,$01
ld [wcf0a],a
ld a,1
ld [wBoughtOrSoldItemInMart],a
.skipSettingFlag2
ld a,(SFX_02_5a - SFX_Headers_02) / 3
call PlaySoundWaitForCurrent
@ -182,7 +200,7 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20)
call LoadScreenTilesFromBuffer1
ld a,MONEY_BOX
ld [wTextBoxID],a
call DisplayTextBoxID ; draw money text box
call DisplayTextBoxID
ld hl,PokemartAnythingElseText
call PrintText
jp .loop
@ -202,10 +220,10 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20)
.done
ld hl,PokemartThankYouText
call PrintText
ld a,$01
ld a,1
ld [wUpdateSpritesEnabled],a
call UpdateSprites
ld a,[wd07e]
ld a,[wSavedListScrollOffset]
ld [wListScrollOffset],a
ret

View file

@ -85,10 +85,10 @@ PredefPointers:: ; 4fe79 (13:7e79)
dbw $03,GiveItem
add_predef ChangeBGPalColor0_4Frames
add_predef FindPathToPlayer
add_predef Func_480ff
add_predef PredefShakeScreenVertically
add_predef CalcPositionOfPlayerRelativeToNPC
add_predef ConvertNPCMovementDirectionsToJoypadMasks
add_predef Func_48125
add_predef PredefShakeScreenHorizontally
add_predef UpdateHPBar
add_predef HPBarLength
add_predef Diploma_TextBoxBorder

View file

@ -11,55 +11,61 @@ ChangeBGPalColor0_4Frames: ; 480eb (12:40eb)
ld [rBGP], a
ret
Func_480ff: ; 480ff (12:40ff)
PredefShakeScreenVertically: ; 480ff (12:40ff)
; Moves the window down and then back in a sequence of progressively smaller
; numbers of pixels, starting at b.
call GetPredefRegisters
ld a, $1
ld [wd0a0], a
ld a, 1
ld [wDisableVBlankWYUpdate], a
xor a
.asm_48108
ld [H_NUMTOPRINT], a ; (aliases: H_MULTIPLICAND)
call Func_48119
call Func_48119
.loop
ld [$ff96], a
call .MutateWY
call .MutateWY
dec b
ld a, b
jr nz, .asm_48108
jr nz, .loop
xor a
ld [wd0a0], a
ld [wDisableVBlankWYUpdate], a
ret
Func_48119: ; 48119 (12:4119)
ld a, [H_NUMTOPRINT] ; (aliases: H_MULTIPLICAND)
.MutateWY ; 48119 (12:4119)
ld a, [$ff96]
xor b
ld [H_NUMTOPRINT], a ; (aliases: H_MULTIPLICAND)
ld [$ff96], a
ld [rWY], a
ld c, 3
jp DelayFrames
Func_48125: ; 48125 (12:4125)
PredefShakeScreenHorizontally: ; 48125 (12:4125)
; Moves the window right and then back in a sequence of progressively smaller
; numbers of pixels, starting at b.
call GetPredefRegisters
xor a
.asm_48129
.loop
ld [$ff97], a
call Func_4813f
call .MutateWX
ld c, 1
call DelayFrames
call Func_4813f
call .MutateWX
dec b
ld a, b
jr nz, .asm_48129
ld a, $7
jr nz, .loop
; restore normal WX
ld a, 7
ld [rWX], a
ret
Func_4813f: ; 4813f (12:413f)
.MutateWX ; 4813f (12:413f)
ld a, [$ff97]
xor b
ld [$ff97], a
bit 7, a
jr z, .asm_48149
xor a
.asm_48149
add $7
jr z, .skipZeroing
xor a ; zero a if it's negative
.skipZeroing
add 7
ld [rWX], a
ld c, 4
jp DelayFrames

View file

@ -11,7 +11,7 @@ Func_1c9c6: ; 1c9c6 (7:49c6)
xor a
ld [wCurrentMenuItem], a
ld [wListScrollOffset], a
ld [wcf93], a
ld [wPrintItemPrices], a
ld a, $4
ld [wListMenuID], a
call DisplayListMenuID

View file

@ -421,7 +421,7 @@ Func_7393f: ; 7393f (1c:793f)
ld a, $c
ld [wTopMenuItemX], a
xor a
ld [wcc37], a
ld [wMenuWatchMovingOutOfBounds], a
ld a, [wd5a0]
and $7f
ld [wCurrentMenuItem], a

View file

@ -10,13 +10,13 @@ PromptUserToPlaySlots: ; 3730e (d:730e)
call YesNoChoice
ld a, [wCurrentMenuItem]
and a
jr nz, .skip
jr nz, .done ; if player chose No
dec a
ld [wUpdateSpritesEnabled], a
ld hl, wcd4f
ld hl, wSlotMachineRerollCounter
xor a
ld [hli], a
ld [hl], $2
ld [hl], SMILE_BUBBLE
predef EmotionBubble
call GBPalWhiteOutWithDelay3
call LoadSlotMachineTiles
@ -25,30 +25,30 @@ PromptUserToPlaySlots: ; 3730e (d:730e)
call GoPAL_SET
call GBPalNormal
ld a, $e4
ld [$ff48], a
ld [rOBP0], a
ld hl, wd730
set 6, [hl]
xor a
ld [W_SUBANIMSUBENTRYADDR], a
ld hl, wTrainerSpriteOffset
ld [wSlotMachineAllowMatchesCounter], a
ld hl, wStoppingWhichSlotMachineWheel
ld bc, $0014
call FillMemory
call MainSlotMachineLoop
ld hl, wd730
res 6, [hl]
xor a
ld [W_SUBANIMSUBENTRYADDR], a
ld [wSlotMachineAllowMatchesCounter], a
call GBPalWhiteOutWithDelay3
ld a, $1
ld [wUpdateSpritesEnabled], a
call GoPAL_SET_CF1C
call ReloadMapSpriteTilePatterns
call ReloadTilesetTilePatterns
.skip
.done
call LoadScreenTilesFromBuffer2
call Delay3
call GBPalNormal
ld a, [wcc5e]
ld a, [wSlotMachineSavedROMBank]
push af
jp CloseTextDisplay
@ -57,43 +57,43 @@ PlaySlotMachineText: ; 37390 (d:7390)
db "@"
MainSlotMachineLoop: ; 37395 (d:7395)
call SlotMachine_37754
call SlotMachine_PrintCreditCoins
xor a
ld hl, wcd4a
ld hl, wPayoutCoins
ld [hli], a
ld [hl], a
call SlotMachine_3775f
call SlotMachine_PrintPayoutCoins
ld hl, BetHowManySlotMachineText
call PrintText
call SaveScreenTilesToBuffer1
.loop
ld a, $3
ld a, A_BUTTON | B_BUTTON
ld [wMenuWatchedKeys], a
ld a, $2
ld a, 2
ld [wMaxMenuItem], a
ld a, $c
ld a, 12
ld [wTopMenuItemY], a
ld a, $f
ld a, 15
ld [wTopMenuItemX], a
xor a
ld [wCurrentMenuItem], a
ld [wLastMenuItem], a
ld [wcc37], a
ld hl, wTileMap + $ea
ld b, $5
ld c, $4
ld [wMenuWatchMovingOutOfBounds], a
hlCoord 14, 11
ld b, 5
ld c, 4
call TextBoxBorder
ld hl, wTileMap + $100
hlCoord 16, 12
ld de, CoinMultiplierSlotMachineText
call PlaceString
call HandleMenuInput
and $2
and B_BUTTON
jp nz, LoadScreenTilesFromBuffer1
ld a, [wCurrentMenuItem]
ld b, a
ld a, $3
ld a, 3
sub b
ld [wcd50], a
ld [wSlotMachineBet], a
ld hl, wPlayerCoins
ld c, a
ld a, [hli]
@ -107,11 +107,11 @@ MainSlotMachineLoop: ; 37395 (d:7395)
jr .loop
.skip1
call LoadScreenTilesFromBuffer1
call SlotMachine_37741
call SlotMachine_377d5
call SlotMachine_37480
ld a, $4
ld hl, wcd4d
call SlotMachine_SubtractBetFromPlayerCoins
call SlotMachine_LightBalls
call SlotMachine_SetFlags
ld a, 4
ld hl, wSlotMachineWheel1SlipCounter
ld [hli], a
ld [hli], a
ld [hl], a
@ -120,8 +120,8 @@ MainSlotMachineLoop: ; 37395 (d:7395)
call PlaySound
ld hl, StartSlotMachineText
call PrintText
call SlotMachine_374ad
call SlotMachine_37588
call SlotMachine_SpinWheels
call SlotMachine_CheckForMatches
ld hl, wPlayerCoins
ld a, [hli]
or [hl]
@ -143,7 +143,7 @@ MainSlotMachineLoop: ; 37395 (d:7395)
ld a, [wCurrentMenuItem]
and a
ret nz
call SlotMachine_377ce
call SlotMachine_PutOutLitBalls
jp MainSlotMachineLoop
CoinMultiplierSlotMachineText: ; 3745e (d:745e)
@ -171,55 +171,55 @@ OneMoreGoSlotMachineText: ; 3747b (d:747b)
TX_FAR _OneMoreGoSlotMachineText
db "@"
SlotMachine_37480: ; 37480 (d:7480)
ld hl, wcd4c
SlotMachine_SetFlags: ; 37480 (d:7480)
ld hl, wSlotMachineFlags
bit 7, [hl]
ret nz
ld a, [W_SUBANIMSUBENTRYADDR]
ld a, [wSlotMachineAllowMatchesCounter]
and a
jr nz, .skip1
jr nz, .allowMatches
call Random
and a
jr z, .skip2
jr z, .setAllowMatchesCounter ; 1/256 (~0.4%) chance
ld b, a
ld a, [wcc5b]
ld a, [wSlotMachineSevenAndBarModeChance]
cp b
jr c, .skip3
ld a, $d2
jr c, .allowSevenAndBarMatches
ld a, 210
cp b
jr c, .skip1
ld [hl], $0
jr c, .allowMatches ; 55/256 (~21.5%) chance
ld [hl], 0
ret
.skip1
.allowMatches
set 6, [hl]
ret
.skip2
ld a, $3c
ld [W_SUBANIMSUBENTRYADDR], a
.setAllowMatchesCounter
ld a, 60
ld [wSlotMachineAllowMatchesCounter], a
ret
.skip3
.allowSevenAndBarMatches
set 7, [hl]
ret
SlotMachine_374ad: ; 374ad (d:74ad)
SlotMachine_SpinWheels: ; 374ad (d:74ad)
ld c, 20
.loop1
push bc
call SlotMachine_37813
call SlotMachine_37823
call SlotMachine_37833
call SlotMachine_AnimWheel1
call SlotMachine_AnimWheel2
call SlotMachine_AnimWheel3
ld c, 2
call DelayFrames
pop bc
dec c
jr nz, .loop1
xor a
ld [wTrainerSpriteOffset], a
ld [wStoppingWhichSlotMachineWheel], a
.loop2
call SlotMachine_37882
call SlotMachine_374df
call SlotMachine_374fb
call SlotMachine_37517
call SlotMachine_HandleInputWhileWheelsSpin
call SlotMachine_StopOrAnimWheel1
call SlotMachine_StopOrAnimWheel2
call SlotMachine_StopOrAnimWheel3
ret c
ld a, [wOnSGB]
xor $1
@ -228,194 +228,214 @@ SlotMachine_374ad: ; 374ad (d:74ad)
call DelayFrames
jr .loop2
SlotMachine_374df: ; 374df (d:74df)
ld a, [wTrainerSpriteOffset]
cp $1
jr c, .skip
ld de, wTrainerEngageDistance
; Note that the wheels can only stop when a symbol is centred in the wheel
; and thus 3 full symbols rather than 2 full symbols and 2 half symbols are
; visible. The 3 functions below ensure this by checking if the wheel offset
; is even before stopping the wheel.
SlotMachine_StopOrAnimWheel1: ; 374df (d:74df)
ld a, [wStoppingWhichSlotMachineWheel]
cp 1
jr c, .animWheel
ld de, wSlotMachineWheel1Offset
ld a, [de]
rra
jr nc, .skip
ld hl, wcd4d
jr nc, .animWheel ; check that a symbol is centred in the wheel
ld hl, wSlotMachineWheel1SlipCounter
ld a, [hl]
and a
ret z
dec [hl]
call SlotMachine_3752c
call SlotMachine_StopWheel1Early
ret nz
.skip
jp SlotMachine_37813
.animWheel
jp SlotMachine_AnimWheel1
SlotMachine_374fb: ; 374fb (d:74fb)
ld a, [wTrainerSpriteOffset]
cp $2
jr c, .skip
ld de, wTrainerFacingDirection
SlotMachine_StopOrAnimWheel2: ; 374fb (d:74fb)
ld a, [wStoppingWhichSlotMachineWheel]
cp 2
jr c, .animWheel
ld de, wSlotMachineWheel2Offset
ld a, [de]
rra
jr nc, .skip
ld hl, wcd4e
jr nc, .animWheel ; check that a symbol is centred in the wheel
ld hl, wSlotMachineWheel2SlipCounter
ld a, [hl]
and a
ret z
dec [hl]
call SlotMachine_37552
call SlotMachine_StopWheel2Early
ret z
.skip
jp SlotMachine_37823
.animWheel
jp SlotMachine_AnimWheel2
SlotMachine_37517: ; 37517 (d:7517)
ld a, [wTrainerSpriteOffset]
cp $3
jr c, .skip
ld de, wTrainerScreenY
SlotMachine_StopOrAnimWheel3: ; 37517 (d:7517)
ld a, [wStoppingWhichSlotMachineWheel]
cp 3
jr c, .animWheel
ld de, wSlotMachineWheel3Offset
ld a, [de]
rra
jr nc, .skip
jr nc, .animWheel ; check that a symbol is centred in the wheel
; wheel 3 stops as soon as possible
scf
ret
.skip
call SlotMachine_37833
.animWheel
call SlotMachine_AnimWheel3
and a
ret
SlotMachine_3752c: ; 3752c (d:752c)
call SlotMachine_GetWheelOneTile
ld hl, wTrainerScreenX
ld a, [wcd4c]
SlotMachine_StopWheel1Early: ; 3752c (d:752c)
call SlotMachine_GetWheel1Tiles
ld hl, wSlotMachineWheel1BottomTile
ld a, [wSlotMachineFlags]
and $80
jr nz, .skip1
jr nz, .sevenAndBarMode
; Stop early if the middle symbol is not a cherry.
inc hl
ld a, [hl]
cp $a
jr nz, .skip2
cp SLOTSCHERRY >> 8
jr nz, .stopWheel
ret
.skip1
; It looks like this was intended to make the wheel stop when a 7 symbol was
; visible, but it has a bug and so the wheel stops randomly.
.sevenAndBarMode
ld c, $3
.loop
ld a, [hli]
cp $2
jr c, .skip2
cp SLOTS7 >> 8
jr c, .stopWheel ; condition never true
dec c
jr nz, .loop
ret
.skip2
.stopWheel
inc a
ld hl, wcd4d
ld [hl], $0
ld hl, wSlotMachineWheel1SlipCounter
ld [hl], 0
ret
SlotMachine_37552: ; 37552 (d:7552)
call SlotMachine_GetWheelTwoTile
ld a, [wcd4c]
SlotMachine_StopWheel2Early: ; 37552 (d:7552)
call SlotMachine_GetWheel2Tiles
ld a, [wSlotMachineFlags]
and $80
jr nz, .skip1
call SlotMachine_3756e
jr nz, .sevenAndBarMode
; Stop early if any symbols are lined up in the first two wheels.
call SlotMachine_FindWheel1Wheel2Matches
ret nz
jr .skip2
.skip1
call SlotMachine_3756e
jr .stopWheel
; Stop early if two 7 symbols or two bar symbols are lined up in the first two
; wheels OR if no symbols are lined up and the bottom symbol in wheel 2 is a
; 7 symbol or bar symbol. The second part could be a bug or a way to reduce the
; player's odds.
.sevenAndBarMode
call SlotMachine_FindWheel1Wheel2Matches
ld a, [de]
cp $7
cp (SLOTSBAR >> 8) + 1
ret nc
.skip2
.stopWheel
xor a
ld [wcd4e], a
ld [wSlotMachineWheel2SlipCounter], a
ret
SlotMachine_3756e: ; 3756e (d:756e)
ld hl, wTrainerScreenX
ld de, wcd44
SlotMachine_FindWheel1Wheel2Matches: ; 3756e (d:756e)
; return whether wheel 1 and wheel 2's current positions allow a match (given
; that wheel 3 stops in a good position) in Z
ld hl, wSlotMachineWheel1BottomTile
ld de, wSlotMachineWheel2BottomTile
ld a, [de]
cp [hl]
cp [hl] ; wheel 1 bottom, wheel 2 bottom
ret z
inc de
ld a, [de]
cp [hl]
cp [hl] ; wheel 1 bottom, wheel 2 middle
ret z
inc hl
cp [hl]
cp [hl] ; wheel 1 middle, wheel 2 middle
ret z
inc hl
cp [hl]
cp [hl] ; wheel 1 top, wheel 2 middle
ret z
inc de
ld a, [de]
cp [hl]
cp [hl] ; wheel 1 top, wheel 2 top
ret z
dec de
dec de
ret
SlotMachine_37588: ; 37588 (d:7588)
call SlotMachine_GetWheelThreeTile
ld a, [wcd50]
cp $2
jr z, .skip1
cp $1
jr z, .skip2
ld hl, wTrainerScreenX
ld de, wcd45
ld bc, wcd49
SlotMachine_CheckForMatches: ; 37588 (d:7588)
call SlotMachine_GetWheel3Tiles
ld a, [wSlotMachineBet]
cp 2
jr z, .checkMatchesFor2CoinBet
cp 1
jr z, .checkMatchFor1CoinBet
; 3 coin bet allows diagonal matches (plus the matches for 1/2 coin bets)
ld hl, wSlotMachineWheel1BottomTile
ld de, wSlotMachineWheel2MiddleTile
ld bc, wSlotMachineWheel3TopTile
call SlotMachine_CheckForMatch
jp z, .skip5
ld hl, wcd43
ld de, wcd45
ld bc, wcd47
jp z, .foundMatch
ld hl, wSlotMachineWheel1TopTile
ld de, wSlotMachineWheel2MiddleTile
ld bc, wSlotMachineWheel3BottomTile
call SlotMachine_CheckForMatch
jr z, .skip5
.skip1
ld hl, wcd43
ld de, wcd46
ld bc, wcd49
jr z, .foundMatch
; 2 coin bet allows top/bottom horizontal matches (plus the match for a 1 coin bet)
.checkMatchesFor2CoinBet
ld hl, wSlotMachineWheel1TopTile
ld de, wSlotMachineWheel2TopTile
ld bc, wSlotMachineWheel3TopTile
call SlotMachine_CheckForMatch
jr z, .skip5
ld hl, wTrainerScreenX
ld de, wcd44
ld bc, wcd47
jr z, .foundMatch
ld hl, wSlotMachineWheel1BottomTile
ld de, wSlotMachineWheel2BottomTile
ld bc, wSlotMachineWheel3BottomTile
call SlotMachine_CheckForMatch
jr z, .skip5
.skip2
ld hl, wcd42
ld de, wcd45
ld bc, wcd48
jr z, .foundMatch
; 1 coin bet only allows a middle horizontal match
.checkMatchFor1CoinBet
ld hl, wSlotMachineWheel1MiddleTile
ld de, wSlotMachineWheel2MiddleTile
ld bc, wSlotMachineWheel3MiddleTile
call SlotMachine_CheckForMatch
jr z, .skip5
ld a, [wcd4c]
jr z, .foundMatch
ld a, [wSlotMachineFlags]
and $c0
jr z, .skip3
ld hl, wcd4f
jr z, .noMatch
ld hl, wSlotMachineRerollCounter
dec [hl]
jr nz, .skip4
.skip3
jr nz, .rollWheel3DownByOneSymbol
.noMatch
ld hl, NotThisTimeText
call PrintText
.loop
.done
xor a
ld [wc002], a
ret
.skip4
call SlotMachine_37833
.rollWheel3DownByOneSymbol
call SlotMachine_AnimWheel3
call DelayFrame
call SlotMachine_37833
call SlotMachine_AnimWheel3
call DelayFrame
jp SlotMachine_37588
.skip5
ld a, [wcd4c]
jp SlotMachine_CheckForMatches
.foundMatch
ld a, [wSlotMachineFlags]
and $c0
jr z, .skip4
jr z, .rollWheel3DownByOneSymbol ; roll wheel if player isn't allowed to win
and $80
jr nz, .skip6
jr nz, .acceptMatch
; if 7/bar matches aren't enabled and the match was a 7/bar symbol, roll wheel
ld a, [hl]
cp $7
jr c, .skip4
.skip6
cp (SLOTSBAR >> 8) + 1
jr c, .rollWheel3DownByOneSymbol
.acceptMatch
ld a, [hl]
sub $2
ld [wTrainerScreenX], a
ld [wSlotMachineWinningSymbol], a
ld hl, SlotRewardPointers
ld c, a
ld b, $0
ld b, 0
add hl, bc
ld a, [hli]
ld e, a
@ -426,39 +446,39 @@ SlotMachine_37588: ; 37588 (d:7588)
ld h, [hl]
ld l, a
ld de, wcf4b
ld bc, $0004
ld bc, 4
call CopyData
pop hl
ld de, .asm_37638
ld de, .flashScreenLoop
push de
jp [hl]
.asm_37638
ld a, [$ff47]
.flashScreenLoop
ld a, [rBGP]
xor $40
ld [$ff47], a
ld [rBGP], a
ld c, 5
call DelayFrames
dec b
jr nz, .asm_37638
ld hl, wcd4a
jr nz, .flashScreenLoop
ld hl, wPayoutCoins
ld [hl], d
inc hl
ld [hl], e
call SlotMachine_3775f
ld hl, SlotsMachineText_37665
call SlotMachine_PrintPayoutCoins
ld hl, SymbolLinedUpSlotMachineText
call PrintText
call WaitForTextScrollButtonPress
call SlotMachine_3776b
call SlotMachine_3775f
call SlotMachine_PayCoinsToPlayer
call SlotMachine_PrintPayoutCoins
ld a, $e4
ld [$ff48], a
jp .loop
ld [rOBP0], a
jp .done
SlotsMachineText_37665: ; 37665 (d:7665)
SymbolLinedUpSlotMachineText: ; 37665 (d:7665)
TX_ASM
push bc
call SlotMachine_37728
call SlotMachine_PrintWinningSymbol
ld hl, LinedUpText
pop bc
inc bc
@ -510,28 +530,28 @@ SlotMachine_CheckForMatch: ; 376a2 (d:76a2)
cp [hl]
ret
SlotMachine_GetWheelThreeTile: ; 376a8 (d:76a8)
ld de, wcd47
SlotMachine_GetWheel3Tiles: ; 376a8 (d:76a8)
ld de, wSlotMachineWheel3BottomTile
ld hl, SlotMachineWheel3
ld a, [wTrainerScreenY]
call SlotMachine_GetWheelTile
ld a, [wSlotMachineWheel3Offset]
call SlotMachine_GetWheelTiles
SlotMachine_GetWheelTwoTile: ; 376b4 (d:76b4)
ld de, wcd44
SlotMachine_GetWheel2Tiles: ; 376b4 (d:76b4)
ld de, wSlotMachineWheel2BottomTile
ld hl, SlotMachineWheel2
ld a, [wTrainerFacingDirection]
call SlotMachine_GetWheelTile
ld a, [wSlotMachineWheel2Offset]
call SlotMachine_GetWheelTiles
SlotMachine_GetWheelOneTile: ; 376c0 (d:76c0)
ld de, wTrainerScreenX
SlotMachine_GetWheel1Tiles: ; 376c0 (d:76c0)
ld de, wSlotMachineWheel1BottomTile
ld hl, SlotMachineWheel1
ld a, [wTrainerEngageDistance]
ld a, [wSlotMachineWheel1Offset]
SlotMachine_GetWheelTile: ; 376c9 (d:76c9)
SlotMachine_GetWheelTiles: ; 376c9 (d:76c9)
ld c, a
ld b, $0
ld b, 0
add hl, bc
ld c, $3
ld c, 3
.loop
ld a, [hli]
ld [de], a
@ -542,7 +562,7 @@ SlotMachine_GetWheelTile: ; 376c9 (d:76c9)
ret
SlotReward8Func: ; 376d7 (d:76d7)
ld hl, W_SUBANIMSUBENTRYADDR
ld hl, wSlotMachineAllowMatchesCounter
ld a, [hl]
and a
jr z, .skip
@ -553,7 +573,7 @@ SlotReward8Func: ; 376d7 (d:76d7)
ret
SlotReward15Func: ; 376e5 (d:76e5)
ld hl, W_SUBANIMSUBENTRYADDR
ld hl, wSlotMachineAllowMatchesCounter
ld a, [hl]
and a
jr z, .skip
@ -567,7 +587,7 @@ SlotReward100Func: ; 376f3 (d:76f3)
ld a, (SFX_1f_42 - SFX_Headers_1f) / 3
call PlaySound
xor a
ld [wcd4c], a
ld [wSlotMachineFlags], a
ld b, $8
ld de, 100
ret
@ -581,9 +601,9 @@ SlotReward300Func: ; 37702 (d:7702)
cp $80
ld a, $0
jr c, .skip
ld [wcd4c], a
ld [wSlotMachineFlags], a
.skip
ld [W_SUBANIMSUBENTRYADDR], a
ld [wSlotMachineAllowMatchesCounter], a
ld b, $14
ld de, 300
ret
@ -592,26 +612,27 @@ YeahText: ; 37722 (d:7722)
TX_FAR _YeahText
db $0a, "@"
SlotMachine_37728: ; 37728 (d:7728)
ld hl, wTileMap + $11a
ld a, [wTrainerScreenX]
SlotMachine_PrintWinningSymbol: ; 37728 (d:7728)
; prints winning symbol and down arrow in text box
hlCoord 2, 14
ld a, [wSlotMachineWinningSymbol]
add $25
ld [hli], a
inc a
ld [hld], a
inc a
ld de, $ffec
ld de, -SCREEN_WIDTH
add hl, de
ld [hli], a
inc a
ld [hl], a
ld hl, wTileMap + $152
ld [hl], $ee
hlCoord 18, 16
ld [hl], $ee ; down arrow
ret
SlotMachine_37741: ; 37741 (d:7741)
ld hl, wcd4b
ld a, [wcd50]
SlotMachine_SubtractBetFromPlayerCoins: ; 37741 (d:7741)
ld hl, wTempCoins2 + 1
ld a, [wSlotMachineBet]
ld [hld], a
xor a
ld [hli], a
@ -619,136 +640,143 @@ SlotMachine_37741: ; 37741 (d:7741)
ld c, $2
predef SubBCDPredef
SlotMachine_37754: ; 37754 (d:7754)
ld hl, wTileMap + $19
SlotMachine_PrintCreditCoins: ; 37754 (d:7754)
hlCoord 5, 1
ld de, wPlayerCoins
ld c, $2
jp PrintBCDNumber
SlotMachine_3775f: ; 3775f (d:775f)
ld hl, wTileMap + $1f
ld de, wcd4a
ld bc, $8204
SlotMachine_PrintPayoutCoins: ; 3775f (d:775f)
hlCoord 11, 1
ld de, wPayoutCoins
ld bc, $8204 ; 2 bytes, 4 digits, leading zeroes
jp PrintNumber
SlotMachine_3776b: ; 3776b (d:776b)
SlotMachine_PayCoinsToPlayer: ; 3776b (d:776b)
ld a, $1
ld [wc002], a
call WaitForSoundToFinish
ld hl, wcd46
; Put 1 in the temp coins variable. This value is added to the player's coins
; repeatedly so the player can watch the value go up 1 coin at a time.
ld hl, wTempCoins1
xor a
ld [hli], a
inc a
ld [hl], a
ld a, $5
ld [W_SUBANIMTRANSFORM], a
ld a, 5
ld [wAnimCounter], a
; Subtract 1 from the payout amount and add 1 to the player's coins each
; iteration until the payout amount reaches 0.
.loop
ld a, [wcd4b]
ld a, [wPayoutCoins + 1]
ld l, a
ld a, [wcd4a]
ld a, [wPayoutCoins]
ld h, a
or l
ret z
ld de, $ffff
ld de, -1
add hl, de
ld a, l
ld [wcd4b], a
ld [wPayoutCoins + 1], a
ld a, h
ld [wcd4a], a
ld hl, wcd47
ld [wPayoutCoins], a
ld hl, wTempCoins1 + 1
ld de, wPlayerCoins + 1
ld c, $2
predef AddBCDPredef
call SlotMachine_37754
call SlotMachine_3775f
call SlotMachine_PrintCreditCoins
call SlotMachine_PrintPayoutCoins
ld a, (SFX_1f_65 - SFX_Headers_1f) / 3
call PlaySound
ld a, [W_SUBANIMTRANSFORM]
ld a, [wAnimCounter]
dec a
jr nz, .skip1
ld a, [$ff48]
xor $40
ld [$ff48], a
ld a, $5
ld a, [rOBP0]
xor $40 ; make the slot wheel symbols flash
ld [rOBP0], a
ld a, 5
.skip1
ld [W_SUBANIMTRANSFORM], a
ld a, [wTrainerScreenX]
cp $7
ld [wAnimCounter], a
ld a, [wSlotMachineWinningSymbol]
cp (SLOTSBAR >> 8) + 1
ld c, 8
jr nc, .skip2
srl c
srl c ; c = 4 (make the the coins transfer faster if the symbol was 7 or bar)
.skip2
call DelayFrames
jr .loop
SlotMachine_377ce: ; 377ce (d:77ce)
SlotMachine_PutOutLitBalls: ; 377ce (d:77ce)
ld a, $23
ld [wd08a], a
jr SlotMachine_377e3
jr SlotMachine_UpdateThreeCoinBallTiles
SlotMachine_377d5: ; 377d5 (d:77d5)
SlotMachine_LightBalls: ; 377d5 (d:77d5)
ld a, $14
ld [wd08a], a
ld a, [wcd50]
ld a, [wSlotMachineBet]
dec a
jr z, SlotMachine_377fb
jr z, SlotMachine_UpdateOneCoinBallTiles
dec a
jr z, SlotMachine_377ef
jr z, SlotMachine_UpdateTwoCoinBallTiles
SlotMachine_377e3: ; 377e3 (d:77e3)
ld hl, wTileMap + $2b
call SlotMachine_377fe
ld hl, wTileMap + $cb
call SlotMachine_377fe
SlotMachine_UpdateThreeCoinBallTiles: ; 377e3 (d:77e3)
hlCoord 3, 2
call SlotMachine_UpdateBallTiles
hlCoord 3, 10
call SlotMachine_UpdateBallTiles
SlotMachine_377ef: ; 377ef (d:77ef)
ld hl, wTileMap + $53
call SlotMachine_377fe
ld hl, wTileMap + $a3
call SlotMachine_377fe
SlotMachine_UpdateTwoCoinBallTiles: ; 377ef (d:77ef)
hlCoord 3, 4
call SlotMachine_UpdateBallTiles
hlCoord 3, 8
call SlotMachine_UpdateBallTiles
SlotMachine_377fb: ; 377fb (d:77fb)
ld hl, wTileMap + $7b
SlotMachine_UpdateOneCoinBallTiles: ; 377fb (d:77fb)
hlCoord 3, 6
SlotMachine_377fe: ; 377fe (d:77fe)
SlotMachine_UpdateBallTiles: ; 377fe (d:77fe)
ld a, [wd08a]
ld [hl], a
ld bc, $000d
ld bc, 13
add hl, bc
ld [hl], a
ld bc, $0007
ld bc, 7
add hl, bc
inc a
ld [hl], a
ld bc, $000d
ld bc, 13
add hl, bc
ld [hl], a
ret
SlotMachine_37813: ; 37813 (d:7813)
SlotMachine_AnimWheel1: ; 37813 (d:7813)
ld bc, SlotMachineWheel1
ld de, wTrainerEngageDistance
ld de, wSlotMachineWheel1Offset
ld hl, wOAMBuffer
ld a, $30
ld [W_BASECOORDX], a
jr SlotMachine_37841
jr SlotMachine_AnimWheel
SlotMachine_37823: ; 37823 (d:7823)
SlotMachine_AnimWheel2: ; 37823 (d:7823)
ld bc, SlotMachineWheel2
ld de, wTrainerFacingDirection
ld de, wSlotMachineWheel2Offset
ld hl, wOAMBuffer + $30
ld a, $50
ld [W_BASECOORDX], a
jr SlotMachine_37841
jr SlotMachine_AnimWheel
SlotMachine_37833: ; 37833 (d:7833)
SlotMachine_AnimWheel3: ; 37833 (d:7833)
ld bc, SlotMachineWheel3
ld de, wTrainerScreenY
ld de, wSlotMachineWheel3Offset
ld hl, wOAMBuffer + $60
ld a, $70
ld [W_BASECOORDX], a
SlotMachine_37841: ; 37841 (d:7841)
SlotMachine_AnimWheel: ; 37841 (d:7841)
ld a, $58
ld [W_BASECOORDY], a
push de
@ -756,10 +784,9 @@ SlotMachine_37841: ; 37841 (d:7841)
ld d, b
add c
ld e, a
jr nc, SlotMachine_3784e
jr nc, .loop
inc d
SlotMachine_3784e: ; 3784e (d:784e)
.loop
ld a, [W_BASECOORDY]
ld [hli], a
ld a, [W_BASECOORDX]
@ -783,30 +810,30 @@ SlotMachine_3784e: ; 3784e (d:784e)
sub $8
ld [W_BASECOORDY], a
cp $28
jr nz, SlotMachine_3784e
jr nz, .loop
pop de
ld a, [de]
inc a
cp $1e
inc a ; advance the offset so that the wheel animates
cp 30
jr nz, .skip
xor a
xor a ; wrap around to 0 when the offset reaches 30
.skip
ld [de], a
ret
SlotMachine_37882: ; 37882 (d:7882)
SlotMachine_HandleInputWhileWheelsSpin: ; 37882 (d:7882)
call DelayFrame
call JoypadLowSensitivity
ld a, [hJoy5]
and $1
and A_BUTTON
ret z
ld hl, wTrainerSpriteOffset
ld hl, wStoppingWhichSlotMachineWheel
ld a, [hl]
dec a
ld de, wcd4d
ld de, wSlotMachineWheel1SlipCounter
jr z, .skip
dec a
ld de, wcd4e
ld de, wSlotMachineWheel2SlipCounter
jr z, .skip
.loop
inc [hl]
@ -845,20 +872,13 @@ LoadSlotMachineTiles: ; 378a8 (d:78a8)
ld [hli], a
ld [hli], a
ld [hl], a
call SlotMachine_37813
call SlotMachine_37823
jp SlotMachine_37833
call SlotMachine_AnimWheel1
call SlotMachine_AnimWheel2
jp SlotMachine_AnimWheel3
SlotMachineMap: ; 378f5 (d:78f5)
INCBIN "gfx/tilemaps/slotmachine.map"
SLOTS7 EQU $0200
SLOTSBAR EQU $0604
SLOTSCHERRY EQU $0A08
SLOTSFISH EQU $0E0C
SLOTSBIRD EQU $1210
SLOTSMOUSE EQU $1614
INCLUDE "data/slot_machine_wheels.asm"
SlotMachineTiles1: ; 37a51 (d:7a51)

View file

@ -348,7 +348,7 @@ Func_4524: ; 4524 (1:4524)
jp LoadFrontSpriteByMonIndex
Func_4533: ; 4533 (1:4533)
ld [$ffbd], a
ld [H_AUTOBGTRANSFERDEST + 1], a
jp Delay3
LoadCopyrightAndTextBoxTiles: ; 4538 (1:4538)

View file

@ -10,7 +10,7 @@ DisplayTownMap: ; 70e3e (1c:4e3e)
ld a, [W_CURMAP]
push af
ld b, $0
call Func_711c4
call DrawPlayerOrBirdSprite ; player sprite
hlCoord 1, 0
ld de, wcd6d
call PlaceString
@ -23,7 +23,7 @@ DisplayTownMap: ; 70e3e (1c:4e3e)
ld bc, (BANK(TownMapCursor) << 8) + $04
call CopyVideoDataDouble
xor a
ld [wWhichTrade], a
ld [wWhichTownMapLocation], a
pop af
jr .enterLoop
@ -32,29 +32,29 @@ DisplayTownMap: ; 70e3e (1c:4e3e)
ld bc, $114
call ClearScreenArea
ld hl, TownMapOrder
ld a, [wWhichTrade]
ld a, [wWhichTownMapLocation]
ld c, a
ld b, $0
ld b, 0
add hl, bc
ld a, [hl]
.enterLoop
ld de, wHPBarMaxHP
call FindTownMapCoords
ld de, wTownMapCoords
call LoadTownMapEntry
ld a, [de]
push hl
call SetTownMapOAMCoords
call TownMapCoordsToOAMCoords
ld a, $4
ld [wcd5b], a
ld [wOAMBaseTile], a
ld hl, wOAMBuffer + $10
call Func_71279
call WriteTownMapSpriteOAM ; town map cursor sprite
pop hl
ld de, wcd6d
.asm_70eac
.copyMapName
ld a, [hli]
ld [de], a
inc de
cp $50
jr nz, .asm_70eac
jr nz, .copyMapName
hlCoord 1, 0
ld de, wcd6d
call PlaceString
@ -72,35 +72,35 @@ DisplayTownMap: ; 70e3e (1c:4e3e)
ld a, (SFX_02_3c - SFX_Headers_02) / 3
call PlaySound
bit 6, b
jr nz, .upPressed
jr nz, .pressedUp
bit 7, b
jr nz, .downPressed
jr nz, .pressedDown
xor a
ld [wTownMapSpriteBlinkingEnabled], a
ld [hJoy7], a
ld [wTownMapSpriteBlinkingCounter], a
ld [wAnimCounter], a
call ExitTownMap
pop hl
pop af
ld [hl], a
ret
.upPressed
ld a, [wWhichTrade]
.pressedUp
ld a, [wWhichTownMapLocation]
inc a
cp TownMapOrderEnd - TownMapOrder ; number of list items + 1
jr nz, .noOverflow
xor a
.noOverflow
ld [wWhichTrade], a
ld [wWhichTownMapLocation], a
jp .townMapLoop
.downPressed
ld a, [wWhichTrade]
.pressedDown
ld a, [wWhichTownMapLocation]
dec a
cp $ff
cp -1
jr nz, .noUnderflow
ld a, TownMapOrderEnd - TownMapOrder - 1 ; number of list items
.noUnderflow
ld [wWhichTrade], a
ld [wWhichTownMapLocation], a
jp .townMapLoop
INCLUDE "data/town_map_order.asm"
@ -146,7 +146,7 @@ LoadTownMap_Fly: ; 70f90 (1c:4f90)
ld hl, vChars1 + $6d0
ld bc, (BANK(TownMapUpArrow) << 8) + $01
call CopyVideoDataDouble
call SetupVisitedTownsList
call BuildFlyLocationsList
ld hl, wUpdateSpritesEnabled
ld a, [hl]
push af
@ -157,10 +157,9 @@ LoadTownMap_Fly: ; 70f90 (1c:4f90)
call PlaceString
ld a, [W_CURMAP]
ld b, $0
call Func_711c4
ld hl, wTrainerEngageDistance
call DrawPlayerOrBirdSprite
ld hl, wFlyLocationsList
deCoord 18, 0
.townMapFlyLoop
ld a, $7f
ld [de], a
@ -172,7 +171,7 @@ LoadTownMap_Fly: ; 70f90 (1c:4f90)
pop hl
ld a, [hl]
ld b, $4
call Func_711c4
call DrawPlayerOrBirdSprite ; draw bird sprite
hlCoord 3, 0
ld de, wcd6d
call PlaceString
@ -193,15 +192,15 @@ LoadTownMap_Fly: ; 70f90 (1c:4f90)
and A_BUTTON | B_BUTTON | D_UP | D_DOWN
jr z, .inputLoop
bit 0, b
jr nz, .aButtonPressed
jr nz, .pressedA
ld a, (SFX_02_3c - SFX_Headers_02) / 3
call PlaySound
bit 6, b
jr nz, .upPressed
jr nz, .pressedUp
bit 7, b
jr nz, .downPressed
jr .bButtonPressed
.aButtonPressed
jr nz, .pressedDown
jr .pressedB
.pressedA
ld a, (SFX_02_3e - SFX_Headers_02) / 3
call PlaySound
ld a, [hl]
@ -210,7 +209,7 @@ LoadTownMap_Fly: ; 70f90 (1c:4f90)
set 3, [hl]
inc hl
set 7, [hl]
.bButtonPressed
.pressedB
xor a
ld [wTownMapSpriteBlinkingEnabled], a
call GBPalWhiteOutWithDelay3
@ -218,36 +217,36 @@ LoadTownMap_Fly: ; 70f90 (1c:4f90)
pop af
ld [hl], a
ret
.upPressed
.pressedUp
deCoord 18, 0
inc hl
ld a, [hl]
cp $ff
jr z, .asm_71052
jr z, .wrapToStartOfList
cp $fe
jr z, .upPressed
jr z, .pressedUp ; skip past unvisited towns
jp .townMapFlyLoop
.asm_71052
ld hl, wTrainerEngageDistance
.wrapToStartOfList
ld hl, wFlyLocationsList
jp .townMapFlyLoop
.downPressed
.pressedDown
deCoord 19, 0
dec hl
ld a, [hl]
cp $ff
jr z, .asm_71068
jr z, .wrapToEndOfList
cp $fe
jr z, .downPressed
jr z, .pressedDown ; skip past unvisited towns
jp .townMapFlyLoop
.asm_71068
ld hl, wcd49
jr .downPressed
.wrapToEndOfList
ld hl, wFlyLocationsList + 11
jr .pressedDown
ToText: ; 7106d (1c:506d)
db "To@"
SetupVisitedTownsList: ; 71070 (1c:5070)
ld hl, wWhichTrade
BuildFlyLocationsList: ; 71070 (1c:5070)
ld hl, wFlyLocationsList - 1
ld [hl], $ff
inc hl
ld a, [W_TOWNVISITEDFLAG]
@ -258,9 +257,9 @@ SetupVisitedTownsList: ; 71070 (1c:5070)
.loop
srl d
rr e
ld a, $fe
ld a, $fe ; store $fe if the town hasn't been visited
jr nc, .notVisited
ld a, b
ld a, b ; store the map number of the town if it has been visited
.notVisited
ld [hl], a
inc hl
@ -305,10 +304,10 @@ LoadTownMap: ; 7109b (1c:509b)
swap a
and $f
add $60
.uncompressTile
.writeRunLoop
ld [hli], a
dec c
jr nz, .uncompressTile
jr nz, .writeRunLoop
inc de
jr .nextTile
.done
@ -318,7 +317,7 @@ LoadTownMap: ; 7109b (1c:509b)
call Delay3
call GBPalNormal
xor a
ld [wTownMapSpriteBlinkingCounter], a
ld [wAnimCounter], a
inc a
ld [wTownMapSpriteBlinkingEnabled], a
ret
@ -328,6 +327,7 @@ CompressedMap: ; 71100 (1c:5100)
INCBIN "gfx/town_map.rle"
ExitTownMap: ; 711ab (1c:51ab)
; clear town map graphics data and load usual graphics data
xor a
ld [wTownMapSpriteBlinkingEnabled], a
call GBPalWhiteOut
@ -338,17 +338,19 @@ ExitTownMap: ; 711ab (1c:51ab)
call UpdateSprites
jp GoPAL_SET_CF1C
Func_711c4: ; 711c4 (1c:51c4)
DrawPlayerOrBirdSprite: ; 711c4 (1c:51c4)
; a = map number
; b = OAM base tile
push af
ld a, b
ld [wcd5b], a
ld [wOAMBaseTile], a
pop af
ld de, wHPBarMaxHP
call FindTownMapCoords
ld de, wTownMapCoords
call LoadTownMapEntry
ld a, [de]
push hl
call SetTownMapOAMCoords
call Func_7126d
call TownMapCoordsToOAMCoords
call WritePlayerOrBirdSpriteOAM
pop hl
ld de, wcd6d
.asm_711dc
@ -364,33 +366,34 @@ Func_711c4: ; 711c4 (1c:51c4)
DisplayWildLocations: ; 711ef (1c:51ef)
callba FindWildLocationsOfMon
call Func_712d9
call ZeroOutDuplicatesInList
ld hl, wOAMBuffer
ld de, wBuffer
ld de, wTownMapCoords
.loop
ld a, [de]
cp $ff
jr z, .exitLoop
and a
jr z, .next
jr z, .nextEntry
push hl
call FindTownMapCoords
call LoadTownMapEntry
pop hl
ld a, [de]
cp $19
jr z, .next
call SetTownMapOAMCoords
cp $19 ; Cerulean Cave's coordinates
jr z, .nextEntry ; skip Cerulean Cave
call TownMapCoordsToOAMCoords
ld a, $4 ; nest icon tile no.
ld [hli], a
xor a
ld [hli], a
.next
.nextEntry
inc de
jr .loop
.exitLoop
ld a, l
and a
jr nz, .locationKnown
and a ; were any OAM entries written?
jr nz, .drawPlayerSprite
; if no OAM entries were written, print area unknown text
hlCoord 1, 7
ld b, $2
ld c, $f
@ -399,10 +402,10 @@ DisplayWildLocations: ; 711ef (1c:51ef)
ld de, AreaUnknownText
call PlaceString
jr .done
.locationKnown
.drawPlayerSprite
ld a, [W_CURMAP]
ld b, $0
call Func_711c4
call DrawPlayerOrBirdSprite
.done
ld hl, wOAMBuffer
ld de, wTileMapBackup
@ -412,39 +415,41 @@ DisplayWildLocations: ; 711ef (1c:51ef)
AreaUnknownText: ; 7124a (1c:524a)
db " AREA UNKNOWN@"
SetTownMapOAMCoords: ; 71258 (1c:5258)
TownMapCoordsToOAMCoords: ; 71258 (1c:5258)
; in: lower nybble of a = x, upper nybble of a = y
; out: b and [hl] = (y * 8) + 24, c and [hl+1] = (x * 8) + 24
push af
and $f0
srl a
add $18
add 24
ld b, a
ld [hli], a
pop af
and $f
swap a
srl a
add $18
add 24
ld c, a
ld [hli], a
ret
Func_7126d: ; 7126d (1c:526d)
ld a, [wcd5b]
WritePlayerOrBirdSpriteOAM: ; 7126d (1c:526d)
ld a, [wOAMBaseTile]
and a
ld hl, wOAMBuffer + $90
jr z, Func_71279
ld hl, wOAMBuffer + $80
ld hl, wOAMBuffer + $90 ; for player sprite
jr z, WriteTownMapSpriteOAM
ld hl, wOAMBuffer + $80 ; for bird sprite
Func_71279: ; 71279 (1c:5279)
WriteTownMapSpriteOAM: ; 71279 (1c:5279)
push hl
ld hl, $fcfc
add hl, bc
add hl, bc ; subtract 4 from c (X coord) and 3 from b (Y coord)
ld b, h
ld c, l
pop hl
WriteAsymmetricMonPartySpriteOAM: ; 71281 (1c:5281)
; Writes 4 OAM blocks for a helix mon party sprite, since is does not have
; Writes 4 OAM blocks for a helix mon party sprite, since it does not have
; a vertical line of symmetry.
ld de, $202
.loop
@ -455,10 +460,10 @@ WriteAsymmetricMonPartySpriteOAM: ; 71281 (1c:5281)
ld [hli], a
ld a, c
ld [hli], a
ld a, [wcd5b]
ld a, [wOAMBaseTile]
ld [hli], a
inc a
ld [wcd5b], a
ld [wOAMBaseTile], a
xor a
ld [hli], a
inc d
@ -492,7 +497,7 @@ WriteSymmetricMonPartySpriteOAM: ; 712a6 (1c:52a6)
ld [hli], a
ld a, c
ld [hli], a
ld a, [wcd5b]
ld a, [wOAMBaseTile]
ld [hli], a
ld a, [wcd5c]
ld [hli], a
@ -507,7 +512,7 @@ WriteSymmetricMonPartySpriteOAM: ; 712a6 (1c:52a6)
pop bc
pop de
push hl
ld hl, wcd5b
ld hl, wOAMBaseTile
inc [hl]
inc [hl]
pop hl
@ -518,9 +523,10 @@ WriteSymmetricMonPartySpriteOAM: ; 712a6 (1c:52a6)
jr nz, .loop
ret
Func_712d9: ; 712d9 (1c:52d9)
ld de, wHPBarMaxHP
.asm_712dc
ZeroOutDuplicatesInList: ; 712d9 (1c:52d9)
; replace duplicate bytes in the list of wild pokemon locations with 0
ld de, wBuffer
.loop
ld a, [de]
inc de
cp $ff
@ -528,39 +534,41 @@ Func_712d9: ; 712d9 (1c:52d9)
ld c, a
ld l, e
ld h, d
.asm_712e4
.zeroDuplicatesLoop
ld a, [hl]
cp $ff
jr z, .asm_712dc
jr z, .loop
cp c
jr nz, .asm_712ee
jr nz, .skipZeroing
xor a
ld [hl], a
.asm_712ee
.skipZeroing
inc hl
jr .asm_712e4
jr .zeroDuplicatesLoop
FindTownMapCoords: ; 712f1 (1c:52f1)
LoadTownMapEntry: ; 712f1 (1c:52f1)
; in: a = map number
; out: lower nybble of [de] = x, upper nybble of [de] = y, hl = address of name
cp REDS_HOUSE_1F
jr c, .townOrRoute
ld bc, $4
jr c, .external
ld bc, 4
ld hl, InternalMapEntries
.loop
cp [hl]
jr c, .match
jr c, .foundEntry
add hl, bc
jr .loop
.match
.foundEntry
inc hl
jr .done
.townOrRoute
jr .readEntry
.external
ld hl, ExternalMapEntries
ld c, a
ld b, $0
ld b, 0
add hl, bc
add hl, bc
add hl, bc
.done
.readEntry
ld a, [hli]
ld [de], a
ld a, [hli]
@ -576,7 +584,7 @@ MonNestIcon: ; 716be (1c:56be)
INCBIN "gfx/mon_nest_icon.1bpp"
TownMapSpriteBlinkingAnimation: ; 716c6 (1c:56c6)
ld a, [wTownMapSpriteBlinkingCounter]
ld a, [wAnimCounter]
inc a
cp 25
jr z, .hideSprites
@ -600,5 +608,5 @@ TownMapSpriteBlinkingAnimation: ; 716c6 (1c:56c6)
jr nz, .hideSpritesLoop
ld a, 25
.done
ld [wTownMapSpriteBlinkingCounter], a
ld [wAnimCounter], a
jp DelayFrame

View file

@ -13,7 +13,7 @@ ExternalClockTradeAnim: ; 410f3 (10:50f3)
; Externally clocked link cable trades use this.
ld a, [wTradedEnemyMonSpecies]
ld [wLeftGBMonSpecies], a
ld a, [wTrainerSpriteOffset]
ld a, [wTradedPlayerMonSpecies]
ld [wRightGBMonSpecies], a
ld de, ExternalClockTradeFuncSequence
@ -259,7 +259,7 @@ Trade_ShowPlayerMon: ; 41245 (10:5245)
ld a, TRADE_BALL_POOF_ANIM
call Trade_ShowAnimation
ld a, TRADE_BALL_DROP_ANIM
call Trade_ShowAnimation
call Trade_ShowAnimation ; clears mon pic
ld a, [wTradedPlayerMonSpecies]
call PlayCry
xor a
@ -272,8 +272,12 @@ Trade_DrawOpenEndOfLinkCable: ; 41298 (10:5298)
call CopyScreenTileBufferToVRAM
ld b, $8
call GoPAL_SET
; This function call is pointless. It just copies blank tiles to VRAM that was
; already filled with blank tiles.
ld hl, vBGMap1 + $8c
call Trade_CopyCableTilesOffScreen
ld a, $a0
ld [hSCX], a
call DelayFrame
@ -754,7 +758,10 @@ Trade_ShowClearedWindow: ; 415c8 (10:55c8)
ret
Trade_SlideTextBoxOffScreen: ; 415df (10:55df)
; Slides the window right until it's off screen.
; Slides the window right until it's off screen. The window usually just has
; a text box at the bottom when this is called. However, when this is called
; after Trade_ShowEnemyMon in the external clock sequence, there is a mon pic
; above the text box and it is also scrolled off the screen.
ld c, 50
call DelayFrames
.loop

View file

@ -378,7 +378,7 @@ PartyMenuInit:: ; 1420 (0:1420)
set 6, [hl] ; turn off letter printing delay
xor a
ld [wcc49], a
ld [wcc37], a
ld [wMenuWatchMovingOutOfBounds], a
ld hl, wTopMenuItemY
inc a
ld [hli], a ; top menu item Y
@ -456,7 +456,7 @@ HandlePartyMenuInput:: ; 145a (0:145a)
callba ErasePartyMenuCursors
xor a
ld [wMenuItemToSwap],a
ld [wd07d],a
ld [wPartyMenuTypeOrMessageID],a
call RedrawPartyMenu
jr HandlePartyMenuInput
.handleSwap
@ -1201,8 +1201,8 @@ DisplayPokemartDialogue:: ; 2a2e (0:2a2e)
pop hl
inc hl
call LoadItemList
ld a,$02
ld [wListMenuID],a ; selects between subtypes of menus
ld a,PRICEDITEMLISTMENU
ld [wListMenuID],a
ld a,[H_LOADEDROMBANK]
push af
ld a,Bank(DisplayPokemartDialogue_)
@ -1219,12 +1219,12 @@ PokemartGreetingText:: ; 2a55 (0:2a55)
db "@"
LoadItemList:: ; 2a5a (0:2a5a)
ld a,$01
ld a,1
ld [wUpdateSpritesEnabled],a
ld a,h
ld [wd128],a
ld [wItemListPointer],a
ld a,l
ld [wd129],a
ld [wItemListPointer + 1],a
ld de,wStringBuffer2 + 11
.loop
ld a,[hli]
@ -1336,7 +1336,7 @@ AddAmountSoldToMoney:: ; 2b9e (0:2b9e)
; INPUT:
; HL = address of inventory (either wNumBagItems or wNumBoxItems)
; [wWhichPokemon] = index (within the inventory) of the item to remove
; [wcf96] = quantity to remove
; [wItemQuantity] = quantity to remove
RemoveItemFromInventory:: ; 2bbb (0:2bbb)
ld a,[H_LOADEDROMBANK]
push af
@ -1353,7 +1353,7 @@ RemoveItemFromInventory:: ; 2bbb (0:2bbb)
; INPUT:
; HL = address of inventory (either wNumBagItems or wNumBoxItems)
; [wcf91] = item ID
; [wcf96] = item quantity
; [wItemQuantity] = item quantity
; sets carry flag if successful, unsets carry flag if unsuccessful
AddItemToInventory:: ; 2bcf (0:2bcf)
push bc
@ -1391,13 +1391,13 @@ DisplayListMenuID:: ; 2be6 (0:2be6)
set 6,[hl] ; turn off letter printing delay
xor a
ld [wMenuItemToSwap],a ; 0 means no item is currently being swapped
ld [wd12a],a
ld [wListCount],a
ld a,[wList]
ld l,a
ld a,[wList + 1]
ld h,a ; hl = address of the list
ld a,[hl]
ld [wd12a],a ; [wd12a] = number of list entries
ld a,[hl] ; the first byte is the number of entries in the list
ld [wListCount],a
ld a,LIST_MENU_BOX
ld [wTextBoxID],a
call DisplayTextBoxID ; draw the menu text box
@ -1411,8 +1411,8 @@ DisplayListMenuID:: ; 2be6 (0:2be6)
call UpdateSprites
.skipMovingSprites
ld a,1 ; max menu item ID is 1 if the list has less than 2 entries
ld [wcc37],a
ld a,[wd12a]
ld [wMenuWatchMovingOutOfBounds],a
ld a,[wListCount]
cp a,2 ; does the list have less than 2 entries?
jr c,.setMenuVariables
ld a,2 ; max menu item ID is 2 if the list has at least 2 entries
@ -1461,17 +1461,20 @@ DisplayListMenuIDLoop:: ; 2c53 (0:2c53)
.buttonAPressed
ld a,[wCurrentMenuItem]
call PlaceUnfilledArrowMenuCursor
; pointless because both values are overwritten before they are read
ld a,$01
ld [wd12e],a
ld [wd12d],a
ld [wMenuExitMethod],a
ld [wChosenMenuItem],a
xor a
ld [wcc37],a
ld [wMenuWatchMovingOutOfBounds],a
ld a,[wCurrentMenuItem]
ld c,a
ld a,[wListScrollOffset]
add c
ld c,a
ld a,[wd12a] ; number of list entries
ld a,[wListCount]
and a ; is the list empty?
jp z,ExitListMenu ; if so, exit the menu
dec a
@ -1506,7 +1509,7 @@ DisplayListMenuIDLoop:: ; 2c53 (0:2c53)
; if it's an item menu
inc hl
ld a,[hl] ; a = item quantity
ld [wcf97],a
ld [wMaxItemQuantity],a
.skipGettingQuantity
ld a,[wcf91]
ld [wd0b5],a
@ -1527,10 +1530,10 @@ DisplayListMenuIDLoop:: ; 2c53 (0:2c53)
.storeChosenEntry ; store the menu entry that the player chose and return
ld de,wcd6d
call CopyStringToCF4B ; copy name to wcf4b
ld a,$01
ld [wd12e],a
ld a,CHOSE_MENU_ITEM
ld [wMenuExitMethod],a
ld a,[wCurrentMenuItem]
ld [wd12d],a
ld [wChosenMenuItem],a
xor a
ld [hJoy7],a ; joypad state update flag
ld hl,wd730
@ -1549,7 +1552,7 @@ DisplayListMenuIDLoop:: ; 2c53 (0:2c53)
ld a,[hl]
add a,3
ld b,a
ld a,[wd12a] ; number of list entries
ld a,[wListCount]
cp b ; will going down scroll past the Cancel button?
jp c,DisplayListMenuIDLoop
inc [hl] ; if not, go down
@ -1584,7 +1587,7 @@ DisplayChooseQuantityMenu:: ; 2d57 (0:2d57)
ld de,InitialQuantityText
call PlaceString
xor a
ld [wcf96],a ; initialize current quantity to 0
ld [wItemQuantity],a ; initialize current quantity to 0
jp .incrementQuantity
.waitForKeyPressLoop
call JoypadLowSensitivity
@ -1599,10 +1602,10 @@ DisplayChooseQuantityMenu:: ; 2d57 (0:2d57)
jr nz,.decrementQuantity
jr .waitForKeyPressLoop
.incrementQuantity
ld a,[wcf97] ; max quantity
ld a,[wMaxItemQuantity]
inc a
ld b,a
ld hl,wcf96 ; current quantity
ld hl,wItemQuantity ; current quantity
inc [hl]
ld a,[hl]
cp b
@ -1612,11 +1615,11 @@ DisplayChooseQuantityMenu:: ; 2d57 (0:2d57)
ld [hl],a
jr .handleNewQuantity
.decrementQuantity
ld hl,wcf96 ; current quantity
ld hl,wItemQuantity ; current quantity
dec [hl]
jr nz,.handleNewQuantity
; wrap to the max quantity if the player goes below 1
ld a,[wcf97] ; max quantity
ld a,[wMaxItemQuantity]
ld [hl],a
.handleNewQuantity
hlCoord 17, 10
@ -1625,7 +1628,7 @@ DisplayChooseQuantityMenu:: ; 2d57 (0:2d57)
jr nz,.printQuantity
.printPrice
ld c,$03
ld a,[wcf96]
ld a,[wItemQuantity]
ld b,a
ld hl,$ff9f ; total price
; initialize total price to 0
@ -1641,7 +1644,7 @@ DisplayChooseQuantityMenu:: ; 2d57 (0:2d57)
pop bc
dec b
jr nz,.addLoop
ld a,[$ff8e]
ld a,[hHalveItemPrices]
and a ; should the price be halved (for selling items)?
jr z,.skipHalvingPrice
xor a
@ -1666,7 +1669,7 @@ DisplayChooseQuantityMenu:: ; 2d57 (0:2d57)
call PrintBCDNumber
hlCoord 9, 10
.printQuantity
ld de,wcf96 ; current quantity
ld de,wItemQuantity ; current quantity
ld bc,$8102 ; print leading zeroes, 1 byte, 2 digits
call PrintNumber
jp .waitForKeyPressLoop
@ -1688,10 +1691,10 @@ SpacesBetweenQuantityAndPriceText:: ; 2e34 (0:2e34)
ExitListMenu:: ; 2e3b (0:2e3b)
ld a,[wCurrentMenuItem]
ld [wd12d],a
ld a,$02
ld [wd12e],a
ld [wcc37],a
ld [wChosenMenuItem],a
ld a,CANCELLED_MENU
ld [wMenuExitMethod],a
ld [wMenuWatchMovingOutOfBounds],a
xor a
ld [hJoy7],a
ld hl,wd730
@ -1775,7 +1778,7 @@ PrintListMenuEntries:: ; 2e5a (0:2e5a)
call PlaceString
pop de
pop hl
ld a,[wcf93]
ld a,[wPrintItemPrices]
and a ; should prices be printed?
jr z,.skipPrintingItemPrice
.printItemPrice
@ -1839,7 +1842,7 @@ PrintListMenuEntries:: ; 2e5a (0:2e5a)
ld a,[wd11e]
ld [wcf91],a
call IsKeyItem ; check if item is unsellable
ld a,[wd124]
ld a,[wIsKeyItem]
and a ; is the item unsellable?
jr nz,.skipPrintingItemQuantity ; if so, don't print the quantity
push hl
@ -1850,7 +1853,7 @@ PrintListMenuEntries:: ; 2e5a (0:2e5a)
ld a,[wd11e]
push af
ld a,[de]
ld [wcf97],a
ld [wMaxItemQuantity],a
push de
ld de,wd11e
ld [de],a
@ -2101,7 +2104,7 @@ UseItem:: ; 30bc (0:30bc)
; hl = address of inventory (either wNumBagItems or wNumBoxItems)
; [wcf91] = item ID
; [wWhichPokemon] = index of item within inventory
; [wcf96] = quantity to toss
; [wItemQuantity] = quantity to toss
; OUTPUT:
; clears carry flag if the item is tossed, sets carry flag if not
TossItem:: ; 30c4 (0:30c4)
@ -2121,7 +2124,7 @@ TossItem:: ; 30c4 (0:30c4)
; INPUT:
; [wcf91] = item ID
; OUTPUT:
; [wd124] = result
; [wIsKeyItem] = result
; 00: item is not key item
; 01: item is key item
IsKeyItem:: ; 30d9 (0:30d9)
@ -3596,8 +3599,8 @@ CopyDataUntil:: ; 3913 (0:3913)
; Function to remove a pokemon from the party or the current box.
; wWhichPokemon determines the pokemon.
; [wcf95] == 0 specifies the party.
; [wcf95] != 0 specifies the current box.
; [wRemoveMonFromBox] == 0 specifies the party.
; [wRemoveMonFromBox] != 0 specifies the current box.
RemovePokemon:: ; 391f (0:391f)
ld hl, _RemovePokemon
ld b, BANK(_RemovePokemon)
@ -3826,13 +3829,13 @@ AddEnemyMonToPlayerParty:: ; 3a53 (0:3a53)
ld [MBC1RomBank], a
ret
Func_3a68:: ; 3a68 (0:3a68)
MoveMon:: ; 3a68 (0:3a68)
ld a, [H_LOADEDROMBANK]
push af
ld a, BANK(MoveMon)
ld a, BANK(_MoveMon)
ld [H_LOADEDROMBANK], a
ld [MBC1RomBank], a
call MoveMon
call _MoveMon
pop bc
ld a, b
ld [H_LOADEDROMBANK], a
@ -3925,7 +3928,7 @@ HandleMenuInputPokemonSelection:: ; 3ac2 (0:3ac2)
ld [H_DOWNARROWBLINKCNT2],a ; blinking down arrow timing value 2
.loop1
xor a
ld [wPartyMonAnimCounter],a ; counter for pokemon shaking animation
ld [wAnimCounter],a ; counter for pokemon shaking animation
call PlaceMenuCursor
call Delay3
.loop2
@ -4023,7 +4026,7 @@ HandleMenuInputPokemonSelection:: ; 3ac2 (0:3ac2)
ld a,[hJoy5]
ret
.noWrappingAround
ld a,[wcc37]
ld a,[wMenuWatchMovingOutOfBounds]
and a ; should we return if the user tried to go past the top or bottom?
jr z,.checkOtherKeys
jr .checkIfAButtonOrBButtonPressed
@ -4568,7 +4571,7 @@ GiveItem::
ld [wd11e], a
ld [wcf91], a
ld a, c
ld [wcf96], a
ld [wItemQuantity], a
ld hl,wNumBagItems
call AddItemToInventory
ret nc

View file

@ -31,8 +31,8 @@ rLCDC_DEFAULT EQU %11100011
ld [$ff4a], a
ld [$ff06], a
ld [$ff07], a
ld [$ff47], a
ld [$ff48], a
ld [rBGP], a
ld [rOBP0], a
ld [$ff49], a
ld a, rLCDC_ENABLE_MASK
@ -101,9 +101,9 @@ rLCDC_DEFAULT EQU %11100011
ld [wc0ef], a
ld [wc0f0], a
ld a, $9c
ld [$ffbd], a
ld [H_AUTOBGTRANSFERDEST + 1], a
xor a
ld [$ffbc], a
ld [H_AUTOBGTRANSFERDEST], a
dec a
ld [wUpdateSpritesEnabled], a

View file

@ -301,7 +301,7 @@ OverworldLoopLessDelay::
and a
jp nz,CheckWarpsNoCollision
predef ApplyOutOfBattlePoisonDamage ; also increment daycare mon exp
ld a,[wd12d]
ld a,[wOutOfBattleBlackout]
and a
jp nz,HandleBlackOut ; if all pokemon fainted
.newBattle

View file

@ -13,7 +13,7 @@ VBlank::
ld a, [hSCY]
ld [rSCY], a
ld a, [wd0a0]
ld a, [wDisableVBlankWYUpdate]
and a
jr nz, .ok
ld a, [hWY]

View file

@ -26,6 +26,8 @@ hSpriteIndexOrTextID EQU $FF8C
hPartyMonIndex EQU $FF8C
hHalveItemPrices EQU $FF8E
; Multiplcation and division variables are meant
; to overlap for back-to-back usage. Big endian.

135
main.asm
View file

@ -922,7 +922,7 @@ HandleItemListSwapping: ; 6b44 (1:6b44)
ld l,a
dec [hl] ; decrease the number of items
ld a,[hl]
ld [wd12a],a ; update number of items variable
ld [wListCount],a ; update number of items variable
cp a,1
jr nz,.skipSettingMaxMenuItemID
ld [wMaxMenuItem],a ; if the number of items is only one now, update the max menu item ID
@ -1094,7 +1094,7 @@ DrawStartMenu: ; 710b (1:710b)
ld [wCurrentMenuItem],a
ld [wLastMenuItem],a
xor a
ld [wcc37],a
ld [wMenuWatchMovingOutOfBounds],a
ld hl,wd730
set 6,[hl] ; no pauses between printing each letter
hlCoord 12, 2
@ -1457,7 +1457,7 @@ DoBuySellQuitMenu: ; 74ea (1:74ea)
set 6, a ; no printing delay
ld [wd730], a
xor a
ld [wd12d], a
ld [wChosenMenuItem], a
ld a, BUY_SELL_QUIT_MENU_TEMPLATE
ld [wTextBoxID], a
call DisplayTextBoxID
@ -1472,7 +1472,7 @@ DoBuySellQuitMenu: ; 74ea (1:74ea)
xor a
ld [wCurrentMenuItem], a
ld [wLastMenuItem], a
ld [wcc37], a
ld [wMenuWatchMovingOutOfBounds], a
ld a, [wd730]
res 6, a ; turn on the printing delay
ld [wd730], a
@ -1482,24 +1482,24 @@ DoBuySellQuitMenu: ; 74ea (1:74ea)
jr nz, .pressedA
bit 1, a ; was B pressed? (always true since only A/B are watched)
jr z, .pressedA
ld a, $2
ld [wd12e], a
ld a, CANCELLED_MENU
ld [wMenuExitMethod], a
jr .quit
.pressedA
ld a, $1
ld [wd12e], a
ld a, CHOSE_MENU_ITEM
ld [wMenuExitMethod], a
ld a, [wCurrentMenuItem]
ld [wd12d], a
ld [wChosenMenuItem], a
ld b, a
ld a, [wMaxMenuItem]
cp b
jr z, .quit
ret
.quit
ld a, $2
ld [wd12e], a
ld a, CANCELLED_MENU
ld [wMenuExitMethod], a
ld a, [wCurrentMenuItem]
ld [wd12d], a
ld [wChosenMenuItem], a
scf
ret
@ -1512,9 +1512,12 @@ DisplayTwoOptionMenu: ; 7559 (1:7559)
ld a, [wd730]
set 6, a ; no printing delay
ld [wd730], a
; pointless because both values are overwritten before they are read
xor a
ld [wd12d], a
ld [wd12e], a
ld [wChosenMenuItem], a
ld [wMenuExitMethod], a
ld a, A_BUTTON | B_BUTTON
ld [wMenuWatchedKeys], a
ld a, $1
@ -1525,7 +1528,7 @@ DisplayTwoOptionMenu: ; 7559 (1:7559)
ld [wTopMenuItemX], a
xor a
ld [wLastMenuItem], a
ld [wcc37], a
ld [wMenuWatchMovingOutOfBounds], a
push hl
ld hl, wTwoOptionMenuID
bit 7, [hl] ; select second menu item by default?
@ -1614,23 +1617,23 @@ DisplayTwoOptionMenu: ; 7559 (1:7559)
jr nz, .choseSecondMenuItem ; automatically choose the second option if B is pressed
.pressedAButton
ld a, [wCurrentMenuItem]
ld [wd12d], a
ld [wChosenMenuItem], a
and a
jr nz, .choseSecondMenuItem
; chose first menu item
ld a, $1
ld [wd12e], a
ld a, CHOSE_FIRST_ITEM
ld [wMenuExitMethod], a
ld c, 15
call DelayFrames
call TwoOptionMenu_RestoreScreenTiles
and a
ret
.choseSecondMenuItem
ld a, $1
ld a, 1
ld [wCurrentMenuItem], a
ld [wd12d], a
ld a, $2
ld [wd12e], a
ld [wChosenMenuItem], a
ld a, CHOSE_SECOND_ITEM
ld [wMenuExitMethod], a
ld c, 15
call DelayFrames
call TwoOptionMenu_RestoreScreenTiles
@ -1913,7 +1916,7 @@ INCLUDE "engine/menu/players_pc.asm"
_RemovePokemon: ; 7b68 (1:7b68)
ld hl, wPartyCount
ld a, [wcf95]
ld a, [wRemoveMonFromBox]
and a
jr z, .asm_7b74
ld hl, W_NUMINBOX
@ -1936,7 +1939,7 @@ _RemovePokemon: ; 7b68 (1:7b68)
jr nz, .asm_7b81
ld hl, wPartyMonOT
ld d, $5
ld a, [wcf95]
ld a, [wRemoveMonFromBox]
and a
jr z, .asm_7b97
ld hl, wBoxMonOT
@ -1955,7 +1958,7 @@ _RemovePokemon: ; 7b68 (1:7b68)
ld bc, $b
add hl, bc
ld bc, wPartyMonNicks
ld a, [wcf95]
ld a, [wRemoveMonFromBox]
and a
jr z, .asm_7bb8
ld bc, wBoxMonNicks
@ -1963,7 +1966,7 @@ _RemovePokemon: ; 7b68 (1:7b68)
call CopyDataUntil
ld hl, wPartyMons
ld bc, wPartyMon2 - wPartyMon1
ld a, [wcf95]
ld a, [wRemoveMonFromBox]
and a
jr z, .asm_7bcd
ld hl, wBoxMons
@ -1973,7 +1976,7 @@ _RemovePokemon: ; 7b68 (1:7b68)
call AddNTimes
ld d, h
ld e, l
ld a, [wcf95]
ld a, [wRemoveMonFromBox]
and a
jr z, .asm_7be4
ld bc, wBoxMon2 - wBoxMon1
@ -1987,7 +1990,7 @@ _RemovePokemon: ; 7b68 (1:7b68)
.asm_7beb
call CopyDataUntil
ld hl, wPartyMonNicks
ld a, [wcf95]
ld a, [wRemoveMonFromBox]
and a
jr z, .asm_7bfa
ld hl, wBoxMonNicks
@ -2000,7 +2003,7 @@ _RemovePokemon: ; 7b68 (1:7b68)
ld bc, $b
add hl, bc
ld bc, wPokedexOwned
ld a, [wcf95]
ld a, [wRemoveMonFromBox]
and a
jr z, .asm_7c15
ld bc, wBoxMonNicksEnd
@ -2631,7 +2634,7 @@ ApplyOutOfBattlePoisonDamage: ; c69c (3:469c)
.noBlackOut
xor a
.done
ld [wd12d], a
ld [wOutOfBattleBlackout], a
ret
LoadTilesetHeader: ; c754 (3:4754)
@ -2777,10 +2780,10 @@ CyclingIsFunText: ; cdff (3:4dff)
; INPUT:
; hl = address of inventory (either wNumBagItems or wNumBoxItems)
; [wcf91] = item ID
; [wcf96] = item quantity
; [wItemQuantity] = item quantity
; sets carry flag if successful, unsets carry flag if unsuccessful
AddItemToInventory_: ; ce04 (3:4e04)
ld a,[wcf96] ; a = item quantity
ld a,[wItemQuantity] ; a = item quantity
push af
push bc
push de
@ -2827,12 +2830,12 @@ AddItemToInventory_: ; ce04 (3:4e04)
add hl,bc ; hl = address to store the item
ld a,[wcf91]
ld [hli],a ; store item ID
ld a,[wcf96]
ld a,[wItemQuantity]
ld [hli],a ; store item quantity
ld [hl],$ff ; store terminator
jp .success
.increaseItemQuantity ; increase the quantity of an item already in the inventory
ld a,[wcf96]
ld a,[wItemQuantity]
ld b,a ; b = quantity to add
ld a,[hl] ; a = existing item quantity
add b ; a = new item quantity
@ -2841,7 +2844,7 @@ AddItemToInventory_: ; ce04 (3:4e04)
; if the new quantity is greater than or equal to 100,
; try to max out the current slot and add the rest in a new slot
sub a,99
ld [wcf96],a ; a = amount left over (to put in the new slot)
ld [wItemQuantity],a ; a = amount left over (to put in the new slot)
ld a,d
and a ; is there room for a new item slot?
jr z,.increaseItemQuantityFailed
@ -2864,14 +2867,14 @@ AddItemToInventory_: ; ce04 (3:4e04)
pop bc
pop bc
ld a,b
ld [wcf96],a ; restore the initial value from when the function was called
ld [wItemQuantity],a ; restore the initial value from when the function was called
ret
; function to remove an item (in varying quantities) from the player's bag or PC box
; INPUT:
; hl = address of inventory (either wNumBagItems or wNumBoxItems)
; [wWhichPokemon] = index (within the inventory) of the item to remove
; [wcf96] = quantity to remove
; [wItemQuantity] = quantity to remove
RemoveItemFromInventory_: ; ce74 (3:4e74)
push hl
inc hl
@ -2883,12 +2886,12 @@ RemoveItemFromInventory_: ; ce74 (3:4e74)
inc h
.noCarry
inc hl
ld a,[wcf96] ; quantity being removed
ld a,[wItemQuantity] ; quantity being removed
ld e,a
ld a,[hl] ; a = current quantity
sub e
ld [hld],a ; store new quantity
ld [wcf97],a
ld [wMaxItemQuantity],a
and a
jr nz,.skipMovingUpSlots
; if the remaining quantity is 0,
@ -2909,12 +2912,12 @@ RemoveItemFromInventory_: ; ce74 (3:4e74)
ld [wListScrollOffset],a
ld [wCurrentMenuItem],a
ld [wcc2c],a
ld [wd07e],a
ld [wSavedListScrollOffset],a
pop hl
ld a,[hl] ; a = number of items in inventory
dec a ; decrement the number of items
ld [hl],a ; store new number of items
ld [wd12a],a
ld [wListCount],a
cp a,2
jr c,.done
ld [wMaxMenuItem],a
@ -3579,8 +3582,8 @@ _AddPartyMon: ; f2e5 (3:72e5)
ld a, [$ffe4]
dec a
call SkipFixedLengthTextEntries
ld a, $2
ld [wd07d], a
ld a, NAME_MON_SCREEN
ld [wNamingScreenType], a
predef AskName
.asm_f33f
ld hl, wPartyMons
@ -3863,13 +3866,13 @@ _AddEnemyMonToPlayerParty: ; f49d (3:749d)
and a
ret ; return success
MoveMon: ; f51e (3:751e)
ld a, [wcf95]
_MoveMon: ; f51e (3:751e)
ld a, [wMoveMonType]
and a
jr z, .checkPartyMonSlots
cp $2
cp DAYCARE_TO_PARTY
jr z, .checkPartyMonSlots
cp $3
cp PARTY_TO_DAYCARE
ld hl, wDayCareMon
jr z, .asm_f575
ld hl, W_NUMINBOX
@ -3889,17 +3892,17 @@ MoveMon: ; f51e (3:751e)
inc a
ld [hl], a ; increment number of mons in party/box
ld c, a
ld b, $0
ld b, 0
add hl, bc
ld a, [wcf95]
cp $2
ld a, [wMoveMonType]
cp DAYCARE_TO_PARTY
ld a, [wDayCareMon]
jr z, .asm_f556
ld a, [wcf91]
.asm_f556
ld [hli], a ; write new mon ID
ld [hl], $ff ; write new sentinel
ld a, [wcf95]
ld a, [wMoveMonType]
dec a
ld hl, wPartyMons
ld bc, wPartyMon2 - wPartyMon1 ; $2c
@ -3915,12 +3918,12 @@ MoveMon: ; f51e (3:751e)
push hl
ld e, l
ld d, h
ld a, [wcf95]
ld a, [wMoveMonType]
and a
ld hl, wBoxMons
ld bc, wBoxMon2 - wBoxMon1 ; $21
jr z, .asm_f591
cp $2
cp DAYCARE_TO_PARTY
ld hl, wDayCareMon
jr z, .asm_f597
ld hl, wPartyMons
@ -3935,10 +3938,10 @@ MoveMon: ; f51e (3:751e)
call CopyData
pop de
pop hl
ld a, [wcf95]
ld a, [wMoveMonType]
and a
jr z, .asm_f5b4
cp $2
cp DAYCARE_TO_PARTY
jr z, .asm_f5b4
ld bc, wBoxMon2 - wBoxMon1
add hl, bc
@ -3948,8 +3951,8 @@ MoveMon: ; f51e (3:751e)
inc de
ld [de], a
.asm_f5b4
ld a, [wcf95]
cp $3
ld a, [wMoveMonType]
cp PARTY_TO_DAYCARE
ld de, W_DAYCAREMONOT
jr z, .asm_f5d3
dec a
@ -3965,11 +3968,11 @@ MoveMon: ; f51e (3:751e)
ld e, l
.asm_f5d3
ld hl, wBoxMonOT
ld a, [wcf95]
ld a, [wMoveMonType]
and a
jr z, .asm_f5e6
ld hl, W_DAYCAREMONOT
cp $2
cp DAYCARE_TO_PARTY
jr z, .asm_f5ec
ld hl, wPartyMonOT
.asm_f5e6
@ -3978,8 +3981,8 @@ MoveMon: ; f51e (3:751e)
.asm_f5ec
ld bc, $b
call CopyData
ld a, [wcf95]
cp $3
ld a, [wMoveMonType]
cp PARTY_TO_DAYCARE
ld de, W_DAYCAREMONNAME
jr z, .asm_f611
dec a
@ -3995,11 +3998,11 @@ MoveMon: ; f51e (3:751e)
ld e, l
.asm_f611
ld hl, wBoxMonNicks
ld a, [wcf95]
ld a, [wMoveMonType]
and a
jr z, .asm_f624
ld hl, W_DAYCAREMONNAME
cp $2
cp DAYCARE_TO_PARTY
jr z, .asm_f62a
ld hl, wPartyMonNicks
.asm_f624
@ -4009,10 +4012,10 @@ MoveMon: ; f51e (3:751e)
ld bc, $b
call CopyData
pop hl
ld a, [wcf95]
cp $1
ld a, [wMoveMonType]
cp PARTY_TO_BOX
jr z, .asm_f664
cp $3
cp PARTY_TO_DAYCARE
jr z, .asm_f664
push hl
srl a

View file

@ -12,7 +12,7 @@ CeladonGameCornerScript_48bcf: ; 48bcf (12:4bcf)
res 6, [hl]
ret z
call Random
ld a, [$ffd3]
ld a, [hRandomAdd]
cp $7
jr nc, .asm_48be2
ld a, $8
@ -20,7 +20,7 @@ CeladonGameCornerScript_48bcf: ; 48bcf (12:4bcf)
srl a
srl a
srl a
ld [wUnknownSlotVar], a
ld [wLuckySlotHiddenObjectIndex], a
ret
CeladonGameCornerScript_48bec: ; 48bec (12:4bec)

View file

@ -26,7 +26,7 @@ CeruleanHouse2Text1: ; 74e15 (1d:4e15)
ld a, h
ld [wList + 1], a
xor a
ld [wcf93], a
ld [wPrintItemPrices], a
ld [wMenuItemToSwap], a
ld a, SPECIALLISTMENU
ld [wListMenuID], a

View file

@ -25,7 +25,7 @@ DayCareMText1: ; 56254 (15:6254)
call PrintText
xor a
ld [wUpdateSpritesEnabled], a
ld [wd07d], a
ld [wPartyMenuTypeOrMessageID], a
ld [wMenuItemToSwap], a
call DisplayPartyMenu
push af
@ -45,13 +45,13 @@ DayCareMText1: ; 56254 (15:6254)
call GetPartyMonName
ld hl, DayCareMText_56419
call PrintText
ld a, $1
ld a, 1
ld [W_DAYCARE_IN_USE], a
ld a, $3
ld [wcf95], a
call Func_3a68
ld a, PARTY_TO_DAYCARE
ld [wMoveMonType], a
call MoveMon
xor a
ld [wcf95], a
ld [wRemoveMonFromBox], a
call RemovePokemon
ld a, [wcf91]
call PlayCry
@ -158,26 +158,26 @@ DayCareMScript_562e1: ; 562e1 (15:62e1)
predef SubBCDPredef
ld a, (SFX_02_5a - SFX_Headers_02) / 3
call PlaySoundWaitForCurrent
ld a, $13
ld a, MONEY_BOX
ld [wTextBoxID], a
call DisplayTextBoxID
ld hl, DayCareMText_5644f
call PrintText
ld a, $2
ld [wcf95], a
call Func_3a68
ld a, DAYCARE_TO_PARTY
ld [wMoveMonType], a
call MoveMon
ld a, [wDayCareMonSpecies]
ld [wcf91], a
ld a, [wPartyCount]
dec a
push af
ld bc, $002c
ld bc, wPartyMon2 - wPartyMon1
push bc
ld hl, wPartyMon1Moves
call AddNTimes
ld d, h
ld e, l
ld a, $1
ld a, 1
ld [wHPBarMaxHP], a
predef WriteMonMoves
pop bc
@ -186,7 +186,7 @@ DayCareMScript_562e1: ; 562e1 (15:62e1)
call AddNTimes
ld d, h
ld e, l
ld bc, $0021
ld bc, wPartyMon1MaxHP - wPartyMon1HP
add hl, bc
ld a, [hli]
ld [de], a

View file

@ -49,7 +49,7 @@ NameRaterText1: ; 1da56 (7:5a56)
ld hl, NameRaterText_1dab8
call PrintText
xor a
ld [wd07d], a
ld [wPartyMenuTypeOrMessageID], a
ld [wUpdateSpritesEnabled], a
ld [wMenuItemToSwap], a
call DisplayPartyMenu
@ -68,7 +68,7 @@ NameRaterText1: ; 1da56 (7:5a56)
jr nz, .asm_1daae
ld hl, NameRaterText_1dac2
call PrintText
callba Func_655c
callba DisplayNameRaterScreen
jr c, .asm_1daae
ld hl, NameRaterText_1dac7
.asm_1daa8

View file

@ -641,7 +641,7 @@ OaksLabScript_1d00a: ; 1d00a (7:500a)
ld a, c
ld [wWhichPokemon], a
ld a, $1
ld [wcf96], a
ld [wItemQuantity], a
jp RemoveItemFromInventory
OaksLabScript_1d02b: ; 1d02b (7:502b)

222
wram.asm
View file

@ -266,7 +266,12 @@ wListScrollOffset:: ; cc36
; keeps track of what section of the list is on screen
ds 1
wcc37:: ds 1 ; menu related thing, used in pokedex and dialog boxes
wMenuWatchMovingOutOfBounds:: ; cc37
; If non-zero, then when wrapping is disabled and the player tries to go past
; the top or bottom of the menu, return from HandleMenuInput. This is useful for
; menus that have too many items to display at once on the screen because it
; allows the caller to scroll the entire menu up or down when this happens.
ds 1
wTradeCenterPointerTableIndex:: ; cc38
ds 1
@ -352,6 +357,13 @@ wNPCMovementScriptBank:: ; cc58
ds 2
wSlotMachineSevenAndBarModeChance:: ; cc5b
; If a random number greater than this value is generated, then the player is
; allowed to have three 7 symbols or bar symbols line up.
; So, this value is actually the chance of NOT entering that mode.
; If the slot is lucky, it equals 250, giving a 5/256 (~2%) chance.
; Otherwise, it equals 253, giving a 2/256 (~0.8%) chance.
wHallOfFame:: ; cc5b
wBoostExpByExpAll:: ; cc5b
wAnimationType:: ; cc5b
@ -360,7 +372,12 @@ wAnimationType:: ; cc5b
wcc5b:: ds 1 ; these upcoming values below are miscellaneous storage values
wcc5c:: ds 1 ; used in pokedex evaluation as well
wcc5d:: ds 1 ; used in pokedex evaluation
wcc5e:: ds 13 ; as well as used as miscellaneous storage value, this is also used for the game corner slots
wSlotMachineSavedROMBank:: ; cc5e
; ROM back to return to when the player is done with the slot machine
ds 1
ds 12
wcc6b:: ds 14 ; doesn't seem to be used for anything, probably just more storage
wcc79:: ds 30 ; used in battle animations
@ -445,7 +462,7 @@ wccf0:: ds 1 ; used as a check if a mon fainted
wPlayerUsedMove:: ds 1 ; ccf1
wEnemyUsedMove:: ds 1 ; ccf2
wccf3:: ds 1 ; used with the move minimize
wEnemyMonMinimized:: ds 1 ; ccf3
wMoveDidntMiss:: ds 1 ; ccf4
@ -454,9 +471,11 @@ wPartyFoughtCurrentEnemyFlags:: ; ccf5
flag_array 6
wccf6:: ds 1 ; used in some hp bar thing
wccf7:: ds 14 ; used with substitute move sliding thing? (not sure)
wPlayerMonMinimized:: ds 1 ; ccf7
wUnknownSlotVar:: ; cd05
ds 13
wLuckySlotHiddenObjectIndex:: ; cd05
wEnemyNumHits:: ; cd05
; number of hits by enemy in attacks like Double Slap, etc.
@ -581,6 +600,12 @@ wOverrideSimulatedJoypadStatesMask:: ; cd3b
ds 1
wWhichTownMapLocation:: ; cd3d
wStoppingWhichSlotMachineWheel:: ; cd3d
; which wheel the player is trying to stop
; 0 = none, 1 = wheel 1, 2 = wheel 2, 3 or greater = wheel 3
wTradedPlayerMonSpecies:: ; cd3d
wTradingWhichPlayerMon:: ; cd3d
@ -604,6 +629,11 @@ wWhichTrade:: ; cd3d
wTrainerSpriteOffset:: ; cd3d
ds 1
wFlyLocationsList:: ; cd3e
; 11 bytes plus $ff sentinel values at each end
wSlotMachineWheel1Offset:: ; cd3e
wTradedEnemyMonSpecies:: ; cd3e
wTradingWhichEnemyMon:: ; cd3e
@ -619,6 +649,8 @@ wHiddenObjectFunctionRomBank:: ; cd3e
wTrainerEngageDistance:: ; cd3e
ds 1
wSlotMachineWheel2Offset:: ; cd3f
wNameOfPlayerMonToBeTraded:: ; cd3f
wFlyAnimBirdSpriteImageIndex:: ; cd3f
@ -633,6 +665,8 @@ wTrainerFacingDirection:: ; cd3f
wcd3f:: ; used with daycare text for money amount
ds 1
wSlotMachineWheel3Offset:: ; cd40
wPlayerSpinInPlaceAnimSoundID:: ; cd40
wHiddenObjectY:: ; cd40
@ -644,35 +678,96 @@ wTradedPlayerMonOT:: ; cd41
wHiddenObjectX:: ; cd41
wSlotMachineWinningSymbol:: ; cd42
; the OAM tile number of the upper left corner of the winning symbol minus 2
wSlotMachineWheel1BottomTile:: ; cd41
wTrainerScreenX:: ; cd41
ds 1
; a lot of the uses for these values use more than the said address
wSlotMachineWheel1MiddleTile:: ; cd42
wcd42:: ds 1 ; used in pewter center script, printing field mon moves, slot machines and HoF PC
wSlotMachineWheel1TopTile:: ; cd43
wcd43:: ds 1 ; slot machine stuff and GetMonFieldMoves
wcd44:: ds 1 ; just slot machine
wcd45:: ds 1 ; slot machine...
wcd46:: ds 1 ; slot machine...
wSlotMachineWheel2BottomTile:: ; cd44
ds 1
wSlotMachineWheel2MiddleTile:: ; cd45
ds 1
wTempCoins1:: ; cd46
; 2 bytes
; temporary variable used to add payout amount to the player's coins
wSlotMachineWheel2TopTile:: ; cd46
ds 1
wSlotMachineWheel3BottomTile:: ; cd47
wcd47:: ds 1 ; used in slot machine and spinning player sprite
wSlotMachineWheel3MiddleTile:: ; cd48
wcd48:: ds 1 ; same as above
wSlotMachineWheel3TopTile:: ; cd49
wcd49:: ds 1 ; used in slot machine, displaying the gym leaders/badges on the trainer card, and displaying the town map
wcd4a:: ds 1 ; probably used in one of the above mentioned functions
wcd4b:: ds 1 ; same as above
wTempCoins2:: ; cd4a
; 2 bytes
; temporary variable used to subtract the bet amount from the player's coins
wPayoutCoins:: ; cd4a
; 2 bytes
ds 1
wcd4b:: ; cd4b
; used in player animations
ds 1
wTradedPlayerMonOTID:: ; cd4c
wcd4c:: ds 1 ; slot machine and probably other above stuff
wSlotMachineFlags:: ; cd4c
; These flags are set randomly and control when the wheels stop.
; bit 6: allow the player to win in general
; bit 7: allow the player to win with 7 or bar (plus the effect of bit 6)
ds 1
wSlotMachineWheel1SlipCounter:: ; cd4d
; wheel 1 can "slip" while this is non-zero
wcd4d:: ds 1 ; used with cut and slot machine
wSlotMachineWheel2SlipCounter:: ; cd4e
; wheel 2 can "slip" while this is non-zero
wTradedEnemyMonOT:: ; cd4e
wcd4e:: ds 1 ; used with in-game trades and slot machine
wSlotMachineRerollCounter:: ; cd4f
; The remaining number of times wheel 3 will roll down a symbol until a match is
; found, when winning is enabled. It's initialized to 4 each bet.
wcd4f:: ds 1 ; used with in-game trades, emotion bubbles, and player animations
wSlotMachineBet:: ; cd50
; how many coins the player bet on the slot machine (1 to 3)
wcd50:: ds 9 ; used with in-game trades, emotion bubbles, and player and miscellaneous sprite animations
wTradedEnemyMonOTID:: ; cd59
ds 2
wOAMBaseTile:: ; cd5b
wcd5b:: ds 1 ; used in some sprite stuff, town map and surge gym trash cans
wcd5c:: ds 1 ; used in town map
@ -719,6 +814,10 @@ wTileMapBackup2:: ; cd81
wBuffer:: ; cee9
; Temporary storage area of 30 bytes.
wTownMapCoords:: ; cee9
; lower nybble is x, upper nybble is y
wHPBarMaxHP:: ; cee9
ds 2
wHPBarOldHP:: ; ceeb
@ -744,7 +843,13 @@ wAnimSoundID:: ; cf07
wcf08:: ds 1 ; used as a storage value for the bank to return to after a BankswitchHome (bankswitch in homebank)
wcf09:: ds 1 ; used as a temp storage value for the bank to switch to
wcf0a:: ds 1 ; used as flags for Poke Mart
wBoughtOrSoldItemInMart:: ; cf0a
; 0 = nothing bought or sold in pokemart
; 1 = bought or sold something in pokemart
; this value is not used for anything
ds 1
wBattleResult:: ; cf0b
; $00 - win
; $01 - lose
@ -829,7 +934,9 @@ wWhichPokemon:: ; cf92
; which pokemon you selected
ds 1
wcf93:: ds 1 ; used with lists
wPrintItemPrices:: ; cf93
; if non-zero, then print item prices when displaying lists
ds 1
wHPBarType:: ; cf94
; type of HP bar
@ -841,9 +948,22 @@ wListMenuID:: ; cf94
; ID used by DisplayListMenuID
ds 1
wcf95:: ds 1 ; used with RemovePokemon (BoxMons, Daycare, Trades, etc.)
wcf96:: ds 1 ; used with removing items
wcf97:: ds 1 ; used with printing item quantities?
wRemoveMonFromBox:: ; cf95
; if non-zero, RemovePokemon will remove the mon from the current box,
; else it will remove the mon from the party
wMoveMonType:: ; cf95
; 0 = move from box to party
; 1 = move from party to box
; 2 = move from daycare to party
; 3 = move from party to daycare
ds 1
wItemQuantity:: ; cf96
ds 1
wMaxItemQuantity:: ; cf97
ds 1
; LoadMonData copies mon data here
wLoadedMon:: party_struct wLoadedMon ; cf98
@ -1123,8 +1243,20 @@ W_ANIMATIONID:: ; d07c
; ID number of the current battle animation
ds 1
wd07d:: ds 1 ; used with naming functions and party display type
wd07e:: ds 3 ; used with mart and inventory
wNamingScreenType:: ; d07d
wPartyMenuTypeOrMessageID:: ; d07d
wTempTilesetNumTiles:: ; d07d
; temporary storage for the number of tiles in a tileset
ds 1
wSavedListScrollOffset:: ; d07e
; used by the pokemart code to save the existing value of wListScrollOffset
; so that it can be restored when the player is done with the pokemart NPC
ds 1
ds 2
; base coordinates of frame block
W_BASECOORDX:: ; d081
@ -1160,9 +1292,8 @@ wTradedMonMovingRight:: ; d08a
wd08a:: ds 1 ; used with sprites and displaying the option menu on the main menu screen?
wTownMapSpriteBlinkingCounter:: ; d08b
wPartyMonAnimCounter:: ; d08b
wAnimCounter:: ; d08b
; generic counter variable for various animations
W_SUBANIMTRANSFORM:: ; d08b
; controls what transformations are applied to the subanimation
@ -1188,6 +1319,13 @@ wEndBattleTextRomBank:: ; d092
W_SUBANIMADDRPTR:: ; d094
; the address _of the address_ of the current subanimation entry
ds 2
wSlotMachineAllowMatchesCounter:: ; d096
; If non-zero, the allow matches flag is always set.
; There is a 1/256 (~0.4%) chance that this value will be set to 60, which is
; the only way it can increase. Winning certain payout amounts will decrement it
; or zero it.
W_SUBANIMSUBENTRYADDR:: ; d096
; the address of the current subentry of the current subanimation
ds 2
@ -1221,7 +1359,7 @@ W_FBMODE:: ; d09e
wNewTileBlockID:: ; d09f
wd09f:: ds 1 ; used with predef ReplaceTileBlock
wd0a0:: ds 1 ; used in VBlank and ChangeBGPalColor0_4Frames
wDisableVBlankWYUpdate:: ds 1 ; if non-zero, don't update WY during V-blank
W_SPRITECURPOSX:: ; d0a1
ds 1
@ -1351,7 +1489,10 @@ wWalkBikeSurfStateCopy:: ; d11a
; wWalkBikeSurfState is sometimes copied here, but it doesn't seem to be used for anything
ds 1
wd11b:: ds 1 ; used with mart text box and cable club
wInitListType:: ; d11b
; the type of list for InitList to init
ds 1
wd11c:: ds 1 ; temp storage value for catching pokemon
wd11d:: ds 1 ; used with battle switchout and testing if the enemy mon fainted
wd11e:: ds 1 ; used as a Pokemon and Item storage value. Also used as an output value for CountSetBits
@ -1363,7 +1504,7 @@ wNumRunAttempts::
wd121:: ds 1 ; used with evolving pokemon
wd122:: ds 2 ; saved ROM bank number for vblank
wd124:: ds 1 ; used as an output value when determining if an item is a key item
wIsKeyItem:: ds 1 ; d124
wTextBoxID:: ; d125
ds 1
@ -1373,16 +1514,37 @@ wd126:: ds 1 ; not exactly sure what this is used for, but it seems to be used a
W_CURENEMYLVL:: ; d127
ds 1
wd128:: ds 1 ; used as a pointer to displaying Poke Mart inventory, also used to store the pointer of LoadItemList (pointer to item list initially in hl)
wd129:: ds 1 ; second half of above mentioned pointer
wd12a:: ds 1 ; Number of list entries for displaying a list
wItemListPointer:: ; d128
; pointer to list of items terminated by $FF
ds 2
wListCount::
; number of entries in a list
ds 1
wLinkState:: ; d12b
ds 1
wTwoOptionMenuID:: ds 1
wd12d:: ds 1 ; used with item menus and pokemart menu, also used with testing if all Pokemon Fainted?
wd12e:: ds 1 ; used as an output value to determine if A or B was pressed in a yes/no box
wTwoOptionMenuID:: ; d12c
ds 1
wChosenMenuItem:: ; d12d
; the id of the menu item the player ultimately chose
wOutOfBattleBlackout:: ; d12d
; non-zero when the whole party has fainted due to out-of-battle poison damage
ds 1
wMenuExitMethod:: ; d12e
; the way the user exited a menu
; for list menus and the buy/sell/quit menu:
; $01 = the user pressed A to choose a menu item
; $02 = the user pressed B to cancel
; for two-option menus:
; $01 = the user pressed A with the first menu item selected
; $02 = the user pressed B or pressed A with the second menu item selected
ds 1
wd12f:: ds 1 ; used in some coordinatestuff, npc pathstuff, and game corner prize stuff
wd130:: ds 1 ; saved value of screen Y coord of trainer sprite
wd131:: ds 1 ; saved value of screen X coord of trainer sprite