Skip to content

Commit

Permalink
dense obstructions
Browse files Browse the repository at this point in the history
  • Loading branch information
X0-11 committed Jul 14, 2024
1 parent 8a72e65 commit 0c59667
Show file tree
Hide file tree
Showing 3 changed files with 140 additions and 3 deletions.
1 change: 1 addition & 0 deletions baystation12.dme
Original file line number Diff line number Diff line change
Expand Up @@ -2116,6 +2116,7 @@
#include "code\modules\halo\structures\closets.dm"
#include "code\modules\halo\structures\cryopod.dm"
#include "code\modules\halo\structures\decals.dm"
#include "code\modules\halo\structures\dense_obstructions.dm"
#include "code\modules\halo\structures\diesel_gen.dm"
#include "code\modules\halo\structures\electric_fence.dm"
#include "code\modules\halo\structures\explosive.dm"
Expand Down
7 changes: 4 additions & 3 deletions code/modules/halo/structures/_destructible.dm
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
var/health = 200
var/maxHealth = 200
var/closerange_freefire = 1 //mobs within 1 tile are allowed to shoot through if set to 1
var/climb_desc = "climb over"
var/list/maneuvring_mobs = list()
var/repair_material_name
var/cover_rating = 10
Expand Down Expand Up @@ -351,12 +352,12 @@
var/turf/T = get_step(user, climb_dir)
if(T.CanPass(user, T))
user.dir = climb_dir
to_chat(user, "<span class='notice'>You start climbing over [src]...</span>")
to_chat(user, "<span class='notice'>You start to [climb_desc] [src]...</span>")
if(do_after(user, mob_climb_time))
src.visible_message("<span class='info'>[user] climbs over [src].</span>")
src.visible_message("<span class='info'>[user] begins to [climb_desc] [src].</span>")
user.loc = T
else
to_chat(user,"<span class='warning'>You cannot climb over [src] as it is being blocked.</span>")
to_chat(user,"<span class='warning'>You cannot [climb_desc] [src] as it is being blocked.</span>")

/obj/structure/destructible/proc/verb_climb()
set name = "Climb over structure"
Expand Down
135 changes: 135 additions & 0 deletions code/modules/halo/structures/dense_obstructions.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@

#define DENSE_OBSTRUCTION_PATH_ITER_CAP 25

//Used for fields of obstructing trees, boulders, flora, etc. Takes a while to pass over them, and blocks view, but can be destroyed with enough firepower.
//You could also just use this for normal clusters of icons by removing the density, I suppose.

/obj/structure/destructible/dense_obstruction
name = "dense obstruction"
desc = "A dense obstruction."
icon = 'code/modules/halo/flora/jungleflora.dmi'
icon_state = "bush_1"
climb_desc = "manouver past"
plane = ABOVE_HUMAN_PLANE
opacity = 1
alpha = 150
pixel_x = 0
health = 2000
maxHealth = 2000
closerange_freefire = 0
bump_climb = 1
mob_climb_time = 4 SECONDS
explosion_damage_mult = 0.1
var/list/states_ignore = list("rocks_1","rocks_2","rocks_3","rocks_4") //States in the provided icon file to ignore whilst randomising tree type.
var/max_offset = 12
var/min_offset = -12
var/obstruction_num = 5 //How many obstacles make up our density?

var/obst_num_hp_cache = 0//Internal use only.
var/next_icon_loss_threshold = 0

/obj/structure/destructible/dense_obstruction/update_icon()
if(obst_num_hp_cache == 0)
obst_num_hp_cache = maxHealth / obstruction_num //Our HP interval to lose an icon.
next_icon_loss_threshold = maxHealth - obst_num_hp_cache
if(overlays.len == 0) //Only on first init.
icon_state = "blank" //The baseline icon shouldn't be visible.
var/icon/icon_obj = new(icon)
var/list/valid_Istates = icon_obj.IconStates() - states_ignore
qdel(icon_obj)
for(var/iter = 0 to obstruction_num)
var/image/I = image(icon,pick(valid_Istates))
var/x_offset = rand(min_offset,max_offset)
var/y_offset = rand(min_offset,max_offset)
I.pixel_x = src.pixel_x + x_offset
I.pixel_y = src.pixel_y + y_offset
I.alpha = alpha
overlays += I
else
if(health < next_icon_loss_threshold)
next_icon_loss_threshold -= obst_num_hp_cache
var/image/img = overlays[overlays.len]
overlays -= img


/obj/structure/destructible/dense_obstruction/Initialize()
. = ..()
update_icon()


//Variants//
/obj/structure/destructible/dense_obstruction/flora_assorted
name = "dense flora"
desc = "Hard to see through, and hard to move through. Can be destroyed with enough concentrated firepower."
icon = 'code/modules/halo/flora/ausflora.dmi'
icon_state = "fern_1"
states_ignore = list() //States in the provided icon file to ignore whilst randomising tree type.
max_offset = 7
min_offset = -7
obstruction_num = 4

/obj/structure/destructible/dense_obstruction/flora_jungle
name = "dense flora"
desc = "Hard to see through, and hard to move through. Can be destroyed with enough concentrated firepower."
icon = 'code/modules/halo/flora/jungleflora.dmi'
icon_state = "bush_1"
states_ignore = list("rocks_1","rocks_2","rocks_3","rocks_4") //States in the provided icon file to ignore whilst randomising tree type.
max_offset = 10
min_offset = -10
obstruction_num = 6

/obj/structure/destructible/dense_obstruction/flora_jungle_large
name = "dense flora"
desc = "Hard to see through, and hard to move through. Can be destroyed with enough concentrated firepower."
icon = 'code/modules/halo/flora/swamp_ausflora_large.dmi'
icon_state = "bush_1"
pixel_x = -16
states_ignore = list("rocks_1","rocks_2","rocks_3","rocks_4") //States in the provided icon file to ignore whilst randomising tree type.
max_offset = 10
min_offset = -10
obstruction_num = 3

/obj/structure/destructible/dense_obstruction/rocks
name = "boulders"
desc = "Hard to see through, and hard to move through. Can be destroyed with enough concentrated firepower."
icon = 'code/modules/halo/flora/jungleflora.dmi'
icon_state = "rocks_1"
states_ignore = list("bush_1","bush_2","bush_3") //States in the provided icon file to ignore whilst randomising tree type.
max_offset = 10
min_offset = -10
obstruction_num = 5

/obj/structure/destructible/dense_obstruction/rocks_large
name = "boulders"
desc = "Hard to see through, and hard to move through. Can be destroyed with enough concentrated firepower."
icon = 'code/modules/halo/flora/swamp_ausflora_large.dmi'
icon_state = "rocks_1"
pixel_x = -16
states_ignore = list("bush_1","bush_2","bush_3") //States in the provided icon file to ignore whilst randomising tree type.
max_offset = 10
min_offset = -10
obstruction_num = 3

/obj/structure/destructible/dense_obstruction/trees
name = "dense trees"
desc = "Hard to see through, and hard to move through. Can be destroyed with enough concentrated firepower."
icon = 'code/modules/halo/flora/jungletree.dmi'
icon_state = "tree_1"
states_ignore = list() //States in the provided icon file to ignore whilst randomising tree type.
pixel_x = -32
pixel_y = -6
max_offset = 7
min_offset = -7
obstruction_num = 2

/obj/structure/destructible/dense_obstruction/trees_large
name = "dense trees"
desc = "Hard to see through, and hard to move through. Can be destroyed with enough concentrated firepower."
icon = 'code/modules/halo/flora/jungletreelarge.dmi'
icon_state = "tree_1"
states_ignore = list() //States in the provided icon file to ignore whilst randomising tree type.
pixel_x = -64
pixel_y = -16
max_offset = 7
min_offset = -7
obstruction_num = 2

0 comments on commit 0c59667

Please sign in to comment.