diff --git a/CxFreezeCompile.py b/CxFreezeCompile.py index 426ebcf..2c8e164 100644 --- a/CxFreezeCompile.py +++ b/CxFreezeCompile.py @@ -11,8 +11,8 @@ base = "Win32GUI" if sys.platform == "win32" else None setup( - name = "PalEdit v0.11.1", - version = "0.11.1", + name = "PalEdit v0.11.2", + version = "0.11.2", description = "A simple tool for editing PalWorld saves", options={"build_exe": build_options}, executables=[Executable("PalEdit.py", base=base, icon="palworld_pal_edit/resources/MossandaIcon.ico")], diff --git a/PalEdit.py b/PalEdit.py index 5c68d3a..a6a00e5 100644 --- a/PalEdit.py +++ b/PalEdit.py @@ -1,3 +1,5 @@ import palworld_pal_edit.PalEdit + palworld_pal_edit.PalEdit.main() + diff --git a/pals/error_0.json b/pals/error_0.json index e69de29..246472d 100644 --- a/pals/error_0.json +++ b/pals/error_0.json @@ -0,0 +1,405 @@ +{ + "key": { + "PlayerUId": { + "struct_type": "Guid", + "struct_id": "00000000-0000-0000-0000-000000000000", + "id": null, + "value": "00000000-0000-0000-0000-000000000000", + "type": "StructProperty" + }, + "InstanceId": { + "struct_type": "Guid", + "struct_id": "00000000-0000-0000-0000-000000000000", + "id": null, + "value": "bd67ef2b-44ab-fbeb-262d-33ac350003d7", + "type": "StructProperty" + }, + "DebugName": { + "id": null, + "value": "", + "type": "StrProperty" + } + }, + "value": { + "RawData": { + "array_type": "ByteProperty", + "id": null, + "value": { + "object": { + "SaveParameter": { + "struct_type": "PalIndividualCharacterSaveParameter", + "struct_id": "00000000-0000-0000-0000-000000000000", + "id": null, + "value": { + "CharacterID": { + "id": null, + "value": "BOSS_Female_Soldier", + "type": "NameProperty" + }, + "Level": { + "id": null, + "value": { + "type": "None", + "value": 19 + }, + "type": "ByteProperty" + }, + "Exp": { + "id": null, + "value": 7747, + "type": "Int64Property" + }, + "EquipWaza": { + "array_type": "EnumProperty", + "id": null, + "value": { + "values": [ + "EPalWazaID::Human_Punch" + ] + }, + "type": "ArrayProperty" + }, + "MasteredWaza": { + "array_type": "EnumProperty", + "id": null, + "value": { + "values": [ + "EPalWazaID::Human_Punch" + ] + }, + "type": "ArrayProperty" + }, + "Hp": { + "struct_type": "FixedPoint64", + "struct_id": "00000000-0000-0000-0000-000000000000", + "id": null, + "value": { + "Value": { + "id": null, + "value": 1733000, + "type": "Int64Property" + } + }, + "type": "StructProperty" + }, + "Talent_HP": { + "id": null, + "value": { + "type": "None", + "value": 66 + }, + "type": "ByteProperty" + }, + "Talent_Shot": { + "id": null, + "value": { + "type": "None", + "value": 52 + }, + "type": "ByteProperty" + }, + "Talent_Defense": { + "id": null, + "value": { + "type": "None", + "value": 51 + }, + "type": "ByteProperty" + }, + "PassiveSkillList": { + "array_type": "NameProperty", + "id": null, + "value": { + "values": [ + "Deffence_up2" + ] + }, + "type": "ArrayProperty" + }, + "OwnedTime": { + "struct_type": "DateTime", + "struct_id": "00000000-0000-0000-0000-000000000000", + "id": null, + "value": 638706445335110000, + "type": "StructProperty" + }, + "OwnerPlayerUId": { + "struct_type": "Guid", + "struct_id": "00000000-0000-0000-0000-000000000000", + "id": null, + "value": "53a76be3-0000-0000-0000-000000000000", + "type": "StructProperty" + }, + "OldOwnerPlayerUIds": { + "array_type": "StructProperty", + "id": null, + "value": { + "prop_name": "OldOwnerPlayerUIds", + "prop_type": "StructProperty", + "values": [ + "53a76be3-0000-0000-0000-000000000000" + ], + "type_name": "Guid", + "id": "00000000-0000-0000-0000-000000000000" + }, + "type": "ArrayProperty" + }, + "SlotID": { + "struct_type": "PalCharacterSlotId", + "struct_id": "00000000-0000-0000-0000-000000000000", + "id": null, + "value": { + "ContainerId": { + "struct_type": "PalContainerId", + "struct_id": "00000000-0000-0000-0000-000000000000", + "id": null, + "value": { + "ID": { + "struct_type": "Guid", + "struct_id": "00000000-0000-0000-0000-000000000000", + "id": null, + "value": "8769d65f-4eab-2813-dfa5-7f9f12891f03", + "type": "StructProperty" + } + }, + "type": "StructProperty" + }, + "SlotIndex": { + "id": null, + "value": 183, + "type": "IntProperty" + } + }, + "type": "StructProperty" + }, + "GotStatusPointList": { + "array_type": "StructProperty", + "id": null, + "value": { + "prop_name": "GotStatusPointList", + "prop_type": "StructProperty", + "values": [ + { + "StatusName": { + "id": null, + "value": "\u6700\u5927HP", + "type": "NameProperty" + }, + "StatusPoint": { + "id": null, + "value": 0, + "type": "IntProperty" + } + }, + { + "StatusName": { + "id": null, + "value": "\u6700\u5927SP", + "type": "NameProperty" + }, + "StatusPoint": { + "id": null, + "value": 0, + "type": "IntProperty" + } + }, + { + "StatusName": { + "id": null, + "value": "\u653b\u6483\u529b", + "type": "NameProperty" + }, + "StatusPoint": { + "id": null, + "value": 0, + "type": "IntProperty" + } + }, + { + "StatusName": { + "id": null, + "value": "\u6240\u6301\u91cd\u91cf", + "type": "NameProperty" + }, + "StatusPoint": { + "id": null, + "value": 0, + "type": "IntProperty" + } + }, + { + "StatusName": { + "id": null, + "value": "\u6355\u7372\u7387", + "type": "NameProperty" + }, + "StatusPoint": { + "id": null, + "value": 0, + "type": "IntProperty" + } + }, + { + "StatusName": { + "id": null, + "value": "\u4f5c\u696d\u901f\u5ea6", + "type": "NameProperty" + }, + "StatusPoint": { + "id": null, + "value": 0, + "type": "IntProperty" + } + } + ], + "type_name": "PalGotStatusPoint", + "id": "00000000-0000-0000-0000-000000000000" + }, + "type": "ArrayProperty" + }, + "GotExStatusPointList": { + "array_type": "StructProperty", + "id": null, + "value": { + "prop_name": "GotExStatusPointList", + "prop_type": "StructProperty", + "values": [ + { + "StatusName": { + "id": null, + "value": "\u6700\u5927HP", + "type": "NameProperty" + }, + "StatusPoint": { + "id": null, + "value": 0, + "type": "IntProperty" + } + }, + { + "StatusName": { + "id": null, + "value": "\u6700\u5927SP", + "type": "NameProperty" + }, + "StatusPoint": { + "id": null, + "value": 0, + "type": "IntProperty" + } + }, + { + "StatusName": { + "id": null, + "value": "\u653b\u6483\u529b", + "type": "NameProperty" + }, + "StatusPoint": { + "id": null, + "value": 0, + "type": "IntProperty" + } + }, + { + "StatusName": { + "id": null, + "value": "\u6240\u6301\u91cd\u91cf", + "type": "NameProperty" + }, + "StatusPoint": { + "id": null, + "value": 0, + "type": "IntProperty" + } + }, + { + "StatusName": { + "id": null, + "value": "\u4f5c\u696d\u901f\u5ea6", + "type": "NameProperty" + }, + "StatusPoint": { + "id": null, + "value": 0, + "type": "IntProperty" + } + } + ], + "type_name": "PalGotStatusPoint", + "id": "00000000-0000-0000-0000-000000000000" + }, + "type": "ArrayProperty" + }, + "LastJumpedLocation": { + "struct_type": "Vector", + "struct_id": "00000000-0000-0000-0000-000000000000", + "id": null, + "value": { + "x": 0.0, + "y": 0.0, + "z": -999999.0 + }, + "type": "StructProperty" + }, + "LastNickNameModifierPlayerUid": { + "struct_type": "Guid", + "struct_id": "00000000-0000-0000-0000-000000000000", + "id": null, + "value": "53a76be3-0000-0000-0000-000000000000", + "type": "StructProperty" + }, + "IsRarePal": { + "value": false, + "id": null, + "type": "BoolProperty" + } + }, + "type": "StructProperty" + } + }, + "unknown_bytes": [ + 0, + 0, + 0, + 0 + ], + "group_id": "206a830f-412e-9160-9d6b-469490123e65" + }, + "type": "ArrayProperty", + "custom_type": ".worldSaveData.CharacterSaveParameterMap.Value.RawData" + }, + "CustomVersionData": { + "array_type": "ByteProperty", + "id": null, + "value": { + "values": [ + 1, + 0, + 0, + 0, + 108, + 246, + 252, + 15, + 153, + 72, + 144, + 17, + 248, + 156, + 96, + 177, + 94, + 71, + 70, + 74, + 1, + 0, + 0, + 0 + ] + }, + "type": "ArrayProperty" + } + } +} \ No newline at end of file diff --git a/pals/error_1.json b/pals/error_1.json index 2949809..138d023 100644 --- a/pals/error_1.json +++ b/pals/error_1.json @@ -4,14 +4,14 @@ "struct_type": "Guid", "struct_id": "00000000-0000-0000-0000-000000000000", "id": null, - "value": "00000000-0000-0000-0000-000000000001", + "value": "00000000-0000-0000-0000-000000000000", "type": "StructProperty" }, "InstanceId": { "struct_type": "Guid", "struct_id": "00000000-0000-0000-0000-000000000000", "id": null, - "value": "6b415b44-452a-b6e7-c4fc-ab8a23547e7e", + "value": "383b3d61-453e-403a-9828-ce818ec91dbe", "type": "StructProperty" }, "DebugName": { @@ -33,20 +33,20 @@ "value": { "CharacterID": { "id": null, - "value": "BOSS_Male_DesertPeople", + "value": "BOSS_Ninja", "type": "NameProperty" }, "Level": { "id": null, "value": { "type": "None", - "value": 36 + "value": 28 }, "type": "ByteProperty" }, "Exp": { "id": null, - "value": 206194, + "value": 46272, "type": "Int64Property" }, "EquipWaza": { @@ -76,7 +76,7 @@ "value": { "Value": { "id": null, - "value": 1839000, + "value": 2409000, "type": "Int64Property" } }, @@ -86,7 +86,7 @@ "id": null, "value": { "type": "None", - "value": 96 + "value": 88 }, "type": "ByteProperty" }, @@ -102,22 +102,32 @@ "id": null, "value": { "type": "None", - "value": 59 + "value": 97 }, "type": "ByteProperty" }, + "PassiveSkillList": { + "array_type": "NameProperty", + "id": null, + "value": { + "values": [ + "PAL_Sanity_Up_2" + ] + }, + "type": "ArrayProperty" + }, "OwnedTime": { "struct_type": "DateTime", "struct_id": "00000000-0000-0000-0000-000000000000", "id": null, - "value": 638705317240230000, + "value": 638709247137510000, "type": "StructProperty" }, "OwnerPlayerUId": { "struct_type": "Guid", "struct_id": "00000000-0000-0000-0000-000000000000", "id": null, - "value": "00000000-0000-0000-0000-000000000001", + "value": "0f86d090-0000-0000-0000-000000000000", "type": "StructProperty" }, "OldOwnerPlayerUIds": { @@ -127,7 +137,7 @@ "prop_name": "OldOwnerPlayerUIds", "prop_type": "StructProperty", "values": [ - "00000000-0000-0000-0000-000000000001" + "0f86d090-0000-0000-0000-000000000000" ], "type_name": "Guid", "id": "00000000-0000-0000-0000-000000000000" @@ -148,7 +158,7 @@ "struct_type": "Guid", "struct_id": "00000000-0000-0000-0000-000000000000", "id": null, - "value": "04292cd4-4fc4-4c39-d36a-118bb41b1c0d", + "value": "3c6523cd-4b57-f4c5-ca37-33999218febe", "type": "StructProperty" } }, @@ -156,7 +166,7 @@ }, "SlotIndex": { "id": null, - "value": 27, + "value": 1, "type": "IntProperty" } }, @@ -325,9 +335,9 @@ "struct_id": "00000000-0000-0000-0000-000000000000", "id": null, "value": { - "x": -62616.34972912388, - "y": 402420.0642573488, - "z": -999999.0 + "x": -130061.80231977624, + "y": 228725.38261903182, + "z": -1000000000.0 }, "type": "StructProperty" }, @@ -335,7 +345,7 @@ "struct_type": "Guid", "struct_id": "00000000-0000-0000-0000-000000000000", "id": null, - "value": "00000000-0000-0000-0000-000000000001", + "value": "0f86d090-0000-0000-0000-000000000000", "type": "StructProperty" }, "IsRarePal": { @@ -353,7 +363,7 @@ 0, 0 ], - "group_id": "410dbcbd-4d88-d130-c170-92b74f241f10" + "group_id": "afcf146e-445f-2ecc-daa2-ff8d6dcb77b8" }, "type": "ArrayProperty", "custom_type": ".worldSaveData.CharacterSaveParameterMap.Value.RawData" diff --git a/pals/error_2.json b/pals/error_2.json index 150a2e0..8704746 100644 --- a/pals/error_2.json +++ b/pals/error_2.json @@ -4,14 +4,14 @@ "struct_type": "Guid", "struct_id": "00000000-0000-0000-0000-000000000000", "id": null, - "value": "00000000-0000-0000-0000-000000000001", + "value": "00000000-0000-0000-0000-000000000000", "type": "StructProperty" }, "InstanceId": { "struct_type": "Guid", "struct_id": "00000000-0000-0000-0000-000000000000", "id": null, - "value": "b1463b73-49e1-7087-817e-d28d61595b42", + "value": "ee592747-4e03-edfd-8007-c48696cf5dc6", "type": "StructProperty" }, "DebugName": { @@ -33,20 +33,20 @@ "value": { "CharacterID": { "id": null, - "value": "BOSS_Police_old", + "value": "BOSS_Believer_Fat_GiantClub", "type": "NameProperty" }, "Level": { "id": null, "value": { "type": "None", - "value": 57 + "value": 30 }, "type": "ByteProperty" }, "Exp": { "id": null, - "value": 9619412, + "value": 67524, "type": "Int64Property" }, "EquipWaza": { @@ -76,7 +76,7 @@ "value": { "Value": { "id": null, - "value": 4216000, + "value": 2438000, "type": "Int64Property" } }, @@ -86,7 +86,7 @@ "id": null, "value": { "type": "None", - "value": 68 + "value": 64 }, "type": "ByteProperty" }, @@ -94,7 +94,7 @@ "id": null, "value": { "type": "None", - "value": 97 + "value": 73 }, "type": "ByteProperty" }, @@ -102,7 +102,7 @@ "id": null, "value": { "type": "None", - "value": 69 + "value": 96 }, "type": "ByteProperty" }, @@ -111,7 +111,7 @@ "id": null, "value": { "values": [ - "PAL_masochist" + "PAL_rude" ] }, "type": "ArrayProperty" @@ -120,14 +120,14 @@ "struct_type": "DateTime", "struct_id": "00000000-0000-0000-0000-000000000000", "id": null, - "value": 638705307161100000, + "value": 638709253302150000, "type": "StructProperty" }, "OwnerPlayerUId": { "struct_type": "Guid", "struct_id": "00000000-0000-0000-0000-000000000000", "id": null, - "value": "00000000-0000-0000-0000-000000000001", + "value": "0f86d090-0000-0000-0000-000000000000", "type": "StructProperty" }, "OldOwnerPlayerUIds": { @@ -137,13 +137,18 @@ "prop_name": "OldOwnerPlayerUIds", "prop_type": "StructProperty", "values": [ - "00000000-0000-0000-0000-000000000001" + "0f86d090-0000-0000-0000-000000000000" ], "type_name": "Guid", "id": "00000000-0000-0000-0000-000000000000" }, "type": "ArrayProperty" }, + "SanityValue": { + "id": null, + "value": 58.3298225402832, + "type": "FloatProperty" + }, "SlotID": { "struct_type": "PalCharacterSlotId", "struct_id": "00000000-0000-0000-0000-000000000000", @@ -158,7 +163,7 @@ "struct_type": "Guid", "struct_id": "00000000-0000-0000-0000-000000000000", "id": null, - "value": "04292cd4-4fc4-4c39-d36a-118bb41b1c0d", + "value": "3c6523cd-4b57-f4c5-ca37-33999218febe", "type": "StructProperty" } }, @@ -166,7 +171,7 @@ }, "SlotIndex": { "id": null, - "value": 6, + "value": 2, "type": "IntProperty" } }, @@ -335,9 +340,9 @@ "struct_id": "00000000-0000-0000-0000-000000000000", "id": null, "value": { - "x": -686540.0456187662, - "y": -380252.5087792862, - "z": -999999.0 + "x": -78794.6374120747, + "y": 192635.35184451967, + "z": -1000000000.0 }, "type": "StructProperty" }, @@ -345,7 +350,7 @@ "struct_type": "Guid", "struct_id": "00000000-0000-0000-0000-000000000000", "id": null, - "value": "00000000-0000-0000-0000-000000000001", + "value": "0f86d090-0000-0000-0000-000000000000", "type": "StructProperty" }, "IsRarePal": { @@ -363,7 +368,7 @@ 0, 0 ], - "group_id": "410dbcbd-4d88-d130-c170-92b74f241f10" + "group_id": "afcf146e-445f-2ecc-daa2-ff8d6dcb77b8" }, "type": "ArrayProperty", "custom_type": ".worldSaveData.CharacterSaveParameterMap.Value.RawData" diff --git a/palworld_pal_edit/EmptyObjectHandler.py b/palworld_pal_edit/EmptyObjectHandler.py index 1dfe07c..ed9ea03 100644 --- a/palworld_pal_edit/EmptyObjectHandler.py +++ b/palworld_pal_edit/EmptyObjectHandler.py @@ -277,3 +277,35 @@ "value": {"value": 0, "type":"None"}, "type": "ByteProperty" } + +EmptyGotWorkObject = { + "array_type": "StructProperty", + "id": None, + "value": { + "prop_name": "GotWorkSuitabilityAddRankList", + "prop_type": "StructProperty", + "values": [ + + ], + "type_name": "PalWorkSuitabilityInfo", + "id": "00000000-0000-0000-0000-000000000000" + }, + "type": "ArrayProperty" +} + +EmptyWorkObject = { + "WorkSuitability": { + "id": None, + "value": { + "type": "EPalWorkSuitability", + "value": None + }, + "type": "EnumProperty" + }, + "Rank": { + "id": None, + "value": 0, + "type": "IntProperty" + } +} + diff --git a/palworld_pal_edit/PalEdit.py b/palworld_pal_edit/PalEdit.py index 34183c7..6611d80 100644 --- a/palworld_pal_edit/PalEdit.py +++ b/palworld_pal_edit/PalEdit.py @@ -122,10 +122,10 @@ def skip_encode( class PalEditConfig: - version = "0.11.1" + version = "0.11.2" ftsize = 18 font = "Microsoft YaHei" - skill_col = ["#DE3C3A", "#000000", "#DFE8E7", "#DFE8E7", "#FEDE00", "#68FFD8"] + skill_col = ["#DE3C3A", "#DE3C3A", "#DE3C3A", "#000000", "#DFE8E7", "#DFE8E7", "#FEDE00", "#68FFD8"] levelcap = 60 @@ -165,7 +165,8 @@ def load_i18n(self, lang=""): self.attackops = [] for e in PalInfo.PalAttacks: self.attackops.append(PalInfo.PalAttacks[e]) - self.attackops.remove("None") + if "None" in self.attackops: + self.attackops.remove("None") self.attackops.sort() self.attackops.insert(0, "None") @@ -179,9 +180,10 @@ def load_i18n(self, lang=""): species = [PalInfo.PalSpecies[e].GetName() for e in PalInfo.PalSpecies] species.sort() try: - for idx, n in enumerate(species): - self.palname['menu'].entryconfigure(idx, label=n, - command=tk._setit(self.speciesvar_name, n, self.changespeciestype)) + self.palname.config(values=species) + #for idx, n in enumerate(species): + #self.palname['menu'].entryconfigure(idx, label=n, + #command=tk._setit(self.speciesvar_name, n, self.changespeciestype)) if self.speciesvar.get() in PalInfo.PalSpecies: self.speciesvar_name.set(PalInfo.PalSpecies[self.speciesvar.get()].GetName()) else: @@ -198,6 +200,7 @@ def updateSkillMenu(self): available_ops = pal.GetAvailableSkills() available_ops.insert(0, "None") + print(available_ops) def atk_upd(menu, atk_id, label, codename): menu['menu'].add_command(label=label, command=tk._setit(self.attacks[atk_id], codename, @@ -210,8 +213,10 @@ def atk_upd(menu, atk_id, label, codename): atk_upd(menu, atk_id, PalInfo.PalAttacks[codename], codename) op = [PalInfo.PalPassives[e] for e in PalInfo.PalPassives] - op.remove("None") - op.remove("Unknown") + if "None" in op: + op.remove("None") + if "Unknown" in op: + op.remove("Unknown") op.sort() op.insert(0, "None") @@ -335,14 +340,14 @@ def setpreset(self, preset): match preset: case "base": - self.skills_name[0].set(PalInfo.PalPassives["CraftSpeed_up2"]) - self.skills_name[1].set(PalInfo.PalPassives["PAL_Sanity_Down_2"]) - self.skills_name[2].set(PalInfo.PalPassives["Rare"]) - self.skills_name[3].set(PalInfo.PalPassives["PAL_FullStomach_Down_2"]) + self.skills_name[0].set(PalInfo.PalPassives["CraftSpeed_up3"]) + self.skills_name[1].set(PalInfo.PalPassives["PAL_Sanity_Down_3"]) + self.skills_name[2].set(PalInfo.PalPassives["CraftSpeed_up2"]) + self.skills_name[3].set(PalInfo.PalPassives["PAL_FullStomach_Down_3"]) case "workspeed": - self.skills_name[0].set(PalInfo.PalPassives["CraftSpeed_up2"]) - self.skills_name[1].set(PalInfo.PalPassives["CraftSpeed_up1"]) - self.skills_name[2].set(PalInfo.PalPassives["Rare"]) + self.skills_name[0].set(PalInfo.PalPassives["CraftSpeed_up3"]) + self.skills_name[1].set(PalInfo.PalPassives["CraftSpeed_up2"]) + self.skills_name[2].set(PalInfo.PalPassives["CraftSpeed_up1"]) self.skills_name[3].set(PalInfo.PalPassives["PAL_CorporateSlave"]) case "movement": self.skills_name[0].set(PalInfo.PalPassives["MoveSpeed_up_3"]) @@ -350,24 +355,24 @@ def setpreset(self, preset): self.skills_name[2].set(PalInfo.PalPassives["MoveSpeed_up_2"]) self.skills_name[3].set(PalInfo.PalPassives["MoveSpeed_up_1"]) case "tank": - self.skills_name[0].set(PalInfo.PalPassives["Deffence_up2"]) + self.skills_name[0].set(PalInfo.PalPassives["Deffence_up3"]) self.skills_name[1].set(PalInfo.PalPassives["Legend"]) - self.skills_name[2].set(PalInfo.PalPassives["PAL_masochist"]) - self.skills_name[3].set(PalInfo.PalPassives["Deffence_up1"]) + self.skills_name[2].set(PalInfo.PalPassives["Deffence_up2"]) + self.skills_name[3].set(PalInfo.PalPassives["PAL_masochist"]) case "dmg_max": - self.skills_name[0].set(PalInfo.PalPassives["Noukin"]) + self.skills_name[0].set(PalInfo.PalPassives["PAL_ALLAttack_up3"]) self.skills_name[1].set(PalInfo.PalPassives["Legend"]) self.skills_name[2].set(PalInfo.PalPassives["PAL_ALLAttack_up2"]) - self.skills_name[3].set(PalInfo.PalPassives["Rare"]) + self.skills_name[3].set(PalInfo.PalPassives["Noukin"]) case "dmg_balanced": - self.skills_name[0].set(PalInfo.PalPassives["Noukin"]) + self.skills_name[0].set(PalInfo.PalPassives["PAL_ALLAttack_up3"]) self.skills_name[1].set(PalInfo.PalPassives["Legend"]) self.skills_name[2].set(PalInfo.PalPassives["PAL_ALLAttack_up2"]) self.skills_name[3].set(PalInfo.PalPassives["Deffence_up2"]) case "dmg_mount": - self.skills_name[0].set(PalInfo.PalPassives["Noukin"]) + self.skills_name[0].set(PalInfo.PalPassives["Stamina_Up_3"]) self.skills_name[1].set(PalInfo.PalPassives["Legend"]) - self.skills_name[2].set(PalInfo.PalPassives["PAL_ALLAttack_up2"]) + self.skills_name[2].set(PalInfo.PalPassives["PAL_ALLAttack_up3"]) self.skills_name[3].set(PalInfo.PalPassives["MoveSpeed_up_3"]) case "dmg_element": primary = pal.GetPrimary().lower() @@ -375,26 +380,26 @@ def setpreset(self, preset): if primary == "none": messagebox.showerror("Preset: Dmg: Element", "This pal has no elements! Preset skipped") return - self.skills_name[0].set(PalInfo.PalPassives["Noukin"]) + self.skills_name[0].set(PalInfo.PalPassives["PAL_ALLAttack_up3"]) self.skills_name[1].set(PalInfo.PalPassives["Legend"]) self.skills_name[2].set(PalInfo.PalPassives["PAL_ALLAttack_up2"]) match primary: - case "neutral": + case "normal": self.skills_name[3].set(PalInfo.PalPassives["ElementBoost_Normal_2_PAL"]) case "dark": - self.skills_name[3].set(PalInfo.PalPassives["ElementBoost_Dark_2_PAL"]) + self.skills_name[3].set(PalInfo.PalPassives["Witch"]) case "dragon": - self.skills_name[3].set(PalInfo.PalPassives["ElementBoost_Dragon_2_PAL"]) + self.skills_name[3].set(PalInfo.PalPassives["Invader"]) case "ice": - self.skills_name[3].set(PalInfo.PalPassives["ElementBoost_Ice_2_PAL"]) + self.skills_name[3].set(PalInfo.PalPassives["Witch"]) case "fire": - self.skills_name[3].set(PalInfo.PalPassives["ElementBoost_Fire_2_PAL"]) - case "grass": + self.skills_name[3].set(PalInfo.PalPassives["EternalFlame"]) + case "leaf": self.skills_name[3].set(PalInfo.PalPassives["ElementBoost_Leaf_2_PAL"]) - case "ground": + case "earth": self.skills_name[3].set(PalInfo.PalPassives["ElementBoost_Earth_2_PAL"]) - case "electric": - self.skills_name[3].set(PalInfo.PalPassives["ElementBoost_Thunder_2_PAL"]) + case "electricity": + self.skills_name[3].set(PalInfo.PalPassives["EternalFlame"]) case "water": self.skills_name[3].set(PalInfo.PalPassives["ElementBoost_Aqua_2_PAL"]) case _: @@ -642,8 +647,12 @@ def loadfile(self): data = f.read() raw_gvas, _ = decompress_sav_to_gvas(data) self.skilllabel.config(text=self.i18n['msg_loading']) - gvas_file = GvasFile.read(raw_gvas, PALWORLD_TYPE_HINTS, PALEDIT_PALWORLD_CUSTOM_PROPERTIES) - self.loaddata(gvas_file) + + try: + gvas_file = GvasFile.read(raw_gvas, PALWORLD_TYPE_HINTS, PALEDIT_PALWORLD_CUSTOM_PROPERTIES) + self.loaddata(gvas_file) + except Exception as e: + self.logerror(str(e)) # self.doconvertjson(file, (not self.debug)) else: messagebox.showerror(self.i18n['select_file'], self.i18n['msg_select_save_file']) @@ -693,6 +702,7 @@ def loadpal(self, paldata): self.containers = {} nullmoves = [] + self.unknown = [] erroredpals = [] for i in paldata: try: @@ -784,6 +794,8 @@ def jump(self): def updateDisplay(self): self.listdisplay.delete(0, tk.constants.END) currentguid = self.players[self.current.get()].GetPlayerGuid() + + self.playerguid.config(text=currentguid) print("Filter", self.FilteredPals()) pals = self.FilteredPals() @@ -798,6 +810,10 @@ def updateDisplay(self): self.refresh() + def logerror(self, msg): + logger.WriteLog(msg) + messagebox.showinfo("Error", "There was an error! Your save may have issues or the tool is unable to process it. Upload your log.txt file to the support channel in our discord and ask for help.") + def savefile(self): self.skilllabel.config(text=self.i18n['msg_saving_big']) self.gui.update() @@ -810,30 +826,32 @@ def savefile(self): # print(file, self.filename) if file: logger.info(f"Opening file {file}") - - if 'gvas_file' in self.data: - gvas_file = self.data['gvas_file'] - if ( - "Pal.PalWorldSaveGame" in gvas_file.header.save_game_class_name - or "Pal.PalLocalWorldSaveGame" in gvas_file.header.save_game_class_name - ): - save_type = 0x32 + try: + if 'gvas_file' in self.data: + gvas_file = self.data['gvas_file'] + if ( + "Pal.PalWorldSaveGame" in gvas_file.header.save_game_class_name + or "Pal.PalLocalWorldSaveGame" in gvas_file.header.save_game_class_name + ): + save_type = 0x32 + else: + save_type = 0x31 + sav_file = compress_gvas_to_sav( + gvas_file.write(PALEDIT_PALWORLD_CUSTOM_PROPERTIES), save_type + ) + self.skilllabel.config(text=self.i18n['msg_writing']) + with open(file, "wb") as f: + f.write(sav_file) + self.data = None + self.current.set("") + self.palbox = {} + self.players = {} + self.listdisplay.delete(0, tk.constants.END) else: - save_type = 0x31 - sav_file = compress_gvas_to_sav( - gvas_file.write(PALEDIT_PALWORLD_CUSTOM_PROPERTIES), save_type - ) - self.skilllabel.config(text=self.i18n['msg_writing']) - with open(file, "wb") as f: - f.write(sav_file) - self.data = None - self.current.set("") - self.palbox = {} - self.players = {} - self.listdisplay.delete(0, tk.constants.END) - else: - self.savejson(file) - self.doconvertsave(file) + self.savejson(file) + self.doconvertsave(file) + except Exception as e: + self.logerror(str(e)) self.changetext(-1) self.jump() @@ -1019,7 +1037,7 @@ def changespeciestype(self, evt): def setskillcolours(self): for snum in range(0, 4): rating = PalInfo.PassiveRating[self.skills[snum].get()] - col = PalEditConfig.skill_col[int(rating)+1] + col = PalEditConfig.skill_col[int(rating)+3] self.skilldrops[snum].config(highlightbackground=col, bg=PalEdit.mean_color(col, "ffffff"), activebackground=PalEdit.mean_color(col, "ffffff")) @@ -1101,7 +1119,8 @@ def clonepal(self): i = int(self.listdisplay.curselection()[0]) pal = self.FilteredPals()[i] - + owneruid = "00000000-0000-0000-0000-000000000000" + with open("temp.json", "wb") as f: f.write(json.dumps(pal._data, indent=4, cls=UUIDEncoder).encode('utf-8')) @@ -1109,7 +1128,7 @@ def clonepal(self): f = open("temp.json", "r", encoding="utf8") spawnpaldata = json.loads(f.read()) f.close() - + playerguid = self.players[self.current.get()].GetPlayerGuid() playersav = os.path.dirname(self.filename) + f"/Players/{str(playerguid).upper().replace('-', '')}.sav" if not os.path.exists(playersav): @@ -1130,7 +1149,11 @@ def clonepal(self): print("Player Pal Storage is full!") return print(playerguid) - pal.InitializationPal(newguid, playerguid, groupguid, slotguid) + + if pal.GetOwner() != owneruid: + owneruid = playerguid + + pal.InitializationPal(newguid, playerguid, groupguid, slotguid, owneruid) pal.SetSoltIndex(i) self.palguidmanager.AddGroupSaveData(groupguid, newguid) self.palguidmanager.SetContainerSave(slotguid, i, newguid) @@ -1139,6 +1162,37 @@ def clonepal(self): self.loaddata(self.data) os.remove("temp.json") + + def deletepal(self): + if not self.isPalSelected() or self.palguidmanager is None: + return + i = int(self.listdisplay.curselection()[0]) + pal = self.FilteredPals()[i] + + s = pal.GetSlotIndex() + + playerguid = self.players[self.current.get()].GetPlayerGuid() + playersav = os.path.dirname(self.filename) + f"/Players/{str(playerguid).upper().replace('-', '')}.sav" + if not os.path.exists(playersav): + print("Cannot Load Player Save!") + return + player = PalInfo.PalPlayerEntity(palworld_pal_edit.SaveConverter.convert_sav_to_obj(playersav)) + palworld_pal_edit.SaveConverter.convert_obj_to_sav(player.dump(), playersav + ".bak", True) + + slotguid = str(player.GetPalStorageGuid()) + palguid = pal.GetPalInstanceGuid() + + groupguid = self.palguidmanager.GetGroupGuid(playerguid) + if any(guid == None for guid in [slotguid, groupguid]): + return + + self.palguidmanager.RemovePal(slotguid, s, "0") + self.palguidmanager.RemoveGroupSaveData(groupguid, palguid) + self.data['properties']['worldSaveData']['value']['CharacterSaveParameterMap']['value'].remove(pal._data) + + self.loaddata(self.data) + + def doconvertjson(self, file, compress=False): SaveConverter.convert_sav_to_json(file, file.replace(".sav", ".sav.json"), True, compress) @@ -1215,8 +1269,9 @@ def stripMove(self): pal = self.FilteredPals()[i] m = self.learntMoves.curselection() + if len(m) > 0: - m = self.learntMoves.get(int(m[0])) + m = self.learntMoves.get(int(m[0])).replace("⚔","").replace("🏹","") pal.StripAttack(PalInfo.find(m)) self.refresh(i) @@ -1482,6 +1537,10 @@ def __init__(self): self.playerdrop.pack(side=tk.constants.RIGHT, fill=tk.constants.X) self.playerdrop.bind("<>", self.changeplayer) + self.playerguid = tk.Label(scrollview, text="-") + self.playerguid.config(font=(PalEditConfig.font, 7)) + self.playerguid.pack() + scrollbar = tk.Scrollbar(scrollview) scrollbar.pack(side=tk.constants.LEFT, fill=tk.constants.Y) self.listdisplay = tk.Listbox(scrollview, width=30, yscrollcommand=scrollbar.set, exportselection=0) @@ -1608,6 +1667,11 @@ def __init__(self): button.config(font=(PalEditConfig.font, 12)) button.pack(expand=True, fill=BOTH) self.i18n_el['btn_clone_pal'] = button + + button = Button(resourceview, text=self.i18n['btn_delete_pal'], command=self.deletepal) + button.config(font=(PalEditConfig.font, 12)) + button.pack(expand=True, fill=BOTH) + self.i18n_el['btn_delete_pal'] = button deckview = tk.Frame(dataview, width=320, relief="sunken", borderwidth=2, pady=0) @@ -1921,18 +1985,20 @@ def try_update(var, event=None): self.skilldrops[3].pack(side=tk.constants.RIGHT, expand=True, fill=tk.constants.BOTH) self.skilldrops[3].config(font=(PalEditConfig.font, PalEditConfig.ftsize), width=6, direction="right") - self.skilldrops[0].config(highlightbackground=PalEditConfig.skill_col[2], - bg=PalEdit.mean_color(PalEditConfig.skill_col[2], "ffffff"), - activebackground=PalEdit.mean_color(PalEditConfig.skill_col[2], "ffffff")) - self.skilldrops[1].config(highlightbackground=PalEditConfig.skill_col[2], - bg=PalEdit.mean_color(PalEditConfig.skill_col[2], "ffffff"), - activebackground=PalEdit.mean_color(PalEditConfig.skill_col[2], "ffffff")) - self.skilldrops[2].config(highlightbackground=PalEditConfig.skill_col[2], - bg=PalEdit.mean_color(PalEditConfig.skill_col[2], "ffffff"), - activebackground=PalEdit.mean_color(PalEditConfig.skill_col[2], "ffffff")) - self.skilldrops[3].config(highlightbackground=PalEditConfig.skill_col[2], - bg=PalEdit.mean_color(PalEditConfig.skill_col[2], "ffffff"), - activebackground=PalEdit.mean_color(PalEditConfig.skill_col[2], "ffffff")) + gr = 0 + self.skilldrops[0].config(highlightbackground=PalEditConfig.skill_col[gr], + bg=PalEdit.mean_color(PalEditConfig.skill_col[gr], "ffffff"), + activebackground=PalEdit.mean_color(PalEditConfig.skill_col[gr], "ffffff")) + self.skilldrops[1].config(highlightbackground=PalEditConfig.skill_col[gr], + bg=PalEdit.mean_color(PalEditConfig.skill_col[gr], "ffffff"), + activebackground=PalEdit.mean_color(PalEditConfig.skill_col[gr], "ffffff")) + self.skilldrops[2].config(highlightbackground=PalEditConfig.skill_col[gr], + bg=PalEdit.mean_color(PalEditConfig.skill_col[gr], "ffffff"), + activebackground=PalEdit.mean_color(PalEditConfig.skill_col[gr], "ffffff")) + self.skilldrops[3].config(highlightbackground=PalEditConfig.skill_col[gr], + bg=PalEdit.mean_color(PalEditConfig.skill_col[gr], "ffffff"), + activebackground=PalEdit.mean_color(PalEditConfig.skill_col[gr], "ffffff")) + self.setskillcolours() self.skilldrops[0].bind("", lambda evt, num=0: self.changetext(num)) self.skilldrops[1].bind("", lambda evt, num=1: self.changetext(num)) @@ -2209,6 +2275,16 @@ def try_update(var, event=None): #button.pack(side=LEFT, expand=True, fill=BOTH) self.i18n_el['btn_dump_pal'] = button + warning = tk.Frame(atkskill, relief="groove", borderwidth=2) + warning.pack(fill=tk.constants.BOTH) + + warnhdr = tk.Label(warning, width=10, text="WARNING!", bg="darkgrey", font=(PalEditConfig.font, PalEditConfig.ftsize+2)) + warnhdr.pack(fill=tk.constants.BOTH) + + warnstr = "Players who have not logged in for a while can break your save. If you cannot get them to join to upgrade their save data then remove them using Prune or remove their player data from the 'Players' folder while on the title screen then load the save." + + warnlabel = tk.Label(warning, wrap=300, width=10, text=warnstr, bg="darkgrey", font=(PalEditConfig.font, PalEditConfig.ftsize-6)) + warnlabel.pack(fill=tk.constants.BOTH) # root.resizable(width=False, height=True) diff --git a/palworld_pal_edit/PalInfo.py b/palworld_pal_edit/PalInfo.py index bc23e63..51ed0bc 100644 --- a/palworld_pal_edit/PalInfo.py +++ b/palworld_pal_edit/PalInfo.py @@ -19,6 +19,20 @@ except: from EmptyObjectHandler import * +suitnames = ["EmitFlame", + "Watering", + "Seeding", + "GenerateElectricity", + "Handcraft", + "Collection", + "Deforest", + "Mining", + "OilExtraction", + "ProductMedicine", + "Cool", + "Transport", + "MonsterFarm"] + xpthresholds = [ 0, 25, @@ -121,8 +135,8 @@ 2147483647, 2147483647 ] -if len(xpthresholds) < 55: - print("Something is wrong with the thresholds") +if len(xpthresholds) < 60: + raise Exception("Something is wrong with the thresholds") class PalGender(Enum): @@ -155,6 +169,7 @@ def IsTower(self): def GetImage(self): if self._img == None: n = self.GetCodeName() if not self._human else "CommonHuman" + n = "PlantSlime" if "PlantSlime" in self.GetCodeName() else n # self._img = ImageTk.PhotoImage(Image.open(module_dir+f'/resources/{n}.png').resize((240,240))) try: print(f"T_{n}_icon_normal.png") @@ -292,6 +307,19 @@ def __init__(self, data): self._obj["Hp"] = copy.deepcopy(EmptyHpObject) self.UpdateMaxHP() + if "GotWorkSuitabilityAddRankList" not in self._obj: + self._obj["GotWorkSuitabilityAddRankList"] = copy.deepcopy(EmptyGotWorkObject) + self.AddSuits = self._obj["GotWorkSuitabilityAddRankList"] + for i in suitnames: + if i not in self.AddSuits: + t = copy.deepcopy(EmptyWorkObject) + t["WorkSuitability"]["value"]["value"] = f"EPalWorkSuitability::{i}" + self.AddSuits["value"]["values"].append(t) + + + + + def IsHuman(self): return self._type._human @@ -656,6 +684,8 @@ def PurgeAttack(self, slot): def StripAttack(self, name): name = name.replace("⚔","").replace("🏹","") + print(name) + print(self._learntMoves) strip = False if not name in self._equipMoves: if not name in PalLearnSet[self.GetCodeName()]: @@ -705,8 +735,8 @@ def GetEquippedMoves(self): def GetLearntMoves(self): return self._learntMoves - def InitializationPal(self, newguid, player, group, slot): - self._data['key']['PlayerUId']['value'] = "00000000-0000-0000-0000-000000000000" + def InitializationPal(self, newguid, player, group, slot, owneruid): + self._data['key']['PlayerUId']['value'] = owneruid self._obj["OwnerPlayerUId"] = { "struct_type": "Guid", "struct_id": "00000000-0000-0000-0000-000000000000", @@ -743,6 +773,9 @@ def GetPalInstanceGuid(self): def SetPalInstanceGuid(self, v: str): self._data['key']['InstanceId']['value'] = v + def GetOwner(self): + return self._data['key']['PlayerUId']['value'] + class PalGuid: def __init__(self, data): @@ -798,6 +831,18 @@ def SetContainerSave(self, SoltGuid: str, SlotIndex: int, PalGuid: str): e['value']['Slots']['value']['values'][v+1]['RawData']['value']['instance_id'] = PalGuid print(e['value']['Slots']['value']['values'][v+1]) + def RemovePal(self, SoltGuid: str, SlotIndex: int, PalGuid: str): + if any(guid == "00000000-0000-0000-0000-000000000000" for guid in [SoltGuid, PalGuid]): + return + + for e in self._CharacterContainerSaveData: + if (e['key']['ID']['value'] == SoltGuid): + for p in e['value']['Slots']['value']['values']: + if p['SlotIndex']['value'] == SlotIndex: + e['value']['Slots']['value']['values'].remove(p) + break + + def AddGroupSaveData(self, GroupGuid: str, PalGuid: str): if any(guid == "00000000-0000-0000-0000-000000000000" for guid in [GroupGuid, PalGuid]): return @@ -809,6 +854,15 @@ def AddGroupSaveData(self, GroupGuid: str, PalGuid: str): tmp = {"guid": "00000000-0000-0000-0000-000000000001", "instance_id": PalGuid} e['value']['RawData']['value']['individual_character_handle_ids'].append(tmp) + def RemoveGroupSaveData(self, GroupGuid: str, PalGuid: str): + if any(guid == "00000000-0000-0000-0000-000000000000" for guid in [GroupGuid, PalGuid]): + return + for e in self._GroupSaveDataMap: + if (e['key'] == GroupGuid): + for ee in e['value']['RawData']['value']['individual_character_handle_ids']: + if (ee['instance_id'] == PalGuid): + e['value']['RawData']['value']['individual_character_handle_ids'].remove(ee) + def GetSoltMaxCount(self, SoltGuid: str): if SoltGuid == "00000000-0000-0000-0000-000000000000": return 0 @@ -1087,8 +1141,8 @@ def find(name): #Image.open(f'../assets/Bellanoir.png').resize((240, 240)).save(f"resources/pals/NightLady.png") #Image.open(f'../assets/Bellanoir Libero.png').resize((240, 240)).save(f"resources/pals/NightLady_Dark.png") - for i in PalSpecies: - print (i) + #for i in PalSpecies: + #print (i) pass diff --git a/palworld_pal_edit/resources/data/en-GB/pals.json b/palworld_pal_edit/resources/data/en-GB/pals.json index 35b150b..42d511f 100644 --- a/palworld_pal_edit/resources/data/en-GB/pals.json +++ b/palworld_pal_edit/resources/data/en-GB/pals.json @@ -226,8 +226,8 @@ "Believer_CrossBow": "Free Pal Alliance Devout", "Believer_Bat": "Free Pal Alliance Thug", - "Believer_Fat_GatlingGun": "Free Pal Alliance Crusher", - "Believer_Fat_Cane": "Free Pal Alliance Judicator", + "Believer_Fat_GatlingGun": "Free Pal Alliance Judicator (GatlingGun)", + "Believer_Fat_Cane": "Free Pal Alliance Judicator (Large Club)", "Believer_CrossBow_Invader": "Free Pal Alliance Devout 🛈", "Believer_Bat_Invader": "Free Pal Alliance Thug 🛈", @@ -258,7 +258,7 @@ "Hunter_Handgun_MiniOilrig": "Syndicate Thug 🞚🛢", "Hunter_Rifle_MiniOilrig": "Syndicate Gunner 🞚🛢", "Hunter_Shotgun_MiniOilrig": "Syndicate Hunter 🞚🛢", - "Hunter_Grenade_MiniOilrig": "Syndicate Grenadier M🛢", + "Hunter_Grenade_MiniOilrig": "Syndicate Grenadier 🞚🛢", "Hunter_FlameThrower_MiiniOilrig": "Syndicate Cleaner 🞚🛢", "Hunter_RocketLauncher_MiniOilrig": "Syndicate Elite 🞚🛢", "Hunter_Fat_GatlingGun_MiniOilrig": "Syndicate Crusher 🞚🛢", @@ -340,12 +340,12 @@ "Male_Trader01": "Shady Pal Merchant (Field Random)", "RandomEventShop": "Pal Merchant (Field Random)", "BountyTrader": "Vigilante Bounty Officer", - "Doctor": "Doctor", - "PalPassive_Doctor": "Pal Passive Doctor", - "Reward_Food": "Food Gifter", - "Reward_Paldex": "Paldex Tracker", - "Reward_BossDefeat": "Boss Kill Tracker", - "Reward_PalCaptureCount": "Pal Capture Counter", + "Doctor": "Doctor (Field Random)", + "PalPassive_Doctor": "Passive Doctor (Field Random)", + "Reward_Food": "Hungry Villager", + "Reward_Paldex": "Pal Species Researcher", + "Reward_BossDefeat": "Pal Hunter (Boss Kill Counter)", + "Reward_PalCaptureCount": "Timid Soldier (Capture Counter)", "Ambassador01": "Desert Town Ambassador ", "Blacksmith01": "Blacksmith in Training", "Epicure01": "Gourmet Hunter", @@ -357,11 +357,14 @@ "Yamishima_guide4": "Hopeless Supplier", "Yamishima_guide5": "Feybreak Deserter", "Female_Presenter01": "Friendly Pal Tamer", - "CaravanLeader01": "Caravan Leader (1)", - "CaravanLeader02": "Caravan Leader (2)", - "CaravanLeader03": "Caravan Leader (3)", - "QuestMan": "Quest Client", - "WeaponsDealer": "Weapons Dealer", + "CaravanLeader01": "Caravan Leader (Merchant)", + "CaravanLeader02": "Caravan Leader (Merchant)", + "CaravanLeader03": "Caravan Leader (Merchant)", + "QuestMan": "Quest Client (Inactive)", + "WeaponsDealer": "Weapons Dealer (Inactive)", + "Visitor_Recruiter": "Visiting Recruiter (Merchant)", + "NPC_PalDisplay_1": "Arrogant Pal Critic (Inactive)", + "NPC_FoodRequire_1": "Islander (Inactive)", "Reward_PalDisplay_A_01": "Arrogant Pal Critic", "Reward_PalDisplay_B_01": "Arrogant Pal Critic", "Reward_PalDisplay_C_01": "Arrogant Pal Critic", @@ -380,6 +383,7 @@ "Reward_Emote_G_01": "Messenger of Love", "Reward_Emote_H_01": "Messenger of Love", "Reward_Emote_I_01": "Messenger of Love", + "Emote_Tester": "Islander - Emote Test (Inactive)", "Emote_location_A_01": "Messanger of Love", "Emote_location_A_02": "Messanger of Love", "Emote_location_B_01": "Messanger of Love", @@ -413,39 +417,39 @@ "SUMMON_WhiteAlienDragon": "Xenogard 🧿", "SUMMON_WhiteAlienDragon_MAX": "Xenogard 🧿", - "PREDATOR_AmaterasuWolf": "Kitsun 👾", - "PREDATOR_BirdDragon": "Vanwyrm 👾", - "PREDATOR_DrillGame": "Digtoise 👾", - "PREDATOR_FairyDragon": "Elphidran 👾", - "PREDATOR_FeatherOstrich": "Dazemu 👾", - "PREDATOR_FlowerDinosaur": "Dinossom 👾", - "PREDATOR_Garm": "Direhowl 👾", - "PREDATOR_GhostBeast": "Maraith 👾", - "PREDATOR_GoldenHorse": "Gildane 👾", - "PREDATOR_Gorilla": "Gorirat 👾", - "PREDATOR_GrassPanda": "Mossanda 👾", - "PREDATOR_GrimGirl": "Splatterina 👾", - "PREDATOR_Horus_Water": "Faleris Aqua 👾", - "PREDATOR_LazyDragon": "Relaxaurus 👾", - "PREDATOR_Manticore_Dark": "Blazehowl Noct 👾", - "PREDATOR_MushroomDragon": "Shroomer 👾", - "PREDATOR_MysteryMask": "Omascul 👾", - "PREDATOR_NightBlueHorse": "Starryon 👾", - "PREDATOR_PinkLizard": "Lovander 👾", - "PREDATOR_PurpleSpider": "Tarantriss 👾", - "PREDATOR_RedArmorBird": "Ragnahawk 👾", - "PREDATOR_ScorpionMan": "Prixter 👾", - "PREDATOR_SifuDog": "Dogen 👾", - "PREDATOR_ThunderDog": "Rayhound 👾", - "PREDATOR_Umihebi_Fire": "Jormuntide Ignis 👾", - "PREDATOR_VolcanicMonster_Ice": "Reptyro Cryst 👾", - "PREDATOR_Werewolf_Ice": "Loupmoon Cryst 👾", - "PREDATOR_WhiteTiger_Ground": "Cryolinx Terra 👾", - "PREDATOR_Yeti": "Wumpo 👾", - "PREDATOR_HadesBird_Electric": "Helzephyr Lux 👾", - "PREDATOR_Ronin_Dark": "Bushi Noct 👾", - "PREDATOR_CandleGhost": "Sootseer 👾", - "PREDATOR_Baphomet_Dark": "Incineram Noct 👾", + "PREDATOR_AmaterasuWolf": "Rampaging Kitsun", + "PREDATOR_BirdDragon": "Rampaging Vanwyrm", + "PREDATOR_DrillGame": "Rampaging Digtoise", + "PREDATOR_FairyDragon": "Rampaging Elphidran", + "PREDATOR_FeatherOstrich": "Rampaging Dazemu", + "PREDATOR_FlowerDinosaur": "Rampaging Dinossom", + "PREDATOR_Garm": "Rampaging Direhowl", + "PREDATOR_GhostBeast": "Rampaging Maraith", + "PREDATOR_GoldenHorse": "Rampaging Gildane", + "PREDATOR_Gorilla": "Rampaging Gorirat", + "PREDATOR_GrassPanda": "Rampaging Mossanda", + "PREDATOR_GrimGirl": "Rampaging Splatterina", + "PREDATOR_Horus_Water": "Rampaging Faleris Aqua", + "PREDATOR_LazyDragon": "Rampaging Relaxaurus", + "PREDATOR_Manticore_Dark": "Rampaging Blazehowl Noct", + "PREDATOR_MushroomDragon": "Rampaging Shroomer", + "PREDATOR_MysteryMask": "Rampaging Omascul", + "PREDATOR_NightBlueHorse": "Rampaging Starryon", + "PREDATOR_PinkLizard": "Rampaging Lovander", + "PREDATOR_PurpleSpider": "Rampaging Tarantriss", + "PREDATOR_RedArmorBird": "Rampaging Ragnahawk", + "PREDATOR_ScorpionMan": "Rampaging Prixter", + "PREDATOR_SifuDog": "Rampaging Dogen", + "PREDATOR_ThunderDog": "Rampaging Rayhound", + "PREDATOR_Umihebi_Fire": "Rampaging Jormuntide Ignis", + "PREDATOR_VolcanicMonster_Ice": "Rampaging Reptyro Cryst", + "PREDATOR_Werewolf_Ice": "Rampaging Loupmoon Cryst", + "PREDATOR_WhiteTiger_Ground": "Rampaging Cryolinx Terra", + "PREDATOR_Yeti": "Rampaging Wumpo", + "PREDATOR_HadesBird_Electric": "Rampaging Helzephyr Lux", + "PREDATOR_Ronin_Dark": "Rampaging Bushi Noct", + "PREDATOR_CandleGhost": "Rampaging Sootseer", + "PREDATOR_Baphomet_Dark": "Rampaging Incineram Noct", "Hunter_Fat_GatlingGun_Tower": "Syndicate Crusher ♙", "Believer_CrossBow_Tower": "Free Pal Alliance Devout ♙", diff --git a/palworld_pal_edit/resources/data/en-GB/ui.json b/palworld_pal_edit/resources/data/en-GB/ui.json index b64effe..5ab780d 100644 --- a/palworld_pal_edit/resources/data/en-GB/ui.json +++ b/palworld_pal_edit/resources/data/en-GB/ui.json @@ -37,6 +37,7 @@ "btn_add_pal": "Add Pal", "btn_dump_pal": "Dump Pal", "btn_clone_pal": "Clone Pal", + "btn_delete_pal": "Delete Pal", "preset_lbl": "Presets:", "preset_title1": "Utility:", "preset_base": "Base", diff --git a/palworld_pal_edit/resources/data/it-IT/Localization Changes Made.txt b/palworld_pal_edit/resources/data/it-IT/Localization Changes Made.txt new file mode 100644 index 0000000..b021801 --- /dev/null +++ b/palworld_pal_edit/resources/data/it-IT/Localization Changes Made.txt @@ -0,0 +1,45 @@ +Changes made + +File: passives.json + +- Conceited description changed from defense -20% to defense -10% (probably a typo) + +- Sadist description changed from defense +15% to defense -15% (probably a typo) + +- Mentally unstable translated as "Instabile" (literally unstable) as in game it shows "it_Text" (The unstable passive has a different name in italian, Irrequietezza, literally restlessness) + + +File: ui.json + +- Since I don't know what these do: +Preset changes attributes +Preset changes rank +Preset changes level +I've translated them as "I preset cambiano attributi/rango/livello" which is literally "The preset modifies the attributes/rank/level". I don't know if that is right + + +File: pals.json + +- Weaponsdealer and Questman are just "it_Text" in the localized datatables, so I've translated them. The translation are quite literal but I don't know if they'll change in future updates. + +- Male_Trader01 shady pal merchant in italian is localized as Villager (Abitante del villaggio) for some reason, I don't know if it's right (found him once but don't remember it's in game name). + +- Doctor is also localized as Villager, I don't know whether that's right or not. + +File: attack.json + +- I haven't found Seigetsu blade II in the game files, so I translated it like Seigetsu Blade with II after (like the two Divine Disasters). + +- The following moves have been translated by me since it's just "it_Text in he game files": +Intimidate +Triple cannon +Tidal wave +Throw +Scratch +Work attack +Snow storm +Dark tornado +Water balloon +Grasstyphoon +Seed shotgun +The translations are literal. diff --git a/palworld_pal_edit/resources/data/it-IT/attacks.json b/palworld_pal_edit/resources/data/it-IT/attacks.json new file mode 100644 index 0000000..1c65b19 --- /dev/null +++ b/palworld_pal_edit/resources/data/it-IT/attacks.json @@ -0,0 +1,223 @@ +{ + "": "", + "EPalWazaID::AcidRain": "Pioggia acida", + "EPalWazaID::AirCanon": "Cannone d'aria", + "EPalWazaID::Unique_Deer_PushupHorn": "Incornata", + "EPalWazaID::WaterBall": "Sfera d'acqua", + "EPalWazaID::WaterGun": "Colpo d'acqua", + "EPalWazaID::Unique_JetDragon_JumpBeam": "Cometa raggiante", + "EPalWazaID::SelfDestruct_Bee": "Ape dinamitarda", + "EPalWazaID::Unique_GrassPanda_Electric_ElectricPunch": "Pugno esplosivo", + "EPalWazaID::Unique_FlameBuffalo_FlameHorn": "Corna ardenti", + "EPalWazaID::IcicleThrow": "Lancia glaciale", + "EPalWazaID::Unique_FlowerDinosaur_Whip": "Schianto botanico", + "EPalWazaID::BubbleShot": "Raffica di bolle", + "EPalWazaID::Unique_NaughtyCat_CatPress": "Schianto felino", + "EPalWazaID::Unique_ChickenPal_ChickenPeck": "Schianto gallinaceo", + "EPalWazaID::Unique_FengyunDeeper_CloudTempest": "Nube tempestosa", + "EPalWazaID::CrossThunder": "Fulmini incrociati", + "EPalWazaID::Unique_GrassPanda_MusclePunch": "Pugni forzuti", + "EPalWazaID::FrostBreath": "Respiro gelido", + "EPalWazaID::Unique_IceHorse_IceBladeAttack": "Ali di cristallo", + "EPalWazaID::Unique_AmaterasuWolf_FireCharge": "Carica del generale invincibile", + "EPalWazaID::DarkBall": "Sfera oscura", + "EPalWazaID::Unique_FireKirin_Dark_DarkTossin": "Carica oscura", + "EPalWazaID::DarkLaser": "Raggio oscuro", + "EPalWazaID::DarkLegion": "Globi d'oscurità", + "EPalWazaID::Unique_BlackGriffon_TackleLaser": "Disastro divino", + "EPalWazaID::DragonBreath": "Soffio del drago", + "EPalWazaID::DragonWave": "Impulso draconico", + "EPalWazaID::DragonCanon": "Cannone draconico", + "EPalWazaID::DragonMeteor": "Meteore draconiche", + "EPalWazaID::Unique_Grassmammoth_Earthquake": "Schianto terrestre", + "EPalWazaID::ThunderBall": "Sfera tonante", + "EPalWazaID::Unique_CaptainPenguin_BodySlide": "Scivolata del capitano", + "EPalWazaID::Unique_Garm_Bite": "Zanne selvagge", + "EPalWazaID::FireBall": "Sfera di fuoco", + "EPalWazaID::FlareArrow": "Freccia di fuoco", + "EPalWazaID::FlareTornado": "Tornado di fiamme", + "EPalWazaID::Unique_Alpaca_Tackle": "Schianto soffice", + "EPalWazaID::Unique_RobinHood_BowSnipe": "Colpo di precisione", + "EPalWazaID::Unique_Anubis_Tackle": "Carica energetica", + "EPalWazaID::Unique_IceDeer_IceHorn": "Corno glaciale", + "EPalWazaID::Unique_VolcanicMonster_Ice_IceAttack": "Impulso glaciale", + "EPalWazaID::Unique_Eagle_GlidingNail": "Artigli in picchiata", + "EPalWazaID::Unique_HerculesBeetle_BeetleTackle": "Corno titanico", + "EPalWazaID::GrassTornado": "Tornado floreale", + "EPalWazaID::Unique_Gorilla_GroundPunch": "Furia del gorilla", + "EPalWazaID::Unique_Anubis_GroundPunch": "Frattura terrestre", + "EPalWazaID::Unique_Baphomet_SwallowKite": "Artigli infernali", + "EPalWazaID::AquaJet": "Getto d'acqua", + "EPalWazaID::HydroPump": "Flusso d'acqua", + "EPalWazaID::Unique_Ronin_Iai": "Estrazione fulminante", + "EPalWazaID::IceMissile": "Missile di ghiaccio", + "EPalWazaID::BlizzardLance": "Iceberg", + "EPalWazaID::IceBlade": "Falce di ghiaccio", + "EPalWazaID::FireBlast": "Colpo di fuoco", + "EPalWazaID::Flamethrower": "Soffio di fuoco", + "EPalWazaID::Inferno": "Inferno", + "EPalWazaID::Unique_FireKirin_Tackle": "Carica di fuoco", + "EPalWazaID::SelfDestruct": "Autodistruzione", + "EPalWazaID::Intimidate": "Intimidazione", + "EPalWazaID::Unique_Werewolf_Scratch": "Artigli volanti", + "EPalWazaID::Unique_ThunderDragonMan_ThunderSwordAttack": "Keraunos", + "EPalWazaID::Unique_KingAlpaca_BodyPress": "Schiacciamento reale", + "EPalWazaID::Thunderbolt": "Folgore", + "EPalWazaID::Unique_ElecPanda_ElecScratch": "Artigli elettrici", + "EPalWazaID::ThunderRain": "Pioggia di fulmini", + "EPalWazaID::LineThunder": "Fulmine tonante", + "EPalWazaID::LightningStrike": "Assalto folgorante", + "EPalWazaID::Unique_Kirin_LightningTackle": "Veloce come un lampo", + "EPalWazaID::LockonLaser": "Precisione laser", + "EPalWazaID::SelfExplosion": "Autodistruzione devastante", + "EPalWazaID::SpecialCutter": "Squarciamento", + "EPalWazaID::Unique_SakuraSaurus_SideTackle": "Schianto brutale", + "EPalWazaID::Unique_FairyDragon_FairyTornado": "Uragano mistico", + "EPalWazaID::ShadowBall": "Sfera d'incubo", + "None": "Nessuno", + "EPalWazaID::HyperBeam": "Raggio Pal", + "EPalWazaID::Unique_DarkCrow_TelePoke": "Assalto fantasma", + "EPalWazaID::Unique_Horus_FlareBird": "Volo della fenice", + "EPalWazaID::ThunderFunnel": "Droni plasmatici", + "EPalWazaID::PoisonShot": "Getto di veleno", + "EPalWazaID::PoisonFog": "Nebbia velenosa", + "EPalWazaID::PowerBall": "Bomba potente", + "EPalWazaID::PowerShot": "Colpo potente", + "EPalWazaID::Psychokinesis": "Gravità psichica", + "EPalWazaID::Human_Punch": "Pugno", + "EPalWazaID::Unique_PinkCat_CatPunch": "Pugni rotanti", + "EPalWazaID::Unique_Boar_Tackle": "Carica a testa bassa", + "EPalWazaID::RockLance": "Punte rocciose", + "EPalWazaID::Unique_WeaselDragon_FlyingTackle": "Schianto a razzo", + "EPalWazaID::Unique_SheepBall_Roll": "Rotolamento della pecora", + "EPalWazaID::MudShot": "Getto di melma", + "EPalWazaID::SandTornado": "Vortice di sabbia", + "EPalWazaID::SeedMachinegun": "Raffica di semi", + "EPalWazaID::SeedMine": "Semi esplosivi", + "EPalWazaID::DarkWave": "Impulso oscuro", + "EPalWazaID::Unique_DrillGame_ShellAttack": "Guscio con spuntoni", + "EPalWazaID::ElecWave": "Impulso elettrico", + "EPalWazaID::SolarBeam": "Raggio solare", + "EPalWazaID::SpreadPulse": "Onda pulsante", + "EPalWazaID::Unique_SaintCentaur_OneSpearRushes": "Lampo di lancia letale", + "EPalWazaID::RootAttack": "Frusta radice", + "EPalWazaID::Unique_QueenBee_SpinLance": "Bastone rotante", + "EPalWazaID::Unique_Anubis_LowRoundKick": "Calcio basso rotante", + "EPalWazaID::FireSeed": "Scintille di fuoco", + "EPalWazaID::GhostFlame": "Fiamma ultraterrena", + "EPalWazaID::StoneShotgun": "Raffica di rocce", + "EPalWazaID::ThrowRock": "Proiettile di roccia", + "EPalWazaID::Unique_BluePlatypus_Toboggan": "Schianto in surf", + "EPalWazaID::Unique_HawkBird_Storm": "Tornado vorticante", + "EPalWazaID::ThreeThunder": "Triplo fulmine", + "EPalWazaID::Unique_BlackCentaur_TwoSpearRushes": "Lampo di lance gemelle", + "EPalWazaID::Unique_VolcanicMonster_MagmaAttack": "Assalto vulcanico", + "EPalWazaID::WindCutter": "Falce d'aria", + "EPalWazaID::WaterWave": "it Text(WaterWave Inutilizzato)", + "EPalWazaID::Unique_NightLady_FlameNightmare": "Valzer di fuoco", + "EPalWazaID::Unique_NightLady_WarpBeam": "Fioritura d'incubo", + "EPalWazaID::Unique_NightLady_WarpBeam_Straight": "Raggio d'incubo", + "EPalWazaID::DarkCanon": "Cannone oscuro", + "EPalWazaID::DarkPulse": "Onda d'oscurità", + "EPalWazaID::DarkArrow": "Freccia oscura", + "EPalWazaID::Apocalypse": "Apocalisse", + "EPalWazaID::IcicleLine": "Getto di ghiaccio", + "EPalWazaID::FlareTwister": "Turbine fiammeggiante", + "EPalWazaID::WindEdge": "Lama di vento", + "EPalWazaID::RaidCutter": "Falce improvvisa", + "EPalWazaID::IceAge": "Gelo assoluto", + "EPalWazaID::DoubleIcicleThrow": "Doppia lancia glaciale", + "EPalWazaID::IciclePierce": "Proiettile di ghiaccio", + "EPalWazaID::ChaosLaser": "Laser caotico", + "EPalWazaID::BubbleShower": "Bolle velenose", + "EPalWazaID::ShokeiLaser": "Laser letale", + "EPalWazaID::Railbolt": "Cannone elettrico", + "EPalWazaID::RangeThunder": "Fulmine omnidirezionale", + "EPalWazaID::SandTwister": "Turbine di sabbia", + "EPalWazaID::FlameFunnel": "Imbuto di fuoco", + "EPalWazaID::ThunderStorm": "Tempesta fulminante", + "EPalWazaID::TriSpark": "Tripla scintilla", + "EPalWazaID::WallSplash": "Muro idrico", + "EPalWazaID::AirBlade": "Lama d'aria", + "EPalWazaID::FlameWall": "Muro di fuoco", + "EPalWazaID::HolyBlast": "Esplosione sacra", + "EPalWazaID::Eruption": "Pioggia vulcanica", + "EPalWazaID::CommetRain": "Pioggia meteoritica", + "EPalWazaID::ThreeCommet": "Caduta comete", + "EPalWazaID::BlastCanon": "Cannone esplosivo", + "EPalWazaID::ChargeCanon": "Cannone a carica", + "EPalWazaID::LineGeyser": "Getto idrico", + "EPalWazaID::RootLance": "Radice circolare", + "EPalWazaID::StarMine": "Mina stellare", + "EPalWazaID::DiamondFall": "Caduta diamantina", + "EPalWazaID::BeamSlicer": "Raggio tranciante", + "EPalWazaID::Tremor": "Impulso roccioso", + "EPalWazaID::Commet": "Cometa", + "EPalWazaID::Unique_DarkScorpion_Pierce": "Schianto ascendente", + "EPalWazaID::Unique_FeatherOstrich_Tossin": "Scatto terrestre", + "EPalWazaID::Unique_SifuDog_Counter": "Posizione inespugnabile", + "EPalWazaID::Unique_WingGolem_RoundCutter": "Falce terrestre", + "EPalWazaID::Unique_MoonQueen_MoonBlade": "Lama della luna blu", + "EPalWazaID::Unique_MoonQueen_MoonBeam": "Raggio lunare", + "EPalWazaID::Unique_DarkAlien_JumpScractch": "Artiglio malevolo", + "EPalWazaID::Unique_KingBahamut_ArmSmash": "Braccio potente", + "EPalWazaID::Unique_KingBahamut_AirCrash": "Schianto titanico", + "EPalWazaID::Unique_ThunderBird_ThunderStorm": "Tuffo folgorante", + "EPalWazaID::Unique_Manticore_InfernoStrike": "Zanne vulcaniche", + "EPalWazaID::Unique_BlackGriffon_TackleLaser2": "Disastro divino II", + "EPalWazaID::Unique_Horus_PerfectStorm": "Ascesa ardente", + "EPalWazaID::Unique_MoonQueen_IceMoonBlade": "Lama della luna blu II", + "EPalWazaID::Unique_ElecPanda_GatlingAttack": "Carro pesante fulminante", + "EPalWazaID::Unique_ThunderDragonMan_NumerousSwordAttack": "Polyceraunos", + "EPalWazaID::Unique_LilyQueen_WindBarrier": "Barriera di vento", + "EPalWazaID::TripleCannon": "Triplo cannone", + "EPalWazaID::TidalWave": "Onda di marea", + "EPalWazaID::Throw": "Lancio", + "EPalWazaID::Scratch": "Graffio", + "EPalWazaID::WorkAttack": "Attacco di lavoro", + "EPalWazaID::SnowStorm": "Tempesta di neve", + "EPalWazaID::EnergyShot": "Missile di ghiaccio", + "EPalWazaID::DarkTornado": "Tornado oscuro", + "EPalWazaID::Unique_LilyQueen_LilyHealing": "Benedizione del raccolto", + "EPalWazaID::Unique_ScorpionMan_Uppercut": "Schianto ascendente", + "EPalWazaID::WaterBalloon": "Pallone d'acqua", + "EPalWazaID::GrassTyphoon": "Tifone d'erba", + "EPalWazaID::PredatorBeam": "Raggio del predatore", + "EPalWazaID::PredatorLockon": "Mira del predatore", + "EPalWazaID::PredatorWave": "Onda del predatore", + "EPalWazaID::RockBeat": "Roccia contundente", + "EPalWazaID::SeedShotgun": "Fucile di semi", + "EPalWazaID::Unique_AmaterasuWolf_Dark_DarkCharge": "Fulmine sotto il monte", + "EPalWazaID::Unique_BirdDragon_FireBreath": "Soffio in volo", + "EPalWazaID::Unique_BirdDragon_Ice_IceBreath": "Tempesta volante", + "EPalWazaID::Unique_BlackMetalDragon_FirePunch": "Pugno e soffio", + "EPalWazaID::Unique_BlueThunderHorse_FlashDash": "Scatto fulmineo", + "EPalWazaID::Unique_DarkMechaDragon_BeamSlash": "Raggio tranciante", + "EPalWazaID::Unique_DarkMechaDragon_ConvergentBeam": "Raggio astrale", + "EPalWazaID::Unique_DarkMechaDragon_FunnelLaser": "Raggio omega", + "EPalWazaID::Unique_DarkMechaDragon_SetFunnel": "Assalto satellitare", + "EPalWazaID::Unique_DarkMechaDragon_WarpComet": "Cosmometeora", + "EPalWazaID::Unique_FengyunDeeper_Electric_ThunderTempest": "Tempesta di fulmini", + "EPalWazaID::Unique_GhostBeast_Tossin": "Scatto ultraterreno", + "EPalWazaID::Unique_GoldenHorse_StoneDash": "Scatto e impatto", + "EPalWazaID::Unique_GrassRabbitMan_GrassRoundKick": "Calcio rotante in carica", + "EPalWazaID::Unique_GrimGirl_BrutalMachete": "Machete dell'odio", + "EPalWazaID::Unique_MysteryMask_LifeSteal": "Risucchio d'anima", + "EPalWazaID::Unique_NightBlueHorse_DeathStep": "Cavalcata letale", + "EPalWazaID::Unique_PurpleSpider_SpiderRaid": "Aracnoraid", + "EPalWazaID::Unique_RedArmorBird_TriplePeck": "Becco rotante", + "EPalWazaID::Unique_SnowTigerBeastman_SnowImpact": "Abissi di ghiaccio", + "EPalWazaID::Unique_SnowTigerBeastman_TrampleSlash": "Graffi di ghiaccio", + "EPalWazaID::Unique_SoldierBee_NeedleLance": "Pungiglione d'assalto", + "EPalWazaID::Unique_ThunderDog_InazumaShorai": "Richiamo del fulmine", + "EPalWazaID::Unique_Umihebi_Fire_FireWindingTackle": "Serpente di magma", + "EPalWazaID::Unique_Umihebi_WindingTackle": "Serpe oceanica", + "EPalWazaID::Unique_Werewolf_Ice_SnowScratch": "Artigli di ghiaccio", + "EPalWazaID::Unique_WhiteDeer_HolyPillar": "Supernova sacra", + "EPalWazaID::Unique_WhiteShieldDragon_ShieldTackle": "Carica dell'egida", + "EPalWazaID::Unique_WhiteTiger_Ground_IronScratch": "Artigli di pietra", + "EPalWazaID::Unique_WhiteTiger_IceScratch": "Artigli glaciali", + "EPalWazaID::Unique_Horus_Water_AquaStorm": "Tuffo della fenice", + "EPalWazaID::Unique_Yeti_SnowBall": "Palla di neve", + "EPalWazaID::Unique_Yeti_Grass_GrassBall": "Erba rotolante" +} diff --git a/palworld_pal_edit/resources/data/it-IT/pals.json b/palworld_pal_edit/resources/data/it-IT/pals.json new file mode 100644 index 0000000..c55f310 --- /dev/null +++ b/palworld_pal_edit/resources/data/it-IT/pals.json @@ -0,0 +1,484 @@ +{ + "Alpaca": "Melpaca", + "AmaterasuWolf": "Kitsun", + "Anubis": "Anubis", + "Baphomet": "Incineram", + "Baphomet_Dark": "Incineram Noct", + "Bastet": "Mau", + "Bastet_Ice": "Mau Cryst", + "BerryGoat": "Caprity", + "BirdDragon": "Vanwyrm", + "BirdDragon_Ice": "Vanwyrm Cryst", + "BlackCentaur": "Necromus", + "BlackGriffon": "Shadowbeak", + "BlackMetalDragon": "Astegon", + "BlueDragon": "Azurobe", + "BluePlatypus": "Fuack", + "Boar": "Rushoar", + "CaptainPenguin": "Penking", + "Carbunclo": "Lifmunk", + "CatBat": "Tombat", + "CatMage": "Katress", + "CatVampire": "Felbat", + "ChickenPal": "Chikipi", + "ColorfulBird": "Tocotoco", + "CowPal": "Mozzarina", + "CuteButterfly": "Cinnamoth", + "CuteFox": "Vixy", + "CuteMole": "Fuddler", + "DarkCrow": "Cawgnito", + "DarkScorpion": "Menasting", + "Deer": "Eikthyrdeer", + "Deer_Ground": "Eikthyrdeer Terra", + "DreamDemon": "Daedream", + "DrillGame": "Digtoise", + "Eagle": "Galeclaw", + "ElecCat": "Sparkit", + "ElecPanda": "Grizzbolt", + "FairyDragon": "Elphidran", + "FairyDragon_Water": "Elphidran Aqua", + "FengyunDeeper": "Fenglope", + "FireKirin": "Pyrin", + "FireKirin_Dark": "Pyrin Noct", + "FlameBambi": "Rooby", + "FlameBuffalo": "Arsox", + "FlowerDinosaur": "Dinossom", + "FlowerDinosaur_Electric": "Dinossom Lux", + "FlowerDoll": "Petallia", + "FlowerRabbit": "Flopie", + "FlyingManta": "Celaray", + "FoxMage": "Wixen", + "Ganesha": "Teafant", + "Garm": "Direhowl", + "GhostBeast": "Maraith", + "Gorilla": "Gorirat", + "GrassMammoth": "Mammorest", + "GrassMammoth_Ice": "Mammorest Cryst", + "GrassPanda": "Mossanda", + "GrassPanda_Electric": "Mossanda Lux", + "GrassRabbitMan": "Verdash", + "HadesBird": "Helzephyr", + "HawkBird": "Nitewing", + "Hedgehog": "Jolthog", + "Hedgehog_Ice": "Jolthog Cryst", + "HerculesBeetle": "Warsect", + "Horus": "Faleris", + "IceDeer": "Reindrix", + "IceFox": "Foxcicle", + "IceHorse": "Frostallion", + "IceHorse_Dark": "Frostallion Noct", + "JetDragon": "Jetragon", + "Kelpie": "Kelpsea", + "Kelpie_Fire": "Kelpsea Ignis", + "KingAlpaca": "Kingpaca", + "KingAlpaca_Ice": "Kingpaca Cryst", + "KingBahamut": "Blazamut", + "Kirin": "Univolt", + "Kitsunebi": "Foxparks", + "LavaGirl": "Flambelle", + "LazyCatfish": "Dumud", + "LazyDragon": "Relaxaurus", + "LazyDragon_Electric": "Relaxaurus Lux", + "LilyQueen": "Lyleen", + "LilyQueen_Dark": "Lyleen Noct", + "LittleBriarRose": "Bristla", + "LizardMan": "Leezpunk", + "LizardMan_Fire": "Leezpunk Ignis", + "Manticore": "Blazehowl", + "Manticore_Dark": "Blazehowl Noct", + "Monkey": "Tanzee", + "MopBaby": "Swee", + "MopKing": "Sweepa", + "Mutant": "Lunaris", + "NaughtyCat": "Grintale", + "NegativeKoala": "Depresso", + "NegativeOctopus": "Killamari", + "NightFox": "Nox", + "Penguin": "Pengullet", + "PinkCat": "Cattiva", + "PinkLizard": "Lovander", + "PinkRabbit": "Ribbuny", + "PlantSlime": "Gumoss", + "PlantSlime_Flower": "Gumoss 🌹", + "QueenBee": "Elizabee", + "RaijinDaughter": "Dazzi", + "RedArmorBird": "Ragnahawk", + "RobinHood": "Robinquill", + "RobinHood_Ground": "Robinquill Terra", + "Ronin": "Bushi", + "SaintCentaur": "Paladius", + "SakuraSaurus": "Broncherry", + "SakuraSaurus_Water": "Broncherry Aqua", + "Serpent": "Surfent", + "Serpent_Ground": "Surfent Terra", + "SharkKid": "Gobfin", + "SharkKid_Fire": "Gobfin Ignis", + "SheepBall": "Lamball", + "SkyDragon": "Quivern", + "SoldierBee": "Beegarde", + "Suzaku": "Suzaku", + "Suzaku_Water": "Suzaku Aqua", + "SweetsSheep": "Woolipop", + "ThunderBird": "Beakon", + "ThunderDog": "Rayhound", + "ThunderDragonMan": "Orserk", + "Umihebi": "Jormuntide", + "Umihebi_Fire": "Jormuntide Ignis", + "VioletFairy": "Vaelet", + "VolcanicMonster": "Reptyro", + "VolcanicMonster_Ice": "Reptyro Cryst", + "WeaselDragon": "Chillet", + "Werewolf": "Loupmoon", + "WhiteMoth": "Sibelyx", + "WhiteTiger": "Cryolinx", + "WindChimes": "Hangyu", + "WindChimes_Ice": "Hangyu Cryst", + "WizardOwl": "Hoocrates", + "WoolFox": "Cremis", + "Yeti": "Wumpo", + "Yeti_Grass": "Wumpo Botan", + "BlackFurDragon": "Dragostrophe", + "ElecLion": "Boltmane", + "DarkMutant": "Dark Mutant", + "NightLady": "Bellanoir", + "NightLady_Dark": "Bellanoir Libero", + "Gorilla_Ground": "Gorirat Terra", + "WeaselDragon_Fire": "Chillet Ignis", + "Ronin_Dark": "Bushi Noct", + "CatMage_Fire": "Katress Ignis", + "FoxMage_Dark": "Wixen Noct", + "HerculesBeetle_Ground": "Warsect Terra", + "SkyDragon_Grass": "Quivern Botan", + "KingBahamut_Dragon": "Blazamut Ryu", + "HadesBird_Electric": "Helzephyr Lux", + "DarkScorpion_Ground": "Menasting Terra", + "MoonQueen": "Selyne", + "KendoFrog": "Croajiro", + "LeafPrincess": "Lullu", + "MushroomDragon": "Shroomer", + "MushroomDragon_Dark": "Shroomer Noct", + "SmallArmadillo": "Kikit", + "CandleGhost": "Sootseer", + "ScorpionMan": "Prixter", + "WingGolem": "Knocklem", + "GuardianDog": "Yakumo", + "SifuDog": "Dogen", + "FeatherOstrich": "Dazemu", + "MimicDog": "Mimog", + "DarkAlien": "Xenovader", + "WhiteAlienDragon": "Xenogard", + "Kitsunebi_Ice": "Foxsparks Cryst", + "BerryGoat_Dark": "Caprity Noct", + "PinkRabbit_Grass": "Ribbuny Botan", + "Werewolf_Ice": "Loupmoon Cryst", + "AmaterasuWolf_Dark": "Kitsun Dark", + "RaijinDaughter_Water": "Dazzi Noct", + "WhiteTiger_Ground": "Cryolinx Terra", + "FengyunDeeper_Electric": "Fenglope Lux", + "Horus_Water": "Faleris Aqua", + "BadCatgirl": "Nyafia", + "BlueberryFairy": "Prunelia", + "GoldenHorse": "Gildane", + "DarkMechaDragon": "Xenolord", + "GhostRabbit": "Nitemary", + "NightBlueHorse": "Starryon", + "WhiteShieldDragon": "Silvegis", + "BlackPuppy": "Smokie", + "WhiteDeer": "Celesdir", + "MysteryMask": "Omascul", + "GrimGirl": "Splatterina", + "PurpleSpider": "Tarantriss", + "BlueThunderHorse": "Azurmane", + "SnowTigerBeastman": "Bastigor", + + "Male_Soldier01": "Isolano", + "Male_Soldier02": "Addestra-Pal novizio", + "Male_Soldier03": "Addestra-Pal crudele", + "Male_Soldier04": "Addestra-Pal combattivo", + "Female_Soldier01": "Isolano", + "Female_Soldier02": "Addestra-Pal promettente", + "Female_Soldier03": "Addestra-Pal veterana", + "Female_Soldier04": "Addestra-Pal superiore", + "Male_Soldier02_Invader": "Addestra-Pal focoso 🛈", + "Female_Soldier03_Invader": "Addestra-Pal gemelle 🛈", + "Female_Soldier04_Invader": "Addestra-Pal gemelle 🛈", + "Male_Soldier01_EnemyGroup": "Mercenario robusto", + "Male_Soldier02_EnemyGroup": "Mercenario robusto", + + "Hunter_Bat": "Bracconieri - Novizi (Mazza)", + "Hunter_FlameThrower": "Bracconieri - Eliminatori", + "Hunter_Fat_GatlingGun": "Bracconieri - Distruttori", + "Hunter_RocketLauncher": "Bracconieri - Élite", + "Hunter_Grenade": "Bracconieri - Granatieri", + "Hunter_Rifle": "Bracconieri - Pistoleri", + "Hunter_Shotgun": "Bracconieri - Cacciatori", + "Hunter_Handgun": "Bracconieri - Novizi (Pistola)", + "Hunter_GrenadeLauncher": "Bracconieri - Veterano", + "Hunter_MissileLauncher": "Bracconieri - Intercettatore", + "Hunter_Bat_Invader": "Bracconieri - Novizi (Mazza) 🛈", + "Hunter_Handgun_Invader": "Bracconieri - Novizi (Pistola) 🛈", + "Hunter_Rifle_Invader": "Bracconieri - Pistoleri 🛈", + "Hunter_Shotgun_Invader": "Bracconieri - Cacciatori 🛈", + "Hunter_Grenade_Invader": "Bracconieri - Granatieri 🛈", + "Hunter_Fat_GatlingGun_Invader": "Bracconieri - Distruttori 🛈", + "Hunter_FlameThrower_Invader": "Bracconieri - Eliminatori 🛈", + "Hunter_RocketLauncher_Invader": "Bracconieri - Élite 🛈", + + "Believer_CrossBow": "Ente per la tutela dei Pal - Fedeli", + "Believer_Bat": "Ente per la tutela dei Pal - Fedeli (Mazza)", + "Believer_Fat_GatlingGun": "Giudice dell'Ente per la tutela dei Pal", + "Believer_Fat_Cane": "Free Pal Alliance Judicator", + "Believer_CrossBow_Invader": "Ente per la tutela dei Pal - Fedeli 🛈", + "Believer_Bat_Invader": "Ente per la tutela dei Pal - Fedeli (Mazza) 🛈", + + "FireCult_FlameThrower": "Congrega del fuoco perenne - Martiri", + "FireCult_Rifle": "Congrega del fuoco perenne - Martiri (Fucile)", + "FireCult_FlameThrower_Invader": "Congrega del fuoco perenne - Martiri 🛈", + "FireCult_Rifle_Invader": "Congrega del fuoco perenne - Martiri (Fucile) 🛈", + + "Guard_Rifle": "Guardia", + "Guard_Shotgun": "Guardia (Fucile a pompa)", + "Police_Handgun": "Milizia volontaria - Guardie", + "Police_Rifle": "Milizia volontaria - Fucilieri", + "Police_Shotgun": "Milizia volontaria - Élite", + + "Male_Scientist01_LaserRifle": "Squadra per la ricerca genetica - Esecutori", + "Scientist_FlameThrower": "Squadra per la ricerca genetica - Esecutori (Lanciafiamme)", + "Male_Scientist01_LaserRifle_Invader": "Squadra per la ricerca genetica - Esecutori 🛈", + "Scientist_FlameThrower_Invader": "Squadra per la ricerca genetica - Esecutori (Lanciafiamme) 🛈", + + "Male_Ninja01": "Clan dei fiori di luna - Ninja minore", + "Male_NinjaElite01": "Clan dei fiori di luna - Ninja superiore", + "Male_NinjaElite01_Invader": "Clan dei fiori di luna - Ninja superiore 🛈", + + "Viking": "Popolo della rovina", + "Viking_Elite": "Élite del popolo della rovina", + "Viking_Elite_Invader": "Élite del popolo della rovina 🛈", + + "Hunter_Handgun_MiniOilrig": "Bracconieri - Novizi (Pistola) 🞚🛢", + "Hunter_Rifle_MiniOilrig": "Bracconieri - Pistoleri 🞚🛢", + "Hunter_Shotgun_MiniOilrig": "Bracconieri - Cacciatori 🞚🛢", + "Hunter_Grenade_MiniOilrig": "Bracconieri - Granatieri 🞚🛢", + "Hunter_FlameThrower_MiiniOilrig": "Bracconieri - Eliminatori 🞚🛢", + "Hunter_RocketLauncher_MiniOilrig": "Bracconieri - Élite 🞚🛢", + "Hunter_Fat_GatlingGun_MiniOilrig": "Bracconieri - Distruttori 🞚🛢", + "Hunter_Rifle_Oilrig": "Bracconieri - Pistoleri 🞜🛢", + "Hunter_Shotgun_Oilrig": "Bracconieri - Cacciatori 🞜🛢", + "Hunter_Grenade_Oilrig": "Bracconieri - Granatieri 🞜🛢", + "Hunter_Fat_GatlingGun_Oilrig": "Bracconieri - Distruttori 🞜🛢", + "Hunter_FlameThrower_Oilrig": "Bracconieri - Eliminatori 🞜🛢", + "Hunter_GrenadeLauncher_Oilrig": "Bracconieri - Veterano 🞜🛢", + "Hunter_RocketLauncher_Oilrig": "Bracconieri - Élite 🞜🛢", + "Hunter_MissileLauncher_Oilrig": "Bracconieri - Intercettatore 🞜🛢", + "Hunter_LaserRifle_Oilrig": "Soldato tecnologico dei bracconieri 🞜🛢", + "Hunter_BowGun_Oilrig": "Balestriere dei bracconieri 🞜🛢", + "Hunter_Katana_Oilrig": "Spadaccino dei bracconieri 🞜🛢", + "Hunter_Rifle_LargeOilrig": "Bracconieri - Pistoleri 🞕🛢", + "Hunter_Shotgun_LargeOilrig": "Bracconieri - Cacciatori 🞕🛢", + "Hunter_Grenade_LargeOilrig": "Bracconieri - Granatieri 🞕🛢", + "Hunter_FlameThrower_LargeOilrig": "Bracconieri - Eliminatori 🞕🛢", + "Hunter_RocketLauncher_LargeOilrig": "Bracconieri - Élite 🞕🛢", + "Hunter_GrenadeLauncher_LargeOilrig": "Bracconieri - Veterano 🞕🛢", + "Hunter_MissileLauncher_LargeOilrig": "Bracconieri - Intercettatore 🞕🛢", + "Hunter_Fat_GatlingGun_LargeOilrig": "Bracconieri - Distruttori 🞕🛢", + "Hunter_RocketLauncher_Oilrig_LD": "Bracconieri - Élite 🞕🛢", + + "WingGolem_Oilrig": "Knocklem 🛢", + "DarkAlien_Oilrig": "Xenovader 🛢", + "Horus_Oilrig": "Faleris 🛢", + "Baphomet_Dark_Oilrig": "Incineram Noct 🛢", + "HadesBird_Oilrig": "Helzephyr 🛢", + "LizardMan_Oilrig": "Leezpunk 🛢", + + "BOSS_Hunter_Rifle": "Occhio di falco", + "BOSS_Hunter_Fat_GatlingGun": "Graticola", + "BOSS_Believer_CrossBow": "Ego", + "BOSS_Believer_Fat_GiantClub": "Bruto", + "BOSS_Police_Rifle": "Frusta Lesta", + "BOSS_FireCult_FlameThrower": "Shadow", + "BOSS_Scientist_LaserRifle": "Whisk", + "BOSS_Ninja": "Imbrabato", + "BOSS_Male_NinjaElite": "Urchin", + "BOSS_Viking": "Gnam Gnam", + "BOSS_VikingElite": "Esattore", + "BOSS_Female_Soldier": "Jade", + "BOSS_Female_Soldier02": "Esibizionista", + "BOSS_Female_Soldier03": "Aloha", + "BOSS_Female_Soldier04": "Mano Lesta", + "BOSS_Male_Soldier": "Mr. Incidente", + "BOSS_Male_Soldier02": "Mozzicone", + "BOSS_Male_Soldier03": "Clint", + "BOSS_Male_Soldier04": "Lazoman", + "BOSS_Female_People": "Fiammetta", + "BOSS_Female_People02": "Sirena", + "BOSS_Female_People03": "Turncoat", + "BOSS_Male_People": "Dina", + "BOSS_Male_People2": "Mite", + "BOSS_Male_People02": "Segaossa", + "BOSS_Male_People03": "Scroccone", + "BOSS_Male_DesertPeople": "Spettro", + "BOSS_Female_DesertPeople": "Sussurratrice", + "BOSS_Police_old": "Pinch", + "BOSS_DarkTrader": "Ram", + "BOSS_Male_Trader01": "Viscido", + "BOSS_Male_Trader02": "Mimo", + "BOSS_Male_Trader03": "Billy", + + "SecurityDrone": "Elicottero d'attacco", + + "Male_DarkTrader01": "Trafficante", + "Male_DarkTrader02": "Mercante di medaglie", + "SalesPerson": "Mercante itenerante (Piccolo insediamento)", + "SalesPerson_Desert": "Mercante itinerante (Deserto)", + "SalesPerson_Desert2": "Mercante itinerante (Deserto)", + "SalesPerson_Volcano": "Mercante itinerante (Vulcano)", + "SalesPerson_Volcano2": "Mercante itinerante (Vulcano)", + "SalesPerson_Wander": "Mercante itinerante (Base)", + "PalDealer": "Mercante di Pal (Piccolo insediamento)", + "PalDealer_Desert": "Mercante di Pal (Deserto)", + "PalDealer_Volcano": "Mercante di Pal (Vulcano)", + "Male_Trader01": "Abitante del villaggio (Mappa Casuale)", + "RandomEventShop": "Mercante di Pal (Mappa Casuale)", + "BountyTrader": "Addetto alle taglie della Milizia volontaria", + "Doctor": "Abitante dell'isola", + "PalPassive_Doctor": "Professor Brown", + "Reward_Food": "Buongustaio arrogante", + "Reward_Paldex": "Studioso della vita dei Pal", + "Reward_BossDefeat": "Cacciatore di Pal veterano", + "Reward_PalCaptureCount": "Cacciatore esperto", + "Ambassador01": "Ambasciatore della città del deserto", + "Blacksmith01": "Fabbro alle prime armi", + "Epicure01": "Gourmet errante", + "Escort_Warrior01": "Soldato della scorta", + "Escort_PalTamer01": "Addestra-Pal della scorta", + "Yamishima_guide1": "Geologo saggio", + "Yamishima_guide2": "Luminare di Palogia", + "Yamishima_guide3": "Mineralogista dall'aria allegra", + "Yamishima_guide4": "Commerciante pessimista", + "Yamishima_guide5": "Disertore dell'esercito della rovina", + "Female_Presenter01": "Addestra-Pal gentile", + "CaravanLeader01": "Capo della carovana (1)", + "CaravanLeader02": "Capo della carovana (2)", + "CaravanLeader03": "Capo della carovana (3)", + "QuestMan": "Cliente della ricerca", + "WeaponsDealer": "Trafficante d'armi", + "Reward_PalDisplay_A_01": "Critico di Pal Arrogante", + "Reward_PalDisplay_B_01": "Critico di Pal Arrogante", + "Reward_PalDisplay_C_01": "Critico di Pal Arrogante", + "Reward_PalDisplay_D_01": "Critico di Pal Arrogante", + "Reward_PalDisplay_E_01": "Critico di Pal Arrogante", + "Reward_PalDisplay_F_01": "Critico di Pal Arrogante", + "Reward_PalDisplay_G_01": "Critico di Pal Arrogante", + "Reward_PalDisplay_H_01": "Critico di Pal Arrogante", + "Reward_PalDisplay_I_01": "Critico di Pal Arrogante", + "Reward_Emote_A_01": "Predicatore dell'amore", + "Reward_Emote_B_01": "Predicatore dell'amore", + "Reward_Emote_C_01": "Predicatore dell'amore", + "Reward_Emote_D_01": "Predicatore dell'amore", + "Reward_Emote_E_01": "Predicatore dell'amore", + "Reward_Emote_F_01": "Predicatore dell'amore", + "Reward_Emote_G_01": "Predicatore dell'amore", + "Reward_Emote_H_01": "Predicatore dell'amore", + "Reward_Emote_I_01": "Predicatore dell'amore", + "Emote_location_A_01": "Predicatore dell'amore", + "Emote_location_A_02": "Predicatore dell'amore", + "Emote_location_B_01": "Predicatore dell'amore", + "Emote_location_B_02": "Predicatore dell'amore", + "Emote_location_C_01": "Predicatore dell'amore", + "Emote_location_C_02": "Predicatore dell'amore", + "Emote_location_D_01": "Predicatore dell'amore", + "Emote_location_D_02": "Predicatore dell'amore", + "Emote_location_E_01": "Predicatore dell'amore", + "Emote_location_E_02": "Predicatore dell'amore", + "Emote_location_F_01": "Predicatore dell'amore", + "Emote_location_F_02": "Predicatore dell'amore", + "Emote_location_G_01": "Predicatore dell'amore", + "Emote_location_G_02": "Predicatore dell'amore", + "Emote_location_H_01": "Predicatore dell'amore", + "Emote_location_H_02": "Predicatore dell'amore", + "Emote_location_I_01": "Predicatore dell'amore", + "Emote_location_I_02": "Predicatore dell'amore", + "Female_People02": "Abitante del villaggio", + "Female_People03": "Abitante del villaggio", + "Male_People02": "Abitante del villaggio", + "Male_People03": "Abitante del villaggio", + "Male_Police_old": "Anziano reincarnato", + "MobuCitizen": "Abitante dell'isola", + "MobuCitizen_Male": "Abitante dell'isola", + "Male_DesertPeople01": "Abitante del villaggio (Deserto)", + "Female_DesertPeople02": "Abitante del villaggio (Deserto)", + + "SUMMON_DarkAlien": "Xenovader 🧿", + "SUMMON_DarkAlien_MAX": "Xenovader 🧿", + "SUMMON_WhiteAlienDragon": "Xenogard 🧿", + "SUMMON_WhiteAlienDragon_MAX": "Xenogard 🧿", + + "PREDATOR_AmaterasuWolf": "Kitsun 👾", + "PREDATOR_BirdDragon": "Vanwyrm 👾", + "PREDATOR_DrillGame": "Digtoise 👾", + "PREDATOR_FairyDragon": "Elphidran 👾", + "PREDATOR_FeatherOstrich": "Dazemu 👾", + "PREDATOR_FlowerDinosaur": "Dinossom 👾", + "PREDATOR_Garm": "Direhowl 👾", + "PREDATOR_GhostBeast": "Maraith 👾", + "PREDATOR_GoldenHorse": "Gildane 👾", + "PREDATOR_Gorilla": "Gorirat 👾", + "PREDATOR_GrassPanda": "Mossanda 👾", + "PREDATOR_GrimGirl": "Splatterina 👾", + "PREDATOR_Horus_Water": "Faleris Aqua 👾", + "PREDATOR_LazyDragon": "Relaxaurus 👾", + "PREDATOR_Manticore_Dark": "Blazehowl Noct 👾", + "PREDATOR_MushroomDragon": "Shroomer 👾", + "PREDATOR_MysteryMask": "Omascul 👾", + "PREDATOR_NightBlueHorse": "Starryon 👾", + "PREDATOR_PinkLizard": "Lovander 👾", + "PREDATOR_PurpleSpider": "Tarantriss 👾", + "PREDATOR_RedArmorBird": "Ragnahawk 👾", + "PREDATOR_ScorpionMan": "Prixter 👾", + "PREDATOR_SifuDog": "Dogen 👾", + "PREDATOR_ThunderDog": "Rayhound 👾", + "PREDATOR_Umihebi_Fire": "Jormuntide Ignis 👾", + "PREDATOR_VolcanicMonster_Ice": "Reptyro Cryst 👾", + "PREDATOR_Werewolf_Ice": "Loupmoon Cryst 👾", + "PREDATOR_WhiteTiger_Ground": "Cryolinx Terra 👾", + "PREDATOR_Yeti": "Wumpo 👾", + "PREDATOR_HadesBird_Electric": "Helzephyr Lux 👾", + "PREDATOR_Ronin_Dark": "Bushi Noct 👾", + "PREDATOR_CandleGhost": "Sootseer 👾", + "PREDATOR_Baphomet_Dark": "Incineram Noct 👾", + + "Hunter_Fat_GatlingGun_Tower": "Bracconieri - Distruttori ♙", + "Believer_CrossBow_Tower": "Ente per la tutela dei Pal - Fedeli ♙", + "Police_Rifle_Tower": "Milizia volontaria - Fucilieri ♙", + "Police_Shotgun_Tower": "Milizia volontaria - Élite ♙", + "Ninja01_Tower": "Clan dei fiori di luna - Ninja minore ♙", + "NinjaElite01_Tower": "Clan dei fiori di luna - Ninja superiore ♙", + "Viking_Tower": "Popolo della rovina ♙", + "VikingElite_Tower": "Élite del popolo della rovina ♙", + "GYM_BlackGriffon_2_Avatar": "Victor & Shadowbeak (Ombra) ♙", + "GYM_MoonQueen_2_Servant": "Selyne ♙", + + "GYM_ThunderDragonMan": "Axel & Orserk ♖", + "GYM_LilyQueen": "Lily & Lyleen ♖", + "GYM_Horus": "Marcus & Faleris ♖", + "GYM_BlackGriffon": "Victor & Shadowbeak ♖", + "GYM_ElecPanda": "Zoe & Grizzbolt ♖", + "GYM_MoonQueen": "Saya & Selyne ♖", + "GYM_SnowTigerBeastman": "Bjorn & Bastigor ♖", + "GYM_ThunderDragonMan_2": "Axel & Orserk 🏰", + "GYM_LilyQueen_2": "Lily & Lyleen 🏰", + "GYM_Horus_2": "Marcus & Faleris 🏰", + "GYM_BlackGriffon_2": "Victor & Shadowbeak 🏰", + "GYM_ElecPanda_2": "Zoe & Grizzbolt 🏰", + "GYM_MoonQueen_2": "Saya & Selyne 🏰", + "GYM_SnowTigerBeastman_2": "Bjorn & Bastigor 🏰", + + "RAID_NightLady": "Bellanoir 🏅", + "RAID_NightLady_Dark": "Bellanoir Libero 🏅", + "RAID_NightLady_Dark_2": "Bellanoir Libero 🏆", + "RAID_KingBahamut_Dragon": "Blazamut Ryu 🏅", + "RAID_KingBahamut_Dragon_2": "Blazamut Ryu 🏆", + "RAID_DarkMechaDragon": "Xenolord 🏅", + "RAID_DarkMechaDragon_2": "Xenolord 🏆" + +} diff --git a/palworld_pal_edit/resources/data/it-IT/passives.json b/palworld_pal_edit/resources/data/it-IT/passives.json new file mode 100644 index 0000000..760bf6a --- /dev/null +++ b/palworld_pal_edit/resources/data/it-IT/passives.json @@ -0,0 +1,362 @@ +{ + "UNKNOWN": { + "Name": "Sconosciuto", + "Description": "non esiste o non ancora presente nel nostro database" + }, + "NONE": { + "Name": "Nessuno", + "Description": "Il Pal non ha abilità in questo slot" + }, + "ElementResist_Normal_1_PAL": { + "Name": "Anomal0", + "Description": "Riduzione del danno non elementale: 10%" + }, + "ElementResist_Dark_1_PAL": { + "Name": "Tipo cupo", + "Description": "Riduzione del danno di attributo oscurità: 10%" + }, + "ElementResist_Dragon_1_PAL": { + "Name": "Ammazzadraghi", + "Description": "Riduzione del danno di attributo drago: 10%" + }, + "ElementResist_Ice_1_PAL": { + "Name": "Antighiaccio", + "Description": "Riduzione del danno di attributo ghiaccio: 10%" + }, + "ElementResist_Fire_1_PAL": { + "Name": "Termofilo", + "Description": "Riduzione del danno di attributo fuoco: 10%" + }, + "ElementResist_Leaf_1_PAL": { + "Name": "Antivegetazione", + "Description": "Riduzione del danno di attributo erba: 10%" + }, + "ElementResist_Earth_1_PAL": { + "Name": "Antisismico", + "Description": "Riduzione del danno di attributo terra: 10%" + }, + "ElementResist_Thunder_1_PAL": { + "Name": "Isolante", + "Description": "Riduzione del danno di attributo elettricità: 10%" + }, + "ElementResist_Aqua_1_PAL": { + "Name": "Idrorepellente", + "Description": "Riduzione del danno di attributo acqua: 10%" + }, + "ElementBoost_Normal_1_PAL": { + "Name": "Intuizione del nulla", + "Description": "Incremento del danno non elementale: 10%" + }, + "ElementBoost_Dark_1_PAL": { + "Name": "Coltre oscura", + "Description": "Incremento del danno di attributo oscurità: 10%" + }, + "ElementBoost_Dragon_1_PAL": { + "Name": "Stirpe draconica", + "Description": "Incremento del danno di attributo drago: 10%" + }, + "ElementBoost_Ice_1_PAL": { + "Name": "Sangue freddo", + "Description": "Incremento del danno di attributo ghiaccio: 10%" + }, + "ElementBoost_Fire_1_PAL": { + "Name": "Giocare col fuoco", + "Description": "Incremento del danno di attributo fuoco: 10%" + }, + "ElementBoost_Leaf_1_PAL": { + "Name": "Fragranza naturale", + "Description": "Incremento del danno di attributo erba: 10%" + }, + "ElementBoost_Earth_1_PAL": { + "Name": "Potere della terra", + "Description": "Incremento del danno di attributo terra: 10%" + }, + "ElementBoost_Thunder_1_PAL": { + "Name": "Condensatore", + "Description": "Incremento del danno di attributo elettricità: 10%" + }, + "ElementBoost_Aqua_1_PAL": { + "Name": "Giocare con l'acqua", + "Description": "Incremento del danno di attributo acqua: 10%" + }, + "ElementBoost_Normal_2_PAL": { + "Name": "Supremazia sacra", + "Description": "Incremento del danno non elementale: 20%; abilità distintiva di Paladius" + }, + "ElementBoost_Dark_2_PAL": { + "Name": "Dominio sull'oltretomba", + "Description": "Incremento del danno di attributo oscurità: 20%; abilità distintiva di Necromus" + }, + "ElementBoost_Dragon_2_PAL": { + "Name": "Drago divino", + "Description": "Incremento del danno di attributo drago: 20%; abilità distintiva di Jetragon" + }, + "ElementBoost_Ice_2_PAL": { + "Name": "Supremazia glaciale", + "Description": "Incremento del danno di attributo ghiaccio: 20%; abilità distintiva di Frostallion" + }, + "ElementBoost_Fire_2_PAL": { + "Name": "Supremazia ardente", + "Description": "Incremento del danno di attributo fuoco: 20%; abilità distintiva di Blazamut" + }, + "ElementBoost_Leaf_2_PAL": { + "Name": "Dominio sulla natura", + "Description": "Incremento del danno di attributo erba: 20%; abilità distintiva di Lyleen" + }, + "ElementBoost_Earth_2_PAL": { + "Name": "Supremazia terrestre", + "Description": "Incremento del danno di attributo terra: 20%; abilità distintiva di Anubis" + }, + "ElementBoost_Thunder_2_PAL": { + "Name": "Supremazia fulminante", + "Description": "Incremento del danno di attributo elettricità: 20%; abilità distintiva di Orserk" + }, + "ElementBoost_Aqua_2_PAL": { + "Name": "Supremazia marina", + "Description": "Incremento del danno di attributo acqua: 20%; abilità distintiva di Jormuntide" + }, + "Witch": { + "Name": "Strega", + "Description": "Incremento del danno di attributo oscurità: 30%. Incremento del danno di attributo ghiaccio: 30%. Abilità distintiva di Bellanoir" + }, + "PAL_ALLAttack_up1": { + "Name": "Animo prode", + "Description": "Attacco +10%" + }, + "PAL_ALLAttack_up2": { + "Name": "Animo feroce", + "Description": "Attacco +20%" + }, + "PAL_ALLAttack_up3": { + "Name": "Divinità feroce", + "Description": "Attacco +30%, Difesa +5%" + }, + "PAL_ALLAttack_down1": { + "Name": "Codardia", + "Description": "Attacco -10%" + }, + "PAL_ALLAttack_down2": { + "Name": "Piedi di piombo", + "Description": "Attacco -20%" + }, + "Deffence_up1": { + "Name": "Pelle dura", + "Description": "Difesa +10%" + }, + "Deffence_up2": { + "Name": "Corpo robusto", + "Description": "Difesa +20%" + }, + "Deffence_up3": { + "Name": "Corpo di diamante", + "Description": "Difesa +30%" + }, + "Deffence_down1": { + "Name": "Debolezza", + "Description": "Difesa -10%" + }, + "Deffence_down2": { + "Name": "Ossa fragili", + "Description": "Difesa -20%" + }, + "TrainerMining_up1": { + "Name": "Meastria nell'estrazione", + "Description": "Incremento efficienza nell'estrazione del giocatore: 25%" + }, + "TrainerLogging_up1": { + "Name": "Maestria nella falegnameria", + "Description": "Incremento efficienza nel tagliare la legna del giocatore: 25%" + }, + "TrainerATK_UP_1": { + "Name": "Maestria negli asalti", + "Description": "Incremento attacco del giocatore: 10%" + }, + "TrainerWorkSpeed_UP_1": { + "Name": "Gran motivatore", + "Description": "Incremento velocità delle attività del giocatore: 25%" + }, + "TrainerDEF_UP_1": { + "Name": "Padronanza della difesa", + "Description": "Incremento difesa del giocatore: 10%" + }, + "PAL_Sanity_Down_1": { + "Name": "Atteggiamento positivo", + "Description": "Resistenza al calo dei punti SAN +10%" + }, + "PAL_Sanity_Down_2": { + "Name": "Stacanovismo", + "Description": "Resistenza al calo dei punti SAN +15%" + }, + "PAL_Sanity_Down_3": { + "Name": "Spirito innamovibile", + "Description": "Resistenza al calo dei punti SAN +20%" + }, + "PAL_Sanity_Up_1": { + "Name": "Irrequietezza", + "Description": "Calo dei punti SAN +10%" + }, + "PAL_Sanity_Up_2": { + "Name": "Nichilismo", + "Description": "Calo dei punti SAN +15%" + }, + "PAL_FullStomach_Down_1": { + "Name": "Dainty Eater", + "Description": "Hunger drops 10% slower" + }, + "PAL_FullStomach_Down_2": { + "Name": "Sempre a dieta", + "Description": "Resistenza al calo della sazietà +15%" + }, + "PAL_FullStomach_Down_3": { + "Name": "Digiuno totale", + "Description": "Resistenza al calo della sazietà +20%" + }, + "PAL_FullStomach_Up_1": { + "Name": "Fame vorace", + "Description": "Calo della sazietà +10%" + }, + "PAL_FullStomach_Up_2": { + "Name": "Pozzo senza fondo", + "Description": "Calod ella sazietà +15%" + }, + "CraftSpeed_up1": { + "Name": "Diligenza", + "Description": "Velocità delle attività +20%" + }, + "CraftSpeed_up2": { + "Name": "Spirito artigiano", + "Description": "Velocità delle attività +50%" + }, + "CraftSpeed_up3": { + "Name": "Tecnica sopraffina", + "Description": "Velocità delle attività +75%" + }, + "CraftSpeed_down1": { + "Name": "Goffagine", + "Description": "Velocità delle attività -10%" + }, + "CraftSpeed_down2": { + "Name": "Svogliatezza", + "Description": "Velocità delle attività -30%" + }, + "MoveSpeed_up_1": { + "Name": "Rapidità", + "Description": "Incremento della velocità di movimento: 10%" + }, + "MoveSpeed_up_2": { + "Name": "Velocista", + "Description": "Incremento della velocità di movimento: 20%" + }, + "MoveSpeed_up_3": { + "Name": "Velocità divina", + "Description": "Incremento della velocità di movimento: 30%" + }, + "PAL_CorporateSlave": { + "Name": "Crumiro", + "Description": "Velocità delle attività +30%, Attacco -30%" + }, + "PAL_rude": { + "Name": "Brutalità", + "Description": "Attacco +15%, Velocità delle attività -10%" + }, + "Noukin": { + "Name": "Tutto muscoli", + "Description": "Attacco +30%, Velocità delle attività -50%" + }, + "PAL_oraora": { + "Name": "Arroganza", + "Description": "Attacco +10%, Difesa -20%" + }, + "PAL_conceited": { + "Name": "Vanità", + "Description": "Velocità delle attività +10%, Difesa -10%" + }, + "PAL_SpiritualInst": { + "Name": "Instabile", + "Description": "Velocità delle attività -10%, Difesa -10%" + }, + "PAL_masochist": { + "Name": "Masochismo", + "Description": "Difesa +15%, Attacco -15%" + }, + "PAL_sadist": { + "Name": "Sadismo", + "Description": "Attacco +15%, Difesa -15%" + }, + "Rare": { + "Name": "Fortunato", + "Description": "Attacco +15%, Velocità delle attività +15%" + }, + "Legend": { + "Name": "Leggenda", + "Description": "Incremento dell'attacco: 20%, Incremento della difesa +20%, Incremento della velocità di movimento: 15%" + }, + "Stamina_Up_1": { + "Name": "Resistenza infinita", + "Description": "Resistenza massima: +50% (Solo per i Pal che puoi cavalcare)" + }, + "Stamina_Up_2": { + "Name": "Energia della gioventù", + "Description": "Resistenza massima: +25% (Solo per i Pal che puoi cavalcare)" + }, + "Stamina_Up_3": { + "Name": "Moto perpetuo", + "Description": "Resistenza massima: +75% (Solo per i Pal che puoi cavalcare)" + }, + "Stamina_Down_1": { + "Name": "Recluso", + "Description": "Resistenza massima: -25% (Solo per i Pal che puoi cavalcare)" + }, + "SalePrice_Up_1": { + "Name": "Nobile", + "Description": "Miglioramento delle vendite: +5%" + }, + "SalePrice_Up_2": { + "Name": "Pelliccia curata", + "Description": "Miglioramento delle vendite: +3%" + }, + "SalePrice_Down_1": { + "Name": "Malandato", + "Description": "Peggioramento delle vendite: -10%" + }, + "CoolTimeReduction_Up_1": { + "Name": "Stato di quiete", + "Description": "Riduzione del tempo di recupero delle abilità attive: 30%, Attacco: +10%." + }, + "CoolTimeReduction_Up_2": { + "Name": "Impazienza", + "Description": "Riduzione del tempo di recupero delle abilità attive: 15%" + }, + "CoolTimeReduction_Down_1": { + "Name": "Nessuna voglia", + "Description": "Estensione del tempo di recupero delle abilità attive: -15%" + }, + "NonKilling": { + "Name": "Pietà", + "Description": "Per i pacifisti. La salute del bersaglio non può scendere sotto 1." + }, + "Nocturnal": { + "Name": "Notturno", + "Description": "La notte prosegue le attività senza bisogno di dormire." + }, + "Vampire": { + "Name": "Vampiro", + "Description": "Succhia via i danni subito, ripristinando Salute. La notte prosegue le attività senza bisogno di dormire." + }, + "Alien": { + "Name": "Cellule sconosciute", + "Description": "Attacco: +10%. Resistenza al danno di attributo fuoco: 15%. Resistenza al danno di attributo elettricità: 15%." + }, + "EternalFlame": { + "Name": "Calamità delle fiamme", + "Description": "Incremento del danno di attributo fuoco: 30%. Incremento del danno di attributo elettricità: 30%." + }, + "Invader": { + "Name": "Invasore", + "Description": "Incremento del danno di attributo oscurità: 30%. Incremento del danno di attributo drago: 30%." + }, + "Test_PalEgg_HatchingSpeed_Up": { + "Name": "Filantropo", + "Description": "Quando assegnato al ranch per Pal, aumenta di 100% la velocità di generazione delle uova." + } +} \ No newline at end of file diff --git a/palworld_pal_edit/resources/data/it-IT/ui.json b/palworld_pal_edit/resources/data/it-IT/ui.json new file mode 100644 index 0000000..50b9f1b --- /dev/null +++ b/palworld_pal_edit/resources/data/it-IT/ui.json @@ -0,0 +1,73 @@ +{ + "language": "Italiano", + "player_lbl": "Giocatore:", + "atk_lbl": "Abilità attive", + "clone_lbl": "Cloning Tools", + "stat_lbl": "Statistiche", + "health_lbl": "Energia", + "attack_lbl": "Attacco", + "defence_lbl": "Difesa", + "soul_tooltip": "Potenziamento Statua del Potere", + "health_soul_lbl": "PV massimi", + "attack_soul_lbl": "Attacco", + "defence_soul_lbl": "Difesa", + "working_soul_lbl": "Velocità delle attività", + + "electricity_lbl": "Elettricità", + "dark_lbl": "Oscurità", + "leaf_lbl": "Erba", + "normal_lbl": "Non elementale", + "earth_lbl": "Terra", + "dragon_lbl": "Drago", + "water_lbl": "Acqua", + "fire_lbl": "Fuoco", + "none_lbl": "Nessuno", + "ice_lbl": "Ghiaccio", + + "lucky_lbl": "Fortunato", + "alpha_lbl": "Alfa", + "name_prop": "Specie", + "gender_prop": "Genere", + "mattack_prop": "Fisico", + "sattack_prop": "Magico", + "defence_prop": "Difesa", + "workspeed_prop": "Velocità delle attività", + "hp_prop": "PV", + "rank_prop": "Rango", + "btn_add_pal": "Aggiungi Pal", + "btn_dump_pal": "Esporta Pal", + "btn_clone_pal": "Clona Pal", + "preset_lbl": "Presets:", + "preset_title1": "Utilità:", + "preset_base": "Base", + "preset_speed_worker": "Lavoratore rapido", + "preset_speed_runner": "Montatura rapida", + "preset_tank": "Tank", + "preset_title2": "Danni:", + "preset_max": "Max", + "preset_balance": "Bilanciato", + "preset_mount": "Montatura", + "preset_element": "Elementale", + "preset_title_level": "Imposta Livello:", + "preset_chg_lvl": "I Preset modificano il livello", + "preset_title_rank": "Imposta Rango:", + "preset_change_rank": "I Preset modificano il rango", + "preset_set_attr": "Imposta Attributi:", + "preset_change_attr": "I Preset modificano gli attributi", + "menu_load_save": "Carica Salvataggio PalWorld", + "menu_save": "Salva Modifiche al File", + "menu_export": "Esporta Pal", + "menu_import": "Importa Pal per il giocatore selezionato", + "msg_select_file": "Per favore seleziona un file di salvataggio.", + "msg_disclaim": "I valori sopra sono statistiche in-game e non iscludono le attività passive", + "msg_skill": "Passa il mouse su un'abilità per vedere la sua descrizione", + "msg_saving": "Caricamento salvataggio, per favore attendi...", + "msg_saving_big": "Salvataggio in corso, per favpre attendi... (possono essere necessari fino a 5 minuti per file di grandi dimensioni)", + "msg_decompressing": "Decompressione salvataggio, per favore attendi...", + "msg_loading": "Caricamento file GVAS, per favore attendi...", + "msg_writing": "Scittura file SAV...", + "msg_converting": "Conversione in corso... l'operazione può richiedere del tempo.", + "select_file": "Seleziona un file", + "msg_select_save_file": "Seleziona un file di salvataggio.", + "msg_done": "Caricamento concluso!" +} \ No newline at end of file diff --git a/palworld_pal_edit/resources/data/pals/SUMMON_DarkAlien.json b/palworld_pal_edit/resources/data/pals/SUMMON_DarkAlien.json new file mode 100644 index 0000000..1cf10ba --- /dev/null +++ b/palworld_pal_edit/resources/data/pals/SUMMON_DarkAlien.json @@ -0,0 +1,43 @@ +{ + "CodeName": "SUMMON_DarkAlien", + "Type": [ + "Dark", + "None" + ], + "Moveset": { + "EPalWazaID::PowerShot": 1, + "EPalWazaID::PoisonShot": 7, + "EPalWazaID::DarkPulse": 15, + "EPalWazaID::DarkArrow": 22, + "EPalWazaID::ShadowBall": 30, + "EPalWazaID::Unique_DarkAlien_JumpScractch": 40, + "EPalWazaID::DarkLaser": 50 + }, + "RaidMoveset": { + "EPalWazaID::Unique_DarkAlien_JumpScractch": 1, + "EPalWazaID::PoisonShot": 2, + "EPalWazaID::DarkCanon": 3 + }, + "Scaling": { + "HP": 90, + "PHY": 100, + "MAG": 125, + "DEF": 85 + }, + "Suitabilities": { + "EmitFlame": 0, + "Watering": 0, + "Seeding": 0, + "GenerateElectricity": 0, + "Handcraft": 0, + "Collection": 0, + "Deforest": 2, + "Mining": 0, + "OilExtraction": 0, + "ProductMedicine": 0, + "Cool": 0, + "Transport": 2, + "MonsterFarm": 0 + }, + "Human": false +} \ No newline at end of file diff --git a/palworld_pal_edit/resources/data/pals/SUMMON_DarkAlien_MAX.json b/palworld_pal_edit/resources/data/pals/SUMMON_DarkAlien_MAX.json new file mode 100644 index 0000000..2e857d7 --- /dev/null +++ b/palworld_pal_edit/resources/data/pals/SUMMON_DarkAlien_MAX.json @@ -0,0 +1,43 @@ +{ + "CodeName": "SUMMON_DarkAlien_MAX", + "Type": [ + "Dark", + "None" + ], + "Moveset": { + "EPalWazaID::PowerShot": 1, + "EPalWazaID::PoisonShot": 7, + "EPalWazaID::DarkPulse": 15, + "EPalWazaID::DarkArrow": 22, + "EPalWazaID::ShadowBall": 30, + "EPalWazaID::Unique_DarkAlien_JumpScractch": 40, + "EPalWazaID::DarkLaser": 50 + }, + "RaidMoveset": { + "EPalWazaID::Unique_DarkAlien_JumpScractch": 1, + "EPalWazaID::ShadowBall": 2, + "EPalWazaID::DarkCanon": 3 + }, + "Scaling": { + "HP": 90, + "PHY": 100, + "MAG": 125, + "DEF": 85 + }, + "Suitabilities": { + "EmitFlame": 0, + "Watering": 0, + "Seeding": 0, + "GenerateElectricity": 0, + "Handcraft": 0, + "Collection": 0, + "Deforest": 2, + "Mining": 0, + "OilExtraction": 0, + "ProductMedicine": 0, + "Cool": 0, + "Transport": 2, + "MonsterFarm": 0 + }, + "Human": false +} \ No newline at end of file diff --git a/palworld_pal_edit/resources/data/pals/SUMMON_WhiteAlienDragon.json b/palworld_pal_edit/resources/data/pals/SUMMON_WhiteAlienDragon.json new file mode 100644 index 0000000..65fb0b1 --- /dev/null +++ b/palworld_pal_edit/resources/data/pals/SUMMON_WhiteAlienDragon.json @@ -0,0 +1,43 @@ +{ + "CodeName": "SUMMON_WhiteAlienDragon", + "Type": [ + "Dragon", + "None" + ], + "Moveset": { + "EPalWazaID::DragonCanon": 1, + "EPalWazaID::DragonWave": 7, + "EPalWazaID::AirBlade": 15, + "EPalWazaID::DragonBreath": 22, + "EPalWazaID::IcicleLine": 30, + "EPalWazaID::Commet": 40, + "EPalWazaID::BeamSlicer": 50 + }, + "RaidMoveset": { + "EPalWazaID::DragonBreath": 1, + "EPalWazaID::Commet": 2, + "EPalWazaID::DragonCanon": 3 + }, + "Scaling": { + "HP": 110, + "PHY": 100, + "MAG": 120, + "DEF": 130 + }, + "Suitabilities": { + "EmitFlame": 0, + "Watering": 0, + "Seeding": 0, + "GenerateElectricity": 0, + "Handcraft": 0, + "Collection": 0, + "Deforest": 0, + "Mining": 3, + "OilExtraction": 0, + "ProductMedicine": 0, + "Cool": 0, + "Transport": 0, + "MonsterFarm": 0 + }, + "Human": false +} \ No newline at end of file diff --git a/palworld_pal_edit/resources/data/pals/SUMMON_WhiteAlienDragon_MAX.json b/palworld_pal_edit/resources/data/pals/SUMMON_WhiteAlienDragon_MAX.json new file mode 100644 index 0000000..21f8549 --- /dev/null +++ b/palworld_pal_edit/resources/data/pals/SUMMON_WhiteAlienDragon_MAX.json @@ -0,0 +1,43 @@ +{ + "CodeName": "SUMMON_WhiteAlienDragon_MAX", + "Type": [ + "Dragon", + "None" + ], + "Moveset": { + "EPalWazaID::DragonCanon": 1, + "EPalWazaID::DragonWave": 7, + "EPalWazaID::AirBlade": 15, + "EPalWazaID::DragonBreath": 22, + "EPalWazaID::IcicleLine": 30, + "EPalWazaID::Commet": 40, + "EPalWazaID::BeamSlicer": 50 + }, + "RaidMoveset": { + "EPalWazaID::DragonCanon": 1, + "EPalWazaID::Commet": 2, + "EPalWazaID::BeamSlicer": 3 + }, + "Scaling": { + "HP": 110, + "PHY": 100, + "MAG": 120, + "DEF": 130 + }, + "Suitabilities": { + "EmitFlame": 0, + "Watering": 0, + "Seeding": 0, + "GenerateElectricity": 0, + "Handcraft": 0, + "Collection": 0, + "Deforest": 0, + "Mining": 3, + "OilExtraction": 0, + "ProductMedicine": 0, + "Cool": 0, + "Transport": 0, + "MonsterFarm": 0 + }, + "Human": false +} \ No newline at end of file diff --git a/palworld_pal_edit/resources/pals/T_FengyunDeeper_Electric_icon_norma.png b/palworld_pal_edit/resources/pals/T_FengyunDeeper_Electric_icon_normal.png similarity index 100% rename from palworld_pal_edit/resources/pals/T_FengyunDeeper_Electric_icon_norma.png rename to palworld_pal_edit/resources/pals/T_FengyunDeeper_Electric_icon_normal.png diff --git a/palworld_save_tools.zip b/palworld_save_tools.zip new file mode 100644 index 0000000..fb6c883 Binary files /dev/null and b/palworld_save_tools.zip differ