mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-30 16:47:13 +01:00
Lets you tape knives to cleanbots. You know, if you really want to. (#47590)
This PR lets you tape knives to cleanbots. Anyone who steps on the armed cleanbot will get stabbed in the ankle and fall over for a moment. If the person who got stabbed was someone with a title, the cleanbot will steal their title if they aren't already the victim's superior.
There are six "career tracks" for cleanbots, the first three grant prefixes, the last three grant suffixes
Command: HoP -> Captain -> Spec Ops Officer -> Admiral
Security: Officer -> Detective -> Warden -> HoS
Engineering: Atmos -> Engineer -> CE
Medical: MD -> CMO
Research: RD/Scientist (same thing)
Legal: Lawyer
The cleanbot in the above picture has stabbed the Captain, HoS, CE, an MD, the RD, and a lawyer. Busy little fella aren't they?
TODO:
Make it so they don't show an attack message on top of the stab message (also make them actually target the legs)
Why It's Good For The Game
space roombas cleanbots with knives stuck to them are funny and sound like something a bored assistant would do
Changelog
cl Ryll/Shaps
add: You can now attach knives to cleanbots! Laugh as Officer Stabby sneaks up and jabs the HoS! Sigh because you are now outranked by a cleanbot! Fun for everyone!
/cl
This commit is contained in:
@@ -91,6 +91,10 @@
|
||||
var/ignorelistcleanuptimer = 1 // This ticks up every automated action, at 300 we clean the ignore list
|
||||
var/robot_arm = /obj/item/bodypart/r_arm/robot
|
||||
|
||||
var/commissioned = FALSE // Will other (noncommissioned) bots salute this bot?
|
||||
var/can_salute = TRUE
|
||||
var/salute_delay = 60 SECONDS
|
||||
|
||||
hud_possible = list(DIAG_STAT_HUD, DIAG_BOT_HUD, DIAG_HUD, DIAG_PATH_HUD = HUD_LIST_LIST) //Diagnostic HUD views
|
||||
|
||||
/mob/living/simple_animal/bot/proc/get_mode()
|
||||
@@ -240,6 +244,14 @@
|
||||
if(!on || client)
|
||||
return
|
||||
|
||||
if(!commissioned && can_salute)
|
||||
for(var/mob/living/simple_animal/bot/B in get_hearers_in_view(5, get_turf(src)))
|
||||
if(B.commissioned)
|
||||
visible_message("<b>[src]</b> performs an elaborate salute for [B]!")
|
||||
can_salute = FALSE
|
||||
addtimer(VARSET_CALLBACK(src, can_salute, TRUE), salute_delay)
|
||||
break
|
||||
|
||||
switch(mode) //High-priority overrides are processed first. Bots can do nothing else while under direct command.
|
||||
if(BOT_RESPONDING) //Called by the AI.
|
||||
call_mode()
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
model = "Cleanbot"
|
||||
bot_core_type = /obj/machinery/bot_core/cleanbot
|
||||
window_id = "autoclean"
|
||||
window_name = "Automatic Station Cleaner v1.3"
|
||||
window_name = "Automatic Station Cleaner v1.4"
|
||||
pass_flags = PASSMOB
|
||||
path_image_color = "#993299"
|
||||
|
||||
@@ -33,6 +33,59 @@
|
||||
var/next_dest
|
||||
var/next_dest_loc
|
||||
|
||||
var/obj/item/weapon
|
||||
var/weapon_orig_force = 0
|
||||
|
||||
var/list/stolen_valor
|
||||
|
||||
var/static/list/officers = list("Captain", "Head of Personnel", "Head of Security")
|
||||
var/static/list/command = list("Captain" = "Cpt.","Head of Personnel" = "Lt.")
|
||||
var/static/list/security = list("Head of Security" = "Maj.", "Warden" = "Sgt.", "Detective" = "Det.", "Security Officer" = "Officer")
|
||||
var/static/list/engineering = list("Chief Engineer" = "Chief Engineer", "Station Engineer" = "Engineer", "Atmospherics Technician" = "Technician")
|
||||
var/static/list/medical = list("Chief Medical Officer" = "C.M.O.", "Medical Doctor" = "M.D.", "Chemist" = "Pharm.D.")
|
||||
var/static/list/research = list("Research Director" = "Ph.D.", "Roboticist" = "M.S.", "Scientist" = "B.S.")
|
||||
var/static/list/legal = list("Lawyer" = "Esq.")
|
||||
|
||||
var/list/prefixes
|
||||
var/list/suffixes
|
||||
|
||||
|
||||
/mob/living/simple_animal/bot/cleanbot/proc/deputize(obj/item/W, mob/user)
|
||||
if(in_range(src, user))
|
||||
to_chat(user, "<span class='notice'>You attach \the [W] to \the [src].</span>")
|
||||
user.transferItemToLoc(W, src)
|
||||
weapon = W
|
||||
weapon_orig_force = weapon.force
|
||||
weapon.force = weapon.force / 2
|
||||
icon_state = "cleanbot[on]"
|
||||
add_overlay(image(icon=weapon.lefthand_file,icon_state=weapon.item_state))
|
||||
|
||||
/mob/living/simple_animal/bot/cleanbot/proc/update_titles()
|
||||
var/working_title = ""
|
||||
|
||||
for(var/pref in prefixes)
|
||||
for(var/title in pref)
|
||||
if(title in stolen_valor)
|
||||
working_title += pref[title] + " "
|
||||
if(title in officers)
|
||||
commissioned = TRUE
|
||||
break
|
||||
|
||||
working_title += initial(name)
|
||||
|
||||
for(var/suf in suffixes)
|
||||
for(var/title in suf)
|
||||
if(title in stolen_valor)
|
||||
working_title += " " + suf[title]
|
||||
break
|
||||
|
||||
name = working_title
|
||||
|
||||
/mob/living/simple_animal/bot/cleanbot/examine(mob/user)
|
||||
. = ..()
|
||||
if(weapon)
|
||||
. += " <span class='warning'>Is that \a [weapon] taped to it...?</span>"
|
||||
|
||||
/mob/living/simple_animal/bot/cleanbot/Initialize()
|
||||
. = ..()
|
||||
get_targets()
|
||||
@@ -41,6 +94,17 @@
|
||||
var/datum/job/janitor/J = new/datum/job/janitor
|
||||
access_card.access += J.get_access()
|
||||
prev_access = access_card.access
|
||||
stolen_valor = list()
|
||||
|
||||
prefixes = list(command, security, engineering)
|
||||
suffixes = list(research, medical, legal)
|
||||
|
||||
/mob/living/simple_animal/bot/cleanbot/Destroy()
|
||||
if(weapon)
|
||||
var/atom/Tsec = drop_location()
|
||||
weapon.force = weapon_orig_force
|
||||
drop_part(weapon, Tsec)
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/bot/cleanbot/turn_on()
|
||||
..()
|
||||
@@ -63,6 +127,23 @@
|
||||
text_dehack = "[name]'s software has been reset!"
|
||||
text_dehack_fail = "[name] does not seem to respond to your repair code!"
|
||||
|
||||
/mob/living/simple_animal/bot/cleanbot/Crossed(atom/movable/AM)
|
||||
. = ..()
|
||||
|
||||
zone_selected = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
|
||||
if(weapon && has_gravity() && ismob(AM))
|
||||
var/mob/living/carbon/C = AM
|
||||
if(!istype(C))
|
||||
return
|
||||
|
||||
weapon.attack(C, src)
|
||||
C.Knockdown(20)
|
||||
|
||||
if(!(C.job in stolen_valor))
|
||||
stolen_valor += C.job
|
||||
update_titles()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/bot/cleanbot/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/card/id)||istype(W, /obj/item/pda))
|
||||
if(bot_core.allowed(user) && !open && !emagged)
|
||||
@@ -75,6 +156,10 @@
|
||||
to_chat(user, "<span class='warning'>Please close the access panel before locking it.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>\The [src] doesn't seem to respect your authority.</span>")
|
||||
else if(istype(W, /obj/item/kitchen/knife) && user.a_intent != INTENT_HARM)
|
||||
to_chat(user, "<span class='notice'>You start attaching the [W] to \the [src]...</span>")
|
||||
if(do_after(user, 40, target = src))
|
||||
deputize(W, user)
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
Reference in New Issue
Block a user