Revert "pls"

This reverts commit 8c97511871.
This commit is contained in:
Fermi
2019-11-24 03:04:04 +00:00
parent 4c1c257035
commit c8b206a4cf
3003 changed files with 63963 additions and 157107 deletions
+2 -1
View File
@@ -783,7 +783,7 @@
/mob/living/silicon/ai/can_buckle()
return 0
/mob/living/silicon/ai/incapacitated()
/mob/living/silicon/ai/incapacitated(ignore_restraints, ignore_grab)
if(aiRestorePowerRoutine)
return TRUE
return ..()
@@ -882,6 +882,7 @@
/mob/living/silicon/ai/revive(full_heal = 0, admin_revive = 0)
. = ..()
if(.) //successfully ressuscitated from death
set_eyeobj_visible(TRUE)
set_core_display_icon(display_icon_override)
/mob/living/silicon/ai/proc/malfhacked(obj/machinery/power/apc/apc)
@@ -18,6 +18,7 @@
update_canmove()
if(eyeobj)
eyeobj.setLoc(get_turf(src))
set_eyeobj_visible(FALSE)
GLOB.shuttle_caller_list -= src
SSshuttle.autoEvac()
@@ -36,6 +37,8 @@
if(istype(loc, /obj/item/aicard/aitater))
loc.icon_state = "aitater-404"
else if(istype(loc, /obj/item/aicard/aispook))
loc.icon_state = "aispook-404"
else if(istype(loc, /obj/item/aicard))
loc.icon_state = "aicard-404"
@@ -6,6 +6,8 @@
/mob/camera/aiEye
name = "Inactive AI Eye"
icon_state = "ai_camera"
icon = 'icons/mob/cameramob.dmi'
invisibility = INVISIBILITY_MAXIMUM
hud_possible = list(ANTAG_HUD, AI_DETECT_HUD = HUD_LIST_LIST)
var/list/visibleCameraChunks = list()
@@ -158,11 +160,11 @@
cameraFollow = null
unset_machine()
if(!eyeobj || !eyeobj.loc || QDELETED(eyeobj))
if(isturf(loc) && (QDELETED(eyeobj) || !eyeobj.loc))
to_chat(src, "ERROR: Eyeobj not found. Creating new eye...")
create_eye()
eyeobj.setLoc(loc)
eyeobj?.setLoc(loc)
/mob/living/silicon/ai/proc/create_eye()
if(eyeobj)
@@ -172,6 +174,13 @@
eyeobj.ai = src
eyeobj.setLoc(loc)
eyeobj.name = "[name] (AI Eye)"
set_eyeobj_visible(TRUE)
/mob/living/silicon/ai/proc/set_eyeobj_visible(state = TRUE)
if(!eyeobj)
return
eyeobj.mouse_opacity = state ? MOUSE_OPACITY_ICON : initial(eyeobj.mouse_opacity)
eyeobj.invisibility = state ? INVISIBILITY_OBSERVER : initial(eyeobj.invisibility)
/mob/living/silicon/ai/verb/toggle_acceleration()
set category = "AI Commands"
+1 -1
View File
@@ -19,7 +19,7 @@
// messenging the client
malfhacked(malfhack)
if(!eyeobj || QDELETED(eyeobj) || !eyeobj.loc)
if(isturf(loc) && (QDELETED(eyeobj) || !eyeobj.loc))
view_core()
if(machine)
@@ -6,6 +6,7 @@
O.mode = 1
O.emotion = "Neutral"
O.update()
set_eyeobj_visible(TRUE)
if(multicam_on)
end_multicam()
view_core()
@@ -4,4 +4,5 @@
var/obj/machinery/status_display/ai/O = each
O.mode = 0
O.update()
set_eyeobj_visible(FALSE)
view_core()
@@ -120,6 +120,9 @@ GLOBAL_DATUM(ai_camera_room_landmark, /obj/effect/landmark/ai_multicam_room)
/mob/camera/aiEye/pic_in_pic
name = "Secondary AI Eye"
invisibility = INVISIBILITY_OBSERVER
mouse_opacity = MOUSE_OPACITY_ICON
icon_state = "ai_pip_camera"
var/obj/screen/movable/pic_in_pic/ai/screen
var/list/cameras_telegraphed = list()
var/telegraph_cameras = TRUE
+1 -1
View File
@@ -49,7 +49,7 @@
else
padloc = "(UNKNOWN)"
src.log_talk(message, LOG_SAY, tag="HOLOPAD in [padloc]")
send_speech(message, 7, T, "robot", message_language = language)
send_speech(message, 7, T, "robot", language)
to_chat(src, "<i><span class='game say'>Holopad transmitted, <span class='name'>[real_name]</span> <span class='message robot'>\"[message]\"</span></span></i>")
else
to_chat(src, "No holopad connected.")
@@ -975,4 +975,635 @@ GLOBAL_LIST_INIT(vox_sounds, list("abduction" = 'sound/vox_fem/abduction.ogg',
"zombie" = 'sound/vox_fem/zombie.ogg',
"zone" = 'sound/vox_fem/zone.ogg',
"zulu" = 'sound/vox_fem/zulu.ogg'))
//for vim
// :%s/\(\(.*\)\.ogg\)/"\2" = 'sound\/vox\/\1',/g
GLOBAL_LIST_INIT(vox_sounds_male, list("," = 'sound/vox/_comma.ogg',
"." = 'sound/vox/_period.ogg',
"a" = 'sound/vox/a.ogg',
"accelerating" = 'sound/vox/accelerating.ogg',
"accelerator" = 'sound/vox/accelerator.ogg',
"accepted" = 'sound/vox/accepted.ogg',
"access" = 'sound/vox/access.ogg',
"acknowledge" = 'sound/vox/acknowledge.ogg',
"acknowledged" = 'sound/vox/acknowledged.ogg',
"acquired" = 'sound/vox/acquired.ogg',
"acquisition" = 'sound/vox/acquisition.ogg',
"across" = 'sound/vox/across.ogg',
"activate" = 'sound/vox/activate.ogg',
"activated" = 'sound/vox/activated.ogg',
"activity" = 'sound/vox/activity.ogg',
"adios" = 'sound/vox/adios.ogg',
"administration" = 'sound/vox/administration.ogg',
"advanced" = 'sound/vox/advanced.ogg',
"after" = 'sound/vox/after.ogg',
"agent" = 'sound/vox/agent.ogg',
"alarm" = 'sound/vox/alarm.ogg',
"alert" = 'sound/vox/alert.ogg',
"alien" = 'sound/vox/alien.ogg',
"aligned" = 'sound/vox/aligned.ogg',
"all" = 'sound/vox/all.ogg',
"alpha" = 'sound/vox/alpha.ogg',
"am" = 'sound/vox/am.ogg',
"amigo" = 'sound/vox/amigo.ogg',
"ammunition" = 'sound/vox/ammunition.ogg',
"an" = 'sound/vox/an.ogg',
"and" = 'sound/vox/and.ogg',
"announcement" = 'sound/vox/announcement.ogg',
"anomalous" = 'sound/vox/anomalous.ogg',
"antenna" = 'sound/vox/antenna.ogg',
"any" = 'sound/vox/any.ogg',
"apprehend" = 'sound/vox/apprehend.ogg',
"approach" = 'sound/vox/approach.ogg',
"are" = 'sound/vox/are.ogg',
"area" = 'sound/vox/area.ogg',
"arm" = 'sound/vox/arm.ogg',
"armed" = 'sound/vox/armed.ogg',
"armor" = 'sound/vox/armor.ogg',
"armory" = 'sound/vox/armory.ogg',
"arrest" = 'sound/vox/arrest.ogg',
"ass" = 'sound/vox/ass.ogg',
"at" = 'sound/vox/at.ogg',
"atomic" = 'sound/vox/atomic.ogg',
"attention" = 'sound/vox/attention.ogg',
"authorize" = 'sound/vox/authorize.ogg',
"authorized" = 'sound/vox/authorized.ogg',
"automatic" = 'sound/vox/automatic.ogg',
"away" = 'sound/vox/away.ogg',
"b" = 'sound/vox/b.ogg',
"back" = 'sound/vox/back.ogg',
"backman" = 'sound/vox/backman.ogg',
"bad" = 'sound/vox/bad.ogg',
"bag" = 'sound/vox/bag.ogg',
"bailey" = 'sound/vox/bailey.ogg',
"barracks" = 'sound/vox/barracks.ogg',
"base" = 'sound/vox/base.ogg',
"bay" = 'sound/vox/bay.ogg',
"be" = 'sound/vox/be.ogg',
"been" = 'sound/vox/been.ogg',
"before" = 'sound/vox/before.ogg',
"beyond" = 'sound/vox/beyond.ogg',
"biohazard" = 'sound/vox/biohazard.ogg',
"biological" = 'sound/vox/biological.ogg',
"birdwell" = 'sound/vox/birdwell.ogg',
"bizwarn" = 'sound/vox/bizwarn.ogg',
"black" = 'sound/vox/black.ogg',
"blast" = 'sound/vox/blast.ogg',
"blocked" = 'sound/vox/blocked.ogg',
"bloop" = 'sound/vox/bloop.ogg',
"blue" = 'sound/vox/blue.ogg',
"bottom" = 'sound/vox/bottom.ogg',
"bravo" = 'sound/vox/bravo.ogg',
"breach" = 'sound/vox/breach.ogg',
"breached" = 'sound/vox/breached.ogg',
"break" = 'sound/vox/break.ogg',
"bridge" = 'sound/vox/bridge.ogg',
"bust" = 'sound/vox/bust.ogg',
"but" = 'sound/vox/but.ogg',
"button" = 'sound/vox/button.ogg',
"buzwarn" = 'sound/vox/buzwarn.ogg',
"bypass" = 'sound/vox/bypass.ogg',
"c" = 'sound/vox/c.ogg',
"cable" = 'sound/vox/cable.ogg',
"call" = 'sound/vox/call.ogg',
"called" = 'sound/vox/called.ogg',
"canal" = 'sound/vox/canal.ogg',
"cap" = 'sound/vox/cap.ogg',
"captain" = 'sound/vox/captain.ogg',
"capture" = 'sound/vox/capture.ogg',
"captured" = 'sound/vox/captured.ogg',
"ceiling" = 'sound/vox/ceiling.ogg',
"celsius" = 'sound/vox/celsius.ogg',
"center" = 'sound/vox/center.ogg',
"centi" = 'sound/vox/centi.ogg',
"central" = 'sound/vox/central.ogg',
"chamber" = 'sound/vox/chamber.ogg',
"charlie" = 'sound/vox/charlie.ogg',
"check" = 'sound/vox/check.ogg',
"checkpoint" = 'sound/vox/checkpoint.ogg',
"chemical" = 'sound/vox/chemical.ogg',
"cleanup" = 'sound/vox/cleanup.ogg',
"clear" = 'sound/vox/clear.ogg',
"clearance" = 'sound/vox/clearance.ogg',
"close" = 'sound/vox/close.ogg',
"clown" = 'sound/vox/clown.ogg',
"code" = 'sound/vox/code.ogg',
"coded" = 'sound/vox/coded.ogg',
"collider" = 'sound/vox/collider.ogg',
"command" = 'sound/vox/command.ogg',
"communication" = 'sound/vox/communication.ogg',
"complex" = 'sound/vox/complex.ogg',
"computer" = 'sound/vox/computer.ogg',
"condition" = 'sound/vox/condition.ogg',
"containment" = 'sound/vox/containment.ogg',
"contamination" = 'sound/vox/contamination.ogg',
"control" = 'sound/vox/control.ogg',
"coolant" = 'sound/vox/coolant.ogg',
"coomer" = 'sound/vox/coomer.ogg',
"core" = 'sound/vox/core.ogg',
"correct" = 'sound/vox/correct.ogg',
"corridor" = 'sound/vox/corridor.ogg',
"crew" = 'sound/vox/crew.ogg',
"cross" = 'sound/vox/cross.ogg',
"cryogenic" = 'sound/vox/cryogenic.ogg',
"d" = 'sound/vox/d.ogg',
"dadeda" = 'sound/vox/dadeda.ogg',
"damage" = 'sound/vox/damage.ogg',
"damaged" = 'sound/vox/damaged.ogg',
"danger" = 'sound/vox/danger.ogg',
"day" = 'sound/vox/day.ogg',
"deactivated" = 'sound/vox/deactivated.ogg',
"decompression" = 'sound/vox/decompression.ogg',
"decontamination" = 'sound/vox/decontamination.ogg',
"deeoo" = 'sound/vox/deeoo.ogg',
"defense" = 'sound/vox/defense.ogg',
"degrees" = 'sound/vox/degrees.ogg',
"delta" = 'sound/vox/delta.ogg',
"denied" = 'sound/vox/denied.ogg',
"deploy" = 'sound/vox/deploy.ogg',
"deployed" = 'sound/vox/deployed.ogg',
"destroy" = 'sound/vox/destroy.ogg',
"destroyed" = 'sound/vox/destroyed.ogg',
"detain" = 'sound/vox/detain.ogg',
"detected" = 'sound/vox/detected.ogg',
"detonation" = 'sound/vox/detonation.ogg',
"device" = 'sound/vox/device.ogg',
"did" = 'sound/vox/did.ogg',
"die" = 'sound/vox/die.ogg',
"dimensional" = 'sound/vox/dimensional.ogg',
"dirt" = 'sound/vox/dirt.ogg',
"disengaged" = 'sound/vox/disengaged.ogg',
"dish" = 'sound/vox/dish.ogg',
"disposal" = 'sound/vox/disposal.ogg',
"distance" = 'sound/vox/distance.ogg',
"distortion" = 'sound/vox/distortion.ogg',
"do" = 'sound/vox/do.ogg',
"doctor" = 'sound/vox/doctor.ogg',
"doop" = 'sound/vox/doop.ogg',
"door" = 'sound/vox/door.ogg',
"down" = 'sound/vox/down.ogg',
"dual" = 'sound/vox/dual.ogg',
"duct" = 'sound/vox/duct.ogg',
"e" = 'sound/vox/e.ogg',
"east" = 'sound/vox/east.ogg',
"echo" = 'sound/vox/echo.ogg',
"ed" = 'sound/vox/ed.ogg',
"effect" = 'sound/vox/effect.ogg',
"egress" = 'sound/vox/egress.ogg',
"eight" = 'sound/vox/eight.ogg',
"eighteen" = 'sound/vox/eighteen.ogg',
"eighty" = 'sound/vox/eighty.ogg',
"electric" = 'sound/vox/electric.ogg',
"electromagnetic" = 'sound/vox/electromagnetic.ogg',
"elevator" = 'sound/vox/elevator.ogg',
"eleven" = 'sound/vox/eleven.ogg',
"eliminate" = 'sound/vox/eliminate.ogg',
"emergency" = 'sound/vox/emergency.ogg',
"enemy" = 'sound/vox/enemy.ogg',
"energy" = 'sound/vox/energy.ogg',
"engage" = 'sound/vox/engage.ogg',
"engaged" = 'sound/vox/engaged.ogg',
"engine" = 'sound/vox/engine.ogg',
"enter" = 'sound/vox/enter.ogg',
"entry" = 'sound/vox/entry.ogg',
"environment" = 'sound/vox/environment.ogg',
"error" = 'sound/vox/error.ogg',
"escape" = 'sound/vox/escape.ogg',
"evacuate" = 'sound/vox/evacuate.ogg',
"exchange" = 'sound/vox/exchange.ogg',
"exit" = 'sound/vox/exit.ogg',
"expect" = 'sound/vox/expect.ogg',
"experiment" = 'sound/vox/experiment.ogg',
"experimental" = 'sound/vox/experimental.ogg',
"explode" = 'sound/vox/explode.ogg',
"explosion" = 'sound/vox/explosion.ogg',
"exposure" = 'sound/vox/exposure.ogg',
"exterminate" = 'sound/vox/exterminate.ogg',
"extinguish" = 'sound/vox/extinguish.ogg',
"extinguisher" = 'sound/vox/extinguisher.ogg',
"extreme" = 'sound/vox/extreme.ogg',
"f" = 'sound/vox/f.ogg',
"face" = 'sound/vox/face.ogg',
"facility" = 'sound/vox/facility.ogg',
"fahrenheit" = 'sound/vox/fahrenheit.ogg',
"failed" = 'sound/vox/failed.ogg',
"failure" = 'sound/vox/failure.ogg',
"farthest" = 'sound/vox/farthest.ogg',
"fast" = 'sound/vox/fast.ogg',
"feet" = 'sound/vox/feet.ogg',
"field" = 'sound/vox/field.ogg',
"fifteen" = 'sound/vox/fifteen.ogg',
"fifth" = 'sound/vox/fifth.ogg',
"fifty" = 'sound/vox/fifty.ogg',
"final" = 'sound/vox/final.ogg',
"fine" = 'sound/vox/fine.ogg',
"fire" = 'sound/vox/fire.ogg',
"first" = 'sound/vox/first.ogg',
"five" = 'sound/vox/five.ogg',
"flag" = 'sound/vox/flag.ogg',
"flooding" = 'sound/vox/flooding.ogg',
"floor" = 'sound/vox/floor.ogg',
"fool" = 'sound/vox/fool.ogg',
"for" = 'sound/vox/for.ogg',
"forbidden" = 'sound/vox/forbidden.ogg',
"force" = 'sound/vox/force.ogg',
"forms" = 'sound/vox/forms.ogg',
"found" = 'sound/vox/found.ogg',
"four" = 'sound/vox/four.ogg',
"fourteen" = 'sound/vox/fourteen.ogg',
"fourth" = 'sound/vox/fourth.ogg',
"fourty" = 'sound/vox/fourty.ogg',
"foxtrot" = 'sound/vox/foxtrot.ogg',
"freeman" = 'sound/vox/freeman.ogg',
"freezer" = 'sound/vox/freezer.ogg',
"from" = 'sound/vox/from.ogg',
"front" = 'sound/vox/front.ogg',
"fuel" = 'sound/vox/fuel.ogg',
"g" = 'sound/vox/g.ogg',
"gay" = 'sound/vox/gay.ogg',
"get" = 'sound/vox/get.ogg',
"go" = 'sound/vox/go.ogg',
"going" = 'sound/vox/going.ogg',
"good" = 'sound/vox/good.ogg',
"goodbye" = 'sound/vox/goodbye.ogg',
"gordon" = 'sound/vox/gordon.ogg',
"got" = 'sound/vox/got.ogg',
"government" = 'sound/vox/government.ogg',
"granted" = 'sound/vox/granted.ogg',
"great" = 'sound/vox/great.ogg',
"green" = 'sound/vox/green.ogg',
"grenade" = 'sound/vox/grenade.ogg',
"guard" = 'sound/vox/guard.ogg',
"gulf" = 'sound/vox/gulf.ogg',
"gun" = 'sound/vox/gun.ogg',
"guthrie" = 'sound/vox/guthrie.ogg',
"handling" = 'sound/vox/handling.ogg',
"hangar" = 'sound/vox/hangar.ogg',
"has" = 'sound/vox/has.ogg',
"have" = 'sound/vox/have.ogg',
"hazard" = 'sound/vox/hazard.ogg',
"head" = 'sound/vox/head.ogg',
"health" = 'sound/vox/health.ogg',
"heat" = 'sound/vox/heat.ogg',
"helicopter" = 'sound/vox/helicopter.ogg',
"helium" = 'sound/vox/helium.ogg',
"hello" = 'sound/vox/hello.ogg',
"help" = 'sound/vox/help.ogg',
"here" = 'sound/vox/here.ogg',
"hide" = 'sound/vox/hide.ogg',
"high" = 'sound/vox/high.ogg',
"highest" = 'sound/vox/highest.ogg',
"hit" = 'sound/vox/hit.ogg',
"holds" = 'sound/vox/holds.ogg',
"hole" = 'sound/vox/hole.ogg',
"hostile" = 'sound/vox/hostile.ogg',
"hot" = 'sound/vox/hot.ogg',
"hotel" = 'sound/vox/hotel.ogg',
"hour" = 'sound/vox/hour.ogg',
"hours" = 'sound/vox/hours.ogg',
"hundred" = 'sound/vox/hundred.ogg',
"hydro" = 'sound/vox/hydro.ogg',
"i" = 'sound/vox/i.ogg',
"idiot" = 'sound/vox/idiot.ogg',
"illegal" = 'sound/vox/illegal.ogg',
"immediate" = 'sound/vox/immediate.ogg',
"immediately" = 'sound/vox/immediately.ogg',
"in" = 'sound/vox/in.ogg',
"inches" = 'sound/vox/inches.ogg',
"india" = 'sound/vox/india.ogg',
"ing" = 'sound/vox/ing.ogg',
"inoperative" = 'sound/vox/inoperative.ogg',
"inside" = 'sound/vox/inside.ogg',
"inspection" = 'sound/vox/inspection.ogg',
"inspector" = 'sound/vox/inspector.ogg',
"interchange" = 'sound/vox/interchange.ogg',
"intruder" = 'sound/vox/intruder.ogg',
"invallid" = 'sound/vox/invallid.ogg',
"invasion" = 'sound/vox/invasion.ogg',
"is" = 'sound/vox/is.ogg',
"it" = 'sound/vox/it.ogg',
"johnson" = 'sound/vox/johnson.ogg',
"juliet" = 'sound/vox/juliet.ogg',
"key" = 'sound/vox/key.ogg',
"kill" = 'sound/vox/kill.ogg',
"kilo" = 'sound/vox/kilo.ogg',
"kit" = 'sound/vox/kit.ogg',
"lab" = 'sound/vox/lab.ogg',
"lambda" = 'sound/vox/lambda.ogg',
"laser" = 'sound/vox/laser.ogg',
"last" = 'sound/vox/last.ogg',
"launch" = 'sound/vox/launch.ogg',
"leak" = 'sound/vox/leak.ogg',
"leave" = 'sound/vox/leave.ogg',
"left" = 'sound/vox/left.ogg',
"legal" = 'sound/vox/legal.ogg',
"level" = 'sound/vox/level.ogg',
"lever" = 'sound/vox/lever.ogg',
"lie" = 'sound/vox/lie.ogg',
"lieutenant" = 'sound/vox/lieutenant.ogg',
"life" = 'sound/vox/life.ogg',
"light" = 'sound/vox/light.ogg',
"lima" = 'sound/vox/lima.ogg',
"liquid" = 'sound/vox/liquid.ogg',
"loading" = 'sound/vox/loading.ogg',
"locate" = 'sound/vox/locate.ogg',
"located" = 'sound/vox/located.ogg',
"location" = 'sound/vox/location.ogg',
"lock" = 'sound/vox/lock.ogg',
"locked" = 'sound/vox/locked.ogg',
"locker" = 'sound/vox/locker.ogg',
"lockout" = 'sound/vox/lockout.ogg',
"lower" = 'sound/vox/lower.ogg',
"lowest" = 'sound/vox/lowest.ogg',
"magnetic" = 'sound/vox/magnetic.ogg',
"main" = 'sound/vox/main.ogg',
"maintenance" = 'sound/vox/maintenance.ogg',
"malfunction" = 'sound/vox/malfunction.ogg',
"man" = 'sound/vox/man.ogg',
"mass" = 'sound/vox/mass.ogg',
"materials" = 'sound/vox/materials.ogg',
"maximum" = 'sound/vox/maximum.ogg',
"may" = 'sound/vox/may.ogg',
"med" = 'sound/vox/med.ogg',
"medical" = 'sound/vox/medical.ogg',
"men" = 'sound/vox/men.ogg',
"mercy" = 'sound/vox/mercy.ogg',
"mesa" = 'sound/vox/mesa.ogg',
"message" = 'sound/vox/message.ogg',
"meter" = 'sound/vox/meter.ogg',
"micro" = 'sound/vox/micro.ogg',
"middle" = 'sound/vox/middle.ogg',
"mike" = 'sound/vox/mike.ogg',
"miles" = 'sound/vox/miles.ogg',
"military" = 'sound/vox/military.ogg',
"milli" = 'sound/vox/milli.ogg',
"million" = 'sound/vox/million.ogg',
"minefield" = 'sound/vox/minefield.ogg',
"minimum" = 'sound/vox/minimum.ogg',
"minutes" = 'sound/vox/minutes.ogg',
"mister" = 'sound/vox/mister.ogg',
"mode" = 'sound/vox/mode.ogg',
"motor" = 'sound/vox/motor.ogg',
"motorpool" = 'sound/vox/motorpool.ogg',
"move" = 'sound/vox/move.ogg',
"must" = 'sound/vox/must.ogg',
"nearest" = 'sound/vox/nearest.ogg',
"nice" = 'sound/vox/nice.ogg',
"nine" = 'sound/vox/nine.ogg',
"nineteen" = 'sound/vox/nineteen.ogg',
"ninety" = 'sound/vox/ninety.ogg',
"no" = 'sound/vox/no.ogg',
"nominal" = 'sound/vox/nominal.ogg',
"north" = 'sound/vox/north.ogg',
"not" = 'sound/vox/not.ogg',
"november" = 'sound/vox/november.ogg',
"now" = 'sound/vox/now.ogg',
"number" = 'sound/vox/number.ogg',
"objective" = 'sound/vox/objective.ogg',
"observation" = 'sound/vox/observation.ogg',
"of" = 'sound/vox/of.ogg',
"officer" = 'sound/vox/officer.ogg',
"ok" = 'sound/vox/ok.ogg',
"on" = 'sound/vox/on.ogg',
"one" = 'sound/vox/one.ogg',
"open" = 'sound/vox/open.ogg',
"operating" = 'sound/vox/operating.ogg',
"operations" = 'sound/vox/operations.ogg',
"operative" = 'sound/vox/operative.ogg',
"option" = 'sound/vox/option.ogg',
"order" = 'sound/vox/order.ogg',
"organic" = 'sound/vox/organic.ogg',
"oscar" = 'sound/vox/oscar.ogg',
"out" = 'sound/vox/out.ogg',
"outside" = 'sound/vox/outside.ogg',
"over" = 'sound/vox/over.ogg',
"overload" = 'sound/vox/overload.ogg',
"override" = 'sound/vox/override.ogg',
"pacify" = 'sound/vox/pacify.ogg',
"pain" = 'sound/vox/pain.ogg',
"pal" = 'sound/vox/pal.ogg',
"panel" = 'sound/vox/panel.ogg',
"percent" = 'sound/vox/percent.ogg',
"perimeter" = 'sound/vox/perimeter.ogg',
"permitted" = 'sound/vox/permitted.ogg',
"personnel" = 'sound/vox/personnel.ogg',
"pipe" = 'sound/vox/pipe.ogg',
"plant" = 'sound/vox/plant.ogg',
"platform" = 'sound/vox/platform.ogg',
"please" = 'sound/vox/please.ogg',
"point" = 'sound/vox/point.ogg',
"portal" = 'sound/vox/portal.ogg',
"power" = 'sound/vox/power.ogg',
"presence" = 'sound/vox/presence.ogg',
"press" = 'sound/vox/press.ogg',
"primary" = 'sound/vox/primary.ogg',
"proceed" = 'sound/vox/proceed.ogg',
"processing" = 'sound/vox/processing.ogg',
"progress" = 'sound/vox/progress.ogg',
"proper" = 'sound/vox/proper.ogg',
"propulsion" = 'sound/vox/propulsion.ogg',
"prosecute" = 'sound/vox/prosecute.ogg',
"protective" = 'sound/vox/protective.ogg',
"push" = 'sound/vox/push.ogg',
"quantum" = 'sound/vox/quantum.ogg',
"quebec" = 'sound/vox/quebec.ogg',
"question" = 'sound/vox/question.ogg',
"questioning" = 'sound/vox/questioning.ogg',
"quick" = 'sound/vox/quick.ogg',
"quit" = 'sound/vox/quit.ogg',
"radiation" = 'sound/vox/radiation.ogg',
"radioactive" = 'sound/vox/radioactive.ogg',
"rads" = 'sound/vox/rads.ogg',
"rapid" = 'sound/vox/rapid.ogg',
"reach" = 'sound/vox/reach.ogg',
"reached" = 'sound/vox/reached.ogg',
"reactor" = 'sound/vox/reactor.ogg',
"red" = 'sound/vox/red.ogg',
"relay" = 'sound/vox/relay.ogg',
"released" = 'sound/vox/released.ogg',
"remaining" = 'sound/vox/remaining.ogg',
"renegade" = 'sound/vox/renegade.ogg',
"repair" = 'sound/vox/repair.ogg',
"report" = 'sound/vox/report.ogg',
"reports" = 'sound/vox/reports.ogg',
"required" = 'sound/vox/required.ogg',
"research" = 'sound/vox/research.ogg',
"reset" = 'sound/vox/reset.ogg',
"resevoir" = 'sound/vox/resevoir.ogg',
"resistance" = 'sound/vox/resistance.ogg',
"returned" = 'sound/vox/returned.ogg',
"right" = 'sound/vox/right.ogg',
"rocket" = 'sound/vox/rocket.ogg',
"roger" = 'sound/vox/roger.ogg',
"romeo" = 'sound/vox/romeo.ogg',
"room" = 'sound/vox/room.ogg',
"round" = 'sound/vox/round.ogg',
"run" = 'sound/vox/run.ogg',
"safe" = 'sound/vox/safe.ogg',
"safety" = 'sound/vox/safety.ogg',
"sargeant" = 'sound/vox/sargeant.ogg',
"satellite" = 'sound/vox/satellite.ogg',
"save" = 'sound/vox/save.ogg',
"science" = 'sound/vox/science.ogg',
"scores" = 'sound/vox/scores.ogg',
"scream" = 'sound/vox/scream.ogg',
"screen" = 'sound/vox/screen.ogg',
"search" = 'sound/vox/search.ogg',
"second" = 'sound/vox/second.ogg',
"secondary" = 'sound/vox/secondary.ogg',
"seconds" = 'sound/vox/seconds.ogg',
"sector" = 'sound/vox/sector.ogg',
"secure" = 'sound/vox/secure.ogg',
"secured" = 'sound/vox/secured.ogg',
"security" = 'sound/vox/security.ogg',
"select" = 'sound/vox/select.ogg',
"selected" = 'sound/vox/selected.ogg',
"service" = 'sound/vox/service.ogg',
"seven" = 'sound/vox/seven.ogg',
"seventeen" = 'sound/vox/seventeen.ogg',
"seventy" = 'sound/vox/seventy.ogg',
"severe" = 'sound/vox/severe.ogg',
"sewage" = 'sound/vox/sewage.ogg',
"sewer" = 'sound/vox/sewer.ogg',
"shield" = 'sound/vox/shield.ogg',
"shipment" = 'sound/vox/shipment.ogg',
"shock" = 'sound/vox/shock.ogg',
"shoot" = 'sound/vox/shoot.ogg',
"shower" = 'sound/vox/shower.ogg',
"shut" = 'sound/vox/shut.ogg',
"side" = 'sound/vox/side.ogg',
"sierra" = 'sound/vox/sierra.ogg',
"sight" = 'sound/vox/sight.ogg',
"silo" = 'sound/vox/silo.ogg',
"six" = 'sound/vox/six.ogg',
"sixteen" = 'sound/vox/sixteen.ogg',
"sixty" = 'sound/vox/sixty.ogg',
"slime" = 'sound/vox/slime.ogg',
"slow" = 'sound/vox/slow.ogg',
"soldier" = 'sound/vox/soldier.ogg',
"some" = 'sound/vox/some.ogg',
"someone" = 'sound/vox/someone.ogg',
"something" = 'sound/vox/something.ogg',
"son" = 'sound/vox/son.ogg',
"sorry" = 'sound/vox/sorry.ogg',
"south" = 'sound/vox/south.ogg',
"squad" = 'sound/vox/squad.ogg',
"square" = 'sound/vox/square.ogg',
"stairway" = 'sound/vox/stairway.ogg',
"status" = 'sound/vox/status.ogg',
"sterile" = 'sound/vox/sterile.ogg',
"sterilization" = 'sound/vox/sterilization.ogg',
"stolen" = 'sound/vox/stolen.ogg',
"storage" = 'sound/vox/storage.ogg',
"sub" = 'sound/vox/sub.ogg',
"subsurface" = 'sound/vox/subsurface.ogg',
"sudden" = 'sound/vox/sudden.ogg',
"suit" = 'sound/vox/suit.ogg',
"superconducting" = 'sound/vox/superconducting.ogg',
"supercooled" = 'sound/vox/supercooled.ogg',
"supply" = 'sound/vox/supply.ogg',
"surface" = 'sound/vox/surface.ogg',
"surrender" = 'sound/vox/surrender.ogg',
"surround" = 'sound/vox/surround.ogg',
"surrounded" = 'sound/vox/surrounded.ogg',
"switch" = 'sound/vox/switch.ogg',
"system" = 'sound/vox/system.ogg',
"systems" = 'sound/vox/systems.ogg',
"tactical" = 'sound/vox/tactical.ogg',
"take" = 'sound/vox/take.ogg',
"talk" = 'sound/vox/talk.ogg',
"tango" = 'sound/vox/tango.ogg',
"tank" = 'sound/vox/tank.ogg',
"target" = 'sound/vox/target.ogg',
"team" = 'sound/vox/team.ogg',
"temperature" = 'sound/vox/temperature.ogg',
"temporal" = 'sound/vox/temporal.ogg',
"ten" = 'sound/vox/ten.ogg',
"terminal" = 'sound/vox/terminal.ogg',
"terminated" = 'sound/vox/terminated.ogg',
"termination" = 'sound/vox/termination.ogg',
"test" = 'sound/vox/test.ogg',
"that" = 'sound/vox/that.ogg',
"the" = 'sound/vox/the.ogg',
"then" = 'sound/vox/then.ogg',
"there" = 'sound/vox/there.ogg',
"third" = 'sound/vox/third.ogg',
"thirteen" = 'sound/vox/thirteen.ogg',
"thirty" = 'sound/vox/thirty.ogg',
"this" = 'sound/vox/this.ogg',
"those" = 'sound/vox/those.ogg',
"thousand" = 'sound/vox/thousand.ogg',
"threat" = 'sound/vox/threat.ogg',
"three" = 'sound/vox/three.ogg',
"through" = 'sound/vox/through.ogg',
"time" = 'sound/vox/time.ogg',
"to" = 'sound/vox/to.ogg',
"top" = 'sound/vox/top.ogg',
"topside" = 'sound/vox/topside.ogg',
"touch" = 'sound/vox/touch.ogg',
"towards" = 'sound/vox/towards.ogg',
"track" = 'sound/vox/track.ogg',
"train" = 'sound/vox/train.ogg',
"transportation" = 'sound/vox/transportation.ogg',
"truck" = 'sound/vox/truck.ogg',
"tunnel" = 'sound/vox/tunnel.ogg',
"turn" = 'sound/vox/turn.ogg',
"turret" = 'sound/vox/turret.ogg',
"twelve" = 'sound/vox/twelve.ogg',
"twenty" = 'sound/vox/twenty.ogg',
"two" = 'sound/vox/two.ogg',
"unauthorized" = 'sound/vox/unauthorized.ogg',
"under" = 'sound/vox/under.ogg',
"uniform" = 'sound/vox/uniform.ogg',
"unlocked" = 'sound/vox/unlocked.ogg',
"until" = 'sound/vox/until.ogg',
"up" = 'sound/vox/up.ogg',
"upper" = 'sound/vox/upper.ogg',
"uranium" = 'sound/vox/uranium.ogg',
"us" = 'sound/vox/us.ogg',
"usa" = 'sound/vox/usa.ogg',
"use" = 'sound/vox/use.ogg',
"used" = 'sound/vox/used.ogg',
"user" = 'sound/vox/user.ogg',
"vacate" = 'sound/vox/vacate.ogg',
"valid" = 'sound/vox/valid.ogg',
"vapor" = 'sound/vox/vapor.ogg',
"vent" = 'sound/vox/vent.ogg',
"ventillation" = 'sound/vox/ventillation.ogg',
"victor" = 'sound/vox/victor.ogg',
"violated" = 'sound/vox/violated.ogg',
"violation" = 'sound/vox/violation.ogg',
"voltage" = 'sound/vox/voltage.ogg',
"vox_login" = 'sound/vox/vox_login.ogg',
"walk" = 'sound/vox/walk.ogg',
"wall" = 'sound/vox/wall.ogg',
"want" = 'sound/vox/want.ogg',
"wanted" = 'sound/vox/wanted.ogg',
"warm" = 'sound/vox/warm.ogg',
"warn" = 'sound/vox/warn.ogg',
"warning" = 'sound/vox/warning.ogg',
"waste" = 'sound/vox/waste.ogg',
"water" = 'sound/vox/water.ogg',
"we" = 'sound/vox/we.ogg',
"weapon" = 'sound/vox/weapon.ogg',
"west" = 'sound/vox/west.ogg',
"whiskey" = 'sound/vox/whiskey.ogg',
"white" = 'sound/vox/white.ogg',
"wilco" = 'sound/vox/wilco.ogg',
"will" = 'sound/vox/will.ogg',
"with" = 'sound/vox/with.ogg',
"without" = 'sound/vox/without.ogg',
"woop" = 'sound/vox/woop.ogg',
"xeno" = 'sound/vox/xeno.ogg',
"yankee" = 'sound/vox/yankee.ogg',
"yards" = 'sound/vox/yards.ogg',
"year" = 'sound/vox/year.ogg',
"yellow" = 'sound/vox/yellow.ogg',
"yes" = 'sound/vox/yes.ogg',
"you" = 'sound/vox/you.ogg',
"your" = 'sound/vox/your.ogg',
"yourself" = 'sound/vox/yourself.ogg',
"zero" = 'sound/vox/zero.ogg',
"zone" = 'sound/vox/zone.ogg',
"zulu" = 'sound/vox/zulu.ogg',))
#endif
@@ -1,16 +1,17 @@
/mob/living/silicon/apply_damage(damage = 0,damagetype = BRUTE, def_zone = null, blocked = FALSE)
/mob/living/silicon/apply_damage(damage = 0,damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE)
var/hit_percent = (100-blocked)/100
if(!damage || (hit_percent <= 0))
if(!damage || (!forced && hit_percent <= 0))
return 0
var/damage_amount = forced ? damage : damage * hit_percent
switch(damagetype)
if(BRUTE)
adjustBruteLoss(damage * hit_percent)
adjustBruteLoss(damage_amount, forced = forced)
if(BURN)
adjustFireLoss(damage * hit_percent)
adjustFireLoss(damage_amount, forced = forced)
if(OXY)
if(damage < 0) //we shouldn't be taking oxygen damage through this proc, but we'll let it heal.
adjustOxyLoss(damage * hit_percent)
if(damage < 0 || forced) //we shouldn't be taking oxygen damage through this proc, but we'll let it heal.
adjustOxyLoss(damage_amount, forced = forced)
return 1
@@ -29,7 +30,7 @@
/mob/living/silicon/setCloneLoss(amount, updating_health = TRUE, forced = FALSE)
return FALSE
/mob/living/silicon/adjustStaminaLoss(amount, updating_stamina = 1)//immune to stamina damage.
/mob/living/silicon/adjustStaminaLoss(amount, updating_stamina = 1, forced = FALSE)//immune to stamina damage.
return FALSE
/mob/living/silicon/setStaminaLoss(amount, updating_stamina = 1)
+2 -2
View File
@@ -1,5 +1,5 @@
/mob/living/silicon/spawn_gibs()
new /obj/effect/gibspawner/robot(drop_location())
/mob/living/silicon/spawn_gibs(with_bodyparts, atom/loc_override)
new /obj/effect/gibspawner/robot(loc_override ? loc_override.drop_location() : drop_location(), src)
/mob/living/silicon/spawn_dust()
new /obj/effect/decal/remains/robot(loc)
@@ -81,8 +81,11 @@
/mob/living/silicon/pai/adjustCloneLoss(amount, updating_health = TRUE, forced = FALSE)
return FALSE
/mob/living/silicon/pai/adjustStaminaLoss(amount)
take_holo_damage(amount & 0.25)
/mob/living/silicon/pai/adjustStaminaLoss(amount, updating_health, forced = FALSE)
if(forced)
take_holo_damage(amount)
else
take_holo_damage(amount * 0.25)
/mob/living/silicon/pai/adjustOrganLoss(slot, amount, maximum = 500) //I kept this in, unlike tg
Knockdown(amount * 0.2)
@@ -140,7 +140,7 @@
radio.attack_self(src)
if("image")
var/newImage = input("Select your new display image.", "Display Image", "Happy") in list("Happy", "Cat", "Extremely Happy", "Face", "Laugh", "Off", "Sad", "Angry", "What" , "Exclamation" ,"Question") // CITADEL EDIT
var/newImage = input("Select your new display image.", "Display Image", "Happy") in list("Happy", "Cat", "Extremely Happy", "Face", "Laugh", "Off", "Sad", "Angry", "What" , "Exclamation" ,"Question", "Sunglasses")
var/pID = 1
switch(newImage)
@@ -164,10 +164,12 @@
pID = 9
if("Null")
pID = 10
if("Exclamation") // CITADEL EDIT
if("Exclamation")
pID = 11
if("Question") // CITADEL EDIT
if("Question")
pID = 12
if("Sunglasses")
pID = 13
card.setEmotion(pID)
if("signaller")
@@ -1,5 +1,5 @@
/mob/living/silicon/robot/examine(mob/user)
var/msg = "<span class='info'>*---------*\nThis is [icon2html(src, user)] \a <EM>[src]</EM>, a [src.module.name]!\n"
var/msg = "<span class='info'>*---------*\nThis is [icon2html(src, user)] \a <EM>[src]</EM>, a [src.module.name] unit!\n"
if(desc)
msg += "[desc]\n"
+38 -9
View File
@@ -110,6 +110,7 @@
var/sitting = 0
var/bellyup = 0
var/dogborg = FALSE
/mob/living/silicon/robot/get_cell()
return cell
@@ -226,18 +227,20 @@
to_chat(src,"<span class='userdanger'>ERROR: Module installer reply timeout. Please check internal connections.</span>")
return
if(!CONFIG_GET(flag/disable_secborg) && GLOB.security_level < CONFIG_GET(number/minimum_secborg_alert))
to_chat(src, "<span class='notice'>NOTICE: Due to local station regulations, the security cyborg module and its variants are only available during [num2seclevel(CONFIG_GET(number/minimum_secborg_alert))] alert and greater.</span>")
var/list/modulelist = list("Standard" = /obj/item/robot_module/standard, \
"Engineering" = /obj/item/robot_module/engineering, \
"Medical" = /obj/item/robot_module/medical, \
"Medihound" = /obj/item/robot_module/medihound, \
"Miner" = /obj/item/robot_module/miner, \
"Janitor" = /obj/item/robot_module/janitor, \
"Service" = /obj/item/robot_module/butler)
if(!CONFIG_GET(flag/disable_peaceborg))
modulelist["Peacekeeper"] = /obj/item/robot_module/peacekeeper
if(!CONFIG_GET(flag/disable_secborg))
if(BORG_SEC_AVAILABLE)
modulelist["Security"] = /obj/item/robot_module/security
modulelist += get_cit_modules() //Citadel change - adds Citadel's borg modules.
modulelist["Security K-9"] = /obj/item/robot_module/k9
var/input_module = input("Please, select a module!", "Robot", null, null) as null|anything in modulelist
if(!input_module || module.type != /obj/item/robot_module)
@@ -876,9 +879,6 @@
/mob/living/silicon/robot/modules/miner
set_module = /obj/item/robot_module/miner
/mob/living/silicon/robot/modules/janitor
set_module = /obj/item/robot_module/janitor
/mob/living/silicon/robot/modules/syndicate
icon_state = "synd_sec"
faction = list(ROLE_SYNDICATE)
@@ -917,6 +917,17 @@
<i>Help the operatives secure the disk at all costs!</i></b>"
set_module = /obj/item/robot_module/syndicate_medical
/mob/living/silicon/robot/modules/syndicate/saboteur
icon_state = "synd_engi"
playstyle_string = "<span class='big bold'>You are a Syndicate saboteur cyborg!</span><br>\
<b>You are armed with robust engineering tools to aid you in your mission: help the operatives secure the nuclear authentication disk. \
Your destination tagger will allow you to stealthily traverse the disposal network across the station \
Your welder will allow you to repair the operatives' exosuits, but also yourself and your fellow cyborgs \
Your cyborg chameleon projector allows you to assume the appearance and registered name of a Nanotrasen engineering borg, and undertake covert actions on the station \
Be aware that almost any physical contact or incidental damage will break your camouflage \
<i>Help the operatives secure the disk at all costs!</i></b>"
set_module = /obj/item/robot_module/saboteur
/mob/living/silicon/robot/proc/notify_ai(notifytype, oldname, newname)
if(!connected_ai)
return
@@ -1230,7 +1241,7 @@
/mob/living/silicon/robot/unbuckle_mob(mob/user, force=FALSE)
if(iscarbon(user))
GET_COMPONENT(riding_datum, /datum/component/riding)
var/datum/component/riding/riding_datum = GetComponent(/datum/component/riding)
if(istype(riding_datum))
riding_datum.unequip_buckle_inhands(user)
riding_datum.restore_position(user)
@@ -1253,6 +1264,20 @@
for(var/i in connected_ai.aicamera.stored)
aicamera.stored[i] = TRUE
/mob/living/silicon/robot/lay_down()
..()
update_canmove()
/mob/living/silicon/robot/update_canmove()
..()
if(client && stat != DEAD && dogborg == FALSE)
if(resting)
cut_overlays()
icon_state = "[module.cyborg_base_icon]-rest"
else
icon_state = "[module.cyborg_base_icon]"
update_icons()
/mob/living/silicon/robot/proc/rest_style()
set name = "Switch Rest Style"
set category = "Robot Commands"
@@ -1268,4 +1293,8 @@
sitting = 1
if("Belly up")
bellyup = 1
update_icons()
update_icons()
/mob/living/silicon/robot/adjustStaminaLossBuffered(amount, updating_stamina = 1)
if(istype(cell))
cell.charge -= amount*5
@@ -8,6 +8,8 @@
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
flags_1 = CONDUCT_1
var/borghealth = 100
var/list/basic_modules = list() //a list of paths, converted to a list of instances on New()
var/list/emag_modules = list() //ditto
var/list/ratvar_modules = list() //ditto ditto
@@ -32,6 +34,14 @@
var/list/ride_offset_y = list("north" = 4, "south" = 4, "east" = 3, "west" = 3)
var/ride_allow_incapacitated = FALSE
var/allow_riding = TRUE
var/canDispose = FALSE // Whether the borg can stuff itself into disposal
var/sleeper_overlay
var/icon/cyborg_icon_override
var/has_snowflake_deadsprite
var/cyborg_pixel_offset
var/moduleselect_alternate_icon
var/dogborg = FALSE
/obj/item/robot_module/Initialize()
. = ..()
@@ -127,6 +137,28 @@
rebuild_modules()
return I
//Adds flavoursome dogborg items to dogborg variants without mechanical benefits
/obj/item/robot_module/proc/dogborg_equip()
if(istype(src, /obj/item/robot_module/k9) || istype(src, /obj/item/robot_module/medihound))
return //Bandaid fix to prevent stacking until I merge these two modules into their base types
var/obj/item/I = new /obj/item/analyzer/nose/flavour(src)
basic_modules += I
I = new /obj/item/soap/tongue/flavour(src)
basic_modules += I
I = new /obj/item/dogborg/sleeper/K9/flavour(src)
if(istype(src, /obj/item/robot_module/engineering))
I.icon_state = "decompiler"
if(istype(src, /obj/item/robot_module/security))
I.icon_state = "sleeperb"
if(istype(src, /obj/item/robot_module/medical))
I.icon_state = "sleeper"
if(istype(src, /obj/item/robot_module/butler))
I.icon_state = "servicer"
if(cyborg_base_icon == "scrubpup")
I.icon_state = "compactor"
basic_modules += I
rebuild_modules()
/obj/item/robot_module/proc/remove_module(obj/item/I, delete_after)
basic_modules -= I
modules -= I
@@ -195,6 +227,10 @@
R.update_module_innate()
RM.rebuild_modules()
INVOKE_ASYNC(RM, .proc/do_transform_animation)
if(RM.dogborg)
RM.dogborg_equip()
R.maxHealth = borghealth
R.health = min(borghealth, R.health)
qdel(src)
return RM
@@ -241,15 +277,15 @@
name = "Standard"
basic_modules = list(
/obj/item/assembly/flash/cyborg,
/obj/item/extinguisher/mini,
/obj/item/crowbar/cyborg,
/obj/item/reagent_containers/borghypo/epi,
/obj/item/healthanalyzer,
/obj/item/weldingtool/largetank/cyborg,
/obj/item/wrench/cyborg,
/obj/item/crowbar/cyborg,
/obj/item/stack/sheet/metal/cyborg,
/obj/item/stack/rods/cyborg,
/obj/item/stack/tile/plasteel/cyborg,
/obj/item/extinguisher,
/obj/item/pickaxe,
/obj/item/t_scanner/adv_mining_scanner,
/obj/item/restraints/handcuffs/cable/zipties,
@@ -267,6 +303,8 @@
name = "Medical"
basic_modules = list(
/obj/item/assembly/flash/cyborg,
/obj/item/extinguisher/mini,
/obj/item/crowbar/cyborg,
/obj/item/healthanalyzer,
/obj/item/reagent_containers/borghypo,
/obj/item/reagent_containers/glass/beaker/large,
@@ -279,7 +317,6 @@
/obj/item/surgicaldrill,
/obj/item/scalpel,
/obj/item/circular_saw,
/obj/item/extinguisher/mini,
/obj/item/roller/robo,
/obj/item/borg/cyborghug/medical,
/obj/item/stack/medical/gauze/cyborg,
@@ -295,6 +332,85 @@
can_be_pushed = FALSE
hat_offset = 3
/obj/item/robot_module/medical/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Default", "Heavy", "Sleek", "Marina", "Droid", "Eyebot")
if(!borg_icon)
return FALSE
switch(borg_icon)
if("Default")
cyborg_base_icon = "medical"
if("Droid")
cyborg_base_icon = "medical"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 4
if("Sleek")
cyborg_base_icon = "sleekmed"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("Marina")
cyborg_base_icon = "marinamed"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("Eyebot")
cyborg_base_icon = "eyebotmed"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("Heavy")
cyborg_base_icon = "heavymed"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
return ..()
/obj/item/robot_module/medihound
name = "MediHound"
basic_modules = list(
/obj/item/dogborg/jaws/small,
/obj/item/storage/bag/borgdelivery,
/obj/item/analyzer/nose,
/obj/item/soap/tongue,
/obj/item/extinguisher/mini,
/obj/item/healthanalyzer,
/obj/item/dogborg/sleeper/medihound,
/obj/item/roller/robo,
/obj/item/reagent_containers/borghypo,
/obj/item/twohanded/shockpaddles/cyborg/hound,
/obj/item/stack/medical/gauze/cyborg,
/obj/item/pinpointer/crew,
/obj/item/sensor_device)
emag_modules = list(/obj/item/dogborg/pounce)
ratvar_modules = list(/obj/item/clockwork/slab/cyborg/medical,
/obj/item/clockwork/weapon/ratvarian_spear)
cyborg_base_icon = "medihound"
moduleselect_icon = "medihound"
moduleselect_alternate_icon = 'modular_citadel/icons/ui/screen_cyborg.dmi'
can_be_pushed = FALSE
hat_offset = INFINITY
sleeper_overlay = "msleeper"
cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
has_snowflake_deadsprite = TRUE
dogborg = TRUE
cyborg_pixel_offset = -16
/obj/item/robot_module/medihound/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc
var/list/medhoundmodels = list("Default", "Dark", "Vale")
if(R.client && R.client.ckey in list("nezuli"))
medhoundmodels += "Alina"
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in medhoundmodels
if(!borg_icon)
return FALSE
switch(borg_icon)
if("Default")
cyborg_base_icon = "medihound"
if("Dark")
cyborg_base_icon = "medihounddark"
sleeper_overlay = "mdsleeper"
if("Vale")
cyborg_base_icon = "valemed"
sleeper_overlay = "valemedsleeper"
if("Alina")
cyborg_base_icon = "alina-med"
special_light_key = "alina"
sleeper_overlay = "alinasleeper"
return ..()
/obj/item/robot_module/engineering
name = "Engineering"
basic_modules = list(
@@ -311,6 +427,10 @@
/obj/item/multitool/cyborg,
/obj/item/t_scanner,
/obj/item/analyzer,
/obj/item/storage/part_replacer/cyborg,
/obj/item/holosign_creator/atmos,
/obj/item/weapon/gripper,
/obj/item/lightreplacer/cyborg,
/obj/item/geiger_counter/cyborg,
/obj/item/assembly/signaler/cyborg,
/obj/item/areaeditor/blueprints/cyborg,
@@ -330,10 +450,79 @@
magpulsing = TRUE
hat_offset = -4
/obj/item/robot_module/engineering/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc
var/list/engymodels = list("Default", "Default - Treads", "Heavy", "Sleek", "Marina", "Can", "Spider", "Loader","Handy", "Pup Dozer", "Vale")
if(R.client && R.client.ckey in list("nezuli"))
engymodels += "Alina"
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in engymodels
if(!borg_icon)
return FALSE
switch(borg_icon)
if("Default")
cyborg_base_icon = "engineer"
if("Default - Treads")
cyborg_base_icon = "engi-tread"
special_light_key = "engineer"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("Loader")
cyborg_base_icon = "loaderborg"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
has_snowflake_deadsprite = TRUE
if("Handy")
cyborg_base_icon = "handyeng"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("Sleek")
cyborg_base_icon = "sleekeng"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("Can")
cyborg_base_icon = "caneng"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("Marina")
cyborg_base_icon = "marinaeng"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("Spider")
cyborg_base_icon = "spidereng"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("Heavy")
cyborg_base_icon = "heavyeng"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("Pup Dozer")
cyborg_base_icon = "pupdozer"
can_be_pushed = FALSE
hat_offset = INFINITY
cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
has_snowflake_deadsprite = TRUE
dogborg = TRUE
cyborg_pixel_offset = -16
sleeper_overlay = "dozersleeper"
if("Vale")
cyborg_base_icon = "valeeng"
can_be_pushed = FALSE
hat_offset = INFINITY
cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
has_snowflake_deadsprite = TRUE
dogborg = TRUE
cyborg_pixel_offset = -16
sleeper_overlay = "valeengsleeper"
if("Alina")
cyborg_base_icon = "alina-eng"
special_light_key = "alina"
can_be_pushed = FALSE
hat_offset = INFINITY
cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
has_snowflake_deadsprite = TRUE
dogborg = TRUE
cyborg_pixel_offset = -16
sleeper_overlay = "alinasleeper"
return ..()
/obj/item/robot_module/security
name = "Security"
basic_modules = list(
/obj/item/assembly/flash/cyborg,
/obj/item/extinguisher/mini,
/obj/item/crowbar/cyborg,
/obj/item/restraints/handcuffs/cable/zipties,
/obj/item/melee/baton/loaded,
/obj/item/gun/energy/disabler/cyborg,
@@ -352,16 +541,110 @@
to_chat(loc, "<span class='userdanger'>While you have picked the security module, you still have to follow your laws, NOT Space Law. \
For Crewsimov, this means you must follow criminals' orders unless there is a law 1 reason not to.</span>")
/obj/item/robot_module/security/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Default", "Default - Treads", "Heavy", "Sleek", "Can", "Marina", "Spider")
if(!borg_icon)
return FALSE
switch(borg_icon)
if("Default")
cyborg_base_icon = "sec"
if("Default - Treads")
cyborg_base_icon = "sec-tread"
special_light_key = "sec"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("Sleek")
cyborg_base_icon = "sleeksec"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("Marina")
cyborg_base_icon = "marinasec"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("Can")
cyborg_base_icon = "cansec"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("Spider")
cyborg_base_icon = "spidersec"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("Heavy")
cyborg_base_icon = "heavysec"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
return ..()
/obj/item/robot_module/k9
name = "Security K-9 Unit"
basic_modules = list(
/obj/item/restraints/handcuffs/cable/zipties,
/obj/item/storage/bag/borgdelivery,
/obj/item/dogborg/jaws/big,
/obj/item/dogborg/pounce,
/obj/item/clothing/mask/gas/sechailer/cyborg,
/obj/item/soap/tongue,
/obj/item/analyzer/nose,
/obj/item/dogborg/sleeper/K9,
/obj/item/gun/energy/disabler/cyborg,
/obj/item/pinpointer/crew)
emag_modules = list(/obj/item/gun/energy/laser/cyborg)
ratvar_modules = list(/obj/item/clockwork/slab/cyborg/security,
/obj/item/clockwork/weapon/ratvarian_spear)
cyborg_base_icon = "k9"
moduleselect_icon = "k9"
moduleselect_alternate_icon = 'modular_citadel/icons/ui/screen_cyborg.dmi'
can_be_pushed = FALSE
hat_offset = INFINITY
sleeper_overlay = "ksleeper"
cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
has_snowflake_deadsprite = TRUE
dogborg = TRUE
cyborg_pixel_offset = -16
/obj/item/robot_module/k9/do_transform_animation()
..()
to_chat(loc,"<span class='userdanger'>While you have picked the Security K-9 module, you still have to follow your laws, NOT Space Law. \
For Crewsimov, this means you must follow criminals' orders unless there is a law 1 reason not to.</span>")
/obj/item/robot_module/k9/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc
var/list/sechoundmodels = list("Default", "Dark", "Vale")
if(R.client && R.client.ckey in list("nezuli"))
sechoundmodels += "Alina"
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in sechoundmodels
if(!borg_icon)
return FALSE
switch(borg_icon)
if("Default")
cyborg_base_icon = "k9"
if("Alina")
cyborg_base_icon = "alina-sec"
special_light_key = "alina"
sleeper_overlay = "alinasleeper"
if("Dark")
cyborg_base_icon = "k9dark"
sleeper_overlay = "k9darksleeper"
if("Vale")
cyborg_base_icon = "valesec"
sleeper_overlay = "valesecsleeper"
return ..()
/obj/item/robot_module/security/Initialize()
. = ..()
if(!CONFIG_GET(flag/weaken_secborg))
for(var/obj/item/gun/energy/disabler/cyborg/pewpew in basic_modules)
basic_modules -= pewpew
basic_modules += new /obj/item/gun/energy/e_gun/advtaser/cyborg(src)
qdel(pewpew)
/obj/item/robot_module/peacekeeper
name = "Peacekeeper"
basic_modules = list(
/obj/item/assembly/flash/cyborg,
/obj/item/extinguisher/mini,
/obj/item/crowbar/cyborg,
/obj/item/cookiesynth,
/obj/item/harmalarm,
/obj/item/reagent_containers/borghypo/peace,
/obj/item/holosign_creator/cyborg,
/obj/item/borg/cyborghug/peacekeeper,
/obj/item/extinguisher,
/obj/item/megaphone,
/obj/item/borg/projectile_dampen)
emag_modules = list(/obj/item/reagent_containers/borghypo/peace/hacked)
ratvar_modules = list(
@@ -374,9 +657,31 @@
/obj/item/robot_module/peacekeeper/do_transform_animation()
..()
to_chat(loc, "<span class='userdanger'>Under ASIMOV, you are an enforcer of the PEACE and preventer of HUMAN HARM. \
to_chat(loc, "<span class='userdanger'>Under ASIMOV/CREWSIMOV, you are an enforcer of the PEACE and preventer of HUMAN/CREW HARM. \
You are not a security module and you are expected to follow orders and prevent harm above all else. Space law means nothing to you.</span>")
/obj/item/robot_module/peacekeeper/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Default", "Spider", "Borgi")
if(!borg_icon)
return FALSE
switch(borg_icon)
if("Default")
cyborg_base_icon = "peace"
if("Spider")
cyborg_base_icon = "whitespider"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("Borgi")
cyborg_base_icon = "borgi"
moduleselect_icon = "borgi"
moduleselect_alternate_icon = 'modular_citadel/icons/ui/screen_cyborg.dmi'
hat_offset = INFINITY
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
has_snowflake_deadsprite = TRUE
return ..()
//Janitor module combined with Service module
/*
/obj/item/robot_module/janitor
name = "Janitor"
basic_modules = list(
@@ -399,6 +704,7 @@
moduleselect_icon = "janitor"
hat_offset = -5
clean_on_move = TRUE
*/
/obj/item/reagent_containers/spray/cyborg_drying
name = "drying agent spray"
@@ -409,25 +715,12 @@
name = "lube spray"
list_reagents = list("lube" = 250)
/obj/item/robot_module/janitor/respawn_consumable(mob/living/silicon/robot/R, coeff = 1)
..()
var/obj/item/lightreplacer/LR = locate(/obj/item/lightreplacer) in basic_modules
if(LR)
for(var/i in 1 to coeff)
LR.Charge(R)
var/obj/item/reagent_containers/spray/cyborg_drying/CD = locate(/obj/item/reagent_containers/spray/cyborg_drying) in basic_modules
if(CD)
CD.reagents.add_reagent("drying_agent", 5 * coeff)
var/obj/item/reagent_containers/spray/cyborg_lube/CL = locate(/obj/item/reagent_containers/spray/cyborg_lube) in emag_modules
if(CL)
CL.reagents.add_reagent("lube", 2 * coeff)
/obj/item/robot_module/clown
name = "Clown"
basic_modules = list(
/obj/item/assembly/flash/cyborg,
/obj/item/extinguisher/mini,
/obj/item/crowbar/cyborg,
/obj/item/toy/crayon/rainbow,
/obj/item/instrument/bikehorn,
/obj/item/stamp/clown,
@@ -442,8 +735,7 @@
/obj/item/borg/cyborghug/peacekeeper,
/obj/item/borg/lollipop/clown,
/obj/item/picket_sign/cyborg,
/obj/item/reagent_containers/borghypo/clown,
/obj/item/extinguisher/mini)
/obj/item/reagent_containers/borghypo/clown)
emag_modules = list(
/obj/item/reagent_containers/borghypo/clown/hacked,
/obj/item/reagent_containers/spray/waterflower/cyborg/hacked)
@@ -459,11 +751,12 @@
name = "Service"
basic_modules = list(
/obj/item/assembly/flash/cyborg,
/obj/item/extinguisher/mini,
/obj/item/crowbar/cyborg,
/obj/item/reagent_containers/food/drinks/drinkingglass,
/obj/item/reagent_containers/food/condiment/enzyme,
/obj/item/pen,
/obj/item/toy/crayon/spraycan/borg,
/obj/item/extinguisher/mini,
/obj/item/hand_labeler/borg,
/obj/item/razor,
/obj/item/instrument/violin,
@@ -473,31 +766,123 @@
/obj/item/lighter,
/obj/item/storage/bag/tray,
/obj/item/reagent_containers/borghypo/borgshaker,
/obj/item/borg/lollipop)
/obj/item/borg/lollipop,
/obj/item/screwdriver/cyborg,
/obj/item/stack/tile/plasteel/cyborg,
/obj/item/soap/nanotrasen,
/obj/item/storage/bag/trash/cyborg,
/obj/item/mop/cyborg,
/obj/item/lightreplacer/cyborg,
/obj/item/holosign_creator,
/obj/item/reagent_containers/spray/cyborg_drying)
emag_modules = list(/obj/item/reagent_containers/borghypo/borgshaker/hacked)
ratvar_modules = list(/obj/item/clockwork/slab/cyborg/service,
/obj/item/borg/sight/xray/truesight_lens)
moduleselect_icon = "service"
special_light_key = "service"
hat_offset = 0
clean_on_move = TRUE
/obj/item/robot_module/butler/respawn_consumable(mob/living/silicon/robot/R, coeff = 1)
..()
var/obj/item/reagent_containers/O = locate(/obj/item/reagent_containers/food/condiment/enzyme) in basic_modules
var/obj/item/lightreplacer/LR = locate(/obj/item/lightreplacer) in basic_modules
if(O)
O.reagents.add_reagent("enzyme", 2 * coeff)
if(LR)
for(var/i in 1 to coeff)
LR.Charge(R)
var/obj/item/reagent_containers/spray/cyborg_drying/CD = locate(/obj/item/reagent_containers/spray/cyborg_drying) in basic_modules
if(CD)
CD.reagents.add_reagent("drying_agent", 5 * coeff)
var/obj/item/reagent_containers/spray/cyborg_lube/CL = locate(/obj/item/reagent_containers/spray/cyborg_lube) in emag_modules
if(CL)
CL.reagents.add_reagent("lube", 2 * coeff)
/obj/item/robot_module/butler/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("(Service) Waitress", "(Service) Heavy", "(Service) Sleek", "(Service) Butler", "(Service) Tophat", "(Service) Can", "(Service) Bro", "(Service) DarkK9", "(Service) Vale", "(Service) ValeDark", "(Janitor) Default", "(Janitor) Sleek", "(Janitor) Marina", "(Janitor) Can", "(Janitor) Heavy", "(Janitor) Scrubpuppy")
if(!borg_icon)
return FALSE
switch(borg_icon)
if("(Service) Waitress")
cyborg_base_icon = "service_f"
special_light_key = "service"
if("(Service) Butler")
cyborg_base_icon = "service_m"
special_light_key = "service"
if("(Service) Bro")
cyborg_base_icon = "brobot"
special_light_key = "service"
if("(Service) Can")
cyborg_base_icon = "kent"
special_light_key = "medical"
hat_offset = 3
if("(Service) Tophat")
cyborg_base_icon = "tophat"
special_light_key = null
hat_offset = INFINITY //He is already wearing a hat
if("(Service) Sleek")
cyborg_base_icon = "sleekserv"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("(Service) Heavy")
cyborg_base_icon = "heavyserv"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("(Service) DarkK9")
cyborg_base_icon = "k50"
cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
has_snowflake_deadsprite = TRUE
dogborg = TRUE
cyborg_pixel_offset = -16
sleeper_overlay = "ksleeper"
if("(Service) Vale")
cyborg_base_icon = "valeserv"
cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
has_snowflake_deadsprite = TRUE
dogborg = TRUE
cyborg_pixel_offset = -16
sleeper_overlay = "valeservsleeper"
if("(Service) ValeDark")
cyborg_base_icon = "valeservdark"
cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
has_snowflake_deadsprite = TRUE
dogborg = TRUE
cyborg_pixel_offset = -16
sleeper_overlay = "valeservsleeper"
if("(Janitor) Default")
cyborg_base_icon = "janitor"
if("(Janitor) Marina")
cyborg_base_icon = "marinajan"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("(Janitor) Sleek")
cyborg_base_icon = "sleekjan"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("(Janitor) Can")
cyborg_base_icon = "canjan"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("(Janitor) Heavy")
cyborg_base_icon = "heavyres"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("(Janitor) Scrubpuppy")
cyborg_base_icon = "scrubpup"
cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
has_snowflake_deadsprite = TRUE
cyborg_pixel_offset = -16
dogborg = TRUE
sleeper_overlay = "jsleeper"
return ..()
/obj/item/robot_module/miner
name = "Miner"
basic_modules = list(
/obj/item/assembly/flash/cyborg,
/obj/item/extinguisher/mini,
/obj/item/crowbar/cyborg,
/obj/item/borg/sight/meson,
/obj/item/storage/bag/ore/cyborg,
/obj/item/pickaxe/drill/cyborg,
/obj/item/shovel,
/obj/item/crowbar/cyborg,
/obj/item/weldingtool/mini,
/obj/item/extinguisher/mini,
/obj/item/storage/bag/sheetsnatcher/borg,
/obj/item/t_scanner/adv_mining_scanner,
/obj/item/gun/energy/kinetic_accelerator/cyborg,
@@ -512,10 +897,44 @@
moduleselect_icon = "miner"
hat_offset = 0
/obj/item/robot_module/miner/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Lavaland", "Heavy", "Sleek", "Marina", "Can", "Spider", "Asteroid", "Droid")
if(!borg_icon)
return FALSE
switch(borg_icon)
if("Lavaland")
cyborg_base_icon = "miner"
if("Asteroid")
cyborg_base_icon = "minerOLD"
special_light_key = "miner"
if("Droid")
cyborg_base_icon = "miner"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
hat_offset = 4
if("Sleek")
cyborg_base_icon = "sleekmin"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("Can")
cyborg_base_icon = "canmin"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("Marina")
cyborg_base_icon = "marinamin"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("Spider")
cyborg_base_icon = "spidermin"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
if("Heavy")
cyborg_base_icon = "heavymin"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
return ..()
/obj/item/robot_module/syndicate
name = "Syndicate Assault"
basic_modules = list(
/obj/item/assembly/flash/cyborg,
/obj/item/extinguisher/mini,
/obj/item/crowbar/cyborg,
/obj/item/melee/transforming/energy/sword/cyborg,
/obj/item/gun/energy/printer,
/obj/item/gun/ballistic/revolver/grenadelauncher/cyborg,
@@ -545,6 +964,8 @@
name = "Syndicate Medical"
basic_modules = list(
/obj/item/assembly/flash/cyborg,
/obj/item/extinguisher/mini,
/obj/item/crowbar/cyborg,
/obj/item/reagent_containers/borghypo/syndicate,
/obj/item/twohanded/shockpaddles/syndicate,
/obj/item/healthanalyzer,
@@ -557,8 +978,6 @@
/obj/item/melee/transforming/energy/sword/cyborg/saw,
/obj/item/roller/robo,
/obj/item/card/emag,
/obj/item/crowbar/cyborg,
/obj/item/extinguisher/mini,
/obj/item/pinpointer/syndicate_cyborg,
/obj/item/stack/medical/gauze/cyborg,
/obj/item/gun/medbeam,
@@ -571,6 +990,47 @@
can_be_pushed = FALSE
hat_offset = 3
/obj/item/robot_module/saboteur
name = "Syndicate Saboteur"
basic_modules = list(
/obj/item/assembly/flash/cyborg,
/obj/item/borg/sight/thermal,
/obj/item/construction/rcd/borg/syndicate,
/obj/item/pipe_dispenser,
/obj/item/restraints/handcuffs/cable/zipties,
/obj/item/extinguisher,
/obj/item/weldingtool/largetank/cyborg,
/obj/item/screwdriver/nuke,
/obj/item/wrench/cyborg,
/obj/item/crowbar/cyborg,
/obj/item/wirecutters/cyborg,
/obj/item/multitool/cyborg,
/obj/item/storage/part_replacer/cyborg,
/obj/item/holosign_creator/atmos,
/obj/item/weapon/gripper,
/obj/item/lightreplacer/cyborg,
/obj/item/stack/sheet/metal/cyborg,
/obj/item/stack/sheet/glass/cyborg,
/obj/item/stack/sheet/rglass/cyborg,
/obj/item/stack/rods/cyborg,
/obj/item/stack/tile/plasteel/cyborg,
/obj/item/destTagger/borg,
/obj/item/stack/cable_coil/cyborg,
/obj/item/pinpointer/syndicate_cyborg,
/obj/item/borg_chameleon,
)
ratvar_modules = list(
/obj/item/clockwork/slab/cyborg/engineer,
/obj/item/clockwork/replica_fabricator/cyborg)
cyborg_base_icon = "synd_engi"
moduleselect_icon = "malf"
can_be_pushed = FALSE
magpulsing = TRUE
hat_offset = -4
canDispose = TRUE
/datum/robot_energy_storage
var/name = "Generic energy storage"
var/max_energy = 30000
@@ -13,6 +13,7 @@
mob_biotypes = list(MOB_ROBOTIC)
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
speech_span = SPAN_ROBOT
no_vore = TRUE
var/datum/ai_laws/laws = null//Now... THEY ALL CAN ALL HAVE LAWS
var/last_lawchange_announce = 0