Merge remote-tracking branch 'upstream/master' into night_shift

# Conflicts:
#	code/world.dm
This commit is contained in:
tigercat2000
2018-04-02 17:24:36 -07:00
35 changed files with 473 additions and 93 deletions
+6 -1
View File
@@ -13,6 +13,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
var/emergencyCallTime = 6000 //time taken for emergency shuttle to reach the station when called (in deciseconds)
var/emergencyDockTime = 1800 //time taken for emergency shuttle to leave again once it has docked (in deciseconds)
var/emergencyEscapeTime = 1200 //time taken for emergency shuttle to reach a safe distance after leaving station (in deciseconds)
var/emergency_sec_level_time = 0 // time sec level was last raised to red or higher
var/area/emergencyLastCallLoc
var/emergencyNoEscape
@@ -134,7 +135,11 @@ DECLARE_GLOBAL_CONTROLLER(shuttle, shuttle_master)
var/area/signal_origin = get_area(user)
var/emergency_reason = "\nNature of emergency:\n\n[call_reason]"
if(seclevel2num(get_security_level()) >= SEC_LEVEL_RED) // There is a serious threat we gotta move no time to give them five minutes.
emergency.request(null, 0.5, signal_origin, html_decode(emergency_reason), 1)
var/extra_minutes = 0
var/priority_time = emergencyCallTime * 0.5
if(world.time - emergency_sec_level_time < priority_time)
extra_minutes = 5
emergency.request(null, 0.5 + extra_minutes / (emergencyCallTime / 600), signal_origin, html_decode(emergency_reason), 1)
else
emergency.request(null, 1, signal_origin, html_decode(emergency_reason), 0)
+95
View File
@@ -0,0 +1,95 @@
/datum/disease/kingstons
name = "Kingstons Syndrome"
max_stages = 4
spread_text = "Airborne"
cure_text = "Milk"
cures = list("milk")
cure_chance = 50
agent = "Nya Virus"
viable_mobtypes = list(/mob/living/carbon/human)
permeability_mod = 0.75
desc = "If left untreated the subject will turn into a feline. In felines it has... OTHER... effects."
severity = DANGEROUS
/datum/disease/kingstons/stage_act()
..()
switch(stage)
if(1)
if(prob(10))
if(affected_mob.get_species() == "Tajaran")
to_chat(affected_mob, "<span class='notice'>You feel good.</span>")
else
to_chat(affected_mob, "<span class='notice'>You feel like playing with string.</span>")
if(2)
if(prob(10))
if(affected_mob.get_species() == "Tajaran")
to_chat(affected_mob, "<span class='danger'>Something in your throat itches.</span>")
else
to_chat(affected_mob, "<span class='danger'>You NEED to find a mouse.</span>")
if(3)
if(prob(10))
if(affected_mob.get_species() == "Tajaran")
to_chat(affected_mob, "<span class='danger'>You feel something in your throat!</span>")
affected_mob.emote("cough")
else
affected_mob.say(pick(list("Mew", "Meow!", "Nya!~")))
if(4)
if(prob(5))
if(affected_mob.get_species() == "Tajaran")
affected_mob.visible_message("<span class='danger'>[affected_mob] coughs up a hairball!</span>", \
"<span class='userdanger'>You cough up a hairball!</span>")
affected_mob.Stun(5)
else
affected_mob.visible_message("<span class='danger'>[affected_mob]'s form contorts into something more feline!</span>", \
"<span class='userdanger'>YOU TURN INTO A TAJARAN!</span>")
var/mob/living/carbon/human/catface = affected_mob
catface.set_species("Tajaran")
/datum/disease/kingstons/advanced
name = "Advanced Kingstons Syndrome"
spread_text = "Airborne"
cure_text = "Plasma"
cures = list("plasma")
cure_chance = 50
agent = "AMB45DR Bacteria"
viable_mobtypes = list(/mob/living/carbon/human)
permeability_mod = 0.75
desc = "If left untreated the subject will mutate to a different species."
severity = BIOHAZARD
var/list/virspecies = list("Human", "Tajaran", "Unathi", "Skrell", "Vulpkanin")//no karma races sorrys.
var/list/virsuffix = list("pox", "rot", "flu", "cough", "-gitis", "cold", "rash", "itch", "decay")
var/chosentype
var/chosensuff
/datum/disease/kingstons/advanced/New()
chosentype = pick(virspecies)
chosensuff = pick(virsuffix)
name = "[chosentype] [chosensuff]"
/datum/disease/kingstons/advanced/stage_act()
..()
switch(stage)
if(1)
if(prob(10))
to_chat(affected_mob, "<span class='notice'>You feel awkward.</span>")
if(2)
if(prob(10))
to_chat(affected_mob, "<span class='danger'>You itch.</span>")
if(3)
if(prob(10))
to_chat(affected_mob, "<span class='danger'>Your skin starts to flake!</span>")
if(4)
if(prob(5))
if(affected_mob.get_species() != chosentype)
affected_mob.visible_message("<span class='danger'>[affected_mob]'s skin splits and form contorts!</span>", \
"<span class='userdanger'>Your body mutates into a [chosentype]!</span>")
var/mob/living/carbon/human/twisted = affected_mob
twisted.set_species(chosentype)
else
affected_mob.visible_message("<span class='danger'>[affected_mob] scratches at thier skin!</span>", \
"<span class='userdanger'>You scratch your skin to try not to itch!</span>")
affected_mob.adjustBruteLoss(-5)
affected_mob.adjustStaminaLoss(5)
+45
View File
@@ -0,0 +1,45 @@
/datum/disease/lycan
name = "Lycancoughy"
form = "Infection"
max_stages = 4
spread_text = "On contact"
spread_flags = CONTACT_GENERAL
cure_text = "Ethanol"
cures = list("ethanol")
agent = "Excess Snuggles"
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/human/monkey)
desc = "If left untreated subject will regurgitate... puppies."
severity = MEDIUM
/datum/disease/lycan/stage_act()
..()
switch(stage)
if(2) //also changes say, see say.dm
if(prob(5))
to_chat(affected_mob, "<span class='notice'>You itch.</span>")
affected_mob.emote("cough")
if(3)
if(prob(10))
to_chat(affected_mob, "<span class='notice'>You hear faint barking.</span>")
if(prob(5))
to_chat(affected_mob, "<span class='notice'>You crave meat.</span>")
affected_mob.emote("cough")
if(prob(2))
to_chat(affected_mob, "<span class='danger'>Your stomach growls!</span>")
if(4)
if(prob(10))
to_chat(affected_mob, "<span class='danger'>Your stomach barks?!</span>")
if(prob(5))
affected_mob.visible_message("<span class='danger'>[affected_mob] howls!</span>", \
"<span class='userdanger'>You howl!</span>")
affected_mob.AdjustConfused(rand(6, 8))
if(prob(3))
var/list/puppytype = list(/mob/living/simple_animal/pet/corgi/puppy, /mob/living/simple_animal/pet/pug, /mob/living/simple_animal/pet/fox)
var/mob/living/puppypicked = pick(puppytype)
affected_mob.visible_message("<span class='danger'>[affected_mob] coughs up [initial(puppypicked.name)]!</span>", \
"<span class='userdanger'>You cough up [initial(puppypicked.name)]?!</span>")
affected_mob.emote("cough")
affected_mob.adjustBruteLoss(5)
new puppypicked(affected_mob.loc)
new puppypicked(affected_mob.loc)
return
+35
View File
@@ -26,3 +26,38 @@
if(4)
if(prob(5))
affected_mob.say( pick( list("HONK!", "Honk!", "Honk.", "Honk?", "Honk!!", "Honk?!", "Honk...") ) )
/datum/disease/pierrot_throat/advanced
name = "Advanced Pierrot's Throat"
spread_text = "Airborne"
cure_text = "Banana products, especially banana bread."
cures = list("banana")
cure_chance = 75
agent = "H0NI<42.B4n4 Virus"
viable_mobtypes = list(/mob/living/carbon/human)
permeability_mod = 0.75
desc = "If left untreated the subject will probably drive others to insanity and go insane themselves."
severity = DANGEROUS
/datum/disease/pierrot_throat/advanced/stage_act()
..()
switch(stage)
if(1)
if(prob(10))
to_chat(affected_mob, "<span class='danger'>You feel very silly.</span>")
if(prob(5))
to_chat(affected_mob, "<span class='danger'>You feel like making a joke.</span>")
if(2)
if(prob(10))
to_chat(affected_mob, "<span class='danger'>You don't just start seeing rainbows... YOU ARE RAINBOWS!</span>")
if(3)
if(prob(10))
to_chat(affected_mob, "<span class='danger'>Your thoughts are interrupted by a loud <b>HONK!</b></span>")
affected_mob << 'sound/items/AirHorn.ogg'
if(4)
if(prob(5))
affected_mob.say( pick( list("HONK!", "Honk!", "Honk.", "Honk?", "Honk!!", "Honk?!", "Honk...") ) )
if(!istype(affected_mob.wear_mask, /obj/item/clothing/mask/gas/virusclown_hat))
affected_mob.equip_to_slot(new /obj/item/clothing/mask/gas/virusclown_hat(src), slot_wear_mask)
+9
View File
@@ -388,6 +388,15 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
containertype = /obj/structure/closet/crate/secure/plasma
containername = "energy gun crate"
/datum/supply_packs/security/armory/epistol // costs 3/5ths of the normal e-guns for 3/4ths the total ammo, making it cheaper to arm more people, but less convient for any one person
name = "Energy Pistol Crate"
contains = list(/obj/item/weapon/gun/energy/gun/mini,
/obj/item/weapon/gun/energy/gun/mini,
/obj/item/weapon/gun/energy/gun/mini)
cost = 15
containertype = /obj/structure/closet/crate/secure/plasma
containername = "energy gun crate"
/datum/supply_packs/security/armory/eweapons
name = "Incendiary Weapons Crate"
contains = list(/obj/item/weapon/flamethrower/full,
+3 -3
View File
@@ -53,15 +53,15 @@
return cameras
/area/proc/atmosalert(danger_level, var/alarm_source)
/area/proc/atmosalert(danger_level, var/alarm_source, var/force = FALSE)
if(danger_level == ATMOS_ALARM_NONE)
atmosphere_alarm.clearAlarm(src, alarm_source)
else
atmosphere_alarm.triggerAlarm(src, alarm_source, severity = danger_level)
//Check all the alarms before lowering atmosalm. Raising is perfectly fine.
//Check all the alarms before lowering atmosalm. Raising is perfectly fine. If force = 1 we don't care.
for(var/obj/machinery/alarm/AA in src)
if(!(AA.stat & (NOPOWER|BROKEN)) && !AA.shorted && AA.report_danger_level)
if(!(AA.stat & (NOPOWER|BROKEN)) && !AA.shorted && AA.report_danger_level && !force)
danger_level = max(danger_level, AA.danger_level)
if(danger_level != atmosalm)
+5 -4
View File
@@ -281,10 +281,11 @@
// Get a list of all the people who want to be the antagonist for this round, except those with incompatible species
for(var/mob/new_player/player in players)
if((role in player.client.prefs.be_special) && !(player.client.prefs.species in protected_species))
player_draft_log += "[player.key] had [roletext] enabled, so we are drafting them."
candidates += player.mind
players -= player
if(!player.skip_antag)
if((role in player.client.prefs.be_special) && !(player.client.prefs.species in protected_species))
player_draft_log += "[player.key] had [roletext] enabled, so we are drafting them."
candidates += player.mind
players -= player
// If we don't have enough antags, draft people who voted for the round.
if(candidates.len < recommended_enemies)
+1 -1
View File
@@ -922,7 +922,7 @@
return 1
if(href_list["atmos_reset"])
if(alarm_area.atmosalert(ATMOS_ALARM_NONE, src))
if(alarm_area.atmosalert(ATMOS_ALARM_NONE, src, TRUE))
apply_danger_level(ATMOS_ALARM_NONE)
alarmActivated = 0
update_icon()
+4 -1
View File
@@ -100,7 +100,10 @@
if(drownee.losebreath > 20) //You've probably got bigger problems than drowning at this point, so we won't add to it until you get that under control.
return
add_logs(src, drownee, "drowned", null, null, 0) //log it to their VV, but don't spam the admins' chats with the logs
if(isLivingSSD(drownee))
add_logs(src, drownee, "drowned", null, null, 0, 1) // Notify admins, since the person is SSD
else
add_logs(src, drownee, "drowned", null, null, 0, 0) // Do not notify admins.
if(drownee.stat) //Mob is in critical.
drownee.AdjustLoseBreath(3, bound_lower = 0, bound_upper = 20)
drownee.visible_message("<span class='danger'>\The [drownee] appears to be drowning!</span>","<span class='userdanger'>You're quickly drowning!</span>") //inform them that they are fucked.
+3 -3
View File
@@ -187,16 +187,16 @@ RCD
if(!proximity) return
if(istype(A,/area/shuttle)||istype(A,/turf/space/transit))
return 0
if(!(istype(A, /turf) || istype(A, /obj/machinery/door/airlock) || istype(A, /obj/structure/grille) || istype(A, /obj/structure/window)))
if(!(istype(A, /turf) || istype(A, /obj/machinery/door/airlock) || istype(A, /obj/structure/grille) || istype(A, /obj/structure/window) || istype(A, /obj/structure/lattice)))
return 0
switch(mode)
if(1)
if(istype(A, /turf/space))
if(istype(A, /turf/space) || istype(A, /obj/structure/lattice))
if(useResource(1, user))
to_chat(user, "Building Floor...")
activate()
var/turf/AT = A
var/turf/AT = get_turf(A)
AT.ChangeTurf(/turf/simulated/floor/plating)
return 1
return 0
@@ -111,23 +111,23 @@
payload_name = "lubricant"
stage = 2
New()
..()
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
B1.reagents.add_reagent("lube",50)
beakers += B1
/obj/item/weapon/grenade/chem_grenade/lube/remote
New()
..()
CreateDefaultTrigger(/obj/item/device/assembly/signaler)
/obj/item/weapon/grenade/chem_grenade/lube/prox
New()
..()
CreateDefaultTrigger(/obj/item/device/assembly/prox_sensor)
/obj/item/weapon/grenade/chem_grenade/lube/tripwire
New()
..()
CreateDefaultTrigger(/obj/item/device/assembly/infra)
/obj/item/weapon/grenade/chem_grenade/lube/New()
..()
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
B1.reagents.add_reagent("lube",50)
beakers += B1
/obj/item/weapon/grenade/chem_grenade/lube/remote/New()
..()
CreateDefaultTrigger(/obj/item/device/assembly/signaler)
/obj/item/weapon/grenade/chem_grenade/lube/prox/New()
..()
CreateDefaultTrigger(/obj/item/device/assembly/prox_sensor)
/obj/item/weapon/grenade/chem_grenade/lube/tripwire/New()
..()
CreateDefaultTrigger(/obj/item/device/assembly/infra)
// Basic explosion grenade
@@ -135,32 +135,68 @@
payload_name = "conventional"
stage = 2
New()
..()
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
B1.reagents.add_reagent("glycerol",30) // todo: someone says NG is overpowered, test.
B1.reagents.add_reagent("sacid",15)
B2.reagents.add_reagent("sacid",15)
B2.reagents.add_reagent("facid",30)
beakers += B1
beakers += B2
/obj/item/weapon/grenade/chem_grenade/explosion/New()
..()
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
B1.reagents.add_reagent("glycerol",30) // todo: someone says NG is overpowered, test.
B1.reagents.add_reagent("sacid",15)
B2.reagents.add_reagent("sacid",15)
B2.reagents.add_reagent("facid",30)
beakers += B1
beakers += B2
// Assembly Variants
/obj/item/weapon/grenade/chem_grenade/explosion/remote
New()
..()
CreateDefaultTrigger(/obj/item/device/assembly/signaler)
/obj/item/weapon/grenade/chem_grenade/explosion/remote/New()
..()
CreateDefaultTrigger(/obj/item/device/assembly/signaler)
/obj/item/weapon/grenade/chem_grenade/explosion/prox/New()
..()
CreateDefaultTrigger(/obj/item/device/assembly/prox_sensor)
/obj/item/weapon/grenade/chem_grenade/explosion/mine/New()
..()
CreateDefaultTrigger(/obj/item/device/assembly/mousetrap)
// Water + Potassium = Boom
/obj/item/weapon/grenade/chem_grenade/waterpotassium
payload_name = "chem explosive"
stage = 2
/obj/item/weapon/grenade/chem_grenade/waterpotassium/New()
..()
var/obj/item/weapon/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/large/B2 = new(src)
B1.reagents.add_reagent("water",100)
B2.reagents.add_reagent("potassium",100)
beakers += B1
beakers += B2
/obj/item/weapon/grenade/chem_grenade/waterpotassium/remote/New()
..()
CreateDefaultTrigger(/obj/item/device/assembly/signaler)
/obj/item/weapon/grenade/chem_grenade/waterpotassium/prox/New()
..()
CreateDefaultTrigger(/obj/item/device/assembly/prox_sensor)
/obj/item/weapon/grenade/chem_grenade/waterpotassium/tripwire/New()
..()
CreateDefaultTrigger(/obj/item/device/assembly/infra)
/obj/item/weapon/grenade/chem_grenade/waterpotassium/tripwire_armed/New()
..()
CreateDefaultTrigger(/obj/item/device/assembly/infra/armed)
/obj/item/weapon/grenade/chem_grenade/waterpotassium/tripwire_armed_stealth/New()
..()
CreateDefaultTrigger(/obj/item/device/assembly/infra/armed/stealth)
/obj/item/weapon/grenade/chem_grenade/explosion/prox
New()
..()
CreateDefaultTrigger(/obj/item/device/assembly/prox_sensor)
/obj/item/weapon/grenade/chem_grenade/explosion/mine
New()
..()
CreateDefaultTrigger(/obj/item/device/assembly/mousetrap)
// Basic EMP grenade
/obj/item/weapon/grenade/chem_grenade/emp
@@ -53,7 +53,7 @@
new /obj/item/weapon/storage/box/ids(src)
new /obj/item/weapon/storage/box/PDAs(src)
new /obj/item/clothing/suit/armor/vest(src)
new /obj/item/weapon/gun/energy/gun(src)
new /obj/item/weapon/gun/energy/gun/mini(src)
new /obj/item/device/flash(src)
new /obj/item/clothing/accessory/petcollar(src)
new /obj/item/weapon/door_remote/civillian(src)
+1
View File
@@ -3,6 +3,7 @@
hub = "Exadv1.spacestation13"
hub_password = "kMZy3U5jJHSiBQjr"
name = "Space Station 13"
/var/hub_password_base = "kMZy3U5jJHSiBQjr"
/* This is for any host that would like their server to appear on the main SS13 hub.
To use it, simply replace the password above, with the password found below, and it should work.
If not, let us know on the main tgstation IRC channel of irc.rizon.net #tgstation13 we can help you there.
+51 -28
View File
@@ -7,12 +7,16 @@
bomb_name = "tripwire mine"
secured = 0 // toggle_secure()'ed in New() for correct adding to processing_objects, won't work otherwise
dir = EAST
var/on = 0
var/visible = 0
var/visible = 1
var/obj/effect/beam/i_beam/first = null
var/obj/effect/beam/i_beam/last = null
var/max_nesting_level = 10
var/turf/fire_location
var/emission_cycles = 0
var/emission_cap = 20
/obj/item/device/assembly/infra/Destroy()
if(first)
@@ -22,7 +26,11 @@
return ..()
/obj/item/device/assembly/infra/describe()
return "The infrared trigger is [on?"on":"off"]."
return "The assembly is [secured ? "secure" : "not secure"]. The infrared trigger is [on ? "on" : "off"]."
/obj/item/device/assembly/infra/examine(mob/user)
..()
to_chat(user, describe())
/obj/item/device/assembly/infra/activate()
if(!..()) return 0//Cooldown check
@@ -36,11 +44,22 @@
processing_objects.Add(src)
else
on = 0
if(first) qdel(first)
if(first)
qdel(first)
processing_objects.Remove(src)
update_icon()
return secured
/obj/item/device/assembly/infra/New()
..()
if(!secured)
toggle_secure()
/obj/item/device/assembly/infra/proc/arm() // Forces the device to arm no matter its current state.
if(!secured) // Checked because arm() might be called sometime after the object is spawned.
toggle_secure()
on = 1
/obj/item/device/assembly/infra/update_icon()
overlays.Cut()
attached_overlays = list()
@@ -51,38 +70,22 @@
if(holder)
holder.update_icon()
/obj/item/device/assembly/infra/proc/get_valid_loc(atom/A, atom/prev, level = 0)
if(!A)
A = loc
if(!prev)
prev = src
if(level > max_nesting_level)
return null
else if(isturf(A))
return A
else if(isobj(A))
var/obj/O = A
if(isassembly(A) || O.IsAssemblyHolder() || istype(A, /obj/item/device/onetankbomb))
return .(A.loc, A, level + 1)
else if(ismob(A))
var/mob/user = A
if(user.get_active_hand() == prev || user.get_inactive_hand() == prev)
return .(A.loc, A, level + 1)
return null
/obj/item/device/assembly/infra/process()
if(!on || fire_location != get_turf(loc))
if(first)
qdel(first)
return
var/turf/T = get_turf(src)
if(first && (!on || !fire_location || fire_location != T || emission_cycles >= emission_cap))
qdel(first)
return
if(!on)
return
if(!secured)
return
if(first && last)
last.process()
emission_cycles++
return
var/turf/T = get_valid_loc()
if(T)
fire_location = T
emission_cycles = 0
var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam(T)
I.master = src
I.density = 1
@@ -124,6 +127,8 @@
return 0
pulse(0)
audible_message("[bicon(src)] *beep* *beep*", null, 3)
if(first)
qdel(first)
cooldown = 2
spawn(10)
process_cooldown()
@@ -177,6 +182,21 @@
if(usr.machine == src)
interact(usr)
if(first)
qdel(first)
/obj/item/device/assembly/infra/armed/New()
..()
spawn(3)
if(holder)
if(holder.master)
dir = holder.master.dir
arm()
/obj/item/device/assembly/infra/armed/stealth
visible = 0
/***************************IBeam*********************************/
@@ -191,6 +211,8 @@
var/limit = null
var/visible = 0.0
var/left = null
var/life_cycles = 0
var/life_cap = 20
anchored = 1.0
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
@@ -209,7 +231,8 @@
transform = turn(matrix(), dir2angle(dir))
/obj/effect/beam/i_beam/process()
if((loc.density || !(master)))
life_cycles++
if(loc.density || !master || life_cycles >= life_cap)
qdel(src)
return
if(left > 0)
+1
View File
@@ -131,6 +131,7 @@
desc = "A true prankster's facial attire. A clown is incomplete without his wig and mask."
icon_state = "clown"
item_state = "clown_hat"
flags = NODROP
/obj/item/clothing/mask/gas/sexyclown
name = "sexy-clown wig and mask"
+1 -1
View File
@@ -562,7 +562,7 @@
log_robot("[key_name(speaker)] : [message]")
var/message_start = "<i><span class='game say'>[name], <span class='name'>[speaker.name]</span>"
var/message_body = "<span class='message'>[speaker.say_quote(message)],</i> <span class='ibm'>\"[message]\"</span></span></span>"
var/message_body = "<span class='message'>[speaker.say_quote(message)],</i><span class='robot'>\"[message]\"</span></span></span>"
for(var/mob/M in dead_mob_list)
if(!isnewplayer(M) && !isbrain(M))
@@ -166,6 +166,9 @@
set category = "Robot Commands"
set name = "Power Warning"
if(handle_emote_CD(50))
return
if(!is_component_functioning("power cell") || !cell || !cell.charge)
visible_message("The power warning light on <span class='name'>[src]</span> flashes urgently.",\
"You announce you are operating in low power mode.")
@@ -49,6 +49,8 @@ var/list/robot_verbs_default = list(
var/datum/wires/robot/wires = null
var/opened = 0
var/custom_panel = null
var/list/custom_panel_names = list("Cricket")
var/emagged = 0
var/list/force_modules = list()
@@ -314,6 +316,7 @@ var/list/robot_verbs_default = list(
module_sprites["Default"] = "Service2"
module_sprites["Standard"] = "robotServ"
module_sprites["Noble-SRV"] = "Noble-SRV"
module_sprites["Cricket"] = "Cricket-SERV"
if("Miner")
module = new /obj/item/weapon/robot_module/miner(src)
@@ -325,6 +328,7 @@ var/list/robot_verbs_default = list(
module_sprites["Treadhead"] = "Miner"
module_sprites["Standard"] = "robotMine"
module_sprites["Noble-DIG"] = "Noble-DIG"
module_sprites["Cricket"] = "Cricket-MINE"
if("Medical")
module = new /obj/item/weapon/robot_module/medical(src)
@@ -337,6 +341,7 @@ var/list/robot_verbs_default = list(
module_sprites["Needles"] = "medicalrobot"
module_sprites["Standard"] = "robotMedi"
module_sprites["Noble-MED"] = "Noble-MED"
module_sprites["Cricket"] = "Cricket-MEDI"
status_flags &= ~CANPUSH
if("Security")
@@ -348,6 +353,7 @@ var/list/robot_verbs_default = list(
module_sprites["Bloodhound"] = "bloodhound"
module_sprites["Standard"] = "robotSecy"
module_sprites["Noble-SEC"] = "Noble-SEC"
module_sprites["Cricket"] = "Cricket-SEC"
status_flags &= ~CANPUSH
if("Engineering")
@@ -360,6 +366,7 @@ var/list/robot_verbs_default = list(
module_sprites["Landmate"] = "landmate"
module_sprites["Standard"] = "robotEngi"
module_sprites["Noble-ENG"] = "Noble-ENG"
module_sprites["Cricket"] = "Cricket-ENGI"
magpulse = 1
if("Janitor")
@@ -370,6 +377,7 @@ var/list/robot_verbs_default = list(
module_sprites["Mop Gear Rex"] = "mopgearrex"
module_sprites["Standard"] = "robotJani"
module_sprites["Noble-CLN"] = "Noble-CLN"
module_sprites["Cricket"] = "Cricket-JANI"
if("Combat")
module = new /obj/item/weapon/robot_module/combat(src)
@@ -968,6 +976,9 @@ var/list/robot_verbs_default = list(
if(custom_sprite) //Custom borgs also have custom panels, heh
panelprefix = "[ckey]"
if(custom_panel in custom_panel_names) //For default borgs with different panels
panelprefix = custom_panel
if(wiresexposed)
overlays += "[panelprefix]-openpanel +w"
else if(cell)
@@ -1289,6 +1300,8 @@ var/list/robot_verbs_default = list(
module.module_type = "Brobot"
update_module_icon()
lockcharge = null
var/list/names = splittext(icontype, "-")
custom_panel = trim(names[1])
else
to_chat(src, "Something is badly wrong with the sprite selection. Harass a coder.")
icon_state = module_sprites[1]
@@ -175,3 +175,5 @@
eats_mice = 0
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
melee_damage_lower = 5
melee_damage_upper = 15
@@ -37,4 +37,6 @@
faction = list("syndicate")
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
minbodytemp = 0
melee_damage_lower = 10
melee_damage_upper = 20
@@ -17,8 +17,8 @@
response_disarm = "gently pushes aside"
response_harm = "kicks"
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
melee_damage_lower = 18
melee_damage_upper = 18
melee_damage_lower = 0
melee_damage_upper = 0
health = 50
maxHealth = 50
speed = 2
@@ -28,4 +28,4 @@
/mob/living/simple_animal/pet/sloth/paperwork
name = "Paperwork"
desc = "Cargo's pet sloth. About as useful as the rest of the techs."
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
@@ -687,7 +687,15 @@
"STOP HOT-WIRING THE ENGINE, FUCKING CHRIST!",
"Wire the solars, you lazy bums!",
"WHO TOOK THE DAMN HARDSUITS?",
"OH GOD ITS FREE CALL THE SHUTTLE")
"OH GOD ITS FREE CALL THE SHUTTLE",
"Why are there so many atmos alerts?",
"OH GOD WHY WOULD YOU TURN ON THE PA BEFORE CONTAINMENT IS UP?",
"Remember to lock the emitters!",
"Stop goofing off and repair the goddam station!",
"The singularity is not your friend!",
"What were the wires again?",
"Goddam emaggers!"
)
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
/mob/living/simple_animal/parrot/Poly/New()
+11 -1
View File
@@ -1,6 +1,7 @@
/mob/new_player
var/ready = 0
var/spawning = 0//Referenced when you want to delete the new_player later on in the code.
var/skip_antag = 0 //For declining an antag roll this round.
var/spawning = 0 //Referenced when you want to delete the new_player later on in the code.
var/totalPlayers = 0 //Player counts for the Lobby tab
var/totalPlayersReady = 0
universal_speak = 1
@@ -31,6 +32,11 @@
if(!ready) output += "<p><a href='byond://?src=[UID()];ready=1'>Declare Ready</A></p>"
else output += "<p><b>You are ready</b> (<a href='byond://?src=[UID()];ready=2'>Cancel</A>)</p>"
var/list/antags = client.prefs.be_special
if(antags && antags.len)
if(!skip_antag) output += "<p><a href='byond://?src=[UID()];skip_antag=1'>Global Antag Candidancy</A>"
else output += "<p><a href='byond://?src=[UID()];skip_antag=2'>Global Antag Candidancy</A>"
output += "<br /><small>You are <b>[skip_antag ? "ineligable" : "eligable"]</b> for all antag roles.</small></p>"
else
output += "<p><a href='byond://?src=[UID()];manifest=1'>View the Crew Manifest</A></p>"
output += "<p><a href='byond://?src=[UID()];late_join=1'>Join Game!</A></p>"
@@ -111,6 +117,10 @@
ready = !ready
new_player_panel_proc()
if(href_list["skip_antag"])
skip_antag = !skip_antag
new_player_panel_proc()
if(href_list["refresh"])
src << browse(null, "window=playersetup") //closes the player setup window
new_player_panel_proc()
+6
View File
@@ -274,6 +274,9 @@
if(!MP)
return 0
if(!GAMEMODE_IS_NUCLEAR)
if(ispath(MP, /mob/living/simple_animal/pet/cat/Syndi))
return 0
if(ispath(MP, /mob/living/simple_animal/pet/cat))
return 1
if(ispath(MP, /mob/living/simple_animal/pet/corgi))
@@ -288,6 +291,9 @@
return 1
if(ispath(MP, /mob/living/simple_animal/pony))
return 1
if(!GAMEMODE_IS_NUCLEAR)
if(ispath(MP, /mob/living/simple_animal/pet/fox/Syndifox))
return 0
if(ispath(MP, /mob/living/simple_animal/pet/fox))
return 1
if(ispath(MP, /mob/living/simple_animal/chick))
@@ -30,7 +30,6 @@
name = "miniature energy gun"
desc = "A small, pistol-sized energy gun with a built-in flashlight. It has two settings: stun and kill."
icon_state = "mini"
item_state = "gun"
w_class = WEIGHT_CLASS_SMALL
ammo_x_offset = 2
charge_sections = 3
@@ -896,7 +896,7 @@
/datum/design/mech_disabler
name = "Exosuit Weapon (CH-PD Disabler)"
desc = "Allows for the construction of CH-PD Disabler."
id = "mech_laser"
id = "mech_disabler"
build_type = MECHFAB
req_tech = list("combat" = 3)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/disabler
@@ -27,6 +27,10 @@
//Will not be announced if you try to set to the same level as it already is
if(level >= SEC_LEVEL_GREEN && level <= SEC_LEVEL_DELTA && level != security_level)
if(level >= SEC_LEVEL_RED && security_level < SEC_LEVEL_RED)
// Mark down this time to prevent shuttle cheese
shuttle_master.emergency_sec_level_time = world.time
switch(level)
if(SEC_LEVEL_GREEN)
security_announcement_down.Announce("All threats to the station have passed. All weapons need to be holstered and privacy laws are once again fully enforced.","Attention! Security level lowered to green.")
+17 -2
View File
@@ -60,8 +60,8 @@ var/global/list/map_transition_config = MAP_TRANSITION_CONFIG
map_name = "[using_map.name]"
else
map_name = "Unknown"
if(config && config.server_name)
name = "[config.server_name]: [station_name()]"
else
@@ -118,6 +118,9 @@ var/world_topic_spam_protect_time = world.timeofday
s["players"] = list()
s["roundtime"] = worldtime2text()
s["stationtime"] = station_time_timestamp()
s["listed"] = "Public"
if(!hub_password)
s["listed"] = "Invisible"
var/player_count = 0
var/admin_count = 0
@@ -270,6 +273,18 @@ var/world_topic_spam_protect_time = world.timeofday
return "Logs set to current date"
else if("setlist" in input)
if(!key_valid)
return keySpamProtect(addr)
if(input["req"] == "public")
hub_password = hub_password_base
update_status()
return "Set listed status to public."
else
hub_password = ""
update_status()
return "Set listed status to invisible."
/proc/keySpamProtect(var/addr)
if(world_topic_spam_protect_ip == addr && abs(world_topic_spam_protect_time - world.time) < 50)
spawn(50)