diff --git a/_maps/map_files/CogStation/CogStation.dmm b/_maps/map_files/CogStation/CogStation.dmm index e520b9d2f2..e871b0145c 100644 --- a/_maps/map_files/CogStation/CogStation.dmm +++ b/_maps/map_files/CogStation/CogStation.dmm @@ -5392,6 +5392,7 @@ /area/maintenance/disposal) "ann" = ( /obj/effect/landmark/event_spawn, +/obj/item/hilbertshotel/ghostdojo, /turf/open/floor/goonplaque{ desc = "It reads 'In honor of spacemen past, whose work allowed this station to find its new home. The fact that you stand on a station originally built light years away is a definitive representation of the ingenuity of the human spirit.' Beneath this is the image of a spaceman rocketing upwards by means of what appears to be a match and flatulence." }, @@ -8263,7 +8264,7 @@ dir = 4 }, /obj/item/bikehorn/rubberducky, -/obj/structure/sign/poster/contraband/yes_erpp{ +/obj/structure/sign/poster/contraband/yes_erp{ pixel_y = 32 }, /turf/open/floor/plasteel/freezer, @@ -36761,7 +36762,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/item/storage/box/engineer{ +/obj/item/storage/box/survival/engineer{ pixel_y = 4 }, /turf/open/floor/plasteel, @@ -42358,6 +42359,7 @@ /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 }, +/obj/item/hilbertshotel/ghostdojo, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) "bOi" = ( diff --git a/_maps/map_files/LambdaStation/lambda.dmm b/_maps/map_files/LambdaStation/lambda.dmm index 7af76cfbab..223dc466e4 100644 --- a/_maps/map_files/LambdaStation/lambda.dmm +++ b/_maps/map_files/LambdaStation/lambda.dmm @@ -63491,6 +63491,7 @@ /obj/machinery/newscaster{ pixel_y = 33 }, +/obj/item/hilbertshotel/ghostdojo, /turf/open/floor/carpet, /area/hallway/secondary/entry) "dQE" = ( diff --git a/_maps/map_files/OmegaStation/job_changes.dm b/_maps/map_files/OmegaStation/job_changes.dm index bef766da7b..210379d74b 100644 --- a/_maps/map_files/OmegaStation/job_changes.dm +++ b/_maps/map_files/OmegaStation/job_changes.dm @@ -81,7 +81,7 @@ /datum/outfit/job/engineer/New() ..() MAP_JOB_CHECK - box = /obj/item/storage/box/engineer/radio + box = /obj/item/storage/box/survival/engineer/radio /datum/job/atmos/New() ..() @@ -119,7 +119,7 @@ /datum/outfit/job/mining/New() ..() - box = /obj/item/storage/box/engineer/radio + box = /obj/item/storage/box/survival/engineer/radio //Service diff --git a/_maps/splurt_maps/map_files/Smexistation/Snaxi_Splurt.dmm b/_maps/splurt_maps/map_files/Smexistation/Snaxi_Splurt.dmm index 62ad6d3299..377b2e9c35 100644 --- a/_maps/splurt_maps/map_files/Smexistation/Snaxi_Splurt.dmm +++ b/_maps/splurt_maps/map_files/Smexistation/Snaxi_Splurt.dmm @@ -38072,6 +38072,10 @@ }, /turf/open/floor/plasteel, /area/engineering/main) +"pGz" = ( +/obj/item/hilbertshotel/ghostdojo, +/turf/open/floor/carpet, +/area/hallway/secondary/exit/departure_lounge) "pGL" = ( /obj/machinery/light/small{ dir = 8 @@ -91138,7 +91142,7 @@ daX uBa uBa kJn -wbE +pGz jog uBa len diff --git a/code/__DEFINES/splurtcode/admin.dm b/code/__DEFINES/splurtcode/admin.dm new file mode 100644 index 0000000000..b78b257663 --- /dev/null +++ b/code/__DEFINES/splurtcode/admin.dm @@ -0,0 +1,6 @@ +#define ADMIN_PUNISHMENT_TABLETIDESTATIONWIDE "Tabletide Stationwide" +#define ADMIN_PUNISHMENT_FAKEBWOINK "Fake Bwoink" +#define ADMIN_PUNISHMENT_NUGGET "Nugget" +#define ADMIN_PUNISHMENT_BREADIFY ":b:read" +#define ADMIN_PUNISHMENT_BOOKIFY "Bookify" +#define ADMIN_PUNISHMENT_BONK "Bonk" diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index c68708c5fe..4f5600f91f 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -710,6 +710,16 @@ SUBSYSTEM_DEF(ticker) update_everything_flag_in_db() if(!round_end_sound) round_end_sound = pick(\ + 'modular_splurt/sound/roundend/dotheballsgo.ogg', + 'modular_splurt/sound/roundend/filledwith.ogg', + 'modular_splurt/sound/roundend/iknowwhat.ogg', + 'modular_splurt/sound/roundend/lottawords.ogg', + 'modular_splurt/sound/roundend/pissesonme.ogg', + 'modular_splurt/sound/roundend/theballsgothard.ogg', + 'modular_splurt/sound/roundend/iwishtherewassomethingmore.ogg', + 'modular_splurt/sound/roundend/likeisaid.ogg', + 'modular_splurt/sound/roundend/whatarottenwaytodie.ogg', + 'modular_splurt/sound/roundend/whatashame.ogg', 'sound/roundend/newroundsexy.ogg', 'sound/roundend/apcdestroyed.ogg', 'sound/roundend/seeyoulaterokay.ogg', diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index a2cb1e253d..e6ccad828d 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -1354,7 +1354,13 @@ Traitors and the like can also be revived with the previous role mostly intact. ADMIN_PUNISHMENT_BLEED, ADMIN_PUNISHMENT_SCARIFY, ADMIN_PUNISHMENT_CLUWNE, - ADMIN_PUNISHMENT_GOODBYE) + ADMIN_PUNISHMENT_GOODBYE, + ADMIN_PUNISHMENT_TABLETIDESTATIONWIDE, + ADMIN_PUNISHMENT_FAKEBWOINK, + ADMIN_PUNISHMENT_NUGGET, + ADMIN_PUNISHMENT_BREADIFY, + ADMIN_PUNISHMENT_BOOKIFY, + ADMIN_PUNISHMENT_BONK) var/punishment = input("Choose a punishment", "DIVINE SMITING") as null|anything in punishment_list @@ -1363,6 +1369,9 @@ Traitors and the like can also be revived with the previous role mostly intact. switch(punishment) if(ADMIN_PUNISHMENT_LIGHTNING) + if(prob(75)) + playsound(target, 'modular_splurt/sound/misc/NOW.ogg', 75, FALSE) + sleep(4 SECONDS) var/turf/T = get_step(get_step(target, NORTH), NORTH) T.Beam(target, icon_state="lightning[rand(1,12)]", time = 5) target.adjustFireLoss(75) @@ -1532,6 +1541,51 @@ Traitors and the like can also be revived with the previous role mostly intact. return else C.pregoodbye(C) //sandstorm punish and ends here. + if(ADMIN_PUNISHMENT_TABLETIDESTATIONWIDE) //SPLURT punishments start here + priority_announce(html_decode("[target] has brought the wrath of the gods upon themselves and is now being tableslammed across the station. Please stand by."), null, 'sound/misc/announce.ogg', "CentCom") + var/list/areas = list() + for(var/area/A in world) + if(A.z == SSmapping.station_start) + areas += A + SEND_SOUND(target, sound('modular_splurt/sound/misc/slamofthenorthstar.ogg',volume=60)) + for(var/area/A in areas) + for(var/obj/structure/table/T in A) + T.tablepush(target, target) + sleep(1) + if(ADMIN_PUNISHMENT_FAKEBWOINK) + SEND_SOUND(target, 'sound/effects/adminhelp.ogg') + if(ADMIN_PUNISHMENT_NUGGET) + if (!iscarbon(target)) + return + var/mob/living/carbon/carbon_target = target + var/timer = 2 SECONDS + for (var/_limb in carbon_target.bodyparts) + var/obj/item/bodypart/limb = _limb + if (limb.body_part == HEAD || limb.body_part == CHEST) + continue + addtimer(CALLBACK(limb, /obj/item/bodypart/.proc/dismember), timer) + addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, carbon_target, 'modular_splurt/sound/effects/cartoon_pop.ogg', 70), timer) + addtimer(CALLBACK(carbon_target, /mob/living/.proc/spin, 4, 1), timer - 0.4 SECONDS) + timer += 2 SECONDS + if(ADMIN_PUNISHMENT_BREADIFY) + #define BREADIFY_TIME (5 SECONDS) + var/mutable_appearance/bread_appearance = mutable_appearance('icons/obj/food/burgerbread.dmi', "bread") + var/mutable_appearance/transform_scanline = mutable_appearance('modular_splurt/icons/effects/effects.dmi', "transform_effect") + target.transformation_animation(bread_appearance, time = BREADIFY_TIME, transform_overlay=transform_scanline, reset_after=TRUE) + addtimer(CALLBACK(GLOBAL_PROC, .proc/breadify, target), BREADIFY_TIME) + #undef BREADIFY_TIME + if(ADMIN_PUNISHMENT_BOOKIFY) + #define BOOKIFY_TIME (2 SECONDS) + var/mutable_appearance/book_appearance = mutable_appearance('icons/obj/library.dmi', "book") + var/mutable_appearance/transform_scanline = mutable_appearance('modular_splurt/icons/effects/effects.dmi', "transform_effect") + target.transformation_animation(book_appearance, time = BOOKIFY_TIME, transform_overlay=transform_scanline, reset_after=TRUE) + addtimer(CALLBACK(GLOBAL_PROC, .proc/bookify, target), BOOKIFY_TIME) + playsound(target, 'modular_splurt/sound/misc/bookify.ogg', 60, 1) + #undef BOOKIFY_TIME + if(ADMIN_PUNISHMENT_BONK) + playsound(target, 'modular_splurt/sound/misc/bonk.ogg', 100, 1) + target.AddElement(/datum/element/squish, 60 SECONDS) + to_chat(target, "Bonk.") punish_log(target, punishment) diff --git a/modular_splurt/code/__HELPERS/icons.dm b/modular_splurt/code/__HELPERS/icons.dm new file mode 100644 index 0000000000..9a242ca805 --- /dev/null +++ b/modular_splurt/code/__HELPERS/icons.dm @@ -0,0 +1,56 @@ +GLOBAL_LIST_EMPTY(transformation_animation_objects) + +/* + * Creates animation that turns current icon into result appearance from top down. + * + * result_appearance - End result appearance/atom/image + * time - Animation duration + * transform_overlay - Appearance/atom/image of effect that moves along the animation - should be horizonatally centered + * reset_after - If FALSE, filters won't be reset and helper vis_objects will not be removed after animation duration expires. Cleanup must be handled by the caller! + */ +/atom/movable/proc/transformation_animation(result_appearance,time = 3 SECONDS,transform_overlay,reset_after=TRUE) + var/list/transformation_objects = GLOB.transformation_animation_objects[src] || list() + //Disappearing part + var/top_part_filter = filter(type="alpha",icon=icon('icons/effects/alphacolors.dmi',"white"),y=0) + filters += top_part_filter + var/filter_index = length(filters) + animate(filters[filter_index],y=-32,time=time) + //Appearing part + var/obj/effect/overlay/appearing_part = new + appearing_part.appearance = result_appearance + appearing_part.appearance_flags |= KEEP_TOGETHER | KEEP_APART + appearing_part.vis_flags = VIS_INHERIT_ID + appearing_part.filters = filter(type="alpha",icon=icon('icons/effects/alphacolors.dmi',"white"),y=0,flags=MASK_INVERSE) + animate(appearing_part.filters[1],y=-32,time=time) + transformation_objects += appearing_part + //Transform effect thing - todo make appearance passed in + if(transform_overlay) + var/obj/transform_effect = new + transform_effect.appearance = transform_overlay + transform_effect.vis_flags = VIS_INHERIT_ID + transform_effect.pixel_y = 16 + transform_effect.alpha = 255 + transformation_objects += transform_effect + animate(transform_effect,pixel_y=-16,time=time) + animate(alpha=0) + + GLOB.transformation_animation_objects[src] = transformation_objects + for(var/A in transformation_objects) + vis_contents += A + if(reset_after) + addtimer(CALLBACK(src,.proc/_reset_transformation_animation,filter_index),time) + +/* + * Resets filters and removes transformation animations helper objects from vis contents. +*/ +/atom/movable/proc/_reset_transformation_animation(filter_index) + var/list/transformation_objects = GLOB.transformation_animation_objects[src] + for(var/A in transformation_objects) + vis_contents -= A + qdel(A) + transformation_objects.Cut() + GLOB.transformation_animation_objects -= src + if(filters && length(filters) >= filter_index) + filters -= filters[filter_index] + //else + // filters = null diff --git a/modular_splurt/code/modules/admin/verbs/randomverbs.dm b/modular_splurt/code/modules/admin/verbs/randomverbs.dm new file mode 100644 index 0000000000..ba7c712761 --- /dev/null +++ b/modular_splurt/code/modules/admin/verbs/randomverbs.dm @@ -0,0 +1,8 @@ +/client/proc/breadify(atom/movable/target) + var/obj/item/reagent_containers/food/snacks/store/bread/plain/funnyBread = new(get_turf(target)) + target.forceMove(funnyBread) + +/client/proc/bookify(atom/movable/target) + var/obj/item/reagent_containers/food/snacks/store/book/funnyBook = new(get_turf(target)) + target.forceMove(funnyBook) + funnyBook.name = "Book of " + target.name diff --git a/modular_splurt/code/modules/food_and_drinks/food/snacks.dm b/modular_splurt/code/modules/food_and_drinks/food/snacks.dm new file mode 100644 index 0000000000..d42cfd8712 --- /dev/null +++ b/modular_splurt/code/modules/food_and_drinks/food/snacks.dm @@ -0,0 +1,12 @@ +/obj/item/reagent_containers/food/snacks/store/book + name = "book" + desc = "Could it be? A LoR reference? And is it... Edible?" + icon = 'icons/obj/library.dmi' + icon_state = "book" + tastes = list("broken dreams and promises" = 10) + foodtype = GROSS + dunkable = TRUE + volume = 80 + bitesize = 4 + bonus_reagents = list(/datum/reagent/consumable/nutriment = 1) + list_reagents = list(/datum/reagent/consumable/sodiumchloride = 1) diff --git a/modular_splurt/icons/effects/effects.dmi b/modular_splurt/icons/effects/effects.dmi new file mode 100644 index 0000000000..cb775c9831 Binary files /dev/null and b/modular_splurt/icons/effects/effects.dmi differ diff --git a/modular_splurt/sound/effects/cartoon_pop.ogg b/modular_splurt/sound/effects/cartoon_pop.ogg new file mode 100644 index 0000000000..aca8c7ade4 Binary files /dev/null and b/modular_splurt/sound/effects/cartoon_pop.ogg differ diff --git a/modular_splurt/sound/misc/NOW.ogg b/modular_splurt/sound/misc/NOW.ogg new file mode 100644 index 0000000000..627983527e Binary files /dev/null and b/modular_splurt/sound/misc/NOW.ogg differ diff --git a/modular_splurt/sound/misc/bonk.ogg b/modular_splurt/sound/misc/bonk.ogg new file mode 100644 index 0000000000..8f03c8ecc0 Binary files /dev/null and b/modular_splurt/sound/misc/bonk.ogg differ diff --git a/modular_splurt/sound/misc/bookify.ogg b/modular_splurt/sound/misc/bookify.ogg new file mode 100644 index 0000000000..bba99ace1d Binary files /dev/null and b/modular_splurt/sound/misc/bookify.ogg differ diff --git a/modular_splurt/sound/misc/slamofthenorthstar.ogg b/modular_splurt/sound/misc/slamofthenorthstar.ogg new file mode 100644 index 0000000000..4d28638b73 Binary files /dev/null and b/modular_splurt/sound/misc/slamofthenorthstar.ogg differ diff --git a/modular_splurt/sound/roundend/dotheballsgo.ogg b/modular_splurt/sound/roundend/dotheballsgo.ogg new file mode 100644 index 0000000000..a467fffbb5 Binary files /dev/null and b/modular_splurt/sound/roundend/dotheballsgo.ogg differ diff --git a/modular_splurt/sound/roundend/filledwith.ogg b/modular_splurt/sound/roundend/filledwith.ogg new file mode 100644 index 0000000000..e1c865f08d Binary files /dev/null and b/modular_splurt/sound/roundend/filledwith.ogg differ diff --git a/modular_splurt/sound/roundend/iknowwhat.ogg b/modular_splurt/sound/roundend/iknowwhat.ogg new file mode 100644 index 0000000000..948228d7ec Binary files /dev/null and b/modular_splurt/sound/roundend/iknowwhat.ogg differ diff --git a/modular_splurt/sound/roundend/iwishtherewassomethingmore.ogg b/modular_splurt/sound/roundend/iwishtherewassomethingmore.ogg new file mode 100644 index 0000000000..c7d2336145 Binary files /dev/null and b/modular_splurt/sound/roundend/iwishtherewassomethingmore.ogg differ diff --git a/modular_splurt/sound/roundend/likeisaid.ogg b/modular_splurt/sound/roundend/likeisaid.ogg new file mode 100644 index 0000000000..063279db08 Binary files /dev/null and b/modular_splurt/sound/roundend/likeisaid.ogg differ diff --git a/modular_splurt/sound/roundend/lottawords.ogg b/modular_splurt/sound/roundend/lottawords.ogg new file mode 100644 index 0000000000..060f889d22 Binary files /dev/null and b/modular_splurt/sound/roundend/lottawords.ogg differ diff --git a/modular_splurt/sound/roundend/pissesonme.ogg b/modular_splurt/sound/roundend/pissesonme.ogg new file mode 100644 index 0000000000..4b857e95bf Binary files /dev/null and b/modular_splurt/sound/roundend/pissesonme.ogg differ diff --git a/modular_splurt/sound/roundend/theballsgothard.ogg b/modular_splurt/sound/roundend/theballsgothard.ogg new file mode 100644 index 0000000000..8c3e498e72 Binary files /dev/null and b/modular_splurt/sound/roundend/theballsgothard.ogg differ diff --git a/modular_splurt/sound/roundend/whatarottenwaytodie.ogg b/modular_splurt/sound/roundend/whatarottenwaytodie.ogg new file mode 100644 index 0000000000..ca61a68f89 Binary files /dev/null and b/modular_splurt/sound/roundend/whatarottenwaytodie.ogg differ diff --git a/modular_splurt/sound/roundend/whatashame.ogg b/modular_splurt/sound/roundend/whatashame.ogg new file mode 100644 index 0000000000..2c50b18701 Binary files /dev/null and b/modular_splurt/sound/roundend/whatashame.ogg differ diff --git a/tgstation.dme b/tgstation.dme index 0c17da6bfb..73a03fa823 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -173,6 +173,7 @@ #include "code\__DEFINES\skills\defines.dm" #include "code\__DEFINES\skills\helpers.dm" #include "code\__DEFINES\splurtcode\access.dm" +#include "code\__DEFINES\splurtcode\admin.dm" #include "code\__DEFINES\splurtcode\traits.dm" #include "code\__DEFINES\storage\_storage.dm" #include "code\__DEFINES\storage\volumetrics.dm" @@ -4156,6 +4157,7 @@ #include "modular_sand\code\modules\vending\clothesmate.dm" #include "modular_sand\code\modules\vending\kinkmate.dm" #include "modular_splurt\code\__HELPERS\_cit_helpers.dm" +#include "modular_splurt\code\__HELPERS\icons.dm" #include "modular_splurt\code\_globalvars\lists\global_lewd.dm" #include "modular_splurt\code\_globalvars\lists\mapping.dm" #include "modular_splurt\code\_globalvars\lists\objects.dm" @@ -4204,6 +4206,7 @@ #include "modular_splurt\code\game\object\structures\crates_lockers\closets\slaver.dm" #include "modular_splurt\code\game\object\structures\crates_lockers\crates\wooden.dm" #include "modular_splurt\code\game\turfs\simulated\floor\fancy_floor.dm" +#include "modular_splurt\code\modules\admin\verbs\randomverbs.dm" #include "modular_splurt\code\game\turfs\simulated\wall\mineral_walls.dm" #include "modular_splurt\code\modules\admin\verbs\one_click_antag.dm" #include "modular_splurt\code\modules\antagonists\ashwalker.dm" @@ -4227,6 +4230,7 @@ #include "modular_splurt\code\modules\clothing\masks\miscellaneous.dm" #include "modular_splurt\code\modules\clothing\shoes\miscellaneous.dm" #include "modular_splurt\code\modules\clothing\under\miscellaneous.dm" +#include "modular_splurt\code\modules\food_and_drinks\food\snacks.dm" #include "modular_splurt\code\modules\events\meateor_wave.dm" #include "modular_splurt\code\modules\events\meteor_wave.dm" #include "modular_splurt\code\modules\food_and_drinks\recipes\drink_recipes.dm"