ff7tk  1.0.0.16
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  static Q_INVOKABLE const QString name(const int id) { return tr(Materias(id).name.toUtf8()); }
72 
78  static Q_INVOKABLE const QString statString(const int id) { return tr(Materias(id).stats.toUtf8()); }
79 
85  static Q_INVOKABLE 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  static Q_INVOKABLE 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  static Q_INVOKABLE 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  static Q_INVOKABLE 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  static Q_INVOKABLE const QString element(const int id) { return tr(Materias(id).elemental.toUtf8()); }
122 
128  static Q_INVOKABLE const QStringList skills(const int id) {
129  QStringList translated_list;
130  const auto list = id == EnemySkill ? get()->d->_enemySkills : Materias(id).skills;
131  for(const QString &skill : list)
132  translated_list.append(tr(skill.toUtf8()));
133  return translated_list;
134  }
135 
142  static Q_INVOKABLE const QStringList skillsForLevel(const int id, const int level) {
143  if(id == EmptyId)
144  return QStringList();
145 
146  if ( id == MasterCommand || id == MasterSummon || id == MasterMagic)
147  return skills(id);
148 
149  if ( id != EnemySkill)
150  return skills(id).mid(0, std::clamp<int>(level, 0 , levels(id)));
151 
152  QStringList eSkills;
153  for (int i = 0; i < 24; i++) {
154  if (level & (1 << i))
155  eSkills.append(get()->d->_enemySkills.at(i));
156  }
157  return eSkills;
158  }
159 
165  static Q_INVOKABLE const QStringList addedEffects (const int id) {
166  QStringList translated_list;
167  for(const QString& stat : Materias(id).status)
168  translated_list.append(tr(stat.toUtf8()));
169  return translated_list;
170  }
171 
177  static Q_INVOKABLE const qint8 levels(const int id) { return Materias(id).levels; }
178 
185  static Q_INVOKABLE const int materiaLevel(const int id, const quint32 ap) {
186  int level = 0;
187  if ( id == EnemySkill)
188  return ap;
189  for(int i = 0; i < levels(id); i++) {
190  if( ap >= apForLevel(id, i))
191  level++;
192  }
193  return level;
194  }
195 
202  static Q_INVOKABLE const qint32 apForLevel(const int id, const int level) {return FF7Materia::levels(id) <= 1 ? MaxMateriaAp : Materias(id).ap.at(std::clamp(level, 0, 4)); }
203 
209  static Q_INVOKABLE const qint32 apToMax(const int id) { return Materias(id).ap.at(std::max(Materias(id).levels -1, 0)); }
210 
211 
217  static Q_INVOKABLE const qint8 strengthChange(const int id) { return Materias(id).str; }
218 
224  static Q_INVOKABLE const qint8 vitalityChange(const int id) { return Materias(id).vit; }
225 
231  static Q_INVOKABLE const qint8 magicChange(const int id) { return Materias(id).mag; }
232 
233 
239  static Q_INVOKABLE const qint8 spiritChange(const int id) { return Materias(id).spi; }
240 
241 
247  static Q_INVOKABLE const qint8 dexterityChange(const int id) { return Materias(id).dex; }
248 
254  static Q_INVOKABLE const qint8 luckChange(const int id) { return Materias(id).lck; }
255 
261  static Q_INVOKABLE const qint8 hpChange(const int id) { return Materias(id).hp; }
262 
268  static Q_INVOKABLE const qint8 mpChange(const int id) { return Materias(id).mp; }
269 
275  static Q_INVOKABLE const int type(const int id) { return Materias(id).type; }
276 
283  static Q_INVOKABLE materia encodeMateria(const int id, const qint32 ap) {
284  materia temp;
285  const int aptmp = qToLittleEndian(ap);
286  if ( (id >= 0 ) && (id <= 90 ) && ((aptmp >= 0) && (aptmp <= MaxMateriaAp))) {
287  temp.id = id;
288  temp.ap[0] = (aptmp & 0xff);
289  temp.ap[1] = (aptmp & 0xff00) >> 8;
290  temp.ap[2] = (aptmp & 0xff0000) >> 16;
291  } else {
292  temp.id = FF7Materia::EmptyId;
293  temp.ap[0] = 0xFF;
294  temp.ap[1] = 0xFF;
295  temp.ap[2] = 0xFF;
296  }
297  return temp;
298  }
299 
305  static Q_INVOKABLE const int materiaID(materia mat) { return idClamp(mat.id); }
306 
315  static Q_INVOKABLE const qint32 materiaAP(const quint8 ap1 , const quint8 ap2, const quint8 ap3) { return qFromLittleEndian( qint32(ap1 | (ap2 << 8) | (ap3 << 16))); }
316 
323  static Q_INVOKABLE const qint32 materiaAP(const materia mat) { return materiaAP(mat.ap[0], mat.ap[1], mat.ap[2]); }
324 
331  static Q_INVOKABLE const qint32 materiaAP(const quint8 ap[3]) { return materiaAP(ap[0], ap[1], ap[2]); }
332 
333 
334  //Image Functions
335  static const QIcon icon(const int id) { return QIcon(QPixmap(Materias(id).imageString)); }
336  static const QPixmap pixmap(const int id) { return QPixmap(Materias(id).imageString); }
337  static const QImage image(const int id) { return QImage(Materias(id).imageString); }
338  static Q_INVOKABLE const QString iconResource(const int id) {
339  auto tmp = Materias(id).imageString;
340  return tmp.isEmpty() ? tmp : tmp.prepend(QStringLiteral("qrc"));
341  }
342 
343  static const QPixmap pixmapEmptyStar(int id) { return QPixmap(Materias(id).emptyStarString); }
344  static const QImage imageEmptyStar(int id) { return QImage(Materias(id).emptyStarString); }
345  static Q_INVOKABLE const QString emptyStarResource(int id) {
346  auto tmp = Materias(id).emptyStarString;
347  return tmp.isEmpty() ? tmp : tmp.prepend(QStringLiteral("qrc"));
348  }
349 
350  static const QPixmap pixmapFullStar(int id) { return QPixmap(Materias(id).fullStarString); }
351  static const QImage imageFullStar(int id) { return QImage(Materias(id).fullStarString); }
352  static Q_INVOKABLE const QString fullStarResource(int id) {
353  auto tmp = Materias(id).fullStarString;
354  return tmp.isEmpty() ? tmp : tmp.prepend(QStringLiteral("qrc"));
355  }
356 
357  static const QIcon iconAllMateria() { return QIcon(QPixmap(get()->d->_resourceAllMateria)); }
358  static const QImage imageAllMateria() { return QImage(get()->d->_resourceAllMateria); }
359  static Q_INVOKABLE const QString imageAllResource() { return get()->d->_resourceAllMateria.mid(0).prepend(QStringLiteral("qrc")); }
360 
361  static Q_INVOKABLE const QString &placeHolderNameFilter() {return get()->d->_placeHolderFilter;}
362 
363  static Q_INVOKABLE const QList<int> placeHolderIdList() {
364  QList<int> phList;
365  for (const MATERIA &m : get()->d->_materiaList) {
366  if(m.name.startsWith(get()->d->_placeHolderFilter))
367  phList.append(m.id);
368  }
369  return phList;
370  }
371 
372 protected:
376  static FF7Materia *get() {
377  static FF7Materia m;
378  return &m;
379  };
380 
381 private:
382  FF7Materia *operator = (FF7Materia &other) = delete;
383  FF7Materia(const FF7Materia &other) = delete;
384  explicit FF7Materia(QObject *parent = nullptr) : QObject(parent), d(new FF7MateriaPrivate()){ };
385  ~FF7Materia() { delete d; }
386 
392  static const int idClamp(const int id = 0xFF) { return (id == 0xFF ) ? id : std::clamp(id, 0, 90); }
393 
397  struct MATERIA {
398  QString name;
399  QStringList skills;
400  QString stats;
401  QString imageString;
402  QString emptyStarString;
403  QString fullStarString;
404  quint8 id;
405  qint8 hp;
406  qint8 mp;
407  qint8 str;
408  qint8 vit;
409  qint8 dex;
410  qint8 lck;
411  qint8 mag;
412  qint8 spi;
413  QList<qint32> ap; //ap needed for levels.
414  qint8 type; //1-magic,2-summon,3-independent,4-support,5-command,0-unknown
415  qint8 levels;
416  QString elemental;
417  QStringList status;
418  };
419 
426  static const FF7Materia::MATERIA &Materias(int id) {
427  return (idClamp(id) == EmptyId) ? get()->d->_emptyMateria : get()->d->_materiaList.at(id);
428  }
429 
430  struct FF7MateriaPrivate;
431  FF7MateriaPrivate *d;
432  struct FF7MateriaPrivate {
433  inline static const auto _placeHolderFilter = QStringLiteral("ID:");
434  inline static const auto _resourceAllMateria = QStringLiteral(":/materia/all");
435  inline static const QStringList _masterCommandList{
436  QT_TR_NOOP("Skill: DeathBlow")
437  , QT_TR_NOOP("Skill: Manipulate")
438  , QT_TR_NOOP("Skill: Mime")
439  , QT_TR_NOOP("Skill: Throw")
440  , QT_TR_NOOP("Skill: Coin")
441  , QT_TR_NOOP("Skill: Steal")
442  , QT_TR_NOOP("Skill: Sense")
443  , QT_TR_NOOP("Skill: Morph")
444  };
445 
446  inline static const QStringList _masterSummonList{
447  QT_TR_NOOP("Choco/Mog (14mp)")
448  , QT_TR_NOOP("Shiva (32mp)")
449  , QT_TR_NOOP("Ifrit (34mp)")
450  , QT_TR_NOOP("Ramuh (40mp)")
451  , QT_TR_NOOP("Titan (46mp)")
452  , QT_TR_NOOP("Odin (80mp)")
453  , QT_TR_NOOP("Leviathan (78mp)")
454  , QT_TR_NOOP("Bahamut (100mp)")
455  , QT_TR_NOOP("Kujata (110mp)")
456  , QT_TR_NOOP("Alexander (120mp)")
457  , QT_TR_NOOP("Phoenix (180mp)")
458  , QT_TR_NOOP("Neo Bahamut (140mp)")
459  , QT_TR_NOOP("Hades (150mp)")
460  , QT_TR_NOOP("Typhon (160mp)")
461  , QT_TR_NOOP("Bahamut ZERO (180mp)")
462  , QT_TR_NOOP("Knights Of The Round (250mp)")
463  };
464 
465  inline static const QStringList _masterMagicList{
466  QT_TR_NOOP("Cure (5mp)")
467  , QT_TR_NOOP("Cure2 (24mp)")
468  , QT_TR_NOOP("Regen (30mp)")
469  , QT_TR_NOOP("Cure3 (64mp)")
470  , QT_TR_NOOP("Life (34mp)")
471  , QT_TR_NOOP("Life2 (100mp)")
472  , QT_TR_NOOP("Poisona (3mp)")
473  , QT_TR_NOOP("Esuna (15mp)")
474  , QT_TR_NOOP("Resist (120mp)")
475  , QT_TR_NOOP("Haste (18mp)")
476  , QT_TR_NOOP("Slow (20mp)")
477  , QT_TR_NOOP("Stop (34mp)")
478  , QT_TR_NOOP("Barrier (16mp)")
479  , QT_TR_NOOP("M-Barrier (24mp)")
480  , QT_TR_NOOP("Reflect (30mp)")
481  , QT_TR_NOOP("Wall (58mp)")
482  , QT_TR_NOOP("DeBarrier (12mp)")
483  , QT_TR_NOOP("DeSpell (20mp)")
484  , QT_TR_NOOP("Death (30mp)")
485  , QT_TR_NOOP("Sleepel (8mp)")
486  , QT_TR_NOOP("Silence (24mp)")
487  , QT_TR_NOOP("Confu (18mp)")
488  , QT_TR_NOOP("Berserk (28mp)")
489  , QT_TR_NOOP("Mini (10mp)")
490  , QT_TR_NOOP("Toad (14mp)")
491  , QT_TR_NOOP("Exit (16mp)")
492  , QT_TR_NOOP("Remove (99mp)")
493  , QT_TR_NOOP("Fire (4mp)")
494  , QT_TR_NOOP("Fire2 (22mp)")
495  , QT_TR_NOOP("Fire3 (52mp)")
496  , QT_TR_NOOP("Ice (4mp)")
497  , QT_TR_NOOP("Ice2 (22mp)")
498  , QT_TR_NOOP("Ice3 (52mp)")
499  , QT_TR_NOOP("Quake (6mp)")
500  , QT_TR_NOOP("Quake2 (28mp)")
501  , QT_TR_NOOP("Quake3 (68mp)")
502  , QT_TR_NOOP("Bolt (4mp)")
503  , QT_TR_NOOP("Bolt2 (22mp)")
504  , QT_TR_NOOP("Bolt3 (52mp)")
505  , QT_TR_NOOP("Bio (8mp)")
506  , QT_TR_NOOP("Bio2 (36mp)")
507  , QT_TR_NOOP("Bio3 (80mp)")
508  , QT_TR_NOOP("Demi (14mp)")
509  , QT_TR_NOOP("Demi2 (33mp)")
510  , QT_TR_NOOP("Demi3 (48mp)")
511  , QT_TR_NOOP("Comet (70mp)")
512  , QT_TR_NOOP("Comet2 (110mp)")
513  , QT_TR_NOOP("Freeze (82mp)")
514  , QT_TR_NOOP("Break (86mp)")
515  , QT_TR_NOOP("Tornado (90mp)")
516  , QT_TR_NOOP("Flare (100mp)")
517  , QT_TR_NOOP("Full Cure (99mp)")
518  , QT_TR_NOOP("Shield (180mp)")
519  , QT_TR_NOOP("Ultima (130mp)")
520  };
521 
522  inline static const QStringList _enemySkills{
523  QT_TR_NOOP("Frog Song")
524  , QT_TR_NOOP("L4 Suicide")
525  , QT_TR_NOOP("Magic Hammer")
526  , QT_TR_NOOP("White Wind")
527  , QT_TR_NOOP("Big Guard")
528  , QT_TR_NOOP("Angel Whisper")
529  , QT_TR_NOOP("Dragon Force")
530  , QT_TR_NOOP("Death Force")
531  , QT_TR_NOOP("Flame Thrower")
532  , QT_TR_NOOP("Laser")
533  , QT_TR_NOOP("Matra Magic")
534  , QT_TR_NOOP("Bad Breath")
535  , QT_TR_NOOP("Beta")
536  , QT_TR_NOOP("Aqualung")
537  , QT_TR_NOOP("Trine")
538  , QT_TR_NOOP("Magic Breath")
539  , QT_TR_NOOP("????")
540  , QT_TR_NOOP("Goblin Punch")
541  , QT_TR_NOOP("Chocobuckle")
542  , QT_TR_NOOP("L5 Death")
543  , QT_TR_NOOP("Death Sentence")
544  , QT_TR_NOOP("Roulette")
545  , QT_TR_NOOP("Shadow Flare")
546  , QT_TR_NOOP("Pandora's Box")
547  };
548 
549  inline static const MATERIA _emptyMateria{
550  QT_TR_NOOP("EMPTY")
551  , {/* NO SKILLS */}
552  , QStringLiteral("ID:0xFF"), QString(), QString(), QString()
553  , 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0, QString(), {QString()}
554  };
555  inline static const QList<MATERIA> _materiaList{
556  {
557  QT_TR_NOOP("MP Plus")
558  , {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%")}
559  , QT_TR_NOOP("MaxMp:+% depending on level"), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
560  , 0x00, 0, 0, 0, 0, 0, 0, 0, 0, {0, 10000, 20000, 30000, 50000}, 3, 5, QString(), {QString()}
561  },
562  { QT_TR_NOOP("HP Plus")
563  , {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%")}
564  , QT_TR_NOOP("MaxHp:+% depending on level"), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
565  , 0x01, 0, 0, 0, 0, 0, 0, 0, 0, {0, 10000, 20000, 30000, 50000}, 3, 5, QString(), {QString()}
566  },
567  {
568  QT_TR_NOOP("Speed Plus")
569  , {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%")}
570  , QT_TR_NOOP("Dex:+% depending on level"), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
571  , 0x02, 0, 0, 0, 0, 0, 0, 0, 0, {0, 15000, 30000, 60000, 100000}, 3, 5, QString(), {QString()}
572  },
573  {
574  QT_TR_NOOP("Magic Plus")
575  , {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%")}
576  , QT_TR_NOOP("Mag:+% depending on level"), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
577  , 0x03, 0, 0, 0, 0, 0, 0, 0, 0, {0, 10000, 20000, 30000, 50000}, 3, 5, QString(), {QString()}
578  },
579  {
580  QT_TR_NOOP("Luck Plus")
581  , {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%")}
582  , QT_TR_NOOP("Lck:+% depending on level"), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
583  , 0x04, 0, 0, 0, 0, 0, 0, 0, 0, {0, 15000, 30000, 60000, 100000}, 3, 5, QString(), {QString()}
584  },
585  {
586  QT_TR_NOOP("EXP Plus")
587  , {QT_TR_NOOP("Exp Plus +50%"), QT_TR_NOOP("Exp Plus +100%")}
588  , QT_TR_NOOP("Lck:+1"), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
589  , 0x05, 0, 0, 0, 0, 0, +1, 0, 0, {0, 60000, 150000, 0, 0}, 3, 3, QString(), {QString()}
590  },
591  {
592  QT_TR_NOOP("Gil Plus")
593  , {QT_TR_NOOP("Gil Plus +50%"), QT_TR_NOOP("Gil Plus +100%")}
594  , QT_TR_NOOP("Lck:+1"), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
595  , 0x06, 0, 0, 0, 0, 0, +1, 0, 0, {0, 80000, 150000, 0, 0}, 3, 3, QString(), {QString()}
596  },
597  {
598  QT_TR_NOOP("Enemy Away")
599  , {QT_TR_NOOP("Encounter Rate -50%"), QT_TR_NOOP("Encounter Rate -75%")}
600  , QT_TR_NOOP("Lck:+1"), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
601  , 0x07, 0, 0, 0, 0, 0, +1, 0, 0, {0, 10000, 50000, 0, 0}, 3, 3, QString(), {QString()}
602  },
603  {
604  QT_TR_NOOP("Enemy Lure")
605  , {QT_TR_NOOP("Encounter Rate +50%"), QT_TR_NOOP("Encounter Rate +100%")}
606  , QT_TR_NOOP("Lck:-1"), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
607  , 0x08, 0, 0, 0, 0, 0, -1, 0, 0, {0, 10000, 50000, 0, 0}, 3, 3, QString(), {QString()}
608  },
609  {
610  QT_TR_NOOP("Chocobo Lure")
611  , {QT_TR_NOOP("Chocobo Lure"), QT_TR_NOOP("Chocobo Lure +50%"), QT_TR_NOOP("Chocobo Lure +100%"), QT_TR_NOOP("Chocobo Lure +200%")}
612  , QT_TR_NOOP("Lck:+1"), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
613  , 0x09, 0, 0, 0, 0, 0, +1, 0, 0, {0, 3000, 10000, 30000, 0}, 3, 4, QString(), {QString()}
614  },
615  {
616  QT_TR_NOOP("Pre-emptive")
617  , {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%")}
618  , QT_TR_NOOP("Dex:+2"), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
619  , 0x0A, 0, 0, 0, 0, +2, 0, 0, 0, {0, 8000, 20000, 40000, 80000}, 3, 5, QString(), {QString()}
620  },
621  {
622  QT_TR_NOOP("Long Range")
623  , {QT_TR_NOOP("Long Range")}
624  , QString(), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
625  , 0x0B, 0, 0, 0, 0, 0, 0, 0, 0, {0, 80000, 0, 0, 0}, 3, 2, QString(), {QString()}
626  },
627  {
628  QT_TR_NOOP("Mega All")
629  , {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")}
630  , QString(), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
631  , 0x0C, 0, 0, 0, 0, 0, 0, 0, 0, {0, 20000, 40000, 80000, 160000}, 3, 5, QString(), {QString()}
632  },
633  {
634  QT_TR_NOOP("Counter Attack")
635  ,{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%")}
636  , QString(), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
637  , 0x0D, 0, 0, 0, 0, 0, 0, 0, 0, {0, 10000, 20000, 50000, 100000}, 3, 5, QString(), {QString()}
638  },
639  {
640  QT_TR_NOOP("Slash-All")
641  , {QT_TR_NOOP("Skill: Slash-All"), QT_TR_NOOP("Skill: Flash")}
642  , QString(), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
643  , 0x0E, 0, 0, 0, 0, 0, 0, 0, 0, {0, 130000, 150000, 0, 0}, 5, 3, QString(), {QString()}
644  },
645  {
646  QT_TR_NOOP("Double Cut")
647  , {QT_TR_NOOP("Skill: 2x-Cut"), QT_TR_NOOP("Skill: 4x-Cut")}
648  , QT_TR_NOOP("Dex:+2"), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
649  , 0x0F, 0, 0, 0, 0, +2, 0, 0, 0, {0, 100000, 150000, 0, 0}, 5, 3, QString(), {QString()}
650  },
651  {
652  QT_TR_NOOP("Cover")
653  , {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%")}
654  , QT_TR_NOOP("Vit:+1"), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
655  , 0x10, 0, 0, 0, +1, 0, 0, 0, 0, {0, 2000, 10000, 25000, 40000}, 3, 5, QString(), {QString()}
656  },
657  {
658  QT_TR_NOOP("Underwater")
659  , {QT_TR_NOOP("Underwater")}
660  , QString(), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
661  , 0x11, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 3, 1, QString(), {QString()}
662  },
663  {
664  QT_TR_NOOP("HP <-> MP")
665  , {QT_TR_NOOP("HP <-> MP")}
666  , QString(), QStringLiteral(":/materia/independent"), QStringLiteral(":/materia/independent_star_empty"), QStringLiteral(":/materia/independent_star_full")
667  , 0x12, 0, 0, 0, 0, 0, 0, 0, 0, {0, 80000, 0, 0, 0}, 3, 2, QString(), {QString()}
668  },
669  {
670  QT_TR_NOOP("W-Magic")
671  , {QT_TR_NOOP("Skill: W-Magic")}
672  , QString(), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
673  , 0x13, 0, 0, 0, 0, 0, 0, 0, 0, {0, 250000, 0, 0, 0}, 5, 2, QString(), {QString()}
674  },
675  {
676  QT_TR_NOOP("W-Summon")
677  , {QT_TR_NOOP("Skill: W-Summon")}
678  , QString(), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
679  , 0x14, 0, 0, 0, 0, 0, 0, 0, 0, {0, 250000, 0, 0, 0}, 5, 2, QString(), {QString()}
680  },
681  {
682  QT_TR_NOOP("W-Item")
683  , {QT_TR_NOOP("Skill: W-Item")}
684  , QString(), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
685  , 0x15, 0, 0, 0, 0, 0, 0, 0, 0, {0, 250000, 0, 0, 0}, 5, 2, QString(), {QString()}
686  },
687  {
688  QStringLiteral("ID:0x16")
689  , {/* NO SKILLS */}
690  , QStringLiteral("ID:0x16"), QStringLiteral(":/materia/all"), QString(), QString()
691  , 0X16, 0, 0, 0, 0, 0, 0, 0, 0, {0xFFFFFF, 0, 0, 0, 0}, 0, 0, QString(), {QString()}
692  },
693  {
694  QT_TR_NOOP("All")
695  , {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")}
696  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
697  , 0x17, 0, 0, 0, 0, 0, 0, 0, 0, {0, 1500, 6000, 18000, 35000}, 4, 5, QString(), {QString()}
698  },
699  {
700  QT_TR_NOOP("Counter")
701  , {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%")}
702  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
703  , 0x18, 0, 0, 0, 0, 0, 0, 0, 0, {0, 20000, 40000, 60000, 100000}, 4, 5, QString(), {QString()}
704  },
705  {
706  QT_TR_NOOP("Magic Counter")
707  , {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%")}
708  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
709  , 0x19, 0, 0, 0, 0, 0, 0, 0, 0, {0, 20000, 40000, 80000, 300000}, 4, 5, QString(), {QString()}
710  },
711  {
712  QT_TR_NOOP("MP Turbo")
713  , {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%")}
714  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
715  , 0x1A, 0, 0, 0, 0, 0, 0, 0, 0, {0, 10000, 30000, 60000, 120000}, 4, 5, QString(), {QString()}
716  },
717  {
718  QT_TR_NOOP("MP Absorb")
719  , {QT_TR_NOOP("MP Absorb")}
720  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
721  , 0x1B, 0, 0, 0, 0, 0, 0, 0, 0, {0, 100000, 0, 0, 0}, 4, 2, QString(), {QString()}
722  },
723  {
724  QT_TR_NOOP("HP Absorb")
725  , {QT_TR_NOOP("HP Absorb")}
726  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
727  , 0x1C, 0, 0, 0, 0, 0, 0, 0, 0, {0, 100000, 0, 0, 0}, 4, 2, QString(), {QString()}
728  },
729  {
730  QT_TR_NOOP("Elemental")
731  , {QT_TR_NOOP("Elemental 50%"), QT_TR_NOOP("Elemental 100%"), QT_TR_NOOP("Elemental 200%")}
732  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
733  , 0x1D, 0, 0, 0, 0, 0, 0, 0, 0, {0, 10000, 40000, 80000, 0}, 4, 4, QString(), {QString()}
734  },
735  {
736  QT_TR_NOOP("Added Effect")
737  , {QT_TR_NOOP("Added Effect")}
738  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
739  , 0x1E, 0, 0, 0, 0, 0, 0, 0, 0, {0, 100000, 0, 0, 0}, 4, 2, QString(), {QString()}
740  },
741  {
742  QT_TR_NOOP("Sneak Attack")
743  , {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%")}
744  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
745  , 0x1F, 0, 0, 0, 0, 0, 0, 0, 0, {0, 20000, 60000, 100000, 150000}, 4, 5, QString(), {QString()}
746  },
747  {
748  QT_TR_NOOP("Final Attack")
749  , {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")}
750  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
751  , 0x20, 0, 0, 0, 0, 0, 0, 0, 0, {0, 20000, 40000, 80000, 160000}, 4, 5, QString(), {QString()}
752  },
753  {
754  QT_TR_NOOP("Added Cut")
755  , {QT_TR_NOOP("Added Cut")}
756  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
757  , 0x21, 0, 0, 0, 0, 0, 0, 0, 0, {0, 200000, 0, 0, 0}, 4, 2, QString(), {QString()}
758  },
759  {
760  QT_TR_NOOP("Steal-As-Well")
761  , {QT_TR_NOOP("Steal as well")}
762  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
763  , 0x22, 0, 0, 0, 0, 0, 0, 0, 0, {0, 200000, 0, 0, 0}, 4, 2, QString(), {QString()}
764  },
765  {
766  QT_TR_NOOP("Quadra Magic")
767  , {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")}
768  , QString(), QStringLiteral(":/materia/support"), QStringLiteral(":/materia/support_star_empty"), QStringLiteral(":/materia/support_star_full")
769  , 0x23, 0, 0, 0, 0, 0, 0, 0, 0, {0, 40000, 80000, 120000, 200000}, 4, 5, QString(), {QString()}
770  },
771  {
772  QT_TR_NOOP("Steal")
773  , {QT_TR_NOOP("Skill: Steal"), QT_TR_NOOP("Skill: Mug")}
774  , QT_TR_NOOP("Dex:+2"), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
775  , 0x24, 0, 0, 0, 0, +2, 0, 0, 0, {0, 40000, 50000, 0, 0}, 5, 3, QString(), {QString()}
776  },
777  {
778  QT_TR_NOOP("Sense")
779  , {QT_TR_NOOP("Skill: Sense")}
780  , QString(), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
781  , 0x25, 0, 0, 0, 0, 0, 0, 0, 0, {0, 40000, 0, 0, 0}, 5, 2, QString(), {QString()}
782  },
783  {
784  QStringLiteral("ID:0x26")
785  , {/* NO SKILLS */}
786  , QStringLiteral("ID:0x26"), QStringLiteral(":/materia/all"), QString(), QString()
787  , 0X26, 0, 0, 0, 0, 0, 0, 0, 0, {0xFFFFFF, 0, 0, 0, 0}, 0, 0, QString(), {QString()}
788  },
789  {
790  QT_TR_NOOP("Throw")
791  , {QT_TR_NOOP("Skill: Throw"), QT_TR_NOOP("Skill: Coin")}
792  , QT_TR_NOOP("Vit:+1"), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
793  , 0x27, 0, 0, 0, +1, 0, 0, 0, 0, {0, 45000, 60000, 0, 0}, 5, 3, QString(), {QString()}
794  },
795  {
796  QT_TR_NOOP("Morph")
797  , {QT_TR_NOOP("Skill: Morph")}
798  , QString(), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
799  , 0x28, 0, 0, 0, 0, 0, 0, 0, 0, {0, 100000, 0, 0, 0}, 5, 2, QString(), {QString()}
800  },
801  {
802  QT_TR_NOOP("Deathblow")
803  , {QT_TR_NOOP("Skill: DeathBlow")}
804  , QT_TR_NOOP("Lck:+1"), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
805  , 0x29, 0, 0, 0, 0, 0, +1, 0, 0, {0, 40000, 0, 0, 0}, 5, 2, QString(), {QString()}
806  },
807  {
808  QT_TR_NOOP("Manipulate")
809  , {QT_TR_NOOP("Skill: Manipulate")}
810  , QString(), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
811  , 0x2A, 0, 0, 0, 0, 0, 0, 0, 0, {0, 40000, 0, 0, 0}, 5, 2, QString(), {QString()}
812  },
813  {
814  QT_TR_NOOP("Mime")
815  , {QT_TR_NOOP("Skill: Mime")}
816  , QString(), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
817  , 0x2B, 0, 0, 0, 0, 0, 0, 0, 0, {0, 100000, 0, 0, 0}, 5, 2, QString(), {QString()}
818  },
819  {
820  QT_TR_NOOP("Enemy Skill")
821  , {QT_TR_NOOP("Skill: Enemy Skill")}
822  , QString(), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
823  , 0x2C, 0, 0, 0, 0, 0, 0, 0, 0, {16777215, 0, 0, 0, 0}, 5, 1, QString(), {QString()}
824  },
825  {
826  QStringLiteral("ID:0x2D")
827  , {/* NO SKILLS */}
828  , QStringLiteral("ID:0x2D"), QStringLiteral(":/materia/all"), QString(), QString()
829  , 0X2D, 0, 0, 0, 0, 0, 0, 0, 0, {0xFFFFFF, 0, 0, 0, 0}, 0, 0, QString(), {QString()}
830  },
831  {
832  QStringLiteral("ID:0x2E")
833  , {/* NO SKILLS */}
834  , QStringLiteral("ID:0x2E"), QStringLiteral(":/materia/all"), QString(), QString()
835  , 0X2E, 0, 0, 0, 0, 0, 0, 0, 0, {0xFFFFFF, 0, 0, 0, 0}, 0, 0, QString(), {QString()}
836  },
837  {
838  QStringLiteral("ID:0x2F")
839  , {/* NO SKILLS */}
840  , QStringLiteral("ID:0x2F"), QStringLiteral(":/materia/all"), QString(), QString()
841  , 0X2F, 0, 0, 0, 0, 0, 0, 0, 0, {0xFFFFFF, 0, 0, 0, 0}, 0, 0, QString(), {QString()}
842  },
843  {
844  QT_TR_NOOP("Master Command")
845  , _masterCommandList
846  , QString(), QStringLiteral(":/materia/command"), QStringLiteral(":/materia/command_star_empty"), QStringLiteral(":/materia/command_star_full")
847  , 0x30, 0, 0, 0, 0, 0, 0, 0, 0, {0xFFFFFF, 0, 0, 0, 0}, 5, 1, QString(), {QString()}
848  },
849  {
850  QT_TR_NOOP("Fire")
851  , {QT_TR_NOOP("Fire (4mp)"), QT_TR_NOOP("Fire2 (22mp)"), QT_TR_NOOP("Fire3 (52mp)")}
852  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Str:-1 Mag:+1"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
853  , 0x31, -2, +2, -1, 0, 0, 0, +1, 0, {0, 2000, 18000, 35000, 0}, 1, 4, QT_TR_NOOP("[Fire]"), {QString()}
854  },
855  {
856  QT_TR_NOOP("Ice")
857  , {QT_TR_NOOP("Ice (4mp)"), QT_TR_NOOP("Ice2 (22mp)"), QT_TR_NOOP("Ice3 (52mp)")}
858  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Str:-1 Mag:+1"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
859  , 0x32, -2, +2, -1, 0, 0, 0, +1, 0, {0, 2000, 18000, 35000, 0}, 1, 4, QT_TR_NOOP("[Ice]"), {QString()}
860  },
861  {
862  QT_TR_NOOP("Earth")
863  , {QT_TR_NOOP("Quake (6mp)"), QT_TR_NOOP("Quake2 (28mp)"), QT_TR_NOOP("Quake3 (68mp)")}
864  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Str:-1 Mag:+1"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
865  , 0x33, -2, +2, -1, 0, 0, 0, +1, 0, {0, 6000, 22000, 40000, 0}, 1, 4, QT_TR_NOOP("[Earth]"), {QString()}
866  },
867  {
868  QT_TR_NOOP("Lightning")
869  , {QT_TR_NOOP("Bolt (4mp)"), QT_TR_NOOP("Bolt2 (22mp)"), QT_TR_NOOP("Bolt3 (52mp)")}
870  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Str:-1 Mag:+1"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
871  , 0x34, -2, +2, -1, 0, 0, 0, +1, 0, {0, 2000, 18000, 35000, 0}, 1, 4, QT_TR_NOOP("[Lightning]"), {QString()}
872  },
873  {
874  QT_TR_NOOP("Restore")
875  , {QT_TR_NOOP("Cure (5mp)"), QT_TR_NOOP("Cure2 (24mp)"), QT_TR_NOOP("Regen (30mp)"), QT_TR_NOOP("Cure3 (64mp)")}
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  , 0x35, -2, +2, -1, 0, 0, 0, +1, 0, {0, 2500, 17000, 25000, 40000}, 1, 5, QString(), {QString()}
878  },
879  {
880  QT_TR_NOOP("Heal")
881  , {QT_TR_NOOP("Poisona (3mp)"), QT_TR_NOOP("Esuna (15mp)"), QT_TR_NOOP("Resist (120mp)")}
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  , 0x36, -2, +2, -1, 0, 0, 0, +1, 0, {0, 12000, 52000, 60000, 0}, 1, 4, QString(), {QString()}
884  },
885  {
886  QT_TR_NOOP("Revive")
887  , {QT_TR_NOOP("Life (34mp)"), QT_TR_NOOP("Life2 (100mp)")}
888  , 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")
889  , 0x37, -5, +5, -2, -1, 0, 0, +2, +1, {0, 45000, 55000, 0, 0}, 1, 3, QString(), {QString()}
890  },
891  {
892  QT_TR_NOOP("Seal")
893  , {QT_TR_NOOP("Sleepel (8mp)"), QT_TR_NOOP("Silence (24mp)")}
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  , 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]")}
896  },
897  {
898  QT_TR_NOOP("Mystify")
899  , {QT_TR_NOOP("Confu (18mp)"), QT_TR_NOOP("Berserk (28mp)")}
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  , 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]")}
902  },
903  {
904  QT_TR_NOOP("Transform")
905  , {QT_TR_NOOP("Mini (10mp)"), QT_TR_NOOP("Toad (14mp)")}
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  , 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]")}
908  },
909  {
910  QT_TR_NOOP("Exit")
911  , {QT_TR_NOOP("Exit (16mp)"), QT_TR_NOOP("Remove (99mp)")}
912  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Str:-1 Mag:+1"), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
913  , 0x3B, -2, +2, -1, 0, 0, 0, +1, 0, {0, 10000, 30000, 0, 0}, 1, 3, QString(), {QString()}
914  },
915  {
916  QT_TR_NOOP("Poison")
917  , {QT_TR_NOOP("Bio (8mp)"), QT_TR_NOOP("Bio2 (36mp)"), QT_TR_NOOP("Bio3 (80mp)")}
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  , 0x3C, -2, +2, -1, 0, 0, 0, +1, 0, {0, 5000, 20000, 38000, 0}, 1, 4, QT_TR_NOOP("[Poison]"), {QT_TR_NOOP("[Poison]")}
920  },
921  {
922  QT_TR_NOOP("Gravity")
923  , {QT_TR_NOOP("Demi (14mp)"), QT_TR_NOOP("Demi2 (33mp)"), QT_TR_NOOP("Demi3 (48mp)")}
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  , 0x3D, -2, +2, -1, 0, 0, 0, +1, 0, {0, 10000, 20000, 40000, 0}, 1, 4, QT_TR_NOOP("[Gravity]"), {QString()}
926  },
927  {
928  QT_TR_NOOP("Barrier")
929  , {QT_TR_NOOP("Barrier (16mp)"), QT_TR_NOOP("M-Barrier (24mp)"), QT_TR_NOOP("Reflect (30mp)"), QT_TR_NOOP("Wall (58mp)")}
930  , 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")
931  , 0x3E, -5, +5, -2, -1, 0, 0, +2, +1, {0, 5000, 15000, 30000, 45000}, 1, 5, QString(), {QString()}
932  },
933  {
934  QStringLiteral("ID:0x3F")
935  , {/* NO SKILLS */}
936  , QStringLiteral("ID:0x3F"), QStringLiteral(":/materia/all"), QString(), QString()
937  , 0X3F, 0, 0, 0, 0, 0, 0, 0, 0, {0xFFFFFF, 0, 0, 0, 0}, 0, 0, QString(), {QString()}
938  },
939  {
940  QT_TR_NOOP("Comet")
941  , {QT_TR_NOOP("Comet (70mp)"), QT_TR_NOOP("Comet2 (110mp)")}
942  , 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")
943  , 0x40, -5, +5, -2, -1, 0, 0, +2, +1, {0, 12000, 60000, 0, 0}, 1, 3, QString(), {QString()}
944  },
945  {
946  QT_TR_NOOP("Time")
947  , {QT_TR_NOOP("Haste (18mp)"), QT_TR_NOOP("Slow (20mp)"), QT_TR_NOOP("Stop (34mp)")}
948  , 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")
949  , 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]")}
950  },
951  {
952  QStringLiteral("ID:0x42")
953  , {/* NO SKILLS */}
954  , QStringLiteral("ID:0x42"), QStringLiteral(":/materia/all"), QString(), QString()
955  , 0X42, 0, 0, 0, 0, 0, 0, 0, 0, {0xFFFFFF, 0, 0, 0, 0}, 0, 0, QString(), {QString()}
956  },
957  {
958  QStringLiteral("ID:0x43")
959  , {/* NO SKILLS */}
960  , QStringLiteral("ID:0x43"), QStringLiteral(":/materia/all"), QString(), QString()
961  , 0X43, 0, 0, 0, 0, 0, 0, 0, 0, {0xFFFFFF, 0, 0, 0, 0}, 0, 0, QString(), {QString()}
962  },
963  {
964  QT_TR_NOOP("Destruct")
965  , {QT_TR_NOOP("DeBarrier (12mp)"), QT_TR_NOOP("DeSpell (20mp)"), QT_TR_NOOP("Death (30mp)")}
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  , 0x44, -5, +5, -2, -1, 0, 0, +2, +1, {0, 6000, 10000, 45000, 0}, 1, 4, QString(), {QT_TR_NOOP("[Death]")}
968  },
969  {
970  QT_TR_NOOP("Contain")
971  , {QT_TR_NOOP("Freeze (82mp)"), QT_TR_NOOP("Break (86mp)"), QT_TR_NOOP("Tornado (90mp)"), QT_TR_NOOP("Flare (100mp)")}
972  , 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")
973  , 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]")}
974  },
975  {
976  QT_TR_NOOP("Full Cure")
977  , {QString(), QT_TR_NOOP("Full Cure (99mp)")}
978  , 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")
979  , 0x46, -10, +10, -4, -2, 0, 0, +4, +2, {0, 3000, 100000, 0, 0}, 1, 3, QString(), {QString()}
980  },
981  {
982  QT_TR_NOOP("Shield")
983  , {QString(), QT_TR_NOOP("Shield (180mp)")}
984  , 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")
985  , 0x47, -10, +10, -4, -2, 0, 0, +4, +2, {0, 10000, 100000, 0, 0}, 1, 3, QString(), {QString()}
986  },
987  {
988  QT_TR_NOOP("Ultima")
989  , {QString(), QT_TR_NOOP("Ultima (130mp)")}
990  , 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")
991  , 0x48, -10, +10, -4, -2, 0, 0, +4, +2, {0, 5000, 100000, 0, 0}, 1, 3, QString(), {QString()}
992  },
993  {
994  QT_TR_NOOP("Master Magic")
995  , _masterMagicList
996  , QString(), QStringLiteral(":/materia/magic"), QStringLiteral(":/materia/magic_star_empty"), QStringLiteral(":/materia/magic_star_full")
997  , 0x49, 0, 0, 0, 0, 0, 0, 0, 0, {0xFFFFFF, 0, 0, 0, 0}, 1, 1, QString(), {QString()}
998  },
999  {
1000  QT_TR_NOOP("Choco/Mog")
1001  , {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)")}
1002  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Mag:+1"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1003  , 0x4A, -2, +2, 0, 0, 0, 0, +1, 0, {0, 2000, 14000, 25000, 35000}, 2, 5, QT_TR_NOOP("[Wind]"), {QString()}
1004  },
1005  {
1006  QT_TR_NOOP("Shiva")
1007  , {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)")}
1008  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Mag:+1"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1009  , 0x4B, -2, +2, 0, 0, 0, 0, +1, 0, {0, 4000, 15000, 30000, 50000}, 2, 5, QT_TR_NOOP("[Ice]"), {QString()}
1010  },
1011  {
1012  QT_TR_NOOP("Ifrit")
1013  , {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)")}
1014  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Mag:+1"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1015  , 0x4C, -2, +2, 0, 0, 0, 0, +1, 0, {0, 5000, 20000, 35000, 60000}, 2, 5, QT_TR_NOOP("[Fire]"), {QString()}
1016  },
1017  {
1018  QT_TR_NOOP("Ramuh")
1019  , {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)")}
1020  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Mag:+1"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1021  , 0x4D, -2, +2, 0, 0, 0, 0, +1, 0, {0, 10000, 25000, 50000, 70000}, 2, 5, QT_TR_NOOP("[Lightning]"), {QString()}
1022  },
1023  {
1024  QT_TR_NOOP("Titan")
1025  , {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)")}
1026  , QT_TR_NOOP("MaxHp:-2% MaxMp:+2% Mag:+1"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1027  , 0x4E, -2, +2, 0, 0, 0, 0, +1, 0, {0, 15000, 30000, 60000, 80000}, 2, 5, QT_TR_NOOP("[Earth]"), {QString()}
1028  },
1029  {
1030  QT_TR_NOOP("Odin")
1031  , {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)")}
1032  , QT_TR_NOOP("MaxHp:-5% MaxMp:+5% Mag:+1 Spi:+1"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1033  , 0x4F, -5, +5, 0, 0, 0, 0, +1, +1, {0, 16000, 32000, 65000, 90000}, 2, 5, QString(), {QT_TR_NOOP("[Death]")}
1034  },
1035  {
1036  QT_TR_NOOP("Leviathan")
1037  , {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)")}
1038  , QT_TR_NOOP("MaxHp:-5% MaxMp:+5% Mag:+1 Spi:+1"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1039  , 0x50, -5, +5, 0, 0, 0, 0, +1, +1, {0, 18000, 38000, 70000, 100000}, 2, 5, QT_TR_NOOP("[Water]"), {QString()}
1040  },
1041  {
1042  QT_TR_NOOP("Bahamut")
1043  , {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)")}
1044  , QT_TR_NOOP("MaxHp:-5% MaxMp:+5% Mag:+1 Spi:+1"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1045  , 0x51, -5, +5, 0, 0, 0, 0, +1, +1, {0, 20000, 50000, 80000, 120000}, 2, 5, QString(), {QString()}
1046  },
1047  {
1048  QT_TR_NOOP("Kujata")
1049  , {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)")}
1050  , QT_TR_NOOP("MaxHp:-5% MaxMp:+5% Mag:+1 Spi:+1"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1051  , 0x52, -5, +5, 0, 0, 0, 0, +1, +1, {0, 22000, 60000, 90000, 140000}, 2, 5, QString(), {QString()}
1052  },
1053  {
1054  QT_TR_NOOP("Alexander")
1055  , {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)")}
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  , 0x53, -5, +5, 0, 0, 0, 0, +1, +1, {0, 25000, 65000, 100000, 150000}, 2, 5, QT_TR_NOOP("[Holy]"), {QString()}
1058  },
1059  {
1060  QT_TR_NOOP("Phoenix")
1061  , {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)")}
1062  , QT_TR_NOOP("MaxHp:-10% MaxMp:+10% Mag:+2 Spi:+2"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1063  , 0x54, -10, +10, 0, 0, 0, 0, +2, +2, {0, 28000, 70000, 120000, 180000}, 2, 5, QT_TR_NOOP("[Fire]"), {QString()}
1064  },
1065  {
1066  QT_TR_NOOP("Neo Bahamut")
1067  , {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)")}
1068  , QT_TR_NOOP("MaxHp:-10% MaxMp:+10% Mag:+2 Spi:+2"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1069  , 0x55, -10, +10, 0, 0, 0, 0, +2, +2, {0, 30000, 80000, 140000, 200000}, 2, 5, QString(), {QString()}
1070  },
1071  {
1072  QT_TR_NOOP("Hades")
1073  , {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)")}
1074  , QT_TR_NOOP("MaxHp:-10% MaxMp:+15% Mag:+4 Spi:+4"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1075  , 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]")}
1076  },
1077  {
1078  QT_TR_NOOP("Typhon")
1079  , {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)")}
1080  , QT_TR_NOOP("MaxHp:-10% MaxMp:+15% Mag:+4 Spi:+4"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1081  , 0x57, -10, +15, 0, 0, 0, 0, +4, +4, {0, 35000, 120000, 150000, 250000}, 2, 5, QT_TR_NOOP("[Wind]"), {QString()}
1082  },
1083  {
1084  QT_TR_NOOP("Bahamut ZERO")
1085  , {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)")}
1086  , QT_TR_NOOP("MaxHp:-10% MaxMp:+15% Mag:+4 Spi:+4"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1087  ,0x58, -10, +15, 0, 0, 0, 0, +4, +4, {0, 35000, 120000, 150000, 250000}, 2, 5, QString(), {QString()}
1088  },
1089  {
1090  QT_TR_NOOP("Knights of the Round")
1091  , {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)")}
1092  , QT_TR_NOOP("MaxHp:-10% MaxMp:+20% Mag:+8 Spi:+8"), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1093  , 0x59, -10, +20, 0, 0, 0, 0, +8, +8, {0, 50000, 200000, 300000, 500000}, 2, 5, QString(), {QString()}
1094  },
1095  {
1096  QT_TR_NOOP("Master Summon")
1097  , _masterSummonList
1098  , QString(), QStringLiteral(":/materia/summon"), QStringLiteral(":/materia/summon_star_empty"), QStringLiteral(":/materia/summon_star_full")
1099  , 0x5A, 0, 0, 0, 0, 0, 0, 0, 0, {0xFFFFFF, 0, 0, 0, 0}, 2, 1, QString(), {QString()}
1100  }
1101  };
1102  };
1103 };
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:142
FF7Materia::skills
static const Q_INVOKABLE QStringList skills(const int id)
skills - Get Skill for a materia
Definition: FF7Materia.h:128
FF7Materia::imageAllResource
static const Q_INVOKABLE QString imageAllResource()
Definition: FF7Materia.h:359
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:275
FF7Materia::levels
static const Q_INVOKABLE qint8 levels(const int id)
levels
Definition: FF7Materia.h:177
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:315
FF7Materia::emptyStarResource
static const Q_INVOKABLE QString emptyStarResource(int id)
Definition: FF7Materia.h:345
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:305
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:217
FF7Materia::image
static const QImage image(const int id)
Definition: FF7Materia.h:337
FF7Materia::imageAllMateria
static const QImage imageAllMateria()
Definition: FF7Materia.h:358
FF7MateriaSingleton
Definition: ff7tkQuickDataTypes.h:52
FF7Materia::fullStarResource
static const Q_INVOKABLE QString fullStarResource(int id)
Definition: FF7Materia.h:352
FF7Materia::get
static FF7Materia * get()
Get the FF7Materia Instance.
Definition: FF7Materia.h:376
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:185
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:165
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:202
FF7Materia::pixmap
static const QPixmap pixmap(const int id)
Definition: FF7Materia.h:336
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:247
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:338
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:224
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:231
FF7Materia::pixmapEmptyStar
static const QPixmap pixmapEmptyStar(int id)
Definition: FF7Materia.h:343
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:254
FF7Materia::icon
static const QIcon icon(const int id)
Definition: FF7Materia.h:335
FF7Materia::materiaAP
static const Q_INVOKABLE qint32 materiaAP(const materia mat)
materiaAP - read Ap from Materia type
Definition: FF7Materia.h:323
FF7Materia::pixmapFullStar
static const QPixmap pixmapFullStar(int id)
Definition: FF7Materia.h:350
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:268
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:344
materia
materia format saved in materia list or on a character
FF7Materia::imageFullStar
static const QImage imageFullStar(int id)
Definition: FF7Materia.h:351
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:261
FF7Materia::materiaAP
static const Q_INVOKABLE qint32 materiaAP(const quint8 ap[3])
materiaAP - Transform array into Ap
Definition: FF7Materia.h:331
FF7Materia::placeHolderNameFilter
static const Q_INVOKABLE QString & placeHolderNameFilter()
Definition: FF7Materia.h:361
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:239
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:209
FF7Materia::placeHolderIdList
static const Q_INVOKABLE QList< int > placeHolderIdList()
Definition: FF7Materia.h:363
FF7Materia::iconAllMateria
static const QIcon iconAllMateria()
Definition: FF7Materia.h:357
FF7Materia::encodeMateria
static Q_INVOKABLE materia encodeMateria(const int id, const qint32 ap)
encodeMateria encode a materia
Definition: FF7Materia.h:283