diff --git a/ModularTegustation/tegu_items/rcorp/objective.dm b/ModularTegustation/tegu_items/rcorp/objective.dm index 10635ce0e7cb..e87a0e7b31ba 100644 --- a/ModularTegustation/tegu_items/rcorp/objective.dm +++ b/ModularTegustation/tegu_items/rcorp/objective.dm @@ -11,6 +11,9 @@ Abnormality Supreme Victory - Win against reinforcements */ GLOBAL_VAR_INIT(rcorp_wincondition, 0) //what state the game is in. +GLOBAL_VAR_INIT(rcorp_objective_location, null) +GLOBAL_VAR_INIT(rcorp_abno_objective_location, null) +GLOBAL_VAR_INIT(rcorp_payload, null) //0 is neutral, 1 favors Rcorp and 2 favors abnos /obj/effect/landmark/objectivespawn @@ -20,6 +23,7 @@ GLOBAL_VAR_INIT(rcorp_wincondition, 0) //what state the game is in. icon_state = "city_of_cogs" /obj/effect/landmark/objectivespawn/Initialize() + GLOB.rcorp_objective_location = src switch(GLOB.rcorp_objective) if("button") new /obj/structure/bough(get_turf(src)) @@ -29,7 +33,11 @@ GLOBAL_VAR_INIT(rcorp_wincondition, 0) //what state the game is in. if("arbiter") new /obj/structure/bough(get_turf(src)) addtimer(CALLBACK(src, PROC_REF(arbspawn)), 20 MINUTES) - ..() + if("payload_abno") + new /mob/payload(get_turf(src), "abno") + if("payload_rcorp") + new /obj/effect/payload_destination(get_turf(src)) + return ..() /obj/effect/landmark/objectivespawn/proc/reinforce() minor_announce("R-Corp reinforcements are on the way. Hang on tight, commander." , "R-Corp Intelligence Office") @@ -46,6 +54,30 @@ GLOBAL_VAR_INIT(rcorp_wincondition, 0) //what state the game is in. minor_announce("DANGER - HOSTILE ARBITER IN THE AREA. NEUTRALIZE IMMEDIATELY." , "R-Corp Intelligence Office") GLOB.rcorp_wincondition = 2 +/obj/effect/landmark/abno_objectivespawn + name = "abno objective spawner" + desc = "It spawns the abnormality objective. Notify a coder. Thanks!" + icon = 'icons/effects/landmarks_static.dmi' + icon_state = "city_of_cogs" + +/obj/effect/landmark/abno_objectivespawn/Initialize() + GLOB.rcorp_abno_objective_location = src + switch(GLOB.rcorp_objective) + if("payload_rcorp") + new /mob/payload(get_turf(src), "rcorp") + if("payload_abno") + new /obj/effect/payload_destination(get_turf(src)) + return ..() + +/obj/effect/payload_destination + name = "payload destination" + desc = "Payload really wants to be here" + icon = 'icons/effects/effects.dmi' + icon_state = "launchpad_pull" + anchored = TRUE + layer = ABOVE_MOB_LAYER + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + //Golden Bough Objective /obj/structure/bough name = "Golden Bough" @@ -194,8 +226,12 @@ GLOBAL_VAR_INIT(rcorp_wincondition, 0) //what state the game is in. resistance_flags = INDESTRUCTIBLE /obj/structure/rcorpcomms/Initialize() - ..() - addtimer(CALLBACK(src, PROC_REF(vulnerable)), 15 MINUTES) + . = ..() + switch(GLOB.rcorp_objective) + if("payload_rcorp", "payload_abno") + return + else + addtimer(CALLBACK(src, PROC_REF(vulnerable)), 15 MINUTES) /obj/structure/rcorpcomms/proc/vulnerable() minor_announce("Warning: The communications shields are now disabled. Communications are now vulnerable" , "R-Corporation Command Update") diff --git a/_maps/RandomRooms/rcorp/caves/pit.dmm b/_maps/RandomRooms/rcorp/caves/pit.dmm index f21fb638317d..5129a11f0762 100644 --- a/_maps/RandomRooms/rcorp/caves/pit.dmm +++ b/_maps/RandomRooms/rcorp/caves/pit.dmm @@ -7,7 +7,7 @@ /obj/structure/railing{ dir = 1 }, -/turf/open/chasm, +/turf/open/floor/fakepit, /area/city/outskirts) "d" = ( /obj/structure/railing{ @@ -42,7 +42,7 @@ /obj/structure/railing{ dir = 8 }, -/turf/open/chasm, +/turf/open/floor/fakepit, /area/city/outskirts) "m" = ( /obj/effect/landmark/abnospawn/easycombat, @@ -51,7 +51,7 @@ "o" = ( /obj/structure/lattice/catwalk, /obj/structure/railing/corner, -/turf/open/chasm, +/turf/open/floor/fakepit, /area/city/outskirts) "p" = ( /obj/structure/railing{ @@ -97,7 +97,7 @@ /area/city/outskirts) "H" = ( /obj/structure/lattice/catwalk, -/turf/open/chasm, +/turf/open/floor/fakepit, /area/city/outskirts) "K" = ( /turf/open/chasm, @@ -107,40 +107,40 @@ /obj/structure/railing{ dir = 9 }, -/turf/open/chasm, +/turf/open/floor/fakepit, /area/city/outskirts) "O" = ( /obj/structure/lattice/catwalk, /obj/structure/railing/corner{ dir = 1 }, -/turf/open/chasm, +/turf/open/floor/fakepit, /area/city/outskirts) "Q" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ dir = 4 }, -/turf/open/chasm, +/turf/open/floor/fakepit, /area/city/outskirts) "T" = ( /obj/structure/lattice/catwalk, /obj/structure/railing, -/turf/open/chasm, +/turf/open/floor/fakepit, /area/city/outskirts) "X" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ dir = 6 }, -/turf/open/chasm, +/turf/open/floor/fakepit, /area/city/outskirts) "Y" = ( /obj/structure/lattice/catwalk, /obj/structure/railing/corner{ dir = 4 }, -/turf/open/chasm, +/turf/open/floor/fakepit, /area/city/outskirts) (1,1,1) = {" diff --git a/_maps/map_files/Event/rcorp.dmm b/_maps/map_files/Event/rcorp.dmm index 623f7aa6a346..d36dee4b32cc 100644 --- a/_maps/map_files/Event/rcorp.dmm +++ b/_maps/map_files/Event/rcorp.dmm @@ -18,6 +18,10 @@ /obj/machinery/telecomms/server/presets/engineering, /turf/open/floor/circuit/telecomms/mainframe, /area/city/outskirts) +"co" = ( +/obj/effect/landmark/abno_objectivespawn, +/turf/open/floor/plating/asteroid, +/area/city/outskirts) "cH" = ( /obj/effect/turf_decal/bot, /obj/machinery/telecomms/relay/preset/telecomms, @@ -5525,7 +5529,7 @@ PG PG PG PG -PG +co PG PG PG diff --git a/code/controllers/subsystem/maptype.dm b/code/controllers/subsystem/maptype.dm index 078fc2632b5a..c923b6262d62 100644 --- a/code/controllers/subsystem/maptype.dm +++ b/code/controllers/subsystem/maptype.dm @@ -66,12 +66,14 @@ SUBSYSTEM_DEF(maptype) if(prob(30)) jobtype = "rcorp_fifth" - switch(rand(1,3)) + switch(rand(1,5)) if(1) //Find this var in the objectives folder GLOB.rcorp_objective = "button" if(2) GLOB.rcorp_objective = "vip" if(3) GLOB.rcorp_objective = "arbiter" - - + if(4) + GLOB.rcorp_objective = "payload_rcorp" + if(5) + GLOB.rcorp_objective = "payload_abno" diff --git a/code/datums/reusable_visual_pool.dm b/code/datums/reusable_visual_pool.dm new file mode 100644 index 000000000000..720354829960 --- /dev/null +++ b/code/datums/reusable_visual_pool.dm @@ -0,0 +1,117 @@ +/datum/reusable_visual_pool + var/list/available_objects + var/list/all_objects + var/available_count = 0 + +/datum/reusable_visual_pool/New(size = 20) + available_objects = new(size) + all_objects = new(size) + . = ..() + INVOKE_ASYNC(src, PROC_REF(InitializeObjects), size) + +/datum/reusable_visual_pool/proc/InitializeObjects(amount) + for(var/i in 1 to amount) + var/obj/effect/reusable_visual/RV = new /obj/effect/reusable_visual(src) + all_objects[i] = RV + ++available_count + available_objects[available_count] = RV + stoplag() + +/datum/reusable_visual_pool/Destroy() + available_objects.Cut() + QDEL_LIST(all_objects) + return ..() + +/datum/reusable_visual_pool/proc/TakePoolElement() + var/obj/effect/reusable_visual/RV + if(available_count < 1) + RV = new /obj/effect/reusable_visual(src) + all_objects += RV + available_objects += null + else + RV = available_objects[available_count] + --available_count + RV.is_being_used = TRUE + RV.invisibility = 0 + return RV + +/datum/reusable_visual_pool/proc/ReturnToPool(obj/effect/reusable_visual/RV, called_from_timer = FALSE) + if(!istype(RV) || RV.pool != src || !RV.is_being_used) + return FALSE + if(!called_from_timer && RV.timer_id) + deltimer(RV.timer_id) + RV.timer_id = null + RV.is_being_used = FALSE + RV.invisibility = 101 + RV.can_be_z_moved = FALSE + RV.alpha = 255 + RV.color = null + RV.name = "nothing" + RV.icon = 'icons/effects/effects.dmi' + RV.icon_state = "nothing" + RV.duration = 0 + RV.animate_movement = NO_STEPS + RV.set_dir_on_move = FALSE + RV.loc = null + RV.transform = matrix() + RV.dir = SOUTH + RV.plane = GAME_PLANE + RV.layer = ABOVE_MOB_LAYER + animate(RV) + ++available_count + available_objects[available_count] = RV + return TRUE + +#define SET_RV_RETURN_TIMER(RV, DURATION) ##RV.duration = DURATION; ##RV.timer_id = addtimer(CALLBACK(##RV.pool, TYPE_PROC_REF(/datum/reusable_visual_pool, ReturnToPool), ##RV, TRUE), ##RV.duration, TIMER_STOPPABLE); +//Create procs like these for whatever effects +/datum/reusable_visual_pool/proc/NewSmashEffect(turf/location, duration = 3, color = null) + var/obj/effect/reusable_visual/RV = TakePoolElement() + SET_RV_RETURN_TIMER(RV, duration) + RV.name = "smash" + RV.icon_state = "smash" + RV.color = color + RV.loc = location + return RV + +/datum/reusable_visual_pool/proc/NewSparkles(turf/location, duration = 10, color = null) + var/obj/effect/reusable_visual/RV = TakePoolElement() + SET_RV_RETURN_TIMER(RV, duration) + RV.name = "sparkles" + RV.icon = 'icons/effects/effects.dmi' + RV.icon_state = "sparkles" + RV.color = color + RV.dir = pick(GLOB.cardinals) + RV.loc = location + return RV + +/datum/reusable_visual_pool/proc/NewCultSparks(turf/location, duration = 10) + var/obj/effect/reusable_visual/RV = TakePoolElement() + SET_RV_RETURN_TIMER(RV, duration) + RV.name = "cult sparks" + RV.icon = 'icons/effects/cult_effects.dmi' + RV.icon_state = "bloodsparkles" + RV.dir = pick(GLOB.cardinals) + RV.loc = location + return RV + +/datum/reusable_visual_pool/proc/NewCultIn(turf/location, direction = SOUTH) + var/obj/effect/reusable_visual/RV = TakePoolElement() + SET_RV_RETURN_TIMER(RV, 7) + RV.name = "cult in" + RV.icon = 'icons/effects/cult_effects.dmi' + RV.icon_state = "cultin" + RV.dir = direction + RV.loc = location + return RV + +/datum/reusable_visual_pool/proc/NewSmoke(turf/location, duration = 10, color = null) + var/obj/effect/reusable_visual/RV = TakePoolElement() + SET_RV_RETURN_TIMER(RV, duration) + RV.name = "smoke" + RV.icon = 'icons/effects/effects.dmi' + RV.icon_state = "smoke" + RV.color = color + RV.dir = pick(GLOB.cardinals) + RV.loc = location + animate(RV, alpha = 0, time = duration) + return RV diff --git a/code/game/gamemodes/management/event/combat.dm b/code/game/gamemodes/management/event/combat.dm index 3b8ceb9b8003..92609267534b 100644 --- a/code/game/gamemodes/management/event/combat.dm +++ b/code/game/gamemodes/management/event/combat.dm @@ -34,8 +34,22 @@ GLOBAL_VAR_INIT(wcorp_enemy_faction, "") //decides which faction WCorp will be u //R-Corp stuff. if("rcorp") - addtimer(CALLBACK(src, PROC_REF(drawround)), 40 MINUTES) - to_chat(world, span_userdanger("Round will end in a draw after 40 minutes.")) + switch(GLOB.rcorp_objective) + if("payload_abno") + addtimer(CALLBACK(src, PROC_REF(endroundRcorp), "Abnormalities have failed to escort the specimen to the destination."), 40 MINUTES) + to_chat(world, span_userdanger("Round will end in an R-Corp victory after 40 minutes.")) + var/start_delay = 6 MINUTES + addtimer(CALLBACK(src, PROC_REF(StartPayload)), start_delay) + PayloadFindPath(start_delay) + if("payload_rcorp") + addtimer(CALLBACK(src, PROC_REF(endroundRcorp), "Rcorp has failed to destroy the mission objective."), 40 MINUTES) + to_chat(world, span_userdanger("Round will end in an abnormality victory after 40 minutes.")) + var/start_delay = 3 MINUTES + addtimer(CALLBACK(src, PROC_REF(StartPayload)), start_delay) + PayloadFindPath(start_delay) + else + addtimer(CALLBACK(src, PROC_REF(drawround)), 40 MINUTES) + to_chat(world, span_userdanger("Round will end in a draw after 40 minutes.")) addtimer(CALLBACK(src, PROC_REF(rcorp_announce)), 3 MINUTES) //Limbus Labs @@ -78,6 +92,10 @@ GLOBAL_VAR_INIT(wcorp_enemy_faction, "") //decides which faction WCorp will be u SSticker.force_ending = 1 to_chat(world, span_userdanger("Shift has ended.")) +/datum/game_mode/combat/proc/endroundRcorp(text) + SSticker.force_ending = 1 + to_chat(world, span_userdanger(text)) + /datum/game_mode/combat/proc/roundendwarning() switch (SSmaptype.maptype) if("limbus_labs") @@ -104,6 +122,21 @@ GLOBAL_VAR_INIT(wcorp_enemy_faction, "") //decides which faction WCorp will be u announcement_type = "Intelligence has located a golden bough in the vicinity. You are to collect it and wipe all resistance." if("vip") announcement_type = "Intelligence has located a highly intelligent target in the vicinity. Destroy it at all costs." + if("payload_rcorp") + announcement_type = "Intelligence has located an entrance to a former L corp facility. Detonate the charge to bury it and prevent further specimens from escaping." + if("payload_abno") + announcement_type = "Intelligence has located a dangerous specimen moving towards your location. Prevent it from escaping at all costs." minor_announce("[announcement_type]" , "R-Corp Intelligence Office") - +/datum/game_mode/combat/proc/StartPayload() + if(!GLOB.rcorp_payload) + CRASH("No payload somehow") + var/mob/payload/P = GLOB.rcorp_payload + P.ready_to_move = TRUE + +/datum/game_mode/combat/proc/PayloadFindPath(delay) + var/mob/payload/P = GLOB.rcorp_payload + if(!P) + CRASH("No payload somehow, possibly no landmark") + P.start_delay = delay + P.GetPath() diff --git a/code/game/objects/effects/reusable_visual.dm b/code/game/objects/effects/reusable_visual.dm new file mode 100644 index 000000000000..f187948a21f5 --- /dev/null +++ b/code/game/objects/effects/reusable_visual.dm @@ -0,0 +1,36 @@ +///Effects managed by /datum/reusable_visual_pool. Do not create instances manually. +/obj/effect/reusable_visual + name = "nothing" + icon_state = "nothing" + anchored = TRUE + layer = ABOVE_MOB_LAYER + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + animate_movement = NO_STEPS + set_dir_on_move = FALSE + can_be_z_moved = FALSE + invisibility = 101 + ///Reference to the pool that created this object. Do not edit this. + var/datum/reusable_visual_pool/pool + ///How long the effect will be in use. 0 means until manually returned to pool. Only the pool datum should edit this. + var/duration = 0 + ///Only the pool datum should edit this. + var/timer_id = null + ///Only the pool datum should edit this. + var/is_being_used = FALSE + +/obj/effect/reusable_visual/New(datum/reusable_visual_pool/creator_pool) + pool = creator_pool + return ..() + +/obj/effect/reusable_visual/Destroy() + if(timer_id) + deltimer(timer_id) + timer_id = null + pool = null + return ..() + +/obj/effect/reusable_visual/singularity_act() + return + +/obj/effect/reusable_visual/singularity_pull() + return diff --git a/code/modules/mob/payload/payload.dm b/code/modules/mob/payload/payload.dm new file mode 100644 index 000000000000..425f31b5ac48 --- /dev/null +++ b/code/modules/mob/payload/payload.dm @@ -0,0 +1,190 @@ +/mob/payload + name = "Payload" + desc = "It's a payload" + icon = 'icons/obj/machines/nuke.dmi' + icon_state = "nuclearbomb_base" + density = TRUE + move_force = INFINITY + move_resist = INFINITY + status_flags = GODMODE + see_in_dark = 7 + move_on_shuttle = FALSE + a_intent = "harm" + light_range = 5 + faction = list("neutral", "hostile") + var/list/path + var/list/pusher_factions + var/team + var/turf/target + var/current_index = 1 + var/base_delay_amount = 14 + var/minimum_delay_amount = 6 + var/delay_reduction = 3 + var/last_friendly_interaction = 0 + var/time_to_start_moving_back = 15 SECONDS + + var/datum/reusable_visual_pool/RVP = new(20) + var/telegraph_cooldown = 0 + var/telegraph_cooldown_time = 7 SECONDS + + var/pathing_attempts = 0 + var/max_pathing_attempts = 30 + + var/ready_to_move = FALSE + var/prepare_message_time = 0 + var/prepare_message_cooldown = 25 SECONDS + + var/start_delay = 0 + +/mob/payload/New(loc, team) + . = ..() + src.team = team + GLOB.rcorp_payload = src + switch(team) + if("rcorp") + pusher_factions = list("neutral") + if("abno") + pusher_factions = list("hostile") + icon = 'ModularTegustation/Teguicons/64x64.dmi' + icon_state = "armyinblack" + pixel_x = -16 + base_pixel_x = -16 + +/mob/payload/proc/GetPath() + if(!target) + switch(team) + if("rcorp") + target = GLOB.rcorp_objective_location + if("abno") + target = GLOB.rcorp_abno_objective_location + if(!target) + CRASH("There is no destination landmark on the map") + path = get_path_to(loc, target, TYPE_PROC_REF(/turf, PayloadTurfMoveCost), 0, 0, adjacent = TYPE_PROC_REF(/turf, PayloadTurfTest)) + if(!path || !path.len) + ++pathing_attempts + if(pathing_attempts > max_pathing_attempts) + CRASH("payload failed to find a path") + GetPath() + return + start_delay += world.time + MoveLoop() + +/mob/payload/proc/MoveLoop() + if(world.time > telegraph_cooldown) + telegraph_cooldown = world.time + telegraph_cooldown_time + INVOKE_ASYNC(src, PROC_REF(PathTelegraphLoop)) + var/delay_amount = base_delay_amount + if(ready_to_move) + var/is_moving_forward = FALSE + var/is_blocked_by_enemy = FALSE + for(var/mob/living/L in ohearers(2, src)) + if(L.stat == DEAD) + continue + if(faction_check(L.faction, pusher_factions)) + delay_amount -= delay_reduction + is_moving_forward = TRUE + else + is_blocked_by_enemy = TRUE + if(is_moving_forward) + last_friendly_interaction = world.time + delay_amount = max(delay_amount, minimum_delay_amount) + if(is_moving_forward && !is_blocked_by_enemy && current_index < path.len) + //var/obj/machinery/door/poddoor/P = path.len - current_index > 3 ? locate(/obj/machinery/door/poddoor) in path[current_index + 4] : null + if(/*(!P || P && !P.density) && */Move(path[current_index + 1], get_dir(src, path[current_index + 1]), DELAY_TO_GLIDE_SIZE(delay_amount))) + ++current_index + if(loc != path[current_index]) + loc = path[current_index] + stack_trace("payload got moved incorrectly") + else if(!is_moving_forward && world.time - last_friendly_interaction > time_to_start_moving_back && current_index > 1) + if(Move(path[current_index - 1], get_dir(path[current_index - 1], src), DELAY_TO_GLIDE_SIZE(delay_amount))) + --current_index + if(loc != path[current_index]) + loc = path[current_index] + stack_trace("payload got moved incorrectly") + if(current_index == path.len) + DeliverPayload() + return + else if(prepare_message_time < world.time) + prepare_message_time = world.time + prepare_message_cooldown + var/time = round((start_delay - world.time) / 600, 0.5) + visible_message("preparing to move in [time] minutes...", visible_message_flags = EMOTE_MESSAGE) + addtimer(CALLBACK(src, PROC_REF(MoveLoop)), delay_amount) + +/mob/payload/Move(atom/newloc, direct, glide_size_override) + if(!isturf(newloc)) + return + var/turf/T = newloc + for(var/obj/structure/barricade/B in T) + qdel(B) + playsound(get_turf(src), 'sound/effects/break_stone.ogg', 100, TRUE, 3) + for(var/obj/machinery/door/airlock/A in T) + qdel(A) + return ..() + +/mob/payload/proc/DeliverPayload() + var/win_text + switch(team) + if("rcorp") + win_text = "R-CORP MAJOR VICTORY." + new /obj/effect/temp_visual/explosion(get_turf(src)) + if("abno") + win_text = "Abnormality Major Victory." + playsound(get_turf(src), 'sound/abnormalities/armyinblack/black_explosion.ogg', 125, 0, 8) + new /obj/effect/temp_visual/black_explosion(get_turf(src)) + explosion(get_turf(src), 13, 14, 15, flash_range = 0, smoke = FALSE) + for(var/mob/M in GLOB.player_list) + to_chat(M, span_userdanger("THE PAYLOAD HAS REACHED ITS DESTINATION.")) + to_chat(M, span_userdanger(win_text)) + SSticker.force_ending = 1 + qdel(src) + +/mob/payload/proc/PathTelegraphLoop() + for(var/i in (current_index + 1) to path.len) + RVP.NewSparkles(path[i], 3, "#e7f712") + sleep(1) + +/turf/proc/PayloadTurfMoveCost(turf/T) + if(!T) + return FALSE + var/extra_cost = 0 + for(var/turf/TT in RANGE_TURFS(2, T)) + if(TT.density && abs(TT.x - T.x) + abs(TT.y - T.y) <= 2) + ++extra_cost + return abs(x - T.x) + abs(y - T.y) + extra_cost + +/turf/proc/PayloadTurfTest(caller, turf/T, ID) + if(!T || T.density) + return FALSE + var/adir = get_dir(src, T) + var/rdir = ((adir & MASK_ODD)<<1)|((adir & MASK_EVEN)>>1) + for(var/obj/structure/window/W in src) + if(!W.CanAStarPass(ID, adir)) + return FALSE + for(var/obj/structure/railing/R in src) + if(!R.CanAStarPass(ID, adir, caller)) + return FALSE + for(var/obj/machinery/door/D in T) + return TRUE + for(var/obj/structure/barricade/B in T) + return TRUE + for(var/obj/O in T) + if(!O.CanAStarPass(ID, rdir, caller)) + return FALSE + return TRUE + +/mob/payload/Moved() + . = ..() + for(var/turf/T in RANGE_TURFS(2, src)) + if(T.density && !istype(T, /turf/open/chasm)) + T.ChangeTurf(/turf/open/floor/plating/asteroid) + playsound(get_turf(src), 'sound/effects/break_stone.ogg', 100, TRUE, 3) + //will have to delete em if no automatic shutters + for(var/obj/machinery/door/poddoor/P in T) + qdel(P) + playsound(get_turf(src), 'sound/effects/break_stone.ogg', 100, TRUE, 3) + +/mob/payload/forceMove() + return + +/mob/payload/throw_at(atom/target, range, speed, mob/thrower, spin, diagonals_first, datum/callback/callback, force, gentle, quickstart) + return FALSE diff --git a/lobotomy-corp13.dme b/lobotomy-corp13.dme index 9701efa3f347..0c68068d0c13 100644 --- a/lobotomy-corp13.dme +++ b/lobotomy-corp13.dme @@ -413,6 +413,7 @@ #include "code\datums\progressbar.dm" #include "code\datums\radiation_wave.dm" #include "code\datums\recipe.dm" +#include "code\datums\reusable_visual_pool.dm" #include "code\datums\ruins.dm" #include "code\datums\saymode.dm" #include "code\datums\shuttles.dm" @@ -1038,6 +1039,7 @@ #include "code\game\objects\effects\portals.dm" #include "code\game\objects\effects\powerup.dm" #include "code\game\objects\effects\proximity.dm" +#include "code\game\objects\effects\reusable_visual.dm" #include "code\game\objects\effects\spiders.dm" #include "code\game\objects\effects\step_triggers.dm" #include "code\game\objects\effects\wanted_poster.dm" @@ -3096,6 +3098,7 @@ #include "code\modules\mob\living\simple_animal\slime\slime.dm" #include "code\modules\mob\living\simple_animal\slime\slime_say.dm" #include "code\modules\mob\living\simple_animal\slime\subtypes.dm" +#include "code\modules\mob\payload\payload.dm" #include "code\modules\modular_computers\laptop_vendor.dm" #include "code\modules\modular_computers\computers\_modular_computer_shared.dm" #include "code\modules\modular_computers\computers\item\computer.dm"