Hyperstation RP beta 0.1 and alot of bug fixes.

This commit is contained in:
QuoteFox
2021-03-20 12:36:02 +00:00
parent 42b1d15981
commit 706ee6d3eb
70 changed files with 207 additions and 119 deletions
+2
View File
@@ -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)
+4 -1
View File
@@ -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)
+1 -1
View File
@@ -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)
+3
View File
@@ -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)
+7 -7
View File
@@ -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()
+1
View File
@@ -3,6 +3,7 @@ SUBSYSTEM_DEF(mobs)
priority = FIRE_PRIORITY_MOBS
flags = SS_KEEP_TIMING | SS_NO_INIT
runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
wait = 5
var/list/currentrun = list()
var/static/list/clients_by_zlevel[][]
+1 -1
View File
@@ -35,7 +35,7 @@
e -= 5
steps++
if(steps >= 3)
if(steps >= 2)
steps = 0
else
+3 -3
View File
@@ -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)
+4 -2
View File
@@ -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
+2
View File
@@ -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
+1
View File
@@ -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])
+3
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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)
+25 -7
View File
@@ -180,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
@@ -383,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"]))
@@ -392,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>"
@@ -1695,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)
@@ -2532,14 +2550,14 @@ 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)
if(S)
S["special_roles"] >> be_special
if("copy_antag_to_chars")
if(path)
var/savefile/S = new /savefile(path)
@@ -2553,7 +2571,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
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()
+9 -1
View File
@@ -428,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.
@@ -436,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)
@@ -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 ..()
@@ -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>[replacetext(sanitize(html_decode(flavor_text)), "#", "<p>")]"
if(ooc_text)
output += "<br><br><i><b>OOC</b>"
output += "<br>[replacetext(sanitize(html_decode(ooc_text)), "#", "<p>")]"
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
+1 -1
View File
@@ -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 ? -3 : -2) : -1.5)//CIT CHANGE - decreases adjuststaminaloss to stop stamina damage from being such a joke
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
+1
View File
@@ -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///////
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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]))
+1 -1
View File
@@ -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
+4 -4
View File
@@ -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)
+2 -2
View File
@@ -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)))
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+42 -1
View File
@@ -274,6 +274,7 @@ 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 href_token = null;
var spells = [];
var spell_tabs = [];
@@ -570,11 +571,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 +687,22 @@ function draw_mc() {
}
document.getElementById("statcontent").appendChild(table);
}
function update_examine(html) {
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 +748,28 @@ 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");
}
function update_mobexamine(TC) {
turfcontents = JSON.parse(TC);
if(current_tab == "Examine")
draw_listedturf();
}
//turf
function create_listedturf(TN) {
remove_listedturf(); // remove the last one if we had one
turfname = JSON.parse(TN);
+1 -1
View File
@@ -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)
Binary file not shown.

Before

Width:  |  Height:  |  Size: 211 B

After

Width:  |  Height:  |  Size: 182 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

+2 -1
View File
@@ -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"
*/
@@ -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
@@ -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()
. = ..()
@@ -19,7 +19,7 @@
/mob/living/movement_delay(ignorewalk = 0)
. = ..()
if(resting)
. += 6
. += 3
/atom
var/pseudo_z_axis
@@ -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()
*/
Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

+1
View File
@@ -1210,6 +1210,7 @@
#include "code\modules\admin\verbs\SDQL2\SDQL_2.dm"
#include "code\modules\admin\verbs\SDQL2\SDQL_2_parser.dm"
#include "code\modules\admin\verbs\SDQL2\SDQL_2_wrappers.dm"
#include "code\modules\admin\view_variables\debug_variables.dm"
#include "code\modules\antagonists\_common\antag_datum.dm"
#include "code\modules\antagonists\_common\antag_helpers.dm"
#include "code\modules\antagonists\_common\antag_hud.dm"