mirror of https://github.com/pret/pokecrystal.git
1304 lines
21 KiB
NASM
Executable File
1304 lines
21 KiB
NASM
Executable File
InitDecorations: ; 26751 (9:6751)
|
|
ld a, DECO_FEATHERY_BED
|
|
ld [Bed], a
|
|
ld a, DECO_TOWN_MAP
|
|
ld [Poster], a
|
|
ret
|
|
|
|
_KrisDecorationMenu: ; 0x2675c
|
|
ld a, [wWhichIndexSet]
|
|
push af
|
|
ld hl, .MenuDataHeader
|
|
call LoadMenuDataHeader
|
|
xor a
|
|
ld [Buffer5], a
|
|
ld a, $1
|
|
ld [Buffer6], a
|
|
.top_loop
|
|
ld a, [Buffer6]
|
|
ld [wMenuCursorBuffer], a
|
|
call .FindCategoriesWithOwnedDecos
|
|
call DoNthMenu
|
|
ld a, [wMenuCursorY]
|
|
ld [Buffer6], a
|
|
jr c, .exit_menu
|
|
ld a, [MenuSelection]
|
|
ld hl, .pointers
|
|
call MenuJumptable
|
|
jr nc, .top_loop
|
|
|
|
.exit_menu
|
|
call ExitMenu
|
|
pop af
|
|
ld [wWhichIndexSet], a
|
|
ld a, [Buffer5]
|
|
ld c, a
|
|
ret
|
|
; 0x2679a
|
|
|
|
.MenuDataHeader: ; 0x2679a
|
|
db MENU_BACKUP_TILES ; flags
|
|
menu_coords 5, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
|
|
dw .MenuData2
|
|
db 1 ; default option
|
|
; 0x267a2
|
|
|
|
.MenuData2: ; 0x267a2
|
|
db STATICMENU_CURSOR | STATICMENU_WRAP ; flags
|
|
db 0 ; items
|
|
dw wd002
|
|
dw PlaceNthMenuStrings
|
|
dw .pointers
|
|
; 0x267aa
|
|
|
|
.pointers ; 267aa
|
|
dw DecoBedMenu, .bed
|
|
dw DecoCarpetMenu, .carpet
|
|
dw DecoPlantMenu, .plant
|
|
dw DecoPosterMenu, .poster
|
|
dw DecoConsoleMenu, .game
|
|
dw DecoOrnamentMenu, .ornament
|
|
dw DecoBigDollMenu, .big_doll
|
|
dw DecoExitMenu, .exit
|
|
|
|
.bed db "BED@"
|
|
.carpet db "CARPET@"
|
|
.plant db "PLANT@"
|
|
.poster db "POSTER@"
|
|
.game db "GAME CONSOLE@"
|
|
.ornament db "ORNAMENT@"
|
|
.big_doll db "BIG DOLL@"
|
|
.exit db "EXIT@"
|
|
; 26806
|
|
|
|
.FindCategoriesWithOwnedDecos: ; 26806
|
|
xor a
|
|
ld [wWhichIndexSet], a
|
|
call .ClearStringBuffer2
|
|
call .FindOwndDecos
|
|
ld a, 7
|
|
call .AppendToStringBuffer2
|
|
ld hl, StringBuffer2
|
|
ld de, wd002
|
|
ld bc, ITEM_NAME_LENGTH
|
|
call CopyBytes
|
|
ret
|
|
|
|
.ClearStringBuffer2: ; 26822 (9:6822)
|
|
ld hl, StringBuffer2
|
|
xor a
|
|
ld [hli], a
|
|
ld bc, ITEM_NAME_LENGTH - 1
|
|
ld a, -1
|
|
call ByteFill
|
|
ret
|
|
|
|
.AppendToStringBuffer2: ; 26830 (9:6830)
|
|
ld hl, StringBuffer2
|
|
inc [hl]
|
|
ld e, [hl]
|
|
ld d, 0
|
|
add hl, de
|
|
ld [hl], a
|
|
ret
|
|
|
|
.FindOwndDecos: ; 2683a (9:683a)
|
|
ld hl, .dw
|
|
.loop
|
|
ld a, [hli]
|
|
ld e, a
|
|
ld a, [hli]
|
|
ld d, a
|
|
or e
|
|
jr z, .done
|
|
push hl
|
|
call _de_
|
|
pop hl
|
|
jr nc, .next
|
|
ld a, [hl]
|
|
push hl
|
|
call .AppendToStringBuffer2
|
|
pop hl
|
|
.next
|
|
inc hl
|
|
jr .loop
|
|
.done
|
|
ret
|
|
; 26855 (9:6855)
|
|
|
|
.dw ; 26855
|
|
dwb FindOwnedBeds, 0 ; bed
|
|
dwb FindOwnedCarpets, 1 ; carpet
|
|
dwb FindOwnedPlants, 2 ; plant
|
|
dwb FindOwnedPosters, 3 ; poster
|
|
dwb FindOwnedConsoles, 4 ; game console
|
|
dwb FindOwnedOrnaments, 5 ; ornament
|
|
dwb FindOwnedBigDolls, 6 ; big doll
|
|
dw 0 ; end
|
|
; 2686c
|
|
|
|
Deco_FillTempWithMinusOne: ; 2686c
|
|
xor a
|
|
ld hl, wd002
|
|
ld [hli], a
|
|
ld a, -1
|
|
ld bc, $10
|
|
call ByteFill
|
|
ret
|
|
; 2687a
|
|
|
|
CheckAllDecorationFlags: ; 2687a
|
|
.loop
|
|
ld a, [hli]
|
|
cp -1
|
|
jr z, .done
|
|
push hl
|
|
push af
|
|
ld b, CHECK_FLAG
|
|
call DecorationFlagAction
|
|
ld a, c
|
|
and a
|
|
pop bc
|
|
ld a, b
|
|
call nz, AppendDecoIndex
|
|
pop hl
|
|
jr .loop
|
|
|
|
.done
|
|
ret
|
|
; 26891
|
|
|
|
AppendDecoIndex: ; 26891
|
|
ld hl, wd002
|
|
inc [hl]
|
|
ld e, [hl]
|
|
ld d, $0
|
|
add hl, de
|
|
ld [hl], a
|
|
ret
|
|
; 2689b
|
|
|
|
FindOwnedDecosInCategory: ; 2689b
|
|
push bc
|
|
push hl
|
|
call Deco_FillTempWithMinusOne
|
|
pop hl
|
|
call CheckAllDecorationFlags
|
|
pop bc
|
|
ld a, [wd002]
|
|
and a
|
|
ret z
|
|
|
|
ld a, c
|
|
call AppendDecoIndex
|
|
ld a, 0
|
|
call AppendDecoIndex
|
|
scf
|
|
ret
|
|
; 268b5
|
|
|
|
DecoBedMenu: ; 268b5
|
|
call FindOwnedBeds
|
|
call PopulateDecoCategoryMenu
|
|
xor a
|
|
ret
|
|
; 268bd
|
|
|
|
FindOwnedBeds: ; 268bd
|
|
ld hl, .beds
|
|
ld c, BEDS
|
|
jp FindOwnedDecosInCategory
|
|
; 268c5
|
|
|
|
.beds ; 268c5
|
|
db DECO_FEATHERY_BED ; 2
|
|
db DECO_PINK_BED ; 3
|
|
db DECO_POLKADOT_BED ; 4
|
|
db DECO_PIKACHU_BED ; 5
|
|
db -1
|
|
; 268ca
|
|
|
|
DecoCarpetMenu: ; 268ca
|
|
call FindOwnedCarpets
|
|
call PopulateDecoCategoryMenu
|
|
xor a
|
|
ret
|
|
; 268d2
|
|
|
|
FindOwnedCarpets: ; 268d2
|
|
ld hl, .carpets
|
|
ld c, CARPETS
|
|
jp FindOwnedDecosInCategory
|
|
; 268da
|
|
|
|
.carpets ; 268da
|
|
db DECO_RED_CARPET ; 7
|
|
db DECO_BLUE_CARPET ; 8
|
|
db DECO_YELLOW_CARPET ; 9
|
|
db DECO_GREEN_CARPET ; a
|
|
db -1
|
|
; 268df
|
|
|
|
DecoPlantMenu: ; 268df
|
|
call FindOwnedPlants
|
|
call PopulateDecoCategoryMenu
|
|
xor a
|
|
ret
|
|
; 268e7
|
|
|
|
FindOwnedPlants: ; 268e7
|
|
ld hl, .plants
|
|
ld c, PLANTS
|
|
jp FindOwnedDecosInCategory
|
|
; 268ef
|
|
|
|
.plants ; 268ef
|
|
db DECO_MAGNAPLANT ; c
|
|
db DECO_TROPICPLANT ; d
|
|
db DECO_JUMBOPLANT ; e
|
|
db -1
|
|
; 268f3
|
|
|
|
DecoPosterMenu: ; 268f3
|
|
call FindOwnedPosters
|
|
call PopulateDecoCategoryMenu
|
|
xor a
|
|
ret
|
|
; 268fb
|
|
|
|
FindOwnedPosters: ; 268fb
|
|
ld hl, .posters
|
|
ld c, POSTERS
|
|
jp FindOwnedDecosInCategory
|
|
; 26903
|
|
|
|
.posters ; 26903
|
|
db DECO_TOWN_MAP ; 10
|
|
db DECO_PIKACHU_POSTER ; 11
|
|
db DECO_CLEFAIRY_POSTER ; 12
|
|
db DECO_JIGGLYPUFF_POSTER ; 13
|
|
db -1
|
|
; 26908
|
|
|
|
DecoConsoleMenu: ; 26908
|
|
call FindOwnedConsoles
|
|
call PopulateDecoCategoryMenu
|
|
xor a
|
|
ret
|
|
; 26910
|
|
|
|
FindOwnedConsoles: ; 26910
|
|
ld hl, .consoles
|
|
ld c, CONSOLES
|
|
jp FindOwnedDecosInCategory
|
|
; 26918
|
|
|
|
.consoles ; 26918
|
|
db DECO_FAMICOM ; 15
|
|
db DECO_SNES ; 16
|
|
db DECO_N64 ; 17
|
|
db DECO_VIRTUAL_BOY ; 18
|
|
db -1
|
|
; 2691d
|
|
|
|
DecoOrnamentMenu: ; 2691d
|
|
call FindOwnedOrnaments
|
|
call PopulateDecoCategoryMenu
|
|
xor a
|
|
ret
|
|
; 26925
|
|
|
|
FindOwnedOrnaments: ; 26925
|
|
ld hl, .ornaments
|
|
ld c, DOLLS
|
|
jp FindOwnedDecosInCategory
|
|
; 2692d
|
|
|
|
.ornaments ; 2692d
|
|
db DECO_PIKACHU_DOLL ; 1e
|
|
db DECO_SURF_PIKACHU_DOLL ; 1f
|
|
db DECO_CLEFAIRY_DOLL ; 20
|
|
db DECO_JIGGLYPUFF_DOLL ; 21
|
|
db DECO_BULBASAUR_DOLL ; 22
|
|
db DECO_CHARMANDER_DOLL ; 23
|
|
db DECO_SQUIRTLE_DOLL ; 24
|
|
db DECO_POLIWAG_DOLL ; 25
|
|
db DECO_DIGLETT_DOLL ; 26
|
|
db DECO_STARMIE_DOLL ; 27
|
|
db DECO_MAGIKARP_DOLL ; 28
|
|
db DECO_ODDISH_DOLL ; 29
|
|
db DECO_GENGAR_DOLL ; 2a
|
|
db DECO_SHELLDER_DOLL ; 2b
|
|
db DECO_GRIMER_DOLL ; 2c
|
|
db DECO_VOLTORB_DOLL ; 2d
|
|
db DECO_WEEDLE_DOLL ; 2e
|
|
db DECO_UNOWN_DOLL ; 2f
|
|
db DECO_GEODUDE_DOLL ; 30
|
|
db DECO_MACHOP_DOLL ; 31
|
|
db DECO_TENTACOOL_DOLL ; 32
|
|
db DECO_GOLD_TROPHY_DOLL ; 33
|
|
db DECO_SILVER_TROPHY_DOLL ; 34
|
|
db -1
|
|
; 26945
|
|
|
|
DecoBigDollMenu: ; 26945
|
|
call FindOwnedBigDolls
|
|
call PopulateDecoCategoryMenu
|
|
xor a
|
|
ret
|
|
; 2694d
|
|
|
|
FindOwnedBigDolls: ; 2694d
|
|
ld hl, .big_dolls
|
|
ld c, BIG_DOLLS
|
|
jp FindOwnedDecosInCategory
|
|
; 26955
|
|
|
|
.big_dolls ; 26955
|
|
db DECO_BIG_SNORLAX_DOLL ; 1a
|
|
db DECO_BIG_ONIX_DOLL ; 1b
|
|
db DECO_BIG_LAPRAS_DOLL ; 1c
|
|
db -1
|
|
; 26959
|
|
|
|
DecoExitMenu: ; 26959
|
|
scf
|
|
ret
|
|
; 2695b
|
|
|
|
PopulateDecoCategoryMenu: ; 2695b
|
|
ld a, [wd002]
|
|
and a
|
|
jr z, .empty
|
|
cp 8
|
|
jr nc, .beyond_eight
|
|
xor a
|
|
ld [wWhichIndexSet], a
|
|
ld hl, .NonscrollingMenuDataHeader
|
|
call LoadMenuDataHeader
|
|
call DoNthMenu
|
|
jr c, .no_action_1
|
|
call DoDecorationAction2
|
|
|
|
.no_action_1
|
|
call ExitMenu
|
|
ret
|
|
|
|
.beyond_eight
|
|
ld hl, wd002
|
|
ld e, [hl]
|
|
dec [hl]
|
|
ld d, 0
|
|
add hl, de
|
|
ld [hl], -1
|
|
call LoadStandardMenuDataHeader
|
|
ld hl, .ScrollingMenuDataHeader
|
|
call CopyMenuDataHeader
|
|
xor a
|
|
ld [hBGMapMode], a
|
|
call InitScrollingMenu
|
|
xor a
|
|
ld [wMenuScrollPosition], a
|
|
call ScrollingMenu
|
|
ld a, [wMenuJoypad]
|
|
cp 2
|
|
jr z, .no_action_2
|
|
call DoDecorationAction2
|
|
|
|
.no_action_2
|
|
call ExitMenu
|
|
ret
|
|
|
|
.empty
|
|
ld hl, .Text_nothing_to_choose
|
|
call MenuTextBoxBackup
|
|
ret
|
|
; 269b0
|
|
|
|
.Text_nothing_to_choose: ; 0x269b0
|
|
; There's nothing to choose.
|
|
text_jump UnknownText_0x1bc471
|
|
db "@"
|
|
; 0x269b5
|
|
|
|
.NonscrollingMenuDataHeader: ; 0x269b5
|
|
db MENU_BACKUP_TILES ; flags
|
|
menu_coords 0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
|
|
dw .NonscrollingMenuData2
|
|
db 1 ; default option
|
|
; 0x269bd
|
|
|
|
.NonscrollingMenuData2: ; 0x269bd
|
|
db STATICMENU_CURSOR | STATICMENU_WRAP ; flags
|
|
db 0 ; items
|
|
dw wd002
|
|
dw DecorationMenuFunction
|
|
dw DecorationAttributes
|
|
; 0x269c5
|
|
|
|
.ScrollingMenuDataHeader: ; 0x269c5
|
|
db MENU_BACKUP_TILES ; flags
|
|
menu_coords 1, 1, SCREEN_WIDTH - 2, SCREEN_HEIGHT - 2
|
|
dw .ScrollingMenuData2
|
|
db 1 ; default option
|
|
; 0x269cd
|
|
|
|
.ScrollingMenuData2: ; 0x269cd
|
|
db SCROLLINGMENU_DISPLAY_ARROWS ; flags
|
|
db 8, 0 ; rows, columns
|
|
db 1 ; horizontal spacing
|
|
dbw 0, wd002 ; text pointer
|
|
dba DecorationMenuFunction
|
|
dbw 0, 0
|
|
dbw 0, 0
|
|
; 269dd
|
|
|
|
|
|
GetDecorationData: ; 269dd
|
|
ld hl, DecorationAttributes
|
|
ld bc, 6
|
|
call AddNTimes
|
|
ret
|
|
; 269e7
|
|
|
|
GetDecorationName: ; 269e7
|
|
push hl
|
|
call GetDecorationData
|
|
call GetDecoName
|
|
pop hl
|
|
call CopyName2
|
|
ret
|
|
; 269f3
|
|
|
|
DecorationMenuFunction: ; 269f3
|
|
ld a, [MenuSelection]
|
|
push de
|
|
call GetDecorationData
|
|
call GetDecoName
|
|
pop hl
|
|
call PlaceString
|
|
ret
|
|
; 26a02
|
|
|
|
DoDecorationAction2: ; 26a02
|
|
ld a, [MenuSelection]
|
|
call GetDecorationData
|
|
ld de, 2 ; function 2
|
|
add hl, de
|
|
ld a, [hl]
|
|
ld hl, .DecoActions
|
|
rst JumpTable
|
|
ret
|
|
; 26a12
|
|
|
|
.DecoActions: ; 26a12
|
|
dw DecoAction_nothing
|
|
dw DecoAction_setupbed
|
|
dw DecoAction_putawaybed
|
|
dw DecoAction_setupcarpet
|
|
dw DecoAction_putawaycarpet
|
|
dw DecoAction_setupplant
|
|
dw DecoAction_putawayplant
|
|
dw DecoAction_setupposter
|
|
dw DecoAction_putawayposter
|
|
dw DecoAction_setupconsole
|
|
dw DecoAction_putawayconsole
|
|
dw DecoAction_setupbigdoll
|
|
dw DecoAction_putawaybigdoll
|
|
dw DecoAction_setupornament
|
|
dw DecoAction_putawayornament
|
|
; 26a30
|
|
|
|
|
|
GetDecorationFlag: ; 26a30
|
|
call GetDecorationData
|
|
ld de, 3 ; event flag
|
|
add hl, de
|
|
ld a, [hli]
|
|
ld d, [hl]
|
|
ld e, a
|
|
ret
|
|
; 26a3b
|
|
|
|
DecorationFlagAction: ; 26a3b
|
|
push bc
|
|
call GetDecorationFlag
|
|
pop bc
|
|
call EventFlagAction
|
|
ret
|
|
; 26a44
|
|
|
|
GetDecorationSprite: ; 26a44
|
|
ld a, c
|
|
call GetDecorationData
|
|
ld de, 5 ; sprite
|
|
add hl, de
|
|
ld a, [hl]
|
|
ld c, a
|
|
ret
|
|
; 26a4f
|
|
|
|
INCLUDE "data/decorations/attributes.asm"
|
|
|
|
INCLUDE "data/decorations/names.asm"
|
|
|
|
GetDecoName: ; 26c72
|
|
ld a, [hli]
|
|
ld e, [hl]
|
|
ld bc, StringBuffer2
|
|
push bc
|
|
ld hl, .NameFunctions
|
|
rst JumpTable
|
|
pop de
|
|
ret
|
|
; 26c7e
|
|
|
|
.NameFunctions: ; 26c7e
|
|
dw .invalid
|
|
dw .plant
|
|
dw .bed
|
|
dw .carpet
|
|
dw .poster
|
|
dw .doll
|
|
dw .bigdoll
|
|
; 26c8c
|
|
|
|
|
|
.invalid ; 26c8c
|
|
ret
|
|
; 26c8d
|
|
|
|
.plant ; 26c8d
|
|
ld a, e
|
|
jr .getdeconame
|
|
|
|
.bed ; 26c90
|
|
call .plant
|
|
ld a, _BED
|
|
jr .getdeconame
|
|
|
|
.carpet ; 26c97
|
|
call .plant
|
|
ld a, _CARPET
|
|
jr .getdeconame
|
|
|
|
.poster ; 26c9e
|
|
ld a, e
|
|
call .getpokename
|
|
ld a, _POSTER
|
|
jr .getdeconame
|
|
|
|
.doll ; 26ca6
|
|
ld a, e
|
|
call .getpokename
|
|
ld a, _DOLL
|
|
jr .getdeconame
|
|
|
|
.bigdoll ; 26cae
|
|
push de
|
|
ld a, BIG_
|
|
call .getdeconame
|
|
pop de
|
|
ld a, e
|
|
jr .getpokename
|
|
|
|
.unused ; 26cb8
|
|
push de
|
|
call .getdeconame
|
|
pop de
|
|
ld a, e
|
|
jr .getdeconame
|
|
|
|
.getpokename ; 26cc0
|
|
push bc
|
|
ld [wd265], a
|
|
call GetPokemonName
|
|
pop bc
|
|
jr .copy
|
|
|
|
.getdeconame ; 26cca
|
|
call ._getdeconame
|
|
jr .copy
|
|
|
|
._getdeconame ; 26ccf
|
|
push bc
|
|
ld hl, DecorationNames
|
|
call GetNthString
|
|
ld d, h
|
|
ld e, l
|
|
pop bc
|
|
ret
|
|
|
|
.copy ; 26cda
|
|
ld h, b
|
|
ld l, c
|
|
call CopyName2
|
|
dec hl
|
|
ld b, h
|
|
ld c, l
|
|
ret
|
|
; 26ce3
|
|
|
|
DecoAction_nothing: ; 26ce3
|
|
scf
|
|
ret
|
|
; 26ce5
|
|
|
|
DecoAction_setupbed: ; 26ce5
|
|
ld hl, Bed
|
|
jp DecoAction_TrySetItUp
|
|
; 26ceb
|
|
|
|
DecoAction_putawaybed: ; 26ceb
|
|
ld hl, Bed
|
|
jp DecoAction_TryPutItAway
|
|
; 26cf1
|
|
|
|
DecoAction_setupcarpet: ; 26cf1
|
|
ld hl, Carpet
|
|
jp DecoAction_TrySetItUp
|
|
; 26cf7
|
|
|
|
DecoAction_putawaycarpet: ; 26cf7
|
|
ld hl, Carpet
|
|
jp DecoAction_TryPutItAway
|
|
; 26cfd
|
|
|
|
DecoAction_setupplant: ; 26cfd
|
|
ld hl, Plant
|
|
jp DecoAction_TrySetItUp
|
|
; 26d03
|
|
|
|
DecoAction_putawayplant: ; 26d03
|
|
ld hl, Plant
|
|
jp DecoAction_TryPutItAway
|
|
; 26d09
|
|
|
|
DecoAction_setupposter: ; 26d09
|
|
ld hl, Poster
|
|
jp DecoAction_TrySetItUp
|
|
; 26d0f
|
|
|
|
DecoAction_putawayposter: ; 26d0f
|
|
ld hl, Poster
|
|
jp DecoAction_TryPutItAway
|
|
; 26d15
|
|
|
|
DecoAction_setupconsole: ; 26d15
|
|
ld hl, Console
|
|
jp DecoAction_TrySetItUp
|
|
; 26d1b
|
|
|
|
DecoAction_putawayconsole: ; 26d1b
|
|
ld hl, Console
|
|
jp DecoAction_TryPutItAway
|
|
; 26d21
|
|
|
|
DecoAction_setupbigdoll: ; 26d21
|
|
ld hl, BigDoll
|
|
jp DecoAction_TrySetItUp
|
|
; 26d27
|
|
|
|
DecoAction_putawaybigdoll: ; 26d27
|
|
ld hl, BigDoll
|
|
jp DecoAction_TryPutItAway
|
|
; 26d2d
|
|
|
|
DecoAction_TrySetItUp: ; 26d2d
|
|
ld a, [hl]
|
|
ld [Buffer1], a
|
|
push hl
|
|
call DecoAction_SetItUp
|
|
jr c, .failed
|
|
ld a, 1
|
|
ld [Buffer5], a
|
|
pop hl
|
|
ld a, [MenuSelection]
|
|
ld [hl], a
|
|
xor a
|
|
ret
|
|
|
|
.failed
|
|
pop hl
|
|
xor a
|
|
ret
|
|
; 26d46
|
|
|
|
DecoAction_SetItUp: ; 26d46
|
|
; See if there's anything of the same type already out
|
|
ld a, [Buffer1]
|
|
and a
|
|
jr z, .nothingthere
|
|
; See if that item is already out
|
|
ld b, a
|
|
ld a, [MenuSelection]
|
|
cp b
|
|
jr z, .alreadythere
|
|
; Put away the item that's already out, and set up the new one
|
|
ld a, [MenuSelection]
|
|
ld hl, StringBuffer4
|
|
call GetDecorationName
|
|
ld a, [Buffer1]
|
|
ld hl, StringBuffer3
|
|
call GetDecorationName
|
|
ld hl, DecoText_PutAwayAndSetUp
|
|
call MenuTextBoxBackup
|
|
xor a
|
|
ret
|
|
|
|
.nothingthere
|
|
ld a, [MenuSelection]
|
|
ld hl, StringBuffer3
|
|
call GetDecorationName
|
|
ld hl, DecoText_SetUpTheDeco
|
|
call MenuTextBoxBackup
|
|
xor a
|
|
ret
|
|
|
|
.alreadythere
|
|
ld hl, DecoText_AlreadySetUp
|
|
call MenuTextBoxBackup
|
|
scf
|
|
ret
|
|
; 26d86
|
|
|
|
DecoAction_TryPutItAway: ; 26d86
|
|
; If there is no item of that type already set, there is nothing to put away.
|
|
ld a, [hl]
|
|
ld [Buffer1], a
|
|
xor a
|
|
ld [hl], a
|
|
ld a, [Buffer1]
|
|
and a
|
|
jr z, .nothingthere
|
|
; Put it away.
|
|
ld a, $1
|
|
ld [Buffer5], a
|
|
ld a, [Buffer1]
|
|
ld [MenuSelection], a
|
|
ld hl, StringBuffer3
|
|
call GetDecorationName
|
|
ld hl, DecoText_PutAwayTheDeco
|
|
call MenuTextBoxBackup
|
|
xor a
|
|
ret
|
|
|
|
.nothingthere
|
|
ld hl, DecoText_NothingToPutAway
|
|
call MenuTextBoxBackup
|
|
xor a
|
|
ret
|
|
; 26db3
|
|
|
|
DecoAction_setupornament: ; 26db3
|
|
ld hl, UnknownText_0x26e41
|
|
call DecoAction_AskWhichSide
|
|
jr c, .cancel
|
|
call DecoAction_SetItUp_Ornament
|
|
jr c, .cancel
|
|
ld a, $1
|
|
ld [Buffer5], a
|
|
jr DecoAction_FinishUp_Ornament
|
|
|
|
.cancel
|
|
xor a
|
|
ret
|
|
|
|
DecoAction_putawayornament: ; 26dc9
|
|
ld hl, DecoText_WhichSide
|
|
call DecoAction_AskWhichSide
|
|
jr nc, .incave
|
|
xor a
|
|
ret
|
|
|
|
.incave
|
|
call DecoAction_PutItAway_Ornament
|
|
|
|
DecoAction_FinishUp_Ornament: ; 26dd6
|
|
call QueryWhichSide
|
|
ld a, [wSelectedDecoration]
|
|
ld [hl], a
|
|
ld a, [wOtherDecoration]
|
|
ld [de], a
|
|
xor a
|
|
ret
|
|
; 26de3
|
|
|
|
DecoAction_SetItUp_Ornament: ; 26de3
|
|
ld a, [wSelectedDecoration]
|
|
and a
|
|
jr z, .nothingthere
|
|
ld b, a
|
|
ld a, [MenuSelection]
|
|
cp b
|
|
jr z, .failed
|
|
ld a, b
|
|
ld hl, StringBuffer3
|
|
call GetDecorationName
|
|
ld a, [MenuSelection]
|
|
ld hl, StringBuffer4
|
|
call GetDecorationName
|
|
ld a, [MenuSelection]
|
|
ld [wSelectedDecoration], a
|
|
call .getwhichside
|
|
ld hl, DecoText_PutAwayAndSetUp
|
|
call MenuTextBoxBackup
|
|
xor a
|
|
ret
|
|
|
|
.nothingthere
|
|
ld a, [MenuSelection]
|
|
ld [wSelectedDecoration], a
|
|
call .getwhichside
|
|
ld a, [MenuSelection]
|
|
ld hl, StringBuffer3
|
|
call GetDecorationName
|
|
ld hl, DecoText_SetUpTheDeco
|
|
call MenuTextBoxBackup
|
|
xor a
|
|
ret
|
|
|
|
.failed
|
|
ld hl, DecoText_AlreadySetUp
|
|
call MenuTextBoxBackup
|
|
scf
|
|
ret
|
|
; 26e33
|
|
|
|
.getwhichside ; 26e33
|
|
ld a, [MenuSelection]
|
|
ld b, a
|
|
ld a, [wOtherDecoration]
|
|
cp b
|
|
ret nz
|
|
xor a
|
|
ld [wOtherDecoration], a
|
|
ret
|
|
; 26e41
|
|
|
|
UnknownText_0x26e41: ; 0x26e41
|
|
; Which side do you want to put it on?
|
|
text_jump UnknownText_0x1bc48c
|
|
db "@"
|
|
; 0x26e46
|
|
|
|
DecoAction_PutItAway_Ornament: ; 26e46
|
|
ld a, [wSelectedDecoration]
|
|
and a
|
|
jr z, .nothingthere
|
|
ld hl, StringBuffer3
|
|
call GetDecorationName
|
|
ld a, $1
|
|
ld [Buffer5], a
|
|
xor a
|
|
ld [wSelectedDecoration], a
|
|
ld hl, DecoText_PutAwayTheDeco
|
|
call MenuTextBoxBackup
|
|
xor a
|
|
ret
|
|
|
|
.nothingthere
|
|
ld hl, DecoText_NothingToPutAway
|
|
call MenuTextBoxBackup
|
|
xor a
|
|
ret
|
|
; 26e6b
|
|
|
|
DecoText_WhichSide: ; 0x26e6b
|
|
; Which side do you want to put away?
|
|
text_jump UnknownText_0x1bc4b2
|
|
db "@"
|
|
; 0x26e70
|
|
|
|
DecoAction_AskWhichSide: ; 26e70
|
|
call MenuTextBox
|
|
ld hl, MenuDataHeader_0x26eab
|
|
call GetMenu2
|
|
call ExitMenu
|
|
call CopyMenuData2
|
|
jr c, .nope
|
|
ld a, [wMenuCursorY]
|
|
cp 3
|
|
jr z, .nope
|
|
ld [Buffer2], a
|
|
call QueryWhichSide
|
|
ld a, [hl]
|
|
ld [wSelectedDecoration], a
|
|
ld a, [de]
|
|
ld [wOtherDecoration], a
|
|
xor a
|
|
ret
|
|
|
|
.nope
|
|
scf
|
|
ret
|
|
; 26e9a
|
|
|
|
QueryWhichSide: ; 26e9a
|
|
ld hl, RightOrnament
|
|
ld de, LeftOrnament
|
|
ld a, [Buffer2]
|
|
cp 1
|
|
ret z
|
|
push hl
|
|
ld h, d
|
|
ld l, e
|
|
pop de
|
|
ret
|
|
; 26eab
|
|
|
|
MenuDataHeader_0x26eab: ; 0x26eab
|
|
db MENU_BACKUP_TILES ; flags
|
|
menu_coords 0, 0, 13, 7
|
|
dw MenuData2_0x26eb3
|
|
db 1 ; default option
|
|
; 0x26eb3
|
|
|
|
MenuData2_0x26eb3: ; 0x26eb3
|
|
db STATICMENU_CURSOR ; flags
|
|
db 3 ; items
|
|
db "RIGHT SIDE@"
|
|
db "LEFT SIDE@"
|
|
db "CANCEL@"
|
|
; 0x26ed1
|
|
|
|
DecoText_PutAwayTheDeco: ; 0x26ed1
|
|
; Put away the @ .
|
|
text_jump UnknownText_0x1bc4d7
|
|
db "@"
|
|
; 0x26ed6
|
|
|
|
DecoText_NothingToPutAway: ; 0x26ed6
|
|
; There's nothing to put away.
|
|
text_jump UnknownText_0x1bc4ec
|
|
db "@"
|
|
; 0x26edb
|
|
|
|
DecoText_SetUpTheDeco: ; 0x26edb
|
|
; Set up the @ .
|
|
text_jump UnknownText_0x1bc509
|
|
db "@"
|
|
; 0x26ee0
|
|
|
|
DecoText_PutAwayAndSetUp: ; 0x26ee0
|
|
; Put away the @ and set up the @ .
|
|
text_jump UnknownText_0x1bc51c
|
|
db "@"
|
|
; 0x26ee5
|
|
|
|
DecoText_AlreadySetUp: ; 0x26ee5
|
|
; That's already set up.
|
|
text_jump UnknownText_0x1bc546
|
|
db "@"
|
|
; 0x26eea
|
|
|
|
GetDecorationName_c_de: ; 26eea
|
|
ld a, c
|
|
ld h, d
|
|
ld l, e
|
|
call GetDecorationName
|
|
ret
|
|
; 26ef1
|
|
|
|
DecorationFlagAction_c: ; 26ef1
|
|
ld a, c
|
|
jp DecorationFlagAction
|
|
; 26ef5
|
|
|
|
|
|
GetDecorationName_c: ; 26ef5 (9:6ef5)
|
|
ld a, c
|
|
call GetDecorationID
|
|
ld hl, StringBuffer1
|
|
push hl
|
|
call GetDecorationName
|
|
pop de
|
|
ret
|
|
|
|
|
|
SetSpecificDecorationFlag: ; 26f02
|
|
ld a, c
|
|
call GetDecorationID
|
|
ld b, SET_FLAG
|
|
call DecorationFlagAction
|
|
ret
|
|
; 26f0c
|
|
|
|
GetDecorationID: ; 26f0c
|
|
push hl
|
|
push de
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, DecorationIDs
|
|
add hl, de
|
|
ld a, [hl]
|
|
pop de
|
|
pop hl
|
|
ret
|
|
; 26f19
|
|
|
|
SetAllDecorationFlags: ; 26f19
|
|
ld hl, DecorationIDs
|
|
.loop
|
|
ld a, [hli]
|
|
cp -1
|
|
jr z, .done
|
|
push hl
|
|
ld b, SET_FLAG
|
|
call DecorationFlagAction
|
|
pop hl
|
|
jr .loop
|
|
|
|
.done
|
|
ret
|
|
; 26f2b
|
|
|
|
INCLUDE "data/decorations/decorations.asm"
|
|
|
|
DescribeDecoration:: ; 26f59
|
|
ld a, b
|
|
ld hl, .JumpTable
|
|
rst JumpTable
|
|
ret
|
|
; 26f5f
|
|
|
|
.JumpTable: ; 26f5f
|
|
; entries correspond to DECODESC_* constants
|
|
dw DecorationDesc_Poster
|
|
dw DecorationDesc_LeftOrnament
|
|
dw DecorationDesc_RightOrnament
|
|
dw DecorationDesc_GiantOrnament
|
|
dw DecorationDesc_Console
|
|
; 26f69
|
|
|
|
DecorationDesc_Poster: ; 26f69
|
|
ld a, [Poster]
|
|
ld hl, DecorationDesc_PosterPointers
|
|
ld de, 3
|
|
call IsInArray
|
|
jr c, .nope
|
|
ld de, DecorationDesc_NullPoster
|
|
ld b, BANK(DecorationDesc_NullPoster)
|
|
ret
|
|
|
|
.nope
|
|
ld b, BANK(DecorationDesc_TownMapPoster)
|
|
inc hl
|
|
ld a, [hli]
|
|
ld d, [hl]
|
|
ld e, a
|
|
ret
|
|
; 26f84
|
|
|
|
DecorationDesc_PosterPointers: ; 26f84
|
|
dbw DECO_TOWN_MAP, DecorationDesc_TownMapPoster
|
|
dbw DECO_PIKACHU_POSTER, DecorationDesc_PikachuPoster
|
|
dbw DECO_CLEFAIRY_POSTER, DecorationDesc_ClefairyPoster
|
|
dbw DECO_JIGGLYPUFF_POSTER, DecorationDesc_JigglypuffPoster
|
|
db -1
|
|
; 26f91
|
|
|
|
DecorationDesc_TownMapPoster: ; 0x26f91
|
|
opentext
|
|
writetext .TownMapText
|
|
waitbutton
|
|
special Special_TownMap
|
|
closetext
|
|
end
|
|
; 0x26f9b
|
|
|
|
.TownMapText: ; 0x26f9b
|
|
; It's the TOWN MAP.
|
|
text_jump UnknownText_0x1bc55d
|
|
db "@"
|
|
; 0x26fa0
|
|
|
|
DecorationDesc_PikachuPoster: ; 0x26fa0
|
|
jumptext .PikaPosterText
|
|
; 0x26fa3
|
|
|
|
.PikaPosterText: ; 0x26fa3
|
|
; It's a poster of a cute PIKACHU.
|
|
text_jump UnknownText_0x1bc570
|
|
db "@"
|
|
; 0x26fa8
|
|
|
|
DecorationDesc_ClefairyPoster: ; 0x26fa8
|
|
jumptext .ClefairyPosterText
|
|
; 0x26fab
|
|
|
|
.ClefairyPosterText: ; 0x26fab
|
|
; It's a poster of a cute CLEFAIRY.
|
|
text_jump UnknownText_0x1bc591
|
|
db "@"
|
|
; 0x26fb0
|
|
|
|
DecorationDesc_JigglypuffPoster: ; 0x26fb0
|
|
jumptext .JigglypuffPosterText
|
|
; 0x26fb3
|
|
|
|
.JigglypuffPosterText: ; 0x26fb3
|
|
; It's a poster of a cute JIGGLYPUFF.
|
|
text_jump UnknownText_0x1bc5b3
|
|
db "@"
|
|
; 0x26fb8
|
|
|
|
DecorationDesc_NullPoster: ; 26fb8
|
|
end
|
|
; 26fb9
|
|
|
|
DecorationDesc_LeftOrnament: ; 26fb9
|
|
ld a, [LeftOrnament]
|
|
jr DecorationDesc_OrnamentOrConsole
|
|
|
|
DecorationDesc_RightOrnament: ; 26fbe
|
|
ld a, [RightOrnament]
|
|
jr DecorationDesc_OrnamentOrConsole
|
|
|
|
DecorationDesc_Console: ; 26fc3
|
|
ld a, [Console]
|
|
jr DecorationDesc_OrnamentOrConsole
|
|
|
|
DecorationDesc_OrnamentOrConsole: ; 26fc8
|
|
ld c, a
|
|
ld de, StringBuffer3
|
|
call GetDecorationName_c_de
|
|
ld b, BANK(.OrnamentConsoleScript)
|
|
ld de, .OrnamentConsoleScript
|
|
ret
|
|
; 26fd5
|
|
|
|
.OrnamentConsoleScript: ; 26fd5
|
|
jumptext .OrnamentConsoleText
|
|
; 26fd8
|
|
|
|
.OrnamentConsoleText: ; 0x26fd8
|
|
; It's an adorable @ .
|
|
text_jump UnknownText_0x1bc5d7
|
|
db "@"
|
|
; 0x26fdd
|
|
|
|
DecorationDesc_GiantOrnament: ; 26fdd
|
|
ld b, BANK(.BigDollScript)
|
|
ld de, .BigDollScript
|
|
ret
|
|
; 26fe3
|
|
|
|
.BigDollScript: ; 26fe3
|
|
jumptext .BigDollText
|
|
; 26fe6
|
|
|
|
.BigDollText: ; 0x26fe6
|
|
; A giant doll! It's fluffy and cuddly.
|
|
text_jump UnknownText_0x1bc5ef
|
|
db "@"
|
|
; 0x26feb
|
|
|
|
Special_ToggleMaptileDecorations: ; 26feb
|
|
lb de, 0, 4
|
|
ld a, [Bed]
|
|
call SetDecorationTile
|
|
lb de, 7, 4
|
|
ld a, [Plant]
|
|
call SetDecorationTile
|
|
lb de, 6, 0
|
|
ld a, [Poster]
|
|
call SetDecorationTile
|
|
call SetPosterVisibility
|
|
lb de, 0, 0
|
|
call PadCoords_de
|
|
ld a, [Carpet]
|
|
and a
|
|
ret z
|
|
call _GetDecorationSprite
|
|
ld [hl], a
|
|
push af
|
|
lb de, 0, 2
|
|
call PadCoords_de
|
|
pop af
|
|
inc a
|
|
ld [hli], a
|
|
inc a
|
|
ld [hli], a
|
|
dec a
|
|
ld [hl], a
|
|
ret
|
|
; 27027
|
|
|
|
SetPosterVisibility: ; 27027
|
|
ld b, SET_FLAG
|
|
ld a, [Poster]
|
|
and a
|
|
jr nz, .ok
|
|
ld b, RESET_FLAG
|
|
|
|
.ok
|
|
ld de, EVENT_KRISS_ROOM_POSTER
|
|
jp EventFlagAction
|
|
; 27037
|
|
|
|
SetDecorationTile: ; 27037
|
|
push af
|
|
call PadCoords_de
|
|
pop af
|
|
and a
|
|
ret z
|
|
call _GetDecorationSprite
|
|
ld [hl], a
|
|
ret
|
|
; 27043
|
|
|
|
Special_ToggleDecorationsVisibility: ; 27043
|
|
ld de, EVENT_KRISS_HOUSE_2F_CONSOLE
|
|
ld hl, VariableSprites + SPRITE_CONSOLE - SPRITE_VARS
|
|
ld a, [Console]
|
|
call ToggleDecorationVisibility
|
|
ld de, EVENT_KRISS_HOUSE_2F_DOLL_1
|
|
ld hl, VariableSprites + SPRITE_DOLL_1 - SPRITE_VARS
|
|
ld a, [LeftOrnament]
|
|
call ToggleDecorationVisibility
|
|
ld de, EVENT_KRISS_HOUSE_2F_DOLL_2
|
|
ld hl, VariableSprites + SPRITE_DOLL_2 - SPRITE_VARS
|
|
ld a, [RightOrnament]
|
|
call ToggleDecorationVisibility
|
|
ld de, EVENT_KRISS_HOUSE_2F_BIG_DOLL
|
|
ld hl, VariableSprites + SPRITE_BIG_DOLL - SPRITE_VARS
|
|
ld a, [BigDoll]
|
|
call ToggleDecorationVisibility
|
|
ret
|
|
; 27074
|
|
|
|
ToggleDecorationVisibility: ; 27074
|
|
and a
|
|
jr z, .hide
|
|
call _GetDecorationSprite
|
|
ld [hl], a
|
|
ld b, RESET_FLAG
|
|
jp EventFlagAction
|
|
|
|
.hide
|
|
ld b, SET_FLAG
|
|
jp EventFlagAction
|
|
; 27085
|
|
|
|
_GetDecorationSprite: ; 27085
|
|
ld c, a
|
|
push de
|
|
push hl
|
|
farcall GetDecorationSprite
|
|
pop hl
|
|
pop de
|
|
ld a, c
|
|
ret
|
|
; 27092
|
|
|
|
PadCoords_de: ; 27092
|
|
ld a, d
|
|
add 4
|
|
ld d, a
|
|
ld a, e
|
|
add 4
|
|
ld e, a
|
|
call GetBlockLocation
|
|
ret
|