Ports TG bamboo and Punji Sticks (#24497)

* adds most things

* STOP BECOMING CRLF

* half the sprites ported

* adds floor turfs, hopefully

* adds bamboo stack recipes and parameter documentation for datum/stack_recipe

* adds the crude syringe and sprite

* Revert "adds the crude syringe and sprite"

This reverts commit d949332055.

* adds crude syringe and sprite

* nevermind, goon license moment

* bamboo walls, false walls, and sprites

* caltrops check for shoe thickmaterial flag

* added spear and fixed filepaths

* smoothing and caltrops are even more broken

* Fixes sprite smoothing and caltrop weirdness

* whitespace

* fixes tile stacking

* Henri review

Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

* royal blue and red carpets no longer smooth

* henri review

* actual henri review, thanks git

* Henri review electric boogaloo

Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

* removes bamboo walls (rip)

* Update code/game/turfs/simulated/floor/fancy_floor.dm

Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

---------

Co-authored-by: cybercapitalism <98280110+cybercapitalism@users.noreply.github.com>
Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
This commit is contained in:
chuga-git
2024-04-07 04:38:10 -05:00
committed by GitHub
parent 1c68d1a792
commit df8fef119d
33 changed files with 311 additions and 60 deletions
+4 -2
View File
@@ -57,11 +57,13 @@ DEFINE_BITFIELD(smoothing_flags, list(
#define SMOOTH_GROUP_CARPET_CYAN S_TURF(13)
#define SMOOTH_GROUP_CARPET_GREEN S_TURF(14)
#define SMOOTH_GROUP_CARPET_ROYALBLACK S_TURF(15)
#define SMOOTH_GROUP_CARPET_ROYALBLUE S_TURF(17)
#define SMOOTH_GROUP_CARPET_ROYALBLUE S_TURF(16)
#define SMOOTH_GROUP_CARPET_RED S_TURF(17)
#define SMOOTH_GROUP_CARPET_ORANGE S_TURF(18)
#define SMOOTH_GROUP_CARPET_PURPLE S_TURF(19)
#define SMOOTH_GROUP_BAMBOO S_TURF(20) ///turf/simulated/floor/bamboo
#define SMOOTH_GROUP_SIMULATED_TURFS S_TURF(24) ///turf/simulated
#define SMOOTH_GROUP_MATERIAL_WALLS S_TURF(25) ///turf/simulated/wall/material
#define SMOOTH_GROUP_SYNDICATE_WALLS S_TURF(26) ///turf/simulated/wall/r_wall/syndicate, /turf/simulated/indestructible/syndicate
@@ -91,6 +93,7 @@ DEFINE_BITFIELD(smoothing_flags, list(
#define SMOOTH_GROUP_IRON_WALLS S_OBJ(9) ///turf/simulated/wall/mineral/iron, /obj/structure/falsewall/iron
#define SMOOTH_GROUP_ABDUCTOR_WALLS S_OBJ(10) ///turf/simulated/wall/mineral/abductor, /obj/structure/falsewall/abductor
#define SMOOTH_GROUP_TITANIUM_WALLS S_OBJ(11) ///turf/simulated/wall/mineral/titanium, /obj/structure/falsewall/titanium
#define SMOOTH_GROUP_ASTEROID_WALLS S_OBJ(12) ///turf/simulated/mineral, /obj/structure/falsewall/rock_ancient
#define SMOOTH_GROUP_PLASTITANIUM_WALLS S_OBJ(13) ///turf/simulated/wall/mineral/plastitanium, /obj/structure/falsewall/plastitanium
#define SMOOTH_GROUP_SURVIVAL_TIANIUM_POD S_OBJ(14) ///turf/simulated/wall/mineral/titanium/survival/pod, /obj/machinery/door/airlock/survival_pod, /obj/structure/window/shuttle/survival_pod
#define SMOOTH_GROUP_HIERO_WALL S_OBJ(15) ///obj/effect/temp_visual/elite_tumor_wall, /obj/effect/temp_visual/hierophant/wall
@@ -98,7 +101,6 @@ DEFINE_BITFIELD(smoothing_flags, list(
#define SMOOTH_GROUP_REGULAR_WALLS S_OBJ(17) ///turf/simulated/wall, /obj/structure/falsewall
#define SMOOTH_GROUP_REINFORCED_WALLS S_OBJ(18) ///turf/simulated/wall/r_wall, /obj/structure/falsewall/reinforced
#define SMOOTH_GROUP_CULT_WALLS S_OBJ(19) ///turf/simulated/wall/cult
#define SMOOTH_GROUP_ASTEROID_WALLS S_OBJ(12) ///turf/simulated/mineral, /obj/structure/falsewall/rock_ancient
#define SMOOTH_GROUP_WINDOW_FULLTILE S_OBJ(21) ///turf/simulated/indestructible/fakeglass, /obj/structure/window/full/basic, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /obj/structure/window/full/reinforced
#define SMOOTH_GROUP_WINDOW_FULLTILE_BRASS S_OBJ(22) ///obj/structure/window/brass/fulltile
+56 -34
View File
@@ -1,18 +1,30 @@
/datum/component/caltrop
///Minimum damage when crossed
var/min_damage
///Maximum damage when crossed
var/max_damage
///Probability of stunning and doing daamge
var/probability
///Duration of weaken when crossed
var/weaken_duration
///Shoebypassing, walking interaction, silence
var/flags
var/cooldown = 0
/datum/component/caltrop/Initialize(_min_damage = 0, _max_damage = 0, _probability = 100, _flags = NONE)
min_damage = _min_damage
max_damage = max(_min_damage, _max_damage)
probability = _probability
flags = _flags
/datum/component/caltrop/Initialize(_min_damage = 0, _max_damage = 0, _probability = 100, _weaken_duration = 6 SECONDS, _flags = NONE)
src.min_damage = _min_damage
src.max_damage = max(_min_damage, _max_damage)
src.probability = _probability
src.weaken_duration = _weaken_duration
src.flags = _flags
RegisterSignal(parent, list(COMSIG_MOVABLE_CROSSED), PROC_REF(Crossed))
/datum/component/caltrop/RegisterWithParent()
RegisterSignal(parent, COMSIG_MOVABLE_CROSSED, PROC_REF(Crossed))
/datum/component/caltrop/proc/Crossed(datum/source, atom/movable/AM)
var/atom/A = parent
@@ -22,41 +34,51 @@
if(!prob(probability))
return
if(ishuman(AM))
var/mob/living/carbon/human/H = AM
if(HAS_TRAIT(H, TRAIT_PIERCEIMMUNE))
return
if(!ishuman(AM))
return
if((flags & CALTROP_IGNORE_WALKERS) && H.m_intent == MOVE_INTENT_WALK)
return
var/mob/living/carbon/human/H = AM
var/picked_def_zone = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
var/obj/item/organ/external/O = H.get_organ(picked_def_zone)
if(!istype(O))
return
if(O.is_robotic())
return
if(HAS_TRAIT(H, TRAIT_PIERCEIMMUNE))
return
var/feetCover = (H.wear_suit && (H.wear_suit.body_parts_covered & FEET)) || (H.w_uniform && (H.w_uniform.body_parts_covered & FEET))
if((flags & CALTROP_IGNORE_WALKERS) && H.m_intent == MOVE_INTENT_WALK)
return
if(!(flags & CALTROP_BYPASS_SHOES) && (H.shoes || feetCover))
return
var/picked_def_zone = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
var/obj/item/organ/external/O = H.get_organ(picked_def_zone)
if(H.flying || H.floating || H.buckled)
return
if(!istype(O))
return
if(IS_HORIZONTAL(H) && HAS_TRAIT(H, TRAIT_CONTORTED_BODY))
return TRUE
if(O.is_robotic())
return
var/damage = rand(min_damage, max_damage)
var/feet_cover = (H.wear_suit && (H.wear_suit.body_parts_covered & FEET)) || (H.w_uniform && (H.w_uniform.body_parts_covered & FEET))
var/bypass_shoes = flags & CALTROP_BYPASS_SHOES
H.apply_damage(damage, BRUTE, picked_def_zone)
// doesn't penetrate if feet are covered
if(!bypass_shoes && (H.shoes || feet_cover))
return
if(cooldown < world.time - 10) //cooldown to avoid message spam.
if(!H.incapacitated(ignore_restraints = TRUE))
H.visible_message("<span class='danger'>[H] steps on [A].</span>", "<span class='userdanger'>You step on [A]!</span>")
else
H.visible_message("<span class='danger'>[H] slides on [A]!</span>", "<span class='userdanger'>You slide on [A]!</span>")
// doesn't penetrate shoes if feet are extra covered
if(bypass_shoes && (H.shoes && (H.shoes.flags & THICKMATERIAL)))
return
cooldown = world.time
H.Weaken(6 SECONDS)
if(H.flying || H.floating || H.buckled)
return
if(IS_HORIZONTAL(H) && HAS_TRAIT(H, TRAIT_CONTORTED_BODY))
return TRUE
var/damage = rand(min_damage, max_damage)
H.apply_damage(damage, BRUTE, picked_def_zone)
if(cooldown < world.time - 10) //cooldown to avoid message spam.
if(!H.incapacitated(ignore_restraints = TRUE))
H.visible_message("<span class='danger'>[H] steps on [A].</span>", "<span class='userdanger'>You step on [A]!</span>")
else
H.visible_message("<span class='danger'>[H] slides on [A]!</span>", "<span class='userdanger'>You slide on [A]!</span>")
cooldown = world.time
H.Weaken(weaken_duration)
+1
View File
@@ -208,6 +208,7 @@
/obj/item/seeds/wheat/rice = 3,
/obj/item/seeds/soya = 3,
/obj/item/seeds/sugarcane = 3,
/obj/item/seeds/bamboo = 3,
/obj/item/seeds/sunflower = 3,
/obj/item/seeds/tea = 3,
/obj/item/seeds/tobacco = 3,
@@ -233,11 +233,6 @@ GLOBAL_LIST_INIT(wood_recipes, list(
new /datum/stack_recipe("pew (left)", /obj/structure/chair/sofa/pew/left, 5, one_per_turf = TRUE, on_floor = TRUE),
new /datum/stack_recipe("pew (right)", /obj/structure/chair/sofa/pew/right, 5, one_per_turf = TRUE, on_floor = TRUE),
)),
new /datum/stack_recipe_list("bamboo benches", list(
new /datum/stack_recipe("bamboo bench (middle)", /obj/structure/chair/sofa/bamboo, 2, one_per_turf = TRUE, on_floor = TRUE),
new /datum/stack_recipe("bamboo bench (left)", /obj/structure/chair/sofa/bamboo/left, 2, one_per_turf = TRUE, on_floor = TRUE),
new /datum/stack_recipe("bamboo bench (right)", /obj/structure/chair/sofa/bamboo/right, 2, one_per_turf = TRUE, on_floor = TRUE),
)),
null,
new /datum/stack_recipe("drying rack", /obj/machinery/smartfridge/drying_rack, 10, time = 1.5 SECONDS, one_per_turf = TRUE, on_floor = TRUE),
new /datum/stack_recipe("rifle stock", /obj/item/weaponcrafting/stock, 10, time = 4 SECONDS),
@@ -270,6 +265,47 @@ GLOBAL_LIST_INIT(wood_recipes, list(
recipes = GLOB.wood_recipes
return ..()
/*
* Bamboo
*/
GLOBAL_LIST_INIT(bamboo_recipes, list(
new /datum/stack_recipe("punji sticks trap", /obj/structure/punji_sticks, req_amount = 5, time = 3 SECONDS, one_per_turf = TRUE, on_floor = TRUE),
new /datum/stack_recipe("bamboo spear", /obj/item/spear/bamboo, req_amount = 25, time = 9 SECONDS),
new /datum/stack_recipe("blow gun", /obj/item/gun/syringe/blowgun, req_amount = 10, time = 7 SECONDS),
new /datum/stack_recipe("rice hat", /obj/item/clothing/head/rice_hat, req_amount = 10, time = 7 SECONDS),
null,
new /datum/stack_recipe("bamboo mat piece", /obj/item/stack/tile/bamboo, req_amount = 1, res_amount = 4, max_res_amount = 20),
new /datum/stack_recipe_list("tatami mats", list(
new /datum/stack_recipe("green tatami", /obj/item/stack/tile/bamboo/tatami, req_amount = 1, res_amount = 4, max_res_amount = 20),
new /datum/stack_recipe("purple tatami", /obj/item/stack/tile/bamboo/tatami/purple, req_amount = 1, res_amount = 4, max_res_amount = 20),
new /datum/stack_recipe("black tatami", /obj/item/stack/tile/bamboo/tatami/black, req_amount = 1, res_amount = 4, max_res_amount = 20),
)),
null,
new /datum/stack_recipe_list("bamboo benches", list(
new /datum/stack_recipe("bamboo bench (middle)", /obj/structure/chair/sofa/bamboo, req_amount = 3, time = 1 SECONDS, one_per_turf = TRUE, on_floor = TRUE),
new /datum/stack_recipe("bamboo bench (left)", /obj/structure/chair/sofa/bamboo/left, req_amount = 3, time = 1 SECONDS, one_per_turf = TRUE, on_floor = TRUE),
new /datum/stack_recipe("bamboo bench (right)", /obj/structure/chair/sofa/bamboo/right, req_amount = 3, time = 1 SECONDS, one_per_turf = TRUE, on_floor = TRUE)
)),
))
/obj/item/stack/sheet/bamboo
name = "bamboo cuttings"
desc = "Finely cut bamboo sticks."
singular_name = "cut bamboo stick"
icon = 'icons/obj/stacks/organic.dmi'
icon_state = "sheet-bamboo"
item_state = "sheet-bamboo"
resistance_flags = FLAMMABLE
sheettype = "bamboo"
merge_type = /obj/item/stack/sheet/bamboo
/obj/item/stack/sheet/bamboo/New(loc, amount=null)
recipes = GLOB.bamboo_recipes
return ..()
/obj/item/stack/sheet/bamboo/fifty
amount = 50
/*
* Cloth
*/
+25 -4
View File
@@ -3,19 +3,40 @@
* Recipe datum
*/
/datum/stack_recipe
/// Visible title of recipe
var/title = "ERROR"
/// Resulting typepath of crafted atom
var/result_type
/// Required stack amount to make
var/req_amount = 1
/// Amount of atoms made
var/res_amount = 1
/// Maximum amount of atoms made
var/max_res_amount = 1
/// Time to make
var/time = 0
var/one_per_turf = 0
var/on_floor = 0
var/on_floor_or_lattice = 0
/// Only one resulting atom is allowed per turf
var/one_per_turf = FALSE
/// Requires a floor underneath to make
var/on_floor = FALSE
/// Requires a floor OR lattice underneath to make
var/on_floor_or_lattice = FALSE
/// Requires a valid window location to make
var/window_checks = FALSE
/// Resulting atom is a cult structure
var/cult_structure = FALSE
/datum/stack_recipe/New(title, result_type, req_amount = 1, res_amount = 1, max_res_amount = 1, time = 0, one_per_turf = 0, on_floor = 0, on_floor_or_lattice = 0, window_checks = FALSE, cult_structure = FALSE)
/datum/stack_recipe/New(title, result_type, req_amount = 1, res_amount = 1, max_res_amount = 1, time = 0, one_per_turf = FALSE, on_floor = FALSE, on_floor_or_lattice = FALSE, window_checks = FALSE, cult_structure = FALSE)
src.title = title
src.result_type = result_type
src.req_amount = req_amount
@@ -68,6 +68,52 @@
energy_type = /datum/robot_storage/energy/wood_tile
is_cyborg = TRUE
//Bamboo
/obj/item/stack/tile/bamboo
name = "bamboo mat pieces"
singular_name = "bamboo mat piece"
gender = PLURAL
desc = "A piece of a bamboo mat with a decorative trim."
icon_state = "tile_bamboo"
turf_type = /turf/simulated/floor/bamboo
merge_type = /obj/item/stack/tile/bamboo
parent_stack = TRUE
resistance_flags = FLAMMABLE
/obj/item/stack/tile/bamboo/twenty
amount = 20
/obj/item/stack/tile/bamboo/tatami
name = "tatami with green rim"
singular_name = "green tatami floor tile"
icon_state = "tile_tatami_green"
turf_type = /turf/simulated/floor/bamboo/tatami
merge_type = /obj/item/stack/tile/bamboo/tatami
/obj/item/stack/tile/bamboo/tatami/twenty
amount = 20
/obj/item/stack/tile/bamboo/tatami/purple
name = "tatami with purple rim"
singular_name = "purple tatami floor tile"
icon_state = "tile_tatami_purple"
turf_type = /turf/simulated/floor/bamboo/tatami/purple
merge_type = /obj/item/stack/tile/bamboo/tatami/purple
/obj/item/stack/tile/bamboo/tatami/purple/twenty
amount = 20
/obj/item/stack/tile/bamboo/tatami/black
name = "tatami with black rim"
singular_name = "black tatami floor tile"
icon_state = "tile_tatami_black"
turf_type = /turf/simulated/floor/bamboo/tatami/black
merge_type = /obj/item/stack/tile/bamboo/tatami/black
/obj/item/stack/tile/bamboo/tatami/black/twenty
amount = 20
//Carpets
/obj/item/stack/tile/carpet
name = "carpet"
@@ -321,6 +321,13 @@
throwforce = 22
armour_penetration_percentage = 15 //Enhanced armor piercing
//Blatant imitation of spear, but all natural. Also not valid for explosive modification.
/obj/item/spear/bamboo
name = "bamboo spear"
desc = "A haphazardly-constructed bamboo stick with a sharpened tip, ready to poke holes into unsuspecting people."
base_icon_state = "bamboo_spear"
icon_state = "bamboo_spear0"
throwforce = 22
//GREY TIDE
/obj/item/spear/grey_tide
+3
View File
@@ -86,6 +86,9 @@
if(istype(W, /obj/item/stack/sheet/runed_metal))
to_chat(user, "<span class='warning'>You can't seem to make the metal bend.</span>")
return
if(istype(W, /obj/item/stack/sheet/bamboo)) // pending wall resprite(tm)
to_chat(user, "<span class='warning'>The bamboo doesn't seem to fit around the girder.</span>")
return
if(istype(W,/obj/item/stack/rods))
var/obj/item/stack/rods/S = W
@@ -424,7 +424,7 @@
resistance_flags = FLAMMABLE
max_integrity = 70
buildstackamount = 2
buildstacktype = /obj/item/stack/sheet/wood
buildstacktype = /obj/item/stack/sheet/bamboo
/obj/structure/chair/sofa/bamboo/left
icon_state = "bamboo_sofaend_left"
@@ -453,7 +453,7 @@
resistance_flags = FLAMMABLE
max_integrity = 70
buildstackamount = 2
buildstacktype = /obj/item/stack/sheet/wood
buildstacktype = /obj/item/stack/sheet/bamboo
/obj/item/chair
name = "chair"
@@ -497,8 +497,8 @@
/obj/item/chair/stool/bamboo
name = "bamboo stool"
desc = "Not the most comfortable, but vegan!"
item_state = "bamboo_stool"
icon_state = "bamboo_stool_toppled"
item_state = "stool_bamboo"
origin_type = /obj/structure/chair/stool/bamboo
/obj/item/chair/attack_self(mob/user)
+64 -2
View File
@@ -53,6 +53,7 @@
oxygen = 8
temperature = 500
// Grass
/turf/simulated/floor/grass
name = "grass patch"
icon = 'icons/turf/floors/grass.dmi'
@@ -102,7 +103,6 @@
transform = null
//Carpets
/turf/simulated/floor/carpet
name = "carpet"
icon = 'icons/turf/floors/carpet.dmi'
@@ -204,9 +204,71 @@
oxygen = 0
nitrogen = 0
temperature = TCMB
//End of carpets
// Bamboo mats
/turf/simulated/floor/bamboo
name = "bamboo"
icon = 'icons/turf/floors/bamboo_mat.dmi'
icon_state = "mat-0"
base_icon_state = "mat"
floor_tile = /obj/item/stack/tile/bamboo
prying_tool_list = list(TOOL_SCREWDRIVER)
broken_states = list("bamboo-damaged")
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_TURF, SMOOTH_GROUP_BAMBOO)
canSmoothWith = list(SMOOTH_GROUP_BAMBOO)
footstep = FOOTSTEP_WOOD
barefootstep = FOOTSTEP_WOOD_BAREFOOT
clawfootstep = FOOTSTEP_WOOD_CLAW
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
/turf/simulated/floor/bamboo/Initialize(mapload)
. = ..()
update_icon()
/turf/simulated/floor/bamboo/update_icon_state()
if(!broken && !burnt)
if(smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK))
QUEUE_SMOOTH(src)
else
make_plating()
if(smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK))
QUEUE_SMOOTH_NEIGHBORS(src)
/turf/simulated/floor/bamboo/break_tile()
broken = TRUE
update_icon()
/turf/simulated/floor/bamboo/burn_tile()
burnt = TRUE
update_icon()
/turf/simulated/floor/bamboo/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
return FALSE
/turf/simulated/floor/bamboo/airless
oxygen = 0
nitrogen = 0
temperature = TCMB
// Bamboo tatami mat
/turf/simulated/floor/bamboo/tatami
desc = "A traditional Japanese floor mat."
icon_state = "bamboo-green"
broken_states = list("tatami-damaged")
floor_tile = /obj/item/stack/tile/bamboo/tatami
smoothing_flags = NONE
/turf/simulated/floor/bamboo/tatami/purple
icon_state = "bamboo-purple"
floor_tile = /obj/item/stack/tile/bamboo/tatami/purple
/turf/simulated/floor/bamboo/tatami/black
icon_state = "bamboo-black"
floor_tile = /obj/item/stack/tile/bamboo/tatami/black
// End of bamboo
/turf/simulated/floor/fakespace
icon = 'icons/turf/space.dmi'
icon_state = "0"
@@ -83,6 +83,32 @@
tastes = list("sugarcane" = 1)
distill_reagent = "rum"
/obj/item/seeds/bamboo
name = "pack of bamboo seeds"
desc = "A plant known for its flexible and resistant logs."
icon_state = "seed-bamboo"
species = "bamboo"
plantname = "Bamboo"
product = /obj/item/grown/log/bamboo
lifespan = 80
endurance = 70
maturation = 15
production = 2
yield = 5
potency = 50
growthstages = 3
growing_icon = 'icons/obj/hydroponics/growing.dmi'
icon_dead = "bamboo-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = null
/obj/item/grown/log/bamboo
seed = /obj/item/seeds/bamboo
name = "bamboo log"
desc = "A long and resistant bamboo log."
icon_state = "bamboo"
plank_type = /obj/item/stack/sheet/bamboo // this needs to get datumized :)
plank_name = "bamboo sticks"
// Gatfruit
/obj/item/seeds/gatfruit
@@ -102,6 +102,26 @@
/obj/item/grown/log/steel/CheckAccepted(obj/item/I)
return FALSE
/*
* Punji sticks
*/
/obj/structure/punji_sticks
name = "punji sticks"
desc = "Don't step on this."
icon = 'icons/obj/hydroponics/equipment.dmi'
icon_state = "punji"
resistance_flags = FLAMMABLE
max_integrity = 30
anchored = TRUE
/obj/structure/punji_sticks/Initialize(mapload)
. = ..()
AddComponent(/datum/component/caltrop, 20, 30, 100, 6 SECONDS, CALTROP_BYPASS_SHOES)
/obj/structure/punji_sticks/spikes
name = "wooden spikes"
icon_state = "woodspike"
/////////BONFIRES//////////
/obj/structure/bonfire
@@ -145,10 +145,8 @@
/obj/structure/flora/ash/cacti/Initialize(mapload)
. = ..()
// min dmg 3, max dmg 6, prob(70)
AddComponent(/datum/component/caltrop, 3, 6, 70)
/*********
* Rocks *
*********/
@@ -399,3 +399,17 @@
/obj/item/gun/syringe/rapidsyringe/preloaded/beaker_blaster/attack_self(mob/living/user)
// no printing infinite syringes.
return
/// craftable bamboo syringe gun
/obj/item/gun/syringe/blowgun
name = "blowgun"
desc = "Fire syringes at a short distance."
icon_state = "blowgun"
item_state = "gun"
/obj/item/gun/syringe/blowgun/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
visible_message("<span class='danger'>[user] shoots the blowgun!</span>")
user.adjustStaminaLoss(20, FALSE)
user.adjustOxyLoss(20)
return ..()
@@ -271,3 +271,4 @@
amount_per_transfer_from_this = 50
volume = 50
list_reagents = list("toxin" = 15, "pancuronium" = 10, "cyanide" = 5, "facid" = 10, "fluorine" = 10)
@@ -210,11 +210,3 @@
materials = list(MAT_BIOMASS = 400)
build_path = /obj/item/clothing/accessory/holster
category = list("initial","Leather and Cloth")
/datum/design/rice_hat
name = "Rice hat"
id = "rice_hat"
build_type = BIOGENERATOR
materials = list(MAT_BIOMASS = 300)
build_path = /obj/item/clothing/head/rice_hat
category = list("initial","Leather and Cloth")
Binary file not shown.

Before

Width:  |  Height:  |  Size: 855 B

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 794 B

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB