Datumizes Cult. (#24379)

* cult 1

* massive data refactor

* progress

* More crap

* IM SCARED IT COMPILES

* oops

* more fixes

* good comment

* hell yeah, team control

* lol

* blamo

* blam

* More stuff

* team refactor

* epic merge fail

* src not _src_

* more

* progress

* cult

* more stuff

* water

* goodbye __IMPLIED_TYPE__

* time to undraft

* FUCK FUCK FUCK

* okay this is better

* goodbye todos

* fix

* order of operations

* last fix? maybe

* yeah

* oops

* okay this should be ALL the fixes

* wow

* hell yeah

* wow

* fixes duplicate teams + adds more team safeties

* how the fuck did this happen

* admin objective improvements

* wah more bullshit

* guh

* fuuuuck

* fucking hell

* fixes
This commit is contained in:
Contrabang
2024-03-16 16:36:55 -04:00
committed by GitHub
parent 0c25bf4a21
commit 2ec55dbfbb
69 changed files with 1328 additions and 1137 deletions
-1
View File
@@ -111,7 +111,6 @@
if(SSticker && SSticker.mode)
other_antags += list(
"Blob" = (mind.special_role == SPECIAL_ROLE_BLOB),
"Cultist" = (mind in SSticker.mode.cult),
"Wizard" = (mind in SSticker.mode.wizards),
"Wizard's Apprentice" = (mind in SSticker.mode.apprentices),
"Nuclear Operative" = (mind in SSticker.mode.syndicates),
@@ -31,10 +31,10 @@
return "<span class='warning'>[p_they(TRUE)] [p_have()] [hand_blood_color != "#030303" ? "blood-stained":"oil-stained"] hands!</span>\n"
if("eyes")
if(HAS_TRAIT(src, SCRYING))
if(iscultist(src) && HAS_TRAIT(src, CULT_EYES))
if(IS_CULTIST(src) && HAS_TRAIT(src, CULT_EYES))
return "<span class='boldwarning'>[p_their(TRUE)] glowing red eyes are glazed over!</span>\n"
return "<span class='boldwarning'>[p_their(TRUE)] eyes are glazed over.</span>\n"
if(iscultist(src) && HAS_TRAIT(src, CULT_EYES))
if(IS_CULTIST(src) && HAS_TRAIT(src, CULT_EYES))
return "<span class='boldwarning'>[p_their(TRUE)] eyes are glowing an unnatural red!</span>\n"
return msg
@@ -1676,7 +1676,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
rad_act(current_size * 3)
/mob/living/carbon/human/narsie_act()
if(iswizard(src) && iscultist(src)) //Wizard cultists are immune to narsie because it would prematurely end the wiz round that's about to end by the automated shuttle call anyway
if(iswizard(src) && IS_CULTIST(src)) //Wizard cultists are immune to narsie because it would prematurely end the wiz round that's about to end by the automated shuttle call anyway
return
..()
@@ -1343,7 +1343,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
/mob/living/carbon/human/proc/update_halo_layer()
remove_overlay(HALO_LAYER)
if(iscultist(src) && SSticker.mode.cult_ascendant)
if(IS_CULTIST(src) && SSticker.mode.cult_team.cult_ascendant)
var/istate = pick("halo1", "halo2", "halo3", "halo4", "halo5", "halo6")
var/mutable_appearance/new_halo_overlay = mutable_appearance('icons/effects/32x64.dmi', istate, -HALO_LAYER)
overlays_standing[HALO_LAYER] = new_halo_overlay
-5
View File
@@ -482,11 +482,6 @@
C.reagents.clear_reagents()
QDEL_LIST_CONTENTS(C.reagents.addiction_list)
C.reagents.addiction_threshold_accumulated.Cut()
if(iscultist(src))
if(SSticker.mode.cult_risen)
SSticker.mode.rise(src)
if(SSticker.mode.cult_ascendant)
SSticker.mode.ascend(src)
QDEL_LIST_CONTENTS(C.processing_patches)
@@ -39,8 +39,6 @@ GLOBAL_DATUM_INIT(paiController, /datum/paiController, new) // Global handler fo
card.setPersonality(pai)
card.looking_for_personality = 0
SSticker.mode.update_cult_icons_removed(card.pai.mind)
pai_candidates -= candidate
usr << browse(null, "window=findPai")
return
@@ -2,7 +2,7 @@
SetSleeping(0)
if(mind && SSticker && SSticker.mode)
SSticker.mode.remove_revolutionary(mind, 1)
SSticker.mode.remove_cultist(mind, 1)
mind.remove_antag_datum(/datum/antagonist/cultist)
SSticker.mode.remove_wizard(mind)
mind.remove_antag_datum(/datum/antagonist/changeling)
mind.remove_antag_datum(/datum/antagonist/vampire)
@@ -36,30 +36,26 @@
/mob/living/simple_animal/hostile/construct/Initialize(mapload)
. = ..()
if(!SSticker.mode)//work around for maps with runes and cultdat is not loaded all the way
name = "[construct_type] ([rand(1, 1000)])"
real_name = construct_type
icon_living = construct_type
icon_state = construct_type
else
name = "[SSticker.cultdat.get_name(construct_type)] ([rand(1, 1000)])"
real_name = SSticker.cultdat.get_name(construct_type)
icon_living = SSticker.cultdat.get_icon(construct_type)
icon_state = SSticker.cultdat.get_icon(construct_type)
name = "[GET_CULT_DATA(get_name(construct_type), construct_type)] ([rand(1, 1000)])"
real_name = GET_CULT_DATA(get_name(construct_type), construct_type)
icon_living = GET_CULT_DATA(get_icon(construct_type), construct_type)
icon_state = GET_CULT_DATA(get_icon(construct_type), construct_type)
for(var/spell in construct_spells)
AddSpell(new spell(null))
set_light(2, 3, l_color = SSticker.cultdat ? SSticker.cultdat.construct_glow : LIGHT_COLOR_BLOOD_MAGIC)
set_light(2, 3, l_color = GET_CULT_DATA(construct_glow, LIGHT_COLOR_BLOOD_MAGIC))
/mob/living/simple_animal/hostile/construct/Destroy()
mind?.remove_antag_datum(/datum/antagonist/cultist, silent_removal = TRUE)
remove_held_body()
return ..()
/mob/living/simple_animal/hostile/construct/death(gibbed)
mind?.remove_antag_datum(/datum/antagonist/cultist, silent_removal = TRUE)
if(held_body) // Null check for empty bodies
held_body.forceMove(get_turf(src))
SSticker.mode.add_cult_immunity(held_body)
SSticker.mode?.cult_team?.add_cult_immunity(held_body)
if(ismob(held_body)) // Check if the held_body is a mob
held_body.key = key
else if(istype(held_body, /obj/item/organ/internal/brain)) // Check if the held_body is a brain
@@ -72,10 +68,6 @@
playsound(src, 'sound/effects/pylon_shatter.ogg', 40, TRUE)
return ..()
/mob/living/simple_animal/hostile/construct/Destroy()
SSticker.mode.remove_cultist(show_message = FALSE, target_mob = src)
return ..()
/mob/living/simple_animal/hostile/construct/proc/add_held_body(atom/movable/body)
held_body = body
RegisterSignal(body, COMSIG_PARENT_QDELETING, PROC_REF(remove_held_body))
@@ -373,7 +373,7 @@ Difficulty: Hard
/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/hit_up_narsi()
SetRecoveryTime(20)
visible_message("<span class='colossus'><b>[pick("[SSticker.cultdat.entity_name], I call on YOU for one of MY favours you owe me!", "[SSticker.cultdat.entity_title1], I call on you for some support...", "Let us see how you like the minions of [SSticker.cultdat.entity_title2]!", "Oh, [SSticker.cultdat.entity_title3] join me in RENDING THIS WHELP APART!")]</b></span>")
visible_message("<span class='colossus'><b>[pick("[GET_CULT_DATA(entity_name, "Nar'sie")], I call on YOU for one of MY favours you owe me!", "[GET_CULT_DATA(entity_title1, "Nar'sie")], I call on you for some support...", "Let us see how you like the minions of [GET_CULT_DATA(entity_title2, "Nar'sie")]!", "Oh, [GET_CULT_DATA(entity_title3, "Nar'sie")] join me in RENDING THIS WHELP APART!")]</b></span>")
var/list/turfs = list()
var/constructs = 0
for(var/turf/T in view(6, target))
@@ -284,7 +284,7 @@
continue
if(T.z != usr.z) //No crossing zlvls
continue
if(istype(i, /obj/item/shield/mirror) && !iscultist(usr)) //No teleporting to cult bases
if(istype(i, /obj/item/shield/mirror) && !IS_CULTIST(usr)) //No teleporting to cult bases
continue
if(istype(i, /obj/structure/mirror))
var/obj/structure/mirror/B = i
@@ -34,12 +34,8 @@
deathmessage = "lets out a contented sigh as their form unwinds."
var/holy = FALSE
/mob/living/simple_animal/shade/cult/Initialize(mapload)
. = ..()
icon_state = SSticker.cultdat?.shade_icon_state
/mob/living/simple_animal/shade/Destroy()
SSticker.mode.remove_cultist(show_message = FALSE, target_mob = src)
mind?.remove_antag_datum(/datum/antagonist/cultist, silent_removal = TRUE)
return ..()
/mob/living/simple_animal/shade/attackby(obj/item/O, mob/user) //Marker -Agouri
@@ -56,6 +52,12 @@
holy = TRUE
icon_state = "shade_angelic"
/mob/living/simple_animal/shade/cult
/mob/living/simple_animal/shade/cult/Initialize(mapload)
. = ..()
icon_state = GET_CULT_DATA(shade_icon_state, initial(icon_state))
/mob/living/simple_animal/shade/sword
faction = list("neutral")
a_intent = INTENT_HARM // scuffed sword mechanics bad
+2 -3
View File
@@ -1486,12 +1486,11 @@ GLOBAL_LIST_INIT(holy_areas, typecacheof(list(
return FALSE
//Allows cult to bypass holy areas once they summon
var/datum/game_mode/gamemode = SSticker.mode
if(iscultist(src) && gamemode.cult_objs.cult_status == NARSIE_HAS_RISEN)
if(mind.has_antag_datum(/datum/antagonist/cultist) && SSticker.mode.cult_team.cult_status == NARSIE_HAS_RISEN)
return FALSE
//Execption for Holy Constructs
if(isconstruct(src) && !iscultist(src))
if(isconstruct(src) && !mind.has_antag_datum(/datum/antagonist/cultist))
return FALSE
to_chat(src, "<span class='warning'>Your powers are useless on this holy ground.</span>")