summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
authorentrpntr <entrpntr@gmail.com>2020-04-01 20:58:12 -0400
committerentrpntr <entrpntr@gmail.com>2020-04-02 01:36:09 -0400
commit48e0d17b6a51344a07c679e17eb92a25fdb1882b (patch)
tree290a1e71a454c76d5a3baeb9cd4de32ac86989ca /engine
parent90cdd19ae81c1f3446d64094018b3f1d705ce1cf (diff)
Finish disassembling bank $2e, miscellaneous pics cleanup.
Diffstat (limited to 'engine')
-rw-r--r--engine/events/treemons.asm2
-rwxr-xr-xengine/items/item_effects.asm4
-rw-r--r--engine/menus/intro_menu.asm2
-rw-r--r--engine/menus/naming_screen.asm14
-rw-r--r--engine/movie/gamefreak_presents.asm20
-rw-r--r--engine/overworld/init_map.asm2
-rw-r--r--engine/pokemon/mail_2.asm901
7 files changed, 923 insertions, 22 deletions
diff --git a/engine/events/treemons.asm b/engine/events/treemons.asm
index 94782643..c96df83a 100644
--- a/engine/events/treemons.asm
+++ b/engine/events/treemons.asm
@@ -51,7 +51,7 @@ RockMonEncounter:
xor a
ret
-db $05 ; ????
+ db $05 ; ????
GetTreeMonSet:
; Return carry and treemon set in a
diff --git a/engine/items/item_effects.asm b/engine/items/item_effects.asm
index 42e93894..e270734d 100755
--- a/engine/items/item_effects.asm
+++ b/engine/items/item_effects.asm
@@ -551,7 +551,7 @@ UltraBall: ; e926
ld b, $0
farcall NamingScreen
call RotateThreePalettesRight
- call Functiond9e
+ call LoadStandardFont
pop hl
ld de, wStringBuffer1
call InitName
@@ -610,7 +610,7 @@ UltraBall: ; e926
ld hl, Text_SentToBillsPC ; $6e3f
call PrintText
call RotateThreePalettesRight
- call Functiond9e
+ call LoadStandardFont
jr .end_ball_function
.catch_bug_contest_mon
diff --git a/engine/menus/intro_menu.asm b/engine/menus/intro_menu.asm
index e7534472..40feb4ad 100644
--- a/engine/menus/intro_menu.asm
+++ b/engine/menus/intro_menu.asm
@@ -232,7 +232,7 @@ Function5bf7: ; 5bf7 (1:5bf7)
ldh [hMapAnims], a
call ClearTilemap
call LoadFontsExtra
- call Functiond9e
+ call LoadStandardFont
call ClearWindowData
ret
diff --git a/engine/menus/naming_screen.asm b/engine/menus/naming_screen.asm
index ca0eb213..cd88ec28 100644
--- a/engine/menus/naming_screen.asm
+++ b/engine/menus/naming_screen.asm
@@ -818,7 +818,7 @@ Function11fde: ; 11fde (4:5fde)
Function1201e: ; 1201e (4:601e)
call ClearSprites
callfar ClearAnimatedObjectBuffer
- call Functiond9e
+ call LoadStandardFont
call LoadFontsExtra
ld de, NamingScreenGFX_MiddleLine ; $6232
ld hl, $8eb0
@@ -855,8 +855,8 @@ Function1201e: ; 1201e (4:601e)
ldh [hWX], a
ret
-NamingScreenGFX_Border: INCBIN "gfx/namingscreen/border.2bpp"
-NamingScreenGFX_Cursor: INCBIN "gfx/namingscreen/cursor.2bpp"
+NamingScreenGFX_Border: INCBIN "gfx/naming_screen/border.2bpp"
+NamingScreenGFX_Cursor: INCBIN "gfx/naming_screen/cursor.2bpp"
NameInputLower:
db "a b c d e f g h i"
@@ -888,9 +888,9 @@ BoxNameInputUpper:
db "- ? ! ♂ ♀ / . , &"
db "lower DEL END "
-NamingScreenGFX_ED: INCBIN "gfx/namingscreen/ed.1bpp" ; leftover from gen 1
-NamingScreenGFX_MiddleLine: INCBIN "gfx/namingscreen/middleline.1bpp"
-NamingScreenGFX_UnderLine: INCBIN "gfx/namingscreen/underline.1bpp"
+NamingScreenGFX_ED: INCBIN "gfx/naming_screen/ed.1bpp" ; leftover from gen 1
+NamingScreenGFX_MiddleLine: INCBIN "gfx/naming_screen/middleline.1bpp"
+NamingScreenGFX_UnderLine: INCBIN "gfx/naming_screen/underline.1bpp"
_ComposeMailMessage:
ld hl, wNamingScreenDestinationPointer
@@ -957,7 +957,7 @@ Function12267: ; 12267 (4:6267)
ld [hl], $4e
ret
-MailIcon: INCBIN "gfx/namingscreen/mail_icon.2bpp"
+MailIcon: INCBIN "gfx/naming_screen/mail_icon.2bpp"
Function12341: ; 12341 (4:6341)
ld a, $21
diff --git a/engine/movie/gamefreak_presents.asm b/engine/movie/gamefreak_presents.asm
index 7e9519f4..51c7d2ac 100644
--- a/engine/movie/gamefreak_presents.asm
+++ b/engine/movie/gamefreak_presents.asm
@@ -41,9 +41,9 @@ Copyright_GFPresents: ; e49a8 (39:49a8)
call GFPresents_PlayFrame
jr nc, .loop
- ; high bits of wJumpTableIndex are recycled for some flags
+ ; high bits of wJumptableIndex are recycled for some flags
; this was set if user canceled by pressing a button
- ld a, [wJumpTableIndex]
+ ld a, [wJumptableIndex]
bit 6, a
jr nz, .canceled
@@ -77,7 +77,7 @@ GFPresents_Init: ; e49f3 (39:49f3)
ld [hl], a
xor a
- ld [wJumpTableIndex], a
+ ld [wJumptableIndex], a
ld [$ce64], a
ld [wIntroSceneTimer], a
ldh [hSCX], a
@@ -102,9 +102,9 @@ GFPresents_PlayFrame: ; e4a37 (39:4a37)
and BUTTONS
jr nz, .pressed_button
- ; high bits of wJumpTableIndex are recycled for some flags
+ ; high bits of wJumptableIndex are recycled for some flags
; this is set when the sequence finished
- ld a, [wJumpTableIndex]
+ ld a, [wJumptableIndex]
bit 7, a
jr nz, .finish
@@ -118,8 +118,8 @@ GFPresents_PlayFrame: ; e4a37 (39:4a37)
ret
.pressed_button
- ; high bits of wJumpTableIndex are recycled for some flags
- ld hl, wJumpTableIndex
+ ; high bits of wJumptableIndex are recycled for some flags
+ ld hl, wJumptableIndex
set 6, [hl]
.finish
@@ -136,7 +136,7 @@ GFPresents_PlayFrame: ; e4a37 (39:4a37)
GFPresents_HandleFrame: ; e4a6d (39:4a6d)
; Dispatch to the current scene handler
- ld a, [wJumpTableIndex]
+ ld a, [wJumptableIndex]
ld e, a
ld d, 0
ld hl, .scenes
@@ -156,7 +156,7 @@ GFPresents_HandleFrame: ; e4a6d (39:4a6d)
dw GFPresents_SetDoneFlag
GFPresents_NextScene: ; e4a88 (39:4a88)
- ld hl, wJumpTableIndex
+ ld hl, wJumptableIndex
inc [hl]
ret
@@ -257,7 +257,7 @@ GFPresents_PlacePresents: ; e4af4 (39:4af4)
GFPresents_SetDoneFlag: ; e4b0d (39:4b0d)
; Tell GFPresents_PlayFrame and TitleScreenFrame (01:63da) that we're finished.
- ld hl, wJumpTableIndex
+ ld hl, wJumptableIndex
set 7, [hl]
ret
diff --git a/engine/overworld/init_map.asm b/engine/overworld/init_map.asm
index f066ae4a..39873677 100644
--- a/engine/overworld/init_map.asm
+++ b/engine/overworld/init_map.asm
@@ -87,5 +87,5 @@ LoadFonts_NoOAMUpdate:: ; 65cb (1:65cb)
ld a, $90
ldh [hWY], a
call SafeUpdateSprites
- call Functiond9e
+ call LoadStandardFont
ret
diff --git a/engine/pokemon/mail_2.asm b/engine/pokemon/mail_2.asm
new file mode 100644
index 00000000..8e808948
--- /dev/null
+++ b/engine/pokemon/mail_2.asm
@@ -0,0 +1,901 @@
+ReadPartyMonMail:
+ ld a, [wCurPartyMon]
+ ld hl, sPartyMail
+ ld bc, MAIL_STRUCT_LENGTH
+ call AddNTimes
+ ld d, h
+ ld e, l
+ReadAnyMail:
+ push de
+ call ClearBGPalettes
+ call ClearSprites
+ call ClearTilemap
+ call DisableLCD
+ call LoadFontsExtra
+ pop de
+ call .LoadGFX
+ call EnableLCD
+ call WaitBGMap
+ ld a, [wBuffer3]
+ ld e, a
+ farcall LoadMailPalettes
+ call SetPalettes
+ xor a
+ ldh [hJoyPressed], a
+ call .loop
+ call ClearBGPalettes
+ call DisableLCD
+ call LoadStandardFont
+ jp EnableLCD
+
+.loop
+ call GetJoypad
+ ldh a, [hJoyPressed]
+ and A_BUTTON | B_BUTTON | START
+ jr z, .loop
+ and START
+ jr nz, .pressed_start
+ ret
+
+.pressed_start
+ ld a, [wJumptableIndex]
+ push af
+ callfar PrintMailAndExit ; printer
+ pop af
+ ld [wJumptableIndex], a
+ jr .loop
+
+.LoadGFX:
+ ld h, d
+ ld l, e
+ push hl
+ ld a, BANK(sPartyMail)
+ call OpenSRAM
+ ld de, sPartyMon1MailAuthorID - sPartyMon1Mail
+ add hl, de
+ ld a, [hli]
+ ld [wBuffer1], a
+ ld a, [hli]
+ ld [wBuffer2], a
+ ld a, [hli]
+ ld [wCurPartySpecies], a
+ ld b, [hl]
+ call CloseSRAM
+ ld hl, MailGFXPointers
+ ld c, 0
+.loop2
+ ld a, [hli]
+ cp b
+ jr z, .got_pointer
+ cp -1
+ jr z, .invalid
+ inc c
+ inc hl
+ inc hl
+ jr .loop2
+
+.invalid
+ ld hl, MailGFXPointers
+ inc hl
+
+.got_pointer
+ ld a, c
+ ld [wBuffer3], a
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld de, .done
+ pop bc
+ push de
+ jp hl
+.done
+ ret
+
+MailGFXPointers:
+ dbw FLOWER_MAIL, LoadFlowerMailGFX
+ dbw SURF_MAIL, LoadSurfMailGFX
+ dbw LITEBLUEMAIL, LoadLiteBlueMailGFX
+ dbw PORTRAITMAIL, LoadPortraitMailGFX
+ dbw LOVELY_MAIL, LoadLovelyMailGFX
+ dbw EON_MAIL, LoadEonMailGFX
+ dbw MORPH_MAIL, LoadMorphMailGFX
+ dbw BLUESKY_MAIL, LoadBlueSkyMailGFX
+ dbw MUSIC_MAIL, LoadMusicMailGFX
+ dbw MIRAGE_MAIL, LoadMirageMailGFX
+ db -1
+
+LoadSurfMailGFX:
+ push bc
+ ld hl, vTiles2 tile $31
+ ld de, SurfMailBorderGFX
+ ld c, 8 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+ ld de, MailLaprasGFX
+ ld c, 6 * LEN_1BPP_TILE
+ call LoadMailGFX_Color3
+ ld de, SurfMailWaveGFX
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+ jr FinishLoadingSurfLiteBlueMailGFX
+
+LoadLiteBlueMailGFX:
+ push bc
+ ld hl, vTiles2 tile $31
+ ld de, LiteBlueMailBorderGFX
+ ld c, 8 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+ ld de, MailDratiniGFX
+ ld c, 6 * LEN_1BPP_TILE
+ call LoadMailGFX_Color3
+ ld de, PortraitMailUnderlineGFX
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+
+FinishLoadingSurfLiteBlueMailGFX:
+ ld de, SurfLiteBlueMailSmallShapesGFX
+ ld c, 2 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+ ld c, 2 * LEN_1BPP_TILE
+ call LoadMailGFX_Color1
+ ld de, SurfLiteBlueMailLargeShapesGFX
+ ld c, 8 * LEN_1BPP_TILE
+ call LoadMailGFX_Color1
+ ld c, 8 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+
+ call DrawMailBorder
+ hlcoord 2, 15
+ ld a, $3f
+ call Mail_Draw16TileRow
+ ld a, $39
+ hlcoord 15, 14
+ call Mail_Draw3x2Graphic
+ ld a, $44
+ hlcoord 2, 2
+ call Mail_Draw2x2Graphic
+ hlcoord 15, 11
+ call Mail_Draw2x2Graphic
+ ld a, $4c
+ hlcoord 3, 12
+ call Mail_Draw2x2Graphic
+ hlcoord 15, 2
+ call Mail_Draw2x2Graphic
+ ld a, $50
+ hlcoord 6, 3
+ call Mail_Draw2x2Graphic
+ ld a, $40
+ hlcoord 13, 2
+ ld [hli], a
+ hlcoord 6, 14
+ ld [hl], a
+ ld a, $41
+ hlcoord 4, 5
+ ld [hli], a
+ hlcoord 17, 5
+ ld [hli], a
+ hlcoord 13, 12
+ ld [hl], a
+ ld a, $42
+ hlcoord 9, 2
+ ld [hli], a
+ hlcoord 14, 5
+ ld [hli], a
+ hlcoord 3, 10
+ ld [hl], a
+ ld a, $43
+ hlcoord 6, 11
+ ld [hli], a
+ pop hl
+ jp MailGFX_PlaceMessage
+
+LoadEonMailGFX:
+ push bc
+ ld hl, vTiles2 tile $31
+ ld de, EonMailBorder1GFX
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+ ld de, EonMailBorder2GFX
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color1
+ ld de, EonMailBorder2GFX
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color1
+ ld de, EonMailBorder1GFX
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+ ld de, SurfMailBorderGFX + 6 * LEN_1BPP_TILE
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+ ld de, MailEeveeGFX
+ ld c, 6 * LEN_1BPP_TILE
+ call LoadMailGFX_Color3
+ ld hl, vTiles2 tile $3d
+ ld de, MailLargeCircleGFX
+ ld c, 4 * LEN_1BPP_TILE
+ call LoadMailGFX_Color1
+ ld de, EonMailBorder2GFX
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+
+ ld a, $31
+ hlcoord 0, 0
+ call Mail_Place18TileAlternatingRow
+ hlcoord 1, 17
+ call Mail_Place18TileAlternatingRow
+ ld a, $33
+ hlcoord 0, 1
+ call Mail_Place16TileAlternatingColumn
+ hlcoord 19, 0
+ call Mail_Place16TileAlternatingColumn
+ hlcoord 2, 15
+ ld a, $35
+ call Mail_Draw16TileRow
+ inc a
+ hlcoord 15, 14
+ call Mail_Draw3x2Graphic
+ call LovelyEonMail_PlaceIcons
+ pop hl
+ jp MailGFX_PlaceMessage
+
+LoadLovelyMailGFX:
+ push bc
+ ld hl, vTiles2 tile $31
+ ld de, LovelyMailBorderGFX
+ ld c, 5 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+ ld de, MailPoliwagGFX
+ ld c, 6 * LEN_1BPP_TILE
+ call LoadMailGFX_Color3
+ ld de, LovelyMailUnderlineGFX
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+ ld de, LovelyMailLargeHeartGFX
+ ld c, 4 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+ ld de, LovelyMailSmallHeartGFX
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color1
+
+ call DrawMailBorder2
+ hlcoord 2, 15
+ ld a, $3c
+ call Mail_Draw16TileRow
+ ld a, $36
+ hlcoord 15, 14
+ call Mail_Draw3x2Graphic
+ call LovelyEonMail_PlaceIcons
+ pop hl
+ jp MailGFX_PlaceMessage
+
+LovelyEonMail_PlaceIcons:
+ ld a, $3d
+ hlcoord 2, 2
+ call Mail_Draw2x2Graphic
+ hlcoord 16, 2
+ call Mail_Draw2x2Graphic
+ hlcoord 9, 4
+ call Mail_Draw2x2Graphic
+ hlcoord 2, 11
+ call Mail_Draw2x2Graphic
+ hlcoord 6, 12
+ call Mail_Draw2x2Graphic
+ hlcoord 12, 11
+ call Mail_Draw2x2Graphic
+ ld a, $41
+ hlcoord 5, 4
+ ld [hl], a
+ hlcoord 6, 2
+ ld [hl], a
+ hlcoord 12, 4
+ ld [hl], a
+ hlcoord 14, 2
+ ld [hl], a
+ hlcoord 3, 13
+ ld [hl], a
+ hlcoord 9, 11
+ ld [hl], a
+ hlcoord 16, 12
+ ld [hl], a
+ ret
+
+LoadMorphMailGFX:
+ push bc
+ ld hl, vTiles2 tile $31
+ ld bc, 5 * LEN_1BPP_TILE
+ call MailGFX_GenerateMonochromeTilesColor2
+ ld de, MorphMailBorderCornerGFX + 3 * LEN_1BPP_TILE
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+ ld de, MorphMailBorderCornerGFX
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+ ld de, MorphMailBorderGFX
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+ ld de, EonMailBorder1GFX
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color1
+ ld de, MorphMailDividerGFX
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+ ld de, MailDittoGFX
+ ld c, 6 * LEN_1BPP_TILE
+ call LoadMailGFX_Color3
+ call DrawMailBorder2
+ ld a, $31
+ hlcoord 1, 1
+ call Mail_Draw2x2Graphic
+ hlcoord 17, 15
+ call Mail_Draw2x2Graphic
+ hlcoord 1, 3
+ ld [hl], a
+ hlcoord 3, 1
+ ld [hl], a
+ hlcoord 16, 16
+ ld [hl], a
+ hlcoord 18, 14
+ ld [hl], a
+ ld a, $36
+ hlcoord 1, 4
+ ld [hl], a
+ hlcoord 2, 3
+ ld [hl], a
+ hlcoord 3, 2
+ ld [hl], a
+ hlcoord 4, 1
+ ld [hl], a
+ inc a
+ hlcoord 15, 16
+ ld [hl], a
+ hlcoord 16, 15
+ ld [hl], a
+ hlcoord 17, 14
+ ld [hl], a
+ hlcoord 18, 13
+ ld [hl], a
+ inc a
+ hlcoord 2, 15
+ ld b, $e
+ call Mail_DrawRowLoop
+ inc a
+ hlcoord 2, 11
+ call Mail_Draw16TileRow
+ hlcoord 2, 5
+ call Mail_Draw16TileRow
+ inc a
+ hlcoord 6, 1
+ call Mail_Draw13TileRow
+ hlcoord 1, 16
+ call Mail_Draw13TileRow
+ inc a
+ hlcoord 3, 13
+ call Mail_Draw3x2Graphic
+ pop hl
+ jp MailGFX_PlaceMessage
+
+LoadBlueSkyMailGFX:
+ push bc
+ ld hl, vTiles2 tile $31
+ ld de, EonMailBorder1GFX
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+ ld a, $ff
+ ld bc, 1 tiles
+ call ByteFill
+ ld de, BlueSkyMailGrassGFX
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color3
+ ld de, MailDragoniteGFX
+ ld c, 23 * LEN_1BPP_TILE
+ call LoadMailGFX_Color3
+ ld de, MailCloudGFX
+ ld c, 6 * LEN_1BPP_TILE
+ call LoadMailGFX_Color1
+ ld de, FlowerMailBorderGFX + 6 * LEN_1BPP_TILE
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color1
+ ld de, MailCloudGFX
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color1
+ ld de, MailCloudGFX + 2 * LEN_1BPP_TILE
+ ld c, 2 * LEN_1BPP_TILE
+ call LoadMailGFX_Color1
+ ld de, MailCloudGFX + 5 * LEN_1BPP_TILE
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color1
+
+ ld a, $31
+ hlcoord 0, 0
+ call Mail_DrawFullWidthBorder
+ hlcoord 0, 1
+ call Mail_DrawLeftRightBorder
+ hlcoord 19, 1
+ call Mail_DrawLeftRightBorder
+ inc a
+ hlcoord 0, 17
+ call Mail_DrawFullWidthBorder
+ inc a
+ hlcoord 0, 16
+ call Mail_DrawFullWidthBorder
+ inc a
+ hlcoord 2, 2
+ call Mail_Place6TileRow
+ hlcoord 3, 3
+ call Mail_Place6TileRow
+ hlcoord 4, 4
+ call Mail_Place6TileRow
+ dec hl
+ ld [hl], $7f
+ dec a
+ hlcoord 15, 14
+ call Mail_Draw2x2Graphic
+ add $4
+ hlcoord 15, 16
+ ld [hli], a
+ inc a
+ ld [hl], a
+ inc a
+ push af
+ hlcoord 12, 1
+ call Mail_Draw3x2Graphic
+ pop af
+ hlcoord 15, 4
+ call Mail_Draw3x2Graphic
+ inc a
+ hlcoord 2, 11
+ call Mail_Draw16TileRow
+ inc a
+ hlcoord 10, 3
+ call Mail_Draw2x2Graphic
+ pop hl
+ jp MailGFX_PlaceMessage
+
+Mail_Place6TileRow:
+ ld b, $6
+.loop
+ ld [hli], a
+ inc a
+ dec b
+ jr nz, .loop
+ ret
+
+LoadFlowerMailGFX:
+ push bc
+ ld hl, vTiles2 tile $31
+ ld de, FlowerMailBorderGFX
+ ld c, 8 * LEN_1BPP_TILE
+ call LoadMailGFX_Color1
+ ld de, MailOddishGFX
+ ld c, 4 * LEN_1BPP_TILE
+ call LoadMailGFX_Color3
+ ld de, FlowerMailBorderGFX + 6 * LEN_1BPP_TILE
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+ ld de, FlowerMailFlowerGFX
+ ld c, 4 * LEN_1BPP_TILE
+ call LoadMailGFX_Color1
+ ld c, 4 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+
+ call DrawMailBorder
+ hlcoord 2, 15
+ ld a, $3d ; underline
+ call Mail_Draw16TileRow
+ ld a, $39 ; oddish
+ hlcoord 16, 13
+ call Mail_Draw2x2Graphic
+ hlcoord 2, 13
+ call Mail_Draw2x2Graphic
+ ld a, $3e
+ hlcoord 2, 2
+ call Mail_Draw2x2Graphic
+ hlcoord 5, 3
+ call Mail_Draw2x2Graphic
+ hlcoord 10, 2
+ call Mail_Draw2x2Graphic
+ hlcoord 16, 3
+ call Mail_Draw2x2Graphic
+ hlcoord 5, 11
+ call Mail_Draw2x2Graphic
+ hlcoord 16, 10
+ call Mail_Draw2x2Graphic
+ ld a, $42
+ hlcoord 3, 4
+ call Mail_Draw2x2Graphic
+ hlcoord 12, 3
+ call Mail_Draw2x2Graphic
+ hlcoord 14, 2
+ call Mail_Draw2x2Graphic
+ hlcoord 2, 10
+ call Mail_Draw2x2Graphic
+ hlcoord 14, 11
+ call Mail_Draw2x2Graphic
+ pop hl
+ jp MailGFX_PlaceMessage
+
+LoadPortraitMailGFX:
+ push bc
+ ld hl, vTiles2 tile $31
+ ld de, PortraitMailBorderGFX
+ ld c, 5 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+ ld de, PortraitMailUnderlineGFX
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+ ld hl, vTiles2 tile $3d
+ ld de, PortraitMailLargePokeballGFX
+ ld c, 4 * LEN_1BPP_TILE
+ call LoadMailGFX_Color1
+ ld de, PortraitMailSmallPokeballGFX
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+
+ call DrawMailBorder2
+ hlcoord 8, 15
+ ld a, $36
+ ld b, $a
+ call Mail_DrawRowLoop
+ call LovelyEonMail_PlaceIcons
+ ld a, $1
+ ld [wUnownLetter], a
+ hlcoord 1, 10
+ call PrepMonFrontpic
+ pop hl
+ jp MailGFX_PlaceMessage
+
+LoadMusicMailGFX:
+ push bc
+ ld hl, vTiles2 tile $31
+ ld de, MusicMailBorderGFX
+ ld c, 4 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+ ld de, MorphMailBorderGFX
+ ld c, 2 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+ ld de, MailNatuGFX
+ ld c, 6 * LEN_1BPP_TILE
+ call LoadMailGFX_Color3
+ xor a
+ ld bc, 1 tiles
+ call ByteFill
+ ld de, MusicMailLargeNoteGFX
+ ld c, 3 * LEN_1BPP_TILE
+ call LoadMailGFX_Color1
+ ld de, MusicMailSmallNoteGFX
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color1
+
+ ld a, $31
+ hlcoord 0, 0
+ call Mail_Place18TileAlternatingRow
+ hlcoord 1, 17
+ call Mail_Place18TileAlternatingRow
+ ld a, $33
+ hlcoord 0, 1
+ call Mail_Place16TileAlternatingColumn
+ hlcoord 19, 0
+ call Mail_Place16TileAlternatingColumn
+ ld a, $35
+ hlcoord 2, 15
+ call Mail_Place14TileAlternatingRow
+ ld a, $37
+ hlcoord 15, 14
+ call Mail_Draw3x2Graphic
+ call LovelyEonMail_PlaceIcons
+ pop hl
+ jp MailGFX_PlaceMessage
+
+LoadMirageMailGFX:
+ push bc
+ ld hl, vTiles2 tile $31
+ ld bc, 5 * LEN_1BPP_TILE
+ call MailGFX_GenerateMonochromeTilesColor2
+ ld de, BlueSkyMailGrassGFX
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+ ld de, MailMewGFX
+ ld c, 18 * LEN_1BPP_TILE
+ call LoadMailGFX_Color2
+ ld de, LiteBlueMailBorderGFX + 1 * LEN_1BPP_TILE
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color1
+ ld de, LiteBlueMailBorderGFX + 6 * LEN_1BPP_TILE
+ ld c, 1 * LEN_1BPP_TILE
+ call LoadMailGFX_Color1
+
+ call DrawMailBorder2
+ ld a, $36
+ hlcoord 1, 16
+ call Mail_DrawTopBottomBorder
+ inc a
+ hlcoord 15, 14
+ call Mail_Draw3x2Graphic
+ inc a
+ hlcoord 15, 16
+ ld [hli], a
+ inc a
+ ld [hl], a
+ ld a, $3f
+ hlcoord 1, 1
+ call Mail_Place18TileAlternatingRow
+ ld a, $41
+ hlcoord 0, 2
+ call Mail_Place14TileAlternatingColumn
+ ld a, $43
+ hlcoord 19, 2
+ call Mail_Place14TileAlternatingColumn
+ ld a, $45
+ hlcoord 0, 1
+ ld [hl], a
+ inc a
+ hlcoord 19, 1
+ ld [hl], a
+ inc a
+ hlcoord 0, 16
+ ld [hl], a
+ inc a
+ hlcoord 19, 16
+ ld [hl], a
+ inc a
+ hlcoord 2, 5
+ call Mail_Draw16TileRow
+ inc a
+ hlcoord 2, 11
+ call Mail_Draw16TileRow
+ pop hl
+ jp MailGFX_PlaceMessage
+
+MailGFX_GenerateMonochromeTilesColor2:
+.loop
+ xor a
+ ld [hli], a
+ ld a, $ff
+ ld [hli], a
+ dec bc
+ ld a, b
+ or c
+ jr nz, .loop
+ ret
+
+MailGFX_PlaceMessage:
+ ld bc, MAIL_STRUCT_LENGTH
+ ld de, wTempMail
+ ld a, BANK(sPartyMail)
+ call OpenSRAM
+ call CopyBytes
+ call CloseSRAM
+ ld hl, wTempMailAuthor
+ ld de, wMonOrItemNameBuffer
+ ld bc, NAME_LENGTH - 1
+ call CopyBytes
+ ld a, "@"
+ ld [wTempMailAuthor], a
+ ld [wMonOrItemNameBuffer + NAME_LENGTH - 1], a
+ ld de, wTempMailMessage
+ hlcoord 2, 7
+ call PlaceString
+ ld de, wMonOrItemNameBuffer
+ ld a, [de]
+ and a
+ ret z
+ ld a, [wBuffer3]
+ hlcoord 8, 14
+ cp $3 ; PORTRAITMAIL
+ jr z, .place_author
+ hlcoord 6, 14
+ cp $6 ; MORPH_MAIL
+ jr z, .place_author
+ hlcoord 5, 14
+
+.place_author
+ jp PlaceString
+
+Unreferenced_Functionb984e:
+.loop
+ ld a, [hl]
+ xor $ff
+ ld [hli], a
+ dec bc
+ ld a, b
+ or c
+ jr nz, .loop
+ ret
+
+DrawMailBorder:
+ hlcoord 0, 0
+ ld a, $31
+ ld [hli], a
+ inc a
+ call Mail_DrawTopBottomBorder
+ inc a
+ ld [hli], a
+ inc a
+ call Mail_DrawLeftRightBorder
+ ld a, $36
+ ld [hli], a
+ inc a
+ call Mail_DrawTopBottomBorder
+ hlcoord 19, 1
+ ld a, $35
+ call Mail_DrawLeftRightBorder
+ ld a, $38
+ ld [hl], a
+ ret
+
+DrawMailBorder2:
+ hlcoord 0, 0
+ ld a, $31
+ ld [hli], a
+ inc a
+ call Mail_DrawTopBottomBorder
+ ld [hl], $31
+ inc hl
+ inc a
+ call Mail_DrawLeftRightBorder
+ ld [hl], $31
+ inc hl
+ inc a
+ call Mail_DrawTopBottomBorder
+ hlcoord 19, 1
+ ld a, $35
+ call Mail_DrawLeftRightBorder
+ ld [hl], $31
+ ret
+
+Mail_Place14TileAlternatingRow:
+ push af
+ ld b, 14 / 2
+ jr Mail_PlaceAlternatingRow
+
+Mail_Place16TileAlternatingRow:
+ push af
+ ld b, 16 / 2
+ jr Mail_PlaceAlternatingRow
+
+Mail_Place18TileAlternatingRow:
+ push af
+ ld b, 18 / 2
+
+Mail_PlaceAlternatingRow:
+.loop
+ ld [hli], a
+ inc a
+ ld [hli], a
+ dec a
+ dec b
+ jr nz, .loop
+ ld [hl], a
+ pop af
+ ret
+
+Mail_Place14TileAlternatingColumn:
+ push af
+ ld b, 14 / 2
+ jr Mail_PlaceAlternatingColumn
+
+Mail_Place16TileAlternatingColumn:
+ push af
+ ld b, 16 / 2
+
+Mail_PlaceAlternatingColumn:
+.loop
+ ld [hl], a
+ ld de, SCREEN_WIDTH
+ add hl, de
+ inc a
+ ld [hl], a
+ add hl, de
+ dec a
+ dec b
+ jr nz, .loop
+ ld [hl], a
+ pop af
+ ret
+
+Mail_Draw7TileRow:
+ ld b, $7
+ jr Mail_DrawRowLoop
+
+Mail_Draw13TileRow:
+ ld b, $d
+ jr Mail_DrawRowLoop
+
+Mail_Draw16TileRow:
+ ld b, $10
+ jr Mail_DrawRowLoop
+
+Mail_DrawTopBottomBorder:
+ ld b, SCREEN_WIDTH - 2
+ jr Mail_DrawRowLoop
+
+Mail_DrawFullWidthBorder:
+ ld b, SCREEN_WIDTH
+
+Mail_DrawRowLoop:
+.loop
+ ld [hli], a
+ dec b
+ jr nz, .loop
+ ret
+
+Mail_DrawLeftRightBorder:
+ ld b, SCREEN_HEIGHT - 2
+ ld de, SCREEN_WIDTH
+.loop
+ ld [hl], a
+ add hl, de
+ dec b
+ jr nz, .loop
+ ret
+
+Mail_Draw2x2Graphic:
+ push af
+ ld [hli], a
+ inc a
+ ld [hl], a
+ ld bc, SCREEN_WIDTH - 1
+ add hl, bc
+ inc a
+ ld [hli], a
+ inc a
+ ld [hl], a
+ pop af
+ ret
+
+Mail_Draw3x2Graphic:
+ ld [hli], a
+ inc a
+ ld [hli], a
+ inc a
+ ld [hl], a
+ ld bc, SCREEN_WIDTH - 2
+ add hl, bc
+ inc a
+ ld [hli], a
+ inc a
+ ld [hli], a
+ inc a
+ ld [hl], a
+ ret
+
+LoadMailGFX_Color1:
+.loop
+ ld a, [de]
+ inc de
+ ld [hli], a
+ xor a
+ ld [hli], a
+ dec c
+ jr nz, .loop
+ ret
+
+LoadMailGFX_Color2:
+.loop
+ xor a
+ ld [hli], a
+ ld a, [de]
+ inc de
+ ld [hli], a
+ dec c
+ jr nz, .loop
+ ret
+
+LoadMailGFX_Color3:
+.loop
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld [hli], a
+ dec c
+ jr nz, .loop
+ ret
+
+INCLUDE "gfx/mail.asm"
+
+ItemIsMail:
+ ld a, d
+ ld hl, MailItems
+ ld de, 1
+ jp IsInArray
+
+INCLUDE "data/items/mail_items.asm"