fixes some more amtag bugs (#19059)

* e

* Update _powers.dm

* e2

* e

* e2
This commit is contained in:
tattax
2023-05-31 20:04:53 -03:00
committed by GitHub
parent bdcb897f80
commit d91ec4fcbb
29 changed files with 90 additions and 65 deletions

View File

@@ -956,6 +956,10 @@
return FALSE
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
*

View File

@@ -14,9 +14,7 @@
cooldown_time = 20 SECONDS
/// Left buster-arm means megabuster goes in left hand
/datum/action/cooldown/buster/megabuster/l/Trigger()
if(!..())
return FALSE
/datum/action/cooldown/buster/megabuster/l/Activate()
var/obj/item/buster/megabuster/B = new()
owner.visible_message(span_userdanger("[owner]'s left arm begins crackling loudly!"))
playsound(owner,'sound/effects/beepskyspinsabre.ogg', 60, 1)
@@ -30,9 +28,7 @@
StartCooldown()
/// Right buster-arm means megabuster goes in right hand
/datum/action/cooldown/buster/megabuster/r/Trigger()
if(!..())
return FALSE
/datum/action/cooldown/buster/megabuster/r/Activate()
var/obj/item/buster/megabuster/B = new()
owner.visible_message(span_userdanger("[owner]'s right arm begins crackling loudly!"))
playsound(owner,'sound/effects/beepskyspinsabre.ogg', 60, 1)
@@ -46,20 +42,20 @@
StartCooldown()
/datum/action/cooldown/buster/megabuster/l/IsAvailable(feedback = FALSE)
. = ..()
var/mob/living/O = owner
var/obj/item/bodypart/l_arm/L = O.get_bodypart(BODY_ZONE_L_ARM)
if(L?.bodypart_disabled)
to_chat(owner, span_warning("The arm isn't in a functional state right now!"))
return FALSE
return ..()
/datum/action/cooldown/buster/megabuster/r/IsAvailable(feedback = FALSE)
. = ..()
var/mob/living/O = owner
var/obj/item/bodypart/r_arm/R = O.get_bodypart(BODY_ZONE_R_ARM)
if(R?.bodypart_disabled)
to_chat(owner, span_warning("The arm isn't in a functional state right now!"))
return FALSE
return ..()
////////////////// Megabuster Item //////////////////
/obj/item/buster/megabuster

View File

@@ -502,9 +502,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
/turf/proc/acid_melt()
return
/turf/handle_fall(mob/faller, forced)
if(!forced)
return
/turf/handle_fall(mob/faller)
if(has_gravity(src))
playsound(src, "bodyfall", 50, 1)
faller.drop_all_held_items()

View File

@@ -396,7 +396,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
//check if they were a 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
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

View File

@@ -33,7 +33,7 @@
. += "Current Frenzy Enter: [FRENZY_THRESHOLD_ENTER + bloodsuckerdatum.humanity_lost * 10]"
. += "Current Frenzy Leave: [FRENZY_THRESHOLD_EXIT + bloodsuckerdatum.humanity_lost * 10]"
. += "Blood Drank: [bloodsuckerdatum.total_blood_drank]"
if(bloodsuckerdatum.current_task)
if(bloodsuckerdatum.has_task)
. += "Task Blood Drank: [bloodsuckerdatum.task_blood_drank]"
// INTEGRATION: Adding Procs and Datums to existing "classes" //

View File

@@ -33,7 +33,7 @@
///If we are currently in a Frenzy
var/frenzied = FALSE
///If we have a task assigned
var/current_task = FALSE
var/has_task = FALSE
///How many times have we used a blood altar
var/altar_uses = 0

View File

@@ -141,7 +141,13 @@
to_chat(user, span_warning("Not while you're incapacitated!"))
return FALSE
// 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]."))
return FALSE
return TRUE
@@ -215,7 +221,11 @@
/datum/action/cooldown/bloodsucker/proc/ContinueActive(mob/living/user, mob/living/target)
if(!user)
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
/// Used to unlearn Single-Use Powers

View File

@@ -132,13 +132,13 @@
to_chat(user, span_warning("You can't figure out how this works."))
return
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
to_chat(user, span_notice("You have done all tasks for the night, come back tomorrow for more."))
return
if(!check_completion(user) && bloodsuckerdatum.current_task) //not done but has a task? put them on their way
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"))
var/want_rank = tgui_alert(user, "Do you want to gain a task? This will cost 50 Blood.", "Task Manager", list("Yes", "No"))
if(want_rank != "Yes" || QDELETED(src))
return
generate_task(user) //generate
@@ -163,7 +163,7 @@
if(crewmate.blood_volume < 50)
to_chat(user, span_danger("You don't have enough blood to gain a task!"))
return
crewmate.blood_volume -= 50
bloodsuckerdatum.AddBloodVolume(-50)
switch(rand(1, 3))
if(1,2)
bloodsuckerdatum.task_blood_required = suckamount
@@ -173,15 +173,15 @@
task = "Sacrifice [heartamount] hearts by using them on the altar."
sacrificialtask = TRUE
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!"))
/obj/structure/bloodsucker/bloodaltar/proc/check_completion(mob/living/user)
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
bloodsuckerdatum.task_memory = null
bloodsuckerdatum.current_task = FALSE
bloodsuckerdatum.has_task = FALSE
bloodsuckerdatum.bloodsucker_level_unspent++
bloodsuckerdatum.altar_uses++
bloodsuckerdatum.task_blood_drank = 0
@@ -334,11 +334,11 @@
if(8 to INFINITY)
to_chat(user, span_notice("You have evolved all abilities possible."))
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))
return
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))
return
var/mob/living/carbon/C = user

View File

@@ -102,7 +102,7 @@
total_blood_drank += blood_taken
if(frenzied)
frenzy_blood_drank += blood_taken
if(current_task)
if(has_task)
if(target.mind)
task_blood_drank += blood_taken
else

View File

@@ -133,7 +133,7 @@
.["Convert To Traitor"] = CALLBACK(src, PROC_REF(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
var/datum/antagonist/traitor/tot = new()

View File

@@ -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 \
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!"
background_icon = 'icons/mob/actions/actions_minor_antag.dmi'
button_icon = 'icons/mob/actions/actions_minor_antag.dmi'
button_icon_state = "daemontransform"
background_icon_state = "bg_demon"
invocation = "COWER, MORTALS!!"
shapeshift_type = /mob/living/simple_animal/lesserdemon
possible_shapes = list(/mob/living/simple_animal/lesserdemon)
spell_requirements = NONE

View File

@@ -2,7 +2,6 @@
name = "Gluttonous Wall"
desc = "Create a magical barrier that only allows fat people to pass through."
button_icon = 'icons/mob/actions/actions_minor_antag.dmi'
background_icon = 'icons/mob/actions/actions_minor_antag.dmi'
button_icon_state = "blob"
background_icon_state = "bg_demon"
@@ -15,10 +14,10 @@
/datum/action/cooldown/spell/shapeshift/demon/gluttony //emergency get out of jail card, but better. It also eats everything.
name = "Gluttony Demon Form"
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. \
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."
shapeshift_type = /mob/living/simple_animal/lesserdemon/gluttony
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! \
Your unique form as a demon of gluttony also allows you to eat corpses to heal yourself."
possible_shapes = list(/mob/living/simple_animal/lesserdemon/gluttony)
/mob/living/simple_animal/lesserdemon/gluttony //capable of devouring corpses for health
name = "gluttonous demon"

View File

@@ -1,6 +1,6 @@
/datum/action/cooldown/spell/shapeshift/demon/wrath //emergency get out of jail card, but better.
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.
name = "wrathful demon"

View File

@@ -41,6 +41,7 @@
* 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)
SHOULD_CALL_PARENT(TRUE) //for now
var/datum/antagonist/heretic/EC = user.mind?.has_antag_datum(/datum/antagonist/heretic)
for(var/X in unlocked_transmutations)
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)
created_spell.Grant(user)
created_spell_ref = WEAKREF(created_spell)
. = ..()
/datum/eldritch_knowledge/spell/on_lose(mob/user, datum/antagonist/heretic/our_heretic)
var/datum/action/cooldown/spell/created_spell = created_spell_ref?.resolve()

View File

@@ -31,6 +31,7 @@
return FALSE
/datum/antagonist/rev/apply_innate_effects(mob/living/mob_override)
. = ..()
var/mob/living/M = mob_override || owner.current
M.grant_language(/datum/language/french, TRUE, TRUE, LANGUAGE_REVOLUTIONARY)
add_team_hud(M, /datum/antagonist/rev)
@@ -38,6 +39,7 @@
/datum/antagonist/rev/remove_innate_effects(mob/living/mob_override)
var/mob/living/M = mob_override || owner.current
M.remove_language(/datum/language/french, TRUE, TRUE, LANGUAGE_REVOLUTIONARY)
return ..()
/datum/antagonist/rev/proc/equip_rev()
return
@@ -50,7 +52,7 @@
/datum/antagonist/rev/on_removal()
remove_objectives()
. = ..()
return ..()
/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!"))

View File

@@ -414,23 +414,26 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
set name = "Teleport"
set desc= "Teleport to a location"
if(!isobserver(usr))
to_chat(usr, "Not when you're not dead!")
to_chat(usr, span_warning("Not when you're not dead!"))
return
var/list/filtered = list()
for(var/area/A as anything in get_sorted_areas())
if(!A.hidden)
filtered += A
var/area/thearea = tgui_input_list(usr, "Area to jump to", "BOOYEA", filtered)
var/area/thearea = tgui_input_list(usr, "Area to jump to", "BOOYEA", filtered)
if(!thearea)
return
if(!isobserver(usr))
to_chat(usr, span_warning("Not when you're not dead!"))
return
var/list/L = list()
for(var/turf/T in get_area_turfs(thearea.type))
L+=T
if(!L || !L.len)
to_chat(usr, "No area available.")
if(!L || !length(L))
to_chat(usr, span_warning("No area available."))
return
usr.forceMove(pick(L))

View File

@@ -13,6 +13,8 @@
span_notice("[owner] slowly peeks up from the ground..."),
span_noticealien("You stop hiding."),
)
else
owner.layer = hide_layer
owner.visible_message(
span_name("[owner] scurries to the ground!"),

View File

@@ -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]."))
return
/mob/living/carbon/fall(forced)
if(loc)
loc.handle_fall(src, forced)//it's loc so it doesn't call the mob's handle_fall which does nothing
/mob/living/carbon/on_fall()
. = ..()
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()
return(istype(src.wear_mask, /obj/item/clothing/mask/muzzle))

View File

@@ -121,7 +121,7 @@
// SIGNAL_HANDLER
if(HAS_TRAIT(src, TRAIT_FLOORED))
// on_fall()
on_fall()
// set_lying_down()
// else if(resting)
// set_lying_down()

View File

@@ -1538,7 +1538,7 @@
// if(body_position == STANDING_UP) //force them on the ground
// set_lying_angle(pick(90, 270))
// set_body_position(LYING_DOWN)
// on_fall()
on_fall()
set_resting(TRUE)
/// Proc to append behavior to the condition of being floored. Called when the condition ends.

View File

@@ -193,6 +193,7 @@
/datum/action/cooldown/spell/aoe/blindness
name = "Blindness"
desc = "Your prey will be momentarily blind for you to advance on them."
button_icon_state = "blind2"
cooldown_time = 1 MINUTES
spell_requirements = NONE

View File

@@ -224,8 +224,11 @@
/obj/docking_port/stationary/transit
name = "In Transit"
/// The turf reservation returned by the transit area request
var/datum/turf_reservation/reserved_area
/// The area created during the transit area reservation
var/area/shuttle/transit/assigned_area
/// The mobile port that owns this transit port
var/obj/docking_port/mobile/owner
/obj/docking_port/stationary/transit/Initialize()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 55 KiB

View File

@@ -141,8 +141,8 @@
#include "code\__DEFINES\dcs\signals\signals_food.dm"
#include "code\__DEFINES\dcs\signals\signals_gib.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_heretic.dm"
#include "code\__DEFINES\dcs\signals\signals_janitor.dm"
#include "code\__DEFINES\dcs\signals\signals_mood.dm"
#include "code\__DEFINES\dcs\signals\signals_moveloop.dm"

View File

@@ -326,6 +326,7 @@
button_icon_state = "coffin"
background_icon_state = "bg_vampire"
overlay_icon_state = "bg_vampire_border"
check_flags = NONE
school = SCHOOL_SANGUINE

View File

@@ -50,7 +50,7 @@
SpellAdd(/datum/action/cooldown/spell/pointed/barnyardcurse, 2)
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)
//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)
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
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/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)
spell_to_add.Grant(owner.current)
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]")

View File

@@ -2,31 +2,33 @@
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."
button_icon = 'yogstation/icons/mob/actions.dmi'
base_icon_state = "cluwne"
button_icon_state = "cluwne"
ranged_mousepointer = 'icons/effects/mouse_pointers/cluwne_target.dmi'
school = SCHOOL_TRANSMUTATION
invocation = "CLU WO'NIS CA'TE'BEST'IS MAXIMUS!"
invocation_type = INVOCATION_SHOUT
base_icon_state = "cluwne"
cast_range = 3
cooldown_time = 1 MINUTES
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)
. = ..()
if(!.)
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]!"))
/datum/action/cooldown/spell/pointed/cluwnecurse/is_valid_target(atom/cast_on)
if(!ishuman(cast_on))
to_chat(owner, span_notice("You are unable to curse [cast_on]!"))
return FALSE
var/mob/living/target = cast_on
if(target.anti_magic_check())
to_chat(owner, span_notice("They didn't laugh!"))
return FALSE
var/mob/living/carbon/human/H = target
H.cluwneify()
return TRUE
/datum/action/cooldown/spell/pointed/cluwnecurse/InterceptClickOn(mob/living/caller, params, mob/living/carbon/human/target)
. = ..()
if(!.)
return FALSE
target.cluwneify()
return TRUE
/datum/spellbook_entry/cluwnecurse

View File

@@ -1,11 +1,13 @@
/datum/action/cooldown/spell/pointed/projectile/animation
name = "Animation"
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_type = INVOCATION_SHOUT
base_icon_state = "staffofanimation"
sound = 'sound/magic/staff_animation.ogg'
cast_range = 20
cooldown_time = 6 SECONDS

View File

@@ -3,4 +3,4 @@
desc = "Take on the shape of a mouse."
invocation = "SQUEAAAKKKK!"
convert_damage = FALSE
shapeshift_type = /mob/living/simple_animal/mouse
possible_shapes = list(/mob/living/simple_animal/mouse)