Files
Aurora.3/code/game/objects/items/stacks/rods.dm
Fluffy a3a4d46fa7 Hitby refactor (#19624)
Refactored hitby to be in line with TG's version.
Refactored item weight defines to a more clear naming scheme, also in
line with TG's version.
Refactored how the movement bumps are handled, ported signals to handle
them, in preparation for the movement update.
Fixed disposal hit bouncing the hitting atom on the wall.
Items do not push other items anymore if they are tiny.
2024-07-28 20:52:08 +00:00

163 lines
5.7 KiB
Plaintext

var/global/list/datum/stack_recipe/rod_recipes = list(
new /datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = TRUE, on_floor = TRUE),
new /datum/stack_recipe("floor-mounted catwalk", /obj/structure/lattice/catwalk/indoor, 4, time = 10, one_per_turf = TRUE, on_floor = TRUE),
new /datum/stack_recipe("grate, dark", /obj/structure/lattice/catwalk/indoor/grate, 1, time = 10, one_per_turf = TRUE, on_floor = TRUE),
new /datum/stack_recipe("grate, light", /obj/structure/lattice/catwalk/indoor/grate/light, 1, time = 10, one_per_turf = TRUE, on_floor = TRUE),
new /datum/stack_recipe("table frame", /obj/structure/table, 2, time = 10, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("mine track", /obj/structure/track, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE),
new /datum/stack_recipe("cane", /obj/item/cane, 1, time = 6),
new /datum/stack_recipe("crowbar", /obj/item/crowbar, 1, time = 6),
new /datum/stack_recipe("screwdriver", /obj/item/screwdriver, 1, time = 12),
new /datum/stack_recipe("wrench", /obj/item/wrench, 1, time = 6),
new /datum/stack_recipe("spade", /obj/item/shovel/spade, 2, time = 12),
new /datum/stack_recipe("bolt", /obj/item/arrow, 1, time = 6),
new /datum/stack_recipe("small animal trap", /obj/item/trap/animal, 6, time = 10),
new /datum/stack_recipe("medium animal trap", /obj/item/trap/animal/medium, 12, time = 20)
)
/obj/item/stack/rods
name = "metal rod"
desc = "Some rods. Can be used for building, or something."
desc_info = "Made from metal sheets. You can build a grille by using it in your hand. \
Clicking on a floor without any tiles will reinforce the floor. You can make reinforced glass by combining rods and normal glass sheets."
singular_name = "metal rod"
icon_state = "rods"
obj_flags = OBJ_FLAG_CONDUCTABLE
w_class = WEIGHT_CLASS_NORMAL
force = 20
throwforce = 15.0
throw_speed = 5
throw_range = 20
drop_sound = 'sound/items/drop/metalweapon.ogg'
pickup_sound = 'sound/items/pickup/metalweapon.ogg'
matter = list(DEFAULT_WALL_MATERIAL = 937.5)
recyclable = TRUE
max_amount = 60
attack_verb = list("hit", "bludgeoned", "whacked")
lock_picking_level = 3
stacktype = /obj/item/stack/rods
icon_has_variants = TRUE
/obj/item/stack/rods/Destroy()
. = ..()
GC_TEMPORARY_HARDDEL
/obj/item/stack/rods/full/Initialize()
. = ..()
amount = max_amount
update_icon()
/obj/item/stack/rods/cyborg
name = "metal rod synthesizer"
desc = "A device that makes metal rods."
gender = NEUTER
matter = null
uses_charge = 1
charge_costs = list(500)
stacktype = /obj/item/stack/rods
/obj/item/stack/rods/New(var/loc, var/amount=null)
..()
recipes = rod_recipes
/obj/item/stack/rods/attackby(obj/item/attacking_item, mob/user)
..()
if (attacking_item.iswelder())
var/obj/item/weldingtool/WT = attacking_item
if(get_amount() < 2)
to_chat(user, SPAN_WARNING("You need at least two rods to do this."))
return
if(WT.use(0,user))
var/obj/item/stack/material/steel/new_item = new(usr.loc)
new_item.add_to_stacks(usr)
for (var/mob/M in viewers(src))
M.show_message(SPAN_NOTICE("[src] is shaped into metal by [user.name] with the weldingtool."), 3,
SPAN_NOTICE("You hear welding."), 2)
var/obj/item/stack/rods/R = src
src = null
var/replace = (user.get_inactive_hand()==R)
R.use(2)
if (!R && replace)
user.put_in_hands(new_item)
return
if (istype(attacking_item, /obj/item/tape_roll))
var/obj/item/stack/medical/splint/makeshift/new_splint = new(user.loc)
new_splint.add_fingerprint(user)
user.visible_message(SPAN_NOTICE("\The [user] constructs \a [new_splint] out of a [singular_name]."), \
SPAN_NOTICE("You use make \a [new_splint] out of a [singular_name]."))
use(1)
return
..()
/obj/item/stack/barbed_wire
name = "barbed wire"
desc = "A spiky length of wire."
icon = 'icons/obj/barricades.dmi'
icon_state = "barbed_wire"
singular_name = "length"
max_amount = 50
w_class = WEIGHT_CLASS_SMALL
matter = list(DEFAULT_WALL_MATERIAL = 937.5)
attack_verb = list("hit", "whacked", "sliced")
/obj/item/stack/barbed_wire/half_full
amount = 25
/obj/item/stack/barbed_wire/full
amount = 50
/obj/item/stack/liquidbags
name = "liquid bags"
desc = "Bags filled with non-Newtonian liquid for the creation of barricades. These bags feel weird when you touch them: liquid to the gentle touch and the hardest thing you've felt if you smack them."
singular_name = "liquid bag"
max_amount = 50
icon = 'icons/obj/barricades.dmi'
icon_state = "liquidbags"
w_class = WEIGHT_CLASS_SMALL
matter = list(DEFAULT_WALL_MATERIAL = 650, MATERIAL_PHORON = 100, MATERIAL_PLASTEEL = 150)
/obj/item/stack/liquidbags/half_full
amount = 25
/obj/item/stack/liquidbags/full
amount = 50
/obj/item/stack/liquidbags/attack_self(mob/living/user)
..()
add_fingerprint(user)
if(!isturf(user.loc))
return
if(istype(user.loc, /turf/space))
to_chat(user, SPAN_WARNING("The liquidbag barricade must be constructed on a proper surface!"))
return
user.visible_message(SPAN_NOTICE("[user] starts assembling a liquidbag barricade."),
SPAN_NOTICE("You start assembling a liquidbag barricade."))
if(!do_after(user, 3 SECONDS, do_flags = DO_REPAIR_CONSTRUCT))
return
for(var/obj/O in user.loc) //Objects, we don't care about mobs. Turfs are checked elsewhere
if(O.density)
if(!(O.atom_flags & ATOM_FLAG_CHECKS_BORDER) || O.dir == user.dir)
return
var/build_stack = amount
if(amount >= 5)
build_stack = 5
var/obj/structure/barricade/liquid/SB = new(user.loc, user, user.dir, build_stack)
user.visible_message(SPAN_NOTICE("[user] assembles a liquidbag barricade."),
SPAN_NOTICE("You assemble a liquidbag barricade."))
SB.set_dir(user.dir)
SB.add_fingerprint(user)
use(build_stack)