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

Adds strains framework #15790

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

Adds strains framework #15790

wants to merge 4 commits into from

Conversation

TiviPlus
Copy link
Member

@TiviPlus TiviPlus commented May 2, 2024

About The Pull Request

To add a strain just add a child with a UPGRADE_BASETYPE upgrade to a castedatum has a flag for snowflake like weapon x

Why It's Good For The Game

this intended for sidegrades within the same castes role

@yyzsong
Copy link
Contributor

yyzsong commented May 2, 2024

peak is here

@TiviPlus TiviPlus added the Feature New interesting mechanics with new interesting bugs label May 3, 2024
to_chat(src, span_warning("Your caste swap timer is not done yet."))
return

SStgui.close_user_uis(src, GLOB.evo_panel)
ADD_TRAIT(src, TRAIT_CASTE_SWAP, TRAIT_CASTE_SWAP)
GLOB.evo_panel.ui_interact(src)

/mob/living/carbon/xenomorph/verb/strain_swap()
Copy link
Contributor

Choose a reason for hiding this comment

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

Verb ?

Copy link
Member Author

Choose a reason for hiding this comment

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

We still dont have an option for this, and caste swap/evo/regress are the same so

Comment on lines 250 to 253
var/datum/xeno_caste/root_type = type
while(initial(root_type.parent_type) != /datum/xeno_caste)
root_type = initial(root_type.parent_type)
var/list/candidates = typesof(root_type)
Copy link
Contributor

Choose a reason for hiding this comment

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

Why do you have to do this ?

Copy link
Member Author

Choose a reason for hiding this comment

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

We get the child of xeno_caste (e.g runner) then get all children of that to find the strains

Copy link
Contributor

Choose a reason for hiding this comment

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

Why not a Glob list somewhere ? less snowflaky

Copy link
Member Author

Choose a reason for hiding this comment

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

How so? I need to return the strains for a given type, and I dont want to force people to add defines to everything for a glob lookup

Copy link
Contributor

Choose a reason for hiding this comment

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

Can't you just have a GLOBAL_LIST_INIT to do this?

Copy link
Member Author

Choose a reason for hiding this comment

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

Done

Copy link
Contributor

@Lumipharon Lumipharon left a comment

Choose a reason for hiding this comment

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

Rest looks good otherwise.

As I've brought up before though, I still don't understand codewise what the difference is between something being a strain vs just being a new caste.

We no longer have evo paths so we can evo to everything, and can swap between castes at will (with changing strain literally using the same timer)... So other than organising them in the hive UI, wouldn't it just be easier to treat them as new castes?

Like it can still be caste/runner/snowflake or whatever, but you just evo directly to it, instead of evo'ing runner, then swapping to snowflake strain.

All this is really doing is adding evo paths back in a more limited fashion.

I'm happy to merge if you disagree, but this seems to just be a more complicated way to get the exact same result.

Comment on lines 250 to 253
var/datum/xeno_caste/root_type = type
while(initial(root_type.parent_type) != /datum/xeno_caste)
root_type = initial(root_type.parent_type)
var/list/candidates = typesof(root_type)
Copy link
Contributor

Choose a reason for hiding this comment

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

Can't you just have a GLOBAL_LIST_INIT to do this?

@lKiseki
Copy link
Contributor

lKiseki commented May 19, 2024

I'm happy to merge if you disagree, but this seems to just be a more complicated way to get the exact same result.

Making new castes is not always a good solution, and you can see why if you compare the Crusher to the Bull. The latter could easily be a strain of the former, especially because it just doesn't work as a standalone caste. It could be fun and interesting to design minor variations of existing castes that offer slightly different gameplay experiences. Having to make an entirely new thing, on the other hand, is much more difficult by comparison. I would very much prefer having strains.

@Lumipharon
Copy link
Contributor

Lumipharon commented May 19, 2024

I'm happy to merge if you disagree, but this seems to just be a more complicated way to get the exact same result.

Making new castes is not always a good solution, and you can see why if you compare the Crusher to the Bull. The latter could easily be a strain of the former, especially because it just doesn't work as a standalone caste. It could be fun and interesting to design minor variations of existing castes that offer slightly different gameplay experiences. Having to make an entirely new thing, on the other hand, is much more difficult by comparison. I would very much prefer having strains.

This has nothing to do with the ingame stats/abilities/appearance of a strain. I don't know why people seem confused by this every time I bring it up. Nothing I am saying is 'don't do strains'.
I am saying any xeno created as a strain is codewise just a new caste, and ingame the only difference between a new caste and a new strain is the strain has an arbitrary extra step to get to (i.e. you gotta evo/caste swap to the base caste THEN strain swap to the strain), which is literally just readding evo paths but more limited.

So if the only thing added by implementing strains IN THIS SPECIFIC WAY, is just readding evo paths, which is something we deliberately removed very recently... why not just implement strains without this pointless restriction?

@TiviPlus
Copy link
Member Author

As I've brought up before though, I still don't understand codewise what the difference is between something being a strain vs just being a new caste.

Codewise its the same yea
Point being is at the end of the day we can have the same role with multiple flavors. e.g different boiler is siege bombarder but you can have a few tweaks to tailor to precise player playtypes

@Lumipharon
Copy link
Contributor

Lumipharon commented May 21, 2024

I am not saying don't do strains, for the love of god stop interpreting it as that.

All I am saying is why require players to evolve or swap to runner, before being able to strain swap to acid runner or whatever?
Just treat the strains how we treat castes. Larva evolves directly to acid runner, or hivelord devolves directly to acid runner, or defender just swaps directly to acid runner etc.

We only just recently removed evolution paths since that was considered bad/limiting for xenos, but we're just readding it but specifically for strains? Why?

I've asked if this is for balance before in the past but never got a straight answer because ever seems to think I am saying not to do strains at all.

@lKiseki
Copy link
Contributor

lKiseki commented May 21, 2024

All I am saying is why require players to evolve or swap to runner, before being able to strain swap to acid runner or whatever? Just treat the strains how we treat castes. Larva evolves directly to acid runner, or hivelord devolves directly to acid runner, or defender just swaps directly to acid runner etc.

If what you're referring to is "why not add the option to evo straight to a strain from the evo menu", it's probably because that's convoluted and would either extend the list to be really obnoxiously long, or require a redesign of the TGUI interface, probably with collapsible lists per caste. It's easier at the moment to just do it this way, even if it requires an extra step. If someone else wants to go the extra mile, they can do that in the future.

(also merge this so i can start throwing strain PRs at the wall pls)

@Lumipharon
Copy link
Contributor

The argument for adding an entire extra mechanic (that shares a time gate with caste swapping) due to not having enough space in a window that can be any size is uh, highly questionable.

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
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants