shithub: pokecrystal

Download patch

ref: 24b7b2c1cf4a83967c441f1d23c28760e0dadcc1
parent: 23c70110d03260eac4154552d1666a3d0b4ddac7
author: PikalaxALT <PikalaxALT@gmail.com>
date: Sun Nov 22 07:01:58 EST 2015

Foreign language font handling in mail

--- a/engine/events_2.asm
+++ b/engine/events_2.asm
@@ -275,7 +275,7 @@
 	; if we've already gotten the call, we don't have to
 	; be here.
 	ld hl, StatusFlags2
-	bit 4, [hl]
+	bit 4, [hl] ; bike shop call
 	jr z, .NoCall
 
 	; If we're not on the bike, we don't have to be here.
@@ -326,7 +326,7 @@
 	xor a
 	ld [wSpecialPhoneCallID + 1], a
 	ld hl, StatusFlags2
-	res 4, [hl]
+	res 4, [hl] ; bike shop call
 	scf
 	ret
 
--- a/engine/link.asm
+++ b/engine/link.asm
@@ -363,23 +363,23 @@
 .asm_282cc
 	push bc
 	push de
-	callba Function1de5c8
+	callba IsMailEuropean
 	ld a, c
 	or a
-	jr z, .asm_282ee
+	jr z, .next
 	sub $3
-	jr nc, .asm_282e4
-	callba Function1df203
-	jr .asm_282ee
+	jr nc, .skip
+	callba DeutenEnglischenPost
+	jr .next
 
-.asm_282e4
+.skip
 	cp $2
-	jr nc, .asm_282ee
-	callba Function1df220
+	jr nc, .next
+	callba HandleSpanishItalianMail
 
-.asm_282ee
+.next
 	pop de
-	ld hl, $2f
+	ld hl, MAIL_STRUCT_LENGTH
 	add hl, de
 	ld d, h
 	ld e, l
@@ -802,38 +802,51 @@
 ; 28595
 
 Function28595: ; 28595
-	ld de, OverworldMap
-	ld a, $fd
-	ld b, $6
+	ld de, wc800
+	ld a, EGG
+	ld b, PARTY_LENGTH
 .loop1
 	ld [de], a
 	inc de
 	dec b
 	jr nz, .loop1
+	; de = $c806
 	ld hl, PlayerName
 	ld bc, NAME_LENGTH
 	call CopyBytes
+	; de = $c811
 	ld hl, PartyCount
-	ld bc, 8
+	ld bc, 1 + PARTY_LENGTH + 1
 	call CopyBytes
+	; de = $c819
 	ld hl, PlayerID
 	ld bc, 2
 	call CopyBytes
+	; de = $c81b
 	ld hl, PartyMon1Species
-	ld bc, $120
+	ld bc, PARTY_LENGTH * PARTYMON_STRUCT_LENGTH
 	call CopyBytes
+	; de = $c93b
 	ld hl, PartyMonOT
-	ld bc, $42
+	ld bc, PARTY_LENGTH * NAME_LENGTH
 	call CopyBytes
+	; de = $c97d
 	ld hl, PartyMonNicknames
-	ld bc, $42
+	ld bc, PARTY_LENGTH * PKMN_NAME_LENGTH
 	call CopyBytes
+	; de = $c9bf
+
+; Okay, we did all that.  Now, are we in the trade center?
 	ld a, [wLinkMode]
 	cp LINK_TRADECENTER
 	ret nz
+
+; Fill 32 bytes at wc9f4 with $05
 	ld de, wc9f4
 	ld a, $20
 	call Function28682
+
+; Copy all the mail messages to $ca14
 	ld a, BANK(sPartyMail)
 	call GetSRAMBank
 	ld hl, sPartyMail
@@ -840,24 +853,26 @@
 	ld b, PARTY_LENGTH
 .loop2
 	push bc
-	ld bc, $21
+	ld bc, MAIL_MSG_LENGTH + 1
 	call CopyBytes
-	ld bc, $e
+	ld bc, MAIL_STRUCT_LENGTH - MAIL_MSG_LENGTH - 1
 	add hl, bc
 	pop bc
 	dec b
 	jr nz, .loop2
+; Copy the mail metadata to $cada
 	ld hl, sPartyMail
 	ld b, PARTY_LENGTH
 .loop3
 	push bc
-	ld bc, $21
+	ld bc, MAIL_MSG_LENGTH + 1
 	add hl, bc
-	ld bc, $e
+	ld bc, MAIL_STRUCT_LENGTH - MAIL_MSG_LENGTH - 1
 	call CopyBytes
 	pop bc
 	dec b
 	jr nz, .loop3
+
 	ld b, PARTY_LENGTH
 	ld de, sPartyMail
 	ld hl, wc9f9
@@ -866,20 +881,20 @@
 	push hl
 	push de
 	push hl
-	callba Function1de5c8
+	callba IsMailEuropean
 	pop de
 	ld a, c
 	or a
 	jr z, .next
 	sub $3
-	jr nc, .skip
-	callba Function1df1e6
+	jr nc, .italian_spanish
+	callba HandleFrenchGermanMail
 	jr .next
 
-.skip
+.italian_spanish
 	cp $2
 	jr nc, .next
-	callba Function1df220
+	callba HandleSpanishItalianMail
 
 .next
 	pop de
binary files /dev/null b/gfx/font/english.1bpp differ
binary files /dev/null b/gfx/font/french_german.1bpp differ
binary files /dev/null b/gfx/font/spanish_italian.1bpp differ
--- a/gfx/mail.asm
+++ b/gfx/mail.asm
@@ -16,20 +16,20 @@
 	push de
 	ld a, BANK(sPartyMail)
 	call GetSRAMBank
-	callba Function1de5c8
+	callba IsMailEuropean
 	call CloseSRAM
 	ld a, c
-	ld de, GFX_1de5e6
+	ld de, StandardEnglishFont
 	or a
 	jr z, .asm_b9268
-	ld de, GFX_1de9e6
+	ld de, FrenchGermanFont
 	sub $3
 	jr c, .asm_b9268
-	ld de, GFX_1dede6
+	ld de, SpanishItalianFont
 
 .asm_b9268
 	ld hl, VTiles1
-	lb bc, BANK(GFX_1de5e6), $80
+	lb bc, BANK(StandardEnglishFont), $80
 	call Get1bpp
 	pop de
 	call Functionb92b8
binary files a/gfx/unknown/1de5e6.2bpp /dev/null differ
binary files a/gfx/unknown/1de9e6.2bpp /dev/null differ
binary files a/gfx/unknown/1dede6.2bpp /dev/null differ
--- a/main.asm
+++ b/main.asm
@@ -175,7 +175,7 @@
 	ld hl, PartyMonNicknames
 	call GetNick
 	ld hl, StringBuffer1
-	ld de, wd050
+	ld de, wd050_MonNick
 	ld bc, PKMN_NAME_LENGTH
 	call CopyBytes
 
@@ -187,6 +187,10 @@
 	ld d, h
 	ld e, l
 	ld b, NUM_MOVES
+; Get the first empty move slot.  This routine also serves to
+; determine whether the Pokemon learning the moves already has
+; all four slots occupied, in which case one would need to be
+; deleted.
 .next
 	ld a, [hl]
 	and a
@@ -194,7 +198,8 @@
 	inc hl
 	dec b
 	jr nz, .next
-
+; If we're here, we enter the routine for forgetting a move
+; to make room for the new move we're trying to learn.
 	push de
 	call ForgetMove
 	pop de
@@ -217,7 +222,7 @@
 .not_disabled
 
 	call GetMoveName
-	ld hl, UnknownText_0x6684
+	ld hl, UnknownText_0x6684 ; 1, 2 and…
 	call PrintText
 	pop de
 	pop hl
@@ -268,18 +273,18 @@
 	jp .learned
 
 .cancel
-	ld hl, UnknownText_0x6675
+	ld hl, UnknownText_0x6675 ; Stop learning <MOVE>?
 	call PrintText
 	call YesNoBox
 	jp c, .loop
 
-	ld hl, UnknownText_0x667a
+	ld hl, UnknownText_0x667a ; <MON> did not learn <MOVE>.
 	call PrintText
 	ld b, 0
 	ret
 
 .learned
-	ld hl, UnknownText_0x666b
+	ld hl, UnknownText_0x666b ; <MON> learned <MOVE>!
 	call PrintText
 	ld b, 1
 	ret
@@ -311,6 +316,7 @@
 	ld a, SCREEN_WIDTH * 2
 	ld [Buffer1], a
 	predef ListMoves
+	; wMenuData3
 	ld a, $4
 	ld [wcfa1], a
 	ld a, $6
@@ -368,32 +374,38 @@
 ; 666b
 
 UnknownText_0x666b: ; 666b
+; <MON> learned <MOVE>!
 	text_jump UnknownText_0x1c5660
 	db "@"
 ; 6670
 
 UnknownText_0x6670: ; 6670
+; Which move should be forgotten?
 	text_jump UnknownText_0x1c5678
 	db "@"
 ; 6675
 
 UnknownText_0x6675: ; 6675
+; Stop learning <MOVE>?
 	text_jump UnknownText_0x1c5699
 	db "@"
 ; 667a
 
 UnknownText_0x667a: ; 667a
+; <MON> did not learn <MOVE>.
 	text_jump UnknownText_0x1c56af
 	db "@"
 ; 667f
 
 UnknownText_0x667f: ; 667f
+; <MON> is trying to learn <MOVE>. But <MON> can't learn more than
+; four moves. Delete an older move to make room for <MOVE>?
 	text_jump UnknownText_0x1c56c9
 	db "@"
 ; 6684
 
 UnknownText_0x6684: ; 6684
-	text_jump UnknownText_0x1c5740
+	text_jump UnknownText_0x1c5740 ; 1, 2 and…
 	start_asm
 	push de
 	ld de, SFX_SWITCH_POKEMON
@@ -404,11 +416,13 @@
 ; 6695
 
 UnknownText_0x6695: ; 6695
+; Poof! <MON> forgot <MOVE>. And…
 	text_jump UnknownText_0x1c574e
 	db "@"
 ; 669a
 
 UnknownText_0x669a: ; 669a
+; HM moves can't be forgotten now.
 	text_jump UnknownText_0x1c5772
 	db "@"
 ; 669f
@@ -27142,10 +27156,14 @@
 INCBIN "gfx/misc/pokegear.2bpp.lz"
 ; 1de5c8
 
-Function1de5c8: ; 1de5c8
-; reads mail message at de
+IsMailEuropean: ; 1de5c8
+; return 1 if French
+; return 2 if German
+; return 3 if Italian
+; return 4 if Spanish
+; return 0 if none of the above
 	ld c, $0
-	ld hl, $29
+	ld hl, sPartyMon1MailAuthorNationality - sPartyMon1Mail
 	add hl, de
 	ld a, [hli]
 	cp "E"
@@ -27168,82 +27186,97 @@
 ; 1de5e6
 
 ; The regular font.
-GFX_1de5e6: ; 1de5e6
-INCBIN "gfx/unknown/1de5e6.2bpp"
+StandardEnglishFont: ; 1de5e6
+INCBIN "gfx/font/english.1bpp"
 
 ; An extended font.
-GFX_1de9e6: ; 1de9e6
-INCBIN "gfx/unknown/1de9e6.2bpp"
+FrenchGermanFont: ; 1de9e6
+INCBIN "gfx/font/french_german.1bpp"
 
 ; An even more extended font.
-GFX_1dede6: ; 1dede6
-INCBIN "gfx/unknown/1dede6.2bpp"
+SpanishItalianFont: ; 1dede6
+INCBIN "gfx/font/spanish_italian.1bpp"
 
-Function1df1e6: ; 1df1e6
-	ld b, $21
+HandleFrenchGermanMail: ; 1df1e6
+; called if mail is french or german
+; fix 's 't 'v
+	ld b, sPartyMon1MailAuthor - sPartyMon1Mail
 	ld h, d
 	ld l, e
-.asm_1df1ea
+.loop
 	ld a, [hl]
-	cp $dc
-	jr nz, .asm_1df1f3
-	ld a, $d4
-	jr .asm_1df1fd
+	cp $dc ; 's in french/german font
+	jr nz, .check_intermediate_chars
+	ld a, "'s"
+	jr .replace
 
-.asm_1df1f3
-	sub $d4
-	jr c, .asm_1df1fe
-	cp $3
-	jr nc, .asm_1df1fe
+.check_intermediate_chars
+	sub "'s"
+	jr c, .dont_replace
+	cp "'v" - "'s" + 1
+	jr nc, .dont_replace
 	add $cd
 
-.asm_1df1fd
+.replace
 	ld [hl], a
 
-.asm_1df1fe
+.dont_replace
 	inc hl
 	dec b
-	jr nz, .asm_1df1ea
+	jr nz, .loop
 	ret
 ; 1df203
 
-Function1df203: ; 1df203
-	ld b, $21
+LireLeCourrierAnglais:
+DeutenEnglischenPost: ; 1df203
+; Cette fonction convertit certains des caractères anglais pour
+; leur équivalent dans le jeu de caractères français.
+; Diese Funktion wandelt bestimmte englische Zeichen, um ihre
+; Entsprechung in der Deutschen-Zeichensatz.
+	ld b, sPartyMon1MailAuthor - sPartyMon1Mail
 	ld h, d
 	ld l, e
-.asm_1df207
+.loop
 	ld a, [hl]
-	cp $d4
-	jr nz, .asm_1df210
+	cp "'s"
+	jr nz, .check_intermediate_chars
 	ld a, $dc
-	jr .asm_1df21a
+	jr .replace
 
-.asm_1df210
+.check_intermediate_chars
 	sub $cd
-	jr c, .asm_1df21b
-	cp $3
-	jr nc, .asm_1df21b
-	add $d4
+	jr c, .dont_replace
+	cp "'v" - "'s" + 1
+	jr nc, .dont_replace
+	add "'s"
 
-.asm_1df21a
+.replace
 	ld [hl], a
 
-.asm_1df21b
+.dont_replace
 	inc hl
 	dec b
-	jr nz, .asm_1df207
+	jr nz, .loop
 	ret
 ; 1df220
 
-Function1df220: ; 1df220
-	ld b, $21
+HandleSpanishItalianMail: ; 1df220
+LeerCorreosIngleses:
+LeggiPostaInglese:
+; This function converts certain characters between
+; the English and Spanish/Italian character sets.
+; Esta función convierte ciertos caracteres entre
+; el juego de caracteres Inglés y Español.
+; Questa funzione converte alcuni caratteri tra
+; l'inglese e il set di caratteri italiani.
+	ld b, sPartyMon1MailAuthor - sPartyMon1Mail
 	ld h, d
 	ld l, e
-.asm_1df224
+.loop
 	ld a, [hl]
 	and $f0
 	cp $d0
-	jr nz, .asm_1df233
+	jr nz, .dont_replace
 	ld a, [hl]
 	add $8
 	and $f
@@ -27250,10 +27283,10 @@
 	or $d0
 	ld [hl], a
 
-.asm_1df233
+.dont_replace
 	inc hl
 	dec b
-	jr nz, .asm_1df224
+	jr nz, .loop
 	ret
 ; 1df238
 
@@ -27342,5 +27375,3 @@
 ELSE
 INCBIN "misc/stadium2_1.bin"
 ENDC
-
-
--- a/text/common_4.asm
+++ b/text/common_4.asm
@@ -1045,7 +1045,7 @@
 ; 0x1c5660
 
 UnknownText_0x1c5660: ; 0x1c5660
-	text_from_ram wd050
+	text_from_ram wd050_MonNick
 	text " learned"
 	line "@"
 	text_from_ram StringBuffer2
@@ -1074,7 +1074,7 @@
 ; 0x1c56af
 
 UnknownText_0x1c56af: ; 0x1c56af
-	text_from_ram wd050
+	text_from_ram wd050_MonNick
 	text ""
 	line "did not learn"
 	cont "@"
@@ -1084,7 +1084,7 @@
 ; 0x1c56c9
 
 UnknownText_0x1c56c9: ; 0x1c56c9
-	text_from_ram wd050
+	text_from_ram wd050_MonNick
 	text " is"
 	line "trying to learn"
 	cont "@"
@@ -1092,7 +1092,7 @@
 	text "."
 
 	para "But @"
-	text_from_ram wd050
+	text_from_ram wd050_MonNick
 	text ""
 	line "can't learn more"
 	cont "than four moves."
@@ -1120,7 +1120,7 @@
 	interpret_data
 	text ""
 	para "@"
-	text_from_ram wd050
+	text_from_ram wd050_MonNick
 	text " forgot"
 	line "@"
 	text_from_ram StringBuffer1
--- a/wram.asm
+++ b/wram.asm
@@ -148,7 +148,8 @@
 mailmsg: MACRO
 \1Message:: ds MAIL_MSG_LENGTH
 \1MessageEnd:: ds 1
-\1Author:: ds NAME_LENGTH +- 1
+\1Author:: ds PLAYER_NAME_LENGTH
+\1AuthorNationality:: ds 2
 \1AuthorID:: ds 2
 \1Species:: ds 1
 \1MailType:: ds 1