Merge branch 'master' into cumcom
@@ -226,3 +226,5 @@
|
||||
#define FORCE_BOOLEAN(x) ((x)? TRUE : FALSE)
|
||||
|
||||
#define TILES_TO_PIXELS(tiles) (tiles * PIXELS)
|
||||
|
||||
#define CLAMP(CLVALUE,CLMIN,CLMAX) clamp(CLVALUE, CLMIN, CLMAX)
|
||||
@@ -27,22 +27,23 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s
|
||||
|
||||
//Human Overlays Indexes/////////
|
||||
//LOTS OF CIT CHANGES HERE. BE CAREFUL WHEN UPSTREAM ADDS MORE LAYERS
|
||||
#define MUTATIONS_LAYER 31 //mutations. Tk headglows, cold resistance glow, etc
|
||||
#define GENITALS_BEHIND_LAYER 30 //Some genitalia needs to be behind everything, such as with taurs (Taurs use body_behind_layer
|
||||
#define BODY_BEHIND_LAYER 29 //certain mutantrace features (tail when looking south) that must appear behind the body parts
|
||||
#define BODYPARTS_LAYER 28 //Initially "AUGMENTS", this was repurposed to be a catch-all bodyparts flag
|
||||
#define MARKING_LAYER 27 //Matrixed body markings because clashing with snouts?
|
||||
#define BODY_ADJ_LAYER 26 //certain mutantrace features (snout, body markings) that must appear above the body parts
|
||||
#define BODY_LAYER 25 //underwear, undershirts, socks, eyes, lips(makeup)
|
||||
#define FRONT_MUTATIONS_LAYER 24 //mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes)
|
||||
#define DAMAGE_LAYER 23 //damage indicators (cuts and burns)
|
||||
#define UNIFORM_LAYER 22
|
||||
#define ID_LAYER 21
|
||||
#define HANDS_PART_LAYER 20
|
||||
#define SHOES_LAYER 19
|
||||
#define GLOVES_LAYER 18
|
||||
#define EARS_LAYER 17
|
||||
#define BODY_TAUR_LAYER 16
|
||||
#define MUTATIONS_LAYER 32 //mutations. Tk headglows, cold resistance glow, etc
|
||||
#define GENITALS_BEHIND_LAYER 31 //Some genitalia needs to be behind everything, such as with taurs (Taurs use body_behind_layer
|
||||
#define BODY_BEHIND_LAYER 30 //certain mutantrace features (tail when looking south) that must appear behind the body parts
|
||||
#define BODYPARTS_LAYER 29 //Initially "AUGMENTS", this was repurposed to be a catch-all bodyparts flag
|
||||
#define MARKING_LAYER 28 //Matrixed body markings because clashing with snouts?
|
||||
#define BODY_ADJ_LAYER 27 //certain mutantrace features (snout, body markings) that must appear above the body parts
|
||||
#define BODY_LAYER 26 //underwear, undershirts, socks, eyes, lips(makeup)
|
||||
#define FRONT_MUTATIONS_LAYER 25 //mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes)
|
||||
#define DAMAGE_LAYER 24 //damage indicators (cuts and burns)
|
||||
#define UNIFORM_LAYER 23
|
||||
#define ID_LAYER 22
|
||||
#define HANDS_PART_LAYER 21
|
||||
#define SHOES_LAYER 20
|
||||
#define GLOVES_LAYER 19
|
||||
#define EARS_LAYER 18
|
||||
#define BODY_TAUR_LAYER 17
|
||||
#define GENITALS_UNDER_LAYER 16
|
||||
#define SUIT_LAYER 15
|
||||
#define GLASSES_LAYER 14
|
||||
#define BELT_LAYER 13 //Possible make this an overlay of somethign required to wear a belt?
|
||||
@@ -58,7 +59,7 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s
|
||||
#define HANDS_LAYER 3
|
||||
#define BODY_FRONT_LAYER 2
|
||||
#define FIRE_LAYER 1 //If you're on fire
|
||||
#define TOTAL_LAYERS 31 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_;
|
||||
#define TOTAL_LAYERS 32 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_;
|
||||
|
||||
//Human Overlay Index Shortcuts for alternate_worn_layer, layers
|
||||
//Because I *KNOW* somebody will think layer+1 means "above"
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#define DISABLE_DEATHRATTLE (1<<12)
|
||||
#define DISABLE_ARRIVALRATTLE (1<<13)
|
||||
#define COMBOHUD_LIGHTING (1<<14)
|
||||
#define ANTAG_SYNC_WITH_CHARS (1<<15)
|
||||
|
||||
#define TOGGLES_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|MEMBER_PUBLIC|INTENT_STYLE|MIDROUND_ANTAG|SOUND_INSTRUMENTS|SOUND_SHIP_AMBIENCE|SOUND_PRAYERS|SOUND_ANNOUNCEMENTS)
|
||||
|
||||
|
||||
@@ -230,7 +230,8 @@
|
||||
"womb_fluid" = "femcum",
|
||||
"ipc_screen" = snowflake_ipc_antenna_list ? pick(snowflake_ipc_antenna_list) : "None",
|
||||
"ipc_antenna" = "None",
|
||||
"flavor_text" = ""))
|
||||
"flavor_text" = "",
|
||||
"ooc_text" = ""))
|
||||
|
||||
/proc/random_hair_style(gender)
|
||||
switch(gender)
|
||||
@@ -549,6 +550,8 @@ GLOBAL_LIST_EMPTY(species_list)
|
||||
override = TRUE
|
||||
if(isnewplayer(M) && !override)
|
||||
continue
|
||||
if(SSticker.current_state == GAME_STATE_FINISHED)
|
||||
override = TRUE
|
||||
if(M.stat != DEAD && !override)
|
||||
continue
|
||||
if(speaker_key && speaker_key in prefs.ignoring)
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
announcement += "<br><h2 class='alert'>[html_encode(title)]</h2>"
|
||||
else if(type == "Captain")
|
||||
announcement += "<h1 class='alert'>Captain Announces</h1>"
|
||||
GLOB.news_network.SubmitArticle(text, "Captain's Announcement", "Station Announcements", null)
|
||||
GLOB.news_network.SubmitArticle(html_encode(text), "Captain's Announcement", "Station Announcements", null)
|
||||
|
||||
else
|
||||
if(!sender_override)
|
||||
|
||||
@@ -189,6 +189,9 @@
|
||||
|
||||
CHECK_TICK
|
||||
|
||||
set_observer_default_invisibility(0, "<span class='warning'>The round is over! You are now visible to the living.</span>")
|
||||
|
||||
CHECK_TICK
|
||||
// Stop eorg mech prepping.
|
||||
for(var/obj/mecha/combat/Obj in world)
|
||||
qdel(Obj)
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
using.screen_loc = ui_movi
|
||||
static_inventory += using
|
||||
|
||||
//CITADEL CHANGES - sprint button
|
||||
/* //CITADEL CHANGES - sprint button
|
||||
using = new /obj/screen/sprintbutton
|
||||
using.icon = tg_ui_icon_to_cit_ui(ui_style)
|
||||
using.icon_state = (owner.sprinting ? "act_sprint_on" : "act_sprint")
|
||||
@@ -139,7 +139,7 @@
|
||||
using.screen_loc = ui_sprintbufferloc
|
||||
sprint_buffer = using
|
||||
static_inventory += using
|
||||
|
||||
*/
|
||||
|
||||
using = new /obj/screen/drop()
|
||||
using.icon = ui_style
|
||||
@@ -323,12 +323,12 @@
|
||||
arousal.icon_state = (owner.canbearoused == 1 ? "arousal0" : "")
|
||||
infodisplay += arousal
|
||||
|
||||
staminas = new /obj/screen/staminas()
|
||||
infodisplay += staminas
|
||||
// staminas = new /obj/screen/staminas()
|
||||
// infodisplay += staminas
|
||||
|
||||
if(!CONFIG_GET(flag/disable_stambuffer))
|
||||
staminabuffer = new /obj/screen/staminabuffer()
|
||||
infodisplay += staminabuffer
|
||||
// if(!CONFIG_GET(flag/disable_stambuffer))
|
||||
// staminabuffer = new /obj/screen/staminabuffer()
|
||||
// infodisplay += staminabuffer
|
||||
//END OF CIT CHANGES
|
||||
|
||||
healthdoll = new /obj/screen/healthdoll()
|
||||
|
||||
@@ -390,6 +390,7 @@ SUBSYSTEM_DEF(job)
|
||||
var/datum/job/job = GetJob(rank)
|
||||
|
||||
H.job = rank
|
||||
equip_loadout(N, H)
|
||||
|
||||
//If we joined at roundstart we should be positioned at our workstation
|
||||
if(!joined_late)
|
||||
@@ -416,8 +417,6 @@ SUBSYSTEM_DEF(job)
|
||||
H.mind.assigned_role = rank
|
||||
|
||||
if(job)
|
||||
if(!job.dresscodecompliant)// CIT CHANGE - dress code compliance
|
||||
equip_loadout(N, H) // CIT CHANGE - allows players to spawn with loadout items
|
||||
var/new_mob = job.equip(H, null, null, joined_late)
|
||||
if(ismob(new_mob))
|
||||
H = new_mob
|
||||
@@ -449,8 +448,6 @@ SUBSYSTEM_DEF(job)
|
||||
H.add_memory("Your account ID is [wageslave.account_id].")
|
||||
|
||||
if(job && H)
|
||||
if(job.dresscodecompliant)// CIT CHANGE - dress code compliance
|
||||
equip_loadout(N, H) // CIT CHANGE - allows players to spawn with loadout items
|
||||
job.after_spawn(H, M, joined_late) // note: this happens before the mob has a key! M will always have a client, H might not.
|
||||
equip_loadout(N, H, TRUE)//CIT CHANGE - makes players spawn with in-backpack loadout items properly. A little hacky but it works
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
e -= 5
|
||||
steps++
|
||||
|
||||
if(steps >= 3)
|
||||
if(steps >= 2)
|
||||
steps = 0
|
||||
|
||||
else
|
||||
|
||||
@@ -184,15 +184,15 @@
|
||||
switch(sanity)
|
||||
if(SANITY_INSANE to SANITY_CRAZY)
|
||||
setInsanityEffect(MAJOR_INSANITY_PEN)
|
||||
master.add_movespeed_modifier(MOVESPEED_ID_SANITY, TRUE, 100, override=TRUE, multiplicative_slowdown=1.5) //Did we change something ? movetypes is runtiming, movetypes=(~FLYING))
|
||||
master.add_movespeed_modifier(MOVESPEED_ID_SANITY, TRUE, 100, override=TRUE, multiplicative_slowdown=1) //Did we change something ? movetypes is runtiming, movetypes=(~FLYING))
|
||||
sanity_level = 6
|
||||
if(SANITY_CRAZY to SANITY_UNSTABLE)
|
||||
setInsanityEffect(MINOR_INSANITY_PEN)
|
||||
master.add_movespeed_modifier(MOVESPEED_ID_SANITY, TRUE, 100, override=TRUE, multiplicative_slowdown=1)//, movetypes=(~FLYING))
|
||||
master.add_movespeed_modifier(MOVESPEED_ID_SANITY, TRUE, 100, override=TRUE, multiplicative_slowdown=0.5)//, movetypes=(~FLYING))
|
||||
sanity_level = 5
|
||||
if(SANITY_UNSTABLE to SANITY_DISTURBED)
|
||||
setInsanityEffect(0)
|
||||
master.add_movespeed_modifier(MOVESPEED_ID_SANITY, TRUE, 100, override=TRUE, multiplicative_slowdown=0.5)//, movetypes=(~FLYING))
|
||||
master.add_movespeed_modifier(MOVESPEED_ID_SANITY, TRUE, 100, override=TRUE, multiplicative_slowdown=0.25)//, movetypes=(~FLYING))
|
||||
sanity_level = 4
|
||||
if(SANITY_DISTURBED to SANITY_NEUTRAL)
|
||||
setInsanityEffect(0)
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
RegisterSignal(parent, COMSIG_MOVABLE_UPDATE_GLIDE_SIZE, .proc/orbiter_glide_size_update)
|
||||
|
||||
|
||||
/datum/component/orbiter/UnregisterFromParent()
|
||||
var/atom/target = parent
|
||||
while(ismovableatom(target))
|
||||
@@ -70,6 +71,7 @@
|
||||
orbiter.orbiting = src
|
||||
RegisterSignal(orbiter, COMSIG_MOVABLE_MOVED, orbiter_spy)
|
||||
var/matrix/initial_transform = matrix(orbiter.transform)
|
||||
orbiters[orbiter] = initial_transform
|
||||
|
||||
// Head first!
|
||||
if(pre_rotation)
|
||||
@@ -92,8 +94,6 @@
|
||||
var/atom/movable/AM = parent
|
||||
orbiter.glide_size = AM.glide_size
|
||||
|
||||
//we stack the orbits up client side, so we can assign this back to normal server side without it breaking the orbit
|
||||
orbiter.transform = initial_transform
|
||||
orbiter.forceMove(get_turf(parent))
|
||||
to_chat(orbiter, "<span class='notice'>Now orbiting [parent].</span>")
|
||||
|
||||
@@ -103,6 +103,8 @@
|
||||
SEND_SIGNAL(parent, COMSIG_ATOM_ORBIT_END, orbiter, refreshing)
|
||||
UnregisterSignal(orbiter, COMSIG_MOVABLE_MOVED)
|
||||
orbiter.SpinAnimation(0, 0)
|
||||
if(istype(orbiters[orbiter],/matrix)) //This is ugly.
|
||||
orbiter.transform = orbiters[orbiter]
|
||||
orbiters -= orbiter
|
||||
orbiter.stop_orbit(src)
|
||||
orbiter.orbiting = null
|
||||
|
||||
@@ -55,6 +55,7 @@
|
||||
var/mob/living/carbon/human/H = destination
|
||||
H.give_genitals(TRUE)//This gives the body the genitals of this DNA. Used for any transformations based on DNA
|
||||
destination.flavor_text = destination.dna.features["flavor_text"] //Update the flavor_text to use new dna text
|
||||
destination.ooc_text = destination.dna.features["ooc_text"] //Update the flavor_text to use new dna text
|
||||
if(transfer_SE)
|
||||
destination.dna.mutation_index = mutation_index
|
||||
|
||||
@@ -356,6 +357,7 @@
|
||||
if(newfeatures)
|
||||
dna.features = newfeatures
|
||||
flavor_text = dna.features["flavor_text"] //Update the flavor_text to use new dna text
|
||||
ooc_text = dna.features["ooc_text"] //Update the flavor_text to use new dna text
|
||||
|
||||
if(mrace)
|
||||
var/datum/species/newrace = new mrace.type
|
||||
|
||||
@@ -40,31 +40,44 @@
|
||||
|
||||
//Start with uniform,suit,backpack for additional slots
|
||||
if(uniform)
|
||||
H.equip_to_slot_or_del(new uniform(H),SLOT_W_UNIFORM)
|
||||
H.equip_to_slot_or_store_and_del(new uniform(H),SLOT_W_UNIFORM)
|
||||
if(suit)
|
||||
H.equip_to_slot_or_del(new suit(H),SLOT_WEAR_SUIT)
|
||||
H.equip_to_slot_or_store_and_del(new suit(H),SLOT_WEAR_SUIT)
|
||||
if(back)
|
||||
H.equip_to_slot_or_del(new back(H),SLOT_BACK)
|
||||
|
||||
if(!visualsOnly) // Items in pockets or backpack don't show up on mob's icon.
|
||||
if(l_pocket)
|
||||
H.equip_to_slot_or_store_and_del(new l_pocket(H),SLOT_L_STORE)
|
||||
if(r_pocket)
|
||||
H.equip_to_slot_or_store_and_del(new r_pocket(H),SLOT_R_STORE)
|
||||
if(backpack_contents)
|
||||
for(var/path in backpack_contents)
|
||||
var/number = backpack_contents[path]
|
||||
if(!isnum(number))//Default to 1
|
||||
number = 1
|
||||
for(var/i in 1 to number)
|
||||
H.equip_to_slot_or_del(new path(H),SLOT_IN_BACKPACK)
|
||||
if(belt)
|
||||
H.equip_to_slot_or_del(new belt(H),SLOT_BELT)
|
||||
H.equip_to_slot_or_store_and_del(new belt(H),SLOT_BELT)
|
||||
if(gloves)
|
||||
H.equip_to_slot_or_del(new gloves(H),SLOT_GLOVES)
|
||||
H.equip_to_slot_or_store_and_del(new gloves(H),SLOT_GLOVES)
|
||||
if(shoes)
|
||||
H.equip_to_slot_or_del(new shoes(H),SLOT_SHOES)
|
||||
H.equip_to_slot_or_store_and_del(new shoes(H),SLOT_SHOES)
|
||||
if(head)
|
||||
H.equip_to_slot_or_del(new head(H),SLOT_HEAD)
|
||||
H.equip_to_slot_or_store_and_del(new head(H),SLOT_HEAD)
|
||||
if(mask)
|
||||
H.equip_to_slot_or_del(new mask(H),SLOT_WEAR_MASK)
|
||||
H.equip_to_slot_or_store_and_del(new mask(H),SLOT_WEAR_MASK)
|
||||
if(neck)
|
||||
H.equip_to_slot_or_del(new neck(H),SLOT_NECK)
|
||||
H.equip_to_slot_or_store_and_del(new neck(H),SLOT_NECK)
|
||||
if(ears)
|
||||
H.equip_to_slot_or_del(new ears(H),SLOT_EARS)
|
||||
H.equip_to_slot_or_store_and_del(new ears(H),SLOT_EARS)
|
||||
if(glasses)
|
||||
H.equip_to_slot_or_del(new glasses(H),SLOT_GLASSES)
|
||||
H.equip_to_slot_or_store_and_del(new glasses(H),SLOT_GLASSES)
|
||||
if(id)
|
||||
H.equip_to_slot_or_del(new id(H),SLOT_WEAR_ID)
|
||||
H.equip_to_slot_or_store_and_del(new id(H),SLOT_WEAR_ID)
|
||||
if(suit_store)
|
||||
H.equip_to_slot_or_del(new suit_store(H),SLOT_S_STORE)
|
||||
H.equip_to_slot_or_store_and_del(new suit_store(H),SLOT_S_STORE)
|
||||
|
||||
if(accessory)
|
||||
var/obj/item/clothing/under/U = H.w_uniform
|
||||
@@ -78,19 +91,6 @@
|
||||
if(r_hand)
|
||||
H.put_in_r_hand(new r_hand(H))
|
||||
|
||||
if(!visualsOnly) // Items in pockets or backpack don't show up on mob's icon.
|
||||
if(l_pocket)
|
||||
H.equip_to_slot_or_del(new l_pocket(H),SLOT_L_STORE)
|
||||
if(r_pocket)
|
||||
H.equip_to_slot_or_del(new r_pocket(H),SLOT_R_STORE)
|
||||
if(backpack_contents)
|
||||
for(var/path in backpack_contents)
|
||||
var/number = backpack_contents[path]
|
||||
if(!isnum(number))//Default to 1
|
||||
number = 1
|
||||
for(var/i in 1 to number)
|
||||
H.equip_to_slot_or_del(new path(H),SLOT_IN_BACKPACK)
|
||||
|
||||
if(!H.head && toggle_helmet && istype(H.wear_suit, /obj/item/clothing/suit/space/hardsuit))
|
||||
var/obj/item/clothing/suit/space/hardsuit/HS = H.wear_suit
|
||||
HS.ToggleHelmet()
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
this["name"] = spawner
|
||||
this["short_desc"] = ""
|
||||
this["flavor_text"] = ""
|
||||
this["ooc_text"] = ""
|
||||
this["important_warning"] = ""
|
||||
this["refs"] = list()
|
||||
for(var/spawner_obj in GLOB.mob_spawners[spawner])
|
||||
|
||||
@@ -315,6 +315,9 @@
|
||||
/atom/proc/examine(mob/user)
|
||||
. = list("[get_examine_string(user, TRUE)].")
|
||||
|
||||
if(!isliving(src))
|
||||
user.visible_message("<span class='notice'>[user] examines [src].</span>",\
|
||||
"<span class='notice'>You examine [src].</span>")
|
||||
if(desc)
|
||||
. += desc
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
var/moving_diagonally = 0 //0: not doing a diagonal move. 1 and 2: doing the first/second step of the diagonal move
|
||||
var/list/client_mobs_in_contents // This contains all the client mobs within this container
|
||||
var/list/acted_explosions //for explosion dodging
|
||||
glide_size = 8
|
||||
glide_size = 4
|
||||
appearance_flags = TILE_BOUND|PIXEL_SCALE|LONG_GLIDE
|
||||
var/datum/forced_movement/force_moving = null //handled soley by forced_movement.dm
|
||||
var/floating = FALSE
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
var/obj/item/assembly/signaler/anomaly/aSignal
|
||||
var/area/impact_area
|
||||
|
||||
var/lifespan = 1190
|
||||
var/lifespan = 1690
|
||||
var/death_time
|
||||
|
||||
var/countdown_colour
|
||||
|
||||
@@ -240,7 +240,7 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
|
||||
|
||||
prefs.last_ip = address //these are gonna be used for banning
|
||||
prefs.last_id = computer_id //these are gonna be used for banning
|
||||
fps = 40
|
||||
fps = prefs.clientfps
|
||||
|
||||
if(fexists(roundend_report_file()))
|
||||
add_verb(src, /client/proc/show_previous_roundend_report)
|
||||
|
||||
@@ -69,6 +69,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/pda_skin = PDA_SKIN_ALT
|
||||
|
||||
var/list/alt_titles_preferences = list()
|
||||
var/static/preview_job_outfit = TRUE //shouldn't be something that's saved, but this is a preference option
|
||||
|
||||
var/uses_glasses_colour = 0
|
||||
|
||||
@@ -179,7 +180,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
"womb_fluid" = /datum/reagent/consumable/femcum,
|
||||
"ipc_screen" = "Sunburst",
|
||||
"ipc_antenna" = "None",
|
||||
"flavor_text" = ""
|
||||
"flavor_text" = "",
|
||||
"ooc_text" = ""
|
||||
)
|
||||
|
||||
/// Security record note section
|
||||
@@ -382,7 +384,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if(2)
|
||||
update_preview_icon()
|
||||
dat += "<table><tr><td width='340px' height='300px' valign='top'>"
|
||||
dat += "<h2>Flavor Text</h2>"
|
||||
dat += "<h2>General Examine Text</h2>"
|
||||
dat += "<a href='?_src_=prefs;preference=flavor_text;task=input'><b>Set Examine Text</b></a><br>"
|
||||
if(length(features["flavor_text"]) <= 40)
|
||||
if(!length(features["flavor_text"]))
|
||||
@@ -391,6 +393,16 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "[features["flavor_text"]]"
|
||||
else
|
||||
dat += "[TextPreview(features["flavor_text"])]...<BR>"
|
||||
dat += "<h2>OOC Text</h2>"
|
||||
dat += "<a href='?_src_=prefs;preference=ooc_text;task=input'><b>Set OOC Text</b></a><br>"
|
||||
if(length(features["ooc_text"]) <= 40)
|
||||
if(!length(features["ooc_text"]))
|
||||
dat += "\[...\]"
|
||||
else
|
||||
dat += "[features["ooc_text"]]"
|
||||
else
|
||||
dat += "[TextPreview(features["ooc_text"])]...<BR>"
|
||||
|
||||
dat += "<h2>Body</h2>"
|
||||
dat += "<b>Gender:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=gender'>[gender == MALE ? "Male" : (gender == FEMALE ? "Female" : (gender == PLURAL ? "Non-binary" : "Object"))]</a><BR>"
|
||||
dat += "<b>Species:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=species;task=input'>[pref_species.id]</a><BR>"
|
||||
@@ -1049,8 +1061,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if(!gear_tab)
|
||||
gear_tab = GLOB.loadout_items[1]
|
||||
dat += "<table align='center' width='100%'>"
|
||||
dat += "<tr><td colspan=4><center><b><font color='[gear_points == 0 ? "#E62100" : "#CCDDFF"]'>[gear_points]</font> loadout points remaining.</b> \[<a href='?_src_=prefs;preference=gear;clear_loadout=1'>Clear Loadout</a>\]</center></td></tr>"
|
||||
dat += "<tr><td colspan=4><center>You can only choose one item per category, unless it's an item that spawns in your backpack or hands.</center></td></tr>"
|
||||
dat += "<tr><td colspan=4><center><b><font color='[gear_points == 0 ? "#E62100" : "#CCDDFF"]'>[gear_points]</font> loadout points remaining.</b> \[<a href='?_src_=prefs;preference=gear;clear_loadout=1'>Clear Loadout</a>\] \[<a href='?_src_=prefs;preference=gear;toggle_outfit_visibility=1'>[preview_job_outfit ? "Enable" : "Disable"] Job Outfit Preview</a>\]</center></td></tr>"
|
||||
dat += "<tr><td colspan=4><center>You can only choose two items per category, unless it's an item that spawns in your backpack or hands.</center></td></tr>"
|
||||
dat += "<tr><td colspan=4><center><b>"
|
||||
var/firstcat = TRUE
|
||||
for(var/i in GLOB.loadout_items)
|
||||
@@ -1102,6 +1114,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "</table>"
|
||||
|
||||
if(4) //Antag Preferences
|
||||
dat += "<table><tr><td width='340px' height='300px' valign='top'>"
|
||||
dat += "<h1>Special Role Settings</h1>"
|
||||
if(jobban_isbanned(user, ROLE_SYNDICATE))
|
||||
dat += "<font color=red><h3><b>You are banned from antagonist roles.</b></h3></font>"
|
||||
@@ -1122,6 +1135,13 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
else
|
||||
dat += "<b>Be [capitalize(i)]:</b> <a href='?_src_=prefs;preference=be_special;be_special_type=[i]'>[(i in be_special) ? "Enabled" : "Disabled"]</a><br>"
|
||||
dat += "<b>Midround Antagonist:</b> <a href='?_src_=prefs;preference=allow_midround_antag'>[(toggles & MIDROUND_ANTAG) ? "Enabled" : "Disabled"]</a><br>"
|
||||
dat += "</td><td width='340px' height='300px' valign='top'>"
|
||||
dat += "<h1>Sync Settings</h1>"
|
||||
dat += "<b>Sync</b> antag prefs. with all characters: <a href='?_src_=prefs;preference=sync_antag_with_chars'>[(toggles & ANTAG_SYNC_WITH_CHARS) ? "Yes" : "No"]</a><br>"
|
||||
dat += "<b>Copy</b> and save antag prefs. to all characters: <a href='?_src_=prefs;preference=copy_antag_to_chars'>Copy</a><br>"
|
||||
dat += "<b>Reset</b> antag prefs. for this character: <a href='?_src_=prefs;preference=reset_antag'>Reset</a><br>"
|
||||
dat += "</td></tr></table>"
|
||||
|
||||
|
||||
dat += "<hr><center>"
|
||||
|
||||
@@ -1686,11 +1706,18 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
medical_records = rec
|
||||
|
||||
if("flavor_text")
|
||||
var/msg = stripped_multiline_input(usr, "Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!", "Flavor Text", html_decode(features["flavor_text"]), MAX_MESSAGE_LEN, TRUE)
|
||||
var/msg = stripped_multiline_input(usr, "Set the flavor text in your 'examine' verb. This should be IC, and description people can deduce at a quick glance.", "Flavor Text", html_decode(features["flavor_text"]), MAX_MESSAGE_LEN, TRUE)
|
||||
if(msg)
|
||||
msg = msg
|
||||
features["flavor_text"] = msg
|
||||
|
||||
if("ooc_text")
|
||||
var/msg = stripped_multiline_input(usr, "Set the OOC text in your 'examine' verb. This should be OOC only!", "OOC Text", html_decode(features["ooc_text"]), MAX_MESSAGE_LEN, TRUE)
|
||||
if(msg)
|
||||
msg = msg
|
||||
features["ooc_text"] = msg
|
||||
|
||||
|
||||
if("hide_ckey")
|
||||
hide_ckey = !hide_ckey
|
||||
if(user)
|
||||
@@ -2524,6 +2551,30 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if("allow_midround_antag")
|
||||
toggles ^= MIDROUND_ANTAG
|
||||
|
||||
if("sync_antag_with_chars")
|
||||
toggles ^= ANTAG_SYNC_WITH_CHARS
|
||||
if(!(toggles & ANTAG_SYNC_WITH_CHARS) && path)
|
||||
var/savefile/S = new /savefile(path)
|
||||
if(S)
|
||||
S["special_roles"] >> be_special
|
||||
|
||||
if("copy_antag_to_chars")
|
||||
if(path)
|
||||
var/savefile/S = new /savefile(path)
|
||||
if(S)
|
||||
var/initial_cd = S.cd
|
||||
for(var/i=1, i<=max_save_slots, i++)
|
||||
S.cd = "/character[i]"
|
||||
if(S["real_name"])
|
||||
WRITE_FILE(S["special_roles"], be_special)
|
||||
S.cd = initial_cd
|
||||
to_chat(parent, "<span class='notice'>Successfully copied antagonist preferences to all characters.</span>")
|
||||
else
|
||||
to_chat(parent, "<span class='notice'>Could not write to file.</span>")
|
||||
|
||||
if("reset_antag")
|
||||
be_special = list()
|
||||
|
||||
if("parallaxup")
|
||||
parallax = WRAP(parallax + 1, PARALLAX_INSANE, PARALLAX_DISABLE + 1)
|
||||
if (parent && parent.mob && parent.mob.hud_used)
|
||||
@@ -2610,6 +2661,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if(gear_points >= initial(G.cost))
|
||||
LAZYADD(chosen_gear, G.type)
|
||||
gear_points -= initial(G.cost)
|
||||
if(href_list["toggle_outfit_visibility"])
|
||||
preview_job_outfit = !preview_job_outfit
|
||||
|
||||
ShowChoices(user)
|
||||
return 1
|
||||
|
||||
@@ -366,7 +366,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["job_engsec_low"] >> job_engsec_low
|
||||
|
||||
//Antags
|
||||
S["special_roles"] >> be_special
|
||||
if(!(toggles & ANTAG_SYNC_WITH_CHARS))
|
||||
S["special_roles"] >> be_special
|
||||
|
||||
//Quirks
|
||||
S["all_quirks"] >> all_quirks
|
||||
@@ -427,7 +428,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
//flavor text
|
||||
//Let's make our players NOT cry desperately as we wipe their savefiles of their special snowflake texts:
|
||||
if((S["flavor_text"] != "") && (S["flavor_text"] != null) && S["flavor_text"]) //If old text isn't null and isn't "" but still exists.
|
||||
S["flavor_text"] >> features["flavor_text"] //Load old flavortext as current dna-based flavortext
|
||||
S["flavor_text"] >> features["flavor_text"] //Load old flavortext as current dna-based flavortext
|
||||
|
||||
WRITE_FILE(S["feature_flavor_text"], features["flavor_text"]) //Save it in our new type of flavor-text
|
||||
WRITE_FILE(S["flavor_text"] , "") //Remove old flavortext, completing the cut-and-paste into the new format.
|
||||
@@ -435,6 +436,14 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
else //We have no old flavortext, default to new
|
||||
S["feature_flavor_text"] >> features["flavor_text"]
|
||||
|
||||
if((S["ooc_text"] != "") && (S["ooc_text"] != null) && S["ooc_text"])
|
||||
S["ooc_text"] >> features["ooc_text"]
|
||||
|
||||
WRITE_FILE(S["feature_ooc_text"], features["ooc_text"]) //Save it in our new type of flavor-text
|
||||
WRITE_FILE(S["ooc_text"], "") //Remove old flavortext, completing the cut-and-paste into the new format.
|
||||
|
||||
else
|
||||
S["feature_ooc_text"] >> features["ooc_text"]
|
||||
|
||||
//try to fix any outdated data if necessary
|
||||
if(needs_update >= 0)
|
||||
@@ -606,7 +615,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
WRITE_FILE(S["medical_records"] , medical_records)
|
||||
|
||||
//Misc.
|
||||
WRITE_FILE(S["special_roles"] , be_special) //Preferences don't load every character change
|
||||
if(!(toggles & ANTAG_SYNC_WITH_CHARS))
|
||||
WRITE_FILE(S["special_roles"] , be_special) //Preferences don't load every character change
|
||||
WRITE_FILE(S["hide_ckey"] , hide_ckey)
|
||||
WRITE_FILE(S["all_quirks"] , all_quirks)
|
||||
|
||||
|
||||
@@ -963,4 +963,12 @@
|
||||
icon_state = "enzojacket"
|
||||
item_state = "enzojacket"
|
||||
body_parts_covered = CHEST|ARMS
|
||||
//End
|
||||
//End
|
||||
|
||||
//Might get moved later since I have no clue where to put this stuff for now - Luke_vale
|
||||
/obj/item/clothing/suit/toggle/labcoat/formallab
|
||||
name = "winter labcoat"
|
||||
desc = "A stark white labcoat, thicker and kitted out with extra fluff to keep you warm even on the coldest of mad sceinctist nights."
|
||||
icon_state = "labcoat_formal"
|
||||
item_state = "labcoat_formal"
|
||||
body_parts_covered = CHEST|ARMS
|
||||
|
||||
@@ -24,6 +24,8 @@
|
||||
|
||||
var/list/gamemode_blacklist = list() // Event won't happen in these gamemodes
|
||||
var/list/gamemode_whitelist = list() // Event will happen ONLY in these gamemodes if not empty
|
||||
var/list/map_blacklist = list() //Event won't run if this contains the current station map. Must be contain something like "BoxStation.dmm". Capitalization matters.
|
||||
var/list/map_whitelist = list() //Same as above, except only for these maps
|
||||
|
||||
var/triggering //admin cancellation
|
||||
|
||||
@@ -50,6 +52,10 @@
|
||||
return FALSE
|
||||
if(gamemode_whitelist.len && !(gamemode in gamemode_whitelist))
|
||||
return FALSE
|
||||
if(map_blacklist.len && (SSmapping.config.map_file in map_blacklist)) //HYPER EDIT: certain maps will get special events
|
||||
return FALSE
|
||||
if(map_whitelist.len && !(SSmapping.config.map_file in map_whitelist))
|
||||
return FALSE
|
||||
if(holidayID && (!SSevents.holidays || !SSevents.holidays[holidayID]))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -79,7 +79,9 @@
|
||||
|
||||
for(var/I in assembly_components)
|
||||
var/obj/item/integrated_circuit/IC = I
|
||||
. += IC.external_examine(user)
|
||||
var/stringy_string = IC.external_examine(user)
|
||||
if(stringy_string)
|
||||
. += stringy_string
|
||||
if(opened)
|
||||
interact(user)
|
||||
|
||||
|
||||
@@ -174,43 +174,6 @@
|
||||
)
|
||||
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
|
||||
|
||||
/obj/item/integrated_circuit/output/sound/beepsky
|
||||
name = "securitron sound circuit"
|
||||
desc = "Takes a sound name as an input, and will play said sound when pulsed. This circuit is similar to those used in Securitrons."
|
||||
sounds = list(
|
||||
"creep" = 'sound/voice/beepsky/creep.ogg',
|
||||
"criminal" = 'sound/voice/beepsky/criminal.ogg',
|
||||
"freeze" = 'sound/voice/beepsky/freeze.ogg',
|
||||
"god" = 'sound/voice/beepsky/god.ogg',
|
||||
"i am the law" = 'sound/voice/beepsky/iamthelaw.ogg',
|
||||
"insult" = 'sound/voice/beepsky/insult.ogg',
|
||||
"radio" = 'sound/voice/beepsky/radio.ogg',
|
||||
"secure day" = 'sound/voice/beepsky/secureday.ogg',
|
||||
)
|
||||
spawn_flags = IC_SPAWN_RESEARCH
|
||||
|
||||
/obj/item/integrated_circuit/output/sound/medbot
|
||||
name = "medbot sound circuit"
|
||||
desc = "Takes a sound name as an input, and will play said sound when pulsed. This circuit is often found in medical robots."
|
||||
sounds = list(
|
||||
"surgeon" = 'sound/voice/medbot/surgeon.ogg',
|
||||
"radar" = 'sound/voice/medbot/radar.ogg',
|
||||
"feel better" = 'sound/voice/medbot/feelbetter.ogg',
|
||||
"patched up" = 'sound/voice/medbot/patchedup.ogg',
|
||||
"injured" = 'sound/voice/medbot/injured.ogg',
|
||||
"insult" = 'sound/voice/medbot/insult.ogg',
|
||||
"coming" = 'sound/voice/medbot/coming.ogg',
|
||||
"help" = 'sound/voice/medbot/help.ogg',
|
||||
"live" = 'sound/voice/medbot/live.ogg',
|
||||
"lost" = 'sound/voice/medbot/lost.ogg',
|
||||
"flies" = 'sound/voice/medbot/flies.ogg',
|
||||
"catch" = 'sound/voice/medbot/catch.ogg',
|
||||
"delicious" = 'sound/voice/medbot/delicious.ogg',
|
||||
"apple" = 'sound/voice/medbot/apple.ogg',
|
||||
"no" = 'sound/voice/medbot/no.ogg',
|
||||
)
|
||||
spawn_flags = IC_SPAWN_RESEARCH
|
||||
|
||||
/obj/item/integrated_circuit/output/sound/vox
|
||||
name = "ai vox sound circuit"
|
||||
desc = "Takes a sound name as an input, and will play said sound when pulsed. This circuit is often found in AI announcement systems."
|
||||
|
||||
@@ -224,7 +224,7 @@
|
||||
if(!J)
|
||||
J = SSjob.GetJob(H.job)
|
||||
|
||||
if(H.nameless && J.dresscodecompliant)
|
||||
if(H.nameless)
|
||||
if(J.title in GLOB.command_positions)
|
||||
H.real_name = J.title
|
||||
else
|
||||
|
||||
@@ -56,25 +56,7 @@
|
||||
return
|
||||
stored.attack_hand(src) // take out thing from backpack
|
||||
return
|
||||
switch(_key)
|
||||
if("Shift")
|
||||
if(!user.prefs.sprint_spacebar)
|
||||
user.prefs.sprint_toggle ? togglesprint() : sprint_hotkey(TRUE) //Yes, this looks hacky. Yes, this works.
|
||||
return
|
||||
if("Space")
|
||||
if(user.prefs.sprint_spacebar)
|
||||
user.prefs.sprint_toggle ? togglesprint() : sprint_hotkey(TRUE)
|
||||
return
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/key_up(_key, client/user)
|
||||
switch(_key)
|
||||
if("Shift")
|
||||
if(!user.prefs.sprint_spacebar && !user.prefs.sprint_toggle)
|
||||
sprint_hotkey(FALSE)
|
||||
return
|
||||
if("Space")
|
||||
if(user.prefs.sprint_spacebar && !user.prefs.sprint_toggle)
|
||||
sprint_hotkey(FALSE)
|
||||
return
|
||||
return ..()
|
||||
|
||||
@@ -9,14 +9,7 @@
|
||||
if("Q")
|
||||
uneq_active()
|
||||
return
|
||||
if("Shift")
|
||||
sprint_hotkey(TRUE)
|
||||
return
|
||||
return ..()
|
||||
|
||||
/mob/living/silicon/robot/key_up(_key, client/user)
|
||||
switch(_key)
|
||||
if("Shift")
|
||||
sprint_hotkey(FALSE)
|
||||
return
|
||||
return ..()
|
||||
|
||||
@@ -51,6 +51,12 @@
|
||||
var/datum/job/previewJob
|
||||
var/highRankFlag = job_civilian_high | job_medsci_high | job_engsec_high
|
||||
|
||||
if(chosen_gear && current_tab != 2)
|
||||
for(var/A in chosen_gear)
|
||||
var/datum/gear/G = new A //Shouldn't really be anything else, but byond fuckery
|
||||
if(!mannequin.get_item_by_slot(G.category))
|
||||
mannequin.equip_to_appropriate_slot(new G.path)
|
||||
|
||||
if(job_civilian_low & ASSISTANT)
|
||||
previewJob = SSjob.GetJob("Assistant")
|
||||
else if(highRankFlag)
|
||||
@@ -67,7 +73,7 @@
|
||||
previewJob = job
|
||||
break
|
||||
|
||||
if(previewJob)
|
||||
if(previewJob && preview_job_outfit)
|
||||
if(current_tab != 2)
|
||||
mannequin.job = previewJob.title
|
||||
previewJob.equip(mannequin, TRUE)
|
||||
|
||||
@@ -22,4 +22,4 @@
|
||||
/datum/sprite_accessory/body_markings/lbelly
|
||||
name = "Light Belly"
|
||||
icon_state = "lbelly"
|
||||
gender_specific = 1
|
||||
gender_specific = 1
|
||||
|
||||
@@ -21,4 +21,10 @@
|
||||
name = "Cobra Hood"
|
||||
icon_state = "cobrahood"
|
||||
color_src = MATRIXED
|
||||
icon = 'hyperstation/icons/mob/snek.dmi'
|
||||
|
||||
/datum/sprite_accessory/frills/cobraslim
|
||||
name = "Narrow Cobra Hood"
|
||||
icon_state = "cobraslim"
|
||||
color_src = MATRIXED
|
||||
icon = 'hyperstation/icons/mob/snek.dmi'
|
||||
@@ -15,4 +15,5 @@
|
||||
|
||||
/datum/sprite_accessory/snouts/roundlight
|
||||
name = "Round + Light"
|
||||
icon_state = "roundlight"
|
||||
icon_state = "roundlight"
|
||||
|
||||
|
||||
@@ -74,6 +74,18 @@
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/lizard/gecko
|
||||
name = "Gecko"
|
||||
icon_state = "gecko"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/lizard/gecko
|
||||
name = "Gecko"
|
||||
icon_state = "gecko"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/lizard/snaketail
|
||||
name = "Snaketail"
|
||||
icon_state = "snaketail"
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
var/t_is = p_are()
|
||||
var/obscure_name
|
||||
var/dispSize = round(12*size_multiplier) // gets the character's sprite size percent and converts it to the nearest half foot
|
||||
var/output = ""
|
||||
|
||||
if(isliving(user))
|
||||
var/mob/living/L = user
|
||||
@@ -23,11 +24,16 @@
|
||||
if (vassDesc != "")
|
||||
. += vassDesc
|
||||
|
||||
output = "<center>"
|
||||
var/list/obscured = check_obscured_slots()
|
||||
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
|
||||
|
||||
if(ishuman(src)) //user just returned, y'know, the user's own species. dumb.
|
||||
var/mob/living/carbon/human/H = src
|
||||
if(gender)
|
||||
output += "[icon2html('hyperstation/icons/chat/gender.dmi', world, gender)]"
|
||||
|
||||
output += "<b>[src.name]</b>"
|
||||
var/datum/species/pref_species = H.dna.species
|
||||
if(get_visible_name() == "Unknown") // same as flavor text, but hey it works.
|
||||
. += "You can't make out what species they are."
|
||||
@@ -35,6 +41,8 @@
|
||||
. += "You can't make out what species they are."
|
||||
else
|
||||
. += "[t_He] [t_is] a [H.dna.custom_species ? H.dna.custom_species : pref_species.name]!"
|
||||
output += "([H.dna.custom_species ? H.dna.custom_species : pref_species.name])"
|
||||
output += "</center>"
|
||||
|
||||
//uniform
|
||||
if(w_uniform && !(SLOT_W_UNIFORM in obscured))
|
||||
@@ -408,16 +416,30 @@
|
||||
else if(isobserver(user) && traitstring)
|
||||
. += "<span class='info'><b>Traits:</b> [traitstring]</span>"
|
||||
|
||||
|
||||
if(print_flavor_text())
|
||||
output += "<br><b>General</b>"
|
||||
if(get_visible_name() == "Unknown") //Are we sure we know who this is? Don't show flavor text unless we can recognize them. Prevents certain metagaming with impersonation.
|
||||
. += "...?"
|
||||
output += "<br>...?"
|
||||
else if(skipface) //Sometimes we're not unknown, but impersonating someone in a hardsuit, let's not reveal our flavor text then either.
|
||||
. += "...?"
|
||||
output += "<br>...?"
|
||||
else
|
||||
. += "[print_flavor_text()]"
|
||||
output += "<br>[url_encode(flavor_text)]"
|
||||
if(ooc_text)
|
||||
output += "<br><br><i><b>OOC</b>"
|
||||
output += "<br>[url_encode(ooc_text)]"
|
||||
|
||||
SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, msg)
|
||||
. += "*---------*</span>"
|
||||
|
||||
//stat panel
|
||||
if(ishuman(src))
|
||||
user.client << output(output, "statbrowser:update_examine") //open the examine window
|
||||
user.client << output(null, "statbrowser:create_mobexamine") //open the examine window
|
||||
|
||||
/mob/living/proc/status_effect_examines(pronoun_replacement) //You can include this in any mob's examine() to show the examine texts of status effects!
|
||||
var/list/dat = list()
|
||||
if(!pronoun_replacement)
|
||||
|
||||
@@ -29,9 +29,6 @@
|
||||
|
||||
. = ..()
|
||||
|
||||
if(CONFIG_GET(flag/disable_stambuffer))
|
||||
togglesprint()
|
||||
|
||||
AddComponent(/datum/component/redirect, list(COMSIG_COMPONENT_CLEAN_ACT = CALLBACK(src, /mob/living/carbon/human/clean_blood)))
|
||||
|
||||
|
||||
|
||||
@@ -70,3 +70,4 @@
|
||||
var/last_fire_update
|
||||
var/account_id
|
||||
can_be_held = "micro"
|
||||
appearance_flags = KEEP_TOGETHER|TILE_BOUND|PIXEL_SCALE|LONG_GLIDE
|
||||
@@ -10,6 +10,9 @@
|
||||
mutantears = /obj/item/organ/ears/cat
|
||||
mutanttail = /obj/item/organ/tail/cat
|
||||
|
||||
liked_food = MEAT | RAW | DAIRY
|
||||
disliked_food = FRIED | FRUIT
|
||||
|
||||
/datum/species/human/felinid/qualifies_for_rank(rank, list/features)
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -541,7 +541,7 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
|
||||
/mob/living/carbon/handle_status_effects()
|
||||
..()
|
||||
if(getStaminaLoss() && !combatmode)//CIT CHANGE - prevents stamina regen while combat mode is active
|
||||
adjustStaminaLoss(resting ? (recoveringstam ? -7.5 : -3) : -1.5)//CIT CHANGE - decreases adjuststaminaloss to stop stamina damage from being such a joke
|
||||
adjustStaminaLoss(resting ? (recoveringstam ? -7.5 : -3) : -1.5)
|
||||
|
||||
if(!recoveringstam && incomingstammult != 1)
|
||||
incomingstammult = max(0.01, incomingstammult)
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
ranged = 1
|
||||
retreat_distance = 5
|
||||
minimum_distance = 5
|
||||
move_to_delay = 4
|
||||
move_to_delay = 7
|
||||
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/xeno = 4,
|
||||
/obj/item/stack/sheet/animalhide/xeno = 1)
|
||||
projectiletype = /obj/item/projectile/neurotox
|
||||
@@ -133,7 +133,7 @@
|
||||
icon_living = "alienq"
|
||||
icon_dead = "alienq_dead"
|
||||
bubble_icon = "alienroyal"
|
||||
move_to_delay = 4
|
||||
move_to_delay = 7
|
||||
maxHealth = 400
|
||||
health = 400
|
||||
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/xeno = 10,
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
health = 10
|
||||
spacewalk = TRUE
|
||||
faction = list("hostile")
|
||||
move_to_delay = 0
|
||||
move_to_delay = 1
|
||||
obj_damage = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
mouse_opacity = MOUSE_OPACITY_OPAQUE
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
melee_damage_lower += rand(4, 10)
|
||||
melee_damage_upper += rand(10,20)
|
||||
maxHealth += rand(40,60)
|
||||
move_to_delay = rand(3,7)
|
||||
move_to_delay = rand(5,8)
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/cayenne
|
||||
name = "Cayenne"
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
faction = list("spiders")
|
||||
var/busy = SPIDER_IDLE
|
||||
pass_flags = PASSTABLE
|
||||
move_to_delay = 6
|
||||
move_to_delay = 7
|
||||
ventcrawler = VENTCRAWLER_ALWAYS
|
||||
attacktext = "bites"
|
||||
attack_sound = 'sound/weapons/bite.ogg'
|
||||
@@ -140,7 +140,7 @@
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 20
|
||||
poison_per_bite = 5
|
||||
move_to_delay = 5
|
||||
move_to_delay = 7
|
||||
|
||||
//vipers are the rare variant of the hunter, no IMMEDIATE damage but so much poison medical care will be needed fast.
|
||||
/mob/living/simple_animal/hostile/poison/giant_spider/hunter/viper
|
||||
@@ -154,7 +154,7 @@
|
||||
melee_damage_lower = 1
|
||||
melee_damage_upper = 1
|
||||
poison_per_bite = 12
|
||||
move_to_delay = 4
|
||||
move_to_delay = 5
|
||||
poison_type = /datum/reagent/toxin/venom //all in venom, glass cannon. you bite 5 times and they are DEFINITELY dead, but 40 health and you are extremely obvious. Ambush, maybe?
|
||||
speed = 1
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
@@ -171,7 +171,7 @@
|
||||
melee_damage_lower = 35
|
||||
melee_damage_upper = 40
|
||||
poison_per_bite = 0
|
||||
move_to_delay = 8
|
||||
move_to_delay = 10
|
||||
speed = 7
|
||||
status_flags = NONE
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
var/projectiletype //set ONLY it and NULLIFY casingtype var, if we have ONLY projectile
|
||||
var/projectilesound
|
||||
var/casingtype //set ONLY it and NULLIFY projectiletype, if we have projectile IN CASING
|
||||
var/move_to_delay = 3 //delay for the automated movement.
|
||||
var/move_to_delay = 5 //delay for the automated movement.
|
||||
var/list/friends = list()
|
||||
var/list/emote_taunt = list()
|
||||
var/taunt_chance = 0
|
||||
|
||||
@@ -33,7 +33,7 @@ Difficulty: Medium
|
||||
movement_type = GROUND
|
||||
speak_emote = list("roars")
|
||||
speed = 1
|
||||
move_to_delay = 2
|
||||
move_to_delay = 4
|
||||
projectiletype = /obj/item/projectile/kinetic/miner
|
||||
projectilesound = 'sound/weapons/kenetic_accel.ogg'
|
||||
ranged = 1
|
||||
|
||||
@@ -40,7 +40,7 @@ Difficulty: Hard
|
||||
melee_damage_lower = 40
|
||||
melee_damage_upper = 40
|
||||
speed = 1
|
||||
move_to_delay = 10
|
||||
move_to_delay = 15
|
||||
ranged_cooldown_time = 10
|
||||
ranged = 1
|
||||
pixel_x = -32
|
||||
|
||||
@@ -38,7 +38,7 @@ Difficulty: Very Hard
|
||||
melee_damage_lower = 40
|
||||
melee_damage_upper = 40
|
||||
speed = 1
|
||||
move_to_delay = 10
|
||||
move_to_delay = 14
|
||||
ranged = 1
|
||||
pixel_x = -32
|
||||
del_on_death = 1
|
||||
@@ -64,7 +64,7 @@ Difficulty: Very Hard
|
||||
ranged_cooldown = world.time + 30
|
||||
telegraph()
|
||||
dir_shots(GLOB.alldirs)
|
||||
move_to_delay = 3
|
||||
move_to_delay = 5
|
||||
return
|
||||
else
|
||||
move_to_delay = initial(move_to_delay)
|
||||
|
||||
@@ -48,7 +48,7 @@ Difficulty: Medium
|
||||
melee_damage_lower = 40
|
||||
melee_damage_upper = 40
|
||||
speed = 1
|
||||
move_to_delay = 5
|
||||
move_to_delay = 8
|
||||
ranged = 1
|
||||
pixel_x = -16
|
||||
crusher_loot = list(/obj/structure/closet/crate/necropolis/dragon/crusher)
|
||||
@@ -138,7 +138,7 @@ Difficulty: Medium
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/proc/fire_wall(dir)
|
||||
var/list/hit_things = list(src)
|
||||
var/turf/E = get_edge_target_turf(src, dir)
|
||||
var/range = 10
|
||||
var/range = 8
|
||||
var/turf/previousturf = get_turf(src)
|
||||
for(var/turf/J in getline(src,E))
|
||||
if(!range || (J != previousturf && (!previousturf.atmos_adjacent_turfs || !previousturf.atmos_adjacent_turfs[J])))
|
||||
|
||||
@@ -52,7 +52,7 @@ Difficulty: Normal
|
||||
melee_damage_upper = 20
|
||||
blood_volume = 0
|
||||
speed = 1
|
||||
move_to_delay = 11
|
||||
move_to_delay = 15
|
||||
ranged = 1
|
||||
ranged_cooldown_time = 40
|
||||
aggro_vision_range = 21 //so it can see to one side of the arena to the other
|
||||
@@ -66,9 +66,9 @@ Difficulty: Normal
|
||||
|
||||
var/burst_range = 3 //range on burst aoe
|
||||
var/beam_range = 5 //range on cross blast beams
|
||||
var/chaser_speed = 2 //how fast chasers are currently
|
||||
var/chaser_speed = 1 //how fast chasers are currently
|
||||
var/chaser_cooldown = 50 //base cooldown/cooldown var between spawning chasers
|
||||
var/major_attack_cooldown = 40 //base cooldown for major attacks
|
||||
var/major_attack_cooldown = 60 //base cooldown for major attacks
|
||||
var/arena_cooldown = 200 //base cooldown/cooldown var for creating an arena
|
||||
var/blinking = FALSE //if we're doing something that requires us to stand still and not attack
|
||||
var/obj/effect/hierophant/spawned_beacon //the beacon we teleport back to
|
||||
|
||||
@@ -32,7 +32,7 @@ Difficulty: Medium
|
||||
melee_damage_lower = 25
|
||||
melee_damage_upper = 25
|
||||
speed = 1
|
||||
move_to_delay = 2
|
||||
move_to_delay = 4
|
||||
ranged = 1
|
||||
del_on_death = 1
|
||||
retreat_distance = 5
|
||||
@@ -88,7 +88,7 @@ Difficulty: Medium
|
||||
retreat_distance = 0
|
||||
minimum_distance = 0
|
||||
speed = 0
|
||||
move_to_delay = 1
|
||||
move_to_delay = 2
|
||||
charging = 1
|
||||
addtimer(CALLBACK(src, .proc/reset_charge), 50)
|
||||
|
||||
@@ -97,7 +97,7 @@ Difficulty: Medium
|
||||
retreat_distance = 5
|
||||
minimum_distance = 5
|
||||
speed = 1
|
||||
move_to_delay = 2
|
||||
move_to_delay = 4
|
||||
charging = 0
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/legion/death()
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
icon_aggro = "curseblob"
|
||||
mob_biotypes = MOB_SPIRIT
|
||||
movement_type = FLYING
|
||||
move_to_delay = 5
|
||||
move_to_delay = 7
|
||||
vision_range = 20
|
||||
aggro_vision_range = 20
|
||||
maxHealth = 40 //easy to kill, but oh, will you be seeing a lot of them.
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
mob_biotypes = MOB_ORGANIC|MOB_BEAST
|
||||
vision_range = 2
|
||||
aggro_vision_range = 9
|
||||
move_to_delay = 5
|
||||
move_to_delay = 7
|
||||
friendly = "harmlessly rolls into"
|
||||
maxHealth = 45
|
||||
health = 45
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
icon_dead = "Hivelordbrood"
|
||||
icon_gib = "syndicate_gib"
|
||||
mouse_opacity = MOUSE_OPACITY_OPAQUE
|
||||
move_to_delay = 1
|
||||
move_to_delay = 3
|
||||
friendly = "buzzes near"
|
||||
vision_range = 10
|
||||
speed = 3
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
icon_gib = "syndicate_gib"
|
||||
mob_biotypes = MOB_ORGANIC|MOB_BEAST
|
||||
mouse_opacity = MOUSE_OPACITY_ICON
|
||||
move_to_delay = 5
|
||||
move_to_delay = 8
|
||||
friendly = "floats near"
|
||||
speak_emote = list("puffs")
|
||||
vision_range = 5
|
||||
@@ -88,7 +88,7 @@
|
||||
F.throw_message = "is absorbed by the girth of the"
|
||||
F.retreat_distance = null
|
||||
F.minimum_distance = 1
|
||||
F.move_to_delay = 6
|
||||
F.move_to_delay = 8
|
||||
F.environment_smash = ENVIRONMENT_SMASH_WALLS
|
||||
F.mob_size = MOB_SIZE_LARGE
|
||||
F.speed = 1
|
||||
@@ -106,7 +106,7 @@
|
||||
throw_message = "is avoided by the"
|
||||
retreat_distance = 9
|
||||
minimum_distance = 9
|
||||
move_to_delay = 2
|
||||
move_to_delay = 3
|
||||
inflate_cooldown = 4
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
|
||||
@@ -235,15 +235,19 @@ mob/visible_message(message, self_message, blind_message, vision_distance = DEFA
|
||||
//set qdel_on_fail to have it delete W if it fails to equip
|
||||
//set disable_warning to disable the 'you are unable to equip that' warning.
|
||||
//unset redraw_mob to prevent the mob from being redrawn at the end.
|
||||
/mob/proc/equip_to_slot_if_possible(obj/item/W, slot, qdel_on_fail = FALSE, disable_warning = FALSE, redraw_mob = TRUE, bypass_equip_delay_self = FALSE)
|
||||
/mob/proc/equip_to_slot_if_possible(obj/item/W, slot, qdel_on_fail = FALSE, disable_warning = FALSE, redraw_mob = TRUE, bypass_equip_delay_self = FALSE, store = FALSE)
|
||||
if(!istype(W))
|
||||
return FALSE
|
||||
if(!W.mob_can_equip(src, null, slot, disable_warning, bypass_equip_delay_self))
|
||||
if(store && istype(src, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = src
|
||||
var/obj/item/storage/backpack/BP = H.back
|
||||
if(BP)
|
||||
return SEND_SIGNAL(BP, COMSIG_TRY_STORAGE_INSERT, W, null, TRUE, TRUE)
|
||||
if(qdel_on_fail)
|
||||
qdel(W)
|
||||
else
|
||||
if(!disable_warning)
|
||||
to_chat(src, "<span class='warning'>You are unable to equip that!</span>")
|
||||
else if(!disable_warning)
|
||||
to_chat(src, "<span class='warning'>You are unable to equip that!</span>")
|
||||
return FALSE
|
||||
equip_to_slot(W, slot, redraw_mob) //This proc should not ever fail.
|
||||
return TRUE
|
||||
@@ -258,6 +262,12 @@ mob/visible_message(message, self_message, blind_message, vision_distance = DEFA
|
||||
/mob/proc/equip_to_slot_or_del(obj/item/W, slot)
|
||||
return equip_to_slot_if_possible(W, slot, TRUE, TRUE, FALSE, TRUE)
|
||||
|
||||
/mob/proc/equip_to_slot_or_store(obj/item/W, slot)
|
||||
return equip_to_slot_if_possible(W, slot, FALSE, TRUE, FALSE, TRUE, TRUE)
|
||||
|
||||
/mob/proc/equip_to_slot_or_store_and_del(obj/item/W, slot)
|
||||
return equip_to_slot_if_possible(W, slot, TRUE, TRUE, FALSE, TRUE, TRUE)
|
||||
|
||||
//puts the item "W" into an appropriate slot in a human's inventory
|
||||
//returns 0 if it cannot, 1 if successful
|
||||
/mob/proc/equip_to_appropriate_slot(obj/item/W)
|
||||
|
||||
@@ -130,6 +130,7 @@
|
||||
var/updating_glide_size = TRUE
|
||||
|
||||
var/flavor_text = ""
|
||||
var/ooc_text = ""
|
||||
var/flavor_text_2 = "" //version of the above that only lasts for the current round.
|
||||
|
||||
///////TYPING INDICATORS///////
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
. = ..()
|
||||
|
||||
if((direct & (direct - 1)) && mob.loc == n) //moved diagonally successfully
|
||||
add_delay *= 2
|
||||
add_delay *= 1.66
|
||||
move_delay += add_delay
|
||||
mob.set_glide_size(DELAY_TO_GLIDE_SIZE(add_delay))
|
||||
if(.) // If mob is null here, we deserve the runtime
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
set src in usr
|
||||
if(usr != src)
|
||||
to_chat(usr, "No.")
|
||||
var/msg = stripped_multiline_input(usr, "Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!", "Flavor Text", html_decode(flavor_text), MAX_MESSAGE_LEN, TRUE)
|
||||
var/msg = stripped_multiline_input(usr, "Set the flavor text in your 'examine' verb. IC only!", "Flavor Text", html_decode(flavor_text), MAX_MESSAGE_LEN, TRUE)
|
||||
|
||||
if(msg)
|
||||
flavor_text = html_encode(msg)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
/obj/vehicle/ridden/atv/Initialize()
|
||||
. = ..()
|
||||
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
|
||||
D.vehicle_move_delay = 1
|
||||
D.vehicle_move_delay = 1.5
|
||||
D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 4), TEXT_SOUTH = list(0, 4), TEXT_EAST = list(0, 4), TEXT_WEST = list( 0, 4)))
|
||||
D.set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
|
||||
D.set_vehicle_dir_layer(NORTH, OBJ_LAYER)
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
. = ..()
|
||||
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
|
||||
D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 4), TEXT_SOUTH = list(0, 4), TEXT_EAST = list(0, 4), TEXT_WEST = list( 0, 4)))
|
||||
D.vehicle_move_delay = 0
|
||||
D.vehicle_move_delay = 1.5
|
||||
|
||||
/obj/vehicle/ridden/bicycle/buckle_mob(mob/living/M, force = 0, check_loc = 1)
|
||||
if(prob(easter_egg_chance) || (SSevents.holidays && SSevents.holidays[APRIL_FOOLS]))
|
||||
|
||||
@@ -64,6 +64,6 @@
|
||||
/obj/vehicle/ridden/lavaboat/dragon/Initialize()
|
||||
. = ..()
|
||||
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
|
||||
D.vehicle_move_delay = 1
|
||||
D.vehicle_move_delay = 1.5
|
||||
D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(1, 2), TEXT_SOUTH = list(1, 2), TEXT_EAST = list(1, 2), TEXT_WEST = list( 1, 2)))
|
||||
D.keytype = null
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
/obj/vehicle/ridden/scooter/skateboard/Initialize()
|
||||
. = ..()
|
||||
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
|
||||
D.vehicle_move_delay = 1
|
||||
D.vehicle_move_delay = 2
|
||||
D.set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
|
||||
D.set_vehicle_dir_layer(NORTH, OBJ_LAYER)
|
||||
D.set_vehicle_dir_layer(EAST, OBJ_LAYER)
|
||||
@@ -97,11 +97,11 @@
|
||||
. = ..()
|
||||
var/datum/component/riding/R = src.GetComponent(/datum/component/riding)
|
||||
if (!adjusted_speed)
|
||||
R.vehicle_move_delay = 0
|
||||
R.vehicle_move_delay = 1.5
|
||||
to_chat(user, "<span class='notice'>You adjust the wheels on [src] to make it go faster.</span>")
|
||||
adjusted_speed = TRUE
|
||||
else
|
||||
R.vehicle_move_delay = 1
|
||||
R.vehicle_move_delay = 2
|
||||
to_chat(user, "<span class='notice'>You adjust the wheels on [src] to make it go slower.</span>")
|
||||
adjusted_speed = FALSE
|
||||
return TRUE
|
||||
@@ -176,7 +176,7 @@
|
||||
/obj/vehicle/ridden/scooter/wheelys/Initialize()
|
||||
. = ..()
|
||||
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
|
||||
D.vehicle_move_delay = 0
|
||||
D.vehicle_move_delay = 2
|
||||
D.set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
|
||||
D.set_vehicle_dir_layer(NORTH, OBJ_LAYER)
|
||||
D.set_vehicle_dir_layer(EAST, OBJ_LAYER)
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
add_overlay(overlay)
|
||||
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
|
||||
D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, -8), TEXT_SOUTH = list(0, 4), TEXT_EAST = list(-10, 5), TEXT_WEST = list( 10, 5)))
|
||||
D.vehicle_move_delay = 0
|
||||
D.vehicle_move_delay = 1
|
||||
D.set_vehicle_dir_offsets(NORTH, -16, -16)
|
||||
D.set_vehicle_dir_offsets(SOUTH, -16, -16)
|
||||
D.set_vehicle_dir_offsets(EAST, -18, 0)
|
||||
@@ -54,7 +54,7 @@
|
||||
. = ..()
|
||||
add_overlay(overlay)
|
||||
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
|
||||
D.vehicle_move_delay = 0
|
||||
D.vehicle_move_delay = 1
|
||||
D.set_riding_offsets(1, list(TEXT_NORTH = list(-10, -4), TEXT_SOUTH = list(16, 3), TEXT_EAST = list(-4, 30), TEXT_WEST = list(4, -3)))
|
||||
D.set_riding_offsets(2, list(TEXT_NORTH = list(19, -5, 4), TEXT_SOUTH = list(-13, 3, 4), TEXT_EAST = list(-4, -3, 4.1), TEXT_WEST = list(4, 28, 3.9)))
|
||||
D.set_riding_offsets(3, list(TEXT_NORTH = list(-10, -18, 4.2), TEXT_SOUTH = list(16, 25, 3.9), TEXT_EAST = list(-22, 30), TEXT_WEST = list(22, -3, 4.1)))
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
/obj/vehicle/ridden/wheelchair/Initialize()
|
||||
. = ..()
|
||||
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
|
||||
D.vehicle_move_delay = 0
|
||||
D.vehicle_move_delay = 1
|
||||
D.set_vehicle_dir_layer(SOUTH, OBJ_LAYER)
|
||||
D.set_vehicle_dir_layer(NORTH, ABOVE_MOB_LAYER)
|
||||
D.set_vehicle_dir_layer(EAST, OBJ_LAYER)
|
||||
|
||||
@@ -123,7 +123,8 @@
|
||||
/obj/item/clothing/head/cowboyhat/white = 3,
|
||||
/obj/item/clothing/head/cowboyhat/pink = 3,
|
||||
/obj/item/clothing/shoes/cowboyboots = 3,
|
||||
/obj/item/clothing/shoes/cowboyboots/black = 3)
|
||||
/obj/item/clothing/shoes/cowboyboots/black = 3,
|
||||
/obj/item/clothing/under/polychromic/vsweater = 3)
|
||||
contraband = list(/obj/item/clothing/under/syndicate/tacticool = 3,
|
||||
/obj/item/clothing/under/syndicate/tacticool/skirt = 3,
|
||||
/obj/item/clothing/mask/balaclava = 3,
|
||||
|
||||
@@ -300,7 +300,7 @@ TICK_LIMIT_MC_INIT 500
|
||||
|
||||
##Defines the ticklag for the world. Ticklag is the amount of time between game ticks (aka byond ticks) (in 1/10ths of a second).
|
||||
## This also controls the client network update rate, as well as the default client fps
|
||||
#TICKLAG 0.5
|
||||
#TICKLAG 0.1
|
||||
|
||||
##Can also be set as per-second value, the following value is identical to the above.
|
||||
FPS 20
|
||||
|
||||
@@ -570,7 +570,7 @@ MONKEYCAP 64
|
||||
RATCAP 64
|
||||
|
||||
## Uncomment to use TG-style combat
|
||||
#DISABLE_STAMBUFFER
|
||||
DISABLE_STAMBUFFER
|
||||
|
||||
## Choose which Engine to start the round with. Weight is after the comma. Setting the weight to 0 removes the engine from rotation.
|
||||
BOX_RANDOM_ENGINE Box SM,3
|
||||
|
||||
@@ -274,6 +274,9 @@ if (window.location) {
|
||||
var status_tab_parts = ["loading..."];
|
||||
var current_tab = null;
|
||||
var mc_tab_parts = [["loading...", ""]];
|
||||
var examine_tab_parts = ["<b>Mob Examine Text</b>"];
|
||||
var examine_flavour = [];
|
||||
var examine_ooc = [];
|
||||
var href_token = null;
|
||||
var spells = [];
|
||||
var spell_tabs = [];
|
||||
@@ -570,11 +573,13 @@ function tab_change(tab) {
|
||||
draw_tickets();
|
||||
} else if(tab == "SQDL2") {
|
||||
draw_sqdl2();
|
||||
} else if(tab == "Examine") {
|
||||
draw_examine();
|
||||
}else if(tab == turfname) {
|
||||
draw_listedturf();
|
||||
} else {
|
||||
var statcontentdiv = document.getElementById("statcontent");
|
||||
statcontentdiv[textContentKey] = "loading...";
|
||||
statcontentdiv[textContentKey] = "loading...";
|
||||
}
|
||||
window.location.href = "byond://winset?statbrowser.is-visible=true";
|
||||
}
|
||||
@@ -684,6 +689,22 @@ function draw_mc() {
|
||||
}
|
||||
document.getElementById("statcontent").appendChild(table);
|
||||
}
|
||||
|
||||
|
||||
function update_examine(html,flavour,ooc) {
|
||||
examine_tab_parts = html
|
||||
}
|
||||
|
||||
function draw_examine() {
|
||||
var statcontentdiv = document.getElementById("statcontent");
|
||||
if(!document.getElementById("Examine")) {
|
||||
createStatusTab("Examine");
|
||||
current_tab = "Examine";
|
||||
}
|
||||
statcontentdiv[textContentKey] = inner;
|
||||
document.getElementById("statcontent").innerHTML = examine_tab_parts;
|
||||
}
|
||||
|
||||
function update_tickets(T){
|
||||
tickets = JSON.parse(T);
|
||||
if(!verb_tabs.includes("Tickets")) {
|
||||
@@ -729,6 +750,23 @@ function remove_admin_tabs() {
|
||||
remove_sqdl2();
|
||||
}
|
||||
|
||||
//mob examine
|
||||
function create_mobexamine() {
|
||||
remove_mobexamine(); // remove the last one if we had one
|
||||
addPermanentTab("Examine");
|
||||
tab_change("Examine");
|
||||
}
|
||||
|
||||
function remove_mobexamine() {
|
||||
removePermanentTab("Examine");
|
||||
checkStatusTab();
|
||||
if(current_tab == "Examine")
|
||||
tab_change("Status");
|
||||
}
|
||||
|
||||
|
||||
//turf
|
||||
|
||||
function create_listedturf(TN) {
|
||||
remove_listedturf(); // remove the last one if we had one
|
||||
turfname = JSON.parse(TN);
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
ventcrawler = 1
|
||||
death_sound = 'sound/voice/ed209_20sec.ogg'
|
||||
deathmessage = "lets out scream and its tentacles shrivel away..."
|
||||
move_to_delay = 2
|
||||
move_to_delay = 4
|
||||
loot = list(/obj/effect/gibspawner/human)
|
||||
|
||||
atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
|
||||
|
Before Width: | Height: | Size: 211 B After Width: | Height: | Size: 182 B |
|
After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 423 B After Width: | Height: | Size: 625 B |
|
Before Width: | Height: | Size: 426 KiB After Width: | Height: | Size: 427 KiB |
|
Before Width: | Height: | Size: 409 KiB After Width: | Height: | Size: 410 KiB |
|
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 144 KiB |
@@ -1,6 +1,6 @@
|
||||
/obj/screen/mov_intent
|
||||
icon = 'modular_citadel/icons/ui/screen_midnight.dmi'
|
||||
|
||||
/*
|
||||
/obj/screen/sprintbutton
|
||||
name = "toggle sprint"
|
||||
icon = 'modular_citadel/icons/ui/screen_midnight.dmi'
|
||||
@@ -39,3 +39,4 @@
|
||||
if(L.sprint_buffer_max > 0)
|
||||
amount = round(CLAMP((L.sprint_buffer / L.sprint_buffer_max) * 100, 0, 100), 5)
|
||||
icon_state = "prog_bar_[amount]"
|
||||
*/
|
||||
@@ -1,3 +1,4 @@
|
||||
/*
|
||||
/datum/hud/var/obj/screen/staminas/staminas
|
||||
/datum/hud/var/obj/screen/staminabuffer/staminabuffer
|
||||
|
||||
@@ -76,3 +77,4 @@
|
||||
return "stambuffer6"
|
||||
else
|
||||
return "stambuffer7"
|
||||
*/
|
||||
@@ -1,4 +1,4 @@
|
||||
/datum/controller/subsystem/job/proc/equip_loadout(mob/dead/new_player/N, mob/living/M, equipbackpackstuff)
|
||||
/datum/controller/subsystem/job/proc/equip_loadout(mob/dead/new_player/N, mob/living/M, backpackstuffs)
|
||||
var/mob/the_mob = N
|
||||
if(!the_mob)
|
||||
the_mob = M // cause this doesn't get assigned if player is a latejoiner
|
||||
@@ -10,18 +10,22 @@
|
||||
G = GLOB.loadout_items[slot_to_string(initial(G.category))][initial(G.name)]
|
||||
if(!G)
|
||||
continue
|
||||
var/permitted = TRUE
|
||||
if(G.restricted_roles && G.restricted_roles.len && !(M.mind.assigned_role in G.restricted_roles))
|
||||
permitted = FALSE
|
||||
if(G.ckeywhitelist && G.ckeywhitelist.len && !(the_mob.client.ckey in G.ckeywhitelist))
|
||||
permitted = FALSE
|
||||
if(!equipbackpackstuff && G.category == SLOT_IN_BACKPACK)//snowflake check since plopping stuff in the backpack doesnt work for pre-job equip loadout stuffs
|
||||
permitted = FALSE
|
||||
if(equipbackpackstuff && G.category != SLOT_IN_BACKPACK)//ditto
|
||||
permitted = FALSE
|
||||
if(!permitted)
|
||||
continue
|
||||
if(G.ckeywhitelist && G.ckeywhitelist.len && !(the_mob.client.ckey in G.ckeywhitelist))
|
||||
continue
|
||||
|
||||
var/obj/item/I = new G.path
|
||||
if(iscarbon(M) && backpackstuffs && (G.category == SLOT_IN_BACKPACK || G.blacklist_join_equip))
|
||||
var/mob/living/carbon/C = M
|
||||
var/obj/item/storage/backpack/B = C.back
|
||||
if(!B || !SEND_SIGNAL(B, COMSIG_TRY_STORAGE_INSERT, I, null, TRUE, TRUE))
|
||||
I.forceMove(get_turf(C))
|
||||
continue
|
||||
else if(G.blacklist_join_equip) //Assume we're gonna be put in a backpack and not equipped
|
||||
continue
|
||||
else if(backpackstuffs && G.category != SLOT_IN_BACKPACK)
|
||||
continue
|
||||
if(!M.equip_to_slot_if_possible(I, G.category, disable_warning = TRUE, bypass_equip_delay_self = TRUE)) // If the job's dresscode compliant, try to put it in its slot, first
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
#define COIN_CHARGE 3
|
||||
|
||||
/obj/machinery/vending/kink
|
||||
name = "KinkMate"
|
||||
name = "\improper KinkMate"
|
||||
desc = "A vending machine for all your unmentionable desires."
|
||||
icon = 'icons/obj/citvending.dmi'
|
||||
icon_state = "kink"
|
||||
@@ -57,6 +57,7 @@
|
||||
/obj/item/clothing/neck/stole/black = 2,
|
||||
/obj/item/clothing/under/polychromic/stripper = 3,
|
||||
/obj/item/clothing/under/polychromic/bikini = 3,
|
||||
/obj/item/clothing/under/polychromic/onepeice = 3,
|
||||
/obj/item/clothing/under/polychromic/shortpants/pantsu = 3,
|
||||
/obj/item/clothing/under/polychromic/bulge = 3,
|
||||
/obj/item/clothing/suit/maidapron = 3,
|
||||
@@ -66,6 +67,7 @@
|
||||
/obj/item/electropack/vibrator = 2,
|
||||
)
|
||||
contraband = list(
|
||||
/obj/item/clothing/under/gear_harness = 3,
|
||||
/obj/item/restraints/handcuffs/fake/kinky = 5,
|
||||
/obj/item/clothing/neck/petcollar = 5,
|
||||
/obj/item/clothing/under/mankini = 1,
|
||||
|
||||
@@ -383,7 +383,7 @@
|
||||
if(HAS_TRAIT(H, TRAIT_HUSK))
|
||||
return
|
||||
var/list/genitals_to_add = list()
|
||||
var/list/relevant_layers = list(GENITALS_BEHIND_LAYER, GENITALS_FRONT_LAYER) //GENITALS_ADJ_LAYER removed
|
||||
var/list/relevant_layers = list(GENITALS_BEHIND_LAYER, GENITALS_FRONT_LAYER, GENITALS_UNDER_LAYER) //GENITALS_ADJ_LAYER removed
|
||||
var/list/standing = list()
|
||||
var/size
|
||||
var/aroused_state
|
||||
@@ -426,15 +426,24 @@
|
||||
continue
|
||||
|
||||
var/mutable_appearance/genital_overlay = mutable_appearance(S.icon, layer = -layer)
|
||||
//genitals bigger than 11 inches / g-cup will appear over clothing, if accepted
|
||||
//otherwise, appear under clothing
|
||||
if(G.slot == "penis" || G.slot == "testicles")
|
||||
if(G.size < 3) //is actually "less than 11 inches"
|
||||
genital_overlay.layer = -GENITALS_UNDER_LAYER
|
||||
if(G.slot == "breasts")
|
||||
var/obj/item/organ/genital/breasts/B = G
|
||||
if(B.cached_size < 8) //anything smaller than a g-cup
|
||||
genital_overlay.layer = -GENITALS_UNDER_LAYER
|
||||
|
||||
//Get the icon
|
||||
genital_overlay.icon_state = "[G.slot]_[S.icon_state]_[size]_[aroused_state]_[layertext]"
|
||||
colourcode = S.color_src
|
||||
|
||||
if(G.slot == "belly") //we have a different size system to the rest of the genitals
|
||||
if(G.slot == "belly") //we have a different size system
|
||||
genital_overlay.icon = 'hyperstation/icons/obj/genitals/belly.dmi'
|
||||
genital_overlay.icon_state = "belly_[size]"
|
||||
colourcode = "belly_color"
|
||||
|
||||
|
||||
if(S.center)
|
||||
genital_overlay = center_image(genital_overlay, S.dimension_x, S.dimension_y)
|
||||
|
||||
@@ -464,4 +473,4 @@
|
||||
standing = list()
|
||||
|
||||
for(var/L in relevant_layers)
|
||||
H.apply_overlay(L)
|
||||
H.apply_overlay(L)
|
||||
|
||||
@@ -19,4 +19,4 @@
|
||||
name = "A diamond ring"
|
||||
category = SLOT_GLOVES
|
||||
path = /obj/item/clothing/gloves/ring/diamond
|
||||
cost = 4
|
||||
cost = 4
|
||||
|
||||
@@ -70,4 +70,4 @@
|
||||
name = "Improper Roman shield"
|
||||
category = SLOT_HANDS
|
||||
path = /obj/item/shield/riot/roman/fake
|
||||
cost = 2
|
||||
cost = 2
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
name = "Rice hat"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/rice_hat
|
||||
blacklist_join_equip = TRUE
|
||||
|
||||
/datum/gear/ushanka
|
||||
name = "Ushanka"
|
||||
@@ -53,12 +54,14 @@
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/flakhelm
|
||||
cost = 2
|
||||
blacklist_join_equip = TRUE
|
||||
|
||||
/datum/gear/delinquent //Now you too can become like your favorite punchy ghost protagonist
|
||||
name = "Delinquent Hat"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/delinquent
|
||||
cost = 3
|
||||
blacklist_join_equip = TRUE
|
||||
|
||||
/datum/gear/bunnyears
|
||||
name = "Bunny Ears"
|
||||
|
||||
@@ -53,6 +53,7 @@ GLOBAL_LIST_EMPTY(loadout_whitelist_ids)
|
||||
var/list/restricted_roles
|
||||
var/list/ckeywhitelist
|
||||
var/restricted_desc
|
||||
var/blacklist_join_equip = FALSE //If we don't equip this when we join
|
||||
|
||||
/datum/gear/New()
|
||||
..()
|
||||
|
||||
@@ -218,3 +218,8 @@
|
||||
name = "Pharoah tunic"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/nemes
|
||||
|
||||
/datum/gear/fluffcoat
|
||||
name = "Winter labcoat"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/toggle/labcoat/formallab
|
||||
@@ -412,38 +412,45 @@
|
||||
name = "Gear Harness"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/gear_harness
|
||||
blacklist_join_equip = TRUE
|
||||
|
||||
/datum/gear/pinkstripper
|
||||
name = "Pink stripper outfit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/stripper_pink
|
||||
blacklist_join_equip = TRUE
|
||||
|
||||
/datum/gear/greenstripper
|
||||
name = "Green stripper outfit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/stripper_green
|
||||
blacklist_join_equip = TRUE
|
||||
|
||||
/datum/gear/polybikini
|
||||
name = "Polychromic Bikini"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/polychromic/bikini
|
||||
cost = 2
|
||||
blacklist_join_equip = TRUE
|
||||
|
||||
/datum/gear/polystripper
|
||||
name = "Polychromic Stripper Outfit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/polychromic/stripper
|
||||
cost = 2
|
||||
blacklist_join_equip = TRUE
|
||||
|
||||
/datum/gear/polypantsu
|
||||
name = "Polychromic Panties"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/polychromic/shortpants/pantsu
|
||||
blacklist_join_equip = TRUE
|
||||
|
||||
/datum/gear/polybulge
|
||||
name = "Polychromic Voluminous Thong"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/polychromic/bulge
|
||||
blacklist_join_equip = TRUE
|
||||
|
||||
/datum/gear/polybottomless
|
||||
name = "Polychromic Bottomless Shirt"
|
||||
@@ -451,23 +458,25 @@
|
||||
path = /obj/item/clothing/under/polychromic/bottomless
|
||||
cost = 2
|
||||
|
||||
/datum/gear/corset
|
||||
name = "Corset"
|
||||
/datum/gear/polysweatervirgin
|
||||
name = "Polychromic Virginkiller Sweater"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/corset
|
||||
cost = 1
|
||||
path = /obj/item/clothing/under/polychromic/vsweater
|
||||
cost = 2
|
||||
|
||||
/datum/gear/corset
|
||||
name = "Corset"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/corset
|
||||
cost = 1
|
||||
blacklist_join_equip = TRUE
|
||||
|
||||
/datum/gear/shortsbra
|
||||
name = "Kromatic Shorts and Top"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/polychromic/shortsbra
|
||||
cost = 1
|
||||
blacklist_join_equip = TRUE
|
||||
|
||||
/datum/gear/gladiator
|
||||
name = "Gladiator uniform"
|
||||
@@ -486,4 +495,4 @@
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/greenplaidshirt
|
||||
cost = 1
|
||||
ckeywhitelist = list("chemlight")
|
||||
ckeywhitelist = list("chemlight")
|
||||
|
||||
@@ -57,6 +57,7 @@ datum/preferences/copy_to(mob/living/carbon/human/character, icon_updates = 1)
|
||||
..()
|
||||
character.give_genitals(TRUE)
|
||||
character.flavor_text = features["flavor_text"] //Let's update their flavor_text at least initially
|
||||
character.ooc_text = features["ooc_text"] //Let's update their flavor_text at least initially
|
||||
character.canbearoused = arousable
|
||||
character.client?.prefs.lewdchem = lewdchem
|
||||
if(icon_updates)
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
features["ipc_antenna"] = sanitize_inlist(features["ipc_antenna"], GLOB.ipc_antennas_list)
|
||||
//Citadel
|
||||
features["flavor_text"] = sanitize_text(features["flavor_text"], initial(features["flavor_text"]))
|
||||
features["ooc_text"] = sanitize_text(features["ooc_text"], initial(features["ooc_text"]))
|
||||
if(!features["mcolor2"] || features["mcolor"] == "#000")
|
||||
features["mcolor2"] = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F")
|
||||
if(!features["mcolor3"] || features["mcolor"] == "#000")
|
||||
@@ -84,6 +85,7 @@
|
||||
WRITE_FILE(S["feature_can_get_preg"], features["can_get_preg"])
|
||||
//flavor text
|
||||
WRITE_FILE(S["feature_flavor_text"], features["flavor_text"])
|
||||
WRITE_FILE(S["feature_ooc_text"], features["ooc_text"])
|
||||
//custom job titles
|
||||
WRITE_FILE(S["alt_titles_preferences"], alt_titles_preferences)
|
||||
//belly
|
||||
|
||||
@@ -209,4 +209,26 @@
|
||||
primary_color = "#808080" //RGB in hexcode
|
||||
secondary_color = "#FFFFFF"
|
||||
hastertiary = FALSE
|
||||
body_parts_covered= CHEST|GROIN
|
||||
body_parts_covered= CHEST|GROIN
|
||||
|
||||
/obj/item/clothing/under/polychromic/vsweater
|
||||
name = "virgin killer sweater"
|
||||
desc = "A sweater designed to be as provocative as possible, with almost all of the back missing, bairly hiding anything from that angle. Warning: Doesn't actually kill virgins."
|
||||
icon_state = "vkiller"
|
||||
item_color = "vkiller"
|
||||
item_state = "rainbow"
|
||||
primary_color = "#E1D6C9" //RGB in hexcode
|
||||
secondary_color = "#FFFFFF"
|
||||
hastertiary = FALSE
|
||||
body_parts_covered= CHEST|GROIN
|
||||
|
||||
/obj/item/clothing/under/polychromic/onepeice
|
||||
name = "polychromic swimsuit"
|
||||
desc = "Perfect for summer, and those who want to have something with a bit more material."
|
||||
icon_state = "onepeice"
|
||||
item_color = "onepeice"
|
||||
item_state = "rainbow"
|
||||
primary_color = "#010052" //RGB in hexcode
|
||||
secondary_color = "#eb7a7a"
|
||||
tertiary_color = "#ffffff"
|
||||
body_parts_covered = CHEST|GROIN
|
||||
@@ -1,8 +0,0 @@
|
||||
//This file controls whether or not a job complies with dresscodes.
|
||||
//If a job complies with dresscodes, loadout items will not be equipped instead of the job's outfit, instead placing the items into the player's backpack.
|
||||
|
||||
/datum/job
|
||||
var/dresscodecompliant = TRUE
|
||||
|
||||
/datum/job/assistant
|
||||
dresscodecompliant = FALSE
|
||||
@@ -42,6 +42,12 @@
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/body_markings/gecko
|
||||
name = "Gecko"
|
||||
icon_state = "gecko"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/lizard/guilmon
|
||||
name = "Guilmon"
|
||||
icon_state = "guilmon"
|
||||
@@ -54,6 +60,18 @@
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/lizard/gecko
|
||||
name = "Gecko"
|
||||
icon_state = "gecko"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/lizard/gecko
|
||||
name = "Gecko"
|
||||
icon_state = "gecko"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
//christ this was a mistake, but it's here just in case someone wants to selectively fix
|
||||
/************* Lizard compatable snoots ***********
|
||||
/datum/sprite_accessory/snouts/bird
|
||||
@@ -1018,6 +1036,11 @@ datum/sprite_accessory/ears/human/gret
|
||||
name = "Synthetic Lizard - Spectre"
|
||||
icon_state = "synthlizspectre"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/synthliz/synthlizvenom
|
||||
color_src = MATRIXED
|
||||
name = "Synthetic Lizard - V3/NM"
|
||||
icon_state = "synthlizvenom"
|
||||
|
||||
/******************************************
|
||||
**************** Snouts *******************
|
||||
*************but higher up*****************/
|
||||
@@ -2212,6 +2235,11 @@ datum/sprite_accessory/mam_tails/insect
|
||||
name = "Synthetic Lizard - Cobra Hood"
|
||||
icon_state = "synth_cobrahood"
|
||||
|
||||
/datum/sprite_accessory/antenna/synthliz/synthliz_cobraslim
|
||||
color_src = MATRIXED
|
||||
name = "Synthetic Lizard - Narrow Cobra Hood"
|
||||
icon_state = "synth_cobraslim"
|
||||
|
||||
// *** Snooooow flaaaaake ***
|
||||
|
||||
/datum/sprite_accessory/horns/guilmon
|
||||
|
||||
@@ -19,13 +19,14 @@
|
||||
incomingstammult = max(0.01, incomingstammult/(amount*0.05))
|
||||
return amount
|
||||
|
||||
/*
|
||||
/mob/living/carbon/doSprintLossTiles(tiles)
|
||||
doSprintBufferRegen(FALSE) //first regen.
|
||||
if(sprint_buffer)
|
||||
var/use = min(tiles, sprint_buffer)
|
||||
sprint_buffer -= use
|
||||
tiles -= use
|
||||
update_hud_sprint_bar()
|
||||
// update_hud_sprint_bar()
|
||||
if(!tiles) //we had enough, we're done!
|
||||
return
|
||||
adjustStaminaLoss(tiles * sprint_stamina_cost) //use stamina to cover deficit.
|
||||
@@ -34,5 +35,4 @@
|
||||
var/diff = world.time - sprint_buffer_regen_last
|
||||
sprint_buffer_regen_last = world.time
|
||||
sprint_buffer = min(sprint_buffer_max, sprint_buffer + sprint_buffer_regen_ds * diff)
|
||||
if(updating)
|
||||
update_hud_sprint_bar()
|
||||
*/
|
||||
@@ -20,6 +20,7 @@
|
||||
. += 1
|
||||
. += ..()
|
||||
|
||||
/*
|
||||
/mob/living/carbon/human/proc/togglesprint() // If you call this proc outside of hotkeys or clicking the HUD button, I'll be disappointed in you.
|
||||
sprinting = !sprinting
|
||||
if(!resting && m_intent == MOVE_INTENT_RUN && canmove)
|
||||
@@ -27,11 +28,12 @@
|
||||
playsound_local(src, 'modular_citadel/sound/misc/sprintactivate.ogg', 50, FALSE, pressure_affected = FALSE)
|
||||
else
|
||||
playsound_local(src, 'modular_citadel/sound/misc/sprintdeactivate.ogg', 50, FALSE, pressure_affected = FALSE)
|
||||
if(hud_used && hud_used.static_inventory)
|
||||
for(var/obj/screen/sprintbutton/selector in hud_used.static_inventory)
|
||||
selector.insert_witty_toggle_joke_here(src)
|
||||
// if(hud_used && hud_used.static_inventory)
|
||||
// for(var/obj/screen/sprintbutton/selector in hud_used.static_inventory)
|
||||
// selector.insert_witty_toggle_joke_here(src)
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/human/proc/sprint_hotkey(targetstatus)
|
||||
if(targetstatus ? !sprinting : sprinting)
|
||||
togglesprint()
|
||||
*/
|
||||
@@ -15,7 +15,7 @@
|
||||
. = ..()
|
||||
if(!client || !hud_used)
|
||||
return
|
||||
if(hud_used.staminas)
|
||||
hud_used.staminas.icon_state = staminahudamount()
|
||||
if(hud_used.staminabuffer)
|
||||
hud_used.staminabuffer.icon_state = staminabufferhudamount()
|
||||
// if(hud_used.staminas)
|
||||
// hud_used.staminas.icon_state = staminahudamount()
|
||||
// if(hud_used.staminabuffer)
|
||||
// hud_used.staminabuffer.icon_state = staminabufferhudamount()
|
||||
|
||||
@@ -1,3 +1,2 @@
|
||||
/mob/living/carbon/Life()
|
||||
. = ..()
|
||||
doSprintBufferRegen()
|
||||
. = ..()
|
||||
@@ -127,6 +127,8 @@
|
||||
update_canmove()
|
||||
update_health_hud()
|
||||
|
||||
/*
|
||||
/mob/living/proc/update_hud_sprint_bar()
|
||||
if(hud_used && hud_used.sprint_buffer)
|
||||
hud_used.sprint_buffer.update_to_mob(src)
|
||||
*/
|
||||
@@ -3,15 +3,12 @@
|
||||
|
||||
/mob/living/silicon/robot/Move(NewLoc, direct)
|
||||
. = ..()
|
||||
if(. && sprinting && !(movement_type & FLYING) && canmove && !resting)
|
||||
if(!(cell?.use(25)))
|
||||
togglesprint(TRUE)
|
||||
|
||||
/mob/living/silicon/robot/movement_delay()
|
||||
. = ..()
|
||||
if(!resting && !sprinting)
|
||||
. += 1
|
||||
|
||||
/*
|
||||
/mob/living/silicon/robot/proc/togglesprint(shutdown = FALSE) //Basically a copypaste of the proc from /mob/living/carbon/human
|
||||
if(!shutdown && (!cell || cell.charge < 25))
|
||||
return FALSE
|
||||
@@ -23,11 +20,12 @@
|
||||
if(shutdown)
|
||||
playsound_local(src, 'sound/effects/light_flicker.ogg', 50, FALSE, pressure_affected = FALSE)
|
||||
playsound_local(src, 'modular_citadel/sound/misc/sprintdeactivate.ogg', 50, FALSE, pressure_affected = FALSE)
|
||||
if(hud_used && hud_used.static_inventory)
|
||||
for(var/obj/screen/sprintbutton/selector in hud_used.static_inventory)
|
||||
selector.insert_witty_toggle_joke_here(src)
|
||||
// if(hud_used && hud_used.static_inventory)
|
||||
// for(var/obj/screen/sprintbutton/selector in hud_used.static_inventory)
|
||||
// selector.insert_witty_toggle_joke_here(src)
|
||||
return TRUE
|
||||
|
||||
/mob/living/silicon/robot/proc/sprint_hotkey(targetstatus)
|
||||
if(targetstatus ? !sprinting : sprinting)
|
||||
togglesprint()
|
||||
*/
|
||||
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 72 KiB |