Scaling cap of sentient zombies to alive marines#18608
Conversation
Lumipharon
left a comment
There was a problem hiding this comment.
Idea is good but there looks like there's a huge number of ways for this list to stop tracking accurately.
This should really be handled by signals or something, this is very snowflake right now.
| if(!iszombie(src) && !should_zombify) | ||
| offer_mob() |
There was a problem hiding this comment.
I don't get this, shouldn't you just be setting should_offer_to_ghost to false if we don't want to offer it?
| if(client) | ||
| GLOB.possessed_sentient_zombie_list += src |
There was a problem hiding this comment.
Isn't this going to trigger multiple times for the same mob?
| if(H in GLOB.possessed_sentient_zombie_list) | ||
| GLOB.possessed_sentient_zombie_list -= H |
There was a problem hiding this comment.
afaik there's no point in checking with in, since -= H will already search the list anyway, so this is just doing it twice.
| if(src in GLOB.possessed_sentient_zombie_list) | ||
| GLOB.possessed_sentient_zombie_list -= src |
There was a problem hiding this comment.
same as above, also this is cursed because you're putting it in the verb instead of the actual ghostize proc.
Lumipharon
left a comment
There was a problem hiding this comment.
As mentioned on discord, this needs to be reworked to be clean, as this is adding mode specific code all over the place and has various missed scenarios that will break the functionality.
This reverts commit f5ff778.
| if(client) | ||
| SEND_SIGNAL(SSdcs, COMSIG_MOB_POSSESSED, src) |
There was a problem hiding this comment.
you cannot send the same signal from different places.
| /mob/proc/get_liquid_slowdown() | ||
| return MOB_WATER_SLOWDOWN | ||
|
|
||
| /mob/proc/can_take_mob(mob/M) |
| /// We start fading out the human and qdel them in set time | ||
| /datum/species/zombie/proc/fade_out_and_qdel_in(mob/living/carbon/human/H, time = 5 SECONDS) | ||
| GLOB.round_statistics.zombies_permad++ | ||
| SEND_SIGNAL(SSdcs, COMSIG_MOB_GHOSTIZE, src, FALSE) |
There was a problem hiding this comment.
you cannot send the same signal from multiple places.
| /datum/game_mode/infestation/crash/zombie/proc/on_attempt_possess_mob(datum/source, mob/possession, mob/M) | ||
| SIGNAL_HANDLER | ||
| if(!iszombie(possession)) | ||
| return |
There was a problem hiding this comment.
return NONE, since this is a signal proc explicitly expecting a return value
|
|
||
| message_admins(span_adminnotice("[owner.key] took control of [new_mob.name] as [new_mob.p_they()] was ssd.")) | ||
| log_admin("[owner.key] took control of [new_mob.name] as [new_mob.p_they()] was ssd.") | ||
| SEND_SIGNAL(SSdcs, COMSIG_MOB_POSSESSED, new_mob) |
There was a problem hiding this comment.
this seems like either the wrong place to put this signal (i.e. why is it not on transfer_mob), or its incorrectly labelled.
About The Pull Request
Adds a scaling cap of sentient zombies to alive marines, there cannot be more than one possessed zombie for every 7 marines. So if there are less than 7, zombies cannot be possessed, at 7 marines there can be one zentient, at 14 there can be 2 zentients, etc.
Specifics of implementation:
Why It's Good For The Game
Having too many sentient zombies increases the difficulty, however sentient zombies by themselves increase the fun of the gamemode, they add a layer of dynamism that is unable to be replicated by AI. Possessing zombies is also fun in of itself. Therefore the gamemode should be balanced around having an acceptable amount of zentients without removing them entirely.
Changelog
🆑
balance: Adds a scaling cap of sentient zombies to alive marines, there cannot be more than one possessed zombie for every 7 marines
/:cl: