12/21 modernizations from TG live (#103)

* sync (#3)

* shuttle auto call

* Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why

* Subsystem 12/21

Most Recent TG subsystem folder

* globalvars 12/21

Tossed out the flavor_misc and parallax files

* Onclick 12/21

as well as .dme updates

* _defines 12/21

ommited old _MC.dm

* _HELPERS 12/21

Preserved snowflake placement of furry sprites

* _defeines/genetics

reapplied narkism holdover for snowflake races.

* Oops forgot mutant colors

* modules porting 12/21 + Sounds/icons

Admin, Client and most of mob life files ommitted

* enviroment file

* Admin optimizations

ahelp log system kept

* Mob ports 12/21

Flavor text preserved

* datums ported 12/21

* Game ported 12/21

* batch of duplicate fixes/dogborg work

Dogborgs need to be modernized to refractored borg standards.

* moar fixes

* Maps and futher compile fixes
This commit is contained in:
Poojawa
2016-12-22 03:57:55 -06:00
committed by GitHub
parent f5e143a452
commit cf59ac1c3d
2215 changed files with 707445 additions and 87041 deletions
+2 -2
View File
@@ -9,8 +9,8 @@
throwforce = 0
throw_speed = 2
throw_range = 2
w_class = 1
burn_state = FLAMMABLE
w_class = WEIGHT_CLASS_TINY
resistance_flags = FLAMMABLE
var/value = 1
/obj/item/stack/spacecash/c10
+31 -29
View File
@@ -4,11 +4,12 @@
icon = 'icons/obj/items.dmi'
amount = 6
max_amount = 6
w_class = 1
w_class = WEIGHT_CLASS_TINY
throw_speed = 3
throw_range = 7
burn_state = FLAMMABLE
burntime = 5
resistance_flags = FLAMMABLE
obj_integrity = 40
max_integrity = 40
var/heal_brute = 0
var/heal_burn = 0
var/stop_bleeding = 0
@@ -30,19 +31,21 @@
return 1
var/obj/item/bodypart/affecting
if(ishuman(M))
var/mob/living/carbon/human/H = M
affecting = H.get_bodypart(check_zone(user.zone_selected))
if(iscarbon(M))
var/mob/living/carbon/C = M
affecting = C.get_bodypart(check_zone(user.zone_selected))
if(!affecting) //Missing limb?
user << "<span class='warning'>[H] doesn't have \a [parse_zone(user.zone_selected)]!</span>"
user << "<span class='warning'>[C] doesn't have \a [parse_zone(user.zone_selected)]!</span>"
return
if(stop_bleeding)
if(H.bleedsuppress)
user << "<span class='warning'>[H]'s bleeding is already bandaged!</span>"
return
else if(!H.bleed_rate)
user << "<span class='warning'>[H] isn't bleeding!</span>"
return
if(ishuman(C))
var/mob/living/carbon/human/H = C
if(stop_bleeding)
if(H.bleedsuppress)
user << "<span class='warning'>[H]'s bleeding is already bandaged!</span>"
return
else if(!H.bleed_rate)
user << "<span class='warning'>[H] isn't bleeding!</span>"
return
if(isliving(M))
@@ -75,25 +78,24 @@
user.visible_message("<span class='green'>[user] applies [src] on [t_himself].</span>", "<span class='green'>You apply [src] on yourself.</span>")
if(ishuman(M))
var/mob/living/carbon/human/H = M
affecting = H.get_bodypart(check_zone(user.zone_selected))
if(iscarbon(M))
var/mob/living/carbon/C = M
affecting = C.get_bodypart(check_zone(user.zone_selected))
if(!affecting) //Missing limb?
user << "<span class='warning'>[H] doesn't have \a [parse_zone(user.zone_selected)]!</span>"
user << "<span class='warning'>[C] doesn't have \a [parse_zone(user.zone_selected)]!</span>"
return
if(stop_bleeding)
if(!H.bleedsuppress) //so you can't stack bleed suppression
H.suppress_bloodloss(stop_bleeding)
if(affecting.status == ORGAN_ORGANIC) //Limb must be organic to be healed - RR
if(affecting.heal_damage(src.heal_brute, src.heal_burn, 0))
H.update_damage_overlays(0)
M.updatehealth()
if(ishuman(C))
var/mob/living/carbon/human/H = C
if(stop_bleeding)
if(!H.bleedsuppress) //so you can't stack bleed suppression
H.suppress_bloodloss(stop_bleeding)
if(affecting.status == BODYPART_ORGANIC) //Limb must be organic to be healed - RR
if(affecting.heal_damage(heal_brute, heal_burn))
C.update_damage_overlays()
else
user << "<span class='notice'>Medicine won't work on a robotic limb!</span>"
else
M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2))
M.heal_bodypart_damage((src.heal_brute/2), (src.heal_burn/2))
use(1)
@@ -123,7 +125,7 @@
desc = "A roll of cloth roughly cut from something that can stop bleeding, but does not heal wounds."
stop_bleeding = 900
/obj/item/stack/medical/gauze/cyborg/
/obj/item/stack/medical/gauze/cyborg
materials = list()
is_cyborg = 1
cost = 250
+4 -4
View File
@@ -11,7 +11,7 @@ var/global/list/datum/stack_recipe/rod_recipes = list ( \
icon_state = "rods"
item_state = "rods"
flags = CONDUCT
w_class = 3
w_class = WEIGHT_CLASS_NORMAL
force = 9
throwforce = 10
throw_speed = 3
@@ -49,7 +49,7 @@ var/global/list/datum/stack_recipe/rod_recipes = list ( \
"<span class='italics'>You hear welding.</span>")
var/obj/item/stack/rods/R = src
src = null
var/replace = (user.get_inactive_hand()==R)
var/replace = (user.get_inactive_held_item()==R)
R.use(2)
if (!R && replace)
user.put_in_hands(new_item)
@@ -58,7 +58,7 @@ var/global/list/datum/stack_recipe/rod_recipes = list ( \
var/obj/item/weapon/reagent_containers/food/snacks/S = W
if(amount != 1)
user << "<span class='warning'>You must use a single rod!</span>"
else if(S.w_class > 2)
else if(S.w_class > WEIGHT_CLASS_SMALL)
user << "<span class='warning'>The ingredient is too big for [src]!</span>"
else
var/obj/item/weapon/reagent_containers/food/snacks/customizable/A = new/obj/item/weapon/reagent_containers/food/snacks/customizable/kebab(get_turf(src))
@@ -66,7 +66,7 @@ var/global/list/datum/stack_recipe/rod_recipes = list ( \
else
return ..()
/obj/item/stack/rods/cyborg/
/obj/item/stack/rods/cyborg
materials = list()
is_cyborg = 1
cost = 250
+33 -23
View File
@@ -15,6 +15,9 @@
icon_state = "sheet-glass"
materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT)
origin_tech = "materials=1"
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/glass
/obj/item/stack/sheet/glass/cyborg
materials = list()
@@ -46,7 +49,7 @@
RG.add_fingerprint(user)
var/obj/item/stack/sheet/glass/G = src
src = null
var/replace = (user.get_inactive_hand()==G)
var/replace = (user.get_inactive_held_item()==G)
V.use(1)
G.use(1)
if (!G && replace)
@@ -60,7 +63,7 @@
/obj/item/stack/sheet/glass/proc/construct_window(mob/user)
if(!user || !src)
return 0
if(!istype(user.loc,/turf))
if(!isturf(user.loc))
return 0
if(!user.IsAdvancedToolUser())
user << "<span class='warning'>You don't have the dexterity to do this!</span>"
@@ -137,26 +140,26 @@
icon_state = "sheet-rglass"
materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT/2, MAT_GLASS=MINERAL_MATERIAL_AMOUNT)
origin_tech = "materials=2"
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 70, acid = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/rglass
/obj/item/stack/sheet/rglass/cyborg
materials = list()
var/datum/robot_energy_storage/metsource
var/datum/robot_energy_storage/glasource
var/metcost = 250
var/glacost = 500
/obj/item/stack/sheet/rglass/cyborg/get_amount()
return min(round(metsource.energy / metcost), round(glasource.energy / glacost))
return min(round(source.energy / metcost), round(glasource.energy / glacost))
/obj/item/stack/sheet/rglass/cyborg/use(amount) // Requires special checks, because it uses two storages
metsource.use_charge(amount * metcost)
source.use_charge(amount * metcost)
glasource.use_charge(amount * glacost)
return
/obj/item/stack/sheet/rglass/cyborg/add(amount)
metsource.add_charge(amount * metcost)
source.add_charge(amount * metcost)
glasource.add_charge(amount * glacost)
return
/obj/item/stack/sheet/rglass/attack_self(mob/user)
construct_window(user)
@@ -164,7 +167,7 @@
/obj/item/stack/sheet/rglass/proc/construct_window(mob/user)
if(!user || !src)
return 0
if(!istype(user.loc,/turf))
if(!isturf(user.loc))
return 0
if(!user.IsAdvancedToolUser())
user << "<span class='warning'>You don't have the dexterity to do this!</span>"
@@ -275,19 +278,22 @@
desc = "A nasty looking shard of glass."
icon = 'icons/obj/shards.dmi'
icon_state = "large"
w_class = 1
w_class = WEIGHT_CLASS_TINY
force = 5
throwforce = 10
item_state = "shard-glass"
materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT)
attack_verb = list("stabbed", "slashed", "sliced", "cut")
hitsound = 'sound/weapons/bladeslice.ogg'
resistance_flags = ACID_PROOF
armor = list(melee = 100, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 100)
obj_integrity = 40
max_integrity = 40
var/cooldown = 0
sharpness = IS_SHARP
/obj/item/weapon/shard/suicide_act(mob/user)
user.visible_message(pick("<span class='suicide'>[user] is slitting \his wrists with the shard of glass! It looks like \he's trying to commit suicide.</span>", \
"<span class='suicide'>[user] is slitting \his throat with the shard of glass! It looks like \he's trying to commit suicide.</span>"))
user.visible_message("<span class='suicide'>[user] is slitting [user.p_their()] [pick("wrists", "throat")] with the shard of glass! It looks like [user.p_theyre()] trying to commit suicide.</span>")
return (BRUTELOSS)
@@ -311,23 +317,22 @@
return
if(istype(A, /obj/item/weapon/storage))
return
var/hit_hand = ((user.active_hand_index % 2 == 0) ? "r_" : "l_") + "arm"
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(!H.gloves && !(PIERCEIMMUNE in H.dna.species.specflags)) // golems, etc
if(!H.gloves && !(PIERCEIMMUNE in H.dna.species.species_traits)) // golems, etc
H << "<span class='warning'>[src] cuts into your hand!</span>"
var/organ = (H.hand ? "l_" : "r_") + "arm"
var/obj/item/bodypart/affecting = H.get_bodypart(organ)
if(affecting && affecting.take_damage(force / 2))
H.update_damage_overlays(0)
H.apply_damage(force*0.5, BRUTE, hit_hand)
else if(ismonkey(user))
var/mob/living/carbon/monkey/M = user
M << "<span class='warning'>[src] cuts into your hand!</span>"
M.adjustBruteLoss(force / 2)
M.apply_damage(force*0.5, BRUTE, hit_hand)
/obj/item/weapon/shard/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/weldingtool))
if(istype(I, /obj/item/device/lightreplacer))
I.attackby(src, user)
else if(istype(I, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = I
if(WT.remove_fuel(0, user))
var/obj/item/stack/sheet/glass/NG = new (user.loc)
@@ -347,7 +352,7 @@
playsound(loc, 'sound/effects/glass_step.ogg', 50, 1)
if(ishuman(AM))
var/mob/living/carbon/human/H = AM
if(PIERCEIMMUNE in H.dna.species.specflags)
if(PIERCEIMMUNE in H.dna.species.species_traits)
return
var/picked_def_zone = pick("l_leg", "r_leg")
var/obj/item/bodypart/O = H.get_bodypart(picked_def_zone)
@@ -357,6 +362,11 @@
H.apply_damage(5, BRUTE, picked_def_zone)
H.Weaken(3)
if(cooldown < world.time - 10) //cooldown to avoid message spam.
H.visible_message("<span class='danger'>[H] steps in the broken glass!</span>", \
"<span class='userdanger'>You step in the broken glass!</span>")
if(!H.incapacitated())
H.visible_message("<span class='danger'>[H] steps in the broken glass!</span>", \
"<span class='userdanger'>You step in the broken glass!</span>")
else
H.visible_message("<span class='danger'>[H] slides on the broken glass!</span>", \
"<span class='userdanger'>You slide on the broken glass!</span>")
cooldown = world.time
@@ -18,9 +18,9 @@ var/global/list/datum/stack_recipe/human_recipes = list( \
return ..()
/obj/item/stack/sheet/animalhide/generic
name = "generic skin"
desc = "A piece of generic skin."
singular_name = "generic skin piece"
name = "skin"
desc = "A piece of skin."
singular_name = "skin piece"
icon_state = "sheet-hide"
/obj/item/stack/sheet/animalhide/corgi
@@ -104,7 +104,7 @@ var/global/list/datum/stack_recipe/xeno_recipes = list ( \
/obj/item/stack/sheet/hairlesshide
name = "hairless hide"
desc = "This hide was stripped of it's hair, but still needs tanning."
desc = "This hide was stripped of its hair, but still needs washing and tanning."
singular_name = "hairless hide piece"
icon_state = "sheet-hairlesshide"
origin_tech = null
@@ -152,7 +152,7 @@ var/global/list/datum/stack_recipe/sinew_recipes = list ( \
icon_state = "goliath_hide"
singular_name = "hide plate"
flags = NOBLUDGEON
w_class = 3
w_class = WEIGHT_CLASS_NORMAL
layer = MOB_LAYER
/obj/item/stack/sheet/animalhide/ashdrake
@@ -162,14 +162,14 @@ var/global/list/datum/stack_recipe/sinew_recipes = list ( \
icon_state = "dragon_hide"
singular_name = "drake plate"
flags = NOBLUDGEON
w_class = 3
w_class = WEIGHT_CLASS_NORMAL
layer = MOB_LAYER
//Step one - dehairing.
/obj/item/stack/sheet/animalhide/attackby(obj/item/weapon/W, mob/user, params)
if(is_sharp(W))
if(W.is_sharp())
playsound(loc, 'sound/weapons/slice.ogg', 50, 1, -1)
user.visible_message("[user] starts cutting hair off \the [src].", "<span class='notice'>You start cutting the hair off \the [src]...</span>", "<span class='italics'>You hear the sound of a knife rubbing against flesh.</span>")
if(do_after(user,50, target = src))
@@ -207,4 +207,4 @@ var/global/list/datum/stack_recipe/sinew_recipes = list ( \
var/obj/item/stack/sheet/leather/HS = new(src.loc)
HS.amount = 1
wetness = initial(wetness)
src.use(1)
src.use(1)
@@ -4,7 +4,7 @@
desc = "A glass tile, which is wired, somehow."
icon = 'icons/obj/tiles.dmi'
icon_state = "glass_wire"
w_class = 3
w_class = WEIGHT_CLASS_NORMAL
force = 3
throwforce = 5
throw_speed = 3
@@ -29,7 +29,7 @@
var/obj/item/stack/sheet/metal/M = O
if (M.use(1))
use(1)
var/obj/item/stack/tile/light/L = new (user.loc)
var/obj/item/L = PoolOrNew(/obj/item/stack/tile/light, user.loc)
user << "<span class='notice'>You make a light tile.</span>"
L.add_fingerprint(user)
else
@@ -10,6 +10,8 @@ Mineral Sheets
- Gold
- Silver
- Clown
- Titanium
- Plastitanium
Others:
- Adamantine
- Mythril
@@ -133,8 +135,9 @@ var/global/list/datum/stack_recipe/uranium_recipes = list ( \
singular_name = "plasma sheet"
origin_tech = "plasmatech=2;materials=2"
sheettype = "plasma"
burn_state = FLAMMABLE
burntime = 5
resistance_flags = FLAMMABLE
obj_integrity = 100
max_integrity = 100
materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT)
var/global/list/datum/stack_recipe/plasma_recipes = list ( \
@@ -157,7 +160,7 @@ var/global/list/datum/stack_recipe/plasma_recipes = list ( \
else
return ..()
/obj/item/stack/sheet/mineral/plasma/fire_act()
/obj/item/stack/sheet/mineral/plasma/fire_act(exposed_temperature, exposed_volume)
atmos_spawn_air("plasma=[amount*10];TEMP=1000")
qdel(src)
@@ -179,6 +182,7 @@ var/global/list/datum/stack_recipe/gold_recipes = list ( \
new/datum/stack_recipe("HoP Statue", /obj/structure/statue/gold/hop, 5, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("CE Statue", /obj/structure/statue/gold/ce, 5, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("RD Statue", /obj/structure/statue/gold/rd, 5, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("Simple Crown", /obj/item/clothing/head/crown, 5), \
new/datum/stack_recipe("CMO Statue", /obj/structure/statue/gold/cmo, 5, one_per_turf = 1, on_floor = 1), \
)
@@ -237,6 +241,60 @@ var/global/list/datum/stack_recipe/clown_recipes = list ( \
pixel_y = rand(0,4)-4
..()
/*
* Titanium
*/
/obj/item/stack/sheet/mineral/titanium
name = "titanium"
icon_state = "sheet-titanium"
singular_name = "titanium sheet"
force = 5
throwforce = 5
w_class = WEIGHT_CLASS_NORMAL
throw_speed = 1
throw_range = 3
origin_tech = "materials=4"
sheettype = "titanium"
materials = list(MAT_TITANIUM=MINERAL_MATERIAL_AMOUNT)
var/global/list/datum/stack_recipe/titanium_recipes = list ( \
new/datum/stack_recipe("titanium tile", /obj/item/stack/tile/mineral/titanium, 1, 4, 20), \
)
/obj/item/stack/sheet/mineral/titanium/New(var/loc, var/amount=null)
recipes = titanium_recipes
pixel_x = rand(0,4)-4
pixel_y = rand(0,4)-4
..()
/*
* Plastitanium
*/
/obj/item/stack/sheet/mineral/plastitanium
name = "plastitanium"
icon_state = "sheet-plastitanium"
singular_name = "plastitanium sheet"
force = 5
throwforce = 5
w_class = WEIGHT_CLASS_NORMAL
throw_speed = 1
throw_range = 3
origin_tech = "materials=4"
sheettype = "plastitanium"
materials = list(MAT_TITANIUM=6000, MAT_PLASMA=6000)
var/global/list/datum/stack_recipe/plastitanium_recipes = list ( \
new/datum/stack_recipe("plas-titanium tile", /obj/item/stack/tile/mineral/plastitanium, 1, 4, 20), \
)
/obj/item/stack/sheet/mineral/plastitanium/New(var/loc, var/amount=null)
recipes = plastitanium_recipes
pixel_x = rand(0,4)-4
pixel_y = rand(0,4)-4
..()
/*
* Snow
*/
@@ -6,6 +6,7 @@
* Cloth
* Cardboard
* Runed Metal (cult)
* Brass (clockwork cult)
*/
/*
@@ -30,6 +31,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 40, one_per_turf = 1, on_floor = 1), \
null, \
new/datum/stack_recipe("computer frame", /obj/structure/frame/computer, 5, time = 25, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("modular console", /obj/machinery/modular_computer/console/buildable/, 10, time = 25, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("machine frame", /obj/structure/frame/machine, 5, time = 25, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("firelock frame", /obj/structure/firelock_frame, 3, time = 50, one_per_turf = 1, on_floor = 1), \
@@ -59,6 +61,12 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
throwforce = 10
flags = CONDUCT
origin_tech = "materials=1"
resistance_flags = FIRE_PROOF
merge_type = /obj/item/stack/sheet/metal
/obj/item/stack/sheet/metal/ratvar_act()
new /obj/item/stack/tile/brass(loc, amount)
qdel(src)
/obj/item/stack/sheet/metal/narsie_act()
if(prob(20))
@@ -98,6 +106,9 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list ( \
throwforce = 10
flags = CONDUCT
origin_tech = "materials=2"
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 80)
resistance_flags = FIRE_PROOF
merge_type = /obj/item/stack/sheet/plasteel
/obj/item/stack/sheet/plasteel/New(var/loc, var/amount=null)
recipes = plasteel_recipes
@@ -117,6 +128,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \
new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20), \
new/datum/stack_recipe("wood table frame", /obj/structure/table_frame/wood, 2, time = 10), \
new/datum/stack_recipe("rifle stock", /obj/item/weaponcrafting/stock, 10, time = 40), \
new/datum/stack_recipe("rolling pin", /obj/item/weapon/kitchen/rollingpin, 2, time = 30), \
new/datum/stack_recipe("wooden chair", /obj/structure/chair/wood/normal, 3, time = 10, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("wooden door", /obj/structure/mineral_door/wood, 10, time = 20, one_per_turf = 1, on_floor = 1), \
@@ -129,6 +141,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \
new/datum/stack_recipe("apiary", /obj/structure/beebox, 40, time = 50),\
new/datum/stack_recipe("honey frame", /obj/item/honey_frame, 5, time = 10),\
new/datum/stack_recipe("ore box", /obj/structure/ore_box, 4, time = 50, one_per_turf = 1, on_floor = 1),\
new/datum/stack_recipe("baseball bat", /obj/item/weapon/melee/baseball_bat, 5, time = 15),\
)
/obj/item/stack/sheet/mineral/wood
@@ -139,7 +152,9 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \
icon = 'icons/obj/items.dmi'
origin_tech = "materials=1;biotech=1"
sheettype = "wood"
burn_state = FLAMMABLE
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 0)
resistance_flags = FLAMMABLE
merge_type = /obj/item/stack/sheet/mineral/wood
/obj/item/stack/sheet/mineral/wood/New(var/loc, var/amount=null)
recipes = wood_recipes
@@ -153,6 +168,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \
*/
var/global/list/datum/stack_recipe/cloth_recipes = list ( \
new/datum/stack_recipe("grey jumpsuit", /obj/item/clothing/under/color/grey, 3), \
new/datum/stack_recipe("black shoes", /obj/item/clothing/shoes/sneakers/black, 2), \
null, \
new/datum/stack_recipe("backpack", /obj/item/weapon/storage/backpack, 4), \
new/datum/stack_recipe("dufflebag", /obj/item/weapon/storage/backpack/dufflebag, 6), \
@@ -165,9 +181,11 @@ var/global/list/datum/stack_recipe/cloth_recipes = list ( \
null, \
new/datum/stack_recipe("improvised gauze", /obj/item/stack/medical/gauze/improvised, 1, 2, 6), \
new/datum/stack_recipe("rag", /obj/item/weapon/reagent_containers/glass/rag, 1), \
new/datum/stack_recipe("black shoes", /obj/item/clothing/shoes/sneakers/black, 2), \
new/datum/stack_recipe("bedsheet", /obj/item/weapon/bedsheet, 3), \
new/datum/stack_recipe("empty sandbag", /obj/item/weapon/emptysandbag, 4), \
null, \
new/datum/stack_recipe("fingerless gloves", /obj/item/clothing/gloves/fingerless, 1), \
new/datum/stack_recipe("black gloves", /obj/item/clothing/gloves/color/black, 3), \
)
/obj/item/stack/sheet/cloth
@@ -176,9 +194,10 @@ var/global/list/datum/stack_recipe/cloth_recipes = list ( \
singular_name = "cloth roll"
icon_state = "sheet-cloth"
origin_tech = "materials=2"
burn_state = FLAMMABLE
resistance_flags = FLAMMABLE
force = 0
throwforce = 0
merge_type = /obj/item/stack/sheet/cloth
/obj/item/stack/sheet/cloth/New(var/loc, var/amount=null)
recipes = cloth_recipes
@@ -209,7 +228,8 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \
singular_name = "cardboard sheet"
icon_state = "sheet-card"
origin_tech = "materials=1"
burn_state = FLAMMABLE
resistance_flags = FLAMMABLE
merge_type = /obj/item/stack/sheet/cardboard
/obj/item/stack/sheet/cardboard/New(var/loc, var/amount=null)
recipes = cardboard_recipes
@@ -223,21 +243,26 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \
*/
var/global/list/datum/stack_recipe/runed_metal_recipes = list ( \
new/datum/stack_recipe("runed door", /obj/machinery/door/airlock/cult, 3, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("runed door", /obj/machinery/door/airlock/cult, 1, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("runed girder", /obj/structure/girder/cult, 1, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("pylon", /obj/structure/cult/pylon, 3, time = 40, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("forge", /obj/structure/cult/forge, 5, time = 40, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("archives", /obj/structure/cult/tome, 2, time = 40, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("altar", /obj/structure/cult/talisman, 5, time = 40, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("pylon", /obj/structure/destructible/cult/pylon, 4, time = 40, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("forge", /obj/structure/destructible/cult/forge, 3, time = 40, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("archives", /obj/structure/destructible/cult/tome, 3, time = 40, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("altar", /obj/structure/destructible/cult/talisman, 3, time = 40, one_per_turf = 1, on_floor = 1), \
)
/obj/item/stack/sheet/runed_metal
name = "runed metal"
desc = "Sheets of cold metal with shifting inscriptions writ upon them."
singular_name = "runed metal"
singular_name = "runed metal sheet"
icon_state = "sheet-runed"
icon = 'icons/obj/items.dmi'
sheettype = "runed"
merge_type = /obj/item/stack/sheet/runed_metal
/obj/item/stack/sheet/runed_metal/ratvar_act()
new /obj/item/stack/tile/brass(loc, amount)
qdel(src)
/obj/item/stack/sheet/runed_metal/attack_self(mob/living/user)
if(!iscultist(user))
@@ -258,6 +283,45 @@ var/global/list/datum/stack_recipe/runed_metal_recipes = list ( \
recipes = runed_metal_recipes
return ..()
/*
* Brass
*/
var/global/list/datum/stack_recipe/brass_recipes = list ( \
new/datum/stack_recipe("wall gear", /obj/structure/destructible/clockwork/wall_gear, 3, time = 30, one_per_turf = 1, on_floor = 1), \
null,
new/datum/stack_recipe("pinion airlock", /obj/machinery/door/airlock/clockwork, 5, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("brass pinion airlock", /obj/machinery/door/airlock/clockwork/brass, 5, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("brass windoor", /obj/machinery/door/window/clockwork, 2, time = 30, one_per_turf = 1, on_floor = 1), \
null,
new/datum/stack_recipe("directional brass window", /obj/structure/window/reinforced/clockwork, time = 15, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("brass window", /obj/structure/window/reinforced/clockwork/fulltile, 2, time = 30, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("brass table frame", /obj/structure/table_frame/brass, 1, time = 5, one_per_turf = 1, on_floor = 1) \
)
/obj/item/stack/tile/brass
name = "brass"
desc = "Sheets made out of brass."
singular_name = "brass sheet"
icon_state = "sheet-brass"
icon = 'icons/obj/items.dmi'
resistance_flags = FIRE_PROOF | ACID_PROOF
throwforce = 10
max_amount = 50
throw_speed = 1
throw_range = 3
turf_type = /turf/open/floor/clockwork
/obj/item/stack/tile/brass/narsie_act()
if(prob(20))
new /obj/item/stack/sheet/runed_metal(loc, amount)
qdel(src)
/obj/item/stack/tile/brass/New(var/loc, var/amount=null)
recipes = brass_recipes
..()
pixel_x = 0
pixel_y = 0
/obj/item/stack/sheet/lessergem
name = "lesser gems"
desc = "Rare kind of gems which are only gained by blood sacrifice to minor deities. They are needed in crafting powerful objects."
@@ -284,7 +348,7 @@ var/global/list/datum/stack_recipe/runed_metal_recipes = list ( \
desc = "Someone's been drinking their milk."
force = 7
throwforce = 5
w_class = 3
w_class = WEIGHT_CLASS_NORMAL
throw_speed = 1
throw_range = 3
origin_tech = "materials=2;biotech=2"
@@ -1,6 +1,6 @@
/obj/item/stack/sheet
name = "sheet"
w_class = 3
w_class = WEIGHT_CLASS_NORMAL
force = 5
throwforce = 5
max_amount = 50
+41 -18
View File
@@ -78,12 +78,6 @@
var/title as text
var/can_build = 1
can_build = can_build && (max_multiplier>0)
/*
if (R.one_per_turf)
can_build = can_build && !(locate(R.result_type) in usr.loc)
if (R.on_floor)
can_build = can_build && istype(usr.loc, /turf/open/floor)
*/
if (R.res_amount>1)
title+= "[R.res_amount]x [R.title]\s"
else
@@ -111,7 +105,7 @@
/obj/item/stack/Topic(href, href_list)
..()
if ((usr.restrained() || usr.stat || usr.get_active_hand() != src))
if (usr.restrained() || usr.stat || usr.get_active_held_item() != src)
return
if (href_list["make"])
if (src.get_amount() < 1) qdel(src) //Never should happen
@@ -137,6 +131,7 @@
if (R.max_res_amount > 1)
var/obj/item/stack/new_item = O
new_item.amount = R.res_amount*multiplier
new_item.update_icon()
if(new_item.amount <= 0)//if the stack is empty, i.e it has been merged with an existing stack and has been garbage collected
return
@@ -167,7 +162,7 @@
if (R.one_per_turf && (locate(R.result_type) in usr.loc))
usr << "<span class='warning'>There is another [R.title] here!</span>"
return 0
if (R.on_floor && !istype(usr.loc, /turf/open/floor))
if(R.on_floor && !isfloorturf(usr.loc))
usr << "<span class='warning'>\The [R.title] must be constructed on the floor!</span>"
return 0
return 1
@@ -200,6 +195,8 @@
update_icon()
/obj/item/stack/proc/merge(obj/item/stack/S) //Merge src into S, as much as possible
if(S == src) //amusingly this can cause a stack to consume itself, let's not allow that.
return
var/transfer = get_amount()
if(S.is_cyborg)
transfer = min(transfer, round((S.source.max_energy - S.source.energy) / S.cost))
@@ -222,22 +219,44 @@
return ..()
/obj/item/stack/attack_hand(mob/user)
if (user.get_inactive_hand() == src)
if (user.get_inactive_held_item() == src)
if(zero_amount())
return
var/obj/item/stack/F = new src.type(user, 1)
. = F
F.copy_evidences(src)
user.put_in_hands(F)
src.add_fingerprint(user)
F.add_fingerprint(user)
use(1)
if (src && usr.machine==src)
spawn(0) src.interact(usr)
change_stack(user,1)
else
..()
return
/obj/item/stack/AltClick(mob/living/user)
if(!istype(user) || !user.canUseTopic(src))
user << "<span class='warning'>You can't do that right now!</span>"
return
if(!in_range(src, user))
return
else
if(zero_amount())
return
//get amount from user
var/min = 0
var/max = src.get_amount()
var/stackmaterial = input(user,"How many sheets do you wish to take out of this stack? (Maximum [max]") as num
if(stackmaterial == null || stackmaterial <= min || stackmaterial >= src.get_amount())
return
else
change_stack(user,stackmaterial)
user << "<span class='notice'>You take [stackmaterial] sheets out of the stack</span>"
/obj/item/stack/proc/change_stack(mob/user,amount)
var/obj/item/stack/F = new src.type(user, amount)
. = F
F.copy_evidences(src)
user.put_in_hands(F)
add_fingerprint(user)
F.add_fingerprint(user)
use(amount)
/obj/item/stack/attackby(obj/item/W, mob/user, params)
if(istype(W, merge_type))
var/obj/item/stack/S = W
@@ -253,6 +272,10 @@
src.fingerprintslast = from.fingerprintslast
//TODO bloody overlay
/obj/item/stack/microwave_act(obj/machinery/microwave/M)
if(M && M.dirty < 100)
M.dirty += amount
/*
* Recipe datum
*/
@@ -0,0 +1,27 @@
/obj/item/stack/telecrystal
name = "telecrystal"
desc = "It seems to be pulsing with suspiciously enticing energies."
singular_name = "telecrystal"
icon = 'icons/obj/telescience.dmi'
icon_state = "telecrystal"
w_class = WEIGHT_CLASS_TINY
max_amount = 50
flags = NOBLUDGEON
origin_tech = "materials=6;syndicate=1"
/obj/item/stack/telecrystal/attack(mob/target, mob/user)
if(target == user) //You can't go around smacking people with crystals to find out if they have an uplink or not.
for(var/obj/item/weapon/implant/uplink/I in target)
if(I && I.implanted)
I.hidden_uplink.telecrystals += 1
use(1)
user << "<span class='notice'>You press [src] onto yourself and charge your hidden uplink.</span>"
/obj/item/stack/telecrystal/afterattack(obj/item/I, mob/user, proximity)
if(!proximity)
return
if(istype(I, /obj/item))
if(I.hidden_uplink && I.hidden_uplink.active) //No metagaming by using this on every PDA around just to see if it gets used up.
I.hidden_uplink.telecrystals += 1
use(1)
user << "<span class='notice'>You slot [src] into the [I] and charge its internal uplink.</span>"
@@ -63,3 +63,23 @@
origin_tech = "materials=6;abductor=1"
turf_type = /turf/open/floor/mineral/abductor
mineralType = "abductor"
/obj/item/stack/tile/mineral/titanium
name = "titanium tile"
singular_name = "titanium floor tile"
desc = "A tile made of titanium, used for shuttles."
icon_state = "tile_shuttle"
origin_tech = "materials=2"
turf_type = /turf/open/floor/mineral/titanium
mineralType = "titanium"
materials = list(MAT_TITANIUM=500)
/obj/item/stack/tile/mineral/plastitanium
name = "plas-titanium tile"
singular_name = "plas-titanium floor tile"
desc = "A tile made of plas-titanium, used for very evil shuttles."
icon_state = "tile_darkshuttle"
origin_tech = "materials=2"
turf_type = /turf/open/floor/mineral/plastitanium
mineralType = "plastitanium"
materials = list(MAT_TITANIUM=250, MAT_PLASMA=250)
@@ -3,7 +3,7 @@
singular_name = "broken tile"
desc = "A broken tile. This should not exist."
icon = 'icons/obj/tiles.dmi'
w_class = 3
w_class = WEIGHT_CLASS_NORMAL
force = 1
throwforce = 1
throw_speed = 3
@@ -18,6 +18,10 @@
pixel_x = rand(-3, 3)
pixel_y = rand(-3, 3) //randomize a little
/obj/item/stack/tile/Destroy()
..()
return QDEL_HINT_PUTINPOOL
/obj/item/stack/tile/attackby(obj/item/W, mob/user, params)
if (istype(W, /obj/item/weapon/weldingtool))
@@ -47,7 +51,7 @@
"<span class='italics'>You hear welding.</span>")
var/obj/item/stack/rods/R = src
src = null
var/replace = (user.get_inactive_hand()==R)
var/replace = (user.get_inactive_held_item()==R)
R.use(4)
if (!R && replace)
user.put_in_hands(new_item)
@@ -60,7 +64,7 @@
"<span class='italics'>You hear welding.</span>")
var/obj/item/stack/rods/R = src
src = null
var/replace = (user.get_inactive_hand()==R)
var/replace = (user.get_inactive_held_item()==R)
R.use(4)
if (!R && replace)
user.put_in_hands(new_item)
@@ -75,7 +79,7 @@
icon_state = "tile_grass"
origin_tech = "biotech=1"
turf_type = /turf/open/floor/grass
burn_state = FLAMMABLE
resistance_flags = FLAMMABLE
//Wood
@@ -86,7 +90,7 @@
icon_state = "tile-wood"
origin_tech = "biotech=1"
turf_type = /turf/open/floor/wood
burn_state = FLAMMABLE
resistance_flags = FLAMMABLE
//Carpets
@@ -96,7 +100,7 @@
desc = "A piece of carpet. It is the same size as a floor tile."
icon_state = "tile-carpet"
turf_type = /turf/open/floor/carpet
burn_state = FLAMMABLE
resistance_flags = FLAMMABLE
/obj/item/stack/tile/fakespace
@@ -105,7 +109,8 @@
desc = "A piece of carpet with a convincing star pattern."
icon_state = "tile_space"
turf_type = /turf/open/floor/fakespace
burn_state = FLAMMABLE
resistance_flags = FLAMMABLE
merge_type = /obj/item/stack/tile/fakespace
/obj/item/stack/tile/fakespace/loaded
amount = 30
@@ -118,6 +123,7 @@
icon_state = "tile_noslip"
turf_type = /turf/open/floor/noslip
origin_tech = "materials=3"
merge_type = /obj/item/stack/tile/noslip
/obj/item/stack/tile/noslip/thirty
amount = 30
@@ -156,6 +162,8 @@
flags = CONDUCT
turf_type = /turf/open/floor/plasteel
mineralType = "metal"
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 70)
resistance_flags = FIRE_PROOF
/obj/item/stack/tile/plasteel/cyborg
desc = "The ground you walk on." //Not the usual floor tile desc as that refers to throwing, Cyborgs can't do that - RR
+6 -7
View File
@@ -12,7 +12,7 @@
flags = NOBLUDGEON
amount = 25
max_amount = 25
burn_state = FLAMMABLE
resistance_flags = FLAMMABLE
/obj/item/stack/wrapping_paper/Destroy()
if(!amount)
@@ -32,7 +32,7 @@
flags = NOBLUDGEON
amount = 25
max_amount = 25
burn_state = FLAMMABLE
resistance_flags = FLAMMABLE
/obj/item/proc/can_be_package_wrapped() //can the item be wrapped with package wrapper into a delivery package
return 1
@@ -58,7 +58,7 @@
var/obj/item/I = target
if(!I.can_be_package_wrapped())
return
if(user.r_hand == I || user.l_hand == I)
if(user.is_holding(I))
if(!user.unEquip(I))
return
else if(!isturf(I.loc))
@@ -79,13 +79,12 @@
var/obj/structure/closet/O = target
if(O.opened)
return
if(!O.density) //can't wrap non dense closets (e.g. body bags)
if(!O.delivery_icon) //no delivery icon means unwrappable closet (e.g. body bags)
user << "<span class='warning'>You can't wrap this!</span>"
return
if(use(3))
var/obj/structure/bigDelivery/P = new /obj/structure/bigDelivery(get_turf(O.loc))
if(O.horizontal)
P.icon_state = "deliverycrate"
P.icon_state = O.delivery_icon
O.loc = P
P.add_fingerprint(user)
O.add_fingerprint(user)
@@ -110,6 +109,6 @@
icon = 'icons/obj/items.dmi'
icon_state = "c_tube"
throwforce = 0
w_class = 1
w_class = WEIGHT_CLASS_TINY
throw_speed = 3
throw_range = 5