diff --git a/NHSE.Core/NHSE.Core.csproj b/NHSE.Core/NHSE.Core.csproj
index 758ad54..43e7126 100644
--- a/NHSE.Core/NHSE.Core.csproj
+++ b/NHSE.Core/NHSE.Core.csproj
@@ -12,6 +12,7 @@
+
@@ -21,6 +22,7 @@
+
@@ -30,6 +32,7 @@
+
@@ -39,6 +42,7 @@
+
@@ -48,6 +52,7 @@
+
@@ -57,6 +62,7 @@
+
@@ -66,6 +72,7 @@
+
@@ -75,6 +82,7 @@
+
@@ -84,6 +92,7 @@
+
@@ -100,6 +109,7 @@
+
@@ -109,6 +119,7 @@
+
@@ -118,6 +129,7 @@
+
@@ -127,6 +139,7 @@
+
@@ -136,6 +149,7 @@
+
@@ -145,6 +159,7 @@
+
@@ -154,6 +169,7 @@
+
@@ -163,6 +179,7 @@
+
@@ -172,6 +189,7 @@
+
diff --git a/NHSE.Core/Resources/text/de/text_mail_de.txt b/NHSE.Core/Resources/text/de/text_mail_de.txt
new file mode 100644
index 0000000..6c1667c
--- /dev/null
+++ b/NHSE.Core/Resources/text/de/text_mail_de.txt
@@ -0,0 +1,101 @@
+mail00 Airmail card
+mail01 Star card
+mail02 Turkey Day card
+mail03 Torn card
+mail04 Zen card
+mail05 Decorative card
+mail06 Graduation card
+mail07 Stationery-goods card
+mail08 Bandage card
+mail09 Chocolate card
+mail10 Graffiti card
+mail11 Fluffy-clouds card
+mail12 Snowflake card
+mail13 Common card
+mail14 Winter-camellia card
+mail15 Lovely hearts card
+mail16 Gears card
+mail17 Full-bloom card
+mail18 Snowperson card
+mail19 Carpet-of-leaves card
+mail20 Father's Day card
+mail21 Holiday card
+mail22 Fanciful card
+mail23 Cherry-blossoms card
+mail24 Shapes card
+mail25 Mother's Day card
+mail26 Camo card
+mail27 Warm-sweater card
+mail28 Gem card
+mail29 Red-dragonflies card
+mail30 Mushroom card
+mail31 Card from Happy Home Academy
+mail32 Baby-goods card
+mail33 Birthday-cake card
+mail34 Ribbon card
+mail35 Balloons card
+mail36 Festive-tree card
+mail37 Cool-cool card
+mail38 Fantasy-stars card
+mail39 Bunny Day card
+mail40 Elegant-roses card
+mail41 Happy-clovers card
+mail42 Pumpkin card
+mail43 Halloween card
+mail44 Fireworks card
+mail45 Dawning-year card
+mail46 So-many-hearts card
+mail47 Blue-sky card
+mail48 Dandelion card
+mail49 Shooting-stars card
+mail50 Goldfish card
+mail51 Hibiscus card
+mail52 Flower-bouquet card
+mail53 Card from K.K.
+mail54 Chocolate-heart card
+mail55 Wedding card
+mail56 Town-view card
+mail57 Velvety card
+mail58 Card from C.J.
+mail59 Card from Flick
+mail60 Card from Bank of Nook
+mail61 Card from Nook Mileage Program
+mail62 Card from Your pals at Dodo Airlines
+mail63 Beach card
+mail64 Acorn card
+mail65 Gift card
+mail66 Card from Jolly Redd's
+mail67 MsgWherearenOffice00
+mail68 Glowing-moss card
+mail69 Flight-ticket card
+mail70 Plumeria card
+mail71 Sunset card
+mail72 Tropical card
+mail73 Paradise Planning card
+mail74 Unused_MsgMametsubu00m001
+box00 None
+box01 Nook Shopping Box
+box02 Hotel Box
+box03 Paradise Planning Box
+wrap00 None
+wrap01 Present
+wrap02 Wrapping Paper Yellow
+wrap03 Wrapping Paper Pink
+wrap04 Wrapping Paper Orange
+wrap05 Wrapping Paper Chartreuse
+wrap06 Wrapping Paper Green
+wrap07 Wrapping Paper Mint
+wrap08 Wrapping Paper LightBlue
+wrap09 Wrapping Paper Purple
+wrap10 Wrapping Paper Navy
+wrap11 Wrapping Paper Blue
+wrap12 Wrapping Paper White
+wrap13 Wrapping Paper Red
+wrap14 Wrapping Paper Gold
+wrap15 Wrapping Paper Brown
+wrap16 Wrapping Paper Gray
+wrap17 Wrapping Paper Black
+wrap18 Wrapping Paper Festive
+wrap19 Lucky Red Envelope
+wrap20 Bokjumeoni Pouch
+wrap21 Otoshidama Envelope
\ No newline at end of file
diff --git a/NHSE.Core/Resources/text/de/text_villager_de.txt b/NHSE.Core/Resources/text/de/text_villager_de.txt
index 1381b61..8fcdc25 100644
--- a/NHSE.Core/Resources/text/de/text_villager_de.txt
+++ b/NHSE.Core/Resources/text/de/text_villager_de.txt
@@ -1,4 +1,4 @@
-ant00 Theo
+ant00 Theo
ant01 Siggi
ant02 Mathilda
ant03 Annabell
@@ -489,3 +489,16 @@ tuk Gernod
upa Samselt
wrl Winci
xct Olli
+npc_nookinc Nook Inc.
+npc_hotel Hotel
+npc_hha Happy Home Academy
+npc_nintendo Nintendo
+npc_bankofnook Bank of Nook
+npc_nookshopping Nook Shopping
+npc_nookmileageprogram Nook Mileage Program
+npc_mom Mom
+npc_dodoairlines Dodo Airlines
+npc_thefarwaymuseum The Farway Museum
+npc_paradiseplanning Paradise Planning
+npc_snowboy Snowboy
+npc_nooklinkadmins NookLink Admins
diff --git a/NHSE.Core/Resources/text/en/text_mail_en.txt b/NHSE.Core/Resources/text/en/text_mail_en.txt
new file mode 100644
index 0000000..6c1667c
--- /dev/null
+++ b/NHSE.Core/Resources/text/en/text_mail_en.txt
@@ -0,0 +1,101 @@
+mail00 Airmail card
+mail01 Star card
+mail02 Turkey Day card
+mail03 Torn card
+mail04 Zen card
+mail05 Decorative card
+mail06 Graduation card
+mail07 Stationery-goods card
+mail08 Bandage card
+mail09 Chocolate card
+mail10 Graffiti card
+mail11 Fluffy-clouds card
+mail12 Snowflake card
+mail13 Common card
+mail14 Winter-camellia card
+mail15 Lovely hearts card
+mail16 Gears card
+mail17 Full-bloom card
+mail18 Snowperson card
+mail19 Carpet-of-leaves card
+mail20 Father's Day card
+mail21 Holiday card
+mail22 Fanciful card
+mail23 Cherry-blossoms card
+mail24 Shapes card
+mail25 Mother's Day card
+mail26 Camo card
+mail27 Warm-sweater card
+mail28 Gem card
+mail29 Red-dragonflies card
+mail30 Mushroom card
+mail31 Card from Happy Home Academy
+mail32 Baby-goods card
+mail33 Birthday-cake card
+mail34 Ribbon card
+mail35 Balloons card
+mail36 Festive-tree card
+mail37 Cool-cool card
+mail38 Fantasy-stars card
+mail39 Bunny Day card
+mail40 Elegant-roses card
+mail41 Happy-clovers card
+mail42 Pumpkin card
+mail43 Halloween card
+mail44 Fireworks card
+mail45 Dawning-year card
+mail46 So-many-hearts card
+mail47 Blue-sky card
+mail48 Dandelion card
+mail49 Shooting-stars card
+mail50 Goldfish card
+mail51 Hibiscus card
+mail52 Flower-bouquet card
+mail53 Card from K.K.
+mail54 Chocolate-heart card
+mail55 Wedding card
+mail56 Town-view card
+mail57 Velvety card
+mail58 Card from C.J.
+mail59 Card from Flick
+mail60 Card from Bank of Nook
+mail61 Card from Nook Mileage Program
+mail62 Card from Your pals at Dodo Airlines
+mail63 Beach card
+mail64 Acorn card
+mail65 Gift card
+mail66 Card from Jolly Redd's
+mail67 MsgWherearenOffice00
+mail68 Glowing-moss card
+mail69 Flight-ticket card
+mail70 Plumeria card
+mail71 Sunset card
+mail72 Tropical card
+mail73 Paradise Planning card
+mail74 Unused_MsgMametsubu00m001
+box00 None
+box01 Nook Shopping Box
+box02 Hotel Box
+box03 Paradise Planning Box
+wrap00 None
+wrap01 Present
+wrap02 Wrapping Paper Yellow
+wrap03 Wrapping Paper Pink
+wrap04 Wrapping Paper Orange
+wrap05 Wrapping Paper Chartreuse
+wrap06 Wrapping Paper Green
+wrap07 Wrapping Paper Mint
+wrap08 Wrapping Paper LightBlue
+wrap09 Wrapping Paper Purple
+wrap10 Wrapping Paper Navy
+wrap11 Wrapping Paper Blue
+wrap12 Wrapping Paper White
+wrap13 Wrapping Paper Red
+wrap14 Wrapping Paper Gold
+wrap15 Wrapping Paper Brown
+wrap16 Wrapping Paper Gray
+wrap17 Wrapping Paper Black
+wrap18 Wrapping Paper Festive
+wrap19 Lucky Red Envelope
+wrap20 Bokjumeoni Pouch
+wrap21 Otoshidama Envelope
\ No newline at end of file
diff --git a/NHSE.Core/Resources/text/en/text_villager_en.txt b/NHSE.Core/Resources/text/en/text_villager_en.txt
index c808553..7194a10 100644
--- a/NHSE.Core/Resources/text/en/text_villager_en.txt
+++ b/NHSE.Core/Resources/text/en/text_villager_en.txt
@@ -1,4 +1,4 @@
-ant00 Cyrano
+ant00 Cyrano
ant01 Antonio
ant02 Pango
ant03 Anabelle
@@ -489,3 +489,16 @@ tuk Franklin
upa Shrunk
wrl Wendell
xct Rover
+npc_nookinc Nook Inc.
+npc_hotel Hotel
+npc_hha Happy Home Academy
+npc_nintendo Nintendo
+npc_bankofnook Bank of Nook
+npc_nookshopping Nook Shopping
+npc_nookmileageprogram Nook Mileage Program
+npc_mom Mom
+npc_dodoairlines Dodo Airlines
+npc_thefarwaymuseum The Farway Museum
+npc_paradiseplanning Paradise Planning
+npc_snowboy Snowboy
+npc_nooklinkadmins NookLink Admins
diff --git a/NHSE.Core/Resources/text/es/text_mail_es.txt b/NHSE.Core/Resources/text/es/text_mail_es.txt
new file mode 100644
index 0000000..6c1667c
--- /dev/null
+++ b/NHSE.Core/Resources/text/es/text_mail_es.txt
@@ -0,0 +1,101 @@
+mail00 Airmail card
+mail01 Star card
+mail02 Turkey Day card
+mail03 Torn card
+mail04 Zen card
+mail05 Decorative card
+mail06 Graduation card
+mail07 Stationery-goods card
+mail08 Bandage card
+mail09 Chocolate card
+mail10 Graffiti card
+mail11 Fluffy-clouds card
+mail12 Snowflake card
+mail13 Common card
+mail14 Winter-camellia card
+mail15 Lovely hearts card
+mail16 Gears card
+mail17 Full-bloom card
+mail18 Snowperson card
+mail19 Carpet-of-leaves card
+mail20 Father's Day card
+mail21 Holiday card
+mail22 Fanciful card
+mail23 Cherry-blossoms card
+mail24 Shapes card
+mail25 Mother's Day card
+mail26 Camo card
+mail27 Warm-sweater card
+mail28 Gem card
+mail29 Red-dragonflies card
+mail30 Mushroom card
+mail31 Card from Happy Home Academy
+mail32 Baby-goods card
+mail33 Birthday-cake card
+mail34 Ribbon card
+mail35 Balloons card
+mail36 Festive-tree card
+mail37 Cool-cool card
+mail38 Fantasy-stars card
+mail39 Bunny Day card
+mail40 Elegant-roses card
+mail41 Happy-clovers card
+mail42 Pumpkin card
+mail43 Halloween card
+mail44 Fireworks card
+mail45 Dawning-year card
+mail46 So-many-hearts card
+mail47 Blue-sky card
+mail48 Dandelion card
+mail49 Shooting-stars card
+mail50 Goldfish card
+mail51 Hibiscus card
+mail52 Flower-bouquet card
+mail53 Card from K.K.
+mail54 Chocolate-heart card
+mail55 Wedding card
+mail56 Town-view card
+mail57 Velvety card
+mail58 Card from C.J.
+mail59 Card from Flick
+mail60 Card from Bank of Nook
+mail61 Card from Nook Mileage Program
+mail62 Card from Your pals at Dodo Airlines
+mail63 Beach card
+mail64 Acorn card
+mail65 Gift card
+mail66 Card from Jolly Redd's
+mail67 MsgWherearenOffice00
+mail68 Glowing-moss card
+mail69 Flight-ticket card
+mail70 Plumeria card
+mail71 Sunset card
+mail72 Tropical card
+mail73 Paradise Planning card
+mail74 Unused_MsgMametsubu00m001
+box00 None
+box01 Nook Shopping Box
+box02 Hotel Box
+box03 Paradise Planning Box
+wrap00 None
+wrap01 Present
+wrap02 Wrapping Paper Yellow
+wrap03 Wrapping Paper Pink
+wrap04 Wrapping Paper Orange
+wrap05 Wrapping Paper Chartreuse
+wrap06 Wrapping Paper Green
+wrap07 Wrapping Paper Mint
+wrap08 Wrapping Paper LightBlue
+wrap09 Wrapping Paper Purple
+wrap10 Wrapping Paper Navy
+wrap11 Wrapping Paper Blue
+wrap12 Wrapping Paper White
+wrap13 Wrapping Paper Red
+wrap14 Wrapping Paper Gold
+wrap15 Wrapping Paper Brown
+wrap16 Wrapping Paper Gray
+wrap17 Wrapping Paper Black
+wrap18 Wrapping Paper Festive
+wrap19 Lucky Red Envelope
+wrap20 Bokjumeoni Pouch
+wrap21 Otoshidama Envelope
\ No newline at end of file
diff --git a/NHSE.Core/Resources/text/es/text_villager_es.txt b/NHSE.Core/Resources/text/es/text_villager_es.txt
index e419d8f..c0c1931 100644
--- a/NHSE.Core/Resources/text/es/text_villager_es.txt
+++ b/NHSE.Core/Resources/text/es/text_villager_es.txt
@@ -1,4 +1,4 @@
-ant00 Cirano
+ant00 Cirano
ant01 Antonio
ant02 Aspidora
ant03 Anabel
@@ -489,3 +489,16 @@ tuk Guindo
upa Dr. Sito
wrl Da Morsi
xct Fran
+npc_nookinc Nook Inc.
+npc_hotel Hotel
+npc_hha Happy Home Academy
+npc_nintendo Nintendo
+npc_bankofnook Bank of Nook
+npc_nookshopping Nook Shopping
+npc_nookmileageprogram Nook Mileage Program
+npc_mom Mom
+npc_dodoairlines Dodo Airlines
+npc_thefarwaymuseum The Farway Museum
+npc_paradiseplanning Paradise Planning
+npc_snowboy Snowboy
+npc_nooklinkadmins NookLink Admins
diff --git a/NHSE.Core/Resources/text/fr/text_mail_fr.txt b/NHSE.Core/Resources/text/fr/text_mail_fr.txt
new file mode 100644
index 0000000..6c1667c
--- /dev/null
+++ b/NHSE.Core/Resources/text/fr/text_mail_fr.txt
@@ -0,0 +1,101 @@
+mail00 Airmail card
+mail01 Star card
+mail02 Turkey Day card
+mail03 Torn card
+mail04 Zen card
+mail05 Decorative card
+mail06 Graduation card
+mail07 Stationery-goods card
+mail08 Bandage card
+mail09 Chocolate card
+mail10 Graffiti card
+mail11 Fluffy-clouds card
+mail12 Snowflake card
+mail13 Common card
+mail14 Winter-camellia card
+mail15 Lovely hearts card
+mail16 Gears card
+mail17 Full-bloom card
+mail18 Snowperson card
+mail19 Carpet-of-leaves card
+mail20 Father's Day card
+mail21 Holiday card
+mail22 Fanciful card
+mail23 Cherry-blossoms card
+mail24 Shapes card
+mail25 Mother's Day card
+mail26 Camo card
+mail27 Warm-sweater card
+mail28 Gem card
+mail29 Red-dragonflies card
+mail30 Mushroom card
+mail31 Card from Happy Home Academy
+mail32 Baby-goods card
+mail33 Birthday-cake card
+mail34 Ribbon card
+mail35 Balloons card
+mail36 Festive-tree card
+mail37 Cool-cool card
+mail38 Fantasy-stars card
+mail39 Bunny Day card
+mail40 Elegant-roses card
+mail41 Happy-clovers card
+mail42 Pumpkin card
+mail43 Halloween card
+mail44 Fireworks card
+mail45 Dawning-year card
+mail46 So-many-hearts card
+mail47 Blue-sky card
+mail48 Dandelion card
+mail49 Shooting-stars card
+mail50 Goldfish card
+mail51 Hibiscus card
+mail52 Flower-bouquet card
+mail53 Card from K.K.
+mail54 Chocolate-heart card
+mail55 Wedding card
+mail56 Town-view card
+mail57 Velvety card
+mail58 Card from C.J.
+mail59 Card from Flick
+mail60 Card from Bank of Nook
+mail61 Card from Nook Mileage Program
+mail62 Card from Your pals at Dodo Airlines
+mail63 Beach card
+mail64 Acorn card
+mail65 Gift card
+mail66 Card from Jolly Redd's
+mail67 MsgWherearenOffice00
+mail68 Glowing-moss card
+mail69 Flight-ticket card
+mail70 Plumeria card
+mail71 Sunset card
+mail72 Tropical card
+mail73 Paradise Planning card
+mail74 Unused_MsgMametsubu00m001
+box00 None
+box01 Nook Shopping Box
+box02 Hotel Box
+box03 Paradise Planning Box
+wrap00 None
+wrap01 Present
+wrap02 Wrapping Paper Yellow
+wrap03 Wrapping Paper Pink
+wrap04 Wrapping Paper Orange
+wrap05 Wrapping Paper Chartreuse
+wrap06 Wrapping Paper Green
+wrap07 Wrapping Paper Mint
+wrap08 Wrapping Paper LightBlue
+wrap09 Wrapping Paper Purple
+wrap10 Wrapping Paper Navy
+wrap11 Wrapping Paper Blue
+wrap12 Wrapping Paper White
+wrap13 Wrapping Paper Red
+wrap14 Wrapping Paper Gold
+wrap15 Wrapping Paper Brown
+wrap16 Wrapping Paper Gray
+wrap17 Wrapping Paper Black
+wrap18 Wrapping Paper Festive
+wrap19 Lucky Red Envelope
+wrap20 Bokjumeoni Pouch
+wrap21 Otoshidama Envelope
\ No newline at end of file
diff --git a/NHSE.Core/Resources/text/fr/text_villager_fr.txt b/NHSE.Core/Resources/text/fr/text_villager_fr.txt
index 992800b..1c15a8d 100644
--- a/NHSE.Core/Resources/text/fr/text_villager_fr.txt
+++ b/NHSE.Core/Resources/text/fr/text_villager_fr.txt
@@ -1,4 +1,4 @@
-ant00 Cyrano
+ant00 Cyrano
ant01 Antonio
ant02 Mathilda
ant03 Anabelle
@@ -489,3 +489,16 @@ tuk Dindou
upa Ciboulot
wrl Morsicus
xct Charly
+npc_nookinc Nook Inc.
+npc_hotel Hotel
+npc_hha Happy Home Academy
+npc_nintendo Nintendo
+npc_bankofnook Bank of Nook
+npc_nookshopping Nook Shopping
+npc_nookmileageprogram Nook Mileage Program
+npc_mom Mom
+npc_dodoairlines Dodo Airlines
+npc_thefarwaymuseum The Farway Museum
+npc_paradiseplanning Paradise Planning
+npc_snowboy Snowboy
+npc_nooklinkadmins NookLink Admins
diff --git a/NHSE.Core/Resources/text/it/text_mail_it.txt b/NHSE.Core/Resources/text/it/text_mail_it.txt
new file mode 100644
index 0000000..6c1667c
--- /dev/null
+++ b/NHSE.Core/Resources/text/it/text_mail_it.txt
@@ -0,0 +1,101 @@
+mail00 Airmail card
+mail01 Star card
+mail02 Turkey Day card
+mail03 Torn card
+mail04 Zen card
+mail05 Decorative card
+mail06 Graduation card
+mail07 Stationery-goods card
+mail08 Bandage card
+mail09 Chocolate card
+mail10 Graffiti card
+mail11 Fluffy-clouds card
+mail12 Snowflake card
+mail13 Common card
+mail14 Winter-camellia card
+mail15 Lovely hearts card
+mail16 Gears card
+mail17 Full-bloom card
+mail18 Snowperson card
+mail19 Carpet-of-leaves card
+mail20 Father's Day card
+mail21 Holiday card
+mail22 Fanciful card
+mail23 Cherry-blossoms card
+mail24 Shapes card
+mail25 Mother's Day card
+mail26 Camo card
+mail27 Warm-sweater card
+mail28 Gem card
+mail29 Red-dragonflies card
+mail30 Mushroom card
+mail31 Card from Happy Home Academy
+mail32 Baby-goods card
+mail33 Birthday-cake card
+mail34 Ribbon card
+mail35 Balloons card
+mail36 Festive-tree card
+mail37 Cool-cool card
+mail38 Fantasy-stars card
+mail39 Bunny Day card
+mail40 Elegant-roses card
+mail41 Happy-clovers card
+mail42 Pumpkin card
+mail43 Halloween card
+mail44 Fireworks card
+mail45 Dawning-year card
+mail46 So-many-hearts card
+mail47 Blue-sky card
+mail48 Dandelion card
+mail49 Shooting-stars card
+mail50 Goldfish card
+mail51 Hibiscus card
+mail52 Flower-bouquet card
+mail53 Card from K.K.
+mail54 Chocolate-heart card
+mail55 Wedding card
+mail56 Town-view card
+mail57 Velvety card
+mail58 Card from C.J.
+mail59 Card from Flick
+mail60 Card from Bank of Nook
+mail61 Card from Nook Mileage Program
+mail62 Card from Your pals at Dodo Airlines
+mail63 Beach card
+mail64 Acorn card
+mail65 Gift card
+mail66 Card from Jolly Redd's
+mail67 MsgWherearenOffice00
+mail68 Glowing-moss card
+mail69 Flight-ticket card
+mail70 Plumeria card
+mail71 Sunset card
+mail72 Tropical card
+mail73 Paradise Planning card
+mail74 Unused_MsgMametsubu00m001
+box00 None
+box01 Nook Shopping Box
+box02 Hotel Box
+box03 Paradise Planning Box
+wrap00 None
+wrap01 Present
+wrap02 Wrapping Paper Yellow
+wrap03 Wrapping Paper Pink
+wrap04 Wrapping Paper Orange
+wrap05 Wrapping Paper Chartreuse
+wrap06 Wrapping Paper Green
+wrap07 Wrapping Paper Mint
+wrap08 Wrapping Paper LightBlue
+wrap09 Wrapping Paper Purple
+wrap10 Wrapping Paper Navy
+wrap11 Wrapping Paper Blue
+wrap12 Wrapping Paper White
+wrap13 Wrapping Paper Red
+wrap14 Wrapping Paper Gold
+wrap15 Wrapping Paper Brown
+wrap16 Wrapping Paper Gray
+wrap17 Wrapping Paper Black
+wrap18 Wrapping Paper Festive
+wrap19 Lucky Red Envelope
+wrap20 Bokjumeoni Pouch
+wrap21 Otoshidama Envelope
\ No newline at end of file
diff --git a/NHSE.Core/Resources/text/it/text_villager_it.txt b/NHSE.Core/Resources/text/it/text_villager_it.txt
index deca77a..b9b15ef 100644
--- a/NHSE.Core/Resources/text/it/text_villager_it.txt
+++ b/NHSE.Core/Resources/text/it/text_villager_it.txt
@@ -1,4 +1,4 @@
-ant00 Cirano
+ant00 Cirano
ant01 Antonio
ant02 Carlotta
ant03 Annalisa
@@ -489,3 +489,16 @@ tuk Cedrone
upa Strizzo
wrl Van Trik
xct Girolamo
+npc_nookinc Nook Inc.
+npc_hotel Hotel
+npc_hha Happy Home Academy
+npc_nintendo Nintendo
+npc_bankofnook Bank of Nook
+npc_nookshopping Nook Shopping
+npc_nookmileageprogram Nook Mileage Program
+npc_mom Mom
+npc_dodoairlines Dodo Airlines
+npc_thefarwaymuseum The Farway Museum
+npc_paradiseplanning Paradise Planning
+npc_snowboy Snowboy
+npc_nooklinkadmins NookLink Admins
diff --git a/NHSE.Core/Resources/text/jp/text_mail_jp.txt b/NHSE.Core/Resources/text/jp/text_mail_jp.txt
new file mode 100644
index 0000000..6c1667c
--- /dev/null
+++ b/NHSE.Core/Resources/text/jp/text_mail_jp.txt
@@ -0,0 +1,101 @@
+mail00 Airmail card
+mail01 Star card
+mail02 Turkey Day card
+mail03 Torn card
+mail04 Zen card
+mail05 Decorative card
+mail06 Graduation card
+mail07 Stationery-goods card
+mail08 Bandage card
+mail09 Chocolate card
+mail10 Graffiti card
+mail11 Fluffy-clouds card
+mail12 Snowflake card
+mail13 Common card
+mail14 Winter-camellia card
+mail15 Lovely hearts card
+mail16 Gears card
+mail17 Full-bloom card
+mail18 Snowperson card
+mail19 Carpet-of-leaves card
+mail20 Father's Day card
+mail21 Holiday card
+mail22 Fanciful card
+mail23 Cherry-blossoms card
+mail24 Shapes card
+mail25 Mother's Day card
+mail26 Camo card
+mail27 Warm-sweater card
+mail28 Gem card
+mail29 Red-dragonflies card
+mail30 Mushroom card
+mail31 Card from Happy Home Academy
+mail32 Baby-goods card
+mail33 Birthday-cake card
+mail34 Ribbon card
+mail35 Balloons card
+mail36 Festive-tree card
+mail37 Cool-cool card
+mail38 Fantasy-stars card
+mail39 Bunny Day card
+mail40 Elegant-roses card
+mail41 Happy-clovers card
+mail42 Pumpkin card
+mail43 Halloween card
+mail44 Fireworks card
+mail45 Dawning-year card
+mail46 So-many-hearts card
+mail47 Blue-sky card
+mail48 Dandelion card
+mail49 Shooting-stars card
+mail50 Goldfish card
+mail51 Hibiscus card
+mail52 Flower-bouquet card
+mail53 Card from K.K.
+mail54 Chocolate-heart card
+mail55 Wedding card
+mail56 Town-view card
+mail57 Velvety card
+mail58 Card from C.J.
+mail59 Card from Flick
+mail60 Card from Bank of Nook
+mail61 Card from Nook Mileage Program
+mail62 Card from Your pals at Dodo Airlines
+mail63 Beach card
+mail64 Acorn card
+mail65 Gift card
+mail66 Card from Jolly Redd's
+mail67 MsgWherearenOffice00
+mail68 Glowing-moss card
+mail69 Flight-ticket card
+mail70 Plumeria card
+mail71 Sunset card
+mail72 Tropical card
+mail73 Paradise Planning card
+mail74 Unused_MsgMametsubu00m001
+box00 None
+box01 Nook Shopping Box
+box02 Hotel Box
+box03 Paradise Planning Box
+wrap00 None
+wrap01 Present
+wrap02 Wrapping Paper Yellow
+wrap03 Wrapping Paper Pink
+wrap04 Wrapping Paper Orange
+wrap05 Wrapping Paper Chartreuse
+wrap06 Wrapping Paper Green
+wrap07 Wrapping Paper Mint
+wrap08 Wrapping Paper LightBlue
+wrap09 Wrapping Paper Purple
+wrap10 Wrapping Paper Navy
+wrap11 Wrapping Paper Blue
+wrap12 Wrapping Paper White
+wrap13 Wrapping Paper Red
+wrap14 Wrapping Paper Gold
+wrap15 Wrapping Paper Brown
+wrap16 Wrapping Paper Gray
+wrap17 Wrapping Paper Black
+wrap18 Wrapping Paper Festive
+wrap19 Lucky Red Envelope
+wrap20 Bokjumeoni Pouch
+wrap21 Otoshidama Envelope
\ No newline at end of file
diff --git a/NHSE.Core/Resources/text/jp/text_villager_jp.txt b/NHSE.Core/Resources/text/jp/text_villager_jp.txt
index 4a95108..4c91724 100644
--- a/NHSE.Core/Resources/text/jp/text_villager_jp.txt
+++ b/NHSE.Core/Resources/text/jp/text_villager_jp.txt
@@ -1,4 +1,4 @@
-ant00 さくらじま
+ant00 さくらじま
ant01 マコト
ant02 パトラ
ant03 あるみ
@@ -489,3 +489,16 @@ tuk フランクリン
upa ししょー
wrl セイイチ
xct みしらぬネコ
+npc_nookinc Nook Inc.
+npc_hotel Hotel
+npc_hha Happy Home Academy
+npc_nintendo Nintendo
+npc_bankofnook Bank of Nook
+npc_nookshopping Nook Shopping
+npc_nookmileageprogram Nook Mileage Program
+npc_mom Mom
+npc_dodoairlines Dodo Airlines
+npc_thefarwaymuseum The Farway Museum
+npc_paradiseplanning Paradise Planning
+npc_snowboy Snowboy
+npc_nooklinkadmins NookLink Admins
diff --git a/NHSE.Core/Resources/text/ko/text_mail_ko.txt b/NHSE.Core/Resources/text/ko/text_mail_ko.txt
new file mode 100644
index 0000000..6c1667c
--- /dev/null
+++ b/NHSE.Core/Resources/text/ko/text_mail_ko.txt
@@ -0,0 +1,101 @@
+mail00 Airmail card
+mail01 Star card
+mail02 Turkey Day card
+mail03 Torn card
+mail04 Zen card
+mail05 Decorative card
+mail06 Graduation card
+mail07 Stationery-goods card
+mail08 Bandage card
+mail09 Chocolate card
+mail10 Graffiti card
+mail11 Fluffy-clouds card
+mail12 Snowflake card
+mail13 Common card
+mail14 Winter-camellia card
+mail15 Lovely hearts card
+mail16 Gears card
+mail17 Full-bloom card
+mail18 Snowperson card
+mail19 Carpet-of-leaves card
+mail20 Father's Day card
+mail21 Holiday card
+mail22 Fanciful card
+mail23 Cherry-blossoms card
+mail24 Shapes card
+mail25 Mother's Day card
+mail26 Camo card
+mail27 Warm-sweater card
+mail28 Gem card
+mail29 Red-dragonflies card
+mail30 Mushroom card
+mail31 Card from Happy Home Academy
+mail32 Baby-goods card
+mail33 Birthday-cake card
+mail34 Ribbon card
+mail35 Balloons card
+mail36 Festive-tree card
+mail37 Cool-cool card
+mail38 Fantasy-stars card
+mail39 Bunny Day card
+mail40 Elegant-roses card
+mail41 Happy-clovers card
+mail42 Pumpkin card
+mail43 Halloween card
+mail44 Fireworks card
+mail45 Dawning-year card
+mail46 So-many-hearts card
+mail47 Blue-sky card
+mail48 Dandelion card
+mail49 Shooting-stars card
+mail50 Goldfish card
+mail51 Hibiscus card
+mail52 Flower-bouquet card
+mail53 Card from K.K.
+mail54 Chocolate-heart card
+mail55 Wedding card
+mail56 Town-view card
+mail57 Velvety card
+mail58 Card from C.J.
+mail59 Card from Flick
+mail60 Card from Bank of Nook
+mail61 Card from Nook Mileage Program
+mail62 Card from Your pals at Dodo Airlines
+mail63 Beach card
+mail64 Acorn card
+mail65 Gift card
+mail66 Card from Jolly Redd's
+mail67 MsgWherearenOffice00
+mail68 Glowing-moss card
+mail69 Flight-ticket card
+mail70 Plumeria card
+mail71 Sunset card
+mail72 Tropical card
+mail73 Paradise Planning card
+mail74 Unused_MsgMametsubu00m001
+box00 None
+box01 Nook Shopping Box
+box02 Hotel Box
+box03 Paradise Planning Box
+wrap00 None
+wrap01 Present
+wrap02 Wrapping Paper Yellow
+wrap03 Wrapping Paper Pink
+wrap04 Wrapping Paper Orange
+wrap05 Wrapping Paper Chartreuse
+wrap06 Wrapping Paper Green
+wrap07 Wrapping Paper Mint
+wrap08 Wrapping Paper LightBlue
+wrap09 Wrapping Paper Purple
+wrap10 Wrapping Paper Navy
+wrap11 Wrapping Paper Blue
+wrap12 Wrapping Paper White
+wrap13 Wrapping Paper Red
+wrap14 Wrapping Paper Gold
+wrap15 Wrapping Paper Brown
+wrap16 Wrapping Paper Gray
+wrap17 Wrapping Paper Black
+wrap18 Wrapping Paper Festive
+wrap19 Lucky Red Envelope
+wrap20 Bokjumeoni Pouch
+wrap21 Otoshidama Envelope
\ No newline at end of file
diff --git a/NHSE.Core/Resources/text/ko/text_villager_ko.txt b/NHSE.Core/Resources/text/ko/text_villager_ko.txt
index a73a058..2fa9145 100644
--- a/NHSE.Core/Resources/text/ko/text_villager_ko.txt
+++ b/NHSE.Core/Resources/text/ko/text_villager_ko.txt
@@ -1,4 +1,4 @@
-ant00 사지마
+ant00 사지마
ant01 퍼머거
ant02 패트라
ant03 아롱이
@@ -489,3 +489,16 @@ tuk 프랭클린
upa 스승
wrl 고파유
xct 낯선고양이
+npc_nookinc Nook Inc.
+npc_hotel Hotel
+npc_hha Happy Home Academy
+npc_nintendo Nintendo
+npc_bankofnook Bank of Nook
+npc_nookshopping Nook Shopping
+npc_nookmileageprogram Nook Mileage Program
+npc_mom Mom
+npc_dodoairlines Dodo Airlines
+npc_thefarwaymuseum The Farway Museum
+npc_paradiseplanning Paradise Planning
+npc_snowboy Snowboy
+npc_nooklinkadmins NookLink Admins
diff --git a/NHSE.Core/Resources/text/zhs/text_mail_zhs.txt b/NHSE.Core/Resources/text/zhs/text_mail_zhs.txt
new file mode 100644
index 0000000..6c1667c
--- /dev/null
+++ b/NHSE.Core/Resources/text/zhs/text_mail_zhs.txt
@@ -0,0 +1,101 @@
+mail00 Airmail card
+mail01 Star card
+mail02 Turkey Day card
+mail03 Torn card
+mail04 Zen card
+mail05 Decorative card
+mail06 Graduation card
+mail07 Stationery-goods card
+mail08 Bandage card
+mail09 Chocolate card
+mail10 Graffiti card
+mail11 Fluffy-clouds card
+mail12 Snowflake card
+mail13 Common card
+mail14 Winter-camellia card
+mail15 Lovely hearts card
+mail16 Gears card
+mail17 Full-bloom card
+mail18 Snowperson card
+mail19 Carpet-of-leaves card
+mail20 Father's Day card
+mail21 Holiday card
+mail22 Fanciful card
+mail23 Cherry-blossoms card
+mail24 Shapes card
+mail25 Mother's Day card
+mail26 Camo card
+mail27 Warm-sweater card
+mail28 Gem card
+mail29 Red-dragonflies card
+mail30 Mushroom card
+mail31 Card from Happy Home Academy
+mail32 Baby-goods card
+mail33 Birthday-cake card
+mail34 Ribbon card
+mail35 Balloons card
+mail36 Festive-tree card
+mail37 Cool-cool card
+mail38 Fantasy-stars card
+mail39 Bunny Day card
+mail40 Elegant-roses card
+mail41 Happy-clovers card
+mail42 Pumpkin card
+mail43 Halloween card
+mail44 Fireworks card
+mail45 Dawning-year card
+mail46 So-many-hearts card
+mail47 Blue-sky card
+mail48 Dandelion card
+mail49 Shooting-stars card
+mail50 Goldfish card
+mail51 Hibiscus card
+mail52 Flower-bouquet card
+mail53 Card from K.K.
+mail54 Chocolate-heart card
+mail55 Wedding card
+mail56 Town-view card
+mail57 Velvety card
+mail58 Card from C.J.
+mail59 Card from Flick
+mail60 Card from Bank of Nook
+mail61 Card from Nook Mileage Program
+mail62 Card from Your pals at Dodo Airlines
+mail63 Beach card
+mail64 Acorn card
+mail65 Gift card
+mail66 Card from Jolly Redd's
+mail67 MsgWherearenOffice00
+mail68 Glowing-moss card
+mail69 Flight-ticket card
+mail70 Plumeria card
+mail71 Sunset card
+mail72 Tropical card
+mail73 Paradise Planning card
+mail74 Unused_MsgMametsubu00m001
+box00 None
+box01 Nook Shopping Box
+box02 Hotel Box
+box03 Paradise Planning Box
+wrap00 None
+wrap01 Present
+wrap02 Wrapping Paper Yellow
+wrap03 Wrapping Paper Pink
+wrap04 Wrapping Paper Orange
+wrap05 Wrapping Paper Chartreuse
+wrap06 Wrapping Paper Green
+wrap07 Wrapping Paper Mint
+wrap08 Wrapping Paper LightBlue
+wrap09 Wrapping Paper Purple
+wrap10 Wrapping Paper Navy
+wrap11 Wrapping Paper Blue
+wrap12 Wrapping Paper White
+wrap13 Wrapping Paper Red
+wrap14 Wrapping Paper Gold
+wrap15 Wrapping Paper Brown
+wrap16 Wrapping Paper Gray
+wrap17 Wrapping Paper Black
+wrap18 Wrapping Paper Festive
+wrap19 Lucky Red Envelope
+wrap20 Bokjumeoni Pouch
+wrap21 Otoshidama Envelope
\ No newline at end of file
diff --git a/NHSE.Core/Resources/text/zhs/text_villager_zhs.txt b/NHSE.Core/Resources/text/zhs/text_villager_zhs.txt
index 1131f06..47ea768 100644
--- a/NHSE.Core/Resources/text/zhs/text_villager_zhs.txt
+++ b/NHSE.Core/Resources/text/zhs/text_villager_zhs.txt
@@ -1,4 +1,4 @@
-ant00 阳明
+ant00 阳明
ant01 阿诚
ant02 佩希
ant03 有美
@@ -489,3 +489,16 @@ tuk 富蓝
upa 笑匠
wrl 海项
xct 陌陌
+npc_nookinc Nook Inc.
+npc_hotel Hotel
+npc_hha Happy Home Academy
+npc_nintendo Nintendo
+npc_bankofnook Bank of Nook
+npc_nookshopping Nook Shopping
+npc_nookmileageprogram Nook Mileage Program
+npc_mom Mom
+npc_dodoairlines Dodo Airlines
+npc_thefarwaymuseum The Farway Museum
+npc_paradiseplanning Paradise Planning
+npc_snowboy Snowboy
+npc_nooklinkadmins NookLink Admins
diff --git a/NHSE.Core/Resources/text/zht/text_mail_zht.txt b/NHSE.Core/Resources/text/zht/text_mail_zht.txt
new file mode 100644
index 0000000..6c1667c
--- /dev/null
+++ b/NHSE.Core/Resources/text/zht/text_mail_zht.txt
@@ -0,0 +1,101 @@
+mail00 Airmail card
+mail01 Star card
+mail02 Turkey Day card
+mail03 Torn card
+mail04 Zen card
+mail05 Decorative card
+mail06 Graduation card
+mail07 Stationery-goods card
+mail08 Bandage card
+mail09 Chocolate card
+mail10 Graffiti card
+mail11 Fluffy-clouds card
+mail12 Snowflake card
+mail13 Common card
+mail14 Winter-camellia card
+mail15 Lovely hearts card
+mail16 Gears card
+mail17 Full-bloom card
+mail18 Snowperson card
+mail19 Carpet-of-leaves card
+mail20 Father's Day card
+mail21 Holiday card
+mail22 Fanciful card
+mail23 Cherry-blossoms card
+mail24 Shapes card
+mail25 Mother's Day card
+mail26 Camo card
+mail27 Warm-sweater card
+mail28 Gem card
+mail29 Red-dragonflies card
+mail30 Mushroom card
+mail31 Card from Happy Home Academy
+mail32 Baby-goods card
+mail33 Birthday-cake card
+mail34 Ribbon card
+mail35 Balloons card
+mail36 Festive-tree card
+mail37 Cool-cool card
+mail38 Fantasy-stars card
+mail39 Bunny Day card
+mail40 Elegant-roses card
+mail41 Happy-clovers card
+mail42 Pumpkin card
+mail43 Halloween card
+mail44 Fireworks card
+mail45 Dawning-year card
+mail46 So-many-hearts card
+mail47 Blue-sky card
+mail48 Dandelion card
+mail49 Shooting-stars card
+mail50 Goldfish card
+mail51 Hibiscus card
+mail52 Flower-bouquet card
+mail53 Card from K.K.
+mail54 Chocolate-heart card
+mail55 Wedding card
+mail56 Town-view card
+mail57 Velvety card
+mail58 Card from C.J.
+mail59 Card from Flick
+mail60 Card from Bank of Nook
+mail61 Card from Nook Mileage Program
+mail62 Card from Your pals at Dodo Airlines
+mail63 Beach card
+mail64 Acorn card
+mail65 Gift card
+mail66 Card from Jolly Redd's
+mail67 MsgWherearenOffice00
+mail68 Glowing-moss card
+mail69 Flight-ticket card
+mail70 Plumeria card
+mail71 Sunset card
+mail72 Tropical card
+mail73 Paradise Planning card
+mail74 Unused_MsgMametsubu00m001
+box00 None
+box01 Nook Shopping Box
+box02 Hotel Box
+box03 Paradise Planning Box
+wrap00 None
+wrap01 Present
+wrap02 Wrapping Paper Yellow
+wrap03 Wrapping Paper Pink
+wrap04 Wrapping Paper Orange
+wrap05 Wrapping Paper Chartreuse
+wrap06 Wrapping Paper Green
+wrap07 Wrapping Paper Mint
+wrap08 Wrapping Paper LightBlue
+wrap09 Wrapping Paper Purple
+wrap10 Wrapping Paper Navy
+wrap11 Wrapping Paper Blue
+wrap12 Wrapping Paper White
+wrap13 Wrapping Paper Red
+wrap14 Wrapping Paper Gold
+wrap15 Wrapping Paper Brown
+wrap16 Wrapping Paper Gray
+wrap17 Wrapping Paper Black
+wrap18 Wrapping Paper Festive
+wrap19 Lucky Red Envelope
+wrap20 Bokjumeoni Pouch
+wrap21 Otoshidama Envelope
\ No newline at end of file
diff --git a/NHSE.Core/Resources/text/zht/text_villager_zht.txt b/NHSE.Core/Resources/text/zht/text_villager_zht.txt
index d555c8c..8ce9f66 100644
--- a/NHSE.Core/Resources/text/zht/text_villager_zht.txt
+++ b/NHSE.Core/Resources/text/zht/text_villager_zht.txt
@@ -1,4 +1,4 @@
-ant00 陽明
+ant00 陽明
ant01 阿誠
ant02 佩希
ant03 有美
@@ -489,3 +489,16 @@ tuk 富藍
upa 笑匠
wrl 海項
xct 陌陌
+npc_nookinc Nook Inc.
+npc_hotel Hotel
+npc_hha Happy Home Academy
+npc_nintendo Nintendo
+npc_bankofnook Bank of Nook
+npc_nookshopping Nook Shopping
+npc_nookmileageprogram Nook Mileage Program
+npc_mom Mom
+npc_dodoairlines Dodo Airlines
+npc_thefarwaymuseum The Farway Museum
+npc_paradiseplanning Paradise Planning
+npc_snowboy Snowboy
+npc_nooklinkadmins NookLink Admins
diff --git a/NHSE.Core/Save/Files/MainSave.cs b/NHSE.Core/Save/Files/MainSave.cs
index fb7bbd6..a810c0a 100644
--- a/NHSE.Core/Save/Files/MainSave.cs
+++ b/NHSE.Core/Save/Files/MainSave.cs
@@ -65,9 +65,9 @@ public void SetVillagerHouses(IReadOnlyList villagers)
}
public DesignPattern GetDesign(int index) => Offsets.ReadPattern(Data, index);
- public void SetDesign(DesignPattern value, int index, Span playerID, Span townID) => Offsets.WritePattern(value, Data, index, playerID, townID);
+ public void SetDesign(DesignPattern value, int index) => Offsets.WritePattern(value, Data, index);
public DesignPatternPRO GetDesignPRO(int index) => Offsets.ReadPatternPRO(Data, index);
- public void SetDesignPRO(DesignPatternPRO value, int index, Span playerID, Span townID) => Offsets.WritePatternPRO(value, Data, index, playerID, townID);
+ public void SetDesignPRO(DesignPatternPRO value, int index) => Offsets.WritePatternPRO(value, Data, index);
public IReadOnlyList- RecycleBin
{
@@ -106,11 +106,11 @@ public DesignPattern[] GetDesigns()
return result;
}
- public void SetDesigns(IReadOnlyList value, Span playerID, Span townID)
+ public void SetDesigns(IReadOnlyList value)
{
var count = Math.Min(Offsets.PatternCount, value.Count);
for (int i = 0; i < count; i++)
- SetDesign(value[i], i, playerID, townID);
+ SetDesign(value[i], i);
}
public DesignPatternPRO[] GetDesignsPRO()
@@ -121,11 +121,11 @@ public DesignPatternPRO[] GetDesignsPRO()
return result;
}
- public void SetDesignsPRO(IReadOnlyList value, Span playerID, Span townID)
+ public void SetDesignsPRO(IReadOnlyList value)
{
var count = Math.Min(Offsets.PatternCount, value.Count);
for (int i = 0; i < count; i++)
- SetDesignPRO(value[i], i, playerID, townID);
+ SetDesignPRO(value[i], i);
}
public DesignPattern FlagMyDesign
diff --git a/NHSE.Core/Save/Files/PostBox.cs b/NHSE.Core/Save/Files/PostBox.cs
index 96ef7ee..b97613c 100644
--- a/NHSE.Core/Save/Files/PostBox.cs
+++ b/NHSE.Core/Save/Files/PostBox.cs
@@ -1,6 +1,321 @@
-namespace NHSE.Core;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using static System.Buffers.Binary.BinaryPrimitives;
+
+namespace NHSE.Core;
///
-/// postbox.dat
+/// Data structures stored for the players Post Box (postbox.dat)
///
-public sealed class PostBox(ISaveFileProvider provider) : EncryptedFilePair(provider, "postbox");
\ No newline at end of file
+public sealed class PostBox : EncryptedFilePair
+{
+ public const string FileName = "postbox";
+ public readonly PostBoxOffsets Offsets;
+ public PostBox(ISaveFileProvider provider) : base(provider, FileName) => Offsets = PostBoxOffsets.GetOffsets(Info);
+
+ public readonly int MailLength = Mail.SIZE;
+ public readonly int MailListLength = 0x46E60;
+ public readonly int MaxMailItems = Mail.MaxSlots;
+
+ public Span Get_s_7b602b39() => Data.Slice(Offsets.s_7b602b39, 4);
+
+ public Span MailListWholeRegion
+ {
+ get => Data.Slice(Offsets.MailList, MailListLength);
+ set => value.CopyTo(Data[Offsets.MailList..]);
+ }
+
+ public Span GetIndividualLetter(int index) => Data.Slice(Offsets.MailList + (MailLength * index), MailLength);
+ public void SetIndividualLetter(int index, Span value)
+ {
+ value.CopyTo(Data[(Offsets.MailList + (MailLength * index))..]);
+ }
+
+ public List GetUsedPostBoxSlots()
+ {
+ var usedSlots = new List();
+ for (int i = 0; i < MaxMailItems; i++)
+ {
+ var readStatus = MailListWholeRegion[(MailLength * i) + Mail.ReadUnread];
+ if (readStatus == 0x03 || readStatus == 0x04)
+ usedSlots.Add(i);
+ }
+ return usedSlots;
+ }
+
+ public int GetLatestUniqueId()
+ {
+ return ReadInt32LittleEndian(Data.Slice(Offsets.LatestUniqueId, 4));
+ }
+ public void SetLatestUniqueId(int uniqueId)
+ {
+ WriteInt32LittleEndian(Data.Slice(Offsets.LatestUniqueId, 4), uniqueId);
+ }
+
+ #region Mail
+
+ public void WipeTxRxSection(int index)
+ {
+ var arr = new byte[0x60];
+ Span bytes = arr;
+ bytes.CopyTo(Data[(Offsets.MailList + (MailLength * index) + Mail.ReadUnread)..]);
+ }
+
+ public bool GetMailCheck(int index)
+ {
+ return Data[Offsets.MailList + (MailLength * index) + Mail.ReadUnread] != 0x00;
+ }
+ public bool GetMailReadStatus(int index)
+ {
+ return Data[Offsets.MailList + (MailLength * index) + Mail.ReadUnread] != 0x03;
+ }
+ public void SetMailReadStatus(int index, bool isRead)
+ {
+ Data[Offsets.MailList + (MailLength * index) + Mail.ReadUnread] = isRead ? (byte)0x04 : (byte)0x03;
+ }
+
+ public bool GetMailFavStatus(int index)
+ {
+ return Data[Offsets.MailList + (MailLength * index) + Mail.LetterFavourited] != 0x00;
+ }
+ public void SetMailFavStatus(int index, bool isFavourite)
+ {
+ Data[Offsets.MailList + (MailLength * index) + Mail.LetterFavourited] = isFavourite ? (byte)0x01 : (byte)0x00;
+ }
+
+ public uint GetPlayerSenderIslandId(int index)
+ {
+ var offset = Offsets.MailList + (MailLength * index) + Mail.PlayerSenderIslandID;
+ return ReadUInt32LittleEndian(Data.Slice(offset, 4));
+ }
+ public void SetPlayerSenderIslandId(int index, uint islandId)
+ {
+ var offset = Offsets.MailList + (MailLength * index) + Mail.PlayerSenderIslandID;
+ WriteUInt32LittleEndian(Data.Slice(offset, 4), islandId);
+ }
+
+ public string GetPlayerSenderIslandName(int index)
+ {
+ return GetString(Offsets.MailList + (MailLength * index) + Mail.PlayerSenderIslandName, 10);
+ }
+ public void SetPlayerSenderIslandName(int index, string islandName)
+ {
+ var nameBytes = GetBytes(islandName, 10);
+ nameBytes.CopyTo(Data[(Offsets.MailList + (MailLength * index) + Mail.PlayerSenderIslandName)..]);
+ }
+
+ public byte GetVillagerSenderSpeciesId(int index)
+ {
+ return Data[Offsets.MailList + (MailLength * index) + Mail.NPCSenderSpeciesID];
+ }
+ public void SetVillagerSenderSpeciesId(int index, int speciesId)
+ {
+ Data[Offsets.MailList + (MailLength * index) + Mail.NPCSenderSpeciesID] = (byte)speciesId;
+ }
+ public byte GetVillagerSenderVariantId(int index)
+ {
+ return Data[Offsets.MailList + (MailLength * index) + Mail.NPCSenderVariantID];
+ }
+ public void SetVillagerSenderVariantId(int index, int variantId)
+ {
+ Data[Offsets.MailList + (MailLength * index) + Mail.NPCSenderVariantID] = (byte)variantId;
+ }
+
+ public uint GetNPCSenderIslandId(int index)
+ {
+ var offset = Offsets.MailList + (MailLength * index) + Mail.NPCSenderIslandID;
+ return ReadUInt32LittleEndian(Data.Slice(offset, 4));
+ }
+ public void SetNPCSenderIslandId(int index, uint islandId)
+ {
+ var offset = Offsets.MailList + (MailLength * index) + Mail.NPCSenderIslandID;
+ WriteUInt32LittleEndian(Data.Slice(offset, 4), islandId);
+ }
+ public string GetNPCSenderIslandName(int index)
+ {
+ return GetString(Offsets.MailList + (MailLength * index) + Mail.NPCSenderIslandName, 10);
+ }
+ public void SetNPCSenderIslandName(int index, string islandName)
+ {
+ var nameBytes = GetBytes(islandName, 20);
+ nameBytes.CopyTo(Data[(Offsets.MailList + (MailLength * index) + Mail.NPCSenderIslandName)..]);
+ }
+
+ public uint GetSenderId(int index)
+ {
+ var offset = Offsets.MailList + (MailLength * index) + Mail.SenderID;
+ return ReadUInt32LittleEndian(Data.Slice(offset, 4));
+ }
+ public void SetSenderId(int index, uint senderId)
+ {
+ var offset = Offsets.MailList + (MailLength * index) + Mail.SenderID;
+ WriteUInt32LittleEndian(Data.Slice(offset, 4), senderId);
+ }
+ public string GetSenderName(int index)
+ {
+ return GetString(Offsets.MailList + (MailLength * index) + Mail.SenderName, 10);
+ }
+ public void SetSenderName(int index, string senderName)
+ {
+ var nameBytes = GetBytes(senderName, 10);
+ nameBytes.CopyTo(Data[(Offsets.MailList + (MailLength * index) + Mail.SenderName)..]);
+ }
+ public byte GetSenderType(int index)
+ {
+ return Data[Offsets.MailList + (MailLength * index) + Mail.SenderType];
+ }
+ public void SetSenderType(int index, byte senderType)
+ {
+ Data[Offsets.MailList + (MailLength * index) + Mail.SenderType] = senderType;
+ }
+
+ public uint GetReceiverIslandId(int index)
+ {
+ var offset = Offsets.MailList + (MailLength * index) + Mail.ReceiverIslandID;
+ return ReadUInt32LittleEndian(Data.Slice(offset, 4));
+ }
+ public void SetReceiverIslandId(int index, uint islandId)
+ {
+ var offset = Offsets.MailList + (MailLength * index) + Mail.ReceiverIslandID;
+ WriteUInt32LittleEndian(Data.Slice(offset, 4), islandId);
+ }
+ public string GetReceiverIslandName(int index)
+ {
+ return GetString(Offsets.MailList + (MailLength * index) + Mail.ReceiverIslandName, 10);
+ }
+ public void SetReceiverIslandName(int index, string islandName)
+ {
+ var nameBytes = GetBytes(islandName, 10);
+ nameBytes.CopyTo(Data[(Offsets.MailList + (MailLength * index) + Mail.ReceiverIslandName)..]);
+ }
+
+ public uint GetReceiverPlayerId(int index)
+ {
+ var offset = Offsets.MailList + (MailLength * index) + Mail.ReceiverPlayerID;
+ return ReadUInt32LittleEndian(Data.Slice(offset, 4));
+ }
+ public void SetReceiverPlayerId(int index, uint playerId)
+ {
+ var offset = Offsets.MailList + (MailLength * index) + Mail.ReceiverPlayerID;
+ WriteUInt32LittleEndian(Data.Slice(offset, 4), playerId);
+ }
+ public string GetReceiverPlayerName(int index)
+ {
+ return GetString(Offsets.MailList + (MailLength * index) + Mail.ReceiverPlayerName, 10);
+ }
+ public void SetReceiverPlayerName(int index, string playerName)
+ {
+ var nameBytes = GetBytes(playerName, 10);
+ nameBytes.CopyTo(Data[(Offsets.MailList + (MailLength * index) + Mail.ReceiverPlayerName)..]);
+ }
+
+ public GSaveDate GetTimestamp(int index)
+ {
+ return Data.ToStructure(Offsets.MailList + (MailLength * index) + Mail.TimeStamp, GSaveDate.SIZE);
+ }
+ public void SetTimeStamp(int index, GSaveDate timestamp)
+ {
+ timestamp.ToBytes().CopyTo(Data[(Offsets.MailList + (MailLength * index) + Mail.TimeStamp)..]);
+ }
+
+ public Item GetAttachedItem(int index)
+ {
+ var offset = Offsets.MailList + (MailLength * index) + Mail.AttachedItemID;
+ return Item.GetArray(Data.Slice(offset, Item.SIZE))[0];
+ }
+ public void SetAttachedItem(int index, Item item)
+ {
+ var offset = Offsets.MailList + (MailLength * index) + Mail.AttachedItemID;
+ var itemBytes = Item.SetArray(new[] { item });
+ itemBytes.CopyTo(Data[offset..]);
+ }
+
+ public byte GetItemWrappingType(int index)
+ {
+ return Data[Offsets.MailList + (MailLength * index) + Mail.MailItemWrappingType];
+ }
+ public void SetItemWrappingType(int index, byte wrappingType)
+ {
+ Data[Offsets.MailList + (MailLength * index) + Mail.MailItemWrappingType] = wrappingType;
+ }
+
+ public bool GetMailType(int index)
+ {
+ var offset = Offsets.MailList + (MailLength * index);
+ return Data[offset + Mail.MailType01] == 0x00 && Data[offset + Mail.MailType02] == 0x01; // Letter or boxed type
+ }
+ public void SetMailType(int index, bool letter)
+ {
+ var offset = Offsets.MailList + (MailLength * index);
+ if (letter) { Data[offset + Mail.MailType01] = 0x00; Data[offset + Mail.MailType02] = 0x01; } // Letter type
+ else { Data[offset + Mail.MailType01] = 0x01; Data[offset + Mail.MailType02] = 0x00; } // Boxed item type
+ }
+
+ public string GetLetterToLineText(int index)
+ {
+ return GetString(Offsets.MailList + (MailLength * index) + Mail.LetterToLineText, Mail.LetterToTextLength);
+ }
+ public void SetLetterToLineText(int index, string toLineText)
+ {
+ var textBytes = GetBytes(toLineText, Mail.LetterToTextLength);
+ textBytes.CopyTo(Data[(Offsets.MailList + (MailLength * index) + Mail.LetterToLineText)..]);
+ }
+ public string GetLetterMessageText(int index)
+ {
+ return GetString(Offsets.MailList + (MailLength * index) + Mail.LetterMessageText, Mail.LetterMessageTextLength);
+ }
+ public void SetLetterMessageText(int index, string messageText)
+ {
+ var textBytes = GetBytes(messageText, Mail.LetterMessageTextLength);
+ textBytes.CopyTo(Data[(Offsets.MailList + (MailLength * index) + Mail.LetterMessageText)..]);
+ }
+ public string GetLetterFromLineText(int index)
+ {
+ return GetString(Offsets.MailList + (MailLength * index) + Mail.LetterFromLineText, Mail.LetterFromTextLength);
+ }
+ public void SetLetterFromLineText(int index, string fromLineText)
+ {
+ var textBytes = GetBytes(fromLineText, Mail.LetterFromTextLength);
+ textBytes.CopyTo(Data[(Offsets.MailList + (MailLength * index) + Mail.LetterFromLineText)..]);
+ }
+ public ushort GetMailStationerySkin(int index)
+ {
+ var offset = Offsets.MailList + (MailLength * index) + Mail.MailStationerySkin;
+ return ReadUInt16LittleEndian(Data.Slice(offset, 2));
+ }
+ public void SetMailStationerySkin(int index, ushort skinCode)
+ {
+ var offset = Offsets.MailList + (MailLength * index) + Mail.MailStationerySkin;
+ WriteUInt16LittleEndian(Data.Slice(offset, 2), skinCode);
+ }
+
+ public byte GetPostBoxSortIndex(int index)
+ {
+ return Data[Offsets.MailList + (MailLength * index) + Mail.PostBoxSortIndex];
+ }
+ public void SetPostBoxSortIndex(int index, byte sortIndex)
+ {
+ Data[Offsets.MailList + (MailLength * index) + Mail.PostBoxSortIndex] = sortIndex;
+ }
+
+ public string GetMailLanguageString(int index)
+ {
+ return Encoding.UTF8.GetString(Data.Slice(Offsets.MailList + (MailLength * index) + Mail.LanguageString, 5));
+ }
+
+ ///
+ /// Sets or clears the language string for a mail item at the specified index.
+ ///
+ /// The zero-based index of the mail item in the postbox.
+ /// The IETF BCP 47 language tag string to set (e.g., "en-US", "ja-JP").
+ /// If true, sets the language string; if false, clears the language data.
+ public void SetMailLanguageString(int index, string languageString, bool player)
+ {
+ var langOffset = Offsets.MailList + (MailLength * index) + Mail.LanguageString;
+ if (player) { GetBytes(languageString, 5).CopyTo(Data[langOffset..]); }
+ else { Data.Slice(langOffset, 5).Clear(); }
+ }
+
+ #endregion
+}
\ No newline at end of file
diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets.cs
index 3cc7194..acb41b8 100644
--- a/NHSE.Core/Save/Offsets/MainSaveOffsets.cs
+++ b/NHSE.Core/Save/Offsets/MainSaveOffsets.cs
@@ -123,17 +123,13 @@ public static DesignPattern ReadPatternAtOffset(ReadOnlySpan data, int off
return new DesignPattern(v);
}
- public void WritePattern(DesignPattern p, Span data, int index, Span playerID, Span townID)
+ public void WritePattern(DesignPattern p, Span data, int index)
{
if ((uint)index >= PatternCount)
throw new ArgumentOutOfRangeException(nameof(index));
- playerID.CopyTo(p.Data[0x54..]); // overwrite playerID bytes so player owns
- townID.CopyTo(p.Data[0x38..]); // overwrite townID bytes so player owns
- ReadOnlySpan wipeflag = [0x02, 0xEE, 0x00, 0x00]; // wipe so player owns
- wipeflag.CopyTo(p.Data[0x70..]);
p.Data.CopyTo(data[(LandMyDesign + (index * DesignPattern.SIZE))..]);
ReadOnlySpan editedflag = [0x00];
- editedflag.CopyTo(data[(PatternsEditFlagStart + index)..]); // set edited flag for name import to work
+ editedflag.CopyTo(data[(PatternsEditFlagStart + index)..]); // set edited flag for designs name import to be correct in game
}
public DesignPatternPRO ReadPatternPRO(ReadOnlySpan data, int index)
@@ -150,17 +146,12 @@ public static DesignPatternPRO ReadPatternPROAtOffset(ReadOnlySpan data, i
return new DesignPatternPRO(v);
}
- public void WritePatternPRO(DesignPatternPRO p, Span data, int index, Span playerID, Span townID)
+ public void WritePatternPRO(DesignPatternPRO p, Span data, int index)
{
if ((uint)index >= PatternCount)
- throw new ArgumentOutOfRangeException(nameof(index));
- playerID.CopyTo(p.Data[0x54..]); // overwrite playerID bytes so player owns
- townID.CopyTo(p.Data[0x38..]); // overwrite townID bytes so player owns
- ReadOnlySpan wipeflag = [0x00, 0x00, 0x00, 0x00]; // wipe so player owns
- wipeflag.CopyTo(p.Data[0x70..]);
p.Data.CopyTo(data[(PatternsPRO + (index * DesignPatternPRO.SIZE))..]);
ReadOnlySpan editedflag = [0x00];
- editedflag.CopyTo(data[(PatternsProEditFlagStart + index)..]); // set edited flag for name import to work
+ editedflag.CopyTo(data[(PatternsProEditFlagStart + index)..]); // set edited flag for designs name import to be correct in game
}
public IVillager ReadVillager(ReadOnlySpan data, int index)
diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets.cs
new file mode 100644
index 0000000..9acba5a
--- /dev/null
+++ b/NHSE.Core/Save/Offsets/PostBoxOffsets.cs
@@ -0,0 +1,55 @@
+using System;
+
+namespace NHSE.Core;
+
+///
+/// Offset info and object retrieval logic for
+///
+public abstract class PostBoxOffsets
+{
+ public abstract int s_7b602b39 { get; }
+ public abstract int MailList { get; }
+ public abstract int FontTable { get; }
+ public abstract int LatestUniqueId { get; }
+
+ public static PostBoxOffsets GetOffsets(FileHeaderInfo Info)
+ {
+ var rev = Info.GetKnownRevisionIndex();
+ return rev switch
+ {
+ 0 => new PostBoxOffsets10(),
+ 1 => new PostBoxOffsets11(),
+ 2 => new PostBoxOffsets11(),
+ 3 => new PostBoxOffsets11(),
+ 4 => new PostBoxOffsets11(),
+ 5 => new PostBoxOffsets11(),
+ 6 => new PostBoxOffsets12(),
+ 7 => new PostBoxOffsets12(),
+ 8 => new PostBoxOffsets13(),
+ 9 => new PostBoxOffsets13(),
+ 10 => new PostBoxOffsets14(),
+ 11 => new PostBoxOffsets14(),
+ 12 => new PostBoxOffsets14(),
+ 13 => new PostBoxOffsets15(),
+ 14 => new PostBoxOffsets15(),
+ 15 => new PostBoxOffsets16(),
+ 16 => new PostBoxOffsets17(),
+ 17 => new PostBoxOffsets18(),
+ 18 => new PostBoxOffsets19(),
+ 19 => new PostBoxOffsets110(),
+ 20 => new PostBoxOffsets111(),
+ 21 => new PostBoxOffsets111(),
+ 22 => new PostBoxOffsets20(),
+ 23 => new PostBoxOffsets20(),
+ 24 => new PostBoxOffsets20(),
+ 25 => new PostBoxOffsets20(),
+ 26 => new PostBoxOffsets20(),
+ 27 => new PostBoxOffsets20(),
+ 28 => new PostBoxOffsets20(),
+ 29 => new PostBoxOffsets20(),
+ 30 => new PostBoxOffsets20(),
+ 31 => new PostBoxOffsets30(),
+ _ => throw new IndexOutOfRangeException("Unknown revision!" + Environment.NewLine + Info),
+ };
+ }
+}
\ No newline at end of file
diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets10.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets10.cs
new file mode 100644
index 0000000..6b13251
--- /dev/null
+++ b/NHSE.Core/Save/Offsets/PostBoxOffsets10.cs
@@ -0,0 +1,16 @@
+using System;
+
+namespace NHSE.Core;
+
+///
+///
+///
+public sealed class PostBoxOffsets10 : PostBoxOffsets
+{
+ // GSavePostBox
+ private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4
+ public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container
+ public override int MailList => GSaveVersion + 0x108; // Beginning of mail list
+ public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup
+ public override int LatestUniqueId => 0xb44578; // Next post index slot
+}
\ No newline at end of file
diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets11.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets11.cs
new file mode 100644
index 0000000..899dd41
--- /dev/null
+++ b/NHSE.Core/Save/Offsets/PostBoxOffsets11.cs
@@ -0,0 +1,16 @@
+using System;
+
+namespace NHSE.Core;
+
+///
+///
+///
+public sealed class PostBoxOffsets11 : PostBoxOffsets
+{
+ // GSavePostBox
+ private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4
+ public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container
+ public override int MailList => GSaveVersion + 0x110; // Beginning of mail list
+ public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup
+ public override int LatestUniqueId => 0xb44580; // Next post index slot
+}
\ No newline at end of file
diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets110.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets110.cs
new file mode 100644
index 0000000..967279d
--- /dev/null
+++ b/NHSE.Core/Save/Offsets/PostBoxOffsets110.cs
@@ -0,0 +1,16 @@
+using System;
+
+namespace NHSE.Core;
+
+///
+///
+///
+public sealed class PostBoxOffsets110 : PostBoxOffsets
+{
+ // GSavePostBox
+ private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4
+ public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container
+ public override int MailList => GSaveVersion + 0x110; // Beginning of mail list
+ public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup
+ public override int LatestUniqueId => 0x47420; // Next post index slot
+}
\ No newline at end of file
diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets111.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets111.cs
new file mode 100644
index 0000000..7b32d14
--- /dev/null
+++ b/NHSE.Core/Save/Offsets/PostBoxOffsets111.cs
@@ -0,0 +1,16 @@
+using System;
+
+namespace NHSE.Core;
+
+///
+///
+///
+public sealed class PostBoxOffsets111 : PostBoxOffsets
+{
+ // GSavePostBox
+ private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4
+ public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container
+ public override int MailList => GSaveVersion + 0x110; // Beginning of mail list
+ public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup
+ public override int LatestUniqueId => 0x47420; // Next post index slot
+}
\ No newline at end of file
diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets12.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets12.cs
new file mode 100644
index 0000000..1a895f2
--- /dev/null
+++ b/NHSE.Core/Save/Offsets/PostBoxOffsets12.cs
@@ -0,0 +1,16 @@
+using System;
+
+namespace NHSE.Core;
+
+///
+///
+///
+public sealed class PostBoxOffsets12 : PostBoxOffsets
+{
+ // GSavePostBox
+ private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4
+ public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container
+ public override int MailList => GSaveVersion + 0x110; // Beginning of mail list
+ public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup
+ public override int LatestUniqueId => 0xb44580; // Next post index slot
+}
\ No newline at end of file
diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets13.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets13.cs
new file mode 100644
index 0000000..d805e7e
--- /dev/null
+++ b/NHSE.Core/Save/Offsets/PostBoxOffsets13.cs
@@ -0,0 +1,16 @@
+using System;
+
+namespace NHSE.Core;
+
+///
+///
+///
+public sealed class PostBoxOffsets13 : PostBoxOffsets
+{
+ // GSavePostBox
+ private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4
+ public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container
+ public override int MailList => GSaveVersion + 0x110; // Beginning of mail list
+ public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup
+ public override int LatestUniqueId => 0xb44580; // Next post index slot
+}
\ No newline at end of file
diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets14.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets14.cs
new file mode 100644
index 0000000..ad073ba
--- /dev/null
+++ b/NHSE.Core/Save/Offsets/PostBoxOffsets14.cs
@@ -0,0 +1,16 @@
+using System;
+
+namespace NHSE.Core;
+
+///
+///
+///
+public sealed class PostBoxOffsets14 : PostBoxOffsets
+{
+ // GSavePostBox
+ private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4
+ public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container
+ public override int MailList => GSaveVersion + 0x110; // Beginning of mail list
+ public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup
+ public override int LatestUniqueId => 0xb44580; // Next post index slot
+}
\ No newline at end of file
diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets15.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets15.cs
new file mode 100644
index 0000000..bcb03bc
--- /dev/null
+++ b/NHSE.Core/Save/Offsets/PostBoxOffsets15.cs
@@ -0,0 +1,16 @@
+using System;
+
+namespace NHSE.Core;
+
+///
+///
+///
+public sealed class PostBoxOffsets15 : PostBoxOffsets
+{
+ // GSavePostBox
+ private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4
+ public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container
+ public override int MailList => GSaveVersion + 0x110; // Beginning of mail list
+ public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup
+ public override int LatestUniqueId => 0xb44580; // Next post index slot
+}
\ No newline at end of file
diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets16.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets16.cs
new file mode 100644
index 0000000..16a420c
--- /dev/null
+++ b/NHSE.Core/Save/Offsets/PostBoxOffsets16.cs
@@ -0,0 +1,16 @@
+using System;
+
+namespace NHSE.Core;
+
+///
+///
+///
+public sealed class PostBoxOffsets16 : PostBoxOffsets
+{
+ // GSavePostBox
+ private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4
+ public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container
+ public override int MailList => GSaveVersion + 0x110; // Beginning of mail list
+ public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup
+ public override int LatestUniqueId => 0xb44580; // Next post index slot
+}
\ No newline at end of file
diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets17.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets17.cs
new file mode 100644
index 0000000..2f60122
--- /dev/null
+++ b/NHSE.Core/Save/Offsets/PostBoxOffsets17.cs
@@ -0,0 +1,16 @@
+using System;
+
+namespace NHSE.Core;
+
+///
+///
+///
+public sealed class PostBoxOffsets17 : PostBoxOffsets
+{
+ // GSavePostBox
+ private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4
+ public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container
+ public override int MailList => GSaveVersion + 0x110; // Beginning of mail list
+ public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup
+ public override int LatestUniqueId => 0x47420; // Next post index slot
+}
\ No newline at end of file
diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets18.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets18.cs
new file mode 100644
index 0000000..9097429
--- /dev/null
+++ b/NHSE.Core/Save/Offsets/PostBoxOffsets18.cs
@@ -0,0 +1,16 @@
+using System;
+
+namespace NHSE.Core;
+
+///
+///
+///
+public sealed class PostBoxOffsets18 : PostBoxOffsets
+{
+ // GSavePostBox
+ private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4
+ public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container
+ public override int MailList => GSaveVersion + 0x110; // Beginning of mail list
+ public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup
+ public override int LatestUniqueId => 0x47420; // Next post index slot
+}
\ No newline at end of file
diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets19.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets19.cs
new file mode 100644
index 0000000..80d44d5
--- /dev/null
+++ b/NHSE.Core/Save/Offsets/PostBoxOffsets19.cs
@@ -0,0 +1,16 @@
+using System;
+
+namespace NHSE.Core;
+
+///
+///
+///
+public sealed class PostBoxOffsets19 : PostBoxOffsets
+{
+ // GSavePostBox
+ private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4
+ public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container
+ public override int MailList => GSaveVersion + 0x110; // Beginning of mail list
+ public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup
+ public override int LatestUniqueId => 0x47420; // Next post index slot
+}
\ No newline at end of file
diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets20.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets20.cs
new file mode 100644
index 0000000..90fbd2f
--- /dev/null
+++ b/NHSE.Core/Save/Offsets/PostBoxOffsets20.cs
@@ -0,0 +1,16 @@
+using System;
+
+namespace NHSE.Core;
+
+///
+///
+///
+public sealed class PostBoxOffsets20 : PostBoxOffsets
+{
+ // GSavePostBox
+ private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4
+ public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container
+ public override int MailList => GSaveVersion + 0x110; // Beginning of mail list
+ public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup
+ public override int LatestUniqueId => 0x47420; // Next post index slot
+}
\ No newline at end of file
diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets30.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets30.cs
new file mode 100644
index 0000000..33687ee
--- /dev/null
+++ b/NHSE.Core/Save/Offsets/PostBoxOffsets30.cs
@@ -0,0 +1,16 @@
+using System;
+
+namespace NHSE.Core;
+
+///
+///
+///
+public sealed class PostBoxOffsets30 : PostBoxOffsets
+{
+ // GSavePostBox
+ private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4
+ public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container
+ public override int MailList => GSaveVersion + 0x110; // Beginning of mail list
+ public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup
+ public override int LatestUniqueId => 0x47420; // Next post index slot
+}
\ No newline at end of file
diff --git a/NHSE.Core/Strings/GameStrings.cs b/NHSE.Core/Strings/GameStrings.cs
index 0014ea0..8b5d729 100644
--- a/NHSE.Core/Strings/GameStrings.cs
+++ b/NHSE.Core/Strings/GameStrings.cs
@@ -14,8 +14,10 @@ public sealed class GameStrings : IRemakeString
public readonly string[] itemlist;
public readonly string[] itemlistdisplay;
public readonly string[] villagerDefaultPhrases;
+ public readonly string[] mail;
public readonly Dictionary VillagerMap;
public readonly Dictionary VillagerDefaultPhraseMap;
+ public readonly Dictionary MailMap;
public readonly List ItemDataSource;
public readonly Dictionary InternalNameTranslation = [];
@@ -36,6 +38,8 @@ public GameStrings(string l)
itemlist = Get("item");
itemlistdisplay = GetItemDisplayList(itemlist);
ItemDataSource = CreateItemDataSource(itemlistdisplay);
+ mail = Get("mail");
+ MailMap = GetMap(mail);
BodyParts = GetDictionary(Get("body_parts"));
BodyColor = GetDictionary(Get("body_color"));
@@ -116,6 +120,8 @@ public List CreateItemDataSource(IReadOnlyCollection VillagerDefaultPhraseMap.GetValueOrDefault(name, name); // I know it shouldn't be `name` but I have to return something
+ public string GetMail(string name) => MailMap.GetValueOrDefault(name, name);
+
public static string[] GetItemDisplayList(ReadOnlySpan arr)
{
var items = arr.ToArray();
diff --git a/NHSE.Core/Structures/Designs/DesignPattern.cs b/NHSE.Core/Structures/Designs/DesignPattern.cs
index 86de1df..7d2133f 100644
--- a/NHSE.Core/Structures/Designs/DesignPattern.cs
+++ b/NHSE.Core/Structures/Designs/DesignPattern.cs
@@ -13,6 +13,7 @@ public sealed class DesignPattern(Memory Raw) : IVillagerOrigin
public const int SIZE = 0x2A8; // 3 bytes unused at end
private const int PersonalOffset = 0x38;
+ private const int UsageCompatibilityOffset = 0x70;
private const int PaletteDataStart = 0x78;
public const int PaletteColorCount = 15; // y not 16???
private const int PaletteColorSize = 3; // R, G, B
@@ -66,6 +67,12 @@ public string PlayerName
set => StringUtil.GetBytes(value, 10).CopyTo(Data[(PersonalOffset + 0x20)..]);
}
+ public uint UsageCompatibility
+ {
+ get => ReadUInt32LittleEndian(Data[UsageCompatibilityOffset..]);
+ set => WriteUInt32LittleEndian(Data[UsageCompatibilityOffset..], value);
+ }
+
public Span GetPlayerIdentity() => Data.Slice(PersonalOffset + 0x1C, 4 + 20);
///
diff --git a/NHSE.Core/Structures/Designs/DesignPatternPRO.cs b/NHSE.Core/Structures/Designs/DesignPatternPRO.cs
index 02779ff..0f0d82b 100644
--- a/NHSE.Core/Structures/Designs/DesignPatternPRO.cs
+++ b/NHSE.Core/Structures/Designs/DesignPatternPRO.cs
@@ -14,6 +14,7 @@ public sealed class DesignPatternPRO(Memory Raw) : IVillagerOrigin
public const int SIZE = 0x8A8; // 3 bytes unused at end
public const int SheetCount = 4;
private const int PersonalOffset = 0x38;
+ private const int UsageCompatibilityOffset = 0x70;
private const int PaletteDataStart = 0x78;
public const int PaletteColorCount = 15; // y not 16???
private const int PaletteColorSize = 3; // R, G, B
@@ -67,6 +68,12 @@ public string PlayerName
set => StringUtil.GetBytes(value, 10).CopyTo(Data[(PersonalOffset + 0x20)..]);
}
+ public uint UsageCompatibility
+ {
+ get => ReadUInt32LittleEndian(Data[UsageCompatibilityOffset..]);
+ set => WriteUInt32LittleEndian(Data[UsageCompatibilityOffset..], value);
+ }
+
public Span GetPlayerIdentity() => Data.Slice(PersonalOffset + 0x1C, 4 + 20);
public void SetPixelAtIndex(int sheet, int index, int value)
diff --git a/NHSE.Core/Structures/Item/ItemWrapping.cs b/NHSE.Core/Structures/Item/ItemWrapping.cs
index ca0d877..f4dd928 100644
--- a/NHSE.Core/Structures/Item/ItemWrapping.cs
+++ b/NHSE.Core/Structures/Item/ItemWrapping.cs
@@ -1,4 +1,6 @@
-namespace NHSE.Core;
+using System.Collections.Generic;
+
+namespace NHSE.Core;
///
/// Type of wrapping an has
@@ -12,4 +14,76 @@ public enum ItemWrapping : byte
// These values are handled with special logic. Only 2 bits are allocated to be stored.
Festive = 4,
+}
+
+///
+/// Provides extended wrapping and box skin information for items.
+///
+///
+/// Contains lookup dictionaries for item wrapping paper colors and delivery box types.
+///
+public sealed class ItemWrappingExtended
+{
+ ///
+ /// Dictionary mapping wrapping skin identifiers to their corresponding .
+ ///
+ ///
+ /// Keys are hexadecimal identifiers representing different wrapping paper colors and styles.
+ /// Includes cultural variants (Lucky Red Envelope, Bokjumeoni Pouch, Otoshidama Envelope).
+ /// Can return a string for the skin name, or an index for UI ordering or selection use.
+ ///
+ // TODO: Build new string resource: "text_wrappers_xx.txt" and convert WrappingInfo.name to a key to lookup against it for translations.
+ public static readonly Dictionary ItemWrappingSkin = new() //
+ {
+ { 0x00, new("wrap00", 0) },
+ { 0x02, new("wrap01", 1) },
+ { 0x01, new("wrap02", 2) },
+ { 0x05, new("wrap03", 3) },
+ { 0x09, new("wrap04", 4) },
+ { 0x0D, new("wrap05", 5) },
+ { 0x11, new("wrap06", 6) },
+ { 0x15, new("wrap07", 7) },
+ { 0x19, new("wrap08", 8) },
+ { 0x1D, new("wrap09", 9) },
+ { 0x21, new("wrap10", 10) },
+ { 0x25, new("wrap11", 11) },
+ { 0x29, new("wrap12", 12) },
+ { 0x2D, new("wrap13", 13) },
+ { 0x31, new("wrap14", 14) },
+ { 0x35, new("wrap15", 15) },
+ { 0x39, new("wrap16", 16) },
+ { 0x3D, new("wrap17", 17) },
+ { 0x3F, new("wrap18", 18) },
+ { 0x33, new("wrap19", 19) },
+ { 0x37, new("wrap20", 20) },
+ { 0x3B, new("wrap21", 21) },
+ };
+ ///
+ /// Represents information about a wrapping paper type.
+ ///
+ /// The display name of the wrapping paper.
+ /// The index used for UI ordering or selection.
+ public record WrappingInfo(string name, int index);
+
+ ///
+ /// Dictionary mapping box skin identifiers to their corresponding .
+ ///
+ ///
+ /// Keys are hexadecimal identifiers representing different delivery boxes.
+ /// Includes service-specific boxes (Nook Shopping Box, Hotel Box, Paradise Planning Box).
+ ///
+ // TODO: Build new string resource: "text_wrappers_xx.txt" and convert WrappingInfo.name to a key to lookup against it for translations.
+ public static readonly Dictionary ItemBoxSkin = new()
+ {
+ { 0x00, new("box00", 0) },
+ { 0x43, new("box01", 1) },
+ { 0x6B, new("box02", 2) },
+ { 0x6F, new("box03", 3) },
+ };
+ ///
+ /// Represents information about a delivery box type.
+ ///
+ /// The display name of the box type.
+ /// The index used for UI ordering or selection.
+ public record BoxInfo(string name, int index);
}
\ No newline at end of file
diff --git a/NHSE.Core/Structures/Mail/Mail.cs b/NHSE.Core/Structures/Mail/Mail.cs
new file mode 100644
index 0000000..342d662
--- /dev/null
+++ b/NHSE.Core/Structures/Mail/Mail.cs
@@ -0,0 +1,220 @@
+using System.Collections.Generic;
+
+namespace NHSE.Core;
+
+public sealed class Mail
+{
+ public const int SIZE = 0x3C8;
+ public const int MaxSlots = 299; // zero based (300 slots)
+
+ public const int ReadUnread = 0x0; // 03 = unread, 04 = read
+ public const int LetterFavourited = 0x1; // 00 = not marked fav, 01 = marked fav
+
+ public const int PlayerSenderIslandID = 0x4; // Used if sender is a player
+ public const int PlayerSenderIslandName = 0x8;
+ public const int NPCSenderSpeciesID = 0x4; // Used if sender is a villager or NPC
+ public const int NPCSenderVariantID = 0x5;
+ public const int NPCSenderIslandID = 0x8;
+ public const int NPCSenderIslandName = 0xC;
+
+ public const int SenderID = 0x20; // Sender player identity 4 byte ID or 00000000.. = NPC, 02000000.. = villager
+ public const int SenderName = 0x24; // Usual 20 byte string (10 char)
+
+ public const int SenderType = 0x5C; // 00 = player, 01 = villager, 02 = NPC
+
+ public const int ReceiverIslandID = 0x60; // Receiver island identity
+ public const int ReceiverIslandName = 0x64;
+ public const int ReceiverPlayerID = 0x7C; // Receiver player identity
+ public const int ReceiverPlayerName = 0x80;
+
+ public const int TimeStamp = 0xBC; // Timestamp start
+
+ public const int AttachedItemID = 0xC0; // ID of item attached to mail, FFFE(le) if collected, type used is cleared
+ public const int MailItemWrappingType = 0xC3; // Box type used for mail - cleared when item taken
+
+ public const int MailType01 = 0xC8; // If boxed item only, then = 01 and MailType02 = 00
+ public const int MailType02 = 0xCC; // If letter item, then = 01 and MailType01 = 00
+
+ public const int LetterToLineText = 0xCE; // Max size for text in the to line up top (47 char) weird size
+ public const int LetterToTextLength = 47; // Max renderable, not sure about official limit
+ public const int LetterMessageText = 0x12E; // MSG start
+ public const int LetterMessageTextLength = 239; // Max renderable size is 239 char despite official input UI limit of 168 char
+ public const int LetterMessageTextLengthOfficial = 168;
+ public const int LetterFromLineText = 0x30E; // Max size for text in the from line up top (47 char) weird size
+ public const int LetterFromTextLength = 47; // Max renderable, not sure about official limit
+
+ public const int MailStationerySkin = 0x36E; // Skin code (2 byte le int)
+
+ public const int PostBoxSortIndex = 0x374; // PostBox index/slot 1->300(0->299)[0x0->0x12B] - position in postbox, bottom up
+
+ public const int LanguageString = 0x390; // When sent by a player, shows language flag, like 'en-GB' otherwise not used
+
+ ///
+ /// Maps NPC sender IDs to their corresponding data, including image identifiers, name conversions, and mapping indices.
+ ///
+ ///
+ /// The dictionary key represents the NPC's unique identifier stored at offset in the mail data.
+ /// Each entry contains image asset names, localization keys, and index values for various in-game NPCs and services
+ /// such as Tom Nook, Nook Inc., villagers, and special characters.
+ ///
+ public record SenderNPCInfo(string Image, string NameConversion, int MappingIndex);
+ public static readonly Dictionary SenderNPCData = new()
+ {
+ { 22, new("rco", "rco", 0) }, // 0x1600 Tom Nook
+ { 25, new("rco", "npc_nookinc", 1) }, // 0x1900 Nook Inc.
+ { 40, new("bey", "bey", 2) }, // 0x2800 C.J.
+ { 41, new("chy", "chy", 3) }, // 0x2900 Flick
+ { 42, new("pyn", "pyn", 4) }, // 0x2A00 Zipper
+ { 43, new("fox", "fox", 5) }, // 0x2B00 Redd
+ { 44, new("alp", "alp", 6) }, // 0x2C00 Reese & Cyrus
+ { 45, new("gulB", "gulB", 7) }, // 0x2D00 Gullivarrr
+ { 46, new("tap", "tap", 8) }, // 0x2E00 Luna
+ { 47, new("pkn", "pkn", 9) }, // 0x2F00 Jack
+ { 48, new("xct", "xct", 10) }, // 0x3000 Rover
+ { 50, new("bpt", "bpt", 11) }, // 0x3200 Katrina
+ { 51, new("slo", "slo", 12) }, // 0x3300 Lief
+ { 52, new("spn", "spn", 13) }, // 0x3400 Harvey
+ { 53, new("man", "man", 14) }, // 0x3500 Wardell
+ { 54, new("OneroomCardboard", "npc_paradiseplanning", 15) }, // 0x3600 Paradise Planning
+ { 55, new("otg", "otg", 16) }, // 0x3700 Lottie
+ { 56, new("mnc", "mnc", 17) }, // 0x3800 Niko
+ { 57, new("kpg", "npc_hotel", 18) }, // 0x3900 Hotel
+ { 60, new("gul", "gul", 19) }, // 0x3C00 Gulliver
+ { 61, new("gstA", "gstA", 20) }, // 0x3D00 Wisp
+ { 62, new("hgc", "hgc", 21) }, // 0x3E00 Label
+ { 63, new("tkkA", "tkkA", 22) }, // 0x3F00 K.K.
+ { 64, new("boc", "boc", 23) }, // 0x4000 Daisy Mae
+ { 65, new("SnowCrystal", "npc_snowboy", 24) }, // 0x4100 Snowboy
+ { 66, new("bey", "bey", 25) }, // 0x4200 C.J (Duplicate...?)
+ { 67, new("chy", "chy", 26) }, // 0x4300 Flick (Duplicate...?)
+ { 68, new("mol", "mol", 27) }, // 0x4400 Resetti
+ { 80, new("ott", "npc_hha", 28) }, // 0x5000 Happy Home Academy Ranking
+ { 81, new("Leaf", "npc_nintendo", 29) }, // 0x5100 Nintendo & Happy Home Academy Welcome
+ { 82, new("MoneyBag010", "npc_bankofnook", 30) }, // 0x5200 Bank of Nook, [island]
+ { 84, new("Cardboard", "npc_nookshopping", 31) }, // 0x5400 Nook Shopping
+ { 85, new("PlaneTicket", "npc_nookmileageprogram", 32) }, // 0x5500 Nook Mileage Program
+ { 86, new("Post", "npc_mom", 33) }, // 0x5600 Mom
+ { 87, new("dod", "npc_dodoairlines", 34) }, // 0x5700 Dodo Airlines
+ { 88, new("owl", "npc_thefarwaymuseum", 35) }, // 0x5800 The Farway Museum
+ { 89, new("Leaf", "npc_nooklinkadmins", 36) } // 0x5900 NookLink Admins
+ };
+
+ public static readonly Dictionary BCP47LanguageString = new()
+ {
+ { "en-US", 0 },
+ { "en-GB", 1 },
+ { "ja-JP", 2 },
+ { "de-DE", 3 },
+ { "es-ES", 4 },
+ { "fr-FR", 5 },
+ { "it-IT", 6 },
+ { "ko-KR", 7 },
+ { "zh-CN", 8 },
+ { "zh-TW", 9 },
+ };
+
+ public static List NPCTypeList = new List
+ {
+ "Player",
+ "Villager",
+ "NPC"
+ };
+
+ public static List MailTypeList = new List
+ {
+ "Boxed Item",
+ "Letter",
+ };
+
+ ///
+ /// Maps stationery skin IDs to their corresponding data, including the display name and mapping index.
+ ///
+ ///
+ /// The dictionary key represents the stationery skin code stored at offset in the mail data.
+ /// Each entry contains the localized card name and an index value for various letter stationery designs
+ /// such as holiday cards, event cards, and special NPC-branded stationery.
+ ///
+ public record StationeryInfo(string name, int index);
+ public static readonly Dictionary LetterStationerySkin = new()
+ {
+ // Multiple sources on official total count of skins...
+ // 68 total according to most wikis, 64 on others.
+ // 75 according to datamine (including unused(?) T&T logo one)
+ { 0, new("mail00", 0) },
+ { 356, new("mail01", 1) },
+ { 357, new("mail02", 2) },
+ { 358, new("mail03", 3) },
+ { 359, new("mail04", 4) },
+ { 360, new("mail05", 5) },
+ { 361, new("mail06", 6) },
+ { 362, new("mail07", 7) },
+ { 363, new("mail08", 8) },
+ { 364, new("mail09", 9) },
+ { 365, new("mail10", 10) },
+ { 366, new("mail11", 11) },
+ { 367, new("mail12", 12) },
+ { 368, new("mail13", 13) },
+ { 370, new("mail14", 14) },
+ { 371, new("mail15", 15) },
+ { 372, new("mail16", 16) },
+ { 373, new("mail17", 17) },
+ { 374, new("mail18", 18) },
+ { 375, new("mail19", 19) },
+ { 376, new("mail20", 20) },
+ { 377, new("mail21", 21) },
+ { 378, new("mail22", 22) },
+ { 379, new("mail23", 23) },
+ { 380, new("mail24", 24) },
+ { 381, new("mail25", 25) },
+ { 382, new("mail26", 26) },
+ { 383, new("mail27", 27) },
+ { 384, new("mail28", 28) },
+ { 385, new("mail29", 29) },
+ { 386, new("mail30", 30) },
+ { 387, new("mail31", 31) },
+ { 388, new("mail32", 32) },
+ { 389, new("mail33", 33) },
+ { 390, new("mail34", 34) },
+ { 391, new("mail35", 35) },
+ { 392, new("mail36", 36) },
+ { 393, new("mail37", 37) },
+ { 394, new("mail38", 38) },
+ { 395, new("mail39", 39) },
+ { 396, new("mail40", 40) },
+ { 397, new("mail41", 41) },
+ { 398, new("mail42", 42) },
+ { 399, new("mail43", 43) },
+ { 402, new("mail44", 44) },
+ { 403, new("mail45", 45) },
+ { 404, new("mail46", 46) },
+ { 405, new("mail47", 47) },
+ { 406, new("mail48", 48) },
+ { 407, new("mail49", 49) },
+ { 408, new("mail50", 50) },
+ { 409, new("mail51", 51) },
+ { 410, new("mail52", 52) },
+ { 411, new("mail53", 53) },
+ { 412, new("mail54", 54) },
+ { 413, new("mail55", 55) },
+ { 414, new("mail56", 56) },
+ { 416, new("mail57", 57) },
+ { 427, new("mail58", 58) },
+ { 428, new("mail59", 59) },
+ { 429, new("mail60", 60) },
+ { 430, new("mail61", 61) },
+ { 431, new("mail62", 62) },
+ { 432, new("mail63", 63) },
+ { 433, new("mail64", 64) },
+ { 434, new("mail65", 65) },
+ { 435, new("mail66", 66) },
+ { 437, new("mail67", 67) },
+ { 438, new("mail68", 68) },
+ { 439, new("mail69", 69) },
+ { 440, new("mail70", 70) },
+ { 443, new("mail71", 71) },
+ { 444, new("mail72", 72) },
+ { 445, new("mail73", 73) },
+ { 448, new("mail74", 74) },
+ };
+}
+
diff --git a/NHSE.WinForms/Controls/ItemEditor.cs b/NHSE.WinForms/Controls/ItemEditor.cs
index 2a92be3..90be744 100644
--- a/NHSE.WinForms/Controls/ItemEditor.cs
+++ b/NHSE.WinForms/Controls/ItemEditor.cs
@@ -16,6 +16,7 @@ public partial class ItemEditor : UserControl
private bool Loading = true;
private bool CanExtend;
+ private bool SupressedMode = false;
public ItemEditor()
{
@@ -36,7 +37,7 @@ public ItemEditor()
private IReadOnlyList AllItems = [];
- public void Initialize(IReadOnlyList items, bool canExtend = false)
+ public void Initialize(IReadOnlyList items, bool canExtend = false, bool supressed = false)
{
CHK_IsExtension.Visible = CanExtend = canExtend;
@@ -55,6 +56,8 @@ public void Initialize(IReadOnlyList items, bool canExtend = false)
LoadItem(Item.NO_ITEM);
AllItems = items;
+
+ SupressedMode = supressed;
}
public Item LoadItem(Item item)
@@ -163,6 +166,20 @@ public Item SetItem(Item item)
return item;
}
+ ///
+ /// Hides the item wrapping UI controls from the editor for handling via custom UIs.
+ ///
+ ///
+ /// This method sets the visibility of both the wrapped checkbox ()
+ /// and the wrapped options panel () to .
+ /// Use this when wrapping information should not be displayed or edited by the standard controls.
+ ///
+ public void SupressWrappedInfo()
+ {
+ CHK_Wrapped.Visible = false;
+ FLP_Wrapped.Visible = false;
+ }
+
private Item SetExtensionItem(Item item)
{
var id = (ushort)WinFormsUtil.GetIndex(CB_ItemID);
@@ -210,6 +227,7 @@ private void CB_ItemID_SelectedValueChanged(object sender, EventArgs e)
L_RemakeFabric.Text = fabric;
L_RemakeFabric.Visible = fabric.Length != 0;
}
+ if (SupressedMode) SupressWrappedInfo();
}
private void LoadItemTypeValues(ItemKind k, ushort index)
@@ -241,6 +259,8 @@ private void LoadItemTypeValues(ItemKind k, ushort index)
CHK_Wrapped.Visible = true;
FLP_Flag1.Visible = false;
+
+ if (SupressedMode) SupressWrappedInfo();
}
private void ToggleEditorVisibility(ItemKind k, ushort id)
diff --git a/NHSE.WinForms/Controls/VillagerEditor.cs b/NHSE.WinForms/Controls/VillagerEditor.cs
index 6f5aabe..e534399 100644
--- a/NHSE.WinForms/Controls/VillagerEditor.cs
+++ b/NHSE.WinForms/Controls/VillagerEditor.cs
@@ -14,14 +14,16 @@ public partial class VillagerEditor : UserControl
public IVillagerOrigin Origin;
private readonly HorizonSave SAV;
private int VillagerIndex = -1;
+ private int PlayerIndex = -1;
private bool Loading;
- public VillagerEditor(IVillager[] villagers, IVillagerOrigin origin, HorizonSave sav, bool hasHouses)
+ public VillagerEditor(IVillager[] villagers, IVillagerOrigin origin, HorizonSave sav, bool hasHouses, int playerIndex)
{
InitializeComponent();
Villagers = villagers;
Origin = origin;
SAV = sav;
+ PlayerIndex = playerIndex;
LoadVillagers();
B_EditHouses.Visible = hasHouses;
@@ -218,13 +220,10 @@ private void B_EditVillagerRoom_Click(object sender, EventArgs e)
private void B_EditVillagerDesign_Click(object sender, EventArgs e)
{
- var playerID = SAV.Players[0].Personal.GetPlayerIdentity(); // fetch ID for overwrite ownership
- var townID = SAV.Players[0].Personal.GetTownIdentity(); // fetch ID for overwrite ownership
+ var player = SAV.Players[PlayerIndex];
var v = Villagers[VillagerIndex];
DesignPatternPRO[] tmp = [v.Design];
- using var editor = new PatternEditorPRO(tmp);
- playerID.CopyTo(tmp[0].Data[0x54..]); // overwrite playerID bytes
- townID.CopyTo(tmp[0].Data[0x38..]); // overwrite townID bytes
+ using var editor = new PatternEditorPRO(tmp, player);
if (editor.ShowDialog() == DialogResult.OK)
v.Design = tmp[0];
}
diff --git a/NHSE.WinForms/Editor.Designer.cs b/NHSE.WinForms/Editor.Designer.cs
index 18ca5fa..e0bc700 100644
--- a/NHSE.WinForms/Editor.Designer.cs
+++ b/NHSE.WinForms/Editor.Designer.cs
@@ -51,6 +51,7 @@ private void InitializeComponent()
Tab_Map = new System.Windows.Forms.TabPage();
B_EditFruitFlower = new System.Windows.Forms.Button();
B_EditCampsite = new System.Windows.Forms.Button();
+ B_EditPlayerPostBox = new System.Windows.Forms.ToolStripMenuItem();
NUD_WeatherSeed = new System.Windows.Forms.NumericUpDown();
L_WeatherSeed = new System.Windows.Forms.Label();
B_EditDesignsTailor = new System.Windows.Forms.Button();
@@ -136,7 +137,7 @@ private void InitializeComponent()
Menu_Editor.Location = new System.Drawing.Point(0, 0);
Menu_Editor.Name = "Menu_Editor";
Menu_Editor.Padding = new System.Windows.Forms.Padding(7, 2, 0, 2);
- Menu_Editor.Size = new System.Drawing.Size(471, 25);
+ Menu_Editor.Size = new System.Drawing.Size(471, 24);
Menu_Editor.TabIndex = 0;
Menu_Editor.Text = "menuStrip1";
//
@@ -144,14 +145,14 @@ private void InitializeComponent()
//
Menu_File.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { Menu_Save });
Menu_File.Name = "Menu_File";
- Menu_File.Size = new System.Drawing.Size(39, 21);
+ Menu_File.Size = new System.Drawing.Size(37, 20);
Menu_File.Text = "File";
//
// Menu_Save
//
Menu_Save.Name = "Menu_Save";
Menu_Save.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S;
- Menu_Save.Size = new System.Drawing.Size(147, 22);
+ Menu_Save.Size = new System.Drawing.Size(138, 22);
Menu_Save.Text = "Save";
Menu_Save.Click += Menu_Save_Click;
//
@@ -159,14 +160,14 @@ private void InitializeComponent()
//
Menu_Tools.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { Menu_DumpDecrypted, Menu_VerifyHashes, Menu_LoadDecrypted, Menu_RAMEdit, Menu_ItemImages });
Menu_Tools.Name = "Menu_Tools";
- Menu_Tools.Size = new System.Drawing.Size(51, 21);
+ Menu_Tools.Size = new System.Drawing.Size(47, 20);
Menu_Tools.Text = "Tools";
//
// Menu_DumpDecrypted
//
Menu_DumpDecrypted.Name = "Menu_DumpDecrypted";
Menu_DumpDecrypted.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D;
- Menu_DumpDecrypted.Size = new System.Drawing.Size(221, 22);
+ Menu_DumpDecrypted.Size = new System.Drawing.Size(206, 22);
Menu_DumpDecrypted.Text = "Dump Decrypted";
Menu_DumpDecrypted.Click += Menu_DumpDecrypted_Click;
//
@@ -174,7 +175,7 @@ private void InitializeComponent()
//
Menu_VerifyHashes.Name = "Menu_VerifyHashes";
Menu_VerifyHashes.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.H;
- Menu_VerifyHashes.Size = new System.Drawing.Size(221, 22);
+ Menu_VerifyHashes.Size = new System.Drawing.Size(206, 22);
Menu_VerifyHashes.Text = "Verify Hashes";
Menu_VerifyHashes.Click += Menu_VerifyHashes_Click;
//
@@ -182,7 +183,7 @@ private void InitializeComponent()
//
Menu_LoadDecrypted.Name = "Menu_LoadDecrypted";
Menu_LoadDecrypted.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.L;
- Menu_LoadDecrypted.Size = new System.Drawing.Size(221, 22);
+ Menu_LoadDecrypted.Size = new System.Drawing.Size(206, 22);
Menu_LoadDecrypted.Text = "Load Decrypted";
Menu_LoadDecrypted.Click += Menu_LoadDecrypted_Click;
//
@@ -190,7 +191,7 @@ private void InitializeComponent()
//
Menu_RAMEdit.Name = "Menu_RAMEdit";
Menu_RAMEdit.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.R;
- Menu_RAMEdit.Size = new System.Drawing.Size(221, 22);
+ Menu_RAMEdit.Size = new System.Drawing.Size(206, 22);
Menu_RAMEdit.Text = "RAM Edit";
Menu_RAMEdit.Click += Menu_RAMEdit_Click;
//
@@ -198,7 +199,7 @@ private void InitializeComponent()
//
Menu_ItemImages.Name = "Menu_ItemImages";
Menu_ItemImages.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.M;
- Menu_ItemImages.Size = new System.Drawing.Size(221, 22);
+ Menu_ItemImages.Size = new System.Drawing.Size(206, 22);
Menu_ItemImages.Text = "Item Images";
Menu_ItemImages.Click += Menu_ItemImages_Click;
//
@@ -206,7 +207,7 @@ private void InitializeComponent()
//
Menu_Options.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { Menu_Language, Menu_Theme, Menu_Settings });
Menu_Options.Name = "Menu_Options";
- Menu_Options.Size = new System.Drawing.Size(66, 21);
+ Menu_Options.Size = new System.Drawing.Size(61, 20);
Menu_Options.Text = "Options";
//
// Menu_Language
@@ -214,7 +215,7 @@ private void InitializeComponent()
Menu_Language.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
Menu_Language.Items.AddRange(new object[] { "English", "日本語", "Deutsch", "Español", "Français", "Italiano", "한국어", "简体中文", "繁體中文" });
Menu_Language.Name = "Menu_Language";
- Menu_Language.Size = new System.Drawing.Size(115, 25);
+ Menu_Language.Size = new System.Drawing.Size(115, 23);
Menu_Language.SelectedIndexChanged += Menu_Language_SelectedIndexChanged;
//
// Menu_Theme
@@ -227,21 +228,21 @@ private void InitializeComponent()
// Menu_Theme_System
//
Menu_Theme_System.Name = "Menu_Theme_System";
- Menu_Theme_System.Size = new System.Drawing.Size(160, 22);
+ Menu_Theme_System.Size = new System.Drawing.Size(152, 22);
Menu_Theme_System.Text = "System Theme";
Menu_Theme_System.Click += Menu_Theme_System_Click;
//
// Menu_Theme_Classic
//
Menu_Theme_Classic.Name = "Menu_Theme_Classic";
- Menu_Theme_Classic.Size = new System.Drawing.Size(160, 22);
+ Menu_Theme_Classic.Size = new System.Drawing.Size(152, 22);
Menu_Theme_Classic.Text = "Light (Classic)";
Menu_Theme_Classic.Click += Menu_Theme_Classic_Click;
//
// Menu_Theme_Dark
//
Menu_Theme_Dark.Name = "Menu_Theme_Dark";
- Menu_Theme_Dark.Size = new System.Drawing.Size(160, 22);
+ Menu_Theme_Dark.Size = new System.Drawing.Size(152, 22);
Menu_Theme_Dark.Text = "Dark";
Menu_Theme_Dark.Click += Menu_Theme_Dark_Click;
//
@@ -259,12 +260,12 @@ private void InitializeComponent()
CM_Picture.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { Menu_SavePNG });
CM_Picture.Name = "CM_Picture";
CM_Picture.ShowImageMargin = false;
- CM_Picture.Size = new System.Drawing.Size(109, 26);
+ CM_Picture.Size = new System.Drawing.Size(101, 26);
//
// Menu_SavePNG
//
Menu_SavePNG.Name = "Menu_SavePNG";
- Menu_SavePNG.Size = new System.Drawing.Size(108, 22);
+ Menu_SavePNG.Size = new System.Drawing.Size(100, 22);
Menu_SavePNG.Text = "Save .png";
Menu_SavePNG.Click += Menu_SavePNG_Click;
//
@@ -286,11 +287,11 @@ private void InitializeComponent()
Tab_Map.Controls.Add(B_EditPatterns);
Tab_Map.Controls.Add(B_EditTurnipExchange);
Tab_Map.Controls.Add(B_RecycleBin);
- Tab_Map.Location = new System.Drawing.Point(4, 36);
+ Tab_Map.Location = new System.Drawing.Point(4, 34);
Tab_Map.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
Tab_Map.Name = "Tab_Map";
Tab_Map.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3);
- Tab_Map.Size = new System.Drawing.Size(463, 342);
+ Tab_Map.Size = new System.Drawing.Size(463, 297);
Tab_Map.TabIndex = 2;
Tab_Map.Text = "Map";
Tab_Map.UseVisualStyleBackColor = true;
@@ -298,10 +299,10 @@ private void InitializeComponent()
// B_EditFruitFlower
//
B_EditFruitFlower.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right;
- B_EditFruitFlower.Location = new System.Drawing.Point(236, 270);
+ B_EditFruitFlower.Location = new System.Drawing.Point(236, 236);
B_EditFruitFlower.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
B_EditFruitFlower.Name = "B_EditFruitFlower";
- B_EditFruitFlower.Size = new System.Drawing.Size(107, 64);
+ B_EditFruitFlower.Size = new System.Drawing.Size(107, 56);
B_EditFruitFlower.TabIndex = 67;
B_EditFruitFlower.Text = "Edit Island Fruits + Flowers";
B_EditFruitFlower.UseVisualStyleBackColor = true;
@@ -310,10 +311,10 @@ private void InitializeComponent()
// B_EditCampsite
//
B_EditCampsite.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right;
- B_EditCampsite.Location = new System.Drawing.Point(121, 270);
+ B_EditCampsite.Location = new System.Drawing.Point(121, 236);
B_EditCampsite.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
B_EditCampsite.Name = "B_EditCampsite";
- B_EditCampsite.Size = new System.Drawing.Size(107, 64);
+ B_EditCampsite.Size = new System.Drawing.Size(107, 56);
B_EditCampsite.TabIndex = 66;
B_EditCampsite.Text = "Edit Campsite";
B_EditCampsite.UseVisualStyleBackColor = true;
@@ -322,7 +323,7 @@ private void InitializeComponent()
// NUD_WeatherSeed
//
NUD_WeatherSeed.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 0);
- NUD_WeatherSeed.Location = new System.Drawing.Point(236, 77);
+ NUD_WeatherSeed.Location = new System.Drawing.Point(236, 68);
NUD_WeatherSeed.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
NUD_WeatherSeed.Maximum = new decimal(new int[] { -1, 0, 0, 0 });
NUD_WeatherSeed.Name = "NUD_WeatherSeed";
@@ -333,19 +334,19 @@ private void InitializeComponent()
// L_WeatherSeed
//
L_WeatherSeed.AutoSize = true;
- L_WeatherSeed.Location = new System.Drawing.Point(351, 79);
+ L_WeatherSeed.Location = new System.Drawing.Point(351, 70);
L_WeatherSeed.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
L_WeatherSeed.Name = "L_WeatherSeed";
- L_WeatherSeed.Size = new System.Drawing.Size(89, 17);
+ L_WeatherSeed.Size = new System.Drawing.Size(79, 15);
L_WeatherSeed.TabIndex = 64;
L_WeatherSeed.Text = "Weather Seed";
//
// B_EditDesignsTailor
//
- B_EditDesignsTailor.Location = new System.Drawing.Point(350, 128);
+ B_EditDesignsTailor.Location = new System.Drawing.Point(350, 113);
B_EditDesignsTailor.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
B_EditDesignsTailor.Name = "B_EditDesignsTailor";
- B_EditDesignsTailor.Size = new System.Drawing.Size(107, 64);
+ B_EditDesignsTailor.Size = new System.Drawing.Size(107, 56);
B_EditDesignsTailor.TabIndex = 63;
B_EditDesignsTailor.Text = "Edit Tailor Designs";
B_EditDesignsTailor.UseVisualStyleBackColor = true;
@@ -353,10 +354,10 @@ private void InitializeComponent()
//
// B_EditPatternFlag
//
- B_EditPatternFlag.Location = new System.Drawing.Point(236, 128);
+ B_EditPatternFlag.Location = new System.Drawing.Point(236, 113);
B_EditPatternFlag.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
B_EditPatternFlag.Name = "B_EditPatternFlag";
- B_EditPatternFlag.Size = new System.Drawing.Size(107, 64);
+ B_EditPatternFlag.Size = new System.Drawing.Size(107, 56);
B_EditPatternFlag.TabIndex = 62;
B_EditPatternFlag.Text = "Edit Flag Design";
B_EditPatternFlag.UseVisualStyleBackColor = true;
@@ -366,29 +367,29 @@ private void InitializeComponent()
//
CB_AirportColor.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
CB_AirportColor.FormattingEnabled = true;
- CB_AirportColor.Location = new System.Drawing.Point(236, 42);
+ CB_AirportColor.Location = new System.Drawing.Point(236, 37);
CB_AirportColor.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
CB_AirportColor.Name = "CB_AirportColor";
- CB_AirportColor.Size = new System.Drawing.Size(107, 25);
+ CB_AirportColor.Size = new System.Drawing.Size(107, 23);
CB_AirportColor.TabIndex = 61;
//
// L_AirportColor
//
L_AirportColor.AutoSize = true;
- L_AirportColor.Location = new System.Drawing.Point(350, 45);
+ L_AirportColor.Location = new System.Drawing.Point(350, 40);
L_AirportColor.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
L_AirportColor.Name = "L_AirportColor";
- L_AirportColor.Size = new System.Drawing.Size(85, 17);
+ L_AirportColor.Size = new System.Drawing.Size(76, 15);
L_AirportColor.TabIndex = 60;
L_AirportColor.Text = "Airport Color";
//
// L_Hemisphere
//
L_Hemisphere.AutoSize = true;
- L_Hemisphere.Location = new System.Drawing.Point(350, 11);
+ L_Hemisphere.Location = new System.Drawing.Point(350, 10);
L_Hemisphere.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
L_Hemisphere.Name = "L_Hemisphere";
- L_Hemisphere.Size = new System.Drawing.Size(78, 17);
+ L_Hemisphere.Size = new System.Drawing.Size(71, 15);
L_Hemisphere.TabIndex = 58;
L_Hemisphere.Text = "Hemisphere";
//
@@ -396,19 +397,19 @@ private void InitializeComponent()
//
CB_Hemisphere.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
CB_Hemisphere.FormattingEnabled = true;
- CB_Hemisphere.Location = new System.Drawing.Point(236, 8);
+ CB_Hemisphere.Location = new System.Drawing.Point(236, 7);
CB_Hemisphere.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
CB_Hemisphere.Name = "CB_Hemisphere";
- CB_Hemisphere.Size = new System.Drawing.Size(107, 25);
+ CB_Hemisphere.Size = new System.Drawing.Size(107, 23);
CB_Hemisphere.TabIndex = 57;
//
// B_EditPlayerHouses
//
B_EditPlayerHouses.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right;
- B_EditPlayerHouses.Location = new System.Drawing.Point(7, 270);
+ B_EditPlayerHouses.Location = new System.Drawing.Point(7, 236);
B_EditPlayerHouses.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
B_EditPlayerHouses.Name = "B_EditPlayerHouses";
- B_EditPlayerHouses.Size = new System.Drawing.Size(107, 64);
+ B_EditPlayerHouses.Size = new System.Drawing.Size(107, 56);
B_EditPlayerHouses.TabIndex = 56;
B_EditPlayerHouses.Text = "Edit Player Houses";
B_EditPlayerHouses.UseVisualStyleBackColor = true;
@@ -418,10 +419,10 @@ private void InitializeComponent()
//
B_EditMap.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right;
B_EditMap.ContextMenuStrip = CM_EditMap;
- B_EditMap.Location = new System.Drawing.Point(350, 270);
+ B_EditMap.Location = new System.Drawing.Point(350, 236);
B_EditMap.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
B_EditMap.Name = "B_EditMap";
- B_EditMap.Size = new System.Drawing.Size(107, 64);
+ B_EditMap.Size = new System.Drawing.Size(107, 56);
B_EditMap.TabIndex = 2;
B_EditMap.Text = "Edit Map...";
B_EditMap.UseVisualStyleBackColor = true;
@@ -432,49 +433,49 @@ private void InitializeComponent()
CM_EditMap.ImageScalingSize = new System.Drawing.Size(20, 20);
CM_EditMap.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { B_EditLandFlags, B_EditFieldItems, B_EditBulletin, B_EditMuseum_Click, B_EditVisitors });
CM_EditMap.Name = "CM_EditMap";
- CM_EditMap.Size = new System.Drawing.Size(183, 114);
+ CM_EditMap.Size = new System.Drawing.Size(172, 114);
//
// B_EditLandFlags
//
B_EditLandFlags.Name = "B_EditLandFlags";
- B_EditLandFlags.Size = new System.Drawing.Size(182, 22);
+ B_EditLandFlags.Size = new System.Drawing.Size(171, 22);
B_EditLandFlags.Text = "Edit Flags";
B_EditLandFlags.Click += B_EditLandFlags_Click;
//
// B_EditFieldItems
//
B_EditFieldItems.Name = "B_EditFieldItems";
- B_EditFieldItems.Size = new System.Drawing.Size(182, 22);
+ B_EditFieldItems.Size = new System.Drawing.Size(171, 22);
B_EditFieldItems.Text = "Edit Field Items";
B_EditFieldItems.Click += B_EditFieldItems_Click;
//
// B_EditBulletin
//
B_EditBulletin.Name = "B_EditBulletin";
- B_EditBulletin.Size = new System.Drawing.Size(182, 22);
+ B_EditBulletin.Size = new System.Drawing.Size(171, 22);
B_EditBulletin.Text = "Edit Bulletin Board";
B_EditBulletin.Click += B_EditBulletin_Click;
//
// B_EditMuseum_Click
//
B_EditMuseum_Click.Name = "B_EditMuseum_Click";
- B_EditMuseum_Click.Size = new System.Drawing.Size(182, 22);
+ B_EditMuseum_Click.Size = new System.Drawing.Size(171, 22);
B_EditMuseum_Click.Text = "Edit Museum";
B_EditMuseum_Click.Click += B_EditMuseum_Click_Click;
//
// B_EditVisitors
//
B_EditVisitors.Name = "B_EditVisitors";
- B_EditVisitors.Size = new System.Drawing.Size(182, 22);
+ B_EditVisitors.Size = new System.Drawing.Size(171, 22);
B_EditVisitors.Text = "Edit Visitors";
B_EditVisitors.Click += B_EditVisitors_Click;
//
// B_EditPRODesigns
//
- B_EditPRODesigns.Location = new System.Drawing.Point(121, 128);
+ B_EditPRODesigns.Location = new System.Drawing.Point(121, 113);
B_EditPRODesigns.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
B_EditPRODesigns.Name = "B_EditPRODesigns";
- B_EditPRODesigns.Size = new System.Drawing.Size(107, 64);
+ B_EditPRODesigns.Size = new System.Drawing.Size(107, 56);
B_EditPRODesigns.TabIndex = 55;
B_EditPRODesigns.Text = "Edit PRO Designs";
B_EditPRODesigns.UseVisualStyleBackColor = true;
@@ -482,10 +483,10 @@ private void InitializeComponent()
//
// B_EditPatterns
//
- B_EditPatterns.Location = new System.Drawing.Point(7, 128);
+ B_EditPatterns.Location = new System.Drawing.Point(7, 113);
B_EditPatterns.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
B_EditPatterns.Name = "B_EditPatterns";
- B_EditPatterns.Size = new System.Drawing.Size(107, 64);
+ B_EditPatterns.Size = new System.Drawing.Size(107, 56);
B_EditPatterns.TabIndex = 54;
B_EditPatterns.Text = "Edit Patterns";
B_EditPatterns.UseVisualStyleBackColor = true;
@@ -493,10 +494,10 @@ private void InitializeComponent()
//
// B_EditTurnipExchange
//
- B_EditTurnipExchange.Location = new System.Drawing.Point(7, 8);
+ B_EditTurnipExchange.Location = new System.Drawing.Point(7, 7);
B_EditTurnipExchange.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
B_EditTurnipExchange.Name = "B_EditTurnipExchange";
- B_EditTurnipExchange.Size = new System.Drawing.Size(107, 52);
+ B_EditTurnipExchange.Size = new System.Drawing.Size(107, 46);
B_EditTurnipExchange.TabIndex = 15;
B_EditTurnipExchange.Text = "Edit Turnip Exchange";
B_EditTurnipExchange.UseVisualStyleBackColor = true;
@@ -504,10 +505,10 @@ private void InitializeComponent()
//
// B_RecycleBin
//
- B_RecycleBin.Location = new System.Drawing.Point(7, 68);
+ B_RecycleBin.Location = new System.Drawing.Point(7, 60);
B_RecycleBin.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
B_RecycleBin.Name = "B_RecycleBin";
- B_RecycleBin.Size = new System.Drawing.Size(107, 52);
+ B_RecycleBin.Size = new System.Drawing.Size(107, 46);
B_RecycleBin.TabIndex = 13;
B_RecycleBin.Text = "Edit Recycle Bin";
B_RecycleBin.UseVisualStyleBackColor = true;
@@ -515,11 +516,11 @@ private void InitializeComponent()
//
// Tab_Villagers
//
- Tab_Villagers.Location = new System.Drawing.Point(4, 36);
+ Tab_Villagers.Location = new System.Drawing.Point(4, 34);
Tab_Villagers.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
Tab_Villagers.Name = "Tab_Villagers";
Tab_Villagers.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3);
- Tab_Villagers.Size = new System.Drawing.Size(463, 342);
+ Tab_Villagers.Size = new System.Drawing.Size(463, 299);
Tab_Villagers.TabIndex = 0;
Tab_Villagers.Text = "Villagers";
Tab_Villagers.UseVisualStyleBackColor = true;
@@ -552,100 +553,107 @@ private void InitializeComponent()
Tab_Players.Controls.Add(L_PlayerName);
Tab_Players.Controls.Add(CB_Players);
Tab_Players.Controls.Add(PB_Player);
- Tab_Players.Location = new System.Drawing.Point(4, 36);
+ Tab_Players.Location = new System.Drawing.Point(4, 34);
Tab_Players.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
Tab_Players.Name = "Tab_Players";
Tab_Players.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3);
- Tab_Players.Size = new System.Drawing.Size(463, 342);
+ Tab_Players.Size = new System.Drawing.Size(463, 297);
Tab_Players.TabIndex = 1;
Tab_Players.Text = "Players";
Tab_Players.UseVisualStyleBackColor = true;
//
+ // B_EditPostBox
+ //
+ B_EditPlayerPostBox.Name = "B_EditPlayerPostBox";
+ B_EditPlayerPostBox.Size = new System.Drawing.Size(107, 56);
+ B_EditPlayerPostBox.Text = "Edit Post Box";
+ B_EditPlayerPostBox.Click += B_EditPlayerPostBox_Click;
+ //
// L_HotelTickets
//
- L_HotelTickets.Location = new System.Drawing.Point(166, 309);
+ L_HotelTickets.Location = new System.Drawing.Point(166, 273);
L_HotelTickets.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
L_HotelTickets.Name = "L_HotelTickets";
- L_HotelTickets.Size = new System.Drawing.Size(98, 26);
+ L_HotelTickets.Size = new System.Drawing.Size(98, 23);
L_HotelTickets.TabIndex = 30;
L_HotelTickets.Text = "Hotel Tickets:";
L_HotelTickets.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// NUD_HotelTickets
//
- NUD_HotelTickets.Location = new System.Drawing.Point(271, 309);
+ NUD_HotelTickets.Location = new System.Drawing.Point(271, 273);
NUD_HotelTickets.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
NUD_HotelTickets.Maximum = new decimal(new int[] { int.MaxValue, 0, 0, 0 });
NUD_HotelTickets.Name = "NUD_HotelTickets";
- NUD_HotelTickets.Size = new System.Drawing.Size(117, 25);
+ NUD_HotelTickets.Size = new System.Drawing.Size(117, 23);
NUD_HotelTickets.TabIndex = 29;
//
// L_Poki
//
- L_Poki.Location = new System.Drawing.Point(166, 278);
+ L_Poki.Location = new System.Drawing.Point(166, 245);
L_Poki.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
L_Poki.Name = "L_Poki";
- L_Poki.Size = new System.Drawing.Size(98, 26);
+ L_Poki.Size = new System.Drawing.Size(98, 23);
L_Poki.TabIndex = 28;
L_Poki.Text = "Poki:";
L_Poki.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// NUD_Poki
//
- NUD_Poki.Location = new System.Drawing.Point(271, 278);
+ NUD_Poki.Location = new System.Drawing.Point(271, 245);
NUD_Poki.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
NUD_Poki.Maximum = new decimal(new int[] { int.MaxValue, 0, 0, 0 });
NUD_Poki.Name = "NUD_Poki";
- NUD_Poki.Size = new System.Drawing.Size(117, 25);
+ NUD_Poki.Size = new System.Drawing.Size(117, 23);
NUD_Poki.TabIndex = 27;
//
// L_EarnedMiles
//
- L_EarnedMiles.Location = new System.Drawing.Point(166, 153);
+ L_EarnedMiles.Location = new System.Drawing.Point(166, 135);
L_EarnedMiles.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
L_EarnedMiles.Name = "L_EarnedMiles";
- L_EarnedMiles.Size = new System.Drawing.Size(98, 26);
+ L_EarnedMiles.Size = new System.Drawing.Size(98, 23);
L_EarnedMiles.TabIndex = 26;
L_EarnedMiles.Text = "Earned Miles:";
L_EarnedMiles.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// NUD_TotalNookMiles
//
- NUD_TotalNookMiles.Location = new System.Drawing.Point(271, 153);
+ NUD_TotalNookMiles.Location = new System.Drawing.Point(271, 135);
NUD_TotalNookMiles.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
NUD_TotalNookMiles.Maximum = new decimal(new int[] { int.MaxValue, 0, 0, 0 });
NUD_TotalNookMiles.Name = "NUD_TotalNookMiles";
- NUD_TotalNookMiles.Size = new System.Drawing.Size(117, 25);
+ NUD_TotalNookMiles.Size = new System.Drawing.Size(117, 23);
NUD_TotalNookMiles.TabIndex = 25;
//
// L_StorageCount
//
L_StorageCount.AutoSize = true;
- L_StorageCount.Location = new System.Drawing.Point(233, 189);
+ L_StorageCount.Location = new System.Drawing.Point(233, 167);
L_StorageCount.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
L_StorageCount.Name = "L_StorageCount";
- L_StorageCount.Size = new System.Drawing.Size(92, 17);
+ L_StorageCount.Size = new System.Drawing.Size(83, 15);
L_StorageCount.TabIndex = 24;
L_StorageCount.Text = "Storage Count";
L_StorageCount.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// NUD_StorageCount
//
- NUD_StorageCount.Location = new System.Drawing.Point(176, 186);
+ NUD_StorageCount.Location = new System.Drawing.Point(176, 164);
NUD_StorageCount.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
NUD_StorageCount.Maximum = new decimal(new int[] { int.MaxValue, 0, 0, 0 });
NUD_StorageCount.Name = "NUD_StorageCount";
- NUD_StorageCount.Size = new System.Drawing.Size(54, 25);
+ NUD_StorageCount.Size = new System.Drawing.Size(54, 23);
NUD_StorageCount.TabIndex = 23;
NUD_StorageCount.Value = new decimal(new int[] { 5000, 0, 0, 0 });
//
// L_PocketCount2
//
L_PocketCount2.AutoSize = true;
- L_PocketCount2.Location = new System.Drawing.Point(233, 252);
+ L_PocketCount2.Location = new System.Drawing.Point(233, 222);
L_PocketCount2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
L_PocketCount2.Name = "L_PocketCount2";
- L_PocketCount2.Size = new System.Drawing.Size(95, 17);
+ L_PocketCount2.Size = new System.Drawing.Size(88, 15);
L_PocketCount2.TabIndex = 22;
L_PocketCount2.Text = "Pocket Count 2";
L_PocketCount2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
@@ -653,32 +661,32 @@ private void InitializeComponent()
// L_PocketCount1
//
L_PocketCount1.AutoSize = true;
- L_PocketCount1.Location = new System.Drawing.Point(233, 223);
+ L_PocketCount1.Location = new System.Drawing.Point(233, 197);
L_PocketCount1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
L_PocketCount1.Name = "L_PocketCount1";
- L_PocketCount1.Size = new System.Drawing.Size(95, 17);
+ L_PocketCount1.Size = new System.Drawing.Size(88, 15);
L_PocketCount1.TabIndex = 21;
L_PocketCount1.Text = "Pocket Count 1";
L_PocketCount1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// NUD_PocketCount2
//
- NUD_PocketCount2.Location = new System.Drawing.Point(176, 247);
+ NUD_PocketCount2.Location = new System.Drawing.Point(176, 218);
NUD_PocketCount2.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
NUD_PocketCount2.Maximum = new decimal(new int[] { int.MaxValue, 0, 0, 0 });
NUD_PocketCount2.Name = "NUD_PocketCount2";
- NUD_PocketCount2.Size = new System.Drawing.Size(54, 25);
+ NUD_PocketCount2.Size = new System.Drawing.Size(54, 23);
NUD_PocketCount2.TabIndex = 20;
NUD_PocketCount2.Value = new decimal(new int[] { 20, 0, 0, 0 });
NUD_PocketCount2.ValueChanged += NUD_PocketCount_ValueChanged;
//
// NUD_PocketCount1
//
- NUD_PocketCount1.Location = new System.Drawing.Point(176, 220);
+ NUD_PocketCount1.Location = new System.Drawing.Point(176, 194);
NUD_PocketCount1.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
NUD_PocketCount1.Maximum = new decimal(new int[] { int.MaxValue, 0, 0, 0 });
NUD_PocketCount1.Name = "NUD_PocketCount1";
- NUD_PocketCount1.Size = new System.Drawing.Size(54, 25);
+ NUD_PocketCount1.Size = new System.Drawing.Size(54, 23);
NUD_PocketCount1.TabIndex = 19;
NUD_PocketCount1.Value = new decimal(new int[] { 20, 0, 0, 0 });
NUD_PocketCount1.ValueChanged += NUD_PocketCount_ValueChanged;
@@ -686,10 +694,10 @@ private void InitializeComponent()
// B_EditPlayer
//
B_EditPlayer.ContextMenuStrip = CM_EditPlayer;
- B_EditPlayer.Location = new System.Drawing.Point(7, 280);
+ B_EditPlayer.Location = new System.Drawing.Point(7, 247);
B_EditPlayer.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
B_EditPlayer.Name = "B_EditPlayer";
- B_EditPlayer.Size = new System.Drawing.Size(152, 52);
+ B_EditPlayer.Size = new System.Drawing.Size(152, 46);
B_EditPlayer.TabIndex = 18;
B_EditPlayer.Text = "Edit Player...";
B_EditPlayer.UseVisualStyleBackColor = true;
@@ -698,65 +706,65 @@ private void InitializeComponent()
// CM_EditPlayer
//
CM_EditPlayer.ImageScalingSize = new System.Drawing.Size(20, 20);
- CM_EditPlayer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { B_EditPlayerStorage, B_EditPlayerReceivedItems, B_EditAchievements, B_EditPlayerRecipes, B_EditPlayerFlags, B_EditPlayerReactions, B_EditPlayerMisc });
+ CM_EditPlayer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { B_EditPlayerStorage, B_EditPlayerReceivedItems, B_EditAchievements, B_EditPlayerRecipes, B_EditPlayerPostBox, B_EditPlayerFlags, B_EditPlayerReactions, B_EditPlayerMisc });
CM_EditPlayer.Name = "CM_EditPlayer";
- CM_EditPlayer.Size = new System.Drawing.Size(190, 158);
+ CM_EditPlayer.Size = new System.Drawing.Size(177, 158);
//
// B_EditPlayerStorage
//
B_EditPlayerStorage.Name = "B_EditPlayerStorage";
- B_EditPlayerStorage.Size = new System.Drawing.Size(189, 22);
+ B_EditPlayerStorage.Size = new System.Drawing.Size(176, 22);
B_EditPlayerStorage.Text = "Edit Storage";
B_EditPlayerStorage.Click += B_Storage_Click;
//
// B_EditPlayerReceivedItems
//
B_EditPlayerReceivedItems.Name = "B_EditPlayerReceivedItems";
- B_EditPlayerReceivedItems.Size = new System.Drawing.Size(189, 22);
+ B_EditPlayerReceivedItems.Size = new System.Drawing.Size(176, 22);
B_EditPlayerReceivedItems.Text = "Edit Received Items";
B_EditPlayerReceivedItems.Click += B_EditPlayerReceivedItems_Click;
//
// B_EditAchievements
//
B_EditAchievements.Name = "B_EditAchievements";
- B_EditAchievements.Size = new System.Drawing.Size(189, 22);
+ B_EditAchievements.Size = new System.Drawing.Size(176, 22);
B_EditAchievements.Text = "Edit Achievements";
B_EditAchievements.Click += B_EditAchievements_Click;
//
// B_EditPlayerRecipes
//
B_EditPlayerRecipes.Name = "B_EditPlayerRecipes";
- B_EditPlayerRecipes.Size = new System.Drawing.Size(189, 22);
+ B_EditPlayerRecipes.Size = new System.Drawing.Size(176, 22);
B_EditPlayerRecipes.Text = "Edit Recipes";
B_EditPlayerRecipes.Click += B_EditPlayerRecipes_Click;
//
// B_EditPlayerFlags
//
B_EditPlayerFlags.Name = "B_EditPlayerFlags";
- B_EditPlayerFlags.Size = new System.Drawing.Size(189, 22);
+ B_EditPlayerFlags.Size = new System.Drawing.Size(176, 22);
B_EditPlayerFlags.Text = "Edit Flags";
B_EditPlayerFlags.Click += B_EditPlayerFlags_Click;
//
// B_EditPlayerReactions
//
B_EditPlayerReactions.Name = "B_EditPlayerReactions";
- B_EditPlayerReactions.Size = new System.Drawing.Size(189, 22);
+ B_EditPlayerReactions.Size = new System.Drawing.Size(176, 22);
B_EditPlayerReactions.Text = "Edit Reactions";
B_EditPlayerReactions.Click += B_EditPlayerReactions_Click;
//
// B_EditPlayerMisc
//
B_EditPlayerMisc.Name = "B_EditPlayerMisc";
- B_EditPlayerMisc.Size = new System.Drawing.Size(189, 22);
+ B_EditPlayerMisc.Size = new System.Drawing.Size(176, 22);
B_EditPlayerMisc.Text = "Edit Misc";
B_EditPlayerMisc.Click += B_EditPlayerMisc_Click;
//
// B_EditPlayerItems
//
- B_EditPlayerItems.Location = new System.Drawing.Point(7, 220);
+ B_EditPlayerItems.Location = new System.Drawing.Point(7, 194);
B_EditPlayerItems.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
B_EditPlayerItems.Name = "B_EditPlayerItems";
- B_EditPlayerItems.Size = new System.Drawing.Size(152, 52);
+ B_EditPlayerItems.Size = new System.Drawing.Size(152, 46);
B_EditPlayerItems.TabIndex = 12;
B_EditPlayerItems.Text = "Edit Items";
B_EditPlayerItems.UseVisualStyleBackColor = true;
@@ -764,94 +772,94 @@ private void InitializeComponent()
//
// L_Wallet
//
- L_Wallet.Location = new System.Drawing.Point(166, 67);
+ L_Wallet.Location = new System.Drawing.Point(166, 59);
L_Wallet.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
L_Wallet.Name = "L_Wallet";
- L_Wallet.Size = new System.Drawing.Size(98, 26);
+ L_Wallet.Size = new System.Drawing.Size(98, 23);
L_Wallet.TabIndex = 11;
L_Wallet.Text = "Wallet:";
L_Wallet.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// NUD_Wallet
//
- NUD_Wallet.Location = new System.Drawing.Point(271, 67);
+ NUD_Wallet.Location = new System.Drawing.Point(271, 59);
NUD_Wallet.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
NUD_Wallet.Maximum = new decimal(new int[] { int.MaxValue, 0, 0, 0 });
NUD_Wallet.Name = "NUD_Wallet";
- NUD_Wallet.Size = new System.Drawing.Size(117, 25);
+ NUD_Wallet.Size = new System.Drawing.Size(117, 23);
NUD_Wallet.TabIndex = 10;
NUD_Wallet.ValueChanged += NUD_Wallet_ValueChanged;
//
// L_NookMiles
//
- L_NookMiles.Location = new System.Drawing.Point(166, 125);
+ L_NookMiles.Location = new System.Drawing.Point(166, 110);
L_NookMiles.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
L_NookMiles.Name = "L_NookMiles";
- L_NookMiles.Size = new System.Drawing.Size(98, 26);
+ L_NookMiles.Size = new System.Drawing.Size(98, 23);
L_NookMiles.TabIndex = 9;
L_NookMiles.Text = "Nook Miles:";
L_NookMiles.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// NUD_NookMiles
//
- NUD_NookMiles.Location = new System.Drawing.Point(271, 125);
+ NUD_NookMiles.Location = new System.Drawing.Point(271, 110);
NUD_NookMiles.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
NUD_NookMiles.Maximum = new decimal(new int[] { int.MaxValue, 0, 0, 0 });
NUD_NookMiles.Name = "NUD_NookMiles";
- NUD_NookMiles.Size = new System.Drawing.Size(117, 25);
+ NUD_NookMiles.Size = new System.Drawing.Size(117, 23);
NUD_NookMiles.TabIndex = 8;
//
// L_BankBells
//
- L_BankBells.Location = new System.Drawing.Point(166, 95);
+ L_BankBells.Location = new System.Drawing.Point(166, 84);
L_BankBells.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
L_BankBells.Name = "L_BankBells";
- L_BankBells.Size = new System.Drawing.Size(98, 26);
+ L_BankBells.Size = new System.Drawing.Size(98, 23);
L_BankBells.TabIndex = 7;
L_BankBells.Text = "Bank Bells:";
L_BankBells.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// NUD_BankBells
//
- NUD_BankBells.Location = new System.Drawing.Point(271, 95);
+ NUD_BankBells.Location = new System.Drawing.Point(271, 84);
NUD_BankBells.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
NUD_BankBells.Maximum = new decimal(new int[] { int.MaxValue, 0, 0, 0 });
NUD_BankBells.Name = "NUD_BankBells";
- NUD_BankBells.Size = new System.Drawing.Size(117, 25);
+ NUD_BankBells.Size = new System.Drawing.Size(117, 23);
NUD_BankBells.TabIndex = 6;
//
// TB_TownName
//
- TB_TownName.Location = new System.Drawing.Point(271, 37);
+ TB_TownName.Location = new System.Drawing.Point(271, 33);
TB_TownName.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
TB_TownName.Name = "TB_TownName";
- TB_TownName.Size = new System.Drawing.Size(116, 25);
+ TB_TownName.Size = new System.Drawing.Size(116, 23);
TB_TownName.TabIndex = 5;
//
// TB_Name
//
- TB_Name.Location = new System.Drawing.Point(271, 9);
+ TB_Name.Location = new System.Drawing.Point(271, 8);
TB_Name.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
TB_Name.Name = "TB_Name";
- TB_Name.Size = new System.Drawing.Size(116, 25);
+ TB_Name.Size = new System.Drawing.Size(116, 23);
TB_Name.TabIndex = 3;
//
// L_TownName
//
- L_TownName.Location = new System.Drawing.Point(166, 37);
+ L_TownName.Location = new System.Drawing.Point(166, 33);
L_TownName.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
L_TownName.Name = "L_TownName";
- L_TownName.Size = new System.Drawing.Size(98, 26);
+ L_TownName.Size = new System.Drawing.Size(98, 23);
L_TownName.TabIndex = 4;
L_TownName.Text = "Town Name:";
L_TownName.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// L_PlayerName
//
- L_PlayerName.Location = new System.Drawing.Point(166, 9);
+ L_PlayerName.Location = new System.Drawing.Point(166, 8);
L_PlayerName.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
L_PlayerName.Name = "L_PlayerName";
- L_PlayerName.Size = new System.Drawing.Size(98, 26);
+ L_PlayerName.Size = new System.Drawing.Size(98, 23);
L_PlayerName.TabIndex = 2;
L_PlayerName.Text = "Player Name:";
L_PlayerName.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
@@ -860,10 +868,10 @@ private void InitializeComponent()
//
CB_Players.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
CB_Players.FormattingEnabled = true;
- CB_Players.Location = new System.Drawing.Point(7, 8);
+ CB_Players.Location = new System.Drawing.Point(7, 7);
CB_Players.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
CB_Players.Name = "CB_Players";
- CB_Players.Size = new System.Drawing.Size(151, 25);
+ CB_Players.Size = new System.Drawing.Size(151, 23);
CB_Players.TabIndex = 1;
CB_Players.SelectedIndexChanged += LoadPlayer;
//
@@ -871,10 +879,10 @@ private void InitializeComponent()
//
PB_Player.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
PB_Player.ContextMenuStrip = CM_Picture;
- PB_Player.Location = new System.Drawing.Point(7, 43);
+ PB_Player.Location = new System.Drawing.Point(7, 38);
PB_Player.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
PB_Player.Name = "PB_Player";
- PB_Player.Size = new System.Drawing.Size(151, 170);
+ PB_Player.Size = new System.Drawing.Size(151, 150);
PB_Player.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
PB_Player.TabIndex = 0;
PB_Player.TabStop = false;
@@ -885,19 +893,19 @@ private void InitializeComponent()
TC_Editors.Controls.Add(Tab_Villagers);
TC_Editors.Controls.Add(Tab_Map);
TC_Editors.Dock = System.Windows.Forms.DockStyle.Fill;
- TC_Editors.Location = new System.Drawing.Point(0, 25);
+ TC_Editors.Location = new System.Drawing.Point(0, 24);
TC_Editors.Margin = new System.Windows.Forms.Padding(4);
TC_Editors.Name = "TC_Editors";
TC_Editors.Padding = new System.Drawing.Point(8, 8);
TC_Editors.SelectedIndex = 0;
- TC_Editors.Size = new System.Drawing.Size(471, 382);
+ TC_Editors.Size = new System.Drawing.Size(471, 335);
TC_Editors.TabIndex = 1;
//
// Editor
//
- AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
+ AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- ClientSize = new System.Drawing.Size(471, 407);
+ ClientSize = new System.Drawing.Size(471, 359);
Controls.Add(TC_Editors);
Controls.Add(Menu_Editor);
Icon = Properties.Resources.icon;
@@ -1008,6 +1016,7 @@ private void InitializeComponent()
private System.Windows.Forms.Label L_HotelTickets;
private System.Windows.Forms.NumericUpDown NUD_HotelTickets;
private System.Windows.Forms.Button B_EditCampsite;
+ private System.Windows.Forms.ToolStripMenuItem B_EditPlayerPostBox;
private System.Windows.Forms.ToolStripMenuItem Menu_Theme;
private System.Windows.Forms.ToolStripMenuItem Menu_Theme_System;
private System.Windows.Forms.ToolStripMenuItem Menu_Theme_Classic;
diff --git a/NHSE.WinForms/Editor.cs b/NHSE.WinForms/Editor.cs
index a2f9603..cbc89a6 100644
--- a/NHSE.WinForms/Editor.cs
+++ b/NHSE.WinForms/Editor.cs
@@ -242,7 +242,7 @@ private VillagerEditor LoadVillagers()
{
var p0 = SAV.Players[0].Personal;
var villagers = SAV.Main.GetVillagers();
- var v = new VillagerEditor(villagers, p0, SAV, true) { Dock = DockStyle.Fill };
+ var v = new VillagerEditor(villagers, p0, SAV, true, PlayerIndex) { Dock = DockStyle.Fill };
Tab_Villagers.Controls.Add(v);
return v;
}
@@ -359,6 +359,15 @@ private void B_EditPlayerMisc_Click(object sender, EventArgs e)
editor.ShowDialog();
}
+ private void B_EditPlayerPostBox_Click(object sender, EventArgs e)
+ {
+ var player = SAV.Players[PlayerIndex];
+ var save = SAV.Main;
+ var pb = SAV.Players[PlayerIndex].PostBox;
+ using var editor = new PostBoxEditor(player, pb);
+ editor.ShowDialog();
+ }
+
private void LoadPlayer(int index)
{
if (PlayerIndex >= 0)
@@ -520,36 +529,36 @@ private void B_EditLandFlags_Click(object sender, EventArgs e)
private void B_EditPatterns_Click(object sender, EventArgs e)
{
- var playerID = SAV.Players[0].Personal.GetPlayerIdentity(); // fetch ID for overwrite ownership
- var townID = SAV.Players[0].Personal.GetTownIdentity(); // fetch ID for overwrite ownership
+ var player = SAV.Players[PlayerIndex];
var patterns = SAV.Main.GetDesigns();
- using var editor = new PatternEditor(patterns);
+ using var editor = new PatternEditor(patterns, player);
if (editor.ShowDialog() == DialogResult.OK)
- SAV.Main.SetDesigns(patterns, playerID, townID);
+ SAV.Main.SetDesigns(patterns);
}
private void B_EditPRODesigns_Click(object sender, EventArgs e)
{
- var playerID = SAV.Players[0].Personal.GetPlayerIdentity(); // fetch ID for overwrite ownership
- var townID = SAV.Players[0].Personal.GetTownIdentity(); // fetch ID for overwrite ownership
+ var player = SAV.Players[PlayerIndex];
var patterns = SAV.Main.GetDesignsPRO();
- using var editor = new PatternEditorPRO(patterns);
+ using var editor = new PatternEditorPRO(patterns, player);
if (editor.ShowDialog() == DialogResult.OK)
- SAV.Main.SetDesignsPRO(patterns, playerID, townID);
+ SAV.Main.SetDesignsPRO(patterns);
}
private void B_EditPatternFlag_Click(object sender, EventArgs e)
{
+ var player = SAV.Players[PlayerIndex];
var patterns = new[] { SAV.Main.FlagMyDesign };
- using var editor = new PatternEditor(patterns);
+ using var editor = new PatternEditor(patterns, player);
if (editor.ShowDialog() == DialogResult.OK)
SAV.Main.FlagMyDesign = patterns[0];
}
private void B_EditDesignsTailor_Click(object sender, EventArgs e)
{
+ var player = SAV.Players[PlayerIndex];
var patterns = SAV.Main.GetDesignsTailor();
- using var editor = new PatternEditorPRO(patterns);
+ using var editor = new PatternEditorPRO(patterns, player);
if (editor.ShowDialog() == DialogResult.OK)
SAV.Main.SetDesignsTailor(patterns);
}
diff --git a/NHSE.WinForms/Resources/text/lang_de.txt b/NHSE.WinForms/Resources/text/lang_de.txt
index 19234a4..cc24b1b 100644
--- a/NHSE.WinForms/Resources/text/lang_de.txt
+++ b/NHSE.WinForms/Resources/text/lang_de.txt
@@ -399,6 +399,43 @@ PlayerItemEditor.L_Flag0=Flag0:
PlayerItemEditor.L_Flag1=Flag1:
PlayerItemEditor.L_Uses=Uses:
PlayerItemEditor.L_WaterDays=Days:
+PostBoxEditor.B_Cancel=Cancel
+PostBoxEditor.B_Save=Save Slot
+PostBoxEditor.B_Delete=Delete Mail
+PostBoxEditor.B_Import=Import Mail
+PostBoxEditor.B_Dump=Dump Mail
+PostBoxEditor.B_Post_DumpAll=Dump All
+PostBoxEditor.CK_Post_Read=Mark Read
+PostBoxEditor.CK_Post_Faved=Favorited
+PostBoxEditor.GB_Post_Villager=Villager
+PostBoxEditor.GB_Post_Player=Player
+PostBoxEditor.GB_Post_NPC=NPC
+PostBoxEditor.GB_Post_ReceiverPlayer=Receiver Player
+PostBoxEditor.GB_Post_Stationery=Stationery Type
+PostBoxEditor.GB_Post_AttachedInfo=Attachment Info
+PostBoxEditor.GB_Post_ReceiverIsland=Receiver Island
+PostBoxEditor.L_Sender_Edit=Edit Sender:
+PostBoxEditor.L_Sender_ExternalName=Sender Name:
+PostBoxEditor.L_ExternalName=unknown
+PostBoxEditor.L_InternalName=unknown
+PostBoxEditor.L_Variant=Variant
+PostBoxEditor.L_Species=Species
+PostBoxEditor.L_Post_To=To Line:
+PostBoxEditor.L_Post_Message=Message:
+PostBoxEditor.L_Post_From=From Line:
+PostBoxEditor.L_Post_UsedSlots=Used Slots:
+PostBoxEditor.L_Post_UsedSlots_Value=unknown
+PostBoxEditor.L_Post_SelectedSlot=Selected Slot:
+PostBoxEditor.L_SenderType=Sender Type
+PostBoxEditor.L_Post_TimeStamp=Timestamp
+PostBoxEditor.L_Post_Language=Language
+PostBoxEditor.L_Post_CountTo=count
+PostBoxEditor.L_Post_CountMsg=count
+PostBoxEditor.L_Post_CountFrom=count
+PostBoxEditor.L_Post_MailType=Mail Type:
+PostBoxEditor.L_Post_AttachmentSkin=Attachment Skin:
+PostBoxEditor.TP_Post_SR=Details
+PostBoxEditor.TP_Post_Items=Attachments
ReactionEditor.B_Cancel=Cancel
ReactionEditor.B_GiveAll=Give All
ReactionEditor.B_Save=Save
diff --git a/NHSE.WinForms/Resources/text/lang_en.txt b/NHSE.WinForms/Resources/text/lang_en.txt
index bcb1895..91d175a 100644
--- a/NHSE.WinForms/Resources/text/lang_en.txt
+++ b/NHSE.WinForms/Resources/text/lang_en.txt
@@ -399,6 +399,43 @@ PlayerItemEditor.L_Flag0=Flag0:
PlayerItemEditor.L_Flag1=Flag1:
PlayerItemEditor.L_Uses=Uses:
PlayerItemEditor.L_WaterDays=Days:
+PostBoxEditor.B_Cancel=Cancel
+PostBoxEditor.B_Save=Save Slot
+PostBoxEditor.B_Delete=Delete Mail
+PostBoxEditor.B_Import=Import Mail
+PostBoxEditor.B_Dump=Dump Mail
+PostBoxEditor.B_Post_DumpAll=Dump All
+PostBoxEditor.CK_Post_Read=Mark Read
+PostBoxEditor.CK_Post_Faved=Favorited
+PostBoxEditor.GB_Post_Villager=Villager
+PostBoxEditor.GB_Post_Player=Player
+PostBoxEditor.GB_Post_NPC=NPC
+PostBoxEditor.GB_Post_ReceiverPlayer=Receiver Player
+PostBoxEditor.GB_Post_Stationery=Stationery Type
+PostBoxEditor.GB_Post_AttachedInfo=Attachment Info
+PostBoxEditor.GB_Post_ReceiverIsland=Receiver Island
+PostBoxEditor.L_Sender_Edit=Edit Sender:
+PostBoxEditor.L_Sender_ExternalName=Sender Name:
+PostBoxEditor.L_ExternalName=unknown
+PostBoxEditor.L_InternalName=unknown
+PostBoxEditor.L_Variant=Variant
+PostBoxEditor.L_Species=Species
+PostBoxEditor.L_Post_To=To Line:
+PostBoxEditor.L_Post_Message=Message:
+PostBoxEditor.L_Post_From=From Line:
+PostBoxEditor.L_Post_UsedSlots=Used Slots:
+PostBoxEditor.L_Post_UsedSlots_Value=unknown
+PostBoxEditor.L_Post_SelectedSlot=Selected Slot:
+PostBoxEditor.L_SenderType=Sender Type
+PostBoxEditor.L_Post_TimeStamp=Timestamp
+PostBoxEditor.L_Post_Language=Language
+PostBoxEditor.L_Post_CountTo=count
+PostBoxEditor.L_Post_CountMsg=count
+PostBoxEditor.L_Post_CountFrom=count
+PostBoxEditor.L_Post_MailType=Mail Type:
+PostBoxEditor.L_Post_AttachmentSkin=Attachment Skin:
+PostBoxEditor.TP_Post_SR=Details
+PostBoxEditor.TP_Post_Items=Attachments
ReactionEditor.B_Cancel=Cancel
ReactionEditor.B_GiveAll=Give All
ReactionEditor.B_Save=Save
diff --git a/NHSE.WinForms/Resources/text/lang_es.txt b/NHSE.WinForms/Resources/text/lang_es.txt
index f65048d..0658143 100644
--- a/NHSE.WinForms/Resources/text/lang_es.txt
+++ b/NHSE.WinForms/Resources/text/lang_es.txt
@@ -399,6 +399,43 @@ PlayerItemEditor.L_Flag0=Flag0:
PlayerItemEditor.L_Flag1=Flag1:
PlayerItemEditor.L_Uses=Usos:
PlayerItemEditor.L_WaterDays=Días:
+PostBoxEditor.B_Cancel=Cancel
+PostBoxEditor.B_Save=Save Slot
+PostBoxEditor.B_Delete=Delete Mail
+PostBoxEditor.B_Import=Import Mail
+PostBoxEditor.B_Dump=Dump Mail
+PostBoxEditor.B_Post_DumpAll=Dump All
+PostBoxEditor.CK_Post_Read=Mark Read
+PostBoxEditor.CK_Post_Faved=Favorited
+PostBoxEditor.GB_Post_Villager=Villager
+PostBoxEditor.GB_Post_Player=Player
+PostBoxEditor.GB_Post_NPC=NPC
+PostBoxEditor.GB_Post_ReceiverPlayer=Receiver Player
+PostBoxEditor.GB_Post_Stationery=Stationery Type
+PostBoxEditor.GB_Post_AttachedInfo=Attachment Info
+PostBoxEditor.GB_Post_ReceiverIsland=Receiver Island
+PostBoxEditor.L_Sender_Edit=Edit Sender:
+PostBoxEditor.L_Sender_ExternalName=Sender Name:
+PostBoxEditor.L_ExternalName=unknown
+PostBoxEditor.L_InternalName=unknown
+PostBoxEditor.L_Variant=Variant
+PostBoxEditor.L_Species=Species
+PostBoxEditor.L_Post_To=To Line:
+PostBoxEditor.L_Post_Message=Message:
+PostBoxEditor.L_Post_From=From Line:
+PostBoxEditor.L_Post_UsedSlots=Used Slots:
+PostBoxEditor.L_Post_UsedSlots_Value=unknown
+PostBoxEditor.L_Post_SelectedSlot=Selected Slot:
+PostBoxEditor.L_SenderType=Sender Type
+PostBoxEditor.L_Post_TimeStamp=Timestamp
+PostBoxEditor.L_Post_Language=Language
+PostBoxEditor.L_Post_CountTo=count
+PostBoxEditor.L_Post_CountMsg=count
+PostBoxEditor.L_Post_CountFrom=count
+PostBoxEditor.L_Post_MailType=Mail Type:
+PostBoxEditor.L_Post_AttachmentSkin=Attachment Skin:
+PostBoxEditor.TP_Post_SR=Details
+PostBoxEditor.TP_Post_Items=Attachments
ReactionEditor.B_Cancel=Cancelar
ReactionEditor.B_GiveAll=Far Todo
ReactionEditor.B_Save=Guardar
diff --git a/NHSE.WinForms/Resources/text/lang_fr.txt b/NHSE.WinForms/Resources/text/lang_fr.txt
index 7eeaab4..df827db 100644
--- a/NHSE.WinForms/Resources/text/lang_fr.txt
+++ b/NHSE.WinForms/Resources/text/lang_fr.txt
@@ -399,6 +399,43 @@ PlayerItemEditor.L_Flag0=Flag0:
PlayerItemEditor.L_Flag1=Flag1:
PlayerItemEditor.L_Uses=Uses:
PlayerItemEditor.L_WaterDays=Days:
+PostBoxEditor.B_Cancel=Cancel
+PostBoxEditor.B_Save=Save Slot
+PostBoxEditor.B_Delete=Delete Mail
+PostBoxEditor.B_Import=Import Mail
+PostBoxEditor.B_Dump=Dump Mail
+PostBoxEditor.B_Post_DumpAll=Dump All
+PostBoxEditor.CK_Post_Read=Mark Read
+PostBoxEditor.CK_Post_Faved=Favorited
+PostBoxEditor.GB_Post_Villager=Villager
+PostBoxEditor.GB_Post_Player=Player
+PostBoxEditor.GB_Post_NPC=NPC
+PostBoxEditor.GB_Post_ReceiverPlayer=Receiver Player
+PostBoxEditor.GB_Post_Stationery=Stationery Type
+PostBoxEditor.GB_Post_AttachedInfo=Attachment Info
+PostBoxEditor.GB_Post_ReceiverIsland=Receiver Island
+PostBoxEditor.L_Sender_Edit=Edit Sender:
+PostBoxEditor.L_Sender_ExternalName=Sender Name:
+PostBoxEditor.L_ExternalName=unknown
+PostBoxEditor.L_InternalName=unknown
+PostBoxEditor.L_Variant=Variant
+PostBoxEditor.L_Species=Species
+PostBoxEditor.L_Post_To=To Line:
+PostBoxEditor.L_Post_Message=Message:
+PostBoxEditor.L_Post_From=From Line:
+PostBoxEditor.L_Post_UsedSlots=Used Slots:
+PostBoxEditor.L_Post_UsedSlots_Value=unknown
+PostBoxEditor.L_Post_SelectedSlot=Selected Slot:
+PostBoxEditor.L_SenderType=Sender Type
+PostBoxEditor.L_Post_TimeStamp=Timestamp
+PostBoxEditor.L_Post_Language=Language
+PostBoxEditor.L_Post_CountTo=count
+PostBoxEditor.L_Post_CountMsg=count
+PostBoxEditor.L_Post_CountFrom=count
+PostBoxEditor.L_Post_MailType=Mail Type:
+PostBoxEditor.L_Post_AttachmentSkin=Attachment Skin:
+PostBoxEditor.TP_Post_SR=Details
+PostBoxEditor.TP_Post_Items=Attachments
ReactionEditor.B_Cancel=Cancel
ReactionEditor.B_GiveAll=Give All
ReactionEditor.B_Save=Save
diff --git a/NHSE.WinForms/Resources/text/lang_it.txt b/NHSE.WinForms/Resources/text/lang_it.txt
index d9f786f..8ac97ea 100644
--- a/NHSE.WinForms/Resources/text/lang_it.txt
+++ b/NHSE.WinForms/Resources/text/lang_it.txt
@@ -399,6 +399,43 @@ PlayerItemEditor.L_Flag0=Flag0:
PlayerItemEditor.L_Flag1=Flag1:
PlayerItemEditor.L_Uses=Utilizzi:
PlayerItemEditor.L_WaterDays=Giorni:
+PostBoxEditor.B_Cancel=Cancel
+PostBoxEditor.B_Save=Save Slot
+PostBoxEditor.B_Delete=Delete Mail
+PostBoxEditor.B_Import=Import Mail
+PostBoxEditor.B_Dump=Dump Mail
+PostBoxEditor.B_Post_DumpAll=Dump All
+PostBoxEditor.CK_Post_Read=Mark Read
+PostBoxEditor.CK_Post_Faved=Favorited
+PostBoxEditor.GB_Post_Villager=Villager
+PostBoxEditor.GB_Post_Player=Player
+PostBoxEditor.GB_Post_NPC=NPC
+PostBoxEditor.GB_Post_ReceiverPlayer=Receiver Player
+PostBoxEditor.GB_Post_Stationery=Stationery Type
+PostBoxEditor.GB_Post_AttachedInfo=Attachment Info
+PostBoxEditor.GB_Post_ReceiverIsland=Receiver Island
+PostBoxEditor.L_Sender_Edit=Edit Sender:
+PostBoxEditor.L_Sender_ExternalName=Sender Name:
+PostBoxEditor.L_ExternalName=unknown
+PostBoxEditor.L_InternalName=unknown
+PostBoxEditor.L_Variant=Variant
+PostBoxEditor.L_Species=Species
+PostBoxEditor.L_Post_To=To Line:
+PostBoxEditor.L_Post_Message=Message:
+PostBoxEditor.L_Post_From=From Line:
+PostBoxEditor.L_Post_UsedSlots=Used Slots:
+PostBoxEditor.L_Post_UsedSlots_Value=unknown
+PostBoxEditor.L_Post_SelectedSlot=Selected Slot:
+PostBoxEditor.L_SenderType=Sender Type
+PostBoxEditor.L_Post_TimeStamp=Timestamp
+PostBoxEditor.L_Post_Language=Language
+PostBoxEditor.L_Post_CountTo=count
+PostBoxEditor.L_Post_CountMsg=count
+PostBoxEditor.L_Post_CountFrom=count
+PostBoxEditor.L_Post_MailType=Mail Type:
+PostBoxEditor.L_Post_AttachmentSkin=Attachment Skin:
+PostBoxEditor.TP_Post_SR=Details
+PostBoxEditor.TP_Post_Items=Attachments
ReactionEditor.B_Cancel=Indietro
ReactionEditor.B_GiveAll=Tutto
ReactionEditor.B_Save=Salva
diff --git a/NHSE.WinForms/Resources/text/lang_jp.txt b/NHSE.WinForms/Resources/text/lang_jp.txt
index d0e2578..31225b1 100644
--- a/NHSE.WinForms/Resources/text/lang_jp.txt
+++ b/NHSE.WinForms/Resources/text/lang_jp.txt
@@ -399,6 +399,43 @@ PlayerItemEditor.L_Flag0=Flag0:
PlayerItemEditor.L_Flag1=Flag1:
PlayerItemEditor.L_Uses=Uses:
PlayerItemEditor.L_WaterDays=Days:
+PostBoxEditor.B_Cancel=Cancel
+PostBoxEditor.B_Save=Save Slot
+PostBoxEditor.B_Delete=Delete Mail
+PostBoxEditor.B_Import=Import Mail
+PostBoxEditor.B_Dump=Dump Mail
+PostBoxEditor.B_Post_DumpAll=Dump All
+PostBoxEditor.CK_Post_Read=Mark Read
+PostBoxEditor.CK_Post_Faved=Favorited
+PostBoxEditor.GB_Post_Villager=Villager
+PostBoxEditor.GB_Post_Player=Player
+PostBoxEditor.GB_Post_NPC=NPC
+PostBoxEditor.GB_Post_ReceiverPlayer=Receiver Player
+PostBoxEditor.GB_Post_Stationery=Stationery Type
+PostBoxEditor.GB_Post_AttachedInfo=Attachment Info
+PostBoxEditor.GB_Post_ReceiverIsland=Receiver Island
+PostBoxEditor.L_Sender_Edit=Edit Sender:
+PostBoxEditor.L_Sender_ExternalName=Sender Name:
+PostBoxEditor.L_ExternalName=unknown
+PostBoxEditor.L_InternalName=unknown
+PostBoxEditor.L_Variant=Variant
+PostBoxEditor.L_Species=Species
+PostBoxEditor.L_Post_To=To Line:
+PostBoxEditor.L_Post_Message=Message:
+PostBoxEditor.L_Post_From=From Line:
+PostBoxEditor.L_Post_UsedSlots=Used Slots:
+PostBoxEditor.L_Post_UsedSlots_Value=unknown
+PostBoxEditor.L_Post_SelectedSlot=Selected Slot:
+PostBoxEditor.L_SenderType=Sender Type
+PostBoxEditor.L_Post_TimeStamp=Timestamp
+PostBoxEditor.L_Post_Language=Language
+PostBoxEditor.L_Post_CountTo=count
+PostBoxEditor.L_Post_CountMsg=count
+PostBoxEditor.L_Post_CountFrom=count
+PostBoxEditor.L_Post_MailType=Mail Type:
+PostBoxEditor.L_Post_AttachmentSkin=Attachment Skin:
+PostBoxEditor.TP_Post_SR=Details
+PostBoxEditor.TP_Post_Items=Attachments
ReactionEditor.B_Cancel=Cancel
ReactionEditor.B_GiveAll=Give All
ReactionEditor.B_Save=Save
diff --git a/NHSE.WinForms/Resources/text/lang_ko.txt b/NHSE.WinForms/Resources/text/lang_ko.txt
index 22ae1ec..9175610 100644
--- a/NHSE.WinForms/Resources/text/lang_ko.txt
+++ b/NHSE.WinForms/Resources/text/lang_ko.txt
@@ -399,6 +399,43 @@ PlayerItemEditor.L_Flag0=플래그0:
PlayerItemEditor.L_Flag1=플래그1:
PlayerItemEditor.L_Uses=사용 횟수:
PlayerItemEditor.L_WaterDays=일수:
+PostBoxEditor.B_Cancel=Cancel
+PostBoxEditor.B_Save=Save Slot
+PostBoxEditor.B_Delete=Delete Mail
+PostBoxEditor.B_Import=Import Mail
+PostBoxEditor.B_Dump=Dump Mail
+PostBoxEditor.B_Post_DumpAll=Dump All
+PostBoxEditor.CK_Post_Read=Mark Read
+PostBoxEditor.CK_Post_Faved=Favorited
+PostBoxEditor.GB_Post_Villager=Villager
+PostBoxEditor.GB_Post_Player=Player
+PostBoxEditor.GB_Post_NPC=NPC
+PostBoxEditor.GB_Post_ReceiverPlayer=Receiver Player
+PostBoxEditor.GB_Post_Stationery=Stationery Type
+PostBoxEditor.GB_Post_AttachedInfo=Attachment Info
+PostBoxEditor.GB_Post_ReceiverIsland=Receiver Island
+PostBoxEditor.L_Sender_Edit=Edit Sender:
+PostBoxEditor.L_Sender_ExternalName=Sender Name:
+PostBoxEditor.L_ExternalName=unknown
+PostBoxEditor.L_InternalName=unknown
+PostBoxEditor.L_Variant=Variant
+PostBoxEditor.L_Species=Species
+PostBoxEditor.L_Post_To=To Line:
+PostBoxEditor.L_Post_Message=Message:
+PostBoxEditor.L_Post_From=From Line:
+PostBoxEditor.L_Post_UsedSlots=Used Slots:
+PostBoxEditor.L_Post_UsedSlots_Value=unknown
+PostBoxEditor.L_Post_SelectedSlot=Selected Slot:
+PostBoxEditor.L_SenderType=Sender Type
+PostBoxEditor.L_Post_TimeStamp=Timestamp
+PostBoxEditor.L_Post_Language=Language
+PostBoxEditor.L_Post_CountTo=count
+PostBoxEditor.L_Post_CountMsg=count
+PostBoxEditor.L_Post_CountFrom=count
+PostBoxEditor.L_Post_MailType=Mail Type:
+PostBoxEditor.L_Post_AttachmentSkin=Attachment Skin:
+PostBoxEditor.TP_Post_SR=Details
+PostBoxEditor.TP_Post_Items=Attachments
ReactionEditor.B_Cancel=취소
ReactionEditor.B_GiveAll=모두 지급
ReactionEditor.B_Save=저장
diff --git a/NHSE.WinForms/Resources/text/lang_zhs.txt b/NHSE.WinForms/Resources/text/lang_zhs.txt
index 9b4ba98..0b833d0 100644
--- a/NHSE.WinForms/Resources/text/lang_zhs.txt
+++ b/NHSE.WinForms/Resources/text/lang_zhs.txt
@@ -399,6 +399,43 @@ PlayerItemEditor.L_Flag0=属性 0:
PlayerItemEditor.L_Flag1=属性 1:
PlayerItemEditor.L_Uses=耐久:
PlayerItemEditor.L_WaterDays=天数:
+PostBoxEditor.B_Cancel=Cancel
+PostBoxEditor.B_Save=Save Slot
+PostBoxEditor.B_Delete=Delete Mail
+PostBoxEditor.B_Import=Import Mail
+PostBoxEditor.B_Dump=Dump Mail
+PostBoxEditor.B_Post_DumpAll=Dump All
+PostBoxEditor.CK_Post_Read=Mark Read
+PostBoxEditor.CK_Post_Faved=Favorited
+PostBoxEditor.GB_Post_Villager=Villager
+PostBoxEditor.GB_Post_Player=Player
+PostBoxEditor.GB_Post_NPC=NPC
+PostBoxEditor.GB_Post_ReceiverPlayer=Receiver Player
+PostBoxEditor.GB_Post_Stationery=Stationery Type
+PostBoxEditor.GB_Post_AttachedInfo=Attachment Info
+PostBoxEditor.GB_Post_ReceiverIsland=Receiver Island
+PostBoxEditor.L_Sender_Edit=Edit Sender:
+PostBoxEditor.L_Sender_ExternalName=Sender Name:
+PostBoxEditor.L_ExternalName=unknown
+PostBoxEditor.L_InternalName=unknown
+PostBoxEditor.L_Variant=Variant
+PostBoxEditor.L_Species=Species
+PostBoxEditor.L_Post_To=To Line:
+PostBoxEditor.L_Post_Message=Message:
+PostBoxEditor.L_Post_From=From Line:
+PostBoxEditor.L_Post_UsedSlots=Used Slots:
+PostBoxEditor.L_Post_UsedSlots_Value=unknown
+PostBoxEditor.L_Post_SelectedSlot=Selected Slot:
+PostBoxEditor.L_SenderType=Sender Type
+PostBoxEditor.L_Post_TimeStamp=Timestamp
+PostBoxEditor.L_Post_Language=Language
+PostBoxEditor.L_Post_CountTo=count
+PostBoxEditor.L_Post_CountMsg=count
+PostBoxEditor.L_Post_CountFrom=count
+PostBoxEditor.L_Post_MailType=Mail Type:
+PostBoxEditor.L_Post_AttachmentSkin=Attachment Skin:
+PostBoxEditor.TP_Post_SR=Details
+PostBoxEditor.TP_Post_Items=Attachments
ReactionEditor.B_Cancel=取消
ReactionEditor.B_GiveAll=获得全部
ReactionEditor.B_Save=保存
diff --git a/NHSE.WinForms/Resources/text/lang_zht.txt b/NHSE.WinForms/Resources/text/lang_zht.txt
index bd2704b..9145e28 100644
--- a/NHSE.WinForms/Resources/text/lang_zht.txt
+++ b/NHSE.WinForms/Resources/text/lang_zht.txt
@@ -399,6 +399,43 @@ PlayerItemEditor.L_Flag0=屬性 0:
PlayerItemEditor.L_Flag1=屬性 1:
PlayerItemEditor.L_Uses=耐久:
PlayerItemEditor.L_WaterDays=天數:
+PostBoxEditor.B_Cancel=Cancel
+PostBoxEditor.B_Save=Save Slot
+PostBoxEditor.B_Delete=Delete Mail
+PostBoxEditor.B_Import=Import Mail
+PostBoxEditor.B_Dump=Dump Mail
+PostBoxEditor.B_Post_DumpAll=Dump All
+PostBoxEditor.CK_Post_Read=Mark Read
+PostBoxEditor.CK_Post_Faved=Favorited
+PostBoxEditor.GB_Post_Villager=Villager
+PostBoxEditor.GB_Post_Player=Player
+PostBoxEditor.GB_Post_NPC=NPC
+PostBoxEditor.GB_Post_ReceiverPlayer=Receiver Player
+PostBoxEditor.GB_Post_Stationery=Stationery Type
+PostBoxEditor.GB_Post_AttachedInfo=Attachment Info
+PostBoxEditor.GB_Post_ReceiverIsland=Receiver Island
+PostBoxEditor.L_Sender_Edit=Edit Sender:
+PostBoxEditor.L_Sender_ExternalName=Sender Name:
+PostBoxEditor.L_ExternalName=unknown
+PostBoxEditor.L_InternalName=unknown
+PostBoxEditor.L_Variant=Variant
+PostBoxEditor.L_Species=Species
+PostBoxEditor.L_Post_To=To Line:
+PostBoxEditor.L_Post_Message=Message:
+PostBoxEditor.L_Post_From=From Line:
+PostBoxEditor.L_Post_UsedSlots=Used Slots:
+PostBoxEditor.L_Post_UsedSlots_Value=unknown
+PostBoxEditor.L_Post_SelectedSlot=Selected Slot:
+PostBoxEditor.L_SenderType=Sender Type
+PostBoxEditor.L_Post_TimeStamp=Timestamp
+PostBoxEditor.L_Post_Language=Language
+PostBoxEditor.L_Post_CountTo=count
+PostBoxEditor.L_Post_CountMsg=count
+PostBoxEditor.L_Post_CountFrom=count
+PostBoxEditor.L_Post_MailType=Mail Type:
+PostBoxEditor.L_Post_AttachmentSkin=Attachment Skin:
+PostBoxEditor.TP_Post_SR=Details
+PostBoxEditor.TP_Post_Items=Attachments
ReactionEditor.B_Cancel=取消
ReactionEditor.B_GiveAll=獲得全部
ReactionEditor.B_Save=儲存
diff --git a/NHSE.WinForms/Subforms/Map/PatternEditor.Designer.cs b/NHSE.WinForms/Subforms/Map/PatternEditor.Designer.cs
index b9510bc..730ff03 100644
--- a/NHSE.WinForms/Subforms/Map/PatternEditor.Designer.cs
+++ b/NHSE.WinForms/Subforms/Map/PatternEditor.Designer.cs
@@ -28,178 +28,185 @@ protected override void Dispose(bool disposing)
///
private void InitializeComponent()
{
- this.components = new System.ComponentModel.Container();
- this.B_Save = new System.Windows.Forms.Button();
- this.B_Cancel = new System.Windows.Forms.Button();
- this.LB_Items = new System.Windows.Forms.ListBox();
- this.PB_Palette = new System.Windows.Forms.PictureBox();
- this.L_PatternName = new System.Windows.Forms.Label();
- this.B_DumpLoadDesign = new System.Windows.Forms.Button();
- this.CM_DLDesign = new System.Windows.Forms.ContextMenuStrip(this.components);
- this.B_DumpDesign = new System.Windows.Forms.ToolStripMenuItem();
- this.B_DumpDesignAll = new System.Windows.Forms.ToolStripMenuItem();
- this.B_LoadDesign = new System.Windows.Forms.ToolStripMenuItem();
- this.B_LoadDesignAll = new System.Windows.Forms.ToolStripMenuItem();
- this.PB_Pattern = new System.Windows.Forms.PictureBox();
- this.CM_Picture = new System.Windows.Forms.ContextMenuStrip(this.components);
- this.Menu_SavePNG = new System.Windows.Forms.ToolStripMenuItem();
- ((System.ComponentModel.ISupportInitialize)(this.PB_Palette)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.PB_Pattern)).BeginInit();
- this.CM_Picture.SuspendLayout();
- this.CM_DLDesign.SuspendLayout();
- this.SuspendLayout();
+ components = new System.ComponentModel.Container();
+ B_Save = new System.Windows.Forms.Button();
+ B_Cancel = new System.Windows.Forms.Button();
+ LB_Items = new System.Windows.Forms.ListBox();
+ PB_Palette = new System.Windows.Forms.PictureBox();
+ L_PatternName = new System.Windows.Forms.Label();
+ B_DumpLoadDesign = new System.Windows.Forms.Button();
+ CM_DLDesign = new System.Windows.Forms.ContextMenuStrip(components);
+ B_DumpDesign = new System.Windows.Forms.ToolStripMenuItem();
+ B_DumpDesignAll = new System.Windows.Forms.ToolStripMenuItem();
+ B_LoadDesign = new System.Windows.Forms.ToolStripMenuItem();
+ B_LoadDesignAll = new System.Windows.Forms.ToolStripMenuItem();
+ PB_Pattern = new System.Windows.Forms.PictureBox();
+ CM_Picture = new System.Windows.Forms.ContextMenuStrip(components);
+ Menu_SavePNG = new System.Windows.Forms.ToolStripMenuItem();
+ CB_Pattern_OverwriteDesigner = new System.Windows.Forms.CheckBox();
+ ((System.ComponentModel.ISupportInitialize)PB_Palette).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)PB_Pattern).BeginInit();
+ CM_Picture.SuspendLayout();
+ SuspendLayout();
//
// B_Save
//
- this.B_Save.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.B_Save.Location = new System.Drawing.Point(488, 276);
- this.B_Save.Name = "B_Save";
- this.B_Save.Size = new System.Drawing.Size(92, 40);
- this.B_Save.TabIndex = 1;
- this.B_Save.Text = "Save";
- this.B_Save.UseVisualStyleBackColor = true;
- this.B_Save.Click += new System.EventHandler(this.B_Save_Click);
+ B_Save.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right;
+ B_Save.Location = new System.Drawing.Point(490, 276);
+ B_Save.Name = "B_Save";
+ B_Save.Size = new System.Drawing.Size(92, 40);
+ B_Save.TabIndex = 1;
+ B_Save.Text = "Save";
+ B_Save.UseVisualStyleBackColor = true;
+ B_Save.Click += B_Save_Click;
//
// B_Cancel
//
- this.B_Cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.B_Cancel.Location = new System.Drawing.Point(390, 276);
- this.B_Cancel.Name = "B_Cancel";
- this.B_Cancel.Size = new System.Drawing.Size(92, 40);
- this.B_Cancel.TabIndex = 2;
- this.B_Cancel.Text = "Cancel";
- this.B_Cancel.UseVisualStyleBackColor = true;
- this.B_Cancel.Click += new System.EventHandler(this.B_Cancel_Click);
+ B_Cancel.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right;
+ B_Cancel.Location = new System.Drawing.Point(392, 276);
+ B_Cancel.Name = "B_Cancel";
+ B_Cancel.Size = new System.Drawing.Size(92, 40);
+ B_Cancel.TabIndex = 2;
+ B_Cancel.Text = "Cancel";
+ B_Cancel.UseVisualStyleBackColor = true;
+ B_Cancel.Click += B_Cancel_Click;
//
// LB_Items
//
- this.LB_Items.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)));
- this.LB_Items.FormattingEnabled = true;
- this.LB_Items.Location = new System.Drawing.Point(12, 12);
- this.LB_Items.Name = "LB_Items";
- this.LB_Items.Size = new System.Drawing.Size(149, 303);
- this.LB_Items.TabIndex = 3;
- this.LB_Items.SelectedIndexChanged += new System.EventHandler(this.LB_Items_SelectedIndexChanged);
+ LB_Items.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
+ LB_Items.FormattingEnabled = true;
+ LB_Items.Location = new System.Drawing.Point(12, 12);
+ LB_Items.Name = "LB_Items";
+ LB_Items.Size = new System.Drawing.Size(149, 289);
+ LB_Items.TabIndex = 3;
+ LB_Items.SelectedIndexChanged += LB_Items_SelectedIndexChanged;
//
// PB_Palette
//
- this.PB_Palette.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
- this.PB_Palette.Location = new System.Drawing.Point(432, 12);
- this.PB_Palette.Name = "PB_Palette";
- this.PB_Palette.Size = new System.Drawing.Size(152, 12);
- this.PB_Palette.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
- this.PB_Palette.TabIndex = 34;
- this.PB_Palette.TabStop = false;
+ PB_Palette.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+ PB_Palette.Location = new System.Drawing.Point(432, 12);
+ PB_Palette.Name = "PB_Palette";
+ PB_Palette.Size = new System.Drawing.Size(152, 12);
+ PB_Palette.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
+ PB_Palette.TabIndex = 34;
+ PB_Palette.TabStop = false;
//
// L_PatternName
//
- this.L_PatternName.AutoSize = true;
- this.L_PatternName.Location = new System.Drawing.Point(429, 28);
- this.L_PatternName.Name = "L_PatternName";
- this.L_PatternName.Size = new System.Drawing.Size(73, 13);
- this.L_PatternName.TabIndex = 33;
- this.L_PatternName.Text = "*PatternName";
+ L_PatternName.AutoSize = true;
+ L_PatternName.Location = new System.Drawing.Point(429, 28);
+ L_PatternName.Name = "L_PatternName";
+ L_PatternName.Size = new System.Drawing.Size(82, 15);
+ L_PatternName.TabIndex = 33;
+ L_PatternName.Text = "*PatternName";
//
// B_DumpLoadDesign
//
- this.B_DumpLoadDesign.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
- this.B_DumpLoadDesign.ContextMenuStrip = this.CM_DLDesign;
- this.B_DumpLoadDesign.Location = new System.Drawing.Point(168, 276);
- this.B_DumpLoadDesign.Name = "B_DumpLoadDesign";
- this.B_DumpLoadDesign.Size = new System.Drawing.Size(92, 40);
- this.B_DumpLoadDesign.TabIndex = 31;
- this.B_DumpLoadDesign.Text = "Dump/Import";
- this.B_DumpLoadDesign.UseVisualStyleBackColor = true;
- this.B_DumpLoadDesign.Click += new System.EventHandler(this.B_DumpLoadDesign_Click);
+ B_DumpLoadDesign.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
+ B_DumpLoadDesign.ContextMenuStrip = CM_DLDesign;
+ B_DumpLoadDesign.Location = new System.Drawing.Point(168, 276);
+ B_DumpLoadDesign.Name = "B_DumpLoadDesign";
+ B_DumpLoadDesign.Size = new System.Drawing.Size(92, 40);
+ B_DumpLoadDesign.TabIndex = 31;
+ B_DumpLoadDesign.Text = "Dump/Import";
+ B_DumpLoadDesign.UseVisualStyleBackColor = true;
+ B_DumpLoadDesign.Click += B_DumpLoadDesign_Click;
//
// CM_DLDesign
//
- this.CM_DLDesign.ImageScalingSize = new System.Drawing.Size(20, 20);
- this.CM_DLDesign.Name = "CM_DLDesign";
- this.CM_DLDesign.ShowImageMargin = false;
- this.CM_DLDesign.Size = new System.Drawing.Size(93, 92);
+ CM_DLDesign.ImageScalingSize = new System.Drawing.Size(20, 20);
+ CM_DLDesign.Name = "CM_DLDesign";
+ CM_DLDesign.ShowImageMargin = false;
+ CM_DLDesign.Size = new System.Drawing.Size(36, 4);
//
// B_DumpDesign
//
- this.B_DumpDesign.Name = "B_DumpDesign";
- this.B_DumpDesign.Size = new System.Drawing.Size(92, 22);
- this.B_DumpDesign.Text = "Dump Design";
- this.B_DumpDesign.Click += new System.EventHandler(this.B_DumpDesign_Click);
+ B_DumpDesign.Name = "B_DumpDesign";
+ B_DumpDesign.Size = new System.Drawing.Size(92, 22);
+ B_DumpDesign.Text = "Dump Design";
+ B_DumpDesign.Click += B_DumpDesign_Click;
//
// B_DumpDesignAll
//
- this.B_DumpDesignAll.Name = "B_DumpDesignAll";
- this.B_DumpDesignAll.Size = new System.Drawing.Size(92, 22);
- this.B_DumpDesignAll.Text = "Dump All Designs";
- this.B_DumpDesignAll.Click += new System.EventHandler(this.B_DumpDesign_Click);
+ B_DumpDesignAll.Name = "B_DumpDesignAll";
+ B_DumpDesignAll.Size = new System.Drawing.Size(92, 22);
+ B_DumpDesignAll.Text = "Dump All Designs";
+ B_DumpDesignAll.Click += B_DumpDesign_Click;
//
// B_LoadDesign
//
- this.B_LoadDesign.Name = "B_LoadDesign";
- this.B_LoadDesign.Size = new System.Drawing.Size(92, 22);
- this.B_LoadDesign.Text = "Load Design";
- this.B_LoadDesign.Click += new System.EventHandler(this.B_LoadDesign_Click);
+ B_LoadDesign.Name = "B_LoadDesign";
+ B_LoadDesign.Size = new System.Drawing.Size(92, 22);
+ B_LoadDesign.Text = "Load Design";
+ B_LoadDesign.Click += B_LoadDesign_Click;
//
// B_LoadDesignAll
//
- this.B_LoadDesignAll.Name = "B_LoadDesignAll";
- this.B_LoadDesignAll.Size = new System.Drawing.Size(92, 22);
- this.B_LoadDesignAll.Text = "Load All Designs";
- this.B_LoadDesignAll.Click += new System.EventHandler(this.B_LoadDesign_Click);
+ B_LoadDesignAll.Name = "B_LoadDesignAll";
+ B_LoadDesignAll.Size = new System.Drawing.Size(92, 22);
+ B_LoadDesignAll.Text = "Load All Designs";
+ B_LoadDesignAll.Click += B_LoadDesign_Click;
//
// PB_Pattern
//
- this.PB_Pattern.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
- this.PB_Pattern.ContextMenuStrip = this.CM_Picture;
- this.PB_Pattern.Location = new System.Drawing.Point(168, 12);
- this.PB_Pattern.Name = "PB_Pattern";
- this.PB_Pattern.Size = new System.Drawing.Size(258, 258);
- this.PB_Pattern.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
- this.PB_Pattern.TabIndex = 30;
- this.PB_Pattern.TabStop = false;
- this.PB_Pattern.MouseEnter += new System.EventHandler(this.PB_Pattern_MouseEnter);
- this.PB_Pattern.MouseLeave += new System.EventHandler(this.PB_Pattern_MouseLeave);
+ PB_Pattern.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+ PB_Pattern.ContextMenuStrip = CM_Picture;
+ PB_Pattern.Location = new System.Drawing.Point(168, 12);
+ PB_Pattern.Name = "PB_Pattern";
+ PB_Pattern.Size = new System.Drawing.Size(258, 258);
+ PB_Pattern.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
+ PB_Pattern.TabIndex = 30;
+ PB_Pattern.TabStop = false;
+ PB_Pattern.MouseEnter += PB_Pattern_MouseEnter;
+ PB_Pattern.MouseLeave += PB_Pattern_MouseLeave;
//
// CM_Picture
//
- this.CM_Picture.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.Menu_SavePNG});
- this.CM_Picture.Name = "CM_Picture";
- this.CM_Picture.ShowImageMargin = false;
- this.CM_Picture.Size = new System.Drawing.Size(156, 48);
+ CM_Picture.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { Menu_SavePNG });
+ CM_Picture.Name = "CM_Picture";
+ CM_Picture.ShowImageMargin = false;
+ CM_Picture.Size = new System.Drawing.Size(101, 26);
//
// Menu_SavePNG
//
- this.Menu_SavePNG.Name = "Menu_SavePNG";
- this.Menu_SavePNG.Size = new System.Drawing.Size(155, 22);
- this.Menu_SavePNG.Text = "Save .png";
- this.Menu_SavePNG.Click += new System.EventHandler(this.Menu_SavePNG_Click);
+ Menu_SavePNG.Name = "Menu_SavePNG";
+ Menu_SavePNG.Size = new System.Drawing.Size(100, 22);
+ Menu_SavePNG.Text = "Save .png";
+ Menu_SavePNG.Click += Menu_SavePNG_Click;
+ //
+ // CB_Pattern_OverwriteDesigner
+ //
+ CB_Pattern_OverwriteDesigner.AutoSize = true;
+ CB_Pattern_OverwriteDesigner.Location = new System.Drawing.Point(263, 288);
+ CB_Pattern_OverwriteDesigner.Name = "CB_Pattern_OverwriteDesigner";
+ CB_Pattern_OverwriteDesigner.Size = new System.Drawing.Size(126, 19);
+ CB_Pattern_OverwriteDesigner.TabIndex = 35;
+ CB_Pattern_OverwriteDesigner.Text = "Overwrite Designer";
+ CB_Pattern_OverwriteDesigner.UseVisualStyleBackColor = true;
//
// PatternEditor
//
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
- this.ClientSize = new System.Drawing.Size(592, 328);
- this.Controls.Add(this.PB_Palette);
- this.Controls.Add(this.L_PatternName);
- this.Controls.Add(this.B_DumpLoadDesign);
- this.Controls.Add(this.PB_Pattern);
- this.Controls.Add(this.LB_Items);
- this.Controls.Add(this.B_Cancel);
- this.Controls.Add(this.B_Save);
- this.Icon = global::NHSE.WinForms.Properties.Resources.icon;
- this.MaximizeBox = false;
- this.MinimizeBox = false;
- this.Name = "PatternEditor";
- this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
- this.Text = "Pattern Editor";
- ((System.ComponentModel.ISupportInitialize)(this.PB_Palette)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.PB_Pattern)).EndInit();
- this.CM_Picture.ResumeLayout(false);
- this.CM_DLDesign.ResumeLayout(false);
- this.ResumeLayout(false);
- this.PerformLayout();
+ AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+ ClientSize = new System.Drawing.Size(592, 328);
+ Controls.Add(CB_Pattern_OverwriteDesigner);
+ Controls.Add(PB_Palette);
+ Controls.Add(L_PatternName);
+ Controls.Add(B_DumpLoadDesign);
+ Controls.Add(PB_Pattern);
+ Controls.Add(LB_Items);
+ Controls.Add(B_Cancel);
+ Controls.Add(B_Save);
+ Icon = Properties.Resources.icon;
+ MaximizeBox = false;
+ MinimizeBox = false;
+ Name = "PatternEditor";
+ StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ Text = "Pattern Editor";
+ ((System.ComponentModel.ISupportInitialize)PB_Palette).EndInit();
+ ((System.ComponentModel.ISupportInitialize)PB_Pattern).EndInit();
+ CM_Picture.ResumeLayout(false);
+ ResumeLayout(false);
+ PerformLayout();
}
@@ -218,5 +225,6 @@ private void InitializeComponent()
private System.Windows.Forms.PictureBox PB_Pattern;
private System.Windows.Forms.ContextMenuStrip CM_Picture;
private System.Windows.Forms.ToolStripMenuItem Menu_SavePNG;
+ private System.Windows.Forms.CheckBox CB_Pattern_OverwriteDesigner;
}
}
\ No newline at end of file
diff --git a/NHSE.WinForms/Subforms/Map/PatternEditor.cs b/NHSE.WinForms/Subforms/Map/PatternEditor.cs
index 527d8c0..a3ca12b 100644
--- a/NHSE.WinForms/Subforms/Map/PatternEditor.cs
+++ b/NHSE.WinForms/Subforms/Map/PatternEditor.cs
@@ -1,25 +1,28 @@
-using System;
+using NHSE.Core;
+using NHSE.Sprites;
+using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
+using System.Runtime.Intrinsics.Arm;
using System.Windows.Forms;
-using NHSE.Core;
-using NHSE.Sprites;
namespace NHSE.WinForms;
public partial class PatternEditor : Form
{
private readonly DesignPattern[] Patterns;
+ private readonly Player Player;
private int Index;
private const int scale = 8;
- public PatternEditor(DesignPattern[] patterns)
+ public PatternEditor(DesignPattern[] patterns, Player player)
{
InitializeComponent();
this.TranslateInterface(GameInfo.CurrentLanguage);
Patterns = patterns;
+ Player = player;
DialogResult = DialogResult.Cancel;
foreach (var p in patterns)
@@ -146,8 +149,44 @@ private void RepopulateList(int index)
LB_Items.SelectedIndex = index;
}
+ public bool ContainsTransparentPixels(Bitmap image)
+ {
+ for (int y = 0; y < image.Height; ++y)
+ {
+ for (int x = 0; x < image.Width; ++x)
+ {
+ if (image.GetPixel(x, y).A < 255) // check alpha
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
private void LoadPattern(DesignPattern designPattern)
{
+ if (designPattern.UsageCompatibility is not (0xEE00 or 0xEE02)) // known valid values (00=non-transparent, 02=transparent)
+ {
+ using var image = designPattern.GetImage();
+ if (ContainsTransparentPixels(image))
+ {
+ designPattern.UsageCompatibility = 0xEE02; // set to transparent
+ }
+ else
+ {
+ designPattern.UsageCompatibility = 0xEE00; // reset to default value (non-transparent)
+ }
+ }
+
+ if (CB_Pattern_OverwriteDesigner.Checked)
+ {
+ designPattern.PlayerID = Player.Personal.PlayerID;
+ designPattern.PlayerName = Player.Personal.PlayerName;
+ designPattern.TownID = Player.Personal.TownID;
+ designPattern.TownName = Player.Personal.TownName;
+ }
+
PB_Pattern.Image = ImageUtil.ResizeImage(designPattern.GetImage(), DesignPattern.Width * scale, DesignPattern.Height * scale);
PB_Palette.Image = ImageUtil.ResizeImage(designPattern.GetPalette(), 150, 10);
L_PatternName.Text = designPattern.DesignName + Environment.NewLine +
diff --git a/NHSE.WinForms/Subforms/Map/PatternEditor.resx b/NHSE.WinForms/Subforms/Map/PatternEditor.resx
index 978a819..20f38d5 100644
--- a/NHSE.WinForms/Subforms/Map/PatternEditor.resx
+++ b/NHSE.WinForms/Subforms/Map/PatternEditor.resx
@@ -1,17 +1,17 @@
-
@@ -117,7 +117,10 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
+
17, 17
+
+ 145, 17
+
\ No newline at end of file
diff --git a/NHSE.WinForms/Subforms/Map/PatternEditorPRO.Designer.cs b/NHSE.WinForms/Subforms/Map/PatternEditorPRO.Designer.cs
index f337529..624f448 100644
--- a/NHSE.WinForms/Subforms/Map/PatternEditorPRO.Designer.cs
+++ b/NHSE.WinForms/Subforms/Map/PatternEditorPRO.Designer.cs
@@ -28,223 +28,230 @@ protected override void Dispose(bool disposing)
///
private void InitializeComponent()
{
- this.components = new System.ComponentModel.Container();
- this.B_Save = new System.Windows.Forms.Button();
- this.B_Cancel = new System.Windows.Forms.Button();
- this.LB_Items = new System.Windows.Forms.ListBox();
- this.PB_Palette = new System.Windows.Forms.PictureBox();
- this.L_PatternName = new System.Windows.Forms.Label();
- this.B_DumpLoadDesign = new System.Windows.Forms.Button();
- this.CM_DLDesign = new System.Windows.Forms.ContextMenuStrip(this.components);
- this.B_DumpDesign = new System.Windows.Forms.ToolStripMenuItem();
- this.B_DumpDesignAll = new System.Windows.Forms.ToolStripMenuItem();
- this.B_LoadDesign = new System.Windows.Forms.ToolStripMenuItem();
- this.B_LoadDesignAll = new System.Windows.Forms.ToolStripMenuItem();
- this.PB_Sheet0 = new System.Windows.Forms.PictureBox();
- this.CM_Picture = new System.Windows.Forms.ContextMenuStrip(this.components);
- this.Menu_SavePNG = new System.Windows.Forms.ToolStripMenuItem();
- this.PB_Sheet1 = new System.Windows.Forms.PictureBox();
- this.PB_Sheet3 = new System.Windows.Forms.PictureBox();
- this.PB_Sheet2 = new System.Windows.Forms.PictureBox();
- ((System.ComponentModel.ISupportInitialize)(this.PB_Palette)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.PB_Sheet0)).BeginInit();
- this.CM_Picture.SuspendLayout();
- this.CM_DLDesign.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.PB_Sheet1)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.PB_Sheet3)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.PB_Sheet2)).BeginInit();
- this.SuspendLayout();
+ components = new System.ComponentModel.Container();
+ B_Save = new System.Windows.Forms.Button();
+ B_Cancel = new System.Windows.Forms.Button();
+ LB_Items = new System.Windows.Forms.ListBox();
+ PB_Palette = new System.Windows.Forms.PictureBox();
+ L_PatternName = new System.Windows.Forms.Label();
+ B_DumpLoadDesign = new System.Windows.Forms.Button();
+ CM_DLDesign = new System.Windows.Forms.ContextMenuStrip(components);
+ B_DumpDesign = new System.Windows.Forms.ToolStripMenuItem();
+ B_DumpDesignAll = new System.Windows.Forms.ToolStripMenuItem();
+ B_LoadDesign = new System.Windows.Forms.ToolStripMenuItem();
+ B_LoadDesignAll = new System.Windows.Forms.ToolStripMenuItem();
+ PB_Sheet0 = new System.Windows.Forms.PictureBox();
+ CM_Picture = new System.Windows.Forms.ContextMenuStrip(components);
+ Menu_SavePNG = new System.Windows.Forms.ToolStripMenuItem();
+ PB_Sheet1 = new System.Windows.Forms.PictureBox();
+ PB_Sheet3 = new System.Windows.Forms.PictureBox();
+ PB_Sheet2 = new System.Windows.Forms.PictureBox();
+ CB_Pattern_OverwriteDesigner = new System.Windows.Forms.CheckBox();
+ ((System.ComponentModel.ISupportInitialize)PB_Palette).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)PB_Sheet0).BeginInit();
+ CM_Picture.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)PB_Sheet1).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)PB_Sheet3).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)PB_Sheet2).BeginInit();
+ SuspendLayout();
//
// B_Save
//
- this.B_Save.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.B_Save.Location = new System.Drawing.Point(488, 276);
- this.B_Save.Name = "B_Save";
- this.B_Save.Size = new System.Drawing.Size(92, 40);
- this.B_Save.TabIndex = 1;
- this.B_Save.Text = "Save";
- this.B_Save.UseVisualStyleBackColor = true;
- this.B_Save.Click += new System.EventHandler(this.B_Save_Click);
+ B_Save.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right;
+ B_Save.Location = new System.Drawing.Point(490, 276);
+ B_Save.Name = "B_Save";
+ B_Save.Size = new System.Drawing.Size(92, 40);
+ B_Save.TabIndex = 1;
+ B_Save.Text = "Save";
+ B_Save.UseVisualStyleBackColor = true;
+ B_Save.Click += B_Save_Click;
//
// B_Cancel
//
- this.B_Cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.B_Cancel.Location = new System.Drawing.Point(390, 276);
- this.B_Cancel.Name = "B_Cancel";
- this.B_Cancel.Size = new System.Drawing.Size(92, 40);
- this.B_Cancel.TabIndex = 2;
- this.B_Cancel.Text = "Cancel";
- this.B_Cancel.UseVisualStyleBackColor = true;
- this.B_Cancel.Click += new System.EventHandler(this.B_Cancel_Click);
+ B_Cancel.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right;
+ B_Cancel.Location = new System.Drawing.Point(392, 276);
+ B_Cancel.Name = "B_Cancel";
+ B_Cancel.Size = new System.Drawing.Size(92, 40);
+ B_Cancel.TabIndex = 2;
+ B_Cancel.Text = "Cancel";
+ B_Cancel.UseVisualStyleBackColor = true;
+ B_Cancel.Click += B_Cancel_Click;
//
// LB_Items
//
- this.LB_Items.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)));
- this.LB_Items.FormattingEnabled = true;
- this.LB_Items.Location = new System.Drawing.Point(12, 12);
- this.LB_Items.Name = "LB_Items";
- this.LB_Items.Size = new System.Drawing.Size(149, 303);
- this.LB_Items.TabIndex = 3;
- this.LB_Items.SelectedIndexChanged += new System.EventHandler(this.LB_Items_SelectedIndexChanged);
+ LB_Items.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
+ LB_Items.FormattingEnabled = true;
+ LB_Items.Location = new System.Drawing.Point(12, 12);
+ LB_Items.Name = "LB_Items";
+ LB_Items.Size = new System.Drawing.Size(149, 289);
+ LB_Items.TabIndex = 3;
+ LB_Items.SelectedIndexChanged += LB_Items_SelectedIndexChanged;
//
// PB_Palette
//
- this.PB_Palette.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
- this.PB_Palette.Location = new System.Drawing.Point(432, 12);
- this.PB_Palette.Name = "PB_Palette";
- this.PB_Palette.Size = new System.Drawing.Size(152, 12);
- this.PB_Palette.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
- this.PB_Palette.TabIndex = 34;
- this.PB_Palette.TabStop = false;
+ PB_Palette.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+ PB_Palette.Location = new System.Drawing.Point(432, 12);
+ PB_Palette.Name = "PB_Palette";
+ PB_Palette.Size = new System.Drawing.Size(152, 12);
+ PB_Palette.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
+ PB_Palette.TabIndex = 34;
+ PB_Palette.TabStop = false;
//
// L_PatternName
//
- this.L_PatternName.AutoSize = true;
- this.L_PatternName.Location = new System.Drawing.Point(429, 28);
- this.L_PatternName.Name = "L_PatternName";
- this.L_PatternName.Size = new System.Drawing.Size(73, 13);
- this.L_PatternName.TabIndex = 33;
- this.L_PatternName.Text = "*PatternName";
+ L_PatternName.AutoSize = true;
+ L_PatternName.Location = new System.Drawing.Point(429, 28);
+ L_PatternName.Name = "L_PatternName";
+ L_PatternName.Size = new System.Drawing.Size(82, 15);
+ L_PatternName.TabIndex = 33;
+ L_PatternName.Text = "*PatternName";
//
// B_DumpLoadDesign
//
- this.B_DumpLoadDesign.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
- this.B_DumpLoadDesign.ContextMenuStrip = this.CM_DLDesign;
- this.B_DumpLoadDesign.Location = new System.Drawing.Point(168, 276);
- this.B_DumpLoadDesign.Name = "B_DumpLoadDesign";
- this.B_DumpLoadDesign.Size = new System.Drawing.Size(92, 40);
- this.B_DumpLoadDesign.TabIndex = 31;
- this.B_DumpLoadDesign.Text = "Dump/Import";
- this.B_DumpLoadDesign.UseVisualStyleBackColor = true;
- this.B_DumpLoadDesign.Click += new System.EventHandler(this.B_DumpLoadDesign_Click);
+ B_DumpLoadDesign.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
+ B_DumpLoadDesign.ContextMenuStrip = CM_DLDesign;
+ B_DumpLoadDesign.Location = new System.Drawing.Point(168, 276);
+ B_DumpLoadDesign.Name = "B_DumpLoadDesign";
+ B_DumpLoadDesign.Size = new System.Drawing.Size(92, 40);
+ B_DumpLoadDesign.TabIndex = 31;
+ B_DumpLoadDesign.Text = "Dump/Import";
+ B_DumpLoadDesign.UseVisualStyleBackColor = true;
+ B_DumpLoadDesign.Click += B_DumpLoadDesign_Click;
//
// CM_DLDesign
//
- this.CM_DLDesign.ImageScalingSize = new System.Drawing.Size(20, 20);
- this.CM_DLDesign.Name = "CM_DLDesign";
- this.CM_DLDesign.ShowImageMargin = false;
- this.CM_DLDesign.Size = new System.Drawing.Size(93, 92);
+ CM_DLDesign.ImageScalingSize = new System.Drawing.Size(20, 20);
+ CM_DLDesign.Name = "CM_DLDesign";
+ CM_DLDesign.ShowImageMargin = false;
+ CM_DLDesign.Size = new System.Drawing.Size(36, 4);
//
// B_DumpDesign
//
- this.B_DumpDesign.Name = "B_DumpDesign";
- this.B_DumpDesign.Size = new System.Drawing.Size(92, 22);
- this.B_DumpDesign.Text = "Dump Design";
- this.B_DumpDesign.Click += new System.EventHandler(this.B_DumpDesign_Click);
+ B_DumpDesign.Name = "B_DumpDesign";
+ B_DumpDesign.Size = new System.Drawing.Size(92, 22);
+ B_DumpDesign.Text = "Dump Design";
+ B_DumpDesign.Click += B_DumpDesign_Click;
//
// B_DumpDesignAll
//
- this.B_DumpDesignAll.Name = "B_DumpDesignAll";
- this.B_DumpDesignAll.Size = new System.Drawing.Size(92, 22);
- this.B_DumpDesignAll.Text = "Dump All Designs";
- this.B_DumpDesignAll.Click += new System.EventHandler(this.B_DumpDesign_Click);
+ B_DumpDesignAll.Name = "B_DumpDesignAll";
+ B_DumpDesignAll.Size = new System.Drawing.Size(92, 22);
+ B_DumpDesignAll.Text = "Dump All Designs";
+ B_DumpDesignAll.Click += B_DumpDesign_Click;
//
// B_LoadDesign
//
- this.B_LoadDesign.Name = "B_LoadDesign";
- this.B_LoadDesign.Size = new System.Drawing.Size(92, 22);
- this.B_LoadDesign.Text = "Load Design";
- this.B_LoadDesign.Click += new System.EventHandler(this.B_LoadDesign_Click);
+ B_LoadDesign.Name = "B_LoadDesign";
+ B_LoadDesign.Size = new System.Drawing.Size(92, 22);
+ B_LoadDesign.Text = "Load Design";
+ B_LoadDesign.Click += B_LoadDesign_Click;
//
// B_LoadDesignAll
//
- this.B_LoadDesignAll.Name = "B_LoadDesignAll";
- this.B_LoadDesignAll.Size = new System.Drawing.Size(92, 22);
- this.B_LoadDesignAll.Text = "Load All Designs";
- this.B_LoadDesignAll.Click += new System.EventHandler(this.B_LoadDesign_Click);
+ B_LoadDesignAll.Name = "B_LoadDesignAll";
+ B_LoadDesignAll.Size = new System.Drawing.Size(92, 22);
+ B_LoadDesignAll.Text = "Load All Designs";
+ B_LoadDesignAll.Click += B_LoadDesign_Click;
//
// PB_Sheet0
//
- this.PB_Sheet0.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
- this.PB_Sheet0.ContextMenuStrip = this.CM_Picture;
- this.PB_Sheet0.Location = new System.Drawing.Point(168, 12);
- this.PB_Sheet0.Name = "PB_Sheet0";
- this.PB_Sheet0.Size = new System.Drawing.Size(130, 130);
- this.PB_Sheet0.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
- this.PB_Sheet0.TabIndex = 30;
- this.PB_Sheet0.TabStop = false;
- this.PB_Sheet0.MouseEnter += new System.EventHandler(this.PB_Pattern_MouseEnter);
- this.PB_Sheet0.MouseLeave += new System.EventHandler(this.PB_Pattern_MouseLeave);
+ PB_Sheet0.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+ PB_Sheet0.ContextMenuStrip = CM_Picture;
+ PB_Sheet0.Location = new System.Drawing.Point(168, 12);
+ PB_Sheet0.Name = "PB_Sheet0";
+ PB_Sheet0.Size = new System.Drawing.Size(130, 130);
+ PB_Sheet0.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
+ PB_Sheet0.TabIndex = 30;
+ PB_Sheet0.TabStop = false;
+ PB_Sheet0.MouseEnter += PB_Pattern_MouseEnter;
+ PB_Sheet0.MouseLeave += PB_Pattern_MouseLeave;
//
// CM_Picture
//
- this.CM_Picture.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.Menu_SavePNG});
- this.CM_Picture.Name = "CM_Picture";
- this.CM_Picture.ShowImageMargin = false;
- this.CM_Picture.Size = new System.Drawing.Size(101, 26);
+ CM_Picture.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { Menu_SavePNG });
+ CM_Picture.Name = "CM_Picture";
+ CM_Picture.ShowImageMargin = false;
+ CM_Picture.Size = new System.Drawing.Size(101, 26);
//
// Menu_SavePNG
//
- this.Menu_SavePNG.Name = "Menu_SavePNG";
- this.Menu_SavePNG.Size = new System.Drawing.Size(100, 22);
- this.Menu_SavePNG.Text = "Save .png";
- this.Menu_SavePNG.Click += new System.EventHandler(this.Menu_SavePNG_Click);
+ Menu_SavePNG.Name = "Menu_SavePNG";
+ Menu_SavePNG.Size = new System.Drawing.Size(100, 22);
+ Menu_SavePNG.Text = "Save .png";
+ Menu_SavePNG.Click += Menu_SavePNG_Click;
//
// PB_Sheet1
//
- this.PB_Sheet1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
- this.PB_Sheet1.ContextMenuStrip = this.CM_Picture;
- this.PB_Sheet1.Location = new System.Drawing.Point(298, 12);
- this.PB_Sheet1.Name = "PB_Sheet1";
- this.PB_Sheet1.Size = new System.Drawing.Size(130, 130);
- this.PB_Sheet1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
- this.PB_Sheet1.TabIndex = 35;
- this.PB_Sheet1.TabStop = false;
+ PB_Sheet1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+ PB_Sheet1.ContextMenuStrip = CM_Picture;
+ PB_Sheet1.Location = new System.Drawing.Point(298, 12);
+ PB_Sheet1.Name = "PB_Sheet1";
+ PB_Sheet1.Size = new System.Drawing.Size(130, 130);
+ PB_Sheet1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
+ PB_Sheet1.TabIndex = 35;
+ PB_Sheet1.TabStop = false;
//
// PB_Sheet3
//
- this.PB_Sheet3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
- this.PB_Sheet3.ContextMenuStrip = this.CM_Picture;
- this.PB_Sheet3.Location = new System.Drawing.Point(298, 142);
- this.PB_Sheet3.Name = "PB_Sheet3";
- this.PB_Sheet3.Size = new System.Drawing.Size(130, 130);
- this.PB_Sheet3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
- this.PB_Sheet3.TabIndex = 37;
- this.PB_Sheet3.TabStop = false;
+ PB_Sheet3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+ PB_Sheet3.ContextMenuStrip = CM_Picture;
+ PB_Sheet3.Location = new System.Drawing.Point(298, 142);
+ PB_Sheet3.Name = "PB_Sheet3";
+ PB_Sheet3.Size = new System.Drawing.Size(130, 130);
+ PB_Sheet3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
+ PB_Sheet3.TabIndex = 37;
+ PB_Sheet3.TabStop = false;
//
// PB_Sheet2
//
- this.PB_Sheet2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
- this.PB_Sheet2.ContextMenuStrip = this.CM_Picture;
- this.PB_Sheet2.Location = new System.Drawing.Point(168, 142);
- this.PB_Sheet2.Name = "PB_Sheet2";
- this.PB_Sheet2.Size = new System.Drawing.Size(130, 130);
- this.PB_Sheet2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
- this.PB_Sheet2.TabIndex = 36;
- this.PB_Sheet2.TabStop = false;
+ PB_Sheet2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+ PB_Sheet2.ContextMenuStrip = CM_Picture;
+ PB_Sheet2.Location = new System.Drawing.Point(168, 142);
+ PB_Sheet2.Name = "PB_Sheet2";
+ PB_Sheet2.Size = new System.Drawing.Size(130, 130);
+ PB_Sheet2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
+ PB_Sheet2.TabIndex = 36;
+ PB_Sheet2.TabStop = false;
+ //
+ // CB_Pattern_OverwriteDesigner
+ //
+ CB_Pattern_OverwriteDesigner.AutoSize = true;
+ CB_Pattern_OverwriteDesigner.Location = new System.Drawing.Point(263, 288);
+ CB_Pattern_OverwriteDesigner.Name = "CB_Pattern_OverwriteDesigner";
+ CB_Pattern_OverwriteDesigner.Size = new System.Drawing.Size(126, 19);
+ CB_Pattern_OverwriteDesigner.TabIndex = 38;
+ CB_Pattern_OverwriteDesigner.Text = "Overwrite Designer";
+ CB_Pattern_OverwriteDesigner.UseVisualStyleBackColor = true;
//
// PatternEditorPRO
//
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
- this.ClientSize = new System.Drawing.Size(592, 328);
- this.Controls.Add(this.PB_Sheet3);
- this.Controls.Add(this.PB_Sheet2);
- this.Controls.Add(this.PB_Sheet1);
- this.Controls.Add(this.PB_Palette);
- this.Controls.Add(this.L_PatternName);
- this.Controls.Add(this.B_DumpLoadDesign);
- this.Controls.Add(this.PB_Sheet0);
- this.Controls.Add(this.LB_Items);
- this.Controls.Add(this.B_Cancel);
- this.Controls.Add(this.B_Save);
- this.Icon = global::NHSE.WinForms.Properties.Resources.icon;
- this.MaximizeBox = false;
- this.MinimizeBox = false;
- this.Name = "PatternEditorPRO";
- this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
- this.Text = "Pro Design Editor";
- ((System.ComponentModel.ISupportInitialize)(this.PB_Palette)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.PB_Sheet0)).EndInit();
- this.CM_Picture.ResumeLayout(false);
- this.CM_DLDesign.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.PB_Sheet1)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.PB_Sheet3)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.PB_Sheet2)).EndInit();
- this.ResumeLayout(false);
- this.PerformLayout();
+ AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+ ClientSize = new System.Drawing.Size(592, 328);
+ Controls.Add(CB_Pattern_OverwriteDesigner);
+ Controls.Add(PB_Sheet3);
+ Controls.Add(PB_Sheet2);
+ Controls.Add(PB_Sheet1);
+ Controls.Add(PB_Palette);
+ Controls.Add(L_PatternName);
+ Controls.Add(B_DumpLoadDesign);
+ Controls.Add(PB_Sheet0);
+ Controls.Add(LB_Items);
+ Controls.Add(B_Cancel);
+ Controls.Add(B_Save);
+ Icon = Properties.Resources.icon;
+ MaximizeBox = false;
+ MinimizeBox = false;
+ Name = "PatternEditorPRO";
+ StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ Text = "Pro Design Editor";
+ ((System.ComponentModel.ISupportInitialize)PB_Palette).EndInit();
+ ((System.ComponentModel.ISupportInitialize)PB_Sheet0).EndInit();
+ CM_Picture.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)PB_Sheet1).EndInit();
+ ((System.ComponentModel.ISupportInitialize)PB_Sheet3).EndInit();
+ ((System.ComponentModel.ISupportInitialize)PB_Sheet2).EndInit();
+ ResumeLayout(false);
+ PerformLayout();
}
@@ -266,5 +273,6 @@ private void InitializeComponent()
private System.Windows.Forms.PictureBox PB_Sheet1;
private System.Windows.Forms.PictureBox PB_Sheet3;
private System.Windows.Forms.PictureBox PB_Sheet2;
+ private System.Windows.Forms.CheckBox CB_Pattern_OverwriteDesigner;
}
}
\ No newline at end of file
diff --git a/NHSE.WinForms/Subforms/Map/PatternEditorPRO.cs b/NHSE.WinForms/Subforms/Map/PatternEditorPRO.cs
index 47edadd..3e1570c 100644
--- a/NHSE.WinForms/Subforms/Map/PatternEditorPRO.cs
+++ b/NHSE.WinForms/Subforms/Map/PatternEditorPRO.cs
@@ -1,25 +1,28 @@
-using System;
+using NHSE.Core;
+using NHSE.Sprites;
+using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
+using System.Reflection;
using System.Windows.Forms;
-using NHSE.Core;
-using NHSE.Sprites;
namespace NHSE.WinForms;
public partial class PatternEditorPRO : Form
{
private readonly DesignPatternPRO[] Patterns;
+ private readonly Player Player;
private int Index;
private const int scale = 4;
- public PatternEditorPRO(DesignPatternPRO[] patterns)
+ public PatternEditorPRO(DesignPatternPRO[] patterns, Player player)
{
InitializeComponent();
this.TranslateInterface(GameInfo.CurrentLanguage);
Patterns = patterns;
+ Player = player;
DialogResult = DialogResult.Cancel;
foreach (var p in patterns)
@@ -147,6 +150,17 @@ private void RepopulateList(int index)
private void LoadPattern(DesignPatternPRO dp)
{
+ if (dp.UsageCompatibility is not (0xEE01 or 0xEE05)) // known valid values (01=pro, 05=default_unused)
+ dp.UsageCompatibility = 0xEE01; // reset to default pro design
+
+ if (CB_Pattern_OverwriteDesigner.Checked)
+ {
+ dp.PlayerID = Player.Personal.PlayerID;
+ dp.PlayerName = Player.Personal.PlayerName;
+ dp.TownID = Player.Personal.TownID;
+ dp.TownName = Player.Personal.TownName;
+ }
+
const int w = DesignPatternPRO.Width * scale;
const int h = DesignPatternPRO.Height * scale;
PB_Sheet0.Image = ImageUtil.ResizeImage(dp.GetImage(0), w, h);
diff --git a/NHSE.WinForms/Subforms/Map/PatternEditorPRO.resx b/NHSE.WinForms/Subforms/Map/PatternEditorPRO.resx
index 978a819..20f38d5 100644
--- a/NHSE.WinForms/Subforms/Map/PatternEditorPRO.resx
+++ b/NHSE.WinForms/Subforms/Map/PatternEditorPRO.resx
@@ -1,17 +1,17 @@
-
@@ -117,7 +117,10 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
+
17, 17
+
+ 145, 17
+
\ No newline at end of file
diff --git a/NHSE.WinForms/Subforms/Player/PostBoxEditor.Designer.cs b/NHSE.WinForms/Subforms/Player/PostBoxEditor.Designer.cs
new file mode 100644
index 0000000..9114d66
--- /dev/null
+++ b/NHSE.WinForms/Subforms/Player/PostBoxEditor.Designer.cs
@@ -0,0 +1,812 @@
+using NHSE.Core;
+
+namespace NHSE.WinForms
+{
+ partial class PostBoxEditor
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ components = new System.ComponentModel.Container();
+ CAL_PostTimestamp = new System.Windows.Forms.DateTimePicker();
+ B_Cancel = new System.Windows.Forms.Button();
+ B_Save = new System.Windows.Forms.Button();
+ L_Sender_Edit = new System.Windows.Forms.Label();
+ L_Sender_ExternalName = new System.Windows.Forms.Label();
+ L_ExternalName = new System.Windows.Forms.Label();
+ L_InternalName = new System.Windows.Forms.Label();
+ NUD_Variant = new System.Windows.Forms.NumericUpDown();
+ L_Variant = new System.Windows.Forms.Label();
+ NUD_Species = new System.Windows.Forms.NumericUpDown();
+ L_Species = new System.Windows.Forms.Label();
+ PB_Villager = new System.Windows.Forms.PictureBox();
+ TB_Post_Message = new System.Windows.Forms.TextBox();
+ TB_Post_FromLine = new System.Windows.Forms.TextBox();
+ TB_Post_ToLine = new System.Windows.Forms.TextBox();
+ L_Post_To = new System.Windows.Forms.Label();
+ L_Post_Message = new System.Windows.Forms.Label();
+ L_Post_From = new System.Windows.Forms.Label();
+ CB_Post_Language = new System.Windows.Forms.ComboBox();
+ L_Post_UsedSlots = new System.Windows.Forms.Label();
+ L_Post_UsedSlots_Value = new System.Windows.Forms.Label();
+ L_Post_SelectedSlot = new System.Windows.Forms.Label();
+ B_Delete = new System.Windows.Forms.Button();
+ CK_Post_Read = new System.Windows.Forms.CheckBox();
+ CK_Post_Faved = new System.Windows.Forms.CheckBox();
+ CB_Post_SenderType = new System.Windows.Forms.ComboBox();
+ L_SenderType = new System.Windows.Forms.Label();
+ GB_Post_Villager = new System.Windows.Forms.GroupBox();
+ GB_Post_Player = new System.Windows.Forms.GroupBox();
+ TB_Post_PlayerName = new System.Windows.Forms.TextBox();
+ L_Post_TimeStamp = new System.Windows.Forms.Label();
+ L_Post_Language = new System.Windows.Forms.Label();
+ L_Post_CountTo = new System.Windows.Forms.Label();
+ L_Post_CountMsg = new System.Windows.Forms.Label();
+ L_Post_CountFrom = new System.Windows.Forms.Label();
+ GB_Post_NPC = new System.Windows.Forms.GroupBox();
+ CB_Post_NPC = new System.Windows.Forms.ComboBox();
+ TC_Post_SR = new System.Windows.Forms.TabControl();
+ TP_Post_SR = new System.Windows.Forms.TabPage();
+ GB_Post_ReceiverIsland = new System.Windows.Forms.GroupBox();
+ TB_Post_ReceiverIsland = new System.Windows.Forms.TextBox();
+ GB_Post_Stationery = new System.Windows.Forms.GroupBox();
+ CB_Post_Stationery = new System.Windows.Forms.ComboBox();
+ GB_Post_ReceiverPlayer = new System.Windows.Forms.GroupBox();
+ TB_Post_ReceiverPlayer = new System.Windows.Forms.TextBox();
+ TP_Post_Items = new System.Windows.Forms.TabPage();
+ GB_Post_AttachedInfo = new System.Windows.Forms.GroupBox();
+ ItemEditor = new ItemEditor();
+ L_Post_AttachmentSkin = new System.Windows.Forms.Label();
+ CB_Post_AttachmentSkin = new System.Windows.Forms.ComboBox();
+ CB_Post_MailType = new System.Windows.Forms.ComboBox();
+ L_Post_MailType = new System.Windows.Forms.Label();
+ B_Import = new System.Windows.Forms.Button();
+ B_Dump = new System.Windows.Forms.Button();
+ B_Post_DumpAll = new System.Windows.Forms.Button();
+ NUD_Post_Slots = new System.Windows.Forms.NumericUpDown();
+ ((System.ComponentModel.ISupportInitialize)NUD_Variant).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)NUD_Species).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)PB_Villager).BeginInit();
+ GB_Post_Villager.SuspendLayout();
+ GB_Post_Player.SuspendLayout();
+ GB_Post_NPC.SuspendLayout();
+ TC_Post_SR.SuspendLayout();
+ TP_Post_SR.SuspendLayout();
+ GB_Post_ReceiverIsland.SuspendLayout();
+ GB_Post_Stationery.SuspendLayout();
+ GB_Post_ReceiverPlayer.SuspendLayout();
+ TP_Post_Items.SuspendLayout();
+ GB_Post_AttachedInfo.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)NUD_Post_Slots).BeginInit();
+ SuspendLayout();
+ //
+ // CAL_PostTimestamp
+ //
+ CAL_PostTimestamp.Location = new System.Drawing.Point(9, 446);
+ CAL_PostTimestamp.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ CAL_PostTimestamp.Name = "CAL_PostTimestamp";
+ CAL_PostTimestamp.Size = new System.Drawing.Size(233, 23);
+ CAL_PostTimestamp.TabIndex = 76;
+ //
+ // B_Cancel
+ //
+ B_Cancel.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right;
+ B_Cancel.Location = new System.Drawing.Point(385, 544);
+ B_Cancel.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ B_Cancel.Name = "B_Cancel";
+ B_Cancel.Size = new System.Drawing.Size(107, 46);
+ B_Cancel.TabIndex = 75;
+ B_Cancel.Text = "Cancel";
+ B_Cancel.UseVisualStyleBackColor = true;
+ B_Cancel.Click += B_Cancel_Click;
+ //
+ // B_Save
+ //
+ B_Save.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right;
+ B_Save.Location = new System.Drawing.Point(496, 544);
+ B_Save.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ B_Save.Name = "B_Save";
+ B_Save.Size = new System.Drawing.Size(107, 46);
+ B_Save.TabIndex = 74;
+ B_Save.Text = "Save Slot";
+ B_Save.UseVisualStyleBackColor = true;
+ B_Save.Click += B_Save_Click;
+ //
+ // L_Sender_Edit
+ //
+ L_Sender_Edit.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ L_Sender_Edit.Location = new System.Drawing.Point(123, 16);
+ L_Sender_Edit.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ L_Sender_Edit.Name = "L_Sender_Edit";
+ L_Sender_Edit.Size = new System.Drawing.Size(72, 23);
+ L_Sender_Edit.TabIndex = 86;
+ L_Sender_Edit.Text = "Edit Sender:";
+ L_Sender_Edit.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // L_Sender_ExternalName
+ //
+ L_Sender_ExternalName.Location = new System.Drawing.Point(126, 94);
+ L_Sender_ExternalName.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ L_Sender_ExternalName.Name = "L_Sender_ExternalName";
+ L_Sender_ExternalName.Size = new System.Drawing.Size(86, 23);
+ L_Sender_ExternalName.TabIndex = 84;
+ L_Sender_ExternalName.Text = "Sender Name:";
+ L_Sender_ExternalName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // L_ExternalName
+ //
+ L_ExternalName.AutoSize = true;
+ L_ExternalName.Font = new System.Drawing.Font("Segoe UI", 9F);
+ L_ExternalName.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ L_ExternalName.Location = new System.Drawing.Point(126, 114);
+ L_ExternalName.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ L_ExternalName.Name = "L_ExternalName";
+ L_ExternalName.Size = new System.Drawing.Size(57, 15);
+ L_ExternalName.TabIndex = 83;
+ L_ExternalName.Text = "unknown";
+ L_ExternalName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // L_InternalName
+ //
+ L_InternalName.AutoSize = true;
+ L_InternalName.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 0);
+ L_InternalName.Location = new System.Drawing.Point(8, 137);
+ L_InternalName.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ L_InternalName.Name = "L_InternalName";
+ L_InternalName.Size = new System.Drawing.Size(56, 14);
+ L_InternalName.TabIndex = 82;
+ L_InternalName.Text = "unknown";
+ L_InternalName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // NUD_Variant
+ //
+ NUD_Variant.Location = new System.Drawing.Point(128, 65);
+ NUD_Variant.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ NUD_Variant.Maximum = new decimal(new int[] { 255, 0, 0, 0 });
+ NUD_Variant.Name = "NUD_Variant";
+ NUD_Variant.Size = new System.Drawing.Size(46, 23);
+ NUD_Variant.TabIndex = 81;
+ NUD_Variant.ValueChanged += ChangeVillager;
+ //
+ // L_Variant
+ //
+ L_Variant.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
+ L_Variant.Location = new System.Drawing.Point(177, 64);
+ L_Variant.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ L_Variant.Name = "L_Variant";
+ L_Variant.Size = new System.Drawing.Size(56, 23);
+ L_Variant.TabIndex = 80;
+ L_Variant.Text = "Variant";
+ L_Variant.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // NUD_Species
+ //
+ NUD_Species.Location = new System.Drawing.Point(128, 40);
+ NUD_Species.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ NUD_Species.Maximum = new decimal(new int[] { 400, 0, 0, 0 });
+ NUD_Species.Name = "NUD_Species";
+ NUD_Species.Size = new System.Drawing.Size(46, 23);
+ NUD_Species.TabIndex = 79;
+ NUD_Species.ValueChanged += ChangeVillager;
+ //
+ // L_Species
+ //
+ L_Species.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
+ L_Species.Location = new System.Drawing.Point(177, 39);
+ L_Species.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ L_Species.Name = "L_Species";
+ L_Species.Size = new System.Drawing.Size(56, 23);
+ L_Species.TabIndex = 78;
+ L_Species.Text = "Species";
+ L_Species.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // PB_Villager
+ //
+ PB_Villager.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+ PB_Villager.Location = new System.Drawing.Point(9, 21);
+ PB_Villager.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ PB_Villager.Name = "PB_Villager";
+ PB_Villager.Size = new System.Drawing.Size(114, 114);
+ PB_Villager.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
+ PB_Villager.TabIndex = 77;
+ PB_Villager.TabStop = false;
+ //
+ // TB_Post_Message
+ //
+ TB_Post_Message.Location = new System.Drawing.Point(7, 138);
+ TB_Post_Message.Multiline = true;
+ TB_Post_Message.Name = "TB_Post_Message";
+ TB_Post_Message.Size = new System.Drawing.Size(220, 218);
+ TB_Post_Message.TabIndex = 87;
+ TB_Post_Message.TextChanged += UpdateMailCounters;
+ //
+ // TB_Post_FromLine
+ //
+ TB_Post_FromLine.Location = new System.Drawing.Point(7, 383);
+ TB_Post_FromLine.Name = "TB_Post_FromLine";
+ TB_Post_FromLine.Size = new System.Drawing.Size(220, 23);
+ TB_Post_FromLine.TabIndex = 88;
+ TB_Post_FromLine.TextChanged += UpdateMailCounters;
+ //
+ // TB_Post_ToLine
+ //
+ TB_Post_ToLine.Location = new System.Drawing.Point(7, 88);
+ TB_Post_ToLine.Name = "TB_Post_ToLine";
+ TB_Post_ToLine.Size = new System.Drawing.Size(220, 23);
+ TB_Post_ToLine.TabIndex = 89;
+ TB_Post_ToLine.TextChanged += UpdateMailCounters;
+ //
+ // L_Post_To
+ //
+ L_Post_To.Location = new System.Drawing.Point(3, 64);
+ L_Post_To.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ L_Post_To.Name = "L_Post_To";
+ L_Post_To.Size = new System.Drawing.Size(52, 23);
+ L_Post_To.TabIndex = 90;
+ L_Post_To.Text = "To Line:";
+ L_Post_To.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // L_Post_Message
+ //
+ L_Post_Message.Location = new System.Drawing.Point(5, 113);
+ L_Post_Message.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ L_Post_Message.Name = "L_Post_Message";
+ L_Post_Message.Size = new System.Drawing.Size(58, 23);
+ L_Post_Message.TabIndex = 91;
+ L_Post_Message.Text = "Message:";
+ L_Post_Message.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // L_Post_From
+ //
+ L_Post_From.Location = new System.Drawing.Point(5, 358);
+ L_Post_From.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ L_Post_From.Name = "L_Post_From";
+ L_Post_From.Size = new System.Drawing.Size(64, 23);
+ L_Post_From.TabIndex = 92;
+ L_Post_From.Text = "From Line:";
+ L_Post_From.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // CB_Post_Language
+ //
+ CB_Post_Language.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
+ CB_Post_Language.FormattingEnabled = true;
+ CB_Post_Language.Location = new System.Drawing.Point(7, 477);
+ CB_Post_Language.Name = "CB_Post_Language";
+ CB_Post_Language.Size = new System.Drawing.Size(115, 23);
+ CB_Post_Language.TabIndex = 93;
+ //
+ // L_Post_UsedSlots
+ //
+ L_Post_UsedSlots.Location = new System.Drawing.Point(8, 7);
+ L_Post_UsedSlots.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ L_Post_UsedSlots.Name = "L_Post_UsedSlots";
+ L_Post_UsedSlots.Size = new System.Drawing.Size(74, 23);
+ L_Post_UsedSlots.TabIndex = 94;
+ L_Post_UsedSlots.Text = "Used Slots:";
+ L_Post_UsedSlots.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // L_Post_UsedSlots_Value
+ //
+ L_Post_UsedSlots_Value.AutoSize = true;
+ L_Post_UsedSlots_Value.Font = new System.Drawing.Font("Segoe UI", 9F);
+ L_Post_UsedSlots_Value.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ L_Post_UsedSlots_Value.Location = new System.Drawing.Point(90, 11);
+ L_Post_UsedSlots_Value.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ L_Post_UsedSlots_Value.Name = "L_Post_UsedSlots_Value";
+ L_Post_UsedSlots_Value.Size = new System.Drawing.Size(57, 15);
+ L_Post_UsedSlots_Value.TabIndex = 95;
+ L_Post_UsedSlots_Value.Text = "unknown";
+ L_Post_UsedSlots_Value.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // L_Post_SelectedSlot
+ //
+ L_Post_SelectedSlot.Location = new System.Drawing.Point(8, 33);
+ L_Post_SelectedSlot.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ L_Post_SelectedSlot.Name = "L_Post_SelectedSlot";
+ L_Post_SelectedSlot.Size = new System.Drawing.Size(81, 23);
+ L_Post_SelectedSlot.TabIndex = 96;
+ L_Post_SelectedSlot.Text = "Selected Slot:";
+ L_Post_SelectedSlot.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // B_Delete
+ //
+ B_Delete.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
+ B_Delete.Location = new System.Drawing.Point(134, 551);
+ B_Delete.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ B_Delete.Name = "B_Delete";
+ B_Delete.Size = new System.Drawing.Size(92, 32);
+ B_Delete.TabIndex = 99;
+ B_Delete.Text = "Delete Mail";
+ B_Delete.UseVisualStyleBackColor = true;
+ B_Delete.Click += B_Delete_Click;
+ //
+ // CK_Post_Read
+ //
+ CK_Post_Read.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
+ CK_Post_Read.AutoSize = true;
+ CK_Post_Read.Location = new System.Drawing.Point(7, 412);
+ CK_Post_Read.Name = "CK_Post_Read";
+ CK_Post_Read.Size = new System.Drawing.Size(82, 19);
+ CK_Post_Read.TabIndex = 100;
+ CK_Post_Read.Text = "Mark Read";
+ CK_Post_Read.UseVisualStyleBackColor = true;
+ //
+ // CK_Post_Faved
+ //
+ CK_Post_Faved.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
+ CK_Post_Faved.AutoSize = true;
+ CK_Post_Faved.Location = new System.Drawing.Point(7, 435);
+ CK_Post_Faved.Name = "CK_Post_Faved";
+ CK_Post_Faved.Size = new System.Drawing.Size(82, 19);
+ CK_Post_Faved.TabIndex = 101;
+ CK_Post_Faved.Text = "Favourited";
+ CK_Post_Faved.UseVisualStyleBackColor = true;
+ //
+ // CB_Post_SenderType
+ //
+ CB_Post_SenderType.FormattingEnabled = true;
+ CB_Post_SenderType.Location = new System.Drawing.Point(6, 26);
+ CB_Post_SenderType.Name = "CB_Post_SenderType";
+ CB_Post_SenderType.Size = new System.Drawing.Size(114, 23);
+ CB_Post_SenderType.TabIndex = 103;
+ CB_Post_SenderType.SelectedIndexChanged += UpdateSenderType;
+ //
+ // L_SenderType
+ //
+ L_SenderType.Location = new System.Drawing.Point(5, 3);
+ L_SenderType.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ L_SenderType.Name = "L_SenderType";
+ L_SenderType.Size = new System.Drawing.Size(106, 22);
+ L_SenderType.TabIndex = 104;
+ L_SenderType.Text = "Sender Type";
+ L_SenderType.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // GB_Post_Villager
+ //
+ GB_Post_Villager.Controls.Add(PB_Villager);
+ GB_Post_Villager.Controls.Add(L_Species);
+ GB_Post_Villager.Controls.Add(NUD_Species);
+ GB_Post_Villager.Controls.Add(L_Variant);
+ GB_Post_Villager.Controls.Add(NUD_Variant);
+ GB_Post_Villager.Controls.Add(L_InternalName);
+ GB_Post_Villager.Controls.Add(L_ExternalName);
+ GB_Post_Villager.Controls.Add(L_Sender_ExternalName);
+ GB_Post_Villager.Controls.Add(L_Sender_Edit);
+ GB_Post_Villager.Location = new System.Drawing.Point(6, 104);
+ GB_Post_Villager.Name = "GB_Post_Villager";
+ GB_Post_Villager.Size = new System.Drawing.Size(283, 161);
+ GB_Post_Villager.TabIndex = 105;
+ GB_Post_Villager.TabStop = false;
+ GB_Post_Villager.Text = "Villager";
+ //
+ // GB_Post_Player
+ //
+ GB_Post_Player.Controls.Add(TB_Post_PlayerName);
+ GB_Post_Player.Location = new System.Drawing.Point(130, 6);
+ GB_Post_Player.Name = "GB_Post_Player";
+ GB_Post_Player.Size = new System.Drawing.Size(159, 48);
+ GB_Post_Player.TabIndex = 106;
+ GB_Post_Player.TabStop = false;
+ GB_Post_Player.Text = "Player";
+ //
+ // TB_Post_PlayerName
+ //
+ TB_Post_PlayerName.Location = new System.Drawing.Point(6, 19);
+ TB_Post_PlayerName.Name = "TB_Post_PlayerName";
+ TB_Post_PlayerName.Size = new System.Drawing.Size(147, 23);
+ TB_Post_PlayerName.TabIndex = 113;
+ //
+ // L_Post_TimeStamp
+ //
+ L_Post_TimeStamp.Location = new System.Drawing.Point(7, 422);
+ L_Post_TimeStamp.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ L_Post_TimeStamp.Name = "L_Post_TimeStamp";
+ L_Post_TimeStamp.Size = new System.Drawing.Size(70, 23);
+ L_Post_TimeStamp.TabIndex = 107;
+ L_Post_TimeStamp.Text = "Timestamp:";
+ L_Post_TimeStamp.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // L_Post_Language
+ //
+ L_Post_Language.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
+ L_Post_Language.Location = new System.Drawing.Point(5, 454);
+ L_Post_Language.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ L_Post_Language.Name = "L_Post_Language";
+ L_Post_Language.Size = new System.Drawing.Size(67, 23);
+ L_Post_Language.TabIndex = 108;
+ L_Post_Language.Text = "Language:";
+ L_Post_Language.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // L_Post_CountTo
+ //
+ L_Post_CountTo.AutoSize = true;
+ L_Post_CountTo.Font = new System.Drawing.Font("Segoe UI", 9F);
+ L_Post_CountTo.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ L_Post_CountTo.Location = new System.Drawing.Point(231, 92);
+ L_Post_CountTo.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ L_Post_CountTo.Name = "L_Post_CountTo";
+ L_Post_CountTo.Size = new System.Drawing.Size(38, 15);
+ L_Post_CountTo.TabIndex = 109;
+ L_Post_CountTo.Text = "count";
+ L_Post_CountTo.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // L_Post_CountMsg
+ //
+ L_Post_CountMsg.AutoSize = true;
+ L_Post_CountMsg.Font = new System.Drawing.Font("Segoe UI", 9F);
+ L_Post_CountMsg.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ L_Post_CountMsg.Location = new System.Drawing.Point(231, 138);
+ L_Post_CountMsg.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ L_Post_CountMsg.Name = "L_Post_CountMsg";
+ L_Post_CountMsg.Size = new System.Drawing.Size(38, 15);
+ L_Post_CountMsg.TabIndex = 110;
+ L_Post_CountMsg.Text = "count";
+ L_Post_CountMsg.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // L_Post_CountFrom
+ //
+ L_Post_CountFrom.AutoSize = true;
+ L_Post_CountFrom.Font = new System.Drawing.Font("Segoe UI", 9F);
+ L_Post_CountFrom.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ L_Post_CountFrom.Location = new System.Drawing.Point(231, 387);
+ L_Post_CountFrom.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ L_Post_CountFrom.Name = "L_Post_CountFrom";
+ L_Post_CountFrom.Size = new System.Drawing.Size(38, 15);
+ L_Post_CountFrom.TabIndex = 111;
+ L_Post_CountFrom.Text = "count";
+ L_Post_CountFrom.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // GB_Post_NPC
+ //
+ GB_Post_NPC.Controls.Add(CB_Post_NPC);
+ GB_Post_NPC.Location = new System.Drawing.Point(6, 55);
+ GB_Post_NPC.Name = "GB_Post_NPC";
+ GB_Post_NPC.Size = new System.Drawing.Size(283, 48);
+ GB_Post_NPC.TabIndex = 108;
+ GB_Post_NPC.TabStop = false;
+ GB_Post_NPC.Text = "NPC";
+ //
+ // CB_Post_NPC
+ //
+ CB_Post_NPC.FormattingEnabled = true;
+ CB_Post_NPC.Location = new System.Drawing.Point(6, 18);
+ CB_Post_NPC.Name = "CB_Post_NPC";
+ CB_Post_NPC.Size = new System.Drawing.Size(206, 23);
+ CB_Post_NPC.TabIndex = 107;
+ CB_Post_NPC.SelectedIndexChanged += UpdateSenderNPC;
+ //
+ // TC_Post_SR
+ //
+ TC_Post_SR.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right;
+ TC_Post_SR.Controls.Add(TP_Post_SR);
+ TC_Post_SR.Controls.Add(TP_Post_Items);
+ TC_Post_SR.Location = new System.Drawing.Point(300, 32);
+ TC_Post_SR.Name = "TC_Post_SR";
+ TC_Post_SR.SelectedIndex = 0;
+ TC_Post_SR.Size = new System.Drawing.Size(304, 507);
+ TC_Post_SR.TabIndex = 112;
+ //
+ // TP_Post_SR
+ //
+ TP_Post_SR.Controls.Add(GB_Post_ReceiverIsland);
+ TP_Post_SR.Controls.Add(GB_Post_Stationery);
+ TP_Post_SR.Controls.Add(GB_Post_ReceiverPlayer);
+ TP_Post_SR.Controls.Add(L_SenderType);
+ TP_Post_SR.Controls.Add(GB_Post_NPC);
+ TP_Post_SR.Controls.Add(CB_Post_SenderType);
+ TP_Post_SR.Controls.Add(GB_Post_Villager);
+ TP_Post_SR.Controls.Add(L_Post_TimeStamp);
+ TP_Post_SR.Controls.Add(GB_Post_Player);
+ TP_Post_SR.Controls.Add(CAL_PostTimestamp);
+ TP_Post_SR.Location = new System.Drawing.Point(4, 24);
+ TP_Post_SR.Name = "TP_Post_SR";
+ TP_Post_SR.Padding = new System.Windows.Forms.Padding(3);
+ TP_Post_SR.Size = new System.Drawing.Size(296, 479);
+ TP_Post_SR.TabIndex = 0;
+ TP_Post_SR.Text = "Details";
+ TP_Post_SR.UseVisualStyleBackColor = true;
+ //
+ // GB_Post_ReceiverIsland
+ //
+ GB_Post_ReceiverIsland.Controls.Add(TB_Post_ReceiverIsland);
+ GB_Post_ReceiverIsland.Location = new System.Drawing.Point(6, 370);
+ GB_Post_ReceiverIsland.Name = "GB_Post_ReceiverIsland";
+ GB_Post_ReceiverIsland.Size = new System.Drawing.Size(283, 48);
+ GB_Post_ReceiverIsland.TabIndex = 117;
+ GB_Post_ReceiverIsland.TabStop = false;
+ GB_Post_ReceiverIsland.Text = "Receiver Island";
+ //
+ // TB_Post_ReceiverIsland
+ //
+ TB_Post_ReceiverIsland.Location = new System.Drawing.Point(8, 19);
+ TB_Post_ReceiverIsland.Name = "TB_Post_ReceiverIsland";
+ TB_Post_ReceiverIsland.Size = new System.Drawing.Size(157, 23);
+ TB_Post_ReceiverIsland.TabIndex = 115;
+ //
+ // GB_Post_Stationery
+ //
+ GB_Post_Stationery.Controls.Add(CB_Post_Stationery);
+ GB_Post_Stationery.Location = new System.Drawing.Point(6, 268);
+ GB_Post_Stationery.Name = "GB_Post_Stationery";
+ GB_Post_Stationery.Size = new System.Drawing.Size(283, 48);
+ GB_Post_Stationery.TabIndex = 114;
+ GB_Post_Stationery.TabStop = false;
+ GB_Post_Stationery.Text = "Stationery Type";
+ //
+ // CB_Post_Stationery
+ //
+ CB_Post_Stationery.FormattingEnabled = true;
+ CB_Post_Stationery.Location = new System.Drawing.Point(6, 18);
+ CB_Post_Stationery.Name = "CB_Post_Stationery";
+ CB_Post_Stationery.Size = new System.Drawing.Size(271, 23);
+ CB_Post_Stationery.TabIndex = 107;
+ //
+ // GB_Post_ReceiverPlayer
+ //
+ GB_Post_ReceiverPlayer.Controls.Add(TB_Post_ReceiverPlayer);
+ GB_Post_ReceiverPlayer.Location = new System.Drawing.Point(6, 319);
+ GB_Post_ReceiverPlayer.Name = "GB_Post_ReceiverPlayer";
+ GB_Post_ReceiverPlayer.Size = new System.Drawing.Size(283, 48);
+ GB_Post_ReceiverPlayer.TabIndex = 113;
+ GB_Post_ReceiverPlayer.TabStop = false;
+ GB_Post_ReceiverPlayer.Text = "Receiver Player";
+ //
+ // TB_Post_ReceiverPlayer
+ //
+ TB_Post_ReceiverPlayer.Location = new System.Drawing.Point(8, 19);
+ TB_Post_ReceiverPlayer.Name = "TB_Post_ReceiverPlayer";
+ TB_Post_ReceiverPlayer.Size = new System.Drawing.Size(157, 23);
+ TB_Post_ReceiverPlayer.TabIndex = 115;
+ //
+ // TP_Post_Items
+ //
+ TP_Post_Items.Controls.Add(GB_Post_AttachedInfo);
+ TP_Post_Items.Controls.Add(CB_Post_MailType);
+ TP_Post_Items.Controls.Add(L_Post_MailType);
+ TP_Post_Items.Location = new System.Drawing.Point(4, 24);
+ TP_Post_Items.Name = "TP_Post_Items";
+ TP_Post_Items.Padding = new System.Windows.Forms.Padding(3);
+ TP_Post_Items.Size = new System.Drawing.Size(296, 479);
+ TP_Post_Items.TabIndex = 1;
+ TP_Post_Items.Text = "Attachments";
+ TP_Post_Items.UseVisualStyleBackColor = true;
+ //
+ // GB_Post_AttachedInfo
+ //
+ GB_Post_AttachedInfo.Controls.Add(ItemEditor);
+ GB_Post_AttachedInfo.Controls.Add(L_Post_AttachmentSkin);
+ GB_Post_AttachedInfo.Controls.Add(CB_Post_AttachmentSkin);
+ GB_Post_AttachedInfo.Location = new System.Drawing.Point(5, 32);
+ GB_Post_AttachedInfo.Name = "GB_Post_AttachedInfo";
+ GB_Post_AttachedInfo.Size = new System.Drawing.Size(288, 443);
+ GB_Post_AttachedInfo.TabIndex = 114;
+ GB_Post_AttachedInfo.TabStop = false;
+ GB_Post_AttachedInfo.Text = "Attachment Info";
+ //
+ // ItemEditor
+ //
+ ItemEditor.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right;
+ ItemEditor.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+ ItemEditor.Location = new System.Drawing.Point(7, 65);
+ ItemEditor.Name = "ItemEditor";
+ ItemEditor.Size = new System.Drawing.Size(275, 371);
+ ItemEditor.TabIndex = 113;
+ //
+ // L_Post_AttachmentSkin
+ //
+ L_Post_AttachmentSkin.Location = new System.Drawing.Point(7, 14);
+ L_Post_AttachmentSkin.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ L_Post_AttachmentSkin.Name = "L_Post_AttachmentSkin";
+ L_Post_AttachmentSkin.Size = new System.Drawing.Size(201, 23);
+ L_Post_AttachmentSkin.TabIndex = 114;
+ L_Post_AttachmentSkin.Text = "Attachment Skin:";
+ L_Post_AttachmentSkin.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // CB_Post_AttachmentSkin
+ //
+ CB_Post_AttachmentSkin.FormattingEnabled = true;
+ CB_Post_AttachmentSkin.Location = new System.Drawing.Point(7, 37);
+ CB_Post_AttachmentSkin.Name = "CB_Post_AttachmentSkin";
+ CB_Post_AttachmentSkin.Size = new System.Drawing.Size(240, 23);
+ CB_Post_AttachmentSkin.TabIndex = 115;
+ //
+ // CB_Post_MailType
+ //
+ CB_Post_MailType.FormattingEnabled = true;
+ CB_Post_MailType.Location = new System.Drawing.Point(123, 7);
+ CB_Post_MailType.Name = "CB_Post_MailType";
+ CB_Post_MailType.Size = new System.Drawing.Size(129, 23);
+ CB_Post_MailType.TabIndex = 113;
+ CB_Post_MailType.SelectedIndexChanged += UpdateMailType;
+ //
+ // L_Post_MailType
+ //
+ L_Post_MailType.Location = new System.Drawing.Point(11, 6);
+ L_Post_MailType.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ L_Post_MailType.Name = "L_Post_MailType";
+ L_Post_MailType.Size = new System.Drawing.Size(68, 23);
+ L_Post_MailType.TabIndex = 113;
+ L_Post_MailType.Text = "Mail Type:";
+ L_Post_MailType.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // B_Import
+ //
+ B_Import.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
+ B_Import.Location = new System.Drawing.Point(134, 472);
+ B_Import.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ B_Import.Name = "B_Import";
+ B_Import.Size = new System.Drawing.Size(92, 31);
+ B_Import.TabIndex = 113;
+ B_Import.Text = "Import Mail";
+ B_Import.UseVisualStyleBackColor = true;
+ B_Import.Click += B_Import_Click;
+ //
+ // B_Dump
+ //
+ B_Dump.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left;
+ B_Dump.Location = new System.Drawing.Point(134, 436);
+ B_Dump.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ B_Dump.Name = "B_Dump";
+ B_Dump.Size = new System.Drawing.Size(92, 31);
+ B_Dump.TabIndex = 114;
+ B_Dump.Text = "Dump Mail";
+ B_Dump.UseVisualStyleBackColor = true;
+ B_Dump.Click += B_Dump_Click;
+ //
+ // B_Post_DumpAll
+ //
+ B_Post_DumpAll.Location = new System.Drawing.Point(191, 29);
+ B_Post_DumpAll.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ B_Post_DumpAll.Name = "B_Post_DumpAll";
+ B_Post_DumpAll.Size = new System.Drawing.Size(88, 32);
+ B_Post_DumpAll.TabIndex = 115;
+ B_Post_DumpAll.Text = "Dump All";
+ B_Post_DumpAll.UseVisualStyleBackColor = true;
+ B_Post_DumpAll.Click += B_Dump_Click;
+ //
+ // NUD_Post_Slots
+ //
+ NUD_Post_Slots.Location = new System.Drawing.Point(88, 34);
+ NUD_Post_Slots.Name = "NUD_Post_Slots";
+ NUD_Post_Slots.Size = new System.Drawing.Size(60, 23);
+ NUD_Post_Slots.TabIndex = 116;
+ NUD_Post_Slots.ValueChanged += LoadMailItem;
+ //
+ // PostBoxEditor
+ //
+ AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
+ AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ ClientSize = new System.Drawing.Size(614, 601);
+ Controls.Add(NUD_Post_Slots);
+ Controls.Add(B_Post_DumpAll);
+ Controls.Add(B_Dump);
+ Controls.Add(B_Import);
+ Controls.Add(TC_Post_SR);
+ Controls.Add(L_Post_CountFrom);
+ Controls.Add(L_Post_CountMsg);
+ Controls.Add(L_Post_CountTo);
+ Controls.Add(L_Post_Language);
+ Controls.Add(CK_Post_Faved);
+ Controls.Add(CK_Post_Read);
+ Controls.Add(B_Delete);
+ Controls.Add(L_Post_SelectedSlot);
+ Controls.Add(L_Post_UsedSlots_Value);
+ Controls.Add(L_Post_UsedSlots);
+ Controls.Add(CB_Post_Language);
+ Controls.Add(L_Post_From);
+ Controls.Add(L_Post_Message);
+ Controls.Add(L_Post_To);
+ Controls.Add(TB_Post_ToLine);
+ Controls.Add(TB_Post_FromLine);
+ Controls.Add(TB_Post_Message);
+ Controls.Add(B_Cancel);
+ Controls.Add(B_Save);
+ Icon = Properties.Resources.icon;
+ Name = "PostBoxEditor";
+ StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ Text = "Post Box Editor";
+ ((System.ComponentModel.ISupportInitialize)NUD_Variant).EndInit();
+ ((System.ComponentModel.ISupportInitialize)NUD_Species).EndInit();
+ ((System.ComponentModel.ISupportInitialize)PB_Villager).EndInit();
+ GB_Post_Villager.ResumeLayout(false);
+ GB_Post_Villager.PerformLayout();
+ GB_Post_Player.ResumeLayout(false);
+ GB_Post_Player.PerformLayout();
+ GB_Post_NPC.ResumeLayout(false);
+ TC_Post_SR.ResumeLayout(false);
+ TP_Post_SR.ResumeLayout(false);
+ GB_Post_ReceiverIsland.ResumeLayout(false);
+ GB_Post_ReceiverIsland.PerformLayout();
+ GB_Post_Stationery.ResumeLayout(false);
+ GB_Post_ReceiverPlayer.ResumeLayout(false);
+ GB_Post_ReceiverPlayer.PerformLayout();
+ TP_Post_Items.ResumeLayout(false);
+ GB_Post_AttachedInfo.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)NUD_Post_Slots).EndInit();
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private System.Windows.Forms.DateTimePicker CAL_PostTimestamp;
+ private System.Windows.Forms.Button B_Cancel;
+ private System.Windows.Forms.Button B_Save;
+ private System.Windows.Forms.Label L_Sender_Edit;
+ private System.Windows.Forms.Label L_Sender_ExternalName;
+ private System.Windows.Forms.Label L_ExternalName;
+ private System.Windows.Forms.Label L_InternalName;
+ private System.Windows.Forms.NumericUpDown NUD_Variant;
+ private System.Windows.Forms.Label L_Variant;
+ private System.Windows.Forms.NumericUpDown NUD_Species;
+ private System.Windows.Forms.Label L_Species;
+ private System.Windows.Forms.PictureBox PB_Villager;
+ private System.Windows.Forms.TextBox TB_Post_Message;
+ private System.Windows.Forms.TextBox TB_Post_FromLine;
+ private System.Windows.Forms.TextBox TB_Post_ToLine;
+ private System.Windows.Forms.Label L_Post_To;
+ private System.Windows.Forms.Label L_Post_Message;
+ private System.Windows.Forms.Label L_Post_From;
+ private System.Windows.Forms.ComboBox CB_Post_Language;
+ private System.Windows.Forms.Label L_Post_UsedSlots;
+ private System.Windows.Forms.Label L_Post_UsedSlots_Value;
+ private System.Windows.Forms.Label L_Post_SelectedSlot;
+ private System.Windows.Forms.Button B_Delete;
+ private System.Windows.Forms.CheckBox CK_Post_Read;
+ private System.Windows.Forms.CheckBox CK_Post_Faved;
+ private System.Windows.Forms.ComboBox CB_Post_SenderType;
+ private System.Windows.Forms.Label L_SenderType;
+ private System.Windows.Forms.GroupBox GB_Post_Villager;
+ private System.Windows.Forms.GroupBox GB_Post_Player;
+ private System.Windows.Forms.Label L_Post_TimeStamp;
+ private System.Windows.Forms.Label L_Post_Language;
+ private System.Windows.Forms.Label L_Post_CountTo;
+ private System.Windows.Forms.Label L_Post_CountMsg;
+ private System.Windows.Forms.Label L_Post_CountFrom;
+ private System.Windows.Forms.GroupBox GB_Post_NPC;
+ private System.Windows.Forms.ComboBox CB_Post_NPC;
+ private System.Windows.Forms.TabControl TC_Post_SR;
+ private System.Windows.Forms.TabPage TP_Post_SR;
+ private System.Windows.Forms.TabPage TP_Post_Items;
+ private System.Windows.Forms.GroupBox GB_Post_ReceiverPlayer;
+ private System.Windows.Forms.GroupBox GB_Post_Stationery;
+ private System.Windows.Forms.ComboBox CB_Post_Stationery;
+ private System.Windows.Forms.Label L_Post_MailType;
+ private System.Windows.Forms.ComboBox CB_Post_MailType;
+ private System.Windows.Forms.GroupBox GB_Post_AttachedInfo;
+ private System.Windows.Forms.Label L_Post_AttachmentSkin;
+ private System.Windows.Forms.ComboBox CB_Post_AttachmentSkin;
+ private ItemEditor ItemEditor;
+ private System.Windows.Forms.TextBox TB_Post_PlayerName;
+ private System.Windows.Forms.Button B_Import;
+ private System.Windows.Forms.Button B_Dump;
+ private System.Windows.Forms.Button B_Post_DumpAll;
+ private System.Windows.Forms.GroupBox GB_Post_ReceiverIsland;
+ private System.Windows.Forms.TextBox TB_Post_ReceiverIsland;
+ private System.Windows.Forms.TextBox TB_Post_ReceiverPlayer;
+ private System.Windows.Forms.NumericUpDown NUD_Post_Slots;
+ }
+}
\ No newline at end of file
diff --git a/NHSE.WinForms/Subforms/Player/PostBoxEditor.cs b/NHSE.WinForms/Subforms/Player/PostBoxEditor.cs
new file mode 100644
index 0000000..595dc42
--- /dev/null
+++ b/NHSE.WinForms/Subforms/Player/PostBoxEditor.cs
@@ -0,0 +1,572 @@
+using NHSE.Core;
+using NHSE.Sprites;
+using NHSE.WinForms.Properties;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Media;
+using System.Windows.Forms;
+using static NHSE.Core.Mail;
+
+namespace NHSE.WinForms;
+
+public partial class PostBoxEditor : Form
+{
+ private readonly Player Player;
+ private readonly PostBox PostBox;
+
+ private readonly string[] Wrap;
+ private readonly string[] Box;
+ private Item Attachment;
+ private List PostSlots;
+
+ private string GetUpdatedVillagerInternalName() => VillagerUtil.GetInternalVillagerName((VillagerSpecies)NUD_Species.Value, (int)NUD_Variant.Value);
+
+ public PostBoxEditor(Player p, PostBox pb)
+ {
+ InitializeComponent();
+ this.TranslateInterface(GameInfo.CurrentLanguage);
+
+ Player = p;
+ PostBox = pb;
+ Attachment = new Item();
+
+ PostSlots = PostBox.GetUsedPostBoxSlots();
+
+ NUD_Post_Slots.Maximum = MaxSlots;
+
+ L_Post_UsedSlots_Value.Text = PostSlots.Count + " / 300";
+
+ CB_Post_SenderType.Items.AddRange(NPCTypeList.ToArray());
+ var senderNPC = SenderNPCData.Values.Select(npc => GameInfo.Strings.GetVillager(npc.NameConversion));
+ CB_Post_NPC.Items.AddRange(senderNPC.ToArray());
+ CB_Post_Language.Items.AddRange(BCP47LanguageString.Keys.ToArray());
+
+ CB_Post_Stationery.Items.AddRange(LetterStationerySkin.Values.Select(skin => GameInfo.Strings.GetMail(skin.name)).ToArray());
+
+ TB_Post_ToLine.MaxLength = LetterToTextLength;
+ TB_Post_Message.MaxLength = LetterMessageTextLength;
+ TB_Post_FromLine.MaxLength = LetterFromTextLength;
+
+ ItemEditor.Initialize(GameInfo.Strings.ItemDataSource, true, true);
+
+ CB_Post_MailType.Items.AddRange(MailTypeList.ToArray());
+
+ Wrap = ItemWrappingExtended.ItemWrappingSkin.Values.Select(skin => GameInfo.Strings.GetMail(skin.name)).ToArray();
+ Box = ItemWrappingExtended.ItemBoxSkin.Values.Select(skin => GameInfo.Strings.GetMail(skin.name)).ToArray();
+
+ LoadMailItem();
+
+ DialogResult = DialogResult.Cancel;
+ }
+
+ private void ChangeVillager(object sender, EventArgs e) => ChangeVillager();
+ private void ChangeVillager()
+ {
+ var index = (int)NUD_Post_Slots.Value;
+
+ if (PostBox.GetMailCheck((int)NUD_Post_Slots.Value) == false)
+ {
+ return;
+ }
+
+ if (CB_Post_SenderType.SelectedIndex != 0)
+ {
+ var spVal = (int)NUD_Species.Value;
+ var vaVal = (int)NUD_Variant.Value;
+
+ if (spVal >= 35 || (spVal == 25 && vaVal == 0) || (spVal == 22 && vaVal == 0))
+ {
+ CB_Post_SenderType.SelectedIndex = 2;
+ }
+ else
+ {
+ CB_Post_SenderType.SelectedIndex = 1;
+ }
+ }
+
+ var name = GetUpdatedVillagerInternalName();
+ L_InternalName.Text = name;
+ L_ExternalName.Text = GameInfo.Strings.GetVillager(name);
+
+ var sprite = VillagerSprite.GetVillagerSprite(name);
+
+ if (CB_Post_SenderType.SelectedIndex == 1) // Villager
+ {
+ GB_Post_NPC.Enabled = false;
+ GB_Post_Player.Enabled = false;
+
+ PB_Villager.Image = sprite;
+
+ CB_Post_SenderType.SelectedIndex = 1;
+ CB_Post_NPC.SelectedIndex = -1;
+ }
+ else if (CB_Post_SenderType.SelectedIndex == 2) // NPC
+ {
+ GB_Post_NPC.Enabled = true;
+ GB_Post_Player.Enabled = false;
+
+
+ var speciesValue = (int)NUD_Species.Value;
+ if (!SenderNPCData.TryGetValue(speciesValue, out var npcData))
+ {
+ PB_Villager.Image = sprite;
+ CB_Post_SenderType.SelectedIndex = 2;
+ CB_Post_NPC.SelectedIndex = -1;
+ return;
+ }
+ name = npcData.Image;
+
+ sprite = VillagerSprite.GetVillagerSprite(name);
+ var nameNPC = SenderNPCData[(int)NUD_Species.Value].NameConversion;
+ L_InternalName.Text = nameNPC;
+ L_ExternalName.Text = GameInfo.Strings.GetVillager(nameNPC);
+
+ PB_Villager.Image = sprite;
+
+ CB_Post_SenderType.SelectedIndex = 2;
+ CB_Post_NPC.SelectedIndex = npcData.MappingIndex;
+ }
+ else if (CB_Post_SenderType.SelectedIndex == 0) // Player
+ {
+ GB_Post_NPC.Enabled = false;
+ GB_Post_Player.Enabled = true;
+
+ sprite = VillagerSprite.GetVillagerSprite("Leaf");
+ L_InternalName.Text = PostBox.GetSenderName(index);
+ L_ExternalName.Text = PostBox.GetSenderName(index);
+
+ PB_Villager.Image = sprite;
+
+ CB_Post_SenderType.SelectedIndex = 0;
+ CB_Post_NPC.SelectedIndex = -1;
+ }
+ else
+ {
+ var senderType = PostBox.GetSenderType(index);
+ throw new NotSupportedException($"Unknown sender type: 0x{senderType:X2}");
+ }
+ }
+
+ private void UpdateSenderNPC(object sender, EventArgs e)
+ {
+ var index = (int)NUD_Post_Slots.Value;
+
+ var npcSelected = SenderNPCData.FirstOrDefault(x => x.Value.MappingIndex == CB_Post_NPC.SelectedIndex).Key;
+ NUD_Species.Value = npcSelected;
+ }
+
+ private void UpdateMailType(object sender, EventArgs e)
+ {
+ if (CB_Post_MailType.SelectedIndex == 1) // Letter
+ {
+ CB_Post_Stationery.Enabled = true;
+ CB_Post_AttachmentSkin.Items.Clear();
+ CB_Post_AttachmentSkin.Items.AddRange(Wrap);
+ CB_Post_AttachmentSkin.SelectedIndex = 0;
+ }
+ else if (CB_Post_MailType.SelectedIndex == 0) // Package
+ {
+ CB_Post_Stationery.Enabled = false;
+ CB_Post_AttachmentSkin.Items.Clear();
+ CB_Post_AttachmentSkin.Items.AddRange(Box);
+ CB_Post_AttachmentSkin.SelectedIndex = 0;
+ CB_Post_Stationery.SelectedIndex = -1;
+ }
+ }
+
+ private void UpdateSenderType(object sender, EventArgs e)
+ {
+ if (CB_Post_SenderType.SelectedIndex == 0) // Player
+ {
+ GB_Post_NPC.Enabled = false;
+ GB_Post_Player.Enabled = true;
+ L_InternalName.Text = "player";
+ L_ExternalName.Text = "Player";
+ PB_Villager.Image = null;
+ }
+ else if (CB_Post_SenderType.SelectedIndex == 1) // Villager
+ {
+ GB_Post_NPC.Enabled = false;
+ GB_Post_Player.Enabled = false;
+ }
+ else
+ {
+ GB_Post_NPC.Enabled = true;
+ GB_Post_Player.Enabled = false;
+ }
+ }
+
+ private void UpdateMailCounters(object sender, EventArgs e) => UpdateMailCounters();
+ private void UpdateMailCounters()
+ {
+ void UpdateCounter(Label label, TextBox textBox, int maxLength)
+ {
+ var currentLength = textBox.Text.Replace("\r\n", "\n").Length;
+ label.Text = currentLength + " / " + maxLength;
+ label.ForeColor = currentLength > maxLength
+ ? System.Drawing.Color.Red
+ : System.Drawing.SystemColors.WindowText;
+ }
+
+ UpdateCounter(L_Post_CountTo, TB_Post_ToLine, LetterToTextLength);
+ UpdateCounter(L_Post_CountMsg, TB_Post_Message, LetterMessageTextLength);
+ UpdateCounter(L_Post_CountFrom, TB_Post_FromLine, LetterFromTextLength);
+ }
+
+ private void ResetInterface()
+ {
+ L_InternalName.Text = "";
+ L_ExternalName.Text = "";
+ PB_Villager.Image = null;
+ TB_Post_ToLine.Text = "";
+ TB_Post_Message.Text = "";
+ TB_Post_FromLine.Text = "";
+ CK_Post_Read.Checked = false;
+ CK_Post_Faved.Checked = false;
+ CAL_PostTimestamp.Value = DateTime.Now;
+ CB_Post_SenderType.SelectedIndex = -1;
+ CB_Post_NPC.SelectedIndex = -1;
+ TB_Post_PlayerName.Text = "";
+ TB_Post_ReceiverPlayer.Text = "";
+ TB_Post_ReceiverIsland.Text = "";
+ CB_Post_Language.SelectedIndex = -1;
+ CB_Post_Stationery.SelectedIndex = -1;
+ CB_Post_MailType.SelectedIndex = -1;
+ CB_Post_AttachmentSkin.Items.Clear();
+ }
+
+
+ private void LoadMailItem(object sender, EventArgs e) => LoadMailItem();
+ private void LoadMailItem()
+ {
+ ResetInterface();
+
+ if (PostBox.GetUsedPostBoxSlots().Count == 0)
+ {
+ MessageBox.Show("No mail items found in the post box.");
+ return;
+ }
+
+ if(PostBox.GetMailCheck((int)NUD_Post_Slots.Value) == false)
+ {
+ return;
+ }
+
+ LoadVillagerFromMail();
+ LoadMailText();
+ LoadMailProperties();
+ LoadMailAttachment();
+ }
+
+ private void LoadVillagerFromMail()
+ {
+ var index = (int)NUD_Post_Slots.Value;
+ NUD_Species.Value = PostBox.GetVillagerSenderSpeciesId(index);
+ NUD_Variant.Value = PostBox.GetVillagerSenderVariantId(index);
+
+ CB_Post_SenderType.SelectedIndex = PostBox.GetSenderType(index);
+
+ ChangeVillager();
+ }
+
+ private void LoadMailText()
+ {
+ var index = (int)NUD_Post_Slots.Value;
+
+ var toText = PostBox.GetLetterToLineText(index);
+ TB_Post_ToLine.Text = toText;
+ var msgText = PostBox.GetLetterMessageText(index);
+ TB_Post_Message.Text = msgText.Replace("\n", "\r\n");
+ var fromText = PostBox.GetLetterFromLineText(index);
+ TB_Post_FromLine.Text = fromText;
+
+ UpdateMailCounters();
+ }
+
+ private void LoadMailProperties()
+ {
+ var index = (int)NUD_Post_Slots.Value;
+
+ CK_Post_Read.Checked = PostBox.GetMailReadStatus(index);
+ CK_Post_Faved.Checked = PostBox.GetMailFavStatus(index);
+ CAL_PostTimestamp.Value = PostBox.GetTimestamp(index);
+ CB_Post_SenderType.SelectedIndex = PostBox.GetSenderType(index);
+
+ SenderNPCData.TryGetValue((int)NUD_Species.Value, out var npcData);
+
+ if (CB_Post_SenderType.SelectedIndex == 2 && npcData != null) // NPC
+ CB_Post_NPC.SelectedIndex = npcData.MappingIndex;
+
+ if (CB_Post_SenderType.SelectedIndex == 0) // Player
+ TB_Post_PlayerName.Text = PostBox.GetSenderName(index);
+
+ TB_Post_ReceiverPlayer.Text = PostBox.GetReceiverPlayerName(index);
+ TB_Post_ReceiverIsland.Text = PostBox.GetReceiverIslandName(index);
+
+ var lang = PostBox.GetMailLanguageString(index);
+ if (lang != null && BCP47LanguageString.ContainsKey(lang))
+ {
+ CB_Post_Language.SelectedIndex = BCP47LanguageString[lang];
+ }
+ else
+ {
+ CB_Post_Language.SelectedIndex = -1;
+ }
+
+ var stationerySkin = PostBox.GetMailStationerySkin(index);
+ if (LetterStationerySkin.ContainsKey(stationerySkin))
+ {
+ CB_Post_Stationery.SelectedIndex = LetterStationerySkin[stationerySkin].index;
+ }
+ else
+ {
+ CB_Post_Stationery.SelectedIndex = -1;
+ }
+ }
+
+ private void LoadMailAttachment()
+ {
+ var index = (int)NUD_Post_Slots.Value;
+
+ var attachedItemId = PostBox.GetAttachedItem(index);
+ Attachment = ItemEditor.LoadItem(attachedItemId);
+
+ var wrap = PostBox.GetItemWrappingType(index);
+ var letterType = PostBox.GetMailType(index);
+
+ CB_Post_MailType.SelectedIndex = Convert.ToInt32(letterType);
+
+ if (CB_Post_MailType.SelectedIndex == 1)
+ {
+ CB_Post_Stationery.Enabled = true;
+ CB_Post_AttachmentSkin.Items.Clear();
+ CB_Post_AttachmentSkin.Items.AddRange(Wrap);
+ CB_Post_AttachmentSkin.SelectedIndex = ItemWrappingExtended.ItemWrappingSkin[wrap].index;
+ }
+ if (CB_Post_MailType.SelectedIndex == 0)
+ {
+ CB_Post_Stationery.Enabled = false;
+ CB_Post_AttachmentSkin.Items.Clear();
+ CB_Post_AttachmentSkin.Items.AddRange(Box);
+ CB_Post_AttachmentSkin.SelectedIndex = ItemWrappingExtended.ItemBoxSkin[wrap].index;
+ CB_Post_Stationery.SelectedIndex = -1;
+ }
+ }
+
+ private void UpdateMailSlotIndex(int index)
+ {
+ if (!PostBox.GetMailCheck(index) || PostBox.GetPostBoxSortIndex(index) == 0x00)
+ {
+ var nextSlot = PostBox.GetLatestUniqueId();
+ PostBox.SetPostBoxSortIndex(index, (byte)nextSlot);
+ PostBox.SetLatestUniqueId(nextSlot + 1);
+ }
+ }
+
+ private void UpdateMailSenderInfo(int index)
+ {
+ PostBox.SetSenderType(index, (byte)CB_Post_SenderType.SelectedIndex);
+ if (CB_Post_SenderType.SelectedIndex == 0x00) // Player
+ {
+ PostBox.SetPlayerSenderIslandId(index, Player.Personal.TownID);
+ PostBox.SetPlayerSenderIslandName(index, Player.Personal.TownName);
+ PostBox.SetSenderId(index, Player.Personal.PlayerID);
+ PostBox.SetSenderName(index, TB_Post_PlayerName.Text);
+ }
+
+ if (CB_Post_SenderType.SelectedIndex == 0x01) // Villager
+ {
+ PostBox.SetVillagerSenderSpeciesId(index, (int)NUD_Species.Value);
+ PostBox.SetVillagerSenderVariantId(index, (int)NUD_Variant.Value);
+ PostBox.SetNPCSenderIslandId(index, Player.Personal.TownID);
+ PostBox.SetNPCSenderIslandName(index, Player.Personal.TownName);
+ PostBox.SetSenderId(index, 0x02);
+ // Don't set a sender nameNPC, this is blank for villagers.
+ }
+
+ if (CB_Post_SenderType.SelectedIndex == 0x02) // NPC
+ {
+ PostBox.SetVillagerSenderSpeciesId(index, (int)NUD_Species.Value);
+ PostBox.SetVillagerSenderVariantId(index, (int)NUD_Variant.Value);
+ // Don't set a sender island ID or nameNPC, this is blank for NPCs.
+ PostBox.SetSenderId(index, 0x00);
+ // Don't set a sender nameNPC, this is blank for NPCs.
+ }
+ }
+
+ private void UpdateMailAttachment(int index)
+ {
+ PostBox.SetAttachedItem(index, ItemEditor.SetItem(Attachment));
+
+ var selectedSkinIndex = CB_Post_AttachmentSkin.SelectedIndex;
+ if (CB_Post_MailType.SelectedIndex == 1)
+ {
+ PostBox.SetMailType(index, true);
+ var attachmentSkin = ItemWrappingExtended.ItemWrappingSkin.FirstOrDefault(x => x.Value.index == selectedSkinIndex);
+ if (attachmentSkin.Value != null)
+ {
+ PostBox.SetItemWrappingType(index, (byte)attachmentSkin.Key);
+ }
+
+ var letterSkinIndex = CB_Post_Stationery.SelectedIndex;
+ var letterSkin = (ushort)LetterStationerySkin.FirstOrDefault(skin => skin.Value.index == letterSkinIndex).Key;
+ PostBox.SetMailStationerySkin(index, letterSkin);
+ }
+ else if (CB_Post_MailType.SelectedIndex == 0)
+ {
+ PostBox.SetMailType(index, false);
+ var attachmentSkin = ItemWrappingExtended.ItemBoxSkin.FirstOrDefault(x => x.Value.index == selectedSkinIndex);
+ if (attachmentSkin.Value != null)
+ {
+ PostBox.SetItemWrappingType(index, (byte)attachmentSkin.Key);
+ }
+
+ PostBox.SetMailStationerySkin(index, 0);
+ }
+ }
+
+ private void UpdateMailReceiverInfo(int index)
+ {
+ PostBox.SetReceiverPlayerName(index, TB_Post_ReceiverPlayer.Text);
+ PostBox.SetReceiverPlayerId(index, Player.Personal.PlayerID);
+ PostBox.SetReceiverIslandName(index, TB_Post_ReceiverIsland.Text);
+ PostBox.SetReceiverIslandId(index, Player.Personal.TownID);
+ }
+
+ private void UpdateMailText(int index)
+ {
+ var langString = BCP47LanguageString.FirstOrDefault(x => x.Value == CB_Post_Language.SelectedIndex).Key;
+ PostBox.SetMailLanguageString(index, langString, CB_Post_SenderType.SelectedIndex == 0);
+ PostBox.SetLetterToLineText(index, TB_Post_ToLine.Text.Replace("\r\n", "\n").Replace("\n", ""));
+ PostBox.SetLetterMessageText(index, TB_Post_Message.Text.Replace("\r\n", "\n"));
+ PostBox.SetLetterFromLineText(index, TB_Post_FromLine.Text.Replace("\r\n", "\n").Replace("\n", ""));
+ }
+
+ private void UpdateMailItem(object sender, EventArgs e)
+ {
+ var index = (int)NUD_Post_Slots.Value;
+
+ UpdateMailSlotIndex(index);
+
+ PostBox.WipeTxRxSection(index);
+
+ PostBox.SetMailReadStatus(index, CK_Post_Read.Checked);
+ PostBox.SetMailFavStatus(index, CK_Post_Faved.Checked);
+
+ UpdateMailSenderInfo(index);
+
+ UpdateMailReceiverInfo(index);
+
+ UpdateMailAttachment(index);
+
+ UpdateMailText(index);
+
+ PostBox.SetTimeStamp(index, CAL_PostTimestamp.Value);
+ }
+
+ private void ImportPostItem(int index)
+ {
+ var currentIndex = PostBox.GetPostBoxSortIndex(index);
+ int currentUniqueId = PostBox.GetLatestUniqueId();
+
+ currentUniqueId = Math.Min(currentUniqueId, 299); // Cap unique ID to prevent overflow and ensure it stays within the 300 mail item limit.
+
+ if(currentIndex != 0x00 || PostBox.GetMailCheck(index))
+ {
+ using var ofd = new OpenFileDialog();
+ ofd.Filter = "New Horizons Post (*.nhpb)|*.nhpb|All files (*.*)|*.*";
+ if (ofd.ShowDialog() != DialogResult.OK)
+ return;
+ var d = File.ReadAllBytes(ofd.FileName);
+ PostBox.SetIndividualLetter(index, d);
+ PostBox.SetPostBoxSortIndex(index, (byte)currentIndex);
+ }
+ else
+ {
+ using var ofd = new OpenFileDialog();
+ ofd.Filter = "New Horizons Post (*.nhpb)|*.nhpb|All files (*.*)|*.*";
+ if (ofd.ShowDialog() != DialogResult.OK)
+ return;
+ var d = File.ReadAllBytes(ofd.FileName);
+ PostBox.SetIndividualLetter(index, d);
+ PostBox.SetPostBoxSortIndex(index, (byte)currentUniqueId);
+ PostBox.SetLatestUniqueId(Math.Min(currentUniqueId + 1, 299));
+ }
+ LoadMailItem();
+ }
+ private void DumpPostItem(int index)
+ {
+ var name = Player.Personal.PlayerName + "_Post_Slot" + index + "_" + DateTime.Now.ToString("yyyyMMddHHmmss");
+ using var sfd = new SaveFileDialog();
+ sfd.Filter = "New Horizons Post (*.nhpb)|*.nhpb|All files (*.*)|*.*";
+ sfd.FileName = $"{name}.nhpb";
+ if (sfd.ShowDialog() != DialogResult.OK)
+ return;
+
+ var d = PostBox.GetIndividualLetter(index);
+ File.WriteAllBytes(sfd.FileName, d);
+ }
+
+ private void DumpAllPostItems()
+ {
+ using var fbd = new FolderBrowserDialog();
+ if (fbd.ShowDialog() != DialogResult.OK)
+ return;
+ var postSlots = PostBox.GetUsedPostBoxSlots();
+ postSlots.ForEach(i =>
+ {
+ var name = Player.Personal.PlayerName + "_Post_Slot" + i + "_" + DateTime.Now.ToString("yyyyMMddHHmmss");
+ var path = Path.Combine(fbd.SelectedPath, $"{name}.nhpb");
+ var d = PostBox.GetIndividualLetter(i);
+ File.WriteAllBytes(path, d);
+ });
+ }
+
+ private void B_Dump_Click(object sender, EventArgs e)
+ {
+ var index = (int)NUD_Post_Slots.Value;
+
+ if (sender == B_Post_DumpAll)
+ {
+ DumpAllPostItems();
+ SystemSounds.Asterisk.Play();
+ }
+ else
+ {
+ DumpPostItem(index);
+ SystemSounds.Asterisk.Play();
+ }
+ }
+
+ private void B_Import_Click(object sender, EventArgs e)
+ {
+ var index = (int)NUD_Post_Slots.Value;
+ ImportPostItem(index);
+ SystemSounds.Asterisk.Play();
+ }
+
+ private void B_Delete_Click(object sender, EventArgs e)
+ {
+ var index = (int)NUD_Post_Slots.Value;
+
+ var arr = new byte[Mail.SIZE];
+ arr[AttachedItemID] = 0xFE;
+ arr[AttachedItemID + 1] = 0xFF;
+ arr[PostBoxSortIndex - 4] = 0xFE;
+ arr[PostBoxSortIndex - 3] = 0xFF;
+ Span bytes = arr;
+ PostBox.SetIndividualLetter(index, bytes);
+
+ SystemSounds.Asterisk.Play();
+ }
+
+ private void B_Save_Click(object sender, EventArgs e)
+ {
+ UpdateMailItem(sender, e);
+ SystemSounds.Asterisk.Play();
+ }
+
+ private void B_Cancel_Click(object sender, EventArgs e) => Close();
+}
diff --git a/NHSE.WinForms/Subforms/Player/PostBoxEditor.resx b/NHSE.WinForms/Subforms/Player/PostBoxEditor.resx
new file mode 100644
index 0000000..68d1a99
--- /dev/null
+++ b/NHSE.WinForms/Subforms/Player/PostBoxEditor.resx
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
\ No newline at end of file
diff --git a/NHSE.WinForms/Subforms/SingleItemEditor.Designer.cs b/NHSE.WinForms/Subforms/SingleItemEditor.Designer.cs
index c027390..0faed43 100644
--- a/NHSE.WinForms/Subforms/SingleItemEditor.Designer.cs
+++ b/NHSE.WinForms/Subforms/SingleItemEditor.Designer.cs
@@ -28,56 +28,55 @@ protected override void Dispose(bool disposing)
///
private void InitializeComponent()
{
- this.B_Save = new System.Windows.Forms.Button();
- this.B_Cancel = new System.Windows.Forms.Button();
- this.ItemEditor = new NHSE.WinForms.ItemEditor();
- this.SuspendLayout();
+ B_Save = new System.Windows.Forms.Button();
+ B_Cancel = new System.Windows.Forms.Button();
+ ItemEditor = new ItemEditor();
+ SuspendLayout();
//
// B_Save
//
- this.B_Save.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.B_Save.Location = new System.Drawing.Point(92, 236);
- this.B_Save.Name = "B_Save";
- this.B_Save.Size = new System.Drawing.Size(75, 31);
- this.B_Save.TabIndex = 1;
- this.B_Save.Text = "Save";
- this.B_Save.UseVisualStyleBackColor = true;
- this.B_Save.Click += new System.EventHandler(this.B_Save_Click);
+ B_Save.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right;
+ B_Save.Location = new System.Drawing.Point(94, 339);
+ B_Save.Name = "B_Save";
+ B_Save.Size = new System.Drawing.Size(75, 31);
+ B_Save.TabIndex = 1;
+ B_Save.Text = "Save";
+ B_Save.UseVisualStyleBackColor = true;
+ B_Save.Click += B_Save_Click;
//
// B_Cancel
//
- this.B_Cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.B_Cancel.Location = new System.Drawing.Point(11, 236);
- this.B_Cancel.Name = "B_Cancel";
- this.B_Cancel.Size = new System.Drawing.Size(75, 31);
- this.B_Cancel.TabIndex = 2;
- this.B_Cancel.Text = "Cancel";
- this.B_Cancel.UseVisualStyleBackColor = true;
- this.B_Cancel.Click += new System.EventHandler(this.B_Cancel_Click);
+ B_Cancel.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right;
+ B_Cancel.Location = new System.Drawing.Point(13, 339);
+ B_Cancel.Name = "B_Cancel";
+ B_Cancel.Size = new System.Drawing.Size(75, 31);
+ B_Cancel.TabIndex = 2;
+ B_Cancel.Text = "Cancel";
+ B_Cancel.UseVisualStyleBackColor = true;
+ B_Cancel.Click += B_Cancel_Click;
//
- // itemEditor1
+ // ItemEditor
//
- this.ItemEditor.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
- this.ItemEditor.Location = new System.Drawing.Point(12, 12);
- this.ItemEditor.Name = "ItemEditor";
- this.ItemEditor.Size = new System.Drawing.Size(155, 210);
- this.ItemEditor.TabIndex = 3;
+ ItemEditor.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+ ItemEditor.Location = new System.Drawing.Point(12, 12);
+ ItemEditor.Name = "ItemEditor";
+ ItemEditor.Size = new System.Drawing.Size(157, 316);
+ ItemEditor.TabIndex = 3;
//
// SingleItemEditor
//
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
- this.ClientSize = new System.Drawing.Size(179, 279);
- this.Controls.Add(this.ItemEditor);
- this.Controls.Add(this.B_Cancel);
- this.Controls.Add(this.B_Save);
- this.Icon = global::NHSE.WinForms.Properties.Resources.icon;
- this.MaximizeBox = false;
- this.MinimizeBox = false;
- this.Name = "SingleItemEditor";
- this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
- this.Text = "Item Editor";
- this.ResumeLayout(false);
+ AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+ ClientSize = new System.Drawing.Size(181, 382);
+ Controls.Add(ItemEditor);
+ Controls.Add(B_Cancel);
+ Controls.Add(B_Save);
+ Icon = Properties.Resources.icon;
+ MaximizeBox = false;
+ MinimizeBox = false;
+ Name = "SingleItemEditor";
+ StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ Text = "Item Editor";
+ ResumeLayout(false);
}
diff --git a/NHSE.WinForms/Subforms/SingleItemEditor.resx b/NHSE.WinForms/Subforms/SingleItemEditor.resx
index 1af7de1..8b2ff64 100644
--- a/NHSE.WinForms/Subforms/SingleItemEditor.resx
+++ b/NHSE.WinForms/Subforms/SingleItemEditor.resx
@@ -1,17 +1,17 @@
-