Merge branch 'master' into protean-rework

This commit is contained in:
Razgriz
2022-11-14 23:50:50 -07:00
committed by GitHub
226 changed files with 110096 additions and 5644 deletions
@@ -1,3 +1,10 @@
/datum/preferences
var/digitigrade = 0 // 0 = no digi, 1 = default, 2+ = digi styles... (Not used yet)
var/job_other_low = 0
var/job_other_med = 0
var/job_other_high = 0
/client/verb/toggle_random_emote_pitch()
set name = "Toggle Random Emote Pitch"
set category = "Preferences"
@@ -0,0 +1,30 @@
/datum/spawnpoint/stationgateway
display_name = "Station gateway"
msg = "has completed translation from station gateway"
disallow_job = list("Non-Crew")
/datum/spawnpoint/stationgateway/New()
..()
turfs = latejoin_gatewaystation
/datum/spawnpoint/vore
display_name = "Vorespawn - Prey"
msg = "has arrived on the station"
allow_offmap_spawn = TRUE
/datum/spawnpoint/vore/pred
display_name = "Vorespawn - Pred"
msg = "has arrived on the station"
/datum/spawnpoint/vore/New()
..()
turfs = latejoin
/datum/spawnpoint/plainspath
display_name = "Sif plains"
msg = "has checked in at the plains gate"
restrict_job = list("Non-Crew")
/datum/spawnpoint/plainspath/New()
..()
turfs = latejoin_plainspath
@@ -1,18 +1,25 @@
/mob/living/carbon/human/update_fullness()
var/previous_stomach_fullness = vore_fullness_ex["stomach"]
var/previous_taur_fullness = vore_fullness_ex["taur belly"]
//update_vore_tail_sprite()
//update_vore_belly_sprite()
. = ..()
if(vore_fullness_ex["stomach"] != previous_stomach_fullness)
update_vore_belly_sprite()
if(vore_fullness_ex["taur belly"] != previous_taur_fullness)
update_vore_tail_sprite()
var/previous_stomach_fullness = vore_fullness_ex["stomach"]
var/previous_taur_fullness = vore_fullness_ex["taur belly"]
//update_vore_tail_sprite()
//update_vore_belly_sprite()
. = ..()
if(vore_fullness_ex["stomach"] != previous_stomach_fullness)
update_vore_belly_sprite()
if(vore_fullness_ex["taur belly"] != previous_taur_fullness)
update_vore_tail_sprite()
/mob/living/carbon/human/vs_animate(var/belly_to_animate)
if(belly_to_animate == "stomach")
vore_belly_animation()
else if(belly_to_animate == "taur belly")
vore_tail_animation()
else
return
if(belly_to_animate == "stomach")
vore_belly_animation()
else if(belly_to_animate == "taur belly")
vore_tail_animation()
else
return
/mob/living/carbon/human/verb/hide_headset()
set name = "Show/Hide Headset"
set category = "IC"
set desc = "Toggle headset worn icon visibility."
hide_headset = !hide_headset
update_inv_ears()
@@ -9,3 +9,4 @@
vore_icon_bellies = list("stomach", "taur belly")
var/struggle_anim_stomach = FALSE
var/struggle_anim_taur = FALSE
var/hide_headset = FALSE
@@ -1,2 +1,29 @@
/datum/species/teshari
vore_belly_default_variant = "T"
vore_belly_default_variant = "T"
// allow teshari to always be scooped, as long as pref is enabled
/mob/living/MouseDrop(var/atom/over_object)
// make sure src (The dragged) is human
if(!istype(src, /mob/living/carbon/human))
return ..()
var/mob/living/carbon/human/DraggedH = src
//make sure src (the dragged) is a teshari
if(DraggedH.species.name == SPECIES_TESHARI)
var/mob/living/M = over_object
// only perform the grab if; grabber and grabbed adjacent, caller is grabbed OR grabber, and the grabbed's grab preference is true.
if(holder_type && istype(M) && Adjacent(M) && (usr == M || usr == DraggedH) && DraggedH != M && !M.incapacitated() && DraggedH.pickup_pref && (M != usr || (M == usr && M.pickup_active)) && (DraggedH.a_intent == I_HELP && M.a_intent == I_HELP)) //VOREStation Edit
get_scooped(M, (usr == DraggedH))
return
return ..()
//allow teshari permission to pass plastic flaps.
/obj/structure/plasticflaps/CanPass(atom/A, turf/T)
var/mob/living/carbon/human/H = A
if(istype(H))
if(H.species.name == SPECIES_TESHARI)
return 1
return ..()
+1
View File
@@ -1,6 +1,7 @@
/mob
var/voice_freq = 42500 // Preference for character voice frequency
var/list/voice_sounds_list = list() // The sound list containing our voice sounds!
var/died_in_vr = FALSE //For virtual reality sleepers
/mob/is_incorporeal()
if(incorporeal_move)
@@ -145,4 +145,22 @@
name = "Sect Drone Eyes"
icon_state = "sectdrone_eyes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/ch/thickneck
name = "Thick Neck"
icon_state = "thickneck"
body_parts = list(BP_HEAD)
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/marking/ch/thickerneck
name = "Thicker Neck"
icon_state = "thickerneck"
body_parts = list(BP_HEAD)
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/marking/ch/thickthroat
name = "Thick Throat"
icon_state = "thickthroat"
body_parts = list(BP_HEAD)
color_blend_mode = ICON_MULTIPLY
@@ -16,4 +16,14 @@
name = "Fox (Taur, 3-color)"
icon_state = "fox"
extra_overlay = "fox_markings"
extra_overlay2 = "fox_markings2"
extra_overlay2 = "fox_markings2"
/datum/sprite_accessory/tail/taur/ch/sectdrone
name = "Sect Drone (Taur)"
icon_state = "sectdrone"
extra_overlay = "sectdrone_markings"
/datum/sprite_accessory/tail/taur/ch/fatsectdrone
name = "Fat Sect Drone (Taur)"
icon_state = "fatsectdrone"
extra_overlay = "fatsectdrone_markings"
@@ -0,0 +1,9 @@
// prevent gun activation when stealth swimming. The low alpha hides you from NPC AI, which allows you to cheese mobs.
/obj/item/weapon/gun/special_check(var/mob/user)
var/mob/living/L = user
if(istype(L))
if(L.has_modifier_of_type(/datum/modifier/underwater_stealth))
to_chat(user,"<span class='warning'>You cannot use guns whilst hiding underwater!</span>")
return 0
return ..()
@@ -23,9 +23,15 @@
var/busy = FALSE
var/production_mode = FALSE // Toggle between click-step input and comma-delineated text input for creating recipes.
var/use_catalyst = TRUE // Determines whether or not the catalyst will be added to reagents while processing a recipe.
var/stalled = FALSE // Required for emergency stop to interrupt on-going recipes.
var/drug_substance = 1 // Controls which form medicine takes (bottle, pill, etc). 1 for bottle, 2 for pill, 3 for patch.
var/delay_modifier = 4 // This is multiplied by the volume of a step to determine how long each step takes. Bigger volume = slower.
var/obj/item/weapon/reagent_containers/glass/catalyst = null // This is where the user adds catalyst. Usually phoron.
var/bottle_icon = 4 // Determines icon states of bottles, pills, and patches.
var/pill_icon = 2
var/patch_icon = 2
var/list/recipes = list() // This holds chemical recipes up to a maximum determined by SYNTHESIZER_MAX_RECIPES. Two-dimensional.
var/list/queue = list() // This holds the recipe id's for queued up recipes.
var/list/catalyst_ids = list() // This keeps track of the chemicals in the catalyst to remove before bottling.
@@ -264,6 +270,10 @@
data["production_mode"] = production_mode
data["panel_open"] = panel_open
data["use_catalyst"] = use_catalyst
data["drug_substance"] = drug_substance
data["bottle_icon"] = bottle_icon
data["pill_icon"] = pill_icon
data["patch_icon"] = patch_icon
var/list/tmp_queue = list()
for(var/i = 1, i <= queue.len, i++)
@@ -304,12 +314,19 @@
chemicals.Add(list(list("title" = label, "id" = label, "amount" = C.reagents.total_volume))) // list in a list because Byond merges the first list
data["chemicals"] = chemicals
data["modal"] = tgui_modal_data(src)
return data
/obj/machinery/chemical_synthesizer/tgui_act(action, params)
/obj/machinery/chemical_synthesizer/tgui_act(action, params, datum/tgui/ui, datum/tgui_state/state)
if(..())
return TRUE
if(tgui_act_modal(action, params, ui, state))
return TRUE
add_fingerprint(usr)
. = TRUE
switch(action)
if("start_queue")
@@ -347,7 +364,7 @@
if(busy)
var/confirm = alert(usr, "Are you sure you want to stall the machine?", "Confirm", "Yes", "No")
if(confirm == "Yes")
stall()
stalled = TRUE
if("bottle_product")
// Bottles the reaction mixture if stalled.
if(!busy)
@@ -391,8 +408,56 @@
// If you forgot, this is a string returned by the user pressing the "add to queue" button on a recipe.
if(index in recipes)
queue[++queue.len] = index
if("drug_form")
// Toggles between bottles, pills, and patches.
drug_substance = params["drug_index"]
add_fingerprint(usr)
/obj/machinery/chemical_synthesizer/proc/tgui_act_modal(action, params, datum/tgui/ui, datum/tgui_state/state)
. = TRUE
var/id = params["id"] // The modal's ID
var/list/arguments = istext(params["arguments"]) ? json_decode(params["arguments"]) : params["arguments"]
switch(tgui_modal_act(src, action, params))
if(TGUI_MODAL_OPEN)
switch(id)
if("change_pill_style")
var/list/choices = list()
for(var/i = 1 to MAX_PILL_SPRITE)
choices += "pill[i].png"
tgui_modal_bento(src, id, "Please select the new style for pills:", null, arguments, pill_icon, choices)
if("change_patch_style")
var/list/choices = list()
for(var/i = 1 to MAX_PATCH_SPRITE)
choices += "patch[i].png"
tgui_modal_bento(src, id, "Please select the new style for patches:", null, arguments, patch_icon, choices)
if("change_bottle_style")
var/list/choices = list()
for(var/i = 1 to MAX_BOTTLE_SPRITE)
choices += "bottle-[i].png"
tgui_modal_bento(src, id, "Please select the new style for bottles:", null, arguments, bottle_icon, choices)
else
return FALSE
if(TGUI_MODAL_ANSWER)
var/answer = params["answer"]
switch(id)
if("change_pill_style")
var/new_style = CLAMP(text2num(answer) || 0, 0, MAX_PILL_SPRITE)
if(!new_style)
return
pill_icon = new_style
if("change_patch_style")
var/new_style = CLAMP(text2num(answer) || 0, 0, MAX_PATCH_SPRITE)
if(!new_style)
return
patch_icon = new_style
if("change_bottle_style")
var/new_style = CLAMP(text2num(answer) || 0, 0, MAX_BOTTLE_SPRITE)
if(!new_style)
return
bottle_icon = new_style
else
return FALSE
else
return FALSE
/obj/machinery/chemical_synthesizer/attack_ghost(mob/user)
if(stat & (BROKEN|NOPOWER))
@@ -482,6 +547,9 @@
// This proc handles adding the catalyst starting the synthesizer's queue.
/obj/machinery/chemical_synthesizer/proc/start_queue(mob/user)
if(stalled) // Incase SOMEHOW this var is true when the machine isn't running.
stalled = FALSE
if(stat & (BROKEN|NOPOWER))
return
@@ -518,6 +586,11 @@
// This proc controls the timing for each step in a reaction. Step is the index for the current chem of our recipe, step + 1 is the volume of said chem.
/obj/machinery/chemical_synthesizer/proc/follow_recipe(var/r_id, var/step as num)
if(stalled) // Emergency stop if() check.
stalled = FALSE
stall()
return
if(stat & (BROKEN|NOPOWER))
stall()
return
@@ -530,6 +603,11 @@
// This proc carries out the actual steps in each reaction.
/obj/machinery/chemical_synthesizer/proc/perform_reaction(var/r_id, var/step as num)
if(stalled) // Emergency stop if() check.
stalled = FALSE
stall()
return
if(stat & (BROKEN|NOPOWER))
stall()
return
@@ -593,14 +671,41 @@
if(!r_id)
r_id = "[reagents.get_master_reagent_name()]"
while(reagents.total_volume)
var/obj/item/weapon/reagent_containers/glass/bottle/B = new(src.loc)
B.name = "[r_id] bottle"
B.pixel_x = rand(-7, 7) // random position
B.pixel_y = rand(-7, 7)
B.icon_state = "bottle-4"
reagents.trans_to_obj(B, min(reagents.total_volume, MAX_UNITS_PER_BOTTLE))
B.update_icon()
// Copy-pasta go brr
switch(drug_substance)
if(2) // Pills
while(reagents.total_volume)
var/obj/item/weapon/reagent_containers/pill/P= new(src.loc)
P.name = "[r_id]"
P.pixel_x = rand(-7, 7) // random position
P.pixel_y = rand(-7, 7)
P.icon_state = "pill[pill_icon]"
reagents.trans_to_obj(P, min(reagents.total_volume, MAX_UNITS_PER_PILL))
if(P.icon_state in list("pill1", "pill2", "pill3", "pill4")) // if using greyscale, take colour from reagent
P.color = P.reagents.get_color()
P.update_icon()
if(3) // Patches
while(reagents.total_volume)
var/obj/item/weapon/reagent_containers/pill/patch/P= new(src.loc)
P.name = "[r_id]"
P.pixel_x = rand(-7, 7) // random position
P.pixel_y = rand(-7, 7)
P.icon_state = "patch[patch_icon]"
reagents.trans_to_obj(P, min(reagents.total_volume, MAX_UNITS_PER_PATCH))
if(P.icon_state in list("patch1", "patch2", "patch3", "patch4")) // if using greyscale, take colour from reagent
P.color = P.reagents.get_color()
P.update_icon()
else // Bottles. Official value is 1, but this works as a sanity check.
while(reagents.total_volume)
var/obj/item/weapon/reagent_containers/glass/bottle/B = new(src.loc)
B.name = "[r_id] bottle"
B.pixel_x = rand(-7, 7) // random position
B.pixel_y = rand(-7, 7)
B.icon_state = "bottle-[bottle_icon]"
reagents.trans_to_obj(B, min(reagents.total_volume, MAX_UNITS_PER_BOTTLE))
B.update_icon()
// Sanity check when manual bottling is triggered.
if(queue.len)
@@ -0,0 +1,2 @@
/obj/machinery/shield_capacitor
icon = 'modular_chomp/icons/obj/machines/shielding.dmi'
@@ -0,0 +1,2 @@
/obj/machinery/shield_gen
icon = 'modular_chomp/icons/obj/machines/shielding.dmi'