This commit is contained in:
Zuhayr
2015-08-18 12:06:53 -07:00
70 changed files with 3047 additions and 2861 deletions
+1
View File
@@ -130,6 +130,7 @@ var/list/admin_verbs_spawn = list(
/client/proc/spawn_chemdisp_cartridge
)
var/list/admin_verbs_server = list(
/datum/admins/proc/capture_map,
/client/proc/Set_Holiday,
/client/proc/ToRban,
/datum/admins/proc/startnow,
+49
View File
@@ -0,0 +1,49 @@
/datum/admins/proc/capture_map(tx as num, ty as num, tz as num, range as num)
set category = "Server"
set name = "Capture Map Part"
if(!check_rights(R_ADMIN|R_DEBUG|R_SERVER))
return
if(range > 32 || range <= 0)
usr << "Capturing range is incorrect, it must be within 1-32."
return
if(locate(tx,ty,tz))
var/list/turfstocapture = list()
var/hasasked = 0
for(var/xoff = 0 to range)
for(var/yoff = 0 to range)
var/turf/T = locate(tx + xoff,ty + yoff,tz)
if(T)
turfstocapture.Add(T)
else
if(!hasasked)
var/answer = alert("Capture includes non existant turf, Continue capture?","Continue capture?", "No", "Yes")
hasasked = 1
if(answer == "No")
return
var/list/atoms = list()
for(var/turf/T in turfstocapture)
atoms.Add(T)
for(var/atom/A in T)
if(A.invisibility) continue
atoms.Add(A)
atoms = sort_atoms_by_layer(atoms)
var/icon/cap = icon('icons/effects/96x96.dmi', "")
cap.Scale(range*32, range*32)
cap.Blend("#000", ICON_OVERLAY)
for(var/atom/A in atoms)
if(A)
var/icon/img = getFlatIcon(A)
if(istype(img, /icon))
if(istype(A, /mob/living) && A:lying)
img.BecomeLying()
var/xoff = (A.x - tx) * 32
var/yoff = (A.y - ty) * 32
cap.Blend(img, blendMode2iconMode(A.blend_mode), A.pixel_x + xoff, A.pixel_y + yoff)
usr << browse_rsc(cap, "map_capture_x[tx]_y[ty]_z[tz]_r[range].png")
+11 -10
View File
@@ -118,30 +118,31 @@
if(X.key != key && X.key != C.key && (X.holder.rights & R_ADMIN|R_MOD|R_MENTOR))
X << "<span class='pm'><span class='other'>" + create_text_tag("pm_other", "PM:", X) + " <span class='name'>[key_name(src, X, 0)]</span> to <span class='name'>[key_name(C, X, 0)]</span>: <span class='message'>[msg]</span></span></span>"
/client/proc/cmd_admin_irc_pm()
/client/proc/cmd_admin_irc_pm(sender)
if(prefs.muted & MUTE_ADMINHELP)
src << "<font color='red'>Error: Private-Message: You are unable to use PM-s (muted).</font>"
return
var/msg = input(src,"Message:", "Private message to admins on IRC / 400 character limit") as text|null
var/msg = input(src,"Message:", "Reply private message to [sender] on IRC / 400 character limit") as text|null
if(!msg)
return
sanitize(msg)
if(length(msg) > 400) // TODO: if message length is over 400, divide it up into seperate messages, the message length restriction is based on IRC limitations. Probably easier to do this on the bots ends.
src << "\red Your message was not sent because it was more then 400 characters find your message below for ease of copy/pasting"
src << "\blue [msg]"
return
// Handled on Bot32's end, unsure about other bots
// if(length(msg) > 400) // TODO: if message length is over 400, divide it up into seperate messages, the message length restriction is based on IRC limitations. Probably easier to do this on the bots ends.
// src << "<span class='warning'>Your message was not sent because it was more then 400 characters find your message below for ease of copy/pasting</span>"
// src << "<span class='notice'>[msg]</span>"
// return
send2adminirc("PlayerPM from [key_name(src)]: [html_decode(msg)]")
send2adminirc("PlayerPM to [sender] from [key_name(src)]: [html_decode(msg)]")
src << "<span class='pm'><span class='out'>" + create_text_tag("pm_out_alt", "", src) + " to <span class='name'>Admin IRC</span>: <span class='message'>[msg]</span></span></span>"
src << "<span class='pm'><span class='out'>" + create_text_tag("pm_out_alt", "", src) + " to <span class='name'>IRC-[sender]</span>: <span class='message'>[msg]</span></span></span>"
log_admin("PM: [key_name(src)]->IRC: [msg]")
log_admin("PM: [key_name(src)]->IRC-[sender]: [msg]")
for(var/client/X in admins)
if(X == src)
continue
if(X.holder.rights & R_ADMIN|R_MOD)
X << "<span class='pm'><span class='other'>" + create_text_tag("pm_other", "PM:", X) + " <span class='name'>[key_name(src, X, 0)]</span> to <span class='name'>Admin IRC</span>: <span class='message'>[msg]</span></span></span>"
X << "<span class='pm'><span class='other'>" + create_text_tag("pm_other", "PM:", X) + " <span class='name'>[key_name(src, X, 0)]</span> to <span class='name'>IRC-[sender]</span>: <span class='message'>[msg]</span></span></span>"
+1 -1
View File
@@ -52,7 +52,7 @@
if(mute_irc)
usr << "<span class='warning'You cannot use this as your client has been muted from sending messages to the admins on IRC</span>"
return
cmd_admin_irc_pm()
cmd_admin_irc_pm(href_list["irc_msg"])
return
@@ -10,14 +10,14 @@
var/open
var/obj/item/held //Item inside locket.
/obj/item/clothing/accessory/locket/heart
name = "heart-shaped locket"
desc = " A silver, heart-shaped locket. It flips open to reveal two pictures, one of a young red-headed woman and one of a brunette of similar age. Small writing is etched onto the back, reading 'M+L'. Some may regard it as cheesy."
icon_state = "heartlocket"
/obj/item/clothing/accessory/locket/attack_self(mob/user as mob)
if(!base_icon)
base_icon = icon_state
if(!("[base_icon]_open" in icon_states(icon)))
user << "\The [src] doesn't seem to open."
return
open = !open
user << "You flip \the [src] [open?"open":"closed"]."
if(open)
@@ -36,11 +36,11 @@
if(istype(O,/obj/item/weapon/paper) || istype(O, /obj/item/weapon/photo))
if(held)
usr << "[src] already has something inside it."
usr << "\The [src] already has something inside it."
else
usr << "You slip [O] into [src]."
user.drop_item()
O.loc = src
src.held = O
return
..()
..()
+1 -1
View File
@@ -51,7 +51,7 @@ turf: (lighting_turf.dm)
- proc/lighting_clear_overlays():
- Delete (manual GC) all light overlays on this turf, used when changing turf to space
- proc/lighting_build_overlays():
- Create lighting overlays for this turf
- Create lighting overlays for this turf. Called by ChangeTurf in case the turf is being changed to use dynamic lighting.
atom/movable/lighting_overlay: (lighting_overlay.dm)
+39
View File
@@ -246,6 +246,45 @@
effect_turf.Cut(idx, idx + 1)
effect_str.Cut(idx, idx + 1)
//Whoop yet not another copy pasta because speed ~~~~BYOND.
//Calculates and applies lighting for a single turf. This is intended for when a turf switches to
//using dynamic lighting when it was not doing so previously (when constructing a floor on space, for example).
//Assumes the turf is visible and such.
//For the love of god don't call this proc when it's not needed! Lighting artifacts WILL happen!
/datum/light_source/proc/calc_turf(var/turf/T)
var/idx = effect_turf.Find(T)
if(!idx)
return //WHY.
if(T.lighting_overlay)
#if LIGHTING_FALLOFF == 1 // circular
. = (T.lighting_overlay.x - source_turf.x)**2 + (T.lighting_overlay.y - source_turf.y)**2 + LIGHTING_HEIGHT
#if LIGHTING_LAMBERTIAN == 1
. = CLAMP01((1 - CLAMP01(sqrt(.) / light_range)) * (1 / (sqrt(. + 1))))
#else
. = 1 - CLAMP01(sqrt(.) / light_range)
#endif
#elif LIGHTING_FALLOFF == 2 // square
. = abs(T.lighting_overlay.x - source_turf.x) + abs(T.lighting_overlay.y - source_turf.y) + LIGHTING_HEIGHT
#if LIGHTING_LAMBERTIAN == 1
. = CLAMP01((1 - CLAMP01(. / light_range)) * (1 / (sqrt(.)**2 + )))
#else
. = 1 - CLAMP01(. / light_range)
#endif
#endif
. *= light_power
. = round(., LIGHTING_ROUND_VALUE)
effect_str[idx] = .
T.lighting_overlay.update_lumcount(
lum_r * .,
lum_g * .,
lum_b * .
)
#undef LUM_FALLOFF
#undef LUM_DISTANCE
#undef LUM_ATTENUATION
+4
View File
@@ -17,6 +17,10 @@
var/atom/movable/lighting_overlay/O = PoolOrNew(/atom/movable/lighting_overlay, src)
lighting_overlay = O
//Make the light sources recalculate us so the lighting overlay updates immediately
for(var/datum/light_source/L in affecting_lights)
L.calc_turf(src)
/turf/Entered(atom/movable/obj)
. = ..()
if(obj && obj.opacity)
@@ -189,7 +189,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
/mob/dead/observer/Stat()
..()
if(statpanel("Status"))
stat(null, "Station Time: [worldtime2text()]")
if(emergency_shuttle)
var/eta_status = emergency_shuttle.get_status_panel_eta()
if(eta_status)
+3 -1
View File
@@ -97,10 +97,12 @@
..(message, null, verb)
/mob/living/bot/Bump(var/atom/A)
if(istype(A, /obj/machinery/door) && botcard)
if(on && botcard && istype(A, /obj/machinery/door))
var/obj/machinery/door/D = A
if(!istype(D, /obj/machinery/door/firedoor) && !istype(D, /obj/machinery/door/blast) && D.check_access(botcard))
D.open()
else
..()
/mob/living/bot/emag_act(var/remaining_charges, var/mob/user)
return 0
+5
View File
@@ -11,6 +11,11 @@
is_ranged = 1
preparing_arrest_sounds = new()
a_intent = I_HURT
mob_bump_flag = HEAVY
mob_swap_flags = ~HEAVY
mob_push_flags = HEAVY
var/shot_delay = 4
var/last_shot = 0
+1 -1
View File
@@ -30,7 +30,7 @@
var/obj/secbot_listener/listener = null
var/beacon_freq = 1445 // Navigation beacon frequency
var/control_freq = AI_FREQ // Bot control frequency
var/control_freq = BOT_FREQ // Bot control frequency
var/list/path = list()
var/frustration = 0
var/turf/patrol_target = null // This is where we are headed
@@ -82,5 +82,5 @@
var/list/flavor_texts = list()
mob_bump_flag = HUMAN
mob_push_flags = ALLMOBS
mob_swap_flags = ALLMOBS
mob_push_flags = ~HEAVY
mob_swap_flags = ~HEAVY
@@ -135,9 +135,9 @@
)
// Bump vars
var/bump_flag = HUMAN // What are we considered to be when bumped?
var/push_flags = ALLMOBS // What can we push?
var/swap_flags = ALLMOBS // What can we swap place with?
var/bump_flag = HUMAN // What are we considered to be when bumped?
var/push_flags = ~HEAVY // What can we push?
var/swap_flags = ~HEAVY // What can we swap place with?
/datum/species/New()
if(hud_type)
@@ -53,8 +53,8 @@
)
bump_flag = ALIEN
swap_flags = ALLMOBS
push_flags = ALLMOBS ^ ROBOT
swap_flags = ~HEAVY
push_flags = (~HEAVY) ^ ROBOT
var/alien_number = 0
var/caste_name = "creature" // Used to update alien name.
+3 -4
View File
@@ -128,7 +128,6 @@ proc/get_radio_key_from_channel(var/channel)
return verb
/mob/living/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="")
if(client)
if(client.prefs.muted & MUTE_IC)
src << "\red You cannot speak in IC (Muted)."
@@ -167,7 +166,7 @@ proc/get_radio_key_from_channel(var/channel)
// irrespective of distance or anything else.
if(speaking.flags & HIVEMIND)
speaking.broadcast(src,trim(message))
return
return 1
//If we've gotten this far, keep going!
if(speaking.flags & COMMON_VERBS)
verb = say_quote(message)
@@ -188,11 +187,11 @@ proc/get_radio_key_from_channel(var/channel)
verb = handle_s[2]
if(!message || message == "")
return
return 0
var/list/obj/item/used_radios = new
if(handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name))
return
return 1
var/list/handle_v = handle_speech_sound()
var/sound/speech_sound = handle_v[1]
+2
View File
@@ -78,6 +78,8 @@
for(var/datum/ai_law/law in laws.laws_to_state())
can_state = statelaw("[prefix][law.get_index()]. [law.law]")
if(!can_state)
break
if(!can_state)
src << "<span class='danger'>[method]: Unable to state laws. Communication method unavailable.</span>"
@@ -37,4 +37,4 @@
else if(M.stat == 2 && M.client.prefs.toggles & CHAT_GHOSTEARS)
if(M.client) M << "<b>[src]</b> transmits, \"[message]\""
return 1
..(message)
return ..(message, 0)
@@ -10,7 +10,7 @@
mob_bump_flag = ROBOT
mob_swap_flags = ROBOT|MONKEY|SLIME|SIMPLE_ANIMAL
mob_push_flags = ALLMOBS //trundle trundle
mob_push_flags = ~HEAVY //trundle trundle
var/lights_on = 0 // Is our integrated light on?
var/used_power_this_tick = 0
+3
View File
@@ -1,3 +1,6 @@
/mob/living/silicon/say(var/message, var/sanitize = 1)
return ..(sanitize ? sanitize(message) : message)
/mob/living/silicon/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
log_say("[key_name(src)] : [message]")
@@ -151,12 +151,6 @@
/mob/living/silicon/proc/show_malf_ai()
return 0
// this function displays the station time in the status panel
/mob/living/silicon/proc/show_station_time()
stat(null, "Station Time: [worldtime2text()]")
// this function displays the shuttles ETA in the status panel if the shuttle has been called
/mob/living/silicon/proc/show_emergency_shuttle_eta()
if(emergency_shuttle)
@@ -168,7 +162,6 @@
// This adds the basic clock, shuttle recall timer, and malf_ai info to all silicon lifeforms
/mob/living/silicon/Stat()
if(statpanel("Status"))
show_station_time()
show_emergency_shuttle_eta()
show_system_integrity()
show_malf_ai()
+15 -10
View File
@@ -654,16 +654,21 @@
. = (client && client.inactivity < 1200)
if(.)
if(statpanel("Status") && ticker && ticker.current_state != GAME_STATE_PREGAME)
stat("Station Time", worldtime2text())
stat("Round Duration", round_duration())
if(client.holder)
if(statpanel("Status"))
statpanel("Status","Location:","([x], [y], [z])")
statpanel("Status","CPU:","[world.cpu]")
statpanel("Status","Instances:","[world.contents.len]")
if(statpanel("Status") && processScheduler && processScheduler.getIsRunning())
for(var/datum/controller/process/P in processScheduler.processes)
statpanel("Status",P.getStatName(), P.getTickTime())
else
statpanel("Status","processScheduler is not running.")
stat("Location:","([x], [y], [z])")
if(statpanel("Processes"))
stat("CPU:","[world.cpu]")
stat("Instances:","[world.contents.len]")
if(processScheduler && processScheduler.getIsRunning())
for(var/datum/controller/process/P in processScheduler.processes)
stat(P.getStatName(), P.getTickTime())
else
stat("processScheduler is not running.")
if(listed_turf && client)
if(!TurfAdjacent(listed_turf))
@@ -729,7 +734,7 @@
drop_l_hand()
drop_r_hand()
else
density = 1
density = initial(density)
for(var/obj/item/weapon/grab/G in grabbed_by)
if(G.state >= GRAB_AGGRESSIVE)
@@ -1089,4 +1094,4 @@ mob/proc/yank_out_object()
/mob/proc/throw_mode_on()
src.in_throw_mode = 1
if(src.throw_icon)
src.throw_icon.icon_state = "act_throw_on"
src.throw_icon.icon_state = "act_throw_on"
+2 -12
View File
@@ -67,12 +67,7 @@
Stat()
..()
statpanel("Status")
if (client.statpanel == "Status" && ticker)
if (ticker.current_state != GAME_STATE_PREGAME)
stat(null, "Station Time: [worldtime2text()]")
statpanel("Lobby")
if(client.statpanel=="Lobby" && ticker)
if(statpanel("Lobby") && ticker)
if(ticker.hide_mode)
stat("Game Mode:", "Secret")
else
@@ -387,16 +382,11 @@
global_announcer.autosay("A new[rank ? " [rank]" : " visitor" ] [join_message ? join_message : "has arrived on the station"].", "Arrivals Announcement Computer")
proc/LateChoices()
var/mills = world.time // 1/10 of a second, not real milliseconds but whatever
//var/secs = ((mills % 36000) % 600) / 10 //Not really needed, but I'll leave it here for refrence.. or something
var/mins = (mills % 36000) / 600
var/hours = mills / 36000
var/name = client.prefs.be_random_name ? "friend" : client.prefs.real_name
var/dat = "<html><body><center>"
dat += "<b>Welcome, [name].<br></b>"
dat += "Round Duration: [round(hours)]h [round(mins)]m<br>"
dat += "Round Duration: [round_duration()]<br>"
if(emergency_shuttle) //In case Nanotrasen decides reposess CentComm's shuttles.
if(emergency_shuttle.going_to_centcom()) //Shuttle is going to centcomm, not recalled
+1 -1
View File
@@ -51,7 +51,7 @@
return
if(!affects_dead && M.stat == DEAD)
return
if(overdose && (dose > overdose) && (location == CHEM_BLOOD))
if(overdose && (dose > overdose) && (location != CHEM_TOUCH))
overdose(M, alien)
var/removed = metabolism
if(ingest_met && (location == CHEM_INGEST))
+2 -2
View File
@@ -324,8 +324,8 @@ other types of metals and chemistry for reagents).
///////////////////////////////////
/////////Shield Generators/////////
///////////////////////////////////
datum/design/circuit/shield
req_tech = list("bluespace" = 4, "phorontech" = 3)
/datum/design/circuit/shield
req_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 3)
materials = list("$glass" = 2000, "sacid" = 20, "$phoron" = 10000, "$diamond" = 5000, "$gold" = 10000)
/datum/design/item/medical
+2 -2
View File
@@ -46,7 +46,7 @@
for (var/specie in all_species)
var/datum/species/S = all_species[specie]
if(!S.virus_immune)
meat += S.name
meat += S
if(meat.len)
var/num = rand(1,meat.len)
for(var/i=0,i<num,i++)
@@ -270,4 +270,4 @@ proc/virology_letterhead(var/report_name)
if(H.effect.type == type)
return 0
return 1
return 1