8ead3e8628
Cult is awful, so let's try to improve it. Idea by KorPhaeron. I also took some inspiration from adrix89's sacrifice cult, so credits to him. Also thanks a lot specially to MrPerson and Iamgoofball for helping me brainstorm this, and Joan for the sprites for the summoning orb, the large nar-sie shell, and the new cult antag hud. Basically, we remove conversion, and turn cult into a magic version of nuke, with a small team of stealth elite cultists that have to build a base in the station and sacrifice people in order to build an army of constructs and get materials to eventually summon Nar-Sie. Stun talismans and conversion are gone. Nar-Sie is now the only objective. Sacrifice runes now provide summoning orbs, which you can use to drop a large shell. Insert enough orbs in the shell and you trigger a Delta. Defend the shell for 3 minutes and Nar-sie will arise. This shell is bombproof and singularityproof. It may be summoned up to three times if destroyed, but you will have to start from the beginning sac-wise. Runes are now RNG. Each cultist only gets 50% of the runes. Inspiration is basically The Binding of Isaac here (thank you MrPerson for this!). Furthermore, many old runes were merged/removed and other new ones were added. Almost all were massively rebalanced. Cult now also has a stealthy ritual dagger with high bleeding and throw effects.
159 lines
4.4 KiB
Plaintext
159 lines
4.4 KiB
Plaintext
/obj/singularity/narsie //Moving narsie to a child object of the singularity so it can be made to function differently. --NEO
|
|
name = "Nar-sie's Avatar"
|
|
desc = "Your mind begins to bubble and ooze as it tries to comprehend what it sees."
|
|
icon = 'icons/obj/magic_terror.dmi'
|
|
pixel_x = -89
|
|
pixel_y = -85
|
|
current_size = 9 //It moves/eats like a max-size singulo, aside from range. --NEO
|
|
contained = 0 //Are we going to move around?
|
|
dissipate = 0 //Do we lose energy over time?
|
|
move_self = 1 //Do we move on our own?
|
|
grav_pull = 5 //How many tiles out do we pull?
|
|
consume_range = 6 //How many tiles out do we eat
|
|
|
|
/obj/singularity/narsie/large
|
|
name = "Nar-Sie"
|
|
icon = 'icons/obj/narsie.dmi'
|
|
// Pixel stuff centers Narsie.
|
|
pixel_x = -236
|
|
pixel_y = -256
|
|
current_size = 12
|
|
move_self = 1 //Do we move on our own?
|
|
grav_pull = 10
|
|
consume_range = 12 //How many tiles out do we eat
|
|
|
|
/obj/singularity/narsie/large/New()
|
|
..()
|
|
world << "<span class='narsie'>NAR-SIE HAS RISEN</span>"
|
|
world << pick('sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg')
|
|
|
|
var/area/A = get_area(src)
|
|
if(A)
|
|
var/image/alert_overlay = image('icons/mob/mob.dmi', "harvester")
|
|
notify_ghosts("Nar-Sie has risen in \the [A.name]. Reach out to the Geometer to be given a new shell for your soul.", source = src, alert_overlay = alert_overlay, attack_not_jump = 1)
|
|
|
|
narsie_spawn_animation()
|
|
|
|
sleep(70)
|
|
SSshuttle.emergency.request(null, 0.3) // Cannot recall
|
|
|
|
|
|
/obj/singularity/narsie/large/attack_ghost(mob/dead/observer/user as mob)
|
|
makeNewConstruct(/mob/living/simple_animal/hostile/construct/harvester, user, null, 0, loc_override = src.loc)
|
|
PoolOrNew(/obj/effect/particle_effect/smoke/sleeping, src.loc)
|
|
|
|
|
|
/obj/singularity/narsie/process()
|
|
eat()
|
|
if(!target || prob(5))
|
|
pickcultist()
|
|
move()
|
|
if(prob(25))
|
|
mezzer()
|
|
|
|
|
|
/obj/singularity/narsie/Bump(atom/A)//you dare stand before a god?!
|
|
godsmack(A)
|
|
return
|
|
|
|
/obj/singularity/narsie/Bumped(atom/A)
|
|
godsmack(A)
|
|
return
|
|
|
|
/obj/singularity/narsie/proc/godsmack(atom/A)
|
|
if(isobj(A))
|
|
var/obj/O = A
|
|
O.ex_act(1)
|
|
if(O) qdel(O)
|
|
|
|
else if(isturf(A))
|
|
var/turf/T = A
|
|
T.ChangeTurf(/turf/simulated/floor/plasteel/cult)
|
|
|
|
|
|
/obj/singularity/narsie/mezzer()
|
|
for(var/mob/living/carbon/M in oviewers(8, src))
|
|
if(M.stat == CONSCIOUS)
|
|
if(!iscultist(M))
|
|
M << "<span class='cultsmall'>You feel conscious thought crumble away in an instant as you gaze upon [src.name]...</span>"
|
|
M.apply_effect(3, STUN)
|
|
|
|
|
|
/obj/singularity/narsie/consume(atom/A)
|
|
A.narsie_act()
|
|
|
|
|
|
/obj/singularity/narsie/ex_act() //No throwing bombs at it either. --NEO
|
|
return
|
|
|
|
|
|
/obj/singularity/narsie/proc/pickcultist() //Narsie rewards his cultists with being devoured first, then picks a ghost to follow. --NEO
|
|
var/list/cultists = list()
|
|
var/list/noncultists = list()
|
|
for(var/mob/living/carbon/food in living_mob_list) //we don't care about constructs or cult-Ians or whatever. cult-monkeys are fair game i guess
|
|
var/turf/pos = get_turf(food)
|
|
if(pos.z != src.z)
|
|
continue
|
|
|
|
if(iscultist(food))
|
|
cultists += food
|
|
else
|
|
noncultists += food
|
|
|
|
if(cultists.len) //cultists get higher priority
|
|
acquire(pick(cultists))
|
|
return
|
|
|
|
if(noncultists.len)
|
|
acquire(pick(noncultists))
|
|
return
|
|
|
|
//no living humans, follow a ghost instead.
|
|
for(var/mob/dead/observer/ghost in player_list)
|
|
if(!ghost.client)
|
|
continue
|
|
var/turf/pos = get_turf(ghost)
|
|
if(pos.z != src.z)
|
|
continue
|
|
cultists += ghost
|
|
if(cultists.len)
|
|
acquire(pick(cultists))
|
|
return
|
|
|
|
|
|
/obj/singularity/narsie/proc/acquire(mob/food)
|
|
if(food == target)
|
|
return
|
|
target << "<span class='cultsmall'>NAR-SIE HAS LOST INTEREST IN YOU.</span>"
|
|
target = food
|
|
if(isliving(target))
|
|
target << "<span class ='cult'>NAR-SIE HUNGERS FOR YOUR SOUL.</span>"
|
|
else
|
|
target << "<span class ='cult'>NAR-SIE HAS CHOSEN YOU TO LEAD HER TO HER NEXT MEAL.</span>"
|
|
|
|
//Wizard narsie
|
|
/obj/singularity/narsie/wizard
|
|
grav_pull = 0
|
|
|
|
/obj/singularity/narsie/wizard/eat()
|
|
set background = BACKGROUND_ENABLED
|
|
// if(defer_powernet_rebuild != 2)
|
|
// defer_powernet_rebuild = 1
|
|
for(var/atom/X in ultra_range(consume_range,src,1))
|
|
if(isturf(X) || istype(X, /atom/movable))
|
|
consume(X)
|
|
// if(defer_powernet_rebuild != 2)
|
|
// defer_powernet_rebuild = 0
|
|
return
|
|
|
|
|
|
/obj/singularity/narsie/proc/narsie_spawn_animation()
|
|
icon = 'icons/obj/narsie_spawn_anim.dmi'
|
|
dir = SOUTH
|
|
move_self = 0
|
|
flick("narsie_spawn_anim",src)
|
|
sleep(11)
|
|
move_self = 1
|
|
icon = initial(icon)
|
|
|