diff --git a/SpacemanDMM.toml b/SpacemanDMM.toml index ebc374f630..7f74da7824 100644 --- a/SpacemanDMM.toml +++ b/SpacemanDMM.toml @@ -3,4 +3,7 @@ dreamchecker = true [code_standards] disallow_relative_type_definitions = true -disallow_relative_proc_definitions = true \ No newline at end of file +disallow_relative_proc_definitions = true + +[debugger] +engine = "auxtools" diff --git a/_runtimestation.dm b/_runtimestation.dm new file mode 100644 index 0000000000..b0a5aa1a88 --- /dev/null +++ b/_runtimestation.dm @@ -0,0 +1,11 @@ +/* +Toggle this var to 1 to compile using runtime station instead. +Useful if you're constantly having to recompile to debug something. +*/ +#define RUNTIME_STATION 0 + +#if RUNTIME_STATION + #include "modular_chomp/maps/runtime/runtime_station_defines.dm" + #include "modular_chomp/maps/runtime/runtime_station.dmm" + #define USING_MAP_DATUM /datum/map/runtime_station +#endif \ No newline at end of file diff --git a/code/__defines/gamemode.dm b/code/__defines/gamemode.dm index 457b5e5c96..9cd0f6f4aa 100644 --- a/code/__defines/gamemode.dm +++ b/code/__defines/gamemode.dm @@ -43,6 +43,7 @@ #define BE_MORPH 0x40000 #define BE_CORGI 0x80000 #define BE_CURSEDSWORD 0x100000 +#define BE_SURVIVOR 0x200000 //VOREStation Add End var/list/be_special_flags = list( @@ -68,6 +69,7 @@ var/list/be_special_flags = list( "Morph" = BE_MORPH, "Corgi" = BE_CORGI, "Cursed Sword" = BE_CURSEDSWORD, + "Ship Survivor" = BE_SURVIVOR //VOREStation Add End ) @@ -111,6 +113,7 @@ var/list/be_special_flags = list( #define MODE_INFILTRATOR "infiltrator" #define MODE_THUG "thug" #define MODE_STOWAWAY "stowaway" +#define MODE_SURVIVOR "Shipwreck Survivor" #define DEFAULT_TELECRYSTAL_AMOUNT 120 @@ -176,4 +179,4 @@ var/list/be_special_flags = list( #define ASPECT_EMP "emp" //Unused now. #define ASPECT_UNSTABLE "unstable" //Heavily RNG-based, causes instability to the victim. #define ASPECT_CHROMATIC "chromatic" //Used to combine with other spells. -#define ASPECT_UNHOLY "unholy" //Involves the dead, blood, and most things against divine beings. \ No newline at end of file +#define ASPECT_UNHOLY "unholy" //Involves the dead, blood, and most things against divine beings. diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index bedb58855f..b8457de50b 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -136,8 +136,9 @@ #define CLASS_MIDDLE "Average" #define CLASS_LOWMID "Underpaid" #define CLASS_LOWER "Poor" +#define CLASS_BROKE "Broke" //VOREStation Add -#define ECONOMIC_CLASS list(CLASS_UPPER,CLASS_UPMID,CLASS_MIDDLE,CLASS_LOWMID,CLASS_LOWER) +#define ECONOMIC_CLASS list(CLASS_UPPER,CLASS_UPMID,CLASS_MIDDLE,CLASS_LOWMID,CLASS_LOWER,CLASS_BROKE) // Defines mob sizes, used by lockers and to determine what is considered a small sized mob, etc. diff --git a/code/__defines/mobs_ch.dm b/code/__defines/mobs_ch.dm new file mode 100644 index 0000000000..45114d7cbd --- /dev/null +++ b/code/__defines/mobs_ch.dm @@ -0,0 +1,3 @@ +#define MARKING_NONDIGI_ONLY (1 << 0) +#define MARKING_DIGITIGRADE_ONLY (1 << 1) +#define MARKING_ALL_LEGS MARKING_NONDIGI_ONLY|MARKING_DIGITIGRADE_ONLY diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm index c241a84994..838b11542a 100644 --- a/code/_helpers/game.dm +++ b/code/_helpers/game.dm @@ -218,40 +218,24 @@ return hear -var/mobs_radio_range_fired = 1 //CHOMPEdit +//CHOMPEdit - entire proc changed basically to use recursive listening /proc/get_mobs_in_radio_ranges(var/list/obj/item/device/radio/radios) set background = 1 - var/our_iter = num2text(++mobs_radio_range_fired) //CHOMPEdit . = list() // Returns a list of mobs who can hear any of the radios given in @radios - var/list/speaker_coverage = list() for(var/obj/item/device/radio/R as anything in radios) - var/turf/speaker = get_turf(R) - if(speaker) + if(get_turf(R)) for(var/turf/T in R.can_broadcast_to()) //CHOMPEdit - T.temp_check[our_iter] = TRUE //CHOMPEdit - speaker_coverage[T] = R + for (var/atom/movable/hearing in T) + if (hearing.recursive_listeners) + . |= hearing.recursive_listeners - CHECK_TICK //CHOMPEdit - // Try to find all the players who can hear the message - //CHOMPEdit Begin - //So, to explain a bit here: The old code that used to be here was pretty slow for a few reasons, most of which have been addressed now. - //Unsurprisingly, checking through the entire list of turfs within a radio's range for every mob's turf to see if it's in there is very slow. - //So, instead, we set a variable in a list on the turf that's unique to this runthrough(and thus multiple of these can run simultaneously) - //Then we just have to check if that variable is true for the turf the mob is on, and if it is, add that mob to our list. - for(var/i = 1; i <= player_list.len; i++) - var/mob/M = player_list[i] - var/turf/T = get_turf(M) - if(istype(T) && T.temp_check[our_iter]) - . += M - else if(istype(M,/mob/observer)) //Give ghosts global hearing. - . += M - CHECK_TICK - for(var/turf/T in speaker_coverage) - T.temp_check -= our_iter //Freeing up the memory. - //CHOMPEdit End - return . + for (var/mob/M as anything in .) + if (!istype(M) || !M.client) + . -= M + for (var/mob/observer/O in player_list) + . |= O /mob/proc/can_hear_radio(var/list/hearturfs) return FALSE diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm index acd2be67ea..02c6b5f495 100644 --- a/code/_helpers/global_lists_vr.dm +++ b/code/_helpers/global_lists_vr.dm @@ -946,6 +946,26 @@ var/global/list/event_wildlife_roaming = list( ) +var/global/list/selectable_speech_bubbles = list( + "default", + "normal", + "slime", + "comm", + "machine", + "synthetic", + "synthetic_evil", + "cyber", + "ghost", + "slime_green", + "dark", + "plant", + "clown", + "fox", + "maus", + "heart", + "textbox", + "posessed") + // AREA GENERATION AND BLUEPRINT STUFF BELOW HERE diff --git a/code/_helpers/icons.dm b/code/_helpers/icons.dm index 2cb3ef5c69..82e135c544 100644 --- a/code/_helpers/icons.dm +++ b/code/_helpers/icons.dm @@ -232,7 +232,7 @@ curblend = BLEND_OVERLAY add = icon(I.icon, I.icon_state, base_icon_dir) else // 'I' is an appearance object. - add = getFlatIcon(image(I), I.dir||curdir, curicon, curstate, curblend, FALSE, no_anim) + add = getFlatIcon(image(I), curdir, curicon, curstate, curblend, FALSE, no_anim) if(!add) continue // Find the new dimensions of the flat icon to fit the added overlay diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index d9e3be6e7f..d1f96ac81b 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -826,10 +826,22 @@ Turf and target are seperate in case you want to teleport some distance from a t else O=new original.type(locate(0,0,0)) + var/static/list/blacklisted_var_names = list( + "ATOM_TOPIC_EXAMINE", + "type", + "loc", + "locs", + "vars", + "parent", + "parent_type", + "verbs", + "ckey", + "key" + ) if(perfectcopy) if((O) && (original)) for(var/V in original.vars) - if(!(V in list("type","loc","locs","vars", "parent", "parent_type","verbs","ckey","key"))) + if(!(V in blacklisted_var_names)) O.vars[V] = original.vars[V] return O diff --git a/code/controllers/subsystems/vote.dm b/code/controllers/subsystems/vote.dm index 24f7e33d37..fea99b2e4f 100644 --- a/code/controllers/subsystems/vote.dm +++ b/code/controllers/subsystems/vote.dm @@ -79,7 +79,7 @@ SUBSYSTEM_DEF(vote) if(transfer_votes / total_votes > 0.7) greatest_votes = transfer_votes . = list("Initiate Crew Transfer") - else + else greatest_votes = extend_votes . = list("Extend the Shift") else @@ -233,7 +233,7 @@ SUBSYSTEM_DEF(vote) if(ticker.current_state <= GAME_STATE_SETTING_UP) to_chat(initiator_key, "The crew transfer button has been disabled!") return 0 - question = "Your PDA beeps with a message from Central. Would you like an additional hour to finish ongoing projects?" //Yawn Wider Edit //CHOMP EDIT: Changed to 'one' hour. + question = "Your PDA beeps with a message from Central. Would you like an additional hour to finish ongoing projects? (OOC Notice: Transfer votes must have a majority (70%) of all votes to initiate transfer.)" //Yawn Wider Edit //CHOMP EDIT: Changed to 'one' hour. Add notice stating transfer must contain 70% of total vote. choices.Add("Initiate Crew Transfer", "Extend the Shift") //VOREStation Edit if(VOTE_ADD_ANTAGONIST) if(!config.allow_extra_antags || ticker.current_state >= GAME_STATE_SETTING_UP) diff --git a/code/datums/ghost_query.dm b/code/datums/ghost_query.dm index 6a342f5820..47519813e8 100644 --- a/code/datums/ghost_query.dm +++ b/code/datums/ghost_query.dm @@ -198,3 +198,12 @@ Would you like to play as the soul imprisoned within?" be_special_flag = BE_CURSEDSWORD cutoff_number = 1 + +/datum/ghost_query/shipwreck_survivor + role_name = "Shipwreck survivor" + question = "A person suspended in cryosleep has been discovered by a crewmember \ + aboard a wrecked spaceship \ + and they are attempting to open the cryopod.\n \ + Would you like to play as the occupant? \n \ + You MUST NOT use your station character!!!" + cutoff_number = 1 diff --git a/code/datums/looping_sounds/alarm_sounds.dm b/code/datums/looping_sounds/alarm_sounds.dm new file mode 100644 index 0000000000..4453de6de9 --- /dev/null +++ b/code/datums/looping_sounds/alarm_sounds.dm @@ -0,0 +1,62 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/looping_sound/alarm + volume_chan = VOLUME_CHANNEL_ALARMS + pref_check = /datum/client_preference/looping_alarms + +/datum/looping_sound/alarm/fire_alarm // Commented out start/end as I don't feel they're very fitting + // start_sound = 'sound/effects/alarms/fire_alarm/fire_alarm_start.ogg' + // start_length = 40 + mid_sounds = list('sound/effects/alarms/fire_alarm/fire_alarm_mid.ogg' = 1) + mid_length = 6 SECONDS // Exact loop, these things should be constantly running while there's a fire actively going + // end_sound = 'sound/effects/alarms/fire_alarm/fire_alarm_stop.ogg' + volume = 30 + extra_range = 60 // Alarms should be clearly heard from far away + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/looping_sound/alarm/decompression_alarm + mid_sounds = list('sound/effects/alarms/decon_alarm.ogg'=1) + mid_length = 4 SECONDS // Delay by 1 second so as to not spam it + volume = 100 + extra_range = 20 + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/looping_sound/alarm/engineering_alarm + mid_sounds = list('sound/effects/alarms/engineering_alarm.ogg'=1) + mid_length = 30 + volume = 20 + extra_range = 30 + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/looping_sound/alarm/threat_level_high + mid_sounds = list('sound/effects/alarms/threat_level_high.ogg'=1) + mid_length = 4 SECONDS + volume = 60 + extra_range = 40 + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/looping_sound/alarm/threat_level_extreme + mid_sounds = list('sound/effects/alarms/threat_level_extreme.ogg'=1) + mid_length = 4 SECONDS + volume = 60 + extra_range = 40 + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/looping_sound/alarm/sm_critical_alarm + mid_sounds = list('sound/effects/alarms/crit_alarm.ogg'=1) + mid_length = 3 SECONDS + volume = 90 + extra_range = 40 + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/looping_sound/alarm/sm_causality_alarm + mid_sounds = list('sound/effects/alarms/causality_alarm.ogg'=1) + mid_length = 9 SECONDS + volume = 80 + extra_range = 60 diff --git a/code/datums/mind_vr.dm b/code/datums/mind_vr.dm index d2ae478410..f6ba695438 100644 --- a/code/datums/mind_vr.dm +++ b/code/datums/mind_vr.dm @@ -4,6 +4,10 @@ var/directory_tag var/directory_erptag var/directory_ad + //CHOMPEdit additions + var/vantag_preference = VANTAG_NONE + var/directory_gendertag + var/directory_sexualitytag /mob/living/mind_initialize() . = ..() @@ -12,3 +16,7 @@ mind.directory_tag = client.prefs.directory_tag mind.directory_erptag = client.prefs.directory_erptag mind.directory_ad = client.prefs.directory_ad + //CHOMPEdit additions + mind.vantag_preference = client.prefs.vantag_preference + mind.directory_gendertag = client.prefs.directory_gendertag + mind.directory_sexualitytag = client.prefs.directory_sexualitytag diff --git a/code/datums/supplypacks/engineering.dm b/code/datums/supplypacks/engineering.dm index 0529f5aedd..2616d0fe6e 100644 --- a/code/datums/supplypacks/engineering.dm +++ b/code/datums/supplypacks/engineering.dm @@ -220,7 +220,7 @@ /datum/supply_pack/eng/smbig name = "Supermatter Core" - contains = list(/obj/machinery/power/supermatter) + contains = list(/obj/machinery/power/supermatter/station) // CHOMPEdit: Station SM for Cargo Orders cost = 150 containertype = /obj/structure/closet/crate/secure/phoron containername = "Supermatter crate (CAUTION)" diff --git a/code/datums/supplypacks/recreation.dm b/code/datums/supplypacks/recreation.dm index 40caa4c405..ca19cc342a 100644 --- a/code/datums/supplypacks/recreation.dm +++ b/code/datums/supplypacks/recreation.dm @@ -72,15 +72,16 @@ /obj/item/device/camera_film = 2, /obj/item/weapon/storage/photo_album, /obj/item/weapon/packageWrap, - /obj/item/weapon/reagent_containers/glass/paint/red, - /obj/item/weapon/reagent_containers/glass/paint/green, - /obj/item/weapon/reagent_containers/glass/paint/blue, - /obj/item/weapon/reagent_containers/glass/paint/yellow, - /obj/item/weapon/reagent_containers/glass/paint/purple, - /obj/item/weapon/reagent_containers/glass/paint/black, - /obj/item/weapon/reagent_containers/glass/paint/white, /obj/item/poster/custom, - /obj/item/weapon/wrapping_paper = 3 + /obj/item/weapon/wrapping_paper = 3, + /obj/structure/easel, + /obj/item/paint_brush, + /obj/item/paint_palette, + /obj/item/canvas = 3, + /obj/item/canvas/nineteen_nineteen = 2, + /obj/item/canvas/twentythree_nineteen = 2, + /obj/item/canvas/twentythree_twentythree = 2, + /obj/item/canvas/twentyfour_twentyfour = 2 ) cost = 10 containertype = /obj/structure/closet/crate/allico @@ -94,7 +95,17 @@ contains = list( /obj/item/device/pipe_painter = 2, /obj/item/device/floor_painter = 2, - ///obj/item/device/closet_painter = 2 + /obj/item/weapon/reagent_containers/glass/paint/red, + /obj/item/weapon/reagent_containers/glass/paint/green, + /obj/item/weapon/reagent_containers/glass/paint/blue, + /obj/item/weapon/reagent_containers/glass/paint/yellow, + /obj/item/weapon/reagent_containers/glass/paint/violet, + /obj/item/weapon/reagent_containers/glass/paint/cyan, + /obj/item/weapon/reagent_containers/glass/paint/orange, + /obj/item/weapon/reagent_containers/glass/paint/purple, + /obj/item/weapon/reagent_containers/glass/paint/grey, + /obj/item/weapon/reagent_containers/glass/paint/black, + /obj/item/weapon/reagent_containers/glass/paint/white = 3 ) /datum/supply_pack/recreation/cheapbait diff --git a/code/datums/underwear/bottom.dm b/code/datums/underwear/bottom.dm index 92578304ad..7f16ba66b7 100644 --- a/code/datums/underwear/bottom.dm +++ b/code/datums/underwear/bottom.dm @@ -77,4 +77,14 @@ /datum/category_item/underwear/bottom/neko name = "Panties, Neko" icon_state = "panties_neko" + has_color = TRUE + +/datum/category_item/underwear/bottom/swimbottom + name = "Swimming Bottoms" + icon_state = "swimbottom" + has_color = TRUE + +/datum/category_item/underwear/bottom/onepiece + name = "Swimming One Piece" + icon_state = "onepiece" has_color = TRUE \ No newline at end of file diff --git a/code/datums/underwear/top.dm b/code/datums/underwear/top.dm index eda79da930..5af7870f04 100644 --- a/code/datums/underwear/top.dm +++ b/code/datums/underwear/top.dm @@ -90,4 +90,9 @@ /datum/category_item/underwear/top/sarashi name = "Sarashi" icon_state = "bandages" + has_color = TRUE + +/datum/category_item/underwear/top/swimtop + name = "Swimming Top" + icon_state = "swimtop" has_color = TRUE \ No newline at end of file diff --git a/code/game/antagonist/outsider/shipwreck_survivor.dm b/code/game/antagonist/outsider/shipwreck_survivor.dm new file mode 100644 index 0000000000..6fdcc47b97 --- /dev/null +++ b/code/game/antagonist/outsider/shipwreck_survivor.dm @@ -0,0 +1,45 @@ +var/datum/antagonist/shipwreck_survivor/survivors + +//Shipwreck survivors can only spawn from ghost_pods at time of this commit. +//These are NOT meant to be real antagonists +//They are, at best, comparable to ERT. +/datum/antagonist/SURVIVOR + id = MODE_SURVIVOR + role_type = BE_SURVIVOR + role_text = "Shipwreck Survivor" + role_text_plural = "Shipwreck Survivors" + bantype = "Shipwreck Survivor" //also blocked by GhostRoles ban, in current implementation at least + welcome_text = "Something disastrous happened to the ship you were on! You awaken to your supposed rescuers in pain..." + antag_text = "You are a NOT an antagonist! All rules apply to you as well. Your job is to help make the world seem more alive. \n \ + You are not an existing station character, but some average person who has suffered a terrible accident. \ + Feel free to make up what happened to the ship you awakened on as you please, \ + but listening to your rescuers for context might help improve your mutual immersion! \n \ + Please play along. It is OK to not be co-operative, but 'yes, and' and \ + 'no, but' are better ways to approach things than to shut them down outright.\n\n \ + Please ahelp if you are uncertain about anything pertaining to this role. \ + It is always better to be safe than sorry! \n\n \ + You will receive the option to set your ambitions. Please remember the server rules \ + abuse can mean being banned from ghost roles \n \ + You should use your ambitions to flesh out why your ship got wrecked \ + and how you wish to proceed now that you were rescued. \n \ + You DON'T need to set your ambitions. Feel free to ignore them." + + antag_sound = 'sound/voice/hiss1.ogg' + + can_speak_aooc = FALSE + can_hear_aooc = FALSE + +/datum/antagonist/SURVIVOR/greet(var/datum/mind/player) + to_chat(player.current, SPAN_WARNING("You are a NOT an antagonist! All rules apply to you as well. Your job is to help make the world seem more alive. \n \ + You are not an existing station character, but some average person who has suffered a terrible accident. \ + Feel free to make up what happened to the ship you awakened on as you please, \ + but listening to your rescuers for context might help improve your mutual immersion! \n \ + Please play along. It is OK to not be co-operative, but 'yes, and' and \ + 'no, but' are better ways to approach things than to shut them down outright.\n\n \ + Please ahelp if you are uncertain about anything pertaining to this role. \ + It is always better to be safe than sorry! \n\n \ + You will receive the option to set your ambitions. Please remember the server rules \ + abuse can mean being banned from ghost roles \n \ + You should use your ambitions to flesh out why your ship got wrecked \ + and how you wish to proceed now that you were rescued. \n \ + You DON'T need to set your ambitions. Feel free to ignore them.")) diff --git a/code/game/atoms_movable_ch.dm b/code/game/atoms_movable_ch.dm new file mode 100644 index 0000000000..33c966a3e0 --- /dev/null +++ b/code/game/atoms_movable_ch.dm @@ -0,0 +1,51 @@ +#define NON_LISTENING_ATOM 0 +#define LISTENING_ATOM 1 +#define LISTENING_PLAYER 2 +//gonna be honest this is really just a ripoff of tg's recursive hearing +/atom/movable + var/recursive_listeners + var/listening_recursive = NON_LISTENING_ATOM + +/atom/movable/New() + . = ..() + if (listening_recursive) + set_listening(listening_recursive) + +/atom/movable/proc/set_listening(var/set_to) + if (listening_recursive && !set_to) + LAZYREMOVE(recursive_listeners, src) + if (!LAZYLEN(recursive_listeners)) + for (var/atom/movable/location as anything in get_nested_locs(src)) + LAZYREMOVE(location.recursive_listeners, src) + if (!listening_recursive && set_to) + LAZYOR(recursive_listeners, src) + for (var/atom/movable/location as anything in get_nested_locs(src)) + LAZYOR(location.recursive_listeners, src) + listening_recursive = set_to + +///Returns a list of all locations (except the area) the movable is within. +/proc/get_nested_locs(atom/movable/atom_on_location, include_turf = FALSE) + . = list() + var/atom/location = atom_on_location.loc + var/turf/our_turf = get_turf(atom_on_location) + while(location && location != our_turf) + . += location + location = location.loc + if(our_turf && include_turf) //At this point, only the turf is left, provided it exists. + . += our_turf + +/atom/movable/Exited(atom/movable/gone, atom/new_loc) + . = ..() + + if (!LAZYLEN(gone.recursive_listeners)) + return + for (var/atom/movable/location as anything in get_nested_locs(src)|src) + LAZYREMOVE(location.recursive_listeners, gone.recursive_listeners) + +/atom/movable/Entered(atom/movable/arrived, atom/old_loc) + . = ..() + + if (!LAZYLEN(arrived.recursive_listeners)) + return + for (var/atom/movable/location as anything in get_nested_locs(src)|src) + LAZYOR(location.recursive_listeners, arrived.recursive_listeners) diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index b0e678298b..2f1087a271 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -70,6 +70,7 @@ if(CLASS_MIDDLE) income = 1 if(CLASS_LOWMID) income = 0.75 if(CLASS_LOWER) income = 0.50 + if(CLASS_BROKE) income = 0 //VOREStation Add - Rent's not cheap //give them an account in the station database var/money_amount = (rand(15,40) + rand(15,40)) * income * economic_modifier * ECO_MODIFIER //VOREStation Edit - Smoothed peaks, ECO_MODIFIER rather than per-species ones. @@ -186,4 +187,4 @@ return TRUE if(brain_type in banned_job_species) return TRUE - */ \ No newline at end of file + */ diff --git a/code/game/machinery/air_alarm.dm b/code/game/machinery/air_alarm.dm index 874b04b51b..21bba5a1e6 100644 --- a/code/game/machinery/air_alarm.dm +++ b/code/game/machinery/air_alarm.dm @@ -84,6 +84,9 @@ var/alarms_hidden = FALSE //If the alarms from this machine are visible on consoles + var/datum/looping_sound/alarm/decompression_alarm/soundloop // CHOMPEdit: Looping Alarms + var/atmoswarn = FALSE // CHOMPEdit: Looping Alarms + /obj/machinery/alarm/nobreach breach_detection = 0 @@ -128,6 +131,7 @@ if(alarm_area && alarm_area.master_air_alarm == src) alarm_area.master_air_alarm = null elect_master(exclude_self = TRUE) + QDEL_NULL(soundloop) // CHOMPEdit: Looping Alarms return ..() /obj/machinery/alarm/proc/offset_airalarm() @@ -165,6 +169,7 @@ set_frequency(frequency) if(!master_is_operating()) elect_master() + soundloop = new(list(src), FALSE) // CHOMPEdit: Looping Alarms /obj/machinery/alarm/process() if((stat & (NOPOWER|BROKEN)) || shorted) @@ -194,6 +199,13 @@ mode = AALARM_MODE_FILL apply_mode() + if(alarm_area?.atmosalm || danger_level > 0) // CHOMPEdit: Looping Alarms (Trigger Decompression alarm here, on detection of any breach in the area) + soundloop.start() // CHOMPEdit: Looping Alarms + atmoswarn = TRUE // CHOMPEdit: Looping Alarms + else if(danger_level == 0 && alarm_area?.atmosalm == 0) // CHOMPEdit: Looping Alarms (Cancel Decompression alarm here) + soundloop.stop() // CHOMPEdit: Looping Alarms + atmoswarn = FALSE // CHOMPEdit: Looping Alarms + //atmos computer remote controll stuff switch(rcon_setting) if(RCON_NO) @@ -831,6 +843,12 @@ ..() spawn(rand(0,15)) update_icon() + // CHOMPEdit Start: Looping Alarms + if(stat & (NOPOWER | BROKEN)) + soundloop.stop() + else if(atmoswarn) + soundloop.start() + // CHOMPEdit End // VOREStation Edit Start /obj/machinery/alarm/freezer @@ -845,14 +863,14 @@ /obj/machinery/alarm/sifwilderness breach_detection = 0 report_danger_level = 0 - + /obj/machinery/alarm/sifwilderness/first_run() . = ..() - + TLV["oxygen"] = list(16, 17, 135, 140) TLV["pressure"] = list(0,ONE_ATMOSPHERE*0.10,ONE_ATMOSPHERE*1.50,ONE_ATMOSPHERE*1.60) TLV["temperature"] = list(T0C - 40, T0C - 31, T0C + 40, T0C + 120) // CHOMPEdit END #undef LOAD_TLV_VALUES #undef TEST_TLV_VALUES -#undef DECLARE_TLV_VALUES \ No newline at end of file +#undef DECLARE_TLV_VALUES diff --git a/code/game/machinery/fire_alarm.dm b/code/game/machinery/fire_alarm.dm index a7e0da37f6..e8e5e7b4de 100644 --- a/code/game/machinery/fire_alarm.dm +++ b/code/game/machinery/fire_alarm.dm @@ -26,6 +26,16 @@ FIRE ALARM circuit = /obj/item/weapon/circuitboard/firealarm var/alarms_hidden = FALSE //If the alarms from this machine are visible on consoles + var/datum/looping_sound/alarm/fire_alarm/soundloop // CHOMPEdit: Soundloops + var/datum/looping_sound/alarm/engineering_alarm/engalarm // CHOMPEdit: Soundloops + var/datum/looping_sound/alarm/sm_critical_alarm/critalarm // CHOMPEdit: Soundloops + var/datum/looping_sound/alarm/sm_causality_alarm/causality // CHOMPEdit: Soundloops + + var/firewarn = FALSE // CHOMPEdit: Looping Alarms + var/engwarn = FALSE // CHOMPEdit: Looping Alarms + var/critwarn = FALSE // CHOMPEdit: Looping Alarms + var/causalitywarn = FALSE // CHOMPEdit: Looping Alarms + /obj/machinery/firealarm/alarms_hidden alarms_hidden = TRUE @@ -51,6 +61,18 @@ FIRE ALARM if(z in using_map.contact_levels) set_security_level(security_level ? get_security_level() : "green") + soundloop = new(list(src), FALSE) // CHOMPEdit: Create soundloop + engalarm = new(list(src), FALSE) // CHOMPEdit: Create soundloop + critalarm = new(list(src), FALSE) // CHOMPEdit: Create soundloop + causality = new(list(src), FALSE) // CHOMPEdit: Create soundloop + +/obj/machinery/firealarm/Destroy() + QDEL_NULL(soundloop) // CHOMPEdit: Just clearing the loop here + QDEL_NULL(engalarm) // CHOMPEdit: Clearing the loop here too + QDEL_NULL(critalarm) // CHOMPEdit: Clearing the loop here too + QDEL_NULL(causality) // CHOMPEdit: Clearing the loop here too + return ..() + /obj/machinery/firealarm/proc/offset_alarm() pixel_x = (dir & 3) ? 0 : (dir == 4 ? 26 : -26) pixel_y = (dir & 3) ? (dir == 1 ? -26 : 26) : 0 @@ -88,14 +110,14 @@ FIRE ALARM if("blue") set_light(l_range = 2, l_power = 0.25, l_color = "#1024A9") if("red") set_light(l_range = 4, l_power = 0.9, l_color = "#ff0000") if("delta") set_light(l_range = 4, l_power = 0.9, l_color = "#FF6633") - + . += mutable_appearance(icon, fire_state) . += emissive_appearance(icon, fire_state) - + if(seclevel) . += mutable_appearance(icon, "overlay_[seclevel]") . += emissive_appearance(icon, "overlay_[seclevel]") - + add_overlay(.) /obj/machinery/firealarm/fire_act(datum/gas_mixture/air, temperature, volume) @@ -159,6 +181,22 @@ FIRE ALARM ..() spawn(rand(0,15)) update_icon() + // CHOMPEdit Start: Looping Red/Violet/Orange Alarms + if(stat & (NOPOWER | BROKEN)) // Are we broken or out of power? + soundloop.stop() // Stop the loop once we're out of power + engalarm.stop() // Stop these bc we're out of power + critalarm.stop() // Stop these, out of power + causality.stop() // etc etc + else + if(firewarn) + soundloop.start() + if(engwarn) + engalarm.start() + if(critwarn) + critalarm.start() + if(causalitywarn) + causality.start() + // CHOMPEdit End /obj/machinery/firealarm/attack_hand(mob/user as mob) if(user.stat || stat & (NOPOWER | BROKEN)) @@ -177,6 +215,8 @@ FIRE ALARM var/area/area = get_area(src) for(var/obj/machinery/firealarm/FA in area) fire_alarm.clearAlarm(src.loc, FA) + FA.soundloop.stop() // CHOMPEdit: Soundloop + FA.firewarn = FALSE // CHOMPEdit: Soundloop Fix update_icon() if(user) log_game("[user] reset a fire alarm at [COORD(src)]") @@ -187,8 +227,10 @@ FIRE ALARM var/area/area = get_area(src) for(var/obj/machinery/firealarm/FA in area) fire_alarm.triggerAlarm(loc, FA, duration, hidden = alarms_hidden) + FA.soundloop.start() // CHOMPEdit: Soundloop + FA.firewarn = TRUE // CHOMPEdit: Soundloop Fix update_icon() - playsound(src, 'sound/machines/airalarm.ogg', 25, 0, 4, volume_channel = VOLUME_CHANNEL_ALARMS) + // playsound(src, 'sound/machines/airalarm.ogg', 25, 0, 4, volume_channel = VOLUME_CHANNEL_ALARMS) // CHOMPEdit: Disable as per soundloop if(user) log_game("[user] triggered a fire alarm at [COORD(src)]") diff --git a/code/game/machinery/frame.dm b/code/game/machinery/frame.dm index 6c71e63207..c3fa1701fd 100644 --- a/code/game/machinery/frame.dm +++ b/code/game/machinery/frame.dm @@ -202,6 +202,12 @@ frame_class = FRAME_CLASS_MACHINE frame_size = 3 +/datum/frame/frame_types/injector_maker + name = "Ready-to-Use Medicine 3000" + frame_class = FRAME_CLASS_MACHINE + circuit = /obj/machinery/atmospheric_field_generator + frame_size = 3 + ////////////////////////////// // Frame Object (Structure) ////////////////////////////// diff --git a/code/game/mecha/components/armor.dm b/code/game/mecha/components/armor.dm index 54fe413d11..561bc555d1 100644 --- a/code/game/mecha/components/armor.dm +++ b/code/game/mecha/components/armor.dm @@ -101,7 +101,7 @@ required_type = list(/obj/mecha/combat) damage_minimum = 15 - minimum_penetration = 25 + minimum_penetration = 20 //chompedit making this less OP, was 25, is now 20 damage_absorption = list( "brute"=0.5, @@ -216,9 +216,9 @@ /obj/item/mecha_parts/component/armor/alien name = "strange mecha plating" step_delay = 2 - //Chompedit start This armour is dogshit and needs this to improve it. + //Chompedit start Trying to make this armor decent, without making it OP. damage_minimum = 12 - minimum_penetration = 15 + minimum_penetration = 10 //Chompedit end damage_absorption = list( diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index db61554bd1..53099410dc 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -132,15 +132,15 @@ qdel(src) /obj/effect/spider/eggcluster/small - spiders_min = 1 - spiders_max = 3 + spiders_min = 2 //CHOMP Edit + spiders_max = 6 //CHOMP Edit /obj/effect/spider/eggcluster/small/frost spider_type = /obj/effect/spider/spiderling/frost /obj/effect/spider/eggcluster/royal spiders_min = 2 - spiders_max = 5 + spiders_max = 6 //CHOMP Edit spider_type = /obj/effect/spider/spiderling/varied /obj/effect/spider/spiderling diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index dac041f327..79dabc9a2c 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -509,17 +509,22 @@ var/list/global/slot_flags_enumeration = list( return if(!usr.canmove || usr.stat || usr.restrained() || !Adjacent(usr)) return - if((!istype(usr, /mob/living/carbon)) || (istype(usr, /mob/living/carbon/brain)))//Is humanoid, and is not a brain + if(isanimal(usr)) //VOREStation Edit Start - Allows simple mobs with hands to use the pickup verb + var/mob/living/simple_mob/s = usr + if(!s.has_hands) + to_chat(usr, "You can't pick things up!") + return + else if((!istype(usr, /mob/living/carbon)) || (istype(usr, /mob/living/carbon/brain)))//Is humanoid, and is not a brain to_chat(usr, "You can't pick things up!") return - var/mob/living/carbon/C = usr + var/mob/living/L = usr if( usr.stat || usr.restrained() )//Is not asleep/dead and is not restrained to_chat(usr, "You can't pick things up!") return if(src.anchored) //Object isn't anchored to_chat(usr, "You can't pick that up!") return - if(C.get_active_hand()) //Hand is not full + if(L.get_active_hand()) //Hand is not full //VOREStation Edit End to_chat(usr, "Your hand is full.") return if(!istype(src.loc, /turf)) //Object is on a turf diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 88701319cd..30d032215f 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -88,8 +88,18 @@ /obj/item/device/taperecorder/hear_talk(mob/M, list/message_pieces, verb) var/msg = multilingual_to_message(message_pieces, requires_machine_understands = TRUE, with_capitalization = TRUE) + //START OF CHOMPEDIT + var/voice = "Unknown" + if (M.type == /mob/living/carbon/human) + { + var/mob/living/carbon/human/H = M + voice = H.voice + } + else + voice = M.name + //END OF CHOMPEDIT if(mytape && recording) - mytape.record_speech("[M.name] [verb], \"[msg]\"") + mytape.record_speech("[voice] [verb], \"[msg]\"") //CHOMP Edit /obj/item/device/taperecorder/see_emote(mob/M as mob, text, var/emote_type) @@ -432,4 +442,4 @@ //Random colour tapes /obj/item/device/tape/random/New() - icon_state = "tape_[pick("white", "blue", "red", "yellow", "purple")]" \ No newline at end of file + icon_state = "tape_[pick("white", "blue", "red", "yellow", "purple")]" diff --git a/code/game/objects/items/devices/ticket_printer.dm b/code/game/objects/items/devices/ticket_printer.dm index 971580295b..a16fafa2b5 100644 --- a/code/game/objects/items/devices/ticket_printer.dm +++ b/code/game/objects/items/devices/ticket_printer.dm @@ -6,6 +6,7 @@ slot_flags = SLOT_BELT | SLOT_HOLSTER var/print_cooldown = 1 MINUTE var/last_print + w_class = ITEMSIZE_SMALL //CHOMP Add because something so small, trivial, and used for silly RP should not be practically gigantic. /obj/item/device/ticket_printer/attack_self(mob/user) . = ..() diff --git a/code/game/objects/items/paintkit.dm b/code/game/objects/items/paintkit.dm index f172326fce..59e9cb2878 100644 --- a/code/game/objects/items/paintkit.dm +++ b/code/game/objects/items/paintkit.dm @@ -98,10 +98,8 @@ suit.desc = new_desc suit.icon_state = "[new_icon]_suit" suit.toggleicon = "[new_icon]_suit" - suit.item_state = "[new_icon]_suit" var/obj/item/clothing/head/hood/S = suit.hood S.icon_state = "[new_icon]_helmet" - S.item_state = "[new_icon]_helmet" if(new_icon_file) suit.icon = new_icon_file S.icon = new_icon_file diff --git a/code/game/objects/items/toys/toys_vr.dm b/code/game/objects/items/toys/toys_vr.dm index d114b6e4ab..c55a6bf6e4 100644 --- a/code/game/objects/items/toys/toys_vr.dm +++ b/code/game/objects/items/toys/toys_vr.dm @@ -99,16 +99,55 @@ name = "janihound plushie" icon_state = "scrubpuppy" -/obj/item/toy/plushie/borgplushie/drakiesec - name = "security drake plushie" +/obj/item/toy/plushie/borgplushie/drake icon = 'icons/obj/drakietoy_vr.dmi' + var/lights_glowing = FALSE + +/obj/item/toy/plushie/borgplushie/drake/AltClick(mob/living/user) + . = ..() + var/turf/T = get_turf(src) + if(!T.AdjacentQuick(user)) // So people aren't messing with these from across the room + return FALSE + lights_glowing = !lights_glowing + to_chat(user, "You turn the [src]'s glow-fabric [lights_glowing ? "on" : "off"].") + update_icon() + +/obj/item/toy/plushie/borgplushie/drake/update_icon() + cut_overlays() + if (lights_glowing) + add_overlay(emissive_appearance(icon, "[icon_state]-lights")) + +/obj/item/toy/plushie/borgplushie/drake/get_description_info() + return "The lights on the plushie can be toggled [lights_glowing ? "off" : "on"] by alt-clicking on it." + +/obj/item/toy/plushie/borgplushie/drake/sec + name = "security drake plushie" icon_state = "secdrake" -/obj/item/toy/plushie/borgplushie/drakiemed +/obj/item/toy/plushie/borgplushie/drake/med name = "medical drake plushie" - icon = 'icons/obj/drakietoy_vr.dmi' icon_state = "meddrake" +/obj/item/toy/plushie/borgplushie/drake/sci + name = "science drake plushie" + icon_state = "scidrake" + +/obj/item/toy/plushie/borgplushie/drake/jani + name = "janitor drake plushie" + icon_state = "janidrake" + +/obj/item/toy/plushie/borgplushie/drake/eng + name = "engineering drake plushie" + icon_state = "engdrake" + +/obj/item/toy/plushie/borgplushie/drake/mine + name = "mining drake plushie" + icon_state = "minedrake" + +/obj/item/toy/plushie/borgplushie/drake/trauma + name = "trauma drake plushie" + icon_state = "traumadrake" + /obj/item/toy/plushie/foxbear name = "toy fox" desc = "Issa fox!" diff --git a/code/game/objects/items/weapons/capture_crystal.dm b/code/game/objects/items/weapons/capture_crystal.dm index 9b85e43558..56fd9a35dd 100644 --- a/code/game/objects/items/weapons/capture_crystal.dm +++ b/code/game/objects/items/weapons/capture_crystal.dm @@ -452,7 +452,9 @@ //Let's let our mob out! /obj/item/capture_crystal/proc/unleash(mob/living/user, atom/target) if(!user && !target) //We got thrown but we're not sure who did it, let's go to where the crystal is - bound_mob.forceMove(src.drop_location()) + var/drop_loc = get_turf(src) + if (drop_loc) + bound_mob.forceMove(drop_loc) return if(!target) //We know who wants to let us out, but they didn't say where, so let's drop us on them bound_mob.forceMove(user.drop_location()) diff --git a/code/game/objects/items/weapons/circuitboards/frame.dm b/code/game/objects/items/weapons/circuitboards/frame.dm index db3106e635..1db8b10130 100644 --- a/code/game/objects/items/weapons/circuitboards/frame.dm +++ b/code/game/objects/items/weapons/circuitboards/frame.dm @@ -270,4 +270,17 @@ /obj/item/weapon/stock_parts/micro_laser/high = 2, //field emitters /obj/item/weapon/stock_parts/scanning_module = 1, //atmosphere sensor /obj/item/weapon/stock_parts/capacitor/adv = 1, //for the JUICE - /obj/item/stack/cable_coil = 10) \ No newline at end of file + /obj/item/stack/cable_coil = 10) + + +/obj/item/weapon/circuitboard/injector_maker + name = T_BOARD("Ready-to-Use Medicine 3000") + build_path = /obj/machinery/injector_maker + board_type = new /datum/frame/frame_types/injector_maker + origin_tech = list(TECH_BIO = 3, TECH_ENGINEERING = 2, TECH_MATERIAL = 2) + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 2, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/console_screen = 1 + ) diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm index 80ec8d7f7c..a86c3d4bd4 100644 --- a/code/game/objects/items/weapons/paint.dm +++ b/code/game/objects/items/weapons/paint.dm @@ -27,44 +27,52 @@ var/global/list/cached_icons = list() return ..() /obj/item/weapon/reagent_containers/glass/paint/New() - if(paint_type && length(paint_type) > 0) - name = paint_type + " " + name ..() - reagents.add_reagent("water", volume*3/5) - reagents.add_reagent("plasticide", volume/5) - if(paint_type == "white") //why don't white crayons exist - reagents.add_reagent("aluminum", volume/5) - else if (paint_type == "black") - reagents.add_reagent("carbon", volume/5) - else - reagents.add_reagent("marker_ink_[paint_type]", volume/5) - reagents.handle_reactions() + if(paint_type) + reagents.add_reagent("paint", volume, paint_type) /obj/item/weapon/reagent_containers/glass/paint/red icon_state = "paint_red" - paint_type = "red" + paint_type = "#FF0000" /obj/item/weapon/reagent_containers/glass/paint/yellow icon_state = "paint_yellow" - paint_type = "yellow" + paint_type = "#FFFF00" /obj/item/weapon/reagent_containers/glass/paint/green icon_state = "paint_green" - paint_type = "green" + paint_type = "#00FF00" /obj/item/weapon/reagent_containers/glass/paint/blue icon_state = "paint_blue" - paint_type = "blue" + paint_type = "#0000FF" -/obj/item/weapon/reagent_containers/glass/paint/purple +/obj/item/weapon/reagent_containers/glass/paint/violet icon_state = "paint_violet" - paint_type = "purple" + paint_type = "#FF00FF" /obj/item/weapon/reagent_containers/glass/paint/black icon_state = "paint_black" - paint_type = "black" + paint_type = "#000000" + +/obj/item/weapon/reagent_containers/glass/paint/grey + icon_state = "paint_neutral" + paint_type = "#808080" + +/obj/item/weapon/reagent_containers/glass/paint/orange + icon_state = "paint_orange" + paint_type = "#FFA500" + +/obj/item/weapon/reagent_containers/glass/paint/purple + icon_state = "paint_purple" + paint_type = "#A500FF" + +/obj/item/weapon/reagent_containers/glass/paint/cyan + icon_state = "paint_cyan" + paint_type = "#00FFFF" /obj/item/weapon/reagent_containers/glass/paint/white + name = "paint remover bucket" icon_state = "paint_white" - paint_type = "white" + paint_type = "#FFFFFF" diff --git a/code/game/objects/random/misc.dm b/code/game/objects/random/misc.dm index 934d119d77..ce2f20fedd 100644 --- a/code/game/objects/random/misc.dm +++ b/code/game/objects/random/misc.dm @@ -753,8 +753,13 @@ /obj/item/toy/plushie/nukeplushie, /obj/item/toy/plushie/otter, /obj/item/toy/plushie/vox, - /obj/item/toy/plushie/borgplushie/drakiesec, - /obj/item/toy/plushie/borgplushie/drakiemed, + pick(list(/obj/item/toy/plushie/borgplushie/drake/sec, + /obj/item/toy/plushie/borgplushie/drake/med, + /obj/item/toy/plushie/borgplushie/drake/sci, + /obj/item/toy/plushie/borgplushie/drake/jani, + /obj/item/toy/plushie/borgplushie/drake/eng, + /obj/item/toy/plushie/borgplushie/drake/mine, + /obj/item/toy/plushie/borgplushie/drake/trauma)), //VOREStation Add End //YawnWider Add Start /obj/item/toy/plushie/teshari/_yw, diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm index 51c32a1f00..7863a168d7 100644 --- a/code/game/objects/structures/artstuff.dm +++ b/code/game/objects/structures/artstuff.dm @@ -248,7 +248,7 @@ framed_offset_y = 6 /obj/item/canvas/twentyfour_twentyfour - name = "ai universal standard canvas" + //name = "ai universal standard canvas" // Uncomment this when AI can actually //desc = "Besides being very large, the AI can accept these as a display from their internal database after you've hung it up." // Not yet icon_state = "24x24" width = 24 diff --git a/code/game/objects/structures/crates_lockers/__closets.dm b/code/game/objects/structures/crates_lockers/__closets.dm index 454a070cfe..cf196ddf0a 100644 --- a/code/game/objects/structures/crates_lockers/__closets.dm +++ b/code/game/objects/structures/crates_lockers/__closets.dm @@ -397,6 +397,13 @@ if(ishuman(usr) || isrobot(usr)) add_fingerprint(usr) toggle(usr) + else if(isanimal(usr)) //VOREStation Addition Start + var/mob/living/simple_mob/s = usr + if(s.has_hands) + add_fingerprint(usr) + toggle(usr) + else + to_chat(usr, "This mob type can't use this verb.") //VOREStation Addition End else to_chat(usr, "This mob type can't use this verb.") diff --git a/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm b/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm index c64593078f..262190ee20 100644 --- a/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm +++ b/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm @@ -1444,7 +1444,7 @@ "stripes" = COLOR_OFF_WHITE, "glass" = COLOR_WHITE ) - + /decl/closet_appearance/wall_double/survival color = COLOR_CYAN_BLUE decals = null @@ -1452,6 +1452,119 @@ "stripe_outer" = COLOR_WHITE ) +/decl/closet_appearance/wall_double/emergency_engi + color = COLOR_YELLOW_GRAY + decals = null + extra_decals = list( + "stripe_inner" = COLOR_ORANGE, + "stripe_outer" = COLOR_OFF_WHITE, + "glass" = COLOR_WHITE + ) + +/decl/closet_appearance/wall_double/security + color = COLOR_NT_RED + decals = null + extra_decals = list( + "vertical_stripe_left_l" = COLOR_WARM_YELLOW, + "vertical_stripe_left_m" = COLOR_WARM_YELLOW + ) + +/decl/closet_appearance/wall_double/cargo + color = COLOR_WARM_YELLOW + +/decl/closet_appearance/wall_double/gaming + color = COLOR_DARK_BLUE_GRAY + decals = null + extra_decals = list( + "stripe_outer" = COLOR_PALE_PINK, + "glass" = COLOR_WHITE + ) + +/decl/closet_appearance/wall_double/science + decals = list( + "holes" + ) + color = COLOR_OFF_WHITE + extra_decals = list( + "stripe_inner_lower" = COLOR_PURPLE, + "stripe_inner_middle" = COLOR_PURPLE + ) + +/decl/closet_appearance/wall_double/command + decals = list( + "holes_right" + ) + color = COLOR_BLUE_GRAY + extra_decals = list( + "vertical_stripe_left_l" = COLOR_GOLD, + "vertical_stripe_left_m" = COLOR_GOLD, + "vertical_stripe_left_r" = COLOR_GOLD + ) + +/decl/closet_appearance/wall_double/ce + decals = list( + "holes_right" + ) + color = COLOR_OFF_WHITE + extra_decals = list( + "vertical_stripe_left_l" = COLOR_DARK_GOLD, + "vertical_stripe_left_m" = COLOR_DARK_GOLD, + "vertical_stripe_left_r" = COLOR_DARK_GOLD + ) + +/decl/closet_appearance/wall_double/rd + decals = list( + "holes_right" + ) + color = COLOR_OFF_WHITE + extra_decals = list( + "vertical_stripe_left_l" = COLOR_PURPLE, + "vertical_stripe_left_m" = COLOR_GOLD, + "vertical_stripe_left_r" = COLOR_PURPLE + ) + +/decl/closet_appearance/wall_double/cmo + decals = list( + "holes_right" + ) + color = COLOR_BABY_BLUE + extra_decals = list( + "vertical_stripe_left_l" = COLOR_GOLD, + "vertical_stripe_left_m" = COLOR_GOLD, + "vertical_stripe_left_r" = COLOR_GOLD + ) + +/decl/closet_appearance/wall_double/hos + decals = list( + "holes_right" + ) + color = COLOR_NT_RED + extra_decals = list( + "vertical_stripe_left_l" = COLOR_GOLD, + "vertical_stripe_left_m" = COLOR_WARM_YELLOW, + "vertical_stripe_left_r" = COLOR_GOLD + ) + +/decl/closet_appearance/wall_double/iaa + decals = list( + "holes_right" + ) + color = COLOR_DARK_BLUE_GRAY + extra_decals = list( + "vertical_stripe_left_l" = COLOR_GOLD, + "vertical_stripe_left_m" = COLOR_GOLD, + "vertical_stripe_left_r" = COLOR_GOLD + ) + +/decl/closet_appearance/wall_double/engineering + decals = list( + "holes" + ) + color = COLOR_YELLOW_GRAY + +/decl/closet_appearance/wall_double/generic_civ + color = COLOR_DARK_BLUE_GRAY + // Carts /decl/closet_appearance/cart color = COLOR_GRAY20 diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index c420cd20b2..82a3ac416e 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -155,6 +155,7 @@ /obj/item/weapon/gun/projectile/revolvershotgun, /obj/item/ammo_magazine/m12gdrumjack/beanbag, /obj/item/ammo_magazine/m12gdrumjack/beanbag, + /obj/item/device/ticket_printer, //CHOMPStation addition /obj/item/device/retail_scanner/security //CHOMPStation addition ) @@ -198,7 +199,8 @@ /obj/item/device/flashlight/maglight, /obj/item/device/holowarrant, //CHOMPStation addition /obj/item/device/retail_scanner/security, //CHOMPStation addition - /obj/item/clothing/glasses/hud/security //CHOMPStation addition + /obj/item/clothing/glasses/hud/security, //CHOMPStation addition + /obj/item/device/ticket_printer //CHOMPStation addition ) /obj/structure/closet/secure_closet/security/Initialize() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security_vr.dm b/code/game/objects/structures/crates_lockers/closets/secure/security_vr.dm index 097b1c83bd..9c10286b08 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security_vr.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security_vr.dm @@ -51,6 +51,7 @@ // /obj/item/clothing/head/beret/sec/corporate/hos, //CHOMP Remove // /obj/item/clothing/suit/storage/hooded/wintercoat/security, //CHOMP Remove // /obj/item/clothing/shoes/boots/winter/security, //CHOMP Remove + /obj/item/device/ticket_printer, //CHOMP Add /obj/item/device/flashlight/maglight) //Custom NT Security Lockers, Only found at central command diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm index c83dbe0f1a..8fc75b1c8a 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -196,6 +196,7 @@ /obj/structure/closet/hydrant //wall mounted fire closet name = "fire-safety closet" desc = "It's a storage unit for fire-fighting supplies." + icon = 'icons/obj/closets/bases/wall.dmi' closet_appearance = /decl/closet_appearance/wall/hydrant plane = TURF_PLANE layer = ABOVE_TURF_LAYER @@ -218,7 +219,10 @@ /obj/structure/closet/medical_wall //wall mounted medical closet name = "first-aid closet" desc = "It's wall-mounted storage unit for first aid supplies." + icon = 'icons/obj/closets/bases/wall.dmi' closet_appearance = /decl/closet_appearance/wall/medical + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER anchored = TRUE density = FALSE wall_mounted = 1 diff --git a/code/game/objects/structures/crates_lockers/closets/walllocker.dm b/code/game/objects/structures/crates_lockers/closets/walllocker.dm index f1949dfeb5..1f0f0f6956 100644 --- a/code/game/objects/structures/crates_lockers/closets/walllocker.dm +++ b/code/game/objects/structures/crates_lockers/closets/walllocker.dm @@ -3,7 +3,7 @@ /obj/structure/closet/walllocker desc = "A wall mounted storage locker." - name = "Wall Locker" + name = "wall locker" icon = 'icons/obj/closets/bases/wall.dmi' closet_appearance = /decl/closet_appearance/wall density = FALSE @@ -85,7 +85,7 @@ //double-size "cabinet" lockers, from Killian /obj/structure/closet/walllocker_double desc = "A wall mounted storage cabinet." - name = "Wall Cabinet" + name = "wall cabinet" icon = 'icons/obj/closets/bases/wall_double.dmi' closet_appearance = /decl/closet_appearance/wall_double density = FALSE @@ -116,7 +116,7 @@ /obj/structure/closet/walllocker_double/kitchen desc = "A wall mounted storage cabinet, for the kitchen. Now where's the flour gone..?" - name = "Kitchen Cabinet" + name = "kitchen cabinet" icon = 'icons/obj/closets/bases/wall_double.dmi' closet_appearance = /decl/closet_appearance/wall_double/kitchen density = FALSE @@ -139,7 +139,7 @@ dir = EAST /obj/structure/closet/walllocker_double/medical - name = "Medical Cabinet" + name = "medical cabinet" desc = "A wall mounted medical supply cabinet. Probably full of drugs!" //not actually full of drugs, sorry! closet_appearance = /decl/closet_appearance/wall_double/medical @@ -159,12 +159,37 @@ pixel_x = 32 dir = EAST +/obj/structure/closet/walllocker_double/emergency_engi + name = "emergency supplies cabinet" + desc = "A wall mounted cabinet. Seemingly has cool stuff for 'emergency use only'." + closet_appearance = /decl/closet_appearance/wall_double/emergency_engi + + starts_with = list( + /obj/item/clothing/mask/breath = 2, + /obj/item/weapon/tank/emergency/oxygen/engi = 2, + /obj/item/weapon/storage/briefcase/inflatable, + /obj/item/device/radio = 3) + +/obj/structure/closet/walllocker_double/emergency_engi/north + pixel_y = 32 + dir = SOUTH + +/obj/structure/closet/walllocker_double/emergency_engi/south + pixel_y = -32 + dir = NORTH + +/obj/structure/closet/walllocker_double/emergency_engi/west + pixel_x = -32 + dir = WEST + +/obj/structure/closet/walllocker_double/emergency_engi/east + pixel_x = 32 + dir = EAST + /obj/structure/closet/walllocker_double/hydrant name = "fire-safety closet" desc = "It's a storage cabinet packed with fire-fighting supplies." closet_appearance = /decl/closet_appearance/wall_double/fire_safety - anchored = TRUE - density = FALSE starts_with = list( /obj/item/clothing/suit/fire, @@ -192,7 +217,7 @@ /obj/structure/closet/walllocker_double/survival desc = "A wall mounted storage cabinet. It contains a small amount of emergency supplies for wilderness survival, but they probably won't last very long." - name = "Emergency Survival Wall Cabinet" + name = "emergency survival wall cabinet" icon = 'icons/obj/closets/bases/wall_double.dmi' closet_appearance = /decl/closet_appearance/wall_double/survival density = FALSE @@ -228,5 +253,159 @@ dir = WEST /obj/structure/closet/walllocker_double/survival/east + pixel_x = 32 + dir = EAST + +/obj/structure/closet/walllocker_double/security + name = "security cabinet" + desc = "A wall mounted cabinet. This one is suspiciously red." + closet_appearance = /decl/closet_appearance/wall_double/security + +/obj/structure/closet/walllocker_double/security/north + pixel_y = 32 + dir = SOUTH + +/obj/structure/closet/walllocker_double/security/south + pixel_y = -32 + dir = NORTH + +/obj/structure/closet/walllocker_double/security/west + pixel_x = -32 + dir = WEST + +/obj/structure/closet/walllocker_double/security/east + pixel_x = 32 + dir = EAST + +/obj/structure/closet/walllocker_double/misc_civ + closet_appearance = /decl/closet_appearance/wall_double/gaming + +/obj/structure/closet/walllocker_double/misc_civ/north + pixel_y = 32 + dir = SOUTH + +/obj/structure/closet/walllocker_double/misc_civ/south + pixel_y = -32 + dir = NORTH + +/obj/structure/closet/walllocker_double/misc_civ/west + pixel_x = -32 + dir = WEST + +/obj/structure/closet/walllocker_double/misc_civ/east + pixel_x = 32 + dir = EAST + +/obj/structure/closet/walllocker_double/generic_civ + closet_appearance = /decl/closet_appearance/wall_double/generic_civ + +/obj/structure/closet/walllocker_double/generic_civ/north + pixel_y = 32 + dir = SOUTH + +/obj/structure/closet/walllocker_double/generic_civ/south + pixel_y = -32 + dir = NORTH + +/obj/structure/closet/walllocker_double/generic_civ/west + pixel_x = -32 + dir = WEST + +/obj/structure/closet/walllocker_double/generic_civ/east + pixel_x = 32 + dir = EAST + +/obj/structure/closet/walllocker_double/cargo + desc = "A wall mounted cabinet. This one is in cargo colors." + closet_appearance = /decl/closet_appearance/wall_double/cargo + +/obj/structure/closet/walllocker_double/cargo/north + pixel_y = 32 + dir = SOUTH + +/obj/structure/closet/walllocker_double/cargo/south + pixel_y = -32 + dir = NORTH + +/obj/structure/closet/walllocker_double/cargo/west + pixel_x = -32 + dir = WEST + +/obj/structure/closet/walllocker_double/cargo/east + pixel_x = 32 + dir = EAST + +/obj/structure/closet/walllocker_double/science + desc = "A wall mounted cabinet. This one is in research colors." + closet_appearance = /decl/closet_appearance/wall_double/science + +/obj/structure/closet/walllocker_double/science/north + pixel_y = 32 + dir = SOUTH + +/obj/structure/closet/walllocker_double/science/south + pixel_y = -32 + dir = NORTH + +/obj/structure/closet/walllocker_double/science/west + pixel_x = -32 + dir = WEST + +/obj/structure/closet/walllocker_double/science/east + pixel_x = 32 + dir = EAST + +/obj/structure/closet/walllocker_double/command + desc = "A wall mounted cabinet. This one is in command colors." + closet_appearance = /decl/closet_appearance/wall_double/command + +/obj/structure/closet/walllocker_double/command/north + pixel_y = 32 + dir = SOUTH + +/obj/structure/closet/walllocker_double/command/south + pixel_y = -32 + dir = NORTH + +/obj/structure/closet/walllocker_double/command/west + pixel_x = -32 + dir = WEST + +/obj/structure/closet/walllocker_double/command/east + pixel_x = 32 + dir = EAST + +/obj/structure/closet/walllocker_double/command/ce + closet_appearance = /decl/closet_appearance/wall_double/ce + +/obj/structure/closet/walllocker_double/command/cmo + closet_appearance = /decl/closet_appearance/wall_double/cmo + +/obj/structure/closet/walllocker_double/command/rd + closet_appearance = /decl/closet_appearance/wall_double/rd + +/obj/structure/closet/walllocker_double/command/hos + closet_appearance = /decl/closet_appearance/wall_double/hos + +/obj/structure/closet/walllocker_double/command/iaa + closet_appearance = /decl/closet_appearance/wall_double/iaa + +/obj/structure/closet/walllocker_double/engineering + desc = "A wall mounted cabinet. This one is in engineering colors." + closet_appearance = /decl/closet_appearance/wall_double/engineering + +/obj/structure/closet/walllocker_double/engineering/north + pixel_y = 32 + dir = SOUTH + +/obj/structure/closet/walllocker_double/engineering/south + pixel_y = -32 + dir = NORTH + +/obj/structure/closet/walllocker_double/engineering/west + pixel_x = -32 + dir = WEST + +/obj/structure/closet/walllocker_double/engineering/east pixel_x = 32 dir = EAST \ No newline at end of file diff --git a/code/game/objects/structures/ghost_pods/survivor.dm b/code/game/objects/structures/ghost_pods/survivor.dm new file mode 100644 index 0000000000..62dbc2441d --- /dev/null +++ b/code/game/objects/structures/ghost_pods/survivor.dm @@ -0,0 +1,138 @@ +//Based on /manual/human but not created as a child for better control over how we create a mob. +/obj/structure/ghost_pod/manual/survivor + name = "Emergency Cryopod" + desc = "A damaged cryopod smeared with blood. An injured body seems frozen in time within." + description_info = "This contains a body, which may wake at any time. The external controls\ + seem to be functioning, though the warning lights that flash give no solace.." + ghost_query_type = /datum/ghost_query/shipwreck_survivor + var/occupant_type = "shipwreck survivor" + + icon = 'icons/obj/Cryogenic2.dmi' + icon_state = "sleeper_1" + icon_state_opened = "sleeper_0" + density = TRUE + + var/allow_appearance_change = TRUE + var/special_role = MODE_SURVIVOR //Set this to NULL as GM if you don't want the "survivor" stuff to fire. + var/list/clothing_possibilities + + var/start_injured = FALSE //failsafe to prevent accidentally making a pod that deals damage when not intended + + var/suffer_brute = FALSE + var/brute_severity = 20 //We inflict UP TO this much damage. Range is 1 to this value + var/brute_instances = 3 //We inflict damage this many times. Helps spread it around multiple limbs! + + + var/suffer_burn = FALSE + var/burn_severity = 20 + var/burn_instances = 3 + + var/suffer_toxloss = FALSE + var/tox_severity = 20 + + var/suffer_oxloss = FALSE + var/oxy_severity = 20 + + var/suffer_cloneloss = FALSE + var/clone_severity = 5 + +/obj/structure/ghost_pod/manual/survivor/Initialize() + . = ..() + + handle_clothing_setup() + +/obj/structure/ghost_pod/manual/survivor/proc/handle_clothing_setup() + clothing_possibilities = list() + + clothing_possibilities |= subtypesof(/obj/item/clothing/under/utility) + clothing_possibilities |= subtypesof(/obj/item/clothing/head/beret) + clothing_possibilities |= /obj/item/clothing/shoes/black + clothing_possibilities |= /obj/item/device/radio/headset + +/obj/structure/ghost_pod/manual/survivor/create_occupant(var/mob/M) + ..() + var/turf/T = get_turf(src) + var/mob/living/carbon/human/H = new(src) + if(M.mind) + M.mind.transfer_to(H) + to_chat(M, "You are a [occupant_type]!") + H.ckey = M.ckey + visible_message("As \the [src] opens, the pipes on \the [src] surge, before it grows dark.") + log_and_message_admins("successfully opened \a [src] and got a [occupant_type].") + + var/list/uniform_options + var/list/shoe_options + var/list/head_options + var/list/headset_options + + if(clothing_possibilities && clothing_possibilities.len) + for(var/path in clothing_possibilities) + if(ispath(path, /obj/item/clothing/under)) + if(!uniform_options) + uniform_options = list() + uniform_options |= path + if(ispath(path, /obj/item/clothing/shoes)) + if(!shoe_options) + shoe_options = list() + shoe_options |= path + if(ispath(path, /obj/item/clothing/head)) + if(!head_options) + head_options = list() + head_options |= path + if(ispath(path, /obj/item/device/radio/headset)) + if(!headset_options) + headset_options = list() + headset_options |= path + + if(uniform_options && uniform_options.len) + var/newpath = pick(uniform_options) + var/obj/item/clothing/C = new newpath(H) + H.equip_to_appropriate_slot(C) + + if(shoe_options && shoe_options.len) + var/newpath = pick(shoe_options) + var/obj/item/clothing/C = new newpath(H) + H.equip_to_appropriate_slot(C) + + if(head_options && head_options.len) + var/newpath = pick(head_options) + var/obj/item/clothing/C = new newpath(H) + H.equip_to_appropriate_slot(C) + + if(headset_options && headset_options.len) + var/newpath = pick(headset_options) + var/obj/item/C = new newpath(H) + H.equip_to_appropriate_slot(C) + + var/newname = sanitize(tgui_input_text(H, "Your mind feels foggy, and you recall your name might be [H.real_name]. Would you like to change your name?", "Name change", null, MAX_NAME_LEN), MAX_NAME_LEN) + if (newname) + H.real_name = newname + + icon_state = icon_state_opened + + H.forceMove(T) + + if(special_role) + var/datum/antagonist/role = all_antag_types[special_role] //Explicitly NOT an antagonist. + if(role) + if(role.add_antagonist(H.mind, 1, 1, 0, 1, 1)) + log_admin("\The [src] made [key_name(src)] into a [role.role_text].") + + if(start_injured) //Doublechecking if we actually want them to be injured + if(suffer_brute) + for(var/br = 1, br < brute_instances, br++) + H.adjustBruteLoss(rand(1,brute_severity)) + if(suffer_burn) + for(var/bu = 1, bu < burn_instances, bu++) + H.adjustFireLoss(rand(1,burn_severity)) + if(suffer_oxloss) + H.adjustOxyLoss(rand(1,oxy_severity)) + if(suffer_toxloss) + H.adjustToxLoss(rand(1,tox_severity)) + if(suffer_cloneloss) + H.adjustCloneLoss(rand(1,clone_severity)) + + if(allow_appearance_change) + H.change_appearance(APPEARANCE_ALL, H, check_species_whitelist = 1) + + visible_message("\The [src] [pick("gurgles", "seizes", "clangs")] before releasing \the [H]!") diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 50071efe4e..6ac0d6b502 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -22,15 +22,17 @@ FLOOR SAFES var/maxspace = 24 //the maximum combined w_class of stuff in the safe -/obj/structure/safe/New() +/obj/structure/safe/Initialize() tumbler_1_pos = rand(0, 72) tumbler_1_open = rand(0, 72) tumbler_2_pos = rand(0, 72) tumbler_2_open = rand(0, 72) + if(. != INITIALIZE_HINT_QDEL) + return INITIALIZE_HINT_LATELOAD -/obj/structure/safe/Initialize() +/obj/structure/safe/LateInitialize() . = ..() for(var/obj/item/I in loc) if(space >= maxspace) @@ -115,7 +117,7 @@ FLOOR SAFES if(canhear) to_chat(user, "You hear a [pick("click", "chink", "clink")] from \the [src].") playsound(src, 'sound/machines/click.ogg', 20, 1) - check_unlocked(user, canhear) + check_unlocked(user, canhear) updateUsrDialog() return diff --git a/code/game/objects/structures/simple_doors.dm b/code/game/objects/structures/simple_doors.dm index 675216fe7a..81a957d473 100644 --- a/code/game/objects/structures/simple_doors.dm +++ b/code/game/objects/structures/simple_doors.dm @@ -14,7 +14,7 @@ var/oreAmount = 7 var/knock_sound = 'sound/machines/door/knock_glass.ogg' var/knock_hammer_sound = 'sound/weapons/sonic_jackhammer.ogg' - + /obj/structure/simple_door/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) TemperatureAct(exposed_temperature) @@ -173,7 +173,7 @@ return /obj/structure/simple_door/bullet_act(var/obj/item/projectile/Proj) - hardness -= Proj.force/10 + take_damage(Proj.damage/10) CheckHardness() /obj/structure/simple_door/take_damage(var/damage) diff --git a/code/game/turfs/flooring/flooring_decals_ch.dm b/code/game/turfs/flooring/flooring_decals_ch.dm index 3d648ccb36..1021ae947b 100644 --- a/code/game/turfs/flooring/flooring_decals_ch.dm +++ b/code/game/turfs/flooring/flooring_decals_ch.dm @@ -10,4 +10,4 @@ icon_state = "wood_stairs2" /obj/effect/floor_decal/stairs/dark_stairs - icon_state = "dark_stairs" \ No newline at end of file + icon_state = "dark_stairs" diff --git a/code/game/turfs/flooring/flooring_decals_yw.dm b/code/game/turfs/flooring/flooring_decals_yw.dm index 75983e086f..2c948bb9b3 100644 --- a/code/game/turfs/flooring/flooring_decals_yw.dm +++ b/code/game/turfs/flooring/flooring_decals_yw.dm @@ -18,3 +18,4 @@ /obj/effect/floor_decal/snow/floor/pointy icon_state = "snowfloorpointy" + diff --git a/code/game/turfs/flooring/seasonal.dm b/code/game/turfs/flooring/seasonal.dm index 1e57f6bfa8..e67d6ba9c5 100644 --- a/code/game/turfs/flooring/seasonal.dm +++ b/code/game/turfs/flooring/seasonal.dm @@ -31,7 +31,7 @@ var/world_time_season var/tree_types = list() var/snow_chance = 10 -/turf/simulated/floor/outdoors/grass/seasonal/Initialize() +/turf/simulated/floor/outdoors/grass/seasonal/Initialize() //There are A LOT of chompedits here, I guess. switch(world_time_season) if("spring") @@ -41,10 +41,10 @@ var/world_time_season /obj/structure/flora/tree/jungle ) animal_types = list( - /mob/living/simple_mob/vore/alienanimals/teppi = 10, - /mob/living/simple_mob/vore/alienanimals/teppi/mutant = 1, + /mob/living/simple_mob/vore/alienanimals/teppi = 10, //CHOMP Edit + /mob/living/simple_mob/vore/alienanimals/teppi/mutant = 1, //CHOMP Edit /mob/living/simple_mob/vore/redpanda = 40, - /mob/living/simple_mob/vore/redpanda/fae = 2, + /mob/living/simple_mob/vore/redpanda/fae = 2, //CHOMP Edit /mob/living/simple_mob/vore/sheep = 20, /mob/living/simple_mob/vore/rabbit/black = 20, /mob/living/simple_mob/vore/rabbit/white = 20, @@ -52,7 +52,12 @@ var/world_time_season /mob/living/simple_mob/vore/leopardmander = 2, /mob/living/simple_mob/vore/horse/big = 10, /mob/living/simple_mob/vore/bigdragon/friendly = 1, - /mob/living/simple_mob/vore/alienanimals/dustjumper = 20 + /mob/living/simple_mob/vore/alienanimals/dustjumper = 20, + /mob/living/simple_mob/vore/bee = 20, + /mob/living/simple_mob/vore/horse/big = 5, + /mob/living/simple_mob/animal/wolf = 5, + /mob/living/simple_mob/animal/wolf/direwolf = 1, + /mob/living/simple_mob/animal/wolf/direwolf/dog = 1 ) grass_types = list( /obj/structure/flora/ausbushes/sparsegrass, @@ -77,8 +82,8 @@ var/world_time_season animal_types = list( /mob/living/simple_mob/vore/alienanimals/teppi = 10, /mob/living/simple_mob/vore/alienanimals/teppi/mutant = 1, - /mob/living/simple_mob/vore/redpanda = 40, - /mob/living/simple_mob/vore/redpanda/fae = 2, + /mob/living/simple_mob/vore/redpanda = 40, //CHOMP Edit + /mob/living/simple_mob/vore/redpanda/fae = 2, //CHOMP Edit /mob/living/simple_mob/vore/sheep = 20, /mob/living/simple_mob/vore/rabbit/black = 20, /mob/living/simple_mob/vore/rabbit/white = 20, @@ -86,7 +91,13 @@ var/world_time_season /mob/living/simple_mob/vore/leopardmander = 2, /mob/living/simple_mob/vore/horse/big = 10, /mob/living/simple_mob/vore/bigdragon/friendly = 1, - /mob/living/simple_mob/vore/alienanimals/dustjumper = 20 + /mob/living/simple_mob/vore/alienanimals/dustjumper = 20, + /mob/living/simple_mob/vore/bee = 5, + /mob/living/simple_mob/vore/horse/big = 5, + /mob/living/simple_mob/vore/pakkun = 2, + /mob/living/simple_mob/vore/fennix = 1, + /mob/living/simple_mob/animal/wolf/direwolf/dog = 1, + /mob/living/simple_mob/animal/passive/bird/parrot = 1 ) grass_types = list( /obj/structure/flora/ausbushes/sparsegrass, @@ -108,7 +119,11 @@ var/world_time_season /mob/living/simple_mob/vore/rabbit/white = 20, /mob/living/simple_mob/vore/rabbit/brown = 20, /mob/living/simple_mob/vore/horse/big = 10, - /mob/living/simple_mob/vore/alienanimals/dustjumper = 20 + /mob/living/simple_mob/vore/alienanimals/dustjumper = 20, + /mob/living/simple_mob/vore/horse/big = 1, + /mob/living/simple_mob/animal/wolf = 1, + /mob/living/simple_mob/animal/wolf/direwolf = 1, + /mob/living/simple_mob/animal/wolf/direwolf/dog = 1 ) grass_types = list( /obj/structure/flora/ausbushes/sparsegrass, @@ -129,7 +144,14 @@ var/world_time_season /mob/living/simple_mob/vore/rabbit/white = 40, /mob/living/simple_mob/vore/alienanimals/teppi = 10, /mob/living/simple_mob/vore/alienanimals/teppi/mutant = 1, - /mob/living/simple_mob/vore/redpanda = 10 + /mob/living/simple_mob/vore/redpanda = 10, + /mob/living/simple_mob/animal/wolf = 10, + /mob/living/simple_mob/animal/wolf/direwolf = 1, + /mob/living/simple_mob/animal/wolf/direwolf/dog = 1, + /mob/living/simple_mob/otie/friendly = 2, + /mob/living/simple_mob/otie/friendly/chubby = 1, + /mob/living/simple_mob/otie/red/friendly = 1, + /mob/living/simple_mob/otie/red/chubby = 1 ) if(prob(snow_chance)) chill() diff --git a/code/game/turfs/simulated/outdoors/survival_action_vr.dm b/code/game/turfs/simulated/outdoors/survival_action_vr.dm index c7f90171c7..9f88959493 100644 --- a/code/game/turfs/simulated/outdoors/survival_action_vr.dm +++ b/code/game/turfs/simulated/outdoors/survival_action_vr.dm @@ -1,9 +1,12 @@ +var/static/list/has_rocks = list("dirt5", "dirt6", "dirt7", "dirt8", "dirt9") + /turf/simulated/floor/outdoors/newdirt/attack_hand(mob/user) if(user.pulling) return ..() - var/static/list/has_rocks = list("dirt5", "dirt6", "dirt7", "dirt8", "dirt9") if(!Adjacent(user)) return ..() + if(user.a_intent != I_HELP) + return ..() if(icon_state in has_rocks) user.visible_message("[user] loosens rocks from \the [src]...", "You loosen rocks from \the [src]...") if(do_after(user, 5 SECONDS, exclusive = TASK_USER_EXCLUSIVE)) @@ -76,4 +79,4 @@ S.pixel_y = rand(-6,6) sticks = FALSE else - to_chat(user, "You don't see any loose sticks...") \ No newline at end of file + to_chat(user, "You don't see any loose sticks...") diff --git a/code/game/turfs/turf_ch.dm b/code/game/turfs/turf_ch.dm deleted file mode 100644 index 403e60a319..0000000000 --- a/code/game/turfs/turf_ch.dm +++ /dev/null @@ -1,2 +0,0 @@ -/turf - var/list/temp_check = list() \ No newline at end of file diff --git a/code/game/world.dm b/code/game/world.dm index 96b2249363..b204bc94fa 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -41,6 +41,13 @@ src.update_status() setup_season() //VOREStation Addition + // CHOMPStation Addition: Spaceman DMM Debugging + var/debug_server = world.GetConfig("env", "AUXTOOLS_DEBUG_DLL") + if (debug_server) + call(debug_server, "auxtools_init")() + enable_debugging() + // CHOMPStation Add End + . = ..() #if UNIT_TEST @@ -597,7 +604,7 @@ var/failed_old_db_connections = 0 if(num_tries==5) log_admin("ERROR TRYING TO CLEAR erro_attacklog") qdel(query_truncate2) - else + else to_world_log("Feedback database connection failed.") //CHOMPEdit End return 1 @@ -775,3 +782,21 @@ var/global/game_id = null game_id = "[c[(t % l) + 1]][game_id]" t = round(t / l) return 1 + +// CHOMPStation Add: Spaceman DMM Debugger +/proc/auxtools_stack_trace(msg) + CRASH(msg) + +/proc/auxtools_expr_stub() + CRASH("auxtools not loaded") + +/proc/enable_debugging(mode, port) + CRASH("auxtools not loaded") + +/world/Del() + var/debug_server = world.GetConfig("env", "AUXTOOLS_DEBUG_DLL") + if (debug_server) + call(debug_server, "auxtools_shutdown")() + . = ..() + +// CHOMPStation Add End: Spaceman DMM Debugger diff --git a/code/global.dm b/code/global.dm index 2270f276f6..fd8183a714 100644 --- a/code/global.dm +++ b/code/global.dm @@ -145,7 +145,6 @@ var/list/robot_module_types = list( "Miner", "Janitor", "Service", "Clerical", "Security", "Research", "Medihound", "K9", "Janihound", "Sci-borg", "Pupdozer", "Service-Hound", "BoozeHound", "KMine", "TraumaHound" - , "UnityHound", "Honk-Hound" // CHOMPEdit -- Adds the UnityHound drone to the list. ) // List of modules added during code red var/list/emergency_module_types = list( diff --git a/code/modules/admin/DB ban/functions.dm b/code/modules/admin/DB ban/functions.dm index 19e1bc5093..1f1e3aea4e 100644 --- a/code/modules/admin/DB ban/functions.dm +++ b/code/modules/admin/DB ban/functions.dm @@ -283,7 +283,8 @@ output += "