Merge branch 'master' into tinytweaks-2-9-20
This commit is contained in:
@@ -116,7 +116,7 @@ This file contains the cult dagger and rune list code
|
||||
if(user.blood_volume)
|
||||
user.apply_damage(initial(rune_to_scribe.scribe_damage), BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))
|
||||
var/scribe_mod = initial(rune_to_scribe.scribe_delay)
|
||||
if(istype(get_turf(user), /turf/open/floor/engine/cult))
|
||||
if(istype(get_turf(user), /turf/open/floor/engine/cult) && !(ispath(rune_to_scribe, /obj/effect/rune/narsie)))
|
||||
scribe_mod *= 0.5
|
||||
if(!do_after(user, scribe_mod, target = get_turf(user)))
|
||||
for(var/V in shields)
|
||||
|
||||
@@ -251,6 +251,7 @@
|
||||
/obj/machinery/atmospherics/components/unary/cryo_cell/close_machine(mob/living/carbon/user)
|
||||
if((isnull(user) || istype(user)) && state_open && !panel_open)
|
||||
..(user)
|
||||
reagent_transfer = 0
|
||||
return occupant
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/cryo_cell/container_resist(mob/living/user)
|
||||
|
||||
@@ -105,6 +105,7 @@ datum/bounty/reagent/complex_drink/New()
|
||||
/datum/reagent/consumable/ethanol/hearty_punch,\
|
||||
/datum/reagent/consumable/ethanol/manhattan_proj,\
|
||||
/datum/reagent/consumable/ethanol/narsour,\
|
||||
/datum/reagent/consumable/ethanol/cogchamp,\
|
||||
/datum/reagent/consumable/ethanol/neurotoxin,\
|
||||
/datum/reagent/consumable/ethanol/patron,\
|
||||
/datum/reagent/consumable/ethanol/quadruple_sec,\
|
||||
|
||||
@@ -107,9 +107,9 @@
|
||||
smash(hit_atom, throwingdatum?.thrower, TRUE)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/proc/smash(atom/target, mob/thrower, ranged = FALSE)
|
||||
if(!isGlass)
|
||||
if(!isGlass && !istype(src, /obj/item/reagent_containers/food/drinks/bottle)) //I don't like this but I also don't want to rework drink container hierarchy
|
||||
return
|
||||
if(QDELING(src) || !target) //Invalid loc
|
||||
if(QDELING(src) || (ranged && !target))
|
||||
return
|
||||
if(bartender_check(target) && ranged)
|
||||
return
|
||||
@@ -126,12 +126,69 @@
|
||||
B.transform = M
|
||||
B.pixel_x = rand(-12, 12)
|
||||
B.pixel_y = rand(-12, 12)
|
||||
if(prob(33))
|
||||
new/obj/item/shard(drop_location())
|
||||
playsound(src, "shatter", 70, 1)
|
||||
if(isGlass)
|
||||
playsound(src, "shatter", 70, 1)
|
||||
if(prob(33))
|
||||
new/obj/item/shard(drop_location())
|
||||
else
|
||||
B.force = 0
|
||||
B.throwforce = 0
|
||||
B.desc = "A carton with the bottom half burst open. Might give you a papercut."
|
||||
transfer_fingerprints_to(B)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/MouseDrop(atom/over, atom/src_location, atom/over_location, src_control, over_control, params)
|
||||
var/mob/user = usr
|
||||
. = ..()
|
||||
if (!istype(src_location) || !istype(over_location))
|
||||
return
|
||||
if (!user || user.incapacitated() || !user.Adjacent(src))
|
||||
return
|
||||
if (!(locate(/obj/structure/table) in src_location) || !(locate(/obj/structure/table) in over_location))
|
||||
return
|
||||
|
||||
//Are we an expert slider?
|
||||
var/datum/action/innate/D = get_action_of_type(user, /datum/action/innate/drink_fling)
|
||||
if(!D?.active)
|
||||
if (!src_location.Adjacent(over_location)) // Regular users can only do short slides.
|
||||
return
|
||||
if (prob(10))
|
||||
user.visible_message("<span class='warning'>\The [user] tries to slide \the [src] down the table, but fails miserably.</span>", "<span class='warning'>You <b>fail</b> to slide \the [src] down the table!</span>")
|
||||
smash(over_location, user, FALSE)
|
||||
return
|
||||
user.visible_message("<span class='notice'>\The [user] slides \the [src] down the table.</span>", "<span class='notice'>You slide \the [src] down the table!</span>")
|
||||
forceMove(over_location)
|
||||
return
|
||||
var/distance = MANHATTAN_DISTANCE(over_location, src)
|
||||
if (distance >= 8 || distance == 0) // More than a full screen to go, or trying to slide to the same tile
|
||||
return
|
||||
|
||||
// Geometrically checking if we're on a straight line.
|
||||
var/datum/vector/V = atoms2vector(src, over_location)
|
||||
var/datum/vector/V_norm = V.duplicate()
|
||||
V_norm.normalize()
|
||||
if (!V_norm.is_integer())
|
||||
return // Only a cardinal vector (north, south, east, west) can pass this test
|
||||
|
||||
// Checks if there's tables on the path.
|
||||
var/turf/dest = get_translated_turf(V)
|
||||
var/turf/temp_turf = src_location
|
||||
|
||||
do
|
||||
temp_turf = temp_turf.get_translated_turf(V_norm)
|
||||
if (!locate(/obj/structure/table) in temp_turf)
|
||||
var/datum/vector/V2 = atoms2vector(src, temp_turf)
|
||||
vector_translate(V2, 0.1 SECONDS)
|
||||
user.visible_message("<span class='warning'>\The [user] slides \the [src] down the table... and straight into the ground!</span>", "<span class='warning'>You slide \the [src] down the table, and straight into the ground!</span>")
|
||||
smash(over_location, user, FALSE)
|
||||
return
|
||||
while (temp_turf != dest)
|
||||
|
||||
vector_translate(V, 0.1 SECONDS)
|
||||
user.visible_message("<span class='notice'>\The [user] expertly slides \the [src] down the table.</span>", "<span class='notice'>You slide \the [src] down the table. What a pro.</span>")
|
||||
return
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// Drinks. END
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -294,28 +351,6 @@
|
||||
icon_state = "juicebox"
|
||||
volume = 15 //I figure if you have to craft these it should at least be slightly better than something you can get for free from a watercooler
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/sillycup/smallcarton/smash(atom/target, mob/thrower, ranged = FALSE)
|
||||
if(bartender_check(target) && ranged)
|
||||
return
|
||||
var/obj/item/broken_bottle/B = new (loc)
|
||||
B.icon_state = icon_state
|
||||
var/icon/I = new('icons/obj/drinks.dmi', src.icon_state)
|
||||
I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1)
|
||||
I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0))
|
||||
B.icon = I
|
||||
B.name = "broken [name]"
|
||||
B.force = 0
|
||||
B.throwforce = 0
|
||||
B.desc = "A carton with the bottom half burst open. Might give you a papercut."
|
||||
if(ranged)
|
||||
var/matrix/M = matrix(B.transform)
|
||||
M.Turn(rand(-170, 170))
|
||||
B.transform = M
|
||||
B.pixel_x = rand(-12, 12)
|
||||
B.pixel_y = rand(-12, 12)
|
||||
transfer_fingerprints_to(B)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/sillycup/smallcarton/on_reagent_change(changetype)
|
||||
if (reagents.reagent_list.len)
|
||||
switch(reagents.get_master_reagent_id())
|
||||
|
||||
@@ -16,40 +16,6 @@
|
||||
isGlass = TRUE
|
||||
foodtype = ALCOHOL
|
||||
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/smash(mob/living/target, mob/thrower, ranged = FALSE)
|
||||
//Creates a shattering noise and replaces the bottle with a broken_bottle
|
||||
if(bartender_check(target) && ranged)
|
||||
return
|
||||
var/obj/item/broken_bottle/B = new (loc)
|
||||
if(!ranged)
|
||||
thrower.put_in_hands(B)
|
||||
else
|
||||
var/matrix/M = matrix(B.transform)
|
||||
M.Turn(rand(-170, 170))
|
||||
B.transform = M
|
||||
B.pixel_x = rand(-12, 12)
|
||||
B.pixel_y = rand(-12, 12)
|
||||
B.icon_state = icon_state
|
||||
|
||||
var/icon/I = new('icons/obj/drinks.dmi', src.icon_state)
|
||||
I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1)
|
||||
I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0))
|
||||
B.icon = I
|
||||
|
||||
if(isGlass)
|
||||
if(prob(33))
|
||||
new/obj/item/shard(drop_location())
|
||||
playsound(src, "shatter", 70, 1)
|
||||
else
|
||||
B.force = 0
|
||||
B.throwforce = 0
|
||||
B.desc = "A carton with the bottom half burst open. Might give you a papercut."
|
||||
B.name = "broken [name]"
|
||||
transfer_fingerprints_to(B)
|
||||
|
||||
qdel(src)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/attack(mob/living/target, mob/living/user)
|
||||
|
||||
if(!target)
|
||||
@@ -109,7 +75,7 @@
|
||||
//Keeping this here for now, I'll ask if I should keep it here.
|
||||
/obj/item/broken_bottle
|
||||
name = "broken bottle"
|
||||
desc = "A bottle with a sharp broken bottom."
|
||||
desc = "A shattered glass container with sharp edges."
|
||||
icon = 'icons/obj/drinks.dmi'
|
||||
icon_state = "broken_bottle"
|
||||
force = 9
|
||||
|
||||
@@ -585,6 +585,14 @@
|
||||
mix_message = "The mixture develops a sinister glow."
|
||||
mix_sound = 'sound/effects/singlebeat.ogg'
|
||||
|
||||
/datum/chemical_reaction/cogchamp
|
||||
name = "CogChamp"
|
||||
id = /datum/reagent/consumable/ethanol/cogchamp
|
||||
results = list(/datum/reagent/consumable/ethanol/cogchamp = 3)
|
||||
required_reagents = list(/datum/reagent/consumable/ethanol/cognac = 1, /datum/reagent/fuel = 1, /datum/reagent/consumable/ethanol/screwdrivercocktail = 1)
|
||||
mix_message = "You hear faint sounds of gears turning as it mixes."
|
||||
mix_sound = 'sound/effects/clockcult_gateway_closing.ogg'
|
||||
|
||||
/datum/chemical_reaction/quadruplesec
|
||||
name = "Quadruple Sec"
|
||||
id = /datum/reagent/consumable/ethanol/quadruple_sec
|
||||
|
||||
@@ -28,3 +28,7 @@
|
||||
backpack_contents = list(/obj/item/storage/box/beanbag=1,/obj/item/book/granter/action/drink_fling=1)
|
||||
shoes = /obj/item/clothing/shoes/laceup
|
||||
|
||||
/datum/job/bartender/after_spawn(mob/living/H, mob/M, latejoin = FALSE)
|
||||
. = ..()
|
||||
var/datum/action/innate/drink_fling/D = new
|
||||
D.Grant(H)
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
req_access = list()
|
||||
circuit = /obj/item/circuitboard/computer/mining_shuttle/common
|
||||
shuttleId = "mining_common"
|
||||
possible_destinations = "whiteship_home;lavaland_common_away;landing_zone_dock;mining_public"
|
||||
possible_destinations = "lavaland_common_away;commonmining_home"
|
||||
|
||||
/**********************Mining car (Crate like thing, not the rail car)**************************/
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
from doing this unless you absolutely know what you are doing, and have defined a
|
||||
conversion in savefile.dm
|
||||
*/
|
||||
/proc/init_sprite_accessory_subtypes(prototype, list/L, list/male, list/female,var/roundstart = FALSE)//Roundstart argument builds a specific list for roundstart parts where some parts may be locked
|
||||
/proc/init_sprite_accessory_subtypes(prototype, list/L, list/male, list/female, roundstart = FALSE, skip_prototype = TRUE)//Roundstart argument builds a specific list for roundstart parts where some parts may be locked
|
||||
if(!istype(L))
|
||||
L = list()
|
||||
if(!istype(male))
|
||||
@@ -25,7 +25,7 @@
|
||||
female = list()
|
||||
|
||||
for(var/path in typesof(prototype))
|
||||
if(path == prototype)
|
||||
if(path == prototype && skip_prototype)
|
||||
continue
|
||||
if(roundstart)
|
||||
var/datum/sprite_accessory/P = path
|
||||
|
||||
@@ -581,6 +581,9 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
|
||||
if(cultslurring)
|
||||
cultslurring = max(cultslurring-1, 0)
|
||||
|
||||
if(clockcultslurring)
|
||||
clockcultslurring = max(clockcultslurring-1, 0)
|
||||
|
||||
if(silent)
|
||||
silent = max(silent-1, 0)
|
||||
|
||||
|
||||
@@ -89,6 +89,7 @@
|
||||
var/stuttering = 0
|
||||
var/slurring = 0
|
||||
var/cultslurring = 0
|
||||
var/clockcultslurring = 0
|
||||
var/derpspeech = 0
|
||||
|
||||
var/list/implants = null
|
||||
|
||||
@@ -354,6 +354,9 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
|
||||
|
||||
if(cultslurring)
|
||||
message = cultslur(message)
|
||||
|
||||
if(clockcultslurring)
|
||||
message = CLOCK_CULT_SLUR(message)
|
||||
|
||||
message = capitalize(message)
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#define PAI_EMP_SILENCE_DURATION 3 MINUTES
|
||||
|
||||
/mob/living/silicon/pai/blob_act(obj/structure/blob/B)
|
||||
return FALSE
|
||||
@@ -8,7 +9,7 @@
|
||||
return
|
||||
take_holo_damage(50/severity)
|
||||
Knockdown(400/severity)
|
||||
silent = max((3 MINUTES)/severity, silent)
|
||||
silent = max(silent, (PAI_EMP_SILENCE_DURATION) / SSmobs.wait / severity)
|
||||
if(holoform)
|
||||
fold_in(force = TRUE)
|
||||
emitter_next_use = world.time + emitter_emp_cd
|
||||
|
||||
@@ -147,6 +147,10 @@
|
||||
. += newletter
|
||||
return sanitize(.)
|
||||
|
||||
//Ratvarian Slurring!
|
||||
|
||||
#define CLOCK_CULT_SLUR(phrase) sanitize(text2ratvar(phrase))
|
||||
|
||||
///Adds stuttering to the message passed in
|
||||
/proc/stutter(phrase)
|
||||
phrase = html_decode(phrase)
|
||||
@@ -420,13 +424,10 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
|
||||
return TRUE
|
||||
|
||||
/mob/proc/getImplant(type)
|
||||
if (!istype(src,/mob/living))
|
||||
return
|
||||
var/mob/living/L = src
|
||||
for (var/I in L.implants)
|
||||
if (istype(I,type))
|
||||
return I
|
||||
return null
|
||||
return
|
||||
|
||||
/mob/living/getImplant(type)
|
||||
return locate(type) in implants
|
||||
|
||||
/proc/canGhostWrite(var/mob/A, var/obj/target, var/desc="", var/allow_all=FALSE)
|
||||
if(allow_all & TRUE)
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
var/icon_update_needed = FALSE
|
||||
var/obj/machinery/computer/apc_control/remote_control = null
|
||||
var/mob/living/carbon/hijacker
|
||||
var/hijackerlast = FALSE
|
||||
var/hijackerlast = TRUE
|
||||
|
||||
/obj/machinery/power/apc/unlocked
|
||||
locked = FALSE
|
||||
@@ -399,14 +399,14 @@
|
||||
if (hijacker)
|
||||
var/obj/item/implant/hijack/H = hijacker.getImplant(/obj/item/implant/hijack)
|
||||
hijackerreturn = H && !H.stealthmode
|
||||
if(last_update_state == update_state && last_update_overlay == update_overlay && hijackerreturn ? hijackerlast : !hijackerlast)
|
||||
if(last_update_state == update_state && last_update_overlay == update_overlay && hijackerreturn == hijackerlast)
|
||||
return 0
|
||||
if(last_update_state != update_state)
|
||||
results += 1
|
||||
if(last_update_overlay != update_overlay || hijackerreturn ? !hijackerlast : hijackerlast)
|
||||
if(last_update_overlay != update_overlay || hijackerreturn != hijackerlast)
|
||||
results += 2
|
||||
if (hijackerreturn ? !hijackerlast : hijackerlast)
|
||||
hijackerlast = hijackerreturn ? TRUE : FALSE
|
||||
if (hijackerreturn != hijackerlast)
|
||||
hijackerlast = hijackerreturn
|
||||
return results
|
||||
|
||||
// Used in process so it doesn't update the icon too much
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
if(istype(v, /obj/item/ammo_casing/energy)) //already set
|
||||
ammo_type[v] = isnull(user_can_select)? TRUE : user_can_select
|
||||
else
|
||||
C = new v //if you put non energycasing/type stuff in here you deserve the runtime
|
||||
C = new v(src) //if you put non energycasing/type stuff in here you deserve the runtime
|
||||
ammo_type[i] = C
|
||||
ammo_type[C] = isnull(user_can_select)? TRUE : user_can_select
|
||||
set_firemode_index(initial(current_firemode_index))
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
|
||||
/obj/item/projectile/bullet/pellet/shotgun_buckshot
|
||||
name = "buckshot pellet"
|
||||
damage = 10
|
||||
damage = 12.5
|
||||
|
||||
/obj/item/projectile/bullet/pellet/shotgun_rubbershot
|
||||
name = "rubbershot pellet"
|
||||
|
||||
@@ -1513,6 +1513,23 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
M.stuttering = min(M.stuttering + 3, 3)
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/ethanol/cogchamp
|
||||
name = "CogChamp"
|
||||
description = "Now you can fill yourself with the power of Ratvar!"
|
||||
color = rgb(255, 201, 49)
|
||||
boozepwr = 10
|
||||
quality = DRINK_FANTASTIC
|
||||
taste_description = "a brass taste with a hint of oil"
|
||||
glass_icon_state = "cogchamp"
|
||||
glass_name = "CogChamp"
|
||||
glass_desc = "Not even Ratvar's Four Generals could withstand this! Qevax Jryy!"
|
||||
value = 8.13
|
||||
|
||||
/datum/reagent/consumable/ethanol/cogchamp/on_mob_life(mob/living/carbon/M)
|
||||
M.clockcultslurring = min(M.clockcultslurring + 3, 3)
|
||||
M.stuttering = min(M.stuttering + 3, 3)
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/ethanol/triple_sec
|
||||
name = "Triple Sec"
|
||||
description = "A sweet and vibrant orange liqueur."
|
||||
|
||||
@@ -105,11 +105,11 @@
|
||||
/obj/item/reagent_containers/proc/bartender_check(atom/target)
|
||||
. = FALSE
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T || target.CanPass(src, T) || !thrownby || !thrownby.actions)
|
||||
if(!T || !target.CanPass(src, T) || !thrownby || !thrownby.actions)
|
||||
return
|
||||
for(var/datum/action/innate/drink_fling/D in thrownby.actions)
|
||||
if(D.active)
|
||||
return TRUE
|
||||
var/datum/action/innate/D = get_action_of_type(thrownby, /datum/action/innate/drink_fling)
|
||||
if(D?.active)
|
||||
return TRUE
|
||||
|
||||
/obj/item/reagent_containers/proc/ForceResetRotation()
|
||||
transform = initial(transform)
|
||||
@@ -131,13 +131,14 @@
|
||||
if(thrownby)
|
||||
log_combat(thrownby, M, "splashed", R)
|
||||
reagents.reaction(target, TOUCH)
|
||||
|
||||
|
||||
else if(bartender_check(target) && thrown)
|
||||
visible_message("<span class='notice'>[src] lands onto the [target.name] without spilling a single drop.</span>")
|
||||
transform = initial(transform)
|
||||
addtimer(CALLBACK(src, .proc/ForceResetRotation), 1)
|
||||
return
|
||||
|
||||
|
||||
else
|
||||
if(isturf(target) && reagents.reagent_list.len && thrownby)
|
||||
log_combat(thrownby, target, "splashed (thrown) [english_list(reagents.reagent_list)]", "in [AREACOORD(target)]")
|
||||
|
||||
@@ -423,9 +423,9 @@
|
||||
else
|
||||
unload_hypo(vial,user)
|
||||
|
||||
/obj/item/hypospray/mkii/AltClick(mob/living/user)
|
||||
/obj/item/hypospray/mkii/CtrlClick(mob/living/user)
|
||||
. = ..()
|
||||
if(user.canUseTopic(src, FALSE))
|
||||
if(user.canUseTopic(src, FALSE) && user.get_active_held_item(src))
|
||||
switch(mode)
|
||||
if(HYPO_SPRAY)
|
||||
mode = HYPO_INJECT
|
||||
@@ -437,7 +437,7 @@
|
||||
|
||||
/obj/item/hypospray/mkii/examine(mob/user)
|
||||
. = ..()
|
||||
. += "<span class='notice'><b>Alt-Click</b> it to toggle its mode from spraying to injecting and vice versa.</span>"
|
||||
. += "<span class='notice'><b>Ctrl-Click</b> it to toggle its mode from spraying to injecting and vice versa.</span>"
|
||||
|
||||
#undef HYPO_SPRAY
|
||||
#undef HYPO_INJECT
|
||||
|
||||
Reference in New Issue
Block a user