mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-31 09:08:30 +01:00
67...
This commit is contained in:
@@ -240,8 +240,8 @@
|
||||
|
||||
//if they're strange and have a hacky ID card as an animal
|
||||
else if(isanimal(user))
|
||||
var/mob/living/basic/animal = user
|
||||
if(check_access_obj(animal.access_card))
|
||||
var/mob/living/simple_animal/animal = user
|
||||
if(check_access_obj(animal.get_idcard()))
|
||||
return TRUE
|
||||
|
||||
/datum/component/armament/proc/check_access_obj(obj/item/id)
|
||||
|
||||
@@ -364,7 +364,7 @@
|
||||
if(find_animal.sentience_type != SENTIENCE_ORGANIC)
|
||||
return FALSE
|
||||
|
||||
find_animal.faction = list(FACTION_ASHWALKER)
|
||||
find_animal.set_faction(list(FACTION_ASHWALKER))
|
||||
|
||||
if(ishostile(find_animal))
|
||||
var/mob/living/simple_animal/hostile/hostile_animal = find_animal
|
||||
@@ -387,7 +387,7 @@
|
||||
if(find_animal.sentience_type != SENTIENCE_ORGANIC)
|
||||
return FALSE
|
||||
|
||||
find_animal.faction = list(FACTION_ASHWALKER)
|
||||
find_animal.set_faction(list(FACTION_ASHWALKER))
|
||||
|
||||
find_animal.revive(HEAL_ALL)
|
||||
return TRUE
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
|
||||
/obj/item/canvas/drawingtablet/ui_action_click(mob/user, action)
|
||||
if(istype(action, /datum/action/item_action/dtselectcolor))
|
||||
currentcolor = tgui_color_picker(usr, "", "Choose Color", currentcolor) // BUBBERSTATION EDIT: TGUI COLOR PICKER
|
||||
currentcolor = tgui_color_picker(user, "", "Choose Color", currentcolor)
|
||||
else if(istype(action, /datum/action/item_action/dtcolormenu))
|
||||
var/list/selects = colors.Copy()
|
||||
selects["Save"] = "Save"
|
||||
@@ -147,13 +147,19 @@
|
||||
else
|
||||
currentcolor = colors[selection]
|
||||
else if(istype(action, /datum/action/item_action/dtcleargrid))
|
||||
var/yesnomaybe = tgui_alert("Are you sure you wanna clear the canvas?", "", list("Yes", "No", "Maybe"))
|
||||
var/yesnomaybe = tgui_alert(user, "Are you sure you wanna clear the canvas?", "", list("Yes", "No", "Maybe"))
|
||||
if(QDELETED(src) || !user.can_perform_action(src))
|
||||
return
|
||||
switch(yesnomaybe)
|
||||
if("Yes")
|
||||
/* reset_grid() Broken
|
||||
*/ SStgui.update_uis(src)
|
||||
workspace = new(width,
|
||||
height,
|
||||
color_mode = SPRITE_EDITOR_COLOR_MODE_RGB,
|
||||
config_flags = NONE,
|
||||
tool_flags = SPRITE_EDITOR_TOOL_PENCIL | SPRITE_EDITOR_TOOL_BUCKET,
|
||||
initial_layer_color = "[canvas_color]ff" // To avoid needing to handle strings of mixed lengths, sprite editor workspaces always use the alpha channel
|
||||
)
|
||||
SStgui.update_uis(src)
|
||||
if("No")
|
||||
return
|
||||
if("Maybe")
|
||||
|
||||
@@ -22,13 +22,11 @@
|
||||
icon = 'modular_skyrat/master_files/icons/obj/hydroponics/harvest.dmi'
|
||||
icon_state = "kiri"
|
||||
foodtypes = FRUIT | SUGAR
|
||||
grind_results = list(/datum/reagent/consumable/kiri_jelly = 0.1)
|
||||
distill_reagent = /datum/reagent/consumable/ethanol/shakiri
|
||||
tastes = list("ultra-sweet jelly" = 1)
|
||||
|
||||
/obj/item/food/grown/kiri/grind_results()
|
||||
return list(/datum/reagent/consumable/kiri_jelly = 0.1)
|
||||
|
||||
|
||||
/obj/item/food/grown/kiri/make_bakeable()
|
||||
AddComponent(/datum/component/bakeable, /obj/item/food/baked_kiri, rand(15 SECONDS, 25 SECONDS), TRUE, TRUE)
|
||||
|
||||
@@ -25,8 +25,7 @@
|
||||
tastes = list("mint and savory sweetness" = 1)
|
||||
|
||||
/obj/item/food/grown/muli/grind_results()
|
||||
retrun list(/datum/reagent/consumable/muli_juice = 0.1)
|
||||
|
||||
return list(/datum/reagent/consumable/muli_juice = 0.1)
|
||||
|
||||
/obj/item/food/grown/muli/make_bakeable()
|
||||
AddComponent(/datum/component/bakeable, /obj/item/food/baked_muli, rand(15 SECONDS, 25 SECONDS), TRUE, TRUE)
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
icon = 'modular_skyrat/master_files/icons/obj/hydroponics/harvest.dmi'
|
||||
icon_state = "piru"
|
||||
foodtypes = VEGETABLES
|
||||
grind_results = list(/datum/reagent/consumable/piru_flour = 0)
|
||||
tastes = list("chalky dryness" = 1)
|
||||
|
||||
/obj/item/food/grown/piru/grind_results()
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
var/mob/living/spawned_mob = new chosen_mob_type(loc)
|
||||
|
||||
spawned_mob.flags_1 |= (flags_1 & ADMIN_SPAWNED_1)
|
||||
spawned_mob.has_faction = faction
|
||||
spawned_mob.set_faction(faction)
|
||||
spawned_mob.ghost_controllable = ghost_controllable
|
||||
|
||||
RegisterSignal(spawned_mob, COMSIG_LIVING_DEATH, PROC_REF(mob_death))
|
||||
|
||||
@@ -67,7 +67,7 @@ would only be recognisable with someone that had the syndicate trait.
|
||||
if(EXAMINE_CHECK_SYNDICATE_TOY)
|
||||
if(user.mind)
|
||||
var/datum/mind/M = user.mind
|
||||
if((ROLE_TRAITOR in M.get_special_roles()) || (ROLE_SYNDICATE in user.faction))
|
||||
if((ROLE_TRAITOR in M.get_special_roles()) || (user.has_faction(ROLE_SYNDICATE)))
|
||||
composed_message = "You note the following because of your <span class='red'><b>[special_desc_affiliation ? special_desc_affiliation : "Syndicate Affiliation"]</b></span>: <br>"
|
||||
composed_message += special_desc
|
||||
. += composed_message
|
||||
|
||||
@@ -26,9 +26,11 @@
|
||||
sanitization = 0.5
|
||||
flesh_regeneration = 1.75
|
||||
stop_bleeding = 0.25
|
||||
grind_results = list(/datum/reagent/medicine/coagulant = 2)
|
||||
merge_type = /obj/item/stack/medical/mesh/bloody
|
||||
|
||||
/obj/item/stack/medical/mesh/bloody/grind_results()
|
||||
return list(/datum/reagent/medicine/coagulant = 2)
|
||||
|
||||
/obj/item/stack/medical/mesh/bloody/update_icon_state()
|
||||
if(is_open)
|
||||
return ..()
|
||||
|
||||
@@ -170,7 +170,7 @@
|
||||
|
||||
/obj/item/claymore/dragonslayer/attack(mob/living/target, mob/living/carbon/human/user)
|
||||
var/is_nemesis_faction = FALSE
|
||||
for(var/found_faction in target.faction)
|
||||
for(var/found_faction in target.get_faction())
|
||||
if(found_faction in nemesis_factions)
|
||||
is_nemesis_faction = TRUE
|
||||
force += faction_bonus_force
|
||||
|
||||
@@ -829,7 +829,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list(
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] has beamed out [living_user.pulling] alongside them.")
|
||||
var/turf/pulling_turf = get_turf(living_user.pulling)
|
||||
playsound(pulling_turf, 'sound/effects/magic/Repulse.ogg', 100, 1)
|
||||
var/datum/effect_system/basic/spak_spread/quantum/sparks = new
|
||||
var/datum/effect_system/basic/spark_spread/quantum/sparks = new
|
||||
do_sparks(10, 1, pulling_turf)
|
||||
qdel(living_user.pulling)
|
||||
var/turf/user_turf = get_turf(living_user)
|
||||
|
||||
@@ -92,9 +92,8 @@
|
||||
return yoink
|
||||
|
||||
/obj/item/storage/toolbox/emergency/turret/mag_fed/set_faction(obj/machinery/porta_turret/syndicate/toolbox/mag_fed/turret, mob/user)
|
||||
if(!(user.faction in turret.faction))
|
||||
turret.faction += user.faction
|
||||
turret.allies += REF(user)
|
||||
if(!turret.faction_check_atom(user))
|
||||
APPLY_FACTION_AND_ALLIES_FROM(turret, user)
|
||||
|
||||
/obj/item/storage/toolbox/emergency/turret/mag_fed/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
||||
if(!is_type_in_list(tool, list(/obj/item/wrench, /obj/item/screwdriver, /obj/item/multitool, /obj/item/toy/crayon/spraycan)))
|
||||
@@ -140,7 +139,7 @@
|
||||
playsound(src, 'sound/items/tools/drill_use.ogg', 80, TRUE, -1)
|
||||
deploy_turret(user, loc)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/storage/toolbox/emergency/turret/mag_fed/attack_self(mob/user, modifiers)
|
||||
if(!easy_deploy)
|
||||
@@ -433,7 +432,7 @@
|
||||
. = ..()
|
||||
. -= span_notice("You can repair it by <b>left-clicking</b> with a combat wrench.")
|
||||
. -= span_notice("You can fold it by <b>right-clicking</b> with a combat wrench.")
|
||||
if((user.faction in faction) || (REF(user) in allies))
|
||||
if(FAST_FACTION_CHECK(faction, user.get_faction(), null, null, FALSE) || has_ally(user))
|
||||
. += span_notice("You can unlock it by <b>left-clicking</b> with an <b>id card.</b>")
|
||||
. += span_notice("You can repair it by <b>left-clicking</b> with a <b>wrench.</b>")
|
||||
. += span_notice("You can fold it by <b>right-clicking</b> with a <b>wrench.</b>")
|
||||
@@ -668,25 +667,19 @@
|
||||
|
||||
/obj/machinery/porta_turret/syndicate/toolbox/mag_fed/in_faction(mob/target)
|
||||
if(!faction_targeting)
|
||||
if(REF(target) in allies)
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
return has_ally(target)
|
||||
|
||||
return FAST_FACTION_CHECK(faction, target.get_faction(), allies, target.allies, FALSE)
|
||||
|
||||
for(var/faction1 in faction)
|
||||
if((faction1 in target.faction) || (REF(target) in allies)) // For an Ally System
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/// toggles between whether things are inside the ally system
|
||||
/obj/machinery/porta_turret/syndicate/toolbox/mag_fed/proc/toggle_ally(mob/living/target) //leave these since it's kinda important to know which is being done.
|
||||
if(REF(target) in allies)
|
||||
allies -= REF(target)
|
||||
if(remove_ally(target))
|
||||
balloon_alert_to_viewers("ally removed!")
|
||||
return
|
||||
else
|
||||
allies += REF(target)
|
||||
balloon_alert_to_viewers("ally designated!")
|
||||
if(add_ally(target))
|
||||
balloon_alert_to_viewers("ally designated!")
|
||||
return
|
||||
|
||||
/obj/machinery/porta_turret/syndicate/toolbox/mag_fed/target(atom/movable/target)
|
||||
@@ -737,7 +730,6 @@
|
||||
things_in_my_lawn -= whipper_snapper
|
||||
if(target(whipper_snapper))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/// Shoots at one specific target. Only happens if target is overridden. modularized for burst?
|
||||
/obj/machinery/porta_turret/syndicate/toolbox/mag_fed/proc/trytoshootfucker(datum/weakref/target_weakref)
|
||||
@@ -745,11 +737,10 @@
|
||||
if(isnull(overridden_target))
|
||||
target_override = null
|
||||
burst_target = null
|
||||
return FALSE
|
||||
return
|
||||
while(overridden_target)
|
||||
if(target(overridden_target)) //ok. It's trying to shoot a weakref. Thats the issue.
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/porta_turret/syndicate/toolbox/mag_fed/shootAt(atom/movable/target)
|
||||
if(!chambered) //Ok, We need to START the cycle
|
||||
@@ -785,10 +776,9 @@
|
||||
|
||||
/// Handles the firing process. Will need edited for special ammo types like 980.
|
||||
/obj/machinery/porta_turret/syndicate/toolbox/mag_fed/proc/handle_firing(obj/item/ammo_casing/casing, atom/movable/target)
|
||||
var/ignored_factions = list()
|
||||
var/obj/projectile/our_projectile = casing.loaded_projectile
|
||||
if(ignore_faction)
|
||||
our_projectile.ignored_factions = (faction + allies)
|
||||
APPLY_FACTION_AND_ALLIES_FROM(our_projectile, src)
|
||||
our_projectile.damage *= turret_damage_multiplier
|
||||
our_projectile.stamina *= turret_damage_multiplier
|
||||
|
||||
@@ -812,7 +802,7 @@
|
||||
fire_sound = 'modular_skyrat/modules/modular_weapons/sounds/pistol_light.ogg'
|
||||
else if(istype(soundmaker, /obj/item/ammo_casing/c585trappiste))
|
||||
fire_sound = 'modular_skyrat/modules/modular_weapons/sounds/pistol_heavy.ogg'
|
||||
else if(istype(soundmaker, /obj/item/ammo_casing/c46x30mm))
|
||||
else if(istype(soundmaker, /obj/item/ammo_casing/c40sol))
|
||||
fire_sound = 'modular_skyrat/modules/modular_weapons/sounds/rifle_heavy.ogg'
|
||||
else if(istype(soundmaker, /obj/item/ammo_casing/strilka310))
|
||||
fire_sound = 'modular_skyrat/modules/modular_weapons/sounds/battle_rifle.ogg'
|
||||
@@ -823,7 +813,7 @@
|
||||
|
||||
////// Operation Handling //////
|
||||
|
||||
/obj/machinery/porta_turret/syndicate/toolbox/mag_fed/attackby(obj/item/attacking_item, mob/living/user, params) // This hasn't been changed upstream yet.
|
||||
/obj/machinery/porta_turret/syndicate/toolbox/mag_fed/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) // This hasn't been changed upstream yet.
|
||||
var/obj/item/storage/toolbox/emergency/turret/mag_fed/auto_loader = mag_box?.resolve()
|
||||
if(isnull(auto_loader))
|
||||
mag_box = null
|
||||
@@ -877,7 +867,7 @@
|
||||
if(!claptrap_moment)
|
||||
balloon_alert(user, "repaired!")
|
||||
|
||||
/obj/machinery/porta_turret/syndicate/toolbox/mag_fed/attackby_secondary(obj/item/attacking_item, mob/living/user, params) //IM TIRED OF MISMATCHED VAR NAMES. IT'S ATTACK_ITEM ON MAIN, WHY WEAPON HERE?
|
||||
/obj/machinery/porta_turret/syndicate/toolbox/mag_fed/attackby_secondary(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) //IM TIRED OF MISMATCHED VAR NAMES. IT'S ATTACK_ITEM ON MAIN, WHY WEAPON HERE?
|
||||
. = ..()
|
||||
if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN)
|
||||
return
|
||||
|
||||
@@ -11,13 +11,12 @@
|
||||
|
||||
/datum/wound/burn/robotic/overheat
|
||||
treat_text = "Introduction of a cold environment or lowering of body temperature."
|
||||
|
||||
treat_text_short = "Cool the patient down with low temperature chemicals or put them under a shower."
|
||||
simple_desc = "Metals are overheated, increasing damage taken significantly and raising body temperature!"
|
||||
simple_treat_text = "Ideally <b>cryogenics</b>, but any source of <b>low body temperature</b> can work. <b>Spraying</b> with <b>spray bottles/extinguishers/showers</b> \
|
||||
will quickly cool the limb, but <b>cause damage</b>. <b>Hercuri</b> is <b>especially effective</b> in quick cooling. \
|
||||
<b>Clothing</b> reduces the water/hercuri that makes it to the metal, and <b>gauze</b> binds it and <b>reduces</b> the <b>damage</b> taken."
|
||||
homemade_treat_text = "You can also splash <b>any liquid</b> on it for a rather <b>inefficient</b> and <b>damaging</b> coolant!"
|
||||
treat_text_short = "Lower body temperature."
|
||||
|
||||
default_scar_file = METAL_SCAR_FILE
|
||||
|
||||
@@ -163,7 +162,7 @@
|
||||
/datum/wound/burn/robotic/get_limb_examine_description()
|
||||
return span_warning("The metal on this limb is glowing radiantly.")
|
||||
|
||||
/datum/wound/burn/robotic/overheat/handle_process(seconds_per_tick, times_fired)
|
||||
/datum/wound/burn/robotic/overheat/handle_process(seconds_per_tick)
|
||||
if (isnull(victim))
|
||||
var/turf/our_turf = get_turf(limb)
|
||||
if (!isnull(our_turf))
|
||||
@@ -214,15 +213,15 @@
|
||||
* Equalizes temp to the reagent temp, but also causes thermal shock. Basically, does damage based on the temp differential.
|
||||
* Clothes reduce the effects massively. Hercuri reduces the thermal shock and gets a special temp buff.
|
||||
*/
|
||||
/datum/wound/burn/robotic/overheat/proc/victim_exposed_to_reagents(datum/signal_source, list/reagents, datum/reagents/source, methods, show_message)
|
||||
/datum/wound/burn/robotic/overheat/proc/victim_exposed_to_reagents(datum/signal_source, list/reagents, datum/reagents/source, methods, volume_modifier, show_message)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
var/reagent_coeff = base_reagent_temp_coefficient
|
||||
if (!get_location_accessible(victim, limb.body_zone))
|
||||
if(!victim.is_location_accessible(limb.body_zone))
|
||||
if (ishuman(victim))
|
||||
// hi! its niko! small rant
|
||||
// hi! it's niko! small rant
|
||||
// this proc has no goddamn reason to be on human, it could so easily just have used a proc on carbon that would get the required bodyparts to check
|
||||
// but no. it had to hardcode the list in the proc itself so its impossible to modularly fix this
|
||||
// but no. it had to hardcode the list in the proc itself so it's impossible to modularly fix this
|
||||
// so instead we just say fuck it and hope to god only human subtypes get this wound
|
||||
// tldr; ryll why
|
||||
var/mob/living/carbon/human/human_victim = victim
|
||||
@@ -237,7 +236,7 @@
|
||||
return
|
||||
|
||||
if (istype(source.my_atom, /obj/machinery/shower))
|
||||
expose_temperature(source.chem_temp, (15 * reagent_coeff), TRUE)
|
||||
expose_temperature(source.chem_temp, (15 * volume_modifier * reagent_coeff), TRUE)
|
||||
return
|
||||
|
||||
var/total_reagent_amount = 0
|
||||
@@ -252,7 +251,7 @@
|
||||
|
||||
var/local_chem_temp = max(source.chem_temp - chem_temp_increment, 0)
|
||||
|
||||
expose_temperature(local_chem_temp, (reagent_coeff * total_reagent_amount), TRUE, heat_shock_damage_mult = thermal_shock_mult)
|
||||
expose_temperature(local_chem_temp, (reagent_coeff * volume_modifier * total_reagent_amount), TRUE, heat_shock_damage_mult = thermal_shock_mult)
|
||||
|
||||
/// Adjusts chassis_temperature by the delta between temperature and itself, multiplied by coeff.
|
||||
/// If heat_shock is TRUE, limb will receive brute damage based on the delta.
|
||||
@@ -281,7 +280,7 @@
|
||||
|
||||
if (victim)
|
||||
var/gauze_or_not = (!isnull(gauze) ? ", but [gauze] helps to keep it together" : "")
|
||||
var/clothing_text = (!get_location_accessible(victim, limb.body_zone) ? ", [victim.p_their()] clothing absorbing some of the liquid" : "")
|
||||
var/clothing_text = (!victim.is_location_accessible(limb.body_zone) ? ", [victim.p_their()] clothing absorbing some of the liquid" : "")
|
||||
victim.visible_message(span_warning("[victim]'s [limb.plaintext_zone] strains from the thermal shock[clothing_text][gauze_or_not]!"))
|
||||
playsound(victim, 'sound/items/tools/welder.ogg', 25)
|
||||
|
||||
@@ -320,8 +319,8 @@
|
||||
var/heat_fahrenheit = round(heating_threshold * 1.8-459.67, 0.1)
|
||||
|
||||
return "Its current temperature is [span_blue("[current_temp_celcius ] °C ([current_temp_fahrenheit] °F)")], \
|
||||
and needs to cool to [span_nicegreen("[cool_celcius] °C ([cool_fahrenheit] °F)")][(heating_threshold && heating_threshold != INFINITY) ? ", but \
|
||||
will worsen if heated to [span_purple("[heat_celcius] °C ([heat_fahrenheit] °F)")]" : ""]."
|
||||
and needs to cool to [span_nicegreen("[cool_celcius] °C ([cool_fahrenheit] °F)")], but \
|
||||
will worsen if heated to [span_purple("[heat_celcius] °C ([heat_fahrenheit] °F)")]."
|
||||
|
||||
/datum/wound/burn/robotic/overheat/get_scanner_description(mob/user)
|
||||
. = ..()
|
||||
|
||||
@@ -62,89 +62,126 @@
|
||||
balloon_alert_to_viewers(anchored ? "secured" : "unsecured")
|
||||
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
|
||||
|
||||
/obj/structure/large_mortar/attackby(obj/item/attacking_item, mob/living/carbon/human/user)
|
||||
if(istype(attacking_item, /obj/item/storage/bag))
|
||||
/obj/structure/large_mortar/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers)
|
||||
if(attacking_item.is_refillable())
|
||||
return
|
||||
|
||||
/obj/structure/large_mortar/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking)
|
||||
. = ..()
|
||||
|
||||
if(. || user.combat_mode || tool.is_refillable())
|
||||
return .
|
||||
|
||||
if(istype(tool, /obj/item/storage/bag))
|
||||
if(length(contents) >= maximum_contained_items)
|
||||
balloon_alert(user, "already full")
|
||||
return TRUE
|
||||
balloon_alert(user, "already full!")
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
|
||||
if(!length(attacking_item.contents))
|
||||
if(!length(tool.contents))
|
||||
balloon_alert(user, "nothing to transfer!")
|
||||
return TRUE
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
|
||||
for(var/obj/item/target_item in attacking_item.contents)
|
||||
for(var/obj/item/target_item in tool.contents)
|
||||
if(length(contents) >= maximum_contained_items)
|
||||
break
|
||||
|
||||
if(target_item.juice_typepath || target_item.grind_results)
|
||||
if(target_item.juice_typepath() || target_item.grind_results())
|
||||
target_item.forceMove(src)
|
||||
|
||||
if (length(contents) >= maximum_contained_items)
|
||||
balloon_alert(user, "filled!")
|
||||
balloon_alert(user, "filled")
|
||||
|
||||
else
|
||||
balloon_alert(user, "transferred")
|
||||
return TRUE
|
||||
|
||||
if(istype(attacking_item, /obj/item/pestle))
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
if(istype(tool, /obj/item/pestle))
|
||||
if(!anchored)
|
||||
balloon_alert(user, "secure to ground first")
|
||||
return
|
||||
balloon_alert(user, "not secured!")
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
|
||||
if(!length(contents))
|
||||
balloon_alert(user, "nothing to grind")
|
||||
return
|
||||
|
||||
if(user.get_stamina_loss() > LARGE_MORTAR_STAMINA_MINIMUM)
|
||||
balloon_alert(user, "too tired")
|
||||
return
|
||||
if(!length(contents) && reagents.total_volume == 0)
|
||||
balloon_alert(user, "mortar empty!")
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
|
||||
var/list/choose_options = list(
|
||||
"Grind" = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_grind"),
|
||||
"Juice" = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_juice")
|
||||
"Juice" = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_juice"),
|
||||
"Mix" = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_mix"),
|
||||
)
|
||||
var/picked_option = show_radial_menu(user, src, choose_options, radius = 38, require_near = TRUE)
|
||||
|
||||
if(!length(contents) || !in_range(src, user) || !user.is_holding(attacking_item) && !picked_option)
|
||||
return
|
||||
if(user.get_stamina_loss() > LARGE_MORTAR_STAMINA_MINIMUM)
|
||||
balloon_alert(user, "too tired!")
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
|
||||
balloon_alert_to_viewers("grinding...")
|
||||
var/skill_modifier = user.mind.get_skill_modifier(/datum/skill/primitive, SKILL_SPEED_MODIFIER)
|
||||
if(!in_range(src, user) || !user.is_holding(tool) || !picked_option)
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
|
||||
var/act_verb = LOWER_TEXT(picked_option)
|
||||
var/act_verb_ing
|
||||
if(act_verb == "juice")
|
||||
act_verb_ing = "juicing"
|
||||
|
||||
else
|
||||
act_verb_ing = "[act_verb]ing"
|
||||
|
||||
var/has_resource
|
||||
if(picked_option == "Mix")
|
||||
has_resource = reagents.total_volume > 0
|
||||
|
||||
else
|
||||
has_resource = length(contents) > 0
|
||||
|
||||
if(!has_resource)
|
||||
balloon_alert(user, "nothing to [act_verb]!")
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
|
||||
balloon_alert_to_viewers("[act_verb_ing]...")
|
||||
var/skill_modifier = user.mind?.get_skill_modifier(/datum/skill/primitive, SKILL_SPEED_MODIFIER)
|
||||
if(!do_after(user, 5 SECONDS * skill_modifier, target = src))
|
||||
balloon_alert_to_viewers("stopped grinding")
|
||||
return
|
||||
balloon_alert_to_viewers("stopped [act_verb_ing]")
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
|
||||
var/stamina_use = LARGE_MORTAR_STAMINA_USE
|
||||
if(prob(user.mind.get_skill_modifier(/datum/skill/primitive, SKILL_PROBS_MODIFIER)))
|
||||
stamina_use *= 0.5 //so it uses half the amount of stamina (35 instead of 70)
|
||||
|
||||
user.adjust_stamina_loss(stamina_use) //This is a bit more tiring than a normal sized mortar and pestle
|
||||
user.mind.adjust_experience(/datum/skill/primitive, 5)
|
||||
user.adjust_stamina_loss(LARGE_MORTAR_STAMINA_USE) //This is a bit more tiring than a normal sized mortar and pestle
|
||||
switch(picked_option)
|
||||
if("Juice")
|
||||
for(var/obj/item/target_item as anything in contents)
|
||||
if(target_item.juice_typepath)
|
||||
if (reagents.total_volume >= reagents.maximum_volume)
|
||||
balloon_alert(user, "overflowing!")
|
||||
break
|
||||
|
||||
if(target_item.juice_typepath())
|
||||
juice_target_item(target_item, user)
|
||||
|
||||
else
|
||||
grind_target_item(target_item, user)
|
||||
|
||||
if("Grind")
|
||||
for(var/obj/item/target_item as anything in contents)
|
||||
if(target_item.grind_results)
|
||||
if (reagents.total_volume >= reagents.maximum_volume)
|
||||
balloon_alert(user, "overflowing!")
|
||||
break
|
||||
|
||||
if(target_item.grind_results())
|
||||
grind_target_item(target_item, user)
|
||||
|
||||
else
|
||||
juice_target_item(target_item, user)
|
||||
return
|
||||
|
||||
if(!attacking_item.grind_results && !attacking_item.juice_typepath)
|
||||
balloon_alert(user, "can't grind this")
|
||||
return ..()
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
if(!tool.grind_results() && !tool.juice_typepath())
|
||||
balloon_alert(user, "can't grind this!")
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
|
||||
if(length(contents) >= maximum_contained_items)
|
||||
balloon_alert(user, "already full")
|
||||
return
|
||||
balloon_alert(user, "already full!")
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
|
||||
attacking_item.forceMove(src)
|
||||
return ..()
|
||||
tool.forceMove(src)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
///Juices the passed target item, and transfers any contained chems to the mortar as well
|
||||
/obj/structure/large_mortar/proc/juice_target_item(obj/item/to_be_juiced, mob/living/carbon/human/user)
|
||||
|
||||
@@ -10,13 +10,15 @@
|
||||
throwforce = 15
|
||||
resistance_flags = FIRE_PROOF
|
||||
merge_type = /obj/item/stack/sheet/mineral/stone
|
||||
grind_results = null
|
||||
material_type = /datum/material/stone
|
||||
matter_amount = 0
|
||||
source = null
|
||||
walltype = /turf/closed/wall/mineral/stone
|
||||
stairs_type = /obj/structure/stairs/stone
|
||||
|
||||
/obj/item/stack/sheet/mineral/stone()
|
||||
return null
|
||||
|
||||
GLOBAL_LIST_INIT(stone_recipes, list ( \
|
||||
new/datum/stack_recipe("stone brick wall", /turf/closed/wall/mineral/stone, 5, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_TRANSFERS_REAGENTS, category = CAT_STRUCTURE), \
|
||||
new/datum/stack_recipe("stone brick tile", /obj/item/stack/tile/mineral/stone, 1, 4, 20, category = CAT_TILES),
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
/obj/structure/window/reinforced/fulltile/Initialize(mapload, direct)
|
||||
. = ..()
|
||||
qdel(GetComponent(/datum/component/simple_rotation))
|
||||
RemoveElement(/datum/element/simple_rotation)
|
||||
AddElement(/datum/element/airbag)
|
||||
|
||||
/**
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
ini_dir = dir
|
||||
|
||||
AddElement(/datum/element/climbable, climb_time = 20, climb_stun = 0)
|
||||
AddComponent(/datum/component/simple_rotation, ROTATION_NEEDS_ROOM)
|
||||
AddElement(/datum/element/simple_rotation, ROTATION_NEEDS_ROOM)
|
||||
|
||||
var/static/list/loc_connections = list(
|
||||
COMSIG_ATOM_ENTERED = PROC_REF(on_enter),
|
||||
|
||||
@@ -24,5 +24,7 @@
|
||||
filling_color = "#FF4500"
|
||||
bite_consumption_mod = 0.5
|
||||
foodtypes = FRUIT
|
||||
juice_typepath = /datum/reagent/toxin
|
||||
tastes = list("poison" = 1)
|
||||
|
||||
/obj/item/food/grown/amauri/juice_typepath()
|
||||
return /datum/reagent/toxin
|
||||
|
||||
@@ -24,5 +24,7 @@
|
||||
filling_color = "#FF4500"
|
||||
bite_consumption_mod = 0.5
|
||||
foodtypes = FRUIT
|
||||
juice_typepath = /datum/reagent/consumable/sugar
|
||||
tastes = list("overpowering sweetness" = 1)
|
||||
|
||||
/obj/item/food/grown/gelthi/juice_typepath()
|
||||
return /datum/reagent/consumable/sugar
|
||||
|
||||
@@ -24,5 +24,7 @@
|
||||
filling_color = "#FF4500"
|
||||
bite_consumption_mod = 0.5
|
||||
foodtypes = FRUIT
|
||||
juice_typepath = /datum/reagent/medicine/cryoxadone
|
||||
tastes = list("snow" = 1)
|
||||
|
||||
/obj/item/food/grown/jurlmah/juice_typepath()
|
||||
return /datum/reagent/medicine/cryoxadone
|
||||
|
||||
@@ -24,5 +24,7 @@
|
||||
filling_color = "#FF4500"
|
||||
bite_consumption_mod = 0.5
|
||||
foodtypes = FRUIT
|
||||
juice_typepath = /datum/reagent/consumable/nothing
|
||||
tastes = list("nothing" = 1)
|
||||
|
||||
/obj/item/food/grown/nofruit/juice_typepath()
|
||||
return /datum/reagent/consumable/nothing
|
||||
|
||||
@@ -24,5 +24,7 @@
|
||||
filling_color = "#FF4500"
|
||||
bite_consumption_mod = 0.5
|
||||
foodtypes = FRUIT
|
||||
juice_typepath = /datum/reagent/bromine
|
||||
tastes = list("chemicals" = 1)
|
||||
|
||||
/obj/item/food/grown/shand/juice_typepath()
|
||||
return /datum/reagent/bromine
|
||||
|
||||
@@ -24,5 +24,7 @@
|
||||
filling_color = "#FF4500"
|
||||
bite_consumption_mod = 0.5
|
||||
foodtypes = FRUIT
|
||||
juice_typepath = /datum/reagent/brimdust
|
||||
tastes = list("crystals" = 1)
|
||||
|
||||
/obj/item/food/grown/surik/juice_typepath()
|
||||
return /datum/reagent/brimdust
|
||||
|
||||
@@ -25,5 +25,7 @@
|
||||
filling_color = "#FF4500"
|
||||
bite_consumption_mod = 0.5
|
||||
foodtypes = FRUIT
|
||||
juice_typepath = /datum/reagent/consumable/coconut_milk
|
||||
tastes = list("milk" = 1)
|
||||
|
||||
/obj/item/food/grown/telriis/juice_typepath()
|
||||
return /datum/reagent/consumable/coconut_milk
|
||||
|
||||
@@ -24,5 +24,7 @@
|
||||
filling_color = "#FF4500"
|
||||
bite_consumption_mod = 0.5
|
||||
foodtypes = FRUIT
|
||||
juice_typepath = /datum/reagent/silver
|
||||
tastes = list("silver" = 1)
|
||||
|
||||
/obj/item/food/grown/thaadra/juice_typepath()
|
||||
return /datum/reagent/silver
|
||||
|
||||
@@ -24,5 +24,7 @@
|
||||
filling_color = "#FF4500"
|
||||
bite_consumption_mod = 0.5
|
||||
foodtypes = FRUIT
|
||||
juice_typepath = /datum/reagent/toxin/plasma
|
||||
tastes = list("plasma" = 1)
|
||||
|
||||
/obj/item/food/grown/vale/juice_typepath()
|
||||
return /datum/reagent/toxin/plasma
|
||||
|
||||
@@ -24,5 +24,7 @@
|
||||
filling_color = "#FF4500"
|
||||
bite_consumption_mod = 0.5
|
||||
foodtypes = FRUIT
|
||||
juice_typepath = /datum/reagent/nitrous_oxide
|
||||
tastes = list("sleep" = 1)
|
||||
|
||||
/obj/item/food/grown/vaporsac/juice_typepath()
|
||||
return /datum/reagent/nitrous_oxide
|
||||
|
||||
@@ -5,4 +5,10 @@
|
||||
icon_state = "rzippo"
|
||||
light_color = "#952CF4"
|
||||
overlay_state = "royal"
|
||||
grind_results = list(/datum/reagent/gold = 1, /datum/reagent/fuel = 5, /datum/reagent/colorful_reagent/powder/purple/crayon = 1.5)
|
||||
|
||||
/obj/item/lighter/royal/grind_results()
|
||||
return list(
|
||||
/datum/reagent/gold = 1,
|
||||
/datum/reagent/fuel = 5,
|
||||
/datum/reagent/colorful_reagent/powder/purple/crayon = 1.5,
|
||||
)
|
||||
|
||||
@@ -544,7 +544,7 @@
|
||||
|
||||
// Add rotating and armrest
|
||||
/obj/structure/bloodsucker/bloodthrone/Initialize(mapload)
|
||||
AddComponent(/datum/component/simple_rotation)
|
||||
AddElement(/datum/element/simple_rotation)
|
||||
armrest = GetArmrest()
|
||||
armrest.layer = ABOVE_MOB_LAYER
|
||||
return ..()
|
||||
|
||||
@@ -9937,7 +9937,6 @@
|
||||
#include "modular_zubbers\code\modules\tarkon\code\clothing\backpack.dm"
|
||||
#include "modular_zubbers\code\modules\tarkon\code\misc-fluff\research.dm"
|
||||
#include "modular_zubbers\code\modules\taur_mechanics\serpentine_taur.dm"
|
||||
#include "modular_zubbers\code\modules\tgui_input\color.dm"
|
||||
#include "modular_zubbers\code\modules\title_screen\code\title_screen_subsystem.dm"
|
||||
#include "modular_zubbers\code\modules\uplink\one_shot_emag.dm"
|
||||
#include "modular_zubbers\code\modules\uplink\uplink_devices.dm"
|
||||
|
||||
Reference in New Issue
Block a user