mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-21 23:52:12 +00:00
Changes: Industrial IPC burn modifier changed to 1.1. Baseline IPC burn modifier changed to 1.2. Industrial IPCs should tank more damage, baselines should tank less due to their more agile frame, though brute is still only moderately effective against baselines. They aren't brittle but aren't tanky like industrials. This also makes baselines take a fair bit more damage from remaining in a vacuum, which they took very little before. Industrials were applied this in a bit of an unfair way, however, given they are walking heat sinks and should be treated as such. Both will still get roasted by lasers, the baseline moreso than the industrial.
554 lines
14 KiB
Plaintext
554 lines
14 KiB
Plaintext
|
|
/*
|
|
*
|
|
* Mob Unit Tests.
|
|
*
|
|
* Human suffocation in Space.
|
|
* Mob damage Template
|
|
*
|
|
*/
|
|
|
|
#define SUCCESS 1
|
|
#define FAILURE 0
|
|
|
|
//
|
|
// Tests Life() and mob breathing in space.
|
|
//
|
|
|
|
|
|
|
|
datum/unit_test/human_breath
|
|
name = "MOB: Human Suffocates in Space"
|
|
var/starting_oxyloss = null
|
|
var/ending_oxyloss = null
|
|
var/mob/living/carbon/human/H
|
|
async = 1
|
|
|
|
|
|
datum/unit_test/human_breath/start_test()
|
|
var/turf/T = locate(20,20,1) //TODO: Find better way.
|
|
|
|
if(!istype(T, /turf/space)) //If the above isn't a space turf then we force it to find one will most likely pick 1,1,1
|
|
T = locate(/turf/space)
|
|
|
|
H = new(T)
|
|
|
|
starting_oxyloss = damage_check(H, OXY)
|
|
|
|
return 1
|
|
|
|
datum/unit_test/human_breath/check_result()
|
|
|
|
if(H.life_tick < 10) // Finish Condition
|
|
return 0 // Return 0 to try again later.
|
|
|
|
ending_oxyloss = damage_check(H, OXY)
|
|
|
|
if(starting_oxyloss < ending_oxyloss)
|
|
pass("Oxyloss = [ending_oxyloss]")
|
|
else
|
|
fail("Mob is not taking oxygen damage. Damange is [ending_oxyloss]")
|
|
|
|
return 1 // return 1 to show we're done and don't want to recheck the result.
|
|
|
|
// ============================================================================
|
|
|
|
//#define BRUTE "brute"
|
|
//#define BURN "fire"
|
|
//#define TOX "tox"
|
|
//#define OXY "oxy"
|
|
//#define CLONE "clone"
|
|
//#define HALLOSS "halloss"
|
|
|
|
|
|
proc/create_test_mob_with_mind(var/turf/mobloc = null, var/mobtype = /mob/living/carbon/human)
|
|
var/list/test_result = list("result" = FAILURE, "msg" = "", "mobref" = null)
|
|
|
|
if(isnull(mobloc))
|
|
mobloc = pick(tdome1)
|
|
if(!mobloc)
|
|
test_result["msg"] = "Unable to find a location to create test mob"
|
|
return test_result
|
|
|
|
var/mob/living/carbon/human/H = new mobtype(mobloc)
|
|
|
|
H.mind_initialize("TestKey[rand(0,10000)]")
|
|
|
|
test_result["result"] = SUCCESS
|
|
test_result["msg"] = "Mob created"
|
|
test_result["mobref"] = "\ref[H]"
|
|
|
|
return test_result
|
|
|
|
//Generic Check
|
|
// TODO: Need to make sure I didn't just recreate the wheel here.
|
|
|
|
proc/damage_check(var/mob/living/M, var/damage_type)
|
|
var/loss = null
|
|
|
|
switch(damage_type)
|
|
if(BRUTE)
|
|
loss = M.getBruteLoss()
|
|
if(BURN)
|
|
loss = M.getFireLoss()
|
|
if(TOX)
|
|
loss = M.getToxLoss()
|
|
if(OXY)
|
|
loss = M.getOxyLoss()
|
|
if(CLONE)
|
|
loss = M.getCloneLoss()
|
|
if(HALLOSS)
|
|
loss = M.getHalLoss()
|
|
|
|
if(!loss && istype(M, /mob/living/carbon/human)) // Revert IPC's when?
|
|
var/mob/living/carbon/human/H = M // IPC's have robot limbs which don't report damage to getXXXLoss()
|
|
if(istype(H.species, /datum/species/machine)) // So we have ot hard code this check or create a different one for them.
|
|
return 100 - H.health // TODO: Find better way to do this then hardcoding this formula
|
|
|
|
return loss
|
|
|
|
// ==============================================================================================================
|
|
|
|
//
|
|
//DAMAGE EXPECTATIONS
|
|
// used with expectected_vunerability
|
|
|
|
#define STANDARD 0 // Will take standard damage (damage_ratio of 1)
|
|
#define ARMORED 1 // Will take less damage than applied
|
|
#define EXTRA_VULNERABLE 2 // Will take more dmage than applied
|
|
#define IMMUNE 3 // Will take no damage
|
|
|
|
//==============================================================================================================
|
|
|
|
|
|
datum/unit_test/mob_damage
|
|
name = "MOB: Template for mob damage"
|
|
var/mob/living/carbon/human/testmob = null
|
|
var/damagetype = BRUTE
|
|
var/mob_type = /mob/living/carbon/human
|
|
var/expected_vulnerability = STANDARD
|
|
var/check_health = 0
|
|
var/damage_location = "chest"
|
|
|
|
datum/unit_test/mob_damage/start_test()
|
|
var/list/test = create_test_mob_with_mind(null, mob_type)
|
|
var/damage_amount = 5 // Do not raise, if damage >= 10 there is a % chance to reduce damage by half in /obj/item/organ/external/take_damage()
|
|
// Which makes checks impossible.
|
|
|
|
if(isnull(test))
|
|
fail("Check Runtimed in Mob creation")
|
|
return 0
|
|
|
|
if(test["result"] == FAILURE)
|
|
fail(test["msg"])
|
|
return 0
|
|
|
|
var/mob/living/carbon/human/H = locate(test["mobref"])
|
|
|
|
if(isnull(H))
|
|
fail("Test unable to set test mob from reference")
|
|
return 0
|
|
|
|
if(H.stat)
|
|
|
|
fail("Test needs to be re-written, mob has a stat = [H.stat]")
|
|
return 0
|
|
|
|
if(H.sleeping)
|
|
fail("Test needs to be re-written, mob is sleeping for some unknown reason")
|
|
return 0
|
|
|
|
// Damage the mob
|
|
|
|
var/initial_health = H.health
|
|
|
|
H.apply_damage(damage_amount, damagetype, damage_location)
|
|
|
|
H.updatehealth() // Just in case, though at this time apply_damage does this for us.
|
|
// We operate with the assumption that someone might mess with that proc one day.
|
|
|
|
var/ending_damage = damage_check(H, damagetype)
|
|
|
|
var/ending_health = H.health
|
|
|
|
// Now test this stuff.
|
|
|
|
var/failure = 0
|
|
|
|
var/damage_ratio = STANDARD
|
|
|
|
if (ending_damage == 0)
|
|
damage_ratio = IMMUNE
|
|
|
|
else if (ending_damage < damage_amount)
|
|
damage_ratio = ARMORED
|
|
|
|
else if (ending_damage > damage_amount)
|
|
damage_ratio = EXTRA_VULNERABLE
|
|
|
|
if(damage_ratio != expected_vulnerability)
|
|
failure = 1
|
|
|
|
// Now generate the message for this test.
|
|
|
|
var/expected_msg = null
|
|
|
|
switch(expected_vulnerability)
|
|
if(STANDARD)
|
|
expected_msg = "to take standard damage"
|
|
if(ARMORED)
|
|
expected_msg = "To take less damage"
|
|
if(EXTRA_VULNERABLE)
|
|
expected_msg = "To take extra damage"
|
|
if(IMMUNE)
|
|
expected_msg = "To take no damage"
|
|
|
|
|
|
var/msg = "Damage taken: [ending_damage] out of [damage_amount] || expected: [expected_msg] \[Overall Health:[ending_health] (Initial: [initial_health]\]"
|
|
|
|
if(failure)
|
|
fail(msg)
|
|
else
|
|
pass(msg)
|
|
|
|
return 1
|
|
|
|
// =================================================================
|
|
// Human damage check.
|
|
// =================================================================
|
|
|
|
datum/unit_test/mob_damage/brute
|
|
name = "MOB: Human Brute damage check"
|
|
damagetype = BRUTE
|
|
|
|
datum/unit_test/mob_damage/fire
|
|
name = "MOB: Human Fire damage check"
|
|
damagetype = BURN
|
|
|
|
datum/unit_test/mob_damage/tox
|
|
name = "MOB: Human Toxin damage check"
|
|
damagetype = TOX
|
|
|
|
datum/unit_test/mob_damage/oxy
|
|
name = "MOB: Human Oxygen damage check"
|
|
damagetype = OXY
|
|
|
|
datum/unit_test/mob_damage/clone
|
|
name = "MOB: Human Clone damage check"
|
|
damagetype = CLONE
|
|
|
|
datum/unit_test/mob_damage/halloss
|
|
name = "MOB: Human Halloss damage check"
|
|
damagetype = HALLOSS
|
|
|
|
// =================================================================
|
|
// Unathi
|
|
// =================================================================
|
|
|
|
datum/unit_test/mob_damage/unathi
|
|
name = "MOB: Unathi damage check template"
|
|
mob_type = /mob/living/carbon/human/unathi
|
|
|
|
datum/unit_test/mob_damage/unathi/brute
|
|
name = "MOB: Unathi Brute Damage Check"
|
|
damagetype = BRUTE
|
|
expected_vulnerability = ARMORED
|
|
|
|
datum/unit_test/mob_damage/unathi/fire
|
|
name = "MOB: Unathi Fire Damage Check"
|
|
damagetype = BURN
|
|
|
|
datum/unit_test/mob_damage/unathi/tox
|
|
name = "MOB: Unathi Toxins Damage Check"
|
|
damagetype = TOX
|
|
|
|
datum/unit_test/mob_damage/unathi/oxy
|
|
name = "MOB: Unathi Oxygen Damage Check"
|
|
damagetype = OXY
|
|
|
|
datum/unit_test/mob_damage/unathi/clone
|
|
name = "MOB: Unathi Clone Damage Check"
|
|
damagetype = CLONE
|
|
|
|
datum/unit_test/mob_damage/unathi/halloss
|
|
name = "MOB: Unathi Halloss Damage Check"
|
|
damagetype = HALLOSS
|
|
|
|
// =================================================================
|
|
// SpessKahjit aka Tajaran
|
|
// =================================================================
|
|
|
|
datum/unit_test/mob_damage/tajaran
|
|
name = "MOB: Tajaran damage check template"
|
|
mob_type = /mob/living/carbon/human/tajaran
|
|
|
|
datum/unit_test/mob_damage/tajaran/brute
|
|
name = "MOB: Tajaran Brute Damage Check"
|
|
damagetype = BRUTE
|
|
expected_vulnerability = EXTRA_VULNERABLE
|
|
|
|
datum/unit_test/mob_damage/tajaran/fire
|
|
name = "MOB: Tajaran Fire Damage Check"
|
|
damagetype = BURN
|
|
|
|
datum/unit_test/mob_damage/tajaran/tox
|
|
name = "MOB: Tajaran Toxins Damage Check"
|
|
damagetype = TOX
|
|
|
|
datum/unit_test/mob_damage/tajaran/oxy
|
|
name = "MOB: Tajaran Oxygen Damage Check"
|
|
damagetype = OXY
|
|
|
|
datum/unit_test/mob_damage/tajaran/clone
|
|
name = "MOB: Tajaran Clone Damage Check"
|
|
damagetype = CLONE
|
|
|
|
datum/unit_test/mob_damage/tajaran/halloss
|
|
name = "MOB: Tajaran Halloss Damage Check"
|
|
damagetype = HALLOSS
|
|
|
|
// =================================================================
|
|
// Resomi
|
|
// =================================================================
|
|
|
|
datum/unit_test/mob_damage/resomi
|
|
name = "MOB: Resomi damage check template"
|
|
mob_type = /mob/living/carbon/human/resomi
|
|
|
|
datum/unit_test/mob_damage/resomi/brute
|
|
name = "MOB: Resomi Brute Damage Check"
|
|
damagetype = BRUTE
|
|
expected_vulnerability = EXTRA_VULNERABLE
|
|
|
|
datum/unit_test/mob_damage/resomi/fire
|
|
name = "MOB: Resomi Fire Damage Check"
|
|
damagetype = BURN
|
|
expected_vulnerability = EXTRA_VULNERABLE
|
|
|
|
datum/unit_test/mob_damage/resomi/tox
|
|
name = "MOB: Resomi Toxins Damage Check"
|
|
damagetype = TOX
|
|
|
|
datum/unit_test/mob_damage/resomi/oxy
|
|
name = "MOB: Resomi Oxygen Damage Check"
|
|
damagetype = OXY
|
|
|
|
datum/unit_test/mob_damage/resomi/clone
|
|
name = "MOB: Resomi Clone Damage Check"
|
|
damagetype = CLONE
|
|
|
|
datum/unit_test/mob_damage/resomi/halloss
|
|
name = "MOB: Resomi Halloss Damage Check"
|
|
damagetype = HALLOSS
|
|
|
|
// =================================================================
|
|
// Skrell
|
|
// =================================================================
|
|
|
|
datum/unit_test/mob_damage/skrell
|
|
name = "MOB: Skrell damage check template"
|
|
mob_type = /mob/living/carbon/human/skrell
|
|
|
|
datum/unit_test/mob_damage/skrell/brute
|
|
name = "MOB: Skrell Brute Damage Check"
|
|
damagetype = BRUTE
|
|
|
|
datum/unit_test/mob_damage/skrell/fire
|
|
name = "MOB: Skrell Fire Damage Check"
|
|
damagetype = BURN
|
|
|
|
datum/unit_test/mob_damage/skrell/tox
|
|
name = "MOB: Skrell Toxins Damage Check"
|
|
damagetype = TOX
|
|
|
|
datum/unit_test/mob_damage/skrell/oxy
|
|
name = "MOB: Skrell Oxygen Damage Check"
|
|
damagetype = OXY
|
|
|
|
datum/unit_test/mob_damage/skrell/clone
|
|
name = "MOB: Skrell Clone Damage Check"
|
|
damagetype = CLONE
|
|
|
|
datum/unit_test/mob_damage/skrell/halloss
|
|
name = "MOB: Skrell Halloss Damage Check"
|
|
damagetype = HALLOSS
|
|
|
|
// =================================================================
|
|
// Vox
|
|
// =================================================================
|
|
|
|
datum/unit_test/mob_damage/vox
|
|
name = "MOB: Vox damage check template"
|
|
mob_type = /mob/living/carbon/human/vox
|
|
|
|
datum/unit_test/mob_damage/vox/brute
|
|
name = "MOB: Vox Brute Damage Check"
|
|
damagetype = BRUTE
|
|
|
|
datum/unit_test/mob_damage/vox/fire
|
|
name = "MOB: Vox Fire Damage Check"
|
|
damagetype = BURN
|
|
|
|
datum/unit_test/mob_damage/vox/tox
|
|
name = "MOB: Vox Toxins Damage Check"
|
|
damagetype = TOX
|
|
|
|
datum/unit_test/mob_damage/vox/oxy
|
|
name = "MOB: Vox Oxygen Damage Check"
|
|
damagetype = OXY
|
|
|
|
datum/unit_test/mob_damage/vox/clone
|
|
name = "MOB: Vox Clone Damage Check"
|
|
damagetype = CLONE
|
|
expected_vulnerability = IMMUNE
|
|
|
|
|
|
datum/unit_test/mob_damage/vox/halloss
|
|
name = "MOB: Vox Halloss Damage Check"
|
|
damagetype = HALLOSS
|
|
|
|
// =================================================================
|
|
// Diona
|
|
// =================================================================
|
|
|
|
datum/unit_test/mob_damage/diona
|
|
name = "MOB: Diona damage check template"
|
|
mob_type = /mob/living/carbon/human/diona
|
|
|
|
datum/unit_test/mob_damage/diona/brute
|
|
name = "MOB: Diona Brute Damage Check"
|
|
damagetype = BRUTE
|
|
|
|
datum/unit_test/mob_damage/diona/fire
|
|
name = "MOB: Diona Fire Damage Check"
|
|
damagetype = BURN
|
|
|
|
datum/unit_test/mob_damage/diona/tox
|
|
name = "MOB: Diona Toxins Damage Check"
|
|
damagetype = TOX
|
|
|
|
datum/unit_test/mob_damage/diona/oxy
|
|
name = "MOB: Diona Oxygen Damage Check"
|
|
damagetype = OXY
|
|
expected_vulnerability = IMMUNE
|
|
|
|
datum/unit_test/mob_damage/diona/clone
|
|
name = "MOB: Diona Clone Damage Check"
|
|
damagetype = CLONE
|
|
expected_vulnerability = IMMUNE
|
|
|
|
datum/unit_test/mob_damage/diona/halloss
|
|
name = "MOB: Diona Halloss Damage Check"
|
|
damagetype = HALLOSS
|
|
expected_vulnerability = IMMUNE
|
|
|
|
// =================================================================
|
|
// SPECIAL WHITTLE SNOWFLAKES aka IPC
|
|
// =================================================================
|
|
|
|
datum/unit_test/mob_damage/machine
|
|
name = "MOB: IPC damage check template"
|
|
mob_type = /mob/living/carbon/human/machine
|
|
|
|
datum/unit_test/mob_damage/machine/brute
|
|
name = "MOB: IPC Brute Damage Check"
|
|
damagetype = BRUTE
|
|
expected_vulnerability = ARMORED
|
|
|
|
datum/unit_test/mob_damage/machine/fire
|
|
name = "MOB: IPC Fire Damage Check"
|
|
damagetype = BURN
|
|
expected_vulnerability = EXTRA_VULNERABLE
|
|
|
|
datum/unit_test/mob_damage/machine/tox
|
|
name = "MOB: IPC Toxins Damage Check"
|
|
damagetype = TOX
|
|
expected_vulnerability = IMMUNE
|
|
|
|
datum/unit_test/mob_damage/machine/oxy
|
|
name = "MOB: IPC Oxygen Damage Check"
|
|
damagetype = OXY
|
|
expected_vulnerability = IMMUNE
|
|
|
|
datum/unit_test/mob_damage/machine/clone
|
|
name = "MOB: IPC Clone Damage Check"
|
|
damagetype = CLONE
|
|
expected_vulnerability = IMMUNE
|
|
|
|
datum/unit_test/mob_damage/machine/halloss
|
|
name = "MOB: IPC Halloss Damage Check"
|
|
damagetype = HALLOSS
|
|
expected_vulnerability = IMMUNE
|
|
|
|
// =================================================================
|
|
// Vaurca Worker
|
|
// =================================================================
|
|
|
|
datum/unit_test/mob_damage/vaurca
|
|
name = "MOB: Vaurca damage check template"
|
|
mob_type = /mob/living/carbon/human/type_a
|
|
|
|
datum/unit_test/mob_damage/vaurca/brute
|
|
name = "MOB: Vaurca Brute Damage Check"
|
|
damagetype = BRUTE
|
|
expected_vulnerability = ARMORED
|
|
|
|
datum/unit_test/mob_damage/vaurca/fire
|
|
name = "MOB: Vaurca Fire Damage Check"
|
|
damagetype = BURN
|
|
expected_vulnerability = EXTRA_VULNERABLE
|
|
|
|
datum/unit_test/mob_damage/vaurca/tox
|
|
name = "MOB: Vaurca Toxins Damage Check"
|
|
damagetype = TOX
|
|
expected_vulnerability = EXTRA_VULNERABLE
|
|
|
|
datum/unit_test/mob_damage/vaurca/oxy
|
|
name = "MOB: Vaurca Oxygen Damage Check"
|
|
damagetype = OXY
|
|
expected_vulnerability = ARMORED
|
|
|
|
datum/unit_test/mob_damage/vaurca/clone
|
|
name = "MOB: Vaurca Clone Damage Check"
|
|
damagetype = CLONE
|
|
|
|
datum/unit_test/mob_damage/vaurca/halloss
|
|
name = "MOB: Vaurca Halloss Damage Check"
|
|
damagetype = HALLOSS
|
|
|
|
// ==============================================================================
|
|
|
|
|
|
datum/unit_test/robot_module_icons
|
|
name = "MOB: Robot module icon check"
|
|
var/icon_file = 'icons/mob/screen1_robot.dmi'
|
|
|
|
datum/unit_test/robot_module_icons/start_test()
|
|
var/failed = 0
|
|
if(!isicon(icon_file))
|
|
fail("[icon_file] is not a valid icon file.")
|
|
return 1
|
|
|
|
var/list/valid_states = icon_states(icon_file)
|
|
|
|
if(!valid_states.len)
|
|
return 1
|
|
|
|
for(var/i=1, i<=robot_modules.len, i++)
|
|
var/bad_msg = "[ascii_red]--------------- [robot_modules[i]]"
|
|
if(!(lowertext(robot_modules[i]) in valid_states))
|
|
log_unit_test("[bad_msg] does not contain a valid icon state in [icon_file][ascii_reset]")
|
|
failed=1
|
|
|
|
if(failed)
|
|
fail("Some icon states did not exist")
|
|
else
|
|
pass("All modules had valid icon states")
|
|
|
|
return 1
|
|
|
|
#undef VULNERABLE
|
|
#undef IMMUNE
|
|
#undef SUCCESS
|
|
#undef FAILURE
|