Skip to content

Conversation

west3436
Copy link
Collaborator

@west3436 west3436 commented May 10, 2025

What this does

Adds a Procedural Generation mechanic, heavily ported from Shiptest. This is the first of many PRs to flesh out the system, but the goal here is to offer more opportunities for exploration by traveling to procgenned planetoids for various loot, research, or vaults. These z-levels will be accessed either via the gateway or via the research shuttle after using a new scanner in R&D which will consume copious amounts of power to produce a new map. Future exploration method will involve either custom shuttles or a new Exploration Shuttle. Opening this now as draft as I am seeking additional sprites for unique turfs, fauna, and features as well as ruins to place.

Images

All images below represent the current state of procgen; I plan to tweak these extensively before this is ready.

Desert
image

Beach
image

Xeno
image

Snow (very WIP)
image

Lava
image

Grass
image

Jungle
image

Tasks

Generators:

Misc:

NEED SUPPORT:

  • Ruins

Why it's good

It's fun!

How it was tested

TBD

Changelog

🆑

  • rscadd: Added procedurally-generated maps for exploration.

@west3436 west3436 added Content Adds something. Neat! Port Stolen/Ported from another codebase. WiP I'm not completely done yet! labels May 10, 2025
Copy link
Collaborator

@ShiftyRail ShiftyRail left a comment

Choose a reason for hiding this comment

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

Couple of things. Purely stylistic choice but I don't like the space in modules/procedural mapping, much like I would like our client procs.dm to be renamed with an underscore. This is probably not that important though.

// IF YOU ADD NEW A NEW RUIN TYPE
// PLEASE MAKE SURE YOU ADD IT TO THE BELOW LIST AND PROC!

#define RUINTYPE_LIST_ALL list(\
Copy link
Collaborator

Choose a reason for hiding this comment

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

Why not use a global list ? In fact I'm pretty sure it'd be a lot more efficient to have one global list (or a static list on a datum) shared by all procs than just instantiate a new list everytime you need it. You don't appear to even use this ?

var/list/ruin_templates = list()
if(used_ruin)
var/turf/ruin_turf = locate(
rand(
Copy link
Collaborator

Choose a reason for hiding this comment

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

A bit ugly. Why not have intermediate variables ?

var/ruin_turf_x = rand(11, 100-used_ruin.width-6 - 11) // Why not -17 ?
var/ruin_turf_y = (100-used_ruin.width-6 - 11)
var/turf/ruin_turf = locate(ruin_turf_x, ruin_turf_y, world.maxz)

@CrazyAmphibian
Copy link
Contributor

junglebros, not like this...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Content Adds something. Neat! Port Stolen/Ported from another codebase. WiP I'm not completely done yet!
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants