mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-08-26 22:57:39 +01:00
Merge branch 'master' into protean-rework
This commit is contained in:
@@ -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"
|
||||
+1
-1
@@ -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))
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user