Merge branch 'master' into pr/784

This commit is contained in:
BongaTheProto
2024-05-14 19:23:36 -05:00
1986 changed files with 300592 additions and 259562 deletions
@@ -1,21 +1,21 @@
/datum/gear/accessories/ring
/datum/gear/accessory/ring
slot = ITEM_SLOT_ACCESSORY
/datum/gear/accessories/ring/goldring
/datum/gear/accessory/ring/goldring
name = "A gold ring"
path = /obj/item/clothing/accessory/ring
cost = 2
/datum/gear/accessories/ring/silverring
/datum/gear/accessory/ring/silverring
name = "A silver ring"
path = /obj/item/clothing/accessory/ring/silver
cost = 2
/datum/gear/accessories/ring/diamondring
/datum/gear/accessory/ring/diamondring
name = "A diamond ring"
path = /obj/item/clothing/accessory/ring/diamond
cost = 4
/datum/gear/accessories/ring/customring
/datum/gear/accessory/ring/customring
name = "A ring, renameable"
path = /obj/item/clothing/accessory/ring/custom
@@ -108,7 +108,7 @@
if(camera)
camera.remove_target_ui()
camera.forceMove(user)
teleport_now.UpdateButtonIcon()
teleport_now.UpdateButtons()
/obj/item/clothing/suit/space/chronos/proc/chronowalk(atom/location)
var/mob/living/carbon/human/user = src.loc
@@ -122,7 +122,7 @@
if(camera)
camera.remove_target_ui()
teleport_now.UpdateButtonIcon()
teleport_now.UpdateButtons()
user.ExtinguishMob()
@@ -135,12 +135,12 @@
user.Stun(INFINITY)
animate(user, color = "#00ccee", time = 3)
phase_timer_id = addtimer(CALLBACK(src, .proc/phase_2, user, to_turf, phase_in_ds), 3, TIMER_STOPPABLE)
phase_timer_id = addtimer(CALLBACK(src, PROC_REF(phase_2), user, to_turf, phase_in_ds), 3, TIMER_STOPPABLE)
/obj/item/clothing/suit/space/chronos/proc/phase_2(mob/living/carbon/human/user, turf/to_turf, phase_in_ds)
if(teleporting && activated && user)
animate(user, alpha = 0, time = 2)
phase_timer_id = addtimer(CALLBACK(src, .proc/phase_3, user, to_turf, phase_in_ds), 2, TIMER_STOPPABLE)
phase_timer_id = addtimer(CALLBACK(src, PROC_REF(phase_3), user, to_turf, phase_in_ds), 2, TIMER_STOPPABLE)
else
finish_chronowalk(user, to_turf)
@@ -148,14 +148,14 @@
if(teleporting && activated && user)
user.forceMove(to_turf)
animate(user, alpha = 255, time = phase_in_ds)
phase_timer_id = addtimer(CALLBACK(src, .proc/phase_4, user, to_turf), phase_in_ds, TIMER_STOPPABLE)
phase_timer_id = addtimer(CALLBACK(src, PROC_REF(phase_4), user, to_turf), phase_in_ds, TIMER_STOPPABLE)
else
finish_chronowalk(user, to_turf)
/obj/item/clothing/suit/space/chronos/proc/phase_4(mob/living/carbon/human/user, turf/to_turf)
if(teleporting && activated && user)
animate(user, color = "#ffffff", time = 3)
phase_timer_id = addtimer(CALLBACK(src, .proc/finish_chronowalk, user, to_turf), 3, TIMER_STOPPABLE)
phase_timer_id = addtimer(CALLBACK(src, PROC_REF(finish_chronowalk), user, to_turf), 3, TIMER_STOPPABLE)
else
finish_chronowalk(user, to_turf)
@@ -108,9 +108,9 @@
if(prob(explodioprobemp))
playsound(src.loc, 'sound/effects/fuse.ogg', 60, 1, 10)
visible_message("<span class ='warning'>The power module on the [src] begins to smoke, glowing with an alarming warmth! Get away from it, now!")
addtimer(CALLBACK(src, .proc/detonate),50)
addtimer(CALLBACK(src, PROC_REF(detonate)),50)
else
addtimer(CALLBACK(src, .proc/revivemessage), rebootdelay)
addtimer(CALLBACK(src, PROC_REF(revivemessage)), rebootdelay)
return
/obj/item/clothing/suit/space/hardsuit/powerarmor/proc/revivemessage() //we use this proc to add a timer, so we can have it take a while to boot
@@ -86,3 +86,99 @@
set_pin_data(IC_INPUT, 1, 0)
set_pin_data(IC_INPUT, 2, 0)
..()
/obj/item/integrated_circuit/input/quick_button
name = "quick button"
desc = "A button that can be used to quickly activate a pin."
extended_desc = "This circuit adds a button to the assembly that can be easily accessed while the machine is being held. \
<br>\"grant access to\" can be used to grant access to this button to internal pAIs or MMIs."
can_be_asked_input = FALSE // Does not summon an input box.
spawn_flags = IC_SPAWN_RESEARCH
inputs = list(
"grant access to" = IC_PINTYPE_REF,
"button name" = IC_PINTYPE_STRING,
"button style" = IC_PINTYPE_STRING
)
activators = list("on pressed" = IC_PINTYPE_PULSE_OUT)
var/static/list/button_styles = list("blank","one","two","three","four","five","plus","minus","exclamation","question","cross","info","heart","skull","brain","brain_damage","injection","blood","shield","reaction","network","power","radioactive","electricity","magnetism","scan","repair","id","wireless","say","sleep","bomb")
var/datum/action/circuit_action/circuit
/obj/item/integrated_circuit/input/quick_button/Initialize(mapload)
. = ..()
extended_desc += "<br>Possible button styles: "
extended_desc += english_list(button_styles)
circuit = new(src)
update_button_style()
RegisterSignal(circuit, COMSIG_ACTION_TRIGGER, PROC_REF(on_action_trigger))
/obj/item/integrated_circuit/input/quick_button/Destroy()
UnregisterSignal(circuit, COMSIG_ACTION_TRIGGER)
QDEL_NULL(circuit)
. = ..()
/obj/item/integrated_circuit/input/quick_button/Moved(atom/OldLoc, Dir)
. = ..()
if(istype(loc, /obj/item/electronic_assembly))
update_button_owner()
else if(circuit.owner)
circuit.Remove(circuit.owner)
/obj/item/integrated_circuit/input/quick_button/on_data_written()
update_button_style()
update_button_owner()
/obj/item/integrated_circuit/input/quick_button/ext_moved(oldLoc, dir)
update_button_owner()
/obj/item/integrated_circuit/input/quick_button/proc/update_button_style()
var/button_name = get_pin_data(IC_INPUT, 2)
var/button_style = get_pin_data(IC_INPUT, 3)
circuit.name = button_name ? button_name : "Quick button"
circuit.button_icon_state = (button_style in button_styles) ? "nanite_[button_style]" : "nanite_power"
circuit.UpdateButtons()
/obj/item/integrated_circuit/input/quick_button/proc/update_button_owner()
var/obj/item/user_container = get_pin_data(IC_INPUT, 1)
var/mob/user
if(istype(user_container, /obj/item/mmi))
var/obj/item/mmi/mmi = user_container
if(!istype(mmi.loc, /obj/item/integrated_circuit/input/mmi_tank)) // Must be inside an MMI tank.
return
var/obj/item/integrated_circuit/input/mmi_tank/mmi_tank = mmi.loc
if(!(mmi_tank.assembly != assembly)) // The MMI must be in the same assembly as the button.
return
if(!mmi.brainmob) // How did we get here?
return
user = mmi.brainmob
else if (istype(user_container, /obj/item/paicard))
var/obj/item/paicard/paicard = user_container
if(!istype(paicard.loc, /obj/item/integrated_circuit/input/pAI_connector)) // Must be a pAI connector.
return
var/obj/item/integrated_circuit/input/pAI_connector/pai_connector = paicard.loc
if(!(pai_connector.assembly != assembly)) // The pAI connector must be in the same assembly as the button.
return
if(!paicard.pai) // Please, don't do this, have a mob.
return
user = paicard.pai
else if(ismob(assembly.loc)) // Last priority, the location, which means you SHOULD be holding it to gain the button.
user = assembly.loc
else if(circuit.owner) // If you're none of these, we take the button back and give it to nobody.
circuit.Remove(circuit.owner)
return
circuit.Grant(user)
/obj/item/integrated_circuit/input/quick_button/proc/on_action_trigger(datum/action/circuit_action, obj/item/source)
var/button_name = get_pin_data(IC_INPUT, 2)
to_chat(circuit.owner, span_notice("You press the button labeled '[button_name ? button_name : "Quick button"]'."))
assembly.balloon_alert(circuit.owner, "activated!")
activate_pin(1)
/datum/action/circuit_action
name = "Quick button"
icon_icon = 'icons/mob/actions/actions_items.dmi'
button_icon_state = "nanite_power"
@@ -75,7 +75,7 @@
/obj/item/crusher_trophy/brokentech/on_projectile_fire(obj/item/projectile/destabilizer/marker, mob/living/user)
. = ..()
if(cooldowntime < world.time)
INVOKE_ASYNC(src, .proc/invokesmoke, user)
INVOKE_ASYNC(src, PROC_REF(invokesmoke), user)
/obj/item/crusher_trophy/brokentech/proc/invokesmoke(mob/living/user)
cooldown = world.time + cooldowntime
@@ -207,7 +207,7 @@
D.fire()
charged = FALSE
update_icon()
addtimer(CALLBACK(src, .proc/Recharge), charge_time)
addtimer(CALLBACK(src, PROC_REF(Recharge)), charge_time)
return
if(proximity_flag && isliving(target))
var/mob/living/L = target
@@ -374,7 +374,7 @@
if(!QDELETED(target))
var/obj/item/crusher_trophy/T = t
T.on_melee_hit(target, user)
if(!QDELETED(C) && !QDELETED(target))
if(C && !QDELING(C) && !QDELETED(target)) // C can be 0 here, and QDELETED will runtime if that's the case.
C.total_damage += target_health - target.health //we did some damage, but let's not assume how much we did
/obj/item/melee/zweihander/afterattack(atom/target, mob/living/user, proximity_flag, clickparams)
@@ -397,7 +397,7 @@
D.fire()
charged = FALSE
update_icon()
addtimer(CALLBACK(src, .proc/Recharge), charge_time)
addtimer(CALLBACK(src, PROC_REF(Recharge)), charge_time)
return
if(proximity_flag && isliving(target))
var/mob/living/L = target
@@ -410,18 +410,18 @@
var/obj/item/crusher_trophy/T = t
T.on_mark_detonation(target, user)
if(!QDELETED(L))
if(!QDELETED(C))
if(C && !QDELING(C)) // C can be 0 here, and QDELETED will runtime if that's the case.
C.total_damage += target_health - L.health //we did some damage, but let's not assume how much we did
new /obj/effect/temp_visual/kinetic_blast(get_turf(L))
var/backstab_dir = get_dir(user, L)
var/def_check = L.getarmor(type = "bomb")
if((user.dir & backstab_dir) && (L.dir & backstab_dir))
if(!QDELETED(C))
if(C && !QDELING(C)) // See above.
C.total_damage += detonation_damage + backstab_bonus //cheat a little and add the total before killing it, so certain mobs don't have much lower chances of giving an item
L.apply_damage(detonation_damage + backstab_bonus, BRUTE, blocked = def_check)
playsound(user, 'sound/weapons/kenetic_accel.ogg', 100, 1) //Seriously who spelled it wrong
else
if(!QDELETED(C))
if(C && !QDELING(C)) // See above.
C.total_damage += detonation_damage
L.apply_damage(detonation_damage, BRUTE, blocked = def_check)
@@ -113,7 +113,7 @@
/obj/item/gun/ballistic/revolver/doublebarrel/super/attack_self(mob/living/user)
if(toggled)
return 0
return FALSE
else
..()
@@ -121,10 +121,10 @@
if(toggled)
charge_tick++
if(charge_tick < recharge_rate)
return 0
return FALSE
charge_tick = 0
chambered.newshot()
return 1
return TRUE
else
..()
@@ -226,8 +226,8 @@
/obj/item/crucible/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_TWOHANDED_WIELD, .proc/wield)
RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, .proc/unwield)
RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(wield))
RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(unwield))
/obj/item/crucible/ComponentInitialize()
. = ..()
@@ -637,7 +637,7 @@
/obj/item/clothing/accessory/lavawalk/ComponentInitialize()
. = ..()
lavawalk = new(src)
RegisterSignal(lavawalk, COMSIG_ACTION_TRIGGER, .proc/activate)
RegisterSignal(lavawalk, COMSIG_ACTION_TRIGGER, PROC_REF(activate))
/obj/item/clothing/accessory/lavawalk/Destroy()
. = ..()
@@ -664,7 +664,8 @@
desc = "Become immune to lava for a brief period of time."
check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUN|AB_CHECK_CONSCIOUS
cooldown_time = 2 MINUTES //two full minutes
use_target_appearance = TRUE
icon_icon = 'icons/obj/clothing/accessories.dmi'
button_icon_state = "gold"
/obj/item/clothing/accessory/lavawalk/proc/activate(datum/action/cooldown/lavawalk/action, obj/item/clothing/accessory/lavawalk/item)
var/mob/living/L = usr
@@ -673,7 +674,7 @@
L.balloon_alert(L, "activated")
ADD_TRAIT(L, TRAIT_ASHSTORM_IMMUNE, src)
ADD_TRAIT(L, TRAIT_LAVA_IMMUNE, src)
timer = addtimer(CALLBACK(src, .proc/reset_user, L), effectduration)
timer = addtimer(CALLBACK(src, PROC_REF(reset_user), L), effectduration, TIMER_STOPPABLE)
action.StartCooldown()
/obj/item/clothing/accessory/lavawalk/proc/reset_user(mob/living/user)
@@ -681,7 +682,7 @@
REMOVE_TRAIT(user, TRAIT_LAVA_IMMUNE, src)
to_chat(user, span_boldwarning("\The [src]'s glow dims."))
user.balloon_alert(user, "wore off")
QDEL_NULL(timer)
deltimer(timer)
//Nerfing those on the chest because too OP yada yada
/obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor/damaged
+1 -1
View File
@@ -11,7 +11,7 @@
I.icon_state = state
M.vis_contents += I
animate(I, alpha = 255, time = 5, easing = BOUNCE_EASING, pixel_y = 10)
addtimer(CALLBACK(GLOBAL_PROC, /proc/finish_flick, M, I), time, TIMER_STOPPABLE | TIMER_CLIENT_TIME)
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(finish_flick), M, I), time, TIMER_STOPPABLE | TIMER_CLIENT_TIME)
/proc/finish_flick(mob/M, I)
M.vis_contents -= I
@@ -25,29 +25,3 @@
hud_used.thirst.icon_state = "hydration3"
if(0 to THIRST_LEVEL_PARCHED)
hud_used.thirst.icon_state = "hydration4"
//It's here so it doesn't make a big mess on randomverbs.dm,
//also because of this you can proccall it, why would you if you have smite?
/mob/living/proc/pregoodbye(C)
if(isanimal(C))
var/mob/living/simple_animal/D = C
D.toggle_ai(AI_OFF)
AllImmobility(900, TRUE, TRUE) // Complete 15 minutes of stun, hopefully they shouldn't take that long
playsound(C, "modular_sand/sound/effects/admin_punish/changetheworld.ogg", 100, FALSE)
say("Change the world")
stoplag(20)
playsound(C, "modular_sand/sound/effects/admin_punish/myfinalmessage.ogg", 100, FALSE)
say("My final message")
stoplag(20)
playsound(C, "modular_sand/sound/effects/admin_punish/goodbye.ogg", 100, FALSE)
say("Goodbye.")
stoplag(20)
playsound(C, "modular_sand/sound/effects/admin_punish/endjingle.ogg", 100, FALSE)
goodbye()
/mob/living/proc/goodbye() //this must be separate because it's a loop!
while(alpha >= 10)
alpha = alpha - 7
stoplag(1)
stoplag(2)
Destroy()
@@ -34,3 +34,27 @@
mob_size = MOB_SIZE_HUMAN
if(1.21 to INFINITY)
mob_size = MOB_SIZE_LARGE
// It's here so it doesn't make a big mess on randomverbs.dm,
// also because of this you can proccall it, why would you if you have smite?
// This code was bad. For future reference, stoplag() and sleep() are very different and not at all interchangeable.
// You can also use animate() to cleanly animate variables like alpha.
// Finally, NEVER call Destroy() directly.
/mob/living/proc/goodbye()
set waitfor = FALSE
if(isanimal(src))
var/mob/living/simple_animal/simple_animal = src
simple_animal.toggle_ai(AI_OFF)
AllImmobility(INFINITY, TRUE, TRUE)
playsound(src, "modular_sand/sound/effects/admin_punish/changetheworld.ogg", 100, FALSE)
say("Change the world")
sleep(20)
playsound(src, "modular_sand/sound/effects/admin_punish/myfinalmessage.ogg", 100, FALSE)
say("My final message")
sleep(20)
playsound(src, "modular_sand/sound/effects/admin_punish/goodbye.ogg", 100, FALSE)
say("Goodbye.")
sleep(20)
playsound(src, "modular_sand/sound/effects/admin_punish/endjingle.ogg", 100, FALSE)
animate(src, alpha = 10, 3.5 SECONDS)
QDEL_IN(src, 2)
@@ -17,7 +17,7 @@
QDEL_NULL(builtInCamera)
/mob/living/silicon/robot/modules/roleplay/binarycheck()
return 0 //Roleplay borgs aren't truly borgs
return FALSE //Roleplay borgs aren't truly borgs
/// Allows "cyborg" players to change gender at will
/mob/living/silicon/robot/verb/toggle_gender()
@@ -38,7 +38,7 @@
/obj/item/stack/sheet/rglass/cyborg,
/obj/item/stack/rods/cyborg,
/obj/item/stack/tile/plasteel/cyborg,
/obj/item/destTagger/borg,
/obj/item/dest_tagger/borg,
/obj/item/stack/cable_coil/cyborg,
/obj/item/restraints/handcuffs/cable/zipties,
/obj/item/stack/medical/gauze/cyborg,
@@ -81,7 +81,7 @@
"BootyNukie" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "bootynukie"), // SPLURT Addon (Hyper Port)
"BootyGorlex" = image(icon = 'modular_splurt/icons/mob/robots.dmi', icon_state = "bootygorlex") // SPLURT Addon (Hyper Port)
))
var/syndiejack_icon = show_radial_menu(R, R , syndicatejack_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE)
var/syndiejack_icon = show_radial_menu(R, R , syndicatejack_icons, custom_check = CALLBACK(src, PROC_REF(check_menu), R), radius = 42, require_near = TRUE)
switch(syndiejack_icon)
if("Saboteur")
cyborg_base_icon = "synd_engi"
@@ -294,10 +294,10 @@
return
if(patient && path.len == 0 && (get_dist(src,patient) > 1))
path = get_path_to(src, get_turf(patient), /turf/proc/Distance_cardinal, 0, 30,id=access_card)
path = get_path_to(src, get_turf(patient), 0, 30,id=access_card)
mode = BOT_MOVING
if(!path.len) //try to get closer if you can't reach the patient directly
path = get_path_to(src, get_turf(patient), /turf/proc/Distance_cardinal, 0, 30,1,id=access_card)
path = get_path_to(src, get_turf(patient), 0, 30,1,id=access_card)
if(!path.len) //Do not chase a patient we cannot reach.
soft_reset()
@@ -36,13 +36,13 @@ Removes slaughterlings (because they are bullshit), instead replacing them with
blood_warp()
bloodsmacks()
if(prob(25))
INVOKE_ASYNC(src, .proc/blood_spray)
INVOKE_ASYNC(src, .proc/bloodsmacks)
INVOKE_ASYNC(src, PROC_REF(blood_spray))
INVOKE_ASYNC(src, PROC_REF(bloodsmacks))
else
if(health > maxHealth/2 && !client)
INVOKE_ASYNC(src, .proc/charge)
INVOKE_ASYNC(src, PROC_REF(charge))
else
INVOKE_ASYNC(src, .proc/triple_charge)
INVOKE_ASYNC(src, PROC_REF(triple_charge))
/mob/living/simple_animal/hostile/megafauna/bubblegum/charge()
bloodsmacks()
@@ -71,7 +71,7 @@ Removes slaughterlings (because they are bullshit), instead replacing them with
mobcount++
if(mobcount)
var/hand = rand(0,1)
INVOKE_ASYNC(src, .proc/bloodsmack, T, hand)
INVOKE_ASYNC(src, PROC_REF(bloodsmack), T, hand)
/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/bloodsmack(turf/T, handedness)
if(handedness)
@@ -86,7 +86,7 @@ Difficulty: Medium
var/range = 20
var/list/turfs = list()
turfs = line_target(0, range, at)
INVOKE_ASYNC(src, .proc/fire_line, turfs)
INVOKE_ASYNC(src, PROC_REF(fire_line), turfs)
/mob/living/simple_animal/hostile/megafauna/dragon/glaurung/OpenFire()
if(swooping)
@@ -53,7 +53,7 @@
for(var/mob/living/simple_animal/hostile/megafauna/H in around)
if(faction_check_mob(H) && !attack_same && !H.attack_same)
H.enemies |= enemies
return 0
return FALSE
/mob/living/simple_animal/hostile/megafauna/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
. = ..()
@@ -68,57 +68,57 @@
switch(anger_modifier)
if(0 to 25)
if(prob(50))
INVOKE_ASYNC(src, .proc/plasmashot, target)
INVOKE_ASYNC(src, PROC_REF(plasmashot), target)
if(prob(80))
sleep(6)
INVOKE_ASYNC(src, .proc/plasmashot, target)
INVOKE_ASYNC(src, PROC_REF(plasmashot), target)
if(prob(50))
sleep(6)
INVOKE_ASYNC(src, .proc/plasmashot, target)
INVOKE_ASYNC(src, PROC_REF(plasmashot), target)
else
animate(src, color = "#ff0000", time = 3)
sleep(4)
INVOKE_ASYNC(src, .proc/shockwave, src.dir, 7, 2.5)
INVOKE_ASYNC(src, PROC_REF(shockwave), src.dir, 7, 2.5)
if(25 to 50)
if(prob(60))
special = TRUE
INVOKE_ASYNC(src, .proc/plasmaburst, target, FALSE)
INVOKE_ASYNC(src, PROC_REF(plasmaburst), target, FALSE)
sleep(6)
INVOKE_ASYNC(src, .proc/plasmaburst, target, TRUE)
INVOKE_ASYNC(src, PROC_REF(plasmaburst), target, TRUE)
if(prob(50))
sleep(6)
INVOKE_ASYNC(src, .proc/plasmashot, target, FALSE)
INVOKE_ASYNC(src, PROC_REF(plasmashot), target, FALSE)
if(prob(50))
sleep(6)
INVOKE_ASYNC(src, .proc/plasmashot, target, FALSE)
INVOKE_ASYNC(src, PROC_REF(plasmashot), target, FALSE)
special = FALSE
else
special = TRUE
animate(src, color = "#ff0000", time = 3)
sleep(4)
INVOKE_ASYNC(src, .proc/shockwave, WEST, 10, TRUE)
INVOKE_ASYNC(src, .proc/shockwave, EAST, 10, TRUE)
INVOKE_ASYNC(src, PROC_REF(shockwave), WEST, 10, TRUE)
INVOKE_ASYNC(src, PROC_REF(shockwave), EAST, 10, TRUE)
sleep(7)
INVOKE_ASYNC(src, .proc/shockwave, NORTH, 10, TRUE)
INVOKE_ASYNC(src, .proc/shockwave, SOUTH, 10, TRUE)
INVOKE_ASYNC(src, PROC_REF(shockwave), NORTH, 10, TRUE)
INVOKE_ASYNC(src, PROC_REF(shockwave), SOUTH, 10, TRUE)
animate(src, color = initial(color), time = 5)
special = FALSE
if(50 to INFINITY)
if(prob(75))
if(prob(60))
INVOKE_ASYNC(src, .proc/plasmaburst, target)
INVOKE_ASYNC(src, PROC_REF(plasmaburst), target)
special = TRUE
animate(src, color = "#ff0000", time = 3)
sleep(5)
INVOKE_ASYNC(src, .proc/shockwave, src.dir, 15)
INVOKE_ASYNC(src, PROC_REF(shockwave), src.dir, 15)
if(prob(60))
sleep(5)
INVOKE_ASYNC(src, .proc/plasmaburst, target)
INVOKE_ASYNC(src, PROC_REF(plasmaburst), target)
sleep(5)
INVOKE_ASYNC(src, .proc/plasmaburst, target)
INVOKE_ASYNC(src, PROC_REF(plasmaburst), target)
if(prob(50))
sleep(5)
INVOKE_ASYNC(src, .proc/plasmaburst, target)
INVOKE_ASYNC(src, PROC_REF(plasmaburst), target)
animate(src, color = initial(color), time = 3)
special = FALSE
else
@@ -129,11 +129,11 @@
animate(src, color = "#ff0000", time = 3)
special = TRUE
sleep(3)
INVOKE_ASYNC(src, .proc/plasmaburst, left, TRUE)
INVOKE_ASYNC(src, .proc/plasmaburst, right, FALSE)
INVOKE_ASYNC(src, PROC_REF(plasmaburst), left, TRUE)
INVOKE_ASYNC(src, PROC_REF(plasmaburst), right, FALSE)
sleep(3)
INVOKE_ASYNC(src, .proc/plasmashot, up, FALSE)
INVOKE_ASYNC(src, .proc/plasmashot, down, FALSE)
INVOKE_ASYNC(src, PROC_REF(plasmashot), up, FALSE)
INVOKE_ASYNC(src, PROC_REF(plasmashot), down, FALSE)
sleep(10)
animate(src, color = initial(color), time = 3)
special = FALSE
@@ -142,13 +142,13 @@
sleep(3)
special = TRUE
for(var/dire in GLOB.cardinals)
INVOKE_ASYNC(src, .proc/shockwave, dire, 7, TRUE, 3)
INVOKE_ASYNC(src, PROC_REF(shockwave), dire, 7, TRUE, 3)
sleep(6)
animate(src, color = initial(color), time = 3)
special = FALSE
else
special = TRUE
INVOKE_ASYNC(src, .proc/ultishockwave, 7, 5)
INVOKE_ASYNC(src, PROC_REF(ultishockwave), 7, 5)
sleep(10)
special = FALSE
@@ -229,7 +229,7 @@ Difficulty: Medium
if(passed == 1)
visible_message(span_danger("[src] dodged the projectile!"), span_userdanger("You dodge the projectile!"))
playsound(src, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 300, 1)
return 0
return FALSE
return ..()
@@ -303,8 +303,8 @@ Difficulty: Medium
..()
//Immune to explosions when spinning or charging
/mob/living/simple_animal/hostile/megafauna/sif/ex_act(severity, target)
return 0
/mob/living/simple_animal/hostile/megafauna/sif/ex_act(severity, target, origin)
return FALSE
//stop spinning if you lose the target
/mob/living/simple_animal/hostile/megafauna/sif/LoseTarget()
@@ -116,7 +116,7 @@
new /obj/effect/temp_visual/dir_setting/bloodsplatter/candy(T, get_dir(T, target))
T = get_step(T, dir_to_target)
sleep(1)
addtimer(CALLBACK(src, .proc/blood_charge_2, dir_to_target, 0), 5)
addtimer(CALLBACK(src, PROC_REF(blood_charge_2), dir_to_target, 0), 5)
/mob/living/simple_animal/hostile/asteroid/elite/candy/proc/bloodytrap(mob/target)
playsound(src,'sound/magic/Blind.ogg', 200, 1)
@@ -229,7 +229,7 @@
//L.Paralyze(20)
L.Stun(20) //substituting this for the Paralyze from the line above, because we don't have tg paralysis stuff
L.adjustBruteLoss(50)
addtimer(CALLBACK(src, .proc/blood_charge_2, move_dir, (times_ran + 1)), 2)
addtimer(CALLBACK(src, PROC_REF(blood_charge_2), move_dir, (times_ran + 1)), 2)
/obj/effect/temp_visual/dir_setting/bloodsplatter/candy
duration = 10
@@ -114,7 +114,7 @@
/mob/living/simple_animal/hostile/asteroid/elite/drakeling/proc/lava_around()
ranged_cooldown = world.time + 50
for(var/d in GLOB.cardinals)
INVOKE_ASYNC(src, .proc/lava_wall, d, 5)
INVOKE_ASYNC(src, PROC_REF(lava_wall), d, 5)
/mob/living/simple_animal/hostile/asteroid/elite/drakeling/proc/fire_spew()
ranged_cooldown = world.time + 25
@@ -129,7 +129,7 @@
visible_message(span_boldwarning("[src] violently puffs smoke!They're going to make a fire moat!"))
sleep(5)
for(var/d in GLOB.alldirs)
INVOKE_ASYNC(src, .proc/fire_wall, d, 10)
INVOKE_ASYNC(src, PROC_REF(fire_wall), d, 10)
// Drakeling helpers
@@ -208,6 +208,7 @@
overheat_time = 27
ammo_type = list(/obj/item/ammo_casing/energy/kinetic/premium/byoka)
max_mod_capacity = 300
has_empty_icon = FALSE
/obj/item/ammo_casing/energy/kinetic/premium/byoka
projectile_type = /obj/item/projectile/kinetic/premium/byoka
+9 -13
View File
@@ -7,10 +7,8 @@
return FALSE
//Micro is on a table.
var/turf/steppyspot = target.loc
for(var/thing in steppyspot.contents)
if(istype(thing, /obj/structure/table))
return TRUE
if(locate(/obj/structure/table) in target.loc)
return TRUE
//Both small.
if(get_size(user) <= RESIZE_A_TINYMICRO && get_size(target) <= RESIZE_A_TINYMICRO)
@@ -48,10 +46,8 @@
return FALSE
//If on a table, don't
var/turf/steppyspot = target.loc
for(var/thing in steppyspot.contents)
if(istype(thing, /obj/structure/table))
return TRUE
if(locate(/obj/structure/table) in target.loc)
return TRUE
//Both small
if(get_size(user) <= RESIZE_A_TINYMICRO && get_size(target) <= RESIZE_A_TINYMICRO)
@@ -66,7 +62,7 @@
user.forceMove(target.loc)
user.sizediffStamLoss(target)
user.add_movespeed_modifier(/datum/movespeed_modifier/stomp, TRUE) //Full stop
addtimer(CALLBACK(user, /mob/.proc/remove_movespeed_modifier, MOVESPEED_ID_STOMP, TRUE), 3) //0.3 seconds
addtimer(CALLBACK(user, TYPE_PROC_REF(/mob, remove_movespeed_modifier), MOVESPEED_ID_STOMP, TRUE), 3) //0.3 seconds
if(iscarbon(user))
if(istype(user) && user.dna.features["taur"] == "Naga" || user.dna.features["taur"] == "Tentacle")
target.visible_message(span_danger("[src] carefully rolls their tail over [target]!"), span_danger("[src]'s huge tail rolls over you!"))
@@ -81,7 +77,7 @@
user.sizediffBruteloss(target)
playsound(loc, 'sound/misc/splort.ogg', 50, 1)
user.add_movespeed_modifier(/datum/movespeed_modifier/stomp, TRUE)
addtimer(CALLBACK(user, /mob/.proc/remove_movespeed_modifier, MOVESPEED_ID_STOMP, TRUE), 10) //1 second
addtimer(CALLBACK(user, TYPE_PROC_REF(/mob, remove_movespeed_modifier), MOVESPEED_ID_STOMP, TRUE), 10) //1 second
//user.Stun(20)
if(iscarbon(user))
if(istype(user) && (user.dna.features["taur"] == "Naga" || user.dna.features["taur"] == "Tentacle"))
@@ -96,7 +92,7 @@
user.sizediffStamLoss(target)
user.sizediffStun(target)
user.add_movespeed_modifier(/datum/movespeed_modifier/stomp, TRUE)
addtimer(CALLBACK(user, /mob/.proc/remove_movespeed_modifier, MOVESPEED_ID_STOMP, TRUE), 7)//About 3/4th a second
addtimer(CALLBACK(user, TYPE_PROC_REF(/mob, remove_movespeed_modifier), MOVESPEED_ID_STOMP, TRUE), 7)//About 3/4th a second
if(iscarbon(user))
var/feetCover = (user.wear_suit && (user.wear_suit.body_parts_covered & FEET)) || (user.w_uniform && (user.w_uniform.body_parts_covered & FEET) || (user.shoes && (user.shoes.body_parts_covered & FEET)))
if(feetCover)
@@ -158,8 +154,8 @@
/*
/mob/living/proc/sizeinteractioncheck(mob/living/target)
if(abs(get_effective_size()/target.get_effective_size())>=2.0 && get_effective_size()>target.get_effective_size())
return 0
return FALSE
else
return 1
return TRUE
*/
//Clothes coming off at different sizes, and health/speed/stam changes as well
+2 -2
View File
@@ -33,7 +33,7 @@
if((0 - INFINITY) to RESIZE_NORMAL)
new_size = RESIZE_MICRO
living.update_size(new_size)
return 1
return TRUE
/obj/item/projectile/sizelaser/growthray/on_hit(atom/target, blocked = 0 )
if(isliving(target))
@@ -55,7 +55,7 @@
if((0 - INFINITY) to RESIZE_MICRO)
new_size = RESIZE_MICRO
living.update_size(new_size)
return 1
return TRUE
/obj/item/ammo_casing/energy/laser/growthray
projectile_type = /obj/item/projectile/sizelaser/growthray
@@ -78,8 +78,8 @@
for(var/mob/living/simple_animal/hostile/asteroid/elite/candy/C in view(15))
candylist += C
if(candylist.len)
INVOKE_ASYNC(src, /obj/machinery/door/airlock/titanium/doomed/locked.proc/close)
addtimer(CALLBACK(src, .proc/bolt), 5)
INVOKE_ASYNC(src, TYPE_PROC_REF(/obj/machinery/door/airlock/titanium/doomed/locked, close))
addtimer(CALLBACK(src, PROC_REF(bolt)), 5)
/obj/machinery/door/airlock/titanium/doomed/locked/process()
. = ..()
@@ -73,7 +73,7 @@
/obj/effect/wrath/Initialize(mapload)
. = ..()
megalist = list("Cockblock", "Cockblock", "Cockblock") //cockblock just to be sure that no one goes through the wrath wall in the 10 minute grace period
addtimer(CALLBACK(src, .proc/updatemegalist), 6000) //10 minutes delay so that all megafauna can spawn and etc.
addtimer(CALLBACK(src, PROC_REF(updatemegalist)), 6000) //10 minutes delay so that all megafauna can spawn and etc.
/obj/effect/wrath/proc/updatemegalist()
megalist = list()
@@ -22,4 +22,7 @@
. = new /datum/tgs_message_content("Restarting.")
to_chat(world, span_boldwarning("Server restart - Initialized by [sender.friendly_name] on Discord."))
send2adminchat("Server", "[sender.friendly_name] forced a restart.")
addtimer(CALLBACK(src, world.TgsEndProcess()), 1 SECONDS)
addtimer(CALLBACK(src, PROC_REF(DoEndProcess)), 1 SECONDS)
/datum/tgs_chat_command/proc/DoEndProcess()
world.TgsEndProcess()