mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-31 00:58:26 +01:00
Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-2025-11-05
This commit is contained in:
@@ -179,7 +179,7 @@ SUBSYSTEM_DEF(economy)
|
||||
fluff_string = ", and company countermeasures are failing to protect <b>YOU</b> from being affected. We're all doomed!"
|
||||
earning_report = "<b>Sector Economic Report</b><br><br> Sector vendor prices is currently at <b>[SSeconomy.inflation_value()*100]%</b>[fluff_string]<br><br> The station spending power is currently <b>[station_total] Credits</b>, and the crew's targeted allowance is at <b>[station_target] Credits</b>.<br><br>[SSstock_market.news_string]"
|
||||
var/update_alerts = FALSE
|
||||
if(HAS_TRAIT(SSstation, STATION_TRAIT_ECONOMY_ALERTS))
|
||||
if(HAS_TRAIT(SSstation, STATION_TRAIT_ECONOMY_ALERTS) && (living_player_count() > 1))
|
||||
var/datum/bank_account/moneybags
|
||||
var/static/list/typecache_bank = typecacheof(list(/datum/bank_account/department, /datum/bank_account/remote))
|
||||
for(var/i in bank_accounts_by_id)
|
||||
|
||||
@@ -8,6 +8,8 @@ SUBSYSTEM_DEF(events)
|
||||
var/list/control = list()
|
||||
///assoc list of all datum/round_event_control, ordered by name. name => event
|
||||
var/list/events_by_name = list()
|
||||
///assoc list of all nonrunning event types, ordered by name. name => event typepath
|
||||
var/list/nonrunning_events_by_name = list()
|
||||
///list of all existing /datum/round_event currently being run.
|
||||
var/list/running = list()
|
||||
///cache of currently running events, for lag checking.
|
||||
@@ -26,7 +28,10 @@ SUBSYSTEM_DEF(events)
|
||||
/datum/controller/subsystem/events/Initialize()
|
||||
for(var/type in typesof(/datum/round_event_control))
|
||||
var/datum/round_event_control/event = new type()
|
||||
if(!event.typepath || !event.valid_for_map())
|
||||
if(!event.typepath)
|
||||
continue
|
||||
if(!event.valid_for_map())
|
||||
nonrunning_events_by_name[event.name] = event.type
|
||||
continue //don't want this one! leave it for the garbage collector
|
||||
control += event //add it to the list of all events (controls)
|
||||
events_by_name[event.name] = event
|
||||
@@ -51,8 +56,9 @@ SUBSYSTEM_DEF(events)
|
||||
var/list/configuration = json_decode(file2text(json_file))
|
||||
for(var/variable in configuration)
|
||||
var/datum/round_event_control/event = events_by_name[variable]
|
||||
if(!event)
|
||||
stack_trace("Invalid event [event] attempting to be configured.")
|
||||
if(isnull(event))
|
||||
if(isnull(nonrunning_events_by_name[variable])) // don't stack_trace events that aren't running due to map flags
|
||||
stack_trace("Invalid event [variable] attempting to be configured.")
|
||||
continue
|
||||
for(var/event_variable in configuration[variable])
|
||||
if(!(event.vars.Find(event_variable)))
|
||||
|
||||
@@ -19,7 +19,7 @@ SUBSYSTEM_DEF(bitrunning)
|
||||
var/list/levels = list()
|
||||
|
||||
for(var/datum/lazy_template/virtual_domain/domain as anything in all_domains)
|
||||
if(domain.test_only)
|
||||
if(domain.domain_flags & DOMAIN_TEST_ONLY)
|
||||
continue
|
||||
var/can_view = domain.difficulty < scanner_tier && domain.cost <= points + 5
|
||||
var/can_view_reward = domain.difficulty < (scanner_tier + 1) && domain.cost <= points + 3
|
||||
|
||||
@@ -36,10 +36,8 @@ PROCESSING_SUBSYSTEM_DEF(instruments)
|
||||
songs -= S
|
||||
|
||||
/datum/controller/subsystem/processing/instruments/proc/initialize_instrument_data()
|
||||
for(var/path in subtypesof(/datum/instrument))
|
||||
for(var/path in valid_subtypesof(/datum/instrument))
|
||||
var/datum/instrument/I = path
|
||||
if(initial(I.abstract_type) == path)
|
||||
continue
|
||||
I = new path
|
||||
I.Initialize()
|
||||
if(!I.id)
|
||||
|
||||
@@ -94,16 +94,13 @@ PROCESSING_SUBSYSTEM_DEF(station)
|
||||
|
||||
return
|
||||
|
||||
for(var/datum/station_trait/trait_typepath as anything in subtypesof(/datum/station_trait))
|
||||
for(var/datum/station_trait/trait_typepath as anything in valid_subtypesof(/datum/station_trait))
|
||||
|
||||
// If forced, (probably debugging), just set it up now, keep it out of the pool.
|
||||
if(initial(trait_typepath.force))
|
||||
setup_trait(trait_typepath)
|
||||
continue
|
||||
|
||||
if(initial(trait_typepath.abstract_type) == trait_typepath)
|
||||
continue //Dont add abstract ones to it
|
||||
|
||||
if(!(initial(trait_typepath.trait_flags) & STATION_TRAIT_PLANETARY) && SSmapping.is_planetary()) // we're on a planet but we can't do planet ;_;
|
||||
continue
|
||||
|
||||
|
||||
@@ -5,6 +5,11 @@
|
||||
/// The female specific list that we get from init_sprite_accessory_subtypes()
|
||||
#define FEMALE_SPRITE_LIST "female_sprites"
|
||||
|
||||
/// Use this to init a sprite accessory list for a feature where mobs are required to have one selected
|
||||
#define INIT_ACCESSORY(sprite_accessory) init_sprite_accessory_subtypes(sprite_accessory, add_blank = FALSE)[DEFAULT_SPRITE_LIST]
|
||||
/// Use this to init a sprite accessory list for a feature where mobs can opt to not have one selected
|
||||
#define INIT_OPTIONAL_ACCESSORY(sprite_accessory) init_sprite_accessory_subtypes(sprite_accessory, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
|
||||
|
||||
/// subsystem that just holds lists of sprite accessories for accession in generating said sprites.
|
||||
/// A sprite accessory is something that we add to a human sprite to make them look different. This is hair, facial hair, underwear, mutant bits, etc.
|
||||
SUBSYSTEM_DEF(accessories) // just 'accessories' for brevity
|
||||
@@ -42,28 +47,8 @@ SUBSYSTEM_DEF(accessories) // just 'accessories' for brevity
|
||||
//Socks
|
||||
var/list/socks_list //! stores /datum/sprite_accessory/socks indexed by name
|
||||
|
||||
//Lizard Bits (all datum lists indexed by name)
|
||||
var/list/lizard_markings_list
|
||||
var/list/snouts_list
|
||||
var/list/horns_list
|
||||
var/list/frills_list
|
||||
var/list/spines_list
|
||||
var/list/tail_spines_list
|
||||
|
||||
//Mutant Human bits
|
||||
var/list/tails_list_felinid
|
||||
var/list/tails_list_lizard
|
||||
var/list/tails_list_monkey
|
||||
var/list/tails_list_xeno
|
||||
var/list/tails_list_fish
|
||||
var/list/ears_list
|
||||
var/list/wings_list
|
||||
var/list/wings_open_list
|
||||
var/list/moth_wings_list
|
||||
var/list/moth_antennae_list
|
||||
var/list/moth_markings_list
|
||||
var/list/caps_list
|
||||
var/list/pod_hair_list
|
||||
//All features, indexed by feature key, then name of the sprite accessory to the datum iteslf
|
||||
var/list/list/feature_list
|
||||
|
||||
// SKYRAT EDIT ADDITION START - Customization
|
||||
var/list/sprite_accessories = list()
|
||||
@@ -108,27 +93,31 @@ SUBSYSTEM_DEF(accessories) // just 'accessories' for brevity
|
||||
bra_f = bra_lists[FEMALE_SPRITE_LIST]
|
||||
// SKYRAT EDIT ADDITION END
|
||||
|
||||
socks_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/socks)[DEFAULT_SPRITE_LIST]
|
||||
lizard_markings_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/lizard_markings, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
|
||||
tails_list_felinid = init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/felinid, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
|
||||
tails_list_lizard = init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard)[DEFAULT_SPRITE_LIST]
|
||||
tails_list_monkey = init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/monkey)[DEFAULT_SPRITE_LIST]
|
||||
tails_list_xeno = init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/xeno)[DEFAULT_SPRITE_LIST]
|
||||
//tails fo fish organ infusions, not for prefs.
|
||||
tails_list_fish = init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/fish)[DEFAULT_SPRITE_LIST]
|
||||
snouts_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/snouts)[DEFAULT_SPRITE_LIST]
|
||||
horns_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/horns, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
|
||||
ears_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/ears, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
|
||||
wings_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
|
||||
wings_open_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/wings_open)[DEFAULT_SPRITE_LIST]
|
||||
frills_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/frills, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
|
||||
spines_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/spines, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
|
||||
tail_spines_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/tail_spines, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
|
||||
caps_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/caps, add_blank = TRUE)[DEFAULT_SPRITE_LIST] // BUBBER EDIT CHANGE - ORIGINAL: caps_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/caps)[DEFAULT_SPRITE_LIST]
|
||||
moth_wings_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_wings)[DEFAULT_SPRITE_LIST]
|
||||
moth_antennae_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_antennae)[DEFAULT_SPRITE_LIST]
|
||||
moth_markings_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_markings, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
|
||||
pod_hair_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/pod_hair)[DEFAULT_SPRITE_LIST]
|
||||
feature_list = list()
|
||||
// felinids
|
||||
feature_list[FEATURE_TAIL_CAT] = INIT_OPTIONAL_ACCESSORY(/datum/sprite_accessory/tails/felinid)
|
||||
feature_list[FEATURE_EARS] = INIT_OPTIONAL_ACCESSORY(/datum/sprite_accessory/ears)
|
||||
// lizards
|
||||
feature_list[FEATURE_FRILLS] = INIT_OPTIONAL_ACCESSORY(/datum/sprite_accessory/frills)
|
||||
feature_list[FEATURE_HORNS] = INIT_OPTIONAL_ACCESSORY(/datum/sprite_accessory/horns)
|
||||
feature_list[FEATURE_LIZARD_MARKINGS] = INIT_OPTIONAL_ACCESSORY(/datum/sprite_accessory/lizard_markings)
|
||||
feature_list[FEATURE_SNOUT] = INIT_ACCESSORY(/datum/sprite_accessory/snouts)
|
||||
feature_list[FEATURE_SPINES] = INIT_OPTIONAL_ACCESSORY(/datum/sprite_accessory/spines)
|
||||
feature_list[FEATURE_TAILSPINES] = INIT_OPTIONAL_ACCESSORY(/datum/sprite_accessory/tail_spines)
|
||||
feature_list[FEATURE_TAIL_LIZARD] = INIT_ACCESSORY(/datum/sprite_accessory/tails/lizard)
|
||||
// moths
|
||||
feature_list[FEATURE_MOTH_WINGS] = INIT_ACCESSORY(/datum/sprite_accessory/moth_wings)
|
||||
feature_list[FEATURE_MOTH_ANTENNAE] = INIT_ACCESSORY(/datum/sprite_accessory/moth_antennae)
|
||||
feature_list[FEATURE_MOTH_MARKINGS] = INIT_OPTIONAL_ACCESSORY(/datum/sprite_accessory/moth_markings)
|
||||
// generic wings
|
||||
feature_list[FEATURE_WINGS] = INIT_OPTIONAL_ACCESSORY(/datum/sprite_accessory/wings)
|
||||
feature_list[FEATURE_WINGS_OPEN] = INIT_OPTIONAL_ACCESSORY(/datum/sprite_accessory/wings_open)
|
||||
// generic features
|
||||
feature_list[FEATURE_MUSH_CAP] = INIT_ACCESSORY(/datum/sprite_accessory/caps)
|
||||
feature_list[FEATURE_POD_HAIR] = INIT_ACCESSORY(/datum/sprite_accessory/pod_hair)
|
||||
feature_list[FEATURE_TAIL_FISH] = INIT_ACCESSORY(/datum/sprite_accessory/tails/fish)
|
||||
feature_list[FEATURE_TAIL_MONKEY] = INIT_ACCESSORY(/datum/sprite_accessory/tails/monkey)
|
||||
feature_list[FEATURE_TAIL_XENO] = INIT_ACCESSORY(/datum/sprite_accessory/tails/xeno)
|
||||
|
||||
/// This proc just intializes all /datum/sprite_accessory/hair_gradient into an list indexed by gradient-style name
|
||||
/datum/controller/subsystem/accessories/proc/init_hair_gradients()
|
||||
@@ -179,6 +168,9 @@ SUBSYSTEM_DEF(accessories) // just 'accessories' for brevity
|
||||
|
||||
return returnable_list
|
||||
|
||||
#undef INIT_ACCESSORY
|
||||
#undef INIT_OPTIONAL_ACCESSORY
|
||||
|
||||
#undef DEFAULT_SPRITE_LIST
|
||||
#undef MALE_SPRITE_LIST
|
||||
#undef FEMALE_SPRITE_LIST
|
||||
|
||||
@@ -104,7 +104,10 @@ SUBSYSTEM_DEF(tts)
|
||||
return
|
||||
|
||||
var/channel = SSsounds.random_available_channel()
|
||||
for(var/mob/listening_mob in listeners | SSmobs.dead_players_by_zlevel[turf_source.z])//observers always hear through walls
|
||||
for(var/atom/movable/hearer in listeners | SSmobs.dead_players_by_zlevel[turf_source.z])//observers always hear through walls
|
||||
var/mob/listening_mob = hearer.get_listening_mob()
|
||||
if(isnull(listening_mob))
|
||||
continue
|
||||
if(QDELING(listening_mob))
|
||||
stack_trace("TTS tried to play a sound to a deleted mob.")
|
||||
continue
|
||||
@@ -114,13 +117,13 @@ SUBSYSTEM_DEF(tts)
|
||||
if(volume_modifier == 0 || (tts_pref == TTS_SOUND_OFF))
|
||||
continue
|
||||
|
||||
var/sound_volume = ((listening_mob == target)? 60 : 85) + volume_offset
|
||||
var/sound_volume = ((hearer == target)? 60 : 85) + volume_offset
|
||||
sound_volume = sound_volume*volume_modifier
|
||||
var/datum/language_holder/holder = listening_mob.get_language_holder()
|
||||
var/audio_to_use = (tts_pref == TTS_SOUND_BLIPS) ? audio_blips : audio
|
||||
if(!holder.has_language(language))
|
||||
continue
|
||||
if(get_dist(listening_mob, turf_source) <= range)
|
||||
if(get_dist(hearer, turf_source) <= range)
|
||||
listening_mob.playsound_local(
|
||||
turf_source,
|
||||
vol = sound_volume,
|
||||
|
||||
Reference in New Issue
Block a user