From 3e0403a7e996c5d5d1afa69b244785eb7f39d836 Mon Sep 17 00:00:00 2001
From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Tue, 21 Jul 2020 02:22:42 +0100
Subject: [PATCH 01/23] BEEPSKY FASHION
---
code/datums/beepsky_fashion.dm | 75 ++++++++++++++++
code/datums/dog_fashion.dm | 2 -
code/modules/clothing/head/_head.dm | 1 +
code/modules/clothing/head/collectable.dm | 1 +
code/modules/clothing/suits/wiz_robe.dm | 1 +
.../mob/living/simple_animal/bot/secbot.dm | 80 ++++++++++++++++--
icons/mob/secbot_head.dmi | Bin 0 -> 364 bytes
tgstation.dme | 1 +
8 files changed, 152 insertions(+), 9 deletions(-)
create mode 100644 code/datums/beepsky_fashion.dm
create mode 100644 icons/mob/secbot_head.dmi
diff --git a/code/datums/beepsky_fashion.dm b/code/datums/beepsky_fashion.dm
new file mode 100644
index 0000000000..d9de8e6d7f
--- /dev/null
+++ b/code/datums/beepsky_fashion.dm
@@ -0,0 +1,75 @@
+//similar to dog_fashion, but for beepsky, who has far more refined fashion tastes
+/datum/beepsky_fashion
+ var/name
+ var/desc
+
+ var/icon_file = 'icons/mob/secbot_head.dmi'
+ var/obj_icon_state
+ var/obj_alpha
+ var/obj_color
+
+ //emotes
+ var/death_emote
+ var/capture_one
+ var/capture_two
+ var/infraction
+ var/taunt
+ var/attack_one
+ var/attack_two
+
+/datum/beepsky_fashion/proc/get_overlay(var/dir)
+ if(icon_file && obj_icon_state)
+ var/image/beepsky_overlay = image(icon_file, obj_icon_state, dir = dir)
+ beepsky_overlay.alpha = obj_alpha
+ beepsky_overlay.color = obj_color
+ return beepsky_overlay
+
+/datum/beepsky_fashion/proc/apply(mob/living/simple_animal/bot/secbot/beepers) //set the emote depending on the fashion datum, if nothing set, turn it back to how it was initially
+ //assume name and description is always set, because otherwise, what would be the point of beepsky fashion?
+ src.name = name
+ src.desc = desc
+ if(death_emote)
+ beepers.death_emote = death_emote
+ else
+ beepers.death_emote = initial(beepers.death_emote)
+
+ if(capture_one)
+ beepers.capture_one = capture_one
+ else
+ beepers.capture_one = initial(beepers.capture_one)
+
+ if(capture_two)
+ beepers.capture_two = capture_two
+ else
+ beepers.capture_two = initial(beepers.capture_two)
+
+ if(infraction)
+ beepers.infraction = infraction
+ else
+ beepers.infraction = initial(beepers.infraction)
+
+ if(infraction)
+ beepers.taunt = taunt
+ else
+ beepers.taunt = initial(beepers.taunt)
+
+ if(attack_one)
+ beepers.attack_one = attack_one
+ else
+ beepers.attack_one = initial(beepers.attack_one)
+
+ if(attack_two)
+ beepers.attack_two = attack_two
+ else
+ beepers.attack_two = initial(beepers.attack_two)
+
+//actual fashions from here on out
+/datum/beepsky_fashion/wizard
+ name = "Archmage Beepsky"
+ desc = "A secbot stolen from the wizard federation."
+ death_emote = "BOT casts EI NATH on themselves!"
+ capture_one = "BOT is casting cable ties on CRIMINAL!"
+ capture_two = "BOT is casting cable ties on you!"
+ infraction = "Magical disturbance of magnitude THREAT_LEVEL detected!"
+ attack_one = "BOT casts magic missile on CRIMINAL!"
+ attack_two = "BOT casts magic missile on you!"
diff --git a/code/datums/dog_fashion.dm b/code/datums/dog_fashion.dm
index 744f57c391..2e80feac67 100644
--- a/code/datums/dog_fashion.dm
+++ b/code/datums/dog_fashion.dm
@@ -38,7 +38,6 @@
corgI.color = obj_color
return corgI
-
/datum/dog_fashion/head
icon_file = 'icons/mob/corgi_head.dmi'
@@ -53,7 +52,6 @@
name = "Sous chef REAL_NAME"
desc = "Your food will be taste-tested. All of it."
-
/datum/dog_fashion/head/captain
name = "Captain REAL_NAME"
desc = "Probably better than the last captain."
diff --git a/code/modules/clothing/head/_head.dm b/code/modules/clothing/head/_head.dm
index 475e7a4e51..0854d9c270 100644
--- a/code/modules/clothing/head/_head.dm
+++ b/code/modules/clothing/head/_head.dm
@@ -8,6 +8,7 @@
var/blockTracking = 0 //For AI tracking
var/can_toggle = null
dynamic_hair_suffix = "+generic"
+ var/datum/beepsky_fashion/beepsky_fashion //the associated datum for applying this hat to a secbot
/obj/item/clothing/head/Initialize()
. = ..()
diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm
index 314142d0cc..71b3e2e144 100644
--- a/code/modules/clothing/head/collectable.dm
+++ b/code/modules/clothing/head/collectable.dm
@@ -116,6 +116,7 @@
icon_state = "wizard"
dog_fashion = /datum/dog_fashion/head/blue_wizard
+ beepsky_fashion = /datum/beepsky_fashion/wizard
/obj/item/clothing/head/collectable/hardhat
name = "collectable hard hat"
diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm
index 047dc7b7a3..c513168e47 100644
--- a/code/modules/clothing/suits/wiz_robe.dm
+++ b/code/modules/clothing/suits/wiz_robe.dm
@@ -9,6 +9,7 @@
equip_delay_other = 50
resistance_flags = FIRE_PROOF | ACID_PROOF
dog_fashion = /datum/dog_fashion/head/blue_wizard
+ beepsky_fashion = /datum/beepsky_fashion/wizard
var/magic_flags = SPELL_WIZARD_HAT
/obj/item/clothing/head/wizard/ComponentInitialize()
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index cfff3eb751..669828a0e9 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -33,6 +33,17 @@
var/check_records = TRUE //Does it check security records?
var/arrest_type = FALSE //If true, don't handcuff
+ var/obj/item/clothing/head/bot_hat
+
+ //emotes (BOT is replaced with bot name, CRIMINAL with criminal name, THREAT_LEVEL with threat level)
+ var/death_emote = "BOT blows apart!"
+ var/capture_one = "BOT is trying to put zipties on CRIMINAL!"
+ var/capture_two = "BOT is trying to put zipties on you!"
+ var/infraction = "Level THREAT_LEVEL infraction alert!"
+ var/taunt = "BOT points at CRIMINAL!"
+ var/attack_one = "BOT has stunned CRIMINAL!"
+ var/attack_two = "BOT has stunned you!"
+
/mob/living/simple_animal/bot/secbot/beepsky
name = "Officer Beep O'sky"
desc = "It's Officer Beep O'sky! Powered by a potato and a shot of whiskey."
@@ -49,6 +60,34 @@
resize = 0.8
update_transform()
+/mob/living/simple_animal/bot/secbot/proc/process_emote(var/emote_type, var/atom/criminal, var/threat)
+ var/emote = "The continuity of space itself collapses around [src]. You should probably report that to someone higher up."
+ switch(emote_type)
+ if("DEATH")
+ emote = death_emote
+ if("CAPTURE_ONE")
+ emote = capture_one
+ if("CAPTURE_TWO")
+ emote = capture_two
+ if("INFRACTION")
+ emote = infraction
+ if("TAUNT")
+ emote = taunt
+ if("ATTACK_PME")
+ emote = attack_one
+ if("ATTACK_TWO")
+ emote = attack_two
+
+ //now replace pieces of the text with the information we have
+ if(!taunt)
+ emote = replacetext(emote, "BOT", name)
+ else
+ emote = replacetext(emote, "BOT", "[name]") //needs to be bold if its a taunt
+ if(criminal)
+ emote = replacetext(emote, "CRIMINAL", criminal.name)
+ if(threat)
+ emote = replacetext(emote, "THREAT_LEVEL", threat)
+ return emote
/mob/living/simple_animal/bot/secbot/beepsky/explode()
var/atom/Tsec = drop_location()
@@ -185,11 +224,38 @@ Auto Patrol: []"},
..()
if(istype(W, /obj/item/weldingtool) && user.a_intent != INTENT_HARM) // Any intent but harm will heal, so we shouldn't get angry.
return
+ if(istype(W, /obj/item/clothing/head))
+ attempt_place_on_head(user, W)
+ return
if(!istype(W, /obj/item/screwdriver) && (W.force) && (!target) && (W.damtype != STAMINA) ) // Added check for welding tool to fix #2432. Welding tool behavior is handled in superclass.
retaliate(user)
if(special_retaliate_after_attack(user))
return
+/mob/living/simple_animal/bot/secbot/proc/attempt_place_on_head(mob/user, obj/item/clothing/head/H)
+ if(user && !user.temporarilyRemoveItemFromInventory(H))
+ to_chat(user, "\The [H] is stuck to your hand, you cannot put it on [src]'s head!")
+ return
+ if(bot_hat)
+ to_chat("\[src] already has a hat, and the laws of physics disallow him from wearing a second!")
+ if(H.beepsky_fashion)
+ bot_hat = H
+ H.forceMove(src)
+ else
+ to_chat(user, "You set [H] on [src]'s head, but it falls off!")
+ H.forceMove(drop_location())
+
+/mob/living/simple_animal/bot/secbot/proc/update_beepsky_fluff()
+ var/datum/beepsky_fashion/BF = new bot_hat.beepsky_fashion
+ if(BF)
+ BF.apply(src)
+
+/mob/living/simple_animal/bot/secbot/regenerate_icons()
+ ..()
+ if(bot_hat)
+ update_beepsky_fluff()
+ add_overlay(bot_hat.beepsky_fashion.get_overlay())
+
/mob/living/simple_animal/bot/secbot/emag_act(mob/user)
. = ..()
if(emagged == 2)
@@ -233,8 +299,8 @@ Auto Patrol: []"},
/mob/living/simple_animal/bot/secbot/proc/cuff(mob/living/carbon/C)
mode = BOT_ARREST
playsound(src, 'sound/weapons/cablecuff.ogg', 30, TRUE, -2)
- C.visible_message("[src] is trying to put zipties on [C]!",\
- "[src] is trying to put zipties on you!")
+ C.visible_message("[process_emote("CAPTURE_ONE", C)]",\
+ "[process_emote("CAPTURE_TWO", C)]")
if(do_after(src, 60, FALSE, C))
attempt_handcuff(C)
@@ -267,8 +333,8 @@ Auto Patrol: []"},
if(declare_arrests)
var/area/location = get_area(src)
speak("[arrest_type ? "Detaining" : "Arresting"] level [threat] scumbag [C] in [location].", radio_channel)
- C.visible_message("[src] has stunned [C]!",\
- "[src] has stunned you!")
+ C.visible_message("[process_emote("ATTACK_ONE", C)]",\
+ "[process_emote("ATTACK_TWO", C)]")
/mob/living/simple_animal/bot/secbot/handle_automated_action()
if(!..())
@@ -391,9 +457,9 @@ Auto Patrol: []"},
else if(threatlevel >= 4)
target = C
oldtarget_name = C.name
- speak("Level [threatlevel] infraction alert!")
+ speak(process_emote("INFRACTION", target, threatlevel))
playsound(loc, pick('sound/voice/beepsky/criminal.ogg', 'sound/voice/beepsky/justice.ogg', 'sound/voice/beepsky/freeze.ogg'), 50, FALSE)
- visible_message("[src] points at [C.name]!")
+ visible_message(process_emote("TAUNT", target, threatlevel))
mode = BOT_HUNT
INVOKE_ASYNC(src, .proc/handle_automated_action)
break
@@ -408,7 +474,7 @@ Auto Patrol: []"},
/mob/living/simple_animal/bot/secbot/explode()
walk_to(src,0)
- visible_message("[src] blows apart!")
+ visible_message("[process_emote("DEATH")]")
var/atom/Tsec = drop_location()
var/obj/item/bot_assembly/secbot/Sa = new (Tsec)
diff --git a/icons/mob/secbot_head.dmi b/icons/mob/secbot_head.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..2a246b8e42281de745b6e6f33e38fb98f88ee343
GIT binary patch
literal 364
zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|ep#Yx{*8>L*Fze-WJ5A+rpQ{-*
zi#_nb7MHXCfwGJxL4Lsu4$p3+0XeBvArU1msl~}fnFS@8`FRWs6?1~a3W`dEamT(fM}DM!{wS9@nM3
z0S$}>1`OW}8SbPqsDJ#ont@kLNW4pA;f2><*1q37n?2!<%#ue*j}2?qFZlfW%;HU!
zZ^GB+XS{!Kt)No2^O?XMiO2vp`;GrTKRql_ytMASX6a8a1+UJz%-0Hg?cVSye0-7A
z?e{-h;uycjQjMb=_A=>D*$uVrHR3gZ*uy>ph-c{kJIIvaA>uI2`~Oj(6B#^R{an^L
HB{Ts5a*&WH
literal 0
HcmV?d00001
diff --git a/tgstation.dme b/tgstation.dme
index 9314992c5f..4f9e52622a 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -352,6 +352,7 @@
#include "code\datums\ai_laws.dm"
#include "code\datums\armor.dm"
#include "code\datums\beam.dm"
+#include "code\datums\beepsky_fashion.dm"
#include "code\datums\browser.dm"
#include "code\datums\callback.dm"
#include "code\datums\chatmessage.dm"
From 1ed035e4a3a7926e21e1081140c19aeb6e7dba25 Mon Sep 17 00:00:00 2001
From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Tue, 21 Jul 2020 02:29:41 +0100
Subject: [PATCH 02/23] move
---
code/modules/mob/living/simple_animal/bot/secbot.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index 669828a0e9..94c4e3251c 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -249,11 +249,11 @@ Auto Patrol: []"},
var/datum/beepsky_fashion/BF = new bot_hat.beepsky_fashion
if(BF)
BF.apply(src)
+ regenerate_icons()
/mob/living/simple_animal/bot/secbot/regenerate_icons()
..()
if(bot_hat)
- update_beepsky_fluff()
add_overlay(bot_hat.beepsky_fashion.get_overlay())
/mob/living/simple_animal/bot/secbot/emag_act(mob/user)
From 47ff13c539d3ab5a1f8c305ddf48b845602ec78e Mon Sep 17 00:00:00 2001
From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Tue, 21 Jul 2020 02:37:21 +0100
Subject: [PATCH 03/23] apply the overlay
---
code/modules/mob/living/simple_animal/bot/secbot.dm | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index 94c4e3251c..c03b36d087 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -241,6 +241,7 @@ Auto Patrol: []"},
if(H.beepsky_fashion)
bot_hat = H
H.forceMove(src)
+ update_beepsky_fluff()
else
to_chat(user, "You set [H] on [src]'s head, but it falls off!")
H.forceMove(drop_location())
@@ -254,7 +255,8 @@ Auto Patrol: []"},
/mob/living/simple_animal/bot/secbot/regenerate_icons()
..()
if(bot_hat)
- add_overlay(bot_hat.beepsky_fashion.get_overlay())
+ var/datum/beepsky_fashion/fashion = new bot_hat.beepsky_fashion
+ add_overlay(fashion.get_overlay())
/mob/living/simple_animal/bot/secbot/emag_act(mob/user)
. = ..()
From 4daf71d99e8bfecd2cf72904737b2476aecfbdbc Mon Sep 17 00:00:00 2001
From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Tue, 21 Jul 2020 03:34:50 +0100
Subject: [PATCH 04/23] woo it works
---
code/datums/beepsky_fashion.dm | 5 +++--
.../mob/living/simple_animal/bot/secbot.dm | 8 +++++++-
icons/mob/secbot_head.dmi | Bin 364 -> 370 bytes
3 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/code/datums/beepsky_fashion.dm b/code/datums/beepsky_fashion.dm
index d9de8e6d7f..0cc0c91f7d 100644
--- a/code/datums/beepsky_fashion.dm
+++ b/code/datums/beepsky_fashion.dm
@@ -26,8 +26,8 @@
/datum/beepsky_fashion/proc/apply(mob/living/simple_animal/bot/secbot/beepers) //set the emote depending on the fashion datum, if nothing set, turn it back to how it was initially
//assume name and description is always set, because otherwise, what would be the point of beepsky fashion?
- src.name = name
- src.desc = desc
+ beepers.name = name
+ beepers.desc = desc
if(death_emote)
beepers.death_emote = death_emote
else
@@ -65,6 +65,7 @@
//actual fashions from here on out
/datum/beepsky_fashion/wizard
+ obj_icon_state = "wizard"
name = "Archmage Beepsky"
desc = "A secbot stolen from the wizard federation."
death_emote = "BOT casts EI NATH on themselves!"
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index c03b36d087..479ad1ee09 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -242,6 +242,7 @@ Auto Patrol: []"},
bot_hat = H
H.forceMove(src)
update_beepsky_fluff()
+ regenerate_icons()
else
to_chat(user, "You set [H] on [src]'s head, but it falls off!")
H.forceMove(drop_location())
@@ -250,12 +251,17 @@ Auto Patrol: []"},
var/datum/beepsky_fashion/BF = new bot_hat.beepsky_fashion
if(BF)
BF.apply(src)
- regenerate_icons()
/mob/living/simple_animal/bot/secbot/regenerate_icons()
..()
if(bot_hat)
var/datum/beepsky_fashion/fashion = new bot_hat.beepsky_fashion
+ if(!fashion.obj_icon_state)
+ fashion.obj_icon_state = bot_hat.icon_state
+ if(!fashion.obj_alpha)
+ fashion.obj_alpha = bot_hat.alpha
+ if(!fashion.obj_color)
+ fashion.obj_color = bot_hat.color
add_overlay(fashion.get_overlay())
/mob/living/simple_animal/bot/secbot/emag_act(mob/user)
diff --git a/icons/mob/secbot_head.dmi b/icons/mob/secbot_head.dmi
index 2a246b8e42281de745b6e6f33e38fb98f88ee343..5e1e57f71c7c9019fce3c3c837687157d6967430 100644
GIT binary patch
delta 58
zcmV-A0LB080`dZoPXTL@P)IAOJhLjXC`E~jGbOXA7^I7fGp#5wHxYE6
Q3jkZx8lN(P>MfDIud;U-H2?qr
delta 52
zcmV-40L%aK0_*~iPXT3-P)H?7iHkEOv#1!Po{KZBC^0t`#5UwoR&e!m0h
Date: Tue, 21 Jul 2020 16:26:51 +0100
Subject: [PATCH 05/23] its cool and hip
---
code/datums/beepsky_fashion.dm | 35 +++++++++++++++++++
.../mob/living/simple_animal/bot/secbot.dm | 29 +++++++++------
2 files changed, 54 insertions(+), 10 deletions(-)
diff --git a/code/datums/beepsky_fashion.dm b/code/datums/beepsky_fashion.dm
index 0cc0c91f7d..f8a72890b3 100644
--- a/code/datums/beepsky_fashion.dm
+++ b/code/datums/beepsky_fashion.dm
@@ -8,6 +8,8 @@
var/obj_alpha
var/obj_color
+ var/stun_sound //sound that replaces the stun attack when set
+
//emotes
var/death_emote
var/capture_one
@@ -63,6 +65,9 @@
else
beepers.attack_two = initial(beepers.attack_two)
+/datum/beepsky_fashion/proc/stun_attack(mob/living/carbon/C) //fired when beepsky does a stun attack with the fashion worn, for sounds/overlays/etc
+ return
+
//actual fashions from here on out
/datum/beepsky_fashion/wizard
obj_icon_state = "wizard"
@@ -74,3 +79,33 @@
infraction = "Magical disturbance of magnitude THREAT_LEVEL detected!"
attack_one = "BOT casts magic missile on CRIMINAL!"
attack_two = "BOT casts magic missile on you!"
+
+/datum/beepsky_fashion/cowboy
+ obj_icon_state = "cowboy"
+ name = "Sheriff Beepsky"
+ desc = "The sheriff of this here station."
+ capture_one = "BOT is tying CRIMINAL up!"
+ capture_two = "BOT is tying you up!"
+ infraction = "Outlaws with a bounty of THREAT_LEVEL000 space dollars detected!"
+ attack_one = "BOT unloads his revolver onto CRIMINAL!"
+ attack_two = "BOT unloads his revolver onto you!"
+
+/datum/beepsky_fashion/chef
+ obj_icon_state = "chef"
+ name = "Chef Beepsky"
+ desc = "Cooking up the finest foods the station has ever seen."
+ death_emote = "Mamma-mia!"
+ infraction = "Grade THREAT_LEVEL prosciutto detected!"
+ attack_one = "BOT slices wildly with a cleaver towards CRIMINAL!"
+ attack_two = "BOT slices wildly with a cleaver towards you!"
+
+/datum/beepsky_fashion/cat
+ obj_icon_state = "cat"
+ name = "OwOfficer Bweepskwee"
+ desc = "A beepsky unit with cat ears. Why?"
+ death_emote = "Nya!"
+ capture_one = "BOT is tying CRIMINAL up!!"
+ capture_two = "BOT is tying you up!"
+ infraction = "Wevel THREAT_LEVEL infwactwion awert!!!"
+ attack_one = "BOT shoves CRIMINAL onto a table!"
+ attack_two = "BOT shoves you onto a table!"
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index 479ad1ee09..bdaf018333 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -34,6 +34,7 @@
var/arrest_type = FALSE //If true, don't handcuff
var/obj/item/clothing/head/bot_hat
+ var/datum/beepsky_fashion/stored_fashion
//emotes (BOT is replaced with bot name, CRIMINAL with criminal name, THREAT_LEVEL with threat level)
var/death_emote = "BOT blows apart!"
@@ -73,7 +74,7 @@
emote = infraction
if("TAUNT")
emote = taunt
- if("ATTACK_PME")
+ if("ATTACK_ONE")
emote = attack_one
if("ATTACK_TWO")
emote = attack_two
@@ -249,20 +250,22 @@ Auto Patrol: []"},
/mob/living/simple_animal/bot/secbot/proc/update_beepsky_fluff()
var/datum/beepsky_fashion/BF = new bot_hat.beepsky_fashion
+ stored_fashion = BF
if(BF)
BF.apply(src)
/mob/living/simple_animal/bot/secbot/regenerate_icons()
..()
if(bot_hat)
- var/datum/beepsky_fashion/fashion = new bot_hat.beepsky_fashion
- if(!fashion.obj_icon_state)
- fashion.obj_icon_state = bot_hat.icon_state
- if(!fashion.obj_alpha)
- fashion.obj_alpha = bot_hat.alpha
- if(!fashion.obj_color)
- fashion.obj_color = bot_hat.color
- add_overlay(fashion.get_overlay())
+ if(!stored_fashion)
+ stored_fashion = new bot_hat.beepsky_fashion
+ if(!stored_fashion.obj_icon_state)
+ stored_fashion.obj_icon_state = bot_hat.icon_state
+ if(!stored_fashion.obj_alpha)
+ stored_fashion.obj_alpha = bot_hat.alpha
+ if(!stored_fashion.obj_color)
+ stored_fashion.obj_color = bot_hat.color
+ add_overlay(stored_fashion.get_overlay())
/mob/living/simple_animal/bot/secbot/emag_act(mob/user)
. = ..()
@@ -323,16 +326,22 @@ Auto Patrol: []"},
/mob/living/simple_animal/bot/secbot/proc/stun_attack(mob/living/carbon/C)
var/judgement_criteria = judgement_criteria()
- playsound(src, 'sound/weapons/egloves.ogg', 50, TRUE, -1)
icon_state = "secbot-c"
addtimer(CALLBACK(src, /atom/.proc/update_icon), 2)
var/threat = 5
if(ishuman(C))
+ if(stored_fashion)
+ stored_fashion.stun_attack(C)
+ if(stored_fashion.stun_sound)
+ playsound(src, stun_sound, 50, TRUE, -1)
+ else
+ playsound(src, 'sound/weapons/egloves.ogg', 50, TRUE, -1)
C.stuttering = 5
C.DefaultCombatKnockdown(100)
var/mob/living/carbon/human/H = C
threat = H.assess_threat(judgement_criteria, weaponcheck=CALLBACK(src, .proc/check_for_weapons))
else
+ playsound(src, 'sound/weapons/egloves.ogg', 50, TRUE, -1)
C.DefaultCombatKnockdown(100)
C.stuttering = 5
threat = C.assess_threat(judgement_criteria, weaponcheck=CALLBACK(src, .proc/check_for_weapons))
From 8e2c76db7c004c3d998c87448348e776322d880e Mon Sep 17 00:00:00 2001
From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Tue, 21 Jul 2020 16:42:59 +0100
Subject: [PATCH 06/23] two more
---
code/datums/beepsky_fashion.dm | 25 ++++++++++++++++++-
.../mob/living/simple_animal/bot/secbot.dm | 2 +-
2 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/code/datums/beepsky_fashion.dm b/code/datums/beepsky_fashion.dm
index f8a72890b3..201ab86457 100644
--- a/code/datums/beepsky_fashion.dm
+++ b/code/datums/beepsky_fashion.dm
@@ -108,4 +108,27 @@
capture_two = "BOT is tying you up!"
infraction = "Wevel THREAT_LEVEL infwactwion awert!!!"
attack_one = "BOT shoves CRIMINAL onto a table!"
- attack_two = "BOT shoves you onto a table!"
\ No newline at end of file
+ attack_two = "BOT shoves you onto a table!"
+
+/datum/beepsky_fashion/cake //nothing else. it's just beepsky. with a cake on his head.
+ obj_icon_state = "cake"
+
+/datum/beepsky_fashion/captain
+ obj_icon_state = "captain"
+ name = "Captainsky"
+ desc = "The real captain of this station."
+ capture_one = "BOT is lecturing CRIMINAL on why he is the captain!"
+ capture_two = "BOT is lecturing you on why he is the captain!"
+ infraction = "Level THREAT_LEVEL greytider detected."
+ attack_one = "BOT beats CRIMINAL with the chain of command!"
+ attack_two = "BOT beats you with the chain of command!"
+
+/datum/beepsky_fashion/king
+ obj_icon_state = "king"
+ name = "King Beepsky"
+ desc = "He who has ascended to bare the right of king, sits atop the throne."
+ capture_one = "BOT is calling the guards onto CRIMINAL!"
+ capture_two = "BOT is calling the guards onto you!"
+ infraction = "Treason of level THREAT_LEVEL detected!"
+ attack_one = "BOT strikes CRIMINAL with his kingly authority!"
+ attack_two = "BOT strikes you with his kingly authority!"
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index bdaf018333..729bb4d33c 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -333,7 +333,7 @@ Auto Patrol: []"},
if(stored_fashion)
stored_fashion.stun_attack(C)
if(stored_fashion.stun_sound)
- playsound(src, stun_sound, 50, TRUE, -1)
+ playsound(src, stored_fashion.stun_sound, 50, TRUE, -1)
else
playsound(src, 'sound/weapons/egloves.ogg', 50, TRUE, -1)
C.stuttering = 5
From 0942b4679650a468d84f47e3c9d6acd7f17bf51f Mon Sep 17 00:00:00 2001
From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Tue, 21 Jul 2020 18:43:58 +0100
Subject: [PATCH 07/23] more fashions
---
code/datums/beepsky_fashion.dm | 26 ++++++++----------
.../mob/living/simple_animal/bot/secbot.dm | 16 +++++++++++
icons/mob/secbot_head.dmi | Bin 370 -> 1001 bytes
3 files changed, 28 insertions(+), 14 deletions(-)
diff --git a/code/datums/beepsky_fashion.dm b/code/datums/beepsky_fashion.dm
index 201ab86457..bbf3812770 100644
--- a/code/datums/beepsky_fashion.dm
+++ b/code/datums/beepsky_fashion.dm
@@ -30,40 +30,28 @@
//assume name and description is always set, because otherwise, what would be the point of beepsky fashion?
beepers.name = name
beepers.desc = desc
+
+ //set each variable in beepsky if its defined here, otherwise set it to its initial value just in case
if(death_emote)
beepers.death_emote = death_emote
- else
- beepers.death_emote = initial(beepers.death_emote)
if(capture_one)
beepers.capture_one = capture_one
- else
- beepers.capture_one = initial(beepers.capture_one)
if(capture_two)
beepers.capture_two = capture_two
- else
- beepers.capture_two = initial(beepers.capture_two)
if(infraction)
beepers.infraction = infraction
- else
- beepers.infraction = initial(beepers.infraction)
if(infraction)
beepers.taunt = taunt
- else
- beepers.taunt = initial(beepers.taunt)
if(attack_one)
beepers.attack_one = attack_one
- else
- beepers.attack_one = initial(beepers.attack_one)
if(attack_two)
beepers.attack_two = attack_two
- else
- beepers.attack_two = initial(beepers.attack_two)
/datum/beepsky_fashion/proc/stun_attack(mob/living/carbon/C) //fired when beepsky does a stun attack with the fashion worn, for sounds/overlays/etc
return
@@ -132,3 +120,13 @@
infraction = "Treason of level THREAT_LEVEL detected!"
attack_one = "BOT strikes CRIMINAL with his kingly authority!"
attack_two = "BOT strikes you with his kingly authority!"
+
+/datum/beepsky_fashion/pirate
+ obj_icon_state = "pirate"
+ name = "Beepsbeard the Pirate"
+ desc = "Sailor of the seven seas, all sea-faring bots fear the one known as Beepsbeard."
+ capture_one = "BOT is making CRIMINAL walk the plank!"
+ capture_two = "BOT is making you walk the plank!"
+ infraction = "Enemy vessel spotted with threat level THREAT_LEVEL!"
+ attack_one = "BOT strikes CRIMINAL with his cutlass!"
+ attack_two = "BOT strikes you with his cutlass!"
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index 729bb4d33c..752644dbb5 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -45,6 +45,8 @@
var/attack_one = "BOT has stunned CRIMINAL!"
var/attack_two = "BOT has stunned you!"
+ var/stun_sound =
+
/mob/living/simple_animal/bot/secbot/beepsky
name = "Officer Beep O'sky"
desc = "It's Officer Beep O'sky! Powered by a potato and a shot of whiskey."
@@ -240,6 +242,7 @@ Auto Patrol: []"},
if(bot_hat)
to_chat("\[src] already has a hat, and the laws of physics disallow him from wearing a second!")
if(H.beepsky_fashion)
+ to_chat(user, "You set [H] on [src]'s head.")
bot_hat = H
H.forceMove(src)
update_beepsky_fluff()
@@ -289,6 +292,19 @@ Auto Patrol: []"},
if(!on)
return
if(iscarbon(A))
+ if(bot_hat)
+ to_chat(A, "You knock [bot_hat] off of [src]'s head!")
+ bot_hat.forceMove(get_turf(src))
+ //reset all emotes/sounds
+ death_emote = initial(death_emote)
+ capture_one = initial(capture_one)
+ capture_two = initial(capture_two)
+ infraction = initial(infraction)
+ taunt = initial(taunt)
+ attack_one = initial(attack_one)
+ attack_two = initial(attack_two)
+ bot_hat = null
+ qdel(stored_fashion)
var/mob/living/carbon/C = A
if(CHECK_MOBILITY(C, MOBILITY_MOVE|MOBILITY_USE|MOBILITY_STAND) || arrest_type) // CIT CHANGE - makes sentient secbots check for canmove rather than !isstun.
stun_attack(A)
diff --git a/icons/mob/secbot_head.dmi b/icons/mob/secbot_head.dmi
index 5e1e57f71c7c9019fce3c3c837687157d6967430..18ad326684b381b7d8639feddd65e248030d9850 100644
GIT binary patch
delta 919
zcmV;I18Ds60_g{TiBL{Q4GJ0x0000DNk~Le0002M0001>2m=5B0B!b@ZvX%Qdr(YN
zMZmzo11@i{m;ehxl?+Fn11v;QMgs*+b_H06DOQ>XQNVCv1i6lLta(?XaZ+_&PgX@b
zlV(aREG&(UjQ{`u|Ns9%K|x3;AQl!DLPA1GNlE+fs_UCNAMeE-T3T9{X*rmfnBU*u
zz`(%b=wLwymxIs;Vd`Cxfyy=&QGE#lnP_unFeQ1QS%f?C&h&
zGsePpxtpW+EUiNS1+r(yE4(edItW0%Tpen0C!fL%+kZN|0UObve^*b(sPu!VU|0F1^;A=7CY;K0=D^l}~nqKJw
zWu|+&IEHw1zMZmBu-Smebt!K^1EYZf!#6{QJE;unAOEdp;1v@R?-E&f;q{lb?>En8
zPq-tqRO2Xzy-fO3c0+A@jd%?p_OQ
Date: Tue, 21 Jul 2020 18:48:17 +0100
Subject: [PATCH 08/23] sprites
---
icons/mob/secbot_head.dmi | Bin 1001 -> 1003 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
diff --git a/icons/mob/secbot_head.dmi b/icons/mob/secbot_head.dmi
index 18ad326684b381b7d8639feddd65e248030d9850..6a41392bdff6f6f8080086e40bf6548f8b009f2d 100644
GIT binary patch
delta 39
xcmV+?0NDTO2kQrrxB-)qxrG+t{t{ejloee4T)<%m03MK9)Ku6ZSF=(9mjZ2^5dZ)H
delta 37
vcmV+=0NVfS2k8fpxB-!oxrG!|giC?4f~%hkIN$*N%vqdUGazlVQ~{R)N=Fc1
From 5c88253f938bce38d056ce7a1b0f19c524396fa7 Mon Sep 17 00:00:00 2001
From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Tue, 21 Jul 2020 22:58:13 +0100
Subject: [PATCH 09/23] lots more hats
---
code/datums/beepsky_fashion.dm | 86 +++++++++++++++++-
code/modules/clothing/head/collectable.dm | 7 ++
code/modules/clothing/head/hardhat.dm | 1 +
code/modules/clothing/head/jobs.dm | 4 +
code/modules/clothing/head/misc.dm | 16 +++-
code/modules/clothing/head/misc_special.dm | 3 +
.../mob/living/simple_animal/bot/bot.dm | 5 +-
.../mob/living/simple_animal/bot/secbot.dm | 25 +++--
icons/mob/secbot_head.dmi | Bin 1003 -> 1402 bytes
9 files changed, 133 insertions(+), 14 deletions(-)
diff --git a/code/datums/beepsky_fashion.dm b/code/datums/beepsky_fashion.dm
index bbf3812770..25b9a750aa 100644
--- a/code/datums/beepsky_fashion.dm
+++ b/code/datums/beepsky_fashion.dm
@@ -8,7 +8,8 @@
var/obj_alpha
var/obj_color
- var/stun_sound //sound that replaces the stun attack when set
+ var/list/stun_sounds //sound that replaces the stun attack when set
+ var/ignore_sound = FALSE //whether to ignore sounds entirely or not
//emotes
var/death_emote
@@ -18,6 +19,9 @@
var/taunt
var/attack_one
var/attack_two
+ var/patrol_emote
+ var/list/arrest_texts //first is for not-cuffing, second is for cuffing
+ var/arrest_emote
/datum/beepsky_fashion/proc/get_overlay(var/dir)
if(icon_file && obj_icon_state)
@@ -53,6 +57,15 @@
if(attack_two)
beepers.attack_two = attack_two
+ if(patrol_emote)
+ beepers.patrol_emote = patrol_emote
+
+ if(arrest_texts)
+ beepers.arrest_texts = arrest_texts
+
+ if(arrest_emote)
+ beepers.arrest_emote = arrest_emote
+
/datum/beepsky_fashion/proc/stun_attack(mob/living/carbon/C) //fired when beepsky does a stun attack with the fashion worn, for sounds/overlays/etc
return
@@ -67,6 +80,15 @@
infraction = "Magical disturbance of magnitude THREAT_LEVEL detected!"
attack_one = "BOT casts magic missile on CRIMINAL!"
attack_two = "BOT casts magic missile on you!"
+ patrol_emote = "Beginning search for magical disturbances."
+ arrest_emote = "ARREST_TYPE level THREAT_LEVEL magical practitioner CRIMINAL in LOCATION."
+ stun_sounds = list('sound/magic/lightningbolt.ogg',
+ 'sound/magic/fireball.ogg',
+ 'sound/weapons/zapbang.ogg',
+ 'sound/magic/knock.ogg',
+ 'sound/magic/fleshtostone.ogg',
+ 'sound/effects/magic.ogg',
+ 'sound/magic/disintegrate.ogg')
/datum/beepsky_fashion/cowboy
obj_icon_state = "cowboy"
@@ -77,6 +99,12 @@
infraction = "Outlaws with a bounty of THREAT_LEVEL000 space dollars detected!"
attack_one = "BOT unloads his revolver onto CRIMINAL!"
attack_two = "BOT unloads his revolver onto you!"
+ patrol_emote = "Engaging bounty hunting protocols."
+ arrest_emote = "ARREST_TYPE outlaw CRIMINAL with a bounty of THREAT_LEVEL000 in LOCATION."
+ stun_sounds = list('sound/weapons/Gunshot.ogg',
+ 'sound/weapons/Gunshot2.ogg',
+ 'sound/weapons/Gunshot3.ogg',
+ 'sound/weapons/Gunshot4.ogg')
/datum/beepsky_fashion/chef
obj_icon_state = "chef"
@@ -84,8 +112,13 @@
desc = "Cooking up the finest foods the station has ever seen."
death_emote = "Mamma-mia!"
infraction = "Grade THREAT_LEVEL prosciutto detected!"
- attack_one = "BOT slices wildly with a cleaver towards CRIMINAL!"
- attack_two = "BOT slices wildly with a cleaver towards you!"
+ attack_one = "BOT CQCs CRIMINAL!"
+ attack_two = "BOT CQCs you!"
+ patrol_emote = "Beginning search for the bad prosciutto."
+ arrest_texts = list("Frying", "Grilling") //any good secoff knows the difference
+ arrest_emote = "ARREST_TYPE grade THREAT_LEVEL prosciutto CRIMINAL in LOCATION."
+ stun_sounds = list('sound/weapons/cqchit1.ogg',
+ 'sound/weapons/cqchit2.ogg')
/datum/beepsky_fashion/cat
obj_icon_state = "cat"
@@ -97,9 +130,25 @@
infraction = "Wevel THREAT_LEVEL infwactwion awert!!!"
attack_one = "BOT shoves CRIMINAL onto a table!"
attack_two = "BOT shoves you onto a table!"
+ patrol_emote = "Enwgagwing patwol mwode."
+ arrest_texts = list("Dwetwaining", "Awwesting")
+ arrest_emote = "ARREST_TYPE wevel THREAT_LEVEL scwumbwag CRIMINAL in LOCATION. Nya."
+ ignore_sound = TRUE //we instead make the stunned person fire the nya emote
+
+/datum/beepsky_fashion/cat/stun_attack(var/mob/living/carbon/C) //makes a fake table under you on hit, makes cat people nya when hit
+ if(iscatperson(C))
+ C.emote("nya")
+ var/turf/target_turf = get_turf(C)
+ if(target_turf && !(C.lying)) //slams you on a table if you're standing up
+ playsound(src, 'sound/weapons/tap.ogg', 50, 1)
+ var/obj/effect/overlay_holder = new(target_turf)
+ var/image/table_overlay = image('icons/obj/smooth_structures/table.dmi', "table")
+ overlay_holder.add_overlay(table_overlay)
+ QDEL_IN(1, overlay_holder)
/datum/beepsky_fashion/cake //nothing else. it's just beepsky. with a cake on his head.
obj_icon_state = "cake"
+ desc = "It's a secbot, wearing a cake on his head!"
/datum/beepsky_fashion/captain
obj_icon_state = "captain"
@@ -110,6 +159,10 @@
infraction = "Level THREAT_LEVEL greytider detected."
attack_one = "BOT beats CRIMINAL with the chain of command!"
attack_two = "BOT beats you with the chain of command!"
+ patrol_emote = "Uselessness protocols engaged."
+ arrest_texts = list("Demoting", "Firing")
+ arrest_emote = "ARREST_TYPE level THREAT_LEVEL lesser crewmember CRIMINAL in LOCATION."
+ stun_sounds = list('sound/weapons/chainhit.ogg')
/datum/beepsky_fashion/king
obj_icon_state = "king"
@@ -120,6 +173,13 @@
infraction = "Treason of level THREAT_LEVEL detected!"
attack_one = "BOT strikes CRIMINAL with his kingly authority!"
attack_two = "BOT strikes you with his kingly authority!"
+ patrol_emote = "Searching for peasants to beat up."
+ arrest_texts = list("Knighting", "Executing")
+ arrest_emote = "ARREST_TYPE level THREAT_LEVEL peasant CRIMINAL in LOCATION."
+ stun_sounds = list('sound/weapons/punch1.ogg',
+ 'sound/weapons/punch2.ogg',
+ 'sound/weapons/punch3.ogg',
+ 'sound/weapons/punch4.ogg')
/datum/beepsky_fashion/pirate
obj_icon_state = "pirate"
@@ -130,3 +190,23 @@
infraction = "Enemy vessel spotted with threat level THREAT_LEVEL!"
attack_one = "BOT strikes CRIMINAL with his cutlass!"
attack_two = "BOT strikes you with his cutlass!"
+ patrol_emote = "Searching for enemy vessels to board."
+ arrest_texts = list("Boarding" "Sinking")
+ arrest_emote = "ARREST_TYPE level THREAT_LEVEL vessel CRIMINAL in LOCATION."
+ stun_sounds = list('sound/weapons/bladeslice.ogg')
+
+/datum/beepsky_fashion/engineer
+ obj_icon_state = "engineer"
+ desc = "He fixes criminals with a wrench to the face."
+ capture_one = "BOT is tying CRIMINAL up!"
+ capture_two = "BOT is tying you up!"
+ infraction = "Structural integrity issue spotted with threat level THREAT_LEVEL"
+ attack_one = "BOT strikes CRIMINAL with his wrench!"
+ attack_two = "BOT strikes you with his wrench!"
+ arrest_texts = list("Fixing", "Repairing")
+ arrest_emote = "ARREST_TYPE level THREAT_LEVEL structural issue in LOCATION"
+ stun_sounds = list('sound/weapons/genhit.ogg')
+
+/datum/beepsky_fashion/tophat
+ obj_icon_state = "tophat"
+ desc = "It's a secbot, wearing a top hat! How fancy."
\ No newline at end of file
diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm
index 71b3e2e144..20cb7cc824 100644
--- a/code/modules/clothing/head/collectable.dm
+++ b/code/modules/clothing/head/collectable.dm
@@ -27,7 +27,9 @@
icon_state = "chef"
item_state = "chef"
dynamic_hair_suffix = ""
+
dog_fashion = /datum/dog_fashion/head/chef
+ beepsky_fashion = /datum/beepsky_fashion/chef
/obj/item/clothing/head/collectable/paper
name = "collectable paper hat"
@@ -42,6 +44,8 @@
icon_state = "tophat"
item_state = "that"
+ beepsky_fashion = /datum/beepsky_fashion/tophat
+
/obj/item/clothing/head/collectable/captain
name = "collectable captain's hat"
desc = "A collectable hat that'll make you look just like a real comdom!"
@@ -49,6 +53,7 @@
item_state = "caphat"
dog_fashion = /datum/dog_fashion/head/captain
+ beepsky_fashion = /datum/beepsky_fashion/captain
/obj/item/clothing/head/collectable/police
name = "collectable police officer's hat"
@@ -91,6 +96,7 @@
item_state = "pirate"
dog_fashion = /datum/dog_fashion/head/pirate
+ beepsky_fashion = /datum/beepsky_fashion/pirate
/obj/item/clothing/head/collectable/kitty
name = "collectable kitty ears"
@@ -100,6 +106,7 @@
dynamic_hair_suffix = ""
dog_fashion = /datum/dog_fashion/head/kitty
+ beepsky_fashion = /datum/beepsky_fashion/cat
/obj/item/clothing/head/collectable/rabbitears
name = "collectable rabbit ears"
diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm
index 80d0b7c8a8..10ea027610 100644
--- a/code/modules/clothing/head/hardhat.dm
+++ b/code/modules/clothing/head/hardhat.dm
@@ -15,6 +15,7 @@
dynamic_hair_suffix = "+generic"
dog_fashion = /datum/dog_fashion/head
+ beepsky_fashion = /datum/beepsky_fashion/hardhat
/obj/item/clothing/head/hardhat/ComponentInitialize()
diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm
index 638a0c2f23..5af694ea1b 100644
--- a/code/modules/clothing/head/jobs.dm
+++ b/code/modules/clothing/head/jobs.dm
@@ -13,7 +13,9 @@
strip_delay = 10
equip_delay_other = 10
dynamic_hair_suffix = ""
+
dog_fashion = /datum/dog_fashion/head/chef
+ beepsky_fashion = /datum/beepsky_fashion/chef
/obj/item/clothing/head/chefhat/suicide_act(mob/user)
user.visible_message("[user] is donning [src]! It looks like [user.p_theyre()] trying to become a chef.")
@@ -33,7 +35,9 @@
flags_inv = 0
armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
strip_delay = 60
+
dog_fashion = /datum/dog_fashion/head/captain
+ beepsky_fashion = /datum/beepsky_fashion/captain
//Captain: This is no longer space-worthy
/obj/item/clothing/head/caphat/parade
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
index 73675257e4..5e6124b23d 100644
--- a/code/modules/clothing/head/misc.dm
+++ b/code/modules/clothing/head/misc.dm
@@ -20,9 +20,11 @@
desc = "It's an amish looking hat."
icon_state = "tophat"
item_state = "that"
- dog_fashion = /datum/dog_fashion/head
throwforce = 1
+ dog_fashion = /datum/dog_fashion/head
+ beepsky_fashion = /datum/beepsky_fashion/tophat
+
/obj/item/clothing/head/canada
name = "striped red tophat"
desc = "It smells like fresh donut holes. / Il sent comme des trous de beignets frais."
@@ -126,7 +128,9 @@
desc = "Yarr."
icon_state = "pirate"
item_state = "pirate"
+
dog_fashion = /datum/dog_fashion/head/pirate
+ beepsky_fashion = /datum/beepsky_fashion/pirate
/obj/item/clothing/head/pirate/captain
name = "pirate captain hat"
@@ -205,6 +209,7 @@
item_state = "sombrero"
desc = "You can practically taste the fiesta."
flags_inv = HIDEHAIR
+
dog_fashion = /datum/dog_fashion/head/sombrero
/obj/item/clothing/head/sombrero/green
@@ -213,6 +218,7 @@
item_state = "greensombrero"
desc = "As elegant as a dancing cactus."
flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
+
dog_fashion = null
/obj/item/clothing/head/sombrero/shamebrero
@@ -220,6 +226,7 @@
icon_state = "shamebrero"
item_state = "shamebrero"
desc = "Once it's on, it never comes off."
+
dog_fashion = null
/obj/item/clothing/head/sombrero/shamebrero/Initialize()
@@ -248,6 +255,7 @@
item_state = "that"
cold_protection = HEAD
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
+
dog_fashion = /datum/dog_fashion/head/santa
/obj/item/clothing/head/jester
@@ -286,6 +294,8 @@
resistance_flags = FIRE_PROOF
dynamic_hair_suffix = ""
+ beepsky_fashion = /datum/beepsky_fashion/king
+
/obj/item/clothing/head/crown/fancy
name = "magnificent crown"
desc = "A crown worn by only the highest emperors of the land space."
@@ -391,7 +401,9 @@
name = "cowboy hat"
desc = "A standard brown cowboy hat, yeehaw."
icon_state = "cowboyhat"
- item_state= "cowboyhat"
+ item_state = "cowboyhat"
+
+ beepsky_fashion = /datum/beepsky_fashion/cowboy
/obj/item/clothing/head/cowboyhat/black
name = "black cowboy hat"
diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm
index 54561c8a24..1d9c3dd325 100644
--- a/code/modules/clothing/head/misc_special.dm
+++ b/code/modules/clothing/head/misc_special.dm
@@ -50,6 +50,8 @@
flags_cover = HEADCOVERSEYES
heat = 1000
+ beepsky_fashion = /datum/beepsky_fashion/cake
+
/obj/item/clothing/head/hardhat/cakehat/process()
var/turf/location = src.loc
if(ishuman(location))
@@ -131,6 +133,7 @@
dynamic_hair_suffix = ""
dog_fashion = /datum/dog_fashion/head/kitty
+ beepsky_fashion = /datum/beepsky_fashion/cat
/obj/item/clothing/head/kitty/equipped(mob/living/carbon/human/user, slot)
if(ishuman(user) && slot == SLOT_HEAD)
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index a347b04e50..ac995bdeaf 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -102,6 +102,9 @@
var/can_salute = TRUE
var/salute_delay = 60 SECONDS
+ //emotes/speech stuff
+ var/patrol_emote = "Engaging patrol mode."
+
/mob/living/simple_animal/bot/proc/get_mode()
if(client) //Player bots do not have modes, thus the override. Also an easy way for PDA users/AI to know when a bot is a player.
if(paicard)
@@ -628,7 +631,7 @@ Pass a positive integer as an argument to override a bot's default speed.
return
mode = BOT_PATROL
else // no patrol target, so need a new one
- speak("Engaging patrol mode.")
+ speak(patrol_emote)
find_patrol_target()
tries++
return
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index 752644dbb5..e2ab01b7bd 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -44,8 +44,8 @@
var/taunt = "BOT points at CRIMINAL!"
var/attack_one = "BOT has stunned CRIMINAL!"
var/attack_two = "BOT has stunned you!"
-
- var/stun_sound =
+ var/list/arrest_texts = list("Detaining", "Arresting")
+ var/arrest_emote = "ARREST_TYPE level THREAT_LEVEL scumbag CRIMINAL in LOCATION."
/mob/living/simple_animal/bot/secbot/beepsky
name = "Officer Beep O'sky"
@@ -63,7 +63,7 @@
resize = 0.8
update_transform()
-/mob/living/simple_animal/bot/secbot/proc/process_emote(var/emote_type, var/atom/criminal, var/threat)
+/mob/living/simple_animal/bot/secbot/proc/process_emote(var/emote_type, var/atom/criminal, var/threat, var/arrest = -1, var/location)
var/emote = "The continuity of space itself collapses around [src]. You should probably report that to someone higher up."
switch(emote_type)
if("DEATH")
@@ -80,16 +80,22 @@
emote = attack_one
if("ATTACK_TWO")
emote = attack_two
+ if("ARREST")
+ emote = arrest_emote
//now replace pieces of the text with the information we have
- if(!taunt)
+ if(emote_type != "TAUNT" && emote_type != "ARREST")
emote = replacetext(emote, "BOT", name)
else
- emote = replacetext(emote, "BOT", "[name]") //needs to be bold if its a taunt
+ emote = replacetext(emote, "BOT", "[name]") //needs to be bold if its a taunt or an arrest text
if(criminal)
emote = replacetext(emote, "CRIMINAL", criminal.name)
if(threat)
emote = replacetext(emote, "THREAT_LEVEL", threat)
+ if(arrest > -1)
+ emote = replacetext(emote, "ARREST_TYPE", arrest_texts[arrest + 1])
+ if(location)
+ emote = replacetext(emote, "LOCATION", location)
return emote
/mob/living/simple_animal/bot/secbot/beepsky/explode()
@@ -303,6 +309,9 @@ Auto Patrol: []"},
taunt = initial(taunt)
attack_one = initial(attack_one)
attack_two = initial(attack_two)
+ arrest_texts = initial(arrest_texts)
+ arrest_emote = initial(arrest_emote)
+ patrol_emote = initial(patrol_emote)
bot_hat = null
qdel(stored_fashion)
var/mob/living/carbon/C = A
@@ -348,8 +357,8 @@ Auto Patrol: []"},
if(ishuman(C))
if(stored_fashion)
stored_fashion.stun_attack(C)
- if(stored_fashion.stun_sound)
- playsound(src, stored_fashion.stun_sound, 50, TRUE, -1)
+ if(stored_fashion.stun_sounds && !stored_fashion.ignore_sound)
+ playsound(src, pick(stored_fashion.stun_sounds), 50, TRUE, -1)
else
playsound(src, 'sound/weapons/egloves.ogg', 50, TRUE, -1)
C.stuttering = 5
@@ -365,7 +374,7 @@ Auto Patrol: []"},
log_combat(src,C,"stunned")
if(declare_arrests)
var/area/location = get_area(src)
- speak("[arrest_type ? "Detaining" : "Arresting"] level [threat] scumbag [C] in [location].", radio_channel)
+ speak(process_emote("ARREST", C, threat, arrest_type, location), radio_channel)
C.visible_message("[process_emote("ATTACK_ONE", C)]",\
"[process_emote("ATTACK_TWO", C)]")
diff --git a/icons/mob/secbot_head.dmi b/icons/mob/secbot_head.dmi
index 6a41392bdff6f6f8080086e40bf6548f8b009f2d..09b28cad68fba0ef223d895c84ae0c3774ed1517 100644
GIT binary patch
delta 1375
zcmV-l1)%!t2l@&niBL{Q4GJ0x0000DNk~Le0002s0002s2m=5B04?*H(*OVfz>y^`
ze=IC4jg5@}005(LQvd(|K|w(l78XK6LP<$UbzV#X8|I;G>e=q>_@4@Ws>~L^!l$4Y+zrPJ`Zot66mXSx@
z00001bW%=J06^y0W&i*HuzFNjbVOxyV{&P5bZKvH004NLjgh|&f-n%q=k_TYSdCF}
zbukdbAn$O}gI>^*pb@68RW;@3e{Wz;f3(auctijI1FT6z
zK~#90?c94)+CUV>;Xt?-BBekte*#)TMcY!b_v`onSltbvZQb2hjWN>x9;Y*o@7d%W
z6Q+NhX`=`L007tqC8OXL%K2Wt6j$<{Q1oA|)~eME=hZVR#c?HG<(?|_jKjI=zgn+1
z>UDpGoIfgU`gfw%`NwU-JhK|buwO?zuJDtZx<=t-5>-7@<1g0Q)k^~CW
zeyzQ3z}G^)x#_;wHD5{JGk_@=42FY&w?OXa+MTDyv*+FhbIiN_q`w)k-|c$}2E*ZS
z;3ovW8d(hPWP44Hc-S9m`tPA7?{M7zU?&s3mk3uc%
zM&odY;=ITwd%g5);tJLNP44H?`;T__%^z=jqup^Jmgi+Y=~>SC0ZipR*0T9FNB@{R4($U7+&GivI=x0000000000_b9ku
zyMsLJ;K23m-3sm3vgUs@?V4bE@xz0I>CMl}>!%Hd_G=mQ*&k16cD3Mex*2OaJ-qpO
zdHu9Ov0uxQAI)YLPiQtfx>|6!ndWo}1tB`O?#YiI>ZzH4S!c}8-(@%hW=;05x|
zqc7oD<$8gr{`=Gio`(mVZER^Ci2;wkUVLq3ZUy&iUoUNCF86ESzHfYU9)IY$^5f^F
zA6u9M000000002~O&RxZMX$%Sq8rS0z@qnecd-8pF)Dh0cNhD=prZG8+4p}!(fd30
hf9(GN004l8?HsI002ovPDHLkV1o1_ua^J-
delta 973
zcmV;;12X*j3hM_YiBL{Q4GJ0x0000DNk~Le0002M0001>2m=5B0B!b@ZvX%QdyyqB
zf1`0ybzVsi
zmuWeen3&(+-@w4Y;^^$l&CU3He73Ev|Ej7eC@2HyR89Z@00DGTPE!Ct=GbNc005JE
zR9JLGWpiV4X>fFDZ*Bkpc$`yKaB_9`fAmvu@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6#
za*U0*I5Sc+(=$pSoZ^zil2jm5sXVhPu_#4}i!&v&s2HS+i!-e#F*g;&Hbf{(PAn)%
z%*-RKF26h}zmlM`g3KZyi=eXX%)E5MR%WE85#jz4TxygRT>V_YVFv&nkXqDKf7l^c
z0007iNkldQ#3$wV7|~pI|yI3VVQTh8_Q1imI3W#e6Pqk5_B#+d)x`(!#MT
zc#nwtuu1S9A5|~=i}^G+UD6IY4Lzms>6i5%>fcQ}+LwRqRejg~00000e*ggZzGj2@
zRpavi2O>V3&F4R^7?=0+@%XG=Ahbl^ad|(l;(}q#06oXm{k)71=Ck;B+;3do
z&x`nFh1ePGGp_FEJKx^}00000000Ou=C&+5B&d4Xznii&i^al(m#_)u&IA)wz3lHS
z<1@y>cDhArU#1ETXv}K0e_pKu394T9Z|2*?W?T;HV7RPIby=V)t3bkPyp!>NZ~2_ycoS5;?B7gSZ#UaIya5~CY(wFyGRB=z
zds6R=FToxEmM=lo%l>Y{`?{|0!yAZ)0RR910002s%hb)|H@}$_fA{kuzI#|Suicg6
z@_t^%cMB)nzwfxZpO^97gA*B`=eWFpSMlB1)#3mE000000D!mld*9pds9=}A3F71-?cvg005l7N`*=1^kyCA00000NkvXXu0mjfm`d5^
From 3a520bba3f35401a6a036476e4cdf830e9f7f87a Mon Sep 17 00:00:00 2001
From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Tue, 21 Jul 2020 23:45:04 +0100
Subject: [PATCH 10/23] more hats
---
code/datums/beepsky_fashion.dm | 51 +++++++++++++++++++-------
code/modules/clothing/head/hardhat.dm | 2 +-
code/modules/clothing/head/misc.dm | 3 ++
icons/mob/secbot_head.dmi | Bin 1402 -> 1536 bytes
4 files changed, 41 insertions(+), 15 deletions(-)
diff --git a/code/datums/beepsky_fashion.dm b/code/datums/beepsky_fashion.dm
index 25b9a750aa..3e81a3122c 100644
--- a/code/datums/beepsky_fashion.dm
+++ b/code/datums/beepsky_fashion.dm
@@ -1,6 +1,6 @@
//similar to dog_fashion, but for beepsky, who has far more refined fashion tastes
/datum/beepsky_fashion
- var/name
+ var/name //not setting the name and desc makes them go to the default
var/desc
var/icon_file = 'icons/mob/secbot_head.dmi'
@@ -11,17 +11,23 @@
var/list/stun_sounds //sound that replaces the stun attack when set
var/ignore_sound = FALSE //whether to ignore sounds entirely or not
- //emotes
- var/death_emote
- var/capture_one
- var/capture_two
- var/infraction
- var/taunt
- var/attack_one
- var/attack_two
- var/patrol_emote
+ //emotes (don't set them if you want the default value)
+ var/death_emote //what is said when beepsky dies
+ var/capture_one //what is said when cuffing someone
+ var/capture_two //what is said when cuffing someone, directly to the person being cuffed
+ var/infraction //the level of threat detected
+ var/taunt // beepsky pointing at a criminal
+ var/attack_one //text when attacking criminal
+ var/attack_two //text when attacking criminal, but directly to the criminal
+ var/patrol_emote //engaging patrol text
var/list/arrest_texts //first is for not-cuffing, second is for cuffing
- var/arrest_emote
+ var/arrest_emote //text stating that you're cuffing some criminal C with a threat of level X in location Y
+
+ //for reference, the following words are replaced when processed before speech:
+ //LOCATION = the location passed, if any (this is only used by arrest_emote)
+ //CRIMINAL = the name of the criminal (this is used by everything but patrol_emote and infraction)
+ //BOT = the name of the bot (this can be used on any of the emotes)
+ //THREAT_LEVEL = the level of the threat detected (can be used on arrest_emote and infraction)
/datum/beepsky_fashion/proc/get_overlay(var/dir)
if(icon_file && obj_icon_state)
@@ -48,7 +54,7 @@
if(infraction)
beepers.infraction = infraction
- if(infraction)
+ if(taunt)
beepers.taunt = taunt
if(attack_one)
@@ -78,6 +84,7 @@
capture_one = "BOT is casting cable ties on CRIMINAL!"
capture_two = "BOT is casting cable ties on you!"
infraction = "Magical disturbance of magnitude THREAT_LEVEL detected!"
+ taunt = "BOT points his staff towards CRIMINAL!"
attack_one = "BOT casts magic missile on CRIMINAL!"
attack_two = "BOT casts magic missile on you!"
patrol_emote = "Beginning search for magical disturbances."
@@ -97,6 +104,7 @@
capture_one = "BOT is tying CRIMINAL up!"
capture_two = "BOT is tying you up!"
infraction = "Outlaws with a bounty of THREAT_LEVEL000 space dollars detected!"
+ taunt = "BOT aims his revolver towards CRIMINAL!"
attack_one = "BOT unloads his revolver onto CRIMINAL!"
attack_two = "BOT unloads his revolver onto you!"
patrol_emote = "Engaging bounty hunting protocols."
@@ -112,6 +120,7 @@
desc = "Cooking up the finest foods the station has ever seen."
death_emote = "Mamma-mia!"
infraction = "Grade THREAT_LEVEL prosciutto detected!"
+ taunt = "BOT glares at CRIMINAL."
attack_one = "BOT CQCs CRIMINAL!"
attack_two = "BOT CQCs you!"
patrol_emote = "Beginning search for the bad prosciutto."
@@ -128,6 +137,7 @@
capture_one = "BOT is tying CRIMINAL up!!"
capture_two = "BOT is tying you up!"
infraction = "Wevel THREAT_LEVEL infwactwion awert!!!"
+ taunt = "BOT points at CRIMINAL and nyas!"
attack_one = "BOT shoves CRIMINAL onto a table!"
attack_two = "BOT shoves you onto a table!"
patrol_emote = "Enwgagwing patwol mwode."
@@ -148,6 +158,7 @@
/datum/beepsky_fashion/cake //nothing else. it's just beepsky. with a cake on his head.
obj_icon_state = "cake"
+ name = "Cakesky"
desc = "It's a secbot, wearing a cake on his head!"
/datum/beepsky_fashion/captain
@@ -191,12 +202,13 @@
attack_one = "BOT strikes CRIMINAL with his cutlass!"
attack_two = "BOT strikes you with his cutlass!"
patrol_emote = "Searching for enemy vessels to board."
- arrest_texts = list("Boarding" "Sinking")
+ arrest_texts = list("Boarding", "Sinking")
arrest_emote = "ARREST_TYPE level THREAT_LEVEL vessel CRIMINAL in LOCATION."
stun_sounds = list('sound/weapons/bladeslice.ogg')
/datum/beepsky_fashion/engineer
obj_icon_state = "engineer"
+ name = "Chief Engineer Beepsky"
desc = "He fixes criminals with a wrench to the face."
capture_one = "BOT is tying CRIMINAL up!"
capture_two = "BOT is tying you up!"
@@ -209,4 +221,15 @@
/datum/beepsky_fashion/tophat
obj_icon_state = "tophat"
- desc = "It's a secbot, wearing a top hat! How fancy."
\ No newline at end of file
+ name = "Fancy Beepsky"
+ desc = "It's a secbot, wearing a top hat! How fancy."
+
+/datum/beepsky_fashion/fedora
+ obj_icon_state = "fedora"
+ name = "Fedorasky"
+ desc = "It's a secbot, wearing a fedora!"
+
+/datum/beepsky_fashion/sombrero
+ obj_icon_state = "sombrero"
+ name = "Sombrerosky"
+ desc = "A secbot wearing a sombrero. Truly, a hombre to all."
diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm
index 10ea027610..12a4a43ca7 100644
--- a/code/modules/clothing/head/hardhat.dm
+++ b/code/modules/clothing/head/hardhat.dm
@@ -15,7 +15,7 @@
dynamic_hair_suffix = "+generic"
dog_fashion = /datum/dog_fashion/head
- beepsky_fashion = /datum/beepsky_fashion/hardhat
+ beepsky_fashion = /datum/beepsky_fashion/engineer
/obj/item/clothing/head/hardhat/ComponentInitialize()
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
index 5e6124b23d..d55c3a00af 100644
--- a/code/modules/clothing/head/misc.dm
+++ b/code/modules/clothing/head/misc.dm
@@ -193,6 +193,8 @@
desc = "A really cool hat if you're a mobster. A really lame hat if you're not."
pocket_storage_component_path = /datum/component/storage/concrete/pockets/small
+ beepsky_fashion = /datum/beepsky_fashion/fedora
+
/obj/item/clothing/head/fedora/suicide_act(mob/user)
if(user.gender == FEMALE)
return 0
@@ -211,6 +213,7 @@
flags_inv = HIDEHAIR
dog_fashion = /datum/dog_fashion/head/sombrero
+ beepsky_fashion = /datum/beepsky_fashion/sombrero
/obj/item/clothing/head/sombrero/green
name = "green sombrero"
diff --git a/icons/mob/secbot_head.dmi b/icons/mob/secbot_head.dmi
index 09b28cad68fba0ef223d895c84ae0c3774ed1517..2d6b7c9cbabaf6e79393d7d9a340daa45dbb4c19 100644
GIT binary patch
delta 1449
zcmYLJc~H^`6#l8Tre<17x+cffPOM)AL?&Vn;eFFn?&4B!^
z;TD0=LZ{2ARC9B4`N$Cn1OkOZ&CJYfPM?-r1D}Pj1p)yYjmG2gR4TQnrw50_6&DxV
zf}nOnLTiKCd{hydORpZrw9&
z3jk_z6vD+nt#V~1Hoyp_|7PtzCco(}P^96y_w{}R1v5m7vcc#Xu;n7u*+=C}TD8g_
zW0h-iQ~M0UDt(%|>d0O)&`?!q0(jfp=kISM%Eca~S46wGJL_UsNAMEp=p;HjcsJa#
za^VR)CBH4H86+^#@PjLm#?Y$Jg6{-Y_7)G?gA6e?W8b$)zpb{4)|xDg>>@Dz;gdSf
zo2+$`I9i*+)u_wN6Txbn>wU%8#{vT}f#cc|#&dR*KGV-EXfDnnVjWr35m`x5s<&kT
zd{M<3f|0hm`-4HDLMwI_UlRpsV!wC<|{HJ}W65qxSxihn*dZHr{_cZsMGw+W>|(*`%Cef88LdSldcn
z{>ryMp7N4u*x(b7)-0!Aqm`kbNfso2quQd2l@ST`LyJXE%1DgODBCs5DhT(0mV%Ew
z!*$%YGGaCc;j{fi`SDGkVt-wyog~z5YG}RAzc3Yk+G?daBKWYuUo_~A_DeU^p`v{V
z@OPHi@`%^CU&7*4Tw(>7*Y+_d8ti9nmS(Y=HlEE)&c0ur(BZteK2@)V6ZLgS&n!+j
z_okDEiDRFVt0#3h&}G$e_J>+pXiWf)%NVrPQHwvx8Lnot$9_;^XE~#9p6r(
zJfFyO2xovSR(yUmcwQdshdOT@B*S5`4FoWV*Kap%8xWHiQ#Q=){&U!AH$BsiRYp))Oh5C2ehVOH)t2dBrIMI~R}X
zkU!R*Jjs3KJP(rxZk0|{-&&oj0~uNC1+5(M9*0W+lfhnoE5ECeX{jrY
z!e`vNb&lQEW>~?fE9!yrcV;@Mw4m@&241O394EhQsiBL{Q4GJ0x0000DNk~Le0002s0002s2m=5B04?*H(*OVfz>y_t
zf8yxu%gxRBe0;X8t^ca3C@3gMIsg?F6&)QNCMG5_F)#X8|I;G>FaY%L!R+kpaBy&xl$0~SzYT6~z`($kkw@JC0004WQchC<
zK<3zH00026dQ@0+L}hbha%pgMX>V=-e*k!#jgh|&f-n%q=k_TYSdCF}bukdbAn$O}
zgI>^(7#YZ>IXB68RW;@3e{Wz;f3(auctijI1FT6zK~#90?c94)
z+CUV>;Xt?-BBekt0$M>u+fuRj>-Yay-3_2^-Q8D>G1C4Xr!$W4+2kA(rhlAiqX+;1
z0N4g4qu>_G`Ch&hSMr@u^k1#kf2!3C=hZVR#c?HG<(?|_jKjI=zgn+1>UDpGoIfgU
z`gfA@alX`Q
zRpORqI&i*%_J?VK^Yv8c<@Htniac+-FRh1Y`hLs)PoF%0t?TD&-TJNnvQy`?ULODe
z000000E*C#ItAuQveWH`j>`hIUu(BJoySGx-EPwB^%DOCrXYEe1PauCt-Wr**FwIz
z>Au%BUrFCHfGHRZhJ%5(e?ac%+MTDyv*+FhbIiN_q`w)k-|c$}2E*ZS;3c?8k4-S&(%<
z2LJ#700000!2MI}HNAd&(A54-?&qxC@I6GV3*-g-)c#HG=hEAce?l$nM&odY;=ITw
zd%g5);tJLNP44H?`;T__%^z=jqup^Jmgi+Y=~>SCCMl}>!%Hd_G=mQ*&k16cD3Mex*2OaJ-qpOdHu9Ov0uxQ
zAI)YLPiQtfx>|6!ndWo}1tB`O?#YiI>ZzH%_kTjs`#bi3?Ee4&0Dy<&
Y7f(^b07*qoM6N<$g1NDkeE
Date: Wed, 22 Jul 2020 00:07:15 +0100
Subject: [PATCH 11/23] further emotes
---
code/datums/beepsky_fashion.dm | 23 +++++++++++++++----
.../mob/living/simple_animal/bot/bot.dm | 3 ++-
2 files changed, 20 insertions(+), 6 deletions(-)
diff --git a/code/datums/beepsky_fashion.dm b/code/datums/beepsky_fashion.dm
index 3e81a3122c..a6e0a81dcd 100644
--- a/code/datums/beepsky_fashion.dm
+++ b/code/datums/beepsky_fashion.dm
@@ -20,6 +20,7 @@
var/attack_one //text when attacking criminal
var/attack_two //text when attacking criminal, but directly to the criminal
var/patrol_emote //engaging patrol text
+ var/patrol_fail_emote //failing to engage patrol text
var/list/arrest_texts //first is for not-cuffing, second is for cuffing
var/arrest_emote //text stating that you're cuffing some criminal C with a threat of level X in location Y
@@ -66,6 +67,9 @@
if(patrol_emote)
beepers.patrol_emote = patrol_emote
+ if(patrol_fail_emote)
+ beepers.patrol_fail_emote = patrol_fail_emote
+
if(arrest_texts)
beepers.arrest_texts = arrest_texts
@@ -88,6 +92,7 @@
attack_one = "BOT casts magic missile on CRIMINAL!"
attack_two = "BOT casts magic missile on you!"
patrol_emote = "Beginning search for magical disturbances."
+ patrol_fail_emote = "Failure to find magical disturbances. Recallibrating."
arrest_emote = "ARREST_TYPE level THREAT_LEVEL magical practitioner CRIMINAL in LOCATION."
stun_sounds = list('sound/magic/lightningbolt.ogg',
'sound/magic/fireball.ogg',
@@ -108,6 +113,7 @@
attack_one = "BOT unloads his revolver onto CRIMINAL!"
attack_two = "BOT unloads his revolver onto you!"
patrol_emote = "Engaging bounty hunting protocols."
+ patrol_fail_emote = "Unable to find any bounties due to error. Rebooting."
arrest_emote = "ARREST_TYPE outlaw CRIMINAL with a bounty of THREAT_LEVEL000 in LOCATION."
stun_sounds = list('sound/weapons/Gunshot.ogg',
'sound/weapons/Gunshot2.ogg',
@@ -124,6 +130,7 @@
attack_one = "BOT CQCs CRIMINAL!"
attack_two = "BOT CQCs you!"
patrol_emote = "Beginning search for the bad prosciutto."
+ patrol_fail_emote = "All prosciutto is stale. Rebooting."
arrest_texts = list("Frying", "Grilling") //any good secoff knows the difference
arrest_emote = "ARREST_TYPE grade THREAT_LEVEL prosciutto CRIMINAL in LOCATION."
stun_sounds = list('sound/weapons/cqchit1.ogg',
@@ -132,7 +139,7 @@
/datum/beepsky_fashion/cat
obj_icon_state = "cat"
name = "OwOfficer Bweepskwee"
- desc = "A beepsky unit with cat ears. Why?"
+ desc = "A beepsky unit with cat ears. Catgirl science has gone too far."
death_emote = "Nya!"
capture_one = "BOT is tying CRIMINAL up!!"
capture_two = "BOT is tying you up!"
@@ -140,7 +147,8 @@
taunt = "BOT points at CRIMINAL and nyas!"
attack_one = "BOT shoves CRIMINAL onto a table!"
attack_two = "BOT shoves you onto a table!"
- patrol_emote = "Enwgagwing patwol mwode."
+ patrol_emote = "Enwgagwing patwol mwodies.."
+ patrol_fail_emote = "Unawbwle two stwawt patwollies. Nya."
arrest_texts = list("Dwetwaining", "Awwesting")
arrest_emote = "ARREST_TYPE wevel THREAT_LEVEL scwumbwag CRIMINAL in LOCATION. Nya."
ignore_sound = TRUE //we instead make the stunned person fire the nya emote
@@ -149,12 +157,14 @@
if(iscatperson(C))
C.emote("nya")
var/turf/target_turf = get_turf(C)
- if(target_turf && !(C.lying)) //slams you on a table if you're standing up
- playsound(src, 'sound/weapons/tap.ogg', 50, 1)
+ if(target_turf) //slams you on a fake table
+ playsound(src, 'sound/weapons/sonic_jackhammer.ogg', 50, 1)
var/obj/effect/overlay_holder = new(target_turf)
+ overlay_holder.name = "Catboy Table"
+ overlay_holder.desc = "Where bad catboys go."
var/image/table_overlay = image('icons/obj/smooth_structures/table.dmi', "table")
overlay_holder.add_overlay(table_overlay)
- QDEL_IN(1, overlay_holder)
+ QDEL_IN(overlay_holder, 10)
/datum/beepsky_fashion/cake //nothing else. it's just beepsky. with a cake on his head.
obj_icon_state = "cake"
@@ -171,6 +181,7 @@
attack_one = "BOT beats CRIMINAL with the chain of command!"
attack_two = "BOT beats you with the chain of command!"
patrol_emote = "Uselessness protocols engaged."
+ patrol_fail_emote = "Unit has been found as useless. Rebooting."
arrest_texts = list("Demoting", "Firing")
arrest_emote = "ARREST_TYPE level THREAT_LEVEL lesser crewmember CRIMINAL in LOCATION."
stun_sounds = list('sound/weapons/chainhit.ogg')
@@ -185,6 +196,7 @@
attack_one = "BOT strikes CRIMINAL with his kingly authority!"
attack_two = "BOT strikes you with his kingly authority!"
patrol_emote = "Searching for peasants to beat up."
+ patrol_fail_emote = "Peasants are using dark magic. Recallibrating."
arrest_texts = list("Knighting", "Executing")
arrest_emote = "ARREST_TYPE level THREAT_LEVEL peasant CRIMINAL in LOCATION."
stun_sounds = list('sound/weapons/punch1.ogg',
@@ -202,6 +214,7 @@
attack_one = "BOT strikes CRIMINAL with his cutlass!"
attack_two = "BOT strikes you with his cutlass!"
patrol_emote = "Searching for enemy vessels to board."
+ patrol_fail_emote = "No way to engage enemy vessels. Rebooting."
arrest_texts = list("Boarding", "Sinking")
arrest_emote = "ARREST_TYPE level THREAT_LEVEL vessel CRIMINAL in LOCATION."
stun_sounds = list('sound/weapons/bladeslice.ogg')
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index ac995bdeaf..3ad19deeac 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -104,6 +104,7 @@
//emotes/speech stuff
var/patrol_emote = "Engaging patrol mode."
+ var/patrol_fail_emote = "Unable to start patrol."
/mob/living/simple_animal/bot/proc/get_mode()
if(client) //Player bots do not have modes, thus the override. Also an easy way for PDA users/AI to know when a bot is a player.
@@ -615,7 +616,7 @@ Pass a positive integer as an argument to override a bot's default speed.
if(tries >= BOT_STEP_MAX_RETRIES) //Bot is trapped, so stop trying to patrol.
auto_patrol = 0
tries = 0
- speak("Unable to start patrol.")
+ speak(patrol_fail_emote)
return
From 0706ac9d2a535db1be0231f2ff1a88456c2083d9 Mon Sep 17 00:00:00 2001
From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Wed, 22 Jul 2020 00:14:26 +0100
Subject: [PATCH 12/23] woops
---
.../mob/living/simple_animal/bot/secbot.dm | 33 ++++++++++---------
1 file changed, 17 insertions(+), 16 deletions(-)
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index e2ab01b7bd..5934f7ea69 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -226,6 +226,23 @@ Auto Patrol: []"},
retaliate(H)
if(special_retaliate_after_attack(H))
return
+ if(H.a_intent == INTENT_HELP && bot_hat)
+ to_chat(A, "You knock [bot_hat] off of [src]'s head!")
+ bot_hat.forceMove(get_turf(src))
+ //reset all emotes/sounds
+ death_emote = initial(death_emote)
+ capture_one = initial(capture_one)
+ capture_two = initial(capture_two)
+ infraction = initial(infraction)
+ taunt = initial(taunt)
+ attack_one = initial(attack_one)
+ attack_two = initial(attack_two)
+ arrest_texts = initial(arrest_texts)
+ arrest_emote = initial(arrest_emote)
+ patrol_emote = initial(patrol_emote)
+ bot_hat = null
+ qdel(stored_fashion)
+ return
return ..()
@@ -298,22 +315,6 @@ Auto Patrol: []"},
if(!on)
return
if(iscarbon(A))
- if(bot_hat)
- to_chat(A, "You knock [bot_hat] off of [src]'s head!")
- bot_hat.forceMove(get_turf(src))
- //reset all emotes/sounds
- death_emote = initial(death_emote)
- capture_one = initial(capture_one)
- capture_two = initial(capture_two)
- infraction = initial(infraction)
- taunt = initial(taunt)
- attack_one = initial(attack_one)
- attack_two = initial(attack_two)
- arrest_texts = initial(arrest_texts)
- arrest_emote = initial(arrest_emote)
- patrol_emote = initial(patrol_emote)
- bot_hat = null
- qdel(stored_fashion)
var/mob/living/carbon/C = A
if(CHECK_MOBILITY(C, MOBILITY_MOVE|MOBILITY_USE|MOBILITY_STAND) || arrest_type) // CIT CHANGE - makes sentient secbots check for canmove rather than !isstun.
stun_attack(A)
From 6a4264085c56972758639188d2b547d308f00b44 Mon Sep 17 00:00:00 2001
From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Wed, 22 Jul 2020 00:17:03 +0100
Subject: [PATCH 13/23] woops 2: electric boogaloo
---
code/modules/mob/living/simple_animal/bot/secbot.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index 5934f7ea69..de811cc644 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -227,7 +227,7 @@ Auto Patrol: []"},
if(special_retaliate_after_attack(H))
return
if(H.a_intent == INTENT_HELP && bot_hat)
- to_chat(A, "You knock [bot_hat] off of [src]'s head!")
+ to_chat(H, "You knock [bot_hat] off of [src]'s head!")
bot_hat.forceMove(get_turf(src))
//reset all emotes/sounds
death_emote = initial(death_emote)
From ed1e8c4221c244ef0513a99bbd695e8233c19d86 Mon Sep 17 00:00:00 2001
From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Wed, 22 Jul 2020 15:43:58 +0100
Subject: [PATCH 14/23] support for masks
---
code/datums/beepsky_fashion.dm | 14 ++++-
code/modules/clothing/head/_head.dm | 2 +-
code/modules/clothing/masks/_masks.dm | 1 +
.../mob/living/simple_animal/bot/secbot.dm | 52 ++++++++++--------
...secbot_head.dmi => secbot_accessories.dmi} | Bin
5 files changed, 43 insertions(+), 26 deletions(-)
rename icons/mob/{secbot_head.dmi => secbot_accessories.dmi} (100%)
diff --git a/code/datums/beepsky_fashion.dm b/code/datums/beepsky_fashion.dm
index a6e0a81dcd..058a005aa8 100644
--- a/code/datums/beepsky_fashion.dm
+++ b/code/datums/beepsky_fashion.dm
@@ -3,7 +3,7 @@
var/name //not setting the name and desc makes them go to the default
var/desc
- var/icon_file = 'icons/mob/secbot_head.dmi'
+ var/icon_file = 'icons/mob/secbot_accessories.dmi' //we sell secbots and secbot accessories
var/obj_icon_state
var/obj_alpha
var/obj_color
@@ -246,3 +246,15 @@
obj_icon_state = "sombrero"
name = "Sombrerosky"
desc = "A secbot wearing a sombrero. Truly, a hombre to all."
+
+/datum/beepsky_fashion/santa
+ obj_icon_state = "santa"
+ name = "Saint Beepsky"
+ desc = "Have you been a level 7 infraction this holiday season?"
+ capture_one = "BOT is tying CRIMINAL up with fairy lights!"
+ capture_two = "BOT is tying you up with fairy lights!"
+ infraction = "Level THREAT_LEVEL threat to holiday cheer spotted!"
+ attack_one = "BOT crushes CRIMINAL with their holiday spirit!"
+ attack_two = "BOT crushes you with their holiday spirit!"
+ arrest_emote = "ARREST_TYPE level THREAT_LEVEL threat to holiday cheer in LOCATION"
+
diff --git a/code/modules/clothing/head/_head.dm b/code/modules/clothing/head/_head.dm
index 0854d9c270..49ffa27214 100644
--- a/code/modules/clothing/head/_head.dm
+++ b/code/modules/clothing/head/_head.dm
@@ -8,7 +8,7 @@
var/blockTracking = 0 //For AI tracking
var/can_toggle = null
dynamic_hair_suffix = "+generic"
- var/datum/beepsky_fashion/beepsky_fashion //the associated datum for applying this hat to a secbot
+ var/datum/beepsky_fashion/beepsky_fashion //the associated datum for applying this to a secbot
/obj/item/clothing/head/Initialize()
. = ..()
diff --git a/code/modules/clothing/masks/_masks.dm b/code/modules/clothing/masks/_masks.dm
index 7df38661e5..55b14e2d5f 100644
--- a/code/modules/clothing/masks/_masks.dm
+++ b/code/modules/clothing/masks/_masks.dm
@@ -8,6 +8,7 @@
var/modifies_speech = FALSE
var/mask_adjusted = 0
var/adjusted_flags = null
+ var/datum/beepsky_fashion/beepsky_fashion //the associated datum for applying this to a secbot
/obj/item/clothing/mask/attack_self(mob/user)
if(CHECK_BITFIELD(clothing_flags, VOICEBOX_TOGGLABLE))
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index de811cc644..cec25f50c0 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -33,7 +33,7 @@
var/check_records = TRUE //Does it check security records?
var/arrest_type = FALSE //If true, don't handcuff
- var/obj/item/clothing/head/bot_hat
+ var/obj/item/clothing/head/bot_accessory
var/datum/beepsky_fashion/stored_fashion
//emotes (BOT is replaced with bot name, CRIMINAL with criminal name, THREAT_LEVEL with threat level)
@@ -226,9 +226,9 @@ Auto Patrol: []"},
retaliate(H)
if(special_retaliate_after_attack(H))
return
- if(H.a_intent == INTENT_HELP && bot_hat)
- to_chat(H, "You knock [bot_hat] off of [src]'s head!")
- bot_hat.forceMove(get_turf(src))
+ if(H.a_intent == INTENT_HELP && bot_accessory)
+ to_chat(H, "You knock [bot_accessory] off of [src]'s head!")
+ bot_accessory.forceMove(get_turf(src))
//reset all emotes/sounds
death_emote = initial(death_emote)
capture_one = initial(capture_one)
@@ -240,7 +240,7 @@ Auto Patrol: []"},
arrest_texts = initial(arrest_texts)
arrest_emote = initial(arrest_emote)
patrol_emote = initial(patrol_emote)
- bot_hat = null
+ bot_accessory = null
qdel(stored_fashion)
return
@@ -250,7 +250,7 @@ Auto Patrol: []"},
..()
if(istype(W, /obj/item/weldingtool) && user.a_intent != INTENT_HARM) // Any intent but harm will heal, so we shouldn't get angry.
return
- if(istype(W, /obj/item/clothing/head))
+ if(istype(W, /obj/item/clothing/head) || istype(W, /obj/item/clothing/mask))
attempt_place_on_head(user, W)
return
if(!istype(W, /obj/item/screwdriver) && (W.force) && (!target) && (W.damtype != STAMINA) ) // Added check for welding tool to fix #2432. Welding tool behavior is handled in superclass.
@@ -258,39 +258,43 @@ Auto Patrol: []"},
if(special_retaliate_after_attack(user))
return
-/mob/living/simple_animal/bot/secbot/proc/attempt_place_on_head(mob/user, obj/item/clothing/head/H)
+/mob/living/simple_animal/bot/secbot/proc/attempt_place_on_head(mob/user, obj/item/I)
if(user && !user.temporarilyRemoveItemFromInventory(H))
to_chat(user, "\The [H] is stuck to your hand, you cannot put it on [src]'s head!")
return
- if(bot_hat)
- to_chat("\[src] already has a hat, and the laws of physics disallow him from wearing a second!")
- if(H.beepsky_fashion)
- to_chat(user, "You set [H] on [src]'s head.")
- bot_hat = H
+ if(bot_accessory)
+ to_chat("\[src] already has an accessory, and the laws of physics disallow him from wearing a second!")
+ return
+ if(istype(I, /obj/item/clothing/head)
+ var/obj/item/clothing/head/H = I
+ if(H.beepsky_fashion)
+ stored_fashion = new H.beepsky_fashion
+ else
+ //it must be a mask
+ var/obj/item/clothing/mask/M = I
+ if(M.beepsky_fashion)
+ stored_fashion = new M.beepsky_fashion
+ if(stored_fashion)
+ to_chat(user, "You set [I] on [src].")
+ bot_accessory = H
H.forceMove(src)
- update_beepsky_fluff()
+ stored_fashion.apply(src)
regenerate_icons()
else
to_chat(user, "You set [H] on [src]'s head, but it falls off!")
H.forceMove(drop_location())
-/mob/living/simple_animal/bot/secbot/proc/update_beepsky_fluff()
- var/datum/beepsky_fashion/BF = new bot_hat.beepsky_fashion
- stored_fashion = BF
- if(BF)
- BF.apply(src)
-
/mob/living/simple_animal/bot/secbot/regenerate_icons()
..()
- if(bot_hat)
+ if(bot_accessory)
if(!stored_fashion)
- stored_fashion = new bot_hat.beepsky_fashion
+ stored_fashion = new bot_accessory.beepsky_fashion
if(!stored_fashion.obj_icon_state)
- stored_fashion.obj_icon_state = bot_hat.icon_state
+ stored_fashion.obj_icon_state = bot_accessory.icon_state
if(!stored_fashion.obj_alpha)
- stored_fashion.obj_alpha = bot_hat.alpha
+ stored_fashion.obj_alpha = bot_accessory.alpha
if(!stored_fashion.obj_color)
- stored_fashion.obj_color = bot_hat.color
+ stored_fashion.obj_color = bot_accessory.color
add_overlay(stored_fashion.get_overlay())
/mob/living/simple_animal/bot/secbot/emag_act(mob/user)
diff --git a/icons/mob/secbot_head.dmi b/icons/mob/secbot_accessories.dmi
similarity index 100%
rename from icons/mob/secbot_head.dmi
rename to icons/mob/secbot_accessories.dmi
From a607130e3cd8283758baa1ac68fe89836d332940 Mon Sep 17 00:00:00 2001
From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Wed, 22 Jul 2020 16:24:35 +0100
Subject: [PATCH 15/23] please compile
---
.../mob/living/simple_animal/bot/secbot.dm | 19 +++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index cec25f50c0..e0d65b13da 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -259,30 +259,30 @@ Auto Patrol: []"},
return
/mob/living/simple_animal/bot/secbot/proc/attempt_place_on_head(mob/user, obj/item/I)
- if(user && !user.temporarilyRemoveItemFromInventory(H))
- to_chat(user, "\The [H] is stuck to your hand, you cannot put it on [src]'s head!")
+ if(user && !user.temporarilyRemoveItemFromInventory(I))
+ to_chat(user, "\The [I] is stuck to your hand, you cannot put it on [src]'s head!")
return
if(bot_accessory)
to_chat("\[src] already has an accessory, and the laws of physics disallow him from wearing a second!")
return
- if(istype(I, /obj/item/clothing/head)
+ if(istype(I, /obj/item/clothing/head))
var/obj/item/clothing/head/H = I
if(H.beepsky_fashion)
stored_fashion = new H.beepsky_fashion
else
//it must be a mask
var/obj/item/clothing/mask/M = I
- if(M.beepsky_fashion)
- stored_fashion = new M.beepsky_fashion
+ if(M.beepsky_fashion)
+ stored_fashion = new M.beepsky_fashion
if(stored_fashion)
to_chat(user, "You set [I] on [src].")
- bot_accessory = H
- H.forceMove(src)
+ bot_accessory = I
+ I.forceMove(src)
stored_fashion.apply(src)
regenerate_icons()
else
- to_chat(user, "You set [H] on [src]'s head, but it falls off!")
- H.forceMove(drop_location())
+ to_chat(user, "You set [I] on [src]'s head, but it falls off!")
+ I.forceMove(drop_location())
/mob/living/simple_animal/bot/secbot/regenerate_icons()
..()
@@ -468,7 +468,6 @@ Auto Patrol: []"},
look_for_perp()
bot_patrol()
-
return
/mob/living/simple_animal/bot/secbot/proc/back_to_idle()
From 6c308ec420b7801932da6533aa79531c28d0c2d6 Mon Sep 17 00:00:00 2001
From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Wed, 22 Jul 2020 16:34:37 +0100
Subject: [PATCH 16/23] more accessories
---
icons/mob/secbot_accessories.dmi | Bin 1536 -> 1723 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
diff --git a/icons/mob/secbot_accessories.dmi b/icons/mob/secbot_accessories.dmi
index 2d6b7c9cbabaf6e79393d7d9a340daa45dbb4c19..76637b031ced7280754dccbbd3bce0de33100058 100644
GIT binary patch
delta 1491
zcmYk6c~sI_6vux=j$@iuT9j$pHlE7Vw4BlmYh1>utcYAD3>!7vMidt`mmg(@PFY&H
zB}l82=}7L1Cb(;$W{w(&;p6}o+c67bi@`HzI`jUx@4R#GyYGAN=blF}XMPcIrAeEH=s?IdqcGWkt8!9f(bN2o!;XEGOYx>Fhq<>pb
zm(`>GLz#8fB$KOr_=g#YQB^DKX8jsv!{1n2;$&_)*t+Qi>G+clQ}2|&jzLp6I%DBu
z;;P$5@LS04vLm>oFwE{DNO8uw;H|!nW4&Z@w7V}m*8*|pQzY$kp(V#!p*RJt`~m8D
zYF_dL&x#4BFZ9}ryN`}sgI{TqH{P=!nvcW~?-F7y;w~XA&U{fjq2uBy38NL6Q2?;K
z!p{plj7%j-W}*V8eJuJD(x7vMcTHI(h{88R$NHkcWVD_
zCO=WjMLd?S#@EUNOG)2C6RE-%iebu7MxOXeCNxL<@E7r^NyHWvIZgLeF8{u$
zBfF{!F?0~9?2gq1{L@_UY#8a8MPYBTp(~o;4MM?CLKGQ-(_gE-l_jqdNk_p;
zD=NyALxJZUh($kbZ@d|~qI=+eljkSqr(ym(v&fBmX1L;7ge&^|M01xDsl0l4IC$wA
z&t(5%!vd2!xe|O-T2g&Jd4FgVs>y;i5#7|*yKKU7N>)~u!t2=~5U5y(s>+nnCoY)F
zUS%D&uUkq@{VvHv@0*BT-#_{!4Pis{Ggz2|7a;HHYx!5F-ZE}RWYq-01`RZK&DNo|
zju<8@OuguXFiOBh^tB3{3$I&qODW0)MK^-v%#6A<4WlI~n^;pN>x$pYp-%6*Z;1e|
z))}2)nHX!!KUfL|P^TztGlsQjS&^eWjS2bhAp&uH{jNy^9E5H;T0(L6v8Zz>FmA1>
z*_NrPv}7{ryB*Kk#oAMAYdK+T*$6gvXB07}1da+0ZU^;!V1X^2=WAc~(;|+TQ>oOm
zVQj|_g8W_Fj*w?O%Z6M{u&cKGTs
znRxGI?mJ
z^!j?yvNlHb6qN+6B&Wj(3@y**QH9!rASn19Wm@_H68pSO^WoOOo6dCIfEthWy`Fr@
z1x)Nax@md4dx=kO@})tz=D^3zbsiFK%S|vuIluYq(0m^2kdxB0Jft8%ZIdY$I}>>_
zVW#j6Z&W?<9HdheWOWu?=KeLF(ZiXZUc3vw*KXK1X|R*0*6l(}B92SFPkx|f`qnv@#Z*&@gC2L=Z0vR9HyM-|dQ<*eL_hOII7
z%EHxy@$oO++}xteWNJG*Gm;v_YoFf0<(#3v_)0W>Jj%km6Z7M#ZOt%m$@qBlb1wzR
z8-OKqB+X&HgS`^}a1RLE5yxX?kZ+WY(da28e2ty0+FKg(=ev}43V6lsshzVYW3NrQl$V>18t9$+_Pr(vCzgI=z|Y&?tM*9f<$nOC-1^Y~
delta 1302
zcmV+x1?l>`4S)=g77qa62m=5B0NbBPVgLXDe`gBGEiTSlk^?OIykd{Q!1ij7D?MX?@D7aysi-Lb!qGGID102Bqi
z9rccWjqEp0%t94ja$fjDh}F}AvLvIeogHcdvRhy(iYov8!xvDBme98d+%o_G1OG`x
zK~#90?cHft8c7t!@rGuPw1fbY2|^6P5k!q_LonMey>@PVjhq+uBW-``oxcgO}FJ%kal4HVru~aJA4?y+1
zfAaZd4UNPJr+bd~AD=+3Qu$|*>=*fbz(TfQ-#|Y5pcH$MwUmf{XFj{C)BTl`cTg@@
zD&_$&6=wUlN>smGU+*uzedh{E6|&!*XDXFkSc#bl6L0bOhtq<@+h6s|_0|3qc|L0W
zcz2okCd;;~WPkc)|G!$_uld$i{$;QFf7e|f0000000000{8}49)ngt-o3)y&T@7)8xytJ$;^
zsD8P=8L;}B@%VS^22#vxji|90uu*GR3Yx7}tC?7!`sMml)eZMOoMLXS&*qbsf0?iK
zWHa$DofX6q3sk>c|9V2#Gn``HXhc!`jG8C)QIu2=KmKz`1*%`J4*&oF00000007)C
z?X_ZEAQ$kf9c;NqYzH0p4n)7myHD%WPuEj!=G$s-o4<~@jIT`XT0SA0000000000z}@Ms
z73%`IfM31m{pXGmMXU?t0xml{N#Fiby?+0Xe&0G_ufMyyYma5WJO61@Njn@|{cvYz
zuzbH<-^@4MGgoMDXqnK&!{N{x%YKoMe!9Y=+XefB#kL27{pI`R`tg9hf0+FMW*i6L
z>=*gLXmoXjN27z=1^bI#A6|dEM88}=h-Z7T_adG$ar|CyH)e@tzszsUbeJ^XjZGgW
z9DwXs`G3k`%KhuE4*&oF000000R9Km8@7{m-^TYdhE5^FOnZLc}B@cq*qbn=KxjJreneVG>!nAX*2XHzbpN-GYFV4@+*YWAC{POa0GT*?&e7|(R%ICM|
z!m_b05cy
Date: Wed, 22 Jul 2020 16:37:15 +0100
Subject: [PATCH 17/23] more
---
icons/mob/secbot_accessories.dmi | Bin 1723 -> 1725 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
diff --git a/icons/mob/secbot_accessories.dmi b/icons/mob/secbot_accessories.dmi
index 76637b031ced7280754dccbbd3bce0de33100058..b6c7bad6fa3ec04db33e02db164c5645aeab6aeb 100644
GIT binary patch
delta 217
zcmV;~04D#t4ZRJpJOO{gdQ@0+L}hbha%pgMX>V=-0C=2@lEDswFbsyz>?szw8l&RX
zi-8yp@(u+GYmkj}iv*wEp$AT6q?fANVoGJb
delta 215
zcmV;|04V>x4Z97nJOO{edQ@0+L}hbha%pgMX>V=-0C=2@(ydZ+B9wL
z+NIGn4)q;SPPtgY9HhoReX$*!42I=D^4$Rmskj%9vJ&~T=xAq$nt*H+Zh=%3RsQ=h
RUv6-panGK8X|o3cwgdzUW{v;=
From a155f2425308ffd9f89b9779d9d2f63d40e7acff Mon Sep 17 00:00:00 2001
From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Wed, 22 Jul 2020 16:53:51 +0100
Subject: [PATCH 18/23] let santa hat go on
---
code/modules/clothing/head/misc.dm | 1 +
1 file changed, 1 insertion(+)
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
index d55c3a00af..e005915f74 100644
--- a/code/modules/clothing/head/misc.dm
+++ b/code/modules/clothing/head/misc.dm
@@ -260,6 +260,7 @@
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
dog_fashion = /datum/dog_fashion/head/santa
+ beepsky_fashion = /datum/beepsky_fashion/santa
/obj/item/clothing/head/jester
name = "jester hat"
From 2290823ace31c53373f2cf52e593e0b39a540d42 Mon Sep 17 00:00:00 2001
From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Thu, 23 Jul 2020 14:40:36 +0100
Subject: [PATCH 19/23] fixes hat removal
---
code/modules/mob/living/simple_animal/bot/secbot.dm | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index e0d65b13da..351bf10d7d 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -227,9 +227,12 @@ Auto Patrol: []"},
if(special_retaliate_after_attack(H))
return
if(H.a_intent == INTENT_HELP && bot_accessory)
+
to_chat(H, "You knock [bot_accessory] off of [src]'s head!")
bot_accessory.forceMove(get_turf(src))
- //reset all emotes/sounds
+ //reset all emotes/sounds and name/desc
+ name = initial(name)
+ desc = initial(desc)
death_emote = initial(death_emote)
capture_one = initial(capture_one)
capture_two = initial(capture_two)
@@ -240,8 +243,11 @@ Auto Patrol: []"},
arrest_texts = initial(arrest_texts)
arrest_emote = initial(arrest_emote)
patrol_emote = initial(patrol_emote)
+ arrest_texts = initial(arrest_texts)
+ arrest_emote = initial(arrest_emote)
bot_accessory = null
qdel(stored_fashion)
+ regenerate_icons()
return
return ..()
From b18356c95d4973e6890cc3605d24255edca842e1 Mon Sep 17 00:00:00 2001
From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Thu, 23 Jul 2020 18:47:34 +0100
Subject: [PATCH 20/23] requested changes
---
code/datums/beepsky_fashion.dm | 39 ------
.../mob/living/simple_animal/bot/secbot.dm | 115 ++++++++++++------
2 files changed, 75 insertions(+), 79 deletions(-)
diff --git a/code/datums/beepsky_fashion.dm b/code/datums/beepsky_fashion.dm
index 058a005aa8..1156822c93 100644
--- a/code/datums/beepsky_fashion.dm
+++ b/code/datums/beepsky_fashion.dm
@@ -37,45 +37,6 @@
beepsky_overlay.color = obj_color
return beepsky_overlay
-/datum/beepsky_fashion/proc/apply(mob/living/simple_animal/bot/secbot/beepers) //set the emote depending on the fashion datum, if nothing set, turn it back to how it was initially
- //assume name and description is always set, because otherwise, what would be the point of beepsky fashion?
- beepers.name = name
- beepers.desc = desc
-
- //set each variable in beepsky if its defined here, otherwise set it to its initial value just in case
- if(death_emote)
- beepers.death_emote = death_emote
-
- if(capture_one)
- beepers.capture_one = capture_one
-
- if(capture_two)
- beepers.capture_two = capture_two
-
- if(infraction)
- beepers.infraction = infraction
-
- if(taunt)
- beepers.taunt = taunt
-
- if(attack_one)
- beepers.attack_one = attack_one
-
- if(attack_two)
- beepers.attack_two = attack_two
-
- if(patrol_emote)
- beepers.patrol_emote = patrol_emote
-
- if(patrol_fail_emote)
- beepers.patrol_fail_emote = patrol_fail_emote
-
- if(arrest_texts)
- beepers.arrest_texts = arrest_texts
-
- if(arrest_emote)
- beepers.arrest_emote = arrest_emote
-
/datum/beepsky_fashion/proc/stun_attack(mob/living/carbon/C) //fired when beepsky does a stun attack with the fashion worn, for sounds/overlays/etc
return
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index 351bf10d7d..9281206a6a 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -98,6 +98,68 @@
emote = replacetext(emote, "LOCATION", location)
return emote
+/mob/living/simple_animal/bot/secbot/proc/apply_fashion(var/datum/beepsky_fashion/fashion)
+ stored_fashion = new fashion
+ if(stored_fashion.name)
+ name = stored_fashion.name
+
+ if(stored_fashion.desc)
+ desc = stored_fashion.desc
+
+ if(stored_fashion.death_emote)
+ death_emote = stored_fashion.death_emote
+
+ if(stored_fashion.capture_one)
+ capture_one = stored_fashion.capture_one
+
+ if(stored_fashion.capture_two)
+ capture_two = stored_fashion.capture_two
+
+ if(stored_fashion.infraction)
+ infraction = stored_fashion.infraction
+
+ if(stored_fashion.taunt)
+ taunt = stored_fashion.taunt
+
+ if(stored_fashion.attack_one)
+ attack_one = stored_fashion.attack_one
+
+ if(stored_fashion.attack_two)
+ attack_two = stored_fashion.attack_two
+
+ if(stored_fashion.patrol_emote)
+ patrol_emote = stored_fashion.patrol_emote
+
+ if(stored_fashion.patrol_fail_emote)
+ patrol_fail_emote = stored_fashion.patrol_fail_emote
+
+ if(stored_fashion.arrest_texts)
+ arrest_texts = stored_fashion.arrest_texts
+
+ if(stored_fashion.arrest_emote)
+ arrest_emote = stored_fashion.arrest_emote
+
+/mob/living/simple_animal/bot/secbot/proc/reset_fashion()
+ bot_accessory.forceMove(get_turf(src))
+ //reset all emotes/sounds and name/desc
+ name = initial(name)
+ desc = initial(desc)
+ death_emote = initial(death_emote)
+ capture_one = initial(capture_one)
+ capture_two = initial(capture_two)
+ infraction = initial(infraction)
+ taunt = initial(taunt)
+ attack_one = initial(attack_one)
+ attack_two = initial(attack_two)
+ arrest_texts = initial(arrest_texts)
+ arrest_emote = initial(arrest_emote)
+ patrol_emote = initial(patrol_emote)
+ arrest_texts = initial(arrest_texts)
+ arrest_emote = initial(arrest_emote)
+ bot_accessory = null
+ qdel(stored_fashion)
+ regenerate_icons()
+
/mob/living/simple_animal/bot/secbot/beepsky/explode()
var/atom/Tsec = drop_location()
new /obj/item/stock_parts/cell/potato(Tsec)
@@ -229,25 +291,7 @@ Auto Patrol: []"},
if(H.a_intent == INTENT_HELP && bot_accessory)
to_chat(H, "You knock [bot_accessory] off of [src]'s head!")
- bot_accessory.forceMove(get_turf(src))
- //reset all emotes/sounds and name/desc
- name = initial(name)
- desc = initial(desc)
- death_emote = initial(death_emote)
- capture_one = initial(capture_one)
- capture_two = initial(capture_two)
- infraction = initial(infraction)
- taunt = initial(taunt)
- attack_one = initial(attack_one)
- attack_two = initial(attack_two)
- arrest_texts = initial(arrest_texts)
- arrest_emote = initial(arrest_emote)
- patrol_emote = initial(patrol_emote)
- arrest_texts = initial(arrest_texts)
- arrest_emote = initial(arrest_emote)
- bot_accessory = null
- qdel(stored_fashion)
- regenerate_icons()
+ reset_fashion()
return
return ..()
@@ -256,7 +300,7 @@ Auto Patrol: []"},
..()
if(istype(W, /obj/item/weldingtool) && user.a_intent != INTENT_HARM) // Any intent but harm will heal, so we shouldn't get angry.
return
- if(istype(W, /obj/item/clothing/head) || istype(W, /obj/item/clothing/mask))
+ if(istype(W, /obj/item/clothing/head))
attempt_place_on_head(user, W)
return
if(!istype(W, /obj/item/screwdriver) && (W.force) && (!target) && (W.damtype != STAMINA) ) // Added check for welding tool to fix #2432. Welding tool behavior is handled in superclass.
@@ -264,31 +308,22 @@ Auto Patrol: []"},
if(special_retaliate_after_attack(user))
return
-/mob/living/simple_animal/bot/secbot/proc/attempt_place_on_head(mob/user, obj/item/I)
- if(user && !user.temporarilyRemoveItemFromInventory(I))
- to_chat(user, "\The [I] is stuck to your hand, you cannot put it on [src]'s head!")
+/mob/living/simple_animal/bot/secbot/proc/attempt_place_on_head(mob/user, obj/item/clothing/head/H)
+ if(user && !user.temporarilyRemoveItemFromInventory(H))
+ to_chat(user, "\The [H] is stuck to your hand, you cannot put it on [src]'s head!")
return
if(bot_accessory)
to_chat("\[src] already has an accessory, and the laws of physics disallow him from wearing a second!")
return
- if(istype(I, /obj/item/clothing/head))
- var/obj/item/clothing/head/H = I
- if(H.beepsky_fashion)
- stored_fashion = new H.beepsky_fashion
+
+ if(H.beepsky_fashion)
+ to_chat(user, "You set [H] on [src].")
+ bot_accessory = H
+ H.forceMove(src)
+ apply_fashion(H.beepsky_fashion)
else
- //it must be a mask
- var/obj/item/clothing/mask/M = I
- if(M.beepsky_fashion)
- stored_fashion = new M.beepsky_fashion
- if(stored_fashion)
- to_chat(user, "You set [I] on [src].")
- bot_accessory = I
- I.forceMove(src)
- stored_fashion.apply(src)
- regenerate_icons()
- else
- to_chat(user, "You set [I] on [src]'s head, but it falls off!")
- I.forceMove(drop_location())
+ to_chat(user, "You set [H] on [src]'s head, but it falls off!")
+ H.forceMove(drop_location())
/mob/living/simple_animal/bot/secbot/regenerate_icons()
..()
From 673188bc7e29459254bef8f121dc1449b0df3006 Mon Sep 17 00:00:00 2001
From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Thu, 23 Jul 2020 18:57:24 +0100
Subject: [PATCH 21/23] please show the hat
---
code/modules/mob/living/simple_animal/bot/secbot.dm | 2 ++
1 file changed, 2 insertions(+)
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index 9281206a6a..e3d9725714 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -139,6 +139,8 @@
if(stored_fashion.arrest_emote)
arrest_emote = stored_fashion.arrest_emote
+ regenerate_icons()
+
/mob/living/simple_animal/bot/secbot/proc/reset_fashion()
bot_accessory.forceMove(get_turf(src))
//reset all emotes/sounds and name/desc
From 5463673831cf4a2a5ae334702150726eca67737d Mon Sep 17 00:00:00 2001
From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Thu, 23 Jul 2020 19:02:50 +0100
Subject: [PATCH 22/23] fuck
---
code/modules/mob/living/simple_animal/bot/secbot.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index e3d9725714..e6a9adf9ac 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -159,7 +159,7 @@
arrest_texts = initial(arrest_texts)
arrest_emote = initial(arrest_emote)
bot_accessory = null
- qdel(stored_fashion)
+ stored_fashion = null
regenerate_icons()
/mob/living/simple_animal/bot/secbot/beepsky/explode()
From e4f0a84404f6954ec91e425457f8f9b62441c226 Mon Sep 17 00:00:00 2001
From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Thu, 23 Jul 2020 19:33:26 +0100
Subject: [PATCH 23/23] cut overlay
---
code/modules/mob/living/simple_animal/bot/secbot.dm | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index e6a9adf9ac..9d45b96831 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -159,7 +159,6 @@
arrest_texts = initial(arrest_texts)
arrest_emote = initial(arrest_emote)
bot_accessory = null
- stored_fashion = null
regenerate_icons()
/mob/living/simple_animal/bot/secbot/beepsky/explode()
@@ -339,6 +338,10 @@ Auto Patrol: []"},
if(!stored_fashion.obj_color)
stored_fashion.obj_color = bot_accessory.color
add_overlay(stored_fashion.get_overlay())
+ else
+ if(stored_fashion)
+ cut_overlay(stored_fashion.get_overlay())
+ stored_fashion = null
/mob/living/simple_animal/bot/secbot/emag_act(mob/user)
. = ..()