5047dd7145
* Plane master handling + new chemical Rotatium A whole system to create, store, and access screen master objects from the hud. In case anybody actually wants to do anything relevant with them. Which will probably be me but whatever. Moves things out to some planes that make sense. click catcher -99 game 0 lighting 15 fullscreen 18 HUD 19 above HUD 20 Rotatium is more of a demonstration than something I really really love, but it is kinda neat so here you go. It rocks the game plane and lighting planes back and forth and also does light toxin damage. The longer it effects you, the stronger the rocking gets. No pictures right now, I'll get some later. Sorry. * Pay no attention to the commit behind the curtain * Updates travis to 1346, the stable version for 510 for linux
464 lines
11 KiB
Plaintext
464 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_layer = I.layer
|
|
var/old_plane = I.plane
|
|
I.layer = FLOAT_LAYER //AAAH
|
|
I.plane = FLOAT_PLANE //^ what that guy said
|
|
current_button.add_overlay(I)
|
|
I.layer = old_layer
|
|
I.plane = old_plane
|
|
|
|
/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" |