Skip to content

Commit

Permalink
Icemoon Ruin: SRM Ice Lodge (#3291)
Browse files Browse the repository at this point in the history
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

Adds a new ruin, the Ice Lodge! Formerly an SRM settlement, Frontiersmen
have since come in and taken it over for their own use.

<details>
<summary>Screenshots (Updated as of 05/09)</summary>
<br>


![image](https://github.com/user-attachments/assets/d950e34e-baa2-4f38-89fa-ff967b52a088)



![image](https://github.com/user-attachments/assets/937f68f9-84b3-4958-9996-78a397a0f70a)


![icelodgenew](https://github.com/user-attachments/assets/dc34a037-ba30-473b-ba31-6bfab0befdce)


</details>

Adds two new Frontiersmen mobs based off the new roles, flametroopers
and surgeons.
Flametroopers will rush enemies and spray fire at their enemies.
Surgeons will fire syringes and attempt to sedate their enemies.

Modifies fireline code to support igniting tiles as an option.
Adds a var to hostile mob AI, shoot_point_blank. If enabled ranged mobs
can shoot their guns at melee range instead of melee attacking if
possible.

Deletes the cat butcher since the Surgeon fills the same niche and being
much less questionable.

Fences no longer call update fence status on initialize. All this did
was make closed fence doors spawn open and open fence doors spawn
closed.

Adds gunpowder barrels, broken display cases and random chemical jug
spawners, SRM corpse spawners for use in the ruin.

Adds a var for bullets, grown items, and nutrient bottles (auto_scatter)
so you can choose whether they scatter on initialize.

Fixes the pathing for some internals pathed frontiersmen simple mobs.

## Why It's Good For The Game

<!-- Please add a short description of why you think these changes would
benefit the game. If you can't justify it in words, it might not be
worth adding. -->
New ruins are good and the new frontiersmen simple mobs will hopefully
diversify the enemy roster nicely. The cat butcher is cruft, and won't
be missed.
## Changelog

:cl:
add: Ice Lodge Ruin Map and areas
add: Simple Mob Frontiersmen Flametrooper and Surgeon
add: shoot_point_blank option for simple mobs
add: dragon_fire_line supports igniting tiles
add: broken display case, gunpowder barrel, SRM corpse spawners,
chemical jug spawners
del: Cat Butcher
fix: Frontiersmen simplemob pathing
fix: Fence doors spawning open when they should be closed and vice versa
code: scattering can be disabled with auto_scatter var for bullets,
grown items and nutrient bottles
/:cl:

<!-- Both :cl:'s are required for the changelog to work! You can put
your name to the right of the first :cl: if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->

---------

Signed-off-by: Theos <[email protected]>
Co-authored-by: Theos <[email protected]>
  • Loading branch information
Gristlebee and SomeguyManperson authored Oct 16, 2024
1 parent ef3efbe commit ac84b9c
Show file tree
Hide file tree
Showing 20 changed files with 6,072 additions and 134 deletions.
5,838 changes: 5,838 additions & 0 deletions _maps/RandomRuins/IceRuins/icemoon_ice_lodge.dmm

Large diffs are not rendered by default.

8 changes: 8 additions & 0 deletions code/datums/ruins/icemoon.dm
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,11 @@
description = "Safety records for early Nanotrasen Spaceworks vessels were, and always have been, top of their class. Absolutely no multi-billion credit projects have been painstakingly erased from history. (Citation Needed)"
suffix = "icemoon_crashed_holemaker.dmm"
ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MINOR_LOOT, RUIN_TAG_SHELTER)

/datum/map_template/ruin/icemoon/ice_lodge
name = "Ice Lodge"
id = "ice_lodge"
description = "Records show this settlement as belonging to the SRM, but no one has heard from them as of late. I wonder what happened?"
suffix = "icemoon_ice_lodge.dmm"
ruin_tags = list(RUIN_TAG_HARD_COMBAT, RUIN_TAG_MAJOR_LOOT, RUIN_TAG_SHELTER, RUIN_TAG_HAZARDOUS)

22 changes: 22 additions & 0 deletions code/game/area/areas/ruins/icemoon.dm
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,25 @@
/area/ruin/unpowered/crashed_holemaker
name = "NTSV Holemaker II" // In honor of the kugelblitz shenanigan of all time
icon_state = "green"

// Ice Lodge

/area/ruin/powered/icemoon/lodge/mainhall
name = "Main Hall"
icon_state = "bridge_hallway"

/area/ruin/powered/icemoon/lodge/cellar
name = "Cellar"
icon_state = "yellow"

/area/ruin/powered/icemoon/lodge/montagne_office
name = "Montagne's Office"
icon_state = "bridge"

/area/ruin/powered/icemoon/lodge/residential
name = "Residential Quarters"
icon_state = "crew_quarters"

/area/ruin/powered/icemoon/lodge/gear_room
name = "Gear Room"
icon_state = "security"
15 changes: 15 additions & 0 deletions code/game/objects/effects/spawners/lootdrop.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1294,3 +1294,18 @@
/obj/item/storage/ration/cheese_pizza_slice = 5,
/obj/item/storage/ration/crayons = 2 // :)
)

/obj/effect/spawner/lootdrop/chem_jug
loot = list(
/obj/item/reagent_containers/glass/chem_jug/carbon,
/obj/item/reagent_containers/glass/chem_jug/oxygen,
/obj/item/reagent_containers/glass/chem_jug/nitrogen,
/obj/item/reagent_containers/glass/chem_jug/hydrogen,
/obj/item/reagent_containers/glass/chem_jug/radium,
/obj/item/reagent_containers/glass/chem_jug/aluminium,
/obj/item/reagent_containers/glass/chem_jug/chlorine,
/obj/item/reagent_containers/glass/chem_jug/copper,
/obj/item/reagent_containers/glass/chem_jug/bromine,
/obj/item/reagent_containers/glass/chem_jug/iodine,
/obj/item/reagent_containers/glass/chem_jug/potassium,
/obj/item/reagent_containers/glass/chem_jug/sulfur)
5 changes: 5 additions & 0 deletions code/game/objects/structures/displaycase.dm
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,11 @@
user.do_attack_animation(src, ATTACK_EFFECT_KICK)
take_damage(2)

/obj/structure/displaycase/broken
name = "broken display case"
desc = "A display case for prized possessions. Or at least it was, until someone smashed it open."
broken = 1

/obj/structure/displaycase_chassis
anchored = TRUE
density = FALSE
Expand Down
5 changes: 0 additions & 5 deletions code/game/objects/structures/fence.dm
Original file line number Diff line number Diff line change
Expand Up @@ -111,11 +111,6 @@
cuttable = FALSE
var/open = FALSE

/obj/structure/fence/door/Initialize()
. = ..()

update_door_status()

/obj/structure/fence/door/opened
icon_state = "door_opened"
open = TRUE
Expand Down
24 changes: 24 additions & 0 deletions code/game/turfs/open/floor/plating/icemoon.dm
Original file line number Diff line number Diff line change
Expand Up @@ -223,3 +223,27 @@
/turf/open/floor/plating/asteroid/snow/ice/burn_tile()
return FALSE

/turf/open/floor/wood/icemoon
baseturfs = /turf/open/floor/plating/asteroid/snow/ice/icemoon
initial_gas_mix = ICEMOON_DEFAULT_ATMOS
planetary_atmos = TRUE
slowdown = 0

/turf/open/floor/wood/ebony/icemoon
baseturfs = /turf/open/floor/plating/asteroid/snow/ice/icemoon
initial_gas_mix = ICEMOON_DEFAULT_ATMOS
planetary_atmos = TRUE
slowdown = 0

/turf/open/floor/plasteel/stairs/wood/icemoon
baseturfs = /turf/open/floor/plating/asteroid/snow/ice/icemoon
initial_gas_mix = ICEMOON_DEFAULT_ATMOS
planetary_atmos = TRUE
slowdown = 0

/turf/open/floor/concrete/slab_3/icemoon
baseturfs = /turf/open/floor/plating/asteroid/snow/ice/icemoon
initial_gas_mix = ICEMOON_DEFAULT_ATMOS
planetary_atmos = TRUE
slowdown = 0

8 changes: 8 additions & 0 deletions code/modules/hydroponics/fermenting_barrel.dm
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,14 @@
icon_state = closed_state
return ..()

/obj/structure/fermenting_barrel/gunpowder
name = "Gunpowder Barrel"
desc = "A wooden barrel packed with gunpowder. You should probably keep this away from sparks or open fires."

/obj/structure/fermenting_barrel/gunpowder/Initialize()
. = ..()
reagents.add_reagent(/datum/reagent/gunpowder, 200)

/obj/structure/fermenting_barrel/distiller
name = "Distiller"
icon_state = "distiller"
Expand Down
7 changes: 4 additions & 3 deletions code/modules/hydroponics/growninedible.dm
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
icon = 'icons/obj/hydroponics/harvest.dmi'
resistance_flags = FLAMMABLE
var/obj/item/seeds/seed = null // type path, gets converted to item on New(). It's safe to assume it's always a seed item.
var/auto_scatter = TRUE

/obj/item/grown/Initialize(newloc, obj/item/seeds/new_seed)
. = ..()
Expand All @@ -18,9 +19,9 @@
// This is for adminspawn or map-placed growns. They get the default stats of their seed type.
seed = new seed()
seed.adjust_potency(50-seed.potency)

pixel_x = base_pixel_x + rand(-5, 5)
pixel_y = base_pixel_y + rand(-5, 5)
if(auto_scatter)
pixel_x = base_pixel_x + rand(-5, 5)
pixel_y = base_pixel_y + rand(-5, 5)

if(seed)
// Go through all traits in their genes and call on_new_plant from them.
Expand Down
6 changes: 4 additions & 2 deletions code/modules/hydroponics/hydroitemdefines.dm
Original file line number Diff line number Diff line change
Expand Up @@ -179,11 +179,13 @@
volume = 50
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(1,2,5,10,15,25,50)
var/auto_scatter = TRUE

/obj/item/reagent_containers/glass/bottle/nutrient/Initialize()
. = ..()
pixel_x = base_pixel_x + rand(-5, 5)
pixel_y = base_pixel_y + rand(-5, 5)
if(auto_scatter)
pixel_x = base_pixel_x + rand(-5, 5)
pixel_y = base_pixel_y + rand(-5, 5)


/obj/item/reagent_containers/glass/bottle/nutrient/ez
Expand Down
30 changes: 30 additions & 0 deletions code/modules/mob/living/simple_animal/corpse.dm
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,13 @@
/obj/effect/mob_spawn/human/corpse/frontier/ranged
outfit = /datum/outfit/frontier

/obj/effect/mob_spawn/human/corpse/frontier/surgeon
outfit = /datum/outfit/job/frontiersmen/doctor/corpse

/datum/outfit/job/frontiersmen/doctor/corpse
name = "Frontiersmen Surgeon Corpse"
r_pocket = null

/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper
outfit = /datum/outfit/frontier/trooper

Expand Down Expand Up @@ -169,6 +176,17 @@
/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper/heavy/gunless
outfit = /datum/outfit/frontier/trooper/heavy/gunless

/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper/flame
outfit = /datum/outfit/job/frontiersmen/ert/flamer/corpse

/datum/outfit/job/frontiersmen/ert/flamer/corpse
name = "Frontiersman Flametrooper Corpse"
back = null
belt = /obj/item/storage/belt/security/military/frontiersmen
l_hand = null

backpack_contents = null

/datum/outfit/frontier/trooper/heavy/gunless
name = "Frontiersman Heavy Corpse (Gunless)"
back = null
Expand Down Expand Up @@ -251,3 +269,15 @@
id_job = "SolGov Sonnensoldner"
outfit = /datum/outfit/job/solgov/sonnensoldner
id_access_list = list(ACCESS_SOLGOV)

/obj/effect/mob_spawn/human/corpse/srm/hunter
name = "SRM Hunter"
id_job = "Hunter"
outfit = /datum/outfit/job/roumain/security
id_access_list = null

/obj/effect/mob_spawn/human/corpse/srm/montagne
name = "SRM Montagne"
id_job = "Hunter Montagne"
outfit = /datum/outfit/job/roumain/captain
id_access_list = null
31 changes: 29 additions & 2 deletions code/modules/mob/living/simple_animal/hostile/hostile.dm
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
var/check_friendly_fire = FALSE // Should the ranged mob check for friendlies when shooting
var/retreat_distance = null //If our mob runs from players when they're too close, set in tile distance. By default, mobs do not retreat.
var/minimum_distance = 1 //Minimum approach distance, so ranged mobs chase targets down, but still keep their distance set in tiles to the target, set higher to make mobs keep distance

var/shoot_point_blank = FALSE // If this mob will still shoot even in melee range.

//These vars are related to how mobs locate and target
var/robust_searching = 0 //By default, mobs have a simple searching method, set this to 1 for the more scrutinous searching (stat_attack, stat_exclusive, etc), should be disabled on most mobs
Expand Down Expand Up @@ -315,7 +315,10 @@
Goto(target,move_to_delay,minimum_distance)
if(target)
if(isturf(target_from.loc) && target.Adjacent(target_from)) //If they're next to us, attack
MeleeAction()
if(ranged && shoot_point_blank && ranged_cooldown <= world.time)
OpenFire(target)
else
MeleeAction()
else
if(rapid_melee > 1 && target_distance <= melee_queue_distance)
MeleeAction(FALSE)
Expand Down Expand Up @@ -698,3 +701,27 @@
if (length(initial(src.faction)) > 0)
src.faction += initial(src.faction)
src.faction += tag

/mob/living/simple_animal/hostile/proc/fire_line(source, list/turfs, fire_source = "fire breath", ignite_turfs = FALSE, power = 4, flame_color = "red")
var/list/hit_list = list()
for(var/turf/T in turfs)
if(istype(T, /turf/closed))
break
new /obj/effect/hotspot(T)
T.hotspot_expose(700,50,1)
if(ignite_turfs)
T.IgniteTurf(power,flame_color)
for(var/mob/living/L in T.contents)
if(L in hit_list || L == source)
continue
hit_list += L
L.adjustFireLoss(20)
to_chat(L, "<span class='userdanger'>You're hit by [source]'s [fire_source]!</span>")

// deals damage to mechs
for(var/obj/mecha/M in T.contents)
if(M in hit_list)
continue
hit_list += M
M.take_damage(45, BRUTE, "melee", 1)
sleep(1.5)
86 changes: 0 additions & 86 deletions code/modules/mob/living/simple_animal/hostile/human/cat_butcher.dm

This file was deleted.

Loading

0 comments on commit ac84b9c

Please sign in to comment.