mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-24 21:48:39 +01:00
Moon Station Final Major Update: Labor Camp (#5020)
<img width="1357" height="868" alt="image" src="https://github.com/user-attachments/assets/983760be-324a-407e-b48a-44fa985490d6" /> ## About The Pull Request - Adds a Labor Camp to Moon Station. It is located on the second layer (sand cave level) and is surrounded by water infested with carp with fricken laser rifles attached to its head that will kill you if you enter the water. The water is deep water, so you can't move quickly through it. The carp in question are immortal and will try to kill you if you touch their waters by shooting laser projectiles at you. They will stop firing at you after a while if you're not in the water after about 5 seconds, or if you're dead. It is kind of easy to escape the camp if you know what you're doing and know where you're going, but extremely hard otherwise. - Remaps dorms a little bit. - Misc bug fixes. ## Why It's Good For The Game Labor Camp good. ## Proof Of Testing Draft because it's almost done. ## Changelog 🆑 BurgerBB add: Adds a Labor Camp to Moon Station. It is located on the second layer (sand cave level) and is surrounded by water infested with carp with fricken laser rifles attached to its head that will kill you if you enter the water. The water is deep water, so you can't move quickly through it. /🆑
This commit is contained in:
+18703
-15585
File diff suppressed because it is too large
Load Diff
@@ -70,7 +70,7 @@
|
||||
/obj/structure/geyser/protozine = 10,
|
||||
/obj/structure/geyser/random = 2,
|
||||
/obj/structure/geyser/wittel = 10,
|
||||
/obj/structure/ore_vent/random/moonstation/cave = 2.5 // This was at 100 and the sole item in the list, but it was runtiming.
|
||||
/obj/structure/ore_vent/random/moonstation/cave = 1 // This was at 100 and the sole item in the list, but it was runtiming.
|
||||
)
|
||||
|
||||
flora_spawn_chance = 2
|
||||
|
||||
@@ -0,0 +1,152 @@
|
||||
/obj/effect/shark_infested_waters
|
||||
name = "a carp with a fricken laser rifle attached to their head"
|
||||
desc = "An ill-tempered endangered species of territorial water carp with a laser rifle on its head. \
|
||||
Captured and trained to kill any who attempt to cross its waters. Pretty much unkillable."
|
||||
icon = 'modular_zubbers/icons/effects/shark_infested_waters.dmi'
|
||||
icon_state = "shark"
|
||||
glide_size = 32
|
||||
|
||||
plane = GAME_PLANE
|
||||
layer = MOB_LAYER
|
||||
|
||||
//Defines. Feel free to change.
|
||||
var/obj/projectile/projectile_type = /obj/projectile/beam/laser/rapid
|
||||
var/turf/valid_turf_type = /turf/open/water/moonstation/infested
|
||||
|
||||
//Internal. Do not change.
|
||||
var/woke = FALSE
|
||||
var/last_detect
|
||||
var/mob/living/current_target
|
||||
|
||||
var/datum/proximity_monitor/proximity_monitor
|
||||
|
||||
COOLDOWN_DECLARE(growl_cooldown)
|
||||
|
||||
/obj/effect/shark_infested_waters/Destroy()
|
||||
QDEL_NULL(proximity_monitor)
|
||||
current_target = null
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
. = ..()
|
||||
|
||||
/obj/effect/shark_infested_waters/Initialize(mapload)
|
||||
. = ..()
|
||||
proximity_monitor = new(src, 6)
|
||||
src.setDir(pick(GLOB.cardinals))
|
||||
|
||||
/obj/effect/shark_infested_waters/HasProximity(atom/movable/arrived)
|
||||
. = ..()
|
||||
if(!current_target && isliving(arrived))
|
||||
|
||||
if(is_target_valid(arrived))
|
||||
set_target(arrived)
|
||||
else
|
||||
src.setDir(get_dir(src,arrived))
|
||||
if(COOLDOWN_FINISHED(src,growl_cooldown) && !prob(80)) // Growl optimization
|
||||
COOLDOWN_START(src,growl_cooldown,3 SECONDS)
|
||||
src.audible_message(
|
||||
span_warning("[src] growls at [arrived]..."),
|
||||
hearing_distance = COMBAT_MESSAGE_RANGE
|
||||
)
|
||||
|
||||
/obj/effect/shark_infested_waters/proc/wake_up()
|
||||
|
||||
if(woke)
|
||||
return FALSE
|
||||
|
||||
START_PROCESSING(SSprocessing, src)
|
||||
|
||||
return TRUE
|
||||
|
||||
/obj/effect/shark_infested_waters/proc/go_to_sleep()
|
||||
|
||||
if(!woke)
|
||||
return FALSE
|
||||
|
||||
set_target(null)
|
||||
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
|
||||
return TRUE
|
||||
|
||||
/obj/effect/shark_infested_waters/proc/set_target(mob/living/desired_target)
|
||||
|
||||
. = FALSE
|
||||
|
||||
if(current_target)
|
||||
current_target = null
|
||||
. = TRUE
|
||||
|
||||
if(desired_target)
|
||||
current_target = desired_target
|
||||
last_detect = world.time
|
||||
. = TRUE
|
||||
|
||||
if(current_target)
|
||||
wake_up()
|
||||
else
|
||||
go_to_sleep()
|
||||
|
||||
|
||||
/obj/effect/shark_infested_waters/proc/is_target_valid(mob/living/target_to_check,check_water = TRUE, check_distance = TRUE)
|
||||
|
||||
if(!target_to_check || QDELETED(target_to_check))
|
||||
return FALSE
|
||||
|
||||
if(target_to_check.stat & DEAD)
|
||||
return FALSE
|
||||
|
||||
if(target_to_check.health >= 1000)
|
||||
return FALSE
|
||||
|
||||
if(check_distance && get_dist(src,target_to_check) > 8)
|
||||
return FALSE
|
||||
|
||||
var/turf/T = get_turf(target_to_check)
|
||||
|
||||
if(check_water && !istype(T,valid_turf_type))
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
/obj/effect/shark_infested_waters/proc/do_step(desired_dir=0x0)
|
||||
|
||||
if(!desired_dir)
|
||||
return FALSE
|
||||
|
||||
var/turf/step_turf = get_step(src,desired_dir)
|
||||
|
||||
if(step_turf && istype(step_turf,valid_turf_type))
|
||||
if(locate(/obj/effect/shark_infested_waters) in step_turf) //Prevents stacking.
|
||||
return FALSE
|
||||
return src.Move(step_turf)
|
||||
|
||||
setDir(desired_dir)
|
||||
|
||||
return FALSE
|
||||
|
||||
/obj/effect/shark_infested_waters/process(seconds_per_tick)
|
||||
|
||||
if(current_target && !is_target_valid(current_target,check_water = FALSE))
|
||||
set_target(null)
|
||||
|
||||
if(current_target)
|
||||
var/target_direction = get_dir(src,current_target)
|
||||
if(target_direction)
|
||||
do_step(target_direction)
|
||||
if(projectile_type)
|
||||
var/turf/our_turf = get_turf(src)
|
||||
if(our_turf)
|
||||
var/obj/projectile/fired_projectile = new projectile_type(our_turf)
|
||||
fired_projectile.original = current_target
|
||||
fired_projectile.fired_from = src
|
||||
fired_projectile.firer = src
|
||||
fired_projectile.impacted = list(WEAKREF(src) = TRUE)
|
||||
fired_projectile.aim_projectile(current_target, src)
|
||||
fired_projectile.fire()
|
||||
|
||||
var/turf/target_turf = get_turf(current_target)
|
||||
if(target_turf && istype(target_turf,valid_turf_type))
|
||||
last_detect = world.time
|
||||
else if((last_detect + 5 SECONDS) <= world.time)
|
||||
set_target(null)
|
||||
|
||||
@@ -23,6 +23,19 @@
|
||||
smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_MOONWATER
|
||||
canSmoothWith = SMOOTH_GROUP_MOONWATER
|
||||
|
||||
/turf/open/water/moonstation/infested
|
||||
|
||||
name = "carp-infested deep treacherous lunar water"
|
||||
desc = "Very dangerous lunar water. You feel like it would be a very bad idea to enter this water unprepared."
|
||||
|
||||
immerse_overlay = "immerse_deep"
|
||||
is_swimming_tile = TRUE
|
||||
|
||||
stamina_entry_cost = 25
|
||||
ticking_stamina_cost = 15
|
||||
ticking_oxy_damage = 2
|
||||
exhaust_swimmer_prob = 100
|
||||
|
||||
/turf/open/water/moonstation/surface
|
||||
|
||||
name = "lunar surface water"
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 419 B |
@@ -9055,6 +9055,7 @@
|
||||
#include "modular_zubbers\code\game\machinery\pipe\construction.dm"
|
||||
#include "modular_zubbers\code\game\objects\effects\landmarks.dm"
|
||||
#include "modular_zubbers\code\game\objects\effects\overlays.dm"
|
||||
#include "modular_zubbers\code\game\objects\effects\shark_infested_waters.dm"
|
||||
#include "modular_zubbers\code\game\objects\effects\decals\blood.dm"
|
||||
#include "modular_zubbers\code\game\objects\effects\decals\cleanable.dm"
|
||||
#include "modular_zubbers\code\game\objects\effects\decals\turfdecal\tilecoloring.dm"
|
||||
|
||||
Reference in New Issue
Block a user