ref: aa3da5f3b07b8965bf7d4f1b5449ce67bed4fb87
parent: 9fbd9e9a1f23ff3fe09eee2518dd752a6d2e132c
author: YamaArashi <shadow962@live.com>
date: Thu Jul 16 20:16:27 EDT 2015
title / diploma / vending machine
--- a/constants/misc_constants.asm
+++ b/constants/misc_constants.asm
@@ -20,8 +20,13 @@
D_UP EQU %01000000
D_DOWN EQU %10000000
+PIXELS_PER_TILE EQU 8
+
SCREEN_WIDTH EQU 20
SCREEN_HEIGHT EQU 18
+
+SCREEN_WIDTH_PIXELS EQU SCREEN_WIDTH * PIXELS_PER_TILE
+SCREEN_HEIGHT_PIXELS EQU SCREEN_HEIGHT * PIXELS_PER_TILE
NPC_MOVEMENT_DOWN EQU $00
NPC_MOVEMENT_UP EQU $40
--- a/engine/menu/diploma.asm
+++ b/engine/menu/diploma.asm
@@ -36,19 +36,23 @@
hlCoord 10, 4
ld de, wPlayerName
call PlaceString
- callba Func_44dd
+ callba DrawPlayerCharacter
+
+; Move the player 33 pixels right and set the priority bit so he appears
+; behind the background layer.
ld hl, wOAMBuffer + $01
ld bc, $8028
-.asm_5673e
- ld a, [hl]
- add $21
+.adjustPlayerGfxLoop
+ ld a, [hl] ; X
+ add 33
ld [hli], a
inc hl
ld a, b
- ld [hli], a
+ ld [hli], a ; attributes
inc hl
dec c
- jr nz, .asm_5673e
+ jr nz, .adjustPlayerGfxLoop
+
call EnableLCD
callba LoadTrainerInfoTextBoxTiles
ld b, $8
@@ -65,15 +69,17 @@
call Delay3
jp GBPalNormal
-Func_56777: ; 56777 (15:6777)
+UnusedPlayerNameLengthFunc: ; 56777 (15:6777)
+; Unused function that does a calculation involving the length of the player's
+; name.
ld hl, wPlayerName
ld bc, $ff00
-.asm_5677d
+.loop
ld a, [hli]
- cp $50
+ cp "@"
ret z
dec c
- jr .asm_5677d
+ jr .loop
DiplomaTextPointersAndCoords: ; 56784 (15:6784)
dw DiplomaText
--- a/engine/menu/vending_machine.asm
+++ b/engine/menu/vending_machine.asm
@@ -7,19 +7,19 @@
xor a
ld [wCurrentMenuItem], a
ld [wLastMenuItem], a
- ld a, $3
+ ld a, A_BUTTON | B_BUTTON
ld [wMenuWatchedKeys], a
- ld a, $3
+ ld a, 3
ld [wMaxMenuItem], a
- ld a, $5
+ ld a, 5
ld [wTopMenuItemY], a
- ld a, $1
+ ld a, 1
ld [wTopMenuItemX], a
ld hl, wd730
set 6, [hl]
hlCoord 0, 3
- ld b, $8
- ld c, $c
+ ld b, 8
+ ld c, 12
call TextBoxBorder
call UpdateSprites
hlCoord 2, 5
@@ -31,11 +31,11 @@
ld hl, wd730
res 6, [hl]
call HandleMenuInput
- bit 1, a
- jr nz, .asm_74f93
+ bit 1, a ; pressed B?
+ jr nz, .notThirsty
ld a, [wCurrentMenuItem]
- cp $3
- jr z, .asm_74f93
+ cp 3 ; chose Cancel?
+ jr z, .notThirsty
xor a
ld [$ff9f], a
ld [$ffa1], a
@@ -46,12 +46,13 @@
ld hl, VendingMachineText4
jp PrintText
.enoughMoney
- call Func_74fe7
- ld a, [$ffdb]
+ call LoadVendingMachineItem
+ ld a, [hVendingMachineItem]
ld b, a
ld c, 1
call GiveItem
jr nc, .BagFull
+
ld b, 60 ; number of times to play the "brrrrr" sound
.playDeliverySound
ld c, 2
@@ -62,10 +63,10 @@
pop bc
dec b
jr nz, .playDeliverySound
-.asm_74f72
+
ld hl, VendingMachineText5
call PrintText
- ld hl, $ffde
+ ld hl, hVendingMachinePrice + 2
ld de, wPlayerMoney + 2
ld c, $3
predef SubBCDPredef
@@ -75,7 +76,7 @@
.BagFull
ld hl, VendingMachineText6
jp PrintText
-.asm_74f93
+.notThirsty
ld hl, VendingMachineText7
jp PrintText
@@ -110,22 +111,22 @@
TX_FAR _VendingMachineText7
db "@"
-Func_74fe7: ; 74fe7 (1d:4fe7)
+LoadVendingMachineItem: ; 74fe7 (1d:4fe7)
ld hl, VendingPrices
ld a, [wCurrentMenuItem]
add a
add a
- ld d, $0
+ ld d, 0
ld e, a
add hl, de
ld a, [hli]
- ld [$ffdb], a
+ ld [hVendingMachineItem], a
ld a, [hli]
- ld [$ffdc], a
+ ld [hVendingMachinePrice], a
ld a, [hli]
- ld [$ffdd], a
+ ld [hVendingMachinePrice + 1], a
ld a, [hl]
- ld [$ffde], a
+ ld [hVendingMachinePrice + 2], a
ret
VendingPrices: ; 75000 (1d:5000)
--- a/engine/titlescreen.asm
+++ b/engine/titlescreen.asm
@@ -67,50 +67,60 @@
ld a, BANK(Version_GFX)
call FarCopyDataDouble
- call Func_4519
+ call ClearBothBGMaps
+
+; place tiles for pokemon logo (except for the last row)
hlCoord 2, 1
ld a, $80
ld de, SCREEN_WIDTH
- ld c, $6
-.asm_434d
+ ld c, 6
+.pokemonLogoTileLoop
ld b, $10
push hl
-.asm_4350
+.pokemonLogoTileRowLoop ; place tiles for one row
ld [hli], a
inc a
dec b
- jr nz, .asm_4350
+ jr nz, .pokemonLogoTileRowLoop
pop hl
add hl, de
dec c
- jr nz, .asm_434d
+ jr nz, .pokemonLogoTileLoop
+
+; place tiles for the last row of the pokemon logo
hlCoord 2, 7
ld a, $31
ld b, $10
-.asm_4361
+.pokemonLogoLastTileRowLoop
ld [hli], a
inc a
dec b
- jr nz, .asm_4361
- call Func_44dd
+ jr nz, .pokemonLogoLastTileRowLoop
+
+ call DrawPlayerCharacter
+
+; put a pokeball in the player's hand
ld hl, wOAMBuffer + $28
ld a, $74
ld [hl], a
+
+; place tiles for title screen copyright
hlCoord 2, 17
- ld de, .titlescreenTilemap
+ ld de, .tileScreenCopyrightTiles
ld b, $10
-.asm_4377
+.tileScreenCopyrightTilesLoop
ld a, [de]
ld [hli], a
inc de
dec b
- jr nz, .asm_4377
- jr .asm_438f
+ jr nz, .tileScreenCopyrightTilesLoop
-.titlescreenTilemap ; 437f (1:437f)
+ jr .next
+
+.tileScreenCopyrightTiles ; 437f (1:437f)
db $41,$42,$43,$42,$44,$42,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,$4E ; ©'95.'96.'98 GAME FREAK inc.
-.asm_438f
+.next
call SaveScreenTilesToBuffer2
call LoadScreenTilesFromBuffer2
call EnableLCD
@@ -121,37 +131,39 @@
ld a,SQUIRTLE ; which Pokemon to show first on the title screen
ENDC
- ld [wWhichTrade], a
- call Func_4524
- ld a, $9b
- call Func_4533
+ ld [wTitleMonSpecies], a
+ call LoadTitleMonSprite
+ ld a, (vBGMap0 + $300) / $100
+ call TitleScreenCopyTileMapToVRAM
call SaveScreenTilesToBuffer1
ld a, $40
ld [hWY], a
call LoadScreenTilesFromBuffer2
- ld a, $98
- call Func_4533
+ ld a, vBGMap0 / $100
+ call TitleScreenCopyTileMapToVRAM
ld b, $6
call GoPAL_SET
call GBPalNormal
- ld a, $e4
+ ld a, %11100100
ld [rOBP0], a
- ld bc, $ffaf ; background scroll Y
+
+; make pokemon logo bounce up and down
+ ld bc, hSCY ; background scroll Y
ld hl, .TitleScreenPokemonLogoYScrolls
-.asm_43c6
+.bouncePokemonLogoLoop
ld a, [hli]
and a
- jr z, .asm_43f4
+ jr z, .finishedBouncingPokemonLogo
ld d, a
- cp $fd
- jr nz, .asm_43d4
+ cp -3
+ jr nz, .skipPlayingSound
ld a, (SFX_1f_62 - SFX_Headers_1f) / 3
call PlaySound
-.asm_43d4
+.skipPlayingSound
ld a, [hli]
ld e, a
call .ScrollTitleScreenPokemonLogo
- jr .asm_43c6
+ jr .bouncePokemonLogoLoop
.TitleScreenPokemonLogoYScrolls: ; 43db (1:43db)
; Controls the bouncing effect of the Pokemon logo on the title screen
@@ -168,36 +180,40 @@
; Scrolls the Pokemon logo on the title screen to create the bouncing effect
; Scrolls d pixels e times
call DelayFrame
- ld a, [bc]
+ ld a, [bc] ; background scroll Y
add d
ld [bc], a
dec e
jr nz, .ScrollTitleScreenPokemonLogo
ret
-.asm_43f4
+
+.finishedBouncingPokemonLogo
call LoadScreenTilesFromBuffer1
ld c, 36
call DelayFrames
ld a, (SFX_1f_63 - SFX_Headers_1f) / 3
call PlaySound
+
+; scroll game version in from the right
call PrintGameVersionOnTitleScreen
- ld a, $90
+ ld a, SCREEN_HEIGHT_PIXELS
ld [hWY], a
- ld d, $90
-.asm_440a
+ ld d, 144
+.scrollTitleScreenGameVersionLoop
ld h, d
- ld l, $40
- call Func_44cf
- ld h, $0
- ld l, $50
- call Func_44cf
+ ld l, 64
+ call ScrollTitleScreenGameVersion
+ ld h, 0
+ ld l, 80
+ call ScrollTitleScreenGameVersion
ld a, d
- add $4
+ add 4
ld d, a
and a
- jr nz, .asm_440a
- ld a, $9c
- call Func_4533
+ jr nz, .scrollTitleScreenGameVersionLoop
+
+ ld a, vBGMap1 / $100
+ call TitleScreenCopyTileMapToVRAM
call LoadScreenTilesFromBuffer2
call PrintGameVersionOnTitleScreen
call Delay3
@@ -207,19 +223,22 @@
call PlaySound
xor a
ld [wcc5b], a
-.asm_443b
- ld c, $c8
+
+; Keep scrolling in new mons indefinitely until the user performs input.
+.awaitUserInterruptionLoop
+ ld c, 200
call CheckForUserInterruption
- jr c, .asm_4459
- call Func_44c1
- ld c, $1
+ jr c, .finishedWaiting
+ call TitleScreenScrollInMon
+ ld c, 1
call CheckForUserInterruption
- jr c, .asm_4459
- callba Func_372ac
- call Func_4496
- jr .asm_443b
-.asm_4459
- ld a, [wWhichTrade]
+ jr c, .finishedWaiting
+ callba TitleScreenAnimateBallIfStarterOut
+ call TitleScreenPickNewMon
+ jr .awaitUserInterruptionLoop
+
+.finishedWaiting
+ ld a, [wTitleMonSpecies]
call PlayCry
call WaitForSoundToFinish
call GBPalWhiteOutWithDelay3
@@ -229,10 +248,10 @@
inc a
ld [H_AUTOBGTRANSFERENABLED], a
call ClearScreen
- ld a, $98
- call Func_4533
- ld a, $9c
- call Func_4533
+ ld a, vBGMap0 / $100
+ call TitleScreenCopyTileMapToVRAM
+ ld a, vBGMap1 / $100
+ call TitleScreenCopyTileMapToVRAM
call Delay3
call LoadGBPal
ld a, [hJoyHeld]
@@ -247,12 +266,12 @@
ld hl, DoClearSaveDialogue
jp Bankswitch
-Func_4496: ; 4496 (1:4496)
- ld a, $98
- call Func_4533
+TitleScreenPickNewMon: ; 4496 (1:4496)
+ ld a, vBGMap0 / $100
+ call TitleScreenCopyTileMapToVRAM
-.new
-; Generate a new TitleMon.
+.loop
+; Keep looping until a mon different from the current one is picked.
call Random
and $f
ld c, a
@@ -260,14 +279,14 @@
ld hl, TitleMons
add hl, bc
ld a, [hl]
- ld hl, wWhichTrade
+ ld hl, wTitleMonSpecies
; Can't be the same as before.
cp [hl]
- jr z, .new
+ jr z, .loop
ld [hl], a
- call Func_4524
+ call LoadTitleMonSprite
ld a, $90
ld [hWY], a
@@ -275,7 +294,7 @@
callba TitleScroll
ret
-Func_44c1: ; 44c1 (1:44c1)
+TitleScreenScrollInMon: ; 44c1 (1:44c1)
ld d, 0 ; scroll in
callba TitleScroll
xor a
@@ -282,7 +301,7 @@
ld [hWY], a
ret
-Func_44cf: ; 44cf (1:44cf)
+ScrollTitleScreenGameVersion: ; 44cf (1:44cf)
.wait
ld a, [rLY]
cp l
@@ -297,7 +316,7 @@
jr z, .wait2
ret
-Func_44dd: ; 44dd (1:44dd)
+DrawPlayerCharacter: ; 44dd (1:44dd)
ld hl, PlayerCharacterTitleGraphics
ld de, vSprites
ld bc, $230
@@ -305,42 +324,42 @@
call FarCopyData2
call ClearSprites
xor a
- ld [wWhichTrade], a
+ ld [wPlayerCharacterOAMTile], a
ld hl, wOAMBuffer
ld de, $605a
- ld b, $7
-.asm_44fa
+ ld b, 7
+.loop
push de
- ld c, $5
-.asm_44fd
+ ld c, 5
+.innerLoop
ld a, d
- ld [hli], a
+ ld [hli], a ; Y
ld a, e
- ld [hli], a
- add $8
+ ld [hli], a ; X
+ add 8
ld e, a
- ld a, [wWhichTrade]
- ld [hli], a
+ ld a, [wPlayerCharacterOAMTile]
+ ld [hli], a ; tile
inc a
- ld [wWhichTrade], a
+ ld [wPlayerCharacterOAMTile], a
inc hl
dec c
- jr nz, .asm_44fd
+ jr nz, .innerLoop
pop de
- ld a, $8
+ ld a, 8
add d
ld d, a
dec b
- jr nz, .asm_44fa
+ jr nz, .loop
ret
-Func_4519: ; 4519 (1:4519)
+ClearBothBGMaps: ; 4519 (1:4519)
ld hl, vBGMap0
- ld bc, $800
- ld a, $7f
+ ld bc, $400 * 2
+ ld a, " "
jp FillMemory
-Func_4524: ; 4524 (1:4524)
+LoadTitleMonSprite: ; 4524 (1:4524)
ld [wcf91], a
ld [wd0b5], a
hlCoord 5, 10
@@ -347,7 +366,7 @@
call GetMonHeader
jp LoadFrontSpriteByMonIndex
-Func_4533: ; 4533 (1:4533)
+TitleScreenCopyTileMapToVRAM: ; 4533 (1:4533)
ld [H_AUTOBGTRANSFERDEST + 1], a
jp Delay3
--- a/engine/titlescreen2.asm
+++ b/engine/titlescreen2.asm
@@ -87,9 +87,9 @@
; This is really two 0-terminated lists. Initiated with an index of 1.
db 0, $71, $6f, $6e, $6d, $6c, $6d, $6e, $6f, $71, $74, 0
-Func_372ac: ; 372ac (d:72ac)
+TitleScreenAnimateBallIfStarterOut: ; 372ac (d:72ac)
; Animate the TitleBall if a starter just got scrolled out.
- ld a, [wWhichTrade]
+ ld a, [wTitleMonSpecies]
cp STARTER1
jr z, .ok
cp STARTER2
--- a/hram.asm
+++ b/hram.asm
@@ -201,6 +201,9 @@
H_CURRENTSPRITEOFFSET EQU $FFDA ; multiple of $10
+hVendingMachineItem EQU $FFDB
+hVendingMachinePrice EQU $FFDC ; 3-byte BCD number
+
hNewPartyLength EQU $FFE4
hDividend2 EQU $FFE5
--- a/wram.asm
+++ b/wram.asm
@@ -634,6 +634,10 @@
ds 1
+wTitleMonSpecies:: ; cd3d
+
+wPlayerCharacterOAMTile:: ; cd3d
+
wMoveDownSmallStarsOAMCount:: ; cd3d
; the number of small stars OAM entries to move down