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

This commit is contained in:
Anewbe
2017-10-01 21:52:36 -05:00
67 changed files with 995 additions and 271 deletions
+8 -1
View File
@@ -79,6 +79,7 @@
var/amount_grown = 0
var/spiders_min = 6
var/spiders_max = 24
var/spider_type = /obj/effect/spider/spiderling
New()
pixel_x = rand(3,-3)
pixel_y = rand(3,-3)
@@ -105,7 +106,7 @@
O = loc
for(var/i=0, i<num, i++)
var/spiderling = new /obj/effect/spider/spiderling(src.loc, src)
var/spiderling = new spider_type(src.loc, src)
if(O)
O.implants += spiderling
qdel(src)
@@ -114,6 +115,9 @@
spiders_min = 1
spiders_max = 3
/obj/effect/spider/eggcluster/small/frost
spider_type = /obj/effect/spider/spiderling/frost
/obj/effect/spider/spiderling
name = "spiderling"
desc = "It never stays still for long."
@@ -127,6 +131,9 @@
var/travelling_in_vent = 0
var/list/grow_as = list(/mob/living/simple_animal/hostile/giant_spider, /mob/living/simple_animal/hostile/giant_spider/nurse, /mob/living/simple_animal/hostile/giant_spider/hunter)
/obj/effect/spider/spiderling/frost
grow_as = list(/mob/living/simple_animal/hostile/giant_spider/frost)
/obj/effect/spider/spiderling/New(var/location, var/atom/parent)
pixel_x = rand(6,-6)
pixel_y = rand(6,-6)
@@ -132,4 +132,19 @@
/obj/item/device/t_scanner/dropped(mob/user)
set_user_client(null)
/obj/item/device/t_scanner/upgraded
name = "Upgraded T-ray Scanner"
desc = "An upgraded version of the terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes."
matter = list(DEFAULT_WALL_MATERIAL = 500, PHORON = 150)
origin_tech = list(TECH_MAGNET = 4, TECH_ENGINEERING = 5)
scan_range = 3
/obj/item/device/t_scanner/advanced
name = "Advanced T-ray Scanner"
desc = "An advanced version of the terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes."
matter = list(DEFAULT_WALL_MATERIAL = 1500, PHORON = 200, SILVER = 250)
origin_tech = list(TECH_MAGNET = 7, TECH_ENGINEERING = 7, TECH_MATERIAL = 6)
scan_range = 7
#undef OVERLAY_CACHE_LEN
@@ -4,16 +4,18 @@
desc = "This item spawns stack of 50 of a given material."
icon = 'icons/misc/mark.dmi'
icon_state = "x4"
var/material = ""
// var/material = ""
var/obj/item/stack/type_to_spawn = null
/obj/fiftyspawner/New()
//spawns the 50-stack and qdels self
..()
var/obj_path = text2path("/obj/item/stack/[material]")
var/obj/item/stack/M = new obj_path(src.loc)
// var/obj_path = text2path("/obj/item/stack/[material]")
var/obj/item/stack/M = new type_to_spawn(src.loc)
M.amount = M.max_amount //some stuff spawns with 60, we're still calling it fifty
M.update_icon() // Some stacks have different sprites depending on how full they are.
qdel(src)
/obj/fiftyspawner/rods
name = "stack of rods" //this needs to be defined for cargo
material = "rods"
type_to_spawn = /obj/item/stack/rods
+3 -1
View File
@@ -1,7 +1,7 @@
/obj/item/stack/medical
name = "medical pack"
singular_name = "medical pack"
icon = 'icons/obj/items.dmi'
icon = 'icons/obj/stacks.dmi'
amount = 10
max_amount = 10
w_class = ITEMSIZE_SMALL
@@ -64,6 +64,7 @@
desc = "Some sterile gauze to wrap around bloody stumps."
icon_state = "brutepack"
origin_tech = list(TECH_BIO = 1)
no_variants = FALSE
/obj/item/stack/medical/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob)
if(..())
@@ -123,6 +124,7 @@
icon_state = "ointment"
heal_burn = 1
origin_tech = list(TECH_BIO = 1)
no_variants = FALSE
/obj/item/stack/medical/ointment/attack(mob/living/carbon/M as mob, mob/user as mob)
if(..())
+3 -2
View File
@@ -2,11 +2,12 @@
name = "nanopaste"
singular_name = "nanite swarm"
desc = "A tube of paste containing swarms of repair nanites. Very effective in repairing robotic machinery."
icon = 'icons/obj/nanopaste.dmi'
icon_state = "tube"
icon = 'icons/obj/stacks.dmi'
icon_state = "nanopaste"
origin_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3)
amount = 10
w_class = ITEMSIZE_SMALL
no_variants = FALSE
/obj/item/stack/nanopaste/attack(mob/living/M as mob, mob/user as mob)
if (!istype(M) || !istype(user))
+9
View File
@@ -21,10 +21,19 @@
uses_charge = 1
charge_costs = list(500)
stacktype = /obj/item/stack/rods
no_variants = TRUE
/obj/item/stack/rods/New()
..()
recipes = rods_recipes
update_icon()
/obj/item/stack/rods/update_icon()
var/amount = get_amount()
if((amount <= 5) && (amount > 0))
icon_state = "rods-[amount]"
else
icon_state = "rods"
var/global/list/datum/stack_recipe/rods_recipes = list( \
new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = 1, on_floor = 1),
@@ -3,6 +3,7 @@
desc = "The by-product of human farming."
singular_name = "human skin piece"
icon_state = "sheet-hide"
no_variants = FALSE
/obj/item/stack/material/animalhide/human
amount = 50
@@ -80,6 +81,7 @@
desc = "This hide was stripped of it's hair, but still needs tanning."
singular_name = "hairless hide piece"
icon_state = "sheet-hairlesshide"
no_variants = FALSE
/obj/item/stack/material/hairlesshide
amount = 50
@@ -91,6 +93,7 @@
icon_state = "sheet-wetleather"
var/wetness = 30 //Reduced when exposed to high temperautres
var/drying_threshold_temperature = 500 //Kelvin to start drying
no_variants = FALSE
/obj/item/stack/material/wetleather
amount = 50
+18 -1
View File
@@ -12,6 +12,7 @@
/obj/item/stack
gender = PLURAL
origin_tech = list(TECH_MATERIAL = 1)
icon = 'icons/obj/stacks.dmi'
var/list/datum/stack_recipe/recipes
var/singular_name
var/amount = 1
@@ -21,6 +22,7 @@
var/uses_charge = 0
var/list/charge_costs = null
var/list/datum/matter_synth/synths = null
var/no_variants = TRUE // Determines whether the item should update it's sprites based on amount.
/obj/item/stack/New(var/loc, var/amount=null)
..()
@@ -28,6 +30,7 @@
stacktype = type
if (amount)
src.amount = amount
update_icon()
return
/obj/item/stack/Destroy()
@@ -37,6 +40,18 @@
usr << browse(null, "window=stack")
return ..()
/obj/item/stack/update_icon()
if(no_variants)
icon_state = initial(icon_state)
else
if(amount <= (max_amount * (1/3)))
icon_state = initial(icon_state)
else if (amount <= (max_amount * (2/3)))
icon_state = "[initial(icon_state)]_2"
else
icon_state = "[initial(icon_state)]_3"
item_state = initial(icon_state)
/obj/item/stack/examine(mob/user)
if(..(user, 1))
if(!uses_charge)
@@ -189,6 +204,7 @@
if(usr)
usr.remove_from_mob(src)
qdel(src) //should be safe to qdel immediately since if someone is still using this stack it will persist for a little while longer
update_icon()
return 1
else
if(get_amount() < used)
@@ -205,6 +221,7 @@
return 0
else
amount += extra
update_icon()
return 1
else if(!synths || synths.len < uses_charge)
return 0
@@ -298,7 +315,7 @@
/obj/item/stack/attack_hand(mob/user as mob)
if (user.get_inactive_hand() == src)
var/N = input("How many stacks of [src] would you like to split off?", "Split stacks", 1) as num|null
var/N = input("How many stacks of [src] would you like to split off? There are currently [amount].", "Split stacks", 1) as num|null
if(N)
var/obj/item/stack/F = src.split(N)
if (F)
@@ -2,48 +2,48 @@
/obj/fiftyspawner/grass
name = "stack of grass"
material = "tile/grass"
type_to_spawn = /obj/item/stack/tile/grass
/obj/fiftyspawner/wood
name = "stack of wood"
material = "tile/wood"
type_to_spawn = /obj/item/stack/tile/wood
/obj/fiftyspawner/carpet
name = "stack of carpet"
material = "tile/carpet"
type_to_spawn = /obj/item/stack/tile/carpet
/obj/fiftyspawner/bluecarpet
name = "stack of blue carpet"
material = "tile/carpet/blue"
type_to_spawn = /obj/item/stack/tile/carpet/blue
/obj/fiftyspawner/floor
name = "stack of floor tiles"
material = "tile/floor"
type_to_spawn = /obj/item/stack/tile/floor
/obj/fiftyspawner/floor_red
name = "stack of red floor tiles"
material = "tile/floor_red"
type_to_spawn = /obj/item/stack/tile/floor/red
/obj/fiftyspawner/floor_steel
name = "stack of steel floor tiles"
material = "tile/floor_steel"
type_to_spawn = /obj/item/stack/tile/floor/steel
/obj/fiftyspawner/floor_white
name = "stack of white floor tiles"
material = "tile/floor_white"
type_to_spawn = /obj/item/stack/tile/floor/white
/obj/fiftyspawner/floor_yellow
name = "stack of yellow floor tiles"
material = "tile/floor_yellow"
type_to_spawn = /obj/item/stack/tile/floor/yellow
/obj/fiftyspawner/floor_dark
name = "stack of dark floor tiles"
material = "tile/floor_dark"
type_to_spawn = /obj/item/stack/tile/floor/dark
/obj/fiftyspawner/floor_freezer
name = "stack of freezer tiles"
material = "tile/floor_freezer"
type_to_spawn = /obj/item/stack/tile/floor/freezer
/obj/fiftyspawner/linoleum
name = "stack of linoleum tiles"
material = "tile/linoleum"
type_to_spawn = /obj/item/stack/tile/linoleum
@@ -36,6 +36,7 @@
throw_range = 20
flags = 0
origin_tech = list(TECH_BIO = 1)
no_variants = FALSE
/obj/item/stack/tile/grass/fifty
amount = 50
@@ -52,6 +53,7 @@
throw_speed = 5
throw_range = 20
flags = 0
no_variants = FALSE
/obj/item/stack/tile/wood/fifty
amount = 50
@@ -77,12 +79,14 @@
throw_speed = 5
throw_range = 20
flags = 0
no_variants = FALSE
/obj/item/stack/tile/carpet/blue
name = "blue carpet"
singular_name = "blue carpet"
desc = "A piece of blue carpet. It is the same size as a normal floor tile!"
icon_state = "tile-bluecarpet"
no_variants = FALSE
// TODO - Add descriptions to these
/obj/item/stack/tile/carpet/bcarpet
@@ -111,29 +115,34 @@
throw_speed = 5
throw_range = 20
flags = CONDUCT
no_variants = FALSE
/obj/item/stack/tile/floor/red
name = "red floor tile"
singular_name = "red floor tile"
color = COLOR_RED_GRAY
icon_state = "tile_white"
no_variants = FALSE
// VOREStation Edit
/obj/item/stack/tile/floor/techgrey
name = "grey techfloor tile"
singular_name = "grey techfloor tile"
icon_state = "techtile_grey"
no_variants = FALSE
/obj/item/stack/tile/floor/techgrid
name = "grid techfloor tile"
singular_name = "grid techfloor tile"
icon_state = "techtile_grid"
no_variants = FALSE
/obj/item/stack/tile/floor/steel_dirty
name = "steel floor tile"
singular_name = "steel floor tile"
icon_state = "tile_steel"
matter = list("plasteel" = SHEET_MATERIAL_AMOUNT / 4)
no_variants = FALSE
// VOREStation Edit End
/obj/item/stack/tile/floor/steel
@@ -141,30 +150,35 @@
singular_name = "steel floor tile"
icon_state = "tile_steel"
matter = list("plasteel" = SHEET_MATERIAL_AMOUNT / 4)
no_variants = FALSE
/obj/item/stack/tile/floor/white
name = "white floor tile"
singular_name = "white floor tile"
icon_state = "tile_white"
matter = list("plastic" = SHEET_MATERIAL_AMOUNT / 4)
no_variants = FALSE
/obj/item/stack/tile/floor/yellow
name = "yellow floor tile"
singular_name = "yellow floor tile"
color = COLOR_BROWN
icon_state = "tile_white"
no_variants = FALSE
/obj/item/stack/tile/floor/dark
name = "dark floor tile"
singular_name = "dark floor tile"
icon_state = "fr_tile"
icon_state = "tile_steel"
matter = list("plasteel" = SHEET_MATERIAL_AMOUNT / 4)
no_variants = FALSE
/obj/item/stack/tile/floor/freezer
name = "freezer floor tile"
singular_name = "freezer floor tile"
icon_state = "tile_freezer"
matter = list("plastic" = SHEET_MATERIAL_AMOUNT / 4)
no_variants = FALSE
/obj/item/stack/tile/floor/cyborg
name = "floor tile synthesizer"
@@ -186,3 +200,4 @@
throw_speed = 5
throw_range = 20
flags = 0
no_variants = FALSE
+2 -14
View File
@@ -287,6 +287,7 @@
desc = "Woefully underpowered in D20."
icon = 'icons/obj/weapons.dmi'
icon_state = "katana"
item_state = "katana"
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_material.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_material.dmi',
@@ -697,19 +698,6 @@
desc = "A \"Space Life\" brand Emergency Response Team Commander action figure."
icon_state = "ert"
/obj/item/toy/katana
name = "replica katana"
desc = "Woefully underpowered in D20."
icon = 'icons/obj/weapons.dmi'
icon_state = "katana"
item_state = "katana"
flags = CONDUCT
slot_flags = SLOT_BELT | SLOT_BACK
force = 5
throwforce = 5
w_class = ITEMSIZE_NORMAL
attack_verb = list("attacked", "slashed", "stabbed", "sliced")
/obj/item/toy/therapy_red
name = "red therapy doll"
desc = "A toy for therapeutic and recreational purposes. This one is red."
@@ -898,4 +886,4 @@
icon_state = "tinyxmastree"
w_class = ITEMSIZE_TINY
force = 1
throwforce = 1
throwforce = 1
@@ -8,16 +8,27 @@
w_class = ITEMSIZE_SMALL
matter = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 1000)
var/obj/item/weapon/implant/imp = null
var/active = 1
/obj/item/weapon/implanter/attack_self(var/mob/user)
active = !active
to_chat(user, "<span class='notice'>You [active ? "" : "de"]activate \the [src].</span>")
update()
/obj/item/weapon/implanter/verb/remove_implant(var/mob/user)
set category = "Object"
set name = "Remove Implant"
set src in usr
if(!imp)
return ..()
return
imp.loc = get_turf(src)
user.put_in_hands(imp)
user << "<span class='notice'>You remove \the [imp] from \the [src].</span>"
to_chat(user, "<span class='notice'>You remove \the [imp] from \the [src].</span>")
name = "implanter"
imp = null
update()
return
/obj/item/weapon/implanter/proc/update()
@@ -25,39 +36,42 @@
src.icon_state = "implanter1"
else
src.icon_state = "implanter0"
src.icon_state += "_[active]"
return
/obj/item/weapon/implanter/attack(mob/M as mob, mob/user as mob)
if (!istype(M, /mob/living/carbon))
return
if (user && src.imp)
M.visible_message("<span class='warning'>[user] is attemping to implant [M].</span>")
if(active)
if (imp)
M.visible_message("<span class='warning'>[user] is attemping to implant [M].</span>")
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
user.do_attack_animation(M)
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
user.do_attack_animation(M)
var/turf/T1 = get_turf(M)
if (T1 && ((M == user) || do_after(user, 50)))
if(user && M && (get_turf(M) == T1) && src && src.imp)
M.visible_message("<span class='warning'>[M] has been implanted by [user].</span>")
var/turf/T1 = get_turf(M)
if (T1 && ((M == user) || do_after(user, 50)))
if(user && M && (get_turf(M) == T1) && src && src.imp)
M.visible_message("<span class='warning'>[M] has been implanted by [user].</span>")
admin_attack_log(user, M, "Implanted using \the [src.name] ([src.imp.name])", "Implanted with \the [src.name] ([src.imp.name])", "used an implanter, [src.name] ([src.imp.name]), on")
admin_attack_log(user, M, "Implanted using \the [src.name] ([src.imp.name])", "Implanted with \the [src.name] ([src.imp.name])", "used an implanter, [src.name] ([src.imp.name]), on")
if(src.imp.implanted(M))
src.imp.loc = M
src.imp.imp_in = M
src.imp.implanted = 1
if (ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
affected.implants += src.imp
imp.part = affected
if(src.imp.implanted(M))
src.imp.loc = M
src.imp.imp_in = M
src.imp.implanted = 1
if (ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
affected.implants += src.imp
imp.part = affected
BITSET(H.hud_updateflag, IMPLOYAL_HUD)
src.imp = null
update()
BITSET(H.hud_updateflag, IMPLOYAL_HUD)
src.imp = null
update()
else
to_chat(user, "<span class='warning'>You need to activate \the [src.name] first.</span>")
return
/obj/item/weapon/implanter/loyalty
@@ -112,19 +126,26 @@
var/obj/item/weapon/implant/compressed/c = imp
if (!c) return
if (c.scanned == null)
user << "Please scan an object with the implanter first."
to_chat(user, "Please scan an object with the implanter first.")
return
..()
/obj/item/weapon/implanter/compressed/afterattack(atom/A, mob/user as mob, proximity)
if(!proximity)
return
if(!active)
to_chat(user, "<span class='warning'>Activate \the [src.name] first.</span>")
return
if(istype(A,/obj/item) && imp)
var/obj/item/weapon/implant/compressed/c = imp
if (c.scanned)
user << "<span class='warning'>Something is already scanned inside the implant!</span>"
to_chat(user, "<span class='warning'>Something is already scanned inside the implant!</span>")
return
c.scanned = A
if(istype(A, /obj/item/weapon/storage))
to_chat(user, "<span class='warning'>You can't store \the [A.name] in this!</span>")
c.scanned = null
return
if(istype(A.loc,/mob/living/carbon/human))
var/mob/living/carbon/human/H = A.loc
H.remove_from_mob(A)
@@ -85,19 +85,4 @@
thrown_force_divisor = 0.25 // as above
dulled_divisor = 0.75 //Still metal on a long pole
w_class = ITEMSIZE_SMALL
attack_verb = list("slashed", "sliced", "cut", "clawed")
/obj/item/weapon/material/scythe
icon_state = "scythe0"
name = "scythe"
desc = "A sharp and curved blade on a long fibremetal handle, this tool makes it easy to reap what you sow."
force_divisor = 0.275 // 16 with hardness 60 (steel)
thrown_force_divisor = 0.25 // 5 with weight 20 (steel)
sharp = 1
edge = 1
throw_speed = 1
throw_range = 3
w_class = ITEMSIZE_LARGE
slot_flags = SLOT_BACK
origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 2)
attack_verb = list("chopped", "sliced", "cut", "reaped")
attack_verb = list("slashed", "sliced", "cut", "clawed")
@@ -123,6 +123,15 @@
var/obj/effect/plant/P = A
P.die_off()
/obj/item/weapon/material/twohanded/fireaxe/scythe
icon_state = "scythe0"
base_icon = "scythe"
name = "scythe"
desc = "A sharp and curved blade on a long fibremetal handle, this tool makes it easy to reap what you sow."
force_divisor = 0.65
origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 2)
attack_verb = list("chopped", "sliced", "cut", "reaped")
//spears, bay edition
/obj/item/weapon/material/twohanded/spear
icon_state = "spearglass0"
+6
View File
@@ -125,6 +125,12 @@
else
return ..()
/obj/structure/girder/proc/take_damage(var/damage)
health -= damage
if(health <= 0)
dismantle()
/obj/structure/girder/proc/construct_wall(obj/item/stack/material/S, mob/user)
var/amount_to_use = reinf_material ? 1 : 2
if(S.get_amount() < amount_to_use)