mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2025-12-25 01:22:24 +00:00
Adds Research Lab POI and some other stuff. (#9026)
* Adds random zippo lighter. * Adds random zippo lighter part 2. * Adds random zippo. * first prototype of the Research POI. * Research POI definitions. * Adding android simplemobs. * Adds voice lines for fleeing. * Fix robocorpses. * Progress as of 28-02-23. * Progress as of 02-03-23. * Add detailing to the map * de-stationifying the POI a bit * Finishes adding android drone enemies. * Final pass on Gene Lab POI. * Fix corpse.dm linter error. --------- Co-authored-by: Cerebulon <tanhindmarsh@yahoo.com>
This commit is contained in:
@@ -127,6 +127,130 @@
|
||||
corpseidjob = "Operative"
|
||||
corpseidaccess = "Syndicate"
|
||||
|
||||
/obj/effect/landmark/mobcorpse/android
|
||||
name = "Android Drone"
|
||||
|
||||
var/list/brandList = list(
|
||||
BP_L_HAND = "Unbranded",
|
||||
BP_R_HAND = "Unbranded",
|
||||
BP_L_FOOT = "Unbranded",
|
||||
BP_R_FOOT = "Unbranded",
|
||||
BP_L_ARM = "Unbranded",
|
||||
BP_R_ARM = "Unbranded",
|
||||
BP_L_LEG = "Unbranded",
|
||||
BP_R_LEG = "Unbranded",
|
||||
BP_HEAD = "Unbranded",
|
||||
BP_TORSO = "Unbranded",
|
||||
BP_GROIN = "Unbranded"
|
||||
)
|
||||
|
||||
|
||||
corpseid = 0
|
||||
|
||||
/obj/effect/landmark/mobcorpse/android/createCorpse()
|
||||
var/mob/living/carbon/human/M = new /mob/living/carbon/human (src.loc)
|
||||
M.real_name = src.name
|
||||
for(var/injuries in 1 to rand(3,5))
|
||||
var/deal_brute = rand(round(M.species.total_health * 0.10), round(M.species.total_health * 0.30))
|
||||
M.take_overall_damage(deal_brute, "Death Trauma")
|
||||
M.set_stat(DEAD) //Kills the new mob
|
||||
|
||||
var/obj/item/organ/internal/brain = M.internal_organs_by_name[O_BRAIN] //specific special cases
|
||||
brain.digitize()
|
||||
var/obj/item/organ/internal/eyes = M.internal_organs_by_name[O_EYES]
|
||||
eyes.robotize()
|
||||
|
||||
for (var/limb in brandList)
|
||||
var/obj/item/organ/external/E = M.get_organ(limb)
|
||||
if(E)
|
||||
E.robotize(brandList[limb])
|
||||
|
||||
if(src.corpseuniform)
|
||||
M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform)
|
||||
if(src.corpsesuit)
|
||||
M.equip_to_slot_or_del(new src.corpsesuit(M), slot_wear_suit)
|
||||
if(src.corpseshoes)
|
||||
M.equip_to_slot_or_del(new src.corpseshoes(M), slot_shoes)
|
||||
if(src.corpsegloves)
|
||||
M.equip_to_slot_or_del(new src.corpsegloves(M), slot_gloves)
|
||||
if(src.corpseradio)
|
||||
M.equip_to_slot_or_del(new src.corpseradio(M), slot_l_ear)
|
||||
if(src.corpseglasses)
|
||||
M.equip_to_slot_or_del(new src.corpseglasses(M), slot_glasses)
|
||||
if(src.corpsemask)
|
||||
M.equip_to_slot_or_del(new src.corpsemask(M), slot_wear_mask)
|
||||
if(src.corpsehelmet)
|
||||
M.equip_to_slot_or_del(new src.corpsehelmet(M), slot_head)
|
||||
if(src.corpsebelt)
|
||||
M.equip_to_slot_or_del(new src.corpsebelt(M), slot_belt)
|
||||
if(src.corpsepocket1)
|
||||
M.equip_to_slot_or_del(new src.corpsepocket1(M), slot_r_store)
|
||||
if(src.corpsepocket2)
|
||||
M.equip_to_slot_or_del(new src.corpsepocket2(M), slot_l_store)
|
||||
if(src.corpseback)
|
||||
M.equip_to_slot_or_del(new src.corpseback(M), slot_back)
|
||||
if(src.corpseid == 1)
|
||||
var/obj/item/card/id/W = new(M)
|
||||
W.name = "[M.real_name]'s ID Card"
|
||||
var/datum/job/jobdatum
|
||||
for(var/jobtype in typesof(/datum/job))
|
||||
var/datum/job/J = new jobtype
|
||||
if(J.title == corpseidaccess)
|
||||
jobdatum = J
|
||||
break
|
||||
if(src.corpseidicon)
|
||||
W.icon_state = corpseidicon
|
||||
if(src.corpseidaccess)
|
||||
if(jobdatum)
|
||||
W.access = jobdatum.get_access()
|
||||
else
|
||||
W.access = list()
|
||||
if(corpseidjob)
|
||||
W.assignment = corpseidjob
|
||||
W.registered_name = M.real_name
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
delete_me = 1
|
||||
|
||||
/obj/effect/landmark/mobcorpse/android/scientist
|
||||
name = "Scientific Drone"
|
||||
corpseuniform = /obj/item/clothing/under/lawyer/bluesuit
|
||||
corpsesuit = /obj/item/clothing/suit/storage/toggle/labcoat
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/duty
|
||||
|
||||
brandList = list(
|
||||
BP_L_HAND = "Cyber Solutions - Wight",
|
||||
BP_R_HAND = "Cyber Solutions - Wight",
|
||||
BP_L_FOOT = "Cyber Solutions - Wight",
|
||||
BP_R_FOOT = "Cyber Solutions - Wight",
|
||||
BP_L_ARM = "Cyber Solutions - Wight",
|
||||
BP_R_ARM = "Cyber Solutions - Wight",
|
||||
BP_L_LEG = "Cyber Solutions - Wight",
|
||||
BP_R_LEG = "Cyber Solutions - Wight",
|
||||
BP_HEAD = "Grayson",
|
||||
BP_TORSO = "Cyber Solutions - Wight",
|
||||
BP_GROIN = "Cyber Solutions - Wight"
|
||||
)
|
||||
|
||||
/obj/effect/landmark/mobcorpse/android/combat
|
||||
name = "Combat Drone"
|
||||
corpseuniform = /obj/item/clothing/under/color/white
|
||||
corpsesuit = /obj/item/clothing/suit/armor/vest/alt
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/duty
|
||||
corpsegloves = /obj/item/clothing/gloves/swat
|
||||
brandList = list(
|
||||
BP_L_HAND = "Unbranded - Mantis Prosis",
|
||||
BP_R_HAND = "Unbranded - Mantis Prosis",
|
||||
BP_L_FOOT = "Unbranded - Mantis Prosis",
|
||||
BP_R_FOOT = "Unbranded - Mantis Prosis",
|
||||
BP_L_ARM = "Unbranded - Mantis Prosis",
|
||||
BP_R_ARM = "Unbranded - Mantis Prosis",
|
||||
BP_L_LEG = "Unbranded - Mantis Prosis",
|
||||
BP_R_LEG = "Unbranded - Mantis Prosis",
|
||||
BP_HEAD = "Hephaestus - Athena",
|
||||
BP_TORSO = "Hephaestus - Athena",
|
||||
BP_GROIN = "Hephaestus - Athena"
|
||||
)
|
||||
|
||||
|
||||
|
||||
/obj/effect/landmark/mobcorpse/clown
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
////////////////////////////////
|
||||
// Android Simplemob AI
|
||||
////////////////////////////////
|
||||
|
||||
/datum/ai_holder/simple_mob/humanoid/android
|
||||
hostile = TRUE //enemy!
|
||||
can_breakthrough = FALSE //does not break down doors
|
||||
can_flee = TRUE
|
||||
flee_when_dying = FALSE
|
||||
outmatched_threshold = 250 //25% higher threshold than usual - so it doesn't run from solo players
|
||||
threaten_delay = 15 SECONDS
|
||||
call_distance = 3
|
||||
|
||||
/datum/ai_holder/simple_mob/humanoid/android/violent
|
||||
can_flee = FALSE
|
||||
call_distance = 6 //higher communication distance
|
||||
can_breakthrough = TRUE //Can break through doors
|
||||
threaten_delay = 10 SECONDS
|
||||
var/run_if_this_close = 4 //will be aggressive
|
||||
|
||||
/mob/living/simple_mob/humanoid/android/isSynthetic()
|
||||
return TRUE
|
||||
|
||||
/mob/living/simple_mob/humanoid/android
|
||||
name = "android drone"
|
||||
desc = "A humanoid robot - a marking on the side of its head denotes its status as a C-class drone."
|
||||
icon_state = "robocombat"
|
||||
icon_living = "robocombat"
|
||||
corpse = /obj/effect/landmark/mobcorpse/android
|
||||
say_list_type = /datum/say_list/hivebot
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/humanoid/android
|
||||
faction = "drone"
|
||||
|
||||
mob_class = MOB_CLASS_SYNTHETIC
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 100) //slightly tougher in melee but otherwise just basic resistances that make sense
|
||||
taser_kill = FALSE
|
||||
poison_resist = 1.0
|
||||
shock_resist = -0.5
|
||||
|
||||
|
||||
/mob/living/simple_mob/humanoid/android/combat //concept is they are a bit more accurate, tougher, hit harder, but most importantly are way more aggressive
|
||||
name = "combat unit"
|
||||
desc = "An autonomous humanoid drone that was evidently built for combat."
|
||||
icon_state = "robocombat"
|
||||
icon_living = "robocombat"
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/humanoid/android/violent
|
||||
corpse = /obj/effect/landmark/mobcorpse/android/combat
|
||||
armor = list(melee = 30, bullet = 20, laser = 20, energy = 10, bomb = 10, bio = 100, rad = 100)
|
||||
|
||||
projectiletype = /obj/item/projectile/beam/burstlaser //30 damage, 10 AP
|
||||
projectilesound = 'sound/weapons/Laser.ogg'
|
||||
loot_list = list(/obj/item/gun/energy/gun/compact = 80)
|
||||
|
||||
projectile_dispersion = 6
|
||||
projectile_accuracy = -25
|
||||
reload_max = 10
|
||||
needs_reload = TRUE
|
||||
reload_time = 4 SECONDS
|
||||
|
||||
|
||||
/mob/living/simple_mob/humanoid/android/scientist
|
||||
name = "scientific drone"
|
||||
desc = "A humanoid drone outfitted to perform some kind of scientific experiments."
|
||||
icon_state = "roboscientist"
|
||||
icon_living = "roboscientist"
|
||||
corpse = /obj/effect/landmark/mobcorpse/android/scientist
|
||||
say_list_type = /datum/say_list/android_scientist
|
||||
|
||||
projectiletype = /obj/item/projectile/bullet/pistol //25 damage
|
||||
loot_list = list(/obj/item/gun/projectile/p92x = 80, /datum/category_item/autolathe/arms/pistol_9mm = 30)
|
||||
projectile_dispersion = 7
|
||||
projectile_accuracy = -30
|
||||
needs_reload = TRUE
|
||||
reload_max = 8
|
||||
reload_time = 5 SECONDS
|
||||
@@ -331,6 +331,7 @@
|
||||
|
||||
return TRUE
|
||||
|
||||
|
||||
////////////////////////////////
|
||||
// Space Mercs
|
||||
////////////////////////////////
|
||||
@@ -386,6 +387,10 @@
|
||||
/mob/living/simple_mob/humanoid/merc/ranged/space/Process_Spacemove(var/check_drift = 0)
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
////////////////////////////////
|
||||
// PoI Mercs
|
||||
////////////////////////////////
|
||||
|
||||
Reference in New Issue
Block a user