7WCharacter Sheet file v. 1B€GURPSŒ€Standard GURPS character sheet.€K€ gurps.hlps€GURPSTemplate.scpt€ GURPS.cstn€ýĀŀ€Š€2º€`»€`H€€3€Nèÿÿÿÿ´€ €11/05/2004 18:00:47€.€ GURPS.cdsGURPSCompendium.cds€J€ GURPS.cst5€ GURPS.flt;€ GURPS2.prtœ€ GURPS.scriptr€€€ attArr[16]7-80,-70,-60,-50,-40,-30,-20,-15,-10,0,10,20,30,45,60,80€ useMetricConfigParam("UseMetric")€.attChkMsg(attName, att, bonus, minVal, maxVal){ if (att < minVal+bonus) return format('%s must be at least %d.', attName, minVal+bonus); endif if (maxVal and att > maxVal+bonus) return format('%s must be no greater than %d.', attName, maxVal+bonus); endif return format('%s must be at least 1.', attName); }€"attChk(att, bonus, minVal, maxVal)x{ if (att < minVal+bonus) return 0; endif if (maxVal and att > maxVal+bonus) return 0; endif return att>0; }€sbp(bp, imp,extra)`{ if(bp<>imp and imp) return format('%d/%d',bp+extra,imp+extra); endif return bp+extra; }€dpddr(x){ local pd, dr, extraDR, extraPD; extraDR = optValue('Extra DR'); extraPD = optValue('Extra PD'); pd = optValue('PD')+extraPD; dr = optValue('DR')+extraDR; if (optPresent('DR vs imp')) dr = format('%d/%d', dr, optValue('DR vs imp')+extraDR); endif if (optPresent('PD vs imp')) pd = format('%d/%d', pd, optValue('PD vs imp')+extraPD); endif return format('PD %s, DR %s', pd, dr); }€dquan(quan,paren)=quan<2?'':(paren?format(' (×%s)', quan):format(', ×%d',quan))€armorPDb_WholePD?b_WholePD:b_BodyPD€ armorPDimp"b_WholePD?b_WholePDimp:b_BodyPDimp€armorDRb_WholeDR?b_WholeDR:b_BodyDR€ armorDRimp"b_WholeDR?b_WholeDRimp:b_BodyDRimp€ charTotal)attributes+t_adv+t_disadv+quirks+t_skills€ attdisadvN(~st<8 and !ST0Required?c_st:0) + (~dx<8?c_dx:0)+(~iq<8?c_iq:0)+(~ht<8?c_ht:0)€attdisadvcountX(~st<8 and !ST0Required)+(~dx<8)+(~iq<8)+(~ht<8)+ (~x_ht=-maxDisad or attdisadvcount<1 or disadvcount<=1€bv(value, diff)®{ local v; v = 0; if (itemInfo('@v@')) if (itemInfo('@c@') > 0) v = itemInfo('@baseValue@'); endif else v = min(20, value); endif return max(0, v + diff); } € skillCost[5] 0,0.5,1,2,4€bodyweightfunc(st)‰{ if (st<6) return 130; endif if (st<8) return 135; endif if (st<15) return 140+(st-8)*5; endif return 180+(st-15)*10; }€-diceadds(dice, adds, adds2, maxdice, maxadds)v{ local d, a, md, ma, rd, ra, xd; d = dice; a = adds + adds2; if (maxdice > 0 and d > maxdice) xd = d - maxdice; d = maxdice; a = a + 7 * integer(xd/2) + (xd mod 2)*4; if (a > maxadds) a = maxadds; endif endif rd = d; ra = a; if (a >= 7) d = d + 2*integer(a / 7); a = a mod 7; endif if (a >= 4) d = d + 1; a = a - 4; endif if (adds2dice) ra = a; rd = d; endif if (maxdice > 0) md = maxdice; ma = maxadds; if (ma >= 7) md = md + 2*integer(ma / 7); ma = ma mod 7; endif if (ma >= 4) md = md + 1; ma = ma - 4; endif if (d*4+a > md*4+ma) if (adds2dice) rd = md; ra = ma; else rd = maxdice; ra = maxadds; endif endif endif if (rd = 0 and ra < -5) return 0; elseif (ra < 0) return format("%dd%d", rd, ra); elseif (ra = 0) return format("%dd", rd); endif return format("%dd+%d", rd, ra); }€ in2ft(in)–{ if (in = integer(in)) return format("%d'%d%s",integer(in/12),in mod 12, '"'); endif return format("%d'%1d%s",integer(in/12),in mod 12, '"'); }€ in2cm(in)format("%d cm",round(in*2.54))€ dispInch(in)6useMetric?in2cm(in):(in>12?in2ft(in):format('%d"',in))€dh(in)useMetric?in2cm(in):in2ft(in))€dw(lbs)ƒ{ if (usemetric) return format('%1d kg',lbs/2.2); endif if (lbs = 1) return '1 lb'; endif return format('%d lbs', lbs); }€mx(att) min(att,20)€ HitsBonusRevFatHits?STBonus:HTBonus€ FatigueBonusRevFatHits?HTBonus:STBonus€SpellFatigueBonus!RevFatHits?HTBonus:STSpellFatigue€ baseFatigue$FatigueBOIQ?~iq:(RevFatHits?~ht:~st)€baseHits$Hits1Required?1:(RevFatHits?~st:~ht)€maxDisaddisadvlim-campdisadv€p_st0€jumpSTLBST?LBST+~st-10:st_jump+~ST€encumSTLBST?LBST+~st-10:ST€ skilldefSTst_skilldef+~ST€ver2€ slc(level)level€findCombatValue(valueName)ü{ local i, n, value, maxValueName, maxValue, showValue, showValueName, option, showOption; option = format("`%s`", valueName); showOption = format("`Show %s`", valueName); maxValue = 0; showValue = maxValue; maxValueName = "Default"; showValueName = maxValueName; n = listentries("Skills"); i = 1; while (i <= n) value = listiteminfo("Skills", i, option); if (listiteminfo("Skills", i, showOption) and value > showValue) showValue = value; showValueName = listiteminfo("Skills", i, "@name@"); elseif (value > maxValue) maxValue = value; maxValueName = listiteminfo("Skills", i, "@name@"); endif i = i + 1; endwhile n = listentries("Equipment"); i = 1; while (i <= n) value = listiteminfo("Equipment", i, option); if (listiteminfo("Equipment", i, showOption) and value > showValue) showValue = value; showValueName = listiteminfo("Equipment", i, "@name@"); elseif (value > maxValue) maxValue = value; maxValueName = listiteminfo("Equipment", i, "@name@"); endif i = i + 1; endwhile if (showValue) n = setVariable(concat(valueName, "Item"), showValueName); return showValue; endif n = setVariable(concat(valueName, "Item"), maxValueName); return maxValue; }€parryNfindCombatValue('Parry')+zparry*b_bhparry*b_1wparry*b_awparry*combatreflexes*0€ wpbonus(nm)4{ local name, n; if (b_awparry) return b_awparry+combatreflexes; endif name = nm ? nm : itemInfo("@n@"); n = optValue("Skills", "Enhanced Parry", "Skill"); if (n = name) return 1+combatreflexes; endif n = optValue("Advantages", "Enhanced Parry", "Skill")); return (n = name)+combatreflexes; }€block!findCombatValue('Block')+zblock*0€ mageryCost(x)0x<8?qindex(x,15,25,35,50,65,85,105):105+(x-7)*25€skchk(level,cost)8{ local dv, bl, minCost, tcost, f, ml, ok; if (itemInfo('@bod@')) dv = evaluateDefault(0); return level=dv or (level>dv and cost>=.5); endif bl = optValue('Base Level'); if (bl) return level>=bl+itemInfo('@bonus@'); endif tcost = (cost + itemInfo('@a@')) * itemInfo('@m@'); f = tcost - integer(tcost); ok = tcost > 0 and (f = .5 or f = 0); minCost = itemInfo('`Minimum Cost`'); ml = optValue("Minimum Level"); if (minCost) return ok and tcost>=minCost and level>=ml; endif if (ml) return ok and level>=ml; endif return ok or level = 0; }€spchk(level,cost)…{ local bl, minCost, rl, rc; bl = optValue('Base Level'); if (bl) return level>=bl+itemInfo('@bonus@'); endif rl = optValue('Required Level'); if (rl) return level=rl+itemInfo('@bonus@'); endif rc = optValue('Required Cost'); if (rc) return cost=rc; endif minCost = itemInfo('`Minimum Cost`'); if (minCost) return cost>=minCost; endif return level = 0 or cost>=1; }€"mmchk(lev,cost,hard,minval,maxval)>{ local minCost, levp1; if (levmaxval)) return 0; endif minCost = optValue('Minimum Cost'); if (cost=1; else return cost>=.5; endif endif return 1; }€langchk(level,bonus,cost)?optValue('Native')?level-bonus>=iq-DeafnessLP:skchk(level,cost)€mc(level, bonus)-mageryCost(level)-(bonus?mageryCost(bonus):0)€ attCost(att).att>16?(att-17)*25+100:(att<1?-80:attArr[att])€attExpCost(att, orgAtt, bonus)’{ local ab; if (estChar and orgAtt) ab = orgAtt-bonus; if (att > ab) return attCost(att) - attCost(ab); endif endif return 0; }€ enhStCost(x)µ{ if (x<15) return attCost(x); elseif (x>=15 and x<23) return 60 + (x-15) * 10; elseif (x>=23 and x<30) return 140 + (x-23) * 5; endif return 175 + round((x-30)/2); }€ stCost(x)H{ if (enhancedST) return enhStCost(x); endif return attCost(x); }€stExpCost(st, orgST, bonus)’{ local ast; if (estChar and orgST) ast = orgST - bonus; if (st > ast) return stCost(st) - stCost(ast); endif endif return 0; }€ extraAttCostlstExpCost(~st,orgSt,&st)+ attExpCost(~dx,orgDX,&dx)+ attExpCost(~iq,orgIQ,&iq)+ attExpCost(~ht,orgHT,&ht)€ physcost(x)x<=4?skillCost[x+1]:(x-4)*8€pcost(skill,att,adj)ü{ local bs, bl, c; c = physcost(skill-att+adj); bl = optValue('Base Level'); if (bl) return max(0,c - physcost(bl-att+adj)); elseif (itemInfo('@bod@')) bs = evaluateDefault(0); return max(0, c - physcost(bs-att+adj)); endif return c; }€ pe(skill,att)pcost(skill,att,2)€ pa(skill,att)pcost(skill,att,3)€ ph(skill,att)pcost(skill,att,4)€meah(x)x<=4?skillCost[x+1]:(x-2)*2€mcost(sk,att,adj)í{ local bs, bl, c; c = meah(sk-att+adj); bl = optValue('Base Level'); if (bl) return max(0,c - meah(bl-att+adj)); elseif (itemInfo('@bod@')) bs = evaluateDefault(0); return max(0, c - meah(bs-att+adj)); endif return c; }€ me(sk,att)mcost(sk,att,2)€ ma(sk,att)mcost(sk,att,3)€ mh(sk,att)mcost(sk,att,4)€mentvh(sk,att)+sk-att<=-2?skillcost[sk-att+6]:(sk-att+2)*4€ mvh(sk,att)ë{ local bs, bl, c; c = mentvh(sk, att); bl = optValue('Base Level'); if (bl) return max(0, c - mentvh(bl, att)); elseif (itemInfo('@bod@')) bs = evaluateDefault(0); return max(0, c - mentvh(bs, att)); endif return c; }€mme(sk) me(sk,iq)*IQM€mma(sk) ma(sk,iq)*IQM€mmh(sk) mh(sk,iq)*IQM€mmvh(sk)mvh(sk,iq)*IQM€ ss(sk,att)”{ local baseAttr; baseAttr = optValue('Base Attribute'); if (baseAttr = 0) return mentvh(sk,att); endif return mentvh(sk,eval(baseAttr)); }€genSkCost(level)w{ local att, useEM, diff, attribute, em, cost; att = optValue('Base Attribute'); em = optValue('Affected by Eidetic Memory') ? IQM : 1; diff = optValue('Difficulty'); if (att = 'Normal') if (strindex(diff, 'm') > 0) attribute = IQ; else attribute = DX; endif elseif (att = 'ht') attribute = HT; elseif (att = 'st') attribute = ST; elseif (att = 'dx') attribute = DX; else attribute = IQ; endif if (diff = 'ma') cost = ma(level, attribute)*em; elseif (diff = 'pa') cost = pa(level, attribute); elseif (diff = 'me') cost = me(level, attribute)*em; elseif (diff = 'pe') cost = pe(level, attribute); elseif (diff = 'ph') cost = ph(level, attribute); elseif (diff = 'mh') cost = mh(level, attribute)*em; elseif (diff = 'mvh') cost = mvh(level, attribute)*em; else cost = ma(level, attribute)*em; endif return cost; }€ gunsk(lev)pe(lev,dx+(iq>9)+(iq>11))€ asp(sk,iq)Á{ local c, bl; c = meah(sk-(iq+magery+eideticbonus+b_spells)+3); bl = optValue('Base Level'); if (bl) return max(0,c - meah(bl-(iq+magery+eideticbonus+b_spells)+3)); endif return c; }€ hsp(sk,iq)Þ{ local c, bl; if (sk = 0) return 0; endif c = meah(sk-(iq+magery+eideticbonus+b_spells)+4); bl = optValue('Base Level'); if (bl) return max(0,c - meah(bl-(iq+magery+eideticbonus+b_spells)+4)); endif return c; }€ vhsp(sk,iq)Ú{ local bl, c; if (sk = 0) return 0; endif c = mentvh(sk,iq+magery+eideticbonus+b_spells); bl = optValue('Base Level'); if (bl) return max(0,c - mentvh(bl,iq+magery+eideticbonus+b_spells)); endif return c; }€ malang(sk)1optValue('Native')?(sk-iq+DeafnessLP)*IQM:mma(sk)€ melang(sk)1optValue('Native')?(sk-iq+DeafnessLP)*IQM:mme(sk)€ mhlang(sk)1optValue('Native')?(sk-iq+DeafnessLP)*IQM:mmh(sk)€ mvhlang(sk)2optValue('Native')?(sk-iq+DeafnessLP)*IQM:mmvh(sk)€hmafunc(sk,base)c{ local v; v = sk - base; if (v<4) return qindex(v+1,0,1,2,4); endif return (v-4)*2 + 6; }€mmcost(lev,def,hard)n{ local cost; if (hard) cost = hmafunc(lev,def); else cost = meah(lev-def); endif return cost; } €supcost(level, costPerLevel)˜{ local cplOption; cplOption = itemInfo('`LC`'); if (cplOption != 0) return level * cplOption; endif return level * costPerLevel; }€tcfunc(bc,a,mo,p)!ceil((bc+a)*mo*max(100+p,25)/100)€tcpow(bc,a,aux,mo,p)%bc+ceil((aux+a)*mo*max(100+p,25)/100)€thrustmax(st, adds2, md, ma)L{ local dice, adds, temp; if (st <= 0) dice = 0; adds = -6; elseif (st < 5) dice = 1; adds = st-10; elseif (st < 7) dice = 1; adds = st - 10; elseif (st < 13) dice = 1; adds = integer((st - 7)/2) - 3; elseif (st < 51) temp = integer((st - 11) / 2); dice = integer(temp / 4) + 1; adds = temp mod 4 - 1; elseif (st = 51) dice = 5; adds = 2; elseif (st < 68) temp = integer((st - 52) / 2); dice = integer(temp / 4) + 6; adds = temp mod 4 - 1; else dice = 8 + integer((st - 68) / 10); temp = (st - 68) mod 10; if (temp < 2) adds = -1; elseif (temp < 5) adds = 0; elseif (temp < 7) adds = 1; else adds = 2; endif endif return diceadds(dice, adds, adds2, md, ma); }€swingmax(st, adds2, md, ma)û{ local dice, adds, temp; if (st <= 0) dice = 0; adds = -6; elseif (st < 5) dice = 1; adds = st-10; elseif (st < 10) dice = 1; adds = st - 10; elseif (st < 27) dice = integer((st - 9) / 4) + 1; adds = (st - 9) mod 4 - 1; elseif (st < 41) temp = integer((st - 27) / 2) + 2; dice = 5 + integer(temp / 4); adds = temp mod 4 - 1; elseif (st < 47) dice = 7; adds = integer((st-41) / 3); elseif (st < 49) dice = 7; adds = 2; elseif (st < 51) dice = 8; adds = -1; elseif (st < 53) dice = 8; adds = 0; elseif (st < 56) dice = 8; adds = 1; elseif (st < 58) dice = 8; adds = 2; else dice = 9 + integer((st - 58) / 10); temp = (st - 58) mod 10; if (temp < 2) adds = -1; elseif (temp < 5) adds = 0; elseif (temp < 7) adds = 1; else adds = 2; endif endif return diceadds(dice, adds, adds2, md, ma); }€thrust(st, adds2)thrustmax(st, adds2, 0, 0)€swing(st, adds2)swingmax(st, adds2, 0, 0)€sw(x)swing(max(p_st,st), x)€thr(x)thrust(max(p_st,st), x)€swmax(adds, maxdice, maxadds).swingmax(max(p_st,st), adds, maxdice, maxadds)€thrmax(adds, maxdice, maxadds)/thrustmax(max(p_st,st), adds, maxdice, maxadds)€ wealthMult8qindex(wealthAdd+4,-1,0.2,0.5,1,2,5,20,10^(wealthAdd-2))€b_speed0€ b_running0€b_sc0€ewtRpossweight+max(0,exbodyweight)+(incdensity>0?max(0,baseWeight+incdensity-ST*15):0)€rawSpeed (float(dx)+ht)/4+b_speed)*a_move€ base_speedlame?maxmove*a_move:rawSpeed€speed base_speed€encÃ{ if (ewt<=noenc) return 1; elseif (ewt<=lightenc) return 2; elseif (ewt<=medenc) return 3; elseif (ewt<=hvyenc) return 4; elseif (ewt<=xhvyenc) return 5; endif return 6; }€encmult(level)|qindex(level, nomult?nomult:2, lightmult?lightmult:4, medmult?medmult:6, hvymult?hvymult:12, xhvymult?xhvymult:20) €encfunc(level)!encmult(level)*max(encumST, p_st)€ encmv(level)sqindex(level, 0, lightred?lightred:1, medred?medred:2, hvyred?hvyred:3, xhvyred?xhvyred:4)€a_move1€ base_move!integer(speed+b_running)-red_move€ minmv(level)<{ local mv; if (level>5) return 0; endif if (base_move >= 10) mv = integer(base_move * qindex(level, 1, .8, .6, .4, .2)); return max(mv, qindex(level, base_move, 8, 7, 6, 5)); endif mv = max(1, base_move-encmv(level)); return max(mv, qindex(level, mv, lightmin, medmin, hvymin, xhvymin)); }€denc(label, level);format("%s (%d) %s", label, minmv(level), level=enc?'*':'')€move minmv(enc)€adr0€apd0€idr0€ipd0€spd0€IQm1€ aging_rate1€heightweight(h)¨{ if (h<62) return 120; endif if (h<65) return 130; endif if (h<67) return 135; endif if (h<74) return 140+(h-67)*5; endif return 180+(h-74)*10; }€ stweight(st)Qst<17?qindex(st-4,130,135,135,140,145,150,155,160,165,170,180,190):190+(st-16)*10€ defHeightœracialHeight?racialHeight:max(round((min(64+max(st,5)+b_height-5,max_height+&max_height))*(1+m_height)),min_height)-(sex=2?2:0)-(tl<5 and histAccHeight?3:0)€ baseWeightDracialWeight?racialWeight:heightweight(height)+b_weight-(sex=2?10:0)€ defWeight"baseWeight+exbodyweight+incdensity€ min_height0€ max_height84€unspentmax(0, exp-expSpent)€wealthFunc(dummy)…{ if (wealthMult < 0) return 0; endif if (wealthMult = 0) return baseWealth; endif return float(baseWealth)*wealthMult; }€jobmult(income)ï{ local ind, mult, wl; wl = optValue("Wealth Level"); ind = 3 + wealthAdd; if (wl = "Poor") mult = 1; elseif (wl = "Struggling") mult = qindex(ind, .4, 1); elseif (wl = "Average") mult = qindex(ind, .2, .5, 1); elseif (wl = "Comfortable") mult = qindex(ind, .1, .25, .5, 1, 2, 4, 10); elseif (wl = "Wealthy") mult = qindex(ind, 0, .1, .2, .4, 1, 2, 10); else mult = qindex(ind, .2, .5, 1); endif return round(mult * income * (100+optValue('Pay Raises'))/100); }€ ewd(skill)¨{ local weapon, skName; if (wpnDmgBonus <= 0) return 0; elseif (optValue('No Weapon Master Damage Bonus')) return 0; elseif (wpnDmgBonus = 1) weapon = listItemInfo('Advantages', 'Weapon Master', '`~Weapon`'); skName = itemInfo('@class@'); if (itemInfo('@n@') = weapon or skName = weapon or varItemInfo(skName, '@n@') = weapon) return integer(skill/5); endif return 0; endif return integer(skill/5); }€ dispSense(s) s<=0?'--':s€displev(level)t{ local bonus; bonus = itemInfo('@bonus@'); if (bonus = 0) return level; endif return concat(level, '*'); }€ dsk(level){ local optList, gPenalty; if (optValue('Specialty')) optList = listOptions("optTextValue", "Specialty", ";;"); gPenalty = (strindex(optList, ";;") > 0) ? 2 : 1; return displev(format("%d/%d", level-gPenalty, level+5)); endif return displev(level); }€ doptlist(opt)LoptValue(opt) ? format(' (%d)', listOptions('optTextValue', opt, ', ')) : ''€ tprange(p)à{ if (p <= 12) return qindex(p, -1, 0, 1, 2, 4, 8, 15, 30, 60, 100, 200, 400); endif if (p <= 20) return qindex(p-12, .5, 1, 2, 4, 8, 15, 30, 60) * 1760; endif return 125 * 2^(p-21) * 1760; }€ dtprange(yds)q{ local meters; if (yds < 0) return 'Touch Only, 10 x Time'; endif if (yds = 0) return 'Touch Only'; endif if (useMetric) if (yds < 1000) return format('%d m', yds); endif return format('%d km', yds/1000); endif if (yds < 880) return format('%d yd', yds); endif if (yds = 880) return '1/2 mile'; endif return format('%d mile', yds/1760); }€brawlDmg(base)base+integer(brawling/10)€karateDmg(base)base+integer(Karate/5)€punch>thr(max(KarateDmg(-2),BrawlDmg(-2))+(b_HandsPD>2?2:0)+handDmg)€kick"thr(max(KarateDmg(0),BrawlDmg(0)))€ runningSpeed8(speed*(1+enh_move/2)-red_move)*2^superRunning+b_running€ flyingSpeed4rawSpeed*2*2^superflight*(1+enh_flight/2)-red_flight€ swimmingSpeedgamphibious?(speed*(1+enh_swim/2)-red_swim)*2^superSwimming+swimming/8:max(1,max(st-5,dx-4,swimming)/10)€ willpower wp?wp:iq+will€mu3pmu20€mu2pmu10€dpmu10€ms1'£'€ms2's'€ms3'd'€getmon÷{ local str, n; str = DialogFieldValue('Configuration', 'MoneySymbols'); if (!str) str = ConfigParam('MoneySymbols'); endif if (!str) return 0; endif n = split(str, '/', 'ms1', 'dpmu1', 'mu2pmu1', 'ms2', 'mu3pmu2', 'ms3'); return str; }€mcat(base,val)M{ if (base) return concat(concat(base, ' '), val); endif return val; }€fbn(d)v{ local ndigits, val, divisor; if (d < 1 or d != integer(d)) return format('%2n',d); elseif (d >= 10000000) ndigits = integer(log10(d)); ndigits = integer(ndigits / 3) * 3 - 3; divisor = 10^ndigits; val = format('%n%s',round(d/divisor), dupstr(substr(format('%n',1000), 2, 4),ndigits/3)); else val = format('%n', d); endif return val; } € dm(dollars)J{ local mu1, mu2, mu3, pence, mu3pmu1, val, d, sign; mu3pmu1 = mu3pmu2 * mu2pmu1; if (dollars < 0) sign = '-'; d = -dollars; else d = dollars; sign = ''; endif if (!dpmu1) return format('%s$%s', sign, fbn(d)); elseif (mu3pmu1 = 0) return format('%s%s%s', sign, ms1, fbn(d/dpmu1)); endif pence=d*(mu3pmu1/dpmu1); mu1=integer(pence/mu3pmu1); mu2=integer((pence MOD mu3pmu1)/mu3pmu2); mu3=round(pence MOD mu3pmu2); if (mu1 > 1000000) return format('%s%s%s', sign, ms1, fbn(mu1)); endif val = ''; if (mu1) val = mcat(val, format('%s%n', ms1, mu1)); endif if (mu2) val = mcat(val, format('%d%s', mu2, ms2)); endif if (mu3) val = mcat(val, format('%d%s', mu3, ms3)); endif if (val = '') return format('%s%s%d', sign, ms1, fbn(mu1)); endif return concat(sign, val); }€ dp(dummy)v{ local price; price = itemInfo('`Price`'); if (price = 0) return '--'; endif return dm(price); }€dew(lbs)Ë{ local kg; if (ConfigParam('useMetric')) kg = lbs / 2.2; if (kg < 1) return format('%2d', kg); elseif (kg < 10) return format('%1d', kg); endif return round(kg); endif return lbs; }€multformavg(d)F{ local number, t, i, cost, name, nopts; t = total; number = 1; i = 1; nopts = optCount('File Name'); while (i <= nopts) name = optValue('File Name', i); if (strlen(name) > 0) cost = getFileValue(name, 'total'); t = t + cost; number = number + 1; endif i = i + 1; endwhile return round (t/number); }€ €Skills/€Skills†€€skills€X@D€%0l!Total%-14rx'skills'%-7r! C€S%€ MS Sans Serif~€`€"(€¶})€!checkskills or t_skills<=age*2M€HTotal points in skills and spells must be less than or equal to Age × 2.}€&%0l!Skills%-18l!Diff.%-12r!Pts%-7r!Lev±€ Categories%%0l!Name: Categories%-12r!Pts%-7r!Lev%0l!$!: ^t%-14rc%-7rv€Running€ b_running+x/8§€€Athletic;Sport€PHL€Running€PH(~x,HT)+0*runningSpeedl€(c+a)*m)€ skchk(x,c)*€K%0l!^n (Move: ^o'Move')^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln%-5ll+€Running7€€8€Moveformat('%n',runningSpeed)‰€€€€10€ð?|€ð?€ Astronomy§€¥€€Scientific;Science€MHL€ Astronomy€MMH(~x,iq)+(0*tl)€bv(v,x);iq-6;`Default`F€ MMH(x,iq)l€(c+a)*m)€ skchk(x,c)*€A%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln/TL%-5ll+€ Astronomy7€€8€TLtl+&tl‰€©€€€€ Specialty‰€€€€12€ð?|€ð?€ Chemistry§€¥€€Scientific;Science€MHL€ Chemistry€MMH(~x,iq)+(0*tl)€ bv(v,x);iq-6;alchemy-3;`Default`F€ MMH(x,iq)l€(c+a)*m)€ skchk(x,c)*€A%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln/TL%-5ll+€ Chemistry7€€8€TLtl+&tl‰€©€€€€ Specialty‰€€€€12€ð?|€ð?€Computer Programming§€€ Scientific;Science;*Mathematical€MHL€Computer Programming€MMH(~x,iq)+(0*tl)l€(c+a)*m)€ skchk(x,c)*€A%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln/TL%-5ll+€ComputerProgramming1€)Sk:Computer Operation>=slc(12);Conf:TL>=77€€8€TLtl+&tl‰€©€€€€TL Range7+‰€©€€€€ Specialty‰€€€€12€ð?|€ð?€Electronics (Computers)§€¥€€Scientific;Science;*Electronics€MHL€Electronics (Computers)€MMH(~x,iq)+(0*tl)€%bv(v,x);cat:'Electronics'-4;`Default`F€ MMH(x,iq)l€(c+a)*m)€ skchk(x,c)*€A%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln/TL%-5ll+€ElectronicsComputers1€"Sk:Mathematics>=slc(12);Conf:TL>=77€€8€TLtl+&tl‰€©€€€€TL Range7+‰€©€€€€ Specialty‰€€€€12€ð?|€ð?€Engineer (Simple Machines)§€¥€€Scientific;Engineering;Science€MHL€Engineer (Simple Machines)€9(mmh(~x-(MathematicalAbility and TL+&tl>=6?2:0),iq))+0*tl€*bv(v,x);mechanicsimplemachines-6;`Default`F€1mmh(x-(MathematicalAbility and TL+&tl>=6?2:0),iq)l€(c+a)*m)€ skchk(x,c)*€%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|format('%d%s',@v@,@bonus@ or MathematicalAbility and TL+&tl>=6?'*':'')|0€ %0ln/TL%-5ll+€EngineerSimpleMachines1€1Sk:Mechanic (Simple Machines)>=slc(12);Conf:TL>=27€€8€TLtl+&tl‰€©€€€€TL Range2+‰€©€€€€ Specialty‰€€€€12€ð?|€ð?€History§€¥€€ Scientific€MHL€History€ MMH(~x,iq)€$bv(v,x);iq-6;archaeology-6;`Default`F€ MMH(x,iq)l€(c+a)*m)€ skchk(x,c)*€8%0ln^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln%-5ll+€History7€€€ Specialty‰€€€€12€ð?|€ð?€ Mathematics§€¥€€ Scientific;Science;*Mathematical€MHL€ Mathematics€ MMH(~x,iq)€bv(v,x);iq-6;`Default`F€ MMH(x,iq)l€(c+a)*m)€ skchk(x,c)*€8%0ln^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln%-5ll+€ Mathematics1€!Disadvantages:Innumerate7€€€ Specialty‰€€€€12€ð?|€ð?€ Physician§€¥€€Medical;Science€MHL€ Physician€MMH(~x,iq)+(0*tl)€/bv(v,x);veterinary-5;firstaid-11;iq-7;`Default`F€ MMH(x,iq)l€(c+a)*m)€ skchk(x,c)*€A%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln/TL%-5ll+€ Physician7€€8€TLtl+&tl‰€©€€€€12€ð?|€ð?€Physics§€¥€€Scientific;Science€MHL€Physics€MMH(~x,iq)+(0*tl)€bv(v,x);iq-6;`Default`F€ MMH(x,iq)l€(c+a)*m)€ skchk(x,c)*€A%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln/TL%-5ll+€Physics7€€8€TLtl+&tl‰€©€€€€ Specialty‰€€€€12€ð?|€ð?€ Psychology§€¥€€Scientific;Science;*Empathic€MHL€ Psychology€mmh(~x-(empathyBonus?3:0),iq)€)bv(v,x);iq-6+(empathyBonus?3:0);`Default`F€mmh(x-(empathyBonus?3:0),iq)l€(c+a)*m)€ skchk(x,c)*€a%0ln^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|format('%d%s',@v@,@bonus@ or empathyBonus?'*':'')|0€ %0ln%-5ll+€ Psychology7€€€ Specialty‰€€€€12€ð?|€ð?€Acting§€¥€€'Social;Thief/Spy;*Performance;*Empathic€MAL€Acting€ MMA(~x,iq)€0bv(v,x);iq-5;bard-5;performanceskill-2;`Default`F€ MMA(x,iq)l€(c+a)*m)€ skchk(x,c)*€8%0ln^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln%-5ll+€Acting€13€ð?|€ð?€Armoury (Hand Weapons)§€¥€€Craft;*Armoury€MAL€Armoury (Hand Weapons)€MMA(~x,iq)+(0*tl)€bv(v,x);iq-5;`Default`F€ MMA(x,iq)l€(c+a)*m)€ skchk(x,c)*€A%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln/TL%-5ll+€ArmouryHandWeapons7€€8€TLtl+&tl‰€©€€€€13€ð?|€ð?€Armoury (Rifles and Handguns)§€¥€€Craft;*Armoury€MAL€Armoury (Rifles and Handguns)€MMA(~x,iq)+(0*tl)€#bv(v,x);iq-5;cat:'Guns'-6;`Default`F€ MMA(x,iq)l€(c+a)*m)€ skchk(x,c)*€A%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln/TL%-5ll+€ArmouryRiflesandHandguns7€€8€TLtl+&tl‰€©€€€€TL Range5+‰€©€€€€13€ð?|€ð?€&Electronics Operation (Communications)§€¥€€#Professional;*Electronics Operation€MAL€&Electronics Operation (Communications)€MMA(~x,iq)+(0*tl)€;bv(v,x);IQ-5;electronicsoperationcommunications-3;`Default`F€ MMA(x,iq)l€(c+a)*m)€ skchk(x,c)*€A%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln/TL%-5ll+€"ElectronicsOperationCommunications1€Config:TL>=6-&tl7€€8€TLtl+&tl‰€©€€€€TL Range6+‰€©€€€€13€ð?|€ð?€Mechanic (Simple Machines)§€¥€€Craft;Vehicle;*Mechanic€MAL€Mechanic (Simple Machines)€MMA(~x,iq)+(0*tl)€/bv(v,x);iq-5;engineersimplemachines-4;`Default`F€ MMA(x,iq)l€(c+a)*m)€ skchk(x,c)*€A%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln/TL%-5ll+€MechanicSimpleMachines1€ Conf:TL>=27€€8€TLtl+&tl‰€©€€€€TL Range2+‰€©€€€€13€ð?|€ð?€Mechanic (Vehicle)§€¥€€Craft;Vehicle;*Mechanic€MAL€Mechanic (Vehicle)€MMA(~x,iq)+(0*tl)€(bv(v,x);iq-5;engineervehicle-4;`Default`F€ MMA(x,iq)l€(c+a)*m)€ skchk(x,c)*€A%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln/TL%-5ll+€MechanicVehicle1€ Conf:TL>=17€€8€TLtl+&tl‰€©€€€€TL Range1+‰€©€€€€13€ð?|€ð?€ Telegraphy§€€Language€MEL€ Telegraphy€ melang(~x)l€(c+a)*m)€langchk(x,&x,c)*€U%0l!^n^x|`Native`?' (native)':''|^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln%-5ll+€ Telegraphy7€€€Native?+0;‹€'l'‰€€€€13€à?|€à?€Tracking§€¥€€Outdoor;Thief/Spy€MAL€Tracking€ MMA(~x,iq)€#bv(v,x);iq-5;Naturalist-5;`Default`F€ MMA(x,iq)l€(c+a)*m)€ skchk(x,c)*€8%0ln^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln%-5ll+€Tracking€13€ð?|€ð?€ Xenobiology§€€ Scientific€MAL€ Xenobiology€MMA(~x,iq)+(0*tl)l€(c+a)*m)€ skchk(x,c)*€A%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln/TL%-5ll+€ Xenobiology1€Configuration:TL>=7-&tl7€€8€TLtl+&tl‰€©€€€€ Specialty‰€€€€13€ð?|€ð?€Computer Operation§€¥€€ Professional€MEL€Computer Operation€MME(~x,iq)+(0*tl)€bv(v,x);iq-4;`Default`F€ MME(x,iq)l€(c+a)*m)€ skchk(x,c)*€A%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln/TL%-5ll+€ComputerOperation1€Configuration:TL>=7-&tl7€€8€TLtl+&tl‰€©€€€€TL Range7+‰€©€€€€14€ð?|€ð?€English§€€Language;World€MAL€English€ malang(~x)l€(c+a)*m)€langchk(x,&x,c)*€U%0l!^n^x|`Native`?' (native)':''|^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln%-5ll+€English7€€€Native?+1;‹€'l'‰€€€€14€Irish§€€Language;World€MAL€Irish€ malang(~x)l€(c+a)*m)€langchk(x,&x,c)*€U%0l!^n^x|`Native`?' (native)':''|^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln%-5ll+€Irish7€€€Native?+1;‹€'l'‰€€€€14€Style Analysisª€CI§€¥€€ Martial Arts€MHL€Style Analysis€ MMH(~x,iq)€*bv(v,x);BodyLanguage-6;Tactics-6;`Default`F€ MMH(x,iq)l€(c+a)*m)€ skchk(x,c)*€8%0ln^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln%-5ll+€ StyleAnalysis€14€@|€@€Survival (Desert)§€¥€€Outdoor;Survival€MAL€Survival (Desert)€ MMA(~x,iq)€4bv(v,x);iq-5;naturalist-3;cat:'Survival'-3;`Default`F€ MMA(x,iq)l€(c+a)*m)€ skchk(x,c)*€8%0ln^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln%-5ll+€SurvivalDesert€14€@|€@€Boxing€zparry+1§€€+Combat/Weapon;Athletic;*Melee;*Hand-to-Hand€PAL€Boxing€ PA(~x,dx)l€(c+a)*m)€ skchk(x,c)*€8%0ln^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln%-5ll+€Boxing7€8€Parry.integer(x*(c?2/3:.5)+b_bhparry+combatreflexes)€€15€à?|€à?€Piloting (Helicopter)§€¥€€Vehicle;Piloting€PAL€Piloting (Single-Engine Prop)€PA(~x,dx)+(0*tl)€'bv(v,x);iq-6;cat:'Piloting'-4;`Default`F€PA(x,dx)l€(c+a)*m)€ skchk(x,c)*€A%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln/TL%-5ll+€PilotingSingleEngineProp1€ Conf:TL>=67€€8€TLtl+&tl‰€©€€€€TL Range6+‰€©€€€€15€à?|€à?€Engineer (Guns)§€¥€€Scientific;Engineering;Science€MHL€Engineer (Guns)€9(mmh(~x-(MathematicalAbility and TL+&tl>=6?2:0),iq))+0*tl€bv(v,x);armouryguns-6;`Default`F€1mmh(x-(MathematicalAbility and TL+&tl>=6?2:0),iq)l€(c+a)*m)€ skchk(x,c)*€%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|format('%d%s',@v@,@bonus@ or MathematicalAbility and TL+&tl>=6?'*':'')|0€ %0ln/TL%-5ll+€ EngineerGuns1€ Conf:TL>=57€€8€TLtl+&tl‰€©€€€€TL Range5+‰€©€€€€ Specialty‰€€€€12€ð?|€ð?€Engineer (Vehicle)§€¥€€Scientific;Engineering;Science€MHL€Engineer (Vehicle)€9(mmh(~x-(MathematicalAbility and TL+&tl>=6?2:0),iq))+0*tl€#bv(v,x);mechanicvehicle-6;`Default`F€1mmh(x-(MathematicalAbility and TL+&tl>=6?2:0),iq)l€(c+a)*m)€ skchk(x,c)*€%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|format('%d%s',@v@,@bonus@ or MathematicalAbility and TL+&tl>=6?'*':'')|0€ %0ln/TL%-5ll+€EngineerVehicle1€Sk:Mechanic (Vehicle)>=slc(12)7€€8€TLtl+&tl‰€©€€€€ Specialty‰€€€€12€ð?|€ð?€Piloting (Light Plane)§€¥€€Vehicle;Piloting€PAL€Piloting (Single-Engine Prop)€PA(~x,dx)+(0*tl)€'bv(v,x);iq-6;cat:'Piloting'-4;`Default`F€PA(x,dx)l€(c+a)*m)€ skchk(x,c)*€A%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln/TL%-5ll+€PilotingSingleEngineProp1€ Conf:TL>=67€€8€TLtl+&tl‰€©€€€€TL Range6+‰€©€€€€15€à?|€à?€Electronics (Weapons)§€¥€€Scientific;Science;*Electronics€MHL€Electronics (Weapons)€MMH(~x,iq)+(0*tl)€%bv(v,x);cat:'Electronics'-4;`Default`F€ MMH(x,iq)l€(c+a)*m)€ skchk(x,c)*€A%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln/TL%-5ll+€ElectronicsWeapons1€"Sk:Mathematics>=slc(12);Conf:TL>=77€€8€TLtl+&tl‰€©€€€€TL Range7+‰€©€€€€ Specialty‰€€€€12€ð?|€ð?€Electronics (Communications)§€¥€€Scientific;Science;*Electronics€MHL€Electronics (Communications)€MMH(~x,iq)+(0*tl)€%bv(v,x);cat:'Electronics'-4;`Default`F€ MMH(x,iq)l€(c+a)*m)€ skchk(x,c)*€A%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln/TL%-5ll+€ElectronicsCommunications1€"Sk:Mathematics>=slc(12);Conf:TL>=67€€8€TLtl+&tl‰€©€€€€TL Range6+‰€©€€€€ Specialty‰€€€€12€ð?|€ð?€ Parachuting§€¥€€Athletic€PEL€ Parachuting€ PE(~x,dx)€bv(v,x);dx-4;iq-6;`Default`F€ PE(x,dx)+0*iql€(c+a)*m)€ skchk(x,c)*€8%0ln^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln%-5ll+€ Parachuting€17€ð?|€ð?€ Acrobatics§€¥€€Athletic;*Melee;Sport€PHL€ Acrobatics€ PH(~x,dx)€bv(v,x);dx-6;`Default`F€PH(x,dx)l€(c+a)*m)€ skchk(x,c)*€8%0ln^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln%-5ll+€ Acrobatics€16€@|€@€Driving (Tracked)§€¥€€Vehicle;*Driving€PAL€Driving (Tracked)€PA(~x,dx)+(0*tl)€7bv(v,x);iq-5;dx-5;DrvHlfTrk-2;cat:'Driving'-4;`Default`F€ PA(x,dx)+0*iql€(c+a)*m)€ skchk(x,c)*€A%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln/TL%-5ll+€DrvTrk1€ Conf:TL>=67€€8€TLtl+&tl‰€©€€€€TL Range6+‰€©€€€€16€ð?|€ð?€Russian§€€Language;World€MAL€Russian€ malang(~x)l€(c+a)*m)€langchk(x,&x,c)*€U%0l!^n^x|`Native`?' (native)':''|^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln%-5ll+€Russian7€€€Native?+0;‹€'l'‰€€€€16€@|€@€Stealth§€¥€€ Thief/Spy€PAL€Stealth€ PA(~x,dx)€bv(v,x);iq-5;dx-5;`Default`F€ PA(x,dx)+0*iql€(c+a)*m)€ skchk(x,c)*€8%0ln^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln%-5ll+€Stealth€16€ð?|€ð?€Driving (Automobile)§€¥€€Vehicle;*Driving;Sport€PAL€Driving (Automobile)€PA(~x,dx)+(0*tl)€6bv(v,x);iq-5;dx-5;DrvHvyWh-2;cat:'Driving'-4;`Default`F€ PA(x,dx)+0*iql€(c+a)*m)€ skchk(x,c)*€A%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln/TL%-5ll+€DrvAuto1€ Conf:TL>=67€€8€TLtl+&tl‰€©€€€€TL Range6+‰€©€€€€17€@|€@€Fencing (Smallsword)€zparry+1ª€CI§€¥€€NCombat/Weapon;Athletic;*Melee;*Weapon;*One-Handed;*Long Weapon;*Fencing;*Sword€PAL€Fencing (Smallsword)€ PA(~x,dx)€&bv(v,x);dx-5;cat:'Fencing'-3;`Default`F€PA(x,dx)l€(c+a)*m)€ skchk(x,c)*€8%0ln^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln%-5ll+€FencingSmallsword7€8€Parry integer(x*(c?2/3:.5)+wpbonus(0))€€17€@|€@€Judo€zparry+1§€¥€€+Combat/Weapon;Athletic;*Melee;*Hand-to-Hand€PHL€Judo€ PH(~x,dx)€'bv(v,x);JudoArt-3;JudoSport-3;`Default`F€PH(x,dx)l€(c+a)*m)€ skchk(x,c)*€8%0ln^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln%-5ll+€Judo7€8€Parry.integer(x*(c?2/3:.5)+b_bhparry+combatreflexes)€€17€@|€@€ Karate Art€zparry+1ª€CI§€¥€€+Combat/Weapon;Athletic;*Melee;*Combat Sport€PHL€ Karate Art€ PH(~x,dx)€(bv(v,x);karate-3;karatesport-3;`Default`F€PH(x,dx)l€(c+a)*m)€ skchk(x,c)*€8%0ln^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln%-5ll+€ KarateArt7€8€Parry.integer(x*(c?2/3:.5)+b_bhparry+combatreflexes)€€17€@|€@€ Shortsword€zparry+1§€¥€€ECombat/Weapon;Athletic;*Melee;*Weapon;*One-Handed;*Long Weapon;*Sword€PAL€ Shortsword€ PA(~x,dx)€@bv(v,x);dx-5;broadsword-2;forcesword-3;shortswordart-3;`Default`F€PA(x,dx)l€(c+a)*m)€ skchk(x,c)*€8%0ln^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln%-5ll+€ Shortsword7€8€Parryinteger(x*.5+wpbonus(0))€€17€@|€@€Staff€zparry+1§€¥€€2Combat/Weapon;Athletic;*Melee;*Weapon;*Long Weapon€PHL€Staff€ PH(~x,dx)€bv(v,x);dx-5;spear-2;`Default`F€PH(x,dx)l€(c+a)*m)€ skchk(x,c)*€8%0ln^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln%-5ll+€Staff7€8€Parry integer(x*(c?2/3:.5)+wpbonus(0))€€17€@|€@€Tonfa€zparry+1ª€CI§€¥€€>Combat/Weapon;Athletic;*Melee;*Weapon;*One-Handed;*Long Weapon€PHL€Tonfa€ PH(~x,dx)€#bv(v,x);dx-6;Shortsword-3;`Default`F€PH(x,dx)l€(c+a)*m)€ skchk(x,c)*€8%0ln^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln%-5ll+€Tonfa7€8€Parryinteger(x*.5+wpbonus(0))€€17€@|€@€ Wrestling§€¥€€+Combat/Weapon;Athletic;*Melee;*Hand-to-Hand€PAL€ Wrestling€ PA(~x,dx)€'bv(v,x);dx-5;WrestlingSport-3;`Default`F€PA(x,dx)l€(c+a)*m)€ skchk(x,c)*€8%0ln^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln%-5ll+€ Wrestling€17€@|€@€Gunner (Machine Gun)§€¥€€-Combat/Weapon;Athletic;Gunner;Vehicle;*Ranged€PAL€Gunner (Machine Gun)€(pa(~x,dx+(iq>9)+(iq>11)))+0*tl€%bv(v,x);dx-5;cat:'Gunner'-4;`Default`F€pa(x,dx+(iq>9)+(iq>11))l€(c+a)*m)€ skchk(x,c)*€A%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln/TL%-5ll+€GnrMG1€Config:TL>=6-&tl7€€8€TLtl+&tl‰€©€€€€TL Range6+‰€©€€€€18€ð?|€ð?€Swimming§€¥€€Athletic;Sport€PEL€Swimming€ PE(~x,dx)€#bv(v,x);skilldefST-5;dx-4;`Default`F€PE(x,dx)+0*skilldefSTl€(c+a)*m)€ skchk(x,c)*€8%0ln^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln%-5ll+€Swimming€18€@|€@€Guns (Light Automatic)§€¥€€#Combat/Weapon;Athletic;Guns;*Ranged€PEL€Guns (Light Automatic)€(gunsk(~x))+0*tl€Ubv(v,x);dx-4;GunsRfl-4;GunsShg-4;GunsMPtl-5;GunsLAW-5;GunsGrnLa-5;GunsPtl-5;`Default`F€gunsk(x)l€(c+a)*m)€ skchk(x,c)*€A%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln/TL%-5ll+€GunsLtAu1€Config:TL>=5-&tl7€€8€TLtl+&tl‰€©€€€€TL Range5+‰€©€€€€19€ð?|€ð?€ Guns (Pistol)§€¥€€#Combat/Weapon;Athletic;Guns;*Ranged€PEL€ Guns (Pistol)€(gunsk(~x))+0*tl€Vbv(v,x);dx-4;GunsMPtl-4;GunsLtAu-5;GunsRfl-4;GunsShg-4;GunsLAW-5;GunsGrnLa-5;`Default`F€gunsk(x)l€(c+a)*m)€ skchk(x,c)*€A%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln/TL%-5ll+€GunsPtl1€Config:TL>=5-&tl7€€8€TLtl+&tl‰€©€€€€TL Range5+‰€©€€€€19€ð?|€ð?€ Guns (Rifle)§€¥€€#Combat/Weapon;Athletic;Guns;*Ranged€PEL€ Guns (Rifle)€(gunsk(~x))+0*tl€Vbv(v,x);dx-4;GunsShg-2;GunsPtl-4;GunsLtAu-4;GunsMPtl-5;GunsLAW-3;GunsGrnLa-3;`Default`F€gunsk(x)l€(c+a)*m)€ skchk(x,c)*€A%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln/TL%-5ll+€GunsRfl1€Config:TL>=5-&tl7€€8€TLtl+&tl‰€©€€€€TL Range5+‰€©€€€€19€ð?|€ð?€Guns (Shotgun)§€¥€€#Combat/Weapon;Athletic;Guns;*Ranged€PEL€Guns (Shotgun)€(gunsk(~x))+0*tl€Vbv(v,x);dx-4;GunsRfl-2;GunsPtl-4;GunsLtAu-4;GunsMptl-5;GunsLAW-3;GunsGrnLa-3;`Default`F€gunsk(x)l€(c+a)*m)€ skchk(x,c)*€A%0ln/TL^o'TL'^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln/TL%-5ll+€GunsShg1€Config:TL>=5-&tl7€€8€TLtl+&tl‰€©€€€€TL Range5+‰€©€€€€19€ð?|€ð?€Karate€zparry+1§€¥€€+Combat/Weapon;Athletic;*Melee;*Hand-to-Hand€PHL€Karate€ PH(~x,dx)€+bv(v,x);KarateArt-3;KarateSport-3;`Default`F€PH(x,dx)l€(c+a)*m)€ skchk(x,c)*€8%0ln^x|doptlist('Specialty')|%-18ll%-12rc%-7rx|dsk(@v@)|0€ %0ln%-5ll+€Karate7€8€Parry.integer(x*(c?2/3:.5)+b_bhparry+combatreflexes)€€20€8@|€8@€ € Advantages/€ Advantages†€€ advantages$@D€!%0l!Total%-14rx'advantages'%-7r! C€A%€ MS Sans Serif~€`€"(€û”î²}€%0l!Advantages%-12r!Pts%-7r!Lev€Patron§€¨€G€L€Patron€qindex(x,10,10,15,15,25,30)l€ `No Cost`?0:tcfunc(c,a,@mo@,@p@))€ x>0 and x<=6M€Value not allowed.*€%0ln (^o'Appears')%-14rc%-7r!0€%0ln%-15r!VariableP€x$Powerful Character;1;1000× Wealth Group;2;Very Powerful Character;3;Powerful Group;4;Very Powerful Group;5;Government;6+€Patron7€€=€Appears;?:4;6 or less,×1/2;9 or less,×1;12 or less,×2;15 or less,×3‰€€>€ Equipment$?:3;None,0;Standard,+5;Expensive,+10>€Special Qualities*?:1;None,0;Significant,+5;Very Unusual,+10>€ Unwilling?+0;-5€€5€9@|€@Z@€Zeroed§€G€v€„€L€Zeroedl€ `No Cost`?0:tcfunc(c,a,@mo@,@p@)*€%0ln%-14rc%-7r! 0€ %0ln%-5rc€0€$@|€$@€Composed€fright+2§€v€„€L€Composedl€ `No Cost`?0:tcfunc(c,a,@mo@,@p@)*€%0ln%-14rc%-7r! 0€ %0ln%-5rc7€8€ Fright Checkwillpower+fright€€0€@|€@€Fitª€CI§€L€Fit€x=1?5:15l€ `No Cost`?0:tcfunc(c,a,@mo@,@p@))€ x=1 or x=2M€Value not allowed.*€@%0ln^x|@v@>1?format(' (%s)', itemInfo('@level@')):''|%-14rc%-7r!0€%0ln%-15r!VariableP€$Standard;1;Very;2+€Fit7€8€HTformat('+%d',x)8€ Fatigue Lossx=1?'Normal':'Half'€Fatigue Recovery Double Rate€€1€@|€@€ € Disadvantages/€ Disadvantages†€€ disadvantages<ÀD€$%0l!Total%-16rx'disadvantages'%-7r! C€D%€ MS Sans Serif~€`€"(€¢Òî²)€<!checkMax or t_disadv+attdisadv>=-maxDisad or disadvcount<=1M€Too many Disadvantages taken.}€"%0l!Disadvantages%-12r!Pts%-7r!Lev€ Light Sleeperª€CI§€v€„€€PhysicalL€ Light Sleeperl€ `No Cost`?0:tcfunc(c,a,@mo@,@p@)*€%0ln%-14rc%-7r! 0€ %0ln%-5rc€0€À|€À€Secret§€¨€G€€SocialL€Secret€qindex(x,-5,-10,-20,-30)l€ `No Cost`?0:tcfunc(c,a,@mo@,@p@))€ x>0 and x<=4M€Value not allowed.*€%0ln%-14rc%-7r!0€%0ln%-15r!VariableP€R$Serious Embarassment;1;Utter Rejection;2;Imprisonment or Exile;3;Possible Death;4+€Secret€4€>À|€>À€ Extra Sleepª€CI§€€PhysicalL€ Extra Sleep€~x*-3l€ `No Cost`?0:tcfunc(c,a,@mo@,@p@))€ x<=4 and x>0*€%0ln%-14rx'displev(@c@)'%-7rv0€%0ln%-15r!-3/level+€ ExtraSleep€1€À|€À€Eunuch§€v€„€€PhysicalL€Eunuchl€ `No Cost`?0:tcfunc(c,a,@mo@,@p@)*€%0ln%-14rc%-7r! 0€ %0ln%-5rc€0€À|€À€Extremely Hazardous Dutyª€CI§€G€v€„€€SocialL€Extremely Hazardous Dutyl€ `No Cost`?0:tcfunc(c,a,@mo@,@p@)*€%0ln%-14rc%-7r! 0€ %0ln%-5rc€0€4À|€4À€Poor€ wealthAdd-2§€v€„€€PovertyL€Poorl€ `No Cost`?0:tcfunc(c,a,@mo@,@p@)*€%0ln%-14rc%-7r! 0€ %0ln%-5rc1€!!#1,Adv:Wealth;!#1,Disadv:Poverty7€8€Starting Wealthformat('$%n',wealthFunc(0))€€0€.À|€.À€ €Quirks/€Quirks€quirksD€TotalC€Q%€ MS Sans Serif~€`€"(€ÿÿÿÿî˜)€,!checkMax or quirks>=-maxQuirks+racialQuirksM€Too many Quirks taken.}€ %0l!Quirks€ €Spells/€Spells€spellsD€%0l!Total%-14rx'spells'%-7r! C€L%€ MS Sans Serif~€`€"(€ÿÿÿÿ%¨)€!checkskills or t_skills<=age*2M€HTotal points in skills and spells must be less than or equal to Age × 2.}€(%0l!Spells%-32l!College%-12r!Pts%-7r!Lev€ € Equipment/€ Equipment€ possweightD€Š%0l!Totals (^x|dm(availMoney+wealthFunc(0))|)%-28rx|dm(posscost)|%-15rx|useMetric?format('%1nkg',possweight/2.2):format('%2n',possweight)|9€Weight:€QuantityC€E%€ MS Sans Serif~€`€"(€ÿÿÿÿ"Ø)€ !checkEnc or possweight<=xhvyencM€…$format('Equipment weight exceeds Extra Heavy encumbrance (%s). Remove equipment or check Exclude on items not carried.',dw(xhvyenc))}€%0l!Equipment%-15r!Cost%-7r!Wt.Á€availMoney*wealthFunc(0)€ €Powers/€Powers€powersD€%0l!Total%-14rx'powers'%-7r! C€P%€ MS Sans Serif~€`€"(€ÿÿÿÿî²}€%0l!Powers%-14r!Pts%-7r!Lev€ €Additional Attributes/€Additional Attributes€custAttrD€%0l!Total%-12rx'custAttr'%-7r! C€U%€ MS Sans Serif~€`€"(€ÿÿÿÿp}€*%0l!Additional Attributes%-12r!Pts%-7r!Lev€&€Main9Ê(€8†€%€ MS Sans Serif~€`€"ž€%€ MS Sans Serif~€`€"Ÿ€€€€C€M)€chkattdisadv(0)M€5Lowered Attribute costs exceed maximum Disadvantages.N€x>0O€"Attributes must be greater than 0.€Name:! !€€ Sean McEnnis'Name€3ST0Required?0:round(stCost(~st)*(nofinemanip?.6:1))' "€c_st€ST*' #€$€14B#)€+ST0Required?(x=0):attChk(x,&st,minST,maxST)M€=$ST0Required?'ST must be 0':attChkMsg('ST',x,&st,minST,maxST)€ST0Required?0:10+&stst€/d' #€$€baseFatigue+FatigueBonus+&x_stm#)€x>0M€Fatigue must be greater than 0.€baseFatigue+FatigueBonus+&x_stx_st€ attCost(~dx)@ "€c_dx€DX*@ #€$€17B<)€attChk(x,&dx,minDX,maxDX)M€"$attChkMsg('DX',x,&dx,minDX,maxDX)dx€Thr:l@ !€€thrust(max(st,p_st),0)„@ !€t_thrdmg€ attCost(~iq)Y "€c_iq€IQ*Y #€$€14BU)€attChk(x,&iq,minIQ,maxIQ)M€"$attChkMsg('IQ',x,&iq,minIQ,maxIQ)iq€Sw:lY !€€swing(max(st,p_st),0)„Y !€t_swdmg€ attCost(~ht)r "€c_ht€HT*r #€$€12Bn)€attChk(x,&ht,minHT,maxHT)M€"$attChkMsg('HT',x,&ht,minHT,maxHT)ht€/dr #€$€(Hits1Required?1:baseHits+HitsBonus+&x_htln)€Hits1Required?(x=1):x>0M€F$Hits1Required?'Must have 1 Hit.':'Hit Points must be greater than 0.'€(Hits1Required?1:baseHits+HitsBonus+&x_htx_ht €Movement’4€ Basic Speed¡M !€€format('%2n',speed)r¡! "€d_speed€Move°M !€€mover°! "€d_move€ Experience:³:!€€€Bmin(max(charTotal-beginningPoints,0)+extraAttCost+addAttCost, exp)î "€expSpent €<max(charTotal-beginningPoints,0)+extraAttCost+addAttCost>exp€€/  #€$€105)€x>=0M€ Negative experience not allowed.exp €Summary©‰m€ Attributes³,R !€€c_st+c_dx+c_iq+c_ht+custAttr ,! "€ attributes€ Advantages³;R !€€advantages+powers+(~x_st>baseFatigue+FatigueBonus?(~x_st-(baseFatigue+FatigueBonus))*c_xst:0)+(~x_ht>baseHits+HitsBonus?(~x_ht-(baseHits+HitsBonus))*c_xht:0) ;! "€t_adv€ Disadvantages³JR !€€€¬disadvantages+0*maxDisad*attdisadv+(~x_htmaxDisad and disadvcount>1€€Quirks³YR !€€€quirks+0*maxQuirks*racialQuirks Y! "€t_quirks €-quirks>maxQuirks-racialQuirks€€Skills³hR !€€ skills+spells h! "€t_skills€€(charTotal+0*beginningPoints*exp*expSpentw) "€total €total>beginningPoints+expSpent€ €Defenses©‰4€PD³¡M !€€sbp(armorPD,armorPDimp,spd+ipd) ¡! "€t_pd€DR³°M !€€sbp(armorDR,armorDRimp,idr) °! "€t_dr€Zformat("TOTAL (%d%s)", beginningPoints+expSpent, beginningPoints+expSpent=total?' =':'')³wM !€d_total€&€ Information\Ê(€ÿÿÿÿ%€ MS Sans Serif~€C€I€Player:( !€€:player€Story:# !€€:4story€ Appear- ance:U.!€€:UA appearance€Height:¡%!€€$€73+6)€x>=0M€Height must be zero or greater.€ defHeight*€ x=0?'':dh(x)€useMetric?$1/2.54:$1*12+$2heightœ€!chgHeight($*height, $*defHeight);€€Weight:h¡' !€€$€170Ž>)€x>=0M€Weight must be zero or greater€ defWeight*€ x=0?'':dw(x)€useMetric?$1*2.2:$1 bodyweightœ€%chgWeight($*bodyweight, $*defWeight);€€Age:Í¡ "€€$€28è&)€'x>0 and (!checkskills or t_skills<=x*2)M€jAge must be greater than zero and total points in skills and spells must be less than or equal to Age × 2.€#max(youth_age, round(t_skills/2)+1)ageœ€ chgAge($*age)€6€2;GsexMale;1;Female;2;Sex;0€Historically Accurate Height¶œ histAccHeight€Created: %@datecreated%ϸ‡ "€€&€Combatú(€ÿÿÿÿ%€ MS Sans Serif~€C€C €Body Protection³C €Passive DefensezP€Armor +" !€€sbp(armorPD,armorPDimp,0)W+ "€d_apd€Shield :" !€€spd^: "€d_spd€ Innate PD I !€€ipd^I "€d_ipd€Total X" !€€sbp(armorPD,armorPDimp,spd+ipd)WX "€pd €Damage ResistancenzC€Armor ~B !€€sbp(armorDR,armorDRimp,0)W} "€d_adr€ Toughness B !€€idr^ "€d_idr€Total œB !€€sbp(armorDR,armorDRimp,idr)W"€dr € Encumbrance’ˆf€denc("None", 1)šT !€m_noenc€ encfunc(1)ð# "€noenc€denc("Light", 2)š&T !€ m_lightenc€ encfunc(2)ð&# "€lightenc€denc("Medium", 3)š5T !€m_medenc€ encfunc(3)ð5# "€medenc€denc("Heavy", 4)šDT !€m_hvyenc€ encfunc(4)ðD# "€hvyenc€denc("X-Heavy", 5)šST !€ m_xhvyenc€ encfunc(5)ðS# "€xhvyenc €Active Defenses’nˆC€Dodge›~( !€€Parry›( !€€Block›œ( !€€ Enc. Weight:A!€€ewtK. "€t_ewt€u_dodge+pd-encmv(enc)ÿ~ "€dodge€ u_parry+pdÿ "€t_parry€ u_block+pdÿœ "€t_block€*integer(base_speed)+b_dodge+combatreflexesá~ "€u_dodge€2parry?parry:integer(dx/2)+combatreflexes+b_bhparryá "€u_parry€8(block=0?integer((dx-4)/2):block)+b_block+combatreflexesᜠ"€u_block€/ö~ #€€/ö #€€/öœ #€€PDÐ !€€DRâ !€€sbp(b_HeadPD,b_HeadPDimp,ipd)&Ð( #€HeadPD€sbp(b_HeadDR,b_HeadDRimp,idr)&â( #€HeadDR€Head&Á( #€€sbp(b_BodyPD,b_BodyPDimp,ipd)NÐ( #€BodyPD€sbp(b_BodyDR,b_BodyDRimp,idr)Nâ( #€BodyDR€BodyNÁ( #€€sbp(b_ArmsPD,b_ArmsPDimp,ipd)vÐ( #€ArmsPD€sbp(b_ArmsDR,b_ArmsDRimp,idr)vâ( #€ArmsDR€ArmsvÁ( #€€sbp(b_LegsPD,b_LegsPDimp,ipd)žÐ( #€LegsPD€sbp(b_LegsDR,b_LegsDRimp,idr)žâ( #€LegsDR€LegsžÁ( #€€sbp(b_HandsPD,b_HandsPDimp,ipd)ÆÐ( #€HandsPD€sbp(b_HandsDR,b_HandsDRimp,idr)Æâ( #€HandsDR€HandsÆÁ( #€€sbp(b_FeetPD,b_FeetPDimp,ipd)îÐ( #€FeetPD€sbp(b_FeetDR,b_FeetDRimp,idr)îâ( #€FeetDR€FeetîÁ( #€€&€Picture (€ÿÿÿÿ%€ MS Sans Serif~€C€TT€Picture€&€ Configuration7B(€Á†€%€ MS Sans Serif~€C€N € Campaign Type‘‡6€8 …«campTypeÆStone Age;1;Bronze Age/Athens;2;Iron Age/Rome;3;Fantasy/Medieval;4;Renaissance/Colonial;5;Late 19th century;6;Early 1900s;7;Mid-20th century;8;Modern;9;Cyberpunk;10;Interplanetary;10;Interstellar;11€ Base Wealth: 1E !€$€:qindex(campType,40,5000,5000,1000,1000,750,750,5000,15000)`-1)€x>=0€:qindex(campType,40,5000,5000,1000,1000,750,750,5000,15000) baseWealth€ Tech Level: H= !€$€&qindex(campType,0,1,2,3,4,5,6,6,7,8,9)`D€&qindex(campType,0,1,2,3,4,5,6,6,7,8,9)TL€Literacy Default: _R!€$€qindex(tl-2+&tl,0,5,10)`[)€x=0 or x=5 or x=10M€(Only values of 0, 5, and 10 are allowed.€qindex(tl-2+&tl,0,5,10)LiteracyDefault€ Magic Rarity: vR!€$€&qindex(campType,0,0,0,0,1,1,1,1,1,1,1)`r)€x>=0€&qindex(campType,0,0,0,0,1,1,1,1,1,1,1) magicRarity €Character TypeŽ’p6€6 ž„charTypeƒBelow-average;1;Average;2;Above-average;3;Experienced;4;Standard;5;Full-fledged hero;6;Truly outstanding;7;Superhuman;8;Superhero;9€Beginning Points: »] !€$€9qindex(charType, 15, 25, 50, 75, 100, 150, 200, 300, 500)k·&€9qindex(charType, 15, 25, 50, 75, 100, 150, 200, 300, 500)beginningPoints€Max. Disadvantages: Òd !€$€5qindex(charType, 40, 40, 40, 40, 40, 40, 60, 75, 100)s΀5qindex(charType, 40, 40, 40, 40, 40, 40, 60, 75, 100) disadvlim€ Max. Quirks: éd !€$€5så€54€ maxQuirks €Campaign Limits¡‘r€Extra Fatigue Cost:¨d !€$€3)€x>0M€*Extra Fatigue cost must be greater than 0.c_xst€Extra Hit Point Cost:¨-d!€$€5))€x>0M€0Cost of extra hit points must be greater than 0.c_xht€ Aging Age:¨D8 !€$€`shortLifespan>0?qindex(shortLifespan,37,27,20,15,11,8,6):50*(1+extLifespan)+&aging_age+NoAging*0@)€x>=0€`shortLifespan>0?qindex(shortLifespan,37,27,20,15,11,8,6):50*(1+extLifespan)+&aging_age+NoAging*0*€NoAging?'--':x aging_age€Maturation Age:¨[T!€$€`(shortLifespan?qindex(shortLifespan+1,18,13,9,6,4,3,2,1):18*(1+extLifespan))/(2^EarlyMaturation)W)€x>=0€`(shortLifespan?qindex(shortLifespan+1,18,13,9,6,4,3,2,1):18*(1+extLifespan))/(2^EarlyMaturation) youth_age €Character Sheet Options¡z‘„€ Adds to Diceªˆ… adds2dice€ Enhanced STª›… enhancedST€ Check Skillsª®… checkskills€Check Max. Disadv.ªÁ…checkMax€Check EncumbranceªÔ…checkEnc€Fatigue/HT, Hits/STªè… RevFatHits €Initial Attributesÿ+$€ Established UestChar€STj"€$€0{ orgST€DXž"€$€0¯ orgDX€IQÍ"€$€0Þ orgIQ€HTþ"€$€0 orgHT€ Logo File:,2!€€7(ºLogoFile›€ Browse...ö&< btnBrowse­fileName = $$Configuration.LogoFile; getFileName fileName, "Select Logo File", "Graphic File|*.bmp;*.jpg;*.png"; if (fileName) Configuration.LogoFile = fileName; endif€&€ DevelopmentÊ(€ÿÿÿÿ%€ MS Sans Serif~€C€V€Year:  !€$€0(year€Week:J $ "€$€1p)€+x>0 and x <= (weeksPerYear?weeksPerYear:52)M€H$format('Week must be between 1 and %d.',(weeksPerYear?weeksPerYear:52))week€Cost of Living: I "€€Time Use Profiles:$f!€ € timeuseprof3w) €Time Use/€Time Use€ timeuseprofD€Total€€Jobs:ƒ$f!€ €jobsƒ3w) €Jobs/€Jobs€jobsD€Total€€Development History:cv!€ €historyqV €History/€History€historyD€Totalv€€€ costOfLivingÚ * !€totalCostOfLiving€€