ff7tk  1.2.0.13
Work with Final Fantasy 7 game data
FF7Materia.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: 2012 - 2023 Chris Rizzitello <sithlord48@gmail.com>
2 // SPDX-License-Identifier: LGPL-3.0-or-later
3 
4 #pragma once
5 
6 #include <QObject>
7 #include <QIcon>
8 #include <QtEndian>
9 #if QT_VERSION < QT_VERSION_CHECK(6, 5, 0)
10 #include <QtQml/qqmlapplicationengine.h>
11 #else
12 #include <QtQmlIntegration/QtQmlIntegration>
13 #endif
14 
15 #include <ff7tkdata_export.h>
16 #include <Type_materia>
17 
18 
19 class FF7TKDATA_EXPORT FF7Materia : public QObject
20 {
21  friend class FF7MateriaSingleton; // Class used for QML export
22 
23  Q_OBJECT
24  QML_ELEMENT
25  QML_SINGLETON
26  Q_PROPERTY(int totalMateria MEMBER TotalMateria CONSTANT)
27  Q_PROPERTY(int maxMateriaAp MEMBER MaxMateriaAp CONSTANT)
28 public:
32  static const int TotalMateria = 90;
33 
37  static const int MaxMateriaAp = 0xFFFFFF;
38 
42  enum MateriaType {
43  AllMaterias
44  , Magic
45  , Summon
46  , Independent
47  , Support
48  , Command
49  };
50  Q_ENUM(MateriaType)
51 
52 
55  enum MateriaName {
56  MpPlus = 0x00, HpPlus = 0x01, SpeedPlus = 0x02, MagicPlus = 0x03, LuckPlus = 0x04, ExpPlus = 0x05, GilPlus = 0x06, EnemyAway = 0x07, EnemyLure = 0x08, ChocoboLure = 0x09, PreEmptive = 0x0A, LongRange = 0x0B, MegaAll = 0x0C, CounterAttack = 0x0D, SlashAll = 0x0E, DoubleCut = 0x0F
57  , Cover = 0x10, Underwater = 0x11, HPMP = 0x12, WMagic = 0x13, WSummon = 0x14, WItem = 0x15, All = 0x17, Counter = 0x18, MagicCounter = 0x19, MpTurbo = 0x1A, MpAbsorb = 0x1B, HpAbsorb = 0x1C, Elemental = 0x1D, AddedEffect = 0x1E, SneakAttack = 0x1F
58  , FinalAttack = 0x20, AddedCut = 0x21, StealAsWell = 0x22, QuadraMagic = 0x23, Steal = 0x24, Sense = 0x25, Throw = 0x27, Morph = 0x28, Deathblow = 0x29, Manipulate = 0x2A, Mime = 0x2B, EnemySkill = 0x2C
59  , MasterCommand = 0x30, Fire = 0x31, Ice = 0x32, Earth = 0x33, Lightning = 0x34, Restore = 0x35, Heal = 0x36, Revive = 0x37, Seal = 0x38, Mystify = 0x39, Transform = 0x3A, Exit = 0x3B, Poison = 0x3C, Demi = 0x3D, Barrier = 0x3E
60  , Comet = 0x40, Time = 0x41, Destruct = 0x44, Contain = 0x45, FullCure = 0x46, Shield = 0x47, Ultima = 0x48, MasterMagic = 0x49, ChocoMog = 0x4A, Shiva = 0x4B, Ifrit = 0x4C, Ramuh = 0x4D, Titan = 0x4E, Odin = 0x4F
61  , Leviathan = 0x50, Bahamut = 0x51, Kujata = 0x52, Alexander = 0x53, Phoenix = 0x54, NeoBahamut = 0x55, Hades = 0x56, Typhoon = 0x57, BahamutZERO = 0x58, KOTR = 0x59, MasterSummon = 0x5A
62  , EmptyId = 0xFF
63  };
64  Q_ENUM(MateriaName)
65 
66 
71  Q_INVOKABLE static const QString name(const int id) { return isModID(id) ? QStringLiteral("ID: %1").arg(id) : tr(Materias(id).name.toUtf8()); }
72 
78  Q_INVOKABLE static const QString statString(const int id) { return isModID(id) ? QString() : tr(Materias(id).stats.toUtf8()); }
79 
85  Q_INVOKABLE static const QString enemySkill(const int skill) {
86  return tr(get()->d->_enemySkills.at(std::clamp(skill, 0, int(get()->d->_enemySkills.size()) -1)).toUtf8());
87  }
88 
94  Q_INVOKABLE static const QString masterCommandSkill(const int skill) {
95  return tr(get()->d->_masterCommandList.at(std::clamp(skill, 0, int(get()->d->_masterCommandList.size()) -1)).toUtf8());
96  }
97 
103  Q_INVOKABLE static const QString masterSummonSkill(const int skill) {
104  return tr(get()->d->_masterSummonList.at(std::clamp(skill, 0, int(get()->d->_masterSummonList.size()) -1)).toUtf8());
105  }
106 
112  Q_INVOKABLE static const QString masterMagicSkill(const int skill) {
113  return tr(get()->d->_masterMagicList.at(std::clamp(skill, 0, int(get()->d->_masterMagicList.size()) -1)).toUtf8());
114  }
115 
121  Q_INVOKABLE static const QString element(const int id) {
122  return (id > FF7Materia::TotalMateria) ? QString() : tr(Materias(id).elemental.toUtf8());
123  }
124 
130  Q_INVOKABLE static const QStringList skills(const int id) {
131  QStringList translated_list;
132  if ( id > FF7Materia::TotalMateria) {
133  translated_list.append(QString());
134  return translated_list;
135  }
136  const auto list = id == EnemySkill ? get()->d->_enemySkills : Materias(id).skills;
137  for(const QString &skill : list)
138  translated_list.append(tr(skill.toUtf8()));
139  return translated_list;
140  }
141 
148  Q_INVOKABLE static const QStringList skillsForLevel(const int id, const int level) {
149  if(id > FF7Materia::TotalMateria)
150  return QStringList();
151 
152  if ( id == MasterCommand || id == MasterSummon || id == MasterMagic)
153  return skills(id);
154 
155  if ( id != EnemySkill)
156  return skills(id).mid(0, std::clamp<int>(level, 0 , levels(id)));
157 
158  QStringList eSkills;
159  for (int i = 0; i < 24; i++) {
160  if (level & (1 << i))
161  eSkills.append(get()->d->_enemySkills.at(i));
162  }
163  return eSkills;
164  }
165 
171  Q_INVOKABLE static const QStringList addedEffects (const int id) {
172  QStringList translated_list;
173  if (isModID(id)) {
174  translated_list.append(QString());
175  return translated_list;
176  }
177  for(const QString& stat : Materias(id).status)
178  translated_list.append(tr(stat.toUtf8()));
179  return translated_list;
180  }
181 
187  Q_INVOKABLE static const qint8 levels(const int id) { return (id > FF7Materia::TotalMateria) ? 1 : Materias(id).levels; }
188 
195  Q_INVOKABLE static const int materiaLevel(const int id, const quint32 ap) {
196  int level = 0;
197  if (isModID(id))
198  return level;
199  if ( id == EnemySkill)
200  return ap;
201  for(int i = 0; i < levels(id); i++) {
202  if( ap >= apForLevel(id, i))
203  level++;
204  }
205  return level;
206  }
207 
214  Q_INVOKABLE static const qint32 apForLevel(const int id, const int level) {return FF7Materia::levels(id) <= 1 ? MaxMateriaAp : Materias(id).ap.at(std::clamp(level, 0, 4)); }
215 
221  Q_INVOKABLE static const qint32 apToMax(const int id) { return isModID(id) ? FF7Materia::MaxMateriaAp : Materias(id).ap.at(std::max(Materias(id).levels -1, 0)); }
222 
223 
229  Q_INVOKABLE static const qint8 strengthChange(const int id) { return isModID(id) ? 0 : Materias(id).str; }
230 
236  Q_INVOKABLE static const qint8 vitalityChange(const int id) { return isModID(id) ? 0 : Materias(id).vit; }
237 
243  Q_INVOKABLE static const qint8 magicChange(const int id) { return isModID(id) ? 0 : Materias(id).mag; }
244 
245 
251  Q_INVOKABLE static const qint8 spiritChange(const int id) { return isModID(id) ? 0 : Materias(id).spi; }
252 
253 
259  Q_INVOKABLE static const qint8 dexterityChange(const int id) { return isModID(id) ? 0 : Materias(id).dex; }
260 
266  Q_INVOKABLE static const qint8 luckChange(const int id) { return isModID(id) ? 0 : Materias(id).lck; }
267 
273  Q_INVOKABLE static const qint8 hpChange(const int id) { return isModID(id) ? 0 : Materias(id).hp; }
274 
280  Q_INVOKABLE static const qint8 mpChange(const int id) { return isModID(id) ? 0 : Materias(id).mp; }
281 
287  Q_INVOKABLE static const int type(const int id) { return isModID(id) ? 0 : Materias(id).type; }
288 
295  Q_INVOKABLE static materia encodeMateria(const int id, const qint32 ap) {
296  materia temp;
297  const int aptmp = qToLittleEndian(ap);
298  if ( (id >= 0 ) && (id != FF7Materia::EmptyId ) && ((aptmp >= 0) && (aptmp <= MaxMateriaAp))) {
299  temp.id = id;
300  temp.ap[0] = (aptmp & 0xff);
301  temp.ap[1] = (aptmp & 0xff00) >> 8;
302  temp.ap[2] = (aptmp & 0xff0000) >> 16;
303  } else {
304  temp.id = FF7Materia::EmptyId;
305  temp.ap[0] = 0xFF;
306  temp.ap[1] = 0xFF;
307  temp.ap[2] = 0xFF;
308  }
309  return temp;
310  }
311 
317  Q_INVOKABLE static const int materiaID(materia mat) { return mat.id; }
318 
327  Q_INVOKABLE static const qint32 materiaAP(const quint8 ap1 , const quint8 ap2, const quint8 ap3) { return qFromLittleEndian( qint32(ap1 | (ap2 << 8) | (ap3 << 16))); }
328 
335  Q_INVOKABLE static const qint32 materiaAP(const materia mat) { return materiaAP(mat.ap[0], mat.ap[1], mat.ap[2]); }
336 
343  Q_INVOKABLE static const qint32 materiaAP(const quint8 ap[3]) { return materiaAP(ap[0], ap[1], ap[2]); }
344 
345 
346  //Image Functions
347  static const QIcon icon(const int id) { return isModID(id) ? iconAllMateria() : QIcon(QPixmap(Materias(id).imageString)); }
348  static const QPixmap pixmap(const int id) { return isModID(id) ? QPixmap(get()->d->_resourceAllMateria) : QPixmap(Materias(id).imageString); }
349  static const QImage image(const int id) { return isModID(id) ? imageAllMateria() : QImage(Materias(id).imageString); }
350  Q_INVOKABLE static const QString iconResource(const int id) {
351  if (isModID(id))
352  return imageAllResource();
353  auto tmp = Materias(id).imageString;
354  return tmp.isEmpty() ? tmp : tmp.prepend(QStringLiteral("qrc"));
355  }
356 
357  static const QPixmap pixmapEmptyStar(int id) { return isModID(id) ? QPixmap() : QPixmap(Materias(id).emptyStarString); }
358  static const QImage imageEmptyStar(int id) { return isModID(id) ? QImage() : QImage(Materias(id).emptyStarString); }
359  Q_INVOKABLE static const QString emptyStarResource(int id) {
360  auto tmp = Materias(id).emptyStarString;
361  return tmp.isEmpty() ? tmp : tmp.prepend(QStringLiteral("qrc"));
362  }
363 
364  static const QPixmap pixmapFullStar(int id) { return isModID(id) ? QPixmap() : QPixmap(Materias(id).fullStarString); }
365  static const QImage imageFullStar(int id) { return isModID(id) ? QImage() : QImage(Materias(id).fullStarString); }
366  Q_INVOKABLE static const QString fullStarResource(int id) {
367  auto tmp = Materias(id).fullStarString;
368  return tmp.isEmpty() ? tmp : tmp.prepend(QStringLiteral("qrc"));
369  }
370 
371  static const QIcon iconAllMateria() { return QIcon(QPixmap(get()->d->_resourceAllMateria)); }
372  static const QImage imageAllMateria() { return QImage(get()->d->_resourceAllMateria); }
373  Q_INVOKABLE static const QString imageAllResource() { return get()->d->_resourceAllMateria.mid(0).prepend(QStringLiteral("qrc")); }
374 
375  Q_INVOKABLE static const QString &placeHolderNameFilter() {return get()->d->_placeHolderFilter;}
376 
377  Q_INVOKABLE static const QList<int> placeHolderIdList() {
378  QList<int> phList;
379  for (const MATERIA &m : get()->d->_materiaList) {
380  if(m.name.startsWith(get()->d->_placeHolderFilter))
381  phList.append(m.id);
382  }
383  for (int i = 91; i < FF7Materia::EmptyId; i++)
384  phList.append(i);
385  return phList;
386  }
387 
393  static bool isModID(int id) { return id > FF7Materia::TotalMateria && id != FF7Materia::EmptyId; }
394 
395 protected:
399  static FF7Materia *get() {
400  static FF7Materia m;
401  return &m;
402  };
403 
404 
405 private:
406  FF7Materia *operator = (FF7Materia &other) = delete;
407  FF7Materia(const FF7Materia &other) = delete;
408  explicit FF7Materia(QObject *parent = nullptr) : QObject(parent), d(new FF7MateriaPrivate()){ };
409  ~FF7Materia() { delete d; }
410 
416  static const int idClamp(const int id = 0xFF) { return (id == 0xFF ) ? id : std::clamp(id, 0, 90); }
417 
421  struct MATERIA {
422  QString name;
423  QStringList skills;
424  QString stats;
425  QString imageString;
426  QString emptyStarString;
427  QString fullStarString;
428  quint8 id;
429  qint8 hp;
430  qint8 mp;
431  qint8 str;
432  qint8 vit;
433  qint8 dex;
434  qint8 lck;
435  qint8 mag;
436  qint8 spi;
437  QList<qint32> ap; //ap needed for levels.
438  qint8 type; //1-magic,2-summon,3-independent,4-support,5-command,0-unknown
439  qint8 levels;
440  QString elemental;
441  QStringList status;
442  };
443 
450  static const FF7Materia::MATERIA &Materias(int id) {
451  return (id == EmptyId) ? get()->d->_emptyMateria : get()->d->_materiaList.at(id);
452  }
453 
454  struct FF7MateriaPrivate;
455  FF7MateriaPrivate *d;
456  struct FF7MateriaPrivate {
457  inline static const auto _placeHolderFilter = QStringLiteral("ID:");
458  inline static const auto _resourceAllMateria = QStringLiteral(":/materia/all");
459  inline static const QStringList _masterCommandList{
460  QT_TR_NOOP("Skill: DeathBlow")
461  , QT_TR_NOOP("Skill: Manipulate")
462  , QT_TR_NOOP("Skill: Mime")
463  , QT_TR_NOOP("Skill: Throw")
464  , QT_TR_NOOP("Skill: Coin")
465  , QT_TR_NOOP("Skill: Steal")
466  , QT_TR_NOOP("Skill: Sense")
467  , QT_TR_NOOP("Skill: Morph")
468  };
469 
470  inline static const QStringList _masterSummonList{
471  QT_TR_NOOP("Choco/Mog (14mp)")
472  , QT_TR_NOOP("Shiva (32mp)")
473  , QT_TR_NOOP("Ifrit (34mp)")
474  , QT_TR_NOOP("Ramuh (40mp)")
475  , QT_TR_NOOP("Titan (46mp)")
476  , QT_TR_NOOP("Odin (80mp)")
477  , QT_TR_NOOP("Leviathan (78mp)")
478  , QT_TR_NOOP("Bahamut (100mp)")
479  , QT_TR_NOOP("Kujata (110mp)")
480  , QT_TR_NOOP("Alexander (120mp)")
481  , QT_TR_NOOP("Phoenix (180mp)")
482  , QT_TR_NOOP("Neo Bahamut (140mp)")
483  , QT_TR_NOOP("Hades (150mp)")
484  , QT_TR_NOOP("Typhon (160mp)")
485  , QT_TR_NOOP("Bahamut ZERO (180mp)")
486  , QT_TR_NOOP("Knights Of The Round (250mp)")
487  };
488 
489  inline static const QStringList _masterMagicList{
490  QT_TR_NOOP("Cure (5mp)")
491  , QT_TR_NOOP("Cure2 (24mp)")
492  , QT_TR_NOOP("Regen (30mp)")
493  , QT_TR_NOOP("Cure3 (64mp)")
494  , QT_TR_NOOP("Life (34mp)")
495  , QT_TR_NOOP("Life2 (100mp)")
496  , QT_TR_NOOP("Poisona (3mp)")
497  , QT_TR_NOOP("Esuna (15mp)")
498  , QT_TR_NOOP("Resist (120mp)")
499  , QT_TR_NOOP("Haste (18mp)")
500  , QT_TR_NOOP("Slow (20mp)")
501  , QT_TR_NOOP("Stop (34mp)")
502  , QT_TR_NOOP("Barrier (16mp)")
503  , QT_TR_NOOP("M-Barrier (24mp)")
504  , QT_TR_NOOP("Reflect (30mp)")
505  , QT_TR_NOOP("Wall (58mp)")
506  , QT_TR_NOOP("DeBarrier (12mp)")
507  , QT_TR_NOOP("DeSpell (20mp)")
508  , QT_TR_NOOP("Death (30mp)")
509  , QT_TR_NOOP("Sleepel (8mp)")
510  , QT_TR_NOOP("Silence (24mp)")
511  , QT_TR_NOOP("Confu (18mp)")
512  , QT_TR_NOOP("Berserk (28mp)")
513  , QT_TR_NOOP("Mini (10mp)")
514  , QT_TR_NOOP("Toad (14mp)")
515  , QT_TR_NOOP("Exit (16mp)")
516  , QT_TR_NOOP("Remove (99mp)")
517  , QT_TR_NOOP("Fire (4mp)")
518  , QT_TR_NOOP("Fire2 (22mp)")
519  , QT_TR_NOOP("Fire3 (52mp)")
520  , QT_TR_NOOP("Ice (4mp)")
521  , QT_TR_NOOP("Ice2 (22mp)")
522  , QT_TR_NOOP("Ice3 (52mp)")
523  , QT_TR_NOOP("Quake (6mp)")
524  , QT_TR_NOOP("Quake2 (28mp)")
525  , QT_TR_NOOP("Quake3 (68mp)")
526  , QT_TR_NOOP("Bolt (4mp)")
527  , QT_TR_NOOP("Bolt2 (22mp)")
528  , QT_TR_NOOP("Bolt3 (52mp)")
529  , QT_TR_NOOP("Bio (8mp)")
530  , QT_TR_NOOP("Bio2 (36mp)")
531  , QT_TR_NOOP("Bio3 (80mp)")
532  , QT_TR_NOOP("Demi (14mp)")
533  , QT_TR_NOOP("Demi2 (33mp)")
534  , QT_TR_NOOP("Demi3 (48mp)")
535  , QT_TR_NOOP("Comet (70mp)")
536  , QT_TR_NOOP("Comet2 (110mp)")
537  , QT_TR_NOOP("Freeze (82mp)")
538  , QT_TR_NOOP("Break (86mp)")
539  , QT_TR_NOOP("Tornado (90mp)")
540  , QT_TR_NOOP("Flare (100mp)")
541  , QT_TR_NOOP("Full Cure (99mp)")
542  , QT_TR_NOOP("Shield (180mp)")
543  , QT_TR_NOOP("Ultima (130mp)")
544  };
545 
546  inline static const QStringList _enemySkills{
547  QT_TR_NOOP("Frog Song")
548  , QT_TR_NOOP("L4 Suicide")
549  , QT_TR_NOOP("Magic Hammer")
550  , QT_TR_NOOP("White Wind")
551  , QT_TR_NOOP("Big Guard")
552  , QT_TR_NOOP("Angel Whisper")
553  , QT_TR_NOOP("Dragon Force")
554  , QT_TR_NOOP("Death Force")
555  , QT_TR_NOOP("Flame Thrower")
556  , QT_TR_NOOP("Laser")
557  , QT_TR_NOOP("Matra Magic")
558  , QT_TR_NOOP("Bad Breath")
559  , QT_TR_NOOP("Beta")
560  , QT_TR_NOOP("Aqualung")
561  , QT_TR_NOOP("Trine")
562  , QT_TR_NOOP("Magic Breath")
563  , QT_TR_NOOP("????")
564  , QT_TR_NOOP("Goblin Punch")
565  , QT_TR_NOOP("Chocobuckle")
566  , QT_TR_NOOP("L5 Death")
567  , QT_TR_NOOP("Death Sentence")
568  , QT_TR_NOOP("Roulette")
569  , QT_TR_NOOP("Shadow Flare")
570  , QT_TR_NOOP("Pandora's Box")
571  };
572 
573  inline static const MATERIA _emptyMateria{
574  QT_TR_NOOP("EMPTY")
575  , {/* NO SKILLS */}
576  , QStringLiteral("ID:0xFF"), QString(), QString(), QString()
577  , 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0, QString(), {QString()}
578  };
579  inline static const QList<MATERIA> _materiaList{
580  {
581  QT_TR_NOOP("MP Plus")
582  , {QT_TR_NOOP("MP Plus +10%"), QT_TR_NOOP("MP Plus +20%"), QT_TR_NOOP("MP Plus +30%"), QT_TR_NOOP("MP Plus +40%"), QT_TR_NOOP("MP Plus +50%")}
583  , QT_TR_NOOP("MaxMp:+% depending on level"), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
584  , 0x00, 0, 0, 0, 0, 0, 0, 0, 0, {0, 10000, 20000, 30000, 50000}, 3, 5, QString(), {QString()}
585  },
586  { QT_TR_NOOP("HP Plus")
587  , {QT_TR_NOOP("HP Plus +10%"), QT_TR_NOOP("HP Plus +20%"), QT_TR_NOOP("HP Plus +30%"), QT_TR_NOOP("HP Plus +40%"), QT_TR_NOOP("HP Plus +50%")}
588  , QT_TR_NOOP("MaxHp:+% depending on level"), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
589  , 0x01, 0, 0, 0, 0, 0, 0, 0, 0, {0, 10000, 20000, 30000, 50000}, 3, 5, QString(), {QString()}
590  },
591  {
592  QT_TR_NOOP("Speed Plus")
593  , {QT_TR_NOOP("Speed Plus +10%"), QT_TR_NOOP("Speed Plus +20%"), QT_TR_NOOP("Speed Plus +30%"), QT_TR_NOOP("Speed Plus +40%"), QT_TR_NOOP("Speed Plus +50%")}
594  , QT_TR_NOOP("Dex:+% depending on level"), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
595  , 0x02, 0, 0, 0, 0, 0, 0, 0, 0, {0, 15000, 30000, 60000, 100000}, 3, 5, QString(), {QString()}
596  },
597  {
598  QT_TR_NOOP("Magic Plus")
599  , {QT_TR_NOOP("Magic Plus +10%"), QT_TR_NOOP("Magic Plus +20%"), QT_TR_NOOP("Magic Plus +30%"), QT_TR_NOOP("Magic Plus +40%"), QT_TR_NOOP("Magic Plus +50%")}
600  , QT_TR_NOOP("Mag:+% depending on level"), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
601  , 0x03, 0, 0, 0, 0, 0, 0, 0, 0, {0, 10000, 20000, 30000, 50000}, 3, 5, QString(), {QString()}
602  },
603  {
604  QT_TR_NOOP("Luck Plus")
605  , {QT_TR_NOOP("Luck Plus +10%"), QT_TR_NOOP("Luck Plus +20%"), QT_TR_NOOP("Luck Plus +30%"), QT_TR_NOOP("Luck Plus +40%"), QT_TR_NOOP("Luck Plus +50%")}
606  , QT_TR_NOOP("Lck:+% depending on level"), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
607  , 0x04, 0, 0, 0, 0, 0, 0, 0, 0, {0, 15000, 30000, 60000, 100000}, 3, 5, QString(), {QString()}
608  },
609  {
610  QT_TR_NOOP("EXP Plus")
611  , {QT_TR_NOOP("Exp Plus +50%"), QT_TR_NOOP("Exp Plus +100%")}
612  , QT_TR_NOOP("Lck:+1"), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
613  , 0x05, 0, 0, 0, 0, 0, +1, 0, 0, {0, 60000, 150000, 0, 0}, 3, 3, QString(), {QString()}
614  },
615  {
616  QT_TR_NOOP("Gil Plus")
617  , {QT_TR_NOOP("Gil Plus +50%"), QT_TR_NOOP("Gil Plus +100%")}
618  , QT_TR_NOOP("Lck:+1"), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
619  , 0x06, 0, 0, 0, 0, 0, +1, 0, 0, {0, 80000, 150000, 0, 0}, 3, 3, QString(), {QString()}
620  },
621  {
622  QT_TR_NOOP("Enemy Away")
623  , {QT_TR_NOOP("Encounter Rate -50%"), QT_TR_NOOP("Encounter Rate -75%")}
624  , QT_TR_NOOP("Lck:+1"), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
625  , 0x07, 0, 0, 0, 0, 0, +1, 0, 0, {0, 10000, 50000, 0, 0}, 3, 3, QString(), {QString()}
626  },
627  {
628  QT_TR_NOOP("Enemy Lure")
629  , {QT_TR_NOOP("Encounter Rate +50%"), QT_TR_NOOP("Encounter Rate +100%")}
630  , QT_TR_NOOP("Lck:-1"), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
631  , 0x08, 0, 0, 0, 0, 0, -1, 0, 0, {0, 10000, 50000, 0, 0}, 3, 3, QString(), {QString()}
632  },
633  {
634  QT_TR_NOOP("Chocobo Lure")
635  , {QT_TR_NOOP("Chocobo Lure"), QT_TR_NOOP("Chocobo Lure +50%"), QT_TR_NOOP("Chocobo Lure +100%"), QT_TR_NOOP("Chocobo Lure +200%")}
636  , QT_TR_NOOP("Lck:+1"), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
637  , 0x09, 0, 0, 0, 0, 0, +1, 0, 0, {0, 3000, 10000, 30000, 0}, 3, 4, QString(), {QString()}
638  },
639  {
640  QT_TR_NOOP("Pre-emptive")
641  , {QT_TR_NOOP("Pre-emptive +6%"), QT_TR_NOOP("Pre-emptive +12%"), QT_TR_NOOP("Pre-emptive +24%"), QT_TR_NOOP("Pre-emptive +36%"), QT_TR_NOOP("Pre-emptive +48%")}
642  , QT_TR_NOOP("Dex:+2"), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
643  , 0x0A, 0, 0, 0, 0, +2, 0, 0, 0, {0, 8000, 20000, 40000, 80000}, 3, 5, QString(), {QString()}
644  },
645  {
646  QT_TR_NOOP("Long Range")
647  , {QT_TR_NOOP("Long Range")}
648  , QString(), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
649  , 0x0B, 0, 0, 0, 0, 0, 0, 0, 0, {0, 80000, 0, 0, 0}, 3, 2, QString(), {QString()}
650  },
651  {
652  QT_TR_NOOP("Mega All")
653  , {QT_TR_NOOP("Mega-all x1"), QT_TR_NOOP("Mega-all x2"), QT_TR_NOOP("Mega-all x3"), QT_TR_NOOP("Mega-all x4"), QT_TR_NOOP("Mega-all x5")}
654  , QString(), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
655  , 0x0C, 0, 0, 0, 0, 0, 0, 0, 0, {0, 20000, 40000, 80000, 160000}, 3, 5, QString(), {QString()}
656  },
657  {
658  QT_TR_NOOP("Counter Attack")
659  ,{QT_TR_NOOP("Counter Attack 20%"), QT_TR_NOOP("Counter Attack 40%"), QT_TR_NOOP("Counter Attack 60%"), QT_TR_NOOP("Counter Attack 80%"), QT_TR_NOOP("Counter Attack 100%")}
660  , QString(), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
661  , 0x0D, 0, 0, 0, 0, 0, 0, 0, 0, {0, 10000, 20000, 50000, 100000}, 3, 5, QString(), {QString()}
662  },
663  {
664  QT_TR_NOOP("Slash-All")
665  , {QT_TR_NOOP("Skill: Slash-All"), QT_TR_NOOP("Skill: Flash")}
666  , QString(), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
667  , 0x0E, 0, 0, 0, 0, 0, 0, 0, 0, {0, 130000, 150000, 0, 0}, 5, 3, QString(), {QString()}
668  },
669  {
670  QT_TR_NOOP("Double Cut")
671  , {QT_TR_NOOP("Skill: 2x-Cut"), QT_TR_NOOP("Skill: 4x-Cut")}
672  , QT_TR_NOOP("Dex:+2"), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
673  , 0x0F, 0, 0, 0, 0, +2, 0, 0, 0, {0, 100000, 150000, 0, 0}, 5, 3, QString(), {QString()}
674  },
675  {
676  QT_TR_NOOP("Cover")
677  , {QT_TR_NOOP("Cover +20%"), QT_TR_NOOP("Cover +40%"), QT_TR_NOOP("Cover +60%"), QT_TR_NOOP("Cover +80%"), QT_TR_NOOP("Cover +100%")}
678  , QT_TR_NOOP("Vit:+1"), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
679  , 0x10, 0, 0, 0, +1, 0, 0, 0, 0, {0, 2000, 10000, 25000, 40000}, 3, 5, QString(), {QString()}
680  },
681  {
682  QT_TR_NOOP("Underwater")
683  , {QT_TR_NOOP("Underwater")}
684  , QString(), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
685  , 0x11, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 3, 1, QString(), {QString()}
686  },
687  {
688  QT_TR_NOOP("HP <-> MP")
689  , {QT_TR_NOOP("HP <-> MP")}
690  , QString(), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
691  , 0x12, 0, 0, 0, 0, 0, 0, 0, 0, {0, 80000, 0, 0, 0}, 3, 2, QString(), {QString()}
692  },
693  {
694  QT_TR_NOOP("W-Magic")
695  , {QT_TR_NOOP("Skill: W-Magic")}
696  , QString(), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
697  , 0x13, 0, 0, 0, 0, 0, 0, 0, 0, {0, 250000, 0, 0, 0}, 5, 2, QString(), {QString()}
698  },
699  {
700  QT_TR_NOOP("W-Summon")
701  , {QT_TR_NOOP("Skill: W-Summon")}
702  , QString(), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
703  , 0x14, 0, 0, 0, 0, 0, 0, 0, 0, {0, 250000, 0, 0, 0}, 5, 2, QString(), {QString()}
704  },
705  {
706  QT_TR_NOOP("W-Item")
707  , {QT_TR_NOOP("Skill: W-Item")}
708  , QString(), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
709  , 0x15, 0, 0, 0, 0, 0, 0, 0, 0, {0, 250000, 0, 0, 0}, 5, 2, QString(), {QString()}
710  },
711  {
712  QStringLiteral("ID:0x16")
713  , {/* NO SKILLS */}
714  , QStringLiteral("ID:0x16"), QStringLiteral(":/materia/all"), QString(), QString()
715  , 0X16, 0, 0, 0, 0, 0, 0, 0, 0, {0xFFFFFF, 0, 0, 0, 0}, 0, 0, QString(), {QString()}
716  },
717  {
718  QT_TR_NOOP("All")
719  , {QT_TR_NOOP("All x1"), QT_TR_NOOP("All x2"), QT_TR_NOOP("All x3"), QT_TR_NOOP("All x4"), QT_TR_NOOP("All x5")}
720  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
721  , 0x17, 0, 0, 0, 0, 0, 0, 0, 0, {0, 1500, 6000, 18000, 35000}, 4, 5, QString(), {QString()}
722  },
723  {
724  QT_TR_NOOP("Counter")
725  , {QT_TR_NOOP("Counter Rate 20%"), QT_TR_NOOP("Counter Rate 40%"), QT_TR_NOOP("Counter Rate 60%"), QT_TR_NOOP("Counter Rate 80%"), QT_TR_NOOP("Counter Rate 100%")}
726  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
727  , 0x18, 0, 0, 0, 0, 0, 0, 0, 0, {0, 20000, 40000, 60000, 100000}, 4, 5, QString(), {QString()}
728  },
729  {
730  QT_TR_NOOP("Magic Counter")
731  , {QT_TR_NOOP("Magic Counter Rate 30%"), QT_TR_NOOP("Magic Counter Rate 40%"), QT_TR_NOOP("Magic Counter Rate 60%"), QT_TR_NOOP("Magic Counter Rate 80%"), QT_TR_NOOP("Magic Counter Rate 100%")}
732  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
733  , 0x19, 0, 0, 0, 0, 0, 0, 0, 0, {0, 20000, 40000, 80000, 300000}, 4, 5, QString(), {QString()}
734  },
735  {
736  QT_TR_NOOP("MP Turbo")
737  , {QT_TR_NOOP("MP Turbo 10%"), QT_TR_NOOP("MP Turbo 20%"), QT_TR_NOOP("MP Turbo 30%"), QT_TR_NOOP("MP Turbo 40%"), QT_TR_NOOP("MP Turbo 50%")}
738  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
739  , 0x1A, 0, 0, 0, 0, 0, 0, 0, 0, {0, 10000, 30000, 60000, 120000}, 4, 5, QString(), {QString()}
740  },
741  {
742  QT_TR_NOOP("MP Absorb")
743  , {QT_TR_NOOP("MP Absorb")}
744  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
745  , 0x1B, 0, 0, 0, 0, 0, 0, 0, 0, {0, 100000, 0, 0, 0}, 4, 2, QString(), {QString()}
746  },
747  {
748  QT_TR_NOOP("HP Absorb")
749  , {QT_TR_NOOP("HP Absorb")}
750  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
751  , 0x1C, 0, 0, 0, 0, 0, 0, 0, 0, {0, 100000, 0, 0, 0}, 4, 2, QString(), {QString()}
752  },
753  {
754  QT_TR_NOOP("Elemental")
755  , {QT_TR_NOOP("Elemental 50%"), QT_TR_NOOP("Elemental 100%"), QT_TR_NOOP("Elemental 200%")}
756  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
757  , 0x1D, 0, 0, 0, 0, 0, 0, 0, 0, {0, 10000, 40000, 80000, 0}, 4, 4, QString(), {QString()}
758  },
759  {
760  QT_TR_NOOP("Added Effect")
761  , {QT_TR_NOOP("Added Effect")}
762  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
763  , 0x1E, 0, 0, 0, 0, 0, 0, 0, 0, {0, 100000, 0, 0, 0}, 4, 2, QString(), {QString()}
764  },
765  {
766  QT_TR_NOOP("Sneak Attack")
767  , {QT_TR_NOOP("Sneak Attack 20%"), QT_TR_NOOP("Sneak Attack 35%"), QT_TR_NOOP("Sneak Attack 50%"), QT_TR_NOOP("Sneak Attack 65%"), QT_TR_NOOP("Sneak Attack 80%")}
768  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
769  , 0x1F, 0, 0, 0, 0, 0, 0, 0, 0, {0, 20000, 60000, 100000, 150000}, 4, 5, QString(), {QString()}
770  },
771  {
772  QT_TR_NOOP("Final Attack")
773  , {QT_TR_NOOP("Final Attack x1"), QT_TR_NOOP("Final Attack x2"), QT_TR_NOOP("Final Attack x3"), QT_TR_NOOP("Final Attack x4"), QT_TR_NOOP("Final Attack x5")}
774  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
775  , 0x20, 0, 0, 0, 0, 0, 0, 0, 0, {0, 20000, 40000, 80000, 160000}, 4, 5, QString(), {QString()}
776  },
777  {
778  QT_TR_NOOP("Added Cut")
779  , {QT_TR_NOOP("Added Cut")}
780  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
781  , 0x21, 0, 0, 0, 0, 0, 0, 0, 0, {0, 200000, 0, 0, 0}, 4, 2, QString(), {QString()}
782  },
783  {
784  QT_TR_NOOP("Steal-As-Well")
785  , {QT_TR_NOOP("Steal as well")}
786  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
787  , 0x22, 0, 0, 0, 0, 0, 0, 0, 0, {0, 200000, 0, 0, 0}, 4, 2, QString(), {QString()}
788  },
789  {
790  QT_TR_NOOP("Quadra Magic")
791  , {QT_TR_NOOP("Quadra Magic x1"), QT_TR_NOOP("Quadra Magic x2"), QT_TR_NOOP("Quadra Magic x3"), QT_TR_NOOP("Quadra Magic x4"), QT_TR_NOOP("Quadra Magic x5")}
792  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
793  , 0x23, 0, 0, 0, 0, 0, 0, 0, 0, {0, 40000, 80000, 120000, 200000}, 4, 5, QString(), {QString()}
794  },
795  {
796  QT_TR_NOOP("Steal")
797  , {QT_TR_NOOP("Skill: Steal"), QT_TR_NOOP("Skill: Mug")}
798  , QT_TR_NOOP("Dex:+2"), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
799  , 0x24, 0, 0, 0, 0, +2, 0, 0, 0, {0, 40000, 50000, 0, 0}, 5, 3, QString(), {QString()}
800  },
801  {
802  QT_TR_NOOP("Sense")
803  , {QT_TR_NOOP("Skill: Sense")}
804  , QString(), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
805  , 0x25, 0, 0, 0, 0, 0, 0, 0, 0, {0, 40000, 0, 0, 0}, 5, 2, QString(), {QString()}
806  },
807  {
808  QStringLiteral("ID:0x26")
809  , {/* NO SKILLS */}
810  , QStringLiteral("ID:0x26"), QStringLiteral(":/materia/all"), QString(), QString()
811  , 0X26, 0, 0, 0, 0, 0, 0, 0, 0, {0xFFFFFF, 0, 0, 0, 0}, 0, 0, QString(), {QString()}
812  },
813  {
814  QT_TR_NOOP("Throw")
815  , {QT_TR_NOOP("Skill: Throw"), QT_TR_NOOP("Skill: Coin")}
816  , QT_TR_NOOP("Vit:+1"), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
817  , 0x27, 0, 0, 0, +1, 0, 0, 0, 0, {0, 45000, 60000, 0, 0}, 5, 3, QString(), {QString()}
818  },
819  {
820  QT_TR_NOOP("Morph")
821  , {QT_TR_NOOP("Skill: Morph")}
822  , QString(), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
823  , 0x28, 0, 0, 0, 0, 0, 0, 0, 0, {0, 100000, 0, 0, 0}, 5, 2, QString(), {QString()}
824  },
825  {
826  QT_TR_NOOP("Deathblow")
827  , {QT_TR_NOOP("Skill: DeathBlow")}
828  , QT_TR_NOOP("Lck:+1"), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
829  , 0x29, 0, 0, 0, 0, 0, +1, 0, 0, {0, 40000, 0, 0, 0}, 5, 2, QString(), {QString()}
830  },
831  {
832  QT_TR_NOOP("Manipulate")
833  , {QT_TR_NOOP("Skill: Manipulate")}
834  , QString(), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
835  , 0x2A, 0, 0, 0, 0, 0, 0, 0, 0, {0, 40000, 0, 0, 0}, 5, 2, QString(), {QString()}
836  },
837  {
838  QT_TR_NOOP("Mime")
839  , {QT_TR_NOOP("Skill: Mime")}
840  , QString(), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
841  , 0x2B, 0, 0, 0, 0, 0, 0, 0, 0, {0, 100000, 0, 0, 0}, 5, 2, QString(), {QString()}
842  },
843  {
844  QT_TR_NOOP("Enemy Skill")
845  , {QT_TR_NOOP("Skill: Enemy Skill")}
846  , QString(), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
847  , 0x2C, 0, 0, 0, 0, 0, 0, 0, 0, {16777215, 0, 0, 0, 0}, 5, 1, QString(), {QString()}
848  },
849  {
850  QStringLiteral("ID:0x2D")
851  , {/* NO SKILLS */}
852  , QStringLiteral("ID:0x2D"), QStringLiteral(":/materia/all"), QString(), QString()
853  , 0X2D, 0, 0, 0, 0, 0, 0, 0, 0, {0xFFFFFF, 0, 0, 0, 0}, 0, 0, QString(), {QString()}
854  },
855  {
856  QStringLiteral("ID:0x2E")
857  , {/* NO SKILLS */}
858  , QStringLiteral("ID:0x2E"), QStringLiteral(":/materia/all"), QString(), QString()
859  , 0X2E, 0, 0, 0, 0, 0, 0, 0, 0, {0xFFFFFF, 0, 0, 0, 0}, 0, 0, QString(), {QString()}
860  },
861  {
862  QStringLiteral("ID:0x2F")
863  , {/* NO SKILLS */}
864  , QStringLiteral("ID:0x2F"), QStringLiteral(":/materia/all"), QString(), QString()
865  , 0X2F, 0, 0, 0, 0, 0, 0, 0, 0, {0xFFFFFF, 0, 0, 0, 0}, 0, 0, QString(), {QString()}
866  },
867  {
868  QT_TR_NOOP("Master Command")
869  , _masterCommandList
870  , QString(), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
871  , 0x30, 0, 0, 0, 0, 0, 0, 0, 0, {0xFFFFFF, 0, 0, 0, 0}, 5, 1, QString(), {QString()}
872  },
873  {
874  QT_TR_NOOP("Fire")
875  , {QT_TR_NOOP("Fire (4mp)"), QT_TR_NOOP("Fire2 (22mp)"), QT_TR_NOOP("Fire3 (52mp)")}
876  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Str:-1 Mag:+1"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
877  , 0x31, -2, +2, -1, 0, 0, 0, +1, 0, {0, 2000, 18000, 35000, 0}, 1, 4, QT_TR_NOOP("[Fire]"), {QString()}
878  },
879  {
880  QT_TR_NOOP("Ice")
881  , {QT_TR_NOOP("Ice (4mp)"), QT_TR_NOOP("Ice2 (22mp)"), QT_TR_NOOP("Ice3 (52mp)")}
882  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Str:-1 Mag:+1"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
883  , 0x32, -2, +2, -1, 0, 0, 0, +1, 0, {0, 2000, 18000, 35000, 0}, 1, 4, QT_TR_NOOP("[Ice]"), {QString()}
884  },
885  {
886  QT_TR_NOOP("Earth")
887  , {QT_TR_NOOP("Quake (6mp)"), QT_TR_NOOP("Quake2 (28mp)"), QT_TR_NOOP("Quake3 (68mp)")}
888  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Str:-1 Mag:+1"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
889  , 0x33, -2, +2, -1, 0, 0, 0, +1, 0, {0, 6000, 22000, 40000, 0}, 1, 4, QT_TR_NOOP("[Earth]"), {QString()}
890  },
891  {
892  QT_TR_NOOP("Lightning")
893  , {QT_TR_NOOP("Bolt (4mp)"), QT_TR_NOOP("Bolt2 (22mp)"), QT_TR_NOOP("Bolt3 (52mp)")}
894  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Str:-1 Mag:+1"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
895  , 0x34, -2, +2, -1, 0, 0, 0, +1, 0, {0, 2000, 18000, 35000, 0}, 1, 4, QT_TR_NOOP("[Lightning]"), {QString()}
896  },
897  {
898  QT_TR_NOOP("Restore")
899  , {QT_TR_NOOP("Cure (5mp)"), QT_TR_NOOP("Cure2 (24mp)"), QT_TR_NOOP("Regen (30mp)"), QT_TR_NOOP("Cure3 (64mp)")}
900  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Str:-1 Mag:+1"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
901  , 0x35, -2, +2, -1, 0, 0, 0, +1, 0, {0, 2500, 17000, 25000, 40000}, 1, 5, QString(), {QString()}
902  },
903  {
904  QT_TR_NOOP("Heal")
905  , {QT_TR_NOOP("Poisona (3mp)"), QT_TR_NOOP("Esuna (15mp)"), QT_TR_NOOP("Resist (120mp)")}
906  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Str:-1 Mag:+1"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
907  , 0x36, -2, +2, -1, 0, 0, 0, +1, 0, {0, 12000, 52000, 60000, 0}, 1, 4, QString(), {QString()}
908  },
909  {
910  QT_TR_NOOP("Revive")
911  , {QT_TR_NOOP("Life (34mp)"), QT_TR_NOOP("Life2 (100mp)")}
912  , QT_TR_NOOP("MaxHp:-5% MaxMp:+5% Str:-2 Vit:-1 Mag:+2 Spi:+1"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
913  , 0x37, -5, +5, -2, -1, 0, 0, +2, +1, {0, 45000, 55000, 0, 0}, 1, 3, QString(), {QString()}
914  },
915  {
916  QT_TR_NOOP("Seal")
917  , {QT_TR_NOOP("Sleepel (8mp)"), QT_TR_NOOP("Silence (24mp)")}
918  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Str:-1 Mag:+1"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
919  , 0x38, -2, +2, -1, 0, 0, 0, +1, 0, {0, 10000, 20000, 0, 0}, 1, 3, QString(), {QT_TR_NOOP("[Sleep]"), QT_TR_NOOP("[Silence]")}
920  },
921  {
922  QT_TR_NOOP("Mystify")
923  , {QT_TR_NOOP("Confu (18mp)"), QT_TR_NOOP("Berserk (28mp)")}
924  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Str:-1 Mag:+1"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
925  , 0x39, -2, +2, -1, 0, 0, 0, +1, 0, {0, 12000, 25000, 0, 0}, 1, 3, QString(), {QT_TR_NOOP("[Confusion]"), QT_TR_NOOP("[Berserk]")}
926  },
927  {
928  QT_TR_NOOP("Transform")
929  , {QT_TR_NOOP("Mini (10mp)"), QT_TR_NOOP("Toad (14mp)")}
930  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Str:-1 Mag:+1"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
931  , 0x3A, -2, +2, -1, 0, 0, 0, +1, 0, {0, 8000, 24000, 0, 0}, 1, 3, QString(), {QT_TR_NOOP("[Mini]"), QT_TR_NOOP("[Frog]")}
932  },
933  {
934  QT_TR_NOOP("Exit")
935  , {QT_TR_NOOP("Exit (16mp)"), QT_TR_NOOP("Remove (99mp)")}
936  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Str:-1 Mag:+1"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
937  , 0x3B, -2, +2, -1, 0, 0, 0, +1, 0, {0, 10000, 30000, 0, 0}, 1, 3, QString(), {QString()}
938  },
939  {
940  QT_TR_NOOP("Poison")
941  , {QT_TR_NOOP("Bio (8mp)"), QT_TR_NOOP("Bio2 (36mp)"), QT_TR_NOOP("Bio3 (80mp)")}
942  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Str:-1 Mag:+1"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
943  , 0x3C, -2, +2, -1, 0, 0, 0, +1, 0, {0, 5000, 20000, 38000, 0}, 1, 4, QT_TR_NOOP("[Poison]"), {QT_TR_NOOP("[Poison]")}
944  },
945  {
946  QT_TR_NOOP("Gravity")
947  , {QT_TR_NOOP("Demi (14mp)"), QT_TR_NOOP("Demi2 (33mp)"), QT_TR_NOOP("Demi3 (48mp)")}
948  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Str:-1 Mag:+1"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
949  , 0x3D, -2, +2, -1, 0, 0, 0, +1, 0, {0, 10000, 20000, 40000, 0}, 1, 4, QT_TR_NOOP("[Gravity]"), {QString()}
950  },
951  {
952  QT_TR_NOOP("Barrier")
953  , {QT_TR_NOOP("Barrier (16mp)"), QT_TR_NOOP("M-Barrier (24mp)"), QT_TR_NOOP("Reflect (30mp)"), QT_TR_NOOP("Wall (58mp)")}
954  , QT_TR_NOOP("MaxHp:-5% MaxMp:+5% Str:-2 Vit:-1 Mag:+2 Spi:+1"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
955  , 0x3E, -5, +5, -2, -1, 0, 0, +2, +1, {0, 5000, 15000, 30000, 45000}, 1, 5, QString(), {QString()}
956  },
957  {
958  QStringLiteral("ID:0x3F")
959  , {/* NO SKILLS */}
960  , QStringLiteral("ID:0x3F"), QStringLiteral(":/materia/all"), QString(), QString()
961  , 0X3F, 0, 0, 0, 0, 0, 0, 0, 0, {0xFFFFFF, 0, 0, 0, 0}, 0, 0, QString(), {QString()}
962  },
963  {
964  QT_TR_NOOP("Comet")
965  , {QT_TR_NOOP("Comet (70mp)"), QT_TR_NOOP("Comet2 (110mp)")}
966  , QT_TR_NOOP("MaxHp:-5% MaxMp:+5% Str:-2 Vit:-1 Mag:+2 Spi:+1"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
967  , 0x40, -5, +5, -2, -1, 0, 0, +2, +1, {0, 12000, 60000, 0, 0}, 1, 3, QString(), {QString()}
968  },
969  {
970  QT_TR_NOOP("Time")
971  , {QT_TR_NOOP("Haste (18mp)"), QT_TR_NOOP("Slow (20mp)"), QT_TR_NOOP("Stop (34mp)")}
972  , QT_TR_NOOP("MaxHp:-5% MaxMp:+5% Str:-2 Vit:-1 Mag:+2 Spi:+1"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
973  , 0x41, -5, +5, -2, -1, 0, 0, +2, +1, {0, 10000, 20000, 42000, 0}, 1, 4, QString(), {QT_TR_NOOP("[Slow]"), QT_TR_NOOP("[Stop]")}
974  },
975  {
976  QStringLiteral("ID:0x42")
977  , {/* NO SKILLS */}
978  , QStringLiteral("ID:0x42"), QStringLiteral(":/materia/all"), QString(), QString()
979  , 0X42, 0, 0, 0, 0, 0, 0, 0, 0, {0xFFFFFF, 0, 0, 0, 0}, 0, 0, QString(), {QString()}
980  },
981  {
982  QStringLiteral("ID:0x43")
983  , {/* NO SKILLS */}
984  , QStringLiteral("ID:0x43"), QStringLiteral(":/materia/all"), QString(), QString()
985  , 0X43, 0, 0, 0, 0, 0, 0, 0, 0, {0xFFFFFF, 0, 0, 0, 0}, 0, 0, QString(), {QString()}
986  },
987  {
988  QT_TR_NOOP("Destruct")
989  , {QT_TR_NOOP("DeBarrier (12mp)"), QT_TR_NOOP("DeSpell (20mp)"), QT_TR_NOOP("Death (30mp)")}
990  , QT_TR_NOOP("MaxHp:-5% MaxMp:+5% Str:-2 Vit:-1 Mag:+2 Spi:+1"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
991  , 0x44, -5, +5, -2, -1, 0, 0, +2, +1, {0, 6000, 10000, 45000, 0}, 1, 4, QString(), {QT_TR_NOOP("[Death]")}
992  },
993  {
994  QT_TR_NOOP("Contain")
995  , {QT_TR_NOOP("Freeze (82mp)"), QT_TR_NOOP("Break (86mp)"), QT_TR_NOOP("Tornado (90mp)"), QT_TR_NOOP("Flare (100mp)")}
996  , QT_TR_NOOP("MaxHp:-10% MaxMp:+10% Str:-4 Vit:-2 Mag:+4 Spi:+2"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
997  , 0x45, -10, +10, -4, -2, 0, 0, +4, +2, {0, 5000, 10000, 15000, 60000}, 1, 5, QString(), {QT_TR_NOOP("[Confusion]"), QT_TR_NOOP("[Petrify]"), QT_TR_NOOP("[Stop]")}
998  },
999  {
1000  QT_TR_NOOP("Full Cure")
1001  , {QString(), QT_TR_NOOP("Full Cure (99mp)")}
1002  , QT_TR_NOOP("MaxHp:-10% MaxMp:+10% Str:-4 Vit:-2 Mag:+4 Spi:+2"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
1003  , 0x46, -10, +10, -4, -2, 0, 0, +4, +2, {0, 3000, 100000, 0, 0}, 1, 3, QString(), {QString()}
1004  },
1005  {
1006  QT_TR_NOOP("Shield")
1007  , {QString(), QT_TR_NOOP("Shield (180mp)")}
1008  , QT_TR_NOOP("MaxHp:-10% MaxMp:+10% Str:-4 Vit:-2 Mag:+4 Spi:+2"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
1009  , 0x47, -10, +10, -4, -2, 0, 0, +4, +2, {0, 10000, 100000, 0, 0}, 1, 3, QString(), {QString()}
1010  },
1011  {
1012  QT_TR_NOOP("Ultima")
1013  , {QString(), QT_TR_NOOP("Ultima (130mp)")}
1014  , QT_TR_NOOP("MaxHp:-10% MaxMp:+10% Str:-4 Vit:-2 Mag:+4 Spi:+2"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
1015  , 0x48, -10, +10, -4, -2, 0, 0, +4, +2, {0, 5000, 100000, 0, 0}, 1, 3, QString(), {QString()}
1016  },
1017  {
1018  QT_TR_NOOP("Master Magic")
1019  , _masterMagicList
1020  , QString(), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
1021  , 0x49, 0, 0, 0, 0, 0, 0, 0, 0, {0xFFFFFF, 0, 0, 0, 0}, 1, 1, QString(), {QString()}
1022  },
1023  {
1024  QT_TR_NOOP("Choco/Mog")
1025  , {QT_TR_NOOP("Choco/Mog x1 (14mp)"), QT_TR_NOOP("Choco/Mog x2 (14mp)"), QT_TR_NOOP("Choco/Mog x3 (14mp)"), QT_TR_NOOP("Choco/Mog x4 (14mp)"), QT_TR_NOOP("Choco/Mog x5 (14mp)")}
1026  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Mag:+1"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1027  , 0x4A, -2, +2, 0, 0, 0, 0, +1, 0, {0, 2000, 14000, 25000, 35000}, 2, 5, QT_TR_NOOP("[Wind]"), {QString()}
1028  },
1029  {
1030  QT_TR_NOOP("Shiva")
1031  , {QT_TR_NOOP("Shiva x1 (32mp)"), QT_TR_NOOP("Shiva x2 (32mp)"), QT_TR_NOOP("Shiva x3 (32mp)"), QT_TR_NOOP("Shiva x4 (32mp)"), QT_TR_NOOP("Shiva x5 (32mp)")}
1032  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Mag:+1"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1033  , 0x4B, -2, +2, 0, 0, 0, 0, +1, 0, {0, 4000, 15000, 30000, 50000}, 2, 5, QT_TR_NOOP("[Ice]"), {QString()}
1034  },
1035  {
1036  QT_TR_NOOP("Ifrit")
1037  , {QT_TR_NOOP("Ifrit x1 (34mp)"), QT_TR_NOOP("Ifrit x2 (34mp)"), QT_TR_NOOP("Ifrit x3 (34mp)"), QT_TR_NOOP("Ifrit x4 (34mp)"), QT_TR_NOOP("Ifrit x5 (34mp)")}
1038  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Mag:+1"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1039  , 0x4C, -2, +2, 0, 0, 0, 0, +1, 0, {0, 5000, 20000, 35000, 60000}, 2, 5, QT_TR_NOOP("[Fire]"), {QString()}
1040  },
1041  {
1042  QT_TR_NOOP("Ramuh")
1043  , {QT_TR_NOOP("Ramuh x1 (40mp)"), QT_TR_NOOP("Ramuh x2 (40mp)"), QT_TR_NOOP("Ramuh x3 (40mp)"), QT_TR_NOOP("Ramuh x4 (40mp)"), QT_TR_NOOP("Ramuh x5 (40mp)")}
1044  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Mag:+1"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1045  , 0x4D, -2, +2, 0, 0, 0, 0, +1, 0, {0, 10000, 25000, 50000, 70000}, 2, 5, QT_TR_NOOP("[Lightning]"), {QString()}
1046  },
1047  {
1048  QT_TR_NOOP("Titan")
1049  , {QT_TR_NOOP("Titan x1 (46mp)"), QT_TR_NOOP("Titan x2 (46mp)"), QT_TR_NOOP("Titan x3 (46mp)"), QT_TR_NOOP("Titan x4 (46mp)"), QT_TR_NOOP("Titan x5 (46mp)")}
1050  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Mag:+1"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1051  , 0x4E, -2, +2, 0, 0, 0, 0, +1, 0, {0, 15000, 30000, 60000, 80000}, 2, 5, QT_TR_NOOP("[Earth]"), {QString()}
1052  },
1053  {
1054  QT_TR_NOOP("Odin")
1055  , {QT_TR_NOOP("Odin x1 (80mp)"), QT_TR_NOOP("Odin x2 (80mp)"), QT_TR_NOOP("Odin x3 (80mp)"), QT_TR_NOOP("Odin x4 (80mp)"), QT_TR_NOOP("Odin x5 (80mp)")}
1056  , QT_TR_NOOP("MaxHp:-5% MaxMp:+5% Mag:+1 Spi:+1"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1057  , 0x4F, -5, +5, 0, 0, 0, 0, +1, +1, {0, 16000, 32000, 65000, 90000}, 2, 5, QString(), {QT_TR_NOOP("[Death]")}
1058  },
1059  {
1060  QT_TR_NOOP("Leviathan")
1061  , {QT_TR_NOOP("Leviathan x1 (78mp)"), QT_TR_NOOP("Leviathan x2 (78mp)"), QT_TR_NOOP("Leviathan x3 (78mp)"), QT_TR_NOOP("Leviathan x4 (78mp)"), QT_TR_NOOP("Leviathan x5 (78mp)")}
1062  , QT_TR_NOOP("MaxHp:-5% MaxMp:+5% Mag:+1 Spi:+1"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1063  , 0x50, -5, +5, 0, 0, 0, 0, +1, +1, {0, 18000, 38000, 70000, 100000}, 2, 5, QT_TR_NOOP("[Water]"), {QString()}
1064  },
1065  {
1066  QT_TR_NOOP("Bahamut")
1067  , {QT_TR_NOOP("Bahamut x1 (100mp)"), QT_TR_NOOP("Bahamut x2 (100mp)"), QT_TR_NOOP("Bahamut x3 (100mp)"), QT_TR_NOOP("Bahamut x4 (100mp)"), QT_TR_NOOP("Bahamut x5 (100mp)")}
1068  , QT_TR_NOOP("MaxHp:-5% MaxMp:+5% Mag:+1 Spi:+1"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1069  , 0x51, -5, +5, 0, 0, 0, 0, +1, +1, {0, 20000, 50000, 80000, 120000}, 2, 5, QString(), {QString()}
1070  },
1071  {
1072  QT_TR_NOOP("Kujata")
1073  , {QT_TR_NOOP("Kujata x1 (110mp)"), QT_TR_NOOP("Kujata x2 (110mp)"), QT_TR_NOOP("Kujata x3 (110mp)"), QT_TR_NOOP("Kujata x4 (110mp)"), QT_TR_NOOP("Kujata x5 (110mp)")}
1074  , QT_TR_NOOP("MaxHp:-5% MaxMp:+5% Mag:+1 Spi:+1"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1075  , 0x52, -5, +5, 0, 0, 0, 0, +1, +1, {0, 22000, 60000, 90000, 140000}, 2, 5, QString(), {QString()}
1076  },
1077  {
1078  QT_TR_NOOP("Alexander")
1079  , {QT_TR_NOOP("Alexander x1 (120mp)"), QT_TR_NOOP("Alexander x2 (120mp)"), QT_TR_NOOP("Alexander x3 (120mp)"), QT_TR_NOOP("Alexander x4 (120mp)"), QT_TR_NOOP("Alexander x5 (120mp)")}
1080  , QT_TR_NOOP("MaxHp:-5% MaxMp:+5% Mag:+1 Spi:+1"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1081  , 0x53, -5, +5, 0, 0, 0, 0, +1, +1, {0, 25000, 65000, 100000, 150000}, 2, 5, QT_TR_NOOP("[Holy]"), {QString()}
1082  },
1083  {
1084  QT_TR_NOOP("Phoenix")
1085  , {QT_TR_NOOP("Phoenix x1 (180mp)"), QT_TR_NOOP("Phoenix x2 (180mp)"), QT_TR_NOOP("Phoenix x3 (180mp)"), QT_TR_NOOP("Phoenix x4 (180mp)"), QT_TR_NOOP("Phoenix x5 (180mp)")}
1086  , QT_TR_NOOP("MaxHp:-10% MaxMp:+10% Mag:+2 Spi:+2"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1087  , 0x54, -10, +10, 0, 0, 0, 0, +2, +2, {0, 28000, 70000, 120000, 180000}, 2, 5, QT_TR_NOOP("[Fire]"), {QString()}
1088  },
1089  {
1090  QT_TR_NOOP("Neo Bahamut")
1091  , {QT_TR_NOOP("Neo Bahamut x1 (140mp)"), QT_TR_NOOP("Neo Bahamut x2 (140mp)"), QT_TR_NOOP("Neo Bahamut x3 (140mp)"), QT_TR_NOOP("Neo Bahamut x4 (140mp)"), QT_TR_NOOP("Neo Bahamut x5 (140mp)")}
1092  , QT_TR_NOOP("MaxHp:-10% MaxMp:+10% Mag:+2 Spi:+2"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1093  , 0x55, -10, +10, 0, 0, 0, 0, +2, +2, {0, 30000, 80000, 140000, 200000}, 2, 5, QString(), {QString()}
1094  },
1095  {
1096  QT_TR_NOOP("Hades")
1097  , {QT_TR_NOOP("Hades x1 (150mp)"), QT_TR_NOOP("Hades x2 (150mp)"), QT_TR_NOOP("Hades x3 (150mp)"), QT_TR_NOOP("Hades x4 (150mp)"), QT_TR_NOOP("Hades x5 (150mp)")}
1098  , QT_TR_NOOP("MaxHp:-10% MaxMp:+15% Mag:+4 Spi:+4"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1099  , 0x56, -10, +15, 0, 0, 0, 0, +4, +4, {0, 35000, 120000, 150000, 250000}, 2, 5, QString(), {QT_TR_NOOP("[Sleep]"), QT_TR_NOOP("[Poison]"), QT_TR_NOOP("[Confusion]"), QT_TR_NOOP("[Silence]"), QT_TR_NOOP("[Frog]"), QT_TR_NOOP("[Mini]")}
1100  },
1101  {
1102  QT_TR_NOOP("Typhon")
1103  , {QT_TR_NOOP("Typhon x1 (160mp)"), QT_TR_NOOP("Typhon x2 (160mp)"), QT_TR_NOOP("Typhon x3 (160mp)"), QT_TR_NOOP("Typhon x4 (160mp)"), QT_TR_NOOP("Typhon x5 (160mp)")}
1104  , QT_TR_NOOP("MaxHp:-10% MaxMp:+15% Mag:+4 Spi:+4"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1105  , 0x57, -10, +15, 0, 0, 0, 0, +4, +4, {0, 35000, 120000, 150000, 250000}, 2, 5, QT_TR_NOOP("[Wind]"), {QString()}
1106  },
1107  {
1108  QT_TR_NOOP("Bahamut ZERO")
1109  , {QT_TR_NOOP("Bahamut ZERO x1 (180mp)"), QT_TR_NOOP("Bahamut ZERO x2 (180mp)"), QT_TR_NOOP("Bahamut ZERO x3 (180mp)"), QT_TR_NOOP("Bahamut ZERO x4 (180mp)"), QT_TR_NOOP("Bahamut ZERO x5 (180mp)")}
1110  , QT_TR_NOOP("MaxHp:-10% MaxMp:+15% Mag:+4 Spi:+4"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1111  ,0x58, -10, +15, 0, 0, 0, 0, +4, +4, {0, 35000, 120000, 150000, 250000}, 2, 5, QString(), {QString()}
1112  },
1113  {
1114  QT_TR_NOOP("Knights of the Round")
1115  , {QT_TR_NOOP("Knights of the Round x1 (250mp)"), QT_TR_NOOP("Knights of the Round x2 (250mp)"), QT_TR_NOOP("Knights of the Round x3 (250mp)"), QT_TR_NOOP("Knights of the Round x4 (250mp)"), QT_TR_NOOP("Knights of the Round x5 (250mp)")}
1116  , QT_TR_NOOP("MaxHp:-10% MaxMp:+20% Mag:+8 Spi:+8"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1117  , 0x59, -10, +20, 0, 0, 0, 0, +8, +8, {0, 50000, 200000, 300000, 500000}, 2, 5, QString(), {QString()}
1118  },
1119  {
1120  QT_TR_NOOP("Master Summon")
1121  , _masterSummonList
1122  , QString(), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1123  , 0x5A, 0, 0, 0, 0, 0, 0, 0, 0, {0xFFFFFF, 0, 0, 0, 0}, 2, 1, QString(), {QString()}
1124  }
1125  };
1126  };
1127 };
FF7Materia::skillsForLevel
static const Q_INVOKABLE QStringList skillsForLevel(const int id, const int level)
skills - Get Skill for a materia at a given level
Definition: FF7Materia.h:148
FF7Materia::skills
static const Q_INVOKABLE QStringList skills(const int id)
skills - Get Skill for a materia
Definition: FF7Materia.h:130
FF7Materia::imageAllResource
static const Q_INVOKABLE QString imageAllResource()
Definition: FF7Materia.h:373
FF7Materia::masterSummonSkill
static const Q_INVOKABLE QString masterSummonSkill(const int skill)
masterSummonSkill - Get translated string of the Master Summon skill
Definition: FF7Materia.h:103
FF7Materia::type
static const Q_INVOKABLE int type(const int id)
type Get Materia Type
Definition: FF7Materia.h:287
FF7Materia::levels
static const Q_INVOKABLE qint8 levels(const int id)
levels
Definition: FF7Materia.h:187
FF7Materia::materiaAP
static const Q_INVOKABLE qint32 materiaAP(const quint8 ap1, const quint8 ap2, const quint8 ap3)
materiaAP - Transform 3 bytes into a materia AP
Definition: FF7Materia.h:327
FF7Materia::TotalMateria
static const int TotalMateria
TotalMateria - Total Number of Different Materia in the Game.
Definition: FF7Materia.h:32
FF7Materia::emptyStarResource
static const Q_INVOKABLE QString emptyStarResource(int id)
Definition: FF7Materia.h:359
FF7Materia::masterCommandSkill
static const Q_INVOKABLE QString masterCommandSkill(const int skill)
masterCommandSkill - Get translated string of the Master Command skill
Definition: FF7Materia.h:94
FF7Materia::materiaID
static const Q_INVOKABLE int materiaID(materia mat)
materiaID - The Id of a given materia
Definition: FF7Materia.h:317
FF7Materia::isModID
static bool isModID(int id)
isModID
Definition: FF7Materia.h:393
FF7Materia::EmptyId
@ EmptyId
Definition: FF7Materia.h:62
FF7Materia::strengthChange
static const Q_INVOKABLE qint8 strengthChange(const int id)
strengthChange - The Change to the Strength stat when materia is equipped
Definition: FF7Materia.h:229
FF7Materia::image
static const QImage image(const int id)
Definition: FF7Materia.h:349
FF7Materia::imageAllMateria
static const QImage imageAllMateria()
Definition: FF7Materia.h:372
FF7MateriaSingleton
Definition: ff7tkQuickDataTypes.h:52
FF7Materia::fullStarResource
static const Q_INVOKABLE QString fullStarResource(int id)
Definition: FF7Materia.h:366
FF7Materia::get
static FF7Materia * get()
Get the FF7Materia Instance.
Definition: FF7Materia.h:399
FF7Materia::materiaLevel
static const Q_INVOKABLE int materiaLevel(const int id, const quint32 ap)
materiaLevel - Returns the ap needed for a materia at a level
Definition: FF7Materia.h:195
FF7Materia::element
static const Q_INVOKABLE QString element(const int id)
element - Get Elemental Type(s) for materia
Definition: FF7Materia.h:121
FF7Materia::addedEffects
static const Q_INVOKABLE QStringList addedEffects(const int id)
addedEffects - The Effects the materia can have when paried with "Added Effect" materia
Definition: FF7Materia.h:171
FF7Materia::apForLevel
static const Q_INVOKABLE qint32 apForLevel(const int id, const int level)
apForLevel - Returns the ap needed for a materia at a level
Definition: FF7Materia.h:214
FF7Materia::pixmap
static const QPixmap pixmap(const int id)
Definition: FF7Materia.h:348
FF7Materia
Definition: FF7Materia.h:19
FF7Materia::dexterityChange
static const Q_INVOKABLE qint8 dexterityChange(const int id)
dexterityChange - The Change to the dexterity stat when materia is equipped
Definition: FF7Materia.h:259
FF7Materia::MateriaName
MateriaName
The MateriaName enum - Name to ID Enum.
Definition: FF7Materia.h:55
FF7Materia::iconResource
static const Q_INVOKABLE QString iconResource(const int id)
Definition: FF7Materia.h:350
FF7Materia::vitalityChange
static const Q_INVOKABLE qint8 vitalityChange(const int id)
vitalityChange - The Change to the vitality stat when materia is equipped
Definition: FF7Materia.h:236
FF7Materia::magicChange
static const Q_INVOKABLE qint8 magicChange(const int id)
magicChange - The Change to the magic stat when materia is equipped
Definition: FF7Materia.h:243
FF7Materia::pixmapEmptyStar
static const QPixmap pixmapEmptyStar(int id)
Definition: FF7Materia.h:357
FF7Materia::luckChange
static const Q_INVOKABLE qint8 luckChange(const int id)
luckChange - The Change to the luck stat when materia is equipped
Definition: FF7Materia.h:266
FF7Materia::icon
static const QIcon icon(const int id)
Definition: FF7Materia.h:347
FF7Materia::materiaAP
static const Q_INVOKABLE qint32 materiaAP(const materia mat)
materiaAP - read Ap from Materia type
Definition: FF7Materia.h:335
FF7Materia::pixmapFullStar
static const QPixmap pixmapFullStar(int id)
Definition: FF7Materia.h:364
FF7Materia::mpChange
static const Q_INVOKABLE qint8 mpChange(const int id)
mpChange - The Change to the baseMp stat when materia is equipped
Definition: FF7Materia.h:280
FF7Materia::statString
static const Q_INVOKABLE QString statString(const int id)
statString - Get the stat changes String for a materia
Definition: FF7Materia.h:78
FF7Materia::imageEmptyStar
static const QImage imageEmptyStar(int id)
Definition: FF7Materia.h:358
materia
materia format saved in materia list or on a character
FF7Materia::imageFullStar
static const QImage imageFullStar(int id)
Definition: FF7Materia.h:365
FF7Materia::enemySkill
static const Q_INVOKABLE QString enemySkill(const int skill)
enemySkill - Get translated string of an enemy skill
Definition: FF7Materia.h:85
FF7Materia::hpChange
static const Q_INVOKABLE qint8 hpChange(const int id)
hpChange - The Change to the baseHp stat when materia is equipped
Definition: FF7Materia.h:273
FF7Materia::materiaAP
static const Q_INVOKABLE qint32 materiaAP(const quint8 ap[3])
materiaAP - Transform array into Ap
Definition: FF7Materia.h:343
FF7Materia::placeHolderNameFilter
static const Q_INVOKABLE QString & placeHolderNameFilter()
Definition: FF7Materia.h:375
FF7Materia::MaxMateriaAp
static const int MaxMateriaAp
MaxMateriaAp - The Maximum Materia Ap Allowed, All materia has this Ap when "Mastered".
Definition: FF7Materia.h:37
FF7Materia::spiritChange
static const Q_INVOKABLE qint8 spiritChange(const int id)
spiritChange - The Change to the spirit stat when materia is equipped
Definition: FF7Materia.h:251
FF7Materia::MateriaType
MateriaType
The MateriaType enum - All the Materia Types.
Definition: FF7Materia.h:42
FF7Materia::masterMagicSkill
static const Q_INVOKABLE QString masterMagicSkill(const int skill)
masterMagicSkill - Get translated string of the Master Magic skill
Definition: FF7Materia.h:112
FF7Materia::apToMax
static const Q_INVOKABLE qint32 apToMax(const int id)
apToMax
Definition: FF7Materia.h:221
FF7Materia::placeHolderIdList
static const Q_INVOKABLE QList< int > placeHolderIdList()
Definition: FF7Materia.h:377
FF7Materia::iconAllMateria
static const QIcon iconAllMateria()
Definition: FF7Materia.h:371
FF7Materia::encodeMateria
static Q_INVOKABLE materia encodeMateria(const int id, const qint32 ap)
encodeMateria encode a materia
Definition: FF7Materia.h:295