diff --git a/code/WorkInProgress/Chemistry-Tools.dm b/code/WorkInProgress/Chemistry-Tools.dm
index 6be71fdb393..8566e04ff24 100644
--- a/code/WorkInProgress/Chemistry-Tools.dm
+++ b/code/WorkInProgress/Chemistry-Tools.dm
@@ -1549,6 +1549,14 @@
..()
reagents.add_reagent("nutriment", 3)
+/obj/item/weapon/reagent_containers/food/snacks/carpmeat
+ name = "carp fillet"
+ desc = "A fillet of spess carp meat"
+ icon_state = "fishfillet"
+ New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+
/obj/item/weapon/reagent_containers/food/snacks/xenomeat
name = "meat"
desc = "A slab of meat"
diff --git a/code/datums/shuttle_controller.dm b/code/datums/shuttle_controller.dm
index 0e5626f0cfc..9f529dfb282 100644
--- a/code/datums/shuttle_controller.dm
+++ b/code/datums/shuttle_controller.dm
@@ -16,6 +16,7 @@ datum/shuttle_controller
endtime // timeofday that shuttle arrives
//timeleft = 360 //600
+ fake_recall = 0 //Used in rounds to prevent "ON NOES, IT MUST [INSERT ROUND] BECAUSE SHUTTLE CAN'T BE CALLED"
// call the shuttle
@@ -85,6 +86,11 @@ datum/shuttle_controller
return 0
+ else if((fake_recall != 0) && (timeleft <= fake_recall))
+ recall()
+
+ return 0
+
else if(timeleft <= 0)
location = 1
var/area/start_location = locate(/area/shuttle/escape/centcom)
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index e702330c014..d7612c84c5f 100644
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -388,18 +388,32 @@
/proc/call_shuttle_proc(var/mob/user)
if ((!( ticker ) || emergency_shuttle.location))
return
+
if(world.time < 6000) // Ten minute grace period to let the game get going without lolmetagaming. -- TLE
user << "The emergency shuttle is refueling. Please wait another [(6000-world.time)/10] seconds before trying again."
return
- if(ticker.mode.name == "revolution" || ticker.mode.name == "AI malfunction" || ticker.mode.name == "confliction")
- user << "Centcom will not allow the shuttle to be called."
- if(sent_strike_team == 1)
- user << "Consider all contracts terminated."
+
+ if(emergency_shuttle.direction == -1)
+ user << "Shuttle may not be called while returning to CentCom."
return
+
+ if(ticker.mode.name == "revolution" || ticker.mode.name == "AI malfunction" || ticker.mode.name == "confliction")
+ //user << "Centcom will not allow the shuttle to be called." //Old code
+ //if(sent_strike_team == 1)
+ // user << "Consider all contracts terminated."
+ //return
+
+ if(sent_strike_team == 1)
+ user << "Centcom will not allow the shuttle to be called. Consider all contracts terminated."
+ return
+ //New version pretends to call the shuttle but cause the shuttle to return after a random duration.
+ emergency_shuttle.fake_recall = rand(300,500)
+
if(sent_strike_team == 1)
if(ticker.mode.name != "revolution" || ticker.mode.name != "AI malfunction")
user << "Centcom will not allow the shuttle to be called. Consider all contracts terminated."
return
+
// if(ticker.mode.name == "blob" || ticker.mode.name == "Corporate Restructuring" || ticker.mode.name == "sandbox")
// user << "Under directive 7-10, [station_name()] is quarantined until further notice."
// return
diff --git a/code/game/objects/livestock.dm b/code/game/objects/livestock.dm
index 9740d0a3897..0456621e0dd 100644
--- a/code/game/objects/livestock.dm
+++ b/code/game/objects/livestock.dm
@@ -53,23 +53,45 @@
usr << text("\red Looks fierce!")
return
+ proc/gib() //Will move this to a generic livestock proc once I get some gib animations for the others -- Darem.
+ var/atom/movable/overlay/animation = null
+ src.icon = null
+ src.invisibility = 101
+ animation = new(src.loc)
+ animation.icon = 'livestock.dmi'
+ animation.icon_state = "blank"
+ animation.master = src
+ if(istype(src, /obj/livestock/spesscarp)) flick("spesscarp_g", animation)
+ sleep(11)
+ src.death(1)
+ del(animation)
+ return
+
attack_hand(user as mob)
return
attackby(obj/item/weapon/W as obj, mob/user as mob)
- switch(W.damtype)
- if("fire")
- src.health -= W.force * 0.75
- if("brute")
- src.health -= W.force * 0.5
- else
- if (src.health <= 0)
- src.death()
- else if (W.force)
- if(src.aggressive && (ishuman(user) || ismonkey(user) || isrobot(user)))
- src.target = user
- src.state = 1
+ if(src.alive)
+ switch(W.damtype)
+ if("fire")
+ src.health -= W.force * 0.75
+ if("brute")
+ src.health -= W.force * 0.5
+ else
+ if (src.health <= 0)
+ src.death()
+ else if (W.force)
+ if(src.aggressive && (ishuman(user) || ismonkey(user) || isrobot(user)))
+ src.target = user
+ src.state = 1
+ if(prob(10)) new /obj/decal/cleanable/blood(src.loc)
+ else if(istype(W, /obj/item/weapon/kitchenknife))
+ user << "\red You slice open the [src.name]!"
+ for (var/obj/item/I in src)
+ I.loc = src.loc
+ del(src)
+ return
..()
bullet_act(flag, A as obj)
@@ -85,9 +107,10 @@
if(PROJECTILE_PULSE)
src.health -= 25
if(prob(30))
- src.ex_act(1)
+ src.gib()
if(PROJECTILE_BOLT)
src.health -= 5
+ if(prob(10)) new /obj/decal/cleanable/blood(src.loc)
healthcheck()
ex_act(severity)
@@ -100,7 +123,7 @@
return
meteorhit()
- src.death()
+ src.gib()
return
blob_act()
@@ -178,9 +201,9 @@
for (var/mob/living/carbon/C in range(view,src.loc)) //Checks all carbon creatures in range.
if (!aggressive) //Is this animal angry? If not, what the fuck are you doing?
break
- if (C.stat == 2 || !can_see(src,C,view_range)) //Can it see it at all or is the target a ghost?
+ if (C.stat == 2 || !can_see(src,C,view_range) || (!can_see(src,C,(view_range / 2)) && C.invisibility >= 1))
continue
- if(C:stunned || C:paralysis || C:weakened) //An easy target, bwahaha!
+ if(C:stunned || C:paralysis || C:weakened)
target = C
break
if(C:health < last_health) //Selects the target but does NOT break the FOR loop.
@@ -281,7 +304,7 @@
proc/death(var/messy = 0)
if(!alive) return
- src.alive = 0
+ alive = 0
density = 0
icon_state = "[initial(icon_state)]_d"
set_null()
@@ -289,13 +312,20 @@
for(var/mob/O in hearers(src, null))
O.show_message("\red [src]'s eyes glass over!", 1)
else
+ for (var/obj/item/I in src)
+ if(!istype(I, /obj/item/weapon/card)) I.loc = src.loc
del(src)
proc/healthcheck()
if (src.health <= 0)
src.death()
-/obj/livestock/chick
+
+//////////////////////////////////////////////////////////////////////////////
+/////////////////////////Specific Creature Entries////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+/*/obj/livestock/chick
name = "Chick"
desc = "A harmless little baby chicken, it's so cute!"
icon_state = "chick"
@@ -316,6 +346,7 @@
if(V.mind.special_role == "wizard")
for(var/mob/H in hearers(src, null))
H << "\green Chick clucks in an angry manner at [V.name]."
+*/
/obj/livestock/spesscarp
name = "Spess Carp"
@@ -329,6 +360,11 @@
patience = 25
view_range = 8
var/stun_chance = 5 // determines the prob of a stun
+ New()
+ ..()
+ new /obj/item/weapon/reagent_containers/food/snacks/carpmeat(src)
+ new /obj/item/weapon/reagent_containers/food/snacks/carpmeat(src)
+ new /obj/item/weapon/reagent_containers/food/snacks/carpmeat(src)
special_attack()
if (prob(stun_chance))
target:stunned = max(target:stunned, (strength / 2))
@@ -341,6 +377,7 @@
stun_chance = 40
intelligence = "Assistant"
+/* Commented out because of filthy xeno-lovers.
/obj/livestock/cow
name = "Pigmy Cow"
desc = "That's not my cow!"
@@ -351,6 +388,11 @@
cycle_pause = 20
patience = 50
view_range = 10
+ New()
+ ..()
+ new /obj/item/weapon/reagent_containers/food/snacks/monkeymeat(src)
+ new /obj/item/weapon/reagent_containers/food/snacks/monkeymeat(src)
+ new /obj/item/weapon/reagent_containers/food/snacks/monkeymeat(src)
special_extra()
if(prob(20))
for(var/mob/O in hearers(src, null))
@@ -368,23 +410,4 @@
usr << text("\red The cow looks uncomfortable.")
if(81 to INFINITY)
usr << text("\red The cow looks as if it could burst at any minute!")
-
- proc/gib() //Will move this to a generic livestock proc once I get some gib animations for the others -- Darem.
- var/atom/movable/overlay/animation = null
- src.icon = null
- src.invisibility = 101
- animation = new(src.loc)
- animation.icon = 'livestock.dmi'
- animation.icon_state = "blank"
- animation.master = src
- flick("cow_g", animation)
- new /obj/decal/cleanable/blood(src)
- new /obj/item/weapon/reagent_containers/food/snacks/monkeymeat(src)
- new /obj/item/weapon/reagent_containers/food/snacks/monkeymeat(src)
- new /obj/item/weapon/reagent_containers/food/snacks/monkeymeat(src)
- for (var/obj/I in src) //Not the best way to do this but it allows for pinata style animals as well.
- I.loc = src.loc
- sleep(11)
- src.death(1)
- del(animation)
- return
\ No newline at end of file
+ */
\ No newline at end of file
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index ac8aa899c55..6c6252d43b9 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -566,10 +566,16 @@ Would like to add a law like "Law x is _______" where x = a number, and _____ is
src << "Only administrators may use this command."
return
+ if(ticker.mode.name == "revolution" || ticker.mode.name == "AI malfunction" || ticker.mode.name == "confliction")
+ var/choice = input("The shuttle will just return if you call it. Call anyway?") in list("Confirm", "Cancel")
+ if(choice == "Confirm")
+ emergency_shuttle.fake_recall = rand(300,500)
+ else
+ return
+
emergency_shuttle.incall()
world << "\blue Alert: The emergency shuttle has been called. It will arrive in [round(emergency_shuttle.timeleft()/60)] minutes."
world << sound('shuttlecalled.ogg')
-
return
/client/proc/admin_cancel_shuttle()
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index 5f500cc3248..886e93d1eb0 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -1,6 +1,7 @@
/mob/living/carbon/human/say(var/message)
if(src.mutantrace == "lizard")
- message = dd_replaceText(message, "s", stutter("ss"))
+ if(copytext(message, 1, 2) != "*")
+ message = dd_replaceText(message, "s", stutter("ss"))
..(message)
/mob/living/carbon/human/say_understands(var/other)
diff --git a/icons/mob/livestock.dmi b/icons/mob/livestock.dmi
index 577e0bcf73e..cedaeaf5066 100644
Binary files a/icons/mob/livestock.dmi and b/icons/mob/livestock.dmi differ
diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi
index 42d64d6567b..c1b51ae3e22 100644
Binary files a/icons/obj/food.dmi and b/icons/obj/food.dmi differ