diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm
index e24462f6493..73a1576deeb 100644
--- a/code/_onclick/hud/action_button.dm
+++ b/code/_onclick/hud/action_button.dm
@@ -7,6 +7,7 @@
var/list/modifiers = params2list(params)
if(modifiers["shift"])
moved = 0
+ usr.update_action_buttons() //redraw buttons that are no longer considered "moved"
return 1
if(usr.next_move >= world.time) // Is this needed ?
return
diff --git a/code/controllers/subsystem/fastprocess.dm b/code/controllers/subsystem/fastprocess.dm
new file mode 100644
index 00000000000..8bed991dbdc
--- /dev/null
+++ b/code/controllers/subsystem/fastprocess.dm
@@ -0,0 +1,36 @@
+var/datum/subsystem/fastprocess/SSfastprocess
+
+/datum/subsystem/fastprocess
+ name = "Fast Process"
+ priority = -1
+ wait = 1
+ dynamic_wait = 1
+ dwait_upper = 300
+ dwait_lower = 1
+ dwait_delta = 7
+
+ var/list/processing = list()
+ var/list/currentrun = list()
+
+/datum/subsystem/fastprocess/New()
+ NEW_SS_GLOBAL(SSfastprocess)
+
+/datum/subsystem/fastprocess/stat_entry()
+ ..("FP:[processing.len]")
+
+
+/datum/subsystem/fastprocess/fire(resumed = 0)
+ if (!resumed)
+ src.currentrun = processing.Copy()
+ //cache for sanic speed (lists are references anyways)
+ var/list/currentrun = src.currentrun
+
+ while(currentrun.len)
+ var/datum/thing = currentrun[1]
+ currentrun.Cut(1, 2)
+ if(thing)
+ thing.process(wait)
+ else
+ SSfastprocess.processing -= thing
+ if (MC_TICK_CHECK)
+ return
diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm
index 5b27efc1420..8b8b70de1b9 100644
--- a/code/game/gamemodes/cult/cult_items.dm
+++ b/code/game/gamemodes/cult/cult_items.dm
@@ -83,7 +83,7 @@
item_state = "cult_hoodalt"
/obj/item/clothing/suit/cultrobes/alt
- name = "cultist hood"
+ name = "cultist robes"
desc = "An armored set of robes worn by the followers of Nar-Sie."
icon_state = "cultrobesalt"
item_state = "cultrobesalt"
diff --git a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm
index 261e6492ea3..9e28fb9b116 100644
--- a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm
+++ b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm
@@ -54,8 +54,9 @@
reveal(46)
stun(46)
target.visible_message("[target] suddenly rises slightly into the air, their skin turning an ashy gray.")
- Beam(target,icon_state="drain_life",icon='icons/effects/effects.dmi',time=46)
+ var/datum/beam/B = Beam(target,icon_state="drain_life",icon='icons/effects/effects.dmi',time=46)
if(do_after(src, 46, 0, target)) //As one cannot prove the existance of ghosts, ghosts cannot prove the existance of the target they were draining.
+ qdel(B)
change_essence_amount(essence_drained, 0, target)
if(essence_drained <= 90 && target.stat != DEAD)
essence_regen_cap += 5
@@ -70,6 +71,7 @@
drained_mobs.Add(target)
target.death(0)
else
+ qdel(B)
src << "[target ? "[target] has":"They have"] been drawn out of your grasp. The link has been broken."
draining = 0
essence_drained = 0
diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm
index 55d502fc8b8..2dee631f659 100644
--- a/code/game/gamemodes/nuclear/nuclearbomb.dm
+++ b/code/game/gamemodes/nuclear/nuclearbomb.dm
@@ -433,6 +433,12 @@ This is here to make the tiles around the station mininuke change when it's arme
if(blobstart.len > 0)
var/turf/targetturf = get_turf(pick(blobstart))
var/turf/diskturf = get_turf(src)
+ if(ismob(loc))
+ var/mob/M = loc
+ M.remove_from_mob(src)
+ if(istype(loc, /obj/item/weapon/storage))
+ var/obj/item/weapon/storage/S = loc
+ S.remove_from_storage(src, diskturf)
forceMove(targetturf) //move the disc, so ghosts remain orbitting it even if it's "destroyed"
message_admins("[src] has been destroyed in ([diskturf.x], [diskturf.y] ,[diskturf.z] - JMP). Moving it to ([targetturf.x], [targetturf.y], [targetturf.z] - JMP).")
log_game("[src] has been destroyed in ([diskturf.x], [diskturf.y] ,[diskturf.z]). Moving it to ([targetturf.x], [targetturf.y], [targetturf.z]).")
diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm
index 77a56876f9d..a529aa05626 100644
--- a/code/game/gamemodes/traitor/traitor.dm
+++ b/code/game/gamemodes/traitor/traitor.dm
@@ -15,6 +15,7 @@
required_enemies = 1
recommended_enemies = 4
reroll_friendly = 1
+ enemy_minimum_age = 0
var/traitors_possible = 4 //hard limit on traitors if scaling is turned off
var/num_modifier = 0 // Used for gamemodes, that are a child of traitor, that need more than the usual.
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index a316b84ea61..0e209bbc190 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -117,16 +117,23 @@ Class Procs:
var/unsecuring_tool = /obj/item/weapon/wrench
var/interact_open = 0 // Can the machine be interacted with when in maint/when the panel is open.
var/interact_offline = 0 // Can the machine be interacted with while de-powered.
+ var/speed_process = 0 // Process as fast as possible?
/obj/machinery/New()
..()
machines += src
- SSmachine.processing += src
+ if(!speed_process)
+ SSmachine.processing += src
+ else
+ SSfastprocess.processing += src
power_change()
/obj/machinery/Destroy()
machines.Remove(src)
- SSmachine.processing -= src
+ if(!speed_process)
+ SSmachine.processing -= src
+ else
+ SSfastprocess.processing -= src
dropContents()
return ..()
diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm
index 91b9c1ecd36..435a07bdbc8 100644
--- a/code/game/objects/effects/effect_system/effects_foam.dm
+++ b/code/game/objects/effects/effect_system/effects_foam.dm
@@ -12,7 +12,7 @@
var/amount = 3
animate_movement = 0
var/metal = 0
- var/lifetime = 6
+ var/lifetime = 40
/obj/effect/particle_effect/foam/metal
@@ -29,16 +29,16 @@
/obj/effect/particle_effect/foam/New(loc)
..(loc)
create_reagents(1000) //limited by the size of the reagent holder anyway.
- SSobj.processing |= src
+ SSfastprocess.processing |= src
playsound(src, 'sound/effects/bubbles2.ogg', 80, 1, -3)
/obj/effect/particle_effect/foam/Destroy()
- SSobj.processing.Remove(src)
+ SSfastprocess.processing.Remove(src)
return ..()
/obj/effect/particle_effect/foam/proc/kill_foam()
- SSobj.processing.Remove(src)
+ SSfastprocess.processing.Remove(src)
if(metal)
var/obj/structure/foamedmetal/M = new(src.loc)
M.metal = metal
diff --git a/code/game/objects/items/weapons/grenades/clusterbuster.dm b/code/game/objects/items/weapons/grenades/clusterbuster.dm
index d75fc7b7db1..4c37eb05a0d 100644
--- a/code/game/objects/items/weapons/grenades/clusterbuster.dm
+++ b/code/game/objects/items/weapons/grenades/clusterbuster.dm
@@ -124,3 +124,7 @@
/obj/item/weapon/grenade/clusterbuster/soap
name = "Slipocalypse"
payload = /obj/item/weapon/grenade/spawnergrenade/syndiesoap
+
+/obj/item/weapon/grenade/clusterbuster/clf3
+ name = "WELCOME TO HELL"
+ payload = /obj/item/weapon/grenade/chem_grenade/clf3
\ No newline at end of file
diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm
index 91073bb45cc..a70646b95f2 100644
--- a/code/modules/cargo/packs.dm
+++ b/code/modules/cargo/packs.dm
@@ -744,7 +744,7 @@
access = access_rd
contains = list(/obj/item/device/transfer_valve,
/obj/item/device/transfer_valve)
- crate_name = "tank transfer valves crate crate"
+ crate_name = "tank transfer valves crate"
crate_type = /obj/structure/closet/crate/secure
dangerous = TRUE
@@ -802,7 +802,7 @@
/obj/item/weapon/reagent_containers/food/drinks/beer,
/obj/item/weapon/reagent_containers/food/drinks/beer,
/obj/item/weapon/reagent_containers/food/drinks/beer)
- crate_name = "party equipment"
+ crate_name = "party equipment crate"
/datum/supply_pack/organic/critter
crate_type = /obj/structure/closet/crate/critter
@@ -955,7 +955,7 @@
/obj/item/clothing/suit/beekeeper_suit,
/obj/item/clothing/head/beekeeper_head,
/obj/item/clothing/suit/beekeeper_suit)
- crate_name = "beekeper suits"
+ crate_name = "beekeeper suits"
/datum/supply_pack/organic/vending
name = "Bartending Supply Crate"
@@ -982,7 +982,7 @@
contains = list(/obj/item/weapon/vending_refill/cola,
/obj/item/weapon/vending_refill/cola,
/obj/item/weapon/vending_refill/cola)
- crate_name = "softdrinks supply crate"
+ crate_name = "soft drinks supply crate"
/datum/supply_pack/organic/vending/cigarette
name = "Cigarette Supply Crate"
@@ -1193,7 +1193,7 @@
name = "High-traction Floor Tiles"
cost = 2000
contains = list(/obj/item/stack/tile/noslip/thirty)
- crate_name = "high-traction floor tiles"
+ crate_name = "high-traction floor tiles crate"
/datum/supply_pack/misc/plasmaman
name = "Plasmaman Supply Kit"
diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm
index 1577418abdd..7fa36f22b3e 100644
--- a/code/modules/clothing/suits/utility.dm
+++ b/code/modules/clothing/suits/utility.dm
@@ -125,10 +125,10 @@
permeability_coefficient = 0.50
flags = THICKMATERIAL
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen)
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/device/geiger_counter)
slowdown = 1.5
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100)
strip_delay = 60
put_on_delay = 60
flags_inv = HIDEJUMPSUIT
- burn_state = FIRE_PROOF
\ No newline at end of file
+ burn_state = FIRE_PROOF
diff --git a/code/modules/food&drinks/food/snacks_other.dm b/code/modules/food&drinks/food/snacks_other.dm
index b43aab23ef4..f962ff5e48e 100644
--- a/code/modules/food&drinks/food/snacks_other.dm
+++ b/code/modules/food&drinks/food/snacks_other.dm
@@ -319,4 +319,12 @@
list_reagents = list("nutriment" = 9, "vodka" = 15, "vitamin" = 4)
filling_color = "#FFD700"
volume = 80
- bitesize = 5
\ No newline at end of file
+ bitesize = 5
+
+/obj/item/weapon/reagent_containers/food/snacks/honeybar
+ name = "honey nut bar"
+ desc = "Oats and nuts compressed together into a bar, held together with a honey glaze."
+ icon_state = "honeybar"
+ bonus_reagents = list("nutriment" = 2, "honey" = 2, "vitamin" = 2)
+ list_reagents = list("nutriment" = 5, "honey" = 5)
+ filling_color = "#F2CE91"
\ No newline at end of file
diff --git a/code/modules/food&drinks/food/snacks_pastry.dm b/code/modules/food&drinks/food/snacks_pastry.dm
index f3f3dbe1603..1e5362a5b54 100644
--- a/code/modules/food&drinks/food/snacks_pastry.dm
+++ b/code/modules/food&drinks/food/snacks_pastry.dm
@@ -266,3 +266,11 @@
bonus_reagents = list("nutriment" = 1, "vitamin" = 3)
list_reagents = list("nutriment" = 5, "vitamin" = 1)
filling_color = "#F0E68C"
+
+/obj/item/weapon/reagent_containers/food/snacks/honeybun
+ name = "honey bun"
+ desc = "A sticky pastry bun glazed with honey."
+ icon_state = "honeybun"
+ bonus_reagents = list("nutriment" = 1, "honey" = 1)
+ list_reagents = list("nutriment" = 5, "honey" = 5)
+ filling_color = "#F2CE91"
\ No newline at end of file
diff --git a/code/modules/food&drinks/recipes/drinks_recipes.dm b/code/modules/food&drinks/recipes/drinks_recipes.dm
index c869a11842d..43c5cf9cf1e 100644
--- a/code/modules/food&drinks/recipes/drinks_recipes.dm
+++ b/code/modules/food&drinks/recipes/drinks_recipes.dm
@@ -364,7 +364,7 @@
name = "Mead"
id = "mead"
result = "mead"
- required_reagents = list("sugar" = 1, "water" = 1)
+ required_reagents = list("honey" = 2)
required_catalysts = list("enzyme" = 5)
result_amount = 2
diff --git a/code/modules/food&drinks/recipes/tablecraft/recipes_misc.dm b/code/modules/food&drinks/recipes/tablecraft/recipes_misc.dm
index 3f788ac4672..8db215dae2c 100644
--- a/code/modules/food&drinks/recipes/tablecraft/recipes_misc.dm
+++ b/code/modules/food&drinks/recipes/tablecraft/recipes_misc.dm
@@ -247,4 +247,13 @@
)
parts = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka = 1)
result = /obj/item/weapon/reagent_containers/food/snacks/melonkeg
+ category = CAT_FOOD
+
+/datum/table_recipe/honeybar
+ name = "Honey nut bar"
+ reqs = list(
+ /obj/item/weapon/reagent_containers/food/snacks/grown/oat = 1,
+ /datum/reagent/consumable/honey = 5
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/honeybar
category = CAT_FOOD
\ No newline at end of file
diff --git a/code/modules/food&drinks/recipes/tablecraft/recipes_pastry.dm b/code/modules/food&drinks/recipes/tablecraft/recipes_pastry.dm
index 2da19136d3c..99305007696 100644
--- a/code/modules/food&drinks/recipes/tablecraft/recipes_pastry.dm
+++ b/code/modules/food&drinks/recipes/tablecraft/recipes_pastry.dm
@@ -267,4 +267,13 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/bluecherries = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/bluecherrycupcake
+ category = CAT_FOOD
+
+/datum/table_recipe/honeybun
+ name = "Honey bun"
+ reqs = list(
+ /obj/item/weapon/reagent_containers/food/snacks/pastrybase = 1,
+ /datum/reagent/consumable/honey = 5
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/honeybun
category = CAT_FOOD
\ No newline at end of file
diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm
index 6964eea4d11..a23090ba4e2 100644
--- a/code/modules/mining/equipment_locker.dm
+++ b/code/modules/mining/equipment_locker.dm
@@ -20,6 +20,7 @@
var/sheet_per_ore = 1
var/point_upgrade = 1
var/list/ore_values = list(("sand" = 1), ("iron" = 1), ("plasma" = 15), ("silver" = 16), ("gold" = 18), ("uranium" = 30), ("diamond" = 50), ("bananium" = 60))
+ speed_process = 1
/obj/machinery/mineral/ore_redemption/New()
..()
diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm
index 2274a61b20b..43e0b8cac4d 100644
--- a/code/modules/mining/machine_processing.dm
+++ b/code/modules/mining/machine_processing.dm
@@ -8,6 +8,7 @@
anchored = 1
var/obj/machinery/mineral/processing_unit/machine = null
var/machinedir = EAST
+ speed_process = 1
/obj/machinery/mineral/processing_unit_console/New()
..()
diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm
index 37ce43abc46..9d63e3de4de 100644
--- a/code/modules/mining/machine_stacking.dm
+++ b/code/modules/mining/machine_stacking.dm
@@ -8,6 +8,7 @@
anchored = 1
var/obj/machinery/mineral/stacking_machine/machine = null
var/machinedir = SOUTHEAST
+ speed_process = 1
/obj/machinery/mineral/stacking_unit_console/New()
..()
diff --git a/code/modules/mining/machine_unloading.dm b/code/modules/mining/machine_unloading.dm
index 4c86526f01d..becb4624805 100644
--- a/code/modules/mining/machine_unloading.dm
+++ b/code/modules/mining/machine_unloading.dm
@@ -9,6 +9,7 @@
anchored = 1
input_dir = WEST
output_dir = EAST
+ speed_process = 1
/obj/machinery/mineral/unloading_machine/process()
var/turf/T = get_step(src,input_dir)
@@ -21,8 +22,11 @@
limit++
if (limit>=10)
return
+ CHECK_TICK
+ CHECK_TICK
for(var/obj/item/I in T)
unload_mineral(I)
limit++
if (limit>=10)
- return
\ No newline at end of file
+ return
+ CHECK_TICK
\ No newline at end of file
diff --git a/code/modules/mining/mint.dm b/code/modules/mining/mint.dm
index 3caefd09573..6da4c611b2a 100644
--- a/code/modules/mining/mint.dm
+++ b/code/modules/mining/mint.dm
@@ -20,6 +20,7 @@
var/processing = 0
var/chosen = "metal" //which material will be used to make coins
var/coinsToProduce = 10
+ speed_process = 1
/obj/machinery/mineral/mint/process()
var/turf/T = get_step(src,input_dir)
diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm
index 8931b869b4d..889ab80d2a3 100644
--- a/code/modules/mob/living/simple_animal/guardian/guardian.dm
+++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm
@@ -446,7 +446,7 @@ var/global/list/parasites = list() //all currently existing/living guardians
ling_failure = "The holoparasites recoil in horror. They want nothing to do with a creature like you."
/obj/item/weapon/guardiancreator/tech/choose/traitor
- possible_guardians = list("Chaos", "Standard", "Ranged", "Support", "Explosive", "Lightning", "Assassin")
+ possible_guardians = list("Assassin", "Chaos", "Charger", "Explosive", "Lightning", "Ranged", "Standard", "Support")
/obj/item/weapon/guardiancreator/tech/choose
random = FALSE
@@ -456,20 +456,23 @@ var/global/list/parasites = list() //all currently existing/living guardians
icon_state = "paper_words"
info = {"A list of Holoparasite Types
+
+ Assassin: Does low damage and takes full damage, but can enter stealth, causing its next attack to do massive damage and ignore armor. However, it becomes briefly unable to recall after attacking from stealth.
Chaos: Ignites enemies on touch and causes them to hallucinate all nearby people as the parasite. Automatically extinguishes the user if they catch on fire.
- Standard: Devastating close combat attacks and high damage resist. Can smash through weak walls.
-
- Ranged: Has two modes. Ranged; which fires a constant stream of weak, armor-ignoring projectiles. Scout; Cannot attack, but can move through walls and is quite hard to see. Can lay surveillance snares, which alert it when crossed, in either mode.
-
- Support: Has two modes. Combat; Medium power attacks and damage resist. Healer; Heals instead of attack, but has low damage resist and slow movement. Can deploy a bluespace beacon and warp targets to it (including you) in either mode.
+ Charger: Moves extremely fast, does medium damage on attack, and can charge at targets, damaging the first target hit and forcing them to drop any items they are holding.
Explosive: High damage resist and medium power attack that may explosively teleport targets. Can turn any object, including objects too large to pick up, into a bomb, dealing explosive damage to the next person to touch it. The object will return to normal after the trap is triggered or after a delay.
Lightning: Attacks apply lightning chains to targets. Has a lightning chain to the user. Lightning chains shock everything near them, doing constant damage.
- Assassin: Does low damage and takes full damage, but can enter stealth, causing its next attack to do massive damage and ignore armor. However, it becomes briefly unable to recall after attacking from stealth.
Ranged: Has two modes. Ranged; which fires a constant stream of weak, armor-ignoring projectiles. Scout; Cannot attack, but can move through walls and is quite hard to see. Can lay surveillance snares, which alert it when crossed, in either mode.
+
+ Standard: Devastating close combat attacks and high damage resist. Can smash through weak walls.
+
+ Support: Has two modes. Combat; Medium power attacks and damage resist. Healer; Heals instead of attack, but has low damage resist and slow movement. Can deploy a bluespace beacon and warp targets to it (including you) in either mode.
+
"}
/obj/item/weapon/paper/guardian/update_icon()
diff --git a/code/modules/mob/living/simple_animal/guardian/types/charger.dm b/code/modules/mob/living/simple_animal/guardian/types/charger.dm
index 895f7ef38c7..98bf2ee731d 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/charger.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/charger.dm
@@ -7,7 +7,7 @@
ranged_cooldown_cap = 5
speed = -1
damage_coeff = list(BRUTE = 0.6, BURN = 0.6, TOX = 0.6, CLONE = 0.6, STAMINA = 0, OXY = 0.6)
- playstyle_string = "As a charger type you do medium damage, have medium damage resistance, move very fast, and can charge at a location, stunning and heavily damaging any target hit."
+ playstyle_string = "As a charger type you do medium damage, have medium damage resistance, move very fast, and can charge at a location, damaging any target hit and forcing them to drop any items they are holding."
magic_fluff_string = "..And draw the Hunter, an alien master of rapid assault."
tech_fluff_string = "Boot sequence complete. Charge modules loaded. Holoparasite swarm online."
var/charging = 0
@@ -60,8 +60,9 @@
blocked = 1
if(!blocked)
+ L.drop_r_hand()
+ L.drop_l_hand()
L.visible_message("[src] slams into [L]!", "[src] slams into you!")
- L.Weaken(2)
L.apply_damage(20, BRUTE)
charging = 0
diff --git a/code/modules/mob/living/simple_animal/hostile/zombie.dm b/code/modules/mob/living/simple_animal/hostile/zombie.dm
index 9d0f091fa37..89ac80ec193 100644
--- a/code/modules/mob/living/simple_animal/hostile/zombie.dm
+++ b/code/modules/mob/living/simple_animal/hostile/zombie.dm
@@ -9,9 +9,9 @@
speak_emote = list("groans")
emote_see = list("groans")
a_intent = "harm"
- maxHealth = 100
- health = 100
- speed = 1
+ maxHealth = 180
+ health = 180
+ speed = 2
harm_intent_damage = 8
melee_damage_lower = 20
melee_damage_upper = 20
@@ -51,6 +51,19 @@
visible_message("[src] tears [L] to pieces!")
src << "You feast on [L], restoring your health!"
revive(full_heal = 1)
+
+ if(istype(target, /obj/machinery/door/airlock))
+ src << "You start tearing apart the airlock..."
+ playsound(src.loc, 'sound/hallucinations/growl3.ogg', 50, 1)
+ if(do_after(src, 250, target))
+ playsound(src.loc, 'sound/hallucinations/far_noise.ogg', 50, 1)
+ qdel(target)
+ var/obj/machinery/door/airlock/A = target
+ var/obj/structure/door_assembly/door = new A.doortype(target.loc)
+ door.density = 0
+ door.anchored = 1
+ door.name = "ravaged airlock"
+ door.desc = "An airlock that has been torn apart. Looks like it wont be keeping much out now."
/mob/living/simple_animal/hostile/zombie/death()
..()
@@ -64,7 +77,7 @@
qdel(src)
return
src << "You're down, but not quite out. You'll be back on your feet within a minute or two."
- spawn(rand(800,1200))
+ spawn(rand(600,900))
if(src)
visible_message("[src] staggers to their feet!")
revive(full_heal = 1)
diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm
index ddb7c03f3b2..8ae2c6bd124 100644
--- a/code/modules/mob/mob_grab.dm
+++ b/code/modules/mob/mob_grab.dm
@@ -1,5 +1,5 @@
-#define UPGRADE_COOLDOWN 100
-#define UPGRADE_KILL_TIMER 150
+#define UPGRADE_COOLDOWN 60
+#define UPGRADE_KILL_TIMER 100
/obj/item/weapon/grab
name = "grab"
@@ -104,12 +104,13 @@
var/breathing_tube = affecting.getorganslot("breathing_tube")
if(state >= GRAB_NECK)
+ affecting.Stun(2) //It will hamper your voice, being choked and all.
if(isliving(affecting) && !breathing_tube)
var/mob/living/L = affecting
L.adjustOxyLoss(0.5)
if(state >= GRAB_KILL)
- affecting.Weaken(2) //Should keep you down unless you get help.
+ affecting.Weaken(5) //Should keep you down unless you get help.
if(!breathing_tube)
affecting.losebreath = min(affecting.losebreath + 2, 3)
diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index d21809aa4d0..9a2f72274dc 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -228,14 +228,14 @@
if(GRAB_AGGRESSIVE)
move_delay = world.time + 10
- if(!prob(75))
+ if(!prob(50))
return 1
mob.visible_message("[mob] has broken free of [G.assailant]'s grip!")
qdel(G)
if(GRAB_NECK)
move_delay = world.time + 10
- if(!prob(50))
+ if(!prob(15))
return 1
mob.visible_message("[mob] has broken free of [G.assailant]'s headlock!")
qdel(G)
diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm
index e2e5e3c8b3c..82646434ca9 100644
--- a/code/modules/projectiles/projectile/magic.dm
+++ b/code/modules/projectiles/projectile/magic.dm
@@ -302,6 +302,9 @@
S.name = "statue of [H.name]"
S.faction = list("\ref[firer]")
S.icon = change.icon
+ S.icon_state = change.icon_state
+ S.overlays = change.overlays
+ S.color = change.color
if(H.mind)
H.mind.transfer_to(S)
S << "You are an animate statue. You cannot move when monitored, but are nearly invincible and deadly when unobserved! Do not harm [firer.name], your creator."
diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm
index 7681ede8dbc..2e12d38cbf6 100644
--- a/code/modules/recycling/conveyor2.dm
+++ b/code/modules/recycling/conveyor2.dm
@@ -16,6 +16,7 @@
var/list/affecting // the list of all items that will be moved this ptick
var/id = "" // the control ID - must match controller ID
var/verted = 1 // set to -1 to have the conveyour belt be inverted, so you can use the other corner icons
+ speed_process = 1
/obj/machinery/conveyor/centcom_auto
id = "round_end_belt"
@@ -105,15 +106,12 @@
use_power(100)
affecting = loc.contents - src // moved items will be all in loc
- sleep(1) // slight delay to prevent infinite propagation due to map order
- var/items_moved = 0
+ sleep(1)
for(var/atom/movable/A in affecting)
if(!A.anchored)
if(A.loc == src.loc) // prevents the object from being affected if it's not currently here.
step(A,movedir)
- items_moved++
- if(items_moved >= 10)
- break
+ CHECK_TICK
// attack with item, place item on conveyor
/obj/machinery/conveyor/attackby(obj/item/I, mob/user, params)
@@ -125,7 +123,7 @@
user << "You remove the conveyor belt."
qdel(src)
return
- if(istype(I, /obj/item/weapon/wrench))
+ if(istype(I, /obj/item/weapon/wrench))
if(!(stat & BROKEN))
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
dir = turn(dir,-45)
@@ -203,6 +201,7 @@
var/list/conveyors // the list of converyors that are controlled by this switch
anchored = 1
+ speed_process = 1
@@ -240,6 +239,7 @@
for(var/obj/machinery/conveyor/C in conveyors)
C.operating = position
C.update_move_direction()
+ CHECK_TICK
// attack with hand, switch position
/obj/machinery/conveyor_switch/attack_hand(mob/user)
@@ -266,6 +266,7 @@
if(S.id == src.id)
S.position = position
S.update()
+ CHECK_TICK
/obj/machinery/conveyor_switch/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/crowbar))
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index d416f60b429..77e9d350cd3 100644
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -8,7 +8,6 @@
var/giftwrapped = 0
var/sortTag = 0
-
/obj/structure/bigDelivery/attack_hand(mob/user)
playsound(src.loc, 'sound/items/poster_ripped.ogg', 50, 1)
qdel(src)
diff --git a/html/changelog.html b/html/changelog.html
index fb95882fbab..b1cca899edc 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -55,6 +55,21 @@
-->