Merge branch 'master' of https://github.com/PolarisSS13/Polaris into plasmastun

This commit is contained in:
Anewbe
2017-01-15 17:19:47 -06:00
46 changed files with 740 additions and 277 deletions

View File

@@ -160,7 +160,8 @@ var/list/admin_verbs_server = list(
/datum/admins/proc/toggle_space_ninja,
/client/proc/toggle_random_events,
/client/proc/check_customitem_activity,
/client/proc/nanomapgen_DumpImage
/client/proc/nanomapgen_DumpImage,
/client/proc/modify_server_news
)
var/list/admin_verbs_debug = list(
/client/proc/getruntimelog, //allows us to access runtime logs to somebody,

View File

@@ -0,0 +1,42 @@
#define NEWSFILE "data/news.sav" //where the memos are saved
/client/
var/last_news_hash = null // Stores a hash of the last news window it saw, which gets compared to the current one to see if it is different.
// Returns true if news was updated since last seen.
/client/proc/check_for_new_server_news()
var/savefile/F = get_server_news()
if(F)
if(md5(F["body"]) != last_news_hash)
return TRUE
return FALSE
/client/proc/modify_server_news()
set name = "Modify Public News"
set category = "Server"
if(!check_rights(0))
return
var/savefile/F = new(NEWSFILE)
if(F)
var/title = F["title"]
var/body = F["body"]
var/new_title = sanitize(input(src,"Write a good title for the news update. Note: HTML is NOT supported.","Write News", title) as null|text, extra = 0)
if(!new_title)
return
var/new_body = sanitize(input(src,"Write the body of the news update here. Note: HTML is NOT supported.","Write News", body) as null|message, extra = 0)
if(findtext(new_body,"<script",1,0) ) // Is this needed with santize()?
return
F["title"] << new_title
F["body"] << new_body
F["author"] << key
F["timestamp"] << time2text(world.realtime, "DDD, MMM DD YYYY")
message_admins("[key] modified the news to read:<br>[new_title]<br>[new_body]")
/proc/get_server_news()
var/savefile/F = new(NEWSFILE)
if(F)
return F
#undef NEWSFILE

View File

@@ -387,7 +387,7 @@
path = /obj/item/clothing/under/pt
/datum/gear/uniform/pt/expeditionary
display_name = "pt uniform, expeditionary"
display_name = "pt uniform, sifguard"
path = /obj/item/clothing/under/pt/expeditionary
/datum/gear/uniform/pt/fleet

View File

@@ -3,7 +3,7 @@
var/last_message_time = 0
var/spam_alert = 0
/client/proc/handle_spam_prevention(var/mute_type = MUTE_ALL, var/spam_delay = 1 SECOND)
/client/proc/handle_spam_prevention(var/mute_type = MUTE_ALL, var/spam_delay = 0.5 SECONDS)
if(world.time - last_message_time < spam_delay)
spam_alert++
if(spam_alert > 3)

View File

@@ -404,6 +404,7 @@
if(usr.put_in_hands(holding))
usr.visible_message("<span class='danger'>\The [usr] pulls a knife out of their boot!</span>")
playsound(src.loc, 'sound/weapons/flipblade.ogg', 40, 1)
holding = null
else
usr << "<span class='warning'>Your need an empty, unbroken hand to do that.</span>"
@@ -415,6 +416,11 @@
update_icon()
return
/obj/item/clothing/shoes/attack_hand(var/mob/living/M)
if(can_hold_knife == 1 && holding && src.loc == M)
draw_knife()
return
..()
/obj/item/clothing/shoes/attackby(var/obj/item/I, var/mob/user)
if((can_hold_knife == 1) && (istype(I, /obj/item/weapon/material/shard) || \

View File

@@ -11,8 +11,8 @@
)
/obj/item/clothing/head/soft/sol/expedition
name = "\improper Expeditionary Corps cap"
desc = "It's a black ballcap bearing a Expeditonary Corps crest."
name = "\improper SifGuard cap"
desc = "It's a black ballcap bearing a Sif Homeguard Corps crest."
icon_state = "expeditionsoft"
item_state_slots = list(
slot_l_hand_str = "blacksoft",
@@ -114,13 +114,13 @@
body_parts_covered = 0
/obj/item/clothing/head/dress/expedition
name = "expedition dress cap"
desc = "A peaked grey dress uniform cap belonging to the SCG Expeditionary Corps."
name = "\improper SifGuard dress cap"
desc = "A peaked grey dress uniform cap belonging to the Sif Homeguard Corps."
icon_state = "greydresscap"
/obj/item/clothing/head/dress/expedition/command
name = "expedition command dress cap"
desc = "A peaked grey dress uniform cap belonging to the SCG Expeditionary Corps. This one is trimmed in gold."
name = "\improper SifGuard command dress cap"
desc = "A peaked grey dress uniform cap belonging to the Sif Homeguard Corps. This one is trimmed in gold."
icon_state = "greydresscap_com"
/obj/item/clothing/head/dress/fleet
@@ -181,33 +181,33 @@
icon_state = "beret_white"
/obj/item/clothing/head/beret/sol/expedition
name = "expeditionary beret"
desc = "A black beret belonging to the SCG Expeditionary Corps. For personnel that are more inclined towards style than safety."
name = "\improper SifGuard beret"
desc = "A black beret belonging to the Sif Homeguard Corps. For personnel that are more inclined towards style than safety."
icon_state = "beret_black"
/obj/item/clothing/head/beret/sol/expedition/security
name = "expeditionary security beret"
desc = "An SCG Expeditionary Corps beret with a security crest. For personnel that are more inclined towards style than safety."
name = "\improper SifGuard security beret"
desc = "An Sif Homeguard Corps beret with a security crest. For personnel that are more inclined towards style than safety."
icon_state = "beret_black_security"
/obj/item/clothing/head/beret/sol/expedition/medical
name = "expeditionary medical beret"
desc = "An SCG Expeditionary Corps beret with a medical crest. For personnel that are more inclined towards style than safety."
name = "\improper SifGuard medical beret"
desc = "An Sif Homeguard Corps beret with a medical crest. For personnel that are more inclined towards style than safety."
icon_state = "beret_black_medical"
/obj/item/clothing/head/beret/sol/expedition/engineering
name = "expeditionary engineering beret"
desc = "An SCG Expeditionary Corps beret with an engineering crest. For personnel that are more inclined towards style than safety."
name = "\improper SifGuard engineering beret"
desc = "An Sif Homeguard Corps beret with an engineering crest. For personnel that are more inclined towards style than safety."
icon_state = "beret_black_engineering"
/obj/item/clothing/head/beret/sol/expedition/supply
name = "expeditionary supply beret"
desc = "An SCG Expeditionary Corps beret with a supply crest. For personnel that are more inclined towards style than safety."
name = "\improper SifGuard supply beret"
desc = "An Sif Homeguard Corps beret with a supply crest. For personnel that are more inclined towards style than safety."
icon_state = "beret_black_supply"
/obj/item/clothing/head/beret/sol/expedition/command
name = "expeditionary command beret"
desc = "An SCG Expeditionary Corps beret with a command crest. For personnel that are more inclined towards style than safety."
name = "\improper SifGuard command beret"
desc = "An Sif Homeguard Corps beret with a command crest. For personnel that are more inclined towards style than safety."
icon_state = "beret_black_command"
/obj/item/clothing/head/beret/sol/fleet

View File

@@ -27,36 +27,7 @@
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
item_flags = NOSLIP
siemens_coefficient = 0.6
var/obj/item/weapon/material/hatchet/tacknife
/obj/item/clothing/shoes/swat/attack_hand(var/mob/living/M)
if(tacknife)
tacknife.loc = get_turf(src)
if(M.put_in_active_hand(tacknife))
M << "<span class='notice'>You slide \the [tacknife] out of [src].</span>"
playsound(M, 'sound/weapons/flipblade.ogg', 40, 1)
tacknife = null
update_icon()
return
..()
/obj/item/clothing/shoes/swat/attackby(var/obj/item/I, var/mob/living/M)
if(istype(I, /obj/item/weapon/material/hatchet/tacknife))
if(tacknife)
return
M.drop_item()
tacknife = I
I.loc = src
M << "<span class='notice'>You slide the [I] into [src].</span>"
playsound(M, 'sound/weapons/flipblade.ogg', 40, 1)
update_icon()
..()
/obj/item/clothing/shoes/swat/update_icon()
if(tacknife)
icon_state = "swat_1"
else
icon_state = initial(icon_state)
can_hold_knife = 1
//Stolen from CM, refurbished to be less terrible.
/obj/item/clothing/shoes/marine
@@ -66,36 +37,7 @@
item_state_slots = list(slot_r_hand_str = "jackboots", slot_l_hand_str = "jackboots")
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
siemens_coefficient = 0.6
var/obj/item/weapon/material/hatchet/tacknife
/obj/item/clothing/shoes/marine/attack_hand(var/mob/living/M)
if(tacknife)
tacknife.loc = get_turf(src)
if(M.put_in_active_hand(tacknife))
M << "<span class='notice'>You slide \the [tacknife] out of [src].</span>"
playsound(M, 'sound/weapons/flipblade.ogg', 40, 1)
tacknife = null
update_icon()
return
..()
/obj/item/clothing/shoes/marine/attackby(var/obj/item/I, var/mob/living/M)
if(istype(I, /obj/item/weapon/material/hatchet/tacknife))
if(tacknife)
return
M.drop_item()
tacknife = I
I.loc = src
M << "<span class='notice'>You slide the [I] into [src].</span>"
playsound(M, 'sound/weapons/flipblade.ogg', 40, 1)
update_icon()
..()
/obj/item/clothing/shoes/marine/update_icon()
if(tacknife)
icon_state = "jackboots_1"
else
icon_state = initial(icon_state)
can_hold_knife = 1
/obj/item/clothing/shoes/combat //Basically SWAT shoes combined with galoshes.
name = "combat boots"
@@ -105,6 +47,7 @@
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
item_flags = NOSLIP
siemens_coefficient = 0.6
can_hold_knife = 1
cold_protection = FEET
min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE
@@ -118,6 +61,7 @@
force = 3
armor = list(melee = 30, bullet = 10, laser = 10, energy = 15, bomb = 20, bio = 10, rad = 0)
siemens_coefficient = 0.7
can_hold_knife = 1
/obj/item/clothing/shoes/dutyboots
name = "duty boots"
@@ -125,6 +69,7 @@
icon_state = "duty"
armor = list(melee = 40, bullet = 0, laser = 0, energy = 15, bomb = 20, bio = 0, rad = 20)
siemens_coefficient = 0.7
can_hold_knife = 1
/obj/item/clothing/shoes/tactical
name = "tactical boots"
@@ -133,6 +78,7 @@
force = 3
armor = list(melee = 40, bullet = 30, laser = 40,energy = 25, bomb = 50, bio = 0, rad = 0)
siemens_coefficient = 0.7
can_hold_knife = 1
/obj/item/clothing/shoes/dress
name = "dress shoes"

View File

@@ -13,48 +13,48 @@
allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/flashlight,/obj/item/weapon/pen,/obj/item/clothing/head/soft,/obj/item/clothing/head/beret,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter,/obj/item/device/taperecorder,/obj/item/device/analyzer,/obj/item/device/radio,/obj/item/taperoll)
/obj/item/clothing/suit/storage/service/expeditionary
name = "expeditionary jacket"
desc = "A uniform service jacket belonging to the SCG Expeditionary Corps. It has silver buttons."
name = "\improper SifGuard jacket"
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has silver buttons."
icon_state = "blackservice_crew"
/obj/item/clothing/suit/storage/service/expeditionary/medical
name = "expeditionary medical jacket"
desc = "A uniform service jacket belonging to the SCG Expeditionary Corps. It has silver buttons and blue trim."
name = "\improper SifGuard medical jacket"
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has silver buttons and blue trim."
icon_state = "blackservice_med"
/obj/item/clothing/suit/storage/service/expeditionary/medical/command
name = "expeditionary medical command jacket"
desc = "A uniform service jacket belonging to the SCG Expeditionary Corps. It has gold buttons and blue trim."
name = "\improper SifGuard medical command jacket"
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has gold buttons and blue trim."
icon_state = "blackservice_medcom"
/obj/item/clothing/suit/storage/service/expeditionary/engineering
name = "expeditionary engineering jacket"
desc = "A uniform service jacket belonging to the SCG Expeditionary Corps. It has silver buttons and orange trim."
name = "\improper SifGuard engineering jacket"
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has silver buttons and orange trim."
icon_state = "blackservice_eng"
/obj/item/clothing/suit/storage/service/expeditionary/engineering/command
name = "expeditionary engineering command jacket"
desc = "A uniform service jacket belonging to the SCG Expeditionary Corps. It has gold buttons and orange trim."
name = "\improper SifGuard engineering command jacket"
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has gold buttons and orange trim."
icon_state = "blackservice_engcom"
/obj/item/clothing/suit/storage/service/expeditionary/supply
name = "expeditionary supply jacket"
desc = "A uniform service jacket belonging to the SCG Expeditionary Corps. It has silver buttons and brown trim."
name = "\improper SifGuard supply jacket"
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has silver buttons and brown trim."
icon_state = "blackservice_sup"
/obj/item/clothing/suit/storage/service/expeditionary/security
name = "expeditionary security jacket"
desc = "A uniform service jacket belonging to the SCG Expeditionary Corps. It has silver buttons and red trim."
name = "\improper SifGuard security jacket"
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has silver buttons and red trim."
icon_state = "blackservice_sec"
/obj/item/clothing/suit/storage/service/expeditionary/security/command
name = "expeditionary security command jacket"
desc = "A uniform service jacket belonging to the SCG Expeditionary Corps. It has gold buttons and red trim."
name = "\improper SifGuard security command jacket"
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has gold buttons and red trim."
icon_state = "blackservice_seccom"
/obj/item/clothing/suit/storage/service/expeditionary/command
name = "expeditionary command jacket"
desc = "A uniform service jacket belonging to the SCG Expeditionary Corps. It has gold buttons and gold trim."
name = "\improper SifGuard command jacket"
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has gold buttons and gold trim."
icon_state = "blackservice_com"
/obj/item/clothing/suit/storage/service/marine

View File

@@ -11,8 +11,8 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/under/pt/expeditionary
name = "expeditionary pt uniform"
desc = "A baggy shirt bearing the seal of the SCG Expeditionary Corps and some dorky looking blue shorts."
name = "\improper SifGuard pt uniform"
desc = "A baggy shirt bearing the seal of the Sif Homeguard Corps and some dorky looking blue shorts."
icon_state = "expeditionpt"
worn_state = "expeditionpt"
@@ -40,57 +40,57 @@
siemens_coefficient = 0.9
/obj/item/clothing/under/utility/expeditionary
name = "expeditionary uniform"
desc = "The utility uniform of the SCG Expeditionary Corps, made from biohazard resistant material. This one has silver trim."
name = "\improper SifGuard uniform"
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has silver trim."
icon_state = "blackutility_crew"
worn_state = "blackutility_crew"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 10)
/obj/item/clothing/under/utility/expeditionary/medical
name = "expeditionary medical uniform"
desc = "The utility uniform of the SCG Expeditionary Corps, made from biohazard resistant material. This one has silver trim and blue blazes."
name = "\improper SifGuard medical uniform"
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has silver trim and blue blazes."
icon_state = "blackutility_med"
worn_state = "blackutility_med"
/obj/item/clothing/under/utility/expeditionary/medical/command
name = "expeditionary medical command uniform"
desc = "The utility uniform of the SCG Expeditionary Corps, made from biohazard resistant material. This one has gold trim and blue blazes."
name = "\improper SifGuard medical command uniform"
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has gold trim and blue blazes."
icon_state = "blackutility_medcom"
worn_state = "blackutility_medcom"
/obj/item/clothing/under/utility/expeditionary/engineering
name = "expeditionary engineering uniform"
desc = "The utility uniform of the SCG Expeditionary Corps, made from biohazard resistant material. This one has silver trim and organge blazes."
name = "\improper SifGuard engineering uniform"
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has silver trim and organge blazes."
icon_state = "blackutility_eng"
worn_state = "blackutility_eng"
/obj/item/clothing/under/utility/expeditionary/engineering/command
name = "expeditionary engineering command uniform"
desc = "The utility uniform of the SCG Expeditionary Corps, made from biohazard resistant material. This one has gold trim and organge blazes."
name = "\improper SifGuard engineering command uniform"
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has gold trim and organge blazes."
icon_state = "blackutility_engcom"
worn_state = "blackutility_engcom"
/obj/item/clothing/under/utility/expeditionary/supply
name = "expeditionary supply uniform"
desc = "The utility uniform of the SCG Expeditionary Corps, made from biohazard resistant material. This one has silver trim and brown blazes."
name = "\improper SifGuard supply uniform"
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has silver trim and brown blazes."
icon_state = "blackutility_sup"
worn_state = "blackutility_sup"
/obj/item/clothing/under/utility/expeditionary/security
name = "expeditionary security uniform"
desc = "The utility uniform of the SCG Expeditionary Corps, made from biohazard resistant material. This one has silver trim and red blazes."
name = "\improper SifGuard security uniform"
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has silver trim and red blazes."
icon_state = "blackutility_sec"
worn_state = "blackutility_sec"
/obj/item/clothing/under/utility/expeditionary/security/command
name = "expeditionary security command uniform"
desc = "The utility uniform of the SCG Expeditionary Corps, made from biohazard resistant material. This one has gold trim and red blazes."
name = "\improper SifGuard security command uniform"
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has gold trim and red blazes."
icon_state = "blackutility_seccom"
worn_state = "blackutility_seccom"
/obj/item/clothing/under/utility/expeditionary/command
name = "expeditionary command uniform"
desc = "The utility uniform of the SCG Expeditionary Corps, made from biohazard resistant material. This one has gold trim and gold blazes."
name = "\improper SifGuard command uniform"
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has gold trim and gold blazes."
icon_state = "blackutility_com"
worn_state = "blackutility_com"
@@ -221,14 +221,14 @@
siemens_coefficient = 0.9
/obj/item/clothing/under/dress/expeditionary
name = "expeditionary dress uniform"
desc = "The dress uniform of the SCG Expeditionary Corps in silver trim."
name = "\improper SifGuard dress uniform"
desc = "The dress uniform of the Sif Homeguard Corps in silver trim."
icon_state = "greydress"
worn_state = "greydress"
/obj/item/clothing/under/dress/expeditionary/command
name = "expeditionary command dress uniform"
desc = "The dress uniform of the SCG Expeditionary Corps in gold trim."
name = "\improper SifGuard command dress uniform"
desc = "The dress uniform of the Sif Homeguard Corps in gold trim."
icon_state = "greydress_com"
worn_state = "greydress_com"

View File

@@ -32,7 +32,7 @@
spawn_locations.Add(C.loc)
spawn_locations = shuffle(spawn_locations)
num_groups = min(num_groups, spawn_locations.len)
var/i = 1
while (i <= num_groups)
var/group_size = rand(group_size_min, group_size_max)
@@ -45,4 +45,5 @@
if(!C.stat)
var/turf/T = get_turf(C)
if(istype(T, /turf/space))
qdel(C)
if(!prob(25))
qdel(C)

View File

@@ -136,6 +136,7 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Lotto", /datum/event/money_lotto, 0, list(ASSIGNMENT_ANY = 1), 1, 5, 15),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Mundane News", /datum/event/mundane_news, 300),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "PDA Spam", /datum/event/pda_spam, 0, list(ASSIGNMENT_ANY = 4), 0, 25, 50),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Shipping Error", /datum/event/shipping_error , 30, list(ASSIGNMENT_ANY = 2), 0),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Space Dust", /datum/event/dust , 60, list(ASSIGNMENT_ENGINEER = 20), 0, 0, 50),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Trivial News", /datum/event/trivial_news, 400),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Vermin Infestation",/datum/event/infestation, 100, list(ASSIGNMENT_JANITOR = 100)),

View File

@@ -0,0 +1,6 @@
/datum/event/shipping_error/start()
var/datum/supply_order/O = new /datum/supply_order()
O.ordernum = supply_controller.ordernum
O.object = supply_controller.supply_packs[pick(supply_controller.supply_packs)]
O.orderedby = random_name(pick(MALE,FEMALE), species = "Human")
supply_controller.shoppinglist += O

View File

@@ -321,6 +321,9 @@
data_received.write_data_to_pin(message)
text_received.write_data_to_pin(text)
for(var/datum/integrated_io/output/O in outputs)
O.push_data()
//This circuit gives information on where the machine is.
/obj/item/integrated_circuit/input/gps
name = "global positioning system"
@@ -379,6 +382,9 @@
O.data = msg
A.push_data()
for(var/datum/integrated_io/output/out in outputs)
out.push_data()

View File

@@ -22,12 +22,13 @@
// Should this all be in Touch()?
if(istype(H))
var/hit_zone = get_zone_with_miss_chance(H.zone_sel.selecting, src, get_accuracy_penalty(H))
if(!hit_zone)
H.do_attack_animation(src)
playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
visible_message("\red <B>[H] attempts to punch [src], but misses!</B>")
return 0
if(get_accuracy_penalty(H)) //Should only trigger if they're not aiming well
var/hit_zone = get_zone_with_miss_chance(H.zone_sel.selecting, src, get_accuracy_penalty(H))
if(!hit_zone)
H.do_attack_animation(src)
playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
visible_message("\red <B>[H] reaches for [src], but misses!</B>")
return 0
if(H != src && check_shields(0, null, H, H.zone_sel.selecting, H.name))
H.do_attack_animation(src)

View File

@@ -94,6 +94,7 @@
slowdown = -0.5
brute_mod = 1.15
burn_mod = 1.15
metabolic_rate = 1.1
gluttonous = 1
num_alternate_languages = 3
secondary_langs = list("Siik")

View File

@@ -82,11 +82,12 @@
. = ..()
if(ishuman(.))
var/mob/living/carbon/human/H = .
if(prob(poison_chance))
if(prob(5))
var/obj/item/organ/external/O = pick(H.organs)
if(!(O.robotic >= ORGAN_ROBOT))
var/eggs = PoolOrNew(/obj/effect/spider/eggcluster/, list(O, src))
O.implants += eggs
H << "<span class='warning'>The [src] injects something into your [O.name]!</span>"
/mob/living/simple_animal/hostile/giant_spider/Life()
..()

View File

@@ -60,6 +60,11 @@
else
output += "<p><a href='byond://?src=\ref[src];showpoll=1'>Show Player Polls</A></p>"
if(client.check_for_new_server_news())
output += "<p><b><a href='byond://?src=\ref[src];shownews=1'>Show News</A> (NEW!)</b></p>"
else
output += "<p><a href='byond://?src=\ref[src];shownews=1'>Show News</A></p>"
output += "</div>"
panel = new(src, "Welcome","Welcome", 210, 280, src)
@@ -277,6 +282,28 @@
if(!isnull(href_list["option_[optionid]"])) //Test if this optionid was selected
vote_on_poll(pollid, optionid, 1)
if(href_list["shownews"])
handle_server_news()
return
/mob/new_player/proc/handle_server_news()
if(!client)
return
var/savefile/F = get_server_news()
if(F)
client.last_news_hash = md5(F["body"])
var/dat = "<html><body><center>"
dat += "<h1>[F["title"]]</h1>"
dat += "<br>"
dat += "[F["body"]]"
dat += "<br>"
dat += "<font size='2'><i>Last written by [F["author"]], on [F["timestamp"]].</i></font>"
dat += "</center></body></html>"
var/datum/browser/popup = new(src, "Server News", "Server News", 450, 300, src)
popup.set_content(dat)
popup.open()
/mob/new_player/proc/IsJobAvailable(rank)
var/datum/job/job = job_master.GetJob(rank)
if(!job) return 0

View File

@@ -61,51 +61,6 @@
name = "Short Hair 2"
icon_state = "hair_shorthair3"
teshari
name = "Teshari Default"
icon_state = "seromi_default"
species_allowed = list("Teshari")
teshari_altdefault
name = "Teshari Alt. Default"
icon_state = "seromi_ears"
species_allowed = list("Teshari")
teshari_tight
name = "Teshari Tight"
icon_state = "seromi_tight"
species_allowed = list("Teshari")
teshari_excited
name = "Teshari Spiky"
icon_state = "seromi_spiky"
species_allowed = list("Teshari")
teshari_spike
name = "Teshari Spike"
icon_state = "seromi_spike"
species_allowed = list("Teshari")
teshari_long
name = "Teshari Overgrown"
icon_state = "seromi_long"
species_allowed = list("Teshari")
teshari_burst
name = "Teshari Starburst"
icon_state = "seromi_burst"
species_allowed = list("Teshari")
teshari_shortburst
name = "Teshari Short Starburst"
icon_state = "seromi_burst_short"
species_allowed = list("Teshari")
teshari_mohawk
name = "Teshari Mohawk"
icon_state = "seromi_mohawk"
species_allowed = list("Teshari")
cut
name = "Cut Hair"
icon_state = "hair_c"
@@ -328,6 +283,10 @@
name = "Emo"
icon_state = "hair_emo"
emo2
name = "Emo Alt"
icon_state = "hair_emo2"
longemo
name = "Long Emo"
icon_state = "hair_emolong"
@@ -522,6 +481,60 @@
name = "Oxton"
icon_state = "hair_oxton"
lowfade
name = "Low Fade"
icon_state = "hair_lowfade"
gender = MALE
medfade
name = "Medium Fade"
icon_state = "hair_medfade"
highfade
name = "High Fade"
icon_state = "hair_highfade"
gender = MALE
baldfade
name = "Balding Fade"
icon_state = "hair_baldfade"
gender = MALE
nofade
name = "Regulation Cut"
icon_state = "hair_nofade"
gender = MALE
trimflat
name = "Trimmed Flat Top"
icon_state = "hair_trimflat"
gender = MALE
trimmed
name = "Trimmed"
icon_state = "hair_trimmed"
gender = MALE
tightbun
name = "Tight Bun"
icon_state = "hair_tightbun"
gender = FEMALE
coffeehouse
name = "Coffee House Cut"
icon_state = "hair_coffeehouse"
gender = MALE
undercut
name = "Undercut"
icon_state = "hair_undercut"
gender = MALE
partfade
name = "Parted Fade"
icon_state = "hair_shavedpart"
gender = MALE
/*
///////////////////////////////////
@@ -542,24 +555,6 @@
gender = NEUTER
species_allowed = list("Human","Unathi","Tajara","Skrell", "Machine","Teshari")
teshari_beard
name = "Teshari Beard"
icon_state = "seromi_chin"
species_allowed = list("Teshari")
gender = NEUTER
teshari_scraggly
name = "Teshari Scraggly"
icon_state = "seromi_scraggly"
species_allowed = list("Teshari")
gender = NEUTER
teshari_chops
name = "Teshari Chops"
icon_state = "seromi_gap"
species_allowed = list("Teshari")
gender = NEUTER
watson
name = "Watson Mustache"
icon_state = "facial_watson"
@@ -629,31 +624,41 @@
name = "Dwarf Beard"
icon_state = "facial_dwarf"
shadow
name = "Five O'Clock Shadow"
icon_state = "facial_shadow"
threeOclock
name = "3 O'clock Shadow"
icon_state = "facial_3oclock"
//unathi horn beards and the like
threeOclockstache
name = "3 O'clock Shadow and Moustache"
icon_state = "facial_3oclockmoustache"
una_chinhorn
name = "Unathi Chin Horn"
icon_state = "facial_chinhorns"
species_allowed = list("Unathi")
fiveOclock
name = "5 O'clock Shadow"
icon_state = "facial_5oclock"
una_hornadorns
name = "Unathi Horn Adorns"
icon_state = "facial_hornadorns"
species_allowed = list("Unathi")
fiveOclockstache
name = "5 O'clock Shadow and Moustache"
icon_state = "facial_5oclockmoustache"
una_spinespikes
name = "Unathi Spine Spikes"
icon_state = "facial_spikes"
species_allowed = list("Unathi")
sevenOclock
name = "7 O'clock Shadow"
icon_state = "facial_7oclock"
una_dorsalfrill
name = "Unathi Dorsal Frill"
icon_state = "facial_dorsalfrill"
species_allowed = list("Unathi")
sevenOclockstache
name = "7 O'clock Shadow and Moustache"
icon_state = "facial_7oclockmoustache"
mutton
name = "Mutton Chops"
icon_state = "facial_mutton"
muttonstache
name = "Mutton Chops and Moustache"
icon_state = "facial_muttonmus"
walrus
name = "Walrus Moustache"
icon_state = "facial_walrus"
/*
///////////////////////////////////
@@ -709,6 +714,7 @@
icon_state = "unathi_sidefrills"
species_allowed = list("Unathi")
//Skrell 'hairstyles'
skr_tentacle_m
name = "Skrell Male Tentacles"
icon_state = "skrell_hair_m"
@@ -721,6 +727,7 @@
species_allowed = list("Skrell")
gender = FEMALE
//Tajaran hairstyles
taj_ears
name = "Tajaran Ears"
icon_state = "ears_plain"
@@ -806,6 +813,77 @@
icon_state = "hair_fingerwave"
species_allowed = list("Tajara")
//Teshari things
teshari
name = "Teshari Default"
icon_state = "teshari_default"
species_allowed = list("Teshari")
teshari_altdefault
name = "Teshari Alt. Default"
icon_state = "teshari_ears"
species_allowed = list("Teshari")
teshari_tight
name = "Teshari Tight"
icon_state = "teshari_tight"
species_allowed = list("Teshari")
teshari_excited
name = "Teshari Spiky"
icon_state = "teshari_spiky"
species_allowed = list("Teshari")
teshari_spike
name = "Teshari Spike"
icon_state = "teshari_spike"
species_allowed = list("Teshari")
teshari_long
name = "Teshari Overgrown"
icon_state = "teshari_long"
species_allowed = list("Teshari")
teshari_burst
name = "Teshari Starburst"
icon_state = "teshari_burst"
species_allowed = list("Teshari")
teshari_shortburst
name = "Teshari Short Starburst"
icon_state = "teshari_burst_short"
species_allowed = list("Teshari")
teshari_mohawk
name = "Teshari Mohawk"
icon_state = "teshari_mohawk"
species_allowed = list("Teshari")
teshari_pointy
name = "Teshari Pointy"
icon_state = "teshari_pointy"
species_allowed = list("Teshari")
teshari_upright
name = "Teshari Upright"
icon_state = "teshari_upright"
species_allowed = list("Teshari")
teshari_mane
name = "Teshari Mane"
icon_state = "teshari_mane"
species_allowed = list("Teshari")
teshari_droopy
name = "Teshari Droopy"
icon_state = "teshari_droopy"
species_allowed = list("Teshari")
teshari_mushroom
name = "Teshari Mushroom"
icon_state = "teshari_mushroom"
species_allowed = list("Teshari")
/datum/sprite_accessory/facial_hair
taj_sideburns
@@ -838,6 +916,48 @@
icon_state = "facial_smallstache"
species_allowed = list("Tajara")
//unathi horn beards and the like
una_chinhorn
name = "Unathi Chin Horn"
icon_state = "facial_chinhorns"
species_allowed = list("Unathi")
una_hornadorns
name = "Unathi Horn Adorns"
icon_state = "facial_hornadorns"
species_allowed = list("Unathi")
una_spinespikes
name = "Unathi Spine Spikes"
icon_state = "facial_spikes"
species_allowed = list("Unathi")
una_dorsalfrill
name = "Unathi Dorsal Frill"
icon_state = "facial_dorsalfrill"
species_allowed = list("Unathi")
//Teshari things
teshari_beard
name = "Teshari Beard"
icon_state = "teshari_chin"
species_allowed = list("Teshari")
gender = NEUTER
teshari_scraggly
name = "Teshari Scraggly"
icon_state = "teshari_scraggly"
species_allowed = list("Teshari")
gender = NEUTER
teshari_chops
name = "Teshari Chops"
icon_state = "teshari_gap"
species_allowed = list("Teshari")
gender = NEUTER
//skin styles - WIP
//going to have to re-integrate this with surgery
//let the icon_state hold an icon preview for now

View File

@@ -323,13 +323,13 @@
// This does not handle transferring reagents to things.
// For example, splashing someone with water will get them wet and extinguish them if they are on fire,
// even if they are wearing an impermeable suit that prevents the reagents from contacting the skin.
/datum/reagents/proc/touch(var/atom/target)
/datum/reagents/proc/touch(var/atom/target, var/amount)
if(ismob(target))
touch_mob(target)
touch_mob(target, amount)
if(isturf(target))
touch_turf(target)
touch_turf(target, amount)
if(isobj(target))
touch_obj(target)
touch_obj(target, amount)
return
/datum/reagents/proc/touch_mob(var/mob/target)
@@ -341,21 +341,21 @@
update_total()
/datum/reagents/proc/touch_turf(var/turf/target)
/datum/reagents/proc/touch_turf(var/turf/target, var/amount)
if(!target || !istype(target))
return
for(var/datum/reagent/current in reagent_list)
current.touch_turf(target, current.volume)
current.touch_turf(target, amount)
update_total()
/datum/reagents/proc/touch_obj(var/obj/target)
/datum/reagents/proc/touch_obj(var/obj/target, var/amount)
if(!target || !istype(target))
return
for(var/datum/reagent/current in reagent_list)
current.touch_obj(target, current.volume)
current.touch_obj(target, amount)
update_total()
@@ -402,7 +402,7 @@
var/datum/reagents/R = new /datum/reagents(amount * multiplier)
. = trans_to_holder(R, amount, multiplier, copy)
R.touch_turf(target)
R.touch_turf(target, amount)
return
/datum/reagents/proc/trans_to_obj(var/obj/target, var/amount = 1, var/multiplier = 1, var/copy = 0) // Objects may or may not; if they do, it's probably a beaker or something and we need to transfer properly; otherwise, just touch.
@@ -412,7 +412,7 @@
if(!target.reagents)
var/datum/reagents/R = new /datum/reagents(amount * multiplier)
. = trans_to_holder(R, amount, multiplier, copy)
R.touch_obj(target)
R.touch_obj(target, amount)
return
return trans_to_holder(target.reagents, amount, multiplier, copy)

View File

@@ -156,9 +156,9 @@
glass_name = "welder fuel"
glass_desc = "Unless you are an industrial tool, this is probably not safe for consumption."
/datum/reagent/fuel/touch_turf(var/turf/T)
new /obj/effect/decal/cleanable/liquid_fuel(T, volume)
remove_self(volume)
/datum/reagent/fuel/touch_turf(var/turf/T, var/amount)
new /obj/effect/decal/cleanable/liquid_fuel(T, amount)
remove_self(amount)
return
/datum/reagent/fuel/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)

View File

@@ -87,6 +87,8 @@
var/strength_mod = 1
if(alien == IS_SKRELL)
strength_mod *= 5
if(alien == IS_TAJARA)
strength_mod *= 1.75
if(alien == IS_DIONA)
strength_mod = 0

View File

@@ -651,16 +651,25 @@
if(alien == IS_DIONA)
return
..()
if(alien == IS_TAJARA)
M.adjustToxLoss(0.5 * removed)
M.make_jittery(4) //extra sensitive to caffine
if(adj_temp > 0)
holder.remove_reagent("frostoil", 10 * removed)
/datum/reagent/nutriment/coffee/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
..()
if(alien == IS_TAJARA)
M.adjustToxLoss(2 * removed)
M.make_jittery(4)
return
/datum/reagent/drink/coffee/overdose(var/mob/living/carbon/M, var/alien)
if(alien == IS_DIONA)
return
if(alien == IS_TAJARA)
M.adjustToxLoss(4 * REM)
M.apply_effect(3, STUTTER)
M.make_jittery(5)
/datum/reagent/drink/coffee/icecoffee
@@ -1148,10 +1157,23 @@
M.sleeping = max(0, M.sleeping - 2)
if(M.bodytemperature > 310)
M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT))
if(alien == IS_TAJARA)
M.adjustToxLoss(0.5 * removed)
M.make_jittery(4) //extra sensitive to caffine
/datum/reagent/ethanol/coffee/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_TAJARA)
M.adjustToxLoss(2 * removed)
M.make_jittery(4)
return
..()
/datum/reagent/ethanol/coffee/overdose(var/mob/living/carbon/M, var/alien)
if(alien == IS_DIONA)
return
if(alien == IS_TAJARA)
M.adjustToxLoss(4 * REM)
M.apply_effect(3, STUTTER)
M.make_jittery(5)
/datum/reagent/ethanol/coffee/kahlua

View File

@@ -59,11 +59,11 @@
if(prob(50))
M.pl_effects()
/datum/reagent/toxin/phoron/touch_turf(var/turf/simulated/T)
/datum/reagent/toxin/phoron/touch_turf(var/turf/simulated/T, var/amount)
if(!istype(T))
return
T.assume_gas("volatile_fuel", volume, T20C)
remove_self(volume)
T.assume_gas("volatile_fuel", amount, T20C)
remove_self(amount)
/datum/reagent/toxin/cyanide //Fast and Lethal
name = "Cyanide"
@@ -89,6 +89,8 @@
strength = 2
/datum/reagent/toxin/hyperzine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_TAJARA)
removed *= 1.25
..()
if(prob(5))
M.emote(pick("twitch", "blink_r", "shiver"))
@@ -104,6 +106,8 @@
strength = 3
/datum/reagent/toxin/stimm/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_TAJARA)
removed *= 1.25
..()
if(prob(15))
M.emote(pick("twitch", "blink_r", "shiver"))
@@ -212,17 +216,14 @@
W.visible_message("<span class='notice'>The fungi are completely dissolved by the solution!</span>")
/datum/reagent/toxin/plantbgone/touch_obj(var/obj/O, var/volume)
..()
if(istype(O, /obj/effect/plant))
qdel(O)
/datum/reagent/toxin/plantbgone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
..()
if(alien == IS_DIONA)
M.adjustToxLoss(50 * removed)
/datum/reagent/toxin/plantbgone/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
..()
if(alien == IS_DIONA)
M.adjustToxLoss(50 * removed)