mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-21 07:32:02 +00:00
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/screen/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
|