Merge pull request #18018 from Xhuis/general_rabbits

Clockwork Post-Merge Patch II
This commit is contained in:
Cheridan
2016-05-29 13:34:58 -05:00
10 changed files with 48 additions and 35 deletions
@@ -5,12 +5,15 @@ var/global/list/clockwork_generals_invoked = list("nezbere" = FALSE, "sevtug" =
var/global/list/all_clockwork_objects = list() //All clockwork items, structures, and effects in existence
var/global/list/all_clockwork_mobs = list() //All clockwork SERVANTS (not creatures) in existence
var/global/list/clockwork_component_cache = list("belligerent_eye" = 0, "vanguard_cogwheel" = 0, "guvax_capacitor" = 0, "replicant_alloy" = 0, "hierophant_ansible" = 0) //The pool of components that caches draw from
var/global/ratvar_awakens = FALSE //If Ratvar has been summoned
#define SCRIPTURE_PERIPHERAL 0 //Should never be used
#define SCRIPTURE_PERIPHERAL 0 //Scripture tiers; peripherals should never be used
#define SCRIPTURE_DRIVER 1
#define SCRIPTURE_SCRIPT 2
#define SCRIPTURE_APPLICATION 3
#define SCRIPTURE_REVENANT 4
#define SCRIPTURE_JUDGEMENT 5
#define SLAB_PRODUCTION_THRESHOLD 60 //How many cycles it takes slabs to produce a single component; defaults to one minute
#define SLAB_PRODUCTION_THRESHOLD 60 //How many cycles slabs require to produce a single component; defaults to one minute
#define GATEWAY_SUMMON_RATE 3 //The speed multiplier used by the Gateway to the Celestial Derelict; defaults to 3x speed
@@ -117,7 +117,6 @@ This file's folder contains:
// GAME MODE //
///////////////
var/global/ratvar_awakens = FALSE //If Ratvar has been summoned
/datum/game_mode
var/list/servants_of_ratvar = list() //The Enlightened servants of Ratvar
var/required_escapees = 0 //How many servants need to escape, if applicable
@@ -1,6 +1,7 @@
/mob/living/simple_animal/hostile/anima_fragment //Anima fragment: Low health but high melee power. Created by inserting a soul vessel into an empty fragment.
name = "anima fragment"
desc = "An ominous humanoid shell with a spinning cogwheel as its head, lifted by a jet of blazing red flame."
faction = list("ratvar")
icon = 'icons/mob/clockwork_mobs.dmi'
icon_state = "anime_fragment"
health = 75 //Glass cannon
@@ -34,6 +35,8 @@
qdel(src)
return 1
/mob/living/simple_animal/hostile/clockwork_marauder //Clockwork marauder: Slow but with high damage, resides inside of a servant. Created via the Memory Allocation scripture.
name = "clockwork marauder"
desc = "A stalwart apparition of a soldier, blazing with crimson flames. It's armed with a gladius and shield."
@@ -271,6 +274,8 @@
/mob/living/simple_animal/hostile/clockwork_marauder/proc/is_in_host() //Checks if the marauder is inside of their host
return host && loc == host
/mob/living/mind_control_holder
name = "imprisoned mind"
desc = "A helpless mind, imprisoned in its own body."
+13 -12
View File
@@ -52,7 +52,6 @@
icon_state = "clockwork_gateway_disrupted"
takes_damage = FALSE
sleep(27)
animate(src, transform = matrix() * 2, time = 2)
explosion(src, 1, 3, 8, 8)
qdel(src)
return 1
@@ -66,7 +65,7 @@
M << "<span class='warning'><b>You hear otherworldly sounds from the [dir2text(get_dir(get_turf(M), get_turf(src)))]...</span>"
if(!health)
return 0
progress_in_seconds++
progress_in_seconds += GATEWAY_SUMMON_RATE
switch(progress_in_seconds)
if(-INFINITY to 100)
if(!first_sound_played)
@@ -87,9 +86,11 @@
if(!purpose_fulfilled)
takes_damage = FALSE
purpose_fulfilled = TRUE
animate(src, transform = matrix() * 1.5, time = 136)
animate(src, transform = matrix() * 1.5, alpha = 255, time = 126)
world << sound('sound/effects/ratvar_rises.ogg', 0, channel = 8) //End the sounds
sleep(136)
sleep(131)
animate(src, transform = matrix() * 3, alpha = 0, time = 5)
sleep(5)
new/obj/structure/clockwork/massive/ratvar(get_turf(src))
qdel(src)
@@ -98,8 +99,8 @@
if(is_servant_of_ratvar(user))
var/arrival_text = "IMMINENT"
if(300 - progress_in_seconds > 0)
arrival_text = "[max(300 - progress_in_seconds, 0)]s"
user << "<span class='big'><b>Seconds until Ratvar's arrival:</b> [arrival_text]</span>"
arrival_text = "[max((300 - progress_in_seconds) / GATEWAY_SUMMON_RATE, 0)]"
user << "<span class='big'><b>Seconds until Ratvar's arrival:</b> [arrival_text]s</span>"
switch(progress_in_seconds)
if(-INFINITY to 100)
user << "<span class='heavy_brass'>It's still opening.</span>"
@@ -131,7 +132,8 @@
/obj/structure/clockwork/massive/ratvar/New()
..()
SSobj.processing += src
world << "<span class='heavy_brass'><font size=15>\"I AM FREE!\"</font></span>"
world << "<span class='heavy_brass'><font size=7>\"BAPR NTNVA ZL YVTUG FUNYY FUVAR NPEBFF GUVF CNGURGVP ERNYZ!!\"</font></span>"
world << 'sound/effects/ratvar_reveal.ogg'
ratvar_awakens = TRUE
spawn(50)
SSshuttle.emergency.request(null, 0.3)
@@ -168,8 +170,7 @@
<span class='userdanger'>You feel tremendous relief as a set of horrible eyes loses sight of you...</span>"
prey = null
else
if(prob(75))
dir_to_step_in = get_dir(src, prey)
dir_to_step_in = get_dir(src, prey) //Unlike Nar-Sie, Ratvar ruthlessly chases down his target
forceMove(get_step(src, dir_to_step_in))
/obj/structure/clockwork/massive/ratvar/narsie_act()
@@ -178,13 +179,13 @@
clashing = TRUE
world << "<span class='heavy_brass'><font size=5>\"[pick("BLOOD GOD!!!", "NAR-SIE!!!", "AT LAST, YOUR TIME HAS COME!")]\"</font></span>"
world << "<span class='cult'><font size=5>\"<b>Ratvar?! How?!</b>\"</font></span>"
for(var/obj/singularity/narsie/N in range(7, src))
for(var/obj/singularity/narsie/N in range(15, src))
clash_of_the_titans(N) //IT'S TIME FOR THE BATTLE OF THE AGES
N.clashing = TRUE
break
return 1
/obj/structure/clockwork/massive/ratvar/proc/clash_of_the_titans(obj/singularity/narsie/narsie) //IT'S TIME FOR A BATTLE OF THE ELDER GODS
/obj/structure/clockwork/massive/ratvar/proc/clash_of_the_titans(obj/singularity/narsie/narsie)
var/winner = "Undeclared"
var/base_victory_chance = 0
while(TRUE)
@@ -249,5 +250,5 @@
/mob/dead/observer/ratvar_act() //Ghosts flash yellow for a second
var/old_color = color
color = rgb(75, 53, 0) //A nice brassy yellow
color = rgb(75, 53, 0)
animate(src, color = old_color, time = 10)
@@ -34,9 +34,9 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed
/datum/clockwork_scripture/proc/run_scripture()
if(can_recite() && check_special_requirements())
slab.busy = "Invocation ([name]) in progress"
if(recital() && check_special_requirements())
if(check_special_requirements() && recital())
slab.busy = null
if(scripture_effects() && check_special_requirements() && (!ratvar_awakens && !slab.no_cost))
if(check_special_requirements() && scripture_effects() && (!ratvar_awakens && !slab.no_cost))
for(var/i in required_components)
if(tier <= SCRIPTURE_DRIVER || consumed_component_override)
if(clockwork_component_cache[i] >= consumed_components[i]) //Draw components from the global cache first
@@ -67,7 +67,8 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed
if(multiple_invokers_used && !multiple_invokers_optional)
var/nearby_servants = 0
for(var/mob/living/L in range(1, invoker))
nearby_servants++
if(is_servant_of_ratvar(L))
nearby_servants++
if(nearby_servants < invokers_required)
invoker << "<span class='warning'>There aren't enough servants nearby ([nearby_servants]/[invokers_required])!</span>"
return 0
@@ -513,7 +514,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed
tier = SCRIPTURE_SCRIPT
/datum/clockwork_scripture/function_call/check_special_requirements()
if(!invoker.verbs & /mob/living/carbon/human/proc/function_call)
if(invoker.verbs.Find(/mob/living/carbon/human/proc/function_call))
invoker << "<span class='warning'>You have already bound a Ratvarian spear to yourself!</span>"
return 0
return ishuman(invoker)
@@ -610,16 +611,18 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed
usage_tip = "Extremely fast invocation time."
tier = SCRIPTURE_SCRIPT
/datum/clockwork_scripture/scripture_effects()
/datum/clockwork_scripture/break_will/scripture_effects()
for(var/mob/living/carbon/human/H in range(1, invoker))
if(is_servant_of_ratvar(H) || !isloyal(H))
if(is_servant_of_ratvar(H))
continue
H.visible_message("<span class='warning'>[H] visibly trembles!</span>", \
"<span class='userdanger'>The words invoke a horrible fear deep in your being. Your loyalty to Nanotrasen falls away as you see how weak they truly are.</span>")
H.adjustBrainLoss(5)
for(var/obj/item/weapon/implant/loyalty/L in H)
if(L.implanted)
qdel(L)
if(isloyal(H))
H.visible_message("<span class='warning'>[H] visibly trembles!</span>", \
"<span class='userdanger'>The words invoke a horrible fear deep in your being. Your loyalty to Nanotrasen falls away as you see how weak they truly are.</span>")
H.adjustBrainLoss(5)
for(var/obj/item/weapon/implant/loyalty/L in H)
if(L.implanted)
qdel(L)
return 1
//////////////////
// APPLICATIONS //
@@ -97,9 +97,6 @@
usr.verbs -= /mob/living/carbon/human/proc/function_call
return 1
/datum/clockwork_cache //The global cache datum, used to link together all tinkerer's caches
var/list/stored_components = list("belligerent_eye" = 0, "vanguard_cogwheel" = 0, "guvax_capacitor" = 0, "replicant_alloy" = 0, "hierophant_ansible" = 0)
/*
The Ratvarian Language
@@ -198,14 +198,17 @@
"You can't save him. Nothing can save him now.", "It seems that Nar-Sie will triumph after all.")]</b></span>"
if("emote")
M.visible_message("<span class='warning'>[M] [pick("whimpers quietly", "shivers as though cold", "glances around in paranoia")]</span>")
if(data >= 75 && prob(33)) // 30 units, 135 seconds
if(data >= 75) // 30 units, 135 seconds
if (!M.confused)
M.confused = 1
M.confused += 3
if(iscultist(M) || (is_handofgod_cultist(M) && !is_handofgod_prophet(M)) || is_servant_of_ratvar(M))
ticker.mode.remove_cultist(M.mind, 1, 1)
ticker.mode.remove_hog_follower(M.mind)
remove_servant_of_ratvar(M.mind)
if(iscultist(M) || is_handofgod_cultist(M) || is_handofgod_prophet(M) || is_servant_of_ratvar(M))
if(iscultist(M))
ticker.mode.remove_cultist(M.mind, 1, 1)
else if(is_handofgod_cultist(M) || is_handofgod_prophet(M))
ticker.mode.remove_hog_follower(M.mind)
else if(is_servant_of_ratvar(M))
remove_servant_of_ratvar(M)
holder.remove_reagent(src.id, src.volume) // maybe this is a little too perfect and a max() cap on the statuses would be better??
M.jitteriness = 0
M.stuttering = 0
@@ -23,6 +23,7 @@
action_icon_state = "floorconstruct"
action_background_icon_state = "bg_cult"
/obj/effect/proc_holder/spell/aoe_turf/conjure/wall
name = "Summon Cult Wall"
desc = "This spell constructs a cult wall"
@@ -38,6 +39,7 @@
summon_type = list(/turf/closed/wall/mineral/cult/artificer) //we don't want artificer-based runed metal farms
/obj/effect/proc_holder/spell/aoe_turf/conjure/wall/reinforced
name = "Greater Construction"
desc = "This spell constructs a reinforced metal wall"
Binary file not shown.
Binary file not shown.