mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-13 19:52:40 +00:00
Merge remote-tracking branch 'upstream/master' into belly-feedable
This commit is contained in:
@@ -12,3 +12,4 @@
|
||||
#define DM_FLAG_VORESPRITE_BELLY 0x1
|
||||
#define DM_FLAG_VORESPRITE_TAIL 0x2
|
||||
#define DM_FLAG_VORESPRITE_MARKING 0x4
|
||||
#define DM_FLAG_VORESPRITE_ARTICLE 0x8
|
||||
|
||||
@@ -21,9 +21,9 @@
|
||||
associated_account_number = user.mind.initial_account.account_number
|
||||
if(title_strings.len)
|
||||
var/tempname = pick(title_strings)
|
||||
name = tempname + " ([assignment])"
|
||||
name = tempname + " ([assignment] Contractor)"//Chompedit: Suffix contractor IDs
|
||||
else
|
||||
name = user.name + "'s ID card" + " ([assignment])"
|
||||
name = user.name + "'s ID card" + " ([assignment] Contractor)"//Chompedit: Suffix contractor IDs
|
||||
|
||||
configured = 1
|
||||
to_chat(user, "<span class='notice'>Card settings set.</span>")
|
||||
|
||||
@@ -341,7 +341,7 @@
|
||||
//Flavour text.
|
||||
if(client)
|
||||
var/module_flavour = client.prefs.flavour_texts_robot[modtype]
|
||||
if(module_flavour)
|
||||
if(module_flavour && (module_flavour != " " || module_flavour != ".")) //CHOMPEDIT: Skip module flavor if " " or "."
|
||||
flavor_text = module_flavour
|
||||
else
|
||||
flavor_text = client.prefs.flavour_texts_robot["Default"]
|
||||
|
||||
@@ -181,3 +181,12 @@
|
||||
extra_overlay = "goatflops_horn"
|
||||
do_colouration = 1
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
|
||||
/datum/sprite_accessory/ears/shadekin/dualcolor
|
||||
name = "Shadekin Ears (dual colorable)"
|
||||
desc = ""
|
||||
icon = 'icons/mob/vore/ears_ch.dmi'
|
||||
icon_state = "shadekin"
|
||||
do_colouration = 1
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
extra_overlay = "shadekin-under"
|
||||
@@ -268,7 +268,7 @@
|
||||
//If for some reason touch effects are bypassed (e.g. injecting stuff directly into a reagent container or person),
|
||||
//call the appropriate trans_to_*() proc.
|
||||
/datum/reagents/proc/trans_to(var/atom/target, var/amount = 1, var/multiplier = 1, var/copy = 0)
|
||||
touch(target) //First, handle mere touch effects
|
||||
touch(target, amount*multiplier) //First, handle mere touch effects //CHOMPEdit
|
||||
|
||||
if(ismob(target))
|
||||
return splash_mob(target, amount, copy)
|
||||
|
||||
@@ -80,7 +80,8 @@
|
||||
var/tmp/static/list/vore_sprite_flag_list= list(
|
||||
"Normal belly sprite" = DM_FLAG_VORESPRITE_BELLY,
|
||||
//"Tail adjustment" = DM_FLAG_VORESPRITE_TAIL,
|
||||
//"Marking addition" = DM_FLAG_VORESPRITE_MARKING
|
||||
//"Marking addition" = DM_FLAG_VORESPRITE_MARKING,
|
||||
"Undergarment addition" = DM_FLAG_VORESPRITE_ARTICLE,
|
||||
)
|
||||
|
||||
var/affects_vore_sprites = FALSE
|
||||
@@ -94,6 +95,9 @@
|
||||
var/resist_triggers_animation = TRUE
|
||||
var/size_factor_for_sprite = 1
|
||||
var/belly_sprite_to_affect = "stomach"
|
||||
var/undergarment_chosen = "Underwear, bottom"
|
||||
var/undergarment_if_none
|
||||
var/undergarment_color = COLOR_GRAY
|
||||
var/datum/sprite_accessory/tail/tail_to_change_to = FALSE
|
||||
var/tail_colouration = FALSE
|
||||
var/tail_extra_overlay = FALSE
|
||||
|
||||
@@ -276,6 +276,9 @@
|
||||
"resist_triggers_animation",
|
||||
"size_factor_for_sprite",
|
||||
"belly_sprite_to_affect",
|
||||
"undergarment_chosen",
|
||||
"undergarment_if_none",
|
||||
"undergarment_color",
|
||||
"autotransferchance",
|
||||
"autotransferwait",
|
||||
"autotransferlocation",
|
||||
@@ -391,6 +394,7 @@
|
||||
M.ai_holder.go_sleep()
|
||||
if(reagents.total_volume > 0 && M.digestable) //CHOMPAdd
|
||||
reagents.trans_to(M, reagents.total_volume, 1 / (LAZYLEN(contents) ? LAZYLEN(contents) : 1), TRUE) //CHOMPAdd
|
||||
to_chat(M, "<span class='warning'><B>You splash into a pool of [reagent_name]!</B></span>") //CHOMPAdd
|
||||
else if(count_items_for_sprite) //CHOMPEdit - If this is enabled also update fullness for non-living things
|
||||
owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed.
|
||||
if(istype(thing, /obj/item/capture_crystal)) //CHOMPEdit: Capture crystal occupant gets to see belly text too.
|
||||
@@ -1447,6 +1451,9 @@
|
||||
dupe.resist_triggers_animation = resist_triggers_animation
|
||||
dupe.size_factor_for_sprite = size_factor_for_sprite
|
||||
dupe.belly_sprite_to_affect = belly_sprite_to_affect
|
||||
dupe.undergarment_chosen = undergarment_chosen
|
||||
dupe.undergarment_if_none = undergarment_if_none
|
||||
dupe.undergarment_color = undergarment_color
|
||||
dupe.autotransferchance = autotransferchance
|
||||
dupe.autotransferwait = autotransferwait
|
||||
dupe.autotransferlocation = autotransferlocation
|
||||
|
||||
@@ -30,7 +30,14 @@
|
||||
for(var/belly_class in vore_icon_bellies)
|
||||
new_fullness[belly_class] = 0
|
||||
for(var/obj/belly/B as anything in vore_organs)
|
||||
if(DM_FLAG_VORESPRITE_BELLY & B.vore_sprite_flags)
|
||||
new_fullness[B.belly_sprite_to_affect] += B.GetFullnessFromBelly()
|
||||
if(istype(src, /mob/living/carbon/human) && DM_FLAG_VORESPRITE_ARTICLE & B.vore_sprite_flags)
|
||||
if(!new_fullness[B.undergarment_chosen])
|
||||
new_fullness[B.undergarment_chosen] = 1
|
||||
new_fullness[B.undergarment_chosen] += B.GetFullnessFromBelly()
|
||||
new_fullness[B.undergarment_chosen + "-ifnone"] = B.undergarment_if_none
|
||||
new_fullness[B.undergarment_chosen + "-color"] = B.undergarment_color
|
||||
for(var/belly_class in vore_icon_bellies)
|
||||
new_fullness[belly_class] /= size_multiplier //Divided by pred's size so a macro mob won't get macro belly from a regular prey.
|
||||
new_fullness[belly_class] = round(new_fullness[belly_class], 1) // Because intervals of 0.25 are going to make sprite artists cry.
|
||||
@@ -39,6 +46,7 @@
|
||||
if(vore_fullness < 0)
|
||||
vore_fullness = 0
|
||||
vore_fullness = min(vore_capacity, vore_fullness)
|
||||
return new_fullness
|
||||
|
||||
|
||||
/mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T)
|
||||
|
||||
@@ -219,6 +219,9 @@
|
||||
"resist_animation" = selected.resist_triggers_animation,
|
||||
"voresprite_size_factor" = selected.size_factor_for_sprite,
|
||||
"belly_sprite_to_affect" = selected.belly_sprite_to_affect,
|
||||
"undergarment_chosen" = selected.undergarment_chosen,
|
||||
"undergarment_if_none" = selected.undergarment_if_none || "None",
|
||||
"undergarment_color" = selected.undergarment_color,
|
||||
"belly_sprite_option_shown" = LAZYLEN(host.vore_icon_bellies) > 1 ? TRUE : FALSE,
|
||||
"tail_option_shown" = istype(host, /mob/living/carbon/human),
|
||||
"tail_to_change_to" = selected.tail_to_change_to,
|
||||
@@ -1809,6 +1812,29 @@
|
||||
host.vore_selected.size_factor_for_sprite = CLAMP(size_factor_input, 0.1, 3)
|
||||
host.update_fullness()
|
||||
. = TRUE
|
||||
if("b_undergarment_choice") //CHOMP Addition
|
||||
var/datum/category_group/underwear/undergarment_choice = tgui_input_list(usr, "Which undergarment do you want to enable when your [lowertext(host.vore_selected.name)] is filled?","Select Undergarment Class", global_underwear.categories)
|
||||
if(!undergarment_choice) //They cancelled, no changes
|
||||
return FALSE
|
||||
else
|
||||
host.vore_selected.undergarment_chosen = undergarment_choice.name
|
||||
host.update_fullness()
|
||||
. = TRUE
|
||||
if("b_undergarment_if_none") //CHOMP Addition
|
||||
var/datum/category_group/underwear/UWC = global_underwear.categories_by_name[host.vore_selected.undergarment_chosen]
|
||||
var/datum/category_item/underwear/selected_underwear = tgui_input_list(usr, "If no undergarment is equipped, which undergarment style do you want to use?","Select Underwear Style",UWC.items,host.vore_selected.undergarment_if_none)
|
||||
if(!selected_underwear) //They cancelled, no changes
|
||||
return FALSE
|
||||
else
|
||||
host.vore_selected.undergarment_if_none = selected_underwear
|
||||
host.update_fullness()
|
||||
host.updateVRPanel()
|
||||
if("b_undergarment_color") //CHOMP Addition
|
||||
var/newcolor = input(usr, "Choose a color.", "", host.vore_selected.undergarment_color) as color|null
|
||||
if(newcolor)
|
||||
host.vore_selected.undergarment_color = newcolor
|
||||
host.update_fullness()
|
||||
. = TRUE
|
||||
if("b_tail_to_change_to") //CHOMP Addition
|
||||
var/tail_choice = tgui_input_list(usr, "Which tail sprite do you want to use when your [lowertext(host.vore_selected.name)] is filled?","Select Sprite", global.tail_styles_list)
|
||||
if(!tail_choice) //They cancelled, no changes
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.7 KiB |
@@ -30277,7 +30277,7 @@
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/machinery/door/airlock/command{
|
||||
id_tag = null;
|
||||
id_tag = "HoSdoor";
|
||||
name = "Head of Security Quarters";
|
||||
req_access = list(58)
|
||||
},
|
||||
|
||||
@@ -21515,9 +21515,6 @@
|
||||
/turf/space,
|
||||
/area/space)
|
||||
"tIi" = (
|
||||
/obj/machinery/recharge_station{
|
||||
pixel_y = 1
|
||||
},
|
||||
/obj/machinery/light/small{
|
||||
dir = 1
|
||||
},
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
/obj/item/capture_crystal/cheap
|
||||
name = "cheap capture crystal"
|
||||
desc = "A silent, unassuming crystal in what appears to be some kind of steel housing. This one seems to be cheapley made and can only handle a willing mind."
|
||||
desc = "A silent, unassuming crystal in what appears to be some kind of steel housing. This one seems to be cheaply made and can only handle a willing mind."
|
||||
icon = 'icons/obj/capture_crystal_vr.dmi'
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
bound_mob = M
|
||||
bound_mob.capture_caught = TRUE
|
||||
persist_storable = FALSE
|
||||
desc = "A silent, unassuming crystal in what appears to be some kind of steel housing. This one seems to be cheapley made and can only handle a willing mind."
|
||||
desc = "A silent, unassuming crystal in what appears to be some kind of steel housing. This one seems to be cheaply made and can only handle a willing mind."
|
||||
|
||||
|
||||
/obj/item/capture_crystal/cheap/activate(mob/living/user, target)
|
||||
|
||||
29
modular_chomp/code/modules/economy/vending_machines_vr.dm
Normal file
29
modular_chomp/code/modules/economy/vending_machines_vr.dm
Normal file
@@ -0,0 +1,29 @@
|
||||
/obj/machinery/vending/loadout/loadout_misc
|
||||
products = list(/obj/item/weapon/cane = 5,
|
||||
/obj/item/weapon/pack/cardemon = 25,
|
||||
/obj/item/weapon/deck/holder = 5,
|
||||
/obj/item/weapon/deck/cah = 5,
|
||||
/obj/item/weapon/deck/cah/black = 5,
|
||||
/obj/item/weapon/deck/tarot = 5,
|
||||
/obj/item/weapon/deck/cards = 5,
|
||||
/obj/item/weapon/pack/spaceball = 10,
|
||||
/obj/item/weapon/storage/pill_bottle/dice = 5,
|
||||
/obj/item/weapon/storage/pill_bottle/dice_nerd = 5,
|
||||
/obj/item/weapon/melee/umbrella/random = 10,
|
||||
/obj/item/weapon/deck/schnapsen = 5,
|
||||
/obj/item/weapon/deck/egy = 5,
|
||||
/obj/item/capture_crystal/cheap = 5)
|
||||
prices = list(/obj/item/weapon/cane = 100,
|
||||
/obj/item/weapon/pack/cardemon = 100,
|
||||
/obj/item/weapon/deck/holder = 100,
|
||||
/obj/item/weapon/deck/cah = 100,
|
||||
/obj/item/weapon/deck/cah/black = 100,
|
||||
/obj/item/weapon/deck/tarot = 100,
|
||||
/obj/item/weapon/deck/cards = 100,
|
||||
/obj/item/weapon/pack/spaceball = 100,
|
||||
/obj/item/weapon/storage/pill_bottle/dice = 100,
|
||||
/obj/item/weapon/storage/pill_bottle/dice_nerd = 100,
|
||||
/obj/item/weapon/melee/umbrella/random = 100,
|
||||
/obj/item/weapon/deck/schnapsen = 100,
|
||||
/obj/item/weapon/deck/egy = 100,
|
||||
/obj/item/capture_crystal/cheap = 100)
|
||||
@@ -3,7 +3,24 @@
|
||||
var/previous_taur_fullness = vore_fullness_ex["taur belly"]
|
||||
//update_vore_tail_sprite()
|
||||
//update_vore_belly_sprite()
|
||||
. = ..()
|
||||
var/list/new_fullness = ..()
|
||||
. = new_fullness
|
||||
for(var/datum/category_group/underwear/undergarment_class in global_underwear.categories)
|
||||
if(new_fullness[undergarment_class.name] == 0)
|
||||
continue
|
||||
new_fullness[undergarment_class.name] = -1 * round(-1 * new_fullness[undergarment_class.name]) // Doing a ceiling the only way BYOND knows how I guess
|
||||
new_fullness[undergarment_class.name] = (min(2, new_fullness[undergarment_class.name]) - 2) * -1 //Complicated stuff to get it correctly aligned with the expected TRUE/FALSE
|
||||
var/datum/category_item/underwear/UWI = all_underwear[undergarment_class.name]
|
||||
if(!UWI || UWI.name == "None")
|
||||
//Welllll okay then. If the former then something went wrong, if None was selected then...
|
||||
if(istype(undergarment_class.items_by_name[new_fullness[undergarment_class.name + "-ifnone"]], /datum/category_item/underwear))
|
||||
UWI = undergarment_class.items_by_name[new_fullness[undergarment_class.name + "-ifnone"]]
|
||||
all_underwear[undergarment_class.name] = UWI
|
||||
if(UWI && UWI.has_color && new_fullness[undergarment_class.name + "-color"])
|
||||
all_underwear_metadata[undergarment_class.name]["[gear_tweak_free_color_choice]"] = new_fullness[undergarment_class.name + "-color"]
|
||||
if(UWI && UWI.name != "None" && hide_underwear[undergarment_class.name] != new_fullness[undergarment_class.name])
|
||||
hide_underwear[undergarment_class.name] = new_fullness[undergarment_class.name]
|
||||
update_underwear(1)
|
||||
if(vore_fullness_ex["stomach"] != previous_stomach_fullness)
|
||||
update_vore_belly_sprite()
|
||||
if(vore_fullness_ex["taur belly"] != previous_taur_fullness)
|
||||
|
||||
@@ -193,6 +193,9 @@
|
||||
belly_data["resist_triggers_animation"] = B.resist_triggers_animation
|
||||
belly_data["size_factor_for_sprite"] = B.size_factor_for_sprite
|
||||
belly_data["belly_sprite_to_affect"] = B.belly_sprite_to_affect
|
||||
belly_data["undergarment_chosen"] = B.undergarment_chosen
|
||||
belly_data["undergarment_if_none"] = B.undergarment_if_none
|
||||
belly_data["undergarment_color"] = B.undergarment_color
|
||||
|
||||
// Visuals (Belly Fullscreens Preview and Coloring)
|
||||
belly_data["belly_fullscreen_color"] = B.belly_fullscreen_color
|
||||
|
||||
@@ -824,6 +824,9 @@ const VoreSelectedBellyVisuals = (props, context) => {
|
||||
voresprite_size_factor,
|
||||
belly_sprite_option_shown,
|
||||
belly_sprite_to_affect,
|
||||
undergarment_chosen,
|
||||
undergarment_if_none,
|
||||
undergarment_color,
|
||||
tail_option_shown,
|
||||
tail_to_change_to,
|
||||
tail_colouration,
|
||||
@@ -846,7 +849,6 @@ const VoreSelectedBellyVisuals = (props, context) => {
|
||||
</LabeledList.Item>
|
||||
{affects_voresprite ? (
|
||||
<span>
|
||||
{/* Once other options are added in:
|
||||
<LabeledList.Item label="Vore Sprite Mode">
|
||||
{(vore_sprite_flags.length && vore_sprite_flags.join(', ')) || 'None'}
|
||||
<Button
|
||||
@@ -854,7 +856,7 @@ const VoreSelectedBellyVisuals = (props, context) => {
|
||||
ml={1}
|
||||
icon="plus"
|
||||
/>
|
||||
</LabeledList.Item>*/}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Count Absorbed prey for vore sprites">
|
||||
<Button
|
||||
onClick={() => act('set_attribute', { attribute: 'b_count_absorbed_prey_for_sprites' })}
|
||||
@@ -929,6 +931,30 @@ const VoreSelectedBellyVisuals = (props, context) => {
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
{tail_option_shown && vore_sprite_flags.includes('Undergarment addition') ? (
|
||||
<div>
|
||||
<LabeledList.Item label="Undergarment type to affect">
|
||||
<Button
|
||||
onClick={() => act('set_attribute', { attribute: 'b_undergarment_choice' })}
|
||||
content={undergarment_chosen}
|
||||
/>
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Undergarment if none equipped">
|
||||
<Button
|
||||
onClick={() => act('set_attribute', { attribute: 'b_undergarment_if_none' })}
|
||||
content={undergarment_if_none}
|
||||
/>
|
||||
</LabeledList.Item>
|
||||
<FeatureColorInput
|
||||
action_name="b_undergarment_color"
|
||||
value_of={null}
|
||||
back_color={undergarment_color}
|
||||
name_of="Undergarment Color if none"
|
||||
/>
|
||||
</div>
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
{tail_option_shown && vore_sprite_flags.includes('Tail adjustment') ? (
|
||||
<LabeledList.Item label="Tail to change to">
|
||||
<Button
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -4578,6 +4578,7 @@
|
||||
#include "modular_chomp\code\modules\datums\supplypacks\medical.dm"
|
||||
#include "modular_chomp\code\modules\datums\supplypacks\munitions.dm"
|
||||
#include "modular_chomp\code\modules\datums\supplypacks\science.dm"
|
||||
#include "modular_chomp\code\modules\economy\vending_machines_vr.dm"
|
||||
#include "modular_chomp\code\modules\emotes\definitions\audiable.dm"
|
||||
#include "modular_chomp\code\modules\emotes\definitions\audible_pain.dm"
|
||||
#include "modular_chomp\code\modules\food\drinkgglass\metaglass.dm"
|
||||
|
||||
Reference in New Issue
Block a user