mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-23 08:31:57 +00:00
Fixed the vendor sprite being wonky. (Unreported) Fixes #5267 Adjusted Battlemonster Star calculation. Slightly lowered the cost of battlemonster cards. Deck searching speed is now based on the number of cards in the deck.
523 lines
19 KiB
Plaintext
523 lines
19 KiB
Plaintext
#define BATTLE_MONSTERS_GEN_PREFIX 1
|
|
#define BATTLE_MONSTERS_GEN_ROOT 2
|
|
#define BATTLE_MONSTERS_GEN_SUFFIX 3
|
|
#define BATTLE_MONSTERS_GEN_TRAP 4
|
|
#define BATTLE_MONSTERS_GEN_SPELL 5
|
|
|
|
var/datum/controller/subsystem/battle_monsters/SSbattlemonsters
|
|
|
|
/datum/controller/subsystem/battle_monsters
|
|
name = "Battle Monsters"
|
|
init_order = SS_INIT_MISC_FIRST
|
|
flags = SS_NO_FIRE
|
|
|
|
var/list/monster_elements
|
|
var/list/monster_roots
|
|
var/list/monster_titles
|
|
|
|
var/list/monster_elements_rng
|
|
var/list/monster_roots_rng
|
|
var/list/monster_titles_rng
|
|
|
|
var/list/traps
|
|
var/list/spells
|
|
|
|
var/list/traps_rng
|
|
var/list/spells_rng
|
|
|
|
|
|
/datum/controller/subsystem/battle_monsters/New()
|
|
NEW_SS_GLOBAL(SSbattlemonsters)
|
|
|
|
/datum/controller/subsystem/battle_monsters/Initialize()
|
|
GenerateDatum(BATTLE_MONSTERS_GEN_PREFIX)
|
|
GenerateDatum(BATTLE_MONSTERS_GEN_ROOT)
|
|
GenerateDatum(BATTLE_MONSTERS_GEN_SUFFIX)
|
|
GenerateDatum(BATTLE_MONSTERS_GEN_TRAP)
|
|
GenerateDatum(BATTLE_MONSTERS_GEN_SPELL)
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/CreateCard(var/identifier,var/turf/cardloc)
|
|
var/list/splitstring = dd_text2List(identifier,",")
|
|
var/obj/item/battle_monsters/card/new_card
|
|
|
|
if(splitstring[1] == "spell_type")
|
|
new_card = new(cardloc,null,null,null,null,splitstring[2])
|
|
else if(splitstring[1] == "trap_type")
|
|
new_card = new(cardloc,null,null,null,splitstring[2],null)
|
|
else
|
|
new_card = new(cardloc,splitstring[1],splitstring[2],splitstring[3],null,null)
|
|
|
|
return new_card
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/GenerateDatum(var/generation_type)
|
|
|
|
var/list/datum_paths
|
|
|
|
switch(generation_type)
|
|
if(BATTLE_MONSTERS_GEN_PREFIX)
|
|
datum_paths = subtypesof(/datum/battle_monsters/element)
|
|
if(BATTLE_MONSTERS_GEN_ROOT)
|
|
datum_paths = subtypesof(/datum/battle_monsters/monster)
|
|
if(BATTLE_MONSTERS_GEN_SUFFIX)
|
|
datum_paths = subtypesof(/datum/battle_monsters/title)
|
|
if(BATTLE_MONSTERS_GEN_TRAP)
|
|
datum_paths = subtypesof(/datum/battle_monsters/trap)
|
|
if(BATTLE_MONSTERS_GEN_SPELL)
|
|
datum_paths = subtypesof(/datum/battle_monsters/spell)
|
|
|
|
var/list/id_datum_list = list()
|
|
var/list/id_rng_list = list()
|
|
|
|
for(var/path in datum_paths)
|
|
var/datum/battle_monsters/generated = new path()
|
|
if(!generated.id)
|
|
continue
|
|
id_datum_list[generated.id] = generated
|
|
id_rng_list[generated.id] = generated.rarity
|
|
|
|
switch(generation_type)
|
|
if(BATTLE_MONSTERS_GEN_PREFIX)
|
|
monster_elements = id_datum_list
|
|
monster_elements_rng = id_rng_list
|
|
if(BATTLE_MONSTERS_GEN_ROOT)
|
|
monster_roots = id_datum_list
|
|
monster_roots_rng = id_rng_list
|
|
if(BATTLE_MONSTERS_GEN_SUFFIX)
|
|
monster_titles = id_datum_list
|
|
monster_titles_rng = id_rng_list
|
|
if(BATTLE_MONSTERS_GEN_TRAP)
|
|
traps = id_datum_list
|
|
traps_rng = id_rng_list
|
|
if(BATTLE_MONSTERS_GEN_SPELL)
|
|
spells = id_datum_list
|
|
spells_rng = id_rng_list
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/GetRandomPrefix()
|
|
return FindMatchingPrefix(pickweight(monster_elements_rng))
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/GetRandomRoot()
|
|
return FindMatchingRoot(pickweight(monster_roots_rng))
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/GetRandomSuffix()
|
|
return FindMatchingSuffix(pickweight(monster_titles_rng))
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/GetRandomTrap()
|
|
return FindMatchingTrap(pickweight(traps_rng))
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/GetRandomSpell()
|
|
return FindMatchingSpell(pickweight(spells_rng))
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/GetRandomPrefix_Filtered(var/raremin,var/raremax)
|
|
var/list/edited_list = list()
|
|
|
|
for(var/id in monster_elements_rng)
|
|
var/score = monster_elements_rng[id]
|
|
if(score > raremax)
|
|
continue
|
|
if(score < raremin)
|
|
continue
|
|
edited_list[id] = score
|
|
|
|
if(edited_list.len <= 0)
|
|
edited_list = monster_elements_rng
|
|
|
|
return FindMatchingPrefix(pickweight(edited_list))
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/GetRandomRoot_Filtered(var/raremin,var/raremax)
|
|
var/list/edited_list = list()
|
|
|
|
for(var/id in monster_roots_rng)
|
|
var/score = monster_roots_rng[id]
|
|
if(score > raremax)
|
|
continue
|
|
if(score < raremin)
|
|
continue
|
|
edited_list[id] = score
|
|
|
|
if(edited_list.len <= 0)
|
|
edited_list = monster_roots_rng
|
|
|
|
return FindMatchingRoot(pickweight(edited_list))
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/GetRandomSuffix_Filtered(var/raremin,var/raremax)
|
|
var/list/edited_list = list()
|
|
|
|
for(var/id in monster_titles_rng)
|
|
var/score = monster_titles_rng[id]
|
|
if(score > raremax)
|
|
continue
|
|
if(score < raremin)
|
|
continue
|
|
edited_list[id] = score
|
|
|
|
if(edited_list.len <= 0)
|
|
edited_list = monster_titles_rng
|
|
|
|
return FindMatchingSuffix(pickweight(edited_list))
|
|
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/FindMatchingPrefix(var/text,var/failsafe = FALSE)
|
|
if(monster_elements[text])
|
|
return monster_elements[text]
|
|
else if(failsafe)
|
|
return GetRandomPrefix()
|
|
else
|
|
return
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/FindMatchingRoot(var/text,var/failsafe = FALSE)
|
|
if(monster_roots[text])
|
|
return monster_roots[text]
|
|
else if(failsafe)
|
|
return GetRandomRoot()
|
|
else
|
|
return
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/FindMatchingSuffix(var/text,var/failsafe = FALSE)
|
|
if(monster_titles[text])
|
|
return monster_titles[text]
|
|
else if(failsafe)
|
|
return GetRandomSuffix()
|
|
else
|
|
return
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/FindMatchingTrap(var/text,var/failsafe = FALSE)
|
|
if(traps[text])
|
|
return traps[text]
|
|
else if(failsafe)
|
|
return GetRandomTrap()
|
|
else
|
|
return
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/FindMatchingSpell(var/text,var/failsafe = FALSE)
|
|
if(spells[text])
|
|
return spells[text]
|
|
else if(failsafe)
|
|
return GetRandomSpell()
|
|
else
|
|
return
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/GetSpeciesGeneral(var/card_defense_type)
|
|
switch(card_defense_type)
|
|
if(BATTLE_MONSTERS_DEFENSETYPE_NONE)
|
|
return "monster"
|
|
if(BATTLE_MONSTERS_DEFENSETYPE_GIANT_DRAGON)
|
|
return "giant dragon"
|
|
if(BATTLE_MONSTERS_DEFENSETYPE_FERALDRAGON)
|
|
return "feral dragon"
|
|
if(BATTLE_MONSTERS_DEFENSETYPE_DRAGONHYBRID)
|
|
return "human-dragon hybrid"
|
|
if(BATTLE_MONSTERS_DEFENSETYPE_DRAGON)
|
|
return "dragon"
|
|
if(BATTLE_MONSTERS_DEFENSETYPE_DEMIGOD)
|
|
return "demi-god"
|
|
if(BATTLE_MONSTERS_DEFENSETYPE_CYBORG)
|
|
return "cyborg"
|
|
if(BATTLE_MONSTERS_DEFENSETYPE_HYBRID)
|
|
return "hybrid"
|
|
if(BATTLE_MONSTERS_DEFENSETYPE_CATMAN)
|
|
return "catman"
|
|
if(BATTLE_MONSTERS_DEFENSETYPE_LIZARDMAN)
|
|
return "lizardman"
|
|
if(BATTLE_MONSTERS_DEFENSETYPE_ANTMAN)
|
|
return "antman"
|
|
if(BATTLE_MONSTERS_DEFENSETYPE_GIANT)
|
|
return "colossus"
|
|
if(BATTLE_MONSTERS_DEFENSETYPE_REPTILE)
|
|
return "reptile"
|
|
if(BATTLE_MONSTERS_DEFENSETYPE_HUMAN)
|
|
return "human"
|
|
if(BATTLE_MONSTERS_DEFENSETYPE_INSECT)
|
|
return "insect"
|
|
if(BATTLE_MONSTERS_DEFENSETYPE_GOD)
|
|
return "god"
|
|
if(BATTLE_MONSTERS_DEFENSETYPE_FELINE)
|
|
return "feline"
|
|
if(BATTLE_MONSTERS_DEFENSETYPE_MACHINE)
|
|
return "machine"
|
|
if(BATTLE_MONSTERS_DEFENSETYPE_CREATURE)
|
|
return "creature"
|
|
if(BATTLE_MONSTERS_DEFENSETYPE_COLOSSUS)
|
|
return "colossus"
|
|
if(BATTLE_MONSTERS_DEFENSETYPE_FLYING)
|
|
return "winged monster"
|
|
else
|
|
return GetSpecies(card_defense_type," mixed with ")
|
|
|
|
return "unknown"
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/GetSpecies(card_defense_type, var/and_text = " and ")
|
|
|
|
//This list looks odd to prevent runtime errors related to out of bounds indexes
|
|
var/list/translations = list(
|
|
"Human" = BATTLE_MONSTERS_DEFENSETYPE_HUMAN,
|
|
"God" = BATTLE_MONSTERS_DEFENSETYPE_GOD,
|
|
"Machine" = BATTLE_MONSTERS_DEFENSETYPE_MACHINE,
|
|
"Creature" = BATTLE_MONSTERS_DEFENSETYPE_CREATURE,
|
|
"Flying" = BATTLE_MONSTERS_DEFENSETYPE_FLYING,
|
|
"Colossus" = BATTLE_MONSTERS_DEFENSETYPE_COLOSSUS,
|
|
"Reptile" = BATTLE_MONSTERS_DEFENSETYPE_REPTILE,
|
|
"Feline" = BATTLE_MONSTERS_DEFENSETYPE_FELINE,
|
|
"Insect" = BATTLE_MONSTERS_DEFENSETYPE_INSECT,
|
|
"Demon" = BATTLE_MONSTERS_DEFENSETYPE_DEMON
|
|
)
|
|
|
|
var/list/included_elements = list()
|
|
|
|
for(var/translation in translations)
|
|
if(!(translations[translation] & card_defense_type))
|
|
continue
|
|
included_elements.Add(translation)
|
|
|
|
return english_list(included_elements, nothing_text = "Monster", and_text = and_text)
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/GetAttackType(var/card_attack_type, var/and_text = " and ")
|
|
|
|
//This list looks odd to prevent runtime errors related to out of bounds indexes
|
|
var/list/translations = list(
|
|
"Spellcaster" = BATTLE_MONSTERS_ATTACKTYPE_SPELLCASTER,
|
|
"Warrior" = BATTLE_MONSTERS_ATTACKTYPE_SWORDSMAN,
|
|
"Commander" = BATTLE_MONSTERS_ATTACKTYPE_ARMY,
|
|
"Warrior" = BATTLE_MONSTERS_ATTACKTYPE_CLAWS,
|
|
"Warrior" = BATTLE_MONSTERS_ATTACKTYPE_TEETH,
|
|
"Warrior" = BATTLE_MONSTERS_ATTACKTYPE_CLUB,
|
|
"Defender" = BATTLE_MONSTERS_ATTACKTYPE_SHIELD
|
|
)
|
|
|
|
var/list/included_elements = list()
|
|
|
|
for(var/translation in translations)
|
|
if(!(translations[translation] & card_attack_type))
|
|
continue
|
|
if(translation in included_elements)
|
|
continue
|
|
included_elements.Add(translation)
|
|
|
|
return english_list(included_elements, nothing_text = "Regular", and_text = and_text)
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/GetWeapons(var/card_attack_type, var/and_text = " and ")
|
|
|
|
//This list looks odd to prevent runtime errors related to out of bounds indexes
|
|
var/list/translations = list(
|
|
"staff" = BATTLE_MONSTERS_ATTACKTYPE_SPELLCASTER,
|
|
"sword" = BATTLE_MONSTERS_ATTACKTYPE_SWORDSMAN,
|
|
"army" = BATTLE_MONSTERS_ATTACKTYPE_ARMY,
|
|
"claws" = BATTLE_MONSTERS_ATTACKTYPE_CLAWS,
|
|
"club" = BATTLE_MONSTERS_ATTACKTYPE_CLUB,
|
|
"fangs" = BATTLE_MONSTERS_ATTACKTYPE_TEETH,
|
|
"shield" = BATTLE_MONSTERS_ATTACKTYPE_SHIELD
|
|
)
|
|
|
|
var/list/included_elements = list()
|
|
|
|
for(var/translation in translations)
|
|
if(!(translations[translation] & card_attack_type))
|
|
continue
|
|
included_elements.Add(translation)
|
|
|
|
return english_list(included_elements, nothing_text = "fists", and_text = and_text)
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/GetElements(var/card_elements,var/and_text = " and ")
|
|
|
|
//This list looks odd to prevent runtime errors related to out of bounds indexes
|
|
var/list/translations = list(
|
|
"Neutral" = BATTLE_MONSTERS_ELEMENT_NEUTRAL,
|
|
"Fire" = BATTLE_MONSTERS_ELEMENT_FIRE,
|
|
"Energy" = BATTLE_MONSTERS_ELEMENT_ENERGY,
|
|
"Water" = BATTLE_MONSTERS_ELEMENT_WATER,
|
|
"Ice" = BATTLE_MONSTERS_ELEMENT_ICE,
|
|
"Earth" = BATTLE_MONSTERS_ELEMENT_EARTH,
|
|
"Stone" = BATTLE_MONSTERS_ELEMENT_STONE,
|
|
"Dark" = BATTLE_MONSTERS_ELEMENT_DARK,
|
|
"Light" = BATTLE_MONSTERS_ELEMENT_LIGHT,
|
|
)
|
|
|
|
var/list/included_elements = list()
|
|
|
|
for(var/translation in translations)
|
|
if(!(translations[translation] & card_elements))
|
|
continue
|
|
included_elements.Add(translation)
|
|
|
|
return english_list(included_elements, nothing_text = "Neutral", and_text = and_text)
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/GetStarLevel(var/power_rating,var/attack_points,var/defense_points)
|
|
|
|
var/power_mod = (power_rating / 2) + (max(attack_points,defense_points)/2)
|
|
|
|
if(power_mod <= BATTLE_MONSTERS_POWER_PETTY)
|
|
return 1
|
|
if(power_mod <= BATTLE_MONSTERS_POWER_LESSER)
|
|
return 2
|
|
if(power_mod <= BATTLE_MONSTERS_POWER_COMMON)
|
|
return 3
|
|
if(power_mod <= BATTLE_MONSTERS_POWER_GREATER)
|
|
return 4
|
|
if(power_mod <= BATTLE_MONSTERS_POWER_GRAND)
|
|
return 5
|
|
else
|
|
return 5 + round((power_mod - BATTLE_MONSTERS_POWER_GRAND)/BATTLE_MONSTERS_POWER_UPGRADE)
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/GetSummonRequirements(var/starlevel)
|
|
if(starlevel <= 2)
|
|
return "None."
|
|
else if(starlevel <= 4)
|
|
return "Must sacrifice one monster on your side of the field to summon."
|
|
else if(starlevel <= 6)
|
|
return "Must sacrifice two monsters on your side of the field to summon."
|
|
else if(starlevel <= 8)
|
|
return "Must sacrifice three monsters on your side of the field to summon."
|
|
else
|
|
return "Must sacrifice four monsters on your side of the field to summon."
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/FormatMonsterText(var/text,var/datum/battle_monsters/element/prefix_datum,var/datum/battle_monsters/monster/root_datum,var/datum/battle_monsters/title/suffix_datum)
|
|
|
|
var/list/generated_stats = SSbattlemonsters.GenerateMonsterStats(prefix_datum,root_datum,suffix_datum)
|
|
|
|
if(!generated_stats || generated_stats.len == 0)
|
|
return "Something went wrong... go bother the monsterous devs about it."
|
|
|
|
var/list/replacements = list(
|
|
"%NAME" = generated_stats["name"],
|
|
|
|
"%DESCRIPTION" = generated_stats["desc"],
|
|
"%SPECIAL_EFFECTS" = generated_stats["special_effects"],
|
|
|
|
"%ELEMENT_AND" = GetElements(generated_stats["elements"]),
|
|
"%ELEMENT_OR" = GetElements(generated_stats["elements"], " or "),
|
|
"%ELEMENT_LIST" = GetElements(generated_stats["elements"], ", "),
|
|
|
|
"%TYPE" = GetAttackType(generated_stats["attack_type"]),
|
|
"%ATTACKTYPE_LIST" = GetAttackType(generated_stats["attack_type"], ", "),
|
|
"%WEAPON_AND" = GetWeapons(generated_stats["attack_type"]),
|
|
|
|
"%SPECIES_C" = capitalize(GetSpeciesGeneral(generated_stats["defense_type"])),
|
|
"%SPECIES_LIST" = GetSpecies(generated_stats["defense_type"], ", "),
|
|
"%SPECIES" = GetSpeciesGeneral(generated_stats["defense_type"]),
|
|
|
|
"%ATTACK_POINTS" = generated_stats["attack_points"],
|
|
"%DEFENSE_POINTS" = generated_stats["defense_points"],
|
|
|
|
"%STAR_LEVEL" = generated_stats["star_level"],
|
|
|
|
"%SUMMON_REQUIREMENTS" = GetSummonRequirements(generated_stats["star_level"])
|
|
)
|
|
|
|
for(var/word in replacements)
|
|
text = replacetext(text,word,replacements[word])
|
|
|
|
for(var/word in replacements)//2 passes for good measure.
|
|
text = replacetext(text,word,replacements[word])
|
|
|
|
return text
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/FormatSpellText(var/text,var/datum/battle_monsters/spell_datum)
|
|
var/list/generated_stats = SSbattlemonsters.GenerateSpellStats(spell_datum)
|
|
|
|
if(!generated_stats || generated_stats.len == 0)
|
|
return "Something went wrong... go bother the wizardly devs about it."
|
|
|
|
var/list/replacements = list(
|
|
"%NAME" = generated_stats["name"],
|
|
|
|
"%DESCRIPTION" = generated_stats["desc"],
|
|
"%SPECIAL_EFFECTS" = generated_stats["special_effects"],
|
|
|
|
"%ELEMENT_AND" = GetElements(generated_stats["elements"]),
|
|
"%ELEMENT_OR" = GetElements(generated_stats["elements"], " or "),
|
|
"%ELEMENT_LIST" = GetElements(generated_stats["elements"], ", ")
|
|
)
|
|
|
|
for(var/word in replacements)
|
|
text = replacetext(text,word,replacements[word])
|
|
|
|
for(var/word in replacements)//2 passes for good measure.
|
|
text = replacetext(text,word,replacements[word])
|
|
|
|
return text
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/GetMonsterFormatting()
|
|
return "<b>%NAME</b> | %STAR_LEVEL Star Monster | %ELEMENT_LIST %TYPE | %SPECIES_C<br>\
|
|
Keywords: %SPECIES_LIST<br>\
|
|
ATK: %ATTACK_POINTS | DEF: %DEFENSE_POINTS<br>\
|
|
Summoning Requirements: %SUMMON_REQUIREMENTS<br>\
|
|
%SPECIAL_EFFECTS<br>\
|
|
The card depicts %DESCRIPTION"
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/GetSpellFormatting()
|
|
return "<b>%NAME</b> | Spell | %ELEMENT_LIST<br>\
|
|
%SPECIAL_EFFECTS<br>\
|
|
The card depicts %DESCRIPTION"
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/GetTrapFormatting()
|
|
return "<b>%NAME</b> | Trap | %ELEMENT_LIST<br>\
|
|
%SPECIAL_EFFECTS<br>\
|
|
The card depicts %DESCRIPTION"
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/ExamineMonsterCard(var/mob/user,var/datum/battle_monsters/element/prefix_datum,var/datum/battle_monsters/monster/root_datum,var/datum/battle_monsters/title/suffix_datum)
|
|
to_chat(user,FormatMonsterText(GetMonsterFormatting(),prefix_datum,root_datum,suffix_datum))
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/ExamineSpellCard(var/mob/user,var/datum/battle_monsters/spell/spell_datum)
|
|
to_chat(user,FormatSpellText(GetSpellFormatting(),spell_datum))
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/ExamineTrapCard(var/mob/user,var/datum/battle_monsters/trap/trap_datum)
|
|
to_chat(user,FormatSpellText(GetTrapFormatting(),trap_datum))
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/GenerateMonsterStats(var/datum/battle_monsters/element/prefix_datum,var/datum/battle_monsters/monster/root_datum,var/datum/battle_monsters/title/suffix_datum, var/limiter = BATTLE_MONSTERS_GENERATION_ALL)
|
|
|
|
var/returning_list[0] //Byond documentation told me this is how you make an assoc list.
|
|
|
|
returning_list["name"] = root_datum.name
|
|
if(prefix_datum.name)
|
|
returning_list["name"] = "[prefix_datum.name] [returning_list["name"]]"
|
|
if(suffix_datum.name)
|
|
returning_list["name"] = "[returning_list["name"]], [suffix_datum.name]"
|
|
|
|
returning_list["desc"] = root_datum.description
|
|
if(prefix_datum.description)
|
|
returning_list["desc"] += " [prefix_datum.description]"
|
|
if(suffix_datum.description)
|
|
returning_list["desc"] += "<br><i>[suffix_datum.description]</i>"
|
|
|
|
returning_list["special_effects"] = ""
|
|
if(prefix_datum.special_effects)
|
|
returning_list["special_effects"] = trim("[returning_list["special_effects"]][prefix_datum.special_effects]<br>")
|
|
if(root_datum.special_effects)
|
|
returning_list["special_effects"] = trim("[returning_list["special_effects"]][root_datum.special_effects]<br>")
|
|
if(suffix_datum.special_effects)
|
|
returning_list["special_effects"] = trim("[returning_list["special_effects"]][suffix_datum.special_effects]<br>")
|
|
|
|
returning_list["elements"] = prefix_datum.elements | root_datum.elements | suffix_datum.elements
|
|
returning_list["attack_type"] = prefix_datum.attack_type | root_datum.attack_type | suffix_datum.attack_type
|
|
returning_list["defense_type"] = prefix_datum.defense_type | root_datum.defense_type | suffix_datum.defense_type
|
|
|
|
returning_list["rarity_score"] = prefix_datum.rarity_score + root_datum.rarity_score + suffix_datum.rarity_score
|
|
returning_list["attack_points"] = (prefix_datum.attack_add + root_datum.attack_add + suffix_datum.attack_add) * (prefix_datum.attack_mul * root_datum.attack_mul * suffix_datum.attack_mul)
|
|
returning_list["defense_points"] = (prefix_datum.defense_add + root_datum.defense_add + suffix_datum.defense_add) * (prefix_datum.defense_mul * root_datum.defense_mul * suffix_datum.defense_mul)
|
|
returning_list["power"] = (prefix_datum.power_add + root_datum.power_add + suffix_datum.power_add) * (prefix_datum.power_mul * root_datum.power_mul * suffix_datum.power_mul)
|
|
if(returning_list["attack_points"] >= returning_list["defense_points"])
|
|
returning_list["defense_points"] = returning_list["defense_points"]/(returning_list["attack_points"] + returning_list["defense_points"])
|
|
returning_list["attack_points"] = 1 - returning_list["defense_points"]
|
|
else
|
|
returning_list["attack_points"] = returning_list["attack_points"]/(returning_list["attack_points"] + returning_list["defense_points"])
|
|
returning_list["defense_points"] = 1 - returning_list["attack_points"]
|
|
|
|
returning_list["attack_points"] = round(returning_list["power"] * returning_list["attack_points"],100)
|
|
returning_list["defense_points"] = round(returning_list["power"] * returning_list["defense_points"],100)
|
|
returning_list["star_level"] = GetStarLevel(returning_list["power"],returning_list["attack_points"],returning_list["defense_points"])
|
|
|
|
return returning_list
|
|
|
|
/datum/controller/subsystem/battle_monsters/proc/GenerateSpellStats(var/datum/battle_monsters/spell_datum)
|
|
var/returning_list[0] //Byond documentation told me this is how you make an assoc list.
|
|
returning_list["name"] = spell_datum.name
|
|
returning_list["desc"] = spell_datum.description
|
|
returning_list["special_effects"] = spell_datum.special_effects
|
|
returning_list["elements"] = spell_datum.elements
|
|
returning_list["rarity_score"] = spell_datum.rarity_score
|
|
return returning_list
|
|
|
|
#undef BATTLE_MONSTERS_GEN_PREFIX
|
|
#undef BATTLE_MONSTERS_GEN_ROOT
|
|
#undef BATTLE_MONSTERS_GEN_SUFFIX
|
|
#undef BATTLE_MONSTERS_GEN_TRAP
|
|
#undef BATTLE_MONSTERS_GEN_SPELL |