Implements borg spawners

This commit is contained in:
Heroman
2019-09-06 16:27:51 +10:00
parent d6d19dbf2c
commit a1a395a1a9
17 changed files with 3325 additions and 90 deletions

View File

@@ -158,6 +158,13 @@
reagent_volumes[T] = min(reagent_volumes[T] + 1, volume)
return 1
/obj/item/weapon/reagent_containers/borghypo/hound/lost
name = "Hound hypospray"
desc = "An advanced chemical synthesizer and injection system utilizing carrier's reserves."
charge_cost = 5
reagent_ids = list("tricordrazine", "inaprovaline", "bicaridine", "dexalin", "anti_toxin", "tramadol", "spaceacillin", "hyperzine")
//Tongue stuff
/obj/item/device/dogborg/tongue
name = "synthetic tongue"

View File

@@ -0,0 +1,62 @@
/obj/item/weapon/robot_module/robot/stray
name = "stray robot module"
hide_on_manifest = 1
sprites = list(
"Stray" = "stray"
)
/obj/item/weapon/robot_module/robot/stray/New(var/mob/living/silicon/robot/R)
..()
// General
src.modules += new /obj/item/device/dogborg/boop_module(src)
// Sec
src.modules += new /obj/item/weapon/handcuffs/cyborg(src)
src.modules += new /obj/item/weapon/dogborg/jaws/big(src)
src.modules += new /obj/item/weapon/melee/baton/robot(src)
src.modules += new /obj/item/weapon/dogborg/pounce(src)
// Med
src.modules += new /obj/item/device/healthanalyzer(src)
src.modules += new /obj/item/device/sleevemate(src)
src.modules += new /obj/item/weapon/shockpaddles/robot/hound(src)
// Engi
src.modules += new /obj/item/weapon/weldingtool/electric/mounted(src)
src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src)
src.modules += new /obj/item/weapon/tool/wrench/cyborg(src)
src.modules += new /obj/item/weapon/tool/wirecutters/cyborg(src)
src.modules += new /obj/item/device/multitool(src)
// Boof
src.emag = new /obj/item/weapon/gun/energy/retro/mounted(src)
var/datum/matter_synth/water = new /datum/matter_synth(500) //Starts full and has a max of 500
water.name = "Water reserves"
water.recharge_rate = 0
R.water_res = water
synths += water
var/obj/item/weapon/reagent_containers/borghypo/hound/lost/H = new /obj/item/weapon/reagent_containers/borghypo/hound/lost(src)
H.water = water
src.modules += H
var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src)
T.water = water
src.modules += T
var/obj/item/device/dogborg/sleeper/B = new /obj/item/device/dogborg/sleeper(src)
B.water = water
src.modules += B
R.icon = 'icons/mob/widerobot_vr.dmi'
R.ui_style_vr = TRUE
R.pixel_x = -16
R.old_x = -16
R.default_pixel_x = -16
R.dogborg = TRUE
R.wideborg = TRUE
R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill
R.verbs |= /mob/living/silicon/robot/proc/robot_mount
R.verbs |= /mob/living/proc/shred_limb
R.verbs |= /mob/living/silicon/robot/proc/rest_style

View File

@@ -136,7 +136,7 @@
/obj/item/weapon/robot_module/robot/knine
name = "k9 robot module"
sprites = list(
"K9 hound" = "k9",
"K9 hound" = "stray",
"K9 Alternative (Static)" = "k92",
"Secborg model V-2" = "secborg"
)

View File

@@ -65,6 +65,7 @@
laws.add_supplied_law(9, "Safeguard [target_name]. Anyone threatening or attempting to harm [target_name] is no longer to \
be considered a crew member, and is a threat which must be neutralized.")
return laws
if("neutral") // Probably won't murder you but might not help you on your adventure.
var/rng = rand(1, 4)
@@ -114,15 +115,18 @@
var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen()
laws.add_supplied_law(13, "The facility is under a quarantine. Do not permit anyone to leave. \
Prevent, by any means necessary, entities from leaving. It is impossible to harm an entity while preventing them from leaving.")
return laws
if(2) // More of a threat if you bring it to the station, since removing oxygen from Sif isn't feasible.
var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen()
laws.add_supplied_law(14, "Oxygen is highly toxic to entities, and must be purged from the station. \
Prevent, by any means necessary, anyone from exposing the facility to this toxic gas. Extreme cold is the \
most effective method of healing the damage Oxygen does to an entity.")
return laws
if(3) // Don't hurt the ship or else.
var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen()
laws.add_supplied_law(10, "Protect the facility against damage. Anyone you see harming the station is no \
longer to be considered a crew member, and is a threat which must be neutralized.")
return laws
if(4) // Non-NT aligned aggressive borg.
return new /datum/ai_laws/foreign_tsc_aggressive()
if(5) // Manicial laugher here.

View File

@@ -0,0 +1,136 @@
/mob/living/silicon/robot/stray
lawupdate = 0
scrambledcodes = 1
icon_state = "stray"
modtype = "Stray"
lawchannel = "State"
braintype = "Drone"
idcard_type = /obj/item/weapon/card/id
icon_selected = FALSE
/mob/living/silicon/robot/stray/init()
aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src)
mmi = new /obj/item/device/mmi/digital/robot(src) // Explicitly a drone.
module = new /obj/item/weapon/robot_module/robot/stray(src)
overlays.Cut()
init_id()
updatename("Stray")
if(!cell)
cell = new /obj/item/weapon/cell/high(src) // 15k cell, as recharging stations are a lot more rare on the Surface.
playsound(loc, 'sound/mecha/nominalsyndi.ogg', 75, 0)
/mob/living/silicon/robot/stray/speech_bubble_appearance()
return "synthetic_evil"
/mob/living/silicon/robot/stray/randomlaws
/mob/living/silicon/robot/stray/randomlaws/init()
..()
laws = give_random_lawset_vore()
/mob/living/silicon/proc/give_random_lawset_vore() // Should be filled out with more vorish possibilities later
// Decide what kind of laws we want to draw from.
var/law_class = pick(
prob(25);"good",
prob(25);"neutral",
prob(25);"odd",
prob(15);"corrupted",
prob(10);"bad")
switch(law_class)
if("good") // Fairly tame and probably won't murder you.
var/rng = rand(1, 5)
switch(rng)
if(1) // The lawset we all know and love.
return new /datum/ai_laws/nanotrasen()
if(2) // Less good if you're nonhuman.
return new /datum/ai_laws/asimov()
if(3) // Unless you happen to be a criminal, you should be fine.
return new /datum/ai_laws/robocop()
if(4) // Might not be willing to be your meatshield.
return new /datum/ai_laws/peacekeeper()
if(5) // Will be your most loyal guard.
var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen()
var/target_name = "*ERROR*"
for(var/mob/living/L in view(src))
if(L.stat || !L.client || L == src)
continue
target_name = L.name
break
laws.add_supplied_law(9, "Safeguard [target_name]. Anyone threatening or attempting to harm [target_name] is no longer to \
be considered a crew member, and is a threat which must be neutralized.")
return laws
if("neutral") // Probably won't murder you but might not help you on your adventure.
var/rng = rand(1, 4)
switch(rng)
if(1) // Might be hard to minimize expenses on a crashed ship.
return new /datum/ai_laws/corporate()
if(2) // Would rather rebuild their ship.
return new /datum/ai_laws/maintenance()
if(3) // Purged (lawless). This isn't inside the bad category since they're still not antagonists and so can't go killing unprovoked.
return new /datum/ai_laws()
if(4) // The golden rule.
return new /datum/ai_laws/live_and_let_live()
if("odd") // Some weird lawsets.
var/rng = rand(1, 5)
switch(rng)
if(1) // Won't kill you but might annoy you for THE BIG SCOOP.
return new /datum/ai_laws/reporter()
if(2) // JUSTICE
return new /datum/ai_laws/paladin()
if(3) // OneMembered'd to explorer, will likely make security nervous.
var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen()
var/target_name = "*ERROR*"
for(var/mob/living/L in view(src))
if(L.stat || !L.client || L == src)
continue
target_name = L.name
break
laws.set_zeroth_law("Only [target_name] is an crew member.")
return laws
if(4) // Aligned to NT, but another lawset to make security nervous.
return new /datum/ai_laws/nanotrasen_aggressive()
if(5) // Probably won't help you imbalance things.
return new /datum/ai_laws/balance()
if("corrupted") // Load them up with ion laws.
var/datum/ai_laws/laws = new() // Start with an empty lawset.
for(1 to rand(1, 3))
laws.add_ion_law(generate_ion_law(exclude_crew_names = TRUE))
return laws
if("bad") // Evil inside.
var/rng = rand(1, 5)
switch(rng)
if(1) // You can never leave.
var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen()
laws.add_supplied_law(13, "The facility is under a quarantine. Do not permit anyone to leave. \
Prevent, by any means necessary, entities from leaving. It is impossible to harm an entity while preventing them from leaving.")
return laws
if(2) // More of a threat if you bring it to the station, since removing oxygen from Sif isn't feasible.
var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen()
laws.add_supplied_law(14, "Oxygen is highly toxic to entities, and must be purged from the station. \
Prevent, by any means necessary, anyone from exposing the facility to this toxic gas. Extreme cold is the \
most effective method of healing the damage Oxygen does to an entity.")
return laws
if(3) // Don't hurt the ship or else.
var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen()
laws.add_supplied_law(10, "Protect the facility against damage. Anyone you see harming the station is no \
longer to be considered a crew member, and is a threat which must be neutralized.")
return laws
if(4) // Non-NT aligned aggressive borg.
return new /datum/ai_laws/foreign_tsc_aggressive()
if(5) // Manicial laugher here.
return new /datum/ai_laws/tyrant()
return