Bladeren bron

Seal rune set added. Monsters DB updated. Small GUI fixes.

Iñigo Valentin 2 jaren geleden
bovenliggende
commit
84bbca8b14

+ 1 - 0
bin/.gitignore

@@ -0,0 +1 @@
+*

+ 2 - 1
src/cli/runeoptimizer/runeoptimizer.c

@@ -177,7 +177,8 @@ const char SET_NAMES[DIFFERENT_SETS][9] = {
   "NULL",    "ENERGY",  "GUARD",    "SWIFT",   "BLADE",    "RAGE",
   "FOCUS",   "ENDURE",  "FATAL",    "NULL",    "DESPAIR",  "VAMPIRE",
   "NULL",    "VIOLENT", "NEMESIS",  "WILL",    "SHIELD",   "REVENGE",
-  "DESTROY", "FIGHT",   "DETERMIN", "ENHANCE", "ACCURACY", "TOLERANCE"
+  "DESTROY", "FIGHT",   "DETERMIN", "ENHANCE", "ACCURACY", "TOLERANCE",
+  "SEAL"
 };
 const char QUALITY_NAMES[DIFFERENT_QUALITIES][9] = {
   "NULL",

+ 10 - 3
src/cli/runeoptimizer/runeoptimizer.h

@@ -20,8 +20,8 @@
  *
  * Declarations of the functions and data types used across the application.
  *
- * This file declares all the functions and data types used from anywhere in the
- * program.
+ * This file declares all the functions and data types used from anywhere in
+ * the program.
  */
 
 #pragma once
@@ -211,6 +211,13 @@
  */
 #define TOLERANCE 23
 
+/**
+ * Seal Set.
+ *
+ * Set ID of Seal runes, as given by Com2Us.
+ */
+#define TOLERANCE 23
+
 
 /**
  * HP rune stat.
@@ -371,7 +378,7 @@
  * It's not actually 25, because 0, 9 and 12 are never used in game, but is a
  * good value for counters and loops.
  */
-#define DIFFERENT_SETS 25
+#define DIFFERENT_SETS 26
 
 /**
  * Number of rune sets defined in the game.

+ 446 - 15
src/cli/runeoptimizer/update/update_get_monster_name.c

@@ -31,19 +31,19 @@ extern void update_get_monster_name(int id, char name[UNIT_NAME_LEN]){
 
     /*
      * This list is generated from a SWDB database, with the query:
-     * SELECT (
-     *   'case ' || id || ': strcpy(name, "' ||
-     *   CASE
-     *     WHEN awakens_from IS NULL THEN
-     *       substr(name, 0, 55) ||
-     *       " (" ||
-     *       (SELECT name FROM element WHERE id = monster.element) ||
-     *       ")"
-     *     WHEN awakens_from IS NOT NULL AND base_stars - natural_stars > 1 THEN
-     *       substr(name, 0, 58) || " (2A)"
-     *     ELSE substr(name, 0, 63) END
-     *   || '"); break;'
-     * ) AS t FROM monster;
+      SELECT (
+        'case ' || id || ': strcpy(name, "' ||
+        CASE
+          WHEN awakens_from IS NULL THEN
+            substr(name, 0, 55) ||
+            " (" ||
+            (SELECT name FROM element WHERE id = monster.element) ||
+            ")"
+          WHEN awakens_from IS NOT NULL AND base_stars - natural_stars > 1 THEN
+            substr(name, 0, 58) || " (2A)"
+          ELSE substr(name, 0, 63) END
+        || '"); break;'
+      ) AS t FROM monster;
      */
 
     switch(id){
@@ -544,7 +544,7 @@ extern void update_get_monster_name(int id, char name[UNIT_NAME_LEN]){
         case 15404: strcpy(name, "Magical Archer (Light)"); break;
         case 15405: strcpy(name, "Magical Archer (Dark)"); break;
         case 15411: strcpy(name, "Sharron"); break;
-        case 15412: strcpy(name, "Cassandra"); break;
+        case 15412: strcpy(name, "Amanda"); break;
         case 15413: strcpy(name, "Ardella"); break;
         case 15414: strcpy(name, "Chris"); break;
         case 15415: strcpy(name, "Bethony"); break;
@@ -661,7 +661,7 @@ extern void update_get_monster_name(int id, char name[UNIT_NAME_LEN]){
         case 16613: strcpy(name, "Leo"); break;
         case 16614: strcpy(name, "Jager"); break;
         case 16615: strcpy(name, "Ragdoll"); break;
-        case 16704: strcpy(name, "Magical Archer (Light)"); break;
+        case 16704: strcpy(name, "Elite Magical Archer (Light)"); break;
         case 16714: strcpy(name, "Fami"); break;
         case 16801: strcpy(name, "Monkey King (Water)"); break;
         case 16802: strcpy(name, "Monkey King (Fire)"); break;
@@ -1993,6 +1993,437 @@ extern void update_get_monster_name(int id, char name[UNIT_NAME_LEN]){
         case 26013: strcpy(name, "Nebelung"); break;
         case 26014: strcpy(name, "Siamese"); break;
         case 26015: strcpy(name, "Bombay"); break;
+        case 26101: strcpy(name, "Battle Angel (Water)"); break;
+        case 26102: strcpy(name, "Battle Angel (Fire)"); break;
+        case 26103: strcpy(name, "Battle Angel (Wind)"); break;
+        case 26104: strcpy(name, "Battle Angel (Light)"); break;
+        case 26105: strcpy(name, "Battle Angel (Dark)"); break;
+        case 26111: strcpy(name, "Amber"); break;
+        case 26112: strcpy(name, "Claire"); break;
+        case 26113: strcpy(name, "Sonia"); break;
+        case 26114: strcpy(name, "Veronica"); break;
+        case 26115: strcpy(name, "Destiny"); break;
+        case 26203: strcpy(name, "용감한 쿠키 (Wind)"); break;
+        case 26213: strcpy(name, "GingerBrave (Wind)"); break;
+        case 26301: strcpy(name, "퓨어바닐라 쿠키(물) (Water)"); break;
+        case 26302: strcpy(name, "퓨어바닐라 쿠키(불) (Fire)"); break;
+        case 26303: strcpy(name, "퓨어바닐라 쿠키(바람) (Wind)"); break;
+        case 26304: strcpy(name, "퓨어바닐라 쿠키(빛) (Light)"); break;
+        case 26305: strcpy(name, "퓨어바닐라 쿠키(어둠) (Dark)"); break;
+        case 26311: strcpy(name, "Pure Vanilla Cookie (Water)"); break;
+        case 26312: strcpy(name, "Pure Vanilla Cookie (Fire)"); break;
+        case 26313: strcpy(name, "Pure Vanilla Cookie (Wind)"); break;
+        case 26314: strcpy(name, "Pure Vanilla Cookie (Light)"); break;
+        case 26315: strcpy(name, "Pure Vanilla Cookie (Dark)"); break;
+        case 26401: strcpy(name, "홀리베리 쿠키(물) (Water)"); break;
+        case 26402: strcpy(name, "홀리베리 쿠키(불) (Fire)"); break;
+        case 26403: strcpy(name, "홀리베리 쿠키(바람) (Wind)"); break;
+        case 26404: strcpy(name, "홀리베리 쿠키(빛) (Light)"); break;
+        case 26405: strcpy(name, "홀리베리 쿠키(어둠) (Dark)"); break;
+        case 26411: strcpy(name, "Hollyberry Cookie (Water)"); break;
+        case 26412: strcpy(name, "Hollyberry Cookie (Fire)"); break;
+        case 26413: strcpy(name, "Hollyberry Cookie (Wind)"); break;
+        case 26414: strcpy(name, "Hollyberry Cookie (Light)"); break;
+        case 26415: strcpy(name, "Hollyberry Cookie (Dark)"); break;
+        case 26501: strcpy(name, "에스프레소맛 쿠키(물) (Water)"); break;
+        case 26502: strcpy(name, "에스프레소맛 쿠키(불) (Fire)"); break;
+        case 26503: strcpy(name, "에스프레소맛 쿠키(바람) (Wind)"); break;
+        case 26504: strcpy(name, "에스프레소맛 쿠키(빛) (Light)"); break;
+        case 26505: strcpy(name, "에스프레소맛 쿠키(어둠) (Dark)"); break;
+        case 26511: strcpy(name, "Espresso Cookie (Water)"); break;
+        case 26512: strcpy(name, "Espresso Cookie (Fire)"); break;
+        case 26513: strcpy(name, "Espresso Cookie (Wind)"); break;
+        case 26514: strcpy(name, "Espresso Cookie (Light)"); break;
+        case 26515: strcpy(name, "Espresso Cookie (Dark)"); break;
+        case 26601: strcpy(name, "마들렌맛 쿠키(물) (Water)"); break;
+        case 26602: strcpy(name, "마들렌맛 쿠키(불) (Fire)"); break;
+        case 26603: strcpy(name, "마들렌맛 쿠키(바람) (Wind)"); break;
+        case 26604: strcpy(name, "마들렌맛 쿠키(빛) (Light)"); break;
+        case 26605: strcpy(name, "마들렌맛 쿠키(어둠) (Dark)"); break;
+        case 26611: strcpy(name, "Madeleine Cookie (Water)"); break;
+        case 26612: strcpy(name, "Madeleine Cookie (Fire)"); break;
+        case 26613: strcpy(name, "Madeleine Cookie (Wind)"); break;
+        case 26614: strcpy(name, "Madeleine Cookie (Light)"); break;
+        case 26615: strcpy(name, "Madeleine Cookie (Dark)"); break;
+        case 26703: strcpy(name, "Lollipop Warrior (Wind)"); break;
+        case 26713: strcpy(name, "Thomas"); break;
+        case 26801: strcpy(name, "Pudding Princess (Water)"); break;
+        case 26802: strcpy(name, "Pudding Princess (Fire)"); break;
+        case 26803: strcpy(name, "Pudding Princess (Wind)"); break;
+        case 26804: strcpy(name, "Pudding Princess (Light)"); break;
+        case 26805: strcpy(name, "Pudding Princess (Dark)"); break;
+        case 26811: strcpy(name, "Adriana"); break;
+        case 26812: strcpy(name, "Lucia"); break;
+        case 26813: strcpy(name, "Angela"); break;
+        case 26814: strcpy(name, "Ariana"); break;
+        case 26815: strcpy(name, "Elena"); break;
+        case 26901: strcpy(name, "Macaron Guard (Water)"); break;
+        case 26902: strcpy(name, "Macaron Guard (Fire)"); break;
+        case 26903: strcpy(name, "Macaron Guard (Wind)"); break;
+        case 26904: strcpy(name, "Macaron Guard (Light)"); break;
+        case 26905: strcpy(name, "Macaron Guard (Dark)"); break;
+        case 26911: strcpy(name, "Manon"); break;
+        case 26912: strcpy(name, "Alice"); break;
+        case 26913: strcpy(name, "Jade"); break;
+        case 26914: strcpy(name, "Audrey"); break;
+        case 26915: strcpy(name, "Giselle"); break;
+        case 27001: strcpy(name, "Black Tea Bunny (Water)"); break;
+        case 27002: strcpy(name, "Black Tea Bunny (Fire)"); break;
+        case 27003: strcpy(name, "Black Tea Bunny (Wind)"); break;
+        case 27004: strcpy(name, "Black Tea Bunny (Light)"); break;
+        case 27005: strcpy(name, "Black Tea Bunny (Dark)"); break;
+        case 27011: strcpy(name, "Rosemary"); break;
+        case 27012: strcpy(name, "Hibiscus"); break;
+        case 27013: strcpy(name, "Chamomile"); break;
+        case 27014: strcpy(name, "Jasmine"); break;
+        case 27015: strcpy(name, "Lavender"); break;
+        case 27101: strcpy(name, "Choco Knight (Water)"); break;
+        case 27102: strcpy(name, "Choco Knight (Fire)"); break;
+        case 27103: strcpy(name, "Choco Knight (Wind)"); break;
+        case 27104: strcpy(name, "Choco Knight (Light)"); break;
+        case 27105: strcpy(name, "Choco Knight (Dark)"); break;
+        case 27111: strcpy(name, "Ganache"); break;
+        case 27112: strcpy(name, "Pavé"); break;
+        case 27113: strcpy(name, "Praline"); break;
+        case 27114: strcpy(name, "Fudge"); break;
+        case 27115: strcpy(name, "Truffle"); break;
+        case 72001: strcpy(name, "King Slime (Water)"); break;
+        case 72002: strcpy(name, "King Slime (Fire)"); break;
+        case 72003: strcpy(name, "King Slime (Wind)"); break;
+        case 72011: strcpy(name, "길드보스(물) (Water)"); break;
+        case 72012: strcpy(name, "길드보스(불) (Fire)"); break;
+        case 72013: strcpy(name, "길드보스(바람) (Wind)"); break;
+        case 72021: strcpy(name, "길드보스(물) (Water)"); break;
+        case 72022: strcpy(name, "길드보스(불) (Fire)"); break;
+        case 72023: strcpy(name, "길드보스(바람) (Wind)"); break;
+        case 72031: strcpy(name, "길드보스(물) (Water)"); break;
+        case 72032: strcpy(name, "길드보스(불) (Fire)"); break;
+        case 72033: strcpy(name, "길드보스(바람) (Wind)"); break;
+        case 72041: strcpy(name, "길드보스(물) (Water)"); break;
+        case 72042: strcpy(name, "길드보스(불) (Fire)"); break;
+        case 72043: strcpy(name, "길드보스(바람) (Wind)"); break;
+        case 72051: strcpy(name, "길드보스(물) (Water)"); break;
+        case 72052: strcpy(name, "길드보스(불) (Fire)"); break;
+        case 72053: strcpy(name, "길드보스(바람) (Wind)"); break;
+        case 72061: strcpy(name, "길드보스(물) (Water)"); break;
+        case 72062: strcpy(name, "길드보스(불) (Fire)"); break;
+        case 72063: strcpy(name, "길드보스(바람) (Wind)"); break;
+        case 320001: strcpy(name, "킹덤 콜라보 케이크 늑대 (Pure)"); break;
+        case 320002: strcpy(name, "킹덤 콜라보 케이크 들개 (Pure)"); break;
+        case 320101: strcpy(name, "케이크 늑대 대체 유닛 (Pure)"); break;
+        case 320102: strcpy(name, "케이크 들개 대체 유닛 (Pure)"); break;
+        case 73006: strcpy(name, "Red Velvet Dragon (Pure)"); break;
+        case 73106: strcpy(name, "Dessert Kingdom Dragon (Pure)"); break;
+        case 73205: strcpy(name, "Ancient Mimick (Dark)"); break;
+        case 27201: strcpy(name, "Puppeteer (Water)"); break;
+        case 27202: strcpy(name, "Puppeteer (Fire)"); break;
+        case 27203: strcpy(name, "Puppeteer (Wind)"); break;
+        case 27204: strcpy(name, "Puppeteer (Light)"); break;
+        case 27205: strcpy(name, "Puppeteer (Dark)"); break;
+        case 27211: strcpy(name, "Zibala"); break;
+        case 27212: strcpy(name, "Zima"); break;
+        case 27213: strcpy(name, "Smicer"); break;
+        case 27214: strcpy(name, "Kovarci"); break;
+        case 27215: strcpy(name, "Zenisek"); break;
+        case 27304: strcpy(name, "알타이어(빛) (Light)"); break;
+        case 27314: strcpy(name, "Altaïr (Light)"); break;
+        case 27401: strcpy(name, "에지오(물) (Water)"); break;
+        case 27402: strcpy(name, "에지오(불) (Fire)"); break;
+        case 27403: strcpy(name, "에지오(바람) (Wind)"); break;
+        case 27404: strcpy(name, "에지오(빛) (Light)"); break;
+        case 27405: strcpy(name, "에지오(어둠) (Dark)"); break;
+        case 27411: strcpy(name, "Ezio (Water)"); break;
+        case 27412: strcpy(name, "Ezio (Fire)"); break;
+        case 27413: strcpy(name, "Ezio (Wind)"); break;
+        case 27414: strcpy(name, "Ezio (Light)"); break;
+        case 27415: strcpy(name, "Ezio (Dark)"); break;
+        case 27501: strcpy(name, "바예크(물) (Water)"); break;
+        case 27502: strcpy(name, "바예크(불) (Fire)"); break;
+        case 27503: strcpy(name, "바예크(바람) (Wind)"); break;
+        case 27504: strcpy(name, "바예크(빛) (Light)"); break;
+        case 27505: strcpy(name, "바예크(어둠) (Dark)"); break;
+        case 27511: strcpy(name, "Bayek (Water)"); break;
+        case 27512: strcpy(name, "Bayek (Fire)"); break;
+        case 27513: strcpy(name, "Bayek (Wind)"); break;
+        case 27514: strcpy(name, "Bayek (Light)"); break;
+        case 27515: strcpy(name, "Bayek (Dark)"); break;
+        case 27601: strcpy(name, "카산드라(물) (Water)"); break;
+        case 27602: strcpy(name, "카산드라(불) (Fire)"); break;
+        case 27603: strcpy(name, "카산드라(바람) (Wind)"); break;
+        case 27604: strcpy(name, "카산드라(빛) (Light)"); break;
+        case 27605: strcpy(name, "카산드라(어둠) (Dark)"); break;
+        case 27611: strcpy(name, "Kassandra (Water)"); break;
+        case 27612: strcpy(name, "Kassandra (Fire)"); break;
+        case 27613: strcpy(name, "Kassandra (Wind)"); break;
+        case 27614: strcpy(name, "Kassandra (Light)"); break;
+        case 27615: strcpy(name, "Kassandra (Dark)"); break;
+        case 27701: strcpy(name, "에이보르(물) (Water)"); break;
+        case 27702: strcpy(name, "에이보르(불) (Fire)"); break;
+        case 27703: strcpy(name, "에이보르(바람) (Wind)"); break;
+        case 27704: strcpy(name, "에이보르(빛) (Light)"); break;
+        case 27705: strcpy(name, "에이보르(어둠) (Dark)"); break;
+        case 27711: strcpy(name, "Eivor (Water)"); break;
+        case 27712: strcpy(name, "Eivor (Fire)"); break;
+        case 27713: strcpy(name, "Eivor (Wind)"); break;
+        case 27714: strcpy(name, "Eivor (Light)"); break;
+        case 27715: strcpy(name, "Eivor (Dark)"); break;
+        case 73301: strcpy(name, "Legion Commander of Conviction (Water)"); break;
+        case 73302: strcpy(name, "Legion Commander of Retribution (Fire)"); break;
+        case 73303: strcpy(name, "Legion Commander of Judgment (Wind)"); break;
+        case 320201: strcpy(name, "Templar Royal Guard (Water)"); break;
+        case 320202: strcpy(name, "Templar Royal Guard (Fire)"); break;
+        case 320203: strcpy(name, "Templar Royal Guard (Wind)"); break;
+        case 320211: strcpy(name, "Templar Elite Guard (Water)"); break;
+        case 320212: strcpy(name, "Templar Elite Guard (Fire)"); break;
+        case 320213: strcpy(name, "Templar Elite Guard (Wind)"); break;
+        case 73401: strcpy(name, "Legion Commander of Conviction (Water)"); break;
+        case 73402: strcpy(name, "Legion Commander of Retribution (Fire)"); break;
+        case 73403: strcpy(name, "Legion Commander of Judgment (Wind)"); break;
+        case 320221: strcpy(name, "Templar Royal Guard (Water)"); break;
+        case 320222: strcpy(name, "Templar Royal Guard (Fire)"); break;
+        case 320223: strcpy(name, "Templar Royal Guard (Wind)"); break;
+        case 320231: strcpy(name, "Templar Elite Guard (Water)"); break;
+        case 320232: strcpy(name, "Templar Elite Guard (Fire)"); break;
+        case 320233: strcpy(name, "Templar Elite Guard (Wind)"); break;
+        case 900001: strcpy(name, "만우절이벤트 아이린 (Water)"); break;
+        case 27804: strcpy(name, "Dual Blade (Light)"); break;
+        case 27814: strcpy(name, "Frederic"); break;
+        case 27901: strcpy(name, "Steel Commander (Water)"); break;
+        case 27902: strcpy(name, "Steel Commander (Fire)"); break;
+        case 27903: strcpy(name, "Steel Commander (Wind)"); break;
+        case 27904: strcpy(name, "Steel Commander (Light)"); break;
+        case 27905: strcpy(name, "Steel Commander (Dark)"); break;
+        case 27911: strcpy(name, "Lionel"); break;
+        case 27912: strcpy(name, "Patrick"); break;
+        case 27913: strcpy(name, "Hector"); break;
+        case 27914: strcpy(name, "Ian"); break;
+        case 27915: strcpy(name, "Evan"); break;
+        case 28001: strcpy(name, "Desert Warrior (Water)"); break;
+        case 28002: strcpy(name, "Desert Warrior (Fire)"); break;
+        case 28003: strcpy(name, "Desert Warrior (Wind)"); break;
+        case 28004: strcpy(name, "Desert Warrior (Light)"); break;
+        case 28005: strcpy(name, "Desert Warrior (Dark)"); break;
+        case 28011: strcpy(name, "Omar"); break;
+        case 28012: strcpy(name, "Ashour"); break;
+        case 28013: strcpy(name, "Shahat"); break;
+        case 28014: strcpy(name, "Ahmed"); break;
+        case 28015: strcpy(name, "Salah"); break;
+        case 28101: strcpy(name, "Gladiatrix (Water)"); break;
+        case 28102: strcpy(name, "Gladiatrix (Fire)"); break;
+        case 28103: strcpy(name, "Gladiatrix (Wind)"); break;
+        case 28104: strcpy(name, "Gladiatrix (Light)"); break;
+        case 28105: strcpy(name, "Gladiatrix (Dark)"); break;
+        case 28111: strcpy(name, "Kalantatze"); break;
+        case 28112: strcpy(name, "Federica"); break;
+        case 28113: strcpy(name, "Eleni"); break;
+        case 28114: strcpy(name, "Aurelia"); break;
+        case 28115: strcpy(name, "Kiara"); break;
+        case 28201: strcpy(name, "Mercenary Queen (Water)"); break;
+        case 28202: strcpy(name, "Mercenary Queen (Fire)"); break;
+        case 28203: strcpy(name, "Mercenary Queen (Wind)"); break;
+        case 28204: strcpy(name, "Mercenary Queen (Light)"); break;
+        case 28205: strcpy(name, "Mercenary Queen (Dark)"); break;
+        case 28211: strcpy(name, "Brita"); break;
+        case 28212: strcpy(name, "Solveig"); break;
+        case 28213: strcpy(name, "Astrid"); break;
+        case 28214: strcpy(name, "Berghild"); break;
+        case 28215: strcpy(name, "Sigrid"); break;
+        case 28301: strcpy(name, "Indra (Water)"); break;
+        case 28302: strcpy(name, "Indra (Fire)"); break;
+        case 28303: strcpy(name, "Indra (Wind)"); break;
+        case 28304: strcpy(name, "Indra (Light)"); break;
+        case 28305: strcpy(name, "Indra (Dark)"); break;
+        case 28311: strcpy(name, "Parjanya"); break;
+        case 28312: strcpy(name, "Vendhan"); break;
+        case 28313: strcpy(name, "Chakra"); break;
+        case 28314: strcpy(name, "Dyeus"); break;
+        case 28315: strcpy(name, "Devaraja"); break;
+        case 28411: strcpy(name, "Parjanya (Water)"); break;
+        case 28412: strcpy(name, "Vendhan (Fire)"); break;
+        case 28413: strcpy(name, "Chakra (Wind)"); break;
+        case 28414: strcpy(name, "Dyeus (Light)"); break;
+        case 28415: strcpy(name, "Devaraja (Dark)"); break;
+        case 28501: strcpy(name, "Asura (Water)"); break;
+        case 28502: strcpy(name, "Asura (Fire)"); break;
+        case 28503: strcpy(name, "Asura (Wind)"); break;
+        case 28504: strcpy(name, "Asura (Light)"); break;
+        case 28505: strcpy(name, "Asura (Dark)"); break;
+        case 28511: strcpy(name, "Mayasura"); break;
+        case 28512: strcpy(name, "Varuna"); break;
+        case 28513: strcpy(name, "Usha"); break;
+        case 28514: strcpy(name, "Danu"); break;
+        case 28515: strcpy(name, "Vritra"); break;
+        case 60206: strcpy(name, "Abyssal Ancient Giant (Water)"); break;
+        case 60306: strcpy(name, "Abyssal Legendary Dragon (Fire)"); break;
+        case 62703: strcpy(name, "Ancient Spirit (Wind)"); break;
+        case 62713: strcpy(name, "Ancient Spirit (Wind)"); break;
+        case 62723: strcpy(name, "Ancient Spirit (Wind)"); break;
+        case 62733: strcpy(name, "Ancient Spirit (Wind)"); break;
+        case 62743: strcpy(name, "Ancient Spirit (Wind)"); break;
+        case 62753: strcpy(name, "Ancient Spirit (Wind)"); break;
+        case 62763: strcpy(name, "Ancient Spirit (Wind)"); break;
+        case 62773: strcpy(name, "Ancient Spirit (Wind)"); break;
+        case 101816: strcpy(name, "Tower (Pure)"); break;
+        case 101916: strcpy(name, "Tower (Pure)"); break;
+        case 101826: strcpy(name, "Tower (Pure)"); break;
+        case 101926: strcpy(name, "Tower (Pure)"); break;
+        case 102066: strcpy(name, "Tower (Pure)"); break;
+        case 102166: strcpy(name, "Tower (Pure)"); break;
+        case 210216: strcpy(name, "Small Crystal (Pure)"); break;
+        case 210616: strcpy(name, "Medium Crystal (Pure)"); break;
+        case 210716: strcpy(name, "Medium Crystal (Pure)"); break;
+        case 211206: strcpy(name, "Small Crystal (Pure)"); break;
+        case 211306: strcpy(name, "Small Crystal (Pure)"); break;
+        case 62106: strcpy(name, "Abyssal Ancient Lich King (Dark)"); break;
+        case 211016: strcpy(name, "가드_보라(중)_심연층 (Pure)"); break;
+        case 16531: strcpy(name, "Nickel (2A)"); break;
+        case 16532: strcpy(name, "Iron (2A)"); break;
+        case 16533: strcpy(name, "Copper (2A)"); break;
+        case 16534: strcpy(name, "Silver (2A)"); break;
+        case 16535: strcpy(name, "Zinc (2A)"); break;
+        case 20831: strcpy(name, "Tractor (2A)"); break;
+        case 20832: strcpy(name, "Bulldozer (2A)"); break;
+        case 20833: strcpy(name, "Crane (2A)"); break;
+        case 20834: strcpy(name, "Driller (2A)"); break;
+        case 20835: strcpy(name, "Crawler (2A)"); break;
+        case 28601: strcpy(name, "Devil Maiden (Water)"); break;
+        case 28602: strcpy(name, "Devil Maiden (Fire)"); break;
+        case 28603: strcpy(name, "Devil Maiden (Wind)"); break;
+        case 28604: strcpy(name, "Devil Maiden (Light)"); break;
+        case 28605: strcpy(name, "Devil Maiden (Dark)"); break;
+        case 28611: strcpy(name, "Irène"); break;
+        case 28612: strcpy(name, "Bloodya"); break;
+        case 28613: strcpy(name, "Layla"); break;
+        case 28614: strcpy(name, "Jessica"); break;
+        case 28615: strcpy(name, "Liliana"); break;
+        case 28705: strcpy(name, "Lord of Hell (Dark)"); break;
+        case 28715: strcpy(name, "Lord of Hell (Dark)"); break;
+        case 28801: strcpy(name, "Demon Bag (Water)"); break;
+        case 48101: strcpy(name, "리빙 아머 2차 각성 보스(물) (Water)"); break;
+        case 48102: strcpy(name, "리빙 아머 2차 각성 보스(불) (Fire)"); break;
+        case 48103: strcpy(name, "리빙 아머 2차 각성 보스(바람) (Wind)"); break;
+        case 48104: strcpy(name, "리빙 아머 2차 각성 보스(빛) (Light)"); break;
+        case 48105: strcpy(name, "리빙 아머 2차 각성 보스(어둠) (Dark)"); break;
+        case 48201: strcpy(name, "프랑켄 2차 각성 보스(물) (Water)"); break;
+        case 48202: strcpy(name, "프랑켄 2차 각성 보스(불) (Fire)"); break;
+        case 48203: strcpy(name, "프랑켄 2차 각성 보스(바람) (Wind)"); break;
+        case 48204: strcpy(name, "프랑켄 2차 각성 보스(빛) (Light)"); break;
+        case 48205: strcpy(name, "프랑켄 2차 각성 보스(어둠) (Dark)"); break;
+        case 74006: strcpy(name, "Dimension Predator (Pure)"); break;
+        case 74106: strcpy(name, "Enraged Dimension Predator (Pure)"); break;
+        case 121301: strcpy(name, "2차각성 리빙 아머 수정_왼쪽(물) (Water)"); break;
+        case 121302: strcpy(name, "2차각성 리빙 아머 수정_왼쪽(불) (Fire)"); break;
+        case 121303: strcpy(name, "2차각성 리빙 아머 수정_왼쪽(바람) (Wind)"); break;
+        case 121304: strcpy(name, "2차각성 리빙 아머 수정_왼쪽(빛) (Light)"); break;
+        case 121305: strcpy(name, "2차각성 리빙 아머 수정_왼쪽(어둠) (Dark)"); break;
+        case 121311: strcpy(name, "2차각성 리빙 아머 수정_오른쪽(물) (Water)"); break;
+        case 121312: strcpy(name, "2차각성 리빙 아머 수정_오른쪽(불) (Fire)"); break;
+        case 121313: strcpy(name, "2차각성 리빙 아머 수정_오른쪽(바람) (Wind)"); break;
+        case 121314: strcpy(name, "2차각성 리빙 아머 수정_오른쪽(빛) (Light)"); break;
+        case 121315: strcpy(name, "2차각성 리빙 아머 수정_오른쪽(어둠) (Dark)"); break;
+        case 121401: strcpy(name, "2차각성 프랑켄 수정_왼쪽(물) (Water)"); break;
+        case 121402: strcpy(name, "2차각성 프랑켄 수정_왼쪽(불) (Fire)"); break;
+        case 121403: strcpy(name, "2차각성 프랑켄 수정_왼쪽(바람) (Wind)"); break;
+        case 121404: strcpy(name, "2차각성 프랑켄 수정_왼쪽(빛) (Light)"); break;
+        case 121405: strcpy(name, "2차각성 프랑켄 수정_왼쪽(어둠) (Dark)"); break;
+        case 121411: strcpy(name, "2차각성 프랑켄 수정_오른쪽(물) (Water)"); break;
+        case 121412: strcpy(name, "2차각성 프랑켄 수정_오른쪽(불) (Fire)"); break;
+        case 121413: strcpy(name, "2차각성 프랑켄 수정_오른쪽(바람) (Wind)"); break;
+        case 121414: strcpy(name, "2차각성 프랑켄 수정_오른쪽(빛) (Light)"); break;
+        case 121415: strcpy(name, "2차각성 프랑켄 수정_오른쪽(어둠) (Dark)"); break;
+        case 211406: strcpy(name, "가드_정령(소)_심연층 (Pure)"); break;
+        case 211506: strcpy(name, "가드_정령(중)_심연층 (Pure)"); break;
+        case 320301: strcpy(name, "Dimensional Minion (Water) (Water)"); break;
+        case 320302: strcpy(name, "Dimensional Minion (Fire) (Fire)"); break;
+        case 320306: strcpy(name, "Hollow (Pure)"); break;
+        case 320403: strcpy(name, "Dimensional Minion (Wind) (Wind)"); break;
+        case 320406: strcpy(name, "Void (Pure)"); break;
+        case 401006: strcpy(name, "차원홀 레이드 1페이즈 왼쪽 수정 (Pure)"); break;
+        case 401106: strcpy(name, "차원홀 레이드 1페이즈 오른쪽 수정 (Pure)"); break;
+        case 401206: strcpy(name, "차원홀 레이드 3페이즈 왼쪽 수정 (Pure)"); break;
+        case 401306: strcpy(name, "차원홀 레이드 3페이즈 오른쪽 수정 (Pure)"); break;
+        case 62803: strcpy(name, "Abyssal Ancient Spirit (Wind)"); break;
+        case 102266: strcpy(name, "타워(정령) - 1_심연층 (Pure)"); break;
+        case 102366: strcpy(name, "타워(정령) - 2_심연층 (Pure)"); break;
+        case 25121: strcpy(name, "Imperfect Onimusha (Water)"); break;
+        case 28901: strcpy(name, "Dokkaebi Lord (Water)"); break;
+        case 28902: strcpy(name, "Dokkaebi Lord (Fire)"); break;
+        case 28903: strcpy(name, "Dokkaebi Lord (Wind)"); break;
+        case 28904: strcpy(name, "Dokkaebi Lord (Light)"); break;
+        case 28905: strcpy(name, "Dokkaebi Lord (Dark)"); break;
+        case 28911: strcpy(name, "Jeongnam"); break;
+        case 28912: strcpy(name, "Moogwang"); break;
+        case 28913: strcpy(name, "Byungchul"); break;
+        case 28914: strcpy(name, "Euldong"); break;
+        case 28915: strcpy(name, "Gapsoo"); break;
+        case 29001: strcpy(name, "Dokkaebi Princess and Sapsaree (Water)"); break;
+        case 29002: strcpy(name, "Dokkaebi Princess and Sapsaree (Fire)"); break;
+        case 29003: strcpy(name, "Dokkaebi Princess and Sapsaree (Wind)"); break;
+        case 29004: strcpy(name, "Dokkaebi Princess and Sapsaree (Light)"); break;
+        case 29005: strcpy(name, "Dokkaebi Princess and Sapsaree (Dark)"); break;
+        case 29011: strcpy(name, "Minji and Sapsaree"); break;
+        case 29012: strcpy(name, "Yeji and Sapsaree"); break;
+        case 29013: strcpy(name, "Yuna and Sapsaree"); break;
+        case 29014: strcpy(name, "Eunbee and Sapsaree"); break;
+        case 29015: strcpy(name, "Damee and Sapsaree"); break;
+        case 29022: strcpy(name, "Imperfect Dokkaebi Princess and Sapsaree (Fire)"); break;
+        case 62406: strcpy(name, "Abyssal Ancient Tormentor (Wind)"); break;
+        case 112043: strcpy(name, "아티펙트1 - 보스 수정_기절방무_심연층 (Wind)"); break;
+        case 112053: strcpy(name, "아티펙트1 - 보스 수정_빗맞음_심연층 (Wind)"); break;
+        case 29105: strcpy(name, "Twin Angels (Dark)"); break;
+        case 29111: strcpy(name, "Ramael and Judiah"); break;
+        case 29112: strcpy(name, "Karuel and Lanoah"); break;
+        case 29113: strcpy(name, "Sadiel and Zeryah"); break;
+        case 29114: strcpy(name, "Miruel and Graciah"); break;
+        case 29115: strcpy(name, "Jaduel and Aepiah"); break;
+        case 29101: strcpy(name, "Twin Angels (Water)"); break;
+        case 29102: strcpy(name, "Twin Angels (Fire)"); break;
+        case 29103: strcpy(name, "Twin Angels (Wind)"); break;
+        case 29104: strcpy(name, "Twin Angels (Light)"); break;
+        case 29201: strcpy(name, "게롤트(물) (Water)"); break;
+        case 29202: strcpy(name, "게롤트(불) (Fire)"); break;
+        case 29203: strcpy(name, "게롤트(바람) (Wind)"); break;
+        case 29204: strcpy(name, "게롤트(빛) (Light)"); break;
+        case 29205: strcpy(name, "게롤트(어둠) (Dark)"); break;
+        case 29211: strcpy(name, "Geralt (Water)"); break;
+        case 29212: strcpy(name, "Geralt (Fire)"); break;
+        case 29213: strcpy(name, "Geralt (Wind)"); break;
+        case 29214: strcpy(name, "Geralt (Light)"); break;
+        case 29215: strcpy(name, "Geralt (Dark)"); break;
+        case 29301: strcpy(name, "시리(물) (Water)"); break;
+        case 29302: strcpy(name, "시리(불) (Fire)"); break;
+        case 29303: strcpy(name, "시리(바람) (Wind)"); break;
+        case 29304: strcpy(name, "시리(빛) (Light)"); break;
+        case 29305: strcpy(name, "시리(어둠) (Dark)"); break;
+        case 29311: strcpy(name, "Ciri (Water)"); break;
+        case 29312: strcpy(name, "Ciri (Fire)"); break;
+        case 29313: strcpy(name, "Ciri (Wind)"); break;
+        case 29314: strcpy(name, "Ciri (Light)"); break;
+        case 29315: strcpy(name, "Ciri (Dark)"); break;
+        case 29401: strcpy(name, "예니퍼(물) (Water)"); break;
+        case 29402: strcpy(name, "예니퍼(불) (Fire)"); break;
+        case 29403: strcpy(name, "예니퍼(바람) (Wind)"); break;
+        case 29404: strcpy(name, "예니퍼(빛) (Light)"); break;
+        case 29405: strcpy(name, "예니퍼(어둠) (Dark)"); break;
+        case 29411: strcpy(name, "Yennefer (Water)"); break;
+        case 29412: strcpy(name, "Yennefer (Fire)"); break;
+        case 29413: strcpy(name, "Yennefer (Wind)"); break;
+        case 29414: strcpy(name, "Yennefer (Light)"); break;
+        case 29415: strcpy(name, "Yennefer (Dark)"); break;
+        case 29501: strcpy(name, "트리스(물) (Water)"); break;
+        case 29502: strcpy(name, "트리스(불) (Fire)"); break;
+        case 29503: strcpy(name, "트리스(바람) (Wind)"); break;
+        case 29504: strcpy(name, "트리스(빛) (Light)"); break;
+        case 29505: strcpy(name, "트리스(어둠) (Dark)"); break;
+        case 29511: strcpy(name, "Triss (Water)"); break;
+        case 29512: strcpy(name, "Triss (Fire)"); break;
+        case 29513: strcpy(name, "Triss (Wind)"); break;
+        case 29514: strcpy(name, "Triss (Light)"); break;
+        case 29515: strcpy(name, "Triss (Dark)"); break;
+        case 62606: strcpy(name, "Abyssal Ancient Punisher (Light)"); break;
+        case 73505: strcpy(name, "Fiend (Dark)"); break;
+        case 73602: strcpy(name, "Griffin (Fire)"); break;
+        case 73703: strcpy(name, "Leshen (Wind)"); break;
         default: strcpy(name, "UNKNOWN MONSTER");
     }
 }

+ 1 - 1
src/gui/runeoptimizer_gui/gui/DialogUpdateJson.py

@@ -77,7 +77,7 @@ class DialogUpdateJson(wx.Dialog):
         dialog_sizer.Add(self._form_sizer, 1, wx.ALIGN_CENTER|wx.ALL, 10)
         dialog_sizer.Add(self._progress_sizer, 1, wx.ALIGN_CENTER|wx.ALL, 10)
         dialog_sizer.Add(self._message_sizer, 1, wx.ALIGN_CENTER|wx.ALL, 10)
-        dialog_sizer.Add(self._button_sizer, 1, wx.EXPAND|wx.ALIGN_CENTER|wx.ALL, 10)
+        dialog_sizer.Add(self._button_sizer, 1, wx.EXPAND|wx.ALL, 10)
 
         self._form_sizer.Add(
           wx.StaticText(self,label="Select a JSON file:"), 0

+ 6 - 5
src/gui/runeoptimizer_gui/gui/PanelOptimizer.py

@@ -97,10 +97,11 @@ class PanelOptimizer(wx.Panel):
         )
 
         set_names = [
-          "",        "ENERGY ", "GUARD  ", "SWIFT  ", "BLADE  ", "RAGE   ",
-          "FOCUS  ", "ENDURE ", "FATAL  ", "DESPAIR", "VAMPIRE",
-          "VIOLENT", "NEMESIS", "WILL   ", "SHIELD ", "REVENGE", "DESTROY",
-          "FIGHT  ", "DETERMI", "ENHANCE", "ACCURAC", "TOLERAN"
+          "",          "ENERGY ", "GUARD  ", "SWIFT  ", "BLADE  ", "RAGE   ",
+          "FOCUS  ",   "ENDURE ", "FATAL  ", "DESPAIR", "VAMPIRE",
+          "VIOLENT",   "NEMESIS", "WILL   ", "SHIELD ", "REVENGE", "DESTROY",
+          "FIGHT  ",   "DETERMI", "ENHANCE", "ACCURAC", "TOLERAN", "SEAL",
+          "INTANGIBLE"
         ]
         stat_names = [
           "HP  ", "HP% ", "ATK ", "ATK%", "DEF ", "DEF%",
@@ -442,7 +443,7 @@ class PanelOptimizer(wx.Panel):
         self._progress_sizer.Add(
           self._progress_gauge, 1, wx.EXPAND|wx.BOTTOM, 20
         )
-        self._progress_label = wx.StaticText(self, size=(300, 25))
+        self._progress_label = wx.StaticText(self, size=(300, 55))
         self._progress_sizer.Add(
           self._progress_label, 0, wx.ALIGN_CENTRE|wx.LEFT, 20
         )

+ 1 - 1
src/gui/runeoptimizer_gui/gui/PanelTeams.py

@@ -335,7 +335,7 @@ class PanelTeams(wx.Panel):
 
         """
         message = "Are you sure you want to delete the team " + \
-          self._team_selected.name + "?\n\nThis can't be undone."
+          self._selected_team.name + "?\n\nThis can't be undone."
         with DialogConfirm(parent=self, message=message) as dlg:
             if dlg.ShowModal() == wx.ID_OK:
                 ret = runeoptimizer.run(

+ 5 - 4
src/gui/runeoptimizer_gui/values/values.py

@@ -41,10 +41,11 @@ STAT_NAMES = [
 
 # Rune set names, indexed with Com2Us values.
 SET_NAMES = [
-  "NULL",    "ENERGY",  "GUARD",    "SWIFT",   "BLADE",    "RAGE",     #  0- 5
-  "FOCUS",   "ENDURE",  "FATAL",    "NULL",    "DESPAIR",  "VAMPIRE",  #  6-11
-  "NULL",    "VIOLENT", "NEMESIS",  "WILL",    "SHIELD",   "REVENGE",  # 12-17
-  "DESTROY", "FIGHT",   "DETERMIN", "ENHANCE", "ACCURACY", "TOLERANCE" # 18-23
+  "NULL",    "ENERGY",    "GUARD",    "SWIFT",   "BLADE",    "RAGE",      #  0- 5
+  "FOCUS",   "ENDURE",    "FATAL",    "NULL",    "DESPAIR",  "VAMPIRE",   #  6-11
+  "NULL",    "VIOLENT",   "NEMESIS",  "WILL",    "SHIELD",   "REVENGE",   # 12-17
+  "DESTROY", "FIGHT",     "DETERMIN", "ENHANCE", "ACCURACY", "TOLERANCE", # 18-23
+  "SEAL",    "INTANGIBLE"
 ]
 
 # TODO: Work in progress...