mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-28 10:31:59 +00:00
* HIEROPHANT * whoops * that'd be hilarious but unwise * BIRD_SCORE * density * BIRD THREAT * maybe a threat tm * danger boss * it's always the paren * bird murder * recall * no message * yelling bird * time time come on, time time shades * A ruin! * I think five blasts is enough * birdboss wants you dead * giant boss arena * hierophant no longer literally unfightable * smaller ruin? * no longer innate * can toggle friendly fire, teleport is AoE * comments! * just fucking spawn the arena wew * heal on resetting * not as common * I cannot be trusted * eeeh * ! * keep it off the station * as common as sin * stop cheesing the boss you asshole * this looks better * that ruin didn't even exist what the fuck * wew * rip * it doesn't need full healing if it heals for half when it resets * good for fighting mobs * rune where you are * mechanics; armor doesn't fucking matter rip you * armor matters but not much so * ) * meaner than hell and more likely to kill you * remove those beasts from my beautiful square house * fix * you should be able to tell what it's doing, even if you can't actually react to it being totally unable to tell what the fuck just killed you is bad design, you should know how you died even if you couldn't do shit rip 3x3 chaser * start higher scale to the same * the ruin that doesn't exist and costs 10 points to place * now what's all this commented out stuff hmmmmmmmmmmm what could it possibly be * accurate * tracking * boring unused lore * it needs to be open, oranges. open. * I did that specifically to note which commit it was on ree * oh there's a proc for that. duh. * logging is good * horrifying * the marginal kindness of a giant bird boss * ruin tweak * idiot bird * adjust
461 lines
11 KiB
Plaintext
461 lines
11 KiB
Plaintext
#define AB_CHECK_RESTRAINED 1
|
|
#define AB_CHECK_STUNNED 2
|
|
#define AB_CHECK_LYING 4
|
|
#define AB_CHECK_CONSCIOUS 8
|
|
|
|
|
|
/datum/action
|
|
var/name = "Generic Action"
|
|
var/desc = null
|
|
var/obj/target = null
|
|
var/check_flags = 0
|
|
var/processing = 0
|
|
var/obj/screen/movable/action_button/button = null
|
|
var/button_icon = 'icons/mob/actions.dmi'
|
|
var/background_icon_state = "bg_default"
|
|
var/buttontooltipstyle = ""
|
|
|
|
var/icon_icon = 'icons/mob/actions.dmi'
|
|
var/button_icon_state = "default"
|
|
var/mob/owner
|
|
|
|
/datum/action/New(Target)
|
|
target = Target
|
|
button = new
|
|
button.linked_action = src
|
|
button.name = name
|
|
button.actiontooltipstyle = buttontooltipstyle
|
|
if(desc)
|
|
button.desc = desc
|
|
|
|
/datum/action/Destroy()
|
|
if(owner)
|
|
Remove(owner)
|
|
target = null
|
|
qdel(button)
|
|
button = null
|
|
return ..()
|
|
|
|
/datum/action/proc/Grant(mob/M)
|
|
if(owner)
|
|
if(owner == M)
|
|
return
|
|
Remove(owner)
|
|
owner = M
|
|
M.actions += src
|
|
if(M.client)
|
|
M.client.screen += button
|
|
M.update_action_buttons()
|
|
|
|
/datum/action/proc/Remove(mob/M)
|
|
if(M.client)
|
|
M.client.screen -= button
|
|
button.moved = FALSE //so the button appears in its normal position when given to another owner.
|
|
M.actions -= src
|
|
M.update_action_buttons()
|
|
owner = null
|
|
|
|
/datum/action/proc/Trigger()
|
|
if(!IsAvailable())
|
|
return 0
|
|
return 1
|
|
|
|
/datum/action/proc/Process()
|
|
return
|
|
|
|
/datum/action/proc/IsAvailable()
|
|
if(!owner)
|
|
return 0
|
|
if(check_flags & AB_CHECK_RESTRAINED)
|
|
if(owner.restrained())
|
|
return 0
|
|
if(check_flags & AB_CHECK_STUNNED)
|
|
if(owner.stunned || owner.weakened)
|
|
return 0
|
|
if(check_flags & AB_CHECK_LYING)
|
|
if(owner.lying)
|
|
return 0
|
|
if(check_flags & AB_CHECK_CONSCIOUS)
|
|
if(owner.stat)
|
|
return 0
|
|
return 1
|
|
|
|
/datum/action/proc/UpdateButtonIcon()
|
|
if(button)
|
|
button.icon = button_icon
|
|
button.icon_state = background_icon_state
|
|
|
|
ApplyIcon(button)
|
|
|
|
if(!IsAvailable())
|
|
button.color = rgb(128,0,0,128)
|
|
else
|
|
button.color = rgb(255,255,255,255)
|
|
return 1
|
|
|
|
/datum/action/proc/ApplyIcon(obj/screen/movable/action_button/current_button)
|
|
current_button.cut_overlays()
|
|
if(icon_icon && button_icon_state)
|
|
var/image/img
|
|
img = image(icon_icon, current_button, button_icon_state)
|
|
img.pixel_x = 0
|
|
img.pixel_y = 0
|
|
current_button.add_overlay(img)
|
|
|
|
|
|
|
|
//Presets for item actions
|
|
/datum/action/item_action
|
|
check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_LYING|AB_CHECK_CONSCIOUS
|
|
button_icon_state = null
|
|
// If you want to override the normal icon being the item
|
|
// then change this to an icon state
|
|
|
|
/datum/action/item_action/New(Target)
|
|
..()
|
|
var/obj/item/I = target
|
|
I.actions += src
|
|
|
|
/datum/action/item_action/Destroy()
|
|
var/obj/item/I = target
|
|
I.actions -= src
|
|
return ..()
|
|
|
|
/datum/action/item_action/Trigger()
|
|
if(!..())
|
|
return 0
|
|
if(target)
|
|
var/obj/item/I = target
|
|
I.ui_action_click(owner, src.type)
|
|
return 1
|
|
|
|
/datum/action/item_action/ApplyIcon(obj/screen/movable/action_button/current_button)
|
|
current_button.cut_overlays()
|
|
|
|
if(button_icon && button_icon_state)
|
|
// If set, use the custom icon that we set instead
|
|
// of the item appearence
|
|
..(current_button)
|
|
else if(target)
|
|
var/obj/item/I = target
|
|
var/old = I.layer
|
|
I.layer = FLOAT_LAYER //AAAH
|
|
current_button.add_overlay(I)
|
|
I.layer = old
|
|
|
|
/datum/action/item_action/toggle_light
|
|
name = "Toggle Light"
|
|
|
|
/datum/action/item_action/toggle_hood
|
|
name = "Toggle Hood"
|
|
|
|
/datum/action/item_action/toggle_firemode
|
|
name = "Toggle Firemode"
|
|
|
|
/datum/action/item_action/startchainsaw
|
|
name = "Pull The Starting Cord"
|
|
|
|
/datum/action/item_action/toggle_gunlight
|
|
name = "Toggle Gunlight"
|
|
|
|
/datum/action/item_action/toggle_mode
|
|
name = "Toggle Mode"
|
|
|
|
/datum/action/item_action/toggle_barrier_spread
|
|
name = "Toggle Barrier Spread"
|
|
|
|
/datum/action/item_action/equip_unequip_TED_Gun
|
|
name = "Equip/Unequip TED Gun"
|
|
|
|
/datum/action/item_action/toggle_paddles
|
|
name = "Toggle Paddles"
|
|
|
|
/datum/action/item_action/set_internals
|
|
name = "Set Internals"
|
|
|
|
/datum/action/item_action/set_internals/UpdateButtonIcon()
|
|
if(..()) //button available
|
|
if(iscarbon(owner))
|
|
var/mob/living/carbon/C = owner
|
|
if(target == C.internal)
|
|
button.icon_state = "bg_default_on"
|
|
|
|
/datum/action/item_action/toggle_mister
|
|
name = "Toggle Mister"
|
|
|
|
/datum/action/item_action/activate_injector
|
|
name = "Activate Injector"
|
|
|
|
/datum/action/item_action/toggle_helmet_light
|
|
name = "Toggle Helmet Light"
|
|
|
|
/datum/action/item_action/toggle_unfriendly_fire
|
|
name = "Toggle Friendly Fire \[ON\]"
|
|
desc = "Toggles if the staff causes friendly fire."
|
|
button_icon_state = "vortex_ff_on"
|
|
|
|
/datum/action/item_action/toggle_unfriendly_fire/Trigger()
|
|
if(..())
|
|
UpdateButtonIcon()
|
|
|
|
/datum/action/item_action/toggle_unfriendly_fire/UpdateButtonIcon()
|
|
if(istype(target, /obj/item/weapon/hierophant_staff))
|
|
var/obj/item/weapon/hierophant_staff/H = target
|
|
if(H.friendly_fire_check)
|
|
button_icon_state = "vortex_ff_off"
|
|
name = "Toggle Friendly Fire \[OFF\]"
|
|
button.name = name
|
|
else
|
|
button_icon_state = "vortex_ff_on"
|
|
name = "Toggle Friendly Fire \[ON\]"
|
|
button.name = name
|
|
..()
|
|
|
|
/datum/action/item_action/vortex_recall
|
|
name = "Vortex Recall"
|
|
desc = "Recall yourself, and anyone nearby, to an attuned hierophant rune at any time.<br>If no such rune exists, will produce a rune at your location."
|
|
button_icon_state = "vortex_recall"
|
|
|
|
/datum/action/item_action/vortex_recall/IsAvailable()
|
|
if(istype(target, /obj/item/weapon/hierophant_staff))
|
|
var/obj/item/weapon/hierophant_staff/H = target
|
|
if(H.teleporting)
|
|
return 0
|
|
return ..()
|
|
|
|
/datum/action/item_action/clock
|
|
background_icon_state = "bg_clock"
|
|
buttontooltipstyle = "clockcult"
|
|
|
|
/datum/action/item_action/clock/IsAvailable()
|
|
if(!is_servant_of_ratvar(owner))
|
|
return 0
|
|
return ..()
|
|
|
|
/datum/action/item_action/clock/toggle_flame
|
|
name = "Summon/Dismiss Ratvar's Flame"
|
|
desc = "Allows you to summon a flame that can create stunning zones at any range."
|
|
|
|
/datum/action/item_action/clock/toggle_flame/IsAvailable()
|
|
if(!is_servant_of_ratvar(owner))
|
|
return 0
|
|
if(istype(target, /obj/item/clothing/glasses/judicial_visor))
|
|
var/obj/item/clothing/glasses/judicial_visor/V = target
|
|
if(V.recharging)
|
|
return 0
|
|
return ..()
|
|
|
|
/datum/action/item_action/clock/hierophant
|
|
name = "Hierophant Network"
|
|
desc = "Allows you to communicate with other Servants."
|
|
button_icon_state = "hierophant_slab"
|
|
|
|
/datum/action/item_action/clock/guvax
|
|
name = "Guvax"
|
|
desc = "Allows you to convert adjacent nonservants while holding the slab."
|
|
button_icon_state = "guvax_capacitor"
|
|
|
|
/datum/action/item_action/clock/vanguard
|
|
name = "Vanguard"
|
|
desc = "Allows you to temporarily absorb stuns. All stuns absorbed will affect you when disabled."
|
|
button_icon_state = "vanguard_cogwheel"
|
|
|
|
/datum/action/item_action/toggle_helmet_flashlight
|
|
name = "Toggle Helmet Flashlight"
|
|
|
|
/datum/action/item_action/toggle_helmet_mode
|
|
name = "Toggle Helmet Mode"
|
|
|
|
/datum/action/item_action/toggle
|
|
|
|
/datum/action/item_action/toggle/New(Target)
|
|
..()
|
|
name = "Toggle [target.name]"
|
|
button.name = name
|
|
|
|
/datum/action/item_action/halt
|
|
name = "HALT!"
|
|
|
|
/datum/action/item_action/toggle_voice_box
|
|
name = "Toggle Voice Box"
|
|
|
|
/datum/action/item_action/change
|
|
name = "Change"
|
|
|
|
/datum/action/item_action/adjust
|
|
|
|
/datum/action/item_action/adjust/New(Target)
|
|
..()
|
|
name = "Adjust [target.name]"
|
|
button.name = name
|
|
|
|
/datum/action/item_action/switch_hud
|
|
name = "Switch HUD"
|
|
|
|
/datum/action/item_action/toggle_wings
|
|
name = "Toggle Wings"
|
|
|
|
/datum/action/item_action/toggle_human_head
|
|
name = "Toggle Human Head"
|
|
|
|
/datum/action/item_action/toggle_helmet
|
|
name = "Toggle Helmet"
|
|
|
|
/datum/action/item_action/toggle_jetpack
|
|
name = "Toggle Jetpack"
|
|
|
|
/datum/action/item_action/jetpack_stabilization
|
|
name = "Toggle Jetpack Stabilization"
|
|
|
|
/datum/action/item_action/jetpack_stabilization/IsAvailable()
|
|
var/obj/item/weapon/tank/jetpack/J = target
|
|
if(!istype(J) || !J.on)
|
|
return 0
|
|
return ..()
|
|
|
|
/datum/action/item_action/hands_free
|
|
check_flags = AB_CHECK_CONSCIOUS
|
|
|
|
/datum/action/item_action/hands_free/activate
|
|
name = "Activate"
|
|
|
|
|
|
/datum/action/item_action/hands_free/shift_nerves
|
|
name = "Shift Nerves"
|
|
|
|
|
|
/datum/action/item_action/toggle_research_scanner
|
|
name = "Toggle Research Scanner"
|
|
button_icon_state = "scan_mode"
|
|
|
|
/datum/action/item_action/toggle_research_scanner/Trigger()
|
|
if(IsAvailable())
|
|
owner.research_scanner = !owner.research_scanner
|
|
owner << "<span class='notice'>Research analyzer is now [owner.research_scanner ? "active" : "deactivated"].</span>"
|
|
return 1
|
|
|
|
/datum/action/item_action/toggle_research_scanner/Remove(mob/M)
|
|
if(owner)
|
|
owner.research_scanner = 0
|
|
..()
|
|
|
|
/datum/action/item_action/toggle_research_scanner/ApplyIcon(obj/screen/movable/action_button/current_button)
|
|
current_button.cut_overlays()
|
|
if(button_icon && button_icon_state)
|
|
var/image/img = image(button_icon, current_button, "scan_mode")
|
|
current_button.add_overlay(img)
|
|
|
|
/datum/action/item_action/organ_action
|
|
check_flags = AB_CHECK_CONSCIOUS
|
|
|
|
/datum/action/item_action/organ_action/IsAvailable()
|
|
var/obj/item/organ/I = target
|
|
if(!I.owner)
|
|
return 0
|
|
return ..()
|
|
|
|
/datum/action/item_action/organ_action/toggle/New(Target)
|
|
..()
|
|
name = "Toggle [target.name]"
|
|
button.name = name
|
|
|
|
/datum/action/item_action/organ_action/use/New(Target)
|
|
..()
|
|
name = "Use [target.name]"
|
|
button.name = name
|
|
|
|
|
|
|
|
|
|
//Preset for spells
|
|
/datum/action/spell_action
|
|
check_flags = 0
|
|
background_icon_state = "bg_spell"
|
|
|
|
/datum/action/spell_action/New(Target)
|
|
..()
|
|
var/obj/effect/proc_holder/spell/S = target
|
|
S.action = src
|
|
name = S.name
|
|
button_icon = S.action_icon
|
|
button_icon_state = S.action_icon_state
|
|
background_icon_state = S.action_background_icon_state
|
|
button.name = name
|
|
|
|
/datum/action/spell_action/Destroy()
|
|
var/obj/effect/proc_holder/spell/S = target
|
|
S.action = null
|
|
return ..()
|
|
|
|
/datum/action/spell_action/Trigger()
|
|
if(!..())
|
|
return 0
|
|
if(target)
|
|
var/obj/effect/proc_holder/spell = target
|
|
spell.Click()
|
|
return 1
|
|
|
|
/datum/action/spell_action/IsAvailable()
|
|
if(!target)
|
|
return 0
|
|
var/obj/effect/proc_holder/spell/spell = target
|
|
if(owner)
|
|
return spell.can_cast(owner)
|
|
return 0
|
|
|
|
|
|
/datum/action/spell_action/alien
|
|
|
|
/datum/action/spell_action/alien/IsAvailable()
|
|
if(!target)
|
|
return 0
|
|
var/obj/effect/proc_holder/alien/ab = target
|
|
if(owner)
|
|
return ab.cost_check(ab.check_turf,owner,1)
|
|
return 0
|
|
|
|
|
|
|
|
//Preset for general and toggled actions
|
|
/datum/action/innate
|
|
check_flags = 0
|
|
var/active = 0
|
|
|
|
/datum/action/innate/Trigger()
|
|
if(!..())
|
|
return 0
|
|
if(!active)
|
|
Activate()
|
|
else
|
|
Deactivate()
|
|
return 1
|
|
|
|
/datum/action/innate/proc/Activate()
|
|
return
|
|
|
|
/datum/action/innate/proc/Deactivate()
|
|
return
|
|
|
|
//Preset for action that call specific procs (consider innate).
|
|
/datum/action/generic
|
|
check_flags = 0
|
|
var/procname
|
|
|
|
/datum/action/generic/Trigger()
|
|
if(!..())
|
|
return 0
|
|
if(target && procname)
|
|
call(target, procname)(usr)
|
|
return 1
|
|
|
|
//Stickmemes
|
|
/datum/action/item_action/stickmen
|
|
name = "Summon Stick Minions"
|
|
desc = "Allows you to summon faithful stickmen allies to aide you in battle."
|
|
button_icon_state = "art_summon"
|
|
|
|
//surf_ss13
|
|
/datum/action/item_action/bhop
|
|
name = "Activate Jump Boots"
|
|
desc = "Activates the jump boot's internal propulsion system, allowing the user to dash over 4-wide gaps."
|
|
button_icon_state = "jetboot" |