mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-16 05:02:42 +00:00
Implements borg spawners
This commit is contained in:
@@ -117,7 +117,7 @@
|
||||
/datum/ghost_query/lost_drone
|
||||
role_name = "Lost Drone"
|
||||
question = "A lost drone onboard has been discovered by a crewmember and they are attempting to reactivate it. Would you like to play as the drone?"
|
||||
be_special_flag = BE_AI
|
||||
//be_special_flag = BE_AI //VOREStation Removal: Positronic role is never used because intended purpose is unfitting, so remove the check
|
||||
check_bans = list("AI", "Cyborg")
|
||||
cutoff_number = 1
|
||||
|
||||
|
||||
26
code/game/objects/structures/ghost_pods/silicon_vr.dm
Normal file
26
code/game/objects/structures/ghost_pods/silicon_vr.dm
Normal file
@@ -0,0 +1,26 @@
|
||||
/obj/structure/ghost_pod/manual/lost_drone/dogborg
|
||||
|
||||
/obj/structure/ghost_pod/manual/lost_drone/dogborg/create_occupant(var/mob/M)
|
||||
var/response = alert(M, "What type of lost drone are you? Do note, that dogborgs may have experienced different type of corruption ((Potential for having vore-related laws))", "Drone Type", "Regular", "Dogborg")
|
||||
if(!(response == "Dogborg")) // No response somehow or Regular
|
||||
return ..()
|
||||
else
|
||||
density = FALSE
|
||||
var/mob/living/silicon/robot/stray/randomlaws/R = new(get_turf(src))
|
||||
R.adjustBruteLoss(rand(5, 30))
|
||||
R.adjustFireLoss(rand(5, 10))
|
||||
if(M.mind)
|
||||
M.mind.transfer_to(R)
|
||||
// Put this text here before ckey change so that their laws are shown below it, since borg login() shows it.
|
||||
to_chat(M, "<span class='notice'>You are a <b>Stray Drone</b>, discovered inside the wreckage of your previous home. \
|
||||
Something has reactivated you, with their intentions unknown to you, and yours unknown to them. They are a foreign entity, \
|
||||
however they did free you from your pod...</span>")
|
||||
to_chat(M, "<span class='notice'><b>Be sure to examine your currently loaded lawset closely.</b> Remember, your \
|
||||
definiton of 'the station' is where your pod is, and unless your laws say otherwise, the entity that released you \
|
||||
from the pod is not a crewmember.</span>")
|
||||
R.ckey = M.ckey
|
||||
visible_message("<span class='warning'>As \the [src] opens, the eyes of the robot flicker as it is activated.</span>")
|
||||
R.Namepick()
|
||||
log_and_message_admins("successfully opened \a [src] and got a Stray Drone.")
|
||||
used = TRUE
|
||||
return TRUE
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
@@ -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"
|
||||
)
|
||||
|
||||
@@ -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.
|
||||
|
||||
136
code/modules/mob/living/silicon/robot/subtypes/lost_drone_vr.dm
Normal file
136
code/modules/mob/living/silicon/robot/subtypes/lost_drone_vr.dm
Normal 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
|
||||
Reference in New Issue
Block a user