mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-20 18:47:53 +01:00
@@ -368,7 +368,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
return
|
||||
|
||||
var/location = alert(src,"Please specify where to spawn them.", "Location", "Right Here", "Arrivals", "Cancel")
|
||||
if(!location)
|
||||
if(location == "Cancel" || !location)
|
||||
return
|
||||
|
||||
var/announce = alert(src,"Announce as if they had just arrived?", "Announce", "Yes", "No", "Cancel")
|
||||
|
||||
@@ -293,6 +293,17 @@
|
||||
punch_force = initial(punch_force)
|
||||
wearer = null
|
||||
|
||||
/obj/item/clothing/gloves
|
||||
var/datum/unarmed_attack/special_attack = null //do the gloves have a special unarmed attack?
|
||||
var/special_attack_type = null
|
||||
|
||||
/obj/item/clothing/gloves/New()
|
||||
..()
|
||||
if(special_attack_type && ispath(special_attack_type))
|
||||
special_attack = new special_attack_type
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
//Rings
|
||||
|
||||
|
||||
@@ -18,6 +18,10 @@
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.gloves)
|
||||
gloves = H.gloves
|
||||
if(!istype(gloves))
|
||||
to_chat(user, "You are unable to wear \the [src] as \the [H.gloves] are in the way.")
|
||||
gloves = null
|
||||
return 0
|
||||
if(gloves.overgloves)
|
||||
to_chat(user, "You are unable to wear \the [src] as \the [H.gloves] are in the way.")
|
||||
gloves = null
|
||||
|
||||
@@ -182,6 +182,198 @@
|
||||
. = ..()
|
||||
reagents.add_reagent("sugar", 20)
|
||||
|
||||
//MRE condiments and drinks.
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet
|
||||
icon_state = "packet_small"
|
||||
w_class = ITEMSIZE_TINY
|
||||
possible_transfer_amounts = "1;5;10"
|
||||
amount_per_transfer_from_this = 1
|
||||
volume = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/salt
|
||||
name = "salt packet"
|
||||
desc = "Contains 5u of table salt."
|
||||
icon_state = "packet_small_white"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/salt/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("sodiumchloride", 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/pepper
|
||||
name = "pepper packet"
|
||||
desc = "Contains 5u of black pepper."
|
||||
icon_state = "packet_small_black"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/pepper/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("blackpepper", 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/sugar
|
||||
name = "sugar packet"
|
||||
desc = "Contains 5u of refined sugar."
|
||||
icon_state = "packet_small_white"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/sugar/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("sugar", 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/jelly
|
||||
name = "jelly packet"
|
||||
desc = "Contains 10u of cherry jelly. Best used for spreading on crackers."
|
||||
icon_state = "packet_medium"
|
||||
volume = 10
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/jelly/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("cherryjelly", 10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/honey
|
||||
name = "honey packet"
|
||||
desc = "Contains 10u of honey."
|
||||
icon_state = "packet_medium"
|
||||
volume = 10
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/honey/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("honey", 10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/capsaicin
|
||||
name = "hot sauce packet"
|
||||
desc = "Contains 5u of hot sauce. Enjoy in moderation."
|
||||
icon_state = "packet_small_red"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/capsaicin/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("capsaicin", 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/ketchup
|
||||
name = "ketchup packet"
|
||||
desc = "Contains 5u of ketchup."
|
||||
icon_state = "packet_small_red"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/ketchup/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("ketchup", 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/mayo
|
||||
name = "mayonnaise packet"
|
||||
desc = "Contains 5u of mayonnaise."
|
||||
icon_state = "packet_small_white"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/mayo/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("mayo", 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/soy
|
||||
name = "soy sauce packet"
|
||||
desc = "Contains 5u of soy sauce."
|
||||
icon_state = "packet_small_black"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/soy/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("soysauce", 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/coffee
|
||||
name = "coffee powder packet"
|
||||
desc = "Contains 5u of coffee powder. Mix with 25u of water and heat."
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/coffee/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("coffeepowder", 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/tea
|
||||
name = "tea powder packet"
|
||||
desc = "Contains 5u of black tea powder. Mix with 25u of water and heat."
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/tea/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("tea", 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/cocoa
|
||||
name = "cocoa powder packet"
|
||||
desc = "Contains 5u of cocoa powder. Mix with 25u of water and heat."
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/cocoa/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("coco", 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/grape
|
||||
name = "grape juice powder packet"
|
||||
desc = "Contains 5u of powdered grape juice. Mix with 15u of water."
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/grape/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("instantgrape", 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/orange
|
||||
name = "orange juice powder packet"
|
||||
desc = "Contains 5u of powdered orange juice. Mix with 15u of water."
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/orange/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("instantorange", 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/watermelon
|
||||
name = "watermelon juice powder packet"
|
||||
desc = "Contains 5u of powdered watermelon juice. Mix with 15u of water."
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/watermelon/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("instantwatermelon", 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/apple
|
||||
name = "apple juice powder packet"
|
||||
desc = "Contains 5u of powdered apple juice. Mix with 15u of water."
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/apple/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("instantapple", 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/protein
|
||||
name = "protein powder packet"
|
||||
desc = "Contains 10u of powdered protein. Mix with 20u of water."
|
||||
icon_state = "packet_medium"
|
||||
volume = 10
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/protein/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("protein", 10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon
|
||||
name = "crayon powder packet"
|
||||
desc = "Contains 10u of powdered crayon. Mix with 30u of water."
|
||||
volume = 10
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/generic/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("crayon_dust", 10)
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/red/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("crayon_dust_red", 10)
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/orange/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("crayon_dust_orange", 10)
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/yellow/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("crayon_dust_yellow", 10)
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/green/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("crayon_dust_green", 10)
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/blue/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("crayon_dust_blue", 10)
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/purple/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("crayon_dust_purple", 10)
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/grey/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("crayon_dust_grey", 10)
|
||||
/obj/item/weapon/reagent_containers/food/condiment/small/packet/crayon/brown/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("crayon_dust_brown", 10)
|
||||
|
||||
//End of MRE stuff.
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/flour
|
||||
name = "flour sack"
|
||||
desc = "A big bag of flour. Good for baking!"
|
||||
|
||||
@@ -21,12 +21,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/Initialize()
|
||||
. = ..()
|
||||
if(nutriment_amt)
|
||||
reagents.add_reagent("nutriment",nutriment_amt,nutriment_desc)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/Initialize()
|
||||
. = ..()
|
||||
if(nutriment_amt)
|
||||
reagents.add_reagent("nutriment", nutriment_amt)
|
||||
reagents.add_reagent("nutriment",(nutriment_amt*2),nutriment_desc)
|
||||
|
||||
//Placeholder for effect that trigger on eating that aren't tied to reagents.
|
||||
/obj/item/weapon/reagent_containers/food/snacks/proc/On_Consume(var/mob/M)
|
||||
@@ -3088,6 +3083,7 @@
|
||||
filling_color = "#F5DEB8"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
nutriment_desc = list("salt" = 1, "cracker" = 2)
|
||||
w_class = ITEMSIZE_TINY
|
||||
nutriment_amt = 1
|
||||
|
||||
|
||||
@@ -3738,6 +3734,33 @@
|
||||
reagents.add_reagent("iron", 3)
|
||||
bitesize = 4
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidprotein
|
||||
name = "\improper LiquidProtein Ration"
|
||||
desc = "A variant of the liquidfood ration, designed for obligate carnivore species. Only barely more appealing than regular liquidfood. Should this be crunchy?"
|
||||
icon_state = "liquidprotein"
|
||||
trash = /obj/item/trash/liquidprotein
|
||||
filling_color = "#A8A8A8"
|
||||
survivalfood = TRUE
|
||||
center_of_mass = list("x"=16, "y"=15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidprotein/Initialize()
|
||||
..()
|
||||
reagents.add_reagent("protein", 30)
|
||||
reagents.add_reagent("iron", 3)
|
||||
bitesize = 4
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meatcube
|
||||
name = "cubed meat"
|
||||
desc = "Fried, salted lean meat compressed into a cube. Not very appetizing."
|
||||
icon_state = "meatcube"
|
||||
filling_color = "#7a3d11"
|
||||
center_of_mass = list("x"=16, "y"=16)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meatcube/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("protein", 15)
|
||||
bitesize = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/tastybread
|
||||
name = "bread tube"
|
||||
desc = "Bread in a tube. Chewy...and surprisingly tasty."
|
||||
|
||||
@@ -607,19 +607,3 @@
|
||||
|
||||
/obj/item/pizzabox/meat/Initialize()
|
||||
pizza = new /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatcargo(src)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidprotein
|
||||
name = "\improper LiquidProtein Ration"
|
||||
desc = "A variant of the liquidfood ration, designed for obligate carnivore species. Only barely more appealing than regular liquidfood. Should this be crunchy?"
|
||||
icon = 'icons/obj/food_vr.dmi'
|
||||
icon_state = "liquidprotein"
|
||||
trash = /obj/item/trash/liquidprotein
|
||||
filling_color = "#A8A8A8"
|
||||
survivalfood = TRUE
|
||||
center_of_mass = list("x"=16, "y"=15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidprotein/Initialize()
|
||||
..()
|
||||
reagents.add_reagent("protein", 20)
|
||||
reagents.add_reagent("iron", 3)
|
||||
bitesize = 4
|
||||
|
||||
@@ -126,6 +126,38 @@
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_gloves.dmi',
|
||||
)
|
||||
item_state = "boxing"
|
||||
special_attack_type = /datum/unarmed_attack/holopugilism
|
||||
|
||||
datum/unarmed_attack/holopugilism
|
||||
sparring_variant_type = /datum/unarmed_attack/holopugilism
|
||||
|
||||
datum/unarmed_attack/holopugilism/unarmed_override(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/zone)
|
||||
user.do_attack_animation(src)
|
||||
var/damage = rand(0, 9)
|
||||
if(!damage)
|
||||
playsound(target.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
|
||||
target.visible_message("<font color='red'><B>[user] has attempted to punch [target]!</B></font>")
|
||||
return TRUE
|
||||
var/obj/item/organ/external/affecting = target.get_organ(ran_zone(user.zone_sel.selecting))
|
||||
var/armor_block = target.run_armor_check(affecting, "melee")
|
||||
var/armor_soak = target.get_armor_soak(affecting, "melee")
|
||||
|
||||
if(HULK in user.mutations)
|
||||
damage += 5
|
||||
|
||||
playsound(target.loc, "punch", 25, 1, -1)
|
||||
|
||||
target.visible_message("<font color='red'><B>[user] has punched [target]!</B></font>")
|
||||
|
||||
if(armor_soak >= damage)
|
||||
return TRUE
|
||||
|
||||
target.apply_damage(damage, HALLOSS, affecting, armor_block, armor_soak)
|
||||
if(damage >= 9)
|
||||
target.visible_message("<font color='red'><B>[user] has weakened [target]!</B></font>")
|
||||
target.apply_effect(4, WEAKEN, armor_block)
|
||||
|
||||
return TRUE
|
||||
|
||||
/obj/structure/window/reinforced/holowindow/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(!istype(W))
|
||||
@@ -262,8 +294,8 @@
|
||||
spark_system.set_up(5, 0, user.loc)
|
||||
spark_system.start()
|
||||
playsound(user.loc, 'sound/weapons/blade1.ogg', 50, 1)
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/weapon/holo/esword/New()
|
||||
item_color = pick("red","blue","green","purple")
|
||||
|
||||
@@ -438,7 +438,7 @@ var/list/name_to_material
|
||||
// Very rare alloy that is reflective, should be used sparingly.
|
||||
/material/durasteel
|
||||
name = "durasteel"
|
||||
stack_type = /obj/item/stack/material/durasteel
|
||||
stack_type = /obj/item/stack/material/durasteel/hull
|
||||
integrity = 600
|
||||
melting_point = 7000
|
||||
icon_base = "metal"
|
||||
@@ -460,6 +460,9 @@ var/list/name_to_material
|
||||
explosion_resistance = 90
|
||||
reflectivity = 0.9
|
||||
|
||||
/material/durasteel/hull/place_sheet(var/turf/target) //Deconstructed into normal durasteel sheets.
|
||||
new /obj/item/stack/material/durasteel(target)
|
||||
|
||||
/material/plasteel/titanium
|
||||
name = MAT_TITANIUM
|
||||
stack_type = /obj/item/stack/material/titanium
|
||||
@@ -475,6 +478,9 @@ var/list/name_to_material
|
||||
icon_base = "hull"
|
||||
icon_reinf = "reinf_mesh"
|
||||
|
||||
/material/plasteel/titanium/hull/place_sheet(var/turf/target) //Deconstructed into normal titanium sheets.
|
||||
new /obj/item/stack/material/titanium(target)
|
||||
|
||||
/material/glass
|
||||
name = "glass"
|
||||
stack_type = /obj/item/stack/material/glass
|
||||
|
||||
@@ -591,9 +591,9 @@ turf/simulated/mineral/floor/light_corner
|
||||
if(is_clean)
|
||||
X = new /obj/item/weapon/archaeological_find(src, new_item_type = F.find_type)
|
||||
else
|
||||
X = new /obj/item/weapon/ore/strangerock(src, inside_item_type = F.find_type)
|
||||
X = new /obj/item/weapon/strangerock(src, inside_item_type = F.find_type)
|
||||
geologic_data.UpdateNearbyArtifactInfo(src)
|
||||
var/obj/item/weapon/ore/strangerock/SR = X
|
||||
var/obj/item/weapon/strangerock/SR = X
|
||||
SR.geologic_data = geologic_data
|
||||
|
||||
//some find types delete the /obj/item/weapon/archaeological_find and replace it with something else, this handles when that happens
|
||||
|
||||
@@ -8,6 +8,14 @@
|
||||
return soft_type
|
||||
return src.default_attack
|
||||
// VOREStation Edit - End
|
||||
if(src.gloves)
|
||||
var/obj/item/clothing/gloves/G = src.gloves
|
||||
if(istype(G) && G.special_attack && G.special_attack.is_usable(src, target, hit_zone))
|
||||
if(pulling_punches)
|
||||
var/datum/unarmed_attack/soft_type = G.special_attack.get_sparring_variant()
|
||||
if(soft_type)
|
||||
return soft_type
|
||||
return G.special_attack
|
||||
for(var/datum/unarmed_attack/u_attack in species.unarmed_attacks)
|
||||
if(u_attack.is_usable(src, target, hit_zone))
|
||||
if(pulling_punches)
|
||||
@@ -41,39 +49,11 @@
|
||||
H.do_attack_animation(src)
|
||||
playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
|
||||
visible_message("<font color='red'><B>[H] reaches for [src], but misses!</B></font>")
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if(H != src && check_shields(0, null, H, H.zone_sel.selecting, H.name))
|
||||
H.do_attack_animation(src)
|
||||
return 0
|
||||
|
||||
if(istype(H.gloves, /obj/item/clothing/gloves/boxing/hologlove))
|
||||
H.do_attack_animation(src)
|
||||
var/damage = rand(0, 9)
|
||||
if(!damage)
|
||||
playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
|
||||
visible_message("<font color='red'><B>[H] has attempted to punch [src]!</B></font>")
|
||||
return 0
|
||||
var/obj/item/organ/external/affecting = get_organ(ran_zone(H.zone_sel.selecting))
|
||||
var/armor_block = run_armor_check(affecting, "melee")
|
||||
var/armor_soak = get_armor_soak(affecting, "melee")
|
||||
|
||||
if(HULK in H.mutations)
|
||||
damage += 5
|
||||
|
||||
playsound(loc, "punch", 25, 1, -1)
|
||||
|
||||
visible_message("<font color='red'><B>[H] has punched [src]!</B></font>")
|
||||
|
||||
if(armor_soak >= damage)
|
||||
return
|
||||
|
||||
apply_damage(damage, HALLOSS, affecting, armor_block, armor_soak)
|
||||
if(damage >= 9)
|
||||
visible_message("<font color='red'><B>[H] has weakened [src]!</B></font>")
|
||||
apply_effect(4, WEAKEN, armor_block)
|
||||
|
||||
return
|
||||
return FALSE
|
||||
|
||||
if(istype(M,/mob/living/carbon))
|
||||
var/mob/living/carbon/C = M
|
||||
@@ -122,7 +102,7 @@
|
||||
|
||||
else if(!(M == src && apply_pressure(M, M.zone_sel.selecting)))
|
||||
help_shake_act(M)
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
if(I_GRAB)
|
||||
if(M == src || anchored)
|
||||
@@ -149,7 +129,7 @@
|
||||
//VORESTATION EDIT
|
||||
visible_message("<span class='warning'>[M] has grabbed [src] [(M.zone_sel.selecting == BP_L_HAND || M.zone_sel.selecting == BP_R_HAND)? "by [(gender==FEMALE)? "her" : ((gender==MALE)? "his": "their")] hands": "passively"]!</span>")
|
||||
//VORESTATION END END
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
if(I_HURT)
|
||||
|
||||
@@ -175,7 +155,7 @@
|
||||
|
||||
if(!affecting || affecting.is_stump())
|
||||
M << "<span class='danger'>They are missing that limb!</span>"
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
switch(src.a_intent)
|
||||
if(I_HELP)
|
||||
@@ -245,7 +225,10 @@
|
||||
// See what attack they use
|
||||
var/datum/unarmed_attack/attack = H.get_unarmed_attack(src, hit_zone)
|
||||
if(!attack)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if(attack.unarmed_override(H, src, hit_zone))
|
||||
return FALSE
|
||||
|
||||
H.do_attack_animation(src)
|
||||
if(!attack_message)
|
||||
@@ -258,7 +241,7 @@
|
||||
add_attack_logs(H,src,"Melee attacked with fists (miss/block)")
|
||||
|
||||
if(miss_type)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
var/real_damage = rand_damage
|
||||
var/hit_dam_type = attack.damage_type
|
||||
@@ -268,7 +251,7 @@
|
||||
var/obj/item/clothing/gloves/G = H.gloves
|
||||
real_damage += G.punch_force
|
||||
hit_dam_type = G.punch_damtype
|
||||
if(H.pulling_punches) //SO IT IS DECREED: PULLING PUNCHES WILL PREVENT THE ACTUAL DAMAGE FROM RINGS AND KNUCKLES, BUT NOT THE ADDED PAIN
|
||||
if(H.pulling_punches && !attack.sharp && !attack.edge) //SO IT IS DECREED: PULLING PUNCHES WILL PREVENT THE ACTUAL DAMAGE FROM RINGS AND KNUCKLES, BUT NOT THE ADDED PAIN, BUT YOU CAN'T "PULL" A KNIFE
|
||||
hit_dam_type = AGONY
|
||||
real_damage *= damage_multiplier
|
||||
rand_damage *= damage_multiplier
|
||||
@@ -359,7 +342,7 @@
|
||||
var/armor_soak = get_armor_soak(affecting, armor_type, armor_pen)
|
||||
apply_damage(damage, BRUTE, affecting, armor_block, armor_soak, sharp = a_sharp, edge = a_edge)
|
||||
updatehealth()
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
//Used to attack a joint through grabbing
|
||||
/mob/living/carbon/human/proc/grab_joint(var/mob/living/user, var/def_zone)
|
||||
@@ -370,43 +353,43 @@
|
||||
break
|
||||
|
||||
if(!has_grab)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if(!def_zone) def_zone = user.zone_sel.selecting
|
||||
var/target_zone = check_zone(def_zone)
|
||||
if(!target_zone)
|
||||
return 0
|
||||
return FALSE
|
||||
var/obj/item/organ/external/organ = get_organ(check_zone(target_zone))
|
||||
if(!organ || organ.dislocated > 0 || organ.dislocated == -1) //don't use is_dislocated() here, that checks parent
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
user.visible_message("<span class='warning'>[user] begins to dislocate [src]'s [organ.joint]!</span>")
|
||||
if(do_after(user, 100))
|
||||
organ.dislocate(1)
|
||||
src.visible_message("<span class='danger'>[src]'s [organ.joint] [pick("gives way","caves in","crumbles","collapses")]!</span>")
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
//Breaks all grips and pulls that the mob currently has.
|
||||
/mob/living/carbon/human/proc/break_all_grabs(mob/living/carbon/user)
|
||||
var/success = 0
|
||||
var/success = FALSE
|
||||
if(pulling)
|
||||
visible_message("<span class='danger'>[user] has broken [src]'s grip on [pulling]!</span>")
|
||||
success = 1
|
||||
success = TRUE
|
||||
stop_pulling()
|
||||
|
||||
if(istype(l_hand, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon/grab/lgrab = l_hand
|
||||
if(lgrab.affecting)
|
||||
visible_message("<span class='danger'>[user] has broken [src]'s grip on [lgrab.affecting]!</span>")
|
||||
success = 1
|
||||
success = TRUE
|
||||
spawn(1)
|
||||
qdel(lgrab)
|
||||
if(istype(r_hand, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon/grab/rgrab = r_hand
|
||||
if(rgrab.affecting)
|
||||
visible_message("<span class='danger'>[user] has broken [src]'s grip on [rgrab.affecting]!</span>")
|
||||
success = 1
|
||||
success = TRUE
|
||||
spawn(1)
|
||||
qdel(rgrab)
|
||||
return success
|
||||
@@ -421,11 +404,11 @@
|
||||
/mob/living/carbon/human/proc/apply_pressure(mob/living/user, var/target_zone)
|
||||
var/obj/item/organ/external/organ = get_organ(target_zone)
|
||||
if(!organ || !(organ.status & ORGAN_BLEEDING) || (organ.robotic >= ORGAN_ROBOT))
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if(organ.applied_pressure)
|
||||
user << "<span class='warning'>Someone is already applying pressure to [user == src? "your [organ.name]" : "[src]'s [organ.name]"].</span>"
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
var/datum/gender/TU = gender_datums[user.get_visible_gender()]
|
||||
|
||||
@@ -446,4 +429,4 @@
|
||||
else
|
||||
user.visible_message("\The [user] stops applying pressure to [src]'s [organ.name]!", "You stop applying pressure to [src]'s [organ.name]!")
|
||||
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
@@ -25,18 +25,18 @@ var/global/list/sparring_attack_cache = list()
|
||||
|
||||
/datum/unarmed_attack/proc/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone)
|
||||
if(user.restrained())
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
// Check if they have a functioning hand.
|
||||
var/obj/item/organ/external/E = user.organs_by_name["l_hand"]
|
||||
if(E && !E.is_stump())
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
E = user.organs_by_name["r_hand"]
|
||||
if(E && !E.is_stump())
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/datum/unarmed_attack/proc/get_unarmed_damage()
|
||||
return damage
|
||||
@@ -105,6 +105,9 @@ var/global/list/sparring_attack_cache = list()
|
||||
return
|
||||
user.visible_message("<span class='danger'>[user] attempts to press [TU.his] [eye_attack_text] into [target]'s eyes, but [TT.he] [TT.does]n't have any!</span>")
|
||||
|
||||
/datum/unarmed_attack/proc/unarmed_override(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/zone)
|
||||
return FALSE //return true if the unarmed override prevents further attacks
|
||||
|
||||
/datum/unarmed_attack/bite
|
||||
attack_verb = list("bit")
|
||||
attack_sound = 'sound/weapons/bite.ogg'
|
||||
@@ -121,7 +124,7 @@ var/global/list/sparring_attack_cache = list()
|
||||
return 0
|
||||
if (user == target && (zone == BP_HEAD || zone == O_EYES || zone == O_MOUTH))
|
||||
return 0
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/datum/unarmed_attack/punch
|
||||
attack_verb = list("punched")
|
||||
@@ -187,20 +190,20 @@ var/global/list/sparring_attack_cache = list()
|
||||
|
||||
/datum/unarmed_attack/kick/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone)
|
||||
if (user.legcuffed)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if(!(zone in list("l_leg", "r_leg", "l_foot", "r_foot", BP_GROIN)))
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
var/obj/item/organ/external/E = user.organs_by_name["l_foot"]
|
||||
if(E && !E.is_stump())
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
E = user.organs_by_name["r_foot"]
|
||||
if(E && !E.is_stump())
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/datum/unarmed_attack/kick/get_unarmed_damage(var/mob/living/carbon/human/user)
|
||||
var/obj/item/clothing/shoes = user.shoes
|
||||
@@ -231,23 +234,23 @@ var/global/list/sparring_attack_cache = list()
|
||||
/datum/unarmed_attack/stomp/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone)
|
||||
|
||||
if (user.legcuffed)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if(!istype(target))
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if (!user.lying && (target.lying || (zone in list("l_foot", "r_foot"))))
|
||||
if(target.grabbed_by == user && target.lying)
|
||||
return 0
|
||||
return FALSE
|
||||
var/obj/item/organ/external/E = user.organs_by_name["l_foot"]
|
||||
if(E && !E.is_stump())
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
E = user.organs_by_name["r_foot"]
|
||||
if(E && !E.is_stump())
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/datum/unarmed_attack/stomp/get_unarmed_damage(var/mob/living/carbon/human/user)
|
||||
var/obj/item/clothing/shoes = user.shoes
|
||||
|
||||
@@ -411,7 +411,7 @@
|
||||
/obj/random/bomb_supply = 7,
|
||||
/obj/random/contraband = 3,
|
||||
/obj/random/unidentified_medicine/old_medicine = 7,
|
||||
/obj/item/weapon/ore/strangerock = 3,
|
||||
/obj/item/weapon/strangerock = 3,
|
||||
/obj/item/weapon/ore/phoron = 7,
|
||||
/obj/random/handgun = 1,
|
||||
/obj/random/toolbox = 4,
|
||||
|
||||
@@ -148,6 +148,24 @@
|
||||
if(!istype(T, /turf/space))
|
||||
new /obj/effect/decal/cleanable/flour(T)
|
||||
|
||||
/datum/reagent/nutriment/coffee
|
||||
name = "Coffee Powder"
|
||||
id = "coffeepowder"
|
||||
description = "A bitter powder made by grinding coffee beans."
|
||||
taste_description = "bitterness"
|
||||
taste_mult = 1.3
|
||||
nutriment_factor = 1
|
||||
color = "#482000"
|
||||
|
||||
/datum/reagent/nutriment/tea
|
||||
name = "Tea Powder"
|
||||
id = "teapowder"
|
||||
description = "A dark, tart powder made from black tea leaves."
|
||||
taste_description = "tartness"
|
||||
taste_mult = 1.3
|
||||
nutriment_factor = 1
|
||||
color = "#101000"
|
||||
|
||||
/datum/reagent/nutriment/coco
|
||||
name = "Coco Powder"
|
||||
id = "coco"
|
||||
@@ -158,6 +176,41 @@
|
||||
nutriment_factor = 5
|
||||
color = "#302000"
|
||||
|
||||
/datum/reagent/nutriment/instantjuice
|
||||
name = "Juice Powder"
|
||||
id = "instantjuice"
|
||||
description = "Dehydrated, powdered juice of some kind."
|
||||
taste_mult = 1.3
|
||||
nutriment_factor = 1
|
||||
|
||||
/datum/reagent/nutriment/instantjuice/grape
|
||||
name = "Grape Juice Powder"
|
||||
id = "instantgrape"
|
||||
description = "Dehydrated, powdered grape juice."
|
||||
taste_description = "dry grapes"
|
||||
color = "#863333"
|
||||
|
||||
/datum/reagent/nutriment/instantjuice/orange
|
||||
name = "Orange Juice Powder"
|
||||
id = "instantorange"
|
||||
description = "Dehydrated, powdered orange juice."
|
||||
taste_description = "dry oranges"
|
||||
color = "#e78108"
|
||||
|
||||
/datum/reagent/nutriment/instantjuice/watermelon
|
||||
name = "Watermelon Juice Powder"
|
||||
id = "instantwatermelon"
|
||||
description = "Dehydrated, powdered watermelon juice."
|
||||
taste_description = "dry sweet watermelon"
|
||||
color = "#b83333"
|
||||
|
||||
/datum/reagent/nutriment/instantjuice/apple
|
||||
name = "Apple Juice Powder"
|
||||
id = "instantapple"
|
||||
description = "Dehydrated, powdered apple juice."
|
||||
taste_description = "dry sweet apples"
|
||||
color = "#c07c40"
|
||||
|
||||
/datum/reagent/nutriment/soysauce
|
||||
name = "Soysauce"
|
||||
id = "soysauce"
|
||||
|
||||
@@ -1200,6 +1200,20 @@
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location)
|
||||
return
|
||||
|
||||
/datum/chemical_reaction/drinks/coffee
|
||||
name = "Coffee"
|
||||
id = "coffee"
|
||||
result = "coffee"
|
||||
required_reagents = list("water" = 5, "coffeepowder" = 1)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/drinks/tea
|
||||
name = "Black tea"
|
||||
id = "tea"
|
||||
result = "tea"
|
||||
required_reagents = list("water" = 5, "teapowder" = 1)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/drinks/hot_coco
|
||||
name = "Hot Coco"
|
||||
id = "hot_coco"
|
||||
@@ -1214,6 +1228,34 @@
|
||||
required_reagents = list("soymilk" = 4, "sacid" = 1)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/drinks/grapejuice
|
||||
name = "Grape Juice"
|
||||
id = "grapejuice"
|
||||
result = "grapejuice"
|
||||
required_reagents = list("water" = 3, "instantgrape" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/drinks/orangejuice
|
||||
name = "Orange Juice"
|
||||
id = "orangejuice"
|
||||
result = "orangejuice"
|
||||
required_reagents = list("water" = 3, "instantorange" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/drinks/watermelonjuice
|
||||
name = "Watermelon Juice"
|
||||
id = "watermelonjuice"
|
||||
result = "watermelonjuice"
|
||||
required_reagents = list("water" = 3, "instantwatermelon" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/drinks/applejuice
|
||||
name = "Apple Juice"
|
||||
id = "applejuice"
|
||||
result = "applejuice"
|
||||
required_reagents = list("water" = 3, "instantapple" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/food/ketchup
|
||||
name = "Ketchup"
|
||||
id = "ketchup"
|
||||
|
||||
@@ -14,20 +14,22 @@
|
||||
clearance_range = rand(4, 12)
|
||||
dissonance_spread = rand(1500, 2500) / 100
|
||||
|
||||
/obj/item/weapon/ore/strangerock
|
||||
/obj/item/weapon/strangerock
|
||||
name = "Strange rock"
|
||||
desc = "Seems to have some unusal strata evident throughout it."
|
||||
icon = 'icons/obj/xenoarchaeology.dmi'
|
||||
icon_state = "strange"
|
||||
var/datum/geosample/geologic_data
|
||||
origin_tech = list(TECH_MATERIAL = 5)
|
||||
|
||||
/obj/item/weapon/ore/strangerock/New(loc, var/inside_item_type = 0)
|
||||
..(loc)
|
||||
/obj/item/weapon/strangerock/New(loc, var/inside_item_type = 0)
|
||||
pixel_x = rand(0,16)-8
|
||||
pixel_y = rand(0,8)-8
|
||||
|
||||
if(inside_item_type)
|
||||
new /obj/item/weapon/archaeological_find(src, new_item_type = inside_item_type)
|
||||
|
||||
/obj/item/weapon/ore/strangerock/attackby(var/obj/item/I, var/mob/user)
|
||||
/obj/item/weapon/strangerock/attackby(var/obj/item/I, var/mob/user)
|
||||
if(istype(I, /obj/item/weapon/pickaxe/brush))
|
||||
var/obj/item/inside = locate() in src
|
||||
if(inside)
|
||||
|
||||
Reference in New Issue
Block a user