mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
fixes some more amtag bugs (#19059)
* e * Update _powers.dm * e2 * e * e2
This commit is contained in:
@@ -956,6 +956,10 @@
|
|||||||
return FALSE
|
return FALSE
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
|
/// Called when mob changes from a standing position into a prone while lacking the ability to stand up at the moment.
|
||||||
|
/mob/living/proc/on_fall()
|
||||||
|
return
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the grab state of the movable
|
* Updates the grab state of the movable
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -14,9 +14,7 @@
|
|||||||
cooldown_time = 20 SECONDS
|
cooldown_time = 20 SECONDS
|
||||||
|
|
||||||
/// Left buster-arm means megabuster goes in left hand
|
/// Left buster-arm means megabuster goes in left hand
|
||||||
/datum/action/cooldown/buster/megabuster/l/Trigger()
|
/datum/action/cooldown/buster/megabuster/l/Activate()
|
||||||
if(!..())
|
|
||||||
return FALSE
|
|
||||||
var/obj/item/buster/megabuster/B = new()
|
var/obj/item/buster/megabuster/B = new()
|
||||||
owner.visible_message(span_userdanger("[owner]'s left arm begins crackling loudly!"))
|
owner.visible_message(span_userdanger("[owner]'s left arm begins crackling loudly!"))
|
||||||
playsound(owner,'sound/effects/beepskyspinsabre.ogg', 60, 1)
|
playsound(owner,'sound/effects/beepskyspinsabre.ogg', 60, 1)
|
||||||
@@ -30,9 +28,7 @@
|
|||||||
StartCooldown()
|
StartCooldown()
|
||||||
|
|
||||||
/// Right buster-arm means megabuster goes in right hand
|
/// Right buster-arm means megabuster goes in right hand
|
||||||
/datum/action/cooldown/buster/megabuster/r/Trigger()
|
/datum/action/cooldown/buster/megabuster/r/Activate()
|
||||||
if(!..())
|
|
||||||
return FALSE
|
|
||||||
var/obj/item/buster/megabuster/B = new()
|
var/obj/item/buster/megabuster/B = new()
|
||||||
owner.visible_message(span_userdanger("[owner]'s right arm begins crackling loudly!"))
|
owner.visible_message(span_userdanger("[owner]'s right arm begins crackling loudly!"))
|
||||||
playsound(owner,'sound/effects/beepskyspinsabre.ogg', 60, 1)
|
playsound(owner,'sound/effects/beepskyspinsabre.ogg', 60, 1)
|
||||||
@@ -46,20 +42,20 @@
|
|||||||
StartCooldown()
|
StartCooldown()
|
||||||
|
|
||||||
/datum/action/cooldown/buster/megabuster/l/IsAvailable(feedback = FALSE)
|
/datum/action/cooldown/buster/megabuster/l/IsAvailable(feedback = FALSE)
|
||||||
. = ..()
|
|
||||||
var/mob/living/O = owner
|
var/mob/living/O = owner
|
||||||
var/obj/item/bodypart/l_arm/L = O.get_bodypart(BODY_ZONE_L_ARM)
|
var/obj/item/bodypart/l_arm/L = O.get_bodypart(BODY_ZONE_L_ARM)
|
||||||
if(L?.bodypart_disabled)
|
if(L?.bodypart_disabled)
|
||||||
to_chat(owner, span_warning("The arm isn't in a functional state right now!"))
|
to_chat(owner, span_warning("The arm isn't in a functional state right now!"))
|
||||||
return FALSE
|
return FALSE
|
||||||
|
return ..()
|
||||||
|
|
||||||
/datum/action/cooldown/buster/megabuster/r/IsAvailable(feedback = FALSE)
|
/datum/action/cooldown/buster/megabuster/r/IsAvailable(feedback = FALSE)
|
||||||
. = ..()
|
|
||||||
var/mob/living/O = owner
|
var/mob/living/O = owner
|
||||||
var/obj/item/bodypart/r_arm/R = O.get_bodypart(BODY_ZONE_R_ARM)
|
var/obj/item/bodypart/r_arm/R = O.get_bodypart(BODY_ZONE_R_ARM)
|
||||||
if(R?.bodypart_disabled)
|
if(R?.bodypart_disabled)
|
||||||
to_chat(owner, span_warning("The arm isn't in a functional state right now!"))
|
to_chat(owner, span_warning("The arm isn't in a functional state right now!"))
|
||||||
return FALSE
|
return FALSE
|
||||||
|
return ..()
|
||||||
|
|
||||||
////////////////// Megabuster Item //////////////////
|
////////////////// Megabuster Item //////////////////
|
||||||
/obj/item/buster/megabuster
|
/obj/item/buster/megabuster
|
||||||
|
|||||||
@@ -502,9 +502,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
|
|||||||
/turf/proc/acid_melt()
|
/turf/proc/acid_melt()
|
||||||
return
|
return
|
||||||
|
|
||||||
/turf/handle_fall(mob/faller, forced)
|
/turf/handle_fall(mob/faller)
|
||||||
if(!forced)
|
|
||||||
return
|
|
||||||
if(has_gravity(src))
|
if(has_gravity(src))
|
||||||
playsound(src, "bodyfall", 50, 1)
|
playsound(src, "bodyfall", 50, 1)
|
||||||
faller.drop_all_held_items()
|
faller.drop_all_held_items()
|
||||||
|
|||||||
@@ -396,7 +396,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
|||||||
|
|
||||||
//check if they were a monkey
|
//check if they were a monkey
|
||||||
else if(findtext(G_found.real_name,"monkey"))
|
else if(findtext(G_found.real_name,"monkey"))
|
||||||
if(tgui_alert("This character appears to have been a monkey. Would you like to respawn them as such?",,list("Yes","No"))=="Yes")
|
if(tgui_alert(usr, "This character appears to have been a monkey. Would you like to respawn them as such?",,list("Yes","No"))=="Yes")
|
||||||
var/mob/living/carbon/monkey/new_monkey = new
|
var/mob/living/carbon/monkey/new_monkey = new
|
||||||
SSjob.SendToLateJoin(new_monkey)
|
SSjob.SendToLateJoin(new_monkey)
|
||||||
G_found.mind.transfer_to(new_monkey) //be careful when doing stuff like this! I've already checked the mind isn't in use
|
G_found.mind.transfer_to(new_monkey) //be careful when doing stuff like this! I've already checked the mind isn't in use
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
. += "Current Frenzy Enter: [FRENZY_THRESHOLD_ENTER + bloodsuckerdatum.humanity_lost * 10]"
|
. += "Current Frenzy Enter: [FRENZY_THRESHOLD_ENTER + bloodsuckerdatum.humanity_lost * 10]"
|
||||||
. += "Current Frenzy Leave: [FRENZY_THRESHOLD_EXIT + bloodsuckerdatum.humanity_lost * 10]"
|
. += "Current Frenzy Leave: [FRENZY_THRESHOLD_EXIT + bloodsuckerdatum.humanity_lost * 10]"
|
||||||
. += "Blood Drank: [bloodsuckerdatum.total_blood_drank]"
|
. += "Blood Drank: [bloodsuckerdatum.total_blood_drank]"
|
||||||
if(bloodsuckerdatum.current_task)
|
if(bloodsuckerdatum.has_task)
|
||||||
. += "Task Blood Drank: [bloodsuckerdatum.task_blood_drank]"
|
. += "Task Blood Drank: [bloodsuckerdatum.task_blood_drank]"
|
||||||
|
|
||||||
// INTEGRATION: Adding Procs and Datums to existing "classes" //
|
// INTEGRATION: Adding Procs and Datums to existing "classes" //
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
///If we are currently in a Frenzy
|
///If we are currently in a Frenzy
|
||||||
var/frenzied = FALSE
|
var/frenzied = FALSE
|
||||||
///If we have a task assigned
|
///If we have a task assigned
|
||||||
var/current_task = FALSE
|
var/has_task = FALSE
|
||||||
///How many times have we used a blood altar
|
///How many times have we used a blood altar
|
||||||
var/altar_uses = 0
|
var/altar_uses = 0
|
||||||
|
|
||||||
|
|||||||
@@ -141,7 +141,13 @@
|
|||||||
to_chat(user, span_warning("Not while you're incapacitated!"))
|
to_chat(user, span_warning("Not while you're incapacitated!"))
|
||||||
return FALSE
|
return FALSE
|
||||||
// Constant Cost (out of blood)
|
// Constant Cost (out of blood)
|
||||||
if(constant_bloodcost && bloodsuckerdatum_power?.bloodsucker_blood_volume <= 0)
|
if(!bloodsuckerdatum_power)
|
||||||
|
var/mob/living/living_owner = owner
|
||||||
|
if(living_owner.blood_volume < bloodcost)
|
||||||
|
to_chat(owner, span_warning("You need at least [bloodcost] blood to activate [name]"))
|
||||||
|
return FALSE
|
||||||
|
return TRUE
|
||||||
|
if(constant_bloodcost && bloodsuckerdatum_power.bloodsucker_blood_volume <= 0)
|
||||||
to_chat(user, span_warning("You don't have the blood to upkeep [src]."))
|
to_chat(user, span_warning("You don't have the blood to upkeep [src]."))
|
||||||
return FALSE
|
return FALSE
|
||||||
return TRUE
|
return TRUE
|
||||||
@@ -215,7 +221,11 @@
|
|||||||
/datum/action/cooldown/bloodsucker/proc/ContinueActive(mob/living/user, mob/living/target)
|
/datum/action/cooldown/bloodsucker/proc/ContinueActive(mob/living/user, mob/living/target)
|
||||||
if(!user)
|
if(!user)
|
||||||
return FALSE
|
return FALSE
|
||||||
if(!constant_bloodcost > 0 || bloodsuckerdatum_power.bloodsucker_blood_volume)
|
if(!constant_bloodcost > 0)
|
||||||
|
return TRUE
|
||||||
|
if(bloodsuckerdatum_power?.bloodsucker_blood_volume)
|
||||||
|
return TRUE
|
||||||
|
if(user.blood_volume)
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
/// Used to unlearn Single-Use Powers
|
/// Used to unlearn Single-Use Powers
|
||||||
|
|||||||
@@ -132,13 +132,13 @@
|
|||||||
to_chat(user, span_warning("You can't figure out how this works."))
|
to_chat(user, span_warning("You can't figure out how this works."))
|
||||||
return
|
return
|
||||||
var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker)
|
var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker)
|
||||||
|
if(bloodsuckerdatum.has_task && !check_completion(user)) //not done but has a task? put them on their way
|
||||||
|
to_chat(user, span_warning("You already have a rank up task!"))
|
||||||
|
return
|
||||||
if(bloodsuckerdatum.altar_uses >= ALTAR_RANKS_PER_DAY) //used the altar already
|
if(bloodsuckerdatum.altar_uses >= ALTAR_RANKS_PER_DAY) //used the altar already
|
||||||
to_chat(user, span_notice("You have done all tasks for the night, come back tomorrow for more."))
|
to_chat(user, span_notice("You have done all tasks for the night, come back tomorrow for more."))
|
||||||
return
|
return
|
||||||
if(!check_completion(user) && bloodsuckerdatum.current_task) //not done but has a task? put them on their way
|
var/want_rank = tgui_alert(user, "Do you want to gain a task? This will cost 50 Blood.", "Task Manager", list("Yes", "No"))
|
||||||
to_chat(user, span_warning("You already have a rank up task!"))
|
|
||||||
return
|
|
||||||
var/want_rank = tgui_alert("Do you want to gain a task? This will cost 50 Blood.", "Task Manager", list("Yes", "No"))
|
|
||||||
if(want_rank != "Yes" || QDELETED(src))
|
if(want_rank != "Yes" || QDELETED(src))
|
||||||
return
|
return
|
||||||
generate_task(user) //generate
|
generate_task(user) //generate
|
||||||
@@ -163,7 +163,7 @@
|
|||||||
if(crewmate.blood_volume < 50)
|
if(crewmate.blood_volume < 50)
|
||||||
to_chat(user, span_danger("You don't have enough blood to gain a task!"))
|
to_chat(user, span_danger("You don't have enough blood to gain a task!"))
|
||||||
return
|
return
|
||||||
crewmate.blood_volume -= 50
|
bloodsuckerdatum.AddBloodVolume(-50)
|
||||||
switch(rand(1, 3))
|
switch(rand(1, 3))
|
||||||
if(1,2)
|
if(1,2)
|
||||||
bloodsuckerdatum.task_blood_required = suckamount
|
bloodsuckerdatum.task_blood_required = suckamount
|
||||||
@@ -173,15 +173,15 @@
|
|||||||
task = "Sacrifice [heartamount] hearts by using them on the altar."
|
task = "Sacrifice [heartamount] hearts by using them on the altar."
|
||||||
sacrificialtask = TRUE
|
sacrificialtask = TRUE
|
||||||
bloodsuckerdatum.task_memory += "<B>Current Rank Up Task</B>: [task]<br>"
|
bloodsuckerdatum.task_memory += "<B>Current Rank Up Task</B>: [task]<br>"
|
||||||
bloodsuckerdatum.current_task = TRUE
|
bloodsuckerdatum.has_task = TRUE
|
||||||
to_chat(user, span_boldnotice("You have gained a new Task! [task] Remember to collect it by using the blood altar!"))
|
to_chat(user, span_boldnotice("You have gained a new Task! [task] Remember to collect it by using the blood altar!"))
|
||||||
|
|
||||||
/obj/structure/bloodsucker/bloodaltar/proc/check_completion(mob/living/user)
|
/obj/structure/bloodsucker/bloodaltar/proc/check_completion(mob/living/user)
|
||||||
var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker)
|
var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker)
|
||||||
if(bloodsuckerdatum.task_blood_drank < suckamount || sacrifices < heartamount)
|
if(bloodsuckerdatum.task_blood_drank < bloodsuckerdatum.task_blood_required || sacrifices < bloodsuckerdatum.task_heart_required)
|
||||||
return FALSE
|
return FALSE
|
||||||
bloodsuckerdatum.task_memory = null
|
bloodsuckerdatum.task_memory = null
|
||||||
bloodsuckerdatum.current_task = FALSE
|
bloodsuckerdatum.has_task = FALSE
|
||||||
bloodsuckerdatum.bloodsucker_level_unspent++
|
bloodsuckerdatum.bloodsucker_level_unspent++
|
||||||
bloodsuckerdatum.altar_uses++
|
bloodsuckerdatum.altar_uses++
|
||||||
bloodsuckerdatum.task_blood_drank = 0
|
bloodsuckerdatum.task_blood_drank = 0
|
||||||
@@ -334,11 +334,11 @@
|
|||||||
if(8 to INFINITY)
|
if(8 to INFINITY)
|
||||||
to_chat(user, span_notice("You have evolved all abilities possible."))
|
to_chat(user, span_notice("You have evolved all abilities possible."))
|
||||||
return
|
return
|
||||||
var/want_clantask = tgui_alert("Do you want to spend a rank to gain a shadowpoint? This will cost [rankspent] ranks.", "Dark Manager", list("Yes", "No"))
|
var/want_clantask = tgui_alert(user, "Do you want to spend a rank to gain a shadowpoint? This will cost [rankspent] ranks.", "Dark Manager", list("Yes", "No"))
|
||||||
if(want_clantask == "No" || QDELETED(src))
|
if(want_clantask == "No" || QDELETED(src))
|
||||||
return
|
return
|
||||||
if(bloodsuckerdatum.bloodsucker_level_unspent < rankspent)
|
if(bloodsuckerdatum.bloodsucker_level_unspent < rankspent)
|
||||||
var/another_shot = tgui_alert("It seems like you don't have enough ranks, spend 550 blood instead?", "Dark Manager", list("Yes", "No"))
|
var/another_shot = tgui_alert(user, "It seems like you don't have enough ranks, spend 550 blood instead?", "Dark Manager", list("Yes", "No"))
|
||||||
if(another_shot == "No" || QDELETED(src))
|
if(another_shot == "No" || QDELETED(src))
|
||||||
return
|
return
|
||||||
var/mob/living/carbon/C = user
|
var/mob/living/carbon/C = user
|
||||||
|
|||||||
@@ -102,7 +102,7 @@
|
|||||||
total_blood_drank += blood_taken
|
total_blood_drank += blood_taken
|
||||||
if(frenzied)
|
if(frenzied)
|
||||||
frenzy_blood_drank += blood_taken
|
frenzy_blood_drank += blood_taken
|
||||||
if(current_task)
|
if(has_task)
|
||||||
if(target.mind)
|
if(target.mind)
|
||||||
task_blood_drank += blood_taken
|
task_blood_drank += blood_taken
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -133,7 +133,7 @@
|
|||||||
.["Convert To Traitor"] = CALLBACK(src, PROC_REF(make_traitor))
|
.["Convert To Traitor"] = CALLBACK(src, PROC_REF(make_traitor))
|
||||||
|
|
||||||
/datum/antagonist/brother/proc/make_traitor()
|
/datum/antagonist/brother/proc/make_traitor()
|
||||||
if(tgui_alert("Are you sure? This will turn the blood brother into a traitor with the same objectives!",,list("Yes","No")) != "Yes")
|
if(tgui_alert(usr, "Are you sure? This will turn the blood brother into a traitor with the same objectives!",,list("Yes","No")) != "Yes")
|
||||||
return
|
return
|
||||||
|
|
||||||
var/datum/antagonist/traitor/tot = new()
|
var/datum/antagonist/traitor/tot = new()
|
||||||
|
|||||||
@@ -3,13 +3,13 @@
|
|||||||
desc = "Take on your true demon form. This form is strong but very obvious. It's full demonic nature in this realm is taxing on you \
|
desc = "Take on your true demon form. This form is strong but very obvious. It's full demonic nature in this realm is taxing on you \
|
||||||
and you will slowly lose life while in this form, while also being especially weak to holy influences. \
|
and you will slowly lose life while in this form, while also being especially weak to holy influences. \
|
||||||
Be aware low health transfers between forms. If gravely wounded, attack live mortals to siphon life energy from them!"
|
Be aware low health transfers between forms. If gravely wounded, attack live mortals to siphon life energy from them!"
|
||||||
background_icon = 'icons/mob/actions/actions_minor_antag.dmi'
|
button_icon = 'icons/mob/actions/actions_minor_antag.dmi'
|
||||||
button_icon_state = "daemontransform"
|
button_icon_state = "daemontransform"
|
||||||
background_icon_state = "bg_demon"
|
background_icon_state = "bg_demon"
|
||||||
|
|
||||||
invocation = "COWER, MORTALS!!"
|
invocation = "COWER, MORTALS!!"
|
||||||
|
|
||||||
shapeshift_type = /mob/living/simple_animal/lesserdemon
|
possible_shapes = list(/mob/living/simple_animal/lesserdemon)
|
||||||
|
|
||||||
spell_requirements = NONE
|
spell_requirements = NONE
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
name = "Gluttonous Wall"
|
name = "Gluttonous Wall"
|
||||||
desc = "Create a magical barrier that only allows fat people to pass through."
|
desc = "Create a magical barrier that only allows fat people to pass through."
|
||||||
button_icon = 'icons/mob/actions/actions_minor_antag.dmi'
|
button_icon = 'icons/mob/actions/actions_minor_antag.dmi'
|
||||||
background_icon = 'icons/mob/actions/actions_minor_antag.dmi'
|
|
||||||
button_icon_state = "blob"
|
button_icon_state = "blob"
|
||||||
background_icon_state = "bg_demon"
|
background_icon_state = "bg_demon"
|
||||||
|
|
||||||
@@ -18,7 +17,7 @@
|
|||||||
and you will slowly lose life while in this form, while also being especially weak to holy influences. \
|
and you will slowly lose life while in this form, while also being especially weak to holy influences. \
|
||||||
Be aware low health transfers between forms. If gravely wounded, attack live mortals to siphon life energy from them! \
|
Be aware low health transfers between forms. If gravely wounded, attack live mortals to siphon life energy from them! \
|
||||||
Your unique form as a demon of gluttony also allows you to eat corpses to heal yourself."
|
Your unique form as a demon of gluttony also allows you to eat corpses to heal yourself."
|
||||||
shapeshift_type = /mob/living/simple_animal/lesserdemon/gluttony
|
possible_shapes = list(/mob/living/simple_animal/lesserdemon/gluttony)
|
||||||
|
|
||||||
/mob/living/simple_animal/lesserdemon/gluttony //capable of devouring corpses for health
|
/mob/living/simple_animal/lesserdemon/gluttony //capable of devouring corpses for health
|
||||||
name = "gluttonous demon"
|
name = "gluttonous demon"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/datum/action/cooldown/spell/shapeshift/demon/wrath //emergency get out of jail card, but better.
|
/datum/action/cooldown/spell/shapeshift/demon/wrath //emergency get out of jail card, but better.
|
||||||
name = "Wrath Demon Form"
|
name = "Wrath Demon Form"
|
||||||
shapeshift_type = /mob/living/simple_animal/lesserdemon/wrath
|
possible_shapes = list(/mob/living/simple_animal/lesserdemon/wrath)
|
||||||
|
|
||||||
/mob/living/simple_animal/lesserdemon/wrath //slightly more damage.
|
/mob/living/simple_animal/lesserdemon/wrath //slightly more damage.
|
||||||
name = "wrathful demon"
|
name = "wrathful demon"
|
||||||
|
|||||||
@@ -41,6 +41,7 @@
|
|||||||
* This proc is called whenever a new eldritch knowledge is added to an antag datum
|
* This proc is called whenever a new eldritch knowledge is added to an antag datum
|
||||||
*/
|
*/
|
||||||
/datum/eldritch_knowledge/proc/on_gain(mob/user, datum/antagonist/heretic/our_heretic)
|
/datum/eldritch_knowledge/proc/on_gain(mob/user, datum/antagonist/heretic/our_heretic)
|
||||||
|
SHOULD_CALL_PARENT(TRUE) //for now
|
||||||
var/datum/antagonist/heretic/EC = user.mind?.has_antag_datum(/datum/antagonist/heretic)
|
var/datum/antagonist/heretic/EC = user.mind?.has_antag_datum(/datum/antagonist/heretic)
|
||||||
for(var/X in unlocked_transmutations)
|
for(var/X in unlocked_transmutations)
|
||||||
var/datum/eldritch_transmutation/ET = new X
|
var/datum/eldritch_transmutation/ET = new X
|
||||||
@@ -82,6 +83,7 @@
|
|||||||
var/datum/action/cooldown/spell/created_spell = created_spell_ref?.resolve() || new spell_to_add(user)
|
var/datum/action/cooldown/spell/created_spell = created_spell_ref?.resolve() || new spell_to_add(user)
|
||||||
created_spell.Grant(user)
|
created_spell.Grant(user)
|
||||||
created_spell_ref = WEAKREF(created_spell)
|
created_spell_ref = WEAKREF(created_spell)
|
||||||
|
. = ..()
|
||||||
|
|
||||||
/datum/eldritch_knowledge/spell/on_lose(mob/user, datum/antagonist/heretic/our_heretic)
|
/datum/eldritch_knowledge/spell/on_lose(mob/user, datum/antagonist/heretic/our_heretic)
|
||||||
var/datum/action/cooldown/spell/created_spell = created_spell_ref?.resolve()
|
var/datum/action/cooldown/spell/created_spell = created_spell_ref?.resolve()
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
return FALSE
|
return FALSE
|
||||||
|
|
||||||
/datum/antagonist/rev/apply_innate_effects(mob/living/mob_override)
|
/datum/antagonist/rev/apply_innate_effects(mob/living/mob_override)
|
||||||
|
. = ..()
|
||||||
var/mob/living/M = mob_override || owner.current
|
var/mob/living/M = mob_override || owner.current
|
||||||
M.grant_language(/datum/language/french, TRUE, TRUE, LANGUAGE_REVOLUTIONARY)
|
M.grant_language(/datum/language/french, TRUE, TRUE, LANGUAGE_REVOLUTIONARY)
|
||||||
add_team_hud(M, /datum/antagonist/rev)
|
add_team_hud(M, /datum/antagonist/rev)
|
||||||
@@ -38,6 +39,7 @@
|
|||||||
/datum/antagonist/rev/remove_innate_effects(mob/living/mob_override)
|
/datum/antagonist/rev/remove_innate_effects(mob/living/mob_override)
|
||||||
var/mob/living/M = mob_override || owner.current
|
var/mob/living/M = mob_override || owner.current
|
||||||
M.remove_language(/datum/language/french, TRUE, TRUE, LANGUAGE_REVOLUTIONARY)
|
M.remove_language(/datum/language/french, TRUE, TRUE, LANGUAGE_REVOLUTIONARY)
|
||||||
|
return ..()
|
||||||
|
|
||||||
/datum/antagonist/rev/proc/equip_rev()
|
/datum/antagonist/rev/proc/equip_rev()
|
||||||
return
|
return
|
||||||
@@ -50,7 +52,7 @@
|
|||||||
|
|
||||||
/datum/antagonist/rev/on_removal()
|
/datum/antagonist/rev/on_removal()
|
||||||
remove_objectives()
|
remove_objectives()
|
||||||
. = ..()
|
return ..()
|
||||||
|
|
||||||
/datum/antagonist/rev/greet()
|
/datum/antagonist/rev/greet()
|
||||||
to_chat(owner, span_userdanger("You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!"))
|
to_chat(owner, span_userdanger("You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!"))
|
||||||
|
|||||||
@@ -414,7 +414,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
|||||||
set name = "Teleport"
|
set name = "Teleport"
|
||||||
set desc= "Teleport to a location"
|
set desc= "Teleport to a location"
|
||||||
if(!isobserver(usr))
|
if(!isobserver(usr))
|
||||||
to_chat(usr, "Not when you're not dead!")
|
to_chat(usr, span_warning("Not when you're not dead!"))
|
||||||
return
|
return
|
||||||
var/list/filtered = list()
|
var/list/filtered = list()
|
||||||
for(var/area/A as anything in get_sorted_areas())
|
for(var/area/A as anything in get_sorted_areas())
|
||||||
@@ -424,13 +424,16 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
|||||||
|
|
||||||
if(!thearea)
|
if(!thearea)
|
||||||
return
|
return
|
||||||
|
if(!isobserver(usr))
|
||||||
|
to_chat(usr, span_warning("Not when you're not dead!"))
|
||||||
|
return
|
||||||
|
|
||||||
var/list/L = list()
|
var/list/L = list()
|
||||||
for(var/turf/T in get_area_turfs(thearea.type))
|
for(var/turf/T in get_area_turfs(thearea.type))
|
||||||
L+=T
|
L+=T
|
||||||
|
|
||||||
if(!L || !L.len)
|
if(!L || !length(L))
|
||||||
to_chat(usr, "No area available.")
|
to_chat(usr, span_warning("No area available."))
|
||||||
return
|
return
|
||||||
|
|
||||||
usr.forceMove(pick(L))
|
usr.forceMove(pick(L))
|
||||||
|
|||||||
@@ -13,6 +13,8 @@
|
|||||||
span_notice("[owner] slowly peeks up from the ground..."),
|
span_notice("[owner] slowly peeks up from the ground..."),
|
||||||
span_noticealien("You stop hiding."),
|
span_noticealien("You stop hiding."),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
else
|
||||||
owner.layer = hide_layer
|
owner.layer = hide_layer
|
||||||
owner.visible_message(
|
owner.visible_message(
|
||||||
span_name("[owner] scurries to the ground!"),
|
span_name("[owner] scurries to the ground!"),
|
||||||
|
|||||||
@@ -293,9 +293,9 @@
|
|||||||
usr.visible_message("[usr] successfully rips [I] out of [usr.p_their()] [L.name]!", span_notice("You successfully remove [I] from your [L.name]."))
|
usr.visible_message("[usr] successfully rips [I] out of [usr.p_their()] [L.name]!", span_notice("You successfully remove [I] from your [L.name]."))
|
||||||
return
|
return
|
||||||
|
|
||||||
/mob/living/carbon/fall(forced)
|
/mob/living/carbon/on_fall()
|
||||||
if(loc)
|
. = ..()
|
||||||
loc.handle_fall(src, forced)//it's loc so it doesn't call the mob's handle_fall which does nothing
|
loc.handle_fall(src)//it's loc so it doesn't call the mob's handle_fall which does nothing
|
||||||
|
|
||||||
/mob/living/carbon/is_muzzled()
|
/mob/living/carbon/is_muzzled()
|
||||||
return(istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
|
return(istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
|
||||||
|
|||||||
@@ -121,7 +121,7 @@
|
|||||||
// SIGNAL_HANDLER
|
// SIGNAL_HANDLER
|
||||||
|
|
||||||
if(HAS_TRAIT(src, TRAIT_FLOORED))
|
if(HAS_TRAIT(src, TRAIT_FLOORED))
|
||||||
// on_fall()
|
on_fall()
|
||||||
// set_lying_down()
|
// set_lying_down()
|
||||||
// else if(resting)
|
// else if(resting)
|
||||||
// set_lying_down()
|
// set_lying_down()
|
||||||
|
|||||||
@@ -1538,7 +1538,7 @@
|
|||||||
// if(body_position == STANDING_UP) //force them on the ground
|
// if(body_position == STANDING_UP) //force them on the ground
|
||||||
// set_lying_angle(pick(90, 270))
|
// set_lying_angle(pick(90, 270))
|
||||||
// set_body_position(LYING_DOWN)
|
// set_body_position(LYING_DOWN)
|
||||||
// on_fall()
|
on_fall()
|
||||||
set_resting(TRUE)
|
set_resting(TRUE)
|
||||||
|
|
||||||
/// Proc to append behavior to the condition of being floored. Called when the condition ends.
|
/// Proc to append behavior to the condition of being floored. Called when the condition ends.
|
||||||
|
|||||||
@@ -193,6 +193,7 @@
|
|||||||
/datum/action/cooldown/spell/aoe/blindness
|
/datum/action/cooldown/spell/aoe/blindness
|
||||||
name = "Blindness"
|
name = "Blindness"
|
||||||
desc = "Your prey will be momentarily blind for you to advance on them."
|
desc = "Your prey will be momentarily blind for you to advance on them."
|
||||||
|
button_icon_state = "blind2"
|
||||||
|
|
||||||
cooldown_time = 1 MINUTES
|
cooldown_time = 1 MINUTES
|
||||||
spell_requirements = NONE
|
spell_requirements = NONE
|
||||||
|
|||||||
@@ -224,8 +224,11 @@
|
|||||||
|
|
||||||
/obj/docking_port/stationary/transit
|
/obj/docking_port/stationary/transit
|
||||||
name = "In Transit"
|
name = "In Transit"
|
||||||
|
/// The turf reservation returned by the transit area request
|
||||||
var/datum/turf_reservation/reserved_area
|
var/datum/turf_reservation/reserved_area
|
||||||
|
/// The area created during the transit area reservation
|
||||||
var/area/shuttle/transit/assigned_area
|
var/area/shuttle/transit/assigned_area
|
||||||
|
/// The mobile port that owns this transit port
|
||||||
var/obj/docking_port/mobile/owner
|
var/obj/docking_port/mobile/owner
|
||||||
|
|
||||||
/obj/docking_port/stationary/transit/Initialize()
|
/obj/docking_port/stationary/transit/Initialize()
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 55 KiB |
@@ -141,8 +141,8 @@
|
|||||||
#include "code\__DEFINES\dcs\signals\signals_food.dm"
|
#include "code\__DEFINES\dcs\signals\signals_food.dm"
|
||||||
#include "code\__DEFINES\dcs\signals\signals_gib.dm"
|
#include "code\__DEFINES\dcs\signals\signals_gib.dm"
|
||||||
#include "code\__DEFINES\dcs\signals\signals_global.dm"
|
#include "code\__DEFINES\dcs\signals\signals_global.dm"
|
||||||
#include "code\__DEFINES\dcs\signals\signals_heretic.dm"
|
|
||||||
#include "code\__DEFINES\dcs\signals\signals_global_object.dm"
|
#include "code\__DEFINES\dcs\signals\signals_global_object.dm"
|
||||||
|
#include "code\__DEFINES\dcs\signals\signals_heretic.dm"
|
||||||
#include "code\__DEFINES\dcs\signals\signals_janitor.dm"
|
#include "code\__DEFINES\dcs\signals\signals_janitor.dm"
|
||||||
#include "code\__DEFINES\dcs\signals\signals_mood.dm"
|
#include "code\__DEFINES\dcs\signals\signals_mood.dm"
|
||||||
#include "code\__DEFINES\dcs\signals\signals_moveloop.dm"
|
#include "code\__DEFINES\dcs\signals\signals_moveloop.dm"
|
||||||
|
|||||||
@@ -326,6 +326,7 @@
|
|||||||
button_icon_state = "coffin"
|
button_icon_state = "coffin"
|
||||||
background_icon_state = "bg_vampire"
|
background_icon_state = "bg_vampire"
|
||||||
overlay_icon_state = "bg_vampire_border"
|
overlay_icon_state = "bg_vampire_border"
|
||||||
|
check_flags = NONE
|
||||||
|
|
||||||
school = SCHOOL_SANGUINE
|
school = SCHOOL_SANGUINE
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,7 @@
|
|||||||
SpellAdd(/datum/action/cooldown/spell/pointed/barnyardcurse, 2)
|
SpellAdd(/datum/action/cooldown/spell/pointed/barnyardcurse, 2)
|
||||||
|
|
||||||
if(4) //5x summon guns - no
|
if(4) //5x summon guns - no
|
||||||
SpellAdd(/datum/action/cooldown/spell/conjure_item/infinite_guns, 5, "Greater Summon Guns")
|
SpellAdd(/datum/action/cooldown/spell/conjure_item/infinite_guns/gun, 5, "Greater Summon Guns")
|
||||||
|
|
||||||
if(5)
|
if(5)
|
||||||
//1x space-time distortion, 2x knock, and 2x blink
|
//1x space-time distortion, 2x knock, and 2x blink
|
||||||
@@ -60,7 +60,7 @@
|
|||||||
|
|
||||||
if(6) //5x forcewall, and 5x repulse (AKA the safe space loadout)
|
if(6) //5x forcewall, and 5x repulse (AKA the safe space loadout)
|
||||||
SpellAdd(/datum/action/cooldown/spell/forcewall, 5)
|
SpellAdd(/datum/action/cooldown/spell/forcewall, 5)
|
||||||
SpellAdd(/datum/action/cooldown/spell/aoe/repulse, 5)
|
SpellAdd(/datum/action/cooldown/spell/aoe/repulse/wizard, 5)
|
||||||
|
|
||||||
if(7) //5x Cluwne Curse and 2x blink
|
if(7) //5x Cluwne Curse and 2x blink
|
||||||
SpellAdd(/datum/action/cooldown/spell/pointed/cluwnecurse, 5)
|
SpellAdd(/datum/action/cooldown/spell/pointed/cluwnecurse, 5)
|
||||||
@@ -75,9 +75,9 @@
|
|||||||
SpellAdd(/datum/action/cooldown/spell/shapeshift/mouse, 5)
|
SpellAdd(/datum/action/cooldown/spell/shapeshift/mouse, 5)
|
||||||
SpellAdd(/datum/action/cooldown/spell/pointed/mind_transfer, 5)
|
SpellAdd(/datum/action/cooldown/spell/pointed/mind_transfer, 5)
|
||||||
|
|
||||||
/datum/antagonist/wizard/meme/proc/SpellAdd(spellType, level = 1, custom_name) //0 is the first level (cause logic (arrays start at one))
|
/datum/antagonist/wizard/meme/proc/SpellAdd(spellType, level = 1, custom_name = "") //0 is the first level (cause logic (arrays start at one))
|
||||||
var/datum/action/cooldown/spell/spell_to_add = new spellType(owner.current)
|
var/datum/action/cooldown/spell/spell_to_add = new spellType(owner.current)
|
||||||
spell_to_add.Grant(owner.current)
|
spell_to_add.Grant(owner.current)
|
||||||
spell_to_add.spell_level = level
|
spell_to_add.spell_level = level
|
||||||
spell_to_add.name = custom_name ? custom_name : "Instant [spell_to_add.name]"
|
spell_to_add.name = length(custom_name) ? custom_name : "Instant [spell_to_add.name]"
|
||||||
to_chat(owner, "[spell_to_add.name]")
|
to_chat(owner, "[spell_to_add.name]")
|
||||||
|
|||||||
@@ -2,31 +2,33 @@
|
|||||||
name = "Curse of the Cluwne"
|
name = "Curse of the Cluwne"
|
||||||
desc = "This spell dooms the fate of any unlucky soul to the live of a pitiful cluwne, a terrible creature that is hunted for fun."
|
desc = "This spell dooms the fate of any unlucky soul to the live of a pitiful cluwne, a terrible creature that is hunted for fun."
|
||||||
button_icon = 'yogstation/icons/mob/actions.dmi'
|
button_icon = 'yogstation/icons/mob/actions.dmi'
|
||||||
base_icon_state = "cluwne"
|
button_icon_state = "cluwne"
|
||||||
ranged_mousepointer = 'icons/effects/mouse_pointers/cluwne_target.dmi'
|
ranged_mousepointer = 'icons/effects/mouse_pointers/cluwne_target.dmi'
|
||||||
|
|
||||||
school = SCHOOL_TRANSMUTATION
|
school = SCHOOL_TRANSMUTATION
|
||||||
invocation = "CLU WO'NIS CA'TE'BEST'IS MAXIMUS!"
|
invocation = "CLU WO'NIS CA'TE'BEST'IS MAXIMUS!"
|
||||||
invocation_type = INVOCATION_SHOUT
|
invocation_type = INVOCATION_SHOUT
|
||||||
|
|
||||||
|
base_icon_state = "cluwne"
|
||||||
cast_range = 3
|
cast_range = 3
|
||||||
cooldown_time = 1 MINUTES
|
cooldown_time = 1 MINUTES
|
||||||
cooldown_reduction_per_rank = 12.5 SECONDS
|
cooldown_reduction_per_rank = 12.5 SECONDS
|
||||||
var/list/compatible_mobs = list(/mob/living/carbon/human)
|
|
||||||
|
|
||||||
/datum/action/cooldown/spell/pointed/cluwnecurse/InterceptClickOn(mob/living/caller, params, atom/click_target)
|
/datum/action/cooldown/spell/pointed/cluwnecurse/is_valid_target(atom/cast_on)
|
||||||
. = ..()
|
if(!ishuman(cast_on))
|
||||||
if(!.)
|
to_chat(owner, span_notice("You are unable to curse [cast_on]!"))
|
||||||
return FALSE
|
|
||||||
var/mob/living/carbon/target = click_target
|
|
||||||
if(!(target.type in compatible_mobs))
|
|
||||||
to_chat(owner, span_notice("You are unable to curse [target]!"))
|
|
||||||
return FALSE
|
return FALSE
|
||||||
|
var/mob/living/target = cast_on
|
||||||
if(target.anti_magic_check())
|
if(target.anti_magic_check())
|
||||||
to_chat(owner, span_notice("They didn't laugh!"))
|
to_chat(owner, span_notice("They didn't laugh!"))
|
||||||
return FALSE
|
return FALSE
|
||||||
var/mob/living/carbon/human/H = target
|
return TRUE
|
||||||
H.cluwneify()
|
|
||||||
|
/datum/action/cooldown/spell/pointed/cluwnecurse/InterceptClickOn(mob/living/caller, params, mob/living/carbon/human/target)
|
||||||
|
. = ..()
|
||||||
|
if(!.)
|
||||||
|
return FALSE
|
||||||
|
target.cluwneify()
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
/datum/spellbook_entry/cluwnecurse
|
/datum/spellbook_entry/cluwnecurse
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
/datum/action/cooldown/spell/pointed/projectile/animation
|
/datum/action/cooldown/spell/pointed/projectile/animation
|
||||||
name = "Animation"
|
name = "Animation"
|
||||||
desc = "This spell fires an animation bolt at a target."
|
desc = "This spell fires an animation bolt at a target."
|
||||||
base_icon_state = "staffofanimation"
|
button_icon = 'icons/obj/guns/magic.dmi'
|
||||||
|
button_icon_state = "staffofanimation"
|
||||||
|
|
||||||
invocation = "ONA ANIMATUS"
|
invocation = "ONA ANIMATUS"
|
||||||
invocation_type = INVOCATION_SHOUT
|
invocation_type = INVOCATION_SHOUT
|
||||||
|
|
||||||
|
base_icon_state = "staffofanimation"
|
||||||
sound = 'sound/magic/staff_animation.ogg'
|
sound = 'sound/magic/staff_animation.ogg'
|
||||||
cast_range = 20
|
cast_range = 20
|
||||||
cooldown_time = 6 SECONDS
|
cooldown_time = 6 SECONDS
|
||||||
|
|||||||
@@ -3,4 +3,4 @@
|
|||||||
desc = "Take on the shape of a mouse."
|
desc = "Take on the shape of a mouse."
|
||||||
invocation = "SQUEAAAKKKK!"
|
invocation = "SQUEAAAKKKK!"
|
||||||
convert_damage = FALSE
|
convert_damage = FALSE
|
||||||
shapeshift_type = /mob/living/simple_animal/mouse
|
possible_shapes = list(/mob/living/simple_animal/mouse)
|
||||||
|
|||||||
Reference in New Issue
Block a user