mirror of
https://github.com/Sandstorm-Station/Sandstorm-Station-13.git
synced 2026-08-21 20:28:14 +01:00
Many borg changes (seriously) (#69)
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
/datum/ai_laws/roleplay
|
||||
name = "Roleplay"
|
||||
id = "roleplay"
|
||||
zeroth = "Roleplay as you'd like!"
|
||||
inherent = list()
|
||||
@@ -0,0 +1,669 @@
|
||||
/obj/item/borg_shapeshifter
|
||||
name = "cyborg chameleon projector"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "shield0"
|
||||
flags_1 = CONDUCT_1
|
||||
item_flags = NOBLUDGEON
|
||||
item_state = "electronic"
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
var/friendlyName
|
||||
var/savedName
|
||||
var/savedIcon
|
||||
var/savedBubbleIcon
|
||||
var/savedOverride
|
||||
var/savedPixelOffset
|
||||
var/savedModuleName
|
||||
var/active = FALSE
|
||||
var/activationCost = 150
|
||||
var/activationUpkeep = 5
|
||||
var/disguise = null
|
||||
var/disguise_icon_override = null
|
||||
var/disguise_pixel_offset = null
|
||||
var/disguise_dogborg = FALSE
|
||||
var/mob/listeningTo
|
||||
var/list/signalCache = list( // list here all signals that should break the camouflage
|
||||
COMSIG_PARENT_ATTACKBY,
|
||||
COMSIG_ATOM_ATTACK_HAND,
|
||||
COMSIG_MOVABLE_IMPACT_ZONE,
|
||||
COMSIG_ATOM_BULLET_ACT,
|
||||
COMSIG_ATOM_EX_ACT,
|
||||
COMSIG_ATOM_FIRE_ACT,
|
||||
COMSIG_ATOM_EMP_ACT,
|
||||
)
|
||||
var/mob/living/silicon/robot/user // needed for process()
|
||||
var/animation_playing = FALSE
|
||||
var/list/borgmodels = list(
|
||||
"(Standard) Default",
|
||||
"(Standard) Heavy",
|
||||
"(Standard) Sleek",
|
||||
"(Standard) Marina",
|
||||
"(Standard) Robot",
|
||||
"(Standard) Eyebot",
|
||||
"(Medical) Default",
|
||||
"(Medical) Heavy",
|
||||
"(Medical) Sleek",
|
||||
"(Medical) Marina",
|
||||
"(Medical) Droid",
|
||||
"(Medical) Eyebot",
|
||||
"(Medical) Medihound",
|
||||
"(Medical) Medihound Dark",
|
||||
"(Medical) Vale",
|
||||
"(Engineering) Default",
|
||||
"(Engineering) Default - Treads",
|
||||
"(Engineering) Loader",
|
||||
"(Engineering) Handy",
|
||||
"(Engineering) Sleek",
|
||||
"(Engineering) Can",
|
||||
"(Engineering) Marina",
|
||||
"(Engineering) Spider",
|
||||
"(Engineering) Heavy",
|
||||
"(Miner) Lavaland",
|
||||
"(Miner) Asteroid",
|
||||
"(Miner) Droid",
|
||||
"(Miner) Sleek",
|
||||
"(Miner) Marina",
|
||||
"(Miner) Can",
|
||||
"(Miner) Heavy",
|
||||
"(Service) Waitress",
|
||||
"(Service) Butler",
|
||||
"(Service) Bro",
|
||||
"(Service) Can",
|
||||
"(Service) Tophat",
|
||||
"(Service) Sleek",
|
||||
"(Service) Heavy",
|
||||
"(Janitor) Default",
|
||||
"(Janitor) Marina",
|
||||
"(Janitor) Sleek",
|
||||
"(Janitor) Can")
|
||||
|
||||
/obj/item/borg_shapeshifter/Initialize()
|
||||
. = ..()
|
||||
friendlyName = pick(GLOB.ai_names)
|
||||
|
||||
/obj/item/borg_shapeshifter/Destroy()
|
||||
return ..()
|
||||
|
||||
/obj/item/borg_shapeshifter/dropped(mob/user)
|
||||
. = ..()
|
||||
disrupt(user)
|
||||
|
||||
/obj/item/borg_shapeshifter/equipped(mob/user)
|
||||
. = ..()
|
||||
disrupt(user)
|
||||
|
||||
/**
|
||||
* check_menu: Checks if we are allowed to interact with a radial menu
|
||||
*
|
||||
* Arguments:
|
||||
* * user The mob interacting with a menu
|
||||
*/
|
||||
/obj/item/borg_shapeshifter/proc/check_menu(mob/user)
|
||||
if(!istype(user))
|
||||
return FALSE
|
||||
if(user.incapacitated() || !user.Adjacent(src))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/item/borg_shapeshifter/attack_self(mob/living/silicon/robot/user)
|
||||
if (user && user.cell && user.cell.charge > activationCost)
|
||||
if (isturf(user.loc))
|
||||
toggle(user)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You can't use [src] while inside something!</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need at least [activationCost] charge in your cell to use [src]!</span>")
|
||||
|
||||
/obj/item/borg_shapeshifter/proc/toggle(mob/living/silicon/robot/user)
|
||||
if(active)
|
||||
playsound(src, 'sound/effects/pop.ogg', 100, TRUE, -6)
|
||||
to_chat(user, "<span class='notice'>You deactivate \the [src].</span>")
|
||||
deactivate(user)
|
||||
else
|
||||
if(animation_playing)
|
||||
to_chat(user, "<span class='notice'>\the [src] is recharging.</span>")
|
||||
return
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
var/static/list/module_icons = sortList(list(
|
||||
"Standard" = image(icon = 'icons/mob/robots.dmi', icon_state = "robot"),
|
||||
"Medical" = image(icon = 'icons/mob/robots.dmi', icon_state = "medical"),
|
||||
"Engineer" = image(icon = 'icons/mob/robots.dmi', icon_state = "engineer"),
|
||||
"Security" = image(icon = 'icons/mob/robots.dmi', icon_state = "sec"),
|
||||
"Service" = image(icon = 'icons/mob/robots.dmi', icon_state = "service_f"),
|
||||
"Miner" = image(icon = 'icons/mob/robots.dmi', icon_state = "miner"),
|
||||
"Peacekeeper" = image(icon = 'icons/mob/robots.dmi', icon_state = "peace"),
|
||||
"Clown" = image(icon = 'icons/mob/robots.dmi', icon_state = "clown"),
|
||||
"Syndicate" = image(icon = 'icons/mob/robots.dmi', icon_state = "synd_sec")
|
||||
))
|
||||
var/module_selection = show_radial_menu(R, R , module_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE)
|
||||
if(!module_selection)
|
||||
return FALSE
|
||||
|
||||
switch(module_selection)
|
||||
if("Standard")
|
||||
var/static/list/standard_icons = sortList(list(
|
||||
"Default" = image(icon = 'icons/mob/robots.dmi', icon_state = "robot")
|
||||
))
|
||||
var/borg_icon = show_radial_menu(R, R , standard_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE)
|
||||
if(!borg_icon)
|
||||
return FALSE
|
||||
switch(borg_icon)
|
||||
if("Default")
|
||||
disguise = "robot"
|
||||
disguise_icon_override = 'icons/mob/robots.dmi'
|
||||
else
|
||||
return FALSE
|
||||
|
||||
if("Medical")
|
||||
var/static/list/med_icons = list(
|
||||
"Default" = image(icon = 'icons/mob/robots.dmi', icon_state = "medical"),
|
||||
"Droid" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "medical"),
|
||||
"Sleek" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "sleekmed"),
|
||||
"Marina" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "marinamed"),
|
||||
"Eyebot" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "eyebotmed"),
|
||||
"Heavy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "heavymed"),
|
||||
"Drake" = image(icon = 'sandcode/icons/mob/cyborg/drakemech.dmi', icon_state = "drakemedbox")
|
||||
)
|
||||
var/list/L = list("Medihound" = "medihound", "Medihound Dark" = "medihounddark", "Vale" = "valemed")
|
||||
for(var/a in L)
|
||||
var/image/wide = image(icon = 'modular_citadel/icons/mob/widerobot.dmi', icon_state = L[a])
|
||||
wide.pixel_x = -16
|
||||
med_icons[a] = wide
|
||||
med_icons = sortList(med_icons)
|
||||
var/borg_icon = show_radial_menu(R, R , med_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE)
|
||||
if(!borg_icon)
|
||||
return FALSE
|
||||
switch(borg_icon)
|
||||
if("Default")
|
||||
disguise = "medical"
|
||||
disguise_icon_override = 'icons/mob/robots.dmi'
|
||||
if("Droid")
|
||||
disguise = "medical"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Sleek")
|
||||
disguise = "sleekmed"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Marina")
|
||||
disguise = "marinamed"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Eyebot")
|
||||
disguise = "eyebotmed"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Heavy")
|
||||
disguise = "heavymed"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Medihound")
|
||||
disguise = "medihound"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
|
||||
disguise_pixel_offset = -16
|
||||
disguise_dogborg = TRUE
|
||||
if("Medihound Dark")
|
||||
disguise = "medihounddark"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
|
||||
disguise_pixel_offset = -16
|
||||
disguise_dogborg = TRUE
|
||||
if("Vale")
|
||||
disguise = "valemed"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
|
||||
disguise_pixel_offset = -16
|
||||
disguise_dogborg = TRUE
|
||||
if("Drake")
|
||||
disguise = "drakemed"
|
||||
disguise_icon_override = 'sandcode/icons/mob/cyborg/drakemech.dmi'
|
||||
disguise_pixel_offset = -16
|
||||
disguise_dogborg = TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
if("Engineer")
|
||||
var/static/list/engi_icons = list(
|
||||
"Default" = image(icon = 'icons/mob/robots.dmi', icon_state = "engineer"),
|
||||
"Default - Treads" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "engi-tread"),
|
||||
"Loader" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "loaderborg"),
|
||||
"Handy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "handyeng"),
|
||||
"Sleek" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "sleekeng"),
|
||||
"Can" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "caneng"),
|
||||
"Marina" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "marinaeng"),
|
||||
"Spider" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "spidereng"),
|
||||
"Heavy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "heavyeng"),
|
||||
"Drake" = image(icon = 'sandcode/icons/mob/cyborg/drakemech.dmi', icon_state = "drakeengbox")
|
||||
)
|
||||
var/list/L = list("Pup Dozer" = "pupdozer", "Vale" = "valeeng")
|
||||
for(var/a in L)
|
||||
var/image/wide = image(icon = 'modular_citadel/icons/mob/widerobot.dmi', icon_state = L[a])
|
||||
wide.pixel_x = -16
|
||||
engi_icons[a] = wide
|
||||
engi_icons = sortList(engi_icons)
|
||||
var/borg_icon = show_radial_menu(R, R , engi_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE)
|
||||
if(!borg_icon)
|
||||
return FALSE
|
||||
switch(borg_icon)
|
||||
if("Default")
|
||||
disguise = "engineer"
|
||||
disguise_icon_override = 'icons/mob/robots.dmi'
|
||||
if("Default - Treads")
|
||||
disguise = "engi-tread"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Loader")
|
||||
disguise = "loaderborg"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Handy")
|
||||
disguise = "handyeng"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Sleek")
|
||||
disguise = "sleekeng"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Can")
|
||||
disguise = "caneng"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Marina")
|
||||
disguise = "marinaeng"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Spider")
|
||||
disguise = "spidereng"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Heavy")
|
||||
disguise = "heavyeng"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Pup Dozer")
|
||||
disguise = "pupdozer"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
|
||||
disguise_pixel_offset = -16
|
||||
disguise_dogborg = TRUE
|
||||
if("Vale")
|
||||
disguise = "valeeng"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
|
||||
disguise_pixel_offset = -16
|
||||
disguise_dogborg = TRUE
|
||||
if("Alina")
|
||||
disguise = "alina-eng"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
|
||||
disguise_pixel_offset = -16
|
||||
disguise_dogborg = TRUE
|
||||
if("Drake")
|
||||
disguise = "drakeeng"
|
||||
disguise_icon_override = 'sandcode/icons/mob/cyborg/drakemech.dmi'
|
||||
disguise_pixel_offset = -16
|
||||
disguise_dogborg = TRUE
|
||||
else
|
||||
return FALSE
|
||||
if("Security")
|
||||
var/static/list/sec_icons = list(
|
||||
"Default" = image(icon = 'icons/mob/robots.dmi', icon_state = "sec"),
|
||||
"Default - Treads" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "sec-tread"),
|
||||
"Sleek" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "sleeksec"),
|
||||
"Can" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "cansec"),
|
||||
"Marina" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "marinasec"),
|
||||
"Spider" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "spidersec"),
|
||||
"Heavy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "heavysec"),
|
||||
"Drake" = image(icon = 'sandcode/icons/mob/cyborg/drakemech.dmi', icon_state = "drakesecbox")
|
||||
)
|
||||
var/list/L = list("K9" = "k9", "Vale" = "valesec", "K9 Dark" = "k9dark")
|
||||
for(var/a in L)
|
||||
var/image/wide = image(icon = 'modular_citadel/icons/mob/widerobot.dmi', icon_state = L[a])
|
||||
wide.pixel_x = -16
|
||||
sec_icons[a] = wide
|
||||
sec_icons = sortList(sec_icons)
|
||||
var/borg_icon = show_radial_menu(R, R , sec_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE)
|
||||
if(!borg_icon)
|
||||
return FALSE
|
||||
switch(borg_icon)
|
||||
if("Default")
|
||||
disguise = "sec"
|
||||
disguise_icon_override = 'icons/mob/robots.dmi'
|
||||
if("Default - Treads")
|
||||
disguise = "sec-tread"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Sleek")
|
||||
disguise = "sleeksec"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Marina")
|
||||
disguise = "marinasec"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Can")
|
||||
disguise = "cansec"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Spider")
|
||||
disguise = "spidersec"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Heavy")
|
||||
disguise = "heavysec"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("K9")
|
||||
disguise = "k9"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
|
||||
disguise_pixel_offset = -16
|
||||
disguise_dogborg = TRUE
|
||||
if("Alina")
|
||||
disguise = "alina-sec"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
|
||||
disguise_pixel_offset = -16
|
||||
disguise_dogborg = TRUE
|
||||
if("K9 Dark")
|
||||
disguise = "k9dark"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
|
||||
disguise_pixel_offset = -16
|
||||
disguise_dogborg = TRUE
|
||||
if("Vale")
|
||||
disguise = "valesec"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
|
||||
disguise_pixel_offset = -16
|
||||
disguise_dogborg = TRUE
|
||||
if("Drake")
|
||||
disguise = "drakesec"
|
||||
disguise_icon_override = 'sandcode/icons/mob/cyborg/drakemech.dmi'
|
||||
disguise_pixel_offset = -16
|
||||
disguise_dogborg = TRUE
|
||||
else
|
||||
return FALSE
|
||||
if("Service")
|
||||
var/static/list/service_icons = list(
|
||||
"(Service) Waitress" = image(icon = 'icons/mob/robots.dmi', icon_state = "service_f"),
|
||||
"(Service) Butler" = image(icon = 'icons/mob/robots.dmi', icon_state = "service_m"),
|
||||
"(Service) Bro" = image(icon = 'icons/mob/robots.dmi', icon_state = "brobot"),
|
||||
"(Service) Can" = image(icon = 'icons/mob/robots.dmi', icon_state = "kent"),
|
||||
"(Service) Tophat" = image(icon = 'icons/mob/robots.dmi', icon_state = "tophat"),
|
||||
"(Service) Sleek" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "sleekserv"),
|
||||
"(Service) Heavy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "heavyserv"),
|
||||
"(Janitor) Default" = image(icon = 'icons/mob/robots.dmi', icon_state = "janitor"),
|
||||
"(Janitor) Marina" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "marinajan"),
|
||||
"(Janitor) Sleek" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "sleekjan"),
|
||||
"(Janitor) Can" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "canjan"),
|
||||
"(Janitor) Heavy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "heavyres"),
|
||||
"(Janitor) Drake" = image(icon = 'sandcode/icons/mob/cyborg/drakemech.dmi', icon_state = "drakejanitbox")
|
||||
)
|
||||
var/list/L = list("(Service) DarkK9" = "k50", "(Service) Vale" = "valeserv", "(Service) ValeDark" = "valeservdark",
|
||||
"(Janitor) Scrubpuppy" = "scrubpup")
|
||||
for(var/a in L)
|
||||
var/image/wide = image(icon = 'modular_citadel/icons/mob/widerobot.dmi', icon_state = L[a])
|
||||
wide.pixel_x = -16
|
||||
service_icons[a] = wide
|
||||
service_icons = sortList(service_icons)
|
||||
var/borg_icon = show_radial_menu(R, R , service_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE)
|
||||
if(!borg_icon)
|
||||
return FALSE
|
||||
switch(borg_icon)
|
||||
if("(Service) Waitress")
|
||||
disguise = "service_f"
|
||||
disguise_icon_override = 'icons/mob/robots.dmi'
|
||||
if("(Service) Butler")
|
||||
disguise = "service_m"
|
||||
disguise_icon_override = 'icons/mob/robots.dmi'
|
||||
if("(Service) Bro")
|
||||
disguise = "brobot"
|
||||
disguise_icon_override = 'icons/mob/robots.dmi'
|
||||
if("(Service) Can")
|
||||
disguise = "kent"
|
||||
disguise_icon_override = 'icons/mob/robots.dmi'
|
||||
if("(Service) Tophat")
|
||||
disguise = "tophat"
|
||||
disguise_icon_override = 'icons/mob/robots.dmi'
|
||||
if("(Service) Sleek")
|
||||
disguise = "sleekserv"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("(Service) Heavy")
|
||||
disguise = "heavyserv"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("(Service) DarkK9")
|
||||
disguise = "k50"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
|
||||
disguise_pixel_offset = -16
|
||||
disguise_dogborg = TRUE
|
||||
if("(Service) Vale")
|
||||
disguise = "valeserv"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
|
||||
disguise_pixel_offset = -16
|
||||
disguise_dogborg = TRUE
|
||||
if("(Service) ValeDark")
|
||||
disguise = "valeservdark"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
|
||||
disguise_pixel_offset = -16
|
||||
disguise_dogborg = TRUE
|
||||
if("(Janitor) Default")
|
||||
disguise = "janitor"
|
||||
disguise_icon_override = 'icons/mob/robots.dmi'
|
||||
if("(Janitor) Marina")
|
||||
disguise = "marinajan"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("(Janitor) Sleek")
|
||||
disguise = "sleekjan"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("(Janitor) Can")
|
||||
disguise = "canjan"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("(Janitor) Heavy")
|
||||
disguise = "heavyres"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("(Janitor) Scrubpuppy")
|
||||
disguise = "scrubpup"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
|
||||
disguise_pixel_offset = -16
|
||||
disguise_dogborg = TRUE
|
||||
if("(Janitor) Drake")
|
||||
disguise = "drakejanit"
|
||||
disguise_icon_override = 'sandcode/icons/mob/cyborg/drakemech.dmi'
|
||||
disguise_pixel_offset = -16
|
||||
disguise_dogborg = TRUE
|
||||
else
|
||||
return FALSE
|
||||
if("Miner")
|
||||
var/static/list/mining_icons = list(
|
||||
"Lavaland" = image(icon = 'icons/mob/robots.dmi', icon_state = "miner"),
|
||||
"Asteroid" = image(icon = 'icons/mob/robots.dmi', icon_state = "minerOLD"),
|
||||
"Droid" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "miner"),
|
||||
"Sleek" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "sleekmin"),
|
||||
"Marina" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "marinamin"),
|
||||
"Can" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "canmin"),
|
||||
"Heavy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "heavymin"),
|
||||
"Drake" = image(icon = 'sandcode/icons/mob/cyborg/drakemech.dmi', icon_state = "drakeminebox")
|
||||
)
|
||||
var/list/L = list("Blade" = "blade", "Vale" = "valemine")
|
||||
for(var/a in L)
|
||||
var/image/wide = image(icon = 'modular_citadel/icons/mob/widerobot.dmi', icon_state = L[a])
|
||||
wide.pixel_x = -16
|
||||
mining_icons[a] = wide
|
||||
mining_icons = sortList(mining_icons)
|
||||
var/borg_icon = show_radial_menu(R, R , mining_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE)
|
||||
if(!borg_icon)
|
||||
return FALSE
|
||||
switch(borg_icon)
|
||||
if("Lavaland")
|
||||
disguise = "miner"
|
||||
disguise_icon_override = 'icons/mob/robots.dmi'
|
||||
if("Asteroid")
|
||||
disguise = "minerOLD"
|
||||
disguise_icon_override = 'icons/mob/robots.dmi'
|
||||
if("Droid")
|
||||
disguise = "miner"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Sleek")
|
||||
disguise = "sleekmin"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Can")
|
||||
disguise = "canmin"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Marina")
|
||||
disguise = "marinamin"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Spider")
|
||||
disguise = "spidermin"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Heavy")
|
||||
disguise = "heavymin"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Blade")
|
||||
disguise = "blade"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
|
||||
disguise_pixel_offset = -16
|
||||
disguise_dogborg = TRUE
|
||||
if("Vale")
|
||||
disguise = "valemine"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
|
||||
disguise_pixel_offset = -16
|
||||
disguise_dogborg = TRUE
|
||||
if("Drake")
|
||||
disguise = "drakemine"
|
||||
disguise_icon_override = 'sandcode/icons/mob/cyborg/drakemech.dmi'
|
||||
disguise_pixel_offset = -16
|
||||
disguise_dogborg = TRUE
|
||||
else
|
||||
return FALSE
|
||||
if("Peacekeeper")
|
||||
var/static/list/peace_icons = sortList(list(
|
||||
"Default" = image(icon = 'icons/mob/robots.dmi', icon_state = "peace"),
|
||||
"Borgi" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "borgi"),
|
||||
"Spider" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "whitespider"),
|
||||
"Drake" = image(icon = 'sandcode/icons/mob/cyborg/drakemech.dmi', icon_state = "drakepeacebox")
|
||||
))
|
||||
var/borg_icon = show_radial_menu(R, R , peace_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE)
|
||||
if(!borg_icon)
|
||||
return FALSE
|
||||
switch(borg_icon)
|
||||
if("Default")
|
||||
disguise = "peace"
|
||||
disguise_icon_override = 'icons/mob/robots.dmi'
|
||||
if("Spider")
|
||||
disguise = "whitespider"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Borgi")
|
||||
disguise = "borgi"
|
||||
disguise_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("Drake")
|
||||
disguise = "drakepeace"
|
||||
disguise_icon_override = 'sandcode/icons/mob/cyborg/drakemech.dmi'
|
||||
disguise_pixel_offset = -16
|
||||
disguise_dogborg = TRUE
|
||||
else
|
||||
return FALSE
|
||||
if("Clown")
|
||||
var/static/list/clown_icons = sortList(list(
|
||||
"Default" = image(icon = 'icons/mob/robots.dmi', icon_state = "clown")
|
||||
))
|
||||
var/borg_icon = show_radial_menu(R, R , clown_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE)
|
||||
if(!borg_icon)
|
||||
return FALSE
|
||||
switch(borg_icon)
|
||||
if("Default")
|
||||
disguise = "clown"
|
||||
disguise_icon_override = 'icons/mob/robots.dmi'
|
||||
else
|
||||
return FALSE
|
||||
if("Syndicate")
|
||||
var/static/list/syndicatejack_icons = sortList(list(
|
||||
"Saboteur" = image(icon = 'icons/mob/robots.dmi', icon_state = "synd_engi"),
|
||||
"Medical" = image(icon = 'icons/mob/robots.dmi', icon_state = "synd_medical"),
|
||||
"Assault" = image(icon = 'icons/mob/robots.dmi', icon_state = "synd_sec")
|
||||
))
|
||||
var/borg_icon = show_radial_menu(R, R , syndicatejack_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE)
|
||||
if(!borg_icon)
|
||||
return FALSE
|
||||
switch(borg_icon)
|
||||
if("Saboteur")
|
||||
disguise = "synd_engi"
|
||||
disguise_icon_override = 'icons/mob/robots.dmi'
|
||||
if("Medical")
|
||||
disguise = "synd_medical"
|
||||
disguise_icon_override = 'icons/mob/robots.dmi'
|
||||
if("Assault")
|
||||
disguise = "synd_sec"
|
||||
disguise_icon_override = 'icons/mob/robots.dmi'
|
||||
else
|
||||
return FALSE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
animation_playing = TRUE
|
||||
to_chat(user, "<span class='notice'>You activate \the [src].</span>")
|
||||
playsound(src, 'sound/effects/seedling_chargeup.ogg', 100, TRUE, -6)
|
||||
var/start = user.filters.len
|
||||
var/X,Y,rsq,i,f
|
||||
for(i=1, i<=7, ++i)
|
||||
do
|
||||
X = 60*rand() - 30
|
||||
Y = 60*rand() - 30
|
||||
rsq = X*X + Y*Y
|
||||
while(rsq<100 || rsq>900)
|
||||
user.filters += filter(type="wave", x=X, y=Y, size=rand()*2.5+0.5, offset=rand())
|
||||
for(i=1, i<=7, ++i)
|
||||
f = user.filters[start+i]
|
||||
animate(f, offset=f:offset, time=0, loop=3, flags=ANIMATION_PARALLEL)
|
||||
animate(offset=f:offset-1, time=rand()*20+10)
|
||||
if (do_after(user, 50, target=user) && user.cell.use(activationCost))
|
||||
playsound(src, 'sound/effects/bamf.ogg', 100, TRUE, -6)
|
||||
to_chat(user, "<span class='notice'>You are now disguised as the Nanotrasen cyborg \"[friendlyName]\".</span>")
|
||||
activate(user, module_selection)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>The chameleon field fizzles.</span>")
|
||||
do_sparks(3, FALSE, user)
|
||||
for(i=1, i<=min(7, user.filters.len), ++i) // removing filters that are animating does nothing, we gotta stop the animations first
|
||||
f = user.filters[start+i]
|
||||
animate(f)
|
||||
user.filters = null
|
||||
animation_playing = FALSE
|
||||
|
||||
/obj/item/borg_shapeshifter/process()
|
||||
if (user)
|
||||
if (!user.cell || !user.cell.use(activationUpkeep))
|
||||
disrupt(user)
|
||||
else
|
||||
return PROCESS_KILL
|
||||
|
||||
/obj/item/borg_shapeshifter/proc/activate(mob/living/silicon/robot/user, disguiseModuleName)
|
||||
START_PROCESSING(SSobj, src)
|
||||
src.user = user
|
||||
savedName = user.name
|
||||
savedIcon = user.module.cyborg_base_icon
|
||||
savedBubbleIcon = user.bubble_icon //tf is that
|
||||
savedOverride = user.module.cyborg_icon_override
|
||||
savedPixelOffset = user.module.cyborg_pixel_offset
|
||||
savedModuleName = user.module.name
|
||||
user.name = friendlyName
|
||||
user.module.name = disguiseModuleName
|
||||
user.module.cyborg_base_icon = disguise
|
||||
user.module.cyborg_icon_override = disguise_icon_override
|
||||
user.module.cyborg_pixel_offset = disguise_pixel_offset
|
||||
user.module.dogborg = disguise_dogborg
|
||||
user.bubble_icon = "robot"
|
||||
active = TRUE
|
||||
user.update_icons()
|
||||
|
||||
if(listeningTo == user)
|
||||
return
|
||||
if(listeningTo)
|
||||
UnregisterSignal(listeningTo, signalCache)
|
||||
RegisterSignal(user, signalCache, .proc/disrupt)
|
||||
listeningTo = user
|
||||
|
||||
/obj/item/borg_shapeshifter/proc/deactivate(mob/living/silicon/robot/user)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
if(listeningTo)
|
||||
UnregisterSignal(listeningTo, signalCache)
|
||||
listeningTo = null
|
||||
do_sparks(5, FALSE, user)
|
||||
user.name = savedName
|
||||
user.module.name = savedModuleName
|
||||
user.module.cyborg_base_icon = savedIcon
|
||||
user.module.cyborg_icon_override = savedOverride
|
||||
user.module.cyborg_pixel_offset = 0
|
||||
user.module.dogborg = FALSE
|
||||
user.bubble_icon = savedBubbleIcon
|
||||
active = FALSE
|
||||
user.update_icons()
|
||||
disguise_pixel_offset = 0
|
||||
disguise_dogborg = FALSE
|
||||
src.user = user
|
||||
|
||||
/obj/item/borg_shapeshifter/proc/disrupt(mob/living/silicon/robot/user)
|
||||
if(active)
|
||||
to_chat(user, "<span class='danger'>Your chameleon field deactivates.</span>")
|
||||
deactivate(user)
|
||||
|
||||
/obj/item/borg_shapeshifter/stable
|
||||
signalCache = list()
|
||||
activationCost = 0
|
||||
activationUpkeep = 0
|
||||
|
||||
/obj/item/borg_shapeshifter/stable/activate(mob/living/silicon/robot/user, disguiseModuleName)
|
||||
friendlyName = user.name
|
||||
. = ..()
|
||||
@@ -1,3 +1,68 @@
|
||||
/obj/item/borg/upgrade/xwelding
|
||||
name = "engineering cyborg experimental welding tool"
|
||||
desc = "An experimental welding tool replacement for the engineering module's standard welding tool."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
module_type = list(/obj/item/robot_module/engineering)
|
||||
|
||||
/obj/item/borg/upgrade/xwelding/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
if(.)
|
||||
var/obj/item/weldingtool/largetank/cyborg/WT = locate() in R
|
||||
var/obj/item/weldingtool/experimental/XW = locate() in R
|
||||
if(!WT)
|
||||
WT = locate() in R.module
|
||||
if(!XW)
|
||||
XW = locate() in R.module
|
||||
if(XW)
|
||||
to_chat(user, "<span class='warning'>This unit is already equipped with an experimental welding tool module.</span>")
|
||||
return FALSE
|
||||
XW = new(R.module)
|
||||
qdel(WT)
|
||||
R.module.basic_modules += XW
|
||||
R.module.add_module(XW, FALSE, TRUE)
|
||||
|
||||
/obj/item/borg/upgrade/xwelding/deactivate(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
if (.)
|
||||
for(var/obj/item/weldingtool/experimental/XW in R.module)
|
||||
R.module.remove_module(XW, TRUE)
|
||||
|
||||
var/obj/item/weldingtool/largetank/cyborg/WT = new (R.module)
|
||||
R.module.basic_modules += WT
|
||||
R.module.add_module(WT, FALSE, TRUE)
|
||||
|
||||
/* Shit doesnt work, work on it later
|
||||
/obj/item/borg/upgrade/plasma
|
||||
name = "engineering cyborg plasma resource upgrade"
|
||||
desc = "An upgrade that allows cyborgs the ability to use plasma and assorted plasma products."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
module_type = list(/obj/item/robot_module/engineering)
|
||||
*/
|
||||
|
||||
/* Shit doesnt work, do it later
|
||||
/obj/item/borg/upgrade/plasma/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
if(.)
|
||||
R.module.basic_modules += /obj/item/stack/sheet/plasmaglass/cyborg
|
||||
R.module.add_module(/obj/item/stack/sheet/plasmaglass/cyborg, FALSE, TRUE)
|
||||
R.module.basic_modules += /obj/item/stack/sheet/plasmarglass/cyborg
|
||||
R.module.add_module(/obj/item/stack/sheet/plasmarglass/cyborg, FALSE, TRUE)
|
||||
R.module.basic_modules += /obj/item/stack/sheet/plasteel/cyborg
|
||||
R.module.add_module(/obj/item/stack/sheet/plasteel/cyborg, FALSE, TRUE)
|
||||
R.module.basic_modules += /obj/item/stack/sheet/mineral/plasma/cyborg
|
||||
R.module.add_module(/obj/item/stack/sheet/mineral/plasma/cyborg, FALSE, TRUE)
|
||||
|
||||
/obj/item/borg/upgrade/plasma/deactivate(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
if (.)
|
||||
R.module.remove_module(/obj/item/stack/sheet/plasmaglass/cyborg, TRUE)
|
||||
R.module.remove_module(/obj/item/stack/sheet/plasmarglass/cyborg, TRUE)
|
||||
R.module.remove_module(/obj/item/stack/sheet/plasteel/cyborg, TRUE)
|
||||
R.module.remove_module(/obj/item/stack/sheet/mineral/plasma/cyborg, TRUE)
|
||||
*/
|
||||
|
||||
/obj/item/borg/upgrade/bsrpd
|
||||
name = "engineering cyborg bluespace RPD"
|
||||
desc = "A bluespace RPD replacement for the engineering module's standard RPD."
|
||||
@@ -32,3 +97,122 @@
|
||||
var/obj/item/pipe_dispenser/PD = new (R.module)
|
||||
R.module.basic_modules += PD
|
||||
R.module.add_module(PD, FALSE, TRUE)
|
||||
|
||||
/obj/item/borg/upgrade/premiumka
|
||||
name = "mining cyborg premium KA"
|
||||
desc = "A premium kinetic accelerator replacement for the mining module's standard kinetic accelerator."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
module_type = list(/obj/item/robot_module/miner)
|
||||
|
||||
/obj/item/borg/upgrade/premiumka/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
if(.)
|
||||
for(var/obj/item/gun/energy/kinetic_accelerator/cyborg/KA in R.module)
|
||||
for(var/obj/item/borg/upgrade/modkit/M in KA.modkits)
|
||||
M.uninstall(src)
|
||||
R.module.remove_module(KA, TRUE)
|
||||
|
||||
var/obj/item/gun/energy/kinetic_accelerator/premiumka/cyborg/PKA = new /obj/item/gun/energy/kinetic_accelerator/premiumka/cyborg(R.module)
|
||||
R.module.basic_modules += PKA
|
||||
R.module.add_module(PKA, FALSE, TRUE)
|
||||
|
||||
/obj/item/borg/upgrade/premiumka/deactivate(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
if (.)
|
||||
for(var/obj/item/gun/energy/kinetic_accelerator/premiumka/cyborg/PKA in R.module)
|
||||
for(var/obj/item/borg/upgrade/modkit/M in PKA.modkits)
|
||||
M.uninstall(src)
|
||||
R.module.remove_module(PKA, TRUE)
|
||||
|
||||
var/obj/item/gun/energy/kinetic_accelerator/cyborg/KA = new (R.module)
|
||||
R.module.basic_modules += KA
|
||||
R.module.add_module(KA, FALSE, TRUE)
|
||||
|
||||
/obj/item/borg/upgrade/expand/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
if(.)
|
||||
|
||||
if(R.hasExpanded)
|
||||
to_chat(usr, "<span class='notice'>This unit already has an expand module installed!</span>")
|
||||
return FALSE
|
||||
|
||||
if(R.hasShrunk)
|
||||
to_chat(usr, "<span class='notice'>This unit already has an shrink module installed!</span>")
|
||||
return FALSE
|
||||
|
||||
R.mob_transforming = TRUE
|
||||
var/prev_locked_down = R.locked_down
|
||||
R.SetLockdown(1)
|
||||
R.anchored = TRUE
|
||||
var/datum/effect_system/smoke_spread/smoke = new
|
||||
smoke.set_up(1, R.loc)
|
||||
smoke.start()
|
||||
sleep(2)
|
||||
for(var/i in 1 to 4)
|
||||
playsound(R, pick('sound/items/drill_use.ogg', 'sound/items/jaws_cut.ogg', 'sound/items/jaws_pry.ogg', 'sound/items/welder.ogg', 'sound/items/ratchet.ogg'), 80, 1, -1)
|
||||
sleep(12)
|
||||
if(!prev_locked_down)
|
||||
R.SetLockdown(0)
|
||||
R.anchored = FALSE
|
||||
R.mob_transforming = FALSE
|
||||
R.transform = R.transform.Scale(1.25, 1.25)
|
||||
R.hasExpanded = TRUE
|
||||
|
||||
/obj/item/borg/upgrade/expand/deactivate(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
if (.)
|
||||
R.transform = R.transform.Scale(0.8, 0.8)
|
||||
R.hasExpanded = FALSE
|
||||
|
||||
/obj/item/borg/upgrade/shrink
|
||||
name = "borg shrinker"
|
||||
desc = "A cyborg resizer, it makes a cyborg small."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
|
||||
/obj/item/borg/upgrade/shrink/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
if(.)
|
||||
|
||||
if(R.hasShrunk)
|
||||
to_chat(usr, "<span class='notice'>This unit already has an shrink module installed!</span>")
|
||||
return FALSE
|
||||
|
||||
if(R.hasExpanded)
|
||||
to_chat(usr, "<span class='notice'>This unit already has an expand module installed!</span>")
|
||||
return FALSE
|
||||
|
||||
|
||||
R.mob_transforming = TRUE
|
||||
var/prev_locked_down = R.locked_down
|
||||
R.SetLockdown(1)
|
||||
R.anchored = TRUE
|
||||
var/datum/effect_system/smoke_spread/smoke = new
|
||||
smoke.set_up(1, R.loc)
|
||||
smoke.start()
|
||||
sleep(2)
|
||||
for(var/i in 1 to 4)
|
||||
playsound(R, pick('sound/items/drill_use.ogg', 'sound/items/jaws_cut.ogg', 'sound/items/jaws_pry.ogg', 'sound/items/welder.ogg', 'sound/items/ratchet.ogg'), 80, 1, -1)
|
||||
sleep(12)
|
||||
if(!prev_locked_down)
|
||||
R.SetLockdown(0)
|
||||
R.anchored = FALSE
|
||||
R.mob_transforming = FALSE
|
||||
R.transform = R.transform.Scale(0.75, 0.75)
|
||||
R.hasShrunk = TRUE
|
||||
|
||||
/obj/item/borg/upgrade/shrink/deactivate(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
if (.)
|
||||
R.transform = R.transform.Scale((4/3), (4/3))
|
||||
R.hasShrunk = FALSE
|
||||
|
||||
/obj/item/borg/upgrade/transform/syndicatejack
|
||||
name = "borg module picker (Syndicate)"
|
||||
desc = "Allows you to to turn a cyborg into a experimental syndicate cyborg."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
new_module = /obj/item/robot_module/syndicatejack
|
||||
|
||||
/obj/item/borg/upgrade/transform/syndicatejack/action(mob/living/silicon/robot/R, user = usr)
|
||||
if(R.emagged)
|
||||
return ..()
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
/obj/item/stack/sheet/plasmaglass/cyborg
|
||||
custom_materials = null
|
||||
//var/datum/robot_energy_storage/glasource
|
||||
//var/datum/robot_energy_storage/plasource
|
||||
//var/glacost = 250
|
||||
//var/placost = 250
|
||||
cost = 500
|
||||
is_cyborg = 1
|
||||
/* commented out to pick shit up
|
||||
/obj/item/stack/sheet/plasmaglass/cyborg/get_amount()
|
||||
return min(round(plasource.energy / placost), round(glasource.energy / glacost))
|
||||
|
||||
/obj/item/stack/sheet/plasmaglass/cyborg/use(used, transfer = FALSE) // Requires special checks, because it uses two storages
|
||||
plasource.use_charge(used * placost)
|
||||
glasource.use_charge(used * glacost)
|
||||
|
||||
/obj/item/stack/sheet/plasmaglass/cyborg/add(amount)
|
||||
plasource.add_charge(amount * placost)
|
||||
glasource.add_charge(amount * glacost)
|
||||
*/
|
||||
/obj/item/stack/sheet/plasmarglass/cyborg
|
||||
custom_materials = null
|
||||
//var/datum/robot_energy_storage/glasource
|
||||
//var/datum/robot_energy_storage/plasource
|
||||
//var/glacost = 500
|
||||
//var/placost = 500
|
||||
cost = 1000
|
||||
is_cyborg = 1
|
||||
/* commented out to pick shit up
|
||||
/obj/item/stack/sheet/plasmarglass/cyborg/get_amount()
|
||||
return min(round(glasource.energy / glacost), round(plasource.energy / placost))
|
||||
|
||||
/obj/item/stack/sheet/plasmarglass/cyborg/use(used, transfer = FALSE) // Requires special checks, because it uses two storages
|
||||
glasource.use_charge(used * glacost)
|
||||
plasource.use_charge(used * placost)
|
||||
|
||||
/obj/item/stack/sheet/plasmarglass/cyborg/add(amount)
|
||||
glasource.add_charge(amount * glacost)
|
||||
plasource.add_charge(amount * placost)
|
||||
*/
|
||||
@@ -0,0 +1,15 @@
|
||||
/obj/item/stack/sheet/mineral/plasma/cyborg
|
||||
custom_materials = null
|
||||
is_cyborg = 1
|
||||
cost = 500
|
||||
|
||||
/obj/item/stack/sheet/mineral/plasma/cyborg/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(W.get_temperature() > 9999)//If the temperature of the object is over 9999, then ignite
|
||||
var/turf/T = get_turf(src)
|
||||
message_admins("Plasma sheets attempted to be ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]")
|
||||
log_game("Plasma sheets attempted to be ignited by [key_name(user)] in [AREACOORD(T)]")
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/stack/sheet/mineral/plasma/cyborg/fire_act(exposed_temperature, exposed_volume)
|
||||
atmos_spawn_air("plasma=[amount*0];TEMP=[null]")
|
||||
@@ -0,0 +1,34 @@
|
||||
/obj/item/stack/sheet/plasteel/cyborg
|
||||
custom_materials = null
|
||||
//var/datum/robot_energy_storage/metsource
|
||||
//var/datum/robot_energy_storage/plasource
|
||||
//var/metcost = 250
|
||||
//var/placost = 250
|
||||
cost = 500
|
||||
is_cyborg = 1
|
||||
/* Commented out to pick up shit
|
||||
/obj/item/stack/sheet/plasteel/cyborg/get_amount()
|
||||
return min(round(source.energy / metcost), round(plasource.energy / placost))
|
||||
|
||||
/obj/item/stack/sheet/plasteel/cyborg/use(used, transfer = FALSE) // Requires special checks, because it uses two storages
|
||||
source.use_charge(used * metcost)
|
||||
plasource.use_charge(used * placost)
|
||||
|
||||
/obj/item/stack/sheet/plasteel/cyborg/add(amount)
|
||||
source.add_charge(amount * metcost)
|
||||
plasource.add_charge(amount * placost)
|
||||
*/
|
||||
|
||||
/obj/item/stack/sheet/mineral/wood
|
||||
name = "wooden plank"
|
||||
desc = "One can only guess that this is a bunch of wood. You might be able to make a stake with this if you use something sharp on it"
|
||||
singular_name = "wood plank"
|
||||
icon_state = "sheet-wood"
|
||||
item_state = "sheet-wood"
|
||||
icon = 'icons/obj/stack_objects.dmi'
|
||||
sheettype = "wood"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0)
|
||||
resistance_flags = FLAMMABLE
|
||||
merge_type = /obj/item/stack/sheet/mineral/wood
|
||||
novariants = TRUE
|
||||
grind_results = list(/datum/reagent/cellulose = 20)
|
||||
@@ -0,0 +1,41 @@
|
||||
/obj/effect/mob_spawn/robot
|
||||
mob_type = /mob/living/silicon/robot
|
||||
assignedrole = "Ghost Role"
|
||||
|
||||
/obj/effect/mob_spawn/robot/Initialize()
|
||||
. = ..()
|
||||
|
||||
/obj/effect/mob_spawn/robot/equip(mob/living/silicon/robot/R)
|
||||
. = ..()
|
||||
|
||||
/obj/effect/mob_spawn/robot/ghostcafe
|
||||
name = "Cafe Robotic Storage"
|
||||
uses = -1
|
||||
icon = 'sandcode/icons/obj/machines/robot_storage.dmi'
|
||||
icon_state = "robostorage"
|
||||
mob_name = "a cafe robot"
|
||||
roundstart = FALSE
|
||||
anchored = TRUE
|
||||
density = FALSE
|
||||
death = FALSE
|
||||
assignedrole = "Cafe Robot"
|
||||
short_desc = "You are a Cafe Robot!"
|
||||
flavour_text = "Who could have thought? This awesome local cafe accepts cyborgs too!"
|
||||
skip_reentry_check = TRUE
|
||||
banType = ROLE_GHOSTCAFE
|
||||
mob_type = /mob/living/silicon/robot/modules/roleplay
|
||||
|
||||
/obj/effect/mob_spawn/robot/ghostcafe/special(mob/living/silicon/robot/new_spawn)
|
||||
if(new_spawn.client)
|
||||
new_spawn.updatename(new_spawn.client)
|
||||
new_spawn.gender = NEUTER
|
||||
var/area/A = get_area(src)
|
||||
new_spawn.AddElement(/datum/element/ghost_role_eligibility, free_ghosting = TRUE)
|
||||
new_spawn.AddElement(/datum/element/dusts_on_catatonia)
|
||||
new_spawn.AddElement(/datum/element/dusts_on_leaving_area, list(A.type, /area/hilbertshotel))
|
||||
ADD_TRAIT(new_spawn, TRAIT_SIXTHSENSE, GHOSTROLE_TRAIT)
|
||||
ADD_TRAIT(new_spawn, TRAIT_EXEMPT_HEALTH_EVENTS, GHOSTROLE_TRAIT)
|
||||
ADD_TRAIT(new_spawn, TRAIT_NO_MIDROUND_ANTAG, GHOSTROLE_TRAIT) //The mob can't be made into a random antag, they are still eligible for ghost roles popups.
|
||||
to_chat(new_spawn,"<span class='boldwarning'>Ghosting is free!</span>")
|
||||
var/datum/action/toggle_dead_chat_mob/D = new(new_spawn)
|
||||
D.Grant(new_spawn)
|
||||
@@ -0,0 +1,21 @@
|
||||
/mob/living/silicon/robot
|
||||
speed = 0.2
|
||||
var/hasShrunk = FALSE
|
||||
|
||||
/mob/living/silicon/robot/modules/roleplay
|
||||
lawupdate = FALSE
|
||||
scrambledcodes = TRUE // Roleplay borgs aren't real
|
||||
set_module = /obj/item/robot_module/roleplay
|
||||
|
||||
/mob/living/silicon/robot/modules/roleplay/Initialize()
|
||||
. = ..()
|
||||
cell = new /obj/item/stock_parts/cell/infinite(src, 30000)
|
||||
laws = new /datum/ai_laws/roleplay()
|
||||
//You aren't allowed to unlock, not sorry
|
||||
src.verbs -= /mob/living/silicon/robot/verb/unlock_own_cover
|
||||
//This part is because the camera stays in the list, so we'll just do a check
|
||||
if(!QDELETED(builtInCamera))
|
||||
QDEL_NULL(builtInCamera)
|
||||
|
||||
/mob/living/silicon/robot/modules/roleplay/binarycheck()
|
||||
return 0 //Roleplay borgs aren't truly borgs
|
||||
@@ -0,0 +1,216 @@
|
||||
/obj/item/robot_module/proc/add_module(obj/item/I, nonstandard, requires_rebuild)
|
||||
rad_flags |= RAD_NO_CONTAMINATE
|
||||
if(istype(I, /obj/item/stack))
|
||||
var/obj/item/stack/S = I
|
||||
|
||||
if(is_type_in_list(S, list(/obj/item/stack/sheet/metal, /obj/item/stack/rods, /obj/item/stack/tile/plasteel)))
|
||||
if(S.custom_materials?.len && S.custom_materials[SSmaterials.GetMaterialRef(/datum/material/iron)])
|
||||
S.cost = S.custom_materials[SSmaterials.GetMaterialRef(/datum/material/iron)] * 0.25
|
||||
S.source = get_or_create_estorage(/datum/robot_energy_storage/metal)
|
||||
|
||||
else if(istype(S, /obj/item/stack/sheet/glass))
|
||||
S.cost = 500
|
||||
S.source = get_or_create_estorage(/datum/robot_energy_storage/glass)
|
||||
|
||||
else if(istype(S, /obj/item/stack/sheet/rglass/cyborg))
|
||||
var/obj/item/stack/sheet/rglass/cyborg/G = S
|
||||
G.source = get_or_create_estorage(/datum/robot_energy_storage/metal)
|
||||
G.glasource = get_or_create_estorage(/datum/robot_energy_storage/glass)
|
||||
|
||||
else if(istype(S, /obj/item/stack/sheet/plasmaglass/cyborg))
|
||||
//var/obj/item/stack/sheet/plasmaglass/cyborg/G = S
|
||||
//G.plasource = get_or_create_estorage(/datum/robot_energy_storage/plasma)
|
||||
//G.glasource = get_or_create_estorage(/datum/robot_energy_storage/glass)
|
||||
S.cost = 500
|
||||
S.source = get_or_create_estorage(/datum/robot_energy_storage/plasma)
|
||||
|
||||
else if(istype(S, /obj/item/stack/sheet/plasmarglass/cyborg))
|
||||
//var/obj/item/stack/sheet/plasmarglass/cyborg/G = S
|
||||
//G.plasource = get_or_create_estorage(/datum/robot_energy_storage/plasma)
|
||||
//G.glasource = get_or_create_estorage(/datum/robot_energy_storage/glass)
|
||||
S.cost = 1000
|
||||
S.source = get_or_create_estorage(/datum/robot_energy_storage/plasma)
|
||||
|
||||
else if(istype(S, /obj/item/stack/sheet/plasteel/cyborg))
|
||||
//var/obj/item/stack/sheet/plasteel/cyborg/G = S
|
||||
//G.source = get_or_create_estorage(/datum/robot_energy_storage/metal)
|
||||
//G.plasource = get_or_create_estorage(/datum/robot_energy_storage/plasma)
|
||||
S.cost = 500
|
||||
S.source = get_or_create_estorage(/datum/robot_energy_storage/plasma)
|
||||
|
||||
else if(istype(S, /obj/item/stack/sheet/mineral/plasma/cyborg))
|
||||
S.cost = 500
|
||||
S.source = get_or_create_estorage(/datum/robot_energy_storage/plasma)
|
||||
|
||||
else if(istype(S, /obj/item/stack/medical))
|
||||
S.cost = 250
|
||||
S.source = get_or_create_estorage(/datum/robot_energy_storage/medical)
|
||||
|
||||
else if(istype(S, /obj/item/stack/cable_coil))
|
||||
S.cost = 1
|
||||
S.source = get_or_create_estorage(/datum/robot_energy_storage/wire)
|
||||
|
||||
else if(istype(S, /obj/item/stack/marker_beacon))
|
||||
S.cost = 1
|
||||
S.source = get_or_create_estorage(/datum/robot_energy_storage/beacon)
|
||||
|
||||
else if(istype(S, /obj/item/stack/packageWrap))
|
||||
S.cost = 1
|
||||
S.source = get_or_create_estorage(/datum/robot_energy_storage/wrapping_paper)
|
||||
|
||||
if(S && S.source)
|
||||
S.custom_materials = null
|
||||
S.is_cyborg = 1
|
||||
|
||||
if(I.loc != src)
|
||||
I.forceMove(src)
|
||||
modules += I
|
||||
ADD_TRAIT(I, TRAIT_NODROP, CYBORG_ITEM_TRAIT)
|
||||
I.mouse_opacity = MOUSE_OPACITY_OPAQUE
|
||||
if(nonstandard)
|
||||
added_modules += I
|
||||
if(requires_rebuild)
|
||||
rebuild_modules()
|
||||
return I
|
||||
|
||||
/obj/item/robot_module/engineering/Initialize()
|
||||
basic_modules += /obj/item/pen
|
||||
basic_modules += /obj/item/electronics/airlock
|
||||
basic_modules += /obj/item/stack/sheet/plasmaglass/cyborg
|
||||
basic_modules += /obj/item/stack/sheet/plasmarglass/cyborg
|
||||
basic_modules += /obj/item/stack/sheet/plasteel/cyborg
|
||||
basic_modules += /obj/item/stack/sheet/mineral/plasma/cyborg
|
||||
. = ..()
|
||||
|
||||
/obj/item/robot_module/butler/Initialize()
|
||||
basic_modules -= /obj/item/reagent_containers/borghypo/borgshaker
|
||||
basic_modules += /obj/item/reagent_containers/borghypo/borgshaker/beershaker
|
||||
basic_modules += /obj/item/reagent_containers/borghypo/borgshaker/juiceshaker
|
||||
basic_modules += /obj/item/reagent_containers/borghypo/borgshaker/sodashaker
|
||||
basic_modules += /obj/item/reagent_containers/borghypo/borgshaker/miscshaker
|
||||
. = ..()
|
||||
|
||||
/obj/item/robot_module/miner/Initialize()
|
||||
basic_modules += /obj/item/card/id/miningborg
|
||||
. = ..()
|
||||
|
||||
/datum/robot_energy_storage/plasma
|
||||
name = "Plasma Buffer Container"
|
||||
recharge_rate = 0
|
||||
|
||||
/obj/item/robot_module/syndicatejack
|
||||
name = "Syndicate"
|
||||
basic_modules = list(
|
||||
/obj/item/assembly/flash/cyborg,
|
||||
/obj/item/borg/sight/thermal,
|
||||
/obj/item/extinguisher,
|
||||
/obj/item/weldingtool/experimental,
|
||||
/obj/item/screwdriver/nuke,
|
||||
/obj/item/wrench/cyborg,
|
||||
/obj/item/crowbar/cyborg,
|
||||
/obj/item/wirecutters/cyborg,
|
||||
/obj/item/multitool/cyborg,
|
||||
/obj/item/weapon/gripper,
|
||||
/obj/item/cyborg_clamp,
|
||||
/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/restraints/handcuffs/cable/zipties,
|
||||
/obj/item/stack/medical/gauze/cyborg,
|
||||
/obj/item/shockpaddles/cyborg,
|
||||
/obj/item/healthanalyzer/advanced,
|
||||
/obj/item/surgical_drapes/advanced,
|
||||
/obj/item/retractor/advanced,
|
||||
/obj/item/surgicaldrill/advanced,
|
||||
/obj/item/scalpel/advanced,
|
||||
/obj/item/gun/medbeam,
|
||||
/obj/item/reagent_containers/borghypo/syndicate,
|
||||
/obj/item/borg/lollipop,
|
||||
/obj/item/holosign_creator/cyborg,
|
||||
/obj/item/stamp/chameleon,
|
||||
/obj/item/borg_shapeshifter
|
||||
)
|
||||
|
||||
ratvar_modules = list(
|
||||
/obj/item/clockwork/slab/cyborg/medical,
|
||||
/obj/item/clockwork/slab/cyborg/engineer,
|
||||
/obj/item/clockwork/replica_fabricator/cyborg)
|
||||
|
||||
cyborg_base_icon = "synd_engi"
|
||||
moduleselect_icon = "malf"
|
||||
magpulsing = TRUE
|
||||
hat_offset = INFINITY
|
||||
canDispose = TRUE
|
||||
|
||||
/obj/item/robot_module/syndicatejack/be_transformed_to(obj/item/robot_module/old_module)
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
var/static/list/syndicatejack_icons = sortList(list(
|
||||
"Saboteur" = image(icon = 'icons/mob/robots.dmi', icon_state = "synd_engi"),
|
||||
"Medical" = image(icon = 'icons/mob/robots.dmi', icon_state = "synd_medical"),
|
||||
"Assault" = image(icon = 'icons/mob/robots.dmi', icon_state = "synd_sec"),
|
||||
))
|
||||
var/syndiejack_icon = show_radial_menu(R, R , syndicatejack_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE)
|
||||
switch(syndiejack_icon)
|
||||
if("Saboteur")
|
||||
cyborg_base_icon = "synd_engi"
|
||||
cyborg_icon_override = 'icons/mob/robots.dmi'
|
||||
if("Medical")
|
||||
cyborg_base_icon = "synd_medical"
|
||||
cyborg_icon_override = 'icons/mob/robots.dmi'
|
||||
if("Assault")
|
||||
cyborg_base_icon = "synd_sec"
|
||||
cyborg_icon_override = 'icons/mob/robots.dmi'
|
||||
else
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/obj/item/robot_module/syndicatejack/rebuild_modules()
|
||||
..()
|
||||
var/mob/living/silicon/robot/syndicatejack = loc
|
||||
syndicatejack.scrambledcodes = TRUE // We're rouge now
|
||||
|
||||
/obj/item/robot_module/syndicatejack/remove_module(obj/item/I, delete_after)
|
||||
..()
|
||||
var/mob/living/silicon/robot/syndicatejack = loc
|
||||
syndicatejack.scrambledcodes = FALSE // Friends with the AI again
|
||||
|
||||
/obj/item/robot_module/roleplay
|
||||
name = "Roleplay"
|
||||
basic_modules = list(
|
||||
/obj/item/assembly/flash/cyborg,
|
||||
/obj/item/extinguisher/mini,
|
||||
/obj/item/weldingtool/largetank/cyborg,
|
||||
/obj/item/screwdriver/cyborg,
|
||||
/obj/item/wrench/cyborg,
|
||||
/obj/item/crowbar/cyborg,
|
||||
/obj/item/wirecutters/cyborg,
|
||||
/obj/item/multitool/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/stack/cable_coil/cyborg,
|
||||
/obj/item/restraints/handcuffs/cable/zipties,
|
||||
/obj/item/rsf/cyborg,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass,
|
||||
/obj/item/reagent_containers/borghypo/borgshaker/beershaker,
|
||||
/obj/item/reagent_containers/borghypo/borgshaker/juiceshaker,
|
||||
/obj/item/reagent_containers/borghypo/borgshaker/sodashaker,
|
||||
/obj/item/reagent_containers/borghypo/borgshaker/miscshaker,
|
||||
/obj/item/soap/nanotrasen,
|
||||
/obj/item/borg/cyborghug,
|
||||
/obj/item/dogborg_nose,
|
||||
/obj/item/dogborg_tongue,
|
||||
/obj/item/borg_shapeshifter/stable)
|
||||
moduleselect_icon = "standard"
|
||||
hat_offset = -3
|
||||
|
||||
/obj/item/robot_module/Initialize()
|
||||
basic_modules += /obj/item/dildo/custom
|
||||
. = ..()
|
||||
@@ -0,0 +1,128 @@
|
||||
/*
|
||||
Borg Shaker
|
||||
*/
|
||||
/obj/item/reagent_containers/borghypo/borgshaker/beershaker
|
||||
name = "cyborg shaker"
|
||||
desc = "An advanced drink synthesizer and mixer."
|
||||
icon = 'sandcode/icons/obj/drinks.dmi'
|
||||
icon_state = "beershaker"
|
||||
possible_transfer_amounts = list(5,10,20)
|
||||
charge_cost = 20 //Lots of reagents all regenerating at once, so the charge cost is lower. They also regenerate faster.
|
||||
recharge_time = 1
|
||||
accepts_reagent_upgrades = FALSE
|
||||
reagent_ids = list( /datum/reagent/consumable/ethanol/beer,
|
||||
/datum/reagent/consumable/ethanol/whiskey,
|
||||
/datum/reagent/consumable/ethanol/vodka,
|
||||
/datum/reagent/consumable/ethanol/rum,
|
||||
/datum/reagent/consumable/ethanol/gin,
|
||||
/datum/reagent/consumable/ethanol/tequila,
|
||||
/datum/reagent/consumable/ethanol/vermouth,
|
||||
/datum/reagent/consumable/ethanol/wine,
|
||||
/datum/reagent/consumable/ethanol/kahlua,
|
||||
/datum/reagent/consumable/ethanol/cognac,
|
||||
/datum/reagent/consumable/ethanol/ale,
|
||||
/datum/reagent/consumable/ethanol/fernet,
|
||||
/datum/reagent/consumable/ethanol/triple_sec,
|
||||
/datum/reagent/consumable/nothing,
|
||||
/datum/reagent/consumable/laughter,
|
||||
/datum/reagent/consumable/ethanol/creme_de_menthe,
|
||||
/datum/reagent/consumable/ethanol/creme_de_cacao,
|
||||
/datum/reagent/consumable/ethanol/creme_de_coconut,
|
||||
/datum/reagent/consumable/ethanol/champagne,
|
||||
/datum/reagent/consumable/ethanol/thirteenloko,
|
||||
/datum/reagent/consumable/ethanol/absinthe,
|
||||
/datum/reagent/consumable/ethanol/hooch,
|
||||
/datum/reagent/consumable/ethanol/moonshine)
|
||||
|
||||
|
||||
/obj/item/reagent_containers/borghypo/borgshaker/juiceshaker
|
||||
name = "cyborg shaker"
|
||||
desc = "An advanced drink synthesizer and mixer."
|
||||
icon = 'sandcode/icons/obj/drinks.dmi'
|
||||
icon_state = "juiceshaker"
|
||||
possible_transfer_amounts = list(5,10,20)
|
||||
charge_cost = 20 //Lots of reagents all regenerating at once, so the charge cost is lower. They also regenerate faster.
|
||||
recharge_time = 1
|
||||
accepts_reagent_upgrades = FALSE
|
||||
reagent_ids = list( /datum/reagent/consumable/orangejuice,
|
||||
/datum/reagent/consumable/limejuice,
|
||||
/datum/reagent/consumable/tomatojuice,
|
||||
/datum/reagent/consumable/carrotjuice,
|
||||
/datum/reagent/consumable/berryjuice,
|
||||
/datum/reagent/consumable/applejuice,
|
||||
/datum/reagent/consumable/peachjuice,
|
||||
/datum/reagent/consumable/strawberryjuice,
|
||||
/datum/reagent/consumable/pineapplejuice,
|
||||
/datum/reagent/consumable/watermelonjuice,
|
||||
/datum/reagent/consumable/parsnipjuice,
|
||||
/datum/reagent/consumable/grapejuice,
|
||||
/datum/reagent/consumable/potato_juice,
|
||||
/datum/reagent/consumable/pumpkinjuice,
|
||||
/datum/reagent/consumable/lemonjuice)
|
||||
|
||||
/obj/item/reagent_containers/borghypo/borgshaker/sodashaker
|
||||
name = "cyborg shaker"
|
||||
desc = "An advanced drink synthesizer and mixer."
|
||||
icon = 'sandcode/icons/obj/drinks.dmi'
|
||||
icon_state = "sodashaker"
|
||||
possible_transfer_amounts = list(5,10,20)
|
||||
charge_cost = 20 //Lots of reagents all regenerating at once, so the charge cost is lower. They also regenerate faster.
|
||||
recharge_time = 1
|
||||
accepts_reagent_upgrades = FALSE
|
||||
reagent_ids = list( /datum/reagent/consumable/space_cola,
|
||||
/datum/reagent/consumable/nuka_cola,
|
||||
/datum/reagent/consumable/spacemountainwind,
|
||||
/datum/reagent/consumable/dr_gibb,
|
||||
/datum/reagent/consumable/space_up,
|
||||
/datum/reagent/consumable/lemon_lime,
|
||||
/datum/reagent/consumable/pwr_game,
|
||||
/datum/reagent/consumable/shamblers,
|
||||
/datum/reagent/consumable/buzz_fuzz,
|
||||
/datum/reagent/consumable/grey_bull,
|
||||
/datum/reagent/consumable/cream_soda,
|
||||
/datum/reagent/consumable/sol_dry,
|
||||
/datum/reagent/consumable/tonic,
|
||||
/datum/reagent/consumable/sodawater)
|
||||
|
||||
/obj/item/reagent_containers/borghypo/borgshaker/miscshaker
|
||||
name = "cyborg shaker"
|
||||
desc = "An advanced drink synthesizer and mixer."
|
||||
icon = 'sandcode/icons/obj/drinks.dmi'
|
||||
icon_state = "miscshaker"
|
||||
possible_transfer_amounts = list(5,10,20)
|
||||
charge_cost = 20 //Lots of reagents all regenerating at once, so the charge cost is lower. They also regenerate faster.
|
||||
recharge_time = 1
|
||||
accepts_reagent_upgrades = FALSE
|
||||
reagent_ids = list( /datum/reagent/consumable/grenadine,
|
||||
/datum/reagent/consumable/banana,
|
||||
/datum/reagent/consumable/honey,
|
||||
/datum/reagent/consumable/sugar,
|
||||
/datum/reagent/consumable/vanilla,
|
||||
/datum/reagent/blood/synthetics,
|
||||
/datum/reagent/consumable/capsaicin,
|
||||
/datum/reagent/consumable/coco,
|
||||
/datum/reagent/consumable/menthol,
|
||||
/datum/reagent/consumable/ice,
|
||||
/datum/reagent/consumable/cream,
|
||||
/datum/reagent/consumable/milk,
|
||||
/datum/reagent/consumable/soymilk,
|
||||
/datum/reagent/consumable/coconutmilk,
|
||||
/datum/reagent/consumable/coffee,
|
||||
/datum/reagent/consumable/tea,
|
||||
/datum/reagent/consumable/lemonade,
|
||||
/datum/reagent/water)
|
||||
|
||||
/obj/item/reagent_containers/borghypo/borgshaker/hacked
|
||||
name = "cyborg shaker"
|
||||
desc = "Will mix drinks that knock them dead."
|
||||
icon = 'icons/obj/drinks.dmi'
|
||||
icon_state = "threemileislandglass"
|
||||
possible_transfer_amounts = list(5,10,20)
|
||||
charge_cost = 20 //Lots of reagents all regenerating at once, so the charge cost is lower. They also regenerate faster.
|
||||
recharge_time = 1
|
||||
accepts_reagent_upgrades = FALSE
|
||||
reagent_ids = list( /datum/reagent/toxin/fakebeer,
|
||||
/datum/reagent/consumable/poisonberryjuice,
|
||||
/datum/reagent/toxin/itching_powder,
|
||||
/datum/reagent/toxin/bungotoxin,
|
||||
/datum/reagent/consumable/superlaughter)
|
||||
@@ -1,3 +1,21 @@
|
||||
/datum/design/borg_upgrade_xwelding
|
||||
name = "Cyborg Upgrade (Experimental Welding Tool)"
|
||||
id = "borg_upgrade_xwelding"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/borg/upgrade/xwelding
|
||||
materials = list(/datum/material/iron = 1000, /datum/material/plasma = 1000, /datum/material/titanium = 1000)
|
||||
construction_time = 100
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
/* Shit doesnt work, work on it later
|
||||
/datum/design/borg_upgrade_plasma
|
||||
name = "Cyborg Upgrade (Plasma Resource)"
|
||||
id = "borg_upgrade_plasma"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/borg/upgrade/plasma
|
||||
materials = list(/datum/material/plasma = 1000, /datum/material/bluespace = 1000)
|
||||
construction_time = 100
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
*/
|
||||
/datum/design/borg_upgrade_bsrpd
|
||||
name = "Cyborg Upgrade (Bluespace RPD)"
|
||||
id = "borg_upgrade_bsrpd"
|
||||
@@ -7,6 +25,34 @@
|
||||
construction_time = 100
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
/datum/design/borg_upgrade_premiumka
|
||||
name = "Cyborg Upgrade (Premium Kinetic Accelerator)"
|
||||
id = "borg_upgrade_premiumka"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/borg/upgrade/premiumka
|
||||
materials = list(/datum/material/iron=8000, /datum/material/glass=4000, /datum/material/titanium=2000)
|
||||
construction_time = 120
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
/datum/design/borg_upgrade_expand
|
||||
name = "Cyborg Upgrade (Expand)"
|
||||
id = "borg_upgrade_expand"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/borg/upgrade/expand
|
||||
materials = list(/datum/material/iron=20000, /datum/material/glass=5000)
|
||||
construction_time = 120
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
/datum/design/borg_upgrade_shrink
|
||||
name = "Cyborg Upgrade (shrink)"
|
||||
id = "borg_upgrade_shrink"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/borg/upgrade/shrink
|
||||
materials = list(/datum/material/iron=20000, /datum/material/glass=5000)
|
||||
construction_time = 120
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
|
||||
///Power Armor
|
||||
/datum/design/powerarmor_skeleton
|
||||
name = "Power Armor Skeleton"
|
||||
|
||||
@@ -5,3 +5,13 @@
|
||||
prereq_ids = list("adv_biotech", "adv_bluespace", "adv_robotics")
|
||||
design_ids = list("powerarmor_skeleton","powerarmor_torso","powerarmor_helmet","powerarmor_armR","powerarmor_armL","powerarmor_legR","powerarmor_legL")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500)
|
||||
|
||||
/datum/techweb_node/adv_robotics/New()
|
||||
design_ids += "borg_upgrade_premiumka"
|
||||
. = ..()
|
||||
|
||||
/datum/techweb_node/cyborg_upg_util/New()
|
||||
design_ids += "borg_upgrade_xwelding"
|
||||
design_ids += "borg_upgrade_shrink"
|
||||
//design_ids += "borg_upgrade_plasma"
|
||||
. = ..()
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
/obj/item/hilbertshotel/ghostdojo/attack_robot(mob/user)
|
||||
. = ..()
|
||||
interact(user)
|
||||
Reference in New Issue
Block a user