ff7tk  0.02
Toolkit for making FF7 Tools
FF7Char.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // copyright 2012 - 2016 Chris Rizzitello <sithlord48@gmail.com> //
3 // //
4 // This file is part of FF7tk //
5 // //
6 // FF7tk is free software: you can redistribute it and/or modify //
7 // it under the terms of the GNU General Public License as published by //
8 // the Free Software Foundation, either version 3 of the License, or //
9 // (at your option) any later version. //
10 // //
11 // FF7tk is distributed in the hope that it will be useful, //
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of //
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
14 // GNU General Public License for more details. //
15 /****************************************************************************/
16 
17 #include "FF7Char.h"
18 #include <QCoreApplication>
19 
21 quint8 FF7Char::id(int who){return Chars[who]._id;}
23 int FF7Char::weaponOffset(int who){return Chars[who]._weapon_offset;}
24 int FF7Char::numberOfWeapons(int who){return Chars[who]._num_weapons;}
25 QPixmap FF7Char::pixmap(int who){if(who>=0x00 && who<0x0B){return QPixmap(Chars[who]._avatarString);} else{return QPixmap();}}
26 QImage FF7Char::image(int who) {if(who>=0x00 && who<0x0B){return QImage(Chars[who]._avatarString);} else{return QImage();}}
27 QIcon FF7Char::icon(int who){return QIcon(pixmap(who));}
28 quint32 FF7Char::totalExpForLevel(int who,int level){return Chars[who]._charlvls[level];}
29 quint32 FF7Char::tnlForLevel(int who,int level){return Chars[who]._chartnls[level];}
30 quint8 FF7Char::stat_grade(int who,int stat){return Chars[who]._stat_grade[stat];}
31 int FF7Char::mp_base(int who,int lvl_bracket){return Chars[who]._mp_base[lvl_bracket];}
32 quint8 FF7Char::mp_gradent (int who, int lvl_bracket){return Chars[who]._mp_gradent[lvl_bracket];}
33 int FF7Char::hp_base(int who,int lvl_bracket){return Chars[who]._hp_base[lvl_bracket];}
34 quint8 FF7Char::hp_gradent (int who, int lvl_bracket){return Chars[who]._hp_gradent[lvl_bracket];}
35 int FF7Char::luck_base(int who,int lvl_bracket){return Chars[who]._luck_base[lvl_bracket];}
36 quint8 FF7Char::luck_gradent (int who, int lvl_bracket){return Chars[who]._luck_gradent[lvl_bracket];}
37 quint8 FF7Char::stat_base (int rank,int lvl_bracket){return _stat_base[rank][lvl_bracket];}
38 quint8 FF7Char::stat_gradent (int rank,int lvl_bracket){return _stat_gradent[rank][lvl_bracket];}
39 
40 QString FF7Char::defaultName(int who){return qApp->translate("Char_Names",Chars[who]._def_name.toLocal8Bit());}
41 
42 QStringList FF7Char::limits(int who)
43 {
44  QStringList translated_list;
45  for(int j=0;j<Chars[who]._limits.count();j++)
46  {
47  translated_list.append(qApp->translate("Char_Limits", Chars[who]._limits.at(j).toLocal8Bit()));
48  }
49  return translated_list;
50 }
51 
52 int FF7Char::statGain(int who,int stat, int stat_amount, int current_lvl, int next_lvl)
53 {
54  int gain=0;//return this
55  int diff=0; //holds our dif
56  int lvl_bracket=0; //track what bracket in the gradent/base were looking at.
57  //0:str; 1:vit; 2:mag; 3:spi; 4:dex; 5:luck; 6:hp; 7:mp
58  int baseline_stat=0; // holds our baseline_stat calculation.
59  //first find out the level bracket
60  if(stat_amount==0){stat_amount = 1;}
61  if(next_lvl>=2 && next_lvl<=11){lvl_bracket=0;}
62  else if(next_lvl>=12 && next_lvl<=21){lvl_bracket=1;}
63  else if(next_lvl>=22 && next_lvl<=31){lvl_bracket=2;}
64  else if(next_lvl>=32 && next_lvl<=41){lvl_bracket=3;}
65  else if(next_lvl>=42 && next_lvl<=51){lvl_bracket=4;}
66  else if(next_lvl>=52 && next_lvl<=61){lvl_bracket=5;}
67  else if(next_lvl>=62 && next_lvl<=81){lvl_bracket=6;}
68  else if(next_lvl>=82 && next_lvl<=99){lvl_bracket=7;}
69  //calculate the baseline to use.
70  if(stat<5)
71  {//calculating str,vit,mag,spi or dex
72  int grade = stat_grade(who,stat);
73  baseline_stat = stat_base(grade,lvl_bracket)+((stat_gradent(grade,lvl_bracket)*next_lvl)/100);
74  }
75  else if(stat==5){baseline_stat = luck_base(who,lvl_bracket)+((luck_gradent(who,lvl_bracket))/100);}//
76  else if(stat==6){baseline_stat = hp_base(who,lvl_bracket) + (next_lvl -1) * hp_gradent(who,lvl_bracket);}
77  else if(stat==7){baseline_stat = mp_base(who,lvl_bracket) + ((next_lvl -1) * mp_gradent(who,lvl_bracket)/10);}
78  //now calc the diff, so we can send back a gain based on type
79  if(stat<6)
80  {//str, vit,mag, spr,dex or luck all calculated the same
81  //Vegeta_Ss4 lv down mod
82  if(current_lvl < next_lvl) {diff = ((qrand() %8)+1) + (baseline_stat - stat_amount);}//is lv up
83  else {diff = ((qrand() %8)+1) - baseline_stat + stat_amount;}//lv down
84  if(diff<4){gain=0;}
85  else if(diff<7){gain=1;}
86  else if(diff<10){gain=2;}
87  else {gain=3;}
88  }
89  else if(stat==6)
90  {// Base HP Gain
91  //Vegeta_Ss4 lv down mod
92  if(current_lvl < next_lvl){diff = ((qrand()%8)+1) + (100* baseline_stat/stat_amount)-100;}//is lv up
93  else if (baseline_stat != 0){diff = ((qrand()%8)+1) + (100* stat_amount/baseline_stat)-100;}//lv down
94  if(diff==0){gain = hp_gradent(who,lvl_bracket)*0.40;}
95  else if (diff==1){gain = hp_gradent(who,lvl_bracket)*.50;}
96  else if (diff==2){gain = hp_gradent(who,lvl_bracket)*.50;}
97  else if (diff==3){gain = hp_gradent(who,lvl_bracket)*.60;}
98  else if (diff==4){gain = hp_gradent(who,lvl_bracket)*.70;}
99  else if (diff==5){gain = hp_gradent(who,lvl_bracket)*.80;}
100  else if (diff==6){gain = hp_gradent(who,lvl_bracket)*.90;}
101  else if (diff==7){gain = hp_gradent(who,lvl_bracket)*1.00;}
102  else if (diff==8){gain = hp_gradent(who,lvl_bracket)*1.10;}
103  else if (diff==9){gain = hp_gradent(who,lvl_bracket)*1.20;}
104  else if (diff==10){gain = hp_gradent(who,lvl_bracket)*1.30;}
105  else if (diff>=11){gain = hp_gradent(who,lvl_bracket)*1.50;}
106  }
107  else if(stat==7)
108  {// Base MP Gain
109  //Vegeta_Ss4 lv down mod
110  if(current_lvl < next_lvl) {diff = ((qrand()%8)+1) + (100* baseline_stat/stat_amount)-100;}//is lv up
111  else if (baseline_stat != 0){diff = ((qrand()%8)+1) + (100* stat_amount/baseline_stat)-100;}//lv down
112  if(diff ==0){gain = ((next_lvl*mp_gradent(who,lvl_bracket)/10)-((next_lvl-1)*mp_gradent(who,lvl_bracket)/10))*0.20;}
113  else if (diff==1){gain = ((next_lvl*mp_gradent(who,lvl_bracket)/10)-((next_lvl-1)*mp_gradent(who,lvl_bracket)/10))*.30;}
114  else if (diff==2){gain = ((next_lvl*mp_gradent(who,lvl_bracket)/10)-((next_lvl-1)*mp_gradent(who,lvl_bracket)/10))*.30;}
115  else if (diff==3){gain = ((next_lvl*mp_gradent(who,lvl_bracket)/10)-((next_lvl-1)*mp_gradent(who,lvl_bracket)/10))*.50;}
116  else if (diff==4){gain = ((next_lvl*mp_gradent(who,lvl_bracket)/10)-((next_lvl-1)*mp_gradent(who,lvl_bracket)/10))*.70;}
117  else if (diff==5){gain = ((next_lvl*mp_gradent(who,lvl_bracket)/10)-((next_lvl-1)*mp_gradent(who,lvl_bracket)/10))*.80;}
118  else if (diff==6){gain = ((next_lvl*mp_gradent(who,lvl_bracket)/10)-((next_lvl-1)*mp_gradent(who,lvl_bracket)/10))*.90;}
119  else if (diff==7){gain = ((next_lvl*mp_gradent(who,lvl_bracket)/10)-((next_lvl-1)*mp_gradent(who,lvl_bracket)/10))*1.00;}
120  else if (diff==8){gain = ((next_lvl*mp_gradent(who,lvl_bracket)/10)-((next_lvl-1)*mp_gradent(who,lvl_bracket)/10))*1.10;}
121  else if (diff==9){gain = ((next_lvl*mp_gradent(who,lvl_bracket)/10)-((next_lvl-1)*mp_gradent(who,lvl_bracket)/10))*1.20;}
122  else if (diff==10){gain = ((next_lvl*mp_gradent(who,lvl_bracket)/10)-((next_lvl-1)*mp_gradent(who,lvl_bracket)/10))*1.40;}
123  else if (diff>=11){gain = ((next_lvl*mp_gradent(who,lvl_bracket)/10)-((next_lvl-1)*mp_gradent(who,lvl_bracket)/10))*1.60;}
124  }
125  return gain;
126 }
int _num_weapons
Definition: FF7Char.h:198
quint32 _charlvls[99]
Definition: FF7Char.h:204
QImage image(int who)
Menu icon for a character.
Definition: FF7Char.cpp:26
int statGain(int who, int stat, int stat_amount, int current_lvl, int next_lvl)
how much to increase stat on level up
Definition: FF7Char.cpp:52
FF7Char()
Definition: FF7Char.cpp:20
quint8 _stat_grade[5]
Definition: FF7Char.h:206
int numberOfWeapons(int who)
number of weapons for a Character
Definition: FF7Char.cpp:24
static const Character Chars[11]
Chars[] Holds data for each character in Final Fantasy 7.
Definition: FF7Char.h:219
QString defaultName(int who)
default name for a character
Definition: FF7Char.cpp:40
int weaponStartingId(int who)
find what item id is the first weapon for a Character
Definition: FF7Char.cpp:22
int _mp_base[8]
Definition: FF7Char.h:207
quint8 hp_gradent(int who, int lvl_bracket)
characters mp gradent for set of levels
Definition: FF7Char.cpp:34
quint8 stat_base(int rank, int lvl_bracket)
base stat for rank in a set of levels
Definition: FF7Char.cpp:37
quint32 tnlForLevel(int who, int level)
experance needed to level up
Definition: FF7Char.cpp:29
qint8 _id
Definition: FF7Char.h:196
int luck_base(int who, int lvl_bracket)
characters base luck for set of levels
Definition: FF7Char.cpp:35
quint8 _mp_gradent[8]
Definition: FF7Char.h:208
quint32 _chartnls[99]
Definition: FF7Char.h:205
QIcon icon(int who)
Menu icon for a character.
Definition: FF7Char.cpp:27
quint8 luck_gradent(int who, int lvl_bracket)
characters luck gradent for set of levels
Definition: FF7Char.cpp:36
int mp_base(int who, int lvl_bracket)
characters base mp for set of levels
Definition: FF7Char.cpp:31
quint8 stat_grade(int who, int stat)
characters grade in a stat
Definition: FF7Char.cpp:30
quint8 _luck_gradent[8]
Definition: FF7Char.h:212
int weaponOffset(int who)
find what weapon number is the first weapon for a Character
Definition: FF7Char.cpp:23
int hp_base(int who, int lvl_bracket)
characters base hp for set of levels
Definition: FF7Char.cpp:33
static const quint8 _stat_gradent[30][8]
Definition: FF7Char.h:322
int _hp_base[8]
Definition: FF7Char.h:209
QStringList limits(int who)
Limit list for a character.
Definition: FF7Char.cpp:42
quint8 mp_gradent(int who, int lvl_bracket)
characters mp gradent for set of levels
Definition: FF7Char.cpp:32
int _starting_weapon_id
Definition: FF7Char.h:197
static const quint8 _stat_base[30][8]
Definition: FF7Char.h:289
quint8 id(int who)
get id value for Character
Definition: FF7Char.cpp:21
quint8 _luck_base[8]
Definition: FF7Char.h:211
int _weapon_offset
Definition: FF7Char.h:199
QPixmap pixmap(int who)
Menu icon for a character.
Definition: FF7Char.cpp:25
quint32 totalExpForLevel(int who, int level)
Exp needed to reach a level.
Definition: FF7Char.cpp:28
QStringList _limits
Definition: FF7Char.h:202
quint8 _hp_gradent[8]
Definition: FF7Char.h:210
quint8 stat_gradent(int rank, int lvl_bracket)
characters mp gradent for set of levels
Definition: FF7Char.cpp:38