Various Skill Bugfixes (#22533)

This PR fixes a bunch of skills related bugs, the biggest of which were
the result of the system being overly trusting of the database, when in
reality due to a bunch of unpredictable edge cases, the database is not
guaranteed to always have what I think it has. To fix these bugs, I've
had to slightly refactor how skills are generated on player characters
and antagonists, such that the burden of proof for skills is with the
Skills Subsystem rather than the Database.

Skills generated for a fresh character that has NO preferences saved
(Worst case scenario):

<img width="1491" height="849" alt="image"
src="https://github.com/user-attachments/assets/683fb538-106a-4679-8e2a-30dd45f456a1"
/>

Promoting that same character to Antagonist now increases certain skills
to a minimum baseline:

<img width="1315" height="830" alt="image"
src="https://github.com/user-attachments/assets/94bcc69e-cbbe-45fa-956e-f53b7f5d2779"
/>

By Mel's request, Bluespace Technicians spawn with all skills fully
maxed out for debugging purposes:

<img width="1909" height="985" alt="image"
src="https://github.com/user-attachments/assets/db4f3f65-3d87-47fc-907e-c68eae6d4cdb"
/>
This commit is contained in:
VMSolidus
2026-05-29 16:37:57 -04:00
committed by GitHub
parent 3aa4942572
commit 13f87e4a26
9 changed files with 70 additions and 21 deletions
+5 -1
View File
@@ -127,6 +127,10 @@
feedback_add_details("admin_verb","BST")
// Load all skills as max for a bst
for (var/singleton/skill/skill as anything in SSskills.all_skills)
skill.on_spawn(bst, skill.maximum_level)
return 1
/client/proc/bst_post_spawn(mob/living/carbon/human/bst/bst)
@@ -141,7 +145,7 @@
var/datum/weakref/original_mob
/mob/living/carbon/human/bst/Destroy(force)
original_mob = null
QDEL_NULL(original_mob)
return ..()
/mob/living/carbon/human/bst/can_inject(var/mob/user, var/error_msg, var/target_zone)