mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-09-04 14:12:28 +00:00
Bug fix: moving back and forward during character creation misaligned values and drained XP Bug fix: negative values in the advantages/disadvantages field were disallowed even though they were needed for disadvantages
6391 lines
256 KiB
HTML
6391 lines
256 KiB
HTML
<script type="text/worker">
|
||
on ("change:attribute_roll_modifier change:skill_roll_modifier", sanitizeAllowNegative);
|
||
|
||
async function sanitizeAllowNegative(info)
|
||
{
|
||
if (info.sourceType="player" && await sanitizeNumberInput(info, true))
|
||
{
|
||
return;
|
||
}
|
||
}
|
||
|
||
on ("change:repeating_armor:armor_cmr change:repeating_armor:armor_slow change:repeating_armor:armor_da change:repeating_ammo:ammo_quantity change:repeating_weapons:weapon_spread change:repeating_weapons:weapon_burst change:repeating_weapons:weapon_volley change:repeating_weapons:weapon_clip_ammo change:repeating_weapons:weapon_clip_capacity change:repeating_resources:resource_level change:shield change:ap change:gf change:max_gf", sanitize);
|
||
|
||
async function sanitize(info)
|
||
{
|
||
if (info.sourceType="player" && await sanitizeNumberInput(info, false))
|
||
{
|
||
return;
|
||
}
|
||
}
|
||
|
||
async function sanitizeNumberInput(info, allowNegative)
|
||
{
|
||
try
|
||
{
|
||
var num = Number(info.newValue);
|
||
|
||
if (!Object.hasOwn(info, "previousValue"))
|
||
{
|
||
info.previousValue = "0";
|
||
}
|
||
|
||
if (num == NaN || (num != NaN && (!allowNegative && (num < 0) || !Number.isInteger(num))))
|
||
{
|
||
await setAttrsAsync({[info.sourceAttribute]: info.previousValue});
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
catch (error)
|
||
{
|
||
console.log("Error:" + error);
|
||
await setAttrsAsync({[info.sourceAttribute]: info.previousValue});
|
||
return true;
|
||
}
|
||
}
|
||
|
||
on ("change:repeating_advantages:advantage_cost change:repeating_resources:resource_cost change:repeating_backgrounds:background_cost", changeRepeatingXP);
|
||
|
||
async function changeRepeatingXP(info)
|
||
{
|
||
if (await sanitizeNumberInput(info, true))
|
||
{
|
||
return;
|
||
}
|
||
|
||
var ids;
|
||
var total = 0;
|
||
|
||
var property = info.sourceAttribute.split("_")[1];
|
||
|
||
console.log(property);
|
||
|
||
var attribA = "repeating_advantages_";
|
||
var attribB = "_advantage_cost";
|
||
|
||
switch(property)
|
||
{
|
||
case "resources":
|
||
attribA = "repeating_resources_";
|
||
attribB = "_resource_cost";
|
||
break;
|
||
|
||
case "backgrounds":
|
||
attribA = "repeating_backgrounds_";
|
||
attribB = "_background_cost";
|
||
break;
|
||
}
|
||
|
||
ids = await getSectionIDsAsync(attribA.substring(0, attribA.length - 1));
|
||
|
||
console.log(attribA + "??" + attribB + ": " + ids.length);
|
||
|
||
for (var i=0; i<ids.length; i++)
|
||
{
|
||
var values = await getAttrsAsync([attribA + ids[i] + attribB]);
|
||
|
||
console.log(values);
|
||
|
||
var cost = Number(values[attribA + ids[i] + attribB]);
|
||
|
||
console.log(cost);
|
||
|
||
if (cost != NaN)
|
||
{
|
||
total += cost;
|
||
console.log(total);
|
||
}
|
||
}
|
||
|
||
switch (property)
|
||
{
|
||
case "advantages":
|
||
await setAttrsAsync({"advantage_xp": "" + total});
|
||
break;
|
||
case "resources":
|
||
await setAttrsAsync({"resource_xp": "" + total});
|
||
break;
|
||
case "backgrounds":
|
||
await setAttrsAsync({"background_xp": "" + total});
|
||
break;
|
||
}
|
||
}
|
||
|
||
on ("change:equipped_armor_hp change:equipped_armor_bonus_hp", changeEquippedHP);
|
||
|
||
async function changeEquippedHP(info)
|
||
{
|
||
if (info.sourceType == "player")
|
||
{
|
||
console.log("changing armor hp");
|
||
if (await sanitizeNumberInput(info, false))
|
||
{
|
||
return;
|
||
}
|
||
var values = await getAttrsAsync(["equipped_armor_id"]);
|
||
//console.log(values);
|
||
if (values.equipped_armor_id != "0")
|
||
{
|
||
if (info.sourceAttribute.includes("bonus"))
|
||
{
|
||
await setAttrsAsync({["repeating_armor_" + values.equipped_armor_id + "_armor_bonus_hp"]: info.newValue});
|
||
}
|
||
else
|
||
{
|
||
await setAttrsAsync({["repeating_armor_" + values.equipped_armor_id + "_armor_hp"]: info.newValue});
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
on ("change:repeating_armor:armor_max_hp change:repeating_armor:armor_max_bonus_hp", changeArmorHP);
|
||
|
||
async function changeArmorHP(info)
|
||
{
|
||
console.log(JSON.stringify(info));
|
||
if (info.sourceType == "player")
|
||
{
|
||
if (await sanitizeNumberInput(info, false))
|
||
{
|
||
return;
|
||
}
|
||
var id = info.triggerName.split("_")[2];
|
||
console.log(id);
|
||
if (info.previousValue == "" |
|
||
!info.hasOwnProperty("previousValue"))
|
||
{
|
||
if (info.triggerName.includes("bonus"))
|
||
{
|
||
await setAttrsAsync({["repeating_armor_" + id + "_armor_bonus_hp"]: info.newValue});
|
||
}
|
||
else
|
||
{
|
||
await setAttrsAsync({["repeating_armor_" + id + "_armor_hp"]: info.newValue});
|
||
}
|
||
|
||
var value = await getAttrsAsync(["repeating_armor_" + id + "_armor_equipped"]);
|
||
|
||
if (value["repeating_armor_" + id + "_armor_equipped"] == "on")
|
||
{
|
||
if (info.triggerName.includes("bonus"))
|
||
{
|
||
await setAttrsAsync({["equipped_armor_bonus_hp"]: info.newValue});
|
||
}
|
||
else
|
||
{
|
||
await setAttrsAsync({["equipped_armor_hp"]: info.newValue});
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
on ("change:repeating_armor:armor_equipped", equipArmor);
|
||
|
||
async function equipArmor(info)
|
||
{
|
||
if (info.sourceType == "player")
|
||
{
|
||
var ids = await getSectionIDsAsync("armor");
|
||
var id = info.triggerName.split("_")[2];
|
||
|
||
for (var i=0; i<ids.length; i++)
|
||
{
|
||
var values = await getAttrsAsync(["repeating_armor_" + ids[i] + "_armor_equipped",
|
||
"repeating_armor_" + ids[i] + "_armor_da",
|
||
"repeating_armor_" + ids[i] + "_armor_cmr",
|
||
"repeating_armor_" + ids[i] + "_armor_hp",
|
||
"repeating_armor_" + ids[i] + "_armor_slow",
|
||
"repeating_armor_" + ids[i] + "_armor_bonus_hp"]);
|
||
|
||
console.log(values);
|
||
|
||
if (values["repeating_armor_" + ids[i] + "_armor_equipped"] == "on" &&
|
||
ids[i] != id)
|
||
{
|
||
await setAttrsAsync({["repeating_armor_" + ids[i] + "_armor_equipped"]: "0"});
|
||
}
|
||
else if (values["repeating_armor_" + id + "_armor_equipped"] == "on")
|
||
{
|
||
await setAttrsAsync({["equipped_armor_da"]: values["repeating_armor_" + ids[i] + "_armor_da"],
|
||
["equipped_armor_cmr"]: values["repeating_armor_" + ids[i] + "_armor_cmr"],
|
||
["equipped_armor_slow"]: values["repeating_armor_" + ids[i] + "_armor_slow"],
|
||
["equipped_armor_hp"]: values["repeating_armor_" + ids[i] + "_armor_hp"],
|
||
["equipped_armor_bonus_hp"]: values["repeating_armor_" + ids[i] + "_armor_bonus_hp"],
|
||
["equipped_armor_id"]: id});
|
||
}
|
||
else if (ids[i] == id)
|
||
{
|
||
await setAttrsAsync({["equipped_armor_da"]: "0",
|
||
["equipped_armor_cmr"]: "0",
|
||
["equipped_armor_slow"]: "0",
|
||
["equipped_armor_hp"]: "0",
|
||
["equipped_armor_bonus_hp"]: "0",
|
||
["equipped_armor_id"]: "0"});
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
on ("change:repeating_weapons:weapon_name change:repeating_melees:melee_name", updateEquippedWeaponName);
|
||
|
||
async function updateEquippedWeaponName(info)
|
||
{
|
||
if (info.sourceType == "player")
|
||
{
|
||
var id = info.triggerName.split("_")[2];
|
||
var name;
|
||
melee = info.triggerName.split("_")[1] == "melees";
|
||
|
||
if (melee)
|
||
{
|
||
values = await getAttrsAsync(["repeating_melees_" + id + "_melee_name"]);
|
||
name = values["repeating_melees_" + id + "_melee_name"];
|
||
}
|
||
else
|
||
{
|
||
values = await getAttrsAsync(["repeating_weapons_" + id + "_weapon_name"]);
|
||
name = values["repeating_weapons_" + id + "_weapon_name"];
|
||
}
|
||
|
||
for (i=1; i<4; i++)
|
||
{
|
||
values2 = await getAttrsAsync(["equipped_weapon" + i + "_id"]);
|
||
if (values2["equipped_weapon" + i + "_id"].toLowerCase() == id.toLowerCase())
|
||
{
|
||
await setAttrsAsync({["equipped_weapon" + i]: name});
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
on ("change:repeating_weapons:weapon_equipped change:repeating_melees:melee_equipped", equipWeapon);
|
||
|
||
async function equipWeapon(info)
|
||
{
|
||
if (info.sourceType == "player")
|
||
{
|
||
var ids = await getSectionIDsAsync("weapons");
|
||
var melee_ids = await getSectionIDsAsync("melees");
|
||
var count = 0;
|
||
var id = info.triggerName.split("_")[2];
|
||
melee = info.triggerName.split("_")[1] == "melees";
|
||
|
||
for (var i=0; i<ids.length; i++)
|
||
{
|
||
var values = await getAttrsAsync(["repeating_weapons_" + ids[i] + "_weapon_equipped",
|
||
"repeating_weapons_" + ids[i] + "_weapon_name"]);
|
||
if (values["repeating_weapons_" + ids[i] + "_weapon_equipped"] == "on")
|
||
{
|
||
count++;
|
||
}
|
||
}
|
||
|
||
for (var i=0; i<melee_ids.length; i++)
|
||
{
|
||
var values = await getAttrsAsync(["repeating_melees_" + melee_ids[i] + "_melee_equipped",
|
||
"repeating_melees_" + melee_ids[i] + "_melee_name"]);
|
||
if (values["repeating_melees_" + melee_ids[i] + "_melee_equipped"] == "on")
|
||
{
|
||
count++;
|
||
}
|
||
}
|
||
|
||
console.log(count);
|
||
|
||
if (count < 4)
|
||
{
|
||
console.log(JSON.stringify(values))
|
||
count = 1;
|
||
for (var i=0; i<ids.length; i++)
|
||
{
|
||
var values = await getAttrsAsync(["repeating_weapons_" + ids[i] + "_weapon_equipped",
|
||
"repeating_weapons_" + ids[i] + "_weapon_name"]);
|
||
if (values["repeating_weapons_" + ids[i] + "_weapon_equipped"] == "on")
|
||
{
|
||
await setAttrsAsync({["equipped_weapon" + count + "_id"]: ids[i],
|
||
["equipped_weapon" + count + "_melee"]: "0",
|
||
["equipped_weapon" + count]: values["repeating_weapons_" + ids[i] + "_weapon_name"]});
|
||
count++;
|
||
}
|
||
}
|
||
|
||
for (var i=0; i<melee_ids.length; i++)
|
||
{
|
||
var values = await getAttrsAsync(["repeating_melees_" + melee_ids[i] + "_melee_equipped",
|
||
"repeating_melees_" + melee_ids[i] + "_melee_name"]);
|
||
if (values["repeating_melees_" + melee_ids[i] + "_melee_equipped"] == "on")
|
||
{
|
||
await setAttrsAsync({["equipped_weapon" + count + "_id"]: melee_ids[i],
|
||
["equipped_weapon" + count + "_melee"]: "1",
|
||
["equipped_weapon" + count]: values["repeating_melees_" + melee_ids[i] + "_melee_name"]});
|
||
count++;
|
||
}
|
||
}
|
||
|
||
for (var i=count; i<4; i++)
|
||
{
|
||
await setAttrsAsync({["equipped_weapon" + count + "_id"]: "0",
|
||
["equipped_weapon" + count + "_melee"]: "-1",
|
||
["equipped_weapon" + count]: ""});
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (!melee)
|
||
{
|
||
await setAttrsAsync({["repeating_weapons_" + id + "_weapon_equipped"]: "0"});
|
||
}
|
||
else
|
||
{
|
||
await setAttrsAsync({["repeating_melees_" + id + "_melee_equipped"]: "0"});
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
on ("change:wil change:pain_from_damage change:pain_modifier", setPain);
|
||
|
||
async function setPain(info)
|
||
{
|
||
if (await sanitizeNumberInput(info, true))
|
||
{
|
||
return;
|
||
}
|
||
var values = await getAttrsAsync(["wil", "pain_from_damage", "pain_modifier"]);
|
||
var wil = Number(values.wil);
|
||
var pfd = Number(values.pain_from_damage);
|
||
var pm = Number(values.pain_modifier);
|
||
|
||
await setAttrsAsync({"pain": Math.min(0, wil + pfd + pm)});
|
||
}
|
||
|
||
on ("clicked:repeating_backgrounds:delete clicked:repeating_weapons:delete clicked:repeating_armor:delete clicked:repeating_ammo:delete clicked:repeating_advantages:delete clicked:repeating_resources:delete clicked:repeating_melees:delete", deleteLine);
|
||
|
||
async function deleteLine(info)
|
||
{
|
||
if (info.sourceAttribute.includes("weapons"))
|
||
{
|
||
var id = info.sourceAttribute.split("_")[2];
|
||
var values = await getAttrsAsync(["repeating_weapons_" + id + "_weapon_equipped"]);
|
||
if (values["repeating_weapons_" + id + "_weapon_equipped"] == "on")
|
||
{
|
||
var values2 = await getAttrsAsync(["equipped_weapon1_id", "equipped_weapon2_id", "equipped_weapon3_id"]);
|
||
console.log(values2);
|
||
var toRemove = "";
|
||
if (values2.equipped_weapon1_id.toLowerCase() == id.toLowerCase())
|
||
{
|
||
toRemove = "equipped_weapon1";
|
||
}
|
||
else if (values2.equipped_weapon2_id.toLowerCase() == id.toLowerCase())
|
||
{
|
||
toRemove = "equipped_weapon2";
|
||
}
|
||
else if (values2.equipped_weapon3_id.toLowerCase() == id.toLowerCase())
|
||
{
|
||
toRemove = "equipped_weapon3";
|
||
}
|
||
|
||
if (toRemove != "")
|
||
{
|
||
await setAttrsAsync({[toRemove]: "", [toRemove + "_id"]: "0"});
|
||
}
|
||
}
|
||
}
|
||
|
||
if (info.sourceAttribute.includes("armor"))
|
||
{
|
||
var id = info.sourceAttribute.split("_")[2];
|
||
var values = await getAttrsAsync(["repeating_armor_" + id + "_armor_equipped"]);
|
||
if (values["repeating_armor_" + id + "_armor_equipped"] == "on")
|
||
{
|
||
await setAttrsAsync({["equipped_armor_id"]: 0,
|
||
["equipped_armor_da"]: 0,
|
||
["equipped_armor_slow"]: 0,
|
||
["equipped_armor_cmr"]: 0,
|
||
["equipped_armor_hp"]: 0,
|
||
["equipped_armor_bonus_hp"]: 0});
|
||
}
|
||
}
|
||
|
||
removeRepeatingRow("repeating_" + info.sourceAttribute.split('_')[1] + "_" + info.sourceAttribute.split('_')[2]);
|
||
}
|
||
|
||
on ("clicked:addLine", addLine);
|
||
|
||
async function addLine(info)
|
||
{
|
||
var id = generateRowID();
|
||
console.log("repeating_" + info.htmlAttributes.value + "_" + id + "_" + info.htmlAttributes.value + "_generator");
|
||
await setAttrsAsync({["repeating_" + info.htmlAttributes.value + "_" + id + "_" + info.htmlAttributes.value + "_generator"]: "1"});
|
||
console.log("ID: " + id + "\n");
|
||
return id;
|
||
}
|
||
|
||
on ("change:cc_bridge_tech_talent change:cc_mounted_weaponry_talent change:cc_pilot_spacecraft_talent change:cc_vehicle_engineering_talent change:cc_drive_ground_vehicle_talent change:cc_knowledge_corporate_talent change:cc_knowledge_planets_talent change:cc_knowledge_urban_talent change:cc_pilot_aircraft_talent change:cc_trade_talent change:cc_aim_talent change:cc_athletics_talent change:cc_endurance_talent change:cc_melee_talent change:cc_reaction_talent change:cc_throw_talent change:cc_notice_talent change:cc_hack_security_talent change:cc_search_talent change:cc_sleight_of_hand_talent change:cc_sneak_talent change:cc_astronomy_talent change:cc_computer_science_talent change:cc_medicine_talent change:cc_natural_sciences_talent change:cc_robotics_talent change:cc_weapons_engineering_talent change:cc_xenobiology_talent change:cc_convince_talent change:cc_deceive_talent change:cc_empathy_talent change:cc_intimidate_talent change:cc_lead_talent", changeTalent);
|
||
|
||
async function changeTalent(info)
|
||
{
|
||
if (info.sourceType != "player")
|
||
{
|
||
return;
|
||
}
|
||
|
||
console.log("1: " + JSON.stringify(info));
|
||
try
|
||
{
|
||
if (await sanitizeNumberInput(info, false))
|
||
{
|
||
return;
|
||
}
|
||
}
|
||
catch (error)
|
||
{
|
||
console.log(error);
|
||
}
|
||
|
||
var xpInfo = await getXPData();
|
||
console.log("2: " + JSON.stringify(info));
|
||
|
||
var skillName = info.sourceAttribute.substring(3);
|
||
skillName = skillName.substring(0, skillName.length - 7);
|
||
var values = await getAttrsAsync(["territory_select", "planet_select", "talent", skillName, skillName + "_difficulty", "planet_talent_spent"]);
|
||
var skill = Number(values[skillName]);
|
||
var difficulty = Number(values[skillName + "_difficulty"]) - xpInfo.skillDiffOff;
|
||
console.log(skillName);
|
||
var max = 1;
|
||
|
||
var debugString = "Talent change in category: " + skillToCategory(skillName) + "\n" + values.planet_talent_spent + "\n" + values.planet_select + "\n";
|
||
|
||
if (skillToCategory(skillName) == values.planet_select)
|
||
{
|
||
max++;
|
||
debugString += max + ": Planet\n";
|
||
}
|
||
|
||
if (values.territory_select == "omkinara")
|
||
{
|
||
max++;
|
||
debugString += max + ": Omkinara\n";
|
||
max = Math.min(max, difficulty - 4 + xpInfo.skillDiffOff);
|
||
}
|
||
else
|
||
{
|
||
max = Math.min(max, difficulty - 5 + xpInfo.skillDiffOff);
|
||
}
|
||
|
||
debugString += max + ": Skill level\n";
|
||
|
||
if (skillToCategory(skillName) != values.planet_select &&
|
||
values.planet_talent_spent == "0")
|
||
{
|
||
max = Math.min(max, Number(values.talent) - 1);
|
||
debugString += max + ": Planet\n";
|
||
}
|
||
|
||
console.log(debugString);
|
||
|
||
var talent = Number(values.talent);
|
||
var prev;
|
||
if (info.hasOwnProperty("previousValue"))
|
||
{
|
||
prev = Number(info.previousValue);
|
||
}
|
||
else
|
||
{
|
||
prev = 0;
|
||
}
|
||
var newV = Number(info.newValue);
|
||
|
||
//console.log("Talent: " + talent + ", prev: " + prev + ", newV: " + newV, ", info" + JSON.stringify(info) + ", to set: " + "cc_" + skillName + "_talent");
|
||
|
||
var delta = Math.max(prev * -1, Math.min(max - prev, Math.min(talent, newV - prev)));
|
||
|
||
//console.log("Delta: " + delta);
|
||
|
||
await setAttrsAsync({"talent": "" + (talent - delta),
|
||
[skillName + "_talent"]: "" + (prev + delta),
|
||
["cc_" + skillName + "_talent"]: "" + (prev + delta),
|
||
["cc_" + skillName + "_diff"]: "" + (difficulty - prev - delta)});
|
||
|
||
setPlanetTalentSpent(values.planet_select);
|
||
|
||
if (delta != 0)
|
||
{
|
||
var values2 = await getAttrsAsync([skillName + "_bonus", skillName + "_talent", "spent_xp", "total_xp"]);
|
||
var bonus = Number(values2[skillName + "_bonus"]);
|
||
var xpMultiplier = 0;
|
||
var spent = Number(values2["spent_xp"]);
|
||
var total = Number(values2["total_xp"]);
|
||
var available = total-spent;
|
||
var skillTalent = Number(values2[skillName + "_talent"]);
|
||
for (var i=0; i<bonus; i++)
|
||
{
|
||
xpMultiplier += skill - i;
|
||
}
|
||
|
||
var xpDelta = xpMultiplier * delta;
|
||
var skillDelta = 0;
|
||
while (-xpDelta > available)
|
||
{
|
||
xpDelta += (skill - skillDelta) * (skillTalent + delta);
|
||
skillDelta++;
|
||
}
|
||
|
||
await setAttrsAsync({"spent_xp": spent - xpDelta,
|
||
[skillName]: skill - skillDelta});
|
||
|
||
console.log("changeTalent");
|
||
await setXP();
|
||
await enableCCComplete();
|
||
}
|
||
}
|
||
|
||
async function setPlanetTalentSpent(category)
|
||
{
|
||
var values;
|
||
switch (category)
|
||
{
|
||
case "a":
|
||
values = await getAttrsAsync(["drive_ground_vehicle_talent", "knowledge_corporate_talent", "knowledge_planets_talent", "knowledge_urban_talent", "pilot_aircraft_talent", "trade_talent"]);
|
||
break;
|
||
|
||
case "b":
|
||
values = await getAttrsAsync(["convince_talent", "deceive_talent", "empathy_talent", "intimidate_talent", "lead_talent"]);
|
||
break;
|
||
|
||
case "c":
|
||
values = await getAttrsAsync(["notice_talent", "hack_security_talent", "search_talent", "sleight_of_hand_talent", "sneak_talent"]);
|
||
break;
|
||
|
||
case "d":
|
||
values = await getAttrsAsync(["aim_talent", "athletics_talent", "endurance_talent", "melee_talent", "reaction_talent"]);
|
||
break;
|
||
|
||
case "e":
|
||
values = await getAttrsAsync(["astronomy_talent", "computer_science_talent", "medicine_talent", "natural_sciences_talent", "robotics_talent", "weapons_engineering_talent", "xenobiology_talent"]);
|
||
break;
|
||
|
||
case "f":
|
||
values = await getAttrsAsync(["bridge_tech_talent", "vehicle_engineering_talent", "pilot_spacecraft_talent", "mounted_weaponry_talent"]);
|
||
break;
|
||
}
|
||
|
||
console.log(values);
|
||
var spent = false;
|
||
for (var key in values)
|
||
{
|
||
if (Number(values[key]) > 0)
|
||
{
|
||
spent = true;
|
||
}
|
||
}
|
||
console.log(spent);
|
||
|
||
if (spent)
|
||
{
|
||
await setAttrsAsync({"planet_talent_spent": "1"});
|
||
}
|
||
else
|
||
{
|
||
await setAttrsAsync({"planet_talent_spent": "0"});
|
||
}
|
||
}
|
||
|
||
function skillToCategory(skill)
|
||
{
|
||
switch (skill)
|
||
{
|
||
case "bridge_tech":
|
||
case "vehicle_engineering":
|
||
case "pilot_spacecraft":
|
||
case "mounted_weaponry":
|
||
return "f";
|
||
break;
|
||
|
||
case "drive_ground_vehicle":
|
||
case "knowledge_corporate":
|
||
case "knowledge_planets":
|
||
case "knowledge_urban":
|
||
case "pilot_aircraft":
|
||
case "trade":
|
||
return "a";
|
||
break;
|
||
|
||
case "aim":
|
||
case "athletics":
|
||
case "endurance":
|
||
case "melee":
|
||
case "reaction":
|
||
return "d";
|
||
break;
|
||
|
||
case "notice":
|
||
case "hack_security":
|
||
case "search":
|
||
case "sleight_of_hand":
|
||
case "sneak":
|
||
return "c";
|
||
break;
|
||
|
||
case "astronomy":
|
||
case "computer_science":
|
||
case "medicine":
|
||
case "natural_sciences":
|
||
case "robotics":
|
||
case "weapons_engineering":
|
||
case "xenobiology":
|
||
return "e";
|
||
break;
|
||
|
||
case "convince":
|
||
case "deceive":
|
||
case "empathy":
|
||
case "intimidate":
|
||
case "lead":
|
||
return "b";
|
||
break;
|
||
}
|
||
}
|
||
|
||
async function enableCCComplete()
|
||
{
|
||
var values = await getAttrsAsync(["talent", "spent_xp", "cc_points"]);
|
||
|
||
console.log(JSON.stringify(values));
|
||
|
||
var xpInfo = await getXPData();
|
||
|
||
if (Number(values.talent) == 0 &&
|
||
Number(values.cc_points) < 4 &&
|
||
Number(values.spent_xp) >= xpInfo.ccSkillXp)
|
||
{
|
||
await setAttrsAsync({"cc_complete_hider": 0});
|
||
}
|
||
else
|
||
{
|
||
await setAttrsAsync({"cc_complete_hider": 1});
|
||
}
|
||
}
|
||
|
||
on ("clicked:lead_cc_down clicked:intimidate_cc_down clicked:empathy_cc_down clicked:deceive_cc_down clicked:convince_cc_down clicked:xenobiology_cc_down clicked:weapons_engineering_cc_down clicked:robotics_cc_down clicked:natural_sciences_cc_down clicked:medicine_cc_down clicked:computer_science_cc_down clicked:astronomy_cc_down clicked:sneak_cc_down clicked:sleight_of_hand_cc_down clicked:search_cc_down clicked:hack_security_cc_down clicked:notice_cc_down clicked:throw_cc_down clicked:reaction_cc_down clicked:melee_cc_down clicked:endurance_cc_down clicked:athletics_cc_down clicked:aim_cc_down clicked:trade_cc_down clicked:pilot_aircraft_cc_down clicked:knowledge_urban_cc_down clicked:knowledge_planets_cc_down clicked:knowledge_corporate_cc_down clicked:drive_ground_vehicle_cc_down clicked:vehicle_engineering_cc_down clicked:pilot_spacecraft_cc_down clicked:mounted_weaponry_cc_down clicked:bridge_tech_cc_down", reduceSkillCC);
|
||
|
||
async function reduceSkillCC(info)
|
||
{
|
||
await reduceSkill(info.htmlAttributes.name.substring(4, info.htmlAttributes.name.length - 8));
|
||
await enableCCComplete();
|
||
}
|
||
|
||
on ("clicked:lead_cc_up clicked:intimidate_cc_up clicked:empathy_cc_up clicked:deceive_cc_up clicked:convince_cc_up clicked:xenobiology_cc_up clicked:weapons_engineering_cc_up clicked:robotics_cc_up clicked:natural_sciences_cc_up clicked:medicine_cc_up clicked:computer_science_cc_up clicked:astronomy_cc_up clicked:sneak_cc_up clicked:sleight_of_hand_cc_up clicked:search_cc_up clicked:hack_security_cc_up clicked:notice_cc_up clicked:throw_cc_up clicked:reaction_cc_up clicked:melee_cc_up clicked:endurance_cc_up clicked:athletics_cc_up clicked:aim_cc_up clicked:trade_cc_up clicked:pilot_aircraft_cc_up clicked:knowledge_urban_cc_up clicked:knowledge_planets_cc_up clicked:knowledge_corporate_cc_up clicked:drive_ground_vehicle_cc_up clicked:vehicle_engineering_cc_up clicked:pilot_spacecraft_cc_up clicked:mounted_weaponry_cc_up clicked:bridge_tech_cc_up", raiseSkillCC);
|
||
|
||
async function raiseSkillCC(info)
|
||
{
|
||
var fullName = info.htmlAttributes.name;
|
||
await setAttrsAsync({"skill_to_change": fullName.substring(4, fullName.length - 6)});
|
||
|
||
var info2 = {sourceType: "not player"};
|
||
await raiseSkill(info);
|
||
await enableCCComplete();
|
||
}
|
||
|
||
on ("clicked:cc_back", ccBack);
|
||
|
||
async function ccBack()
|
||
{
|
||
var xpInfo = await getXPData();
|
||
await setAttrsAsync({"cc2_prompt_hider": 1,
|
||
"cc1_prompt_hider": 0});
|
||
init();
|
||
}
|
||
|
||
var arduloM2 = {name: "Ardulo -M2-", description: "", spread:"2", burst: "0", volley: "0", clip_ammo:"7", clip_capacity:"7", ammo:"A"};
|
||
var yamainu = {name: "Hamaji Yamainu", description: "", spread:"2", burst: "0", volley: "0", clip_ammo:"13", clip_capacity:"13", ammo:"D"};
|
||
var electroPistol = {name: "Electro Pistol", description: "damage: 1d6 electrical", spread:"6", burst: "0", volley: "0", clip_ammo:"5", clip_capacity:"5", ammo:"-"};
|
||
var arduloT4 = {name: "Ardulo T4", description: "Tiny, easily concealable", spread:"2", burst: "0", volley: "0", clip_ammo:"5", clip_capacity:"5", ammo:"A"};
|
||
var arduloMinotaur = {name: "Ardulo Minotaur", description: "", spread:"3", burst: "0", volley: "0", clip_ammo:"8", clip_capacity:"8", ammo:"B"};
|
||
var laserPistol = {name: "Laser Pistol", description: "damage: 1d6 + 1 thermal", spread:"1", burst: "0", volley: "0", clip_ammo:"5", clip_capacity:"5", ammo:"-"};
|
||
|
||
var combatPolymerSuit = {name: "Combat Polymer Suit", da: "1", slow:"0", hp:"1", max_hp:"1", bonus_hp:"0", max_bonus_hp:"0", cmr:"15"};
|
||
var lightMilitiaArmor = {name: "Light Militia Armor", da: "2", slow:"1", hp:"1", max_hp:"1", bonus_hp:"0", max_bonus_hp:"0", cmr:"10"};
|
||
var heavyMilitiaArmor = {name: "Heavy Militia Armor", da: "3", slow:"2", hp:"2", max_hp:"2", bonus_hp:"0", max_bonus_hp:"0", cmr:"5"};
|
||
var lightCombatArmor = {name: "Light Combat Armor", da: "2", slow:"0", hp:"3", max_hp:"3", bonus_hp:"5", max_bonus_hp:"5", cmr:"10"};
|
||
|
||
var ammoA = {ammo_class: "A", variant:"Standard", damage:"1d6 + 1 ballistic", amount:"30"};
|
||
var ammoB = {ammo_class: "B", variant:"Standard", damage:"1d6 + 3 ballistic", amount:"30"};
|
||
var ammoD = {ammo_class: "D", variant:"Standard", damage:"1d8 + 1 ballistic", amount:"30"};
|
||
on ("clicked:cc2_complete", closeCC);
|
||
|
||
async function closeCC()
|
||
{
|
||
var values = await getAttrsAsync(["cc_points", "profession_select", "social_class_select", "territory_select"]);
|
||
var xpInfo = await getXPData();
|
||
console.log(xpInfo);
|
||
await setAttrsAsync({"cc2_prompt_hider": 1,
|
||
"total_xp": 100 + Number(values.cc_points) * xpInfo.attrCost + xpInfo.ccSkillXp});
|
||
console.log("closeCC");
|
||
await setXP();
|
||
|
||
console.log(values);
|
||
|
||
switch (values.territory_select)
|
||
{
|
||
case "saturnada":
|
||
var id = await addLine({"htmlAttributes": {"value": "advantages"}});
|
||
console.log("ID: " + id + "\n");
|
||
await setAttrsAsync({["repeating_advantages_" + id + "_advantage_name"]: "Creature companion",
|
||
["repeating_advantages_" + id + "_advantage_cost"]: "0"});
|
||
var values2 = await getAttrsAsync(["saturnada_creature"]);
|
||
switch (values2.saturnada_creature)
|
||
{
|
||
case "1":
|
||
await setAttrsAsync({"notes": "Charge beast: Strength 6, Agility 7, Stamina 5, Perception 4, Intelligence 2, Charisma 2, Willpower 2\nMelee 5, Endurance 4, Reaction 5, DA 1, movement: 2m/AP, 8 AP/turn, 25 HP."});
|
||
break;
|
||
|
||
case "2":
|
||
await setAttrsAsync({"notes": "Flixy: A flixy is a companion animal, its statistics varying widely between different individuals."});
|
||
break;
|
||
|
||
case "3":
|
||
await setAttrsAsync({"notes": "Terenchar swarm: The swarm’s range is 500m and can transmit information via flying back to the command module. Transmitted information includes layout of the area, number, size and thermal footprint of occupants. The swarm comes with a mechanical hive and a command module."});
|
||
break;
|
||
}
|
||
break;
|
||
|
||
case "gt":
|
||
var id = await addLine({"htmlAttributes": {"value": "advantages"}});
|
||
await setAttrsAsync({["repeating_advantages_" + id + "_advantage_name"]: "Robot companion",
|
||
["repeating_advantages_" + id + "_advantage_cost"]: "0"});
|
||
|
||
var values2 = await getAttrsAsync(["gt_robot"]);
|
||
switch (values2.gt_robot)
|
||
{
|
||
case "1":
|
||
await setAttrsAsync({"notes": "Mk 201 Stinger Combat Companion\nHardware: Frame II, Hydraulic Leg *4 configured in a spider pattern, Camera * 2, Armor plating 2, Brain I, Pistol slot II, Battery (8), Head, Shield Generator I (Ballistic)\nSoftware: Pistol aimer I, Targeter I, Remote control managers\nStats: HP: 10 + 20 ballistic shield, DA: 2, +5 Perception, +2 Aim, AP/turn: 6, Speed: 1m/AP"});
|
||
break;
|
||
|
||
case "2":
|
||
await setAttrsAsync({"notes": "Mk 17 Scout Companion\nHardware: Frame I, Antigrav drive I, Camera * 2, Infrared Camera, Microphone, Chemical Analyzer, Brain II, Head, Broadband Radio, Battery III\nSoftware: Watcher, Remote control manager, Audio/video recorder, Broadband communicator"});
|
||
break;
|
||
}
|
||
break;
|
||
|
||
case "tatsuba":
|
||
var id = await addLine({"htmlAttributes": {"value": "advantages"}});
|
||
await setAttrsAsync({["repeating_advantages_" + id + "_advantage_name"]: "Combat training",
|
||
["repeating_advantages_" + id + "_advantage_cost"]: "0"});
|
||
var id2 = await addLine({"htmlAttributes": {"value": "advantages"}});
|
||
await setAttrsAsync({["repeating_advantages_" + id2 + "_advantage_name"]: "Action Hero",
|
||
["repeating_advantages_" + id2 + "_advantage_cost"]: "0"});
|
||
break;
|
||
|
||
case "omkinara":
|
||
var id = await addLine({"htmlAttributes": {"value": "advantages"}});
|
||
await setAttrsAsync({["repeating_advantages_" + id + "_advantage_name"]: "Talent chip",
|
||
["repeating_advantages_" + id + "_advantage_cost"]: "0"});
|
||
break;
|
||
|
||
case "zaidong":
|
||
var id = await addLine({"htmlAttributes": "advantages"});
|
||
await setAttrsAsync({["repeating_advantages_" + id + "_advantage_name"]: "Augmentation",
|
||
["repeating_advantages_" + id + "_advantage_cost"]: "0"});
|
||
|
||
var values2 = await getAttrsAsync(["zaidong_augmentation"]);
|
||
await setAttrsAsync({"notes": values2.zaidong_augmentation});
|
||
|
||
break;
|
||
|
||
case "gavadai":
|
||
var id = await addLine({"htmlAttributes": {"value": "advantages"}});
|
||
await setAttrsAsync({["repeating_advantages_" + id + "_advantage_name"]: "Enhanced attributes",
|
||
["repeating_advantages_" + id + "_advantage_cost"]: "0"});
|
||
break;
|
||
|
||
case "syndeel":
|
||
var id = await addLine({"htmlAttributes": {"value": "advantages"}});
|
||
await setAttrsAsync({["repeating_advantages_" + id + "_advantage_name"]: "Predisposition to cyberware",
|
||
["repeating_advantages_" + id + "_advantage_cost"]: "0"});
|
||
var id2 = await addLine({"htmlAttributes": "advantages"});
|
||
await setAttrsAsync({["repeating_advantages_" + id2 + "_advantage_name"]: "Neurocom",
|
||
["repeating_advantages_" + id2 + "_advantage_cost"]: "0"});
|
||
break;
|
||
|
||
case "alliance":
|
||
var id = await addLine({"htmlAttributes": {"value": "advantages"}});
|
||
await setAttrsAsync({["repeating_advantages_" + id + "_advantage_name"]: "Focus",
|
||
["repeating_advantages_" + id + "_advantage_cost"]: "0"});
|
||
break;
|
||
|
||
case "imperial":
|
||
var id = await addLine({"htmlAttributes": {"value": "advantages"}});
|
||
await setAttrsAsync({["repeating_advantages_" + id + "_advantage_name"]: "Battle core",
|
||
["repeating_advantages_" + id + "_advantage_cost"]: "0"});
|
||
break;
|
||
|
||
case "pirate":
|
||
var id = await addLine({"htmlAttributes": {"value": "advantages"}});
|
||
await setAttrsAsync({["repeating_advantages_" + id + "_advantage_name"]: "Space bubble",
|
||
["repeating_advantages_" + id + "_advantage_cost"]: "0"});
|
||
break;
|
||
}
|
||
|
||
switch (values.social_class_select)
|
||
{
|
||
case "wretch":
|
||
var id = generateRowID();
|
||
await setAttrsAsync({["repeating_resources_" + id + "_generator"]: "1",
|
||
["repeating_resources_" + id + "_resource_name"]: "False Identity",
|
||
["repeating_resources_" + id + "_resource_level"]: "2",
|
||
["repeating_resources_" + id + "_resource_cost"]: "0"});
|
||
|
||
id = generateRowID();
|
||
await setAttrsAsync({["repeating_resources_" + id + "_generator"]: "1",
|
||
["repeating_resources_" + id + "_resource_name"]: "Fixer",
|
||
["repeating_resources_" + id + "_resource_level"]: "1",
|
||
["repeating_resources_" + id + "_resource_cost"]: "0"});
|
||
break;
|
||
|
||
case "middle_class":
|
||
var id = generateRowID();
|
||
await setAttrsAsync({["repeating_resources_" + id + "_generator"]: "1",
|
||
["repeating_resources_" + id + "_resource_name"]: "Fixer",
|
||
["repeating_resources_" + id + "_resource_level"]: "2",
|
||
["repeating_resources_" + id + "_resource_cost"]: "0"});
|
||
|
||
id = generateRowID();
|
||
await setAttrsAsync({["repeating_resources_" + id + "_generator"]: "1",
|
||
["repeating_resources_" + id + "_resource_name"]: "Thaler Account",
|
||
["repeating_resources_" + id + "_resource_level"]: "1",
|
||
["repeating_resources_" + id + "_resource_cost"]: "0",
|
||
"money": "5000"});
|
||
break;
|
||
|
||
case "low_corporate":
|
||
var id = generateRowID();
|
||
await setAttrsAsync({["repeating_resources_" + id + "_generator"]: "1",
|
||
["repeating_resources_" + id + "_resource_name"]: "Thaler Account",
|
||
["repeating_resources_" + id + "_resource_level"]: "2",
|
||
["repeating_resources_" + id + "_resource_cost"]: "0",
|
||
"money": "15000"});
|
||
|
||
id = generateRowID();
|
||
await setAttrsAsync({["repeating_resources_" + id + "_generator"]: "1",
|
||
["repeating_resources_" + id + "_resource_name"]: "Jimmy Knowemall",
|
||
["repeating_resources_" + id + "_resource_level"]: "1",
|
||
["repeating_resources_" + id + "_resource_cost"]: "0"});
|
||
break;
|
||
}
|
||
|
||
var ccWeapon;
|
||
var ccArmor;
|
||
var ccAmmo;
|
||
|
||
switch (values.profession_select)
|
||
{
|
||
case "soldier":
|
||
await setAttrsAsync({"carried_gear": "1 S.E.A.L., 1 combat com, standard dagger, consumer grade tablet",
|
||
"other_gear": "uniform"});
|
||
ccWeapon = yamainu;
|
||
ccArmor = lightCombatArmor;
|
||
ccAmmo = ammoD;
|
||
break;
|
||
|
||
case "law_enforcer":
|
||
await setAttrsAsync({"carried_gear": "1 S.E.A.L., 1 combat com, standard clothes, voltaic baton, 1 Turbo, consumer grade tablet",
|
||
"other_gear": "uniform"});
|
||
ccWeapon = electroPistol;
|
||
ccArmor = heavyMilitiaArmor;
|
||
ccAmmo = null;
|
||
break;
|
||
|
||
case "scientist":
|
||
await setAttrsAsync({"carried_gear": "1 S.E.A.L., 1 combat com, standard clothes, handheld scancorder, <SELECT 2 CHEMS>, business grade tablet",
|
||
"other_gear": "labwear"});
|
||
ccWeapon = arduloM2;
|
||
ccArmor = combatPolymerSuit;
|
||
ccAmmo = ammoA;
|
||
break;
|
||
|
||
case "doctor":
|
||
await setAttrsAsync({"carried_gear": "3 S.E.A.L.-s, 1 combat com, standard clothes, first aid kit, consumer grade tablet",
|
||
"other_gear": "labwear"});
|
||
ccWeapon = arduloM2;
|
||
ccArmor = combatPolymerSuit;
|
||
ccAmmo = ammoA;
|
||
break;
|
||
|
||
case "spy":
|
||
await setAttrsAsync({"carried_gear": "1 S.E.A.L., 1 combat com, standard clothes, bug, tracking device, business grade tablet",
|
||
"other_gear": "set of elegant clothes"});
|
||
ccWeapon = yamainu;
|
||
ccArmor = combatPolymerSuit;
|
||
ccAmmo = ammoD;
|
||
break;
|
||
|
||
case "smuggler":
|
||
await setAttrsAsync({"carried_gear": "1 S.E.A.L., 1 combat com, standard clothes, 1 Focus, consumet grade tablet",
|
||
"other_gear": "civilian space suit, protective workwear"});
|
||
ccWeapon = arduloM2;
|
||
ccArmor = lightMilitiaArmor;
|
||
ccAmmo = ammoA;
|
||
break;
|
||
|
||
case "thief":
|
||
await setAttrsAsync({"carried_gear": "1 S.E.A.L., 1 combat com, standard clothes, 10m carbon fiber cable with serrated tips, ZX7, consumer grade tablet",
|
||
"other_gear": "set of sneakwear"});
|
||
var id = generateRowID();
|
||
await setAttrsAsync({["repeating_weapons_" + id + "_generator"]: "1",
|
||
["repeating_weapons_" + id + "_weapon_name"]: "Scorpion",
|
||
["repeating_weapons_" + id + "_weapon_spread"]: "3",
|
||
["repeating_weapons_" + id + "_weapon_burst"]: "0",
|
||
["repeating_weapons_" + id + "_weapon_volley"]: "0",
|
||
["repeating_weapons_" + id + "_weapon_clip_ammo"]: "1",
|
||
["repeating_weapons_" + id + "_weapon_clip_capacity"]: "1",
|
||
["repeating_weapons_" + id + "_weapon_ammo"]: "CFC"});
|
||
ccWeapon = arduloM2;
|
||
ccArmor = combatPolymerSuit;
|
||
ccAmmo = ammoA;
|
||
break;
|
||
|
||
case "swindler":
|
||
await setAttrsAsync({"carried_gear": "1 S.E.A.L., 1 combat com, standard clothes, bug, business grade tablet, 1 Focus",
|
||
"other_gear": "set of elegant clothing"});
|
||
ccWeapon = arduloT4;
|
||
ccArmor = combatPolymerSuit;
|
||
ccAmmo = ammoA;
|
||
break;
|
||
|
||
case "pilot":
|
||
await setAttrsAsync({"carried_gear": "1 S.E.A.L., 1 combat com, standard clothes, vehicle toolkit, consumer grade tablet",
|
||
"other_gear": "civilian space suit, set of protective workwear"});
|
||
ccWeapon = arduloM2;
|
||
ccArmor = lightMilitiaArmor;
|
||
ccAmmo = ammoA;
|
||
break;
|
||
|
||
case "engineer":
|
||
await setAttrsAsync({"carried_gear": "1 S.E.A.L., 1 combat com, standard clothes, 1 Focus, <SELECT 1 SHIELD OF AVAILABILITY I>, <SELECT 1 TOOLKIT>, business grade tablet",
|
||
"other_gear": "set of protective workwear"});
|
||
ccWeapon = arduloMinotaur;
|
||
ccArmor = combatPolymerSuit;
|
||
ccAmmo = ammoB;
|
||
break;
|
||
|
||
case "trader":
|
||
await setAttrsAsync({"carried_gear": "1 S.E.A.L., 1 combat com, standard clothes, 1 Focus, business grade tablet, com tap",
|
||
"other_gear": "set of elegant clothing"});
|
||
ccWeapon = arduloM2;
|
||
ccArmor = combatPolymerSuit;
|
||
ccAmmo = ammoA;
|
||
break;
|
||
|
||
case "astronaut":
|
||
await setAttrsAsync({"carried_gear": "1 S.E.A.L., 1 combat com, standard clothes, 1 Focus, vehicle toolkit",
|
||
"other_gear": "civilian space suit, set of protective workwear"});
|
||
ccWeapon = laserPistol;
|
||
ccArmor = combatPolymerSuit;
|
||
ccAmmo = null;
|
||
break;
|
||
|
||
case "socialite":
|
||
await setAttrsAsync({"carried_gear": "1 S.E.A.L., 1 combat com, standard clothes, 2 Clear, 1 Focus, business grade tablet, 1 piece of real jewelry",
|
||
"other_gear": "set of elegant clothing"});
|
||
ccWeapon = arduloT4;
|
||
ccArmor = combatPolymerSuit;
|
||
ccAmmo = ammoA;
|
||
break;
|
||
|
||
case "hacker":
|
||
await setAttrsAsync({"carried_gear": "1 S.E.A.L., 1 combat com, standard clothes, 1 Focus, jailbroken tablet (software level 6, memory 8, loaded with hacking I, antivirus III and encryption I)",
|
||
"other_gear": "set of elegant clothing"});
|
||
ccWeapon = arduloM2;
|
||
ccArmor = combatPolymerSuit;
|
||
ccAmmo = ammoA;
|
||
break;
|
||
}
|
||
|
||
var id = generateRowID();
|
||
await setAttrsAsync({["repeating_weapons_" + id + "_generator"]: "1",
|
||
["repeating_weapons_" + id + "_weapon_name"]: ccWeapon.name,
|
||
["repeating_weapons_" + id + "_weapon_spread"]: ccWeapon.spread,
|
||
["repeating_weapons_" + id + "_weapon_burst"]: ccWeapon.burst,
|
||
["repeating_weapons_" + id + "_weapon_volley"]: ccWeapon.volley,
|
||
["repeating_weapons_" + id + "_weapon_clip_ammo"]: ccWeapon.clip_ammo,
|
||
["repeating_weapons_" + id + "_weapon_clip_capacity"]: ccWeapon.clip_capacity,
|
||
["repeating_weapons_" + id + "_weapon_ammo"]: ccWeapon.ammo});
|
||
|
||
id = generateRowID();
|
||
await setAttrsAsync({["repeating_armor_" + id + "_generator"]: "1",
|
||
["repeating_armor_" + id + "_armor_name"]: ccArmor.name,
|
||
["repeating_armor_" + id + "_armor_da"]: ccArmor.da,
|
||
["repeating_armor_" + id + "_armor_cmr"]: ccArmor.cmr,
|
||
["repeating_armor_" + id + "_armor_slow"]: ccArmor.slow,
|
||
["repeating_armor_" + id + "_armor_hp"]: ccArmor.hp,
|
||
["repeating_armor_" + id + "_armor_bonus_hp"]: ccArmor.bonus_hp,
|
||
["repeating_armor_" + id + "_armor_max_hp"]: ccArmor.max_hp,
|
||
["repeating_armor_" + id + "_armor_max_bonus_hp"]: ccArmor.max_bonus_hp});
|
||
|
||
if (ccAmmo != null)
|
||
{
|
||
id = generateRowID();
|
||
await setAttrsAsync({["repeating_ammo_" + id + "_generator"]: "1",
|
||
["repeating_ammo_" + id + "_ammo_class"]: ccAmmo.ammo_class,
|
||
["repeating_ammo_" + id + "_ammo_variant"]: ccAmmo.variant,
|
||
["repeating_ammo_" + id + "_ammo_damage"]: ccAmmo.damage,
|
||
["repeating_ammo_" + id + "_ammo_quantity"]: "" + (Number(ccAmmo.amount) - Number(ccWeapon.clip_capacity))});
|
||
}
|
||
}
|
||
|
||
on ("clicked:cc1_complete", openCC2);
|
||
|
||
async function openCC2()
|
||
{
|
||
var xpInfo = await getXPData();
|
||
var skills = {"bridge_tech": "5", "mounted_weaponry": "5", "pilot_spacecraft": "5", "vehicle_engineering": "5", "drive_ground_vehicle": "3", "knowledge_corporate": "4", "knowledge_planets": "5", "pilot_aircraft": "5", "knowledge_urban": "4", "trade": "4", "aim": "5", "athletics": "3", "endurance": "4", "reaction": "4", "melee": "6", "throw": "3", "notice": "5", "hack_security": "4", "search": "3", "sleight_of_hand": "6", "sneak": "5", "astronomy": "4", "computer_science": "6", "medicine": "5", "natural_sciences": "6", "robotics": "6", "weapons_engineering": "6", "xenobiology": "8", "convince": "5", "deceive": "4", "empathy": "5", "intimidate": "3", "lead": "5"};
|
||
|
||
var values = await getAttrsAsync(["planet_select"]);
|
||
var toChange = {"cc1_prompt_hider": 1,
|
||
"cc2_prompt_hider": 0,
|
||
"total_xp": "" + (xpInfo.ccSkillXp + 10),
|
||
"spent_xp": "0"};
|
||
|
||
toChange.civilizational = " ";
|
||
toChange.social = " ";
|
||
toChange.infiltration = " ";
|
||
toChange.combat = " ";
|
||
toChange.science = " ";
|
||
toChange.astronomics = " ";
|
||
|
||
for (var skill in skills)
|
||
{
|
||
toChange["cc_" + skill + "_diff"] = skills[skill];
|
||
toChange["cc_" + skill + "_talent"] = 0;
|
||
toChange[skill + "_bonus"] = "0";
|
||
}
|
||
|
||
switch (values.planet_select)
|
||
{
|
||
case "a":
|
||
toChange.civilizational = "(favored)";
|
||
break;
|
||
|
||
case "b":
|
||
toChange.social = "(favored)";
|
||
break;
|
||
|
||
case "c":
|
||
toChange.infiltration = "(favored)";
|
||
break;
|
||
|
||
case "d":
|
||
toChange.combat = "(favored)";
|
||
break;
|
||
|
||
case "e":
|
||
toChange.science = "(favored)";
|
||
break;
|
||
|
||
case "f":
|
||
toChange.astronomics = "(favored)";
|
||
break;
|
||
}
|
||
|
||
await setAttrsAsync(toChange);
|
||
console.log(toChange);
|
||
console.log("openCC2");
|
||
await setXP();
|
||
await enableCCComplete();
|
||
}
|
||
|
||
on ("change:gavadai_attribute1 change:gavadai_attribute2", setGavadaiAttribute);
|
||
|
||
async function setGavadaiAttribute(info)
|
||
{
|
||
await setAttrsAsync({"str_territory": 1, "sta_territory": 1, "wil_territory": 1, "agi_territory": 0, "per_territory": 0, "cha_territory": 0, "int_territory": 0});
|
||
var values = await getAttrsAsync(["gavadai_attribute1", "gavadai_attribute2"]);
|
||
var values2 = await getAttrsAsync([values["gavadai_attribute1"]+"_territory", values["gavadai_attribute2"]+"_territory"]);
|
||
|
||
if (values["gavadai_attribute1"] == values["gavadai_attribute2"])
|
||
{
|
||
await setAttrsAsync({[values["gavadai_attribute1"]+"_territory"]: Number(values2[values["gavadai_attribute1"]+"_territory"]) + 2});
|
||
}
|
||
else
|
||
{
|
||
await setAttrsAsync({[values["gavadai_attribute1"]+"_territory"]: Number(values2[values["gavadai_attribute1"]+"_territory"]) + 1,
|
||
[values["gavadai_attribute2"]+"_territory"]: Number(values2[values["gavadai_attribute2"]+"_territory"]) + 1});
|
||
}
|
||
|
||
await setAttributes();
|
||
setCharacterInfo();
|
||
}
|
||
|
||
on ("change:zaidong_augmentation change:saturnada_creature change:gt_robot", setCharacterInfo);
|
||
|
||
async function setCharacterInfo()
|
||
{
|
||
console.log("Setting character info.");
|
||
var values = await getAttrsAsync(["str", "sta", "agi", "per", "int", "cha", "wil", "territory_select", "planet_select", "social_class_select", "profession_select", "hobby1", "hobby1_name", "language1", "language1_name", "language2", "language2_name", "gavadai_attribute1", "gavadai_attribute2", "saturnada_creature", "gt_robot", "zaidong_augmentation"]);
|
||
var skills = await getAttrsAsync(["bridge_tech", "mounted_weaponry", "pilot_spacecraft", "vehicle_engineering", "drive_ground_vehicle", "knowledge_corporate", "knowledge_planets", "pilot_aircraft", "knowledge_urban", "trade", "aim", "athletics", "endurance", "reaction", "melee", "throw", "notice", "hack_security", "search", "sleight_of_hand", "sneak", "astronomy", "computer_science", "medicine", "natural_sciences", "robotics", "weapons_engineering", "xenobiology", "convince", "deceive", "empathy", "intimidate", "lead"]);
|
||
|
||
var s = "Character stats:\n";
|
||
s += "Attributes: Strength " + values["str"] + ", Stamina " + values["sta"] + ", Agility " + values["agi"] + ", Perception " + values["per"] + ", Intelligence " + values["int"] + ", Charisma " + values["cha"] + ", Willpower " + values["wil"] + "\n";
|
||
s += "Skills: ";
|
||
|
||
for (var key in skills)
|
||
{
|
||
if (skills[key] != "0")
|
||
{
|
||
s += await skillToName(key) + ": " + skills[key] + ", ";
|
||
}
|
||
}
|
||
|
||
s = s.substring(0, s.length - 2);
|
||
|
||
if (values["hobby1_name"] != "")
|
||
{
|
||
s += ", " + values["hobby1_name"] + ": " + values["hobby1"];
|
||
}
|
||
|
||
if (values["language1_name"] != "")
|
||
{
|
||
s += ", " + values["language1_name"] + ": " + values["language1"];
|
||
}
|
||
|
||
if (values["language2_name"] != "")
|
||
{
|
||
s += ", " + values["language2_name"] + ": " + values["language2"];
|
||
}
|
||
|
||
s += "\n\nCommonwealth advantage:\n";
|
||
|
||
switch (values["territory_select"])
|
||
{
|
||
case "gavadai":
|
||
if (values["gavadai_attribute1"] != values["gavadai_attribute2"])
|
||
{
|
||
s += "Enhanced attributes: " + attributeToName(values["gavadai_attribute1"]) + " +1 and " + attributeToName(values["gavadai_attribute2"]) + " +1\n";
|
||
}
|
||
else
|
||
{
|
||
s += "Enhanced attribute: " + attributeToName(values["gavadai_attribute1"]) + " +2\n";
|
||
}
|
||
break;
|
||
|
||
case "gt":
|
||
s += "Robot companion: " + values["gt_robot"] + "\n";
|
||
break;
|
||
|
||
case "saturnada":
|
||
s += "Companion creature: " + values["saturnada_creature"] + "\n";
|
||
break;
|
||
|
||
case "zaidong":
|
||
s += "Augmentation: " + values["zaidong_augmentation"] + "\n";
|
||
break;
|
||
|
||
case "omkinara":
|
||
s += "Profession implant: +2 talent points.\n"
|
||
break;
|
||
|
||
case "syndeel":
|
||
s += "Cybernetic affinity: neurocom and +3 Stamina for the purpose of implantaion.\n";
|
||
break;
|
||
|
||
case "tatsuba":
|
||
s += "Combat training: bonus to aim, melee and reaction and 50% chance to gain an action point at the start of each combat turn.\n";
|
||
break;
|
||
|
||
case "imperial":
|
||
s += "Battle core: You carry an imperial battle core, a powerful shapeshifting weapon.\n";
|
||
s += "Disadvantage: Imperials are hunted and mistrusted, you must keep a low profile.\n"
|
||
break;
|
||
|
||
case "alliance":
|
||
s += "Focus: You have 2 points of focus in each scene to enhance skill checks.\n";
|
||
s += "Moral backbone: You have trouble ignoring suffering and injustice, at times you may be compelled to interfere in matter beyond your power.\n";
|
||
break;
|
||
|
||
case "pirate":
|
||
s += "Personal shuttle: You carry a piece of hypertechnology that manifests a 1 man spacecraft of solid light you can use to travel freely.\n";
|
||
s += "Disadvantage: You are a psychopath with no capacity for empathy.\n"
|
||
break;
|
||
}
|
||
|
||
s += "\nType of birthplace:\n";
|
||
|
||
switch (values["planet_select"])
|
||
{
|
||
case "a":
|
||
s += "Class A planet: spend 1 point of talent in the Civilizational category.\n";
|
||
break;
|
||
|
||
case "b":
|
||
s += "Class B planet: spend 1 point of talent in the Social category.\n";
|
||
break;
|
||
|
||
case "c":
|
||
s += "Class C planet: spend 1 point of talent in the Infiltration category.\n";
|
||
break;
|
||
|
||
case "d":
|
||
s += "Class D planet: spend 1 point of talent in the Combat category.\n";
|
||
break;
|
||
|
||
case "e":
|
||
s += "Class E planet: spend 1 point of talent in the Science category.\n";
|
||
break;
|
||
|
||
case "f":
|
||
s += "Space station: spend 1 point of talent in the Astronomics category.\n";
|
||
break;
|
||
}
|
||
|
||
s += "\nSocial class:\n";
|
||
|
||
switch (values["social_class_select"])
|
||
{
|
||
case "wretch":
|
||
s += "Wretch: You gain the resources False Identity II and Market Contact I.\n";
|
||
break;
|
||
|
||
case "middle_class":
|
||
s += "Middle class: You gain the resources Market Contact II and Thaler Account I.\n";
|
||
break;
|
||
|
||
case "low_corporate":
|
||
s += "Low corporate: You gain the resources Thaler Account II and Faction Contact I.\n";
|
||
break;
|
||
}
|
||
|
||
s += "\nOriginal profession: ";
|
||
|
||
switch (values["profession_select"])
|
||
{
|
||
case "soldier":
|
||
s += "Soldier.\nStarting gear: 1 S.E.A.L., combat com, light combat armor, standard dagger, Hamaji Yamainu, 30 class standard D ammunition, common consumer tablet. uniform.";
|
||
break;
|
||
|
||
case "law_enforcer":
|
||
s += "Law enforcer.\nStarting gear: 1 S.E.A.L., combat com, heavy militia armor, electro-pistol, voltaic baton, 1 turbo, common consumer tablet, uniform.";
|
||
break;
|
||
|
||
case "scientist":
|
||
s += "Scientist.\nStarting gear: 1 S.E.A.L., combat com, combat polymer suit, Ardulo M2, 30 standard A type ammo, handheld scancorder, any 2 chems, business grade tablet, labwear.";
|
||
break;
|
||
|
||
case "doctor":
|
||
s += "Doctor.\nStarting gear: Combat com, combat polymer suit, Ardulo M2, 30 standard A type ammo, first aid kit, 3 S.E.A.L.-s, common consumer tablet, labwear.";
|
||
break;
|
||
|
||
case "spy":
|
||
s += "Spy.\nStarting gear: 1 S.E.A.L., combat com, combat polymer suit, Hamaji Yamainu, 30 standard D type ammunition, bug, tracking device, business grade tablet, set of elegant clothes.";
|
||
break;
|
||
|
||
case "smuggler":
|
||
s += "Smuggler.\nStarting gear: 1 S.E.A.L., combat com, light militia armor, Ardulo M2, 30 standard A type ammunition, civilian space suit, 1 focus, common consumer tablet, set of protective workwear.";
|
||
break;
|
||
|
||
case "thief":
|
||
s += "Thief.\nStarting gear: 1 S.E.A.L., combat com, combat polymer suit, Ardulo M2, 30 standard A type ammunition, Scorpion, 10m carbon fiber cable with serrated tips, ZX7, common consumer tablet, set of sneakwear.";
|
||
break;
|
||
|
||
case "swindler":
|
||
s += "Swindler.\nStarting gear: 1 S.E.A.L., combat com, combat polymer suit, Ardulo T4, 30 standard A type ammunition, bug, business grade tablet, 1 focus, set of elegant clothing.";
|
||
break;
|
||
|
||
case "pilot":
|
||
s += "Pilot.\nStarting gear: 1 S.E.A.L., combat com, light militia armor, Ardulo M2, 30 standard A type ammunition, civilian space suit, vehicle toolkit, common consumer tablet, set of protective workwear.";
|
||
break;
|
||
|
||
case "engineer":
|
||
s += "Engineer.\nStarting gear: 1 S.E.A.L., combat com, combat polymer suit, Ardulo Minotaur, 30 standard B type ammunition, 1 focus, personal shield generator I, toolkit of player's choice, business grade tablet, set of protective workwear.";
|
||
break;
|
||
|
||
case "trader":
|
||
s += "Trader.\nStarting gear: 1 S.E.A.L., combat com, combat polymer suit, Ardulo M2, 30 standard type A ammunition, 1 focus, business grade tablet, com tap set of elegant clothing.";
|
||
break;
|
||
|
||
case "astronaut":
|
||
s += "Astronaut.\nStarting gear: 1 S.E.A.L., combat com, combat polymer suit, laser pistol, 1 focus, civilian spacesuit, vehicle toolkit, business grade tablet, set of protective workwear.";
|
||
break;
|
||
|
||
case "socialite":
|
||
s += "Socialite.\nStarting gear: 1 S.E.A.L., combat com, combat polymer suit, Ardulo T4, 30 standard type A ammunition, 2 clear, 1 focus, business grade tablet, set of elegant clothing, 1 piece of real jewelry.";
|
||
break;
|
||
|
||
case "hacker":
|
||
s += "Hacker.\nStarting gear: 1 S.E.A.L., combat com, combat polymer suit, Ardulo M2, 30 standard type A ammunition, 1 focus, jailbroken tablet (software level 6, memory 8) with hacking I, antivirus III and encryption I.";
|
||
break;
|
||
|
||
case "other":
|
||
s += "Other.";
|
||
break;
|
||
}
|
||
|
||
await setAttrsAsync({"character_info": s});
|
||
}
|
||
|
||
function attributeToName(attribute)
|
||
{
|
||
switch (attribute)
|
||
{
|
||
case "str":
|
||
return "Strength";
|
||
break;
|
||
|
||
case "sta":
|
||
return "Stamina";
|
||
break;
|
||
|
||
case "agi":
|
||
return "Agility";
|
||
break;
|
||
|
||
case "per":
|
||
return "Perception";
|
||
break;
|
||
|
||
case "int":
|
||
return "Intelligence";
|
||
break;
|
||
|
||
case "cha":
|
||
return "Charisma";
|
||
break;
|
||
|
||
case "wil":
|
||
return "Willpower";
|
||
break;
|
||
}
|
||
}
|
||
|
||
async function setAttribute(attribute)
|
||
{
|
||
var values = await getAttrsAsync([attribute+"_territory", attribute+"_social", attribute+"_planet", attribute+"_profession", attribute+"_xp", attribute+"_cc"]);
|
||
var t = Number(values[attribute+"_territory"]);
|
||
var s = Number(values[attribute+"_social"]);
|
||
var l = Number(values[attribute+"_planet"]);
|
||
var p = Number(values[attribute+"_profession"]);
|
||
var x = Number(values[attribute+"_xp"]);
|
||
var c = Number(values[attribute+"_cc"]);
|
||
|
||
console.log(attribute + " " + t + " " + s + " " + l + " " + p + " " + x + " " + c);
|
||
|
||
setAttrsAsync({[attribute]: 2 + t + s + l + p + x + c});
|
||
}
|
||
|
||
async function setAttributes()
|
||
{
|
||
console.log("setting attributes");
|
||
|
||
await setAttribute("str");
|
||
await setAttribute("sta");
|
||
await setAttribute("agi");
|
||
await setAttribute("per");
|
||
await setAttribute("int");
|
||
await setAttribute("cha");
|
||
await setAttribute("wil");
|
||
}
|
||
|
||
//-------------------------------------------------------------------------------------
|
||
on ("clicked:roll_condition", rollCondition);
|
||
|
||
async function rollCondition(info)
|
||
{
|
||
var values = await getAttrsAsync(["hp", "max_hp"]);
|
||
var hpLevel = Number(values.max_hp)/5;
|
||
var modLevel = Math.ceil((Number(values.max_hp) - Number(values.hp))/hpLevel);
|
||
|
||
var rollString = "&{template:hi-assist} {{name=@{character_name}}} {{title=: Condition: }} {{roll1=[[abs(1d4-1d4) + " + modLevel + "]]}}";
|
||
rerollString = rollString;
|
||
|
||
startRoll(rollString, conditionRollCallback);
|
||
}
|
||
|
||
async function conditionRollCallback(resultData)
|
||
{
|
||
var rollResult = resultData.results.roll1.result;
|
||
|
||
var computed = "wtf?";
|
||
|
||
switch (rollResult)
|
||
{
|
||
case 0:
|
||
computed = "Stable, quickly healing";
|
||
break;
|
||
|
||
case 1:
|
||
computed = "Stable, normally healing";
|
||
break;
|
||
|
||
case 2:
|
||
computed = "Stable, slowly healing";
|
||
break;
|
||
|
||
case 3:
|
||
computed = "Slowly degrading";
|
||
break;
|
||
|
||
case 4:
|
||
computed = "Degrading";
|
||
break;
|
||
|
||
case 5:
|
||
computed = "Quickly degrading";
|
||
break;
|
||
|
||
case 6:
|
||
computed = "Critical";
|
||
break;
|
||
|
||
case 7:
|
||
computed = "Dead";
|
||
break;
|
||
}
|
||
|
||
finishRoll(resultData.rollId, {roll1: computed});
|
||
}
|
||
|
||
on ("clicked:roll_initiative", initiative);
|
||
|
||
async function initiative(info)
|
||
{
|
||
var values = await getAttrsAsync(["agi", "per", "init_mod"]);
|
||
|
||
var modifier = Math.max(Number(values.agi), Number(values.per));
|
||
|
||
var rollString = "&{template:hi-assist} {{name=@{character_name}}} {{title=: Initiative (" + values["init_mod"] + "): }} {{roll1=[[1d12 + " + modifier + " + @{init_mod}]]}}";
|
||
|
||
startRoll(rollString, skillCheckCallback);
|
||
}
|
||
|
||
on ("clicked:reroll", reroll);
|
||
|
||
var rerollString = "";
|
||
|
||
async function reroll(info)
|
||
{
|
||
var values = await getAttrsAsync(["gf"]);
|
||
if (rerollString != "" && isInteger(values.gf) && Number(values.gf) > 0)
|
||
{
|
||
startRoll(rerollString, skillCheckCallback);
|
||
await setAttrsAsync({"gf": (Number(values.gf) - 1) + ""});
|
||
}
|
||
}
|
||
|
||
on("change:money", changeMoney);
|
||
|
||
async function changeMoney(info)
|
||
{
|
||
if (await sanitizeNumberInput(info, true))
|
||
{
|
||
return;
|
||
}
|
||
var values = await getAttrsAsync(["money"]);
|
||
|
||
var money = Number(values["money"]);
|
||
|
||
await setAttrsAsync({"petty_cash": Math.floor(money/1000.0) + "",
|
||
"resupply": Math.floor(money/50.0) + ""});
|
||
}
|
||
|
||
async function getXPData()
|
||
{
|
||
var xpInfo = {};
|
||
var values = await getAttrsAsync(["skill_difficulty_offset", "attribute_cost", "max_attribute_points", "cc_skill_xp"]);
|
||
|
||
xpInfo.skillDiffOff = Number(values.skill_difficulty_offset);
|
||
xpInfo.attrCost = Number(values.attribute_cost);
|
||
xpInfo.maxAttrPoints = Number(values.max_attribute_points);
|
||
xpInfo.ccSkillXp = Number(values.cc_skill_xp);
|
||
|
||
return xpInfo;
|
||
}
|
||
|
||
on ("clicked:reduce_skill", reduceSkill);
|
||
|
||
async function reduceSkill(skillToRaise)
|
||
{
|
||
var values = await getAttrsAsync([skillToRaise, skillToRaise + "_difficulty", skillToRaise + "_bonus", skillToRaise + "_talent", "skill_xp", "spent_xp"]);
|
||
var xpInfo = await getXPData();
|
||
console.log(xpInfo);
|
||
|
||
if (Number(values[skillToRaise + "_bonus"]) > 0)
|
||
{
|
||
var skill = Number(values[skillToRaise]);
|
||
var difficulty = Number(values[skillToRaise + "_difficulty"]);
|
||
var talent = Number(values[skillToRaise + "_talent"]);
|
||
var xpDue = skill * (difficulty - talent - xpInfo.skillDiffOff);
|
||
var bonus = Number(values[skillToRaise + "_bonus"]);
|
||
|
||
var toSet = {[skillToRaise]: "" + (skill - 1),
|
||
[skillToRaise + "_bonus"]: "" + (bonus - 1),
|
||
"spent_xp": (Number(values["spent_xp"]) - xpDue) + ""};
|
||
|
||
await setAttrsAsync(toSet);
|
||
}
|
||
}
|
||
|
||
var firingModeOptions =
|
||
[
|
||
{label: "Single", value: "single", selected: "true", disabled: "true"},
|
||
{label: "Burst", value: "burst", disabled: "true"},
|
||
{label: "Volley", value: "volley", disabled: "true"},
|
||
{label: "Melee Strike", value: "melee", disabled: "true"}
|
||
];
|
||
|
||
var shooterId;
|
||
|
||
on ("clicked:shoot", fireWeapon);
|
||
|
||
async function fireWeapon()
|
||
{
|
||
var values = await getAttrsAsync(["firing_mode"]);
|
||
|
||
var firingMode = values.firing_mode;
|
||
console.log(firingMode);
|
||
if (firingMode != "melee")
|
||
{
|
||
var modeString = "";
|
||
var remainingAmmo;
|
||
if (firingMode == "single" && weapon.clip_ammo > 0)
|
||
{
|
||
await setAttrsAsync({["repeating_weapons_" + weapon.id + "_weapon_clip_ammo"]: weapon.clip_ammo - 1,
|
||
"shoot_prompt_hider": 1});
|
||
remainingAmmo = Number(weapon.clip_ammo) - 1;
|
||
}
|
||
|
||
if (firingMode == "burst" && weapon.burst <= weapon.clip_ammo)
|
||
{
|
||
await setAttrsAsync({["repeating_weapons_" + weapon.id + "_weapon_clip_ammo"]: weapon.clip_ammo - weapon.burst,
|
||
"shoot_prompt_hider": 1});
|
||
modeString = "a burst with";
|
||
remainingAmmo = Number(weapon.clip_ammo) - Number(weapon.burst);
|
||
}
|
||
|
||
if (firingMode == "volley" && weapon.volley <= weapon.clip_ammo)
|
||
{
|
||
await setAttrsAsync({["repeating_weapons_" + weapon.id + "_weapon_clip_ammo"]: weapon.clip_ammo - weapon.volley,
|
||
"shoot_prompt_hider": 1});
|
||
modeString = "a volley with";
|
||
remainingAmmo = Number(weapon.clip_ammo) - Number(weapon.volley);
|
||
}
|
||
|
||
|
||
var rollString = "&{template:hi-roll} {{name=@{character_name}}} {{title= fires " + modeString + " their " + weapon.name + " (" + remainingAmmo + "/" + weapon.clip_capacity + "): }} {{roll1=[[1d12 + @{per} + @{aim} + @{pain} + @{shoot_modifier}]]}}";
|
||
|
||
rerollString = rollString;
|
||
startRoll(rollString, shootCallback);
|
||
}
|
||
else
|
||
{
|
||
var rollString = "&{template:hi-roll} {{name=@{character_name}}} {{title= punches with their " + weapon.name + ": }} {{roll1=[[1d12 + @{agi} + @{melee} + @{pain} + @{shoot_modifier}]]}}";
|
||
|
||
rerollString = rollString;
|
||
startRoll(rollString, shootCallback);
|
||
}
|
||
}
|
||
|
||
function shootCallback(result)
|
||
{
|
||
finishRoll(result.rollId);
|
||
}
|
||
|
||
on ("clicked:cancel_shoot", closeShootPrompt);
|
||
|
||
async function closeShootPrompt()
|
||
{
|
||
await setAttrsAsync({"shoot_prompt_hider": 1});
|
||
}
|
||
|
||
on ("clicked:open_shoot clicked:repeating_weapons:openshoot clicked:repeating_melees:openshoot", openShootPrompt);
|
||
|
||
var weapon = {};
|
||
|
||
async function openShootPrompt(info)
|
||
{
|
||
console.log("opening shoot");
|
||
var number = Number(info.htmlAttributes.value);
|
||
var id;
|
||
var melee = false;
|
||
|
||
if (number < 4)
|
||
{
|
||
var values = await getAttrsAsync(["equipped_weapon" + number + "_id", "equipped_weapon" + number + "_melee"]);
|
||
melee = values["equipped_weapon" + number + "_melee"] == 1;
|
||
id = values["equipped_weapon" + number + "_id"];
|
||
}
|
||
else
|
||
{
|
||
melee = info.sourceAttribute.split("_")[1] == "melees";
|
||
console.log(info.sourceAttribute);
|
||
id = info.sourceAttribute.split("_")[2];
|
||
}
|
||
|
||
var options = structuredClone(firingModeOptions);
|
||
|
||
if (!melee)
|
||
{
|
||
var values = await getAttrsAsync(["repeating_weapons_" + id + "_weapon_name",
|
||
"repeating_weapons_" + id + "_weapon_burst",
|
||
"repeating_weapons_" + id + "_weapon_volley",
|
||
"repeating_weapons_" + id + "_weapon_clip_capacity",
|
||
"repeating_weapons_" + id + "_weapon_clip_ammo"]);
|
||
|
||
weapon["name"] = values["repeating_weapons_" + id + "_weapon_name"];
|
||
weapon["burst"] = Number(values["repeating_weapons_" + id + "_weapon_burst"]);
|
||
weapon["volley"] = Number(values["repeating_weapons_" + id + "_weapon_volley"]);
|
||
weapon["clip_capacity"] = Number(values["repeating_weapons_" + id + "_weapon_clip_capacity"]);
|
||
weapon["clip_ammo"] = Number(values["repeating_weapons_" + id + "_weapon_clip_ammo"]);
|
||
weapon["id"] = id;
|
||
|
||
await setAttrsAsync({"firing_mode": "single"});
|
||
|
||
console.log(weapon);
|
||
|
||
for (var key in weapon)
|
||
{
|
||
if (weapon[key] == NaN)
|
||
{
|
||
weapon[key] = 0;
|
||
}
|
||
}
|
||
|
||
if (weapon.name == "" ||
|
||
weapon.name == undefined)
|
||
{
|
||
return;
|
||
}
|
||
|
||
await setAttrsAsync({"firing_text": "Fire " + weapon.name,
|
||
"shoot_prompt_hider": 0,
|
||
"shoot_hider": 0});
|
||
|
||
if (weapon.clip_ammo > 0)
|
||
{
|
||
delete options[0].disabled;
|
||
}
|
||
else
|
||
{
|
||
await setAttrsAsync({"shoot_hider": 1});
|
||
}
|
||
|
||
if (weapon.burst > 1)
|
||
{
|
||
if (weapon.burst <= weapon.clip_ammo)
|
||
{
|
||
delete options[1].disabled;
|
||
}
|
||
}
|
||
|
||
if (weapon.volley > 1)
|
||
{
|
||
if (weapon.volley <= weapon.clip_ammo)
|
||
{
|
||
delete options[2].disabled;
|
||
}
|
||
}
|
||
|
||
populateListOptions({elemSelector: ".firing-mode-select, .firing-mode-selectBlank",
|
||
optionsArray: options});
|
||
}
|
||
else
|
||
{
|
||
delete options[3].disabled;
|
||
options[0].selected = false;
|
||
delete options[0].selected;
|
||
options[3].selected = true;
|
||
var values = await getAttrsAsync(["repeating_melees_" + id + "_melee_name"]);
|
||
weapon["name"] = values["repeating_melees_" + id + "_melee_name"];
|
||
await setAttrsAsync({"firing_text": "Strike with " + values["repeating_melees_" + id + "_melee_name"],
|
||
"shoot_prompt_hider": 0,
|
||
"shoot_hider": 0,
|
||
"firing_mode": "melee"});
|
||
|
||
populateListOptions({elemSelector: ".firing-mode-select, .firing-mode-selectBlank",
|
||
optionsArray: options});
|
||
}
|
||
}
|
||
|
||
//=========================================================================
|
||
|
||
function padNumber(number)
|
||
{
|
||
if (number >= 10)
|
||
{
|
||
return "" + number;
|
||
}
|
||
else
|
||
{
|
||
return "0" + number;
|
||
}
|
||
}
|
||
|
||
//=======================================================================
|
||
|
||
on ("clicked:buy_hp", buyHp);
|
||
|
||
async function buyHp()
|
||
{
|
||
var values = await getAttrsAsync(["bought_hp", "sta", "xp"], buyHp);
|
||
|
||
await setAttrsAsync({"hp_prompt_hider": 1});
|
||
|
||
var boughtHp = parseInt(values.bought_hp);
|
||
var stamina = parseInt(values.sta);
|
||
var xp = parseInt(values.xp);
|
||
|
||
if (boughtHp < stamina && xp >= 50)
|
||
{
|
||
await setAttrsAsync({"bought_hp": boughtHp + 1});
|
||
}
|
||
}
|
||
|
||
on ("clicked:hp_up", openHpPrompt);
|
||
|
||
async function openHpPrompt()
|
||
{
|
||
console.log("Opening hp prompt");
|
||
var values = await getAttrsAsync(["bought_hp", "sta", "xp"], openHpPrompt);
|
||
|
||
await setAttrsAsync({"hp_prompt_hider": 0});
|
||
var boughtHp = parseInt(values.bought_hp);
|
||
var stamina = parseInt(values.sta);
|
||
var xp = parseInt(values.xp);
|
||
|
||
if (boughtHp < stamina && xp >= 50)
|
||
{
|
||
await setAttrsAsync({"hp_raise_status": "Raise HP by -5- for -50- XP?",
|
||
"buy_hp_hider": 0});
|
||
}
|
||
else if (boughtHp < stamina)
|
||
{
|
||
await setAttrsAsync({"hp_raise_status": "You do not have enough XP (-50-) to raise your HP.",
|
||
"buy_hp_hider": 1});
|
||
}
|
||
else
|
||
{
|
||
await setAttrsAsync({"hp_raise_status": "You need to raise your Stamina if you want to keep buying HP.",
|
||
"buy_hp_hider": 1});
|
||
}
|
||
}
|
||
|
||
on ("clicked:cancel_hp_button", cancelHpPrompt);
|
||
|
||
async function cancelHpPrompt()
|
||
{
|
||
await setAttrsAsync({"hp_prompt_hider": 1});
|
||
}
|
||
|
||
//===========================================================================
|
||
|
||
on ("clicked:roll_attribute", rollAttribute);
|
||
|
||
async function rollAttribute()
|
||
{
|
||
var values = await getAttrsAsync([attrToRoll, "attribute_roll_intensity", "attribute_roll_modifier", "modifier"]);
|
||
|
||
var attributeModifier = parseInt(values.attribute_roll_modifier);
|
||
var hpModifier = parseInt(values.modifier);
|
||
var attrValue = parseInt(values[attrToRoll]);
|
||
var attributeName;
|
||
|
||
switch (attrToRoll)
|
||
{
|
||
case "str":
|
||
attributeName = "Strength";
|
||
break;
|
||
case "sta":
|
||
attributeName = "Stamina";
|
||
break;
|
||
case "agi":
|
||
attributeName = "Agility";
|
||
break;
|
||
case "per":
|
||
attributeName = "Perception";
|
||
break;
|
||
case "int":
|
||
attributeName = "Intelligence";
|
||
break;
|
||
case "cha":
|
||
attributeName = "Charisma";
|
||
break;
|
||
case "wil":
|
||
attributeName = "Willpower";
|
||
break;
|
||
}
|
||
|
||
var ams = "";
|
||
var hms = "";
|
||
var as = "";
|
||
|
||
if (attributeModifier > 0)
|
||
{
|
||
ams = " + " + attributeModifier;
|
||
}
|
||
else if (attributeModifier < 0)
|
||
{
|
||
ams = " " + attributeModifier;
|
||
}
|
||
|
||
if (hpModifier > 0)
|
||
{
|
||
hms = " + " + hpModifier;
|
||
}
|
||
else if (hpModifier < 0)
|
||
{
|
||
hms = " " + hpModifier;
|
||
}
|
||
|
||
if (attrValue > -1)
|
||
{
|
||
as = " + " + attrValue;
|
||
}
|
||
else
|
||
{
|
||
as = " " + attrValue;
|
||
}
|
||
var rollString = "&{template:";
|
||
if (values.attribute_roll_intensity == "on")
|
||
{
|
||
rollString += "hi-roll} {{name=@{character_name}}} {{title=: High intensity " + attributeName + " roll: }} {{roll1=[[1d12" + as + ams + hms + "]]}}";
|
||
}
|
||
else
|
||
{
|
||
rollString += "li-roll} {{name=@{character_name}}} {{title=: Low intensity " + attributeName + " roll: }} {{roll1=[[abs(1d20 - 1d20)" + as + ams + hms + "]]}}";
|
||
}
|
||
|
||
rerollString = rollString;
|
||
startRoll(rollString, skillCheckCallback);
|
||
|
||
await setAttrsAsync({"attribute_roll_prompt_hider": 1});
|
||
}
|
||
|
||
var attrToRoll;
|
||
|
||
on ("clicked:cancel_attr_roll", closeAttrRoll);
|
||
|
||
async function closeAttrRoll()
|
||
{
|
||
await setAttrsAsync({"attribute_roll_prompt_hider": 1});
|
||
}
|
||
|
||
on ("clicked:roll_str clicked:roll_sta clicked:roll_agi clicked:roll_per clicked:roll_int clicked:roll_cha clicked:roll_wil", openAttrRoll);
|
||
|
||
async function openAttrRoll(info)
|
||
{
|
||
console.log("Opening");
|
||
attrToRoll = info.htmlAttributes.name.substring(9, info.htmlAttributes.name.length);
|
||
var name;
|
||
|
||
switch(attrToRoll)
|
||
{
|
||
case "str":
|
||
name = "Strength";
|
||
break;
|
||
case "sta":
|
||
name = "Stamina";
|
||
break;
|
||
case "agi":
|
||
name = "Agility";
|
||
break;
|
||
case "per":
|
||
name = "Perception";
|
||
break;
|
||
case "cha":
|
||
name = "Charisma";
|
||
break;
|
||
case "int":
|
||
name = "Intelligence";
|
||
break;
|
||
case "wil":
|
||
name = "Willpower";
|
||
break;
|
||
}
|
||
|
||
await setAttrsAsync({"attribute_roll_prompt_hider": 0,
|
||
"attribute_roll_title": "Roll " + name});
|
||
}
|
||
|
||
//=========================================================================
|
||
|
||
on ("clicked:roll_skill_with_str clicked:roll_skill_with_sta clicked:roll_skill_with_agi clicked:roll_skill_with_per clicked:roll_skill_with_int clicked:roll_skill_with_cha clicked:roll_skill_with_wil", makeSkillRoll);
|
||
|
||
var attributeToAdd;
|
||
|
||
async function makeSkillRoll(info)
|
||
{
|
||
attributeToAdd = info.htmlAttributes.name.substring(20, info.htmlAttributes.name.length);
|
||
|
||
var values;
|
||
|
||
if (skillToRoll == "art1" ||
|
||
skillToRoll == "art2" ||
|
||
skillToRoll == "hobby1" ||
|
||
skillToRoll == "hobby2" ||
|
||
skillToRoll == "language1" ||
|
||
skillToRoll == "language2" ||
|
||
skillToRoll == "language3" ||
|
||
skillToRoll == "language4" ||
|
||
skillToRoll == "profession1" ||
|
||
skillToRoll == "profession2")
|
||
{
|
||
values = await getAttrsAsync([attributeToAdd, skillToRoll, skillToRoll + "_name", "skill_roll_intensity", "skill_roll_modifier", "modifier"]);
|
||
}
|
||
else
|
||
{
|
||
values = await getAttrsAsync([attributeToAdd, skillToRoll, "skill_roll_intensity", "skill_roll_modifier", "modifier"]);
|
||
}
|
||
|
||
var skillName;
|
||
var attributeName;
|
||
var skillModifier = parseInt(values.skill_roll_modifier);
|
||
var hpModifier = parseInt(values.modifier);
|
||
var skillValue = parseInt(values[skillToRoll]);
|
||
var attrValue = parseInt(values[attributeToAdd]);
|
||
|
||
var sms = "";
|
||
var hms = "";
|
||
var ss = "";
|
||
var as = "";
|
||
|
||
if (skillModifier > 0)
|
||
{
|
||
sms = " + " + skillModifier;
|
||
}
|
||
else if (skillModifier < 0)
|
||
{
|
||
sms = " " + skillModifier;
|
||
}
|
||
|
||
if (hpModifier > 0)
|
||
{
|
||
hms = " + " + hpModifier;
|
||
}
|
||
else if (hpModifier < 0)
|
||
{
|
||
hms = " " + hpModifier;
|
||
}
|
||
|
||
if (skillValue > -1)
|
||
{
|
||
ss = " + " + skillValue;
|
||
}
|
||
else
|
||
{
|
||
ss = " " + skillValue;
|
||
}
|
||
|
||
if (attrValue > -1)
|
||
{
|
||
as = " + " + attrValue;
|
||
}
|
||
else
|
||
{
|
||
as = " " + attrValue;
|
||
}
|
||
|
||
skillName = await skillToName(skillToRoll);
|
||
|
||
switch (attributeToAdd)
|
||
{
|
||
case "str":
|
||
attributeName = "Strength";
|
||
break;
|
||
case "sta":
|
||
attributeName = "Stamina";
|
||
break;
|
||
case "agi":
|
||
attributeName = "Agility";
|
||
break;
|
||
case "per":
|
||
attributeName = "Perception";
|
||
break;
|
||
case "int":
|
||
attributeName = "Intelligence";
|
||
break;
|
||
case "cha":
|
||
attributeName = "Charisma";
|
||
break;
|
||
case "wil":
|
||
attributeName = "Willpower";
|
||
break;
|
||
}
|
||
|
||
var rollString = "&{template:";
|
||
if (values.skill_roll_intensity == "on")
|
||
{
|
||
rollString += "hi-roll} {{name=@{character_name}}} {{title=: High intensity " + attributeName + " + " + skillName + " check: }} {{roll1=[[1d12" + as + ss + sms + hms + "]]}}";
|
||
}
|
||
else
|
||
{
|
||
rollString += "li-roll} {{name=@{character_name}}} {{title=: Low intensity " + attributeName + " + " + skillName + " check: }} {{roll1=[[abs(1d20 - 1d20)" + as + ss + sms + hms + "]]}}";
|
||
}
|
||
|
||
rerollString = rollString;
|
||
startRoll(rollString, skillCheckCallback);
|
||
|
||
await setAttrsAsync({"roll_prompt_hider": 1});
|
||
}
|
||
|
||
function skillCheckCallback(results)
|
||
{
|
||
finishRoll(results.rollId);
|
||
}
|
||
|
||
var skillToRoll;
|
||
|
||
on ("clicked:roll_bridge_tech clicked:roll_mounted_weaponry clicked:roll_pilot_spacecraft clicked:roll_vehicle_engineering clicked:roll_drive_ground_vehicle clicked:roll_knowledge_corporate clicked:roll_knowledge_planets clicked:roll_pilot_aircraft clicked:roll_knowledge_urban clicked:roll_trade clicked:roll_aim clicked:roll_athletics clicked:roll_endurance clicked:roll_melee clicked:roll_reaction clicked:roll_throw clicked:roll_notice clicked:roll_hack_security clicked:roll_search clicked:roll_sleight_of_hand clicked:roll_sneak clicked:roll_astronomy clicked:roll_computer_science clicked:roll_medicine clicked:roll_natural_sciences clicked:roll_robotics clicked:roll_weapons_engineering clicked:roll_xenobiology clicked:roll_convince clicked:roll_deceive clicked:roll_empathy clicked:roll_intimidate clicked:roll_lead clicked:roll_art1 clicked:roll_art2 clicked:roll_hobby1 clicked:roll_hobby2 clicked:roll_language1 clicked:roll_language2 clicked:roll_language3 clicked:roll_language4 clicked:roll_profession1 clicked:roll_profession2", openRollPrompt);
|
||
|
||
async function openRollPrompt(info)
|
||
{
|
||
skillToRoll = info.htmlAttributes.name.substring(9, info.htmlAttributes.name.length);
|
||
|
||
var values = await getAttrsAsync([skillToRoll, skillToRoll + "_training_time"]);
|
||
|
||
var skillName;
|
||
|
||
skillName = await skillToName(skillToRoll);
|
||
|
||
var params = {"roll_prompt_hider": 0,
|
||
"roll_title": "Roll " + skillName};
|
||
|
||
if (values[skillToRoll + "_training_time"] != "0" &&
|
||
values[skillToRoll] == 0)
|
||
{
|
||
params["skill_roll_hider"] = "1";
|
||
params["roll_title"] = "You are not trained in " + skillName;
|
||
}
|
||
else
|
||
{
|
||
params["skill_roll_hider"] = "0";
|
||
}
|
||
|
||
await setAttrsAsync (params);
|
||
}
|
||
|
||
on ("clicked:cancel_skill_roll", cancelRoll);
|
||
|
||
async function cancelRoll()
|
||
{
|
||
await setAttrsAsync({"roll_prompt_hider": 1});
|
||
}
|
||
|
||
//=====================================================================
|
||
|
||
async function skillToName(skill)
|
||
{
|
||
var values = await getAttrsAsync(["art1_name", "art2_name", "hobby1_name",
|
||
"hobby2_name", "language1_name", "language2_name", "language3_name",
|
||
"language4_name", "profession1_name", "profession2_name"]);
|
||
|
||
switch (skill)
|
||
{
|
||
case "bridge_tech":
|
||
return "Bridge Tech";
|
||
break;
|
||
case "mounted_weaponry":
|
||
return "Mounted Weaponry";
|
||
break;
|
||
case "pilot_spacecraft":
|
||
return "Pilot Spacecraft";
|
||
break;
|
||
case "vehicle_engineering":
|
||
return "Vehicle Engineering";
|
||
break;
|
||
case "drive_ground_vehicle":
|
||
return "Drive Ground Vehicle";
|
||
break;
|
||
case "knowledge_corporate":
|
||
return "Knowledge (Corporate)";
|
||
break;
|
||
case "knowledge_planets":
|
||
return "Knowledge (Planets)";
|
||
break;
|
||
case "pilot_aircraft":
|
||
return "Pilot Aircraft";
|
||
break;
|
||
case "knowledge_urban":
|
||
return "Knowledge (Urban)";
|
||
break;
|
||
case "trade":
|
||
return "Trade";
|
||
break;
|
||
case "aim":
|
||
return "Aim";
|
||
break;
|
||
case "athletics":
|
||
return "Athletics";
|
||
break;
|
||
case "endurance":
|
||
return "Endurance";
|
||
break;
|
||
case "melee":
|
||
return "Melee";
|
||
break;
|
||
case "reaction":
|
||
return "Reaction";
|
||
break;
|
||
case "throw":
|
||
return "Throw";
|
||
break;
|
||
case "notice":
|
||
return "Notice";
|
||
break;
|
||
case "hack_security":
|
||
return "Hack Security";
|
||
break;
|
||
case "search":
|
||
return "Search";
|
||
break;
|
||
case "sleight_of_hand":
|
||
return "Sleight of Hand";
|
||
break;
|
||
case "sneak":
|
||
return "Sneak";
|
||
break;
|
||
case "astronomy":
|
||
return "Astronomy";
|
||
break;
|
||
case "computer_science":
|
||
return "Computer Science";
|
||
break;
|
||
case "medicine":
|
||
return "Medicine";
|
||
break;
|
||
case "natural_sciences":
|
||
return "Natural Sciences";
|
||
break;
|
||
case "robotics":
|
||
return "Robotics";
|
||
break;
|
||
case "weapons_engineering":
|
||
return "Weapons Engineering";
|
||
break;
|
||
case "xenobiology":
|
||
return "Xenobiology";
|
||
break;
|
||
case "convince":
|
||
return "Convince";
|
||
break;
|
||
case "deceive":
|
||
return "Deceive";
|
||
break;
|
||
case "empathy":
|
||
return "Empathy";
|
||
break;
|
||
case "intimidate":
|
||
return "Intimidate";
|
||
break;
|
||
case "lead":
|
||
return "Lead";
|
||
break;
|
||
case "art1":
|
||
return values.art1_name;
|
||
break;
|
||
case "art2":
|
||
return values.art2_name;
|
||
break;
|
||
case "hobby1":
|
||
return values.hobby1_name;
|
||
break;
|
||
case "hobby2":
|
||
return values.hobby2_name;
|
||
break;
|
||
case "language1":
|
||
return values.language1_name;
|
||
break;
|
||
case "language2":
|
||
return values.language2_name;
|
||
break;
|
||
case "language3":
|
||
return values.language3_name;
|
||
break;
|
||
case "language4":
|
||
return values.language4_name;
|
||
break;
|
||
case "profession1":
|
||
return values.profession1_name;
|
||
break;
|
||
case "profession2":
|
||
return values.profession2_name;
|
||
break;
|
||
}
|
||
|
||
return "Bullshit is bullshit";
|
||
}
|
||
|
||
on ("clicked:edit_bridge_tech clicked:edit_mounted_weaponry clicked:edit_pilot_spacecraft clicked:edit_vehicle_engineering clicked:edit_drive_ground_vehicle clicked:edit_knowledge_corporate clicked:edit_knowledge_planets clicked:edit_pilot_aircraft clicked:edit_knowledge_urban clicked:edit_trade clicked:edit_aim clicked:edit_athletics clicked:edit_endurance clicked:edit_melee clicked:edit_reaction clicked:edit_throw clicked:edit_notice clicked:edit_hack_security clicked:edit_search clicked:edit_sleight_of_hand clicked:edit_sneak clicked:edit_astronomy clicked:edit_computer_science clicked:edit_medicine clicked:edit_natural_sciences clicked:edit_robotics clicked:edit_weapons_engineering clicked:edit_xenobiology clicked:edit_convince clicked:edit_deceive clicked:edit_empathy clicked:edit_intimidate clicked:edit_lead clicked:edit_art1 clicked:edit_art2 clicked:edit_hobby1 clicked:edit_hobby2 clicked:edit_language1 clicked:edit_language2 clicked:edit_language3 clicked:edit_language4 clicked:edit_profession1 clicked:edit_profession2", editSkill);
|
||
|
||
async function editSkill(info)
|
||
{
|
||
var skillToRaise = info.htmlAttributes.name.substring(9, info.htmlAttributes.name.length);
|
||
|
||
await setAttrsAsync({"skill_to_change": skillToRaise});
|
||
|
||
var sInfo = await getSkillInfo(skillToRaise);
|
||
|
||
if (sInfo.trainingTime != 0 && sInfo.currentValue == 0)
|
||
{
|
||
await setAttrsAsync({"skill_training_time_hider": 0,
|
||
"skill_training_time": "Training time: -" + sInfo.trainingTime + "-",
|
||
"skill_prompt_title": sInfo.skillName + " -" + sInfo.currentValue + "-",
|
||
"skill_xp": sInfo.skillXp,
|
||
"skill_talent": sInfo.talent});
|
||
}
|
||
else
|
||
{
|
||
await setAttrsAsync({"skill_training_time_hider": 1,
|
||
"skill_prompt_title": sInfo.skillName + " -" + sInfo.currentValue + "-",
|
||
"skill_xp": sInfo.skillXp,
|
||
"skill_talent": sInfo.talent});
|
||
}
|
||
|
||
var raiseCost = Math.max(0, (sInfo.currentValue + 1) * (sInfo.difficulty - sInfo.talent) - sInfo.skillXp);
|
||
|
||
if (sInfo.availableXP >= raiseCost && sInfo.currentValue < 10)
|
||
{
|
||
await setAttrsAsync({"hide_level_skill": 0,
|
||
"skill_level_up_text": "Raise skill (cost: -" + raiseCost + "- XP)?"});
|
||
}
|
||
else if (sInfo.currentValue < 10)
|
||
{
|
||
await setAttrsAsync({"hide_level_skill": 1,
|
||
"skill_level_up_text": "Cost to raise: -" + raiseCost + "- XP"});
|
||
}
|
||
else
|
||
{
|
||
await setAttrsAsync({"hide_level_skill": 1,
|
||
"skill_level_up_text": "This skill is maxed out."});
|
||
}
|
||
|
||
await setAttrsAsync({"skill_prompt_hider": 0});
|
||
|
||
/*if (bonus > 0)
|
||
{
|
||
await setAttrsAsync({"hide_reduce_skill": 0});
|
||
}
|
||
else
|
||
{
|
||
await setAttrsAsync({"hide_reduce_skill": 1});
|
||
}*/
|
||
}
|
||
|
||
async function getSkillInfo(skillToRaise)
|
||
{
|
||
var values;
|
||
var info = {};
|
||
|
||
var xpInfo = await getXPData();
|
||
console.log(xpInfo);
|
||
|
||
if (skillToRaise == "art1" ||
|
||
skillToRaise == "art2" ||
|
||
skillToRaise == "hobby1" ||
|
||
skillToRaise == "hobby2" ||
|
||
skillToRaise == "language1" ||
|
||
skillToRaise == "language2" ||
|
||
skillToRaise == "language3" ||
|
||
skillToRaise == "language4" ||
|
||
skillToRaise == "profession1" ||
|
||
skillToRaise == "profession2")
|
||
{
|
||
values = await getAttrsAsync(["skill_prompt_hider", "xp", skillToRaise, skillToRaise+"_XP", skillToRaise+"_training_time", skillToRaise + "_bonus", skillToRaise+"_difficulty",
|
||
skillToRaise.substring(0, skillToRaise.length - 1)+"_talent", "art1_name", "art2_name", "hobby1_name", "hobby2_name", "language1_name",
|
||
"language2_name", "language3_name", "language4_name", "profession1_name", "profession2_name"]);
|
||
info.talent = parseInt(values[skillToRaise.substring(0, skillToRaise.length-1) + "_talent"]);
|
||
}
|
||
else
|
||
{
|
||
values = await getAttrsAsync(["skill_prompt_hider", "xp", skillToRaise, skillToRaise+"_XP", skillToRaise+"_training_time", skillToRaise + "_bonus", skillToRaise+"_difficulty",
|
||
skillToRaise+"_talent"]);
|
||
|
||
info.talent = parseInt(values[skillToRaise + "_talent"]);
|
||
}
|
||
|
||
info.currentValue = Number(values[skillToRaise]);
|
||
info.trainingTime = values[skillToRaise + "_training_time"];
|
||
info.skillXp = Number(values[skillToRaise + "_XP"]);
|
||
info.difficulty = Number(values[skillToRaise + "_difficulty"]) - xpInfo.skillDiffOff;
|
||
info.bonus = Number(values[skillToRaise + "_bonus"]);
|
||
info.availableXP = Number(values.xp);
|
||
|
||
info.skillName = await skillToName(skillToRaise);
|
||
|
||
console.log(info);
|
||
|
||
return info;
|
||
}
|
||
|
||
on ("clicked:skill_prompt_ok", closeEditSkill);
|
||
|
||
async function closeEditSkill()
|
||
{
|
||
await setAttrsAsync({"skill_prompt_hider": 1});
|
||
}
|
||
|
||
on ("clicked:level_skill", raiseSkill);
|
||
|
||
async function raiseSkill(info)
|
||
{
|
||
var skillToRaise = (await getAttrsAsync(["skill_to_change"])).skill_to_change;
|
||
var values = await getAttrsAsync(["spent_xp"]);
|
||
var sInfo = await getSkillInfo(skillToRaise);
|
||
|
||
var totalCost = (sInfo.currentValue + 1) * (sInfo.difficulty - sInfo.talent);
|
||
var raiseCost = Math.max(0, totalCost - sInfo.skillXp);
|
||
|
||
console.log(totalCost + " vs " + raiseCost);
|
||
|
||
if (raiseCost <= sInfo.availableXP && sInfo.currentValue < 10)
|
||
{
|
||
await setAttrsAsync({"spent_xp": parseInt(values.spent_xp) + raiseCost,
|
||
[skillToRaise + "_XP"]: "" + Math.max(0, (sInfo.skillXp - totalCost)),
|
||
"skill_xp": "" + Math.max(0, (sInfo.skillXp - totalCost)),
|
||
[skillToRaise]: (sInfo.currentValue + 1) + "",
|
||
[skillToRaise + "_bonus"]: (sInfo.bonus + 1) + "",
|
||
"skill_prompt_title": sInfo.skillName + " -" + (sInfo.currentValue + 1) + "-"});
|
||
|
||
var nextRaiseCost = (sInfo.currentValue + 2) * (sInfo.difficulty - sInfo.talent) - Math.max(0, (sInfo.skillXp - totalCost));
|
||
if (sInfo.availableXP - nextRaiseCost > 0 && sInfo.currentValue < 9)
|
||
{
|
||
await setAttrsAsync({"skill_level_up_text": "Raise skill (cost: -" + Math.max(0, nextRaiseCost) + "- XP)?"});
|
||
}
|
||
else if (sInfo.currentValue < 9)
|
||
{
|
||
await setAttrsAsync({"skill_level_up_text": "Cost to raise: -" + Math.max(0, nextRaiseCost) + "- XP",
|
||
"hide_level_skill": 1});
|
||
}
|
||
else
|
||
{
|
||
await setAttrsAsync({"skill_level_up_text": "This skill is maxed out.",
|
||
"hide_level_skill": 1});
|
||
}
|
||
}
|
||
}
|
||
|
||
on ("change:skill_xp", setSkillText);
|
||
|
||
async function setSkillText(info)
|
||
{
|
||
if (info.sourceType == "player")
|
||
{
|
||
if (await sanitizeNumberInput(info, false))
|
||
{
|
||
return;
|
||
}
|
||
var skillToRaise = (await getAttrsAsync(["skill_to_change"])).skill_to_change;
|
||
var values = await getAttrsAsync(["spent_xp"]);
|
||
|
||
var sInfo = await getSkillInfo(skillToRaise);
|
||
|
||
var totalCost = (sInfo.currentValue + 1) * (sInfo.difficulty - sInfo.talent);
|
||
var raiseCost = Math.max(totalCost - Number(info.newValue), 0);
|
||
|
||
//console.log(currentValue + "-" + talent + "-" + difficulty + "-" + availableXP + "-" + bonus);
|
||
|
||
if (sInfo.availableXP - raiseCost > 0)
|
||
{
|
||
await setAttrsAsync({"skill_level_up_text": "Raise skill (cost: -" + raiseCost + "- XP)?",
|
||
[skillToRaise + "_XP"]: info.newValue,
|
||
"hide_level_skill": "0"});
|
||
}
|
||
else
|
||
{
|
||
await setAttrsAsync({"skill_level_up_text": "Cost to raise: -" + raiseCost + "- XP",
|
||
[skillToRaise + "_XP"]: info.newValue,
|
||
"hide_level_skill": "1"});
|
||
}
|
||
}
|
||
}
|
||
|
||
//=========================================================================
|
||
on ("clicked:switch_to_character", openCharacter);
|
||
on ("clicked:switch_to_gear", openGear);
|
||
on ("clicked:switch_to_notes", openNotes);
|
||
|
||
async function openCharacter()
|
||
{
|
||
await setAttrsAsync({"character_page_hider": 0,
|
||
"gear_page_hider": 1,
|
||
"notes_page_hider": 1});
|
||
}
|
||
|
||
async function openGear()
|
||
{
|
||
await setAttrsAsync({"character_page_hider": 1,
|
||
"gear_page_hider": 0,
|
||
"notes_page_hider": 1});
|
||
}
|
||
|
||
async function openNotes()
|
||
{
|
||
await setAttrsAsync({"character_page_hider": 1,
|
||
"gear_page_hider": 1,
|
||
"notes_page_hider": 0});
|
||
}
|
||
|
||
//=========================================================================
|
||
on ("clicked:str_up clicked:sta_up clicked:agi_up clicked:per_up clicked:int_up clicked:cha_up clicked:wil_up", raiseAttr);
|
||
|
||
var attrToRaise;
|
||
|
||
async function raiseAttr(info)
|
||
{
|
||
var attribute = info.htmlAttributes.name.substring(4, 7);
|
||
attrToRaise = attribute;
|
||
var values = await getAttrsAsync(["cc2_prompt_hider", attribute, attribute + "_cc", "xp", "cc_points"]);
|
||
|
||
var attrName;
|
||
var attrValue = parseInt(values[attribute]);
|
||
var attrCC = parseInt(values[attribute + "_cc"]);
|
||
|
||
switch (attribute)
|
||
{
|
||
case "str":
|
||
attrName = "strength";
|
||
break;
|
||
case "sta":
|
||
attrName = "stamina";
|
||
break;
|
||
case "agi":
|
||
attrName = "agility";
|
||
break;
|
||
case "per":
|
||
attrName = "perception";
|
||
break;
|
||
case "int":
|
||
attrName = "intelligence";
|
||
break;
|
||
case "cha":
|
||
attrName = "charisma";
|
||
break;
|
||
case "wil":
|
||
attrName = "willpower";
|
||
break;
|
||
}
|
||
|
||
if (values.cc2_prompt_hider == "1")
|
||
{
|
||
await setAttrsAsync({"attribute_prompt_hider": 0});
|
||
var xpInfo = await getXPData();
|
||
console.log(xpInfo);
|
||
|
||
var availableXP = parseInt(values.xp);
|
||
|
||
if (availableXP < (attrValue + 1) * xpInfo.attrCost)
|
||
{
|
||
await setAttrsAsync({"attribute_prompt_message": "You need -" + (attrValue + 1) * xpInfo.attrCost + "- XP to raise your " + attrName,
|
||
"increase_attribute_hider": 1});
|
||
}
|
||
else
|
||
{
|
||
await setAttrsAsync({"attribute_prompt_message": "To raise " + attrName + " from -" + attrValue + "- to -" + (attrValue + 1) + "-\nyou need to spend -" + (attrValue + 1) * xpInfo.attrCost + "- XP. Proceed?",
|
||
"increase_attribute_hider": 0});
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var ccPoints = parseInt(values.cc_points);
|
||
|
||
if (ccPoints >= attrValue + 1)
|
||
{
|
||
await setAttrsAsync({[attribute + "_cc"]: (attrCC + 1),
|
||
"cc_points": (ccPoints - attrValue - 1),
|
||
[attribute]: (attrValue + 1)});
|
||
}
|
||
|
||
await enableCCComplete();
|
||
}
|
||
}
|
||
|
||
on ("clicked:str_down clicked:sta_down clicked:agi_down clicked:per_down clicked:int_down clicked:cha_down clicked:wil_down", lowerAttr);
|
||
|
||
async function lowerAttr(info)
|
||
{
|
||
var attribute = info.htmlAttributes.name.substring(4, 7);
|
||
var values = await getAttrsAsync(["cc_points", attribute, attribute + "_cc"]);
|
||
|
||
var ccPoints = parseInt(values.cc_points);
|
||
var currentValue = parseInt(values[attribute]);
|
||
var currentCC = parseInt(values[attribute + "_cc"]);
|
||
|
||
if (currentCC > 0)
|
||
{
|
||
await setAttrsAsync({[attribute + "_cc"]: (currentCC - 1),
|
||
"cc_points": (ccPoints + currentValue),
|
||
[attribute]: (currentValue - 1)});
|
||
await enableCCComplete();
|
||
}
|
||
}
|
||
|
||
on ("clicked:cancel_attr", cancelAttributePrompt)
|
||
|
||
async function cancelAttributePrompt()
|
||
{
|
||
await setAttrsAsync({"attribute_prompt_hider": 1});
|
||
}
|
||
|
||
|
||
on ("clicked:increase_attr", acceptAttributePrompt);
|
||
|
||
async function acceptAttributePrompt()
|
||
{
|
||
var values = await getAttrsAsync([attrToRaise, "xp", "spent_xp"]);
|
||
var currentValue = parseInt(values[attrToRaise]);
|
||
var availableXP = parseInt(values.xp);
|
||
var spentXP = parseInt(values.spent_xp);
|
||
|
||
var xpInfo = await getXPData();
|
||
console.log(xpInfo);
|
||
|
||
await setAttrsAsync({"attribute_prompt_hider": 1,
|
||
[attrToRaise]: (currentValue + 1),
|
||
"spent_xp": (spentXP + (currentValue + 1) * xpInfo.attrCost)});
|
||
}
|
||
|
||
//======================================================================
|
||
var scienceOptions =
|
||
[
|
||
{label: "Astronomy", value: "astronomy"},
|
||
{label: "Computer Science", value: "computer_science"},
|
||
{label: "Medicine", value: "medicine"},
|
||
{label: "Natural Sciences", value: "natural_sciences"},
|
||
{label: "Robotics", value: "robotics"},
|
||
{label: "Weapons Engineering", value: "weapons_engineering"},
|
||
{label: "Xenobiology", value: "xenobiology"}
|
||
];
|
||
|
||
var attributeOptions =
|
||
[
|
||
{label: "Strength", value: "str"},
|
||
{label: "Stamina", value: "sta"},
|
||
{label: "Agility", value: "agi"},
|
||
{label: "Perception", value: "per"},
|
||
{label: "Intelligence", value: "int"},
|
||
{label: "Charisma", value: "cha"},
|
||
{label: "Willpower", value: "wil"}
|
||
];
|
||
|
||
var customOptions =
|
||
[
|
||
{label: "ASTRONAUTICS", value: "ASTRONAUTICS", disabled: "true"},
|
||
{label: "Bridge Tech", value: "bridge_tech"},
|
||
{label: "Mounted Weaponry", value: "mounted_weaponry"},
|
||
{label: "Pilot Spacecraft", value: "pilot_spacecraft"},
|
||
{label: "Vehicle Engineering", value: "vehicle_engineering"},
|
||
{label: "CIVILIZATIONAL", value: "CIVILIZATIONAL", disabled: "true"},
|
||
{label: "Drive Ground Vehicle", value: "drive_ground_vehicle"},
|
||
{label: "Knowledge (Corporate)", value: "knowledge_corporate"},
|
||
{label: "Knowledge (Planets)", value: "knowledge_planets"},
|
||
{label: "Pilot Aircraft", value: "pilot_aircraft"},
|
||
{label: "Knowledge (Urban)", value: "knowledge_urban"},
|
||
{label: "Trade", value: "trade"},
|
||
{label: "COMBAT", value: "COMBAT", disabled: "true"},
|
||
{label: "Aim", value: "aim"},
|
||
{label: "Athletics", value: "athletics"},
|
||
{label: "Endurance", value: "endurance"},
|
||
{label: "Melee", value: "melee"},
|
||
{label: "Reaction", value: "reaction"},
|
||
{label: "Throw", value: "throw"},
|
||
{label: "INFILTRATION", value: "INFILTRATION", disabled: "true"},
|
||
{label: "Notice", value: "notice"},
|
||
{label: "Hack Security", value: "hack_security"},
|
||
{label: "Search", value: "search"},
|
||
{label: "Sleight of Hand", value: "sleight_of_hand"},
|
||
{label: "Sneak", value: "sneak"},
|
||
{label: "SCIENCE", value: "SCIENCE", disabled: "true"},
|
||
{label: "Astronomy", value: "astronomy"},
|
||
{label: "Computer Science", value: "computer_science"},
|
||
{label: "Medicine", value: "medicine"},
|
||
{label: "Natural Sciences", value: "natural_sciences"},
|
||
{label: "Robotics", value: "robotics"},
|
||
{label: "Weapons Engineering", value: "weapons_engineering"},
|
||
{label: "Xenobiology", value: "xenobiology"},
|
||
{label: "SOCIAL", value: "SOCIAL", disabled: "true"},
|
||
{label: "Convince", value: "convince"},
|
||
{label: "Deceive", value: "deceive"},
|
||
{label: "Empathy", value: "empathy"},
|
||
{label: "Intimidate", value: "intimidate"},
|
||
{label: "Lead", value: "lead"}
|
||
];
|
||
|
||
function findIndex(optionArray, value)
|
||
{
|
||
for (var i=0; i<optionArray.length; i++)
|
||
{
|
||
if (optionArray[i].value == value)
|
||
{
|
||
return i;
|
||
}
|
||
}
|
||
}
|
||
|
||
function selectOption(optionArray, value)
|
||
{
|
||
|
||
for (var i=0; i<optionArray.length; i++)
|
||
{
|
||
if (optionArray[i].value == value)
|
||
{
|
||
optionArray[i].selected = "true";
|
||
}
|
||
}
|
||
}
|
||
|
||
on ("change:science1 change:science2", scienceSelectChanged);
|
||
|
||
async function scienceSelectChanged()
|
||
{
|
||
await setAttrsAsync({"astronomy": "0",
|
||
"computer_science": "0",
|
||
"natural_sciences": "0",
|
||
"robotics": "0",
|
||
"weapons_engineering": "0",
|
||
"xenobiology": "0"});
|
||
var values = await getAttrsAsync(["science1", "science2"]);
|
||
|
||
var science1Options = structuredClone(scienceOptions);
|
||
var science2Options = structuredClone(scienceOptions);
|
||
science1Options.splice(findIndex(science1Options, values.science2), 1);
|
||
science2Options.splice(findIndex(science2Options, values.science1), 1);
|
||
selectOption(science1Options, values["science1"]);
|
||
selectOption(science2Options, values["science2"]);
|
||
|
||
populateListOptions({elemSelector: ".science1-select, .science1-selectBlank", optionsArray: science1Options});
|
||
populateListOptions({elemSelector: ".science2-select, .science2-selectBlank", optionsArray: science2Options});
|
||
|
||
await setAttrsAsync({[values.science1]: 2,
|
||
[values.science2]: 1});
|
||
await setCharacterInfo();
|
||
}
|
||
|
||
on ("change:custom_attr1 change:custom_attr2", attributeSelectChanged);
|
||
|
||
async function attributeSelectChanged()
|
||
{
|
||
var values = await getAttrsAsync(["custom_attr1", "custom_attr2"]);
|
||
|
||
var attribute1Options = structuredClone(attributeOptions);
|
||
var attribute2Options = structuredClone(attributeOptions);
|
||
attribute1Options.splice(findIndex(attribute1Options, values.custom_attr2), 1);
|
||
attribute2Options.splice(findIndex(attribute2Options, values.custom_attr1), 1);
|
||
|
||
selectOption(attribute1Options, values.custom_attr1);
|
||
selectOption(attribute2Options, values.custom_attr2);
|
||
|
||
populateListOptions({elemSelector: ".attribute1-select, .attribute1-selectBlank", optionsArray: attribute1Options});
|
||
populateListOptions({elemSelector: ".attribute2-select, .attribute2-selectBlank", optionsArray: attribute2Options});
|
||
|
||
await setAttrsAsync({"str_profession": 0,
|
||
"sta_profession": 0,
|
||
"agi_profession": 0,
|
||
"per_profession": 0,
|
||
"int_profession": 0,
|
||
"cha_profession": 0,
|
||
"wil_profession": 0});
|
||
|
||
await setAttrsAsync({[values.custom_attr1+"_profession"]: 1,
|
||
[values.custom_attr2+"_profession"]: 1});
|
||
|
||
await setAttributes();
|
||
await setCharacterInfo();
|
||
}
|
||
|
||
on ("change:custom_skill1 change:custom_skill2 change:custom_skill3 change:custom_skill4 change:custom_skill5", customSkillChanged);
|
||
|
||
async function customSkillChanged()
|
||
{
|
||
await resetSkills();
|
||
var values = await getAttrsAsync(["custom_skill1", "custom_skill2", "custom_skill3", "custom_skill4", "custom_skill5"]);
|
||
|
||
var skill1Options = structuredClone(customOptions);
|
||
var skill2Options = structuredClone(customOptions);
|
||
var skill3Options = structuredClone(customOptions);
|
||
var skill4Options = structuredClone(customOptions);
|
||
var skill5Options = structuredClone(customOptions);
|
||
|
||
skill1Options.splice(findIndex(skill1Options, values.custom_skill2), 1);
|
||
skill1Options.splice(findIndex(skill1Options, values.custom_skill3), 1);
|
||
skill1Options.splice(findIndex(skill1Options, values.custom_skill4), 1);
|
||
skill1Options.splice(findIndex(skill1Options, values.custom_skill5), 1);
|
||
|
||
skill2Options.splice(findIndex(skill2Options, values.custom_skill1), 1);
|
||
skill2Options.splice(findIndex(skill2Options, values.custom_skill3), 1);
|
||
skill2Options.splice(findIndex(skill2Options, values.custom_skill4), 1);
|
||
skill2Options.splice(findIndex(skill2Options, values.custom_skill5), 1);
|
||
|
||
skill3Options.splice(findIndex(skill3Options, values.custom_skill2), 1);
|
||
skill3Options.splice(findIndex(skill3Options, values.custom_skill1), 1);
|
||
skill3Options.splice(findIndex(skill3Options, values.custom_skill4), 1);
|
||
skill3Options.splice(findIndex(skill3Options, values.custom_skill5), 1);
|
||
|
||
skill4Options.splice(findIndex(skill4Options, values.custom_skill2), 1);
|
||
skill4Options.splice(findIndex(skill4Options, values.custom_skill3), 1);
|
||
skill4Options.splice(findIndex(skill4Options, values.custom_skill1), 1);
|
||
skill4Options.splice(findIndex(skill4Options, values.custom_skill5), 1);
|
||
|
||
skill5Options.splice(findIndex(skill5Options, values.custom_skill2), 1);
|
||
skill5Options.splice(findIndex(skill5Options, values.custom_skill3), 1);
|
||
skill5Options.splice(findIndex(skill5Options, values.custom_skill4), 1);
|
||
skill5Options.splice(findIndex(skill5Options, values.custom_skill1), 1);
|
||
|
||
selectOption(skill1Options, values.custom_skill1);
|
||
selectOption(skill2Options, values.custom_skill2);
|
||
selectOption(skill3Options, values.custom_skill3);
|
||
selectOption(skill4Options, values.custom_skill4);
|
||
selectOption(skill5Options, values.custom_skill5);
|
||
|
||
populateListOptions({elemSelector: ".skill1-select, .skill1-selectBlank", optionsArray: skill1Options});
|
||
populateListOptions({elemSelector: ".skill2-select, .skill2-selectBlank", optionsArray: skill2Options});
|
||
populateListOptions({elemSelector: ".skill3-select, .skill3-selectBlank", optionsArray: skill3Options});
|
||
populateListOptions({elemSelector: ".skill4-select, .skill4-selectBlank", optionsArray: skill4Options});
|
||
populateListOptions({elemSelector: ".skill5-select, .skill5-selectBlank", optionsArray: skill5Options});
|
||
|
||
await setAttrsAsync({[values.custom_skill1]: 2,
|
||
[values.custom_skill2]: 1,
|
||
[values.custom_skill3]: 1,
|
||
[values.custom_skill4]: 1,
|
||
[values.custom_skill5]: 1});
|
||
|
||
await setCharacterInfo();
|
||
}
|
||
|
||
|
||
on ("change:main_engineering", engineeringSelected);
|
||
|
||
async function engineeringSelected()
|
||
{
|
||
var values = await getAttrsAsync(["main_engineering"]);
|
||
|
||
console.log(JSON.stringify(values));
|
||
|
||
await setAttrsAsync({"robotics": 1,
|
||
"weapons_engineering": 1,
|
||
"vehicle_engineering": 1});
|
||
|
||
await setAttrsAsync({[values.main_engineering]: 2});
|
||
|
||
await setCharacterInfo();
|
||
}
|
||
|
||
//======================================================================
|
||
on ("change:custom_prof_name", setCustomProfName);
|
||
|
||
async function setCustomProfName(info)
|
||
{
|
||
if (info.sourceType == "player")
|
||
{
|
||
await setAttrsAsync({"profession": info.newValue});
|
||
}
|
||
}
|
||
|
||
async function resetSkills()
|
||
{
|
||
await setAttrsAsync({"bridge_tech": 0,
|
||
"mounted_weaponry": 0,
|
||
"pilot_spacecraft": 0,
|
||
"vehicle_engineering": 0,
|
||
"drive_ground_vehicle": 0,
|
||
"knowledge_corporate": 0,
|
||
"knowledge_planets": 0,
|
||
"pilot_aircraft": 0,
|
||
"knowledge_urban": 0,
|
||
"trade": 0,
|
||
"aim": 0,
|
||
"athletics": 0,
|
||
"endurance": 0,
|
||
"reaction": 0,
|
||
"melee": 0,
|
||
"throw": 0,
|
||
"notice": 0,
|
||
"hack_security": 0,
|
||
"search": 0,
|
||
"sleight_of_hand": 0,
|
||
"sneak": 0,
|
||
"astronomy": 0,
|
||
"computer_science": 0,
|
||
"medicine": 0,
|
||
"natural_sciences": 0,
|
||
"robotics": 0,
|
||
"weapons_engineering": 0,
|
||
"xenobiology": 0,
|
||
"convince": 0,
|
||
"deceive": 0,
|
||
"empathy": 0,
|
||
"intimidate": 0,
|
||
"lead": 0,
|
||
"hobby1": 0,
|
||
"hobby1_name": "",
|
||
"hobby1_name_disabler": 0});
|
||
}
|
||
|
||
on ("change:profession_select", setProfession);
|
||
|
||
async function setProfession()
|
||
{
|
||
await resetAttributePoints();
|
||
|
||
var values = await getAttrsAsync(["profession_select", "territory_select"]);
|
||
|
||
await resetSkills();
|
||
await setAttrsAsync({"str_profession": 0,
|
||
"sta_profession": 0,
|
||
"agi_profession": 0,
|
||
"per_profession": 0,
|
||
"int_profession": 0,
|
||
"cha_profession": 0,
|
||
"wil_profession": 0,
|
||
"scientist_options_hider": 1,
|
||
"engineer_options_hider": 1,
|
||
"custom_options_hider": 1,
|
||
"bridge_tech_bonus": 0,
|
||
"mounted_weaponry_bonus": 0,
|
||
"pilot_spacecraft_bonus": 0,
|
||
"vehicle_engineering_bonus": 0,
|
||
"drive_ground_vehicle_bonus": 0,
|
||
"knowledge_corporate_bonus": 0,
|
||
"knowledge_planets_bonus": 0,
|
||
"pilot_aircraft_bonus": 0,
|
||
"knowledge_urban_bonus": 0,
|
||
"trade_bonus": 0,
|
||
"aim_bonus": 0,
|
||
"athletics_bonus": 0,
|
||
"endurance_bonus": 0,
|
||
"reaction_bonus": 0,
|
||
"melee_bonus": 0,
|
||
"throw_bonus": 0,
|
||
"notice_bonus": 0,
|
||
"hack_security_bonus": 0,
|
||
"search_bonus": 0,
|
||
"sleight_of_hand_bonus": 0,
|
||
"sneak_bonus": 0,
|
||
"astronomy_bonus": 0,
|
||
"computer_science_bonus": 0,
|
||
"medicine_bonus": 0,
|
||
"natural_sciences_bonus": 0,
|
||
"robotics_bonus": 0,
|
||
"weapons_engineering_bonus": 0,
|
||
"xenobiology_bonus": 0,
|
||
"convince_bonus": 0,
|
||
"deceive_bonus": 0,
|
||
"empathy_bonus": 0,
|
||
"intimidate_bonus": 0,
|
||
"lead_bonus": 0,
|
||
"hobby1_bonus": 0});
|
||
|
||
var bonuses = [];
|
||
|
||
switch (values.profession_select)
|
||
{
|
||
case "soldier":
|
||
bonuses = ["agi", "per"];
|
||
await setAttrsAsync({ "aim": 2,
|
||
"athletics": 1,
|
||
"endurance": 1,
|
||
"lead": 1,
|
||
"medicine": 1,
|
||
"hobby1": 1,
|
||
"hobby1_name": "Gambling",
|
||
"hobby1_name_disabler": 1,
|
||
"profession": "Soldier"});
|
||
break;
|
||
|
||
case "law_enforcer":
|
||
bonuses = ["agi", "per"];
|
||
await setAttrsAsync({"notice": 2,
|
||
"drive_ground_vehicle": 1,
|
||
"aim": 1,
|
||
"melee": 1,
|
||
"knowledge_urban": 1,
|
||
"profession": "Law enforcer"});
|
||
break;
|
||
|
||
case "scientist":
|
||
bonuses = ["int", "wil"];
|
||
await setAttrsAsync({"notice": 1,
|
||
"knowledge_corporate": 1,
|
||
"scientist_options_hider": 0,
|
||
"convince": 1,
|
||
"profession": "Scientist"});
|
||
|
||
await scienceSelectChanged();
|
||
profession = "Scientist";
|
||
break;
|
||
|
||
case "doctor":
|
||
bonuses = ["agi", "int"];
|
||
await setAttrsAsync({"medicine": 2,
|
||
"empathy": 1,
|
||
"natural_sciences": 1,
|
||
"convince": 1,
|
||
"notice": 1,
|
||
"profession": "Doctor"});
|
||
break;
|
||
|
||
case "spy":
|
||
bonuses = ["cha", "per"];
|
||
await setAttrsAsync({"empathy": 2,
|
||
"convince": 1,
|
||
"deceive": 1,
|
||
"notice": 1,
|
||
"search": 1,
|
||
"profession": "Spy"});
|
||
break;
|
||
|
||
case "smuggler":
|
||
bonuses = ["agi", "cha"];
|
||
await setAttrsAsync({"deceive": 2,
|
||
"knowledge_planets": 1,
|
||
"knowledge_corporate": 1,
|
||
"pilot_spacecraft": 1,
|
||
"trade": 1,
|
||
"profession": "Smuggler"});
|
||
break;
|
||
|
||
case "thief":
|
||
bonuses = ["agi", "per"];
|
||
await setAttrsAsync({"sneak": 2,
|
||
"hack_security": 1,
|
||
"search": 1,
|
||
"knowledge_urban": 1,
|
||
"sleight_of_hand": 1,
|
||
"profession": "Thief"});
|
||
break;
|
||
|
||
case "swindler":
|
||
bonuses = ["cha", "per"];
|
||
await setAttrsAsync({"deceive": 2,
|
||
"convince": 1,
|
||
"empathy": 1,
|
||
"knowledge_urban": 1,
|
||
"sleight_of_hand": 1,
|
||
"profession": "Swindler"});
|
||
break;
|
||
|
||
case "pilot":
|
||
bonuses = ["agi", "per"];
|
||
await setAttrsAsync({"pilot_spacecraft": 2,
|
||
"astronomy": 1,
|
||
"vehicle_engineering": 1,
|
||
"notice": 1,
|
||
"pilot_aircraft": 1,
|
||
"profession": "Pilot"});
|
||
break;
|
||
|
||
case "engineer":
|
||
bonuses = ["agi", "int"];
|
||
await setAttrsAsync({"computer_science": 1,
|
||
"engineer_options_hider": 0,
|
||
"natural_sciences": 1,
|
||
"profession": "Engineer"});
|
||
|
||
await engineeringSelected();
|
||
profession = "Engineer";
|
||
break;
|
||
|
||
case "trader":
|
||
bonuses = ["cha", "int"];
|
||
await setAttrsAsync({"trade": 2,
|
||
"empathy": 1,
|
||
"notice": 1,
|
||
"knowledge_planets": 1,
|
||
"knowledge_urban": 1,
|
||
"profession": "Trader"});
|
||
break;
|
||
|
||
case "astronaut":
|
||
bonuses = ["sta", "int"];
|
||
await setAttrsAsync({"bridge_tech": 2,
|
||
"astronomy": 1,
|
||
"endurance": 1,
|
||
"vehicle_engineering": 1,
|
||
"knowledge_planets": 1,
|
||
"profession": "Astronaut"});
|
||
break;
|
||
|
||
case "socialite":
|
||
bonuses = ["cha", "wil"];
|
||
await setAttrsAsync({"empathy": 2,
|
||
"convince": 1,
|
||
"lead": 1,
|
||
"knowledge_urban": 1,
|
||
"deceive": 1,
|
||
"profession": "Socialite"});
|
||
break;
|
||
|
||
case "hacker":
|
||
bonuses = ["int", "per"];
|
||
await setAttrsAsync({"computer_science": 2,
|
||
"knowledge_corporate": 1,
|
||
"trade": 1,
|
||
"deceive": 1,
|
||
"robotics": 1,
|
||
"profession": "Hacker"});
|
||
break;
|
||
|
||
case "custom":
|
||
profession = "Custom";
|
||
await setAttrsAsync({"custom_options_hider": 0});
|
||
await attributeSelectChanged();
|
||
await customSkillChanged();
|
||
break;
|
||
}
|
||
|
||
if (bonuses.length > 1)
|
||
{
|
||
await setAttrsAsync({[bonuses[0]+"_profession"]: 1,
|
||
[bonuses[1]+"_profession"]: 1});
|
||
await setAttributes();
|
||
}
|
||
|
||
var values2 = await getAttrsAsync(["aim", "melee", "reaction"]);
|
||
if (values.territory_select.toLowerCase() == "tatsuba")
|
||
{
|
||
await setAttrsAsync({"aim": (Number(values2.aim) + 2) + "",
|
||
"reaction": (Number(values2.reaction) + 1) + "",
|
||
"melee": (Number(values2.melee) + 1) + ""});
|
||
}
|
||
|
||
setCharacterInfo();
|
||
}
|
||
|
||
var profession;
|
||
|
||
on ("change:social_class_select", setSocialClass);
|
||
|
||
async function setSocialClass()
|
||
{
|
||
await resetAttributePoints();
|
||
await setAttrsAsync({"str_social": 0,
|
||
"sta_social": 0,
|
||
"agi_social": 0,
|
||
"per_social": 0,
|
||
"int_social": 0,
|
||
"cha_social": 0,
|
||
"wil_social": 0});
|
||
var values = await getAttrsAsync(["social_class_select"]);
|
||
|
||
var bonuses = [];
|
||
|
||
switch (values.social_class_select)
|
||
{
|
||
case "wretch":
|
||
bonuses = ["sta", "wil"];
|
||
await setAttrsAsync({"social_class": "Wretch"});
|
||
break;
|
||
case "middle_class":
|
||
bonuses = ["str", "int"];
|
||
await setAttrsAsync({"social_class": "Middle Class"});
|
||
break;
|
||
case "low_corporate":
|
||
bonuses = ["cha", "agi"];
|
||
await setAttrsAsync({"social_class": "Low Corporate"});
|
||
break;
|
||
}
|
||
|
||
await setAttrsAsync({[bonuses[0]+"_social"]: 1,
|
||
[bonuses[1]+"_social"]: 1});
|
||
|
||
await setAttributes();
|
||
setCharacterInfo();
|
||
}
|
||
|
||
//==========================================================================
|
||
on ("change:planet_select", setBirthplace);
|
||
|
||
async function setBirthplace()
|
||
{
|
||
await resetAttributePoints();
|
||
await setAttrsAsync({"str_planet": 0,
|
||
"sta_planet": 0,
|
||
"agi_planet": 0,
|
||
"per_planet": 0,
|
||
"int_planet": 0,
|
||
"cha_planet": 0,
|
||
"wil_planet": 0});
|
||
var values = await getAttrsAsync(["planet_select"]);
|
||
|
||
var bonuses = [];
|
||
|
||
switch (values.planet_select)
|
||
{
|
||
case "a":
|
||
bonuses = ["per", "cha"];
|
||
await setAttrsAsync({"planet": "Class A"});
|
||
break;
|
||
case "b":
|
||
bonuses = ["agi", "int"];
|
||
await setAttrsAsync({"planet": "Class B"});
|
||
break;
|
||
case "c":
|
||
bonuses = ["per", "agi"];
|
||
await setAttrsAsync({"planet": "Class C"});
|
||
break;
|
||
case "d":
|
||
bonuses = ["str", "sta"];
|
||
await setAttrsAsync({"planet": "Class D"});
|
||
break;
|
||
case "e":
|
||
bonuses = ["str", "wil"];
|
||
await setAttrsAsync({"planet": "Class E"});
|
||
break;
|
||
case "f":
|
||
bonuses = ["int", "wil"];
|
||
await setAttrsAsync({"planet": "Space station"});
|
||
break;
|
||
}
|
||
|
||
await setAttrsAsync({[bonuses[0]+"_planet"]: 1,
|
||
[bonuses[1]+"_planet"]: 1});
|
||
|
||
await setAttributes();
|
||
setCharacterInfo();
|
||
}
|
||
|
||
//=======================================================================
|
||
on ("change:hp", setPainFromDamage);
|
||
|
||
async function setPainFromDamage(info)
|
||
{
|
||
console.log("HP changed, setting pain.");
|
||
if (await sanitizeNumberInput(info, false))
|
||
{
|
||
return;
|
||
}
|
||
var values = await getAttrsAsync(["hp", "max_hp"]);
|
||
|
||
var hp = parseInt(values.hp);
|
||
var maxHp = parseInt(values.max_hp);
|
||
|
||
if (hp > maxHp)
|
||
{
|
||
hp = maxHp;
|
||
await setAttrsAsync({"hp": maxHp});
|
||
}
|
||
|
||
var modGroup = Math.ceil((maxHp - hp)/parseFloat(maxHp/5));
|
||
await setAttrsAsync({"pain_from_damage": -2 * modGroup});
|
||
}
|
||
|
||
//========================================================================
|
||
|
||
on ("sheet:opened", init);
|
||
on ("change:sta", setMaxHP);
|
||
on ("change:total_xp change:spent_xp change:advantage_xp change:resource_xp change:background_xp", setXP);
|
||
on ("change:bought_hp", hpBought);
|
||
|
||
async function hpBought()
|
||
{
|
||
console.log("hpBought");
|
||
await setXP();
|
||
await setMaxHP();
|
||
}
|
||
|
||
async function init()
|
||
{
|
||
await log("Sheet opened.");
|
||
var values = await getAttrsAsync(["cc1_prompt_hider"]);
|
||
var xpInfo = await getXPData();;
|
||
if (values.cc1_prompt_hider == "0")
|
||
{
|
||
setTerritory();
|
||
setBirthplace();
|
||
setSocialClass();
|
||
await setAttrsAsync({"cc_bridge_tech_talent": 0,
|
||
"cc_mounted_weaponry_talent": 0,
|
||
"cc_pilot_spacecraft_talent": 0,
|
||
"cc_vehicle_engineering_talent": 0,
|
||
"cc_drive_ground_vehicle_talent": 0,
|
||
"cc_knowledge_corporate_talent": 0,
|
||
"cc_knowledge_planets_talent": 0,
|
||
"cc_knowledge_urban_talent": 0,
|
||
"cc_pilot_aircraft_talent": 0,
|
||
"cc_trade_talent": 0,
|
||
"cc_aim_talent": 0,
|
||
"cc_athletics_talent": 0,
|
||
"cc_endurance_talent": 0,
|
||
"cc_melee_talent": 0,
|
||
"cc_reaction_talent": 0,
|
||
"cc_throw_talent": 0,
|
||
"cc_notice_talent": 0,
|
||
"cc_hack_security_talent": 0,
|
||
"cc_search_talent": 0,
|
||
"cc_sleight_of_hand_talent": 0,
|
||
"cc_sneak_talent": 0,
|
||
"cc_astronomy_talent": 0,
|
||
"cc_computer_science_talent": 0,
|
||
"cc_medicine_talent": 0,
|
||
"cc_natural_sciences_talent": 0,
|
||
"cc_robotics_talent": 0,
|
||
"cc_weapons_engineering_talent": 0,
|
||
"cc_xenobiology_talent": 0,
|
||
"cc_convince_talent": 0,
|
||
"cc_deceive_talent": 0,
|
||
"cc_empathy_talent": 0,
|
||
"cc_intimidate_talent": 0,
|
||
"cc_lead_talent": 0});
|
||
}
|
||
|
||
await setAttrsAsync({"attribute_prompt_hider": 1,
|
||
"skill_prompt_hider": 1,
|
||
"roll_prompt_hider": 1,
|
||
"attribute_roll_prompt_hider": 1,
|
||
"shoot_prompt_hider": 1,
|
||
"hp_prompt_hider": 1,
|
||
"damage_prompt_hider": 1});
|
||
|
||
//var values2 = await getAttrsAsync(["shoot_prompt_hider"]);
|
||
//console.log("Sheet init complete.\n" + JSON.stringify(values2));
|
||
}
|
||
|
||
function isInteger(value)
|
||
{
|
||
return Number(value) != NaN;
|
||
}
|
||
|
||
async function setXP()
|
||
{
|
||
console.log("Setting XP");
|
||
var values = await getAttrsAsync(["total_xp", "spent_xp", "bought_hp", "advantage_xp", "resource_xp", "background_xp"]);
|
||
|
||
console.log("Values in setXP: " + JSON.stringify(values));
|
||
|
||
let totalXp = Number(values.total_xp);
|
||
let skillXp = Number(values.spent_xp);
|
||
let hpXp = Number(values.bought_hp) * 50;
|
||
let advantageXp = Number(values.advantage_xp);
|
||
let resourceXp = Number(values.resource_xp);
|
||
let backgroundXp = Number(values.background_xp);
|
||
await setAttrsAsync({"xp": totalXp - (skillXp + hpXp + advantageXp + resourceXp + backgroundXp)});
|
||
}
|
||
|
||
async function setMaxHP()
|
||
{
|
||
var values = await getAttrsAsync(["bought_hp", "sta", "cc2_prompt_hider", "cc1_prompt_hider"]);
|
||
|
||
let ccMode = values.character_creation_mode == "on";
|
||
let bought = parseInt(values.bought_hp);
|
||
let stamina = parseInt(values.sta);
|
||
|
||
await setAttrsAsync({"max_hp": (bought * 5 + stamina * 5)});
|
||
if (values.cc2_prompt_hider == "0" ||
|
||
values.cc1_prompt_hider == "0")
|
||
{
|
||
await setAttrsAsync({"hp": (bought * 5 + stamina * 5)});
|
||
}
|
||
await log("Hp set");
|
||
}
|
||
|
||
//========================================================================
|
||
|
||
on ("change:territory_select", setTerritory);
|
||
|
||
async function setTerritory()
|
||
{
|
||
await resetAttributePoints();
|
||
await setProfession();
|
||
await setAttrsAsync({"str_territory": 0,
|
||
"sta_territory": 0,
|
||
"agi_territory": 0,
|
||
"per_territory": 0,
|
||
"int_territory": 0,
|
||
"cha_territory": 0,
|
||
"wil_territory": 0,
|
||
"gavadai_options_hider": 1,
|
||
"gt_options_hider": 1,
|
||
"saturnada_options_hider": 1,
|
||
"zaidong_options_hider": 1});
|
||
|
||
values = await getAttrsAsync(["territory_select"]);
|
||
|
||
var territory = values.territory_select;
|
||
|
||
var bonuses = [];
|
||
|
||
switch (territory)
|
||
{
|
||
case "gavadai":
|
||
bonuses = ["str", "sta", "wil"];
|
||
await setAttrsAsync({"territory": "Gavadai",
|
||
"language1_name": "Syndicate English",
|
||
"language1": 3,
|
||
"language2_name": "Russian",
|
||
"language2_name_disabler": 1,
|
||
"language2": 5,
|
||
"gavadai_options_hider": 0,
|
||
"talent": 3});
|
||
break;
|
||
case "gt":
|
||
bonuses = ["int", "per", "wil"];
|
||
await setAttrsAsync({"territory": "GT",
|
||
"language1_name": "Syndicate English",
|
||
"language1": 5,
|
||
"language2_name_disabler": 0,
|
||
"language2_name": " ",
|
||
"language2": 0,
|
||
"gt_options_hider": 0,
|
||
"talent": 3});
|
||
break;
|
||
case "omkinara":
|
||
bonuses = ["int", "agi", "cha"];
|
||
await setAttrsAsync({"territory": "Omkinara",
|
||
"language1_name": "Syndicate English",
|
||
"language1": 5,
|
||
"language2_name": "Hindi",
|
||
"language2_name_disabler": 1,
|
||
"language2": 5,
|
||
"talent": 5});
|
||
break;
|
||
case "saturnada":
|
||
bonuses = ["sta", "per", "wil"];
|
||
await setAttrsAsync({"territory": "Saturnada",
|
||
"language1_name": "Syndicate English",
|
||
"language1": 3,
|
||
"language2_name": "Spanish",
|
||
"language2_name_disabler": 1,
|
||
"language2": 5,
|
||
"saturnada_options_hider": 0,
|
||
"talent": 3});
|
||
break;
|
||
case "syndeel":
|
||
bonuses = ["int", "cha", "agi"];
|
||
await setAttrsAsync({"territory": "Syndeel",
|
||
"language1_name": "Syndicate English",
|
||
"language1": 5,
|
||
"language2_name": "Neurocode",
|
||
"language2_name_disabler": 1,
|
||
"language2": 5,
|
||
"talent": 3});
|
||
break;
|
||
case "tatsuba":
|
||
bonuses = ["cha", "per", "str"];
|
||
await setAttrsAsync({"territory": "Tatsuba",
|
||
"language1_name": "Syndicate English",
|
||
"language1": 3,
|
||
"language2_name": "Japanese",
|
||
"language2_name_disabler": 1,
|
||
"language2": 5,
|
||
"talent": 3});
|
||
|
||
var tatsubaSkills = await getAttrsAsync(["aim", "melee", "reaction"]);
|
||
await setAttrsAsync({"aim": Number(tatsubaSkills.aim)+2,
|
||
"melee": Number(tatsubaSkills.melee)+1,
|
||
"reaction": Number(tatsubaSkills.reaction)+1});
|
||
break;
|
||
case "zaidong":
|
||
bonuses = ["sta", "str", "agi"];
|
||
await setAttrsAsync({"territory": "Zaidong",
|
||
"language1_name": "Syndicate English",
|
||
"language1": 3,
|
||
"language2_name": "Syndicate Chinese",
|
||
"language2_name_disabler": 1,
|
||
"language2": 5,
|
||
"zaidong_options_hider": 0});
|
||
break;
|
||
case "imperial":
|
||
bonuses = ["wil", "per", "agi"];
|
||
await setAttrsAsync({"territory": "Imperial renegade",
|
||
"language1_name": "Imperial Chinese",
|
||
"language1": 5,
|
||
"language2_name_disabler": 0,
|
||
"language2_name": " ",
|
||
"language2": 0});
|
||
break;
|
||
case "alliance":
|
||
bonuses = ["int", "cha", "sta"];
|
||
await setAttrsAsync({"territory": "Alliance renegade",
|
||
"language1_name": "Alliance English",
|
||
"language1": 5,
|
||
"language2_name_disabler": 0,
|
||
"language2_name": " ",
|
||
"language2": 0});
|
||
break;
|
||
case "pirate":
|
||
bonuses = ["wil", "str", "int"];
|
||
await setAttrsAsync({"territory": "Pirate renegade",
|
||
"language1_name": "Freedomese",
|
||
"language1": 5,
|
||
"language2_name_disabler": 0,
|
||
"language2_name": " ",
|
||
"language2": 0});
|
||
break;
|
||
}
|
||
|
||
await setAttrsAsync({[bonuses[0] + "_territory"]: 1,
|
||
[bonuses[1] + "_territory"]: 1,
|
||
[bonuses[2] + "_territory"]: 1});
|
||
|
||
if (territory == "gavadai")
|
||
{
|
||
values2 = await getAttrsAsync(["gavadai_attribute1", "gavadai_attribute2"]);
|
||
var ga1 = values2.gavadai_attribute1;
|
||
var ga2 = values2.gavadai_attribute2;
|
||
|
||
values3 = await getAttrsAsync([ga1+"_territory", ga2+"_territory"]);
|
||
var option_attribute1 = Number(values3[ga1+"_territory"]);
|
||
var option_attribute2 = Number(values3[ga2+"_territory"]);
|
||
|
||
await setAttrsAsync({[ga1+"_territory"]: option_attribute1 + 1,
|
||
[ga2+"_territory"]: option_attribute2 + 1});
|
||
}
|
||
|
||
await setAttributes();
|
||
setCharacterInfo();
|
||
}
|
||
|
||
async function resetAttributePoints()
|
||
{
|
||
var values = await getAttrsAsync(["str_cc", "sta_cc", "agi_cc", "per_cc",
|
||
"int_cc", "cha_cc", "wil_cc"]);
|
||
|
||
var strBonus = Number(values.str_cc);
|
||
var staBonus = Number(values.sta_cc);
|
||
var agiBonus = Number(values.agi_cc);
|
||
var perBonus = Number(values.per_cc);
|
||
var intBonus = Number(values.int_cc);
|
||
var chaBonus = Number(values.cha_cc);
|
||
var wilBonus = Number(values.wil_cc);
|
||
|
||
await setAttributes();
|
||
|
||
var xpInfo = await getXPData();
|
||
console.log(xpInfo);
|
||
|
||
await setAttrsAsync({"cc_points": xpInfo.maxAttrPoints,
|
||
"str_cc": 0,
|
||
"sta_cc": 0,
|
||
"agi_cc": 0,
|
||
"per_cc": 0,
|
||
"cha_cc": 0,
|
||
"int_cc": 0,
|
||
"wil_cc": 0});
|
||
}
|
||
|
||
//orcsAsync by onyxRing
|
||
//https://github.com/onyxring/orcsAsync/blob/master/orcsAsync.js
|
||
|
||
function isRunningOnServer()
|
||
{
|
||
return self.dispatchEvent == undefined;
|
||
}
|
||
|
||
function setActiveCharacterId(charId)
|
||
{
|
||
var oldAcid=getActiveCharacterId();
|
||
var msg={"id":"0", "type":"setActiveCharacter", "data":charId};
|
||
|
||
if(isRunningOnServer()==false)
|
||
{ //if in a browser, use "dispatchEvent" to process the message
|
||
var ev = new CustomEvent("message");
|
||
ev.data=msg;
|
||
self.dispatchEvent(ev);
|
||
}
|
||
else
|
||
{ //otherwise, use the API (server) message processor, "onmessage"
|
||
self.onmessage({data:msg});
|
||
}
|
||
return oldAcid; //return what the value used to be, so calling code can be a little cleaner
|
||
}
|
||
|
||
var _sIn=setInterval;
|
||
setInterval=function(callback, timeout)
|
||
{
|
||
var acid=getActiveCharacterId();
|
||
_sIn(function()
|
||
{
|
||
var prevAcid=setActiveCharacterId(acid);
|
||
callback();
|
||
setActiveCharacterId(prevAcid);
|
||
}, timeout);
|
||
}
|
||
var _sto=setTimeout
|
||
setTimeout=function(callback, timeout){
|
||
var acid=getActiveCharacterId();
|
||
_sto(function()
|
||
{
|
||
var prevAcid=setActiveCharacterId(acid);
|
||
callback();
|
||
setActiveCharacterId(prevAcid);
|
||
}, timeout);
|
||
}
|
||
|
||
function getAttrsAsync(props)
|
||
{
|
||
var acid=getActiveCharacterId(); //save the current activeCharacterID in case it has changed when the promise runs
|
||
var prevAcid=null; //local variable defined here, because it needs to be shared across the promise callbacks defined below
|
||
return new Promise((resolve,reject)=>
|
||
{
|
||
prevAcid=setActiveCharacterId(acid); //in case the activeCharacterId has changed, restore it to what we were expecting and save the current value to restore later
|
||
try
|
||
{
|
||
getAttrs(props,(values)=>{ resolve(values); });
|
||
}
|
||
catch
|
||
{
|
||
reject();
|
||
}
|
||
}).finally(()=>
|
||
{
|
||
setActiveCharacterId(prevAcid); //restore activeCharcterId to what it was when the promise first ran
|
||
});
|
||
}
|
||
|
||
//use the same pattern for each of the following...
|
||
function setAttrsAsync(propObj, options){
|
||
var acid=getActiveCharacterId();
|
||
var prevAcid=null;
|
||
return new Promise((resolve,reject)=>{
|
||
prevAcid=setActiveCharacterId(acid);
|
||
try{
|
||
setAttrs(propObj,options,(values)=>{ resolve(values); });
|
||
}
|
||
catch{ reject(); }
|
||
}).finally(()=>{
|
||
setActiveCharacterId(prevAcid);
|
||
});
|
||
}
|
||
|
||
function getSectionIDsAsync(sectionName){
|
||
var acid = getActiveCharacterId();
|
||
var prevAcid=null;
|
||
return new Promise((resolve,reject)=>{
|
||
prevAcid = setActiveCharacterId(acid);
|
||
try{
|
||
getSectionIDs(sectionName,(values)=>{ resolve(values); });
|
||
}
|
||
catch{ reject(); }
|
||
}).finally(()=>{
|
||
setActiveCharacterId(prevAcid);
|
||
});
|
||
}
|
||
</script>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-li-roll">
|
||
<div class="sheet-template-container">
|
||
<span class="sheet-rolltemplate-li-roll-bold">{{name}}</span><span class="sheet-rolltemplate-li-roll-label">{{title}}{{roll1}}</span>
|
||
</div>
|
||
</rolltemplate>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-hi-roll">
|
||
<div class="sheet-template-container">
|
||
<div class="sheet-rolltemplate-hi-roll-label">
|
||
<span class="sheet-rolltemplate-hi-roll-bold">{{name}}</span><span class="sheet-rolltemplate-hi-roll-label">{{title}}{{roll1}}</span>
|
||
</div>
|
||
</div>
|
||
</rolltemplate>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-li-assist">
|
||
<div class="sheet-template-container">
|
||
<span class="sheet-rolltemplate-li-roll-bold">{{name}}</span><span class="sheet-rolltemplate-li-roll-label">{{title}}{{computed::roll1}}</span>
|
||
</div>
|
||
</rolltemplate>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-hi-assist">
|
||
<div class="sheet-template-container">
|
||
<div class="sheet-rolltemplate-hi-roll-label">
|
||
<span class="sheet-rolltemplate-hi-roll-bold">{{name}}</span><span class="sheet-rolltemplate-hi-roll-label">{{title}}{{computed::roll1}}</span>
|
||
</div>
|
||
</div>
|
||
</rolltemplate>
|
||
|
||
<input type="hidden" name="attr_skill_difficulty_offset" value="2">
|
||
<input type="hidden" name="attr_attribute_cost" value="15">
|
||
<input type="hidden" name="attr_max_attribute_points" value="18">
|
||
<input type="hidden" name="attr_cc_skill_xp" value="100">
|
||
<div align="center">
|
||
<div width="800" class="grid0 table">
|
||
<span style="grid-row: 1; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
<button type="action" name="act_switch_to_character" class="tabButton" value="">Character</button>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 1; grid-column: 2;" class="cell">
|
||
<div align="center">
|
||
<button type="action" name="act_switch_to_gear" class="tabButton">Gear</button>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 1; grid-column: 3;" class="cell">
|
||
<div align="center">
|
||
<button type="action" name="act_switch_to_notes" class="tabButton">Notes</button>
|
||
</div>
|
||
</span>
|
||
</div>
|
||
</div>
|
||
|
||
<input type="hidden" name="attr_spent_xp" value="0">
|
||
|
||
<input type="hidden" name="attr_cc2_prompt_hider" class="hide-cc2-prompt" value="1">
|
||
<div id="cc2_prompt" class="prompt cc2-prompt-hide">
|
||
<div width="900" class="grid1 table">
|
||
<span colspan="2" style="grid-row: 1; grid-column: 1 / span 2;" class="cell">
|
||
<div class="title1" align="center">
|
||
Character Creation - Step 2
|
||
</div>
|
||
</span>
|
||
<span width="45%" style="grid-row: 2; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
<div class="grid2 table">
|
||
<span colspan="4" style="grid-row: 1; grid-column: 1 / span 4;" class="cell">
|
||
Increase Attributes
|
||
</span>
|
||
<span colspan="3" style="grid-row: 2; grid-column: 1 / span 3;" class="cell">
|
||
Points
|
||
</span>
|
||
<span style="grid-row: 2; grid-column: 4;" class="cell">
|
||
<div align="right">
|
||
<input type="text" name="attr_cc_points" value="18" id="num" readonly>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 1;" class="cell">
|
||
Strength
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_str" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 3;" class="cell">
|
||
<button name="act_str_up" type="action" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 4;" class="cell">
|
||
<button name="act_str_down" type="action" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 1;" class="cell">
|
||
Stamina
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_sta" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 3;" class="cell">
|
||
<button name="act_sta_up" type="action" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 4;" class="cell">
|
||
<button name="act_sta_down" type="action" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 5; grid-column: 1;" class="cell">
|
||
Agility
|
||
</span>
|
||
<span style="grid-row: 5; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_agi" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 5; grid-column: 3;" class="cell">
|
||
<button name="act_agi_up" type="action" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 5; grid-column: 4;" class="cell">
|
||
<button name="act_agi_down" type="action" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 6; grid-column: 1;" class="cell">
|
||
Perception
|
||
</span>
|
||
<span style="grid-row: 6; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_per" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 6; grid-column: 3;" class="cell">
|
||
<button name="act_per_up" type="action" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 6; grid-column: 4;" class="cell">
|
||
<button name="act_per_down" type="action" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 7; grid-column: 1;" class="cell">
|
||
Intelligence
|
||
</span>
|
||
<span style="grid-row: 7; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_int" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 7; grid-column: 3;" class="cell">
|
||
<button name="act_int_up" type="action" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 7; grid-column: 4;" class="cell">
|
||
<button name="act_int_down" type="action" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 8; grid-column: 1;" class="cell">
|
||
Charisma
|
||
</span>
|
||
<span style="grid-row: 8; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_cha" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 8; grid-column: 3;" class="cell">
|
||
<button name="act_cha_up" type="action" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 8; grid-column: 4;" class="cell">
|
||
<button name="act_cha_down" type="action" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 9; grid-column: 1;" class="cell">
|
||
Willpower
|
||
</span>
|
||
<span style="grid-row: 9; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_wil" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 9; grid-column: 3;" class="cell">
|
||
<button name="act_wil_up" type="action" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 9; grid-column: 4;" class="cell">
|
||
<button name="act_wil_down" type="action" class="levelDownButton"/>
|
||
</span>
|
||
</div>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 2; grid-column: 2;" class="cell">
|
||
<div align="center" style="overflow: auto;width: 450px;height: 305px;">
|
||
<div class="grid3 table">
|
||
<span colspan="5" style="grid-row: 1; grid-column: 1 / span 5;" class="cell">
|
||
<div align="center">
|
||
<br>
|
||
Raise skills
|
||
</div>
|
||
</span>
|
||
<span colspan="3" style="grid-row: 2; grid-column: 1 / span 3;" class="cell">
|
||
XP:
|
||
</span>
|
||
<span colspan="2" style="grid-row: 2; grid-column: 4 / span 2;" class="cell">
|
||
<div align="right">
|
||
<input id="num" type="text" name="attr_xp" readonly>
|
||
</div>
|
||
</span>
|
||
<span colspan="3" style="grid-row: 3; grid-column: 1 / span 3;" class="cell">
|
||
Talent points:
|
||
</span>
|
||
<span colspan="2" style="grid-row: 3; grid-column: 4 / span 2;" class="cell">
|
||
<div align="right">
|
||
<input type="hidden" name="attr_planet_talent_spent" value="0">
|
||
<input type="hidden" name="attr_talent" value="3">
|
||
<input id="num" type="text" name="attr_talent" readonly>
|
||
</div>
|
||
</span>
|
||
<span colspan="5" style="grid-row: 4; grid-column: 1 / span 5;" class="cell">
|
||
<div align="center">
|
||
Astronomics <span class="small-font" name="attr_astronomics"/>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 5; grid-column: 1;" class="cell">
|
||
Bridge Technology (<span name="attr_cc_bridge_tech_diff">5</span>)
|
||
</span>
|
||
<span style="grid-row: 5; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_bridge_tech" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 5; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_bridge_tech_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 5; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_bridge_tech_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 5; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_bridge_tech_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 6; grid-column: 1;" class="cell">
|
||
Mounted Weaponry (<span name="attr_cc_mounted_weaponry_diff">5</span>)
|
||
</span>
|
||
<span style="grid-row: 6; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_mounted_weaponry" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 6; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_mounted_weaponry_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 6; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_mounted_weaponry_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 6; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_mounted_weaponry_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 7; grid-column: 1;" class="cell">
|
||
Pilot Spacecraft (<span name="attr_cc_pilot_spacecraft_diff">5</span>)
|
||
</span>
|
||
<span style="grid-row: 7; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_pilot_spacecraft" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 7; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_pilot_spacecraft_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 7; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_pilot_spacecraft_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 7; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_pilot_spacecraft_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 8; grid-column: 1;" class="cell">
|
||
Vehicle Engineering (<span name="attr_cc_vehicle_engineering_diff">5</span>)
|
||
</span>
|
||
<span style="grid-row: 8; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_vehicle_engineering" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 8; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_vehicle_engineering_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 8; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_vehicle_engineering_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 8; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_vehicle_engineering_talent" value="0" id="num">
|
||
</span>
|
||
<span colspan="5" style="grid-row: 9; grid-column: 1 / span 5;" class="cell">
|
||
<div align="center">
|
||
Civilizational <span class="small-font" name="attr_civilizational"/>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 10; grid-column: 1;" class="cell">
|
||
Drive Ground Vehicle (<span name="attr_cc_drive_ground_vehicle_diff">3</span>)
|
||
</span>
|
||
<span style="grid-row: 10; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_drive_ground_vehicle" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 10; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_drive_ground_vehicle_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 10; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_drive_ground_vehicle_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 10; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_drive_ground_vehicle_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 11; grid-column: 1;" class="cell">
|
||
Knowledge (Corporate) (<span name="attr_cc_knowledge_corporate_diff">4</span>)
|
||
</span>
|
||
<span style="grid-row: 11; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_knowledge_corporate" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 11; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_knowledge_corporate_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 11; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_knowledge_corporate_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 11; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_knowledge_corporate_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 12; grid-column: 1;" class="cell">
|
||
Knowledge (Planets) (<span name="attr_cc_knowledge_planets_diff">5</span>)
|
||
</span>
|
||
<span style="grid-row: 12; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_knowledge_planets" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 12; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_knowledge_planets_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 12; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_knowledge_planets_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 12; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_knowledge_planets_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 13; grid-column: 1;" class="cell">
|
||
Knowledge (Urban) (<span name="attr_cc_knowledge_urban_diff">4</span>)
|
||
</span>
|
||
<span style="grid-row: 13; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_knowledge_urban" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 13; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_knowledge_urban_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 13; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_knowledge_urban_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 13; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_knowledge_urban_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 14; grid-column: 1;" class="cell">
|
||
Pilot Aircraft (<span name="attr_cc_pilot_aircraft_diff">5</span>)
|
||
</span>
|
||
<span style="grid-row: 14; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_pilot_aircraft" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 14; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_pilot_aircraft_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 14; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_pilot_aircraft_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 14; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_pilot_aircraft_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 15; grid-column: 1;" class="cell">
|
||
Trade (<span name="attr_cc_trade_diff">4</span>)
|
||
</span>
|
||
<span style="grid-row: 15; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_trade" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 15; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_trade_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 15; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_trade_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 15; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_trade_talent" value="0" id="num">
|
||
</span>
|
||
<span colspan="5" style="grid-row: 16; grid-column: 1 / span 5;" class="cell">
|
||
<div align="center">
|
||
Combat <span class="small-font" name="attr_combat"/>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 17; grid-column: 1;" class="cell">
|
||
Aim (<span name="attr_cc_aim_diff">5</span>)
|
||
</span>
|
||
<span style="grid-row: 17; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_aim" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 17; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_aim_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 17; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_aim_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 17; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_aim_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 18; grid-column: 1;" class="cell">
|
||
Athletics (<span name="attr_cc_athletics_diff">3</span>)
|
||
</span>
|
||
<span style="grid-row: 18; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_athletics" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 18; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_athletics_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 18; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_athletics_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 18; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_athletics_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 19; grid-column: 1;" class="cell">
|
||
Endurance (<span name="attr_cc_endurance_diff">4</span>)
|
||
</span>
|
||
<span style="grid-row: 19; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_endurance" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 19; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_endurance_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 19; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_endurance_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 19; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_endurance_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 20; grid-column: 1;" class="cell">
|
||
Melee (<span name="attr_cc_melee_diff">6</span>)
|
||
</span>
|
||
<span style="grid-row: 20; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_melee" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 20; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_melee_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 20; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_melee_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 20; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_melee_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 21; grid-column: 1;" class="cell">
|
||
Reaction (<span name="attr_cc_reaction_diff">4</span>)
|
||
</span>
|
||
<span style="grid-row: 21; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_reaction" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 21; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_reaction_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 21; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_reaction_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 21; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_reaction_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 22; grid-column: 1;" class="cell">
|
||
Throw (<span name="attr_cc_throw_diff">3</span>)
|
||
</span>
|
||
<span style="grid-row: 22; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_throw" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 22; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_throw_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 22; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_throw_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 22; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_throw_talent" value="0" id="num">
|
||
</span>
|
||
<span colspan="5" style="grid-row: 23; grid-column: 1 / span 5;" class="cell">
|
||
<div align="center">
|
||
Infiltration <span class="small-font" name="attr_infiltration"/>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 24; grid-column: 1;" class="cell">
|
||
Notice (<span name="attr_cc_notice_diff">5</span>)
|
||
</span>
|
||
<span style="grid-row: 24; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_notice" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 24; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_notice_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 24; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_notice_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 24; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_notice_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 25; grid-column: 1;" class="cell">
|
||
Hack Security (<span name="attr_cc_hack_security_diff">4</span>)
|
||
</span>
|
||
<span style="grid-row: 25; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_hack_security" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 25; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_hack_security_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 25; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_hack_security_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 25; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_hack_security_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 26; grid-column: 1;" class="cell">
|
||
Search (<span name="attr_cc_search_diff">3</span>)
|
||
</span>
|
||
<span style="grid-row: 26; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_search" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 26; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_search_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 26; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_search_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 26; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_search_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 27; grid-column: 1;" class="cell">
|
||
Sleight of Hand (<span name="attr_cc_sleight_of_hand_diff">6</span>)
|
||
</span>
|
||
<span style="grid-row: 27; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_sleight_of_hand" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 27; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_sleight_of_hand_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 27; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_sleight_of_hand_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 27; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_sleight_of_hand_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 28; grid-column: 1;" class="cell">
|
||
Sneak (<span name="attr_cc_sneak_diff">5</span>)
|
||
</span>
|
||
<span style="grid-row: 28; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_sneak" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 28; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_sneak_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 28; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_sneak_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 28; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_sneak_talent" value="0" id="num">
|
||
</span>
|
||
<span colspan="5" style="grid-row: 29; grid-column: 1 / span 5;" class="cell">
|
||
<div align="center">
|
||
Science <span class="small-font" name="attr_science"/>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 30; grid-column: 1;" class="cell">
|
||
Astronomy (<span name="attr_cc_astronomy_diff">4</span>)
|
||
</span>
|
||
<span style="grid-row: 30; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_astronomy" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 30; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_astronomy_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 30; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_astronomy_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 30; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_astronomy_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 31; grid-column: 1;" class="cell">
|
||
Computer Science (<span name="attr_cc_computer_science_diff">6</span>)
|
||
</span>
|
||
<span style="grid-row: 31; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_computer_science" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 31; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_computer_science_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 31; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_computer_science_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 31; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_computer_science_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 32; grid-column: 1;" class="cell">
|
||
Medicine (<span name="attr_cc_medicine_diff">5</span>)
|
||
</span>
|
||
<span style="grid-row: 32; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_medicine" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 32; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_medicine_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 32; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_medicine_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 32; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_medicine_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 33; grid-column: 1;" class="cell">
|
||
Natural Sciences (<span name="attr_cc_natural_sciences_diff">6</span>)
|
||
</span>
|
||
<span style="grid-row: 33; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_natural_sciences" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 33; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_natural_sciences_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 33; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_natural_sciences_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 33; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_natural_sciences_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 34; grid-column: 1;" class="cell">
|
||
Robotics (<span name="attr_cc_robotics_diff">6</span>)
|
||
</span>
|
||
<span style="grid-row: 34; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_robotics" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 34; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_robotics_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 34; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_robotics_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 34; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_robotics_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 35; grid-column: 1;" class="cell">
|
||
Weapons Engineering (<span name="attr_cc_weapons_engineering_diff">6</span>)
|
||
</span>
|
||
<span style="grid-row: 35; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_weapons_engineering" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 35; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_weapons_engineering_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 35; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_weapons_engineering_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 35; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_weapons_engineering_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 36; grid-column: 1;" class="cell">
|
||
Xenobiology (<span name="attr_cc_xenobiology_diff">8</span>)
|
||
</span>
|
||
<span style="grid-row: 36; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_xenobiology" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 36; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_xenobiology_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 36; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_xenobiology_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 36; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_xenobiology_talent" value="0" id="num">
|
||
|
||
</span>
|
||
<span colspan="5" style="grid-row: 37; grid-column: 1 / span 5;" class="cell">
|
||
<div align="center">
|
||
Social <span class="small-font" name="attr_social"/>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 38; grid-column: 1;" class="cell">
|
||
Convince (<span name="attr_cc_convince_diff">5</span>)
|
||
</span>
|
||
<span style="grid-row: 38; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_convince" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 38; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_convince_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 38; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_convince_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 38; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_convince_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 39; grid-column: 1;" class="cell">
|
||
Deceive (<span name="attr_cc_deceive_diff">4</span>)
|
||
</span>
|
||
<span style="grid-row: 39; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_deceive" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 39; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_deceive_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 39; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_deceive_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 39; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_deceive_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 40; grid-column: 1;" class="cell">
|
||
Empathy (<span name="attr_cc_empathy_diff">5</span>)
|
||
</span>
|
||
<span style="grid-row: 40; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_empathy" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 40; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_empathy_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 40; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_empathy_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 40; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_empathy_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 41; grid-column: 1;" class="cell">
|
||
Intimidate (<span name="attr_cc_intimidate_diff">3</span>)
|
||
</span>
|
||
<span style="grid-row: 41; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_intimidate" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 41; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_intimidate_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 41; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_intimidate_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 41; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_intimidate_talent" value="0" id="num">
|
||
</span>
|
||
<span style="grid-row: 42; grid-column: 1;" class="cell">
|
||
Lead (<span name="attr_cc_lead_diff">5</span>)
|
||
</span>
|
||
<span style="grid-row: 42; grid-column: 2;" class="cell">
|
||
<input type="text" name="attr_lead" id="num" readonly>
|
||
</span>
|
||
<span style="grid-row: 42; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_lead_cc_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 42; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_lead_cc_down" class="levelDownButton"/>
|
||
</span>
|
||
<span style="grid-row: 42; grid-column: 5;" class="cell">
|
||
<input type="text" name="attr_cc_lead_talent" value="0" id="num">
|
||
</span>
|
||
</div>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
<br>
|
||
<button class="promptButton" type="action" name="act_cc_back">Back</button>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 2;" class="cell">
|
||
<div align="center">
|
||
<br>
|
||
<input type="hidden" name="attr_cc_complete_hider" class="hide-cc-complete" value="1">
|
||
<button class="promptButton cc-complete-hide" type="action" name="act_cc2_complete">Complete</button>
|
||
</div>
|
||
</span>
|
||
</div>
|
||
</div>
|
||
|
||
<input type="hidden" name="attr_cc1_prompt_hider" class="hide-cc1-prompt" value="0">
|
||
<div id="cc1_prompt" class="prompt cc1-prompt-hide">
|
||
<div width="820" class="grid4 table">
|
||
<span height="30" colspan="2" style="grid-row: 1; grid-column: 1 / span 2;" class="cell">
|
||
<div class="title1" align="center">
|
||
Character Creation - Step 1
|
||
</div>
|
||
</span>
|
||
<span height="*" style="grid-row: 2; grid-column: 1;" class="cell">
|
||
<div class="grid5 table">
|
||
<span colspan="2" style="grid-row: 1; grid-column: 1 / span 2;" class="cell">
|
||
<div align="center">
|
||
Please select
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 2; grid-column: 1;" class="cell">
|
||
Commonwealth:
|
||
</span>
|
||
<span style="grid-row: 2; grid-column: 2;" class="cell">
|
||
<select id="tex2" style="width: 150px" name="attr_territory_select">
|
||
<option value="gavadai" selected>Gavadai</option>
|
||
<option value="gt">GT</option>
|
||
<option value="omkinara">Omkinara</option>
|
||
<option value="saturnada">Saturnada</option>
|
||
<option value="syndeel">Syndeel</option>
|
||
<option value="tatsuba">Tatsuba</option>
|
||
<option value="zaidong">Zaidong</option>
|
||
<option value="imperial">Imperial Renegade</option>
|
||
<option value="alliance">Alliance Renegade</option>
|
||
<option value="pirate">Pirate Renegade</option>
|
||
</select>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 1;" class="cell">
|
||
Planet of origin
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 2;" class="cell">
|
||
<select id="tex2" style="width: 150px" name="attr_planet_select">
|
||
<option value="a" selected>Class A</option>
|
||
<option value="b">Class B</option>
|
||
<option value="c">Class C</option>
|
||
<option value="d">Class D</option>
|
||
<option value="e">Class E</option>
|
||
<option value="f">Space Station</option>
|
||
</select>
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 1;" class="cell">
|
||
Social class
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 2;" class="cell">
|
||
<select id="tex2" style="width: 150px" name="attr_social_class_select">
|
||
<option value="wretch" selected>Wretch</option>
|
||
<option value="middle_class">Middle Class</option>
|
||
<option value="low_corporate">Low Corporate</option>
|
||
</select>
|
||
</span>
|
||
<span style="grid-row: 5; grid-column: 1;" class="cell">
|
||
Profession
|
||
</span>
|
||
<span style="grid-row: 5; grid-column: 2;" class="cell">
|
||
<select id="tex2" style="width: 150px" name="attr_profession_select">
|
||
<option value="soldier" selected>Soldier</option>
|
||
<option value="law_enforcer">Law enforcer</option>
|
||
<option value="scientist">Scientist</option>
|
||
<option value="doctor">Doctor</option>
|
||
<option value="spy">Spy</option>
|
||
<option value="smuggler">Smuggler</option>
|
||
<option value="thief">Thief</option>
|
||
<option value="swindler">Swindler</option>
|
||
<option value="pilot">Pilot</option>
|
||
<option value="engineer">Engineer</option>
|
||
<option value="trader">Trader</option>
|
||
<option value="astronaut">Astronaut</option>
|
||
<option value="socialite">Socialite</option>
|
||
<option value="hacker">Hacker</option>
|
||
<option value="custom">Custom</option>
|
||
</select>
|
||
</span>
|
||
<span colspan="2" style="grid-row: 6; grid-column: 1 / span 2;" class="cell">
|
||
<div align="center">
|
||
<input type="hidden" name="attr_scientist_options_hider" class="hide-scientist-options" value="1">
|
||
<div name="scientist_options" class="scientist-options-hide">
|
||
<div class="title2" style="font-size: 12px;">
|
||
Main science skill
|
||
</div>
|
||
<select name="attr_science1" id="tex2" style="width: 200px" class="science1-select">
|
||
<option value="astronomy" selected>Astronomy</option>
|
||
<option value="medicine">Medicine</option>
|
||
<option value="natural_sciences">Natural sciences</option>
|
||
<option value="robotics">Robotics</option>
|
||
<option value="weapons_engineering">Weapons Engineering</option>
|
||
<option value="xenobiology">Xenobiology</option>
|
||
</select>
|
||
<br>
|
||
<div class="title2" style="font-size: 12px;">
|
||
Secondary science skill
|
||
</div>
|
||
<select name="attr_science2" id="tex2" style="width: 200px" class="science2-select">
|
||
<option value="computer_science" selected="selected">Computer science</option>
|
||
<option value="medicine">Medicine</option>
|
||
<option value="natural_sciences">Natural sciences</option>
|
||
<option value="robotics">Robotics</option>
|
||
<option value="weapons_engineering">Weapons Engineering</option>
|
||
<option value="xenobiology">Xenobiology</option>
|
||
</select>
|
||
</div>
|
||
<input type="hidden" name="attr_engineer_options_hider" class="hide-engineer-options" value="1">
|
||
<div name="engineer_options" class="engineer-options-hide">
|
||
<div class="title2" style="font-size: 12px;">
|
||
Main engineering skill
|
||
</div>
|
||
<select name="attr_main_engineering" id="tex2" style="width: 200px">
|
||
<option value="robotics" selected>Robotics</option>
|
||
<option value="vehicle_engineering">Vehicle engineering</option>
|
||
<option value="weapons_engineering">Weapons engineering</option>
|
||
</select>
|
||
</div>
|
||
<input type="hidden" name="attr_custom_options_hider" class="hide-custom-options" value="1">
|
||
<div name="custom_options" class="custom-options-hide">
|
||
<div class="title2" style="font-size: 12px;">
|
||
Custom profession
|
||
</div>
|
||
<span style="font-size: 10px">Name</span><br><input type="text" name="attr_custom_prof_name" value="Cat Wrangler" id="tex2" style="width: 200px"><br>
|
||
<span style="font-size: 10px">Attributes</span><br><select name="attr_custom_attr1" id="tex2" style="width: 200px" class="attribute1-select">
|
||
<option value="str" selected>Strength</option>
|
||
<option value="agi">Agility</option>
|
||
<option value="per">Perception</option>
|
||
<option value="int">Intelligence</option>
|
||
<option value="cha">Charisma</option>
|
||
<option value="wil">Willpower</option>
|
||
</select><br>
|
||
<select name="attr_custom_attr2" id="tex2" style="width: 200px" class="attribute2-select">
|
||
<option value="sta" selected>Stamina</option>
|
||
<option value="agi">Agility</option>
|
||
<option value="per">Perception</option>
|
||
<option value="int">Intelligence</option>
|
||
<option value="cha">Charisma</option>
|
||
<option value="wil">Willpower</option>
|
||
</select><br>
|
||
<span style="font-size: 10px">Skills</span><br><select name="attr_custom_skill1" id="tex2" style="width: 200px" class="skill1-select">
|
||
<option value="Astronautics" disabled>ASTRONAUTICS</option>
|
||
<option value="bridge_tech" selected="selected">Bridge tech</option>
|
||
<option value="mounted_weaponry">Mounted weaponry</option>
|
||
<option value="pilot_spacecraft">Pilot spacecraft</option>
|
||
<option value="vehicle_engineering">Vehicle engineering</option>
|
||
<option value="Civilizational" disabled>CIVILIZATIONAL</option>
|
||
<option value="knowledge_corporate">Knowledge (corporate)</option>
|
||
<option value="knowledge_planets">Knowledge (planets)</option>
|
||
<option value="pilot_aircraft">Pilot aircraft</option>
|
||
<option value="knowledge_urban">Knowledge (Urban)</option>
|
||
<option value="trade">Trade</option>
|
||
<option value="Combat" disabled>COMBAT</option>
|
||
<option value="athletics">Athletics</option>
|
||
<option value="endurance">Endurance</option>
|
||
<option value="melee">Melee</option>
|
||
<option value="reaction">Reaction</option>
|
||
<option value="throw">Throw</option>
|
||
<option value="Infiltration" disabled>INFILTRATION</option>
|
||
<option value="hack_security">Hack security</option>
|
||
<option value="search">Search</option>
|
||
<option value="sleight_of_hand">Sleight of hand</option>
|
||
<option value="sneak">Sneak</option>
|
||
<option value="Science" disabled>SCIENCE</option>
|
||
<option value="computer_science">Computer science</option>
|
||
<option value="medicine">Medicine</option>
|
||
<option value="natural_sciences">Natural sciences</option>
|
||
<option value="robotics">Robotics</option>
|
||
<option value="weapons_engineering">Weapons engineering</option>
|
||
<option value="xenobiology">Xenobiology</option>
|
||
<option value="Social" disabled>SOCIAL</option>
|
||
<option value="convince">Ceonvince</option>
|
||
<option value="deceive">Deceive</option>
|
||
<option value="empathy">Empathy</option>
|
||
<option value="intimidate">Intimidate</option>
|
||
<option value="lead">Lead</option>
|
||
</select><br>
|
||
<select name="attr_custom_skill2" id="tex2" style="width: 200px" class="skill2-select">
|
||
<option value="Astronautics" disabled>ASTRONAUTICS</option>
|
||
<option value="mounted_weaponry">Mounted weaponry</option>
|
||
<option value="pilot_spacecraft">Pilot Spacecraft</option>
|
||
<option value="vehicle_engineering">Vehicle engineering</option>
|
||
<option value="Civilizational" disabled>CIVILIZATIONAL</option>
|
||
<option value="drive_ground_vehicle" selected="selected">Drive ground vehicle</option>
|
||
<option value="knowledge_corporate">Knowledge (corporate)</option>
|
||
<option value="knowledge_planets">Knowledge (planets)</option>
|
||
<option value="pilot_aircraft">Pilot aircraft</option>
|
||
<option value="knowledge_urban">Knowledge (Urban)</option>
|
||
<option value="trade">Trade</option>
|
||
<option value="Combat" disabled>COMBAT</option>
|
||
<option value="athletics">Athletics</option>
|
||
<option value="endurance">Endurance</option>
|
||
<option value="melee">Melee</option>
|
||
<option value="reaction">Reaction</option>
|
||
<option value="throw">Throw</option>
|
||
<option value="Infiltration" disabled>INFILTRATION</option>
|
||
<option value="hack_security">Hack security</option>
|
||
<option value="search">Search</option>
|
||
<option value="sleight_of_hand">Sleight of hand</option>
|
||
<option value="sneak">Sneak</option>
|
||
<option value="Science" disabled>SCIENCE</option>
|
||
<option value="computer_science">Computer science</option>
|
||
<option value="medicine">Medicine</option>
|
||
<option value="natural_sciences">Natural sciences</option>
|
||
<option value="robotics">Robotics</option>
|
||
<option value="weapons_engineering">Weapons engineering</option>
|
||
<option value="xenobiology">Xenobiology</option>
|
||
<option value="Social" disabled>SOCIAL</option>
|
||
<option value="convince">Ceonvince</option>
|
||
<option value="deceive">Deceive</option>
|
||
<option value="empathy">Empathy</option>
|
||
<option value="intimidate">Intimidate</option>
|
||
<option value="lead">Lead</option>
|
||
</select><br>
|
||
<select name="attr_custom_skill3" id="tex2" style="width: 200px" class="skill3-select">
|
||
<option value="Astronautics" disabled>ASTRONAUTICS</option>
|
||
<option value="mounted_weaponry">Mounted weaponry</option>
|
||
<option value="pilot_spacecraft">Pilot spacecraft</option>
|
||
<option value="vehicle_engineering">Vehicle engineering</option>
|
||
<option value="Civilizational" disabled>CIVILIZATIONAL</option>
|
||
<option value="knowledge_corporate">Knowledge (corporate)</option>
|
||
<option value="knowledge_planets">Knowledge (planets)</option>
|
||
<option value="pilot_aircraft">Pilot aircraft</option>
|
||
<option value="knowledge_urban">Knowledge (Urban)</option>
|
||
<option value="trade">Trade</option>
|
||
<option value="Combat" disabled>COMBAT</option>
|
||
<option value="aim" selected="selected">Aim</option>
|
||
<option value="athletics">Athletics</option>
|
||
<option value="endurance">Endurance</option>
|
||
<option value="melee">Melee</option>
|
||
<option value="reaction">Reaction</option>
|
||
<option value="throw">Throw</option>
|
||
<option value="Infiltration" disabled>INFILTRATION</option>
|
||
<option value="hack_security">Hack security</option>
|
||
<option value="search">Search</option>
|
||
<option value="sleight_of_hand">Sleight of hand</option>
|
||
<option value="sneak">Sneak</option>
|
||
<option value="Science" disabled>SCIENCE</option>
|
||
<option value="computer_science">Computer science</option>
|
||
<option value="medicine">Medicine</option>
|
||
<option value="natural_sciences">Natural sciences</option>
|
||
<option value="robotics">Robotics</option>
|
||
<option value="weapons_engineering">Weapons engineering</option>
|
||
<option value="xenobiology">Xenobiology</option>
|
||
<option value="Social" disabled>SOCIAL</option>
|
||
<option value="convince">Ceonvince</option>
|
||
<option value="deceive">Deceive</option>
|
||
<option value="empathy">Empathy</option>
|
||
<option value="intimidate">Intimidate</option>
|
||
<option value="lead">Lead</option>
|
||
</select><br>
|
||
<select name="attr_custom_skill4" id="tex2" style="width: 200px" class="skill4-select">
|
||
<option value="Astronautics" disabled>ASTRONAUTICS</option>
|
||
<option value="mounted_weaponry">Mounted weaponry</option>
|
||
<option value="pilot_spacecraft">Pilot spacecraft</option>
|
||
<option value="vehicle_engineering">Vehicle engineering</option>
|
||
<option value="Civilizational" disabled>CIVILIZATIONAL</option>
|
||
<option value="knowledge_corporate">Knowledge (corporate)</option>
|
||
<option value="knowledge_planets">Knowledge (planets)</option>
|
||
<option value="pilot_aircraft">Pilot aircraft</option>
|
||
<option value="knowledge_urban">Knowledge (Urban)</option>
|
||
<option value="trade">Trade</option>
|
||
<option value="Combat" disabled>COMBAT</option>
|
||
<option value="athletics">Athletics</option>
|
||
<option value="endurance">Endurance</option>
|
||
<option value="melee">Melee</option>
|
||
<option value="reaction">Reaction</option>
|
||
<option value="throw">Throw</option>
|
||
<option value="Infiltration" disabled>INFILTRATION</option>
|
||
<option value="notice" selected="selected">Notice</option>
|
||
<option value="hack_security">Hack security</option>
|
||
<option value="search">Search</option>
|
||
<option value="sleight_of_hand">Sleight of hand</option>
|
||
<option value="sneak">Sneak</option>
|
||
<option value="Science" disabled>SCIENCE</option>
|
||
<option value="computer_science">Computer science</option>
|
||
<option value="medicine">Medicine</option>
|
||
<option value="natural_sciences">Natural sciences</option>
|
||
<option value="robotics">Robotics</option>
|
||
<option value="weapons_engineering">Weapons engineering</option>
|
||
<option value="xenobiology">Xenobiology</option>
|
||
<option value="Social" disabled>SOCIAL</option>
|
||
<option value="convince">Ceonvince</option>
|
||
<option value="deceive">Deceive</option>
|
||
<option value="empathy">Empathy</option>
|
||
<option value="intimidate">Intimidate</option>
|
||
<option value="lead">Lead</option>
|
||
</select><br>
|
||
<select name="attr_custom_skill5" id="tex2" style="width: 200px" class="skill5-select">
|
||
<option value="Astronautics" disabled>ASTRONAUTICS</option>
|
||
<option value="mounted_weaponry">Mounted weaponry</option>
|
||
<option value="pilot_spacecraft">Pilot spacecraft</option>
|
||
<option value="vehicle_engineering">Vehicle engineering</option>
|
||
<option value="Civilizational" disabled>CIVILIZATIONAL</option>
|
||
<option value="knowledge_corporate">Knowledge (corporate)</option>
|
||
<option value="knowledge_planets">Knowledge (planets)</option>
|
||
<option value="pilot_aircraft">Pilot aircraft</option>
|
||
<option value="knowledge_urban">Knowledge (Urban)</option>
|
||
<option value="trade">Trade</option>
|
||
<option value="Combat" disabled>COMBAT</option>
|
||
<option value="athletics">Athletics</option>
|
||
<option value="endurance">Endurance</option>
|
||
<option value="melee">Melee</option>
|
||
<option value="reaction">Reaction</option>
|
||
<option value="throw">Throw</option>
|
||
<option value="Infiltration" disabled>INFILTRATION</option>
|
||
<option value="hack_security">Hack security</option>
|
||
<option value="search">Search</option>
|
||
<option value="sleight_of_hand">Sleight of hand</option>
|
||
<option value="sneak">Sneak</option>
|
||
<option value="Science" disabled>SCIENCE</option>
|
||
<option value="astronomy" selected="selected">Astronomy</option>
|
||
<option value="computer_science">Computer science</option>
|
||
<option value="medicine">Medicine</option>
|
||
<option value="natural_sciences">Natural sciences</option>
|
||
<option value="robotics">Robotics</option>
|
||
<option value="weapons_engineering">Weapons engineering</option>
|
||
<option value="xenobiology">Xenobiology</option>
|
||
<option value="Social" disabled>SOCIAL</option>
|
||
<option value="convince">Ceonvince</option>
|
||
<option value="deceive">Deceive</option>
|
||
<option value="empathy">Empathy</option>
|
||
<option value="intimidate">Intimidate</option>
|
||
<option value="lead">Lead</option>
|
||
</select>
|
||
</div>
|
||
|
||
<input type="hidden" name="attr_gavadai_options_hider" class="hide-gavadai-options" value="1">
|
||
<div name="gavadai_options" class="gavadai-options-hide">
|
||
<span style="font-size: 12px">Select attributes to increase</span><br>
|
||
<select name="attr_gavadai_attribute1" id="tex2" style="width: 200px">
|
||
<option value="str" selected>Strength</option>
|
||
<option value="sta">Stamina</option>
|
||
<option value="agi">Agility</option>
|
||
<option value="per">Perception</option>
|
||
<option value="int">Intelligence</option>
|
||
<option value="cha">Charisma</option>
|
||
<option value="wil">Willpower</option>
|
||
</select><br>
|
||
<select name="attr_gavadai_attribute2" id="tex2" style="width: 200px">
|
||
<option value="str">Strength</option>
|
||
<option value="sta" selected>Stamina</option>
|
||
<option value="agi">Agility</option>
|
||
<option value="per">Perception</option>
|
||
<option value="int">Intelligence</option>
|
||
<option value="cha">Charisma</option>
|
||
<option value="wil">Willpower</option>
|
||
</select>
|
||
</div>
|
||
|
||
<input type="hidden" name="attr_gt_options_hider" class="hide-gt-options" value="1">
|
||
<div name="gt_options" class="gt-options-hide">
|
||
<span style="font-size: 12px">Select robot</span><br>
|
||
<select name="attr_gt_robot" id="tex2" style="width: 200px">
|
||
<option value="1" selected>Mk 201 Stinger combat companion</option>
|
||
<option value="2">Mk 17 scout companion</option>
|
||
</select>
|
||
</div>
|
||
|
||
<input type="hidden" name="attr_saturnada_options_hider" class="hide-saturnada-options" value="1">
|
||
<div name="saturnada_options" class="saturnada-options-hide">
|
||
<span style="font-size: 12px">Select companion creature</span><br>
|
||
<select name="attr_saturnada_creature" id="tex2" style="width: 200px">
|
||
<option value="1" selected>Charge beast</option>
|
||
<option value="2">Flixy</option>
|
||
<option value="3">Terenchar swarm</option>
|
||
</select>
|
||
</div>
|
||
|
||
<input type="hidden" name="attr_zaidong_options_hider" class="hide-zaidong-options" value="1">
|
||
<div name="zaidong" class="zaidong-options-hide">
|
||
<span style="font-size: 12px">Select an augmentation</span><br>
|
||
<select name="attr_zaidong_augmentation" id="tex2" style="width: 200px">
|
||
<option value="Immune boost" selected>Immune boost</option>
|
||
<option value="Suction pads">Suction pads</option>
|
||
<option value="Acceleration">Acceleration</option>
|
||
<option value="Cosmetic alteration">Cosmetic alteration</option>
|
||
<option value="Enhanced metabolism">Enhanced metabolism</option>
|
||
<option value="Cerebral revitalization">Cerebral revitalization</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
</span>
|
||
</div>
|
||
</span>
|
||
<span width="400" style="padding: 20px; grid-row: 2; grid-column: 2;" class="cell">
|
||
<div align="center">
|
||
<textarea class="console-textarea" name="attr_character_info" style="width: 400; height: 400"></textarea>
|
||
</div>
|
||
</span>
|
||
<span colspan="2" style="grid-row: 3; grid-column: 1 / span 2;" class="cell">
|
||
<div align="center">
|
||
<button class="promptButton" type="action" name="act_cc1_complete">Next</button>
|
||
</div>
|
||
</span>
|
||
</div>
|
||
</div>
|
||
|
||
<input type="hidden" name="attr_damage_prompt_hider" class="hide-damage-prompt" value="1">
|
||
<div id="damage_prompt" class="prompt damage-prompt-hide">
|
||
<div class="grid6 table">
|
||
<span style="grid-row: 1; grid-column: 1;" class="cell">
|
||
<div class="title1">
|
||
<div align="center">
|
||
Enter damage
|
||
</div>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 2; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
<br>
|
||
<div class="small-font">
|
||
Bypass armor: <input type="text" name="attr_armor_pen" id="tex7" value="0">
|
||
</div>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
<input type="text" name="attr_damage" id="num" value="0">
|
||
<select name="attr_damage_type" id="tex6">
|
||
<option value="ballistic">Ballistic</option>
|
||
<option value="thermal">Thermal</option>
|
||
<option value="impact">Impact</option>
|
||
</select>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
<button type="action" class="promptButton" name="act_accept_damage">Accept</button>
|
||
<button type="action" class="promptButton" name="act_cancel_damage">Cancel</button>
|
||
</div>
|
||
</span>
|
||
</div>
|
||
</div>
|
||
<input type="hidden" name="attr_attribute_prompt_hider" class="hide-attr-prompt" value="1">
|
||
<div id="attribute_prompt" class="prompt attr-prompt-hide">
|
||
<div class="grid7 table">
|
||
<span colspan="2" style="grid-row: 1; grid-column: 1 / span 2;" class="cell">
|
||
<div align="center">
|
||
<div class="title1">
|
||
Increase attribute?
|
||
</div>
|
||
</div>
|
||
</span>
|
||
<span colspan="2" style="grid-row: 2; grid-column: 1 / span 2;" class="cell">
|
||
<br>
|
||
<div align="center">
|
||
<div name="attr_prompt_data" class="title2">
|
||
<span name="attr_attribute_prompt_message" class="label2"/>
|
||
</div>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
<br>
|
||
<input type="hidden" name="attr_increase_attribute_hider" class="hide-increase-attribute" value="0">
|
||
<button type="action" name="act_increase_attr" class="promptButton increase-attribute-hide">Increase</button>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 2;" class="cell">
|
||
<div align="center">
|
||
<br>
|
||
<button type="action" name="act_cancel_attr" class="promptButton">Cancel</button>
|
||
</div>
|
||
</span>
|
||
</div>
|
||
</div>
|
||
<input type="hidden" name="attr_skill_prompt_hider" class="hide-skill-prompt" value="1">
|
||
<div id="skill_prompt" class="prompt skill-prompt-hide">
|
||
<input type="hidden" name="attr_skill_to_change">
|
||
<div class="grid8 table">
|
||
<span colspan="2" style="grid-row: 1; grid-column: 1 / span 2;" class="cell">
|
||
<div align="center">
|
||
<span name="attr_skill_prompt_title" class="label3"/>
|
||
</div>
|
||
</span>
|
||
<span colspan="2" style="grid-row: 2; grid-column: 1 / span 2;" class="cell">
|
||
<div align="center">
|
||
<input type="hidden" name="attr_skill_training_time_hider" class="hide-training-time" value="0">
|
||
<span name="attr_skill_training_time" class="label2 training-time-hide"/>
|
||
</div>
|
||
</span>
|
||
<span width="300" style="grid-row: 3; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
Talent: <input type="text" name="attr_skill_talent" id="num" readonly>
|
||
</div>
|
||
</span>
|
||
<span width="300" style="grid-row: 3; grid-column: 2;" class="cell">
|
||
<div align="center">
|
||
XP: <input type="text" name="attr_skill_xp" id="num">
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 1;" class="cell">
|
||
<br>
|
||
<div align="right">
|
||
<span name="attr_skill_level_up_text" class="label1"/>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 2;" class="cell">
|
||
<br>
|
||
<input type="hidden" name="attr_hide_level_skill" class="hide-level-skill">
|
||
<button type="action" name="act_level_skill" class="levelUpButton level-skill-hide"/>
|
||
<!--><input type="hidden" name="attr_hide_reduce_skill" class="hide-reduce-skill">
|
||
<button type="action" name="act_reduce_skill" class="levelDownButton reduce-skill-hide"/> -->
|
||
</span>
|
||
<span colspan="2" style="grid-row: 5; grid-column: 1 / span 2;" class="cell">
|
||
<div align="center">
|
||
<button type="action" name="act_skill_prompt_ok" class="promptButton">OK</button>
|
||
</div>
|
||
</span>
|
||
</div>
|
||
</div>
|
||
<input type="hidden" name="attr_roll_prompt_hider" class="hide-roll-prompt" value="1">
|
||
<div id="roll_prompt" class="prompt roll-prompt-hide">
|
||
<div class="grid9 table">
|
||
<span style="grid-row: 1; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
<input type="hidden" name="attr_roll_title">
|
||
<span name="attr_roll_title" class="label3"/>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 2; grid-column: 1;" class="cell">
|
||
<br>
|
||
<div align="center">
|
||
<input type="hidden" name="attr_skill_roll_hider" class="hide-skill-roll" value="1">
|
||
<span class="skill-roll-hide">High intensity: <input type="checkbox" name="attr_skill_roll_intensity"></span>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
<div class="grid10 table">
|
||
<span style="grid-row: 1; grid-column: 1;" class="cell">
|
||
<input type="hidden" name="attr_skill_roll_hider" class="hide-skill-roll" value="1">
|
||
<button type="action" class="attrButton skill-roll-hide" name="act_roll_skill_with_str">STR</button>
|
||
</span>
|
||
<span style="grid-row: 1; grid-column: 2;" class="cell">
|
||
<input type="hidden" name="attr_skill_roll_hider" class="hide-skill-roll" value="1">
|
||
<button type="action" class="attrButton skill-roll-hide" name="act_roll_skill_with_sta">STA</button>
|
||
</span>
|
||
<span style="grid-row: 1; grid-column: 3;" class="cell">
|
||
<input type="hidden" name="attr_skill_roll_hider" class="hide-skill-roll" value="1">
|
||
<button type="action" class="attrButton skill-roll-hide" name="act_roll_skill_with_agi">AGI</button>
|
||
</span>
|
||
<span style="grid-row: 1; grid-column: 4;" class="cell">
|
||
<input type="hidden" name="attr_skill_roll_hider" class="hide-skill-roll" value="1">
|
||
<button type="action" class="attrButton skill-roll-hide" name="act_roll_skill_with_per">PER</button>
|
||
</span>
|
||
<span style="grid-row: 1; grid-column: 5;" class="cell">
|
||
<input type="hidden" name="attr_skill_roll_hider" class="hide-skill-roll" value="1">
|
||
<button type="action" class="attrButton skill-roll-hide" name="act_roll_skill_with_int">INT</button>
|
||
</span>
|
||
<span style="grid-row: 1; grid-column: 6;" class="cell">
|
||
<input type="hidden" name="attr_skill_roll_hider" class="hide-skill-roll" value="1">
|
||
<button type="action" class="attrButton skill-roll-hide" name="act_roll_skill_with_cha">CHA</button>
|
||
</span>
|
||
<span style="grid-row: 1; grid-column: 7;" class="cell">
|
||
<input type="hidden" name="attr_skill_roll_hider" class="hide-skill-roll" value="1">
|
||
<button type="action" class="attrButton skill-roll-hide" name="act_roll_skill_with_wil">WIL</button>
|
||
</span>
|
||
</div>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
<input type="hidden" name="attr_skill_roll_hider" class="hide-skill-roll" value="1">
|
||
<span class="skill-roll-hide">Modifier: <input type="text" id="num" name="attr_skill_roll_modifier" value="0"></span>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 5; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
<button type="action" class="promptButton" name="act_cancel_skill_roll">Cancel</button>
|
||
<input type="hidden" name="attr_skill_roll_hider" class="hide-skill-roll" value="1">
|
||
</div>
|
||
</span>
|
||
</div>
|
||
</div>
|
||
<input type="hidden" name="attr_attribute_roll_prompt_hider" class="hide-attr-roll-prompt" value="1">
|
||
<div id="attribute_roll_prompt" class="prompt attr-roll-prompt-hide">
|
||
<div class="grid11 table">
|
||
<span colspan="2" style="grid-row: 1; grid-column: 1 / span 2;" class="cell">
|
||
<div align="center">
|
||
<span name="attr_attribute_roll_title" class="label3"/>
|
||
</div>
|
||
</span>
|
||
<span colspan="2" style="grid-row: 2; grid-column: 1 / span 2;" class="cell">
|
||
<br>
|
||
<div align="center">
|
||
High intensity: <input type="checkbox" name="attr_attribute_roll_intensity">
|
||
</div>
|
||
</span>
|
||
<span colspan="2" style="grid-row: 3; grid-column: 1 / span 2;" class="cell">
|
||
<div align="center">
|
||
Modifier: <input type="text" id="num" name="attr_attribute_roll_modifier" value="0">
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 1;" class="cell">
|
||
<br>
|
||
<div align="center">
|
||
<button type="action" name="act_roll_attribute" class="promptButton">Roll</button>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 2;" class="cell">
|
||
<br>
|
||
<div align="center">
|
||
<button type="action" class="promptButton" name="act_cancel_attr_roll">Cancel</button>
|
||
</div>
|
||
</span>
|
||
</div>
|
||
</div>
|
||
<input type="hidden" name="attr_shoot_prompt_hider" class="hide-shoot-prompt" value="1">
|
||
<div id="shoot_prompt" class="prompt shoot-prompt-hide">
|
||
<div class="grid12 table">
|
||
<span colspan="2" style="grid-row: 1; grid-column: 1 / span 2;" class="cell">
|
||
<div align="center">
|
||
<span name="attr_firing_text" class="label3"/>
|
||
</div>
|
||
</span>
|
||
<span colspan="2" style="grid-row: 2; grid-column: 1 / span 2;" class="cell">
|
||
<div align="center">
|
||
Mode: <select name="attr_firing_mode" id="tex6" class="firing-mode-select">
|
||
<option value="single">Single</option>
|
||
<option value="burst">Burst</option>
|
||
<option value="volley">Volley</option>
|
||
<option value="melee">Melee Strike</option>
|
||
</select>
|
||
</div>
|
||
</span>
|
||
<span colspan="2" style="grid-row: 3; grid-column: 1 / span 2;" class="cell">
|
||
<div align="center">
|
||
Modifier: <input type="text" id="num" name="attr_shoot_modifier" value="0">
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 1;" class="cell">
|
||
<br>
|
||
<div align="center">
|
||
<input type="hidden" name="attr_shoot_hider" value="0" class="hide-shoot">
|
||
<button type="action" name="act_shoot" class="promptButton shoot-hide">Attack</button>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 2;" class="cell">
|
||
<br>
|
||
<div align="center">
|
||
<button type="action" name="act_cancel_shoot" class="promptButton">Cancel</button>
|
||
</div>
|
||
</span>
|
||
</div>
|
||
</div>
|
||
<input type="hidden" name="attr_hp_prompt_hider" class="hide-hp-prompt" value="1">
|
||
<div id="hp_prompt" class="prompt hp-prompt-hide">
|
||
<div class="grid13 table">
|
||
<span colspan="2" style="grid-row: 1; grid-column: 1 / span 2;" class="cell">
|
||
<div align="center">
|
||
<div class="title1">
|
||
Raise max HP
|
||
</div>
|
||
</div>
|
||
</span>
|
||
<span colspan="2" style="grid-row: 2; grid-column: 1 / span 2;" class="cell">
|
||
<div align="center">
|
||
<br>
|
||
<span name="attr_hp_raise_status" class="label4"/>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
<br>
|
||
<input type="hidden" name="buy_hp_hider" value="0" class="hide-buy-hp">
|
||
<button type="action" name="act_buy_hp" class="promptButton buy-hp-hide">Ok</button>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 2;" class="cell">
|
||
<div align="center">
|
||
<br>
|
||
<button type="action" name="act_cancel_hp_button" class="promptButton">Cancel</button>
|
||
</div>
|
||
</span>
|
||
</div>
|
||
</div>
|
||
|
||
<br>
|
||
<div align="center">
|
||
<input type="hidden" name="attr_character_page_hider" class="hide-character-page" value="0">
|
||
<div id="character_page" class="character-page-hide">
|
||
<div align="center" class="main-title">
|
||
Character
|
||
</div>
|
||
<br>
|
||
<div class="grid14 table">
|
||
<span colspan="2" style="grid-row: 1; grid-column: 1 / span 2;" class="cell">
|
||
<div class="grid15 table">
|
||
<span width="150" style="grid-row: 1; grid-column: 1;" class="cell">
|
||
<div class="small-font">
|
||
Name:
|
||
</div>
|
||
</span>
|
||
<span width="120" style="grid-row: 1; grid-column: 2;" class="cell">
|
||
<input type="text" id="tex2" name="attr_character_name">
|
||
</span>
|
||
<span width="150" style="grid-row: 1; grid-column: 3;" class="cell">
|
||
<div class="small-font">
|
||
Gender:
|
||
</div>
|
||
</span>
|
||
<span width="120" style="grid-row: 1; grid-column: 4;" class="cell">
|
||
<input type="text" id="tex2" name="attr_gender">
|
||
</span>
|
||
<span rowspan="4" width="300" style="grid-row: 1 / span 4; grid-column: 5;" class="cell">
|
||
<div class="title2">
|
||
Description<br>
|
||
<textarea name="attr_description" rows="6" cols="53"></textarea>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 2; grid-column: 1;" class="cell">
|
||
<div class="small-font">
|
||
Home commonwealth:
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 2; grid-column: 2;" class="cell">
|
||
<input type="text" id="tex2" name="attr_territory" readonly>
|
||
</span>
|
||
<span style="grid-row: 2; grid-column: 3;" class="cell">
|
||
<div class="small-font">
|
||
Original profession:
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 2; grid-column: 4;" class="cell">
|
||
<input type="text" id="tex2" name="attr_profession" readonly>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 1;" class="cell">
|
||
<div class="small-font">
|
||
Social class:
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 2;" class="cell">
|
||
<input type="text" id="tex2" name="attr_social_class" class="social-class-enabled" readonly>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 3;" class="cell">
|
||
<div class="small-font">
|
||
Type of birthplace:
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 4;" class="cell">
|
||
<input type="text" id="tex2" name="attr_planet" readonly>
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 1;" class="cell">
|
||
<div class="small-font">
|
||
Available XP:
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 2;" class="cell">
|
||
<input type="text" id="tex2" name="attr_xp" readonly>
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 3;" class="cell">
|
||
<div class="small-font">
|
||
Total XP:
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 4;" class="cell">
|
||
<input type="text" id="tex2" name="attr_total_xp" value="50">
|
||
</span>
|
||
</div>
|
||
</span>
|
||
<span width="500" id="pull-to-top" style="grid-row: 2; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
<div class="grid16 table">
|
||
<span width="200" colspan="5" style="grid-row: 1; grid-column: 1 / span 5;" class="cell">
|
||
<div class="title1">
|
||
Attributes
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 2; grid-column: 1;" class="cell">
|
||
<br>
|
||
Strength
|
||
</span>
|
||
<span style="grid-row: 2; grid-column: 2;" class="cell">
|
||
<br>
|
||
<input type="hidden" name="attr_str_territory" value="2">
|
||
<input type="hidden" name="attr_str_planet" value="0">
|
||
<input type="hidden" name="attr_str_social" value="0">
|
||
<input type="hidden" name="attr_str_profession" value="0">
|
||
<input type="hidden" name="attr_str_xp" value="0">
|
||
<input type="hidden" name="attr_str_cc" value="0">
|
||
<input type="hidden" name="attr_str" value="2"/>
|
||
<input type="text" id="num" name="attr_str" readonly>
|
||
</span>
|
||
<span style="grid-row: 2; grid-column: 3;" class="cell">
|
||
<br>
|
||
<button type="action" name="act_roll_str" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 2; grid-column: 4;" class="cell">
|
||
<br>
|
||
<button type="action" name="act_str_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 1;" class="cell">
|
||
Stamina
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 2;" class="cell">
|
||
<input type="hidden" name="attr_sta_territory" value="2">
|
||
<input type="hidden" name="attr_sta_planet" value="0">
|
||
<input type="hidden" name="attr_sta_social" value="1">
|
||
<input type="hidden" name="attr_sta_profession" value="0">
|
||
<input type="hidden" name="attr_sta_xp" value="0">
|
||
<input type="hidden" name="attr_sta_cc" value="0">
|
||
<input type="hidden" name="attr_sta" value="2"/>
|
||
<input type="text" id="num" name="attr_sta" readonly>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_sta" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_sta_up" class="levelUpButton"/>
|
||
</span>
|
||
|
||
<span style="grid-row: 4; grid-column: 1;" class="cell">
|
||
Agility
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 2;" class="cell">
|
||
<input type="hidden" name="attr_agi_territory" value="0">
|
||
<input type="hidden" name="attr_agi_planet" value="0">
|
||
<input type="hidden" name="attr_agi_social" value="0">
|
||
<input type="hidden" name="attr_agi_profession" value="1">
|
||
<input type="hidden" name="attr_agi_xp" value="0">
|
||
<input type="hidden" name="attr_agi_cc" value="0">
|
||
<input type="hidden" name="attr_agi" value="2"/>
|
||
<input type="text" id="num" name="attr_agi" readonly>
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_agi" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_agi_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 5; grid-column: 1;" class="cell">
|
||
Perception
|
||
</span>
|
||
<span style="grid-row: 5; grid-column: 2;" class="cell">
|
||
<input type="hidden" name="attr_per_territory" value="0">
|
||
<input type="hidden" name="attr_per_planet" value="1">
|
||
<input type="hidden" name="attr_per_social" value="0">
|
||
<input type="hidden" name="attr_per_profession" value="1">
|
||
<input type="hidden" name="attr_per_xp" value="0">
|
||
<input type="hidden" name="attr_per_cc" value="0">
|
||
<input type="hidden" name="attr_per" value="2"/>
|
||
<input type="text" id="num" name="attr_per" readonly>
|
||
</span>
|
||
<span style="grid-row: 5; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_per" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 5; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_per_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 6; grid-column: 1;" class="cell">
|
||
Intelligence
|
||
</span>
|
||
<span style="grid-row: 6; grid-column: 2;" class="cell">
|
||
<input type="hidden" name="attr_int_territory" value="0">
|
||
<input type="hidden" name="attr_int_planet" value="0">
|
||
<input type="hidden" name="attr_int_social" value="0">
|
||
<input type="hidden" name="attr_int_profession" value="0">
|
||
<input type="hidden" name="attr_int_xp" value="0">
|
||
<input type="hidden" name="attr_int_cc" value="0">
|
||
<input type="hidden" name="attr_int" value="2"/>
|
||
<input type="text" id="num" name="attr_int" readonly>
|
||
</span>
|
||
<span style="grid-row: 6; grid-column: 3;" class="cell">
|
||
|
||
<button type="action" name="act_roll_int" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 6; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_int_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 7; grid-column: 1;" class="cell">
|
||
Charisma
|
||
</span>
|
||
<span style="grid-row: 7; grid-column: 2;" class="cell">
|
||
<input type="hidden" name="attr_cha_territory" value="0">
|
||
<input type="hidden" name="attr_cha_planet" value="1">
|
||
<input type="hidden" name="attr_cha_social" value="0">
|
||
<input type="hidden" name="attr_cha_profession" value="0">
|
||
<input type="hidden" name="attr_cha_xp" value="0">
|
||
<input type="hidden" name="attr_cha_cc" value="0">
|
||
<input type="hidden" name="attr_cha" value="2"/>
|
||
<input type="text" id="num" name="attr_cha" readonly>
|
||
</span>
|
||
<span style="grid-row: 7; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_cha" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 7; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_cha_up" class="levelUpButton"/>
|
||
</span>
|
||
<span style="grid-row: 8; grid-column: 1;" class="cell">
|
||
Willpower
|
||
</span>
|
||
<span style="grid-row: 8; grid-column: 2;" class="cell">
|
||
<input type="hidden" name="attr_wil_territory" value="1">
|
||
<input type="hidden" name="attr_wil_planet" value="0">
|
||
<input type="hidden" name="attr_wil_social" value="1">
|
||
<input type="hidden" name="attr_wil_profession" value="0">
|
||
<input type="hidden" name="attr_wil_xp" value="0">
|
||
<input type="hidden" name="attr_wil_cc" value="0">
|
||
<input type="hidden" name="attr_wil" value="2"/>
|
||
<input type="text" id="num" name="attr_wil" readonly>
|
||
</span>
|
||
<span style="grid-row: 8; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_wil" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 8; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_wil_up" class="levelUpButton"/>
|
||
</span>
|
||
</div>
|
||
<br>
|
||
<div class="grid17 table">
|
||
<span width="380" style="grid-row: 1; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
<span class="title1">HP: </span>
|
||
<input type="hidden" name="attr_bought_hp" value="0">
|
||
<input type="text" id="num" name="attr_hp" value="20"> /
|
||
<input type="text" id="num" name="attr_max_hp" value="20" readonly>
|
||
<button type="action" class="levelUpButton" name="act_hp_up"/>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 2; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
<span class="small-font">Pain modifier: </span><input type="text" id="num" name="attr_pain_modifier">
|
||
<span class="small-font">Pain: </span><input type="hidden" name="attr_pain_from_damage" value="0">
|
||
<input type="text" id="num" name="attr_pain" readonly>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
<span class="small-font">Roll condition: </span><button type="action" name="act_roll_condition" class="rollButton" style="position: relative; top: 8px;"/>
|
||
</div>
|
||
</span>
|
||
</div>
|
||
<br>
|
||
<div class="grid18 table">
|
||
<span width="380" style="grid-row: 1; grid-column: 1;" class="cell">
|
||
<div class="title1">
|
||
Armor
|
||
<input type="hidden" name="attr_equipped_armor_id" value="0">
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 2; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
<div width="224" class="grid19 table">
|
||
<span style="grid-row: 1; grid-column: 1;" class="cell">
|
||
<span class="small-font">DA</span>
|
||
</span>
|
||
<span style="grid-row: 1; grid-column: 2;" class="cell">
|
||
<span class="small-font">CMR</span>
|
||
</span>
|
||
<span style="grid-row: 1; grid-column: 3;" class="cell">
|
||
<span class="small-font">Slow</span>
|
||
</span>
|
||
<span style="grid-row: 1; grid-column: 4;" class="cell">
|
||
<span class="small-font">HP</span>
|
||
</span>
|
||
<span style="grid-row: 1; grid-column: 5;" class="cell">
|
||
<span class="small-font">+HP</span>
|
||
</span>
|
||
<span style="grid-row: 2; grid-column: 1;" class="cell">
|
||
<input type="text" id="num" name="attr_equipped_armor_da" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 2; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_equipped_armor_cmr" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 2; grid-column: 3;" class="cell">
|
||
<input type="text" id="num" name="attr_equipped_armor_slow" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 2; grid-column: 4;" class="cell">
|
||
<input type="text" id="num" name="attr_equipped_armor_hp" value="0">
|
||
</span>
|
||
<span style="grid-row: 2; grid-column: 5;" class="cell">
|
||
<input type="text" id="num" name="attr_equipped_armor_bonus_hp" value="0">
|
||
</span>
|
||
</div>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 1;" class="cell">
|
||
<br>
|
||
<div class="title1">
|
||
Shield
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
<input type="text" name="attr_shield" id="num" value="0">
|
||
<input type="text" name="attr_shield_type" id="tex6">
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 5; grid-column: 1;" class="cell">
|
||
<br>
|
||
<div class="title1">
|
||
Weapons
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 6; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
<input type="hidden" name="attr_equipped_weapon1_id" value="0">
|
||
<input type="hidden" name="attr_equipped_weapon1_melee" value="-1">
|
||
<span name="attr_equipped_weapon1"/> <button type="action" name="act_open_shoot" value="1" class="shootButton"/>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 7; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
<input type="hidden" name="attr_equipped_weapon2_id" value="0">
|
||
<input type="hidden" name="attr_equipped_weapon2_melee" value="-1">
|
||
<span name="attr_equipped_weapon2"/> <button type="action" name="act_open_shoot" value="2" class="shootButton"/>
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 8; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
<input type="hidden" name="attr_equipped_weapon3_id" value="0">
|
||
<input type="hidden" name="attr_equipped_weapon3_melee" value="-1">
|
||
<span name="attr_equipped_weapon3"/> <button type="action" name="act_open_shoot" value="3" class="shootButton"/>
|
||
</div>
|
||
</span>
|
||
</div>
|
||
<br>
|
||
<div class="grid20 table">
|
||
<span style="grid-row: 1; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
Roll initiative: <select id="tex4" name="attr_init_mod">
|
||
<option value="-4">-4 ini, +2 AP</option>
|
||
<option value="-2">-2 ini, +1 AP</option>
|
||
<option value="0" selected>Unmodified</option>
|
||
<option value="2">+2 ini, -1 AP</option>
|
||
<option value="4">+4 ini, -2 AP</option>
|
||
</select>
|
||
<button type="action" name="act_roll_initiative" class="rollButton" style="position: relative; top: 6px;"/>
|
||
</div>
|
||
</span>
|
||
</div>
|
||
<div class="grid21 table">
|
||
<span width="380" style="grid-row: 1; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
<span class="title1">AP: </span> <input type="text" id="num" name="attr_ap">
|
||
</div>
|
||
</span>
|
||
</div>
|
||
<br>
|
||
<div class="grid22 table">
|
||
<span width="380" style="grid-row: 1; grid-column: 1;" class="cell">
|
||
<div class="title1">
|
||
Fate
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 2; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
<span class="small-font">Fate: </span><input type="text" id="num" name="attr_gf" value="2"> / <input type="text" id="num" name="attr_max_gf" value="2">
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 1;" class="cell">
|
||
<div align="center">
|
||
<button type="action" name="act_reroll" class="rerollButton">Reroll</button>
|
||
</div>
|
||
</span>
|
||
</div>
|
||
<br>
|
||
<div class="title1" style="width: 380px" align="center">
|
||
Advantages and disadvantages
|
||
<input type="hidden" name="attr_advantage_xp" value="0">
|
||
<button type="action" name="act_addLine" value="advantages" class="levelUpButton" style="width:18px; height:18px; background-size: contain;"/><br>
|
||
<div class="repeating-section-advantages">
|
||
<div class="repeating-section-advantages__header">
|
||
<span class="small-font">X</span>
|
||
<span class="small-font">Name</span>
|
||
<span class="small-font">Cost</span>
|
||
</div>
|
||
<fieldset class="repeating_advantages">
|
||
<button type="action" name="act_delete" class="levelDownButton" style="width: 18px; height 18px; background-size: contain;"/>
|
||
<input type="text" name="attr_advantage_name" id="tex4">
|
||
<input type="text" name="attr_advantage_cost" id="tex3">
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
<br>
|
||
<div class="title1" style="width: 380px" align="center">
|
||
Resources
|
||
<input type="hidden" name="attr_resource_xp" value="0">
|
||
<button type="action" name="act_addLine" value="resources" class="levelUpButton" style="width:18px; height:18px; background-size: contain;"/><br>
|
||
<div class="repeating-section-resources">
|
||
<div class="repeating-section-resources__header">
|
||
<span class="small-font">X</span>
|
||
<span class="small-font">Name</span>
|
||
<span class="small-font">Level</span>
|
||
<span class="small-font">Cost</span>
|
||
</div>
|
||
<fieldset class="repeating_resources">
|
||
<button type="action" name="act_delete" class="levelDownButton" style="width: 18px; height 18px; background-size: contain;"/>
|
||
<input type="text" name="attr_resource_name" id="tex4">
|
||
<input type="text" name="attr_resource_level" id="tex3">
|
||
<input type="text" name="attr_resource_cost" id="tex3">
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
<br>
|
||
<div class="title1" style="width: 380px" align="center">
|
||
Backgrounds
|
||
<input type="hidden" name="attr_background_xp" value="0">
|
||
<button type="action" name="act_addLine" value="backgrounds" class="levelUpButton" style="width:18px; height:18px; background-size: contain;"/><br>
|
||
<div class="repeating-section-backgrounds">
|
||
<div class="repeating-section-backgrounds__header">
|
||
<span class="small-font">X</span>
|
||
<span class="small-font">Name</span>
|
||
<span class="small-font">Cost</span>
|
||
</div>
|
||
<fieldset class="repeating_backgrounds">
|
||
<button type="action" name="act_delete" class="levelDownButton" style="width: 18px; height 18px; background-size: contain;"/>
|
||
<input type="text" name="attr_background_name" id="tex4">
|
||
<input type="text" name="attr_background_cost" id="tex3">
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
<div class="grid23 table">
|
||
<span width="380" style="grid-row: 1; grid-column: 1;" class="cell">
|
||
<div class="title1">
|
||
Carried gear<br>
|
||
<div align="center">
|
||
<textarea name="attr_carried_gear" cols="60" rows="10" style="height:500px"/>
|
||
</div>
|
||
</div>
|
||
</span>
|
||
</div>
|
||
</div>
|
||
</span>
|
||
<span width="400" style="grid-row: 2; grid-column: 2;" class="cell">
|
||
<div id="medium-font" class="grid24 table">
|
||
<span colspan="4" style="grid-row: 1; grid-column: 1 / span 4;" class="cell">
|
||
<div class="title1">
|
||
Skills
|
||
</div>
|
||
</span>
|
||
<span colspan="4" style="grid-row: 2; grid-column: 1 / span 4;" class="cell">
|
||
<div class="title2" align="center">
|
||
<br>
|
||
Astronautics
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 1;" class="cell">
|
||
Bridge Tech
|
||
<input type="hidden" name="attr_bridge_tech_talent" value="0">
|
||
<input type="hidden" name="attr_bridge_tech_XP" value="0">
|
||
<input type="hidden" name="attr_bridge_tech_bonus" value="0">
|
||
<input type="hidden" name="attr_bridge_tech_training_time" value="1 month">
|
||
<input type="hidden" name="attr_bridge_tech_difficulty" value="7">
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_bridge_tech" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_bridge_tech" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_bridge_tech" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 1;" class="cell">
|
||
Mounted Weaponry
|
||
<input type="hidden" name="attr_mounted_weaponry_talent" value="0">
|
||
<input type="hidden" name="attr_mounted_weaponry_XP" value="0">
|
||
<input type="hidden" name="attr_mounted_weaponry_bonus" value="0">
|
||
<input type="hidden" name="attr_mounted_weaponry_training_time" value="1 month">
|
||
<input type="hidden" name="attr_mounted_weaponry_difficulty" value="7">
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_mounted_weaponry" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_mounted_weaponry" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 4; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_mounted_weaponry" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 5; grid-column: 1;" class="cell">
|
||
Pilot Spacecraft
|
||
<input type="hidden" name="attr_pilot_spacecraft_talent" value="0">
|
||
<input type="hidden" name="attr_pilot_spacecraft_XP" value="0">
|
||
<input type="hidden" name="attr_pilot_spacecraft_bonus" value="0">
|
||
<input type="hidden" name="attr_pilot_spacecraft_training_time" value="6 months">
|
||
<input type="hidden" name="attr_pilot_spacecraft_difficulty" value="7">
|
||
</span>
|
||
<span style="grid-row: 5; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_pilot_spacecraft" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 5; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_pilot_spacecraft" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 5; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_pilot_spacecraft" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 6; grid-column: 1;" class="cell">
|
||
Vehicle Engineering
|
||
<input type="hidden" name="attr_vehicle_engineering_talent" value="0">
|
||
<input type="hidden" name="attr_vehicle_engineering_XP" value="0">
|
||
<input type="hidden" name="attr_vehicle_engineering_bonus" value="0">
|
||
<input type="hidden" name="attr_vehicle_engineering_training_time" value="1 year">
|
||
<input type="hidden" name="attr_vehicle_engineering_difficulty" value="7">
|
||
</span>
|
||
<span style="grid-row: 6; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_vehicle_engineering" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 6; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_vehicle_engineering" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 6; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_vehicle_engineering" class="editButton"/>
|
||
</span>
|
||
<span colspan="4" style="grid-row: 7; grid-column: 1 / span 4;" class="cell">
|
||
<div class="title2" align="center">
|
||
<br>
|
||
Civilizational
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 8; grid-column: 1;" class="cell">
|
||
Drive Ground Vehicle
|
||
<input type="hidden" name="attr_drive_ground_vehicle_talent" value="0">
|
||
<input type="hidden" name="attr_drive_ground_vehicle_XP" value="0">
|
||
<input type="hidden" name="attr_drive_ground_vehicle_bonus" value="0">
|
||
<input type="hidden" name="attr_drive_ground_vehicle_training_time" value="1 month">
|
||
<input type="hidden" name="attr_drive_ground_vehicle_difficulty" value="5">
|
||
</span>
|
||
<span style="grid-row: 8; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_drive_ground_vehicle" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 8; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_drive_ground_vehicle" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 8; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_drive_ground_vehicle" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 9; grid-column: 1;" class="cell">
|
||
Knowledge (Corporate)
|
||
<input type="hidden" name="attr_knowledge_corporate_talent" value="0">
|
||
<input type="hidden" name="attr_knowledge_corporate_XP" value="0">
|
||
<input type="hidden" name="attr_knowledge_corporate_bonus" value="0">
|
||
<input type="hidden" name="attr_knowledge_corporate_training_time" value="6 months">
|
||
<input type="hidden" name="attr_knowledge_corporate_difficulty" value="6">
|
||
</span>
|
||
<span style="grid-row: 9; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_knowledge_corporate" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 9; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_knowledge_corporate" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 9; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_knowledge_corporate" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 10; grid-column: 1;" class="cell">
|
||
Knowledge (Planets)
|
||
<input type="hidden" name="attr_knowledge_planets_talent" value="0">
|
||
<input type="hidden" name="attr_knowledge_planets_XP" value="0">
|
||
<input type="hidden" name="attr_knowledge_planets_bonus" value="0">
|
||
<input type="hidden" name="attr_knowledge_planets_training_time" value="6 months">
|
||
<input type="hidden" name="attr_knowledge_planets_difficulty" value="7">
|
||
</span>
|
||
<span style="grid-row: 10; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_knowledge_planets" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 10; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_knowledge_planets" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 10; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_knowledge_planets" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 11; grid-column: 1;" class="cell">
|
||
Pilot Aircraft
|
||
<input type="hidden" name="attr_pilot_aircraft_talent" value="0">
|
||
<input type="hidden" name="attr_pilot_aircraft_XP" value="0">
|
||
<input type="hidden" name="attr_pilot_aircraft_bonus" value="0">
|
||
<input type="hidden" name="attr_pilot_aircraft_training_time" value="2 months">
|
||
<input type="hidden" name="attr_pilot_aircraft_difficulty" value="7">
|
||
</span>
|
||
<span style="grid-row: 11; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_pilot_aircraft" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 11; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_pilot_aircraft" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 11; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_pilot_aircraft" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 12; grid-column: 1;" class="cell">
|
||
Knowledge (Urban)
|
||
<input type="hidden" name="attr_knowledge_urban_talent" value="0">
|
||
<input type="hidden" name="attr_knowledge_urban_XP" value="0">
|
||
<input type="hidden" name="attr_knowledge_urban_bonus" value="0">
|
||
<input type="hidden" name="attr_knowledge_urban_training_time" value="0">
|
||
<input type="hidden" name="attr_knowledge_urban_difficulty" value="6">
|
||
</span>
|
||
<span style="grid-row: 12; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_knowledge_urban" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 12; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_knowledge_urban" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 12; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_knowledge_urban" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 13; grid-column: 1;" class="cell">
|
||
Trade
|
||
<input type="hidden" name="attr_trade_talent" value="0">
|
||
<input type="hidden" name="attr_trade_XP" value="0">
|
||
<input type="hidden" name="attr_trade_bonus" value="0">
|
||
<input type="hidden" name="attr_trade_training_time" value="1 month">
|
||
<input type="hidden" name="attr_trade_difficulty" value="6">
|
||
</span>
|
||
<span style="grid-row: 13; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_trade" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 13; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_trade" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 13; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_trade" class="editButton"/>
|
||
</span>
|
||
<span colspan="4" style="grid-row: 14; grid-column: 1 / span 4;" class="cell">
|
||
<div class="title2" align="center">
|
||
<br>
|
||
Combat
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 15; grid-column: 1;" class="cell">
|
||
Aim
|
||
<input type="hidden" name="attr_aim_talent" value="0">
|
||
<input type="hidden" name="attr_aim_XP" value="0">
|
||
<input type="hidden" name="attr_aim_bonus" value="0">
|
||
<input type="hidden" name="attr_aim_training_time" value="0">
|
||
<input type="hidden" name="attr_aim_difficulty" value="7">
|
||
</span>
|
||
<span style="grid-row: 15; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_aim" value="2" readonly>
|
||
</span>
|
||
<span style="grid-row: 15; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_aim" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 15; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_aim" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 16; grid-column: 1;" class="cell">
|
||
Athletics
|
||
<input type="hidden" name="attr_athletics_talent" value="0">
|
||
<input type="hidden" name="attr_athletics_XP" value="0">
|
||
<input type="hidden" name="attr_athletics_bonus" value="0">
|
||
<input type="hidden" name="attr_athletics_training_time" value="0">
|
||
<input type="hidden" name="attr_athletics_difficulty" value="5">
|
||
</span>
|
||
<span style="grid-row: 16; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_athletics" value="1" readonly>
|
||
</span>
|
||
<span style="grid-row: 16; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_athletics" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 16; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_athletics" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 17; grid-column: 1;" class="cell">
|
||
Endurance
|
||
<input type="hidden" name="attr_endurance_talent" value="0">
|
||
<input type="hidden" name="attr_endurance_XP" value="0">
|
||
<input type="hidden" name="attr_endurance_bonus" value="0">
|
||
<input type="hidden" name="attr_endurance_training_time" value="0">
|
||
<input type="hidden" name="attr_endurance_difficulty" value="6">
|
||
</span>
|
||
<span style="grid-row: 17; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_endurance" value="1" readonly>
|
||
</span>
|
||
<span style="grid-row: 17; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_endurance" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 17; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_endurance" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 18; grid-column: 1;" class="cell">
|
||
Melee
|
||
<input type="hidden" name="attr_melee_talent" value="0">
|
||
<input type="hidden" name="attr_melee_XP" value="0">
|
||
<input type="hidden" name="attr_melee_bonus" value="0">
|
||
<input type="hidden" name="attr_melee_training_time" value="0">
|
||
<input type="hidden" name="attr_melee_difficulty" value="8">
|
||
</span>
|
||
<span style="grid-row: 18; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_melee" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 18; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_melee" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 18; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_melee" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 19; grid-column: 1;" class="cell">
|
||
Reaction
|
||
<input type="hidden" name="attr_reaction_talent" value="0">
|
||
<input type="hidden" name="attr_reaction_XP" value="0">
|
||
<input type="hidden" name="attr_reaction_bonus" value="0">
|
||
<input type="hidden" name="attr_reaction_training_time" value="0">
|
||
<input type="hidden" name="attr_reaction_difficulty" value="6">
|
||
</span>
|
||
<span style="grid-row: 19; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_reaction" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 19; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_reaction" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 19; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_reaction" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 20; grid-column: 1;" class="cell">
|
||
Throw
|
||
<input type="hidden" name="attr_throw_talent" value="0">
|
||
<input type="hidden" name="attr_throw_XP" value="0">
|
||
<input type="hidden" name="attr_throw_bonus" value="0">
|
||
<input type="hidden" name="attr_throw_training_time" value="0">
|
||
<input type="hidden" name="attr_throw_difficulty" value="5">
|
||
</span>
|
||
<span style="grid-row: 20; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_throw" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 20; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_throw" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 20; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_throw" class="editButton"/>
|
||
</span>
|
||
<span colspan="4" style="grid-row: 21; grid-column: 1 / span 4;" class="cell">
|
||
<div class="title2" align="center">
|
||
<br>
|
||
Infiltration
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 22; grid-column: 1;" class="cell">
|
||
Notice
|
||
<input type="hidden" name="attr_notice_talent" value="0">
|
||
<input type="hidden" name="attr_notice_XP" value="0">
|
||
<input type="hidden" name="attr_notice_bonus" value="0">
|
||
<input type="hidden" name="attr_notice_training_time" value="0">
|
||
<input type="hidden" name="attr_notice_difficulty" value="7">
|
||
</span>
|
||
<span style="grid-row: 22; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_notice" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 22; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_notice" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 22; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_notice" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 23; grid-column: 1;" class="cell">
|
||
Hack Security
|
||
<input type="hidden" name="attr_hack_security_talent" value="0">
|
||
<input type="hidden" name="attr_hack_security_XP" value="0">
|
||
<input type="hidden" name="attr_hack_security_bonus" value="0">
|
||
<input type="hidden" name="attr_hack_security_training_time" value="2 months">
|
||
<input type="hidden" name="attr_hack_security_difficulty" value="6">
|
||
</span>
|
||
<span style="grid-row: 23; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_hack_security" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 23; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_hack_security" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 23; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_hack_security" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 24; grid-column: 1;" class="cell">
|
||
Search
|
||
<input type="hidden" name="attr_search_talent" value="0">
|
||
<input type="hidden" name="attr_search_XP" value="0">
|
||
<input type="hidden" name="attr_search_bonus" value="0">
|
||
<input type="hidden" name="attr_search_training_time" value="0">
|
||
<input type="hidden" name="attr_search_difficulty" value="5">
|
||
</span>
|
||
<span style="grid-row: 24; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_search" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 24; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_search" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 24; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_search" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 25; grid-column: 1;" class="cell">
|
||
Sleight of Hand
|
||
<input type="hidden" name="attr_sleight_of_hand_talent" value="0">
|
||
<input type="hidden" name="attr_sleight_of_hand_XP" value="0">
|
||
<input type="hidden" name="attr_sleight_of_hand_bonus" value="0">
|
||
<input type="hidden" name="attr_sleight_of_hand_training_time" value="1 month">
|
||
<input type="hidden" name="attr_sleight_of_hand_difficulty" value="8">
|
||
</span>
|
||
<span style="grid-row: 25; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_sleight_of_hand" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 25; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_sleight_of_hand" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 25; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_sleight_of_hand" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 26; grid-column: 1;" class="cell">
|
||
Sneak
|
||
<input type="hidden" name="attr_sneak_talent" value="0">
|
||
<input type="hidden" name="attr_sneak_XP" value="0">
|
||
<input type="hidden" name="attr_sneak_bonus" value="0">
|
||
<input type="hidden" name="attr_sneak_training_time" value="0">
|
||
<input type="hidden" name="attr_sneak_difficulty" value="7">
|
||
</span>
|
||
<span style="grid-row: 26; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_sneak" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 26; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_sneak" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 26; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_sneak" class="editButton"/>
|
||
</span>
|
||
<span colspan="4" style="grid-row: 27; grid-column: 1 / span 4;" class="cell">
|
||
<div class="title2" align="center">
|
||
<br>
|
||
Science
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 28; grid-column: 1;" class="cell">
|
||
Astronomy
|
||
<input type="hidden" name="attr_astronomy_talent" value="0">
|
||
<input type="hidden" name="attr_astronomy_XP" value="0">
|
||
<input type="hidden" name="attr_astronomy_bonus" value="0">
|
||
<input type="hidden" name="attr_astronomy_training_time" value="3 months">
|
||
<input type="hidden" name="attr_astronomy_difficulty" value="6">
|
||
</span>
|
||
<span style="grid-row: 28; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_astronomy" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 28; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_astronomy" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 28; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_astronomy" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 29; grid-column: 1;" class="cell">
|
||
Computer Science
|
||
<input type="hidden" name="attr_computer_science_talent" value="0">
|
||
<input type="hidden" name="attr_computer_science_XP" value="0">
|
||
<input type="hidden" name="attr_computer_science_bonus" value="0">
|
||
<input type="hidden" name="attr_computer_science_training_time" value="6 months">
|
||
<input type="hidden" name="attr_computer_science_difficulty" value="8">
|
||
</span>
|
||
<span style="grid-row: 29; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_computer_science" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 29; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_computer_science" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 29; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_computer_science" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 30; grid-column: 1;" class="cell">
|
||
Medicine
|
||
<input type="hidden" name="attr_medicine_talent" value="0">
|
||
<input type="hidden" name="attr_medicine_XP" value="0">
|
||
<input type="hidden" name="attr_medicine_bonus" value="0">
|
||
<input type="hidden" name="attr_medicine_training_time" value="6 months">
|
||
<input type="hidden" name="attr_medicine_difficulty" value="7">
|
||
</span>
|
||
<span style="grid-row: 30; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_medicine" value="1" readonly>
|
||
</span>
|
||
<span style="grid-row: 30; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_medicine" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 30; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_medicine" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 31; grid-column: 1;" class="cell">
|
||
Natural Sciences
|
||
<input type="hidden" name="attr_natural_sciences_talent" value="0">
|
||
<input type="hidden" name="attr_natural_sciences_XP" value="0">
|
||
<input type="hidden" name="attr_natural_sciences_bonus" value="0">
|
||
<input type="hidden" name="attr_natural_sciences_training_time" value="6 months">
|
||
<input type="hidden" name="attr_natural_sciences_difficulty" value="8">
|
||
</span>
|
||
<span style="grid-row: 31; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_natural_sciences" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 31; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_natural_sciences" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 31; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_natural_sciences" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 32; grid-column: 1;" class="cell">
|
||
Robotics
|
||
<input type="hidden" name="attr_robotics_talent" value="0">
|
||
<input type="hidden" name="attr_robotics_XP" value="0">
|
||
<input type="hidden" name="attr_robotics_bonus" value="0">
|
||
<input type="hidden" name="attr_robotics_training_time" value="6 months">
|
||
<input type="hidden" name="attr_robotics_difficulty" value="8">
|
||
</span>
|
||
<span style="grid-row: 32; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_robotics" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 32; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_robotics" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 32; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_robotics" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 33; grid-column: 1;" class="cell">
|
||
Weapons Engineering
|
||
<input type="hidden" name="attr_weapons_engineering_talent" value="0">
|
||
<input type="hidden" name="attr_weapons_engineering_XP" value="0">
|
||
<input type="hidden" name="attr_weapons_engineering_bonus" value="0">
|
||
<input type="hidden" name="attr_weapons_engineering_training_time" value="6 months">
|
||
<input type="hidden" name="attr_weapons_engineering_difficulty" value="8">
|
||
</span>
|
||
<span style="grid-row: 33; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_weapons_engineering" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 33; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_weapons_engineering" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 33; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_weapons_engineering" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 34; grid-column: 1;" class="cell">
|
||
Xenobiology
|
||
<input type="hidden" name="attr_xenobiology_talent" value="0">
|
||
<input type="hidden" name="attr_xenobiology_XP" value="0">
|
||
<input type="hidden" name="attr_xenobiology_bonus" value="0">
|
||
<input type="hidden" name="attr_xenobiology_training_time" value="1 year">
|
||
<input type="hidden" name="attr_xenobiology_difficulty" value="10">
|
||
</span>
|
||
<span style="grid-row: 34; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_xenobiology" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 34; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_xenobiology" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 34; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_xenobiology" class="editButton"/>
|
||
</span>
|
||
<span colspan="4" style="grid-row: 35; grid-column: 1 / span 4;" class="cell">
|
||
<div class="title2" align="center">
|
||
<br>
|
||
Social
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 36; grid-column: 1;" class="cell">
|
||
Convince
|
||
<input type="hidden" name="attr_convince_talent" value="0">
|
||
<input type="hidden" name="attr_convince_XP" value="0">
|
||
<input type="hidden" name="attr_convince_bonus" value="0">
|
||
<input type="hidden" name="attr_convince_training_time" value="0">
|
||
<input type="hidden" name="attr_convince_difficulty" value="7">
|
||
</span>
|
||
<span style="grid-row: 36; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_convince" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 36; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_convince" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 36; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_convince" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 37; grid-column: 1;" class="cell">
|
||
Deceive
|
||
<input type="hidden" name="attr_deceive_talent" value="0">
|
||
<input type="hidden" name="attr_deceive_XP" value="0">
|
||
<input type="hidden" name="attr_deceive_bonus" value="0">
|
||
<input type="hidden" name="attr_deceive_training_time" value="0">
|
||
<input type="hidden" name="attr_deceive_difficulty" value="6">
|
||
</span>
|
||
<span style="grid-row: 37; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_deceive" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 37; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_deceive" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 37; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_deceive" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 38; grid-column: 1;" class="cell">
|
||
Empathy
|
||
<input type="hidden" name="attr_empathy_talent" value="0">
|
||
<input type="hidden" name="attr_empathy_XP" value="0">
|
||
<input type="hidden" name="attr_empathy_bonus" value="0">
|
||
<input type="hidden" name="attr_empathy_training_time" value="0">
|
||
<input type="hidden" name="attr_empathy_difficulty" value="7">
|
||
</span>
|
||
<span style="grid-row: 38; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_empathy" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 38; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_empathy" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 38; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_empathy" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 39; grid-column: 1;" class="cell">
|
||
Intimidate
|
||
<input type="hidden" name="attr_intimidate_talent" value="0">
|
||
<input type="hidden" name="attr_intimidate_XP" value="0">
|
||
<input type="hidden" name="attr_intimidate_bonus" value="0">
|
||
<input type="hidden" name="attr_intimidate_training_time" value="0">
|
||
<input type="hidden" name="attr_intimidate_difficulty" value="5">
|
||
</span>
|
||
<span style="grid-row: 39; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_intimidate" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 39; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_intimidate" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 39; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_intimidate" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 40; grid-column: 1;" class="cell">
|
||
Lead
|
||
<input type="hidden" name="attr_lead_talent" value="0">
|
||
<input type="hidden" name="attr_lead_XP" value="0">
|
||
<input type="hidden" name="attr_lead_bonus" value="0">
|
||
<input type="hidden" name="attr_lead_training_time" value="0">
|
||
<input type="hidden" name="attr_lead_difficulty" value="7">
|
||
</span>
|
||
<span style="grid-row: 40; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_lead" value="1" readonly>
|
||
</span>
|
||
<span style="grid-row: 40; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_lead" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 40; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_lead" class="editButton"/>
|
||
</span>
|
||
<span colspan="4" style="grid-row: 41; grid-column: 1 / span 4;" class="cell">
|
||
<div class="title2" align="center">
|
||
<br>
|
||
Supplementary (Art)
|
||
<input type="hidden" name="attr_art_talent" value="0">
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 42; grid-column: 1;" class="cell">
|
||
<input type="text" id="tex" name="attr_art1_name" value="">
|
||
<input type="hidden" name="attr_art1_XP" value="0">
|
||
<input type="hidden" name="attr_art1_bonus" value="0">
|
||
<input type="hidden" name="attr_art1_training_time" value="0">
|
||
<input type="hidden" name="attr_art1_difficulty" value="5">
|
||
</span>
|
||
<span style="grid-row: 42; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_art1" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 42; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_art1" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 42; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_art1" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 43; grid-column: 1;" class="cell">
|
||
<input type="text" id="tex" name="attr_art2_name" value="">
|
||
<input type="hidden" name="attr_art2_XP" value="0">
|
||
<input type="hidden" name="attr_art2_bonus" value="0">
|
||
<input type="hidden" name="attr_art2_training_time" value="0">
|
||
<input type="hidden" name="attr_art2_difficulty" value="5">
|
||
</span>
|
||
<span style="grid-row: 43; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_art2" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 43; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_art2" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 43; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_art2" class="editButton"/>
|
||
</span>
|
||
<span colspan="4" style="grid-row: 44; grid-column: 1 / span 4;" class="cell">
|
||
<div class="title2" align="center">
|
||
<br>
|
||
Supplementary (Hobby)
|
||
<input type="hidden" name="attr_hobby_talent" value="0">
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 45; grid-column: 1;" class="cell">
|
||
<input type="hidden" name="attr_hobby1_name_disabler" class="disable-hobby1-name" value="1">
|
||
<input type="text" id="tex" name="attr_hobby1_name" value="" class="hobby1-name-enabled">
|
||
<input type="text" id="tex" name="attr_hobby1_name" class="hobby1-name-disabled" readonly>
|
||
<input type="hidden" name="attr_hobby1_XP" value="0">
|
||
<input type="hidden" name="attr_hobby1_bonus" value="0">
|
||
<input type="hidden" name="attr_hobby1_training_time" value="0">
|
||
<input type="hidden" name="attr_hobby1_difficulty" value="5">
|
||
</span>
|
||
<span style="grid-row: 45; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_hobby1" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 45; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_hobby1" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 45; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_hobby1" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 46; grid-column: 1;" class="cell">
|
||
<input type="text" id="tex" name="attr_hobby2_name" value="">
|
||
<input type="hidden" name="attr_hobby2_XP" value="0">
|
||
<input type="hidden" name="attr_hobby2_bonus" value="0">
|
||
<input type="hidden" name="attr_hobby2_training_time" value="0">
|
||
<input type="hidden" name="attr_hobby2_difficulty" value="5">
|
||
</span>
|
||
<span style="grid-row: 46; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_hobby2" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 46; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_hobby2" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 46; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_hobby2" class="editButton"/>
|
||
</span>
|
||
<span colspan="4" style="grid-row: 47; grid-column: 1 / span 4;" class="cell">
|
||
<div class="title2" align="center">
|
||
<br>
|
||
Supplementary (Language)
|
||
<input type="hidden" name="attr_language_talent" value="0">
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 48; grid-column: 1;" class="cell">
|
||
<input type="hidden" name="attr_language1_name_disabler" class="disable-language1-name" value="1">
|
||
<input type="text" id="tex" name="attr_language1_name" value="Syndicate English" class="language1-name-enabled">
|
||
<input type="text" id="tex" name="attr_language1_name" value="Syndicate English" class="language1-name-disabled" readonly>
|
||
<input type="hidden" name="attr_language1_XP" value="0">
|
||
<input type="hidden" name="attr_language1_bonus" value="0">
|
||
<input type="hidden" name="attr_language1_training_time" value="2 months">
|
||
<input type="hidden" name="attr_language1_difficulty" value="5">
|
||
</span>
|
||
<span style="grid-row: 48; grid-column: 2;" class="cell">
|
||
<input type="hidden" name="attr_language1" value="3"/>
|
||
<input type="text" id="num" name="attr_language1" value="@{language1}" readonly>
|
||
</span>
|
||
<span style="grid-row: 48; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_language1" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 48; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_language1" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 49; grid-column: 1;" class="cell">
|
||
<input type="hidden" name="attr_language2_name_disabler" class="disable-language2-name" value="1">
|
||
<input type="text" id="tex" name="attr_language2_name" value="Russian" class="language2-name-enabled"/>
|
||
<input type="text" id="tex" name="attr_language2_name" value="Russian" class="language2-name-disabled" readonly>
|
||
<input type="hidden" name="attr_language2_XP" value="0">
|
||
<input type="hidden" name="attr_language2_bonus" value="0">
|
||
<input type="hidden" name="attr_language2_training_time" value="2 months">
|
||
<input type="hidden" name="attr_language2_difficulty" value="5">
|
||
</span>
|
||
<span style="grid-row: 49; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_language2" value="5" readonly>
|
||
</span>
|
||
<span style="grid-row: 49; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_language2" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 49; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_language2" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 50; grid-column: 1;" class="cell">
|
||
<input type="text" id="tex" name="attr_language3_name" value=""/>
|
||
<input type="hidden" name="attr_language3_XP" value="0">
|
||
<input type="hidden" name="attr_language3_bonus" value="0">
|
||
<input type="hidden" name="attr_language3_training_time" value="2 months">
|
||
<input type="hidden" name="attr_language3_difficulty" value="5">
|
||
</span>
|
||
<span style="grid-row: 50; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_language3" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 50; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_language3" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 50; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_language3" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 51; grid-column: 1;" class="cell">
|
||
<input type="text" id="tex" name="attr_language4_name" value=""/>
|
||
<input type="hidden" name="attr_language4_XP" value="0">
|
||
<input type="hidden" name="attr_language4_bonus" value="0">
|
||
<input type="hidden" name="attr_language4_training_time" value="2 months">
|
||
<input type="hidden" name="attr_language4_difficulty" value="5">
|
||
</span>
|
||
<span style="grid-row: 51; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_language4" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 51; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_language4" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 51; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_language4" class="editButton"/>
|
||
</span>
|
||
<span colspan="4" style="grid-row: 52; grid-column: 1 / span 4;" class="cell">
|
||
<div class="title2" align="center">
|
||
<br>
|
||
Supplementary (Profession)
|
||
<input type="hidden" name="attr_profession_talent" value="0">
|
||
</div>
|
||
</span>
|
||
<span style="grid-row: 53; grid-column: 1;" class="cell">
|
||
<input type="text" id="tex" name="attr_profession1_name" value="">
|
||
<input type="hidden" name="attr_profession1_XP" value="0">
|
||
<input type="hidden" name="attr_profession1_bonus" value="0">
|
||
<input type="hidden" name="attr_profession1_training_time" value="0">
|
||
<input type="hidden" name="attr_profession1_difficulty" value="5">
|
||
</span>
|
||
<span style="grid-row: 53; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_profession1" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 53; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_profession1" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 53; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_profession1" class="editButton"/>
|
||
</span>
|
||
<span style="grid-row: 54; grid-column: 1;" class="cell">
|
||
<input type="text" id="tex" name="attr_profession2_name" value="">
|
||
<input type="hidden" name="attr_profession2_XP" value="0">
|
||
<input type="hidden" name="attr_profession2_bonus" value="0">
|
||
<input type="hidden" name="attr_profession2_training_time" value="0">
|
||
<input type="hidden" name="attr_profession2_difficulty" value="5">
|
||
</span>
|
||
<span style="grid-row: 54; grid-column: 2;" class="cell">
|
||
<input type="text" id="num" name="attr_profession2" value="0" readonly>
|
||
</span>
|
||
<span style="grid-row: 54; grid-column: 3;" class="cell">
|
||
<button type="action" name="act_roll_profession2" class="rollButton"/>
|
||
</span>
|
||
<span style="grid-row: 54; grid-column: 4;" class="cell">
|
||
<button type="action" name="act_edit_profession2" class="editButton"/>
|
||
</span>
|
||
</div>
|
||
</span>
|
||
<span colspan="2" style="grid-row: 3; grid-column: 1 / span 2;" class="cell">
|
||
<div id="tiny-font" align="center">
|
||
Millenium Freelancers Character Sheet v3.2 by Zoltán Király. Join us on Discord: https://discord.gg/XV9MX8Yeme
|
||
</div>
|
||
</span>
|
||
</div>
|
||
</div>
|
||
|
||
<input type="hidden" name="attr_gear_page_hider" class="hide-gear-page" value="1">
|
||
<div id="gear_page" class="gear-page-hide">
|
||
<div align="center" class="main-title">
|
||
Gear
|
||
</div>
|
||
<div class="title3">
|
||
Money
|
||
</div>
|
||
<div class="grid25 table">
|
||
<span style="grid-row: 1; grid-column: 1;" class="cell">
|
||
Thaler account:
|
||
</span>
|
||
<span style="grid-row: 1; grid-column: 2;" class="cell">
|
||
Ŧ<input type="text" name="attr_money" id="tex4">
|
||
</span>
|
||
<span style="grid-row: 2; grid-column: 1;" class="cell">
|
||
Resupply:
|
||
</span>
|
||
<span style="grid-row: 2; grid-column: 2;" class="cell">
|
||
Ŧ<input type="text" name="attr_resupply" id="tex4" readonly>
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 1;" class="cell">
|
||
Petty cash:
|
||
</span>
|
||
<span style="grid-row: 3; grid-column: 2;" class="cell">
|
||
Ŧ<input type="text" name="attr_petty_cash" id="tex4" readonly>
|
||
</span>
|
||
<span colspan="2" style="grid-row: 4; grid-column: 1 / span 2;" class="cell">
|
||
Resupply list:<br>
|
||
<textarea></textarea>
|
||
</span>
|
||
</div><br>
|
||
<div class="title3">
|
||
Ranged Weapons <button type="action" name="act_addLine" value="weapons" class="levelUpButton" style="width:18px; height:18px; background-size: contain;"/>
|
||
</div>
|
||
<div class="repeating-section-weapons">
|
||
<div class="repeating-section__header">
|
||
<span class="small-font">X</span>
|
||
<span class="small-font">Name</span>
|
||
<span class="small-font">Description/mods</span>
|
||
<span class="small-font">Spread</span>
|
||
<span class="small-font">Burst</span>
|
||
<span class="small-font">Volley</span>
|
||
<span class="small-font">Clip</span>
|
||
<span class="small-font">Ammo</span>
|
||
<span class="small-font">Fire</span>
|
||
<span class="small-font">Equip</span>
|
||
</div>
|
||
<fieldset class="repeating_weapons">
|
||
<button type="action" name="act_delete" class="levelDownButton" style="width:18px; height:18px; background-size: contain;"/>
|
||
<input type="text" name="attr_weapon_name" id="tex4">
|
||
<input type="text" name="attr_weapon_mods" id="tex5">
|
||
<input type="text" name="attr_weapon_spread" id="tex3">
|
||
<input type="text" name="attr_weapon_burst" id="tex3">
|
||
<input type="text" name="attr_weapon_volley" id="tex3">
|
||
<span><input type="text" name="attr_weapon_clip_ammo" id="tex3">/<input type="text" name="attr_weapon_clip_capacity" id="tex3"></span>
|
||
<input type="text" name="attr_weapon_ammo" id="tex3">
|
||
<button type="action" name="act_openshoot" class="shootButton"/>
|
||
<input type="checkbox" name="attr_weapon_equipped">
|
||
</fieldset>
|
||
</div>
|
||
<br>
|
||
<div class="title3">
|
||
Melee Weapons <button type="action" name="act_addLine" value="melees" class="levelUpButton" style="width:18px; height:18px; background-size: contain;"/>
|
||
</div>
|
||
<div class="repeating-section-melees">
|
||
<div class="repeating-section-melees__header">
|
||
<span class="small-font">X</span>
|
||
<span class="small-font">Name</span>
|
||
<span class="small-font">Damage</span>
|
||
<span class="small-font">Description</span>
|
||
<span class="small-font">Punch</span>
|
||
<span class="small-font">Equip</span>
|
||
</div>
|
||
<fieldset class="repeating_melees">
|
||
<button type="action" name="act_delete" class="levelDownButton" style="width:18px; height:18px; background-size: contain;"/>
|
||
<input type="text" name="attr_melee_name" id="tex4">
|
||
<input type="text" name="attr_melee_damage" id="tex4">
|
||
<input type="text" name="attr_melee_description" id="tex5">
|
||
<button type="action" name="act_openshoot" class="shootButton"/>
|
||
<input type="checkbox" name="attr_melee_equipped">
|
||
</fieldset>
|
||
</div>
|
||
<br>
|
||
<div class="title3">
|
||
Ammunition <button type="action" name="act_addLine" value="ammo" class="levelUpButton" style="width:18px; height:18px; background-size: contain;"/>
|
||
</div>
|
||
<div class="repeating-section-ammo">
|
||
<div class="repeating-section-ammo__header">
|
||
<span class="small-font">X</span>
|
||
<span class="small-font">Class</span>
|
||
<span class="small-font">Variant</span>
|
||
<span class="small-font">Damage</span>
|
||
<span class="small-font">Quantity</span>
|
||
<span class="small-font">Description</span>
|
||
</div>
|
||
<fieldset class="repeating_ammo">
|
||
<button type="action" name="act_delete" class="levelDownButton" style="width:18px; height:18px; background-size: contain;"/>
|
||
<input type="text" name="attr_ammo_class" id="tex3">
|
||
<input type="text" name="attr_ammo_variant" id="tex4">
|
||
<input type="text" name="attr_ammo_damage" id="tex4">
|
||
<input type="text" name="attr_ammo_quantity" id="tex3">
|
||
<input type="text" name="attr_ammo_description" id="tex5">
|
||
</fieldset>
|
||
</div>
|
||
<br>
|
||
<div class="title3">
|
||
Armor <button type="action" name="act_addLine" value="armor" class="levelUpButton" style="width:18px; height:18px; background-size: contain;"/>
|
||
</div>
|
||
<div class="repeating-section-armor">
|
||
<div class="repeating-section-armor__header">
|
||
<span class="small-font">X</span>
|
||
<span class="small-font">Armor</span>
|
||
<span class="small-font">DA</span>
|
||
<span class="small-font">Slow</span>
|
||
<span class="small-font">CMR</span>
|
||
<span class="small-font">HP</span>
|
||
<span class="small-font">+HP</span>
|
||
<span class="small-font">Description</span>
|
||
<span class="small-font">Equip</span>
|
||
</div>
|
||
<fieldset class="repeating_armor">
|
||
<button type="action" name="act_delete" class="levelDownButton" style="width:18px; height:18px; background-size: contain;"/>
|
||
<input type="text" name="attr_armor_name" id="tex4">
|
||
<input type="text" name="attr_armor_da" id="tex3">
|
||
<input type="text" name="attr_armor_slow" id="tex3">
|
||
<input type="text" name="attr_armor_cmr" id="tex3">
|
||
<span><input type="hidden" name="attr_armor_hp"><input type="text" name="attr_armor_max_hp" id="tex3"></span>
|
||
<span><input type="hidden" name="attr_armor_bonus_hp"><input type="text" name="attr_armor_max_bonus_hp" id="tex3"></span>
|
||
<input type="text" name="attr_armor_description" id="tex5">
|
||
<input type="checkbox" name="attr_armor_equipped">
|
||
</fieldset>
|
||
</div>
|
||
<br>
|
||
<div class="title3">
|
||
Other Gear
|
||
</div>
|
||
<textarea name="attr_other_gear" class="largeTextField"></textarea>
|
||
</div>
|
||
|
||
<input type="hidden" name="attr_notes_page_hider" class="hide-notes-page" value="1">
|
||
<div id="notes_page" class="notes-page-hide">
|
||
<div align="center" class="main-title">
|
||
Notes
|
||
</div>
|
||
<div class="title3">
|
||
Jornual
|
||
</div>
|
||
<textarea name="attr_jornual" class="largeTextField"></textarea>
|
||
<div class="title3">
|
||
Companions
|
||
</div>
|
||
<textarea name="attr_companions" class="largeTextField"></textarea>
|
||
<div class="title3">
|
||
Misc
|
||
</div>
|
||
<textarea name="attr_misc" class="largeTextField"></textarea>
|
||
</div>
|
||
</div>
|