Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into BookClub

This commit is contained in:
Aurorablade
2016-08-16 02:23:20 -04:00
740 changed files with 18761 additions and 24292 deletions
+6
View File
@@ -173,6 +173,9 @@
/datum/action/item_action/toggle_mister
name = "Toggle Mister"
/datum/action/item_action/toggle_headphones
name = "Toggle Headphones"
/datum/action/item_action/toggle_helmet_light
name = "Toggle Helmet Light"
@@ -213,6 +216,9 @@
/datum/action/item_action/halt
name = "HALT!"
/datum/action/item_action/selectphrase
name = "Change Phrase"
/datum/action/item_action/hoot
name = "Hoot"
+5 -5
View File
@@ -2,7 +2,7 @@ var/global/datum/repository/air_alarm/air_alarm_repository = new()
/datum/repository/air_alarm/proc/air_alarm_data(var/list/monitored_alarms, var/refresh = 0, var/obj/machinery/alarm/passed_alarm)
var/alarms[0]
var/datum/cache_entry/cache_entry = cache_data
if(!cache_entry)
cache_entry = new/datum/cache_entry
@@ -15,13 +15,13 @@ var/global/datum/repository/air_alarm/air_alarm_repository = new()
alarms[++alarms.len] = passed_alarm.get_nano_data_console()
else
for(var/obj/machinery/alarm/alarm in (monitored_alarms ? monitored_alarms : air_alarms))
if(!monitored_alarms && alarm.z != ZLEVEL_STATION && alarm.z != ZLEVEL_ASTEROID)
if(!monitored_alarms && !is_station_contact(alarm.z))
continue
alarms[++alarms.len] = alarm.get_nano_data_console()
cache_entry.timestamp = world.time //+ 10 SECONDS
cache_entry.data = alarms
cache_entry.data = alarms
return alarms
/datum/repository/air_alarm/proc/update_cache(var/obj/machinery/alarm/alarm)
return air_alarm_data(refresh = 1, passed_alarm = alarm)
return air_alarm_data(refresh = 1, passed_alarm = alarm)
+4 -4
View File
@@ -642,7 +642,7 @@
if(istype(M) && (remaining > MOB_WORK))
//this is necessarily damaging
var/damage = rand(1,5)
to_chat(M, "\red <B>The unloading machine grabs you with a hard metallic claw!</B>")
to_chat(M, "<span class='danger'>The unloading machine grabs you with a hard metallic claw!</span>")
if(M.client)
M.client.eye = master
M.client.perspective = EYE_PERSPECTIVE
@@ -698,7 +698,7 @@
if(remaining > MOB_WORK)
//this is necessarily damaging
var/damage = rand(1,5)
to_chat(M, "\red <B>The unloading machine grabs you with a hard metallic claw!</B>")
to_chat(M, "<span class='danger'>The unloading machine grabs you with a hard metallic claw!</span>")
if(M.client)
M.client.eye = master
M.client.perspective = EYE_PERSPECTIVE
@@ -769,14 +769,14 @@
var/armor_block = M.run_armor_check(affecting, "melee")
playsound(master.loc, "punch", 25, 1, -1)
master.visible_message("\red <B>\The [src] has punched [M]!</B>")
master.visible_message("<span class='danger'>\The [src] has punched [M]!</span>")
if(!master.emagged)
M.apply_damage(damage, STAMINA, affecting, armor_block) // Clean fight
else
M.apply_damage(damage, BRUTE, affecting, armor_block) // Foul! Foooul!
if(damage >= 9)
master.visible_message("\red <B>\The [src] has weakened [M]!</B>")
master.visible_message("<span class='danger'>\The [src] has weakened [M]!</span>")
M.apply_effect(4, WEAKEN, armor_block)
if(!master.emagged)
master.sleep = 1
+27 -26
View File
@@ -24,13 +24,12 @@
body += debug_variable("icon", new/icon(A.icon, A.icon_state, A.dir), 0)
#endif
var/icon/sprite
var/sprite
if(istype(D,/atom))
var/atom/AT = D
if(AT.icon && AT.icon_state)
sprite = new /icon(AT.icon, AT.icon_state)
usr << browse_rsc(sprite, "view_vars_sprite.png")
sprite = 1
title = "[D] (\ref[D]) = [D.type]"
@@ -54,7 +53,7 @@
location.href=alist\[0\].href;
}
}
}catch(err) { }
}catch(err) { }
}
return
}
@@ -75,7 +74,7 @@
return
}
}
}catch(err) { }
}catch(err) { }
}
return
}
@@ -96,7 +95,7 @@
return
}
}
}catch(err) { }
}catch(err) { }
}
return
}
@@ -122,7 +121,7 @@
vars_ol.removeChild(li);
i--;
}
}catch(err) { }
}catch(err) { }
}
}
var lis_new = vars_ol.getElementsByTagName("li");
@@ -162,7 +161,7 @@
body += "<div align='center'><table width='100%'><tr><td width='50%'>"
if(sprite)
body += "<table align='center' width='100%'><tr><td><img src='view_vars_sprite.png'></td><td>"
body += "<table align='center' width='100%'><tr><td>[bicon(D, use_class=0)]</td><td>"
else
body += "<table align='center' width='100%'><tr><td>"
@@ -351,26 +350,18 @@ body
else if(isicon(value))
#ifdef VARSICON
var/icon/I = new/icon(value)
var/rnd = rand(1,10000)
var/rname = "tmp\ref[I][rnd].png"
usr << browse_rsc(I, rname)
html += "[name] = (<span class='value'>[value]</span>) <img class=icon src=\"[rname]\">"
html += "[name] = /icon (<span class='value'>[value]</span>) [bicon(value, use_class=0)]"
#else
html += "[name] = /icon (<span class='value'>[value]</span>)"
#endif
/* else if(istype(value, /image))
else if(istype(value, /image))
#ifdef VARSICON
var/rnd = rand(1, 10000)
var/image/I = value
src << browse_rsc(I.icon, "tmp\ref[value][rnd].png")
html += "[name] = <img src=\"tmp\ref[value][rnd].png\">"
html += "<a href='?_src_=vars;Vars=\ref[value]'>[name] \ref[value]</a> = /image (<span class='value'>[value]</span>) [bicon(value, use_class=0)]"
#else
html += "[name] = /image (<span class='value'>[value]</span>)"
html += "<a href='?_src_=vars;Vars=\ref[value]'>[name] \ref[value]</a> = /image (<span class='value'>[value]</span>)"
#endif
*/
else if(isfile(value))
html += "[name] = <span class='value'>'[value]'</span>"
@@ -388,14 +379,24 @@ body
if(L.len > 0 && !(name == "underlays" || name == "overlays" || name == "vars" || L.len > 500))
// not sure if this is completely right...
if(0) //(L.vars.len > 0)
if(0) //(L.vars.len > 0)
html += "<ol>"
html += "</ol>"
else
html += "<ul>"
// First loop to check for associativity
var/associative = FALSE
for(var/entry in L)
if(!(isnum(entry) || isnull(L[entry])))
associative = TRUE
break
// then we do it again! Except now with knowledge of associativity
var/index = 1
for(var/entry in L)
html += debug_variable(index, L[index], level + 1)
if(associative)
html += debug_variable(entry, L[entry], level + 1)
else
html += debug_variable(index, L[index], level + 1)
index++
html += "</ul>"
@@ -929,7 +930,7 @@ body
to_chat(usr, "Mob doesn't know that language.")
else if(href_list["addverb"])
if(!check_rights(R_DEBUG)) return
if(!check_rights(R_DEBUG)) return
var/mob/living/H = locate(href_list["addverb"])
@@ -961,7 +962,7 @@ body
log_admin("[key_name(usr)] has given [key_name(H)] the verb [verb]")
else if(href_list["remverb"])
if(!check_rights(R_DEBUG)) return
if(!check_rights(R_DEBUG)) return
var/mob/H = locate(href_list["remverb"])
@@ -1059,7 +1060,7 @@ body
var/Text = href_list["adjustDamage"]
var/amount = input("Deal how much damage to mob? (Negative values here heal)","Adjust [Text]loss",0) as num
var/amount = input("Deal how much damage to mob? (Negative values here heal)","Adjust [Text]loss",0) as num
if(!L)
to_chat(usr, "Mob doesn't exist anymore")
+1 -1
View File
@@ -406,7 +406,7 @@ var/list/advance_cures = list(
AD.Refresh()
for(var/mob/living/carbon/human/H in shuffle(living_mob_list))
if(H.z != 1)
if(!is_station_level(H.z))
continue
if(!H.HasDisease(D))
H.ForceContractDisease(D)
@@ -43,11 +43,11 @@ Bonus
return
/datum/symptom/choking/proc/Choke_stage_3_4(mob/living/M, datum/disease/advance/A)
var/get_damage = (sqrt(20+A.totalStageSpeed())/2)+(sqrt(16+A.totalStealth())*1)
var/get_damage = sqrt(21+A.totalStageSpeed()*0.5)+sqrt(16+A.totalStealth())
M.adjustOxyLoss(get_damage)
return 1
/datum/symptom/choking/proc/Choke(mob/living/M, datum/disease/advance/A)
var/get_damage = (sqrt(20+A.totalStageSpeed())/2)+(sqrt(16+A.totalStealth()*5))
var/get_damage = sqrt(21+A.totalStageSpeed()*0.5)+sqrt(16+A.totalStealth()*5)
M.adjustOxyLoss(get_damage)
return 1
@@ -45,9 +45,11 @@ Bonus
if(!parts.len)
return
M.heal_overall_damage(get_damage, get_damage)
for(var/obj/item/organ/external/E in parts)
E.heal_damage(get_damage, get_damage, 0, 0)
M.adjustToxLoss(get_damage*parts.len)
else
if(M.getFireLoss() > 0 || M.getBruteLoss() > 0)
M.adjustFireLoss(-get_damage)
@@ -21,7 +21,7 @@ Bonus
resistance = -4
stage_speed = -4
transmittable = -3
level = 6
level = 5
severity = 0
/datum/symptom/sensory_restoration/Activate(var/datum/disease/advance/A)
@@ -38,12 +38,12 @@ Bonus
M.reagents.add_reagent_list(list("antihol"=10, "oculine"=10))
to_chat(M, "<span class='notice'>You feel sober.</span>")
if(4)
if(M.reagents.get_reagent_amount("antihol") < 10 && M.reagents.get_reagent_amount("oculine") < 10 && M.reagents.get_reagent_amount("synaptizine") < 10)
M.reagents.add_reagent_list(list("antihol"=10, "oculine"=10, "synaptizine"=5))
if(M.reagents.get_reagent_amount("antihol") < 10 && M.reagents.get_reagent_amount("oculine") < 10 && M.reagents.get_reagent_amount("synaphydramine") < 10)
M.reagents.add_reagent_list(list("antihol"=10, "oculine"=10, "synaphydramine"=5))
to_chat(M, "<span class='notice'>You feel focused.</span>")
if(5)
if(M.reagents.get_reagent_amount("antihol") < 10 && M.reagents.get_reagent_amount("oculine") < 10 && M.reagents.get_reagent_amount("synaptizine") < 10 && M.reagents.get_reagent_amount("mannitol") < 10)
M.reagents.add_reagent_list(list("mannitol"=10, "antihol"=10, "oculine"=10, "synaptizine"=10))
if(M.reagents.get_reagent_amount("antihol") < 10 && M.reagents.get_reagent_amount("oculine") < 10 && M.reagents.get_reagent_amount("synaphydramine") < 10 && M.reagents.get_reagent_amount("mannitol") < 10)
M.reagents.add_reagent_list(list("mannitol"=10, "antihol"=10, "oculine"=10, "synaphydramine"=10))
to_chat(M, "<span class='notice'>Your mind feels relaxed.</span>")
return
+2 -2
View File
@@ -48,7 +48,7 @@
// This system will metaphorically snap in half (not postpone init everywhere)
// if given a multi-z template
// it might need to be adapted for that when that time comes
zlevels.add_dirt(placement.z)
space_manager.add_dirt(placement.z)
var/list/bounds = maploader.load_map(get_file(), min_x, min_y, placement.z, cropMap = 1)
if(!bounds)
return 0
@@ -65,7 +65,7 @@
late_setup_level(
block(bot_left, top_right),
block(ST_bot_left, ST_top_right))
zlevels.remove_dirt(placement.z)
space_manager.remove_dirt(placement.z)
log_game("[name] loaded at [min_x],[min_y],[placement.z]")
return 1
+6 -10
View File
@@ -67,9 +67,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
caster.reset_view(0)
return 0
if(user.z == ZLEVEL_CENTCOMM && !centcom_cancast) //Certain spells are not allowed on the centcom zlevel
return 0
if(user.z == ZLEVEL_CENTCOMM && ticker.mode.name == "ragin' mages")
if(is_admin_level(user.z) && (!centcom_cancast || ticker.mode.name == "ragin' mages")) //Certain spells are not allowed on the centcom zlevel
return 0
if(!skipcharge)
@@ -363,9 +361,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
if(((!user.mind) || !(src in user.mind.spell_list)) && !(src in user.mob_spell_list))
return 0
if(user.z == ZLEVEL_CENTCOMM && !centcom_cancast) //Certain spells are not allowed on the centcom zlevel
return 0
if(user.z == ZLEVEL_CENTCOMM && ticker.mode.name == "ragin' mages")
if(is_admin_level(user.z) && (!centcom_cancast || ticker.mode.name == "ragin' mages")) //Certain spells are not allowed on the centcom zlevel
return 0
switch(charge_type)
@@ -386,9 +382,9 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
if((invocation_type == "whisper" || invocation_type == "shout") && H.is_muzzled())
return 0
var/obj/effect/proc_holder/spell/noclothes/clothcheck = locate() in user.mob_spell_list
var/obj/effect/proc_holder/spell/noclothes/clothcheck2 = locate() in user.mind.spell_list
if(clothes_req && !(clothcheck && istype(clothcheck)) && !(clothcheck2 && istype(clothcheck2)))//clothes check
var/clothcheck = locate(/obj/effect/proc_holder/spell/noclothes) in user.mob_spell_list
var/clothcheck2 = user.mind && (locate(/obj/effect/proc_holder/spell/noclothes) in user.mind.spell_list)
if(clothes_req && !clothcheck && !clothcheck2) //clothes check
if(!istype(H.wear_suit, /obj/item/clothing/suit/wizrobe) && !istype(H.wear_suit, /obj/item/clothing/suit/space/rig/wizard))
return 0
if(!istype(H.shoes, /obj/item/clothing/shoes/sandal))
@@ -400,4 +396,4 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
return 0
if(isbrain(user) || ispAI(user))
return 0
return 1
return 1
+1
View File
@@ -98,6 +98,7 @@
var/canmove = 1
density = 0
anchored = 1
burn_state = LAVA_PROOF
/obj/effect/dummy/spell_jaunt/Destroy()
// Eject contents if deleted somehow
+2 -2
View File
@@ -12,7 +12,6 @@
range = 7
cooldown_min = 30 //30 deciseconds reduction per rank
selection_type = "range"
var/list/compatible_mobs = list(/mob/living/carbon/human)
action_icon_state = "barn"
@@ -26,7 +25,8 @@
if(!target)
return
if((target.type in compatible_mobs) || ishuman(target))
if(!ishuman(target))
to_chat(user, "<span class='notice'>It'd be stupid to curse [target] with a horse's head!</span>")
return
+24 -2
View File
@@ -309,6 +309,14 @@ var/list/uplink_items = list()
item = /obj/item/clothing/under/contortionist
cost = 6
job = list("Life Support Specialist")
/datum/uplink_item/dangerous/energizedfireaxe
name = "Energized Fire Axe"
desc = "A fire axe with a massive electrical charge built into it. It can release this charge on its first victim and will be rather plain after that."
reference = "EFA"
item = /obj/item/weapon/twohanded/energizedfireaxe
cost = 10
job = list("Life Support Specialist")
//Stimulants
@@ -462,6 +470,13 @@ var/list/uplink_items = list()
gamemodes = list(/datum/game_mode/nuclear)
surplus = 0
/datum/uplink_item/dangerous/atmosgrenades
name = "Atmos Grenades"
desc = "A box of two (2) grenades that wreak havoc with the atmosphere of the target area. Capable of engulfing a large area in lit plasma, or N2O. Deploy with extreme caution!"
reference = "AGG"
item = /obj/item/weapon/storage/box/syndie_kit/atmosgasgrenades
cost = 6
/datum/uplink_item/dangerous/emp
name = "EMP Grenades and Implanter Kit"
desc = "A box that contains two EMP grenades and an EMP implant. Useful to disrupt communication, \
@@ -768,6 +783,13 @@ var/list/uplink_items = list()
reference = "CHHUD"
item = /obj/item/clothing/glasses/hud/security/chameleon
cost = 2
/datum/uplink_item/stealthy_weapons/chameleonflag
name = "Chameleon Flag"
desc = "A flag that can be disguised as any other known flag. There is a heat sensitive bomb loaded into the pole that will be detonated if the flag is lit on fire."
reference = "CHFLAG"
item = /obj/item/flag/chameleon
cost = 7
// STEALTHY TOOLS
@@ -879,8 +901,8 @@ var/list/uplink_items = list()
cost = 1
/datum/uplink_item/device_tools/surgerybag
name = "Syndicate Surgery Dufflebag"
desc = "The Syndicate surgery dufflebag is a toolkit containing all surgery tools, a straitjacket, and a muzzle."
name = "Syndicate Surgery Duffelbag"
desc = "The Syndicate surgery duffelbag is a toolkit containing all surgery tools, a straitjacket, and a muzzle."
reference = "SSDB"
item = /obj/item/weapon/storage/backpack/duffel/syndie/surgery
cost = 4
+6 -6
View File
@@ -28,7 +28,7 @@
var/area_type = /area/space //Types of area to affect
var/list/impacted_areas = list() //Areas to be affected by the weather, calculated when the weather begins
var/target_z = ZLEVEL_STATION //The z-level to affect
var/target_level = MAIN_STATION //The z-level to affect
var/overlay_layer = 10 //Since it's above everything else, this is the layer used by default. 2 is below mobs and walls if you need to use that.
var/aesthetic = FALSE //If the weather has no purpose other than looks
@@ -52,13 +52,13 @@
stage = STARTUP_STAGE
for(var/V in get_areas(area_type))
var/area/A = V
if(A.z == target_z)
if(is_on_level_name(A,target_level))
impacted_areas |= A
weather_duration = rand(weather_duration_lower, weather_duration_upper)
update_areas()
for(var/V in player_list)
var/mob/M = V
if(M.z == target_z)
if(is_on_level_name(M,target_level))
if(telegraph_message)
to_chat(M, telegraph_message)
if(telegraph_sound)
@@ -72,7 +72,7 @@
update_areas()
for(var/V in player_list)
var/mob/M = V
if(M.z == target_z)
if(is_on_level_name(M,target_level))
if(weather_message)
to_chat(M, weather_message)
if(weather_sound)
@@ -87,7 +87,7 @@
update_areas()
for(var/V in player_list)
var/mob/M = V
if(M.z == target_z)
if(is_on_level_name(M,target_level))
if(end_message)
to_chat(M, end_message)
if(end_sound)
@@ -102,7 +102,7 @@
update_areas()
/datum/weather/proc/can_impact(mob/living/L) //Can this weather impact a mob?
if(L.z != target_z)
if(!is_on_level_name(L,target_level))
return
if(immunity_type in L.weather_immunities)
return
+3 -3
View File
@@ -16,7 +16,7 @@
end_duration = 0
area_type = /area
target_z = ZLEVEL_STATION
target_level = MAIN_STATION
overlay_layer = 2 //Covers floors only
immunity_type = "lava"
@@ -50,7 +50,7 @@
end_duration = 0
area_type = /area
target_z = ZLEVEL_STATION
target_level = MAIN_STATION
/datum/weather/advanced_darkness/update_areas()
for(var/V in impacted_areas)
@@ -87,7 +87,7 @@
end_overlay = "light_ash"
area_type = /area/mine
target_z = ZLEVEL_ASTEROID
target_level = MINING
immunity_type = "ash"