stat_sklattrib 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486
  1. # stat_sklattrib
  2. !!******************** Warning! ********************
  3. !!The code in this location is both complex and very fundamental to most systems!
  4. !!Use EXTREME caution if modifying!
  5. !!Ask if understanding is required
  6. !!****************************************************
  7. !!For Users;
  8. !! For any Attribute or Skill, outside of "stat_sklattrib", the only things that get used are;
  9. !! the variables themselves, pcs_"name", for checks
  10. !! "name"_exp to replace straight adds (i.e. stren_exp +=1 instead of pcs_stren += 1)
  11. !! "name"_deg to replace losses (i.e. stren_deg -= 1 instead of pcs_stren -= 1)
  12. !! "name"_muta if setting higher attribute limits due to "mutations" ("name"_muta replaces the "mutagen" variables)
  13. !! And checking "name"_lvl if and only if it''s being used to check if an NPC/Item can still train the PC. That is also the only time there should be a gate on "name"_exp += x and should be a minimum of += rand(3,5). No other gates should be used.
  14. !! The others are used in the code as controllers and modifying anything except "name"_exp, "name"_deg, and "name"_muta outside of this routine can break things
  15. !! Attributes & Skills
  16. !! $att_name[x] and $skl_name[x]; an array that stores the name of each attribute variable
  17. !! For each attribute and skill variable, there are the following sub-variables
  18. !! _lvl, is the base level of an attribute/skill before adjustment
  19. !! _lvlst, level yesterday, used for error checking
  20. !! _deg is the days to attribute/skill loss and is reset on XP gain
  21. !! _exp is the amount of total XP gained so far for each and will replace all the gains in the rest of the code
  22. !! _mem is the amount of XP yesterday
  23. !! _muta replaces the assorted mutagen variables for attributes, this is to replace the 30 lines of code with 1
  24. !! _flr, this is the floor through which an attribute/skill cannot fall
  25. !! _xpnxt is the XP required to reach the next level
  26. !! Traits
  27. !! $traitattskl[x], this stores a list of all traits that can affect attribute or skill advancement or degradation, if a trait does not, it does not go in this array
  28. !! For each trait that can affect attribute or skill advancement or degradation;
  29. !! "trait"[y1] = 1 if affecting an attribute or = 2 if affecting a skill;
  30. !! "trait"[y2] = the index number in $att_name or $skl_name that corresponds to the skill/attribute to be effected;
  31. !! "trait"[y3] = indicates if it effects XP required to level by adjusting the base rate as a plus to the default of 60
  32. !! "trait"[y4] = indicates if it effects degradation rate by adjusting the base rate as a plus to the default of 60 for attributes or 90 (3/2) for skills
  33. !! the 'y' in the above is for traits that affect more than 1 skill or attribute, note they must be contiguous 0x, 1x, 2x, etc. there can be no gaps
  34. !! Note, the effects of multiple traits on a single skill or attribute stack
  35. !!Attribute variable list
  36. $att_name[0] = 'stren'
  37. $att_name[1] = 'agil'
  38. $att_name[2] = 'vital'
  39. $att_name[3] = 'intel'
  40. $att_name[4] = 'react'
  41. $att_name[5] = 'sprt'
  42. $att_name[6] = 'chrsm'
  43. $att_name[7] = 'prcptn'
  44. $att_name[8] = 'magik'
  45. !!Skill variable list
  46. !!Add new skills to the end; if removing a skill, move the rest up and then edit the Traits so that the index numbers are correct
  47. $skl_name[0] = 'jab'
  48. $skl_name[1] = 'punch'
  49. $skl_name[2] = 'kick'
  50. $skl_name[3] = 'def'
  51. $skl_name[4] = 'shoot'
  52. $skl_name[5] = 'vokal'
  53. $skl_name[6] = 'sewng'
  54. $skl_name[7] = 'instrmusic'
  55. $skl_name[8] = 'photoskl'
  56. $skl_name[9] = 'artskls'
  57. $skl_name[10] = 'danc'
  58. $skl_name[11] = 'dancero'
  59. $skl_name[12] = 'dancpol'
  60. $skl_name[13] = 'chess'
  61. $skl_name[14] = 'ttgmng'
  62. $skl_name[15] = 'humint'
  63. $skl_name[16] = 'persuas'
  64. $skl_name[17] = 'run'
  65. $skl_name[18] = 'vball'
  66. $skl_name[19] = 'icesktng'
  67. $skl_name[20] = 'wrstlng'
  68. $skl_name[21] = 'ftbll'
  69. $skl_name[22] = 'splcstng'
  70. $skl_name[23] = 'observ'
  71. $skl_name[24] = 'makupskl'
  72. $skl_name[25] = 'compskl'
  73. $skl_name[26] = 'comphckng'
  74. $skl_name[27] = 'hndiwrk'
  75. $skl_name[28] = 'servng'
  76. $skl_name[29] = 'mdlng'
  77. $skl_name[30] = 'medcn'
  78. $skl_name[31] = 'heels'
  79. $skl_name[32] = 'pool'
  80. !!Trait Section
  81. !!This is where Traits that will affect attribute or skill advancement or degradation have those aspects defined.
  82. !!Always put the trait name, variable name, and skill or attribute variable in a comment
  83. !!Natrual Dancer; Provides a 10% reduction in xp required to level dance skills
  84. nat_dancer[1] = 2 & nat_dancer[2] = 10 & nat_dancer[3] = -6 & nat_dancer[4] = 0
  85. nat_dancer[11] = 2 & nat_dancer[12] = 11 & nat_dancer[13] = -6 & nat_dancer[14] = 0
  86. nat_dancer[21] = 2 & nat_dancer[22] = 12 & nat_dancer[23] = -6 & nat_dancer[24] = 0
  87. !!Natrual Athlete; Provides a 10% reduction in xp required to level sports skills
  88. nat_athlete[1] = 2 & nat_athlete[2] = 17 & nat_athlete[3] = -6 & nat_athlete[4] = 0
  89. nat_athlete[11] = 2 & nat_athlete[12] = 18 & nat_athlete[13] = -6 & nat_athlete[14] = 0
  90. nat_athlete[21] = 2 & nat_athlete[22] = 19 & nat_athlete[23] = -6 & nat_athlete[24] = 0
  91. nat_athlete[31] = 2 & nat_athlete[32] = 20 & nat_athlete[33] = -6 & nat_athlete[34] = 0
  92. nat_athlete[41] = 2 & nat_athlete[42] = 21 & nat_athlete[43] = -6 & nat_athlete[44] = 0
  93. !!Scholarly; Provides a 10% reduction in xp required to level Intelligence, easier to get good notes at school, faster studying in the university
  94. schlrly[1] = 1 & schlrly[2] = 3 & schlrly[3] = -6 & schlrly[4] = 0
  95. !!Trait variable list; only traits that can affect attribute or skill advancement or degradation goes here
  96. $traitattskl[0] = 'nat_dancer'
  97. $traitattskl[1] = 'nat_athlete'
  98. $traitattskl[2] = 'schlrly'
  99. !!This is sets _lvl and _exp based on the value of pcs_"name" the first time so that _lvl and _exp do not need to set on start.
  100. !!Theoretically this can be eventually deleted.
  101. if attsklupdate = 0:
  102. i = 0 & x = 1
  103. :rstloop
  104. expadj = 60
  105. tl = 0
  106. :trtrstloop
  107. tltp = 0
  108. :trtrstinsdlp
  109. !! Note this loop is done with a flag set in the dynamic that is checked outside; this is because testing showed inconsistent results when jumping from inside the dynamic and with the whole loop in the dynamic.
  110. dynamic "
  111. if <<$traitattskl[tl]>> > 0 and <<$traitattskl[tl]>>[tltp + 1] = x and <<$traitattskl[tl]>>[tltp + 2] = i and <<$traitattskl[tl]>>[tltp + 3] ! 0: expadj += <<$traitattskl[tl]>>[tltp + 3]
  112. if <<$traitattskl[tl]>>[tltp + 11] ! 0: insdlpflag = 1
  113. "
  114. if insdlpflag = 1: tltp += 10 & insdlpflag = 0 & jump 'trtrstinsdlp'
  115. tl += 1
  116. if tl < arrsize ('$traitattskl'): jump 'trtrstloop'
  117. killvar 'tl' & killvar 'tltp' & killvar 'insdlpflag'
  118. if x = 1:
  119. $attskltmp = $att_name[i]
  120. else
  121. $attskltmp = $skl_name[i]
  122. end
  123. dynamic "
  124. if pcs_<<$attskltmp>> > 0 and <<$attskltmp>>_lvl = 0:
  125. <<$attskltmp>>_exp = (expadj * (pcs_<<$attskltmp>> - 1) * (pcs_<<$attskltmp>> - 1) / 180) + 1
  126. <<$attskltmp>>_lvl = pcs_<<$attskltmp>>
  127. <<$attskltmp>>_lvlst = <<$attskltmp>>_lvl
  128. end
  129. "
  130. killvar 'expadj' & killvar '$attskltmp'
  131. i += 1
  132. if (x = 1 and i < arrsize ('$att_name')) or (x = 2 and i < arrsize ('$skl_name')): jump 'rstloop'
  133. i = 0 & x += 1
  134. if x < 3: jump 'rstloop'
  135. killvar 'i' & killvar 'x'
  136. attsklupdate = 1
  137. end
  138. !!This is the section that runs when the call is from cikl
  139. if $ARGS[0] = 'daycall':
  140. !! Attribute XP with Skill XP gain
  141. x = 0
  142. :sklxploop
  143. y = 1
  144. :persklloop
  145. dynamic "$attnamtmp = $att_name[<<$skl_name[x]>>[y]]"
  146. dynamic "
  147. if <<$skl_name[x]>>_exp > <<$skl_name[x]>>_mem: <<$attnamtmp>>_exp += (<<$skl_name[x]>>_exp - <<$skl_name[x]>>_mem) / 5
  148. if <<$skl_name[x]>>[y + 1] = -1 or y >= 9: lpstopflg = 1
  149. "
  150. killvar '$attnamtmp'
  151. if lpstopflg = 0: y += 1 & jump 'persklloop'
  152. killvar 'lpstopflg'
  153. x += 1
  154. if x < arrsize ('$skl_name'): jump 'sklxploop'
  155. killvar 'x' & killvar 'y' & killvar '$attnamtmp'
  156. !! Degradation Loop
  157. i = 0 & x = 1
  158. :degloop
  159. degadj = 60
  160. if x = 2: degadj += 30
  161. expadj = 60
  162. tl = 0
  163. :trtdegloop
  164. tltp = 0
  165. :trtdeginsdlp
  166. !! Note this loop is done with a flag set in the dynamic that is checked outside; this is because testing showed inconsistent results when jumping from inside the dynamic and with the whole loop in the dynamic.
  167. dynamic "
  168. if <<$traitattskl[tl]>> > 0 and <<$traitattskl[tl]>>[tltp + 1] = x and <<$traitattskl[tl]>>[tltp + 2] = i and <<$traitattskl[tl]>>[tltp + 3] ! 0: expadj += <<$traitattskl[tl]>>[tltp + 3]
  169. if <<$traitattskl[tl]>> > 0 and <<$traitattskl[tl]>>[tltp + 1] = x and <<$traitattskl[tl]>>[tltp + 2] = i and <<$traitattskl[tl]>>[tltp + 4] ! 0: degadj += <<$traitattskl[tl]>>[tltp + 4]
  170. if <<$traitattskl[tl]>>[tltp + 11] ! 0: insdlpflag = 1
  171. "
  172. if insdlpflag = 1: tltp += 10 & insdlpflag = 0 & jump 'trtdeginsdlp'
  173. tl += 1
  174. if tl < arrsize ('$traitattskl'): jump 'trtdegloop'
  175. killvar 'tl' & killvar 'tltp' & killvar 'insdlpflag'
  176. if x = 1:
  177. $attskltmp = $att_name[i]
  178. else
  179. $attskltmp = $skl_name[i]
  180. end
  181. dynamic "
  182. if <<$attskltmp>>_lvl ! <<$attskltmp>>_lvlst: <<$attskltmp>>_lvl = <<$attskltmp>>_lvlst
  183. if <<$attskltmp>>_lvl < 100:
  184. degtmp = (102 - <<$attskltmp>>_lvl + <<$attskltmp>>_muta)
  185. else
  186. degtmp = 2 + <<$attskltmp>>_muta
  187. end
  188. degtmp = degadj * degtmp / 60
  189. if degtmp < 2: degtmp = 2
  190. if <<$attskltmp>>_exp < <<$attskltmp>>_mem: <<$attskltmp>>_exp = <<$attskltmp>>_mem
  191. if <<$attskltmp>>_exp = <<$attskltmp>>_mem:
  192. <<$attskltmp>>_deg -= 1
  193. else
  194. <<$attskltmp>>_deg = degtmp
  195. end
  196. if <<$attskltmp>>_deg <= 0 and <<$attskltmp>>_lvl > <<$attskltmp>>_flr:
  197. exptmp = <<$attskltmp>>_exp - (expadj * (<<$attskltmp>>_lvl - 1) * (<<$attskltmp>>_lvl - 1) / 180)
  198. if exptmp < 0: exptmp = 0
  199. <<$attskltmp>>_lvl -= 1
  200. <<$attskltmp>>_deg = degtmp
  201. <<$attskltmp>>_exp = (expadj * (<<$attskltmp>>_lvl - 1) * (<<$attskltmp>>_lvl - 1) / 180) + exptmp
  202. !! This will only do anything if the PC builds exp well in excess of what is needed to level
  203. if <<$attskltmp>>_exp > (expadj * (<<$attskltmp>>_lvl) * (<<$attskltmp>>_lvl) / 180): <<$attskltmp>>_exp -= (2 * <<$attskltmp>> - 1) / 10
  204. end
  205. <<$attskltmp>>_lvlst = <<$attskltmp>>_lvl
  206. <<$attskltmp>>_mem = <<$attskltmp>>_exp
  207. "
  208. killvar 'degtmp' & killvar 'exptmp'
  209. killvar 'degadj' & killvar 'expadj' & killvar '$attskltmp'
  210. i += 1
  211. if (x = 1 and i < arrsize ('$att_name')) or (x = 2 and i < arrsize ('$skl_name')): jump 'degloop'
  212. i = 0 & x += 1
  213. if x < 3: jump 'degloop'
  214. killvar 'i' & killvar 'x'
  215. end
  216. !!Advancement Loop
  217. i = 0 & x = 1
  218. :advloop
  219. expadj = 60
  220. tl = 0
  221. :trtadvloop
  222. tltp = 0
  223. :trtadvinsdlp
  224. !!Note this loop is done with a flag set in the dynamic that is checked outside; this is because testing showed inconsistent results when jumping from inside the dynamic and with the whole loop in the dynamic.
  225. dynamic "
  226. if <<$traitattskl[tl]>> > 0 and <<$traitattskl[tl]>>[tltp + 1] = x and <<$traitattskl[tl]>>[tltp + 2] = i and <<$traitattskl[tl]>>[tltp + 3] ! 0: expadj += <<$traitattskl[tl]>>[tltp + 3]
  227. if <<$traitattskl[tl]>>[tltp + 11] ! 0: insdlpflag = 1
  228. "
  229. if insdlpflag = 1: tltp += 10 & insdlpflag = 0 & jump 'trtadvinsdlp'
  230. tl += 1
  231. if tl < arrsize ('$traitattskl'): jump 'trtadvloop'
  232. killvar 'tl' & killvar 'tltp' & killvar 'insdlpflag'
  233. if x = 1:
  234. $attskltmp = $att_name[i]
  235. else
  236. $attskltmp = $skl_name[i]
  237. end
  238. dynamic "
  239. if <<$attskltmp>>_lvl ! <<$attskltmp>>_lvlst: <<$attskltmp>>_lvl = <<$attskltmp>>_lvlst
  240. if <<$attskltmp>>_exp > (expadj * <<$attskltmp>>_lvl * <<$attskltmp>>_lvl / 180): <<$attskltmp>>_lvl += 1
  241. <<$attskltmp>>_lvlst = <<$attskltmp>>_lvl
  242. <<$attskltmp>>_xpnxt = (expadj * <<$attskltmp>>_lvl * <<$attskltmp>>_lvl / 180) + 1
  243. if <<$attskltmp>>_lvl / 5 > <<$attskltmp>>_flr: <<$attskltmp>>_flr = <<$attskltmp>>_lvl / 5
  244. if <<$attskltmp>>_lvl > (100 + (<<$attskltmp>>_muta * 50)): <<$attskltmp>>_lvl = (100 + (<<$attskltmp>>_muta * 50))
  245. "
  246. !! removed by rachels 17/10/23 to correct the "marksman" bug - belongs into preceding dynamic code
  247. !! if <<$attskltmp>>_exp > (expadj * (<<$attskltmp>>_lvl + 1) * (<<$attskltmp>>_lvl + 1) / 180) - 1:
  248. !! <<$attskltmp>>_exp = (expadj * (<<$attskltmp>>_lvl + 1) * (<<$attskltmp>>_lvl + 1) / 180) - 1
  249. !! <<$attskltmp>>_mem = <<$attskltmp>>_exp
  250. !! end
  251. killvar 'expadj' & killvar '$attskltmp'
  252. i += 1
  253. if (x = 1 and i < arrsize ('$att_name')) or (x = 2 and i < arrsize ('$skl_name')): jump 'advloop'
  254. i = 0 & x += 1
  255. if x < 3: jump 'advloop'
  256. killvar 'i' & killvar 'x'
  257. !!Attribute set section
  258. !!This is where an attribute pcs_"name" is set by "name"_lvl and any adjustments are added
  259. !!Even though most of these could be done without doing a _lvl to pcs_ convertion, doing so is future proofing
  260. pcs_stren = stren_lvl
  261. if pcs_stren < 1: pcs_stren = 1
  262. pcs_agil = agil_lvl
  263. if pcs_agil < 1: pcs_agil = 1
  264. pcs_vital = vital_lvl
  265. if pcs_vital < 1: pcs_vital = 1
  266. pcs_intel = intel_lvl - bimbostupidity - (5 * noorgasm)
  267. if pcs_intel < 1: pcs_intel = 1
  268. pcs_react = react_lvl
  269. if pcs_react < 1: pcs_react = 1
  270. pcs_sprt = sprt_lvl
  271. if pcs_sprt < 1: pcs_sprt = 1
  272. pcs_chrsm = chrsm_lvl
  273. if pcs_chrsm < 1: pcs_chrsm = 1
  274. pcs_prcptn = prcptn_lvl
  275. if pcs_prcptn < 1: pcs_prcptn = 1
  276. pcs_magik = magik_lvl
  277. if pcs_magik < 0: pcs_magik = 0
  278. !!Skill set Section
  279. !!Each skill has three lines, the first is the comment that says what the skill is, the next that sets pcs_"name", and the finial which sets "name"[1] to [x] with the attribute index of the attribute(s) ending with a -1 to show end.
  280. !!Jabs; Quick strikes that do not have much power
  281. pcs_jab = (jab_lvl + (pcs_agil * 2 + pcs_stren) / 3) / 2 - notfem
  282. jab[1] = 0 & jab[2] = 1 & jab[3] = -1
  283. !!Power Strikes; Hard strikes that are harder to land
  284. pcs_punch = (punch_lvl + (pcs_stren * 2 + pcs_agil) / 3) / 2 - notfem
  285. punch[1] = 0 & punch[2] = 1 & punch[3] = -1
  286. !!Kicks; Kicking, enough said
  287. pcs_kick = (kick_lvl + (pcs_stren * 3 + pcs_agil) / 4) / 2 - notfem
  288. kick[1] = 0 & kick[2] = 1 & kick[3] = -1
  289. !!Defence; Covers both blocking and dodging
  290. pcs_def = (def_lvl + (pcs_agil + pcs_stren + pcs_react) / 3) / 2 - notfem
  291. def[1] = 0 & def[2] = 1 & def[3] = 4 & def[4] = -1
  292. !!Marksmanship; Could be guns, bows, or spells
  293. pcs_shoot = (shoot_lvl + (pcs_agil + pcs_react) / 2) / 2
  294. shoot[1] = 1 & shoot[2] = 4 & shoot[3] = -1
  295. !!Singing; Should be self-explanatory
  296. pcs_vokal = (vokal_lvl + (pcs_intel + pcs_chrsm) / 2) / 2
  297. vokal[1] = 3 & vokal[2] = 6 & vokal[3] = -1
  298. !!Tailoring; Should be self-explanatory
  299. pcs_sewng = (sewng_lvl + (pcs_agil + pcs_intel) / 2) / 2
  300. sewng[1] = 1 & sewng[2] = 3 & sewng[3] = -1
  301. !!Instrumental Music; Skill at playing an instrument(s)
  302. pcs_instrmusic = (instrmusic_lvl + (2 * pcs_agil + pcs_intel) / 3) / 2
  303. instrmusic[1] = 1 & instrmusic[2] = 3 & instrmusic[3] = -1
  304. !!Photography; Should be self-explanatory
  305. pcs_photoskl = (photoskl_lvl + (2 * pcs_intel + pcs_react) / 3) / 2
  306. photoskl[1] = 3 & photoskl[2] = 4 & photoskl[3] = -1
  307. !!Artistic Skills; painting, drawing etc.
  308. pcs_artskls = (artskls_lvl + (pcs_intel + pcs_react + pcs_agil) / 3) / 2
  309. artskls[1] = 1 & artskls[2] = 3 & artskls[3] = 4 & artskls[4] = -1
  310. !!Modern Dancing; This is the basic dance skill and replaces 'dance'
  311. pcs_danc = (danc_lvl + (pcs_agil + pcs_react + pcs_vital) / 3) / 2 - notfem
  312. danc[1] = 1 & danc[2] = 2 & danc[3] = 4 & danc[4] = -1
  313. !!Erotic Dancing; This is used when individual eroticism is being displayed, also covers & replaces strip tease
  314. pcs_dancero = (dancero_lvl + (pcs_agil + pcs_chrsm + pcs_vital) / 3) / 2 - notfem + (3 * flxibt)
  315. dancero[1] = 1 & dancero[2] = 2 & dancero[3] = 6 & dancero[4] = -1
  316. !!Pole Dancing; Should be self-explanatory
  317. pcs_dancpol = (dancpol_lvl + (pcs_agil + pcs_stren + pcs_chrsm) / 3) / 2 - notfem + (3 * flxibt)
  318. dancpol[1] = 0 & dancpol[2] = 1 & dancpol[3] = 6 & dancpol[4] = -1
  319. !!Chess; Should be self-explanatory
  320. pcs_chess = (chess_lvl + pcs_intel) / 2 + (5 * logictrt)
  321. chess[1] = 3 & chess[2] = -1
  322. !!Gaming; Abstracts skills at all types of Table Top games
  323. pcs_ttgmng = (ttgmng_lvl + (2 * pcs_intel + pcs_react) / 3) / 2
  324. ttgmng[1] = 3 & ttgmng[2] = 4 & ttgmng[3] = -1
  325. !!People skills; basic human interaction skill set
  326. pcs_humint = (humint_lvl + (pcs_prcptn + pcs_chrsm + pcs_react)/3) / 2 + (5 * chrmng) - (5 * meantrt)
  327. humint[1] = 4 & humint[2] = 6 & humint[3] = 7 & humint[4] = -1
  328. !!Persuasion; Trained skill at getting people to agree with you or like you
  329. pcs_persuas = (persuas_lvl + (pcs_prcptn + pcs_chrsm) / 2) / 2 + (5 * chrmng) - (5 * meantrt)
  330. persuas[1] = 6 & persuas[2] = 7 & persuas[3] = -1
  331. !!Running; Should be self-explanatory
  332. pcs_run = (run_lvl + (2 * (pcs_agil + pcs_stren) + pcs_vital) / 5) / 2 - notfem
  333. run[1] = 0 & run[2] = 1 & run[3] = 2 & run[4] = -1
  334. !!Volleyball; Should be self-explanatory
  335. pcs_vball = (vball_lvl + (2 * pcs_agil + pcs_react + pcs_stren + pcs_vital) / 5) / 2 - notfem
  336. vball[1] = 0 & vball[2] = 1 & vball[3] = 2 & vball[4] = 4 & vball[5] = -1
  337. !!Ice Skating; Should be self-explanatory
  338. pcs_icesktng = (icesktng_lvl + (2 * pcs_agil + pcs_stren) / 3) / 2 - notfem
  339. icesktng[1] = 0 & icesktng[2] = 1 & icesktng[3] = -1
  340. !!Wrestling; Should be self-explanatory
  341. pcs_wrstlng = (wrstlng_lvl + (2 * pcs_stren + pcs_vital + pcs_agil) / 4) / 2 - notfem
  342. wrstlng[1] = 0 & wrstlng[2] = 1 & wrstlng[3] = 2 & wrstlng[4] = -1
  343. !!Football; Should be self-explanatory
  344. pcs_ftbll = (ftbll_lvl + (pcs_vital + pcs_agil + pcs_stren) / 3) / 2 - notfem
  345. ftbll[1] = 0 & ftbll[2] = 1 & ftbll[3] = 2 & ftbll[4] = -1
  346. !!Spell Casting; The ability to Successfully cast spells
  347. pcs_splcstng = (splcstng_lvl + (pcs_intel + pcs_react) / 2) / 2
  348. splcstng[1] = 3 & splcstng[2] = 4 & splcstng[3] = -1
  349. !!Observation; trained skill in noticing one''s surroundings and events (nothing but surface detail)
  350. pcs_observ = (observ_lvl + (pcs_prcptn + pcs_react + pcs_intel)/3) / 2
  351. observ[1] = 3 & observ[2] = 4 & observ[3] = 7 & observ[4] = -1
  352. !!Makeup; Skill at applying makeup, goes into the vnesh calc as makupskl/5
  353. pcs_makupskl = (makupskl_lvl + (pcs_intel + pcs_agil) / 2) / 2
  354. makupskl[1] = 1 & makupskl[2] = 3 & makupskl[3] = -1
  355. !!Computer Skill; Skill at using and repairing computers
  356. pcs_compskl = (compskl_lvl + pcs_intel) / 2 + (5 * logictrt)
  357. compskl[1] = 3 & compskl[2] = -1
  358. !!Hacking; Skill at hacking computer systems
  359. pcs_comphckng = (comphckng_lvl + (pcs_intel + pcs_react) / 2) / 2 + (5 * logictrt)
  360. comphckng[1] = 3 & comphckng[2] = 4 & comphckng[3] = -1
  361. !!Handy-work; Used for non-mechanic work, i.e. plumbing
  362. pcs_hndiwrk = (hndiwrk_lvl + (2 * pcs_agil + pcs_intel) / 3) / 2
  363. hndiwrk[1] = 1 & hndiwrk[2] = 3 & hndiwrk[3] = -1
  364. !!Serving; Covers all aspects of waitressing and bartending
  365. pcs_servng = (servng_lvl + (pcs_intel + pcs_vital) / 2) / 2
  366. servng[1] = 2 & servng[2] = 3 & servng[3] = -1
  367. !!Modelling; Knowing how to pose and hold poses for long periods of time. Recalc to a 75/25 split by KS
  368. pcs_mdlng = ((mdlng_lvl * 3 / 2) + (pcs_agil + pcs_vital) / 4) / 2 - notfem
  369. mdlng[1] = 1 & mdlng[2] = 2 & mdlng[3] = -1
  370. !!Medicine; Basic medical knowledge up to the level of Nursing
  371. pcs_medcn = (medcn_lvl + (pcs_intel + pcs_react + pcs_prcptn) / 3) / 2
  372. medcn[1] = 3 & medcn[2] = 4 & medcn[3] = 7 & medcn[4] = -1
  373. !!Heels; Experience with walking in heels of increasing height
  374. !!Currently only based on the skill itself, not linked to any attributes, but maybe the skill can affect agility, reaction and charisma
  375. pcs_heels = heels_lvl
  376. heels[1] = 1 & heels[2] = 4 & heels[3] = 6 & heels[4] = -1
  377. !! Billiard, Pool
  378. !! pool level can affect intellect?
  379. pcs_pool = pool_lvl
  380. pool[1] = 3 & pool[2] = -1
  381. !!Skiing; Should be self-explanatory
  382. !!To add this skill, copy this "$skl_name[x] = 'skng'" to the end of the skils list above and replace the x with the next index number, then remove the comment and bracket marks on the next two lines and delete this line
  383. !!pcs_skng = (skng_lvl + (2 * pcs_agil + pcs_stren) / 3) / 2
  384. !!{skng[1] = 0 & skng[2] = 1 & skng[3] = -1}
  385. !!Larceny; picking locks, hotwire cars etc.; basic thief/stealing skills
  386. !!To add this skill, copy this "$skl_name[x] = 'thiefskls'" to the end of the skils list above and replace the x with the next index number, then remove the comment and bracket marks on the next two lines and delete this line
  387. !!pcs_thiefskls = (thiefskls_lvl + (2 * pcs_agil + pcs_react) / 3) / 2
  388. !!{thiefskls[1] = 1 & thiefskls[2] = 4 & thiefskls[3] = -1}
  389. !!Mechanic; Auto mechanic skill, can work on your own car
  390. !!To add this skill, copy this "$skl_name[x] = 'mchanc'" to the end of the skils list above and replace the x with the next index number, then remove the comment and bracket marks on the next two lines and delete this line
  391. !!pcs_mchanc = (mchanc_lvl + (2 * pcs_agil + pcs_intel) / 3) / 2
  392. !!{mchanc[1] = 1 & mchanc[2] = 3 & mchanc[3] = -1}
  393. !!Gambling; Should be self-explanatory
  394. !!To add this skill, copy this "$skl_name[x] = 'gmbling'" to the end of the skils list above and replace the x with the next index number, then remove the comment and bracket marks on the next two lines and delete this line
  395. !!pcs_gmbling = (gmbling_lvl + (2 * pcs_prcptn + pcs_intel + pcs_react) / 4) / 2
  396. !!{gmbling[1] = 3 & gmbling[2] = 4 & gmbling[3] = 7 & gmbling[4] = -1}
  397. !!Seduction; Trained art of making yourself sexually desired, by words, body language, tone etc.; should be checked with either a +hotcat or on a 300point scale with +vnesh (set elsewhere so not added here)
  398. !!To add this skill, copy this "$skl_name[x] = 'sdctn'" to the end of the skils list above and replace the x with the next index number, then remove the comment and bracket marks on the next two lines and delete this line
  399. !!pcs_sdctn = (sdctn_lvl + (pcs_prcptn + pcs_chrsm) / 2) / 2
  400. !!{sdctn[1] = 6 & sdctn[2] = 7 & sdctn[3] = -1}
  401. !!Computer Gaming; Skill at playing assorted computer and console games.
  402. !!To add this skill, copy this "$skl_name[x] = 'compgame'" to the end of the skils list above and replace the x with the next index number, then remove the comment and bracket marks on the next two lines and delete this line
  403. !!pcs_compgame = (compgame_lvl + (pcs_agil + pcs_react) / 2) / 2
  404. !!{compgame[1] = 1 & compgame[2] = 4 & compgame[3] = -1}
  405. --- stat_sklattrib ---------------------------------