Feat: Post Box Editing (#744)

Feature:
Adds support for postbox.dat via Post Box Editor and accompanying components:
- Add Mail class.
- Add PostBox class and corresponding offset classes.
- Add wrap suppression option to ItemEditor.
- Add wrapping and box dictionary to ItemWrapping class.
- Add new language strings associated with forms and types.

Fix:
Resolved overwrite for bad dumps on all imports by adding UsageCompatibilityOffset and UsageCompatibility() added to Design classes. Transparent pixel check method added to PatternEditor and LoadPattern() altered to write the correct compatibility bytes based on type and transparency.
This commit is contained in:
Josh (vector_cmdr)
2026-02-10 01:32:16 +11:00
committed by GitHub
parent 25cff15b5a
commit 41841e5bfb
66 changed files with 4488 additions and 594 deletions

View File

@@ -12,6 +12,7 @@
<None Remove="Resources\text\de\text_fabric_color_de.txt" />
<None Remove="Resources\text\de\text_fabric_parts_de.txt" />
<None Remove="Resources\text\de\text_item_de.txt" />
<None Remove="Resources\text\de\text_mail_de.txt" />
<None Remove="Resources\text\de\text_phrase_de.txt" />
<None Remove="Resources\text\de\text_villager_de.txt" />
<None Remove="Resources\text\en\internal_en.txt" />
@@ -21,6 +22,7 @@
<None Remove="Resources\text\en\text_fabric_color_en.txt" />
<None Remove="Resources\text\en\text_fabric_parts_en.txt" />
<None Remove="Resources\text\en\text_item_en.txt" />
<None Remove="Resources\text\en\text_mail_en.txt" />
<None Remove="Resources\text\en\text_phrase_en.txt" />
<None Remove="Resources\text\en\text_villager_en.txt" />
<None Remove="Resources\text\es\internal_es.txt" />
@@ -30,6 +32,7 @@
<None Remove="Resources\text\es\text_fabric_color_es.txt" />
<None Remove="Resources\text\es\text_fabric_parts_es.txt" />
<None Remove="Resources\text\es\text_item_es.txt" />
<None Remove="Resources\text\es\text_mail_es.txt" />
<None Remove="Resources\text\es\text_phrase_es.txt" />
<None Remove="Resources\text\es\text_villager_es.txt" />
<None Remove="Resources\text\fr\internal_fr.txt" />
@@ -39,6 +42,7 @@
<None Remove="Resources\text\fr\text_fabric_color_fr.txt" />
<None Remove="Resources\text\fr\text_fabric_parts_fr.txt" />
<None Remove="Resources\text\fr\text_item_fr.txt" />
<None Remove="Resources\text\fr\text_mail_fr.txt" />
<None Remove="Resources\text\fr\text_phrase_fr.txt" />
<None Remove="Resources\text\fr\text_villager_fr.txt" />
<None Remove="Resources\text\it\internal_it.txt" />
@@ -48,6 +52,7 @@
<None Remove="Resources\text\it\text_fabric_color_it.txt" />
<None Remove="Resources\text\it\text_fabric_parts_it.txt" />
<None Remove="Resources\text\it\text_item_it.txt" />
<None Remove="Resources\text\it\text_mail_it.txt" />
<None Remove="Resources\text\it\text_phrase_it.txt" />
<None Remove="Resources\text\it\text_villager_it.txt" />
<None Remove="Resources\text\jp\internal_jp.txt" />
@@ -57,6 +62,7 @@
<None Remove="Resources\text\jp\text_fabric_color_jp.txt" />
<None Remove="Resources\text\jp\text_fabric_parts_jp.txt" />
<None Remove="Resources\text\jp\text_item_jp.txt" />
<None Remove="Resources\text\jp\text_mail_jp.txt" />
<None Remove="Resources\text\jp\text_phrase_jp.txt" />
<None Remove="Resources\text\jp\text_villager_jp.txt" />
<None Remove="Resources\text\ko\internal_ko.txt" />
@@ -66,6 +72,7 @@
<None Remove="Resources\text\ko\text_fabric_color_ko.txt" />
<None Remove="Resources\text\ko\text_fabric_parts_ko.txt" />
<None Remove="Resources\text\ko\text_item_ko.txt" />
<None Remove="Resources\text\ko\text_mail_ko.txt" />
<None Remove="Resources\text\ko\text_phrase_ko.txt" />
<None Remove="Resources\text\ko\text_villager_ko.txt" />
<None Remove="Resources\text\zhs\internal_zhs.txt" />
@@ -75,6 +82,7 @@
<None Remove="Resources\text\zhs\text_fabric_color_zhs.txt" />
<None Remove="Resources\text\zhs\text_fabric_parts_zhs.txt" />
<None Remove="Resources\text\zhs\text_item_zhs.txt" />
<None Remove="Resources\text\zhs\text_mail_zhs.txt" />
<None Remove="Resources\text\zhs\text_phrase_zhs.txt" />
<None Remove="Resources\text\zhs\text_villager_zhs.txt" />
<None Remove="Resources\text\zht\internal_zht.txt" />
@@ -84,6 +92,7 @@
<None Remove="Resources\text\zht\text_fabric_color_zht.txt" />
<None Remove="Resources\text\zht\text_fabric_parts_zht.txt" />
<None Remove="Resources\text\zht\text_item_zht.txt" />
<None Remove="Resources\text\zht\text_mail_zht.txt" />
<None Remove="Resources\text\zht\text_phrase_zht.txt" />
<None Remove="Resources\text\zht\text_villager_zht.txt" />
</ItemGroup>
@@ -100,6 +109,7 @@
<EmbeddedResource Include="Resources\text\de\text_fabric_color_de.txt" />
<EmbeddedResource Include="Resources\text\de\text_fabric_parts_de.txt" />
<EmbeddedResource Include="Resources\text\de\text_item_de.txt" />
<EmbeddedResource Include="Resources\text\de\text_mail_de.txt" />
<EmbeddedResource Include="Resources\text\de\text_phrase_de.txt" />
<EmbeddedResource Include="Resources\text\de\text_villager_de.txt" />
<EmbeddedResource Include="Resources\text\en\internal_en.txt" />
@@ -109,6 +119,7 @@
<EmbeddedResource Include="Resources\text\en\text_fabric_color_en.txt" />
<EmbeddedResource Include="Resources\text\en\text_fabric_parts_en.txt" />
<EmbeddedResource Include="Resources\text\en\text_item_en.txt" />
<EmbeddedResource Include="Resources\text\en\text_mail_en.txt" />
<EmbeddedResource Include="Resources\text\en\text_phrase_en.txt" />
<EmbeddedResource Include="Resources\text\en\text_villager_en.txt" />
<EmbeddedResource Include="Resources\text\es\internal_es.txt" />
@@ -118,6 +129,7 @@
<EmbeddedResource Include="Resources\text\es\text_fabric_color_es.txt" />
<EmbeddedResource Include="Resources\text\es\text_fabric_parts_es.txt" />
<EmbeddedResource Include="Resources\text\es\text_item_es.txt" />
<EmbeddedResource Include="Resources\text\es\text_mail_es.txt" />
<EmbeddedResource Include="Resources\text\es\text_phrase_es.txt" />
<EmbeddedResource Include="Resources\text\es\text_villager_es.txt" />
<EmbeddedResource Include="Resources\text\fr\internal_fr.txt" />
@@ -127,6 +139,7 @@
<EmbeddedResource Include="Resources\text\fr\text_fabric_color_fr.txt" />
<EmbeddedResource Include="Resources\text\fr\text_fabric_parts_fr.txt" />
<EmbeddedResource Include="Resources\text\fr\text_item_fr.txt" />
<EmbeddedResource Include="Resources\text\fr\text_mail_fr.txt" />
<EmbeddedResource Include="Resources\text\fr\text_phrase_fr.txt" />
<EmbeddedResource Include="Resources\text\fr\text_villager_fr.txt" />
<EmbeddedResource Include="Resources\text\it\internal_it.txt" />
@@ -136,6 +149,7 @@
<EmbeddedResource Include="Resources\text\it\text_fabric_color_it.txt" />
<EmbeddedResource Include="Resources\text\it\text_fabric_parts_it.txt" />
<EmbeddedResource Include="Resources\text\it\text_item_it.txt" />
<EmbeddedResource Include="Resources\text\it\text_mail_it.txt" />
<EmbeddedResource Include="Resources\text\it\text_phrase_it.txt" />
<EmbeddedResource Include="Resources\text\it\text_villager_it.txt" />
<EmbeddedResource Include="Resources\text\jp\internal_jp.txt" />
@@ -145,6 +159,7 @@
<EmbeddedResource Include="Resources\text\jp\text_fabric_color_jp.txt" />
<EmbeddedResource Include="Resources\text\jp\text_fabric_parts_jp.txt" />
<EmbeddedResource Include="Resources\text\jp\text_item_jp.txt" />
<EmbeddedResource Include="Resources\text\jp\text_mail_jp.txt" />
<EmbeddedResource Include="Resources\text\jp\text_phrase_jp.txt" />
<EmbeddedResource Include="Resources\text\jp\text_villager_jp.txt" />
<EmbeddedResource Include="Resources\text\ko\internal_ko.txt" />
@@ -154,6 +169,7 @@
<EmbeddedResource Include="Resources\text\ko\text_fabric_color_ko.txt" />
<EmbeddedResource Include="Resources\text\ko\text_fabric_parts_ko.txt" />
<EmbeddedResource Include="Resources\text\ko\text_item_ko.txt" />
<EmbeddedResource Include="Resources\text\ko\text_mail_ko.txt" />
<EmbeddedResource Include="Resources\text\ko\text_phrase_ko.txt" />
<EmbeddedResource Include="Resources\text\ko\text_villager_ko.txt" />
<EmbeddedResource Include="Resources\text\zhs\internal_zhs.txt" />
@@ -163,6 +179,7 @@
<EmbeddedResource Include="Resources\text\zhs\text_fabric_color_zhs.txt" />
<EmbeddedResource Include="Resources\text\zhs\text_fabric_parts_zhs.txt" />
<EmbeddedResource Include="Resources\text\zhs\text_item_zhs.txt" />
<EmbeddedResource Include="Resources\text\zhs\text_mail_zhs.txt" />
<EmbeddedResource Include="Resources\text\zhs\text_phrase_zhs.txt" />
<EmbeddedResource Include="Resources\text\zhs\text_villager_zhs.txt" />
<EmbeddedResource Include="Resources\text\zht\internal_zht.txt" />
@@ -172,6 +189,7 @@
<EmbeddedResource Include="Resources\text\zht\text_fabric_color_zht.txt" />
<EmbeddedResource Include="Resources\text\zht\text_fabric_parts_zht.txt" />
<EmbeddedResource Include="Resources\text\zht\text_item_zht.txt" />
<EmbeddedResource Include="Resources\text\zht\text_mail_zht.txt" />
<EmbeddedResource Include="Resources\text\zht\text_phrase_zht.txt" />
<EmbeddedResource Include="Resources\text\zht\text_villager_zht.txt" />
</ItemGroup>

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -65,9 +65,9 @@ public void SetVillagerHouses(IReadOnlyList<IVillagerHouse> villagers)
}
public DesignPattern GetDesign(int index) => Offsets.ReadPattern(Data, index);
public void SetDesign(DesignPattern value, int index, Span<byte> playerID, Span<byte> 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<byte> playerID, Span<byte> townID) => Offsets.WritePatternPRO(value, Data, index, playerID, townID);
public void SetDesignPRO(DesignPatternPRO value, int index) => Offsets.WritePatternPRO(value, Data, index);
public IReadOnlyList<Item> RecycleBin
{
@@ -106,11 +106,11 @@ public DesignPattern[] GetDesigns()
return result;
}
public void SetDesigns(IReadOnlyList<DesignPattern> value, Span<byte> playerID, Span<byte> townID)
public void SetDesigns(IReadOnlyList<DesignPattern> 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<DesignPatternPRO> value, Span<byte> playerID, Span<byte> townID)
public void SetDesignsPRO(IReadOnlyList<DesignPatternPRO> 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

View File

@@ -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;
/// <summary>
/// postbox.dat
/// Data structures stored for the players Post Box (postbox.dat)
/// </summary>
public sealed class PostBox(ISaveFileProvider provider) : EncryptedFilePair(provider, "postbox");
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<byte> Get_s_7b602b39() => Data.Slice(Offsets.s_7b602b39, 4);
public Span<byte> MailListWholeRegion
{
get => Data.Slice(Offsets.MailList, MailListLength);
set => value.CopyTo(Data[Offsets.MailList..]);
}
public Span<byte> GetIndividualLetter(int index) => Data.Slice(Offsets.MailList + (MailLength * index), MailLength);
public void SetIndividualLetter(int index, Span<byte> value)
{
value.CopyTo(Data[(Offsets.MailList + (MailLength * index))..]);
}
public List<int> GetUsedPostBoxSlots()
{
var usedSlots = new List<int>();
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<byte> 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<GSaveDate>(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));
}
/// <summary>
/// Sets or clears the language string for a mail item at the specified index.
/// </summary>
/// <param name="index">The zero-based index of the mail item in the postbox.</param>
/// <param name="languageString">The IETF BCP 47 language tag string to set (e.g., "en-US", "ja-JP").</param>
/// <param name="player">If <c>true</c>, sets the language string; if <c>false</c>, clears the language data.</param>
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
}

View File

@@ -123,17 +123,13 @@ public static DesignPattern ReadPatternAtOffset(ReadOnlySpan<byte> data, int off
return new DesignPattern(v);
}
public void WritePattern(DesignPattern p, Span<byte> data, int index, Span<byte> playerID, Span<byte> townID)
public void WritePattern(DesignPattern p, Span<byte> 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<byte> wipeflag = [0x02, 0xEE, 0x00, 0x00]; // wipe so player owns
wipeflag.CopyTo(p.Data[0x70..]);
p.Data.CopyTo(data[(LandMyDesign + (index * DesignPattern.SIZE))..]);
ReadOnlySpan<byte> 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<byte> data, int index)
@@ -150,17 +146,12 @@ public static DesignPatternPRO ReadPatternPROAtOffset(ReadOnlySpan<byte> data, i
return new DesignPatternPRO(v);
}
public void WritePatternPRO(DesignPatternPRO p, Span<byte> data, int index, Span<byte> playerID, Span<byte> townID)
public void WritePatternPRO(DesignPatternPRO p, Span<byte> 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<byte> wipeflag = [0x00, 0x00, 0x00, 0x00]; // wipe so player owns
wipeflag.CopyTo(p.Data[0x70..]);
p.Data.CopyTo(data[(PatternsPRO + (index * DesignPatternPRO.SIZE))..]);
ReadOnlySpan<byte> 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<byte> data, int index)

View File

@@ -0,0 +1,55 @@
using System;
namespace NHSE.Core;
/// <summary>
/// Offset info and object retrieval logic for <see cref="PostBox"/>
/// </summary>
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),
};
}
}

View File

@@ -0,0 +1,16 @@
using System;
namespace NHSE.Core;
/// <summary>
/// <inheritdoc cref="PostBoxOffsets"/>
/// </summary>
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
}

View File

@@ -0,0 +1,16 @@
using System;
namespace NHSE.Core;
/// <summary>
/// <inheritdoc cref="PostBoxOffsets"/>
/// </summary>
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
}

View File

@@ -0,0 +1,16 @@
using System;
namespace NHSE.Core;
/// <summary>
/// <inheritdoc cref="PostBoxOffsets"/>
/// </summary>
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
}

View File

@@ -0,0 +1,16 @@
using System;
namespace NHSE.Core;
/// <summary>
/// <inheritdoc cref="PostBoxOffsets"/>
/// </summary>
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
}

View File

@@ -0,0 +1,16 @@
using System;
namespace NHSE.Core;
/// <summary>
/// <inheritdoc cref="PostBoxOffsets"/>
/// </summary>
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
}

View File

@@ -0,0 +1,16 @@
using System;
namespace NHSE.Core;
/// <summary>
/// <inheritdoc cref="PostBoxOffsets"/>
/// </summary>
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
}

View File

@@ -0,0 +1,16 @@
using System;
namespace NHSE.Core;
/// <summary>
/// <inheritdoc cref="PostBoxOffsets"/>
/// </summary>
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
}

View File

@@ -0,0 +1,16 @@
using System;
namespace NHSE.Core;
/// <summary>
/// <inheritdoc cref="PostBoxOffsets"/>
/// </summary>
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
}

View File

@@ -0,0 +1,16 @@
using System;
namespace NHSE.Core;
/// <summary>
/// <inheritdoc cref="PostBoxOffsets"/>
/// </summary>
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
}

View File

@@ -0,0 +1,16 @@
using System;
namespace NHSE.Core;
/// <summary>
/// <inheritdoc cref="PostBoxOffsets"/>
/// </summary>
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
}

View File

@@ -0,0 +1,16 @@
using System;
namespace NHSE.Core;
/// <summary>
/// <inheritdoc cref="PostBoxOffsets"/>
/// </summary>
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
}

View File

@@ -0,0 +1,16 @@
using System;
namespace NHSE.Core;
/// <summary>
/// <inheritdoc cref="PostBoxOffsets"/>
/// </summary>
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
}

View File

@@ -0,0 +1,16 @@
using System;
namespace NHSE.Core;
/// <summary>
/// <inheritdoc cref="PostBoxOffsets"/>
/// </summary>
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
}

View File

@@ -0,0 +1,16 @@
using System;
namespace NHSE.Core;
/// <summary>
/// <inheritdoc cref="PostBoxOffsets"/>
/// </summary>
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
}

View File

@@ -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<string, string> VillagerMap;
public readonly Dictionary<string, string> VillagerDefaultPhraseMap;
public readonly Dictionary<string, string> MailMap;
public readonly List<ComboItem> ItemDataSource;
public readonly Dictionary<string, string> 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<ComboItem> CreateItemDataSource(IReadOnlyCollection<KeyValuePair<ush
public string GetVillagerDefaultPhrase(string name) => 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<string> arr)
{
var items = arr.ToArray();

View File

@@ -13,6 +13,7 @@ public sealed class DesignPattern(Memory<byte> 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<byte> GetPlayerIdentity() => Data.Slice(PersonalOffset + 0x1C, 4 + 20);
/// <summary>

View File

@@ -14,6 +14,7 @@ public sealed class DesignPatternPRO(Memory<byte> 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<byte> GetPlayerIdentity() => Data.Slice(PersonalOffset + 0x1C, 4 + 20);
public void SetPixelAtIndex(int sheet, int index, int value)

View File

@@ -1,4 +1,6 @@
namespace NHSE.Core;
using System.Collections.Generic;
namespace NHSE.Core;
/// <summary>
/// Type of wrapping an <see cref="Item"/> 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,
}
/// <summary>
/// Provides extended wrapping and box skin information for items.
/// </summary>
/// <remarks>
/// Contains lookup dictionaries for item wrapping paper colors and delivery box types.
/// </remarks>
public sealed class ItemWrappingExtended
{
/// <summary>
/// Dictionary mapping wrapping skin identifiers to their corresponding <see cref="WrappingInfo"/>.
/// </summary>
/// <remarks>
/// 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.
/// </remarks>
// 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<int, WrappingInfo> 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) },
};
/// <summary>
/// Represents information about a wrapping paper type.
/// </summary>
/// <param name="name">The display name of the wrapping paper.</param>
/// <param name="index">The index used for UI ordering or selection.</param>
public record WrappingInfo(string name, int index);
/// <summary>
/// Dictionary mapping box skin identifiers to their corresponding <see cref="BoxInfo"/>.
/// </summary>
/// <remarks>
/// Keys are hexadecimal identifiers representing different delivery boxes.
/// Includes service-specific boxes (Nook Shopping Box, Hotel Box, Paradise Planning Box).
/// </remarks>
// 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<int, BoxInfo> ItemBoxSkin = new()
{
{ 0x00, new("box00", 0) },
{ 0x43, new("box01", 1) },
{ 0x6B, new("box02", 2) },
{ 0x6F, new("box03", 3) },
};
/// <summary>
/// Represents information about a delivery box type.
/// </summary>
/// <param name="name">The display name of the box type.</param>
/// <param name="index">The index used for UI ordering or selection.</param>
public record BoxInfo(string name, int index);
}

View File

@@ -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
/// <summary>
/// Maps NPC sender IDs to their corresponding <see cref="SenderNPCInfo"/> data, including image identifiers, name conversions, and mapping indices.
/// </summary>
/// <remarks>
/// The dictionary key represents the NPC's unique identifier stored at offset <see cref="NPCSenderSpeciesID"/> 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.
/// </remarks>
public record SenderNPCInfo(string Image, string NameConversion, int MappingIndex);
public static readonly Dictionary<int, SenderNPCInfo> 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<string, int> 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<string> NPCTypeList = new List<string>
{
"Player",
"Villager",
"NPC"
};
public static List<string> MailTypeList = new List<string>
{
"Boxed Item",
"Letter",
};
/// <summary>
/// Maps stationery skin IDs to their corresponding <see cref="StationeryInfo"/> data, including the display name and mapping index.
/// </summary>
/// <remarks>
/// The dictionary key represents the stationery skin code stored at offset <see cref="MailStationerySkin"/> 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.
/// </remarks>
public record StationeryInfo(string name, int index);
public static readonly Dictionary<int, StationeryInfo> 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) },
};
}

View File

@@ -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<ComboItem> AllItems = [];
public void Initialize(IReadOnlyList<ComboItem> items, bool canExtend = false)
public void Initialize(IReadOnlyList<ComboItem> items, bool canExtend = false, bool supressed = false)
{
CHK_IsExtension.Visible = CanExtend = canExtend;
@@ -55,6 +56,8 @@ public void Initialize(IReadOnlyList<ComboItem> 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;
}
/// <summary>
/// Hides the item wrapping UI controls from the editor for handling via custom UIs.
/// </summary>
/// <remarks>
/// This method sets the visibility of both the wrapped checkbox (<see cref="CHK_Wrapped"/>)
/// and the wrapped options panel (<see cref="FLP_Wrapped"/>) to <see langword="false"/>.
/// Use this when wrapping information should not be displayed or edited by the standard controls.
/// </remarks>
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)

View File

@@ -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];
}

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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=저장

View File

@@ -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=保存

View File

@@ -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=儲存

View File

@@ -28,178 +28,185 @@ protected override void Dispose(bool disposing)
/// </summary>
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;
}
}

View File

@@ -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 +

View File

@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
@@ -26,36 +26,36 @@
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
@@ -117,7 +117,10 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="CM_Picture.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<metadata name="CM_DLDesign.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="CM_Picture.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>145, 17</value>
</metadata>
</root>

View File

@@ -28,223 +28,230 @@ protected override void Dispose(bool disposing)
/// </summary>
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;
}
}

View File

@@ -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);

View File

@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
@@ -26,36 +26,36 @@
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
@@ -117,7 +117,10 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="CM_Picture.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<metadata name="CM_DLDesign.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="CM_Picture.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>145, 17</value>
</metadata>
</root>

View File

@@ -0,0 +1,812 @@
using NHSE.Core;
namespace NHSE.WinForms
{
partial class PostBoxEditor
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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;
}
}

View File

@@ -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<int> 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<byte> 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();
}

View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@@ -28,56 +28,55 @@ protected override void Dispose(bool disposing)
/// </summary>
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);
}

View File

@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
@@ -26,36 +26,36 @@
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->