\n"); document.write("\n"); } function sortascend(a,b) { var i; for(i = 2; i < a.length; i++) { if( (a[i]-b[i]) != 0 ) { return a[i]-b[i]; } } // Could not distinguish return 0; } function sortdescend(a,b) { return sortascend(b,a); } function arraycmp(a,b,start) { var i; for(i = start; i < a.length; i++) { if(a[i] != b[i]) { return 1; } } return 0; } function updateinit(code,racesort,showvotes) { var rank = 0; for(j = 0; j < numraces; j++) { if( (j==0) || (arraycmp(racesort[j],racesort[j-1],2) != 0) ) { rank++; el(code+"0"+j).innerHTML = ""+rank+"."; } else { el(code+"0"+j).innerHTML = ""; } el(code+"1"+j).innerHTML = races[racesort[j][0]].name; el(code+"2"+j).innerHTML = racesort[j][2]; el(code+"3"+j).innerHTML = racesort[j][3]; if(showvotes) { el(code+"v"+j).innerHTML = racesort[j][1]; } } } function recalc() { var recalcstart = new Date().getTime(); var planetsneutral = 0; var planetcount = new Array(numraces); var planetreses = new Array(numraces); var influence = new Array(numraces); for(j = 0; j < numraces; j++) { planetcount[j] = 0; planetreses[j] = 0; influence[j] = 0; } // Sum up planet information for(i = 0; i < numplanets; i++) { var planet = planets[i]; var txt = " "+planet.res+"/"+planet.inf; if(planet.tech != 0) { txt = txt + " " + techs[planet.tech].icon16img(); } var value = radiovalue("pn"+i); if(value == "n") { planetsneutral++; } for(j = 0; j < numraces; j++) { var elm = el("pno"+i+j); if(j == value) { elm.innerHTML = txt; planetcount[j]++; var sarboost = 0; if(checkvalue("tspy"+j)) { sarboost = 1; } planetreses[j] = planetreses[j] + planet.res + sarboost; influence[j] = influence[j] + planet.inf; } else { elm.innerHTML = ""; } } } // Write planet information var elm2 = el("plcn"); elm2.innerHTML = planetsneutral; var laborlaw = lawpassed("llp"); for(j = 0; j < numraces; j++) { var elm = el("plc"+j); elm.innerHTML = planetcount[j]; var plcredits = el("plr"+j); var plvotes = el("plv"+j); if(laborlaw) { // Labor Law Politics voted in: You get votes for // resources and credits for influence var t = plcredits; plcredits = plvotes; plvotes = t; } plcredits.innerHTML = planetreses[j]; plvotes.innerHTML = influence[j]; } // Enviro compensators var envirocomp = new Array(numraces); for(j = 0; j < numraces; j++) { envirocomp[j] = 0; if(checkvalue("tepy"+j)) { // Has enviro compensators var numdocks = parseInt(selectvalue("nsd"+j)); envirocomp[j] = numdocks; } if(laborlaw) { el("ecv"+j).innerHTML = 0; el("eci"+j).innerHTML = envirocomp[j]; } else { el("ecv"+j).innerHTML = envirocomp[j]; el("eci"+j).innerHTML = 0; } } if(laborlaw) { el("planetvote").innerHTML = "Resources"; el("planetcredit").innerHTML = "Influence"; } else { el("planetcredit").innerHTML = "Resources"; el("planetvote").innerHTML = "Influence"; } // Sum up trade agreement information var racetrades = new Array(numraces); for(i = 0; i < numraces; i++) { racetrades[i] = 0; } var tradecount = 0; var traderest = lawpassed("tr"); var freetrade = lawpassed("ft"); for(i = 0; i < numraces; i++) { for(j = 0; j < i; j++) { var result = checkvalue("tr"+i+j); if(result) { tradecount++; if(traderest) { // Trade restrictions: Only get the benefit // of the lesser numbe of planets. var boost = planetcount[j]; if(boost > planetcount[i]) { boost = planetcount[i]; } racetrades[i] = racetrades[i] + boost; racetrades[j] = racetrades[j] + boost; } else { // Normal trade: get benefit of partner's // planet count. racetrades[i] = racetrades[i] + planetcount[j]; racetrades[j] = racetrades[j] + planetcount[i]; } if(freetrade) { racetrades[i] = racetrades[i] + 5; racetrades[j] = racetrades[j] + 5; } if(checkvalue("tmpy"+i)) { racetrades[i] = racetrades[i] + 3; } if(checkvalue("tmpy"+j)) { racetrades[j] = racetrades[j] + 3; } } } } // Write trade agreement information for(j = 0; j < numraces; j++) { var elm = el("plta"+j); elm.innerHTML = racetrades[j]; } // Calculate tech costs // 1. Race basis, technology tariff law, subsidized study law var techcosts = new Array(numtechs); for(i = 1; i <= numtechs; i++) { techcosts[i] = new Array(numraces); } var rr = 0; if(lawpassed("rr")) { rr = 5; }; var subs = radiovalue("lawss"); var tariff = radiovalue("lawtt"); for(i = 1; i <= numtechs; i++) { var tariffcost = 0; if(i == tariff) { tariffcost = 10; } for(j = 0; j < numraces; j++) { var cost = racetechcost(races[j],i) + rr + tariffcost; if(subs != 0) { if(subs == i) { cost = cost - 5; } else { cost = cost + 3; } } techcosts[i][j] = cost; } } // Calculate tech costs, part ii // bonuses for planet ownership for(i = 0; i < numplanets; i++) { var planowner = radiovalue("pn"+i); if(planowner != "n") { var thetech = planets[i].tech; if(thetech != 0) { var discount = planets[i].res; if(checkvalue("tspy"+planowner)) { // Sarween tools. discount++; } techcosts[thetech][planowner] = techcosts[thetech][planowner] - discount; } } } // Write technology costs for(i = 1; i <= numtechs; i++) { for(j = 0; j < numraces; j++) { var elm = el("tc"+i+j); if(techcosts[i][j] < 0) { techcosts[i][j] = 0; } elm.innerHTML = techcosts[i][j]; } } // Calculate racial influence mods var raceinf = new Array(numraces); for(j = 0; j < numraces; j++) { raceinf[j] = 0; var elm = el("rav"+j); if(races[j].tradeisinf) { // +1 influence per trade agreement in play (Xxcha Kingdom) raceinf[j] = raceinf[j] + tradecount; } if(races[j].humaninf) { // +1 influence per planet owned, excepting homeworlds var i; var count = 0; for(i = 0; i < numplanets; i++) { var value = radiovalue("pn"+i); if(value == j && planets[i].homeworld != j) { count++; } } raceinf[j] = raceinf[j] + count; } } // Write racial influence mods for(j = 0; j < numraces; j++) { var v; var c; if(laborlaw) { c = raceinf[j]; v = 0; } else { v = raceinf[j]; c = 0; } el("rav"+j).innerHTML = v; el("rai"+j).innerHTML = c; } // Calculate and write total income and votes var gtotalvotes = new Array(numraces); var gtotalmoney = new Array(numraces); var gtotalinf = new Array(numraces); var gtotalres = new Array(numraces); for(j = 0; j < numraces; j++) { var planetmoney; var planetvotes; var ecmoney; var ecvotes; var racemoney; var racevotes; if(laborlaw) { // Labor law politics in effect planetvotes = planetreses[j]; planetmoney = influence[j]; racemoney = raceinf[j]; racevotes = 0; ecmoney = envirocomp[j]; ecvotes = 0; } else { planetmoney = planetreses[j]; planetvotes = influence[j]; racemoney = 0; racevotes = raceinf[j]; ecmoney = 0; ecvotes = envirocomp[j]; } var trademoney = racetrades[j]; var totalmoney = planetmoney + racemoney + ecmoney + trademoney; var totalvotes = planetvotes + racevotes + ecvotes; gtotalvotes[j] = totalvotes; gtotalmoney[j] = totalmoney; gtotalinf[j] = influence[j] + raceinf[j] + envirocomp[j]; gtotalres[j] = planetreses[j]; var elm; elm = el("inc"+j); elm.innerHTML = totalmoney;; elm = el("vot"+j); elm.innerHTML = totalvotes; } var racesort = new Array(numraces); for(j = 0; j < numraces; j++) { racesort[j] = new Array(4); racesort[j][0] = j; racesort[j][1] = gtotalvotes[j]; racesort[j][2] = gtotalinf[j]; racesort[j][3] = gtotalres[j]; } racesort.sort(sortascend); updateinit("vo",racesort,1); racesort.sort(sortdescend); updateinit("io",racesort,0); var recalcend = new Date().getTime(); var recalctime = (recalcend - recalcstart)/1000.0; //debugmsg("Recalc took "+recalctime+" seconds."); } function autorecalcnow() { if(checkvalue("autorecalc")) { recalc(); } } var i; var j; //-->
Version 1.0
Software copyright 2005 Alan De Smet
Based on Twilight Imperium Second Edition by Fantasy Flight Games
Updates and more
information is here