New Away Site: Hiskyn Treasure Trove (#21324)

EDIT: This is complete and no longer a work in progress. I've tried to
make sure that everything is tested and working properly but if there
are issues please let me know.

This away site is intended to be a high risk, high reward, encounter.
I'm also attempting to increase its replayability by incorporating a
number of sections and submaps that will be newly generated each time.

Things added or changed:
- Additional traps and environmental hazards.
- Lava is now more deadly. It used to only set you on fire, now it will
burn you appropriately.
- Minor sprite fixes for uncommon elements for easier mapping; throwers,
step triggers.
- Map and associated files, submap json, landmarks, areas, ect.

---------

Signed-off-by: Evandorf <ej_denton@msn.com>
Co-authored-by: Kano <89972582+kano-dot@users.noreply.github.com>
This commit is contained in:
Evandorf
2025-10-16 20:04:28 +00:00
committed by GitHub
co-authored by Kano
parent 868f199131
commit 4e2d34df8f
27 changed files with 184717 additions and 174 deletions
@@ -207,6 +207,9 @@
var/explosion_size = 3
var/spread_range = 7
/obj/item/landmine/frag/deployed
deployed = TRUE
/obj/item/landmine/frag/trigger(mob/living/triggerer)
spark(src, 3, GLOB.alldirs)
fragem(src,num_fragments,num_fragments,explosion_size,explosion_size+1,fragment_damage,damage_step,TRUE)
@@ -304,6 +307,9 @@
/obj/item/landmine/phoron
icon_state = "phoronlandmine"
/obj/item/landmine/phoron/deployed
deployed = TRUE
/obj/item/landmine/phoron/trigger(mob/living/triggerer)
spark(src, 3, GLOB.alldirs)
for (var/turf/simulated/floor/target in range(1,src))
@@ -322,6 +328,9 @@
/obj/item/landmine/n2o
icon_state = "phoronlandmine"
/obj/item/landmine/n2o/deployed
deployed = TRUE
/obj/item/landmine/n2o/trigger(mob/living/L)
spark(src, 3, GLOB.alldirs)
for (var/turf/simulated/floor/target in range(1,src))
@@ -338,6 +347,9 @@
/obj/item/landmine/emp
icon_state = "emplandmine"
/obj/item/landmine/emp/deployed
deployed = TRUE
/obj/item/landmine/emp/trigger(mob/living/triggerer)
spark(src, 3, GLOB.alldirs)
empulse(src.loc, 2, 4)
+24 -25
View File
@@ -209,29 +209,28 @@
desc = "This is a random soap."
icon = 'icons/obj/soap.dmi'
icon_state = "soap"
/obj/random/soap/item_to_spawn()
return pick(/obj/item/soap, \
/obj/item/soap/nanotrasen, \
/obj/item/soap/deluxe,\
/obj/item/soap/space_soap,\
/obj/item/soap/space_soap,\
/obj/item/soap/water_soap,\
/obj/item/soap/fire_soap,\
/obj/item/soap/rainbow_soap,\
/obj/item/soap/diamond_soap,\
/obj/item/soap/uranium_soap,\
/obj/item/soap/silver_soap,\
/obj/item/soap/brown_soap,\
/obj/item/soap/white_soap,\
/obj/item/soap/grey_soap,\
/obj/item/soap/pink_soap,\
/obj/item/soap/purple_soap,\
/obj/item/soap/blue_soap,\
/obj/item/soap/cyan_soap,\
/obj/item/soap/green_soap,\
/obj/item/soap/yellow_soap,\
/obj/item/soap/orange_soap,\
/obj/item/soap/red_soap,\
/obj/item/soap/golden_soap,\
spawnlist = list(
/obj/item/soap,
/obj/item/soap/nanotrasen,
/obj/item/soap/deluxe,
/obj/item/soap/space_soap,
/obj/item/soap/space_soap,
/obj/item/soap/water_soap,
/obj/item/soap/fire_soap,
/obj/item/soap/rainbow_soap,
/obj/item/soap/diamond_soap,
/obj/item/soap/uranium_soap,
/obj/item/soap/silver_soap,
/obj/item/soap/brown_soap,
/obj/item/soap/white_soap,
/obj/item/soap/grey_soap,
/obj/item/soap/pink_soap,
/obj/item/soap/purple_soap,
/obj/item/soap/blue_soap,
/obj/item/soap/cyan_soap,
/obj/item/soap/green_soap,
/obj/item/soap/yellow_soap,
/obj/item/soap/orange_soap,
/obj/item/soap/red_soap,
/obj/item/soap/golden_soap,
)
+52 -1
View File
@@ -256,7 +256,7 @@
/obj/item/trap/punji/attack_mob(mob/living/L)
//Reveal the trap, if not already visible
hide(FALSE)
invisibility = 0
//Select a target zone
var/target_zone
@@ -352,6 +352,57 @@
deployed = TRUE
anchored = TRUE
/obj/item/trap/punji/deployed/hidden
invisibility = INVISIBILITY_MAXIMUM
/obj/item/trap/jagged_rock
name = "treacherous rock"
desc = "A jagged and dangerous outcropping."
icon = 'icons/obj/flora/rocks_grey.dmi'
icon_state = "basalt"
anchored = TRUE
invisibility = 0
/obj/item/trap/jagged_rock/on_entered(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs)
if(isliving(arrived))
var/mob/living/L = arrived
attack_mob(L)
update_icon()
/obj/item/trap/jagged_rock/attack_mob(mob/living/L)
//Select a target zone
var/target_zone
if(L.lying)
target_zone = pick(BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_L_HAND, BP_L_ARM, BP_R_HAND, BP_R_ARM)
else
target_zone = pick(BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG)
//Try to apply the damage
var/success = L.apply_damage(50, DAMAGE_BRUTE, target_zone, used_weapon = src, armor_pen = activated_armor_penetration)
//Apply weakness, so the victim doesn't walk immediately back out of the trap
L.Weaken(10)
//If successfully applied, give the message
if(success)
//Give a simple message and return if it's not a human
if(!ishuman(L))
L.visible_message(SPAN_DANGER("[L] slams into \the [src]!"))
return
var/mob/living/carbon/human/human = L
var/obj/item/organ/organ = human.get_organ(target_zone)
if(isipc(L) || isrobot(L))
playsound(src, 'sound/weapons/smash.ogg', 100, TRUE)
else
playsound(src, 'sound/weapons/heavysmash.ogg', 100, TRUE)
human.visible_message(SPAN_DANGER("\The [human] slams into \the [src]!"),
SPAN_WARNING(FONT_LARGE(SPAN_DANGER("You crash on \the [src], feel your body crumble, and something sharp penetrate your [organ.name]!"))),
SPAN_WARNING("<b>You feel your body crumble, and something sharp penetrate your [organ.name]!</b>"))
/**
* # Animal trap
*