Merge branch 'master' of https://github.com/tgstation/-tg-station into alanedaggerpoe

Conflicts:
	code/modules/paperwork/pen.dm
This commit is contained in:
Miauw
2015-08-16 12:00:04 +02:00
22 changed files with 168 additions and 55 deletions
+1
View File
@@ -19,4 +19,5 @@ var/datum/subsystem/mobs/SSmob
if(thing)
thing:Life(seconds)
continue
WARNING("Found a null in the mob list. Removing.")
mob_list.Remove(thing)
+15 -1
View File
@@ -157,6 +157,20 @@
cast_sound = "sound/magic/ForceWall.ogg"
/obj/effect/proc_holder/spell/aoe_turf/conjure/timestop
name = "Stop Time"
desc = "This spell stops time for everyone except for you, allowing you to move freely while your enemies and even projectiles are frozen."
charge_max = 300
clothes_req = 1
invocation = "TOKI WO TOMARE"
invocation_type = "shout"
range = 0
cooldown_min = 90
summon_amt = 1
action_icon_state = "time"
summon_type = list(/obj/effect/timestop/wizard)
/obj/effect/proc_holder/spell/aoe_turf/conjure/carp
name = "Summon Carp"
desc = "This spell conjures a simple carp."
@@ -319,4 +333,4 @@
var/mob/living/M = AM
M.Weaken(2)
M << "<span class='userdanger'>You're thrown back by a mystical force!</span>"
spawn(0) AM.throw_at(throwtarget, ((Clamp((maxthrow - (Clamp(distfromcaster - 2, 0, distfromcaster))), 3, maxthrow))), 1,user)//So stuff gets tossed around at the same time.
spawn(0) AM.throw_at(throwtarget, ((Clamp((maxthrow - (Clamp(distfromcaster - 2, 0, distfromcaster))), 3, maxthrow))), 1,user)//So stuff gets tossed around at the same time.
+4 -10
View File
@@ -303,10 +303,10 @@ var/list/uplink_items = list()
cost = 2
gamemodes = list(/datum/game_mode/nuclear)
/datum/uplink_item/ammo/bulltoxin
name = "Drum Magazine - 12g Bioterror"
desc = "An alternative 8-round toxic magazine for use in the Bulldog shotgun. Contains debilitating toxins to make your target die an excruciatingly rapid death."
item = /obj/item/ammo_box/magazine/m12g/bioterror
/datum/uplink_item/ammo/bioterror
name = "Box of Bioterror Syringes"
desc = "A box full of preloaded syringes, containing various chemicals that seize up the victim's motor and broca system , making it impossible for them to move or speak while in their system."
item = /obj/item/weapon/storage/box/syndie_kit/bioterror
cost = 6
gamemodes = list(/datum/game_mode/nuclear)
@@ -353,12 +353,6 @@ var/list/uplink_items = list()
cost = 6
excludefrom = list(/datum/game_mode/nuclear)
/datum/uplink_item/stealthy_weapons/edagger
name = "Energy Dagger"
desc = "A dagger made of energy that looks and functions as a pen when off."
item = /obj/item/weapon/pen/edagger
cost = 3
/datum/uplink_item/stealthy_weapons/foampistol
name = "Toy Gun (with Stun Darts)"
desc = "An innocent-looking toy pistol designed to fire foam darts. Comes loaded with riot-grade darts, to incapacitate a target."
+25 -9
View File
@@ -82,8 +82,10 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
//And then set it up to be handed out in forge_changeling_objectives
var/list/team_objectives = typesof(/datum/objective/changeling_team_objective) - /datum/objective/changeling_team_objective
var/list/possible_team_objectives = list()
for(var/datum/objective/changeling_team_objective/T in team_objectives)
if(changelings.len >= initial(T.min_lings))
for(var/T in team_objectives)
var/datum/objective/changeling_team_objective/CTO = T
if(changelings.len >= initial(CTO.min_lings))
possible_team_objectives += T
if(possible_team_objectives.len && prob(20*changelings.len))
@@ -114,6 +116,14 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
//No escape alone because changelings aren't suited for it and it'd probably just lead to rampant robusting
//If it seems like they'd be able to do it in play, add a 10% chance to have to escape alone
var/escape_objective_possible = TRUE
//if there's a team objective, check if it's compatible with escape objectives
for(var/datum/objective/changeling_team_objective/CTO in changeling.objectives)
if(!CTO.escape_objective_compatible)
escape_objective_possible = FALSE
break
var/datum/objective/absorb/absorb_objective = new
absorb_objective.owner = changeling
absorb_objective.gen_amount_goal(6, 8)
@@ -149,14 +159,15 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
maroon_objective.find_target()
changeling.objectives += maroon_objective
if (!(locate(/datum/objective/escape) in changeling.objectives))
if (!(locate(/datum/objective/escape) in changeling.objectives) && escape_objective_possible)
var/datum/objective/escape/escape_with_identity/identity_theft = new
identity_theft.owner = changeling
identity_theft.target = maroon_objective.target
identity_theft.update_explanation_text()
changeling.objectives += identity_theft
escape_objective_possible = FALSE
if (!(locate(/datum/objective/escape) in changeling.objectives))
if (!(locate(/datum/objective/escape) in changeling.objectives) && escape_objective_possible)
if(prob(50))
var/datum/objective/escape/escape_objective = new
escape_objective.owner = changeling
@@ -164,8 +175,12 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
else
var/datum/objective/escape/escape_with_identity/identity_theft = new
identity_theft.owner = changeling
identity_theft.find_target()
if(team_mode)
identity_theft.find_target_by_role(role = "Changeling", role_type = 1, invert = 1)
else
identity_theft.find_target()
changeling.objectives += identity_theft
escape_objective_possible = FALSE
@@ -265,7 +280,7 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
//var/list/absorbed_dna = list()
//var/list/protected_dna = list() //dna that is not lost when capacity is otherwise full
var/dna_max = 6 //How many extra DNA strands the changeling can store for transformation.
var/absorbedcount = 1 //We would require at least 1 sample of compatible DNA to have taken on the form of a human.
var/absorbedcount = 0
var/chem_charges = 20
var/chem_storage = 75
var/chem_recharge_rate = 1
@@ -349,7 +364,7 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
prof.dna = new_dna
prof.name = H.real_name
prof.protected = protect
var/list/slots = list("head", "wear_mask", "back", "wear_suit", "w_uniform", "shoes", "belt", "gloves", "glasses", "ears", "wear_id", "s_store")
for(var/slot in slots)
var/obj/item/I = H.vars[slot]
@@ -363,6 +378,7 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
prof.exists_list[slot] = 1
stored_profiles += prof
absorbedcount++
return prof
@@ -425,7 +441,7 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
/datum/changelingprofile
var/name = "a bug"
var/protected = 0
var/datum/dna/dna = null
@@ -435,6 +451,6 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
var/list/exists_list = list()
var/list/item_color_list = list()
var/list/item_state_list = list()
/datum/changelingprofile/Destroy()
qdel(dna)
+25 -14
View File
@@ -68,7 +68,7 @@
/datum/objective/assassinate/find_target_by_role(role, role_type=0, invert=0)
if(!invert)
target_role_type = role_type
..(role, role_type)
..()
return target
/datum/objective/assassinate/check_completion()
@@ -93,7 +93,7 @@
/datum/objective/mutiny/find_target_by_role(role, role_type=0,invert=0)
if(!invert)
target_role_type = role_type
..(role, role_type)
..()
return target
/datum/objective/mutiny/check_completion()
@@ -123,7 +123,7 @@
/datum/objective/maroon/find_target_by_role(role, role_type=0, invert=0)
if(!invert)
target_role_type = role_type
..(role, role_type)
..()
return target
/datum/objective/maroon/check_completion()
@@ -149,7 +149,7 @@
/datum/objective/debrain/find_target_by_role(role, role_type=0, invert=0)
if(!invert)
target_role_type = role_type
..(role, role_type)
..()
return target
/datum/objective/debrain/check_completion()
@@ -183,7 +183,7 @@
/datum/objective/protect/find_target_by_role(role, role_type=0, invert=0)
if(!invert)
target_role_type = role_type
..(role, role_type)
..()
return target
/datum/objective/protect/check_completion()
@@ -668,7 +668,7 @@ var/global/list/possible_items_special = list()
martyr_compatible = 0 //Suicide is not teamwork!
explanation_text = "Changeling Friendship!"
var/min_lings = 3 //Minimum amount of lings for this team objective to be possible
var/escape_objective_compatible = FALSE
//Impersonate department
@@ -701,13 +701,18 @@ var/global/list/possible_items_special = list()
var/ling_count = ticker.mode.changelings
for(var/datum/mind/M in ticker.minds)
if(department_head in M.assigned_job.department_head)
if(M in ticker.mode.changelings)
continue
if(department_head in get_department_heads(M.assigned_role))
if(ling_count)
ling_count--
department_minds += M
department_real_names += M.current.real_name
else
break
if(!department_minds.len)
log_game("[type] has failed to find department staff, and has removed itself. the round will continue normally")
owner.objectives -= src
qdel(src)
return
@@ -724,16 +729,19 @@ var/global/list/possible_items_special = list()
var/needed_heads = rand(min_lings,command_positions.len)
needed_heads = min(ticker.mode.changelings.len,needed_heads)
for(var/datum/mind/possible_head in ticker.minds)
if(possible_head in ticker.mode.changelings) //Looking at you HoP.
var/list/heads = ticker.mode.get_living_heads()
for(var/datum/mind/head in heads)
if(head in ticker.mode.changelings) //Looking at you HoP.
continue
if(possible_head.assigned_job.title in command_positions)
if(needed_heads)
department_minds += possible_head
department_real_names += possible_head.current.real_name
needed_heads--
if(needed_heads)
department_minds += head
department_real_names += head.current.real_name
needed_heads--
else
break
if(!department_minds.len)
log_game("[type] has failed to find department heads, and has removed itself. the round will continue normally")
owner.objectives -= src
qdel(src)
return
@@ -783,6 +791,9 @@ var/global/list/possible_items_special = list()
//Check each department member's mind to see if any of them made it to centcomm alive, if they did it's an automatic fail
for(var/datum/mind/M in department_minds)
if(M in ticker.mode.changelings) //Lings aren't picked for this, but let's be safe
continue
if(M.current)
var/turf/mloc = get_turf(M.current)
if(mloc.onCentcom() && (M.current.stat != DEAD))
+5
View File
@@ -119,6 +119,11 @@
spell_type = /obj/effect/proc_holder/spell/aoe_turf/repulse
log_name = "RP"
/datum/spellbook_entry/timestop
name = "Time Stop"
spell_type = /obj/effect/proc_holder/spell/aoe_turf/conjure/timestop
log_name = "TS"
/datum/spellbook_entry/smoke
name = "Smoke"
spell_type = /obj/effect/proc_holder/spell/targeted/smoke
+12
View File
@@ -125,3 +125,15 @@ var/list/nonhuman_positions = list(
/proc/guest_jobbans(job)
return ((job in command_positions) || (job in nonhuman_positions) || (job in security_positions))
//this is necessary because antags happen before job datums are handed out, but NOT before they come into existence
//so I can't simply use job datum.department_head straight from the mind datum, laaaaame.
/proc/get_department_heads(var/job_title)
if(!job_title)
return list()
for(var/datum/job/J in SSjob.occupations)
if(J.title == job_title)
return J.department_head //this is a list
@@ -137,6 +137,20 @@
O.update_icon()
return
/obj/item/weapon/storage/box/syndie_kit/bioterror
name = "bioterror syringe box"
/obj/item/weapon/storage/box/syndie_kit/bioterror/New()
..()
new /obj/item/weapon/reagent_containers/syringe/bioterror(src)
new /obj/item/weapon/reagent_containers/syringe/bioterror(src)
new /obj/item/weapon/reagent_containers/syringe/bioterror(src)
new /obj/item/weapon/reagent_containers/syringe/bioterror(src)
new /obj/item/weapon/reagent_containers/syringe/bioterror(src)
new /obj/item/weapon/reagent_containers/syringe/bioterror(src)
new /obj/item/weapon/reagent_containers/syringe/bioterror(src)
return
/obj/item/weapon/storage/box/syndie_kit/imp_adrenal
name = "boxed adrenal implant (with injector)"
+2 -2
View File
@@ -80,7 +80,7 @@
reagents.add_reagent("morphine", 20)
reagents.add_reagent("mutetoxin", 15)
reagents.add_reagent("tirizene", 10)
..()
..()
/*
* (Alan) Edaggers
@@ -119,4 +119,4 @@
item_state = "edagger"
else
icon_state = initial(icon_state) //looks like a normal pen when off.
item_state = initial(item_state)
item_state = initial(item_state)
+1 -1
View File
@@ -243,7 +243,7 @@
new_mob << "<B>Your form morphs into that of a [randomize].</B>"
del(M)
qdel(M)
return new_mob
/obj/item/projectile/magic/animate
@@ -579,7 +579,7 @@
var/mob/mob = get_mob_by_key(holder.my_atom.fingerprintslast)
var/obj/effect/timestop/T = new /obj/effect/timestop
T.loc = get_turf(holder.my_atom)
T.immune = mob
T.immune += mob
T.timestop()
@@ -221,6 +221,11 @@
desc = "Contains antiviral agents."
list_reagents = list("spaceacillin" = 15)
/obj/item/weapon/reagent_containers/syringe/bioterror
name = "bioterror syringe"
desc = "Contains several paralyzing reagents."
list_reagents = list("neurotoxin" = 5, "mutetoxin" = 5, "sodium_thiopental" = 5)
/obj/item/weapon/reagent_containers/syringe/stimulants
name = "Stimpack"
desc = "Contains stimulants."
@@ -410,7 +410,7 @@
var/mob/living/carbon/human/G = new /mob/living/carbon/human
if(prob(50)) G.gender = "female"
hardset_dna(G, null, null, null, null, /datum/species/golem/adamantine)
G.set_cloned_appearance()
G.real_name = text("Adamantine Golem ([rand(1, 1000)])")
G.dna.species.auto_equip(G)
@@ -436,13 +436,16 @@
pixel_x = -64
pixel_y = -64
unacidable = 1
var/mob/living/immune = null // the one who creates the timestop is immune
var/mob/living/immune = list() // the one who creates the timestop is immune
var/freezerange = 2
var/duration = 140
alpha = 125
/obj/effect/timestop/New()
..()
for(var/mob/living/M in player_list)
for(var/obj/effect/proc_holder/spell/aoe_turf/conjure/timestop/T in M.mind.spell_list) //People who can stop time are immune to timestop
immune |= M
timestop()
@@ -451,7 +454,7 @@
while(loc)
if(duration)
for(var/mob/living/M in orange (freezerange, src.loc))
if(M == immune)
if(M in immune)
continue
M.stunned = 10
M.anchored = 1
@@ -478,6 +481,9 @@
sleep(1)
/obj/effect/timestop/wizard
duration = 90
/obj/item/stack/tile/bluespace
name = "bluespace floor tile"
+2
View File
@@ -59,6 +59,8 @@
<h3 class="author">Miauw updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Changeling transformations have been upgraded to also include clothing instead of just DNA.</li>
<li class="tweak">Patches no longer work on dead people.</li>
<li class="rscadd">Added 15-force edaggers that function like pens when off.</li>
</ul>
<h3 class="author">MrPerson updated:</h3>
<ul class="changes bgimages16">
+2
View File
@@ -1562,6 +1562,8 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
Miauw:
- rscadd: Changeling transformations have been upgraded to also include clothing
instead of just DNA.
- tweak: Patches no longer work on dead people.
- rscadd: Added 15-force edaggers that function like pens when off.
MrPerson:
- rscadd: Objects being dragged will no longer get shoved out of your grasp by space
wind. Retrieving dead bodies should be possible.
@@ -0,0 +1,36 @@
################################
# Example Changelog File
#
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
#
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
# When it is, any changes listed below will disappear.
#
# Valid Prefixes:
# bugfix
# wip (For works in progress)
# tweak
# soundadd
# sounddel
# rscadd (general adding of nice things)
# rscdel (general deleting of nice things)
# imageadd
# imagedel
# spellcheck (typo fixes)
# experiment
# tgs (TG-ported fixes?)
#################################
# Your name.
author: Kor
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
# Any changes you've made. See valid prefix list above.
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
# SCREW THIS UP AND IT WON'T WORK.
# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog.
changes:
- rscadd: "The wizard can now stop time."
@@ -0,0 +1,9 @@
author: MMMiracles
delete-after: True
changes:
- tweak: "Revamps bioterror darts into a less-lethal, syringe form. Removed the coniine and spore toxins to keep it solely for quiet take-downs."
-7
View File
@@ -1,7 +0,0 @@
#miauw wuz heer xd
author: Miauw
delete-after: True
changes:
- tweak: "Patches no longer work on dead people."
-7
View File
@@ -1,7 +0,0 @@
#insert dank meme here
author: Miauw
delete-after: True
changes:
- rscadd: "Added 15-force edaggers that function like pens when off."
Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB