This commit is contained in:
Dmitry
2025-02-20 14:26:02 +03:00
159 changed files with 2163 additions and 1081 deletions
+1
View File
@@ -30,6 +30,7 @@
#define COLOR_YELLOW "#FFFF00"
#define COLOR_VIVID_YELLOW "#FBFF23"
#define COLOR_VERY_SOFT_YELLOW "#FAE48E"
#define COLOR_GOLD "#FFD700"
#define COLOR_OLIVE "#808000"
#define COLOR_VIBRANT_LIME "#00FF00"
+2 -2
View File
@@ -279,5 +279,5 @@
#define FAT "fat"
#define PERMA_FAT "perma_fat"
/// What is the rate that one damage is converted to fatness?
#define FAT_DAMAGE_TO_FATNESS 4
#define PERMA_FAT_DAMAGE_TO_FATNESS 4
#define FAT_DAMAGE_TO_FATNESS 8
#define PERMA_FAT_DAMAGE_TO_FATNESS 8
+2
View File
@@ -214,6 +214,8 @@
#define COMSIG_TURF_MULTIZ_DEL "turf_multiz_del"
///from base of turf/multiz_turf_new: (turf/source, direction)
#define COMSIG_TURF_MULTIZ_NEW "turf_multiz_new"
/// from base of turf/proc/afterShuttleMove: (turf/new_turf)
#define COMSIG_TURF_AFTER_SHUTTLE_MOVE "turf_after_shuttle_move"
// /atom/movable signals
#define COMSIG_MOVABLE_PRE_MOVE "movable_pre_move" ///from base of atom/movable/Moved(): (/atom)
@@ -23,3 +23,5 @@
#define COMPONENT_NO_MOUSEDROP (1<<0)
///from base of atom/MouseDrop_T: (/atom/from, /mob/user)
#define COMSIG_MOUSEDROPPED_ONTO "mousedropped_onto" //from base of atom/MouseDrop_T: (/atom/from, /mob/user)
/// From /atom/movable/screen/click(): (atom/target, atom/location, control, params, mob/user)
#define COMSIG_SCREEN_ELEMENT_CLICK "screen_element_click"
@@ -1,2 +1,5 @@
/// a person somewhere has thrown something : (mob/living/carbon/carbon_thrower, target)
#define COMSIG_GLOB_CARBON_THROW_THING "!throw_thing"
/// Global signal sent before we decide what job everyone has
#define COMSIG_GLOB_PRE_JOBS_ASSIGNED "!pre_roles_assigned"
@@ -2,3 +2,5 @@
#define COMSIG_HUD_LOBBY_COLLAPSED "hud_lobby_collapsed"
/// Sent from /atom/movable/screen/lobby/button/collapse/proc/expand_buttons() : ()
#define COMSIG_HUD_LOBBY_EXPANDED "hud_lobby_expanded"
/// Sent from /atom/movable/screen/lobby/button/ready/Click() : ()
#define COMSIG_HUD_PLAYER_READY_TOGGLE "hud_player_ready_toggle"
+3 -1
View File
@@ -99,6 +99,7 @@
#define ui_internal "EAST-1:28,CENTER+1:19"//CIT CHANGE - moves internal icon up a little bit to accommodate for the stamina meter
#define ui_mood "EAST-1:28,CENTER-3:10"
#define ui_arousal "EAST-1:28,CENTER-4:8"
#define ui_stamina "EAST-1:28,CENTER-0:14"
// #define ui_spacesuit "EAST-1:28,CENTER-4:10"
//Pop-up inventory
@@ -209,7 +210,6 @@
#define ui_ghost_spawners "SOUTH: 6, CENTER+1:24" // LEGACY. SAME LOC AS PAI
//UI position overrides for 1:1 screen layout. (default is 7:5)
#define ui_stamina "EAST-1:28,CENTER:17" // replacing internals button
#define ui_overridden_resist "EAST-3:24,SOUTH+1:7"
#define ui_clickdelay "CENTER,SOUTH+1:-31"
#define ui_resistdelay "EAST-3:24,SOUTH+1:4"
@@ -232,6 +232,8 @@
#define SCRN_OBJ_IN_LIST "list"
/// In the collapseable palette
#define SCRN_OBJ_IN_PALETTE "palette"
///Inserted first in the list
#define SCRN_OBJ_INSERT_FIRST "first"
/// The filter name for the hover outline
#define HOVER_OUTLINE_FILTER "hover_outline"
+20 -3
View File
@@ -4,10 +4,21 @@
#define LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD 8
// LANGUAGE SOURCE DEFINES
#define LANGUAGE_ALL "all" // For use in full removal only.
#define LANGUAGE_ATOM "atom"
#define LANGUAGE_MIND "mind"
/// For use in full removal only.
#define LANGUAGE_ALL "all"
// Generic language sources.
/// Language is linked to the movable directly.
#define LANGUAGE_ATOM "atom"
/// Language is linked to the mob's mind.
/// If a mind transfer happens, language follows.
#define LANGUAGE_MIND "mind"
/// Language is linked to the mob's species.
/// If a species change happens, language goes away.
/// If applied to a non-human (no species) atom, this is effectively the same as [LANGUAGE_ATOM].
#define LANGUAGE_SPECIES "species"
// More specific language sources.
// Only ever goes away when dismissed directly.
#define LANGUAGE_ABSORB "absorb"
#define LANGUAGE_APHASIA "aphasia"
#define LANGUAGE_BLOODSUCKER "bloodsucker"
@@ -25,3 +36,9 @@
#define LANGUAGE_VASSAL "vassal"
#define LANGUAGE_VOICECHANGE "voicechange"
#define LANGUAGE_MULTILINGUAL "multilingual"
// Language flags. Used in granting and removing languages.
/// This language can be spoken.
#define SPOKEN_LANGUAGE (1<<0)
/// This language can be understood.
#define UNDERSTOOD_LANGUAGE (1<<1)
+3
View File
@@ -200,5 +200,8 @@
#define SPLASHSCREEN_PLANE 90
#define SPLASHSCREEN_RENDER_TARGET "SPLASHSCREEN_PLANE"
///Plane master controller keys
#define PLANE_MASTERS_GAME "plane_masters_game"
///Layer for screentips
#define SCREENTIP_LAYER 40
+7
View File
@@ -744,6 +744,13 @@
else
L1[key] = other_value
/// Turns an associative list into a flat list of keys
/proc/assoc_to_keys(list/input)
var/list/keys = list()
for(var/key in input)
UNTYPED_LIST_ADD(keys, key)
return keys
/proc/assoc_list_strip_value(list/input)
var/list/ret = list()
for(var/key in input)
+4 -1
View File
@@ -5,10 +5,11 @@
var/datum/hud/our_hud
var/actiontooltipstyle = ""
screen_loc = null
mouse_over_pointer = MOUSE_HAND_POINTER
var/button_icon_state
var/appearance_cache
var/mutable_appearance/button_overlay
/// Where we are currently placed on the hud. SCRN_OBJ_DEFAULT asks the linked action what it thinks
var/location = SCRN_OBJ_DEFAULT
/// A unique bitflag, combined with the name of our linked action this lets us persistently remember any user changes to our position
@@ -199,6 +200,7 @@
icon = 'icons/hud/64x16_actions.dmi'
icon_state = "screen_gen_palette"
screen_loc = ui_action_palette
mouse_over_pointer = MOUSE_HAND_POINTER
var/datum/hud/our_hud
var/expanded = FALSE
/// Id of any currently running timers that set our color matrix
@@ -324,6 +326,7 @@ GLOBAL_LIST_INIT(palette_removed_matrix, list(1.4,0,0,0, 0.7,0.4,0,0, 0.4,0,0.6,
/atom/movable/screen/palette_scroll
icon = 'icons/mob/screen_gen.dmi'
screen_loc = ui_palette_scroll
mouse_over_pointer = MOUSE_HAND_POINTER
/// How should we move the palette's actions?
/// Positive scrolls down the list, negative scrolls back
var/scroll_direction = 0
+19 -36
View File
@@ -1,5 +1,6 @@
/atom/movable/screen/ai
icon = 'icons/mob/screen_ai.dmi'
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/ai/Click()
if(isobserver(usr) || usr.incapacitated())
@@ -193,109 +194,91 @@
var/atom/movable/screen/using
// Language menu
using = new /atom/movable/screen/language_menu
using = new /atom/movable/screen/language_menu(null, src)
using.screen_loc = ui_ai_language_menu
using.hud = src
static_inventory += using
//AI core
using = new /atom/movable/screen/ai/aicore()
using = new /atom/movable/screen/ai/aicore(null, src)
using.screen_loc = ui_ai_core
using.hud = src
static_inventory += using
//Camera list
using = new /atom/movable/screen/ai/camera_list()
using = new /atom/movable/screen/ai/camera_list(null, src)
using.screen_loc = ui_ai_camera_list
using.hud = src
static_inventory += using
//Track
using = new /atom/movable/screen/ai/camera_track()
using = new /atom/movable/screen/ai/camera_track(null, src)
using.screen_loc = ui_ai_track_with_camera
using.hud = src
static_inventory += using
//Camera light
using = new /atom/movable/screen/ai/camera_light()
using = new /atom/movable/screen/ai/camera_light(null, src)
using.screen_loc = ui_ai_camera_light
using.hud = src
static_inventory += using
//Crew Monitoring
using = new /atom/movable/screen/ai/crew_monitor()
using = new /atom/movable/screen/ai/crew_monitor(null, src)
using.screen_loc = ui_ai_crew_monitor
using.hud = src
static_inventory += using
//Crew Manifest
using = new /atom/movable/screen/ai/crew_manifest()
using = new /atom/movable/screen/ai/crew_manifest(null, src)
using.screen_loc = ui_ai_crew_manifest
using.hud = src
static_inventory += using
//Alerts
using = new /atom/movable/screen/ai/alerts()
using = new /atom/movable/screen/ai/alerts(null, src)
using.screen_loc = ui_ai_alerts
using.hud = src
static_inventory += using
//Announcement
using = new /atom/movable/screen/ai/announcement()
using = new /atom/movable/screen/ai/announcement(null, src)
using.screen_loc = ui_ai_announcement
using.hud = src
static_inventory += using
//Shuttle
using = new /atom/movable/screen/ai/call_shuttle()
using = new /atom/movable/screen/ai/call_shuttle(null, src)
using.screen_loc = ui_ai_shuttle
using.hud = src
static_inventory += using
//Laws
using = new /atom/movable/screen/ai/state_laws()
using = new /atom/movable/screen/ai/state_laws(null, src)
using.screen_loc = ui_ai_state_laws
using.hud = src
static_inventory += using
//PDA message
using = new /atom/movable/screen/ai/pda_msg_send()
using = new /atom/movable/screen/ai/pda_msg_send(null, src)
using.screen_loc = ui_ai_pda_send
using.hud = src
static_inventory += using
//PDA log
using = new /atom/movable/screen/ai/pda_msg_show()
using = new /atom/movable/screen/ai/pda_msg_show(null, src)
using.screen_loc = ui_ai_pda_log
using.hud = src
static_inventory += using
//Take image
using = new /atom/movable/screen/ai/image_take()
using = new /atom/movable/screen/ai/image_take(null, src)
using.screen_loc = ui_ai_take_picture
using.hud = src
static_inventory += using
//View images
using = new /atom/movable/screen/ai/image_view()
using = new /atom/movable/screen/ai/image_view(null, src)
using.screen_loc = ui_ai_view_images
using.hud = src
static_inventory += using
//Medical/Security sensors
using = new /atom/movable/screen/ai/sensors()
using = new /atom/movable/screen/ai/sensors(null, src)
using.screen_loc = ui_ai_sensor
using.hud = src
static_inventory += using
//Multicamera mode
using = new /atom/movable/screen/ai/multicam()
using = new /atom/movable/screen/ai/multicam(null, src)
using.screen_loc = ui_ai_multicam
using.hud = src
static_inventory += using
//Add multicamera camera
using = new /atom/movable/screen/ai/add_multicam()
using = new /atom/movable/screen/ai/add_multicam(null, src)
using.screen_loc = ui_ai_add_multicam
using.hud = src
static_inventory += using
+114 -25
View File
@@ -91,6 +91,8 @@
name = "Alert"
desc = "Something seems to have gone wrong with this alert, so report this bug please"
mouse_opacity = MOUSE_OPACITY_ICON
/// do we glow to represent we do stuff when clicked
var/clickable_glow = FALSE
var/timeout = 0 //If set to a number, this alert will clear itself after that many deciseconds
var/severity = 0
var/alerttooltipstyle = ""
@@ -100,6 +102,12 @@
/// Boolean. If TRUE, the Click() proc will attempt to Click() on the master first if there is a master.
var/click_master = TRUE
/atom/movable/screen/alert/Initialize(mapload, datum/hud/hud_owner)
. = ..()
if(clickable_glow)
add_filter("clickglow", 2, outline_filter(color = COLOR_GOLD, size = 1))
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/alert/MouseEntered(location,control,params)
if(!QDELETED(src))
openToolTip(usr,src,params,title = name,content = desc,theme = alerttooltipstyle)
@@ -247,13 +255,14 @@ or something covering your eyes."
name = "Mind Control"
desc = "Your mind has been hijacked! Click to view the mind control command."
icon_state = "mind_control"
clickable_glow = TRUE
var/command
/atom/movable/screen/alert/mind_control/Click()
var/mob/living/L = usr
if(L != owner)
. = ..()
if(!.)
return
to_chat(L, "<span class='mind_control'>[command]</span>")
to_chat(usr, "<span class='mind_control'>[command]</span>")
/atom/movable/screen/alert/hypnosis
name = "Hypnosis"
@@ -271,11 +280,16 @@ or something covering your eyes."
desc = "Something got lodged into your flesh and is causing major bleeding. It might fall out with time, but surgery is the safest way. \
If you're feeling frisky, examine yourself and click the underlined item to pull the object out."
icon_state = "embeddedobject"
clickable_glow = TRUE
/atom/movable/screen/alert/embeddedobject/Click()
if(isliving(usr) && usr == owner)
var/mob/living/carbon/M = usr
return M.help_shake_act(M)
. = ..()
if(!.)
return
if(!isliving(usr))
return
var/mob/living/carbon/M = usr
return M.help_shake_act(M)
/atom/movable/screen/alert/weightless
name = "Weightless"
@@ -299,10 +313,14 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
name = "On Fire"
desc = "You're on fire. Stop, drop and roll to put the fire out or move to a vacuum area."
icon_state = "fire"
clickable_glow = TRUE
/atom/movable/screen/alert/fire/Click()
. = ..()
if(!.)
return
var/mob/living/L = usr
if(!istype(L) || !L.can_resist() || L != owner)
if(!istype(L) || !L.can_resist())
return
L.MarkResistTime()
if(CHECK_MOBILITY(L, MOBILITY_MOVE))
@@ -310,8 +328,29 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
/atom/movable/screen/alert/give // information set when the give alert is made
icon_state = "default"
clickable_glow = TRUE
var/mob/living/carbon/offerer
var/obj/item/receiving
/// Additional text displayed in the description of the alert.
var/additional_desc_text = "Click this alert to take it, or shift click it to examine it."
/// Text to override what appears in screentips for the alert
var/screentip_override_text
/// Whether the offered item can be examined by shift-clicking the alert
var/examinable = TRUE
/atom/movable/screen/alert/give/Initialize(mapload, datum/hud/hud_owner)
. = ..()
register_context()
/atom/movable/screen/alert/give/Destroy()
offerer = null
receiving = null
return ..()
/atom/movable/screen/alert/give/add_context(atom/source, list/context, obj/item/held_item, mob/user)
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, screentip_override_text || "Take [receiving.name]")
LAZYSET(context[SCREENTIP_CONTEXT_SHIFT_LMB], INTENT_ANY, "Examine")
return CONTEXTUAL_SCREENTIP_SET
/**
* Handles assigning most of the variables for the alert that pops up when an item is offered
@@ -341,6 +380,16 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
CRASH("User for [src] is of type \[[usr.type]\]. This should never happen.")
handle_transfer()
/atom/movable/screen/alert/give/examine(mob/user)
if(!examinable)
return ..()
return list(
span_boldnotice(name),
span_info("[offerer] is offering you the following item (click the alert to take it!):"),
"<hr>[jointext(receiving.examine(user), "\n")]",
)
/// An overrideable proc used simply to hand over the item when claimed, this is a proc so that high-fives can override them since nothing is actually transferred
/atom/movable/screen/alert/give/proc/handle_transfer()
var/mob/living/carbon/taker = owner
@@ -354,6 +403,11 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
to_chat(owner, span_warning("You moved out of range of [offerer]!"))
owner.clear_alert("[offerer]")
/atom/movable/screen/alert/give/highfive
additional_desc_text = "Click this alert to slap it."
screentip_override_text = "High Five"
examinable = FALSE
/atom/movable/screen/alert/give/highfive/setup(mob/living/carbon/taker, mob/living/carbon/offerer, obj/item/receiving)
. = ..()
name = "[offerer] is offering a high-five!"
@@ -404,6 +458,9 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
/// Families handshakes
/atom/movable/screen/alert/give/secret_handshake
icon_state = "default"
additional_desc_text = "Click this alert to accept."
screentip_override_text = "Handshake"
examinable = FALSE
/atom/movable/screen/alert/give/secret_handshake/setup(mob/living/carbon/taker, mob/living/carbon/offerer, obj/item/receiving)
name = "[offerer] is offering a Handshake"
@@ -666,18 +723,21 @@ so as to remain in compliance with the most up-to-date laws."
complete, you will have exclusive control of it, and you will gain \
additional processing time to unlock more malfunction abilities."
icon_state = "hackingapc"
timeout = 600
timeout = 60 SECONDS
clickable_glow = TRUE
var/atom/target = null
/atom/movable/screen/alert/hackingapc/Click()
if(!usr || !usr.client || usr != owner)
. = ..()
if(!.)
return
if(!target)
return
var/mob/living/silicon/ai/AI = usr
var/turf/T = get_turf(target)
if(T)
AI.eyeobj.setLoc(T)
if(!T)
return
AI.eyeobj.setLoc(T)
//MECHS
@@ -693,25 +753,30 @@ so as to remain in compliance with the most up-to-date laws."
name = "Revival"
desc = "Someone is trying to revive you. Re-enter your corpse if you want to be revived!"
icon_state = "template"
timeout = 300
timeout = 30 SECONDS
clickable_glow = TRUE
/atom/movable/screen/alert/notify_cloning/Click()
if(!usr || !usr.client || usr != owner)
. = ..()
if(!.)
return
var/mob/dead/observer/G = usr
G.reenter_corpse()
var/mob/dead/observer/dead_owner = usr
dead_owner.reenter_corpse()
/atom/movable/screen/alert/notify_action
name = "Body created"
desc = "A body was created. You can enter it."
icon_state = "template"
timeout = 300
timeout = 30 SECONDS
clickable_glow = TRUE
var/atom/target = null
var/action = NOTIFY_JUMP
/atom/movable/screen/alert/notify_action/Click()
if(!usr || !usr.client || usr != owner)
. = ..()
if(!.)
return
if(!target)
return
var/mob/dead/observer/G = usr
@@ -729,29 +794,43 @@ so as to remain in compliance with the most up-to-date laws."
//OBJECT-BASED
/atom/movable/screen/alert/restrained/buckled
/atom/movable/screen/alert/buckled
name = "Buckled"
desc = "You've been buckled to something. Click the alert to unbuckle unless you're handcuffed."
icon_state = "buckled"
clickable_glow = TRUE
/atom/movable/screen/alert/restrained
clickable_glow = TRUE
/atom/movable/screen/alert/restrained/handcuffed
name = "Handcuffed"
desc = "You're handcuffed and can't act. If anyone drags you, you won't be able to move. Click the alert to free yourself."
click_master = FALSE
/atom/movable/screen/alert/restrained/legcuffed
name = "Legcuffed"
desc = "You're legcuffed, which slows you down considerably. Click the alert to free yourself."
click_master = FALSE
/atom/movable/screen/alert/restrained/Click()
. = ..()
if(!.)
return
var/mob/living/L = usr
if(!istype(L) || !L.can_resist() || L != owner)
if(!istype(L) || !L.can_resist())
return
L.MarkResistTime()
return L.resist_restraints()
/atom/movable/screen/alert/restrained/buckled/Click()
/atom/movable/screen/alert/buckled/Click()
. = ..()
if(!.)
return
var/mob/living/L = usr
if(!istype(L) || !L.can_resist() || L != owner)
if(!istype(L) || !L.can_resist())
return
L.MarkResistTime()
return L.resist_buckle()
@@ -765,10 +844,14 @@ so as to remain in compliance with the most up-to-date laws."
name = "Knotted Shoes"
desc = "Someone tied your shoelaces together! Click the alert or your shoes to undo the knot."
icon_state = "shoealert"
clickable_glow = TRUE
/atom/movable/screen/alert/shoes/Click()
. = ..()
if(!.)
return
var/mob/living/carbon/C = usr
if(!istype(C) || !C.can_resist() || C != owner || !C.shoes)
if(!istype(C) || !C.can_resist() || !C.shoes)
return
C.MarkResistTime()
C.shoes.handle_tying(C)
@@ -814,9 +897,9 @@ so as to remain in compliance with the most up-to-date laws."
return FALSE
if(usr != owner)
return FALSE
var/paramslist = params2list(params)
if(paramslist["shift"]) // screen objects don't do the normal Click() stuff so we'll cheat
to_chat(usr, "<span class='boldnotice'>[name]</span> - <span class='info'>[desc]</span>")
var/modifiers = params2list(params)
if(LAZYACCESS(modifiers, SHIFT_CLICK)) // screen objects don't do the normal Click() stuff so we'll cheat
to_chat(usr, "<blockquote class='info'>[jointext(examine(usr), "\n")]</blockquote>")
return FALSE
if(master && click_master)
return usr.client.Click(master, location, control, params)
@@ -829,3 +912,9 @@ so as to remain in compliance with the most up-to-date laws."
master = null
owner = null
screen_loc = ""
/atom/movable/screen/alert/examine(mob/user)
return list(
span_boldnotice(name),
span_info(desc),
)
+13 -26
View File
@@ -39,84 +39,71 @@
//begin buttons
using = new /atom/movable/screen/swap_hand()
using = new /atom/movable/screen/swap_hand(null, src)
using.icon = ui_style
using.icon_state = "swap_1"
using.screen_loc = ui_swaphand_position(owner,1)
using.hud = src
static_inventory += using
using = new /atom/movable/screen/swap_hand()
using = new /atom/movable/screen/swap_hand(null, src)
using.icon = ui_style
using.icon_state = "swap_2"
using.screen_loc = ui_swaphand_position(owner,2)
using.hud = src
static_inventory += using
action_intent = new /atom/movable/screen/act_intent/alien()
action_intent = new /atom/movable/screen/act_intent/alien(null, src)
action_intent.icon_state = mymob.a_intent
action_intent.hud = src
static_inventory += action_intent
if(isalienhunter(mymob))
var/mob/living/carbon/alien/humanoid/hunter/H = mymob
H.leap_icon = new /atom/movable/screen/alien/leap()
H.leap_icon = new /atom/movable/screen/alien/leap(null, src)
H.leap_icon.screen_loc = ui_alien_storage_r
static_inventory += H.leap_icon
using = new/atom/movable/screen/language_menu
using = new/atom/movable/screen/language_menu(null, src)
using.screen_loc = ui_alien_language_menu
using.hud = src
static_inventory += using
using = new /atom/movable/screen/drop()
using = new /atom/movable/screen/drop(null, src)
using.icon = ui_style
using.screen_loc = ui_drop_throw
using.hud = src
static_inventory += using
using = new /atom/movable/screen/resist()
using = new /atom/movable/screen/resist(null, src)
using.icon = ui_style
using.screen_loc = ui_pull_resist
using.hud = src
hotkeybuttons += using
throw_icon = new /atom/movable/screen/throw_catch()
throw_icon = new /atom/movable/screen/throw_catch(null, src)
throw_icon.icon = ui_style
throw_icon.screen_loc = ui_drop_throw
throw_icon.hud = src
hotkeybuttons += throw_icon
pull_icon = new /atom/movable/screen/pull()
pull_icon = new /atom/movable/screen/pull(null, src)
pull_icon.icon = ui_style
pull_icon.hud = src
pull_icon.update_icon()
pull_icon.screen_loc = ui_pull_resist
static_inventory += pull_icon
//begin indicators
healths = new /atom/movable/screen/healths/alien()
healths.hud = src
healths = new /atom/movable/screen/healths/alien(null, src)
infodisplay += healths
alien_plasma_display = new /atom/movable/screen/alien/plasma_display()
alien_plasma_display.hud = src
alien_plasma_display = new /atom/movable/screen/alien/plasma_display(null, src)
infodisplay += alien_plasma_display
if(!isalienqueen(mymob))
alien_queen_finder = new /atom/movable/screen/alien/alien_queen_finder
alien_queen_finder.hud = src
alien_queen_finder = new /atom/movable/screen/alien/alien_queen_finder(null, src)
infodisplay += alien_queen_finder
zone_select = new /atom/movable/screen/zone_sel/alien()
zone_select.hud = src
zone_select = new /atom/movable/screen/zone_sel/alien(null, src)
zone_select.update_icon()
static_inventory += zone_select
for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory))
if(inv.slot_id)
inv.hud = src
inv_slots[TOBITSHIFT(inv.slot_id) + 1] = inv
inv.update_icon()
+6 -12
View File
@@ -5,32 +5,26 @@
..()
var/atom/movable/screen/using
action_intent = new /atom/movable/screen/act_intent/alien()
action_intent = new /atom/movable/screen/act_intent/alien(null, src)
action_intent.icon_state = mymob.a_intent
action_intent.hud = src
static_inventory += action_intent
healths = new /atom/movable/screen/healths/alien()
healths.hud = src
healths = new /atom/movable/screen/healths/alien(null, src)
infodisplay += healths
alien_queen_finder = new /atom/movable/screen/alien/alien_queen_finder()
alien_queen_finder.hud = src
alien_queen_finder = new /atom/movable/screen/alien/alien_queen_finder(null, src)
infodisplay += alien_queen_finder
pull_icon = new /atom/movable/screen/pull()
pull_icon = new /atom/movable/screen/pull(null, src)
pull_icon.icon = 'icons/mob/screen_alien.dmi'
pull_icon.hud = src
pull_icon.update_icon()
pull_icon.screen_loc = ui_pull_resist
hotkeybuttons += pull_icon
using = new/atom/movable/screen/language_menu
using = new/atom/movable/screen/language_menu(null, src)
using.screen_loc = ui_alien_language_menu
using.hud = src
static_inventory += using
zone_select = new /atom/movable/screen/zone_sel/alien()
zone_select.hud = src
zone_select = new /atom/movable/screen/zone_sel/alien(null, src)
zone_select.update_icon()
static_inventory += zone_select
+12 -22
View File
@@ -1,6 +1,7 @@
/atom/movable/screen/blob
icon = 'icons/mob/blob.dmi'
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/blob/MouseEntered(location,control,params)
openToolTip(usr,src,params,title = name,content = desc, theme = "blob")
@@ -126,61 +127,50 @@
..()
var/atom/movable/screen/using
blobpwrdisplay = new /atom/movable/screen()
blobpwrdisplay = new /atom/movable/screen(null, src)
blobpwrdisplay.name = "blob power"
blobpwrdisplay.icon_state = "block"
blobpwrdisplay.screen_loc = ui_health
blobpwrdisplay.mouse_opacity = MOUSE_OPACITY_TRANSPARENT
blobpwrdisplay.layer = ABOVE_HUD_LAYER
blobpwrdisplay.plane = ABOVE_HUD_PLANE
blobpwrdisplay.hud = src
infodisplay += blobpwrdisplay
healths = new /atom/movable/screen/healths/blob()
healths.hud = src
healths = new /atom/movable/screen/healths/blob(null, src)
infodisplay += healths
using = new /atom/movable/screen/blob/BlobHelp()
using = new /atom/movable/screen/blob/BlobHelp(null, src)
using.screen_loc = "WEST:6,NORTH:-3"
using.hud = src
static_inventory += using
using = new /atom/movable/screen/blob/JumpToNode()
using = new /atom/movable/screen/blob/JumpToNode(null, src)
using.screen_loc = ui_inventory
using.hud = src
static_inventory += using
using = new /atom/movable/screen/blob/JumpToCore()
using = new /atom/movable/screen/blob/JumpToCore(null, src)
using.screen_loc = ui_zonesel
using.hud = src
static_inventory += using
using = new /atom/movable/screen/blob/Blobbernaut()
using = new /atom/movable/screen/blob/Blobbernaut(null, src)
using.screen_loc = ui_belt
using.hud = src
static_inventory += using
using = new /atom/movable/screen/blob/ResourceBlob()
using = new /atom/movable/screen/blob/ResourceBlob(null, src)
using.screen_loc = ui_back
using.hud = src
static_inventory += using
using = new /atom/movable/screen/blob/NodeBlob()
using = new /atom/movable/screen/blob/NodeBlob(null, src)
using.screen_loc = ui_hand_position(2)
using.hud = src
static_inventory += using
using = new /atom/movable/screen/blob/FactoryBlob()
using = new /atom/movable/screen/blob/FactoryBlob(null, src)
using.screen_loc = ui_hand_position(1)
using.hud = src
static_inventory += using
using = new /atom/movable/screen/blob/ReadaptStrain()
using = new /atom/movable/screen/blob/ReadaptStrain(null, src)
using.screen_loc = ui_storage1
using.hud = src
static_inventory += using
using = new /atom/movable/screen/blob/RelocateCore()
using = new /atom/movable/screen/blob/RelocateCore(null, src)
using.screen_loc = ui_storage2
using.hud = src
static_inventory += using
+2 -4
View File
@@ -2,10 +2,8 @@
/datum/hud/blobbernaut/New(mob/owner)
..()
blobpwrdisplay = new /atom/movable/screen/healths/blob/naut/core()
blobpwrdisplay.hud = src
blobpwrdisplay = new /atom/movable/screen/healths/blob/naut/core(null, src)
infodisplay += blobpwrdisplay
healths = new /atom/movable/screen/healths/blob/naut()
healths.hud = src
healths = new /atom/movable/screen/healths/blob/naut(null, src)
infodisplay += healths
+3 -3
View File
@@ -7,14 +7,14 @@
..()
var/atom/movable/screen/using
healths = new /atom/movable/screen/healths/clock()
healths = new /atom/movable/screen/healths/clock(null, src)
infodisplay += healths
hosthealth = new /atom/movable/screen/healths/clock()
hosthealth = new /atom/movable/screen/healths/clock(null, src)
hosthealth.screen_loc = ui_internal
infodisplay += hosthealth
using = new /atom/movable/screen/marauder/emerge()
using = new /atom/movable/screen/marauder/emerge(null, src)
using.screen_loc = ui_zonesel
static_inventory += using
+2 -4
View File
@@ -3,13 +3,11 @@
/datum/hud/constructs/New(mob/owner)
..()
pull_icon = new /atom/movable/screen/pull()
pull_icon = new /atom/movable/screen/pull(null, src)
pull_icon.icon = ui_style
pull_icon.hud = src
pull_icon.update_icon()
pull_icon.screen_loc = ui_construct_pull
static_inventory += pull_icon
healths = new /atom/movable/screen/healths/construct()
healths.hud = src
healths = new /atom/movable/screen/healths/construct(null, src)
infodisplay += healths
+7 -14
View File
@@ -6,51 +6,44 @@
..()
var/atom/movable/screen/using
using = new /atom/movable/screen/drop()
using = new /atom/movable/screen/drop(null, src)
using.icon = ui_style
using.screen_loc = ui_drone_drop
using.hud = src
static_inventory += using
pull_icon = new /atom/movable/screen/pull()
pull_icon = new /atom/movable/screen/pull(null, src)
pull_icon.icon = ui_style
pull_icon.hud = src
pull_icon.update_icon()
pull_icon.screen_loc = ui_drone_pull
static_inventory += pull_icon
build_hand_slots()
using = new /atom/movable/screen/inventory()
using = new /atom/movable/screen/inventory(null, src)
using.name = "hand"
using.icon = ui_style
using.icon_state = "swap_1_m"
using.screen_loc = ui_swaphand_position(owner,1)
using.layer = HUD_LAYER
using.plane = HUD_PLANE
using.hud = src
static_inventory += using
using = new /atom/movable/screen/inventory()
using = new /atom/movable/screen/inventory(null, src)
using.name = "hand"
using.icon = ui_style
using.icon_state = "swap_2"
using.screen_loc = ui_swaphand_position(owner,2)
using.layer = HUD_LAYER
using.plane = HUD_PLANE
using.hud = src
static_inventory += using
zone_select = new /atom/movable/screen/zone_sel()
zone_select = new /atom/movable/screen/zone_sel(null, src)
zone_select.icon = ui_style
zone_select.hud = src
zone_select.update_icon()
lingchemdisplay = new /atom/movable/screen/ling/chems()
lingchemdisplay.hud = src
lingchemdisplay = new /atom/movable/screen/ling/chems(null, src)
devilsouldisplay = new /atom/movable/screen/devil/soul_counter
devilsouldisplay.hud = src
devilsouldisplay = new /atom/movable/screen/devil/soul_counter(null, src)
infodisplay += devilsouldisplay
+2 -3
View File
@@ -2,7 +2,7 @@
..()
var/atom/movable/screen/inventory/inv_box
inv_box = new /atom/movable/screen/inventory()
inv_box = new /atom/movable/screen/inventory(null, src)
inv_box.name = "internal storage"
inv_box.icon = ui_style
inv_box.icon_state = "suit_storage"
@@ -11,7 +11,7 @@
inv_box.slot_id = ITEM_SLOT_DEX_STORAGE
static_inventory += inv_box
inv_box = new /atom/movable/screen/inventory()
inv_box = new /atom/movable/screen/inventory(null, src)
inv_box.name = "head/mask"
inv_box.icon = ui_style
inv_box.icon_state = "mask"
@@ -22,7 +22,6 @@
for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory))
if(inv.slot_id)
inv.hud = src
inv_slots[TOBITSHIFT(inv.slot_id) + 1] = inv
inv.update_icon()
-3
View File
@@ -9,9 +9,6 @@
/// Boolean, have the cops arrived? If so, the icon stops changing and remains the same.
var/cops_arrived = 0
/atom/movable/screen/wanted/New()
return ..()
/atom/movable/screen/wanted/Initialize(mapload)
. = ..()
update_icon()
+8 -16
View File
@@ -3,63 +3,55 @@
..()
var/atom/movable/screen/using
using = new /atom/movable/screen/drop()
using = new /atom/movable/screen/drop(null, src)
using.icon = ui_style
using.screen_loc = ui_drone_drop
using.hud = src
static_inventory += using
pull_icon = new /atom/movable/screen/pull()
pull_icon = new /atom/movable/screen/pull(null, src)
pull_icon.icon = ui_style
pull_icon.hud = src
pull_icon.update_icon()
pull_icon.screen_loc = ui_drone_pull
static_inventory += pull_icon
build_hand_slots()
using = new /atom/movable/screen/swap_hand()
using = new /atom/movable/screen/swap_hand(null, src)
using.icon = ui_style
using.icon_state = "swap_1_m"
using.screen_loc = ui_swaphand_position(owner,1)
using.hud = src
static_inventory += using
using = new /atom/movable/screen/swap_hand()
using = new /atom/movable/screen/swap_hand(null, src)
using.icon = ui_style
using.icon_state = "swap_2"
using.screen_loc = ui_swaphand_position(owner,2)
using.hud = src
static_inventory += using
if(mymob.possible_a_intents)
if(mymob.possible_a_intents.len == 4)
// All possible intents - full intent selector
action_intent = new /atom/movable/screen/act_intent/segmented
action_intent = new /atom/movable/screen/act_intent/segmented(null, src)
else
action_intent = new /atom/movable/screen/act_intent
action_intent = new /atom/movable/screen/act_intent(null, src)
action_intent.icon = ui_style
action_intent.icon_state = mymob.a_intent
action_intent.hud = src
static_inventory += action_intent
zone_select = new /atom/movable/screen/zone_sel()
zone_select = new /atom/movable/screen/zone_sel(null, src)
zone_select.icon = ui_style
zone_select.hud = src
zone_select.update_icon()
static_inventory += zone_select
using = new /atom/movable/screen/area_creator
using = new /atom/movable/screen/area_creator(null, src)
using.icon = ui_style
using.hud = src
static_inventory += using
mymob.client.screen = list()
for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory))
if(inv.slot_id)
inv.hud = src
inv_slots[TOBITSHIFT(inv.slot_id) + 1] = inv
inv.update_icon()
+7 -12
View File
@@ -1,5 +1,6 @@
/atom/movable/screen/ghost
icon = 'icons/mob/screen_ghost.dmi'
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/ghost/MouseEntered()
flick(icon_state + "_anim", src)
@@ -48,34 +49,28 @@
..()
var/atom/movable/screen/using
using = new /atom/movable/screen/ghost/jumptomob()
using = new /atom/movable/screen/ghost/jumptomob(null, src)
using.screen_loc = ui_ghost_jumptomob
using.hud = src
static_inventory += using
using = new /atom/movable/screen/ghost/orbit()
using = new /atom/movable/screen/ghost/orbit(null, src)
using.screen_loc = ui_ghost_orbit
using.hud = src
static_inventory += using
using = new /atom/movable/screen/ghost/reenter_corpse()
using = new /atom/movable/screen/ghost/reenter_corpse(null, src)
using.screen_loc = ui_ghost_reenter_corpse
using.hud = src
static_inventory += using
using = new /atom/movable/screen/ghost/teleport()
using = new /atom/movable/screen/ghost/teleport(null, src)
using.screen_loc = ui_ghost_teleport
using.hud = src
static_inventory += using
using = new /atom/movable/screen/ghost/spawners()
using = new /atom/movable/screen/ghost/spawners(null, src)
using.screen_loc = ui_ghost_spawners
using.hud = src
static_inventory += using
using = new /atom/movable/screen/language_menu
using = new /atom/movable/screen/language_menu(null, src)
using.icon = ui_style
using.hud = src
static_inventory += using
/datum/hud/ghost/show_hud(version = 0, mob/viewmob)
+15 -20
View File
@@ -3,33 +3,27 @@
..()
var/atom/movable/screen/using
healths = new /atom/movable/screen/healths/guardian()
healths.hud = src
healths = new /atom/movable/screen/healths/guardian(null, src)
infodisplay += healths
using = new /atom/movable/screen/guardian/Manifest()
using = new /atom/movable/screen/guardian/Manifest(null, src)
using.screen_loc = ui_hand_position(2)
using.hud = src
static_inventory += using
using = new /atom/movable/screen/guardian/Recall()
using = new /atom/movable/screen/guardian/Recall(null, src)
using.screen_loc = ui_hand_position(1)
using.hud = src
static_inventory += using
using = new owner.toggle_button_type()
using = new owner.toggle_button_type(null, src)
using.screen_loc = ui_storage1
using.hud = src
static_inventory += using
using = new /atom/movable/screen/guardian/ToggleLight()
using = new /atom/movable/screen/guardian/ToggleLight(null, src)
using.screen_loc = ui_inventory
using.hud = src
static_inventory += using
using = new /atom/movable/screen/guardian/Communicate()
using = new /atom/movable/screen/guardian/Communicate(null, src)
using.screen_loc = ui_back
using.hud = src
static_inventory += using
/datum/hud/dextrous/guardian/New(mob/living/simple_animal/hostile/guardian/owner) //for a dextrous guardian
@@ -38,7 +32,7 @@
if(istype(owner, /mob/living/simple_animal/hostile/guardian/dextrous))
var/atom/movable/screen/inventory/inv_box
inv_box = new /atom/movable/screen/inventory()
inv_box = new /atom/movable/screen/inventory(null, src)
inv_box.name = "internal storage"
inv_box.icon = ui_style
inv_box.icon_state = "suit_storage"
@@ -46,32 +40,32 @@
inv_box.slot_id = ITEM_SLOT_DEX_STORAGE
static_inventory += inv_box
using = new /atom/movable/screen/guardian/Communicate()
using = new /atom/movable/screen/guardian/Communicate(null, src)
using.screen_loc = ui_sstore1
static_inventory += using
else
using = new /atom/movable/screen/guardian/Communicate()
using = new /atom/movable/screen/guardian/Communicate(null, src)
using.screen_loc = ui_id
static_inventory += using
healths = new /atom/movable/screen/healths/guardian()
healths = new /atom/movable/screen/healths/guardian(null, src)
infodisplay += healths
using = new /atom/movable/screen/guardian/Manifest()
using = new /atom/movable/screen/guardian/Manifest(null, src)
using.screen_loc = ui_belt
static_inventory += using
using = new /atom/movable/screen/guardian/Recall()
using = new /atom/movable/screen/guardian/Recall(null, src)
using.screen_loc = ui_back
static_inventory += using
using = new owner.toggle_button_type()
using = new owner.toggle_button_type(null, src)
using.screen_loc = ui_storage2
static_inventory += using
using = new /atom/movable/screen/guardian/ToggleLight()
using = new /atom/movable/screen/guardian/ToggleLight(null, src)
using.screen_loc = ui_inventory
static_inventory += using
@@ -93,6 +87,7 @@
/atom/movable/screen/guardian
icon = 'icons/mob/guardian.dmi'
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/guardian/Manifest
icon_state = "manifest"
+13 -6
View File
@@ -57,7 +57,8 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
var/list/inv_slots[SLOTS_AMT] // /atom/movable/screen/inventory objects, ordered by their slot ID.
var/list/hand_slots // /atom/movable/screen/inventory/hand objects, assoc list of "[held_index]" = object
var/list/atom/movable/screen/plane_master/plane_masters = list() // see "appearance_flags" in the ref, assoc list of "[plane]" = object
///Assoc list of controller groups, associated with key string group name with value of the plane master controller ref
var/list/atom/movable/plane_master_controller/plane_master_controllers = list()
///UI for screentips that appear when you mouse over things
var/atom/movable/screen/screentip/screentip_text
@@ -86,7 +87,6 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
var/atom/movable/screen/healths
var/atom/movable/screen/healthdoll
var/atom/movable/screen/internals
//GS13 Port - Add back Arousal
var/atom/movable/screen/arousal
@@ -112,10 +112,14 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
hand_slots = list()
for(var/mytype in subtypesof(/atom/movable/screen/plane_master))
var/atom/movable/screen/plane_master/instance = new mytype()
var/atom/movable/screen/plane_master/instance = new mytype(null, src)
plane_masters["[instance.plane]"] = instance
instance.backdrop(mymob)
for(var/mytype in subtypesof(/atom/movable/plane_master_controller))
var/atom/movable/plane_master_controller/controller_instance = new mytype(null, src)
plane_master_controllers[controller_instance.name] = controller_instance
screentip_text = new(null, src)
static_inventory += screentip_text
@@ -146,8 +150,8 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
healths = null
healthdoll = null
wanted_lvl = null
internals = null
arousal = null
lingchemdisplay = null
devilsouldisplay = null
lingstingdisplay = null
@@ -157,6 +161,7 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
combo_display = null
QDEL_LIST_ASSOC_VAL(plane_masters)
QDEL_LIST_ASSOC_VAL(plane_master_controllers)
QDEL_LIST(screenoverlays)
mymob = null
@@ -322,14 +327,13 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
hand_slots = list()
var/atom/movable/screen/inventory/hand/hand_box
for(var/i in 1 to mymob.held_items.len)
hand_box = new /atom/movable/screen/inventory/hand()
hand_box = new /atom/movable/screen/inventory/hand(null, src)
hand_box.name = mymob.get_held_index_name(i)
hand_box.icon = ui_style
hand_box.icon_state = "hand_[mymob.held_index_to_dir(i)]"
hand_box.screen_loc = ui_hand_position(i)
hand_box.held_index = i
hand_slots["[i]"] = hand_box
hand_box.hud = src
static_inventory += hand_box
hand_box.update_icon()
@@ -363,6 +367,9 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
listed_actions.insert_action(button)
if(SCRN_OBJ_IN_PALETTE)
palette_actions.insert_action(button)
if(SCRN_OBJ_INSERT_FIRST)
listed_actions.insert_action(button, index = 1)
position = SCRN_OBJ_IN_LIST
else // If we don't have it as a define, this is a screen_loc, and we should be floating
floating_actions += button
button.screen_loc = position
+50 -83
View File
@@ -4,6 +4,7 @@
/atom/movable/screen/human/toggle
name = "toggle"
icon_state = "toggle"
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/human/toggle/Click()
@@ -26,6 +27,7 @@
/atom/movable/screen/human/equip
name = "equip"
icon_state = "act_equip"
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/human/equip/Click()
if(ismecha(usr.loc)) // stops inventory actions in a mech
@@ -68,6 +70,7 @@
/atom/movable/screen/ling/sting
name = "current sting"
screen_loc = ui_lingstingdisplay
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/ling/sting/Click()
if(isobserver(usr))
@@ -183,54 +186,47 @@
var/atom/movable/screen/using
var/atom/movable/screen/inventory/inv_box
using = new/atom/movable/screen/language_menu
using = new/atom/movable/screen/language_menu(null, src)
using.icon = ui_style
if(!widescreenlayout) // CIT CHANGE
using.screen_loc = ui_boxlang // CIT CHANGE
using.hud = src
static_inventory += using
using = new /atom/movable/screen/area_creator
using = new /atom/movable/screen/area_creator(null, src)
using.icon = ui_style
if(!widescreenlayout) // CIT CHANGE
using.screen_loc = ui_boxarea // CIT CHANGE
using.hud = src
static_inventory += using
using = new /atom/movable/screen/voretoggle() //We fancy Vore now
using = new /atom/movable/screen/voretoggle(null, src) //We fancy Vore now
using.icon = tg_ui_icon_to_cit_ui(ui_style)
using.screen_loc = ui_voremode
if(!widescreenlayout)
using.screen_loc = ui_boxvore
using.hud = src
static_inventory += using
action_intent = new /atom/movable/screen/act_intent/segmented
action_intent = new /atom/movable/screen/act_intent/segmented(null, src)
action_intent.icon_state = mymob.a_intent
action_intent.hud = src
static_inventory += action_intent
assert_move_intent_ui(owner, TRUE)
// clickdelay
clickdelay = new
clickdelay.hud = src
clickdelay = new(null, src)
clickdelay.screen_loc = ui_clickdelay
static_inventory += clickdelay
// resistdelay
resistdelay = new
resistdelay.hud = src
resistdelay = new(null, src)
resistdelay.screen_loc = ui_resistdelay
static_inventory += resistdelay
using = new /atom/movable/screen/drop()
using = new /atom/movable/screen/drop(null, src)
using.icon = ui_style
using.screen_loc = ui_drop_throw
using.hud = src
static_inventory += using
inv_box = new /atom/movable/screen/inventory()
inv_box = new /atom/movable/screen/inventory(null, src)
inv_box.name = "uniform"
inv_box.icon = ui_style
inv_box.slot_id = ITEM_SLOT_ICLOTHING
@@ -239,7 +235,7 @@
inv_box.screen_loc = ui_iclothing
toggleable_inventory += inv_box
inv_box = new /atom/movable/screen/inventory()
inv_box = new /atom/movable/screen/inventory(null, src)
inv_box.name = "suit"
inv_box.icon = ui_style
inv_box.slot_id = ITEM_SLOT_OCLOTHING
@@ -250,21 +246,19 @@
build_hand_slots()
using = new /atom/movable/screen/swap_hand()
using = new /atom/movable/screen/swap_hand(null, src)
using.icon = ui_style
using.icon_state = "swap_1"
using.screen_loc = ui_swaphand_position(owner,1)
using.hud = src
static_inventory += using
using = new /atom/movable/screen/swap_hand()
using = new /atom/movable/screen/swap_hand(null, src)
using.icon = ui_style
using.icon_state = "swap_2"
using.screen_loc = ui_swaphand_position(owner,2)
using.hud = src
static_inventory += using
inv_box = new /atom/movable/screen/inventory()
inv_box = new /atom/movable/screen/inventory(null, src)
inv_box.name = "id"
inv_box.icon = ui_style
inv_box.icon_state = "id"
@@ -273,7 +267,7 @@
inv_box.slot_id = ITEM_SLOT_ID
static_inventory += inv_box
inv_box = new /atom/movable/screen/inventory()
inv_box = new /atom/movable/screen/inventory(null, src)
inv_box.name = "mask"
inv_box.icon = ui_style
inv_box.icon_state = "mask"
@@ -282,7 +276,7 @@
inv_box.slot_id = ITEM_SLOT_MASK
toggleable_inventory += inv_box
inv_box = new /atom/movable/screen/inventory()
inv_box = new /atom/movable/screen/inventory(null, src)
inv_box.name = "neck"
inv_box.icon = ui_style
inv_box.icon_state = "neck"
@@ -291,7 +285,7 @@
inv_box.slot_id = ITEM_SLOT_NECK
toggleable_inventory += inv_box
inv_box = new /atom/movable/screen/inventory()
inv_box = new /atom/movable/screen/inventory(null, src)
inv_box.name = "back"
inv_box.icon = ui_style
inv_box.icon_state = "back"
@@ -300,7 +294,7 @@
inv_box.slot_id = ITEM_SLOT_BACK
static_inventory += inv_box
inv_box = new /atom/movable/screen/inventory()
inv_box = new /atom/movable/screen/inventory(null, src)
inv_box.name = "left pocket"
inv_box.icon = ui_style
inv_box.icon_state = "pocket"
@@ -309,7 +303,7 @@
inv_box.slot_id = ITEM_SLOT_LPOCKET
static_inventory += inv_box
inv_box = new /atom/movable/screen/inventory()
inv_box = new /atom/movable/screen/inventory(null, src)
inv_box.name = "right pocket"
inv_box.icon = ui_style
inv_box.icon_state = "pocket"
@@ -318,7 +312,7 @@
inv_box.slot_id = ITEM_SLOT_RPOCKET
static_inventory += inv_box
inv_box = new /atom/movable/screen/inventory()
inv_box = new /atom/movable/screen/inventory(null, src)
inv_box.name = "suit storage"
inv_box.icon = ui_style
inv_box.icon_state = "suit_storage"
@@ -327,32 +321,28 @@
inv_box.slot_id = ITEM_SLOT_SUITSTORE
static_inventory += inv_box
using = new /atom/movable/screen/resist()
using = new /atom/movable/screen/resist(null, src)
using.icon = ui_style
using.screen_loc = ui_overridden_resist // CIT CHANGE - changes this to overridden resist
using.hud = src
hotkeybuttons += using
rest_icon = new /atom/movable/screen/rest()
rest_icon = new /atom/movable/screen/rest(null, src)
rest_icon.icon = ui_style
rest_icon.screen_loc = ui_pull_resist
rest_icon.hud = src
static_inventory += rest_icon
//END OF CIT CHANGES
using = new /atom/movable/screen/human/toggle()
using = new /atom/movable/screen/human/toggle(null, src)
using.icon = ui_style
using.screen_loc = ui_inventory
using.hud = src
static_inventory += using
using = new /atom/movable/screen/human/equip()
using = new /atom/movable/screen/human/equip(null, src)
using.icon = ui_style
using.screen_loc = ui_equip_position(mymob)
using.hud = src
static_inventory += using
inv_box = new /atom/movable/screen/inventory()
inv_box = new /atom/movable/screen/inventory(null, src)
inv_box.name = "gloves"
inv_box.icon = ui_style
inv_box.icon_state = "gloves"
@@ -361,7 +351,7 @@
inv_box.slot_id = ITEM_SLOT_GLOVES
toggleable_inventory += inv_box
inv_box = new /atom/movable/screen/inventory()
inv_box = new /atom/movable/screen/inventory(null, src)
inv_box.name = "eyes"
inv_box.icon = ui_style
inv_box.icon_state = "glasses"
@@ -370,7 +360,7 @@
inv_box.slot_id = ITEM_SLOT_EYES
toggleable_inventory += inv_box
inv_box = new /atom/movable/screen/inventory()
inv_box = new /atom/movable/screen/inventory(null, src)
inv_box.name = "ears"
inv_box.icon = ui_style
inv_box.icon_state = "ears"
@@ -379,7 +369,7 @@
inv_box.slot_id = ITEM_SLOT_EARS
toggleable_inventory += inv_box
inv_box = new /atom/movable/screen/inventory()
inv_box = new /atom/movable/screen/inventory(null, src)
inv_box.name = "head"
inv_box.icon = ui_style
inv_box.icon_state = "head"
@@ -388,7 +378,7 @@
inv_box.slot_id = ITEM_SLOT_HEAD
toggleable_inventory += inv_box
inv_box = new /atom/movable/screen/inventory()
inv_box = new /atom/movable/screen/inventory(null, src)
inv_box.name = "shoes"
inv_box.icon = ui_style
inv_box.icon_state = "shoes"
@@ -397,7 +387,7 @@
inv_box.slot_id = ITEM_SLOT_FEET
toggleable_inventory += inv_box
inv_box = new /atom/movable/screen/inventory()
inv_box = new /atom/movable/screen/inventory(null, src)
inv_box.name = "belt"
inv_box.icon = ui_style
inv_box.icon_state = "belt"
@@ -406,87 +396,67 @@
inv_box.slot_id = ITEM_SLOT_BELT
static_inventory += inv_box
throw_icon = new /atom/movable/screen/throw_catch()
throw_icon = new /atom/movable/screen/throw_catch(null, src)
throw_icon.icon = ui_style
throw_icon.screen_loc = ui_drop_throw
throw_icon.hud = src
hotkeybuttons += throw_icon
internals = new /atom/movable/screen/internals()
internals.hud = src
infodisplay += internals
healths = new /atom/movable/screen/healths()
healths.hud = src
healths = new /atom/movable/screen/healths(null, src)
infodisplay += healths
staminas = new /atom/movable/screen/staminas()
staminas.hud = src
staminas = new /atom/movable/screen/staminas(null, src)
infodisplay += staminas
if(!CONFIG_GET(flag/disable_stambuffer))
staminabuffer = new /atom/movable/screen/staminabuffer()
staminabuffer.hud = src
staminabuffer = new /atom/movable/screen/staminabuffer(null, src)
infodisplay += staminabuffer
//END OF CIT CHANGES
//GS13 Port - adds arousal and stamina to hud
arousal = new /atom/movable/screen/arousal()
arousal = new /atom/movable/screen/arousal(null, src)
arousal.icon_state = (owner.canbearoused == 1 ? "arousal0" : "")
arousal.hud = src
infodisplay += arousal
healthdoll = new /atom/movable/screen/healthdoll()
healthdoll.hud = src
healthdoll = new /atom/movable/screen/healthdoll(null, src)
infodisplay += healthdoll
pull_icon = new /atom/movable/screen/pull()
pull_icon = new /atom/movable/screen/pull(null, src)
pull_icon.icon = ui_style
pull_icon.hud = src
pull_icon.update_icon()
pull_icon.screen_loc = ui_pull_resist
static_inventory += pull_icon
lingchemdisplay = new /atom/movable/screen/ling/chems()
lingchemdisplay.hud = src
lingchemdisplay = new /atom/movable/screen/ling/chems(null, src)
infodisplay += lingchemdisplay
lingstingdisplay = new /atom/movable/screen/ling/sting()
lingstingdisplay.hud = src
lingstingdisplay = new /atom/movable/screen/ling/sting(null, src)
infodisplay += lingstingdisplay
devilsouldisplay = new /atom/movable/screen/devil/soul_counter
devilsouldisplay.hud = src
devilsouldisplay = new /atom/movable/screen/devil/soul_counter(null, src)
infodisplay += devilsouldisplay
blood_display = new /atom/movable/screen/bloodsucker/blood_counter // Blood Volume
blood_display.hud = src
blood_display = new /atom/movable/screen/bloodsucker/blood_counter(null, src) // Blood Volume
infodisplay += blood_display
vamprank_display = new /atom/movable/screen/bloodsucker/rank_counter // Bloodsucker Rank
vamprank_display.hud = src
vamprank_display = new /atom/movable/screen/bloodsucker/rank_counter(null, src) // Bloodsucker Rank
infodisplay += vamprank_display
sunlight_display = new /atom/movable/screen/bloodsucker/sunlight_counter // Sunlight
sunlight_display.hud = src
sunlight_display = new /atom/movable/screen/bloodsucker/sunlight_counter(null, src) // Sunlight
infodisplay += sunlight_display
coolant_display = new /atom/movable/screen/synth/coolant_counter //Coolant & cooling efficiency readouts for Synths.
coolant_display.hud = src
coolant_display = new /atom/movable/screen/synth/coolant_counter(null, src) //Coolant & cooling efficiency readouts for Synths.
infodisplay += coolant_display
zone_select = new /atom/movable/screen/zone_sel()
zone_select = new /atom/movable/screen/zone_sel(null, src)
zone_select.icon = ui_style
zone_select.hud = src
zone_select.update_icon()
static_inventory += zone_select
combo_display = new /atom/movable/screen/combo()
combo_display = new /atom/movable/screen/combo(null, src)
infodisplay += combo_display
for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory))
if(inv.slot_id)
inv.hud = src
inv_slots[TOBITSHIFT(inv.slot_id) + 1] = inv
inv.update_icon()
@@ -507,10 +477,9 @@
// make new ones
// walk/run
using = new /atom/movable/screen/mov_intent
using = new /atom/movable/screen/mov_intent(null, src)
using.icon = tg_ui_icon_to_cit_ui(ui_style) // CIT CHANGE - overrides mov intent icon
using.screen_loc = ui_movi
using.hud = src
using.update_icon()
static_inventory += using
if(!on_new)
@@ -520,19 +489,17 @@
return
// sprint button
using = new /atom/movable/screen/sprintbutton
using = new /atom/movable/screen/sprintbutton(null, src)
using.icon = tg_ui_icon_to_cit_ui(ui_style)
using.icon_state = ((owner.combat_flags & COMBAT_FLAG_SPRINT_ACTIVE) ? "act_sprint_on" : "act_sprint")
using.screen_loc = ui_movi
using.hud = src
static_inventory += using
if(!on_new)
owner?.client?.screen += using
// same as above but buffer.
sprint_buffer = new /atom/movable/screen/sprint_buffer
sprint_buffer = new /atom/movable/screen/sprint_buffer(null, src)
sprint_buffer.screen_loc = ui_sprintbufferloc
sprint_buffer.hud = src
static_inventory += sprint_buffer
if(!on_new)
owner?.client?.screen += using
+2 -4
View File
@@ -4,13 +4,11 @@
/datum/hud/lavaland_elite/New(mob/living/simple_animal/hostile/asteroid/elite)
..()
pull_icon = new /atom/movable/screen/pull()
pull_icon = new /atom/movable/screen/pull(null, src)
pull_icon.icon = ui_style
pull_icon.hud = src
pull_icon.update_icon()
pull_icon.screen_loc = ui_living_pull
static_inventory += pull_icon
healths = new /atom/movable/screen/healths/lavaland_elite()
healths.hud = src
healths = new /atom/movable/screen/healths/lavaland_elite(null, src)
infodisplay += healths
+17 -35
View File
@@ -3,48 +3,42 @@
var/atom/movable/screen/using
var/atom/movable/screen/inventory/inv_box
action_intent = new /atom/movable/screen/act_intent()
action_intent = new /atom/movable/screen/act_intent(null, src)
action_intent.icon = ui_style
action_intent.icon_state = mymob.a_intent
action_intent.screen_loc = ui_acti
action_intent.hud = src
static_inventory += action_intent
using = new /atom/movable/screen/mov_intent()
using = new /atom/movable/screen/mov_intent(null, src)
using.icon = ui_style
using.icon_state = (mymob.m_intent == MOVE_INTENT_RUN ? "running" : "walking")
using.screen_loc = ui_movi
using.hud = src
static_inventory += using
using = new/atom/movable/screen/language_menu
using = new/atom/movable/screen/language_menu(null, src)
using.icon = ui_style
using.hud = src
static_inventory += using
using = new /atom/movable/screen/drop()
using = new /atom/movable/screen/drop(null, src)
using.icon = ui_style
using.screen_loc = ui_drop_throw
using.hud = src
static_inventory += using
build_hand_slots()
using = new /atom/movable/screen/swap_hand()
using = new /atom/movable/screen/swap_hand(null, src)
using.icon = ui_style
using.icon_state = "swap_1_m" //extra wide!
using.screen_loc = ui_swaphand_position(owner,1)
using.hud = src
static_inventory += using
using = new /atom/movable/screen/swap_hand()
using = new /atom/movable/screen/swap_hand(null, src)
using.icon = ui_style
using.icon_state = "swap_2"
using.screen_loc = ui_swaphand_position(owner,2)
using.hud = src
static_inventory += using
inv_box = new /atom/movable/screen/inventory()
inv_box = new /atom/movable/screen/inventory(null, src)
inv_box.name = "mask"
inv_box.icon = ui_style
inv_box.icon_state = "mask"
@@ -53,7 +47,7 @@
inv_box.slot_id = ITEM_SLOT_MASK
static_inventory += inv_box
inv_box = new /atom/movable/screen/inventory()
inv_box = new /atom/movable/screen/inventory(null, src)
inv_box.name = "neck"
inv_box.icon = ui_style
inv_box.icon_state = "neck"
@@ -62,7 +56,7 @@
inv_box.slot_id = ITEM_SLOT_NECK
static_inventory += inv_box
inv_box = new /atom/movable/screen/inventory()
inv_box = new /atom/movable/screen/inventory(null, src)
inv_box.name = "head"
inv_box.icon = ui_style
inv_box.icon_state = "head"
@@ -71,7 +65,7 @@
inv_box.slot_id = ITEM_SLOT_HEAD
static_inventory += inv_box
inv_box = new /atom/movable/screen/inventory()
inv_box = new /atom/movable/screen/inventory(null, src)
inv_box.name = "back"
inv_box.icon = ui_style
inv_box.icon_state = "back"
@@ -79,53 +73,41 @@
inv_box.slot_id = ITEM_SLOT_BACK
static_inventory += inv_box
throw_icon = new /atom/movable/screen/throw_catch()
throw_icon = new /atom/movable/screen/throw_catch(null, src)
throw_icon.icon = ui_style
throw_icon.screen_loc = ui_drop_throw
throw_icon.hud = src
hotkeybuttons += throw_icon
internals = new /atom/movable/screen/internals()
internals.hud = src
infodisplay += internals
healths = new /atom/movable/screen/healths()
healths.hud = src
healths = new /atom/movable/screen/healths(null, src)
infodisplay += healths
pull_icon = new /atom/movable/screen/pull()
pull_icon = new /atom/movable/screen/pull(null, src)
pull_icon.icon = ui_style
pull_icon.screen_loc = ui_pull_resist
pull_icon.hud = src
pull_icon.update_icon()
static_inventory += pull_icon
lingchemdisplay = new /atom/movable/screen/ling/chems()
lingchemdisplay.hud = src
lingchemdisplay = new /atom/movable/screen/ling/chems(null, src)
infodisplay += lingchemdisplay
lingstingdisplay = new /atom/movable/screen/ling/sting()
lingstingdisplay.hud = src
lingstingdisplay = new /atom/movable/screen/ling/sting(null, src)
infodisplay += lingstingdisplay
zone_select = new /atom/movable/screen/zone_sel()
zone_select = new /atom/movable/screen/zone_sel(null, src)
zone_select.icon = ui_style
zone_select.hud = src
zone_select.update_icon()
static_inventory += zone_select
mymob.client.screen = list()
using = new /atom/movable/screen/resist()
using = new /atom/movable/screen/resist(null, src)
using.icon = ui_style
using.screen_loc = ui_pull_resist
using.hud = src
hotkeybuttons += using
for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory))
if(inv.slot_id)
inv.hud = src
inv_slots[TOBITSHIFT(inv.slot_id) + 1] = inv
inv.update_icon()
+189 -16
View File
@@ -1,9 +1,12 @@
#define SHUTTER_MOVEMENT_DURATION 0.4 SECONDS
#define SHUTTER_WAIT_DURATION 0.2 SECONDS
/// Maximum number of station trait buttons we will display, please think hard before creating scenarios where there are more than this
#define MAX_STATION_TRAIT_BUTTONS_VERTICAL 3
/datum/hud/new_player
///Whether the menu is currently on the client's screen or not
var/menu_hud_status = TRUE
var/list/shown_station_trait_buttons
/datum/hud/new_player/New(mob/dead/new_player/owner)
. = ..()
@@ -13,29 +16,89 @@
/datum/hud/new_player/proc/populate_buttons(mob/dead/new_player/owner)
var/list/buttons = subtypesof(/atom/movable/screen/lobby)
for(var/button_type in buttons)
var/atom/movable/screen/lobby/lobbyscreen = new button_type(our_hud = src)
for (var/atom/movable/screen/lobby/lobbyscreen as anything in buttons)
if (!initial(lobbyscreen.always_available))
continue
lobbyscreen = new lobbyscreen(our_hud = src)
lobbyscreen.SlowInit()
lobbyscreen.hud = src
static_inventory += lobbyscreen
if(!lobbyscreen.always_shown)
lobbyscreen.RegisterSignal(src, COMSIG_HUD_LOBBY_COLLAPSED, TYPE_PROC_REF(/atom/movable/screen/lobby, collapse_button))
lobbyscreen.RegisterSignal(src, COMSIG_HUD_LOBBY_EXPANDED, TYPE_PROC_REF(/atom/movable/screen/lobby, expand_button))
if(istype(lobbyscreen, /atom/movable/screen/lobby/button))
var/atom/movable/screen/lobby/button/lobby_button = lobbyscreen
lobby_button.owner = REF(owner)
if(owner.client.is_localhost())
var/atom/movable/screen/lobby/button/start_now/start_button = new(our_hud = src)
start_button.SlowInit()
static_inventory += start_button
start_button.RegisterSignal(src, COMSIG_HUD_LOBBY_COLLAPSED, TYPE_PROC_REF(/atom/movable/screen/lobby, collapse_button))
start_button.RegisterSignal(src, COMSIG_HUD_LOBBY_EXPANDED, TYPE_PROC_REF(/atom/movable/screen/lobby, expand_button))
show_hud(hud_version)
/// Load and then display the buttons for relevant station traits
/datum/hud/new_player/proc/show_station_trait_buttons()
var/mob/dead/new_player/user = mymob
if (!user.age_verify())
return
for (var/datum/station_trait/trait as anything in GLOB.lobby_station_traits)
if (QDELETED(trait) || !trait.can_display_lobby_button(mymob.client))
remove_station_trait_button(trait)
continue
if(LAZYACCESS(shown_station_trait_buttons, trait))
continue
var/atom/movable/screen/lobby/button/sign_up/sign_up_button = new(our_hud = src)
trait.setup_lobby_button(sign_up_button)
static_inventory |= sign_up_button
LAZYSET(shown_station_trait_buttons, trait, sign_up_button)
RegisterSignal(trait, COMSIG_PARENT_QDELETING, PROC_REF(remove_station_trait_button))
place_station_trait_buttons()
/// Display the buttosn for relevant station traits.
/datum/hud/new_player/proc/place_station_trait_buttons()
if(hud_version != HUD_STYLE_STANDARD || !mymob?.client)
return
var/y_offset = 397
var/x_offset = 233
var/y_button_offset = 27
var/x_button_offset = -27
var/iteration = 0
for(var/trait in shown_station_trait_buttons)
var/atom/movable/screen/lobby/button/sign_up/sign_up_button = shown_station_trait_buttons[trait]
iteration++
sign_up_button.screen_loc = offset_to_screen_loc(x_offset, y_offset, mymob.client.view)
mymob.client.screen |= sign_up_button
if (iteration >= MAX_STATION_TRAIT_BUTTONS_VERTICAL)
iteration = 0
y_offset = 397
x_offset += x_button_offset
else
y_offset += y_button_offset
/// Remove a station trait button, then re-order the rest.
/datum/hud/new_player/proc/remove_station_trait_button(datum/station_trait/trait)
SIGNAL_HANDLER
var/atom/movable/screen/lobby/button/sign_up/button = LAZYACCESS(shown_station_trait_buttons, trait)
if(!button)
return
LAZYREMOVE(shown_station_trait_buttons, trait)
UnregisterSignal(trait, COMSIG_PARENT_QDELETING)
static_inventory -= button
qdel(button)
place_station_trait_buttons()
/atom/movable/screen/lobby
plane = SPLASHSCREEN_PLANE
layer = LOBBY_MENU_LAYER
screen_loc = "TOP,CENTER"
///Whether this HUD element can be hidden from the client's "screen" (moved off-screen) or not
var/always_shown = FALSE
/// If true we will create this button every time the HUD is generated
var/always_available = TRUE
/atom/movable/screen/lobby/New(loc, datum/hud/our_hud, ...)
if(our_hud)
hud = our_hud
set_new_hud(our_hud)
return ..()
/// Run sleeping actions after initialize
@@ -62,15 +125,20 @@
screen_loc = "TOP,CENTER:-61"
/atom/movable/screen/lobby/button
mouse_over_pointer = MOUSE_HAND_POINTER
///Is the button currently enabled?
var/enabled = TRUE
VAR_PROTECTED/enabled = TRUE
///Is the button currently being hovered over with the mouse?
var/highlighted = FALSE
/// The ref of the mob that owns this button. Only the owner can click on it.
var/owner
///Should this button play the select sound?
var/select_sound_play = TRUE
/atom/movable/screen/lobby/button/Click(location, control, params)
if(owner != REF(usr))
if(usr != get_mob())
return
var/mob/dead/new_player/user = usr
if(!user.age_verify())
return
. = ..()
@@ -78,11 +146,19 @@
if(!enabled)
return
flick("[base_icon_state]_pressed", src)
if(select_sound_play)
var/sound/ui_select_sound = sound('sound/misc/menu/ui_select1.ogg')
ui_select_sound.frequency = get_rand_frequency_low_range()
SEND_SOUND(hud.mymob, ui_select_sound)
update_appearance(UPDATE_ICON)
return TRUE
/atom/movable/screen/lobby/button/MouseEntered(location,control,params)
if(owner != REF(usr))
if(usr != get_mob())
return
var/mob/dead/new_player/user = usr
if(!user.age_verify())
return
. = ..()
@@ -90,7 +166,11 @@
update_appearance(UPDATE_ICON)
/atom/movable/screen/lobby/button/MouseExited()
if(owner != REF(usr))
if(usr != get_mob())
return
var/mob/dead/new_player/user = usr
if(!user.age_verify())
return
. = ..()
@@ -113,6 +193,7 @@
return FALSE
enabled = status
update_appearance(UPDATE_ICON)
mouse_over_pointer = enabled ? MOUSE_HAND_POINTER : MOUSE_INACTIVE_POINTER
return TRUE
///Prefs menu
@@ -176,6 +257,7 @@
new_player.ready = PLAYER_NOT_READY
base_icon_state = "not_ready"
update_appearance(UPDATE_ICON)
SEND_SIGNAL(hud, COMSIG_HUD_PLAYER_READY_TOGGLE)
///Shown when the game has started
/atom/movable/screen/lobby/button/join
@@ -184,12 +266,13 @@
icon = 'icons/hud/lobby/join.dmi'
icon_state = "" //Default to not visible
base_icon_state = "join_game"
enabled = FALSE
enabled = null // set in init
/atom/movable/screen/lobby/button/join/Initialize(mapload)
. = ..()
switch(SSticker.current_state)
if(GAME_STATE_PREGAME, GAME_STATE_STARTUP)
set_button_status(FALSE)
RegisterSignal(SSticker, COMSIG_TICKER_ENTER_SETTING_UP, PROC_REF(show_join_button))
if(GAME_STATE_SETTING_UP)
set_button_status(TRUE)
@@ -248,13 +331,14 @@
icon = 'icons/hud/lobby/observe.dmi'
icon_state = "observe_disabled"
base_icon_state = "observe"
enabled = FALSE
enabled = null // set in init
/atom/movable/screen/lobby/button/observe/Initialize(mapload)
. = ..()
if(SSticker.current_state > GAME_STATE_STARTUP)
set_button_status(TRUE)
else
set_button_status(FALSE)
RegisterSignal(SSticker, COMSIG_TICKER_ENTER_PREGAME, PROC_REF(enable_observing))
/atom/movable/screen/lobby/button/observe/Click(location, control, params)
@@ -376,6 +460,23 @@
var/mob/dead/new_player/new_player = hud.mymob
new_player.handle_player_polling()
/// A generic "sign up" button used by station traits
/atom/movable/screen/lobby/button/sign_up
icon = 'icons/hud/lobby/signup_button.dmi'
icon_state = "signup"
base_icon_state = "signup"
always_available = FALSE
/atom/movable/screen/lobby/button/sign_up/MouseEntered(location, control, params)
. = ..()
if(QDELETED(src) || !desc)
return
openToolTip(usr, tip_src = src, params = params, title = name, content = desc,)
/atom/movable/screen/lobby/button/sign_up/MouseExited()
. = ..()
closeToolTip(usr)
/atom/movable/screen/lobby/button/collapse
name = "Collapse Lobby Menu"
icon = 'icons/hud/lobby/collapse_expand.dmi'
@@ -385,6 +486,27 @@
screen_loc = "TOP:-82,CENTER:-54"
always_shown = TRUE
var/blip_enabled = TRUE
/atom/movable/screen/lobby/button/collapse/Initialize(mapload, datum/hud/hud_owner)
. = ..()
switch(SSticker.current_state)
if(GAME_STATE_PREGAME, GAME_STATE_STARTUP)
RegisterSignal(SSticker, COMSIG_TICKER_ENTER_SETTING_UP, PROC_REF(disable_blip))
RegisterSignal(hud, COMSIG_HUD_PLAYER_READY_TOGGLE, PROC_REF(on_player_ready_toggle))
if(GAME_STATE_SETTING_UP)
blip_enabled = FALSE
RegisterSignal(SSticker, COMSIG_TICKER_ERROR_SETTING_UP, PROC_REF(enable_blip))
else
blip_enabled = FALSE
add_overlay(get_blip_overlay())
update_icon(UPDATE_OVERLAYS)
/atom/movable/screen/lobby/button/collapse/update_overlays()
. = ..()
. += get_blip_overlay()
/atom/movable/screen/lobby/button/collapse/Click(location, control, params)
. = ..()
if(!.)
@@ -414,6 +536,38 @@
sleep(2 * SHUTTER_MOVEMENT_DURATION + SHUTTER_WAIT_DURATION)
set_button_status(TRUE)
///Proc to update the ready blip state upon new player's ready status change
/atom/movable/screen/lobby/button/collapse/proc/on_player_ready_toggle()
SIGNAL_HANDLER
update_appearance(UPDATE_ICON)
///Returns a ready blip overlay depending on the player's ready state
/atom/movable/screen/lobby/button/collapse/proc/get_blip_overlay()
var/blip_icon_state = "ready_blip"
if(blip_enabled && hud)
var/mob/dead/new_player/new_player = hud.mymob
blip_icon_state += "_[new_player.ready ? "" : "not_"]ready"
else
blip_icon_state += "_disabled"
var/mutable_appearance/ready_blip = mutable_appearance(icon, blip_icon_state)
return ready_blip
///Disables the ready blip; makes us listen for the setup error to re-enable the blip
/atom/movable/screen/lobby/button/collapse/proc/disable_blip()
SIGNAL_HANDLER
blip_enabled = FALSE
UnregisterSignal(SSticker, COMSIG_TICKER_ENTER_SETTING_UP)
RegisterSignal(SSticker, COMSIG_TICKER_ERROR_SETTING_UP, PROC_REF(enable_blip))
update_appearance(UPDATE_ICON)
///Enables the ready blip; makes us listen for the setup completion and game start to disable the blip
/atom/movable/screen/lobby/button/collapse/proc/enable_blip()
SIGNAL_HANDLER
blip_enabled = TRUE
UnregisterSignal(SSticker, COMSIG_TICKER_ERROR_SETTING_UP)
RegisterSignal(SSticker, COMSIG_TICKER_ENTER_SETTING_UP, PROC_REF(disable_blip))
update_appearance(UPDATE_ICON)
///Moves the button to the top of the screen, leaving only the screen part in view
///Sends a signal on the hud for the menu hud elements to listen to
/atom/movable/screen/lobby/button/collapse/proc/collapse_menu()
@@ -422,12 +576,14 @@
animate(src, transform = transform, time = SHUTTER_MOVEMENT_DURATION + SHUTTER_WAIT_DURATION)
//then pull the button up with the shutter and leave it on the edge of the screen
animate(transform = transform.Translate(x = 0, y = 134), time = SHUTTER_MOVEMENT_DURATION, easing = CUBIC_EASING|EASE_IN)
SEND_SOUND(hud.mymob, sound('sound/misc/menu/menu_rollup1.ogg'))
///Extends the button back to its usual spot
///Sends a signal on the hud for the menu hud elements to listen to
/atom/movable/screen/lobby/button/collapse/proc/expand_menu()
SEND_SIGNAL(hud, COMSIG_HUD_LOBBY_EXPANDED)
animate(src, transform = matrix(), time = SHUTTER_MOVEMENT_DURATION, easing = CUBIC_EASING|EASE_OUT)
SEND_SOUND(hud.mymob, sound('sound/misc/menu/menu_rolldown1.ogg'))
/atom/movable/screen/lobby/shutter
icon = 'icons/hud/lobby/shutter.dmi'
@@ -448,5 +604,22 @@
//pull the shutter back off-screen
animate(transform = matrix(), time = SHUTTER_MOVEMENT_DURATION, easing = CUBIC_EASING|EASE_IN)
/// LOCALHOST ONLY - Start Now button
/atom/movable/screen/lobby/button/start_now
name = "Start Now (LOCALHOST ONLY)"
screen_loc = "TOP:-146,CENTER:-54"
icon = 'icons/hud/lobby/start_now.dmi'
icon_state = "start_now"
base_icon_state = "start_now"
always_available = FALSE
select_sound_play = FALSE
/atom/movable/screen/lobby/button/start_now/Click(location, control, params)
. = ..()
if(!. || !usr.client.is_localhost() || !check_rights_for(usr.client, R_SERVER))
return
SEND_SOUND(hud.mymob, sound('sound/effects/splat.ogg', volume = 50))
SSticker.start_immediately = TRUE
#undef SHUTTER_MOVEMENT_DURATION
#undef SHUTTER_WAIT_DURATION
@@ -0,0 +1,90 @@
///Atom that manages and controls multiple planes. It's an atom so we can hook into add_filter etc. Multiple controllers can control one plane.
/atom/movable/plane_master_controller
///List of planes in this controllers control. Initially this is a normal list, but becomes an assoc list of plane numbers as strings | plane instance
var/list/controlled_planes = list()
///hud that owns this controller
var/datum/hud/owner_hud
INITIALIZE_IMMEDIATE(/atom/movable/plane_master_controller)
///Ensures that all the planes are correctly in the controlled_planes list.
/atom/movable/plane_master_controller/Initialize(mapload, datum/hud/hud)
. = ..()
owner_hud = hud
var/assoc_controlled_planes = list()
for(var/i in controlled_planes)
var/atom/movable/screen/plane_master/instance = owner_hud.plane_masters["[i]"]
if(!instance) //If we looked for a hud that isn't instanced, just keep going
stack_trace("[i] isn't a valid plane master layer for [owner_hud.type], are you sure it exists in the first place?")
continue
assoc_controlled_planes["[i]"] = instance
controlled_planes = assoc_controlled_planes
// From BeeStation
/atom/movable/plane_master_controller/Destroy()
if(owner_hud)
owner_hud.plane_master_controllers -= src
controlled_planes.Cut()
return ..()
///Full override so we can just use filterrific
/atom/movable/plane_master_controller/add_filter(name, priority, list/params)
. = ..()
for(var/i in controlled_planes)
var/atom/movable/screen/plane_master/pm_iterator = controlled_planes[i]
pm_iterator.add_filter(name, priority, params)
///Full override so we can just use filterrific
/atom/movable/plane_master_controller/remove_filter(name_or_names)
. = ..()
for(var/i in controlled_planes)
var/atom/movable/screen/plane_master/pm_iterator = controlled_planes[i]
pm_iterator.remove_filter(name_or_names)
/atom/movable/plane_master_controller/update_filters()
. = ..()
for(var/i in controlled_planes)
var/atom/movable/screen/plane_master/pm_iterator = controlled_planes[i]
pm_iterator.update_filters()
///Gets all filters for this controllers plane masters
/atom/movable/plane_master_controller/proc/get_filters(name)
. = list()
for(var/i in controlled_planes)
var/atom/movable/screen/plane_master/pm_iterator = controlled_planes[i]
. += pm_iterator.get_filter(name)
///Transitions all filters owned by this plane master controller
/atom/movable/plane_master_controller/transition_filter(name, time, list/new_params, easing, loop)
. = ..()
for(var/i in controlled_planes)
var/atom/movable/screen/plane_master/pm_iterator = controlled_planes[i]
pm_iterator.transition_filter(name, time, new_params, easing, loop)
///Full override so we can just use filterrific
/atom/movable/plane_master_controller/add_atom_colour(coloration, colour_priority)
. = ..()
for(var/i in controlled_planes)
var/atom/movable/screen/plane_master/pm_iterator = controlled_planes[i]
pm_iterator.add_atom_colour(coloration, colour_priority)
///Removes an instance of colour_type from the atom's atom_colours list
/atom/movable/plane_master_controller/remove_atom_colour(colour_priority, coloration)
. = ..()
for(var/i in controlled_planes)
var/atom/movable/screen/plane_master/pm_iterator = controlled_planes[i]
pm_iterator.remove_atom_colour(colour_priority, coloration)
///Resets the atom's color to null, and then sets it to the highest priority colour available
/atom/movable/plane_master_controller/update_atom_colour()
for(var/i in controlled_planes)
var/atom/movable/screen/plane_master/pm_iterator = controlled_planes[i]
pm_iterator.update_atom_colour()
/atom/movable/plane_master_controller/game
name = PLANE_MASTERS_GAME
controlled_planes = list(FLOOR_PLANE, GAME_PLANE, WALL_PLANE, ABOVE_WALL_PLANE, LIGHTING_PLANE, EMISSIVE_PLANE)
+2 -2
View File
@@ -7,8 +7,8 @@
icon_state = "radial_center"
/atom/movable/screen/radial/persistent/center/Click(location, control, params)
if(usr.client == parent.current_user)
parent.element_chosen(null,usr)
if(usr == get_mob())
parent.element_chosen(null, usr)
/atom/movable/screen/radial/persistent/center/MouseEntered(location, control, params)
. = ..()
+1 -2
View File
@@ -2,6 +2,5 @@
/datum/hud/revenant/New(mob/owner)
..()
healths = new /atom/movable/screen/healths/revenant()
healths.hud = src
healths = new /atom/movable/screen/healths/revenant(null, src)
infodisplay += healths
+20 -39
View File
@@ -1,5 +1,6 @@
/atom/movable/screen/robot
icon = 'icons/mob/screen_cyborg.dmi'
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/robot/module
name = "cyborg module"
@@ -77,64 +78,56 @@
var/mob/living/silicon/robot/robit = mymob
var/atom/movable/screen/using
using = new/atom/movable/screen/language_menu
using = new/atom/movable/screen/language_menu(null, src)
using.screen_loc = ui_borg_language_menu
static_inventory += using
//Radio
using = new /atom/movable/screen/robot/radio()
using = new /atom/movable/screen/robot/radio(null, src)
using.screen_loc = ui_borg_radio
using.hud = src
static_inventory += using
//Module select
if(!robit.inv1)
robit.inv1 = new /atom/movable/screen/robot/module1()
robit.inv1 = new /atom/movable/screen/robot/module1(null, src)
robit.inv1.screen_loc = ui_inv1
robit.inv1.hud = src
static_inventory += robit.inv1
if(!robit.inv2)
robit.inv2 = new /atom/movable/screen/robot/module2()
robit.inv2 = new /atom/movable/screen/robot/module2(null, src)
robit.inv2.screen_loc = ui_inv2
robit.inv2.hud = src
static_inventory += robit.inv2
if(!robit.inv3)
robit.inv3 = new /atom/movable/screen/robot/module3()
robit.inv3 = new /atom/movable/screen/robot/module3(null, src)
robit.inv3.screen_loc = ui_inv3
robit.inv3.hud = src
static_inventory += robit.inv3
//End of module select
using = new /atom/movable/screen/robot/lamp()
using = new /atom/movable/screen/robot/lamp(null, src)
using.screen_loc = ui_borg_lamp
using.hud = src
static_inventory += using
robit.lampButton = using
var/atom/movable/screen/robot/lamp/lampscreen = using
lampscreen.robot = robit
//Photography stuff
using = new /atom/movable/screen/ai/image_take()
using = new /atom/movable/screen/ai/image_take(null, src)
using.screen_loc = ui_borg_camera
using.hud = src
static_inventory += using
//Sec/Med HUDs
using = new /atom/movable/screen/robot/sensors()
using = new /atom/movable/screen/robot/sensors(null, src)
using.screen_loc = ui_borg_sensor
using.hud = src
static_inventory += using
//Borg Integrated Tablet
using = new /atom/movable/screen/robot/modPC()
using = new /atom/movable/screen/robot/modPC(null, src)
using.screen_loc = ui_borg_tablet
using.hud = src
static_inventory += using
robit.interfaceButton = using
if(robit.modularInterface)
@@ -143,64 +136,54 @@
tabletbutton.robot = robit
//Alerts
using = new /atom/movable/screen/robot/alerts()
using = new /atom/movable/screen/robot/alerts(null, src)
using.screen_loc = ui_borg_alerts
using.hud = src
static_inventory += using
//Thrusters
using = new /atom/movable/screen/robot/thrusters()
using = new /atom/movable/screen/robot/thrusters(null, src)
using.screen_loc = ui_borg_thrusters
using.hud = src
static_inventory += using
robit.thruster_button = using
//PDA message
using = new /atom/movable/screen/robot/pda_msg_send
using = new /atom/movable/screen/robot/pda_msg_send(null, src)
using.screen_loc = ui_borg_pda_send
using.hud = src
static_inventory += using
//PDA log
using = new /atom/movable/screen/robot/pda_msg_show
using = new /atom/movable/screen/robot/pda_msg_show(null, src)
using.screen_loc = ui_borg_pda_log
using.hud = src
static_inventory += using
//Intent
action_intent = new /atom/movable/screen/act_intent/robot()
action_intent = new /atom/movable/screen/act_intent/robot(null, src)
action_intent.icon_state = mymob.a_intent
action_intent.hud = src
static_inventory += action_intent
assert_move_intent_ui(owner, TRUE)
//Health
healths = new /atom/movable/screen/healths/robot()
healths.hud = src
healths = new /atom/movable/screen/healths/robot(null, src)
infodisplay += healths
//Installed Module
robit.hands = new /atom/movable/screen/robot/module()
robit.hands = new /atom/movable/screen/robot/module(null, src)
robit.hands.screen_loc = ui_borg_module
robit.hands.hud = src
static_inventory += robit.hands
//Store
module_store_icon = new /atom/movable/screen/robot/store()
module_store_icon = new /atom/movable/screen/robot/store(null, src)
module_store_icon.screen_loc = ui_borg_store
module_store_icon.hud = src
pull_icon = new /atom/movable/screen/pull()
pull_icon = new /atom/movable/screen/pull(null, src)
pull_icon.icon = 'icons/mob/screen_cyborg.dmi'
pull_icon.screen_loc = ui_borg_pull
pull_icon.hud = src
pull_icon.update_icon()
hotkeybuttons += pull_icon
zone_select = new /atom/movable/screen/zone_sel/robot()
zone_select.hud = src
zone_select = new /atom/movable/screen/zone_sel/robot(null, src)
zone_select.update_icon()
static_inventory += zone_select
@@ -221,7 +204,6 @@
using = new /atom/movable/screen/mov_intent
using.icon = 'modular_citadel/icons/ui/screen_cyborg.dmi'
using.screen_loc = ui_borg_movi
using.hud = src
using.update_icon()
static_inventory += using
if(!on_new)
@@ -235,7 +217,6 @@
using.icon = 'modular_citadel/icons/ui/screen_cyborg.dmi'
using.icon_state = owner.cansprint ? ((owner.combat_flags & COMBAT_FLAG_SPRINT_ACTIVE) ? "act_sprint_on" : "act_sprint") : "act_sprint_locked"
using.screen_loc = ui_borg_movi
using.hud = src
static_inventory += using
if(!on_new)
owner?.client?.screen += using
+72 -81
View File
@@ -17,7 +17,7 @@
/// A reference to the object in the slot. Grabs or items, generally.
var/obj/master = null
/// A reference to the owner HUD, if any.
var/datum/hud/hud = null
VAR_PRIVATE/datum/hud/hud = null
/**
* Map name assigned to this object.
* Automatically set by /client/proc/add_obj_to_map.
@@ -31,12 +31,36 @@
* But for now, this works.
*/
var/del_on_map_removal = TRUE
/// If FALSE, this will not be cleared when calling /client/clear_screen()
// var/clear_with_screen = TRUE // Unimplemented
/// If TRUE, clicking the screen element will fall through and perform a default "Click" call
/// Obviously this requires your Click override, if any, to call parent on their own.
/// This is set to FALSE to default to dissade you from doing this.
/// Generally we don't want default Click stuff, which results in bugs like using Telekinesis on a screen element
/// or trying to point your gun at your screen.
var/default_click = FALSE
/atom/movable/screen/Initialize(mapload, datum/hud/hud_owner)
. = ..()
if(isnull(hud_owner)) //some screens set their hud owners on /new, this prevents overriding them with null post atoms init
return
set_new_hud(hud_owner)
/atom/movable/screen/Destroy()
master = null
hud = null
return ..()
/atom/movable/screen/Click(location, control, params)
if(flags_1 & INITIALIZED_1)
SEND_SIGNAL(src, COMSIG_SCREEN_ELEMENT_CLICK, location, control, params, usr)
if(default_click)
return ..()
///Screen elements are always on top of the players screen and don't move so yes they are adjacent
/atom/movable/screen/Adjacent(atom/neighbor, atom/target, atom/movable/mover)
return TRUE
/atom/movable/screen/examine(mob/user)
return list()
@@ -46,6 +70,26 @@
/atom/movable/screen/proc/component_click(atom/movable/screen/component_button/component, params)
return
///setter used to set our new hud
/atom/movable/screen/proc/set_new_hud(datum/hud/hud_owner)
if(hud)
UnregisterSignal(hud, COMSIG_PARENT_QDELETING)
if(isnull(hud_owner))
hud = null
return
hud = hud_owner
RegisterSignal(hud, COMSIG_PARENT_QDELETING, PROC_REF(on_hud_delete))
/// Returns the mob this is being displayed to, if any
/atom/movable/screen/proc/get_mob()
RETURN_TYPE(/mob)
return hud?.mymob
/atom/movable/screen/proc/on_hud_delete(datum/source)
SIGNAL_HANDLER
set_new_hud(hud_owner = null)
/atom/movable/screen/text
icon = null
icon_state = null
@@ -57,6 +101,7 @@
/atom/movable/screen/swap_hand
plane = HUD_PLANE
name = "swap hand"
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/swap_hand/Click()
// At this point in client Click() code we have passed the 1/10 sec check and little else
@@ -85,12 +130,14 @@
icon = 'icons/mob/screen_midnight.dmi'
icon_state = "craft"
screen_loc = ui_crafting
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/area_creator
name = "create new area"
icon = 'icons/mob/screen_midnight.dmi'
icon_state = "area_edit"
screen_loc = ui_building
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/area_creator/Click()
if(usr.incapacitated() || (isobserver(usr) && !IsAdminGhost(usr)))
@@ -106,11 +153,10 @@
icon = 'icons/mob/screen_midnight.dmi'
icon_state = "talk_wheel"
screen_loc = ui_language_menu
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/language_menu/Click()
var/mob/M = usr
var/datum/language_holder/H = M.get_language_holder()
H.open_language_menu(usr)
usr.get_language_holder().open_language_menu(usr)
/atom/movable/screen/inventory
/// The identifier for the slot. It has nothing to do with ID cards.
@@ -172,7 +218,7 @@
var/image/item_overlay = image(holding)
item_overlay.alpha = 92
if(!user.can_equip(holding, slot_id, disable_warning = TRUE, bypass_equip_delay_self = TRUE))
if(!holding.mob_can_equip(user, slot_id, disable_warning = TRUE, bypass_equip_delay_self = TRUE))
item_overlay.color = "#FF0000"
else
item_overlay.color = "#00ff00"
@@ -247,6 +293,7 @@
icon = 'icons/mob/screen_midnight.dmi'
icon_state = "act_drop"
plane = HUD_PLANE
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/drop/Click()
if(usr.stat == CONSCIOUS)
@@ -256,6 +303,7 @@
name = "intent"
icon_state = "help"
screen_loc = ui_acti
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/act_intent/Click(location, control, params)
usr.a_intent_change(INTENT_HOTKEY_RIGHT)
@@ -287,76 +335,11 @@
icon = 'icons/mob/screen_cyborg.dmi'
screen_loc = ui_borg_intents
/atom/movable/screen/internals
name = "toggle internals"
icon_state = "internal0"
screen_loc = ui_internal
/atom/movable/screen/internals/Click()
if(!iscarbon(usr))
return
var/mob/living/carbon/C = usr
if(C.incapacitated())
return
if(C.internal)
C.internal = null
to_chat(C, span_notice("You are no longer running on internals."))
icon_state = "internal0"
else
if(!C.getorganslot(ORGAN_SLOT_BREATHING_TUBE))
if(HAS_TRAIT(C, TRAIT_NO_INTERNALS))
to_chat(C, span_warning("Due to cumbersome equipment or anatomy, you are currently unable to use internals!"))
return
var/obj/item/clothing/check
var/internals = FALSE
for(check in GET_INTERNAL_SLOTS(C))
if(istype(check, /obj/item/clothing/mask))
var/obj/item/clothing/mask/M = check
if(M.mask_adjusted)
M.adjustmask(C)
if((check.clothing_flags & ALLOWINTERNALS))
internals = TRUE
if(!internals)
to_chat(C, span_warning("You are not wearing an internals mask!"))
return
var/obj/item/I = C.is_holding_item_of_type(/obj/item/tank)
if(I)
to_chat(C, span_notice("You are now running on internals from [I] in your [C.get_held_index_name(C.get_held_index_of_item(I))]."))
C.internal = I
else if(ishuman(C))
var/mob/living/carbon/human/H = C
if(istype(H.s_store, /obj/item/tank))
to_chat(H, span_notice("You are now running on internals from [H.s_store] on your [H.wear_suit.name]."))
H.internal = H.s_store
else if(istype(H.belt, /obj/item/tank))
to_chat(H, span_notice("You are now running on internals from [H.belt] on your belt."))
H.internal = H.belt
else if(istype(H.l_store, /obj/item/tank))
to_chat(H, span_notice("You are now running on internals from [H.l_store] in your left pocket."))
H.internal = H.l_store
else if(istype(H.r_store, /obj/item/tank))
to_chat(H, span_notice("You are now running on internals from [H.r_store] in your right pocket."))
H.internal = H.r_store
//Separate so CO2 jetpacks are a little less cumbersome.
if(!C.internal && istype(C.back, /obj/item/tank))
to_chat(C, span_notice("You are now running on internals from [C.back] on your back."))
C.internal = C.back
if(C.internal)
icon_state = "internal1"
else
to_chat(C, span_warning("You don't have an oxygen tank!"))
return
C.update_action_buttons_icon()
/atom/movable/screen/mov_intent
name = "run/walk toggle"
icon = 'icons/mob/screen_midnight.dmi'
icon_state = "running"
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/mov_intent/Initialize(mapload)
. = ..()
@@ -366,7 +349,10 @@
toggle(usr)
/atom/movable/screen/mov_intent/update_icon_state()
switch(hud?.mymob?.m_intent)
if(!hud || !hud.mymob || !isliving(hud.mymob))
return
var/mob/living/living_hud_owner = hud.mymob
switch(living_hud_owner.m_intent)
if(MOVE_INTENT_WALK)
icon_state = CONFIG_GET(flag/sprint_enabled)? "walking" : "walking_nosprint"
if(MOVE_INTENT_RUN)
@@ -382,6 +368,8 @@
name = "stop pulling"
icon = 'icons/mob/screen_midnight.dmi'
icon_state = "pull"
base_icon_state = "pull"
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/pull/Click()
if(isobserver(usr))
@@ -389,17 +377,14 @@
usr.stop_pulling()
/atom/movable/screen/pull/update_icon_state()
if(hud?.mymob?.pulling)
icon_state = "pull"
else
icon_state = "pull0"
icon_state = "[base_icon_state][hud?.mymob?.pulling ? null : 0]"
return ..()
/atom/movable/screen/resist
name = "resist"
icon = 'icons/mob/screen_midnight.dmi'
icon_state = "act_resist"
plane = HUD_PLANE
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/resist/Click()
if(isliving(usr))
@@ -411,7 +396,7 @@
icon = 'icons/mob/screen_midnight.dmi'
icon_state = "act_rest"
base_icon_state = "act_rest"
plane = HUD_PLANE
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/rest/Click()
if(isliving(usr))
@@ -429,6 +414,7 @@
name = "throw/catch"
icon = 'icons/mob/screen_midnight.dmi'
icon_state = "act_throw_off"
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/throw_catch/Click()
if(iscarbon(usr))
@@ -439,6 +425,7 @@
name = "damage zone"
icon_state = "zone_sel"
screen_loc = ui_zonesel
mouse_over_pointer = MOUSE_HAND_POINTER
var/overlay_icon = 'icons/mob/screen_gen.dmi'
var/static/list/hover_overlays_cache = list()
var/hovering
@@ -641,6 +628,7 @@
/atom/movable/screen/healthdoll
name = "health doll"
screen_loc = ui_healthdoll
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/healthdoll/Click()
if (iscarbon(usr))
@@ -656,6 +644,7 @@
name = "mood"
icon_state = "mood5"
screen_loc = ui_mood
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/mood/attack_tk()
return
@@ -668,7 +657,9 @@
plane = SPLASHSCREEN_PLANE
var/client/holder
/atom/movable/screen/splash/New(client/C, visible, use_previous_title) //TODO: Make this use INITIALIZE_IMMEDIATE, except its not easy
INITIALIZE_IMMEDIATE(/atom/movable/screen/splash)
/atom/movable/screen/splash/Initialize(mapload, datum/hud/hud_owner, client/C, visible, use_previous_title)
. = ..()
if(!istype(C))
return
@@ -683,8 +674,7 @@
icon = SStitle.icon
else
if(!SStitle.previous_icon)
qdel(src)
return
return INITIALIZE_HINT_QDEL
icon = SStitle.previous_icon
holder.screen += src
@@ -708,6 +698,7 @@
/atom/movable/screen/component_button
mouse_over_pointer = MOUSE_HAND_POINTER
var/atom/movable/screen/parent
/atom/movable/screen/component_button/Initialize(mapload, atom/movable/screen/parent)
+2 -1
View File
@@ -5,7 +5,7 @@
name = "toggle sprint"
icon = 'modular_citadel/icons/ui/screen_midnight.dmi'
icon_state = "act_sprint"
layer = ABOVE_HUD_LAYER - 0.1
mouse_over_pointer = MOUSE_HAND_POINTER
var/mutable_appearance/flashy
/atom/movable/screen/sprintbutton/Click()
@@ -44,6 +44,7 @@
name = "sprint buffer"
icon = 'icons/effects/progessbar.dmi'
icon_state = "prog_bar_100"
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/sprint_buffer/Click()
if(isliving(usr))
+6 -5
View File
@@ -1,19 +1,20 @@
/datum/hud/var/atom/movable/screen/staminas/staminas
/datum/hud/var/atom/movable/screen/staminabuffer/staminabuffer
/datum/hud
var/atom/movable/screen/staminas/staminas
var/atom/movable/screen/staminabuffer/staminabuffer
/atom/movable/screen/staminas
icon = 'modular_citadel/icons/ui/screen_gen.dmi'
name = "stamina"
icon_state = "stamina0"
screen_loc = ui_stamina
mouse_opacity = 1
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/staminas/Click(location,control,params)
if(isliving(usr))
var/mob/living/L = usr
CONFIG_CACHE_ENTRY_AND_FETCH_VALUE(number/stamina_combat/buffer_max, buffer_max)
to_chat(L, "<span class='notice'>You have <b>[L.getStaminaLoss()]</b> stamina loss.<br>\
<br>Your stamina buffer is <b>[round((L.stamina_buffer / buffer_max) * 100, 0.1)]%</b> full.</span>")
to_chat(L, "<blockquote class='info'><span class='notice'>You have <b>[L.getStaminaLoss()]</b> stamina loss.<br>\
<br>Your stamina buffer is <b>[round((L.stamina_buffer / buffer_max) * 100, 0.1)]%</b> full.</span></blockquote>")
/atom/movable/screen/staminas/update_icon_state()
var/mob/living/carbon/user = hud?.mymob
+10 -10
View File
@@ -2,14 +2,14 @@
name = "storage"
var/insertion_click = FALSE
/atom/movable/screen/storage/Initialize(mapload, new_master)
/atom/movable/screen/storage/Initialize(mapload, datum/hud/hud, new_master)
. = ..()
master = new_master
/atom/movable/screen/storage/Click(location, control, params)
if(!insertion_click)
return ..()
if(hud?.mymob && (hud.mymob != usr))
if(get_mob() != usr)
return
// just redirect clicks
if(master)
@@ -55,7 +55,7 @@
plane = VOLUMETRIC_STORAGE_BOX_PLANE
var/obj/item/our_item
/atom/movable/screen/storage/volumetric_box/Initialize(mapload, new_master, obj/item/our_item)
/atom/movable/screen/storage/volumetric_box/Initialize(mapload, datum/hud/hud, new_master, obj/item/our_item)
src.our_item = our_item
RegisterSignal(our_item, COMSIG_ITEM_MOUSE_ENTER, PROC_REF(on_item_mouse_enter))
RegisterSignal(our_item, COMSIG_ITEM_MOUSE_EXIT, PROC_REF(on_item_mouse_exit))
@@ -97,9 +97,9 @@
var/atom/movable/screen/storage/item_holder/holder
var/pixel_size
/atom/movable/screen/storage/volumetric_box/center/Initialize(mapload, new_master, our_item)
left = new(null, src, our_item)
right = new(null, src, our_item)
/atom/movable/screen/storage/volumetric_box/center/Initialize(mapload, datum/hud/hud, new_master, our_item)
left = new(null, hud, src, our_item)
right = new(null, hud, src, our_item)
return ..()
/atom/movable/screen/storage/volumetric_box/center/Destroy()
@@ -116,7 +116,7 @@
/**
* Sets the size of this box screen object and regenerates its left/right borders. This includes the actual border's size!
*/
/atom/movable/screen/storage/volumetric_box/center/proc/set_pixel_size(pixels)
/atom/movable/screen/storage/volumetric_box/center/proc/set_pixel_size(pixels, datum/hud/hud)
if(pixel_size == pixels)
return
pixel_size = pixels
@@ -128,7 +128,7 @@
if(our_item)
if(holder)
qdel(holder)
holder = new(null, src, our_item)
holder = new(null, hud, src, our_item)
holder.transform = matrix(1 / multiplier, 0, 0, 0, 1, 0)
holder.mouse_opacity = MOUSE_OPACITY_TRANSPARENT
holder.appearance_flags &= ~RESET_TRANSFORM
@@ -155,7 +155,7 @@
layer = VOLUMETRIC_STORAGE_BOX_LAYER
plane = VOLUMETRIC_STORAGE_BOX_PLANE
/atom/movable/screen/storage/volumetric_edge/Initialize(mapload, master, our_item)
/atom/movable/screen/storage/volumetric_edge/Initialize(mapload, datum/hud/hud, master, our_item)
src.master = master
return ..()
@@ -183,7 +183,7 @@
var/obj/item/our_item
vis_flags = NONE
/atom/movable/screen/storage/item_holder/Initialize(mapload, new_master, obj/item/I)
/atom/movable/screen/storage/item_holder/Initialize(mapload, datum/hud/hud, new_master, obj/item/I)
. = ..()
our_item = I
vis_contents += I
+1
View File
@@ -2,6 +2,7 @@
name = "toggle vore mode"
icon = 'modular_citadel/icons/ui/screen_midnight.dmi'
icon_state = "nom_off"
mouse_over_pointer = MOUSE_HAND_POINTER
/atom/movable/screen/voretoggle/Click()
if(usr != hud.mymob)
+3 -4
View File
@@ -1,15 +1,14 @@
/datum/hud/living/simple_animal
ui_style = 'icons/mob/screen_gen.dmi'
/datum/hud/living/simple_animal/New(mob/living/owner)
..()
pull_icon = new /atom/movable/screen/pull()
pull_icon = new /atom/movable/screen/pull(null, src)
pull_icon.icon = ui_style
pull_icon.update_icon()
pull_icon.screen_loc = ui_living_pull
pull_icon.hud = src
static_inventory += pull_icon
//mob health doll! assumes whatever sprite the mob is
healthdoll = new /atom/movable/screen/healthdoll/living()
healthdoll.hud = src
healthdoll = new /atom/movable/screen/healthdoll/living(null, src)
infodisplay += healthdoll
+6 -12
View File
@@ -67,32 +67,26 @@
..()
var/atom/movable/screen/using
using = new /atom/movable/screen/swarmer/FabricateTrap()
using = new /atom/movable/screen/swarmer/FabricateTrap(null, src)
using.screen_loc = ui_hand_position(2)
using.hud = src
static_inventory += using
using = new /atom/movable/screen/swarmer/Barricade()
using = new /atom/movable/screen/swarmer/Barricade(null, src)
using.screen_loc = ui_hand_position(1)
using.hud = src
static_inventory += using
using = new /atom/movable/screen/swarmer/Replicate()
using = new /atom/movable/screen/swarmer/Replicate(null, src)
using.screen_loc = ui_zonesel
using.hud = src
static_inventory += using
using = new /atom/movable/screen/swarmer/RepairSelf()
using = new /atom/movable/screen/swarmer/RepairSelf(null, src)
using.screen_loc = ui_storage1
using.hud = src
static_inventory += using
using = new /atom/movable/screen/swarmer/ToggleLight()
using = new /atom/movable/screen/swarmer/ToggleLight(null, src)
using.screen_loc = ui_back
using.hud = src
static_inventory += using
using = new /atom/movable/screen/swarmer/ContactSwarmers()
using = new /atom/movable/screen/swarmer/ContactSwarmers(null, src)
using.screen_loc = ui_inventory
using.hud = src
static_inventory += using
@@ -77,8 +77,17 @@ PROCESSING_SUBSYSTEM_DEF(station)
var/datum/station_trait/trait_instance = new trait_type()
can_fire = can_fire || trait_instance.trait_processes
station_traits += trait_instance
log_game("Station Trait: [trait_instance.name] chosen for this round.")
if(!trait_instance.blacklist)
return
for(var/i in trait_instance.blacklist)
var/datum/station_trait/trait_to_remove = i
selectable_traits_by_types[initial(trait_to_remove.trait_type)] -= trait_to_remove
/// Update station trait lobby buttons for clients who joined before we initialised this subsystem
/datum/controller/subsystem/processing/station/proc/display_lobby_traits()
for (var/mob/dead/new_player/player as anything in GLOB.new_player_list)
var/datum/hud/new_player/observer_hud = player.hud_used
if (!istype(observer_hud))
continue
observer_hud.show_station_trait_buttons()
+2 -2
View File
@@ -161,7 +161,7 @@ SUBSYSTEM_DEF(ticker)
start_at = world.time + (CONFIG_GET(number/lobby_countdown) * 10)
for(var/client/C in GLOB.clients)
window_flash(C, ignorepref = TRUE) //let them know lobby has opened up.
to_chat(world, "<span class='boldnotice'>Welcome to [station_name()]!</span>")
to_chat(world, span_boldnotice("Welcome to [station_name()]!"))
send2chat("New round starting on [SSmapping.config.map_name]!", CONFIG_GET(string/chat_announce_new_game))
current_state = GAME_STATE_PREGAME
SEND_SIGNAL(src, COMSIG_TICKER_ENTER_PREGAME)
@@ -424,7 +424,7 @@ SUBSYSTEM_DEF(ticker)
if (living.client.prefs && living.client.prefs.auto_ooc)
if (living.client.prefs.chat_toggles & CHAT_OOC)
living.client.prefs.chat_toggles ^= CHAT_OOC
var/atom/movable/screen/splash/S = new(living.client, TRUE)
var/atom/movable/screen/splash/S = new(null, living.client, TRUE)
S.Fade(TRUE)
living.client.init_verbs()
livings += living
+1 -1
View File
@@ -60,7 +60,7 @@ SUBSYSTEM_DEF(title)
for(var/thing in GLOB.clients)
if(!thing)
continue
var/atom/movable/screen/splash/S = new(thing, FALSE)
var/atom/movable/screen/splash/S = new(null, thing, FALSE)
S.Fade(FALSE,FALSE)
/datum/controller/subsystem/title/Recover()
+8 -14
View File
@@ -39,6 +39,7 @@
var/icon_icon = 'icons/mob/actions.dmi'
/// This is the icon state for the icon that appears on the button
var/button_icon_state = "default"
var/button_overlay_state
/datum/action/New(Target)
link_to(Target)
@@ -177,6 +178,11 @@
ApplyIcon(button, force)
if(button_overlay_state)
button.cut_overlay(button.button_overlay)
button.button_overlay = mutable_appearance(icon = 'icons/mob/actions.dmi', icon_state = button_overlay_state)
button.add_overlay(button.button_overlay)
if(!IsAvailable(TRUE))
button.color = transparent_when_unavailable ? rgb(128,0,0,128) : rgb(128,0,0)
else
@@ -362,6 +368,8 @@
/datum/action/item_action/set_internals
name = "Set Internals"
default_button_position = SCRN_OBJ_INSERT_FIRST
button_overlay_state = "ab_goldborder"
/datum/action/item_action/set_internals/UpdateButton(atom/movable/screen/movable/action_button/button, status_only = FALSE, force)
if(!..()) // no button available
@@ -940,20 +948,6 @@
icon_icon = 'icons/mob/actions/actions_items.dmi'
button_icon_state = "jetboot"
/datum/action/language_menu
name = "Language Menu"
desc = "Open the language menu to review your languages, their keys, and select your default language."
button_icon_state = "language_menu"
check_flags = 0
/datum/action/language_menu/Trigger()
if(!..())
return FALSE
if(ismob(owner))
var/mob/M = owner
var/datum/language_holder/H = M.get_language_holder()
H.open_language_menu(usr)
/datum/action/item_action/wheelys
name = "Toggle Wheely-Heel's Wheels"
desc = "Pops out or in your wheely-heel's wheels."
+4 -4
View File
@@ -28,13 +28,13 @@
lose_text = "<span class='notice'>You suddenly remember how languages work.</span>"
/datum/brain_trauma/severe/aphasia/on_gain()
owner.add_blocked_language(subtypesof(/datum/language/) - /datum/language/aphasia, LANGUAGE_APHASIA)
owner.grant_language(/datum/language/aphasia, TRUE, TRUE, LANGUAGE_APHASIA)
owner.add_blocked_language(subtypesof(/datum/language) - /datum/language/aphasia, LANGUAGE_APHASIA)
owner.grant_language(/datum/language/aphasia, source = LANGUAGE_APHASIA)
..()
/datum/brain_trauma/severe/aphasia/on_lose()
owner.remove_blocked_language(subtypesof(/datum/language/), LANGUAGE_APHASIA)
owner.remove_language(/datum/language/aphasia, TRUE, TRUE, LANGUAGE_APHASIA)
owner.remove_blocked_language(subtypesof(/datum/language), LANGUAGE_APHASIA)
owner.remove_language(/datum/language/aphasia, LANGUAGE_APHASIA)
..()
/datum/brain_trauma/severe/blindness
+2 -2
View File
@@ -40,8 +40,7 @@
/// Creates the hud screen object.
/datum/component/combat_mode/proc/on_mob_hud_created(mob/source)
hud_icon = new
hud_icon.hud = source.hud_used
hud_icon = new(null, source.hud_used)
hud_icon.icon = tg_ui_icon_to_cit_ui(source.hud_used.ui_style)
hud_icon.screen_loc = hud_loc
source.hud_used.static_inventory += hud_icon
@@ -182,6 +181,7 @@
name = "toggle combat mode"
icon = 'modular_citadel/icons/ui/screen_midnight.dmi'
icon_state = "combat_off"
mouse_over_pointer = MOUSE_HAND_POINTER
var/mutable_appearance/flashy
var/combat_on = FALSE ///Wheter combat mode is enabled or not, so we don't have to store a reference.
+2 -2
View File
@@ -4,11 +4,11 @@
/datum/component/personal_crafting/proc/create_mob_button(mob/user)
var/datum/hud/H = user.hud_used
var/atom/movable/screen/craft/C = new()
var/atom/movable/screen/craft/C = new(null, H)
C.icon = H.ui_style
H.static_inventory += C
user.client.screen += C
RegisterSignal(C, COMSIG_CLICK, PROC_REF(component_ui_interact))
RegisterSignal(C, COMSIG_SCREEN_ELEMENT_CLICK, PROC_REF(component_ui_interact))
/datum/component/personal_crafting
var/busy
+2 -2
View File
@@ -299,10 +299,10 @@
/datum/component/mood/proc/modify_hud(datum/source)
var/mob/living/owner = parent
var/datum/hud/hud = owner.hud_used
screen_obj = new
screen_obj = new(null, hud)
hud.infodisplay += screen_obj
RegisterSignal(hud, COMSIG_PARENT_QDELETING, PROC_REF(unmodify_hud))
RegisterSignal(screen_obj, COMSIG_CLICK, PROC_REF(hud_click))
RegisterSignal(screen_obj, COMSIG_SCREEN_ELEMENT_CLICK, PROC_REF(hud_click))
/datum/component/mood/proc/unmodify_hud(datum/source)
if(!screen_obj || !parent)
+15 -15
View File
@@ -33,11 +33,11 @@
var/rows = clamp(CEILING(adjusted_contents / columns, 1), 1, screen_max_rows)
// First, boxes.
ui_boxes = get_ui_boxes()
ui_boxes = get_ui_boxes(user.hud_used)
ui_boxes.screen_loc = "[screen_start_x]:[screen_pixel_x],[screen_start_y]:[screen_pixel_y] to [screen_start_x+columns-1]:[screen_pixel_x],[screen_start_y+rows-1]:[screen_pixel_y]"
. += ui_boxes
// Then, closer.
ui_close = get_ui_close()
ui_close = get_ui_close(user.hud_used)
ui_close.screen_loc = "[screen_start_x + columns]:[screen_pixel_x],[screen_start_y]:[screen_pixel_y]"
. += ui_close
// Then orient the actual items.
@@ -62,7 +62,7 @@
for(var/obj/O in accessible_items())
if(QDELETED(O))
continue
var/atom/movable/screen/storage/item_holder/D = new(null, src, O)
var/atom/movable/screen/storage/item_holder/D = new(null, user.hud_used, src, O)
// SNOWFLAKE: make O opaque too, pending storage rewrite
O.mouse_opacity = MOUSE_OPACITY_OPAQUE
D.mouse_opacity = MOUSE_OPACITY_OPAQUE //This is here so storage items that spawn with contents correctly have the "click around item to equip"
@@ -139,7 +139,7 @@
for(var/i in percentage_by_item)
I = i
var/percent = percentage_by_item[I]
var/atom/movable/screen/storage/volumetric_box/center/B = new /atom/movable/screen/storage/volumetric_box/center(null, src, I)
var/atom/movable/screen/storage/volumetric_box/center/B = new /atom/movable/screen/storage/volumetric_box/center(null, user.hud_used, src, I)
// SNOWFLAKE: force it to icon until we unfuck storage/click passing
I.mouse_opacity = MOUSE_OPACITY_ICON
var/pixels_to_use = overrun? MINIMUM_PIXELS_PER_ITEM : max(using_horizontal_pixels * percent, MINIMUM_PIXELS_PER_ITEM)
@@ -168,15 +168,15 @@
current_pixel = VOLUMETRIC_STORAGE_EDGE_PADDING
// Then, continuous section.
ui_continuous = get_ui_continuous()
ui_continuous = get_ui_continuous(user.hud_used)
ui_continuous.screen_loc = "[screen_start_x]:[screen_pixel_x],[screen_start_y]:[screen_pixel_y] to [screen_start_x+maxcolumns-1]:[screen_pixel_x],[screen_start_y+rows-1]:[screen_pixel_y]"
. += ui_continuous
// Then, left.
ui_left = get_ui_left()
ui_left = get_ui_left(user.hud_used)
ui_left.screen_loc = "[screen_start_x]:[screen_pixel_x - 2],[screen_start_y]:[screen_pixel_y] to [screen_start_x]:[screen_pixel_x - 2],[screen_start_y+rows-1]:[screen_pixel_y]"
. += ui_left
// Then, closer, which is also our right element.
ui_close = get_ui_close()
ui_close = get_ui_close(user.hud_used)
ui_close.screen_loc = "[screen_start_x + maxcolumns]:[screen_pixel_x],[screen_start_y]:[screen_pixel_y] to [screen_start_x + maxcolumns]:[screen_pixel_x],[screen_start_y+rows-1]:[screen_pixel_y]"
. += ui_close
@@ -258,23 +258,23 @@
/**
* Gets our ui_boxes, making it if it doesn't exist.
*/
/datum/component/storage/proc/get_ui_boxes()
return new /atom/movable/screen/storage/boxes(null, src)
/datum/component/storage/proc/get_ui_boxes(datum/hud/hud)
return new /atom/movable/screen/storage/boxes(null, hud, src)
/**
* Gets our ui_left, making it if it doesn't exist.
*/
/datum/component/storage/proc/get_ui_left()
return new /atom/movable/screen/storage/left(null, src)
/datum/component/storage/proc/get_ui_left(datum/hud/hud)
return new /atom/movable/screen/storage/left(null, hud, src)
/**
* Gets our ui_close, making it if it doesn't exist.
*/
/datum/component/storage/proc/get_ui_close()
return new /atom/movable/screen/storage/close(null, src)
/datum/component/storage/proc/get_ui_close(datum/hud/hud)
return new /atom/movable/screen/storage/close(null, hud, src)
/**
* Gets our ui_continuous, making it if it doesn't exist.
*/
/datum/component/storage/proc/get_ui_continuous()
return new /atom/movable/screen/storage/continuous(null, src)
/datum/component/storage/proc/get_ui_continuous(datum/hud/hud)
return new /atom/movable/screen/storage/continuous(null, hud, src)
@@ -63,7 +63,7 @@ Bonus
if(scramble_language && !current_language) // Last part prevents rerolling language with small amounts of cure.
current_language = pick(subtypesof(/datum/language) - /datum/language/common)
H.add_blocked_language(subtypesof(/datum/language) - current_language, LANGUAGE_VOICECHANGE)
H.grant_language(current_language, TRUE, TRUE, LANGUAGE_VOICECHANGE)
H.grant_language(current_language, source = LANGUAGE_VOICECHANGE)
/datum/symptom/voice_change/End(datum/disease/advance/A)
..()
+1 -3
View File
@@ -409,9 +409,7 @@
if(H.additional_language && H.additional_language != "None")
var/language_entry = GLOB.roundstart_languages[H.additional_language]
if(language_entry)
grant_language(language_entry, TRUE, TRUE)
update_atom_languages()
grant_language(language_entry)
/mob/living/carbon/human/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE)
..()
+64 -49
View File
@@ -4,75 +4,90 @@
var/cleanable
var/description
var/mutable_appearance/pic
var/list/num_decals_per_atom
/**
* A short lecture on decal element collision on rotation
* If a given decal's rotated version is identical to one of existing (at a same target), pre-rotation decals,
* then the rotated decal won't stay after when the colliding pre-rotation decal gets rotated,
* resulting in some decal elements colliding into nonexistence. This internal tick-tock prevents
* such collision by forcing a non-collision.
*/
var/rotated
var/first_dir // This stores the direction of the decal compared to the parent facing NORTH
/datum/element/decal/Attach(datum/target, _icon, _icon_state, _dir, _cleanable=CLEAN_GOD, _color, _layer=TURF_LAYER, _description, _alpha=255)
/datum/element/decal/Attach(atom/target, _icon, _icon_state, _dir, _cleanable=CLEAN_GOD, _color, _layer=TURF_LAYER, _description, _alpha=255, _rotated=FALSE)
. = ..()
if(. == ELEMENT_INCOMPATIBLE || !_icon || !_icon_state || !isatom(target))
if(!isatom(target) || (pic ? FALSE : !generate_appearance(_icon, _icon_state, _dir, _layer, _color, _alpha, target)))
return ELEMENT_INCOMPATIBLE
var/atom/A = target
if(!pic)
// It has to be made from an image or dir breaks because of a byond bug
var/temp_image = image(_icon, null, _icon_state, _layer, _dir)
pic = new(temp_image)
pic.color = _color
pic.alpha = _alpha
first_dir = _dir
description = _description
cleanable = _cleanable
rotated = _rotated
LAZYINITLIST(num_decals_per_atom)
if(!num_decals_per_atom[A])
if(first_dir)
RegisterSignal(A, COMSIG_ATOM_DIR_CHANGE, PROC_REF(rotate_react))
if(cleanable)
RegisterSignal(A, COMSIG_COMPONENT_CLEAN_ACT, PROC_REF(clean_react))
if(description)
RegisterSignal(A, COMSIG_PARENT_EXAMINE, PROC_REF(examine))
RegisterSignal(A, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(apply_overlay), TRUE)
num_decals_per_atom[A]++
apply(A)
/datum/element/decal/Detach(datum/target)
var/atom/A = target
num_decals_per_atom[A]--
if(!num_decals_per_atom[A])
UnregisterSignal(A, list(COMSIG_ATOM_DIR_CHANGE, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZE,
COMSIG_COMPONENT_CLEAN_ACT, COMSIG_PARENT_EXAMINE, COMSIG_ATOM_UPDATE_OVERLAYS))
LAZYREMOVE(num_decals_per_atom, A)
apply(A)
return ..()
/datum/element/decal/proc/apply(atom/target)
RegisterSignal(target,COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(apply_overlay), TRUE)
if(isturf(target))
RegisterSignal(target,COMSIG_TURF_AFTER_SHUTTLE_MOVE, PROC_REF(shuttlemove_react), TRUE)
if(target.flags_1 & INITIALIZED_1)
target.update_icon() //could use some queuing here now maybe.
else if(!QDELETED(target) && num_decals_per_atom[target] == 1)
RegisterSignal(target, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZE, PROC_REF(late_update_icon))
else
RegisterSignal(target,COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZE,PROC_REF(late_update_icon), TRUE)
if(isitem(target))
addtimer(CALLBACK(target, TYPE_PROC_REF(/obj/item, update_slot_icon)), 0, TIMER_UNIQUE)
INVOKE_ASYNC(target, TYPE_PROC_REF(/obj/item, update_slot_icon), TRUE)
if(_dir)
RegisterSignal(target, COMSIG_ATOM_DIR_CHANGE, PROC_REF(rotate_react),TRUE)
if(_cleanable)
RegisterSignal(target, COMSIG_COMPONENT_CLEAN_ACT, PROC_REF(clean_react),TRUE)
if(_description)
RegisterSignal(target, COMSIG_PARENT_EXAMINE, PROC_REF(examine),TRUE)
/datum/element/decal/proc/generate_appearance(_icon, _icon_state, _dir, _layer, _color, _alpha, source)
if(!_icon || !_icon_state)
return FALSE
var/temp_image = image(_icon, null, _icon_state, _layer, _dir)
pic = new(temp_image)
pic.color = _color
pic.alpha = _alpha
return TRUE
/datum/element/decal/Detach(atom/source, force)
UnregisterSignal(source, list(COMSIG_ATOM_DIR_CHANGE, COMSIG_COMPONENT_CLEAN_ACT, COMSIG_PARENT_EXAMINE, COMSIG_ATOM_UPDATE_OVERLAYS,COMSIG_TURF_AFTER_SHUTTLE_MOVE))
source.update_icon()
if(isitem(source))
INVOKE_ASYNC(source, TYPE_PROC_REF(/obj/item, update_slot_icon))
return ..()
/datum/element/decal/proc/late_update_icon(atom/source)
source.update_icon()
UnregisterSignal(source,COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZE)
SIGNAL_HANDLER
if(source && istype(source))
source.update_icon()
UnregisterSignal(source,COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZE)
/datum/element/decal/proc/apply_overlay(atom/source, list/overlay_list)
if(first_dir)
pic.dir = first_dir == SOUTH ? source.dir : turn(first_dir, dir2angle(source.dir)-180) //Never turn a dir by 0.
for(var/i in 1 to num_decals_per_atom[source])
overlay_list += pic
SIGNAL_HANDLER
overlay_list += pic
/datum/element/decal/proc/shuttlemove_react(datum/source, turf/newT)
SIGNAL_HANDLER
Detach(source)
newT.AddElement(/datum/element/decal, pic.icon, pic.icon_state, pic.dir, cleanable, pic.color, pic.layer, description, pic.alpha, rotated)
/datum/element/decal/proc/rotate_react(datum/source, old_dir, new_dir)
SIGNAL_HANDLER
/datum/element/decal/proc/rotate_react(atom/source, old_dir, new_dir)
if(old_dir == new_dir)
return
source.update_icon()
Detach(source)
source.AddElement(/datum/element/decal, pic.icon, pic.icon_state, angle2dir(dir2angle(pic.dir)+dir2angle(new_dir)-dir2angle(old_dir)), cleanable, pic.color, pic.layer, description, pic.alpha, !rotated)
/datum/element/decal/proc/clean_react(datum/source, strength)
SIGNAL_HANDLER
if(strength >= cleanable)
Detach(source)
return TRUE
return NONE
/datum/element/decal/proc/examine(datum/source, mob/user, list/examine_list)
SIGNAL_HANDLER
examine_list += description
+13 -10
View File
@@ -64,7 +64,6 @@
var/isholy = FALSE //is this person a chaplain or admin role allowed to use bibles
var/mob/living/enslaved_to //If this mind's master is another mob (i.e. adamantine golems)
var/datum/language_holder/language_holder
var/unconvertable = FALSE
var/late_joiner = FALSE
///has this mind ever been an AI
@@ -96,7 +95,6 @@
/datum/mind/Destroy()
SSticker.minds -= src
QDEL_LIST(antag_datums)
QDEL_NULL(language_holder)
QDEL_NULL(skill_holder)
set_current(null)
soulOwner = null
@@ -118,12 +116,6 @@
/datum/mind/proc/set_original_character(new_original_character)
original_character = WEAKREF(new_original_character)
/datum/mind/proc/get_language_holder()
if(!language_holder)
language_holder = new (src)
return language_holder
/datum/mind/proc/transfer_to(mob/new_character, var/force_key_move = 0)
var/old_character = current
var/signals = SEND_SIGNAL(new_character, COMSIG_MOB_PRE_PLAYER_CHANGE, new_character, old_character) | SEND_SIGNAL(src, COMSIG_PRE_MIND_TRANSFER, new_character, old_character)
@@ -145,7 +137,19 @@
var/datum/atom_hud/antag/hud_to_transfer = antag_hud//we need this because leave_hud() will clear this list
var/mob/living/old_current = current
if(current)
current.transfer_observers_to(new_character) //transfer anyone observing the old character to the new one
//transfer anyone observing the old character to the new one
current.transfer_observers_to(new_character)
// Offload all mind languages from the old holder to a temp one
var/datum/language_holder/empty/temp_holder = new()
var/datum/language_holder/old_holder = old_current.get_language_holder()
var/datum/language_holder/new_holder = new_character.get_language_holder()
// Off load mind languages to the temp holder momentarily
new_holder.transfer_mind_languages(temp_holder)
// Transfer the old holder's mind languages to the new holder
old_holder.transfer_mind_languages(new_holder)
// And finally transfer the temp holder's mind languages back to the old holder
temp_holder.transfer_mind_languages(old_holder)
set_current(new_character) //associate ourself with our new body
new_character.mind = src //and associate our new body with ourself
for(var/a in antag_datums) //Makes sure all antag datums effects are applied in the new body
@@ -162,7 +166,6 @@
if(new_character.client)
LAZYCLEARLIST(new_character.client.recent_examines)
new_character.client.init_verbs() // re-initialize character specific verbs
current.update_atom_languages()
//CIT CHANGE - makes arousal update when transfering bodies
if(isliving(new_character)) //New humans and such are by default enabled arousal. Let's always use the new mind's prefs.
+2 -2
View File
@@ -277,10 +277,10 @@
/datum/mutation/human/stoner/on_acquiring(mob/living/carbon/human/owner)
..()
owner.grant_language(/datum/language/beachbum, TRUE, TRUE, LANGUAGE_STONER)
owner.grant_language(/datum/language/beachbum, source = LANGUAGE_STONER)
owner.add_blocked_language(subtypesof(/datum/language) - /datum/language/beachbum, LANGUAGE_STONER)
/datum/mutation/human/stoner/on_losing(mob/living/carbon/human/owner)
..()
owner.remove_language(/datum/language/beachbum, TRUE, TRUE, LANGUAGE_STONER)
owner.remove_language(/datum/language/beachbum, source = LANGUAGE_STONER)
owner.remove_blocked_language(subtypesof(/datum/language) - /datum/language/beachbum, LANGUAGE_STONER)
+1 -1
View File
@@ -6,5 +6,5 @@
/datum/numbered_display/New(obj/item/sample, _number = 1, datum/component/storage/parent)
if(!istype(sample))
qdel(src)
sample_object = new /atom/movable/screen/storage/item_holder(null, parent, sample)
sample_object = new /atom/movable/screen/storage/item_holder(null, null, parent, sample)
number = _number
+59 -5
View File
@@ -1,3 +1,6 @@
/// Station traits displayed in the lobby
GLOBAL_LIST_EMPTY(lobby_station_traits)
///Base class of station traits. These are used to influence rounds in one way or the other by influencing the levers of the station.
/datum/station_trait
///Name of the trait
@@ -22,26 +25,30 @@
var/trait_flags
/// Whether or not this trait can be reverted by an admin
var/can_revert = TRUE
/// If set to true we'll show a button on the lobby to notify people about this trait
var/sign_up_button = FALSE
/// Lobby buttons controlled by this trait
var/list/lobby_buttons = list()
/datum/station_trait/New()
. = ..()
RegisterSignal(SSticker, COMSIG_TICKER_ROUND_STARTING, PROC_REF(on_round_start))
if(sign_up_button)
GLOB.lobby_station_traits += src
if(SSstation.initialized)
SSstation.display_lobby_traits()
if(trait_processes)
START_PROCESSING(SSstation, src)
if(trait_to_give)
ADD_TRAIT(SSstation, trait_to_give, STATION_TRAIT)
/datum/station_trait/Destroy()
destroy_lobby_buttons()
SSstation.station_traits -= src
return ..()
/// Proc ran when round starts. Use this for roundstart effects.
/datum/station_trait/proc/on_round_start()
SIGNAL_HANDLER
return
///type of info the centcom report has on this trait, if any.
/datum/station_trait/proc/get_report()
return "[name] - [report_message]"
@@ -55,3 +62,50 @@
REMOVE_TRAIT(SSstation, trait_to_give, STATION_TRAIT)
qdel(src)
/// Return TRUE if we want to show a lobby button, by default we assume we don't want it after the round begins
/datum/station_trait/proc/can_display_lobby_button(client/player)
return sign_up_button && !SSticker.HasRoundStarted()
/// Apply any additional handling we need to our lobby button
/datum/station_trait/proc/setup_lobby_button(atom/movable/screen/lobby/button/sign_up/lobby_button)
SHOULD_CALL_PARENT(TRUE)
lobby_button.name = name
lobby_buttons |= lobby_button
RegisterSignal(lobby_button, COMSIG_ATOM_UPDATE_ICON, PROC_REF(on_lobby_button_update_icon))
RegisterSignal(lobby_button, COMSIG_SCREEN_ELEMENT_CLICK, PROC_REF(on_lobby_button_click))
RegisterSignal(lobby_button, COMSIG_PARENT_QDELETING, PROC_REF(on_lobby_button_destroyed))
lobby_button.update_appearance(UPDATE_ICON)
/// Called when our lobby button is clicked on
/datum/station_trait/proc/on_lobby_button_click(atom/movable/screen/lobby/button/sign_up/lobby_button, location, control, params, mob/dead/new_player/user)
SIGNAL_HANDLER
return
/// Called when our lobby button tries to update its appearance
/datum/station_trait/proc/on_lobby_button_update_icon(atom/movable/screen/lobby/button/sign_up/lobby_button, updates)
SIGNAL_HANDLER
return
/// Don't hold references to deleted buttons
/datum/station_trait/proc/on_lobby_button_destroyed(atom/movable/screen/lobby/button/sign_up/lobby_button)
SIGNAL_HANDLER
lobby_buttons -= lobby_button
/// Proc ran when round starts. Use this for roundstart effects. By default we clean up our buttons here.
/datum/station_trait/proc/on_round_start()
SIGNAL_HANDLER
destroy_lobby_buttons()
/// Remove all of our active lobby buttons
/datum/station_trait/proc/destroy_lobby_buttons()
for (var/atom/movable/screen/button as anything in lobby_buttons)
var/mob/dead/new_player/hud_owner = button.get_mob()
if (QDELETED(hud_owner))
qdel(button)
continue
var/datum/hud/new_player/using_hud = hud_owner.hud_used
if(!using_hud)
qdel(button)
continue
using_hud.remove_station_trait_button(src)
@@ -152,9 +152,7 @@
. = ..()
//All bots that exist round start have their set language randomized.
for(var/mob/living/simple_animal/bot/found_bot in GLOB.alive_mob_list)
/// The bot's language holder - so we can randomize and change their language
var/datum/language_holder/bot_languages = found_bot.get_language_holder()
bot_languages.selected_language = bot_languages.get_random_spoken_language()
found_bot.set_active_language(found_bot.get_random_spoken_language())
/datum/station_trait/revenge_of_pun_pun
name = "Revenge of Pun Pun"
+9 -6
View File
@@ -971,17 +971,20 @@
desc = "A magical strand of Durathread is wrapped around your neck, preventing you from breathing! Click this icon to remove the strand."
icon_state = "his_grace"
alerttooltipstyle = "hisgrace"
clickable_glow = TRUE
/atom/movable/screen/alert/status_effect/strandling/Click(location, control, params)
. = ..()
if(usr != owner)
if(!.)
return
to_chat(owner, "<span class='notice'>You attempt to remove the durathread strand from around your neck.</span>")
if(do_after(owner, 3.5 SECONDS, owner))
if(isliving(owner))
var/mob/living/L = owner
to_chat(owner, "<span class='notice'>You successfully remove the durathread strand.</span>")
L.remove_status_effect(STATUS_EFFECT_CHOKINGSTRAND)
if(!do_after(owner, 3.5 SECONDS, owner))
return
if(!isliving(owner))
return
var/mob/living/L = owner
to_chat(owner, "<span class='notice'>You successfully remove the durathread strand.</span>")
L.remove_status_effect(STATUS_EFFECT_CHOKINGSTRAND)
/datum/status_effect/pacify
@@ -102,8 +102,12 @@
/atom/movable/screen/alert/status_effect/wound
name = "Wounded"
desc = "Your body has sustained serious damage, click here to inspect yourself."
clickable_glow = TRUE
/atom/movable/screen/alert/status_effect/wound/Click()
. = ..()
if(!.)
return
var/mob/living/carbon/C = usr
C.check_self_for_injuries()
+2 -2
View File
@@ -26,7 +26,7 @@
var/require_comms_key = FALSE
/datum/world_topic/proc/TryRun(list/input, addr)
key_valid = config && (CONFIG_GET(string/comms_key) == input["key"])
key_valid = (CONFIG_GET(string/comms_key) == input["key"]) && CONFIG_GET(string/comms_key) && input["key"]
if(require_comms_key && !key_valid)
return "Bad Key"
input -= "key"
@@ -124,7 +124,7 @@
for(var/mob/dead/observer/O in GLOB.player_list)
if(O.key == expected_key)
if(O.client?.address == addr)
new /atom/movable/screen/splash(O.client, TRUE)
new /atom/movable/screen/splash(null, O.client, TRUE)
break
/datum/world_topic/adminmsg
+35 -36
View File
@@ -12,8 +12,11 @@
var/throw_speed = 2 //How many tiles to move per ds when being thrown. Float values are fully supported
var/throw_range = 7
var/mob/pulledby = null
/// What language holder type to init as
var/initial_language_holder = /datum/language_holder
var/datum/language_holder/language_holder // Mindless mobs and objects need language too, some times. Mind holder takes prescedence.
/// Holds all languages this mob can speak and understand
VAR_PRIVATE/datum/language_holder/language_holder
var/verb_say = "says"
var/verb_ask = "asks"
var/verb_exclaim = "exclaims"
@@ -647,49 +650,46 @@
/// Gets or creates the relevant language holder. For mindless atoms, gets the local one. For atom with mind, gets the mind one.
/atom/movable/proc/get_language_holder(get_minds = TRUE)
RETURN_TYPE(/datum/language_holder)
if(QDELING(src))
CRASH("get_language_holder() called on a QDELing atom, \
this will try to re-instantiate the language holder that's about to be deleted, which is bad.")
if(!language_holder)
language_holder = new initial_language_holder(src)
return language_holder
/// Grants the supplied language and sets omnitongue true.
/atom/movable/proc/grant_language(language, understood = TRUE, spoken = TRUE, source = LANGUAGE_ATOM)
var/datum/language_holder/LH = get_language_holder()
return LH.grant_language(language, understood, spoken, source)
/atom/movable/proc/grant_language(language, language_flags = ALL, source = LANGUAGE_ATOM)
return get_language_holder().grant_language(language, language_flags, source)
/// Grants every language.
/atom/movable/proc/grant_all_languages(understood = TRUE, spoken = TRUE, grant_omnitongue = TRUE, source = LANGUAGE_MIND)
var/datum/language_holder/LH = get_language_holder()
return LH.grant_all_languages(understood, spoken, grant_omnitongue, source)
/atom/movable/proc/grant_all_languages(language_flags = ALL, grant_omnitongue = TRUE, source = LANGUAGE_MIND)
return get_language_holder().grant_all_languages(language_flags, grant_omnitongue, source)
/// Removes a single language.
/atom/movable/proc/remove_language(language, understood = TRUE, spoken = TRUE, source = LANGUAGE_ALL)
var/datum/language_holder/LH = get_language_holder()
return LH.remove_language(language, understood, spoken, source)
/atom/movable/proc/remove_language(language, language_flags = ALL, source = LANGUAGE_ALL)
return get_language_holder().remove_language(language, language_flags, source)
/// Removes every language and sets omnitongue false.
/atom/movable/proc/remove_all_languages(source = LANGUAGE_ALL, remove_omnitongue = FALSE)
var/datum/language_holder/LH = get_language_holder()
return LH.remove_all_languages(source, remove_omnitongue)
return get_language_holder().remove_all_languages(source, remove_omnitongue)
/// Adds a language to the blocked language list. Use this over remove_language in cases where you will give languages back later.
/atom/movable/proc/add_blocked_language(language, source = LANGUAGE_ATOM)
var/datum/language_holder/LH = get_language_holder()
return LH.add_blocked_language(language, source)
return get_language_holder().add_blocked_language(language, source)
/// Removes a language from the blocked language list.
/atom/movable/proc/remove_blocked_language(language, source = LANGUAGE_ATOM)
var/datum/language_holder/LH = get_language_holder()
return LH.remove_blocked_language(language, source)
return get_language_holder().remove_blocked_language(language, source)
/// Checks if atom has the language. If spoken is true, only checks if atom can speak the language.
/atom/movable/proc/has_language(language, spoken = FALSE)
var/datum/language_holder/LH = get_language_holder()
return LH.has_language(language, spoken)
/atom/movable/proc/has_language(language, flags_to_check)
return get_language_holder().has_language(language, flags_to_check)
/// Checks if atom can speak the language.
/atom/movable/proc/can_speak_language(language)
var/datum/language_holder/LH = get_language_holder()
return LH.can_speak_language(language)
return get_language_holder().can_speak_language(language)
/// Returns the result of tongue specific limitations on spoken languages.
/atom/movable/proc/could_speak_language(language)
@@ -697,33 +697,32 @@
/// Returns selected language, if it can be spoken, or finds, sets and returns a new selected language if possible.
/atom/movable/proc/get_selected_language()
var/datum/language_holder/LH = get_language_holder()
return LH.get_selected_language()
return get_language_holder().get_selected_language()
/// Gets a random understood language, useful for hallucinations and such.
/atom/movable/proc/get_random_understood_language()
var/datum/language_holder/LH = get_language_holder()
return LH.get_random_understood_language()
return get_language_holder().get_random_understood_language()
/// Gets a random spoken language, useful for forced speech and such.
/atom/movable/proc/get_random_spoken_language()
var/datum/language_holder/LH = get_language_holder()
return LH.get_random_spoken_language()
return get_language_holder().get_random_spoken_language()
/// Copies all languages into the supplied atom/language holder. Source should be overridden when you
/// do not want the language overwritten by later atom updates or want to avoid blocked languages.
/atom/movable/proc/copy_languages(from_holder, source_override)
if(isatom(from_holder))
/atom/movable/proc/copy_languages(datum/language_holder/from_holder, source_override)
if(ismovable(from_holder))
var/atom/movable/thing = from_holder
from_holder = thing.get_language_holder()
var/datum/language_holder/LH = get_language_holder()
return LH.copy_languages(from_holder, source_override)
/// Empties out the atom specific languages and updates them according to the current atoms language holder.
/// As a side effect, it also creates missing language holders in the process.
/atom/movable/proc/update_atom_languages()
var/datum/language_holder/LH = get_language_holder()
return LH.update_atom_languages(src)
return get_language_holder().copy_languages(from_holder, source_override)
/// Sets the passed path as the active language
/// Returns the currently selected language if successful, if the language was not valid, returns null
/atom/movable/proc/set_active_language(language_path)
var/datum/language_holder/our_holder = get_language_holder()
our_holder.selected_language = language_path
return our_holder.get_selected_language() // verifies its validity, returns it if successful.
/// Sets the vocal bark for the atom, using the bark's ID
/atom/movable/proc/set_bark(id)
@@ -291,7 +291,6 @@ Credit where due:
W.update_label()
if(plasmaman && !visualsOnly) //If we need to breathe from the plasma tank, we should probably start doing that
H.internal = H.get_item_for_held_index(2)
H.update_internals_hud_icon(1)
PDA.owner = H.real_name
PDA.ownjob = "Assistant"
PDA.update_label()
-1
View File
@@ -176,7 +176,6 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE)
P.back.plane = ABOVE_HUD_PLANE
P.update_inv_back()
P.internal = P.back
P.update_internals_hud_icon(1)
if("hsbscrubber") // This is beyond its normal capability but this is sandbox and you spawned one, I assume you need it
var/obj/hsb = new/obj/machinery/portable_atmospherics/scrubber{volume_rate=50*ONE_ATMOSPHERE;on=1}(usr.loc)
+1
View File
@@ -14,6 +14,7 @@
use_power = IDLE_POWER_USE
idle_power_usage = 2
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
mouse_over_pointer = MOUSE_HAND_POINTER
/obj/machinery/button/Initialize(mapload, ndir = 0, built = 0)
if(istext(id) && mapload && id[1] == "!")
@@ -10,6 +10,7 @@
idle_power_usage = 2
active_power_usage = 4
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
mouse_over_pointer = MOUSE_HAND_POINTER
var/idSelf
/obj/machinery/doorButtons/attackby(obj/O, mob/user)
+1
View File
@@ -21,6 +21,7 @@
max_integrity = 250
integrity_failure = 0.4
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 100, FIRE = 90, ACID = 30)
mouse_over_pointer = MOUSE_HAND_POINTER
use_power = IDLE_POWER_USE
idle_power_usage = 2
active_power_usage = 6
+1
View File
@@ -5,6 +5,7 @@
icon_state = "light1"
base_icon_state = "light"
desc = "Make dark."
mouse_over_pointer = MOUSE_HAND_POINTER
var/area/area = null
var/otherarea = null
+1 -1
View File
@@ -94,7 +94,7 @@
M.setDir(dir)
buckled_mobs |= M
M.update_mobility()
M.throw_alert("buckled", /atom/movable/screen/alert/restrained/buckled)
M.throw_alert("buckled", /atom/movable/screen/alert/buckled)
post_buckle_mob(M)
SEND_SIGNAL(src, COMSIG_MOVABLE_BUCKLE, M, force)
+1 -1
View File
@@ -47,4 +47,4 @@
if(!istype(T)) //you know this will happen somehow
CRASH("Turf decal initialized in an object/nullspace")
var/turn_dir = 180 - dir2angle(T.dir) //Turning a dir by 0 results in a roulette of random dirs.
T.AddElement(/datum/element/decal, icon, icon_state, turn_dir ? turn(dir, turn_dir) : dir, CLEAN_GOD, color, null, null, alpha)
T.AddElement(/datum/element/decal, icon, icon_state, turn_dir ? turn(dir, turn_dir) : dir, CLEAN_GOD, color, null, null, alpha, FALSE)
+25 -25
View File
@@ -220,8 +220,8 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark)
name = "department_sec"
icon_state = "Security Officer"
/obj/effect/landmark/start/depsec/New()
..()
/obj/effect/landmark/start/depsec/Initialize(mapload)
. = ..()
GLOB.department_security_spawns += src
/obj/effect/landmark/start/depsec/Destroy()
@@ -246,7 +246,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark)
icon_state = "wiznerd_spawn"
/obj/effect/landmark/start/wizard/Initialize(mapload)
..()
. = ..()
GLOB.wizardstart += loc
return INITIALIZE_HINT_QDEL
@@ -256,7 +256,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark)
icon_state = "snukeop_spawn"
/obj/effect/landmark/start/nukeop/Initialize(mapload)
..()
. = ..()
GLOB.nukeop_start += loc
return INITIALIZE_HINT_QDEL
@@ -266,7 +266,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark)
icon_state = "snukeop_leader_spawn"
/obj/effect/landmark/start/nukeop_leader/Initialize(mapload)
..()
. = ..()
GLOB.nukeop_leader_start += loc
return INITIALIZE_HINT_QDEL
@@ -278,7 +278,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
name = "New Player"
/obj/effect/landmark/start/new_player/Initialize(mapload)
..()
. = ..()
GLOB.newplayer_start += loc
return INITIALIZE_HINT_QDEL
@@ -308,7 +308,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
name = "JoinLate"
/obj/effect/landmark/latejoin/Initialize(mapload)
..()
. = ..()
SSjob.latejoin_trackers += loc
return INITIALIZE_HINT_QDEL
@@ -333,7 +333,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
icon_state = "xeno_spawn"
/obj/effect/landmark/xeno_spawn/Initialize(mapload)
..()
. = ..()
GLOB.xeno_spawn += loc
return INITIALIZE_HINT_QDEL
@@ -343,7 +343,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
icon_state = "blob_start"
/obj/effect/landmark/blobstart/Initialize(mapload)
..()
. = ..()
GLOB.blobstart += loc
return INITIALIZE_HINT_QDEL
@@ -352,7 +352,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
icon_state = "secequipment"
/obj/effect/landmark/secequipment/Initialize(mapload)
..()
. = ..()
GLOB.secequipment += loc
return INITIALIZE_HINT_QDEL
@@ -361,7 +361,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
icon_state = "prisonwarp"
/obj/effect/landmark/prisonwarp/Initialize(mapload)
..()
. = ..()
GLOB.prisonwarp += loc
return INITIALIZE_HINT_QDEL
@@ -370,7 +370,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
icon_state = "ert_spawn"
/obj/effect/landmark/ert_spawn/Initialize(mapload)
..()
. = ..()
GLOB.emergencyresponseteamspawn += loc
return INITIALIZE_HINT_QDEL
@@ -379,7 +379,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
icon_state = "holding_facility"
/obj/effect/landmark/holding_facility/Initialize(mapload)
..()
. = ..()
GLOB.holdingfacility += loc
return INITIALIZE_HINT_QDEL
@@ -388,7 +388,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
icon_state = "tdome_observer"
/obj/effect/landmark/thunderdome/observe/Initialize(mapload)
..()
. = ..()
GLOB.tdomeobserve += loc
return INITIALIZE_HINT_QDEL
@@ -397,7 +397,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
icon_state = "tdome_t1"
/obj/effect/landmark/thunderdome/one/Initialize(mapload)
..()
. = ..()
GLOB.tdome1 += loc
return INITIALIZE_HINT_QDEL
@@ -406,7 +406,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
icon_state = "tdome_t2"
/obj/effect/landmark/thunderdome/two/Initialize(mapload)
..()
. = ..()
GLOB.tdome2 += loc
return INITIALIZE_HINT_QDEL
@@ -415,7 +415,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
icon_state = "tdome_admin"
/obj/effect/landmark/thunderdome/admin/Initialize(mapload)
..()
. = ..()
GLOB.tdomeadmin += loc
return INITIALIZE_HINT_QDEL
@@ -426,7 +426,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
layer = MOB_LAYER
/obj/effect/landmark/servant_of_ratvar/Initialize(mapload)
..()
. = ..()
GLOB.servant_spawns += loc
return INITIALIZE_HINT_QDEL
@@ -436,7 +436,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
icon_state = "city_of_cogs"
/obj/effect/landmark/city_of_cogs/Initialize(mapload)
..()
. = ..()
GLOB.city_of_cogs_spawns += loc
return INITIALIZE_HINT_QDEL
@@ -448,7 +448,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
/obj/effect/landmark/event_spawn/New()
..()
. = ..()
GLOB.generic_event_spawns += src
/obj/effect/landmark/event_spawn/Destroy()
@@ -458,9 +458,9 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
/obj/effect/landmark/ruin
var/datum/map_template/ruin/ruin_template
/obj/effect/landmark/ruin/New(loc, my_ruin_template)
/obj/effect/landmark/ruin/Initialize(mapload, my_ruin_template)
. = ..()
name = "ruin_[GLOB.ruin_landmarks.len + 1]"
..(loc)
ruin_template = my_ruin_template
GLOB.ruin_landmarks |= src
@@ -475,8 +475,8 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
layer = BULLET_HOLE_LAYER
plane = ABOVE_WALL_PLANE
/obj/effect/landmark/stationroom/New()
..()
/obj/effect/landmark/stationroom/Initialize(mapload)
. = ..()
GLOB.stationroom_landmarks += src
/obj/effect/landmark/stationroom/Destroy()
@@ -514,7 +514,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
templates = list("Engine SM" = 3, "Engine Singulo" = 3, "Engine Tesla" = 3)
icon = 'icons/rooms/box/engine.dmi'
/obj/effect/landmark/stationroom/box/engine/New()
/obj/effect/landmark/stationroom/box/engine/Initialize(mapload)
. = ..()
templates = CONFIG_GET(keyed_list/box_random_engine)
-3
View File
@@ -160,9 +160,6 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
var/list/grind_results //A reagent list containing the reagents this item produces when ground up in a grinder - this can be an empty list to allow for reagent transferring only
var/list/juice_results //A reagent list containing blah blah... but when JUICED in a grinder!
//the outline filter on hover
var/outline_filter
/* Our block parry data. Should be set in init, or something if you are using it.
* This won't be accessed without ITEM_CAN_BLOCK or ITEM_CAN_PARRY so do not set it unless you have to to save memory.
* If you decide it's a good idea to leave this unset while turning the flags on, you will runtime. Enjoy.
@@ -399,8 +399,8 @@
var/emp_cur_charges = 4
var/charge_tick = 0
/obj/item/flashlight/emp/New()
..()
/obj/item/flashlight/emp/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj, src)
/obj/item/flashlight/emp/Destroy()
@@ -81,6 +81,12 @@ GLOBAL_LIST_INIT(channel_tokens, list(
return ..(freq, level)
return FALSE
/obj/item/radio/headset/MouseDrop(mob/over, src_location, over_location)
var/mob/headset_user = usr
if((headset_user == over) && headset_user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return attack_self(headset_user)
return ..()
/obj/item/radio/headset/syndicate //disguised to look like a normal headset for stealth ops
/obj/item/radio/headset/syndicate/alt //undisguised bowman with flash protection
+2 -2
View File
@@ -37,8 +37,8 @@
var/forgedseal = 0
var/copy_type = null
/obj/item/documents/photocopy/New(loc, obj/item/documents/copy=null)
..()
/obj/item/documents/photocopy/Initialize(mapload, obj/item/documents/copy=null)
. = ..()
if(copy)
copy_type = copy.type
if(istype(copy, /obj/item/documents/photocopy)) // Copy Of A Copy Of A Copy
-1
View File
@@ -522,7 +522,6 @@
S.ckey = C.ckey
S.status_flags |= GODMODE
S.copy_languages(user, LANGUAGE_MASTER) //Make sure the sword can understand and communicate with the user.
S.update_atom_languages()
grant_all_languages(FALSE, FALSE, TRUE) //Grants omnitongue
S.AddElement(/datum/element/ghost_role_eligibility,penalize_on_ghost = TRUE)
START_PROCESSING(SSprocessing,src)
+7 -2
View File
@@ -149,7 +149,9 @@
/obj/item/storage/belt/medical/ComponentInitialize()
. = ..()
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.max_w_class = WEIGHT_CLASS_BULKY
// GS13 Edit
//STR.max_w_class = WEIGHT_CLASS_BULKY
// GS13 End Edit
STR.max_items = 11
STR.max_w_class = WEIGHT_CLASS_NORMAL
STR.max_combined_w_class = 24
@@ -202,7 +204,10 @@
/obj/item/implanter,
/obj/item/pinpointer/crew,
/obj/item/reagent_containers/chem_pack,
/obj/item/stack/sticky_tape //surgical tape
// GS13 Edit
/obj/item/stack/sticky_tape, //surgical tape
/obj/item/fermichem/pHmeter // chemical analyzer
// GS13 End Edit
))
/obj/item/storage/belt/medical/surgery_belt_adv
-2
View File
@@ -34,7 +34,6 @@
if(H.internal == src)
to_chat(H, "<span class='notice'>You close [src] valve.</span>")
H.internal = null
H.update_internals_hud_icon(0)
else
if(!H.getorganslot(ORGAN_SLOT_BREATHING_TUBE))
if(HAS_TRAIT(H, TRAIT_NO_INTERNALS))
@@ -60,7 +59,6 @@
else
to_chat(H, "<span class='notice'>You open [src] valve.</span>")
H.internal = src
H.update_internals_hud_icon(1)
H.update_action_buttons_icon()
+2 -2
View File
@@ -17,8 +17,8 @@
var/fuel_added = 0
var/flame_expiry_timer
/obj/structure/fireplace/New()
..()
/obj/structure/fireplace/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj, src)
/obj/structure/fireplace/Destroy()
@@ -32,7 +32,7 @@
new_spawn.undershirt = "Nude" //changing underwear/shirt/socks doesn't seem to function correctly right now because of some bug elsewhere?
new_spawn.socks = "Nude"
new_spawn.update_body(TRUE)
new_spawn.language_holder.selected_language = /datum/language/sylvan
new_spawn.set_active_language(/datum/language/sylvan)
//Ash walker eggs: Spawns in ash walker dens in lavaland. Ghosts become unbreathing lizards that worship the Necropolis and are advised to retrieve corpses to create more ash walkers.
@@ -878,7 +878,6 @@
/datum/outfit/ghostcafe/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
H.internal = H.get_item_for_held_index(1)
H.update_internals_hud_icon(1)
/obj/item/storage/box/syndie_kit/chameleon/ghostcafe
name = "ghost cafe costuming kit"
@@ -154,12 +154,9 @@ GLOBAL_LIST_EMPTY(lifts)
var/list/atom/movable/lift_load //things to move
var/datum/lift_master/lift_master_datum //control from
/obj/structure/industrial_lift/New()
GLOB.lifts.Add(src)
..()
/obj/structure/industrial_lift/Initialize(mapload)
. = ..()
GLOB.lifts.Add(src)
RegisterSignal(src, COMSIG_MOVABLE_CROSSED, PROC_REF(AddItemOnLift))
RegisterSignal(loc, COMSIG_ATOM_CREATED, PROC_REF(AddItemOnLift))//For atoms created on platform
RegisterSignal(src, COMSIG_MOVABLE_UNCROSSED, PROC_REF(RemoveItemFromLift))
+6 -6
View File
@@ -119,23 +119,23 @@
var/list/races_blacklist = list("skeleton", "agent", "military_synth", "memezombies", "clockwork golem servant", "android", "synth", "mush", "zombie", "memezombie")
var/list/choosable_races = list()
/obj/structure/mirror/magic/New()
/obj/structure/mirror/magic/Initialize(mapload)
. = ..()
if(!choosable_races.len)
for(var/speciestype in subtypesof(/datum/species))
var/datum/species/S = new speciestype()
if(!(S.id in races_blacklist))
choosable_races += S.id
..()
/obj/structure/mirror/magic/lesser/New()
/obj/structure/mirror/magic/lesser/Initialize(mapload)
choosable_races = GLOB.roundstart_races.Copy()
..()
return ..()
/obj/structure/mirror/magic/badmin/New()
/obj/structure/mirror/magic/badmin/Initialize(mapload)
for(var/speciestype in subtypesof(/datum/species))
var/datum/species/S = new speciestype()
choosable_races += S.id
..()
return ..()
/obj/structure/mirror/magic/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
if(!ishuman(user))
@@ -15,8 +15,8 @@
var/enter_delay = 0
var/const/time_to_unwrench = 2 SECONDS
/obj/structure/transit_tube/New(loc, newdirection)
..(loc)
/obj/structure/transit_tube/Initialize(mapload, newdirection)
. = ..()
if(newdirection)
setDir(newdirection)
init_tube_dirs()
+4
View File
@@ -232,6 +232,10 @@ distance_multiplier - Can be used to multiply the distance at which the sound is
/proc/get_rand_frequency()
return rand(32000, 55000) //Frequency stuff only works with 45kbps oggs.
///get_rand_frequency but lower range.
/proc/get_rand_frequency_low_range()
return rand(38000, 45000)
/proc/get_sfx(soundin)
if(istext(soundin))
switch(soundin)
@@ -13,9 +13,6 @@
desc = "Flooring that shows its contents underneath. Engineers love it!"
baseturfs = /turf/open/floor/plating
footstep = FOOTSTEP_CATWALK
barefootstep = FOOTSTEP_CATWALK
clawfootstep = FOOTSTEP_CATWALK
heavyfootstep = FOOTSTEP_CATWALK
intact = FALSE
var/covered = TRUE
+1 -1
View File
@@ -1007,7 +1007,7 @@
log_admin("[key_name(usr)] stuffed [frommob.key] into [tomob.name].")
SSblackbox.record_feedback("tally", "admin_verb", 1, "Ghost Drag Control")
tomob.ckey = frommob.ckey
tomob.key = frommob.key
qdel(frommob)
return TRUE
+1 -2
View File
@@ -2081,8 +2081,7 @@
if(!ismob(M))
to_chat(usr, "This can only be used on instances of type /mob.")
return
var/datum/language_holder/H = M.get_language_holder()
H.open_language_menu(usr)
M.get_language_holder().open_language_menu(usr)
else if(href_list["traitor"])
if(!check_rights(R_ADMIN))
+2 -2
View File
@@ -135,9 +135,9 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
/obj/effect/statclick/ticket_list
var/current_state
/obj/effect/statclick/ticket_list/New(loc, name, state)
/obj/effect/statclick/ticket_list/Initialize(mapload, name, state)
. = ..()
current_state = state
..()
/obj/effect/statclick/ticket_list/Click()
GLOB.ahelp_tickets.BrowseTickets(current_state)
@@ -63,6 +63,13 @@ GLOBAL_DATUM_INIT(pluto, /atom/movable, new /atom/movable(null))
return FALSE
if(var_name == NAMEOF(src, realized_underlays))
return FALSE
#if (MIN_COMPILER_VERSION >= 515 && MIN_COMPILER_BUILD >= 1643)
#warn X/Y/Z and contents are now fully unviewable on our supported versions, remove the below check
#endif
// lummy removed these from the the MA/image type
#if (DM_VERSION <= 515 && DM_BUILD < 1643)
// Filtering out the stuff I know we don't care about
if(var_name == NAMEOF(src, x))
return FALSE
@@ -70,13 +77,14 @@ GLOBAL_DATUM_INIT(pluto, /atom/movable, new /atom/movable(null))
return FALSE
if(var_name == NAMEOF(src, z))
return FALSE
// Could make an argument for these but I think they will just confuse people, so yeeet
#ifndef SPACEMAN_DMM // Spaceman doesn't believe in contents on appearances, sorry lads
#ifndef SPACEMAN_DMM // Spaceman doesn't believe in contents on appearances, sorry lads
if(var_name == NAMEOF(src, contents))
return FALSE
#endif
#endif
if(var_name == NAMEOF(src, loc))
return FALSE
#endif
// Could make an argument for this but I think they will just confuse people, so yeeet
if(var_name == NAMEOF(src, vis_contents))
return FALSE
return ..()
@@ -10,12 +10,12 @@
/obj/item/organ/heart/gland/slime/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
..()
owner.faction |= "slime"
owner.grant_language(/datum/language/slime, TRUE, TRUE, LANGUAGE_GLAND)
owner.grant_language(/datum/language/slime, source = LANGUAGE_GLAND)
/obj/item/organ/heart/gland/slime/Remove(mob/living/carbon/M, special = 0)
..()
owner.faction -= "slime"
owner.remove_language(/datum/language/slime, TRUE, TRUE, LANGUAGE_GLAND)
owner.remove_language(/datum/language/slime, source = LANGUAGE_GLAND)
/obj/item/organ/heart/gland/slime/activate()
to_chat(owner, "<span class='warning'>You feel nauseated!</span>")
@@ -210,7 +210,7 @@
// Physiology
CheckVampOrgans() // Heart, Eyes
// Language
owner.current.grant_language(/datum/language/vampiric, TRUE, TRUE, LANGUAGE_BLOODSUCKER)
owner.current.grant_language(/datum/language/vampiric, source = LANGUAGE_BLOODSUCKER)
owner.hasSoul = FALSE // If false, renders the character unable to sell their soul.
owner.isholy = FALSE // is this person a chaplain or admin role allowed to use bibles
// Disabilities
@@ -48,7 +48,7 @@
objectives += vassal_objective
objectives_given += vassal_objective
give_thrall_eyes()
owner.current.grant_language(/datum/language/vampiric, TRUE, TRUE, LANGUAGE_VASSAL)
owner.current.grant_language(/datum/language/vampiric, source = LANGUAGE_VASSAL)
// Add Antag HUD
update_vassal_icons_added(owner.current, "vassal")
. = ..()
@@ -84,7 +84,7 @@
create_initial_profile()
if(give_objectives)
forge_objectives()
owner.current.grant_all_languages(FALSE, FALSE, TRUE) //Grants omnitongue. We are able to transform our body after all.
owner.current.get_language_holder().omnitongue = TRUE
remove_clownmut()
. = ..()
@@ -96,7 +96,7 @@
current = mob_override
GLOB.all_clockwork_mobs += current
current.faction |= "ratvar"
current.grant_language(/datum/language/ratvar, TRUE, TRUE, LANGUAGE_CLOCKIE)
current.grant_language(/datum/language/ratvar, source = LANGUAGE_CLOCKIE)
current.update_action_buttons_icon() //because a few clockcult things are action buttons and we may be wearing/holding them for whatever reason, we need to update buttons
if(issilicon(current))
var/mob/living/silicon/S = current
+2 -2
View File
@@ -121,7 +121,7 @@
if(mob_override)
current = mob_override
current.faction |= "cult"
current.grant_language(/datum/language/narsie, TRUE, TRUE, LANGUAGE_CULTIST)
current.grant_language(/datum/language/narsie, source = LANGUAGE_CULTIST)
if(!cult_team?.cult_master)
vote.Grant(current)
communion.Grant(current)
@@ -139,7 +139,7 @@
if(mob_override)
current = mob_override
current.faction -= "cult"
current.remove_language(/datum/language/narsie, TRUE, TRUE, LANGUAGE_CULTIST)
current.remove_language(/datum/language/narsie, source = LANGUAGE_CULTIST)
vote.Remove(current)
communion.Remove(current)
magic.Remove(current)
+1 -2
View File
@@ -182,9 +182,8 @@
add_antag_hud(antag_hud_type, antag_hud_name, M)
if(M.hud_used)
var/datum/hud/H = M.hud_used
var/atom/movable/screen/wanted/giving_wanted_lvl = new /atom/movable/screen/wanted()
var/atom/movable/screen/wanted/giving_wanted_lvl = new /atom/movable/screen/wanted(null, H)
H.wanted_lvl = giving_wanted_lvl
giving_wanted_lvl.hud = H
H.infodisplay += giving_wanted_lvl
H.mymob.client.screen += giving_wanted_lvl
+1 -2
View File
@@ -113,9 +113,8 @@
add_antag_hud(antag_hud_type, antag_hud_name, M)
if(M.hud_used)
var/datum/hud/H = M.hud_used
var/atom/movable/screen/wanted/giving_wanted_lvl = new /atom/movable/screen/wanted()
var/atom/movable/screen/wanted/giving_wanted_lvl = new /atom/movable/screen/wanted(null, H)
H.wanted_lvl = giving_wanted_lvl
giving_wanted_lvl.hud = H
H.infodisplay += giving_wanted_lvl
H.mymob.client.screen += giving_wanted_lvl
@@ -65,5 +65,5 @@
/datum/traitor_class/ai/finalize_traitor(datum/antagonist/traitor/T)
T.add_law_zero()
T.owner.current.playsound_local(get_turf(T.owner.current), 'sound/ambience/antag/malf.ogg', 100, FALSE, pressure_affected = FALSE)
T.owner.current.grant_language(/datum/language/codespeak, TRUE, TRUE, LANGUAGE_MALF)
T.owner.current.grant_language(/datum/language/codespeak, source = LANGUAGE_MALF)
return FALSE
@@ -41,13 +41,13 @@
var/spawn_amt_left = 20
var/spawn_fast = 0
/obj/effect/rend/New(loc, var/spawn_type, var/spawn_amt, var/desc, var/spawn_fast)
/obj/effect/rend/Initialize(mapload, spawn_type, spawn_amt, desc, spawn_fast)
. = ..()
src.spawn_path = spawn_type
src.spawn_amt_left = spawn_amt
src.desc = desc
src.spawn_fast = spawn_fast
START_PROCESSING(SSobj, src)
return
/obj/effect/rend/process()
if(!spawn_fast)
@@ -287,9 +287,7 @@
S.real_name = "Shade of [T.real_name]"
T.transfer_ckey(S)
S.original_mind = T.mind
S.copy_languages(T, LANGUAGE_MIND)//Copies the old mobs languages into the new mob holder.
S.update_atom_languages()
grant_all_languages(FALSE, FALSE, TRUE) //Grants omnitongue
S.get_language_holder().omnitongue = TRUE //Grants omnitongue
if(user)
S.faction |= "[REF(user)]" //Add the master as a faction, allowing inter-mob cooperation
if(user && iscultist(user))

Some files were not shown because too many files have changed in this diff Show More