Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Thermo-Bluespace Generator (groundside gens rework) #16889

Open
wants to merge 14 commits into
base: master
Choose a base branch
from

Conversation

breadhunt
Copy link
Contributor

@breadhunt breadhunt commented Jan 10, 2025

About The Pull Request

[TM because walance + I did all of the mapping at 2am and need to double check it all]

Adds the thermo-bluespace generator to all groundside maps. (Some regular geothermal gens still exist.)

The bluespace gen is a powerful but volatile generation method used on the colonies of the outer rim. Its bluespace fuel source is easy to deliver and incredibly efficient.

Intention is to make gens a secondary objective which gives an actual goal for multiple squads (i.e one on disks; one on gens).

  • Triples disk speed while active (90s per stage -> 30s)
  • However; if xenos destroy it it will enter meltdown and blow up
  • Generator can be repaired after explosions are finished (dunno if this will stay)

Video example of meltdown because github won't let me embed: https://cdn.discordapp.com/attachments/500801682058379265/1326905126555881502/generator.mp4?ex=67812032&is=677fceb2&hm=de6aa5e49a27694f43f774d1a055eaf9696c5c767f111d6749abbd77ab92d0e3&

Why It's Good For The Game

Currently all we have for non-disk objectives is req-oriented stuff which 1) is incredibly obtuse to operate and 2) relies on the RO being both competent and present (lol).

This provides a high-risk high-reward secondary objective which should lead to more actual plans (e.g secure gens so that caves disk can be speedran) with still some counterplay for xenos (if they hit gens they get to wipe out that squad pretty easily thanks to explosion forcing them to move)

While I am wary of adding a "sit and wait for xenos to come to you" objective, I think that this one gets a pass for a few reasons:

  • You won't be holding it for the entire round. Something like FOB/tcomms/miner there's no point where you shouldn't be holding it, or xenos will get it. With gens
  • It's directly beneficial. You can hold a miner for an entire round, earn thousands of points, for actual impact on the round. This has a direct, clear impact - and if it doesn't, it's directly your fault.
  • You (should) be forced to hold outside of the area. Hold objectives tend to get samey because it's very clear where you're supposed to defend - the area inside generators. Generator meltdown should make that risky; you have to push aggressively, and choose where around the generator to build your outpost rather than having one fixed "on" the objective.

Changelog

🆑
add: Thermo-Bluespace Generator. Triples disk speed while active; explodes when destroyed by xenos.
imageadd: tbg.dmi
soundadd: tbg_windup, tbg_winddown, tbg_mid1, tbg_mid2, tbg_mid3, tbg_mid4, tbg_mid5, tbg_alarm
/:cl:

@tgstation-server tgstation-server added Sprites Changes to .dmi file. Sound Sound change. Map Edit One or more changes to .dmm files. Feature New interesting mechanics with new interesting bugs UI We make things worse, but rounder labels Jan 10, 2025
@blackdav123
Copy link
Contributor

Awesome pr, would definitely like to see it tested

I am concerned about the maps with disks directly next to the generator such as ice colony, LV624, lawanka, research outpost, gelida, icy caves, and riptide.

I think the opportunity cost is too low to justify including it in these spots and in some cases on these maps in general.
The way I see it, this should be included on maps where the locations do not currently have a large enough incentive for marines to push the locations. The locations on maps like Daedalus and Kutjevo are both just enough out of the way that marines will rarely visit them, and therefore this new objective works very well on those maps.

Smaller maps like the crash ones may also be too small to justify these, as if marines are ahead it'll likely turn into a very fast win using these.

Overall I am very excited to see new map objectives though I do not believe they will fit into every one of our maps. Keep up the good work!

@SimplySmiley123
Copy link

Would be nice if this works but not sure marines will bother to split up for it yet, not with how things are balanced lmfao.

@Aporhtonoma
Copy link
Contributor

will it have a health bar like a turret or will it need a windup like a miner ,also will it be susceptible to chem clouds like sents and boiler. Because if a sentinel just lobs a nade or boiler rng misses the cades and nails the reactor and that makes it go boom it will be pretty dangerous for marines to bother.

@breadhunt
Copy link
Contributor Author

will it have a health bar like a turret or will it need a windup like a miner ,also will it be susceptible to chem clouds like sents and boiler. Because if a sentinel just lobs a nade or boiler rng misses the cades and nails the reactor and that makes it go boom it will be pretty dangerous for marines to bother.

Windup like miner & isn't affected by clouds

I am concerned about the maps with disks directly next to the generator such as ice colony, LV624, lawanka, research outpost, gelida, icy caves, and riptide.

Agreed but I'd like to try it out anyway

@iforgotmeword
Copy link

hey shouldn't you make it so if a xenos is damaged while breaking the gen the cast is broken like with drains

@zzurge
Copy link

zzurge commented Jan 13, 2025

Its been a while since someone thought about something for engineers to do other than miners

@Arturlang
Copy link
Contributor

hey shouldn't you make it so if a xenos is damaged while breaking the gen the cast is broken like with drains

Please no, that would mean it's only possible to destroy when xenos have already won

Copy link
Contributor

This PR has been inactive for long enough to be automatically marked as stale. This means it is at risk of being auto closed in ~ 3 days, please address any outstanding review items and ensure your PR is finished, if these are all true and you are auto-staled anyway, you need to actively ask maintainers if your PR will be merged. Once you have done any of the previous actions then you should request a maintainer remove the stale label on your PR, to reset the stale timer. If you feel no maintainer will respond in that time, you may wish to close this PR youself, while you seek maintainer comment, as you will then be able to reopen the PR yourself

@github-actions github-actions bot added the Stale Pull request is awaiting delayed author response and may be closed. label Jan 24, 2025
@TiviPlus TiviPlus removed the Stale Pull request is awaiting delayed author response and may be closed. label Jan 24, 2025
Copy link
Contributor

github-actions bot commented Feb 1, 2025

This PR has been inactive for long enough to be automatically marked as stale. This means it is at risk of being auto closed in ~ 3 days, please address any outstanding review items and ensure your PR is finished, if these are all true and you are auto-staled anyway, you need to actively ask maintainers if your PR will be merged. Once you have done any of the previous actions then you should request a maintainer remove the stale label on your PR, to reset the stale timer. If you feel no maintainer will respond in that time, you may wish to close this PR youself, while you seek maintainer comment, as you will then be able to reopen the PR yourself

@github-actions github-actions bot added the Stale Pull request is awaiting delayed author response and may be closed. label Feb 1, 2025
@TiviPlus TiviPlus removed the Stale Pull request is awaiting delayed author response and may be closed. label Feb 4, 2025
Copy link
Member

@TiviPlus TiviPlus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry for the delay

impressed with your code quality though good job

Comment on lines +11 to +16
/// List of active generators groundside
var/generators_on_ground
/// List of active TBG generators; used for disks
var/active_bluespace_generators
/// List of lights for the TBG generator
var/generator_alarm_lights = list()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are these vars here and not a glob /on the generator itself

Comment on lines +24 to +25
///How much faster disk generators get while the colony power speed boost is active
var/overclock_multiplier = 3.0
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

shouldnt this be a define? also dont use decimals if you dont need em

Comment on lines +203 to +206
if(current_timer)
deltimer(current_timer)
var/seconds_remaining = (seconds_elapsed SECONDS) - (segment_time*completed_segments)
current_timer = addtimer(CALLBACK(src, PROC_REF(complete_segment)), (segment_time-seconds_remaining)/overclock_multiplier, TIMER_STOPPABLE)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Couldnt you also use timeleft instead of this math? Any particular reason you did it this way?

Comment on lines +207 to +209

///Stops the overclock boost; called when xenos take down colony power again
/obj/machinery/computer/nuke_disk_generator/proc/stop_power_overclocking()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

couldnt you merge these two procs and just make it a toggle instead?

Comment on lines +126 to +130
balloon_alert_to_viewers("[src] begins to whirr as it powers up.")
if(50)
balloon_alert_to_viewers("[src] begins to hum loudly as it reaches half capacity.")
if(100)
balloon_alert_to_viewers("[src] rumbles loudly as the combustion and thermal chambers reach full strength.")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dont use name inserts in baloon alerts: players see its above the generator they can see whats doing it

COOLDOWN_START(src, toggle_power, 10 SECONDS)
ambient_soundloop.start()
SSmachines.active_bluespace_generators++
SEND_SIGNAL(SSmachines, COMSIG_GLOB_BLUESPACE_GEN_ACTIVATED)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we have global signals fyi - see SEND_GLOBAL_SIGNAL

Comment on lines +435 to +436
if(!..())
return FALSE
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

prefer . = ..() usage

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

its safer if theres a runtime and it means less boilerplate changes when the code is chaged later

Comment on lines +460 to +470
//Time until explosion -- Devastate range -- Heavy range -- Light range -- Fire range
var/list/list_of_explosions = list(
list(0, 5, 10, 2, 40 SECONDS),
list(0, 10, 15, 7, 43 SECONDS),
list(0, 10, 17, 7, 45 SECONDS),
list(0, 15, 20, 15, 46 SECONDS),
list(0, 15, 20, 15, 47 SECONDS),
list(0, 15, 20, 15, 49 SECONDS),
list(0, 15, 20, 15, 50 SECONDS),
list(0, 15, 20, 15, 52 SECONDS)
)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

comment wrong

. += image(icon, src, "circ_overlay_corrupted", layer)

// Forward all repair/xeno attack actions to the central TBG engine
/obj/machinery/power/tbg_turbine/welder_act/(mob/living/user, obj/item/I)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/obj/machinery/power/tbg_turbine/welder_act/(mob/living/user, obj/item/I)
/obj/machinery/power/tbg_turbine/welder_act(mob/living/user, obj/item/I)

/obj/machinery/power/geothermal/tbg/proc/trigger_alarms()
alarm_soundloop.start()
//Trigger alarm lights
for(var/obj/machinery/floor_warn_light/toggleable/generator/light in SSmachines.generator_alarm_lights)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fyi you can use
for(x AS in y)
to make it skip type checks in these lists

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Feature New interesting mechanics with new interesting bugs Map Edit One or more changes to .dmm files. Sound Sound change. Sprites Changes to .dmi file. UI We make things worse, but rounder
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants