Merge branch 'master' into protean-rework

This commit is contained in:
BlackMajor
2022-08-20 09:53:04 +12:00
committed by GitHub
1141 changed files with 43500 additions and 32486 deletions
@@ -2,4 +2,10 @@
description ="Random emote pitch"
key = "EMOTE_VARY"
enabled_description = "Will be Random"
disabled_description = "Will not be Random"
disabled_description = "Will not be Random"
/datum/client_preference/autotranscore
description = "Automatic Transcore Notification"
key = "AUTOTRANSCORE"
enabled_description = "Automatic notification"
disabled_description = "No automatic notification"
@@ -12,3 +12,18 @@
SScharacter_setup.queue_preferences_save(prefs)
feedback_add_details("admin_verb","TRandomEmotePitch") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/toggle_autotranscore()
set name = "Toggle Automatic Transcore Notification"
set category = "Preferences"
set desc = "Toggles whether or not your death with a backup implant will automatically trigger a transcore notification after a few minutes."
var/pref_path = /datum/client_preference/autotranscore
toggle_preference(pref_path)
to_chat(src, "Your death with a backup implant will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] trigger an automatic transcore notification.")
SScharacter_setup.queue_preferences_save(prefs)
feedback_add_details("admin_verb","TAutoTranscore") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -1,3 +1,10 @@
/decl/emote/audible/wheeze
emote_sound = 'modular_chomp/sound/voice/wheeze.ogg'
/decl/emote/audible/prbt2
key = "prbt2"
emote_message_1p = "You prbt."
emote_message_3p = "prbts."
emote_message_1p_target = "You prbt at TARGET."
emote_message_3p_target = "prbts at TARGET."
emote_sound = 'sound/voice/prbt2.ogg'
@@ -0,0 +1,18 @@
/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()
/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
@@ -0,0 +1,11 @@
/mob/living/carbon/human
var/gender_change_cooldown = 0 // A cooldown for gender and gender indentify changing procs to make it easy to avoid spam of gender change
var/loneliness_stage = 0
var/next_loneliness_time = 0
var/digitigrade = 0 // 0 = no digi, 1 = default, 2+ = digi styles... (Not used yet)
vore_capacity = 3
vore_capacity_ex = list("stomach" = 3, "taur belly" = 3)
vore_fullness_ex = list("stomach" = 0, "taur belly" = 0)
vore_icon_bellies = list("stomach", "taur belly")
var/struggle_anim_stomach = FALSE
var/struggle_anim_taur = FALSE
@@ -1,2 +1,3 @@
/datum/species
var/crit_mod = 1
var/crit_mod = 1
var/vore_belly_default_variant = "H"
@@ -143,7 +143,7 @@
if(!riding_datum)
riding_datum = new /datum/riding/simple_mob/protean_blob(src)
datum/riding/simple_mob/protean_blob/handle_vehicle_layer()
/datum/riding/simple_mob/protean_blob/handle_vehicle_layer()
ridden.layer = OBJ_LAYER
/mob/living/simple_mob/protean_blob/MouseDrop_T()
@@ -0,0 +1,2 @@
/datum/species/unathi
vore_belly_default_variant = "L"
@@ -0,0 +1,2 @@
/datum/species/teshari
vore_belly_default_variant = "T"
@@ -0,0 +1,104 @@
// Expand shoe layer to allow changing the icon for digi legs
// For some reason, suit and uniform already has this funcitonality, but shoes do not.
#define SHOES_LAYER_ALT 8 //Shoe-slot item (when set to be under uniform via verb)
#define SHOES_LAYER 11 //Shoe-slot item
#define VORE_BELLY_LAYER 31 //Should be the same that it is in update_icons.dm
/mob/living/carbon/human/update_inv_shoes()
//. = ..()
remove_layer(SHOES_LAYER)
remove_layer(SHOES_LAYER_ALT) //Dumb alternate layer for shoes being under the uniform.
if(!shoes || (wear_suit && wear_suit.flags_inv & HIDESHOES) || (w_uniform && w_uniform.flags_inv & HIDESHOES))
return //Either nothing to draw, or it'd be hidden.
for(var/f in list(BP_L_FOOT, BP_R_FOOT))
var/obj/item/organ/external/foot/foot = get_organ(f)
if(istype(foot) && foot.is_hidden_by_tail()) //If either foot is hidden by the tail, don't render footwear.
return
var/obj/item/clothing/shoes/shoe = shoes
var/shoe_sprite
if(istype(shoe) && !isnull(shoe.update_icon_define))
shoe_sprite = shoe.update_icon_define
else
shoe_sprite = INV_FEET_DEF_ICON
//Allow for shoe layer toggle nonsense
var/shoe_layer = SHOES_LAYER
if(istype(shoes, /obj/item/clothing/shoes))
var/obj/item/clothing/shoes/ushoes = shoes
if(ushoes.shoes_under_pants == 1)
shoe_layer = SHOES_LAYER_ALT
//NB: the use of a var for the layer on this one
overlays_standing[shoe_layer] = shoes.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_shoes_str, default_icon = shoe_sprite, default_layer = shoe_layer)
apply_layer(SHOES_LAYER)
apply_layer(SHOES_LAYER_ALT)
/mob/living/carbon/human/proc/update_vore_belly_sprite()
if(QDESTROYING(src))
return
remove_layer(VORE_BELLY_LAYER)
var/image/vore_belly_image = get_vore_belly_image()
if(vore_belly_image)
vore_belly_image.layer = BODY_LAYER+VORE_BELLY_LAYER
overlays_standing[VORE_BELLY_LAYER] = vore_belly_image
apply_layer(VORE_BELLY_LAYER)
/mob/living/carbon/human/proc/get_vore_belly_image()
if(!(wear_suit && wear_suit.flags_inv & HIDETAIL))
var/vs_fullness = vore_fullness_ex["stomach"]
var/icon/vorebelly_s = new/icon(icon = 'icons/mob/vore/Bellies.dmi', icon_state = "[species.vore_belly_default_variant]Belly[vs_fullness][struggle_anim_stomach ? "" : " idle"]")
vorebelly_s.Blend(rgb(r_skin, g_skin, b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD)
var/image/working = image(vorebelly_s)
working.overlays += em_block_image_generic(working)
return working
return null
/mob/living/carbon/human/proc/vore_belly_animation()
if(!struggle_anim_stomach)
struggle_anim_stomach = TRUE
update_vore_belly_sprite()
spawn(12)
struggle_anim_stomach = FALSE
update_vore_belly_sprite()
/mob/living/carbon/human/proc/update_vore_tail_sprite()
if(QDESTROYING(src))
return
remove_layer(VORE_TAIL_LAYER)
var/image/vore_tail_image = get_vore_tail_image()
if(vore_tail_image)
vore_tail_image.layer = BODY_LAYER+VORE_TAIL_LAYER
overlays_standing[VORE_TAIL_LAYER] = vore_tail_image
apply_layer(VORE_TAIL_LAYER)
/mob/living/carbon/human/proc/get_vore_tail_image()
if(tail_style && istaurtail(tail_style) && tail_style:vore_tail_sprite_variant)
var/vs_fullness = vore_fullness_ex["taur belly"]
var/icon/vorebelly_s = new/icon(icon = 'icons/mob/vore/Taur_Bellies.dmi', icon_state = "Taur[tail_style:vore_tail_sprite_variant]-Belly-[vs_fullness][struggle_anim_taur ? "" : " idle"]")
vorebelly_s.Blend(rgb(src.r_tail, src.g_tail, src.b_tail), tail_style.color_blend_mode)
var/image/working = image(vorebelly_s)
working.pixel_x = -16
if(tail_style.em_block)
working.overlays += em_block_image_generic(working)
return working
return null
/mob/living/carbon/human/proc/vore_tail_animation()
if(!struggle_anim_taur)
struggle_anim_taur = TRUE
update_vore_tail_sprite()
spawn(12)
struggle_anim_taur = FALSE
update_vore_tail_sprite()
@@ -1,4 +1,4 @@
world/New()
/world/New()
. = ..()
//add stuff to default emote vars specifically for chomp.
@@ -6,4 +6,4 @@ world/New()
_human_default_emotes += /decl/emote/audible/wheeze
//simple_mob default emotes
_simple_mob_default_emotes += /decl/emote/audible/wheeze
_simple_mob_default_emotes += /decl/emote/audible/wheeze
@@ -0,0 +1,2 @@
/mob/living/proc/vs_animate(var/belly_to_animate)
return
@@ -0,0 +1,45 @@
//I've come to nerf vore in the vorecode, and only the headmins and maintainers can stop me.
/mob/living/simple_mob/mobs_monsters/clowns
digestable = 0
devourable = 0
/mob/living/simple_mob/vore/aggressive/dragon
digestable = 0
devourable = 0
/mob/living/simple_mob/vore/aggressive/chungus
digestable = 0
devourable = 0
/mob/living/simple_mob/vore/greatwolf
digestable = 0
devourable = 0
/mob/living/simple_mob/vore/leopardmander
digestable = 0
devourable = 0
/mob/living/simple_mob/vore/solarmoth
digestable = 0
devourable = 0
/mob/living/simple_mob/construct
digestable = 0
devourable = 0
/mob/living/simple_mob/mechanical/mecha
digestable = 0
devourable = 0
/mob/living/simple_mob/mechanical/hivebot/tank
digestable = 0
devourable = 0
/mob/living/simple_mob/animal/space/alien/queen
digestable = 0
devourable = 0
/mob/living/simple_mob/animal/giant_spider/broodmother
digestable = 0
devourable = 0
@@ -15,7 +15,7 @@
Spit(A)
. = ..()
mob/living/simple_mob/verb/toggle_vore_icons()
/mob/living/simple_mob/verb/toggle_vore_icons()
set name = "Toggle Vore Sprite"
set desc = "Toggle visibility of changed mob sprite when you have eaten other things."
@@ -34,7 +34,7 @@ mob/living/simple_mob/verb/toggle_vore_icons()
update_icon()
mob/living/simple_mob/handle_speech_sound()
/mob/living/simple_mob/handle_speech_sound()
if(speech_sounds && speech_sounds.len && prob(speech_chance))
var/list/returns[2]
returns[1] = sound(pick(speech_sounds))
+3
View File
@@ -0,0 +1,3 @@
/mob
var/voice_freq = 42500 // Preference for character voice frequency
var/list/voice_sounds_list = list() // The sound list containing our voice sounds!
@@ -0,0 +1,6 @@
/datum/sprite_accessory/tail/taur
var/vore_tail_sprite_variant = ""
/datum/sprite_accessory/tail/taur/wolf
vore_tail_sprite_variant = "N"
@@ -0,0 +1,44 @@
//Misc weapons
/datum/design/item/weapon/gun/launcher/confetti_cannon
desc = "Stuff it with paper and shoot! You'll be a hit at every party."
id = "confetti_cannon"
req_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
materials = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 3000)
build_path = /obj/item/weapon/gun/launcher/confetti_cannon
sort_string = "MAAVD"
//Phase weapon with lock safeties.
/datum/design/item/weapon/phase/phase_pistol
id = "phasepistol"
req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2, TECH_POWER = 2)
materials = list(DEFAULT_WALL_MATERIAL = 4000, MAT_COPPER = 30)
build_path = /obj/item/weapon/gun/energy/locked/phasegun/pistol
sort_string = "MACAA"
/datum/design/item/weapon/phase/phase_carbine
id = "phasecarbine"
req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2, TECH_POWER = 2)
materials = list(DEFAULT_WALL_MATERIAL = 6000, "glass" = 1500, MAT_COPPER = 40)
build_path = /obj/item/weapon/gun/energy/locked/phasegun
sort_string = "MACAB"
/datum/design/item/weapon/phase/phase_rifle
id = "phaserifle"
req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_POWER = 3)
materials = list(DEFAULT_WALL_MATERIAL = 7000, "glass" = 2000, "silver" = 500)
build_path = /obj/item/weapon/gun/energy/locked/phasegun/rifle
sort_string = "MACAC"
/datum/design/item/weapon/phase/phase_cannon
id = "phasecannon"
req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 4, TECH_POWER = 4)
materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 2000, "silver" = 1000, "diamond" = 750)
build_path = /obj/item/weapon/gun/energy/locked/phasegun/cannon
sort_string = "MACAD"
//Leathals And any new CHOMP weapons.
/datum/design/item/weapon/gun/projectile/caseless/prototype
id = "caselessrifle"
req_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 5, TECH_PHORON = 5)
materials = list(DEFAULT_WALL_MATERIAL = 7000, "titanium" = 4000)
build_path = /obj/item/weapon/gun/projectile/caseless/prototype
sort_string = "MACAE"
@@ -0,0 +1,14 @@
/mob/living/Crossed(var/atom/movable/AM)
..()
var/mob/living/target = AM
if(istype(target) && src.lying && target.loc && target.buckled != src)
// src.lying being true means that in theory this code shouldn't run at the same time as the existing code for this in Bump. Probably.
// And optionally, this could be gated behind another preference, to prevent stunlock being abused.
if((mob_always_swap || (a_intent == I_HELP || src.restrained()) && (target.a_intent == I_HELP || target.restrained())) && target.canmove && target.handle_micro_bump_helping(src))
return
else if(!(target.a_intent == I_HELP || target.restrained()) && target.handle_micro_bump_other(src))
if(src.step_mechanics_pref && target.step_mechanics_pref)
target.handle_micro_bump_other(src)
else
target.handle_micro_bump_other(src, 1)
return