Files
Aurora.3/code/game/objects/items/weapons/vaurca_items.dm
Fluffy 9636363e60 Refactored the attack proc (#19908)
Refactored the attack proc signature.
Added signals and components for the attack proc.
Added signals and components for the attackby proc.
Adjusted some leftover attackby procs signatures.
Added grep test to ensure people don't keep adding attack/attackby procs
with the wrong signature.
2024-10-06 21:30:00 +00:00

535 lines
18 KiB
Plaintext

//Weapons and items used exclusively by the Vaurcae, typically only for event shenanigans, and possibly random finds in the future. All items here should have
//"Vaurca" in the item path at some point, so they can be easily spawned in-game.
/obj/item/clothing/mask/gas/vaurca
desc = "A Vaurcae mandible garment with an attached gas filter and air-tube."
name = "mandible garment"
icon = 'icons/obj/vaurca_items.dmi'
icon_state = "m_garment"
item_state = "m_garment"
w_class = WEIGHT_CLASS_SMALL
flags_inv = null
body_parts_covered = null
filtered_gases = list(GAS_NITROGEN, GAS_N2O, GAS_CHLORINE, GAS_ALIEN)
contained_sprite = 1
/obj/item/clothing/mask/gas/vaurca/adjust_mask(mob/user)
to_chat(user, "This mask is too tight to adjust.")
return
/obj/item/clothing/mask/gas/vaurca/filter
desc = "A basic screw on filter attached beneath the mouthparts of the common Vaurca."
name = "filter port"
icon_state = "filterport"
w_class = WEIGHT_CLASS_SMALL
flags_inv = null
body_parts_covered = null
species_restricted = list(BODYTYPE_VAURCA, BODYTYPE_VAURCA_WARFORM, BODYTYPE_VAURCA_BREEDER, BODYTYPE_VAURCA_BULWARK)
item_state = 0
/obj/item/clothing/head/shaper
name = "shaper helmet"
desc = "A mirrored helm commonly worn by Preimminents. The helm masks the visage of its wearer, symbolically and literally blinding them to all but the path set in front of them."
icon = 'icons/obj/vaurca_items.dmi'
icon_state = "shaper_helmet"
item_state = "shaper_helmet"
contained_sprite = TRUE
sprite_sheets = list(
BODYTYPE_VAURCA_BULWARK = 'icons/mob/species/bulwark/head.dmi'
)
species_restricted = list(BODYTYPE_VAURCA, BODYTYPE_VAURCA_BULWARK)
body_parts_covered = HEAD|EYES
/obj/item/clothing/head/expression
name = "human expression mask"
desc = "A mask that allows emotively challenged aliens to convey facial expressions. This one depicts a human."
icon = 'icons/obj/vaurca_items.dmi'
icon_state = "human_helmet"
item_state = "human_helmet"
build_from_parts = TRUE
worn_overlay = "face"
contained_sprite = TRUE
/obj/item/clothing/head/expression/skrell
name = "skrell expression mask"
desc = "A mask that allows emotively challenged aliens to convey facial expressions. This one depicts a Skrell."
icon_state = "skrell_helmet"
item_state = "skrell_helmet"
/obj/item/clothing/head/expression/unathi
name = "unathi expression mask"
desc = "A mask that allows emotively challenged aliens to convey facial expressions. This one depicts a Unathi."
icon_state = "unathi_helmet"
item_state = "unathi_helmet"
/obj/item/clothing/head/shroud
name = "vaurcan shroud"
desc = "This relatively new design is meant to cover the head of a Vaurca, to both protect against sunlight, and to cover their mandibles. This one is blue."
icon = 'icons/obj/vaurca_items.dmi'
icon_state = "vacshroudblue"
item_state = "vacshroudblue"
body_parts_covered = HEAD|FACE|EYES
contained_sprite = TRUE
/obj/item/clothing/head/shroud/red
desc = "This relatively new design is meant to cover the head of a Vaurca, to both protect against sunlight, and to cover their mandibles. This one is red."
icon_state = "vacshroudred"
item_state = "vacshroudred"
/obj/item/clothing/head/shroud/green
desc = "This relatively new design is meant to cover the head of a Vaurca, to both protect against sunlight, and to cover their mandibles. This one is green."
icon_state = "vacshroudgreen"
item_state = "vacshroudgreen"
/obj/item/clothing/head/shroud/purple
desc = "This relatively new design is meant to cover the head of a Vaurca, to both protect against sunlight, and to cover their mandibles. This one is purple."
icon_state = "vacshroudpurple"
item_state = "vacshroudpurple"
/obj/item/clothing/head/shroud/brown
desc = "This relatively new design is meant to cover the head of a Vaurca, to both protect against sunlight, and to cover their mandibles. This one is brown."
icon_state = "vacshroudbrown"
item_state = "vacshroudbrown"
/obj/item/clothing/head/shroud/colorable
desc = "This relatively new design is meant to cover the head of a Vaurca, to both protect against sunlight, and to cover their mandibles."
icon_state = "vacshroudcol"
item_state = "vacshroudcol"
worn_overlay = "over"
build_from_parts = TRUE
/obj/item/melee/energy/vaurca
name = "thermal knife"
desc = "A Vaurcae-designed combat knife with a thermal energy blade designed for close-quarter encounters."
icon = 'icons/obj/vaurca_items.dmi'
icon_state = "eknife0"
item_state = "eknife0"
active_force = 25
active_throwforce = 20
active_w_class = WEIGHT_CLASS_HUGE
force = 11
throwforce = 5
throw_speed = 5
throw_range = 10
w_class = WEIGHT_CLASS_TINY
atom_flags = ATOM_FLAG_NO_BLOOD
obj_flags = OBJ_FLAG_CONDUCTABLE
attack_verb = list("stabbed", "chopped", "sliced", "cleaved", "slashed", "cut")
sharp = 1
edge = TRUE
contained_sprite = 1
/obj/item/melee/energy/vaurca/activate(mob/living/user)
..()
icon_state = "eknife1"
item_state = icon_state
damtype = "fire"
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.update_inv_l_hand()
H.update_inv_r_hand()
to_chat(user, SPAN_NOTICE("\The [src] is now energised."))
/obj/item/melee/energy/vaurca/deactivate(mob/living/user)
..()
icon_state = "eknife0"
item_state = icon_state
damtype = "brute"
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.update_inv_l_hand()
H.update_inv_r_hand()
to_chat(user, SPAN_NOTICE("\The [src] is de-energised."))
/obj/item/vaurca/box
name = "puzzle box"
desc = "A classic Zo'rane puzzle box, a common sight in Vaurcae colonies."
icon_state = "puzzlebox"
contained_sprite = 1
icon = 'icons/obj/vaurca_items.dmi'
/obj/item/vaurca/box/attack_self(mob/user as mob)
if(isvaurca(user))
to_chat(user, SPAN_NOTICE("You are familiar with the box's solution, and open it to reveal an ancient thing. How tedious."))
var/obj/item/archaeological_find/X = new /obj/item/archaeological_find
user.remove_from_mob(src)
user.put_in_hands(X)
qdel(src)
else if(isipc(user))
to_chat(user, SPAN_NOTICE("You analyze the box's markings, and begin to calculate with robotic efficiency every possible combination. (You must stand still to complete the puzzle box.)"))
if(do_after(user, 100))
to_chat(user, SPAN_NOTICE("Calculations complete. You begin to brute-force the box with a mechanical determination."))
if(do_after(user, 600))
to_chat(user, SPAN_NOTICE("After a minute of brute-force puzzle solving, the box finally opens to reveal an ancient thing."))
var/obj/item/archaeological_find/X = new /obj/item/archaeological_find
user.remove_from_mob(src)
user.put_in_hands(X)
qdel(src)
else
to_chat(user, SPAN_NOTICE("You stare at the box for a few seconds, trying to even comprehend what you're looking at... (You must stand still to complete the puzzle box.)"))
if(do_after(user, 60))
to_chat(user, "<span class = 'notice'>After a few more seconds, you hesitantly turn the first piece of the puzzle box.</span>")
if(do_after(user,30))
to_chat(user, "<span class = 'notice'>After nothing bad happens, you dive into the puzzle with a feeling of confidence!</span>")
if(do_after(user,200))
to_chat(user, "<span class = 'notice'>Twenty seconds pass, and suddenly you're feeling a lot less confident. You struggle on...</span>")
if(do_after(user,100))
to_chat(user, SPAN_NOTICE("You blink, and suddenly you've lost your place, your thoughts, your mind..."))
if(do_after(user,20))
to_chat(user, SPAN_NOTICE("You find yourself again, and get back to turning pieces. At this point it is just randomly."))
if(do_after(user,600))
to_chat(user, SPAN_NOTICE("A minute goes by, and with one final turn the box looks just like it did when you started. Fucking bugs."))
/obj/item/melee/vaurca/navcomp
name = "navcomp coordinate archive"
desc = "A rather heavy data disk for a Vaurcan hiveship navigation drive."
icon = 'icons/obj/vaurca_items.dmi'
icon_state = "harddisk"
force = 15
throwforce = 5
w_class = WEIGHT_CLASS_NORMAL
contained_sprite = 1
/obj/item/melee/vaurca/rock
name = "Sedantis rock"
desc = "A large chunk of alien earth from the distant Vaurcan world of Sedantis I. Just looking at it makes you feel funny."
icon_state = "glowing"
icon = 'icons/obj/vaurca_items.dmi'
force = 22
throwforce = 30
w_class = WEIGHT_CLASS_BULKY
contained_sprite = 1
/obj/item/grenade/spawnergrenade/vaurca
name = "K'ois delivery pod"
desc = "A sophisticated K'ois delivery pod, for seeding a planet from the comfort of space."
spawner_type = /obj/machinery/portable_atmospherics/hydroponics/soil/invisible
deliveryamt = 7
contained_sprite = 1
icon = 'icons/obj/vaurca_items.dmi'
icon_state = "beacon"
force = 22
throwforce = 30
w_class = WEIGHT_CLASS_BULKY
var/seed = /datum/seed/koisspore
/obj/item/grenade/spawnergrenade/vaurca/prime()
if(spawner_type && deliveryamt)
var/turf/T = get_turf(src)
playsound(T, 'sound/effects/phasein.ogg', 100, 1)
for(var/mob/living/carbon/human/M in viewers(T, null))
M.flash_act(ignore_inherent = TRUE)
for(var/i=1, i<=deliveryamt, i++)
var/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/x = new spawner_type(T, new seed())
x.tumble(4)
qdel(src)
return
/obj/item/grenade/spawnergrenade/vaurca/liidra
name = "Black K'ois delivery pod"
desc = "A device made for rapid spread of black k'ois."
icon_state = "liibeacon"
seed = /datum/seed/koisspore/black
/obj/item/clothing/suit/space/void/vaurca
name = "voidsuit"
contained_sprite = 1
icon = 'icons/obj/vaurca_items.dmi'
icon_state = "void"
item_state = "void"
desc = "A lightweight Zo'rane designed Vaurcan softsuit, for extremely extended EVA operations."
slowdown = 0
species_restricted = list(BODYTYPE_VAURCA)
boots = /obj/item/clothing/shoes/magboots/vaurca
helmet = /obj/item/clothing/head/helmet/space/void/vaurca
/obj/item/clothing/head/helmet/space/void/vaurca
name = "void helmet"
desc = "An alien looking Zo'rane softsuit helmet."
contained_sprite = 1
icon = 'icons/obj/vaurca_items.dmi'
icon_state = "helm_void"
item_state = "helm_void"
species_restricted = list(BODYTYPE_VAURCA)
light_overlay = "helmet_light_dual_green"
light_color = "#3e7c3e"
/obj/item/clothing/shoes/magboots/vaurca
desc = "A pair of heavy mag-claws designed for a Vaurca."
name = "mag-claws"
item_state = "boots_void"
icon_state = "boots_void"
contained_sprite = 1
icon = 'icons/obj/vaurca_items.dmi'
species_restricted = list(BODYTYPE_VAURCA, BODYTYPE_VAURCA_WARFORM, BODYTYPE_VAURCA_BULWARK)
sprite_sheets = list(
BODYTYPE_VAURCA_WARFORM = 'icons/mob/species/warriorform/shoes.dmi',
BODYTYPE_VAURCA_BULWARK = 'icons/mob/species/bulwark/shoes.dmi'
)
action_button_name = "Toggle the magclaws"
/obj/item/clothing/suit/space/void/scout
name = "scout armor"
contained_sprite = 1
icon = 'icons/obj/vaurca_items.dmi'
icon_state = "scout"
item_state = "scout"
desc = "Armor designed for K'laxan scouts, made of lightweight sturdy material that does not restrict movement."
slowdown = -1
species_restricted = list(BODYTYPE_VAURCA)
armor = list(
melee = ARMOR_MELEE_RESISTANT,
bullet = ARMOR_BALLISTIC_SMALL,
laser = ARMOR_LASER_SMALL,
bomb = ARMOR_BOMB_PADDED,
bio = ARMOR_BIO_SHIELDED
)
/obj/item/clothing/head/helmet/space/void/scout
name = "scout helmet"
desc = "A helmet designed for K'laxan scouts, made of lightweight sturdy material that does not restrict movement."
contained_sprite = 1
icon = 'icons/obj/vaurca_items.dmi'
icon_state = "helm_scout"
item_state = "helm_scout"
species_restricted = list(BODYTYPE_VAURCA)
armor = list(
melee = ARMOR_MELEE_RESISTANT,
bullet = ARMOR_BALLISTIC_SMALL,
laser = ARMOR_LASER_SMALL,
bomb = ARMOR_BOMB_PADDED,
bio = ARMOR_BIO_SHIELDED
)
light_overlay = "helmet_light_dual_green"
light_color = "#3e7c3e"
/obj/item/clothing/suit/space/void/commando
name = "commando armor"
contained_sprite = 1
icon = 'icons/obj/vaurca_items.dmi'
icon_state = "commando"
item_state = "commando"
desc = "A design perfected by the Zo'ra, this armor is commonly used by frontline warriors of a Hive. Ablative design deflects lasers away from the body while providing moderate physical protection."
species_restricted = list(BODYTYPE_VAURCA)
armor = list(
melee = ARMOR_MELEE_RESISTANT,
bullet = ARMOR_BALLISTIC_MEDIUM,
laser = ARMOR_LASER_MAJOR,
bomb = ARMOR_BOMB_PADDED,
bio = ARMOR_BIO_SHIELDED,
rad = ARMOR_RAD_MINOR
)
/obj/item/clothing/head/helmet/space/void/commando
name = "commando helmet"
desc = "A design perfected by the Zo'ra, this helmet is commonly used by frontline warriors of a Hive. Ablative design deflects lasers away from the body while providing moderate physical protection."
contained_sprite = 1
icon = 'icons/obj/vaurca_items.dmi'
icon_state = "helm_commando"
item_state = "helm_commando"
species_restricted = list(BODYTYPE_VAURCA)
armor = list(
melee = ARMOR_MELEE_RESISTANT,
bullet = ARMOR_BALLISTIC_MEDIUM,
laser = ARMOR_LASER_MAJOR,
bomb = ARMOR_BOMB_PADDED,
bio = ARMOR_BIO_SHIELDED,
rad = ARMOR_RAD_MINOR
)
light_overlay = "helmet_light_dual_green"
light_color = "#3e7c3e"
/obj/item/clothing/mask/gas/vaurca/tactical
name = "tactical garment"
desc = "A tactical mandible garment with state of the art air filtration."
item_flags = ITEM_FLAG_BLOCK_GAS_SMOKE_EFFECT | ITEM_FLAG_AIRTIGHT | ITEM_FLAG_FLEXIBLE_MATERIAL | ITEM_FLAG_THICK_MATERIAL
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE
body_parts_covered = FACE|EYES
gas_filter_strength = 3
w_class = WEIGHT_CLASS_SMALL
filtered_gases = list(GAS_NITROGEN, GAS_N2O)
armor = list(
melee = ARMOR_MELEE_RESISTANT,
bullet = ARMOR_BALLISTIC_MINOR,
laser = ARMOR_LASER_SMALL,
bio = ARMOR_BIO_STRONG,
rad = ARMOR_RAD_MINOR
)
icon = 'icons/obj/vaurca_items.dmi'
icon_state = "m_metalg"
item_state = "m_metalg"
contained_sprite = 1
/obj/item/melee/energy/vaurca_zweihander
name = "thermal greatblade"
desc = "An infamous execution blade of the Zo'ra, due to its size, only the largest Za were able to carry it in active combat."
icon = 'icons/obj/vaurca_items.dmi'
icon_state = "greatblade0"
item_state = "greatblade0"
active_force = 33
armor_penetration = 30
active_throwforce = 20
active_w_class = WEIGHT_CLASS_HUGE
force = 15
throwforce = 10
throw_speed = 5
throw_range = 10
w_class = WEIGHT_CLASS_BULKY
atom_flags = ATOM_FLAG_NO_BLOOD
obj_flags = OBJ_FLAG_CONDUCTABLE
attack_verb = list("stabbed", "chopped", "sliced", "cleaved", "slashed", "cut")
sharp = 1
edge = TRUE
contained_sprite = 1
base_reflectchance = 40
base_block_chance = 60
shield_power = 150
/obj/item/melee/energy/vaurca_zweihander/attack(mob/living/target_mob, mob/living/user, target_zone)
user.setClickCooldown(16)
..()
/obj/item/melee/energy/vaurca_zweihander/pre_attack(var/mob/living/target, var/mob/living/user)
if(istype(target))
cleave(user, target)
..()
/obj/item/melee/energy/vaurca_zweihander/activate(mob/living/user)
..()
icon_state = "greatblade1"
item_state = icon_state
damtype = "fire"
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.update_inv_l_hand()
H.update_inv_r_hand()
to_chat(user, SPAN_NOTICE("\The [src] is now energised."))
/obj/item/melee/energy/vaurca_zweihander/deactivate(mob/living/user)
..()
icon_state = "greatblade0"
item_state = icon_state
damtype = "brute"
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.update_inv_l_hand()
H.update_inv_r_hand()
to_chat(user, SPAN_NOTICE("\The [src] is de-energised."))
/obj/item/gun/launcher/crossbow/vaurca
name = "gauss rifle"
desc = "An unwieldy, heavy weapon that propels metal projectiles with magnetic coils that run its length."
contained_sprite = 1
icon = 'icons/obj/vaurca_items.dmi'
icon_state = "gaussrifle"
item_state = "gaussrifle"
fire_sound = /singleton/sound_category/gauss_fire_sound
fire_sound_text = "a subdued boom"
fire_delay = 12
slot_flags = SLOT_BACK
needspin = TRUE
recoil = 6
is_wieldable = TRUE
release_speed = 5
var/list/belt = new/list()
var/belt_size = 12 //holds this + one in the chamber
recoil_wielded = 2
accuracy_wielded = -1
fire_delay_wielded = 1
/obj/item/gun/launcher/crossbow/vaurca/consume_next_projectile(mob/user=null)
return bolt
/obj/item/gun/launcher/crossbow/vaurca/handle_post_fire(mob/user, atom/target)
bolt = null
tension = 1
..()
/obj/item/gun/launcher/crossbow/vaurca/unique_action(mob/living/user)
pump(user)
/obj/item/gun/launcher/crossbow/vaurca/proc/pump(mob/M as mob)
playsound(M, 'sound/weapons/reloads/shotgun_pump.ogg', 60, 1)
if(bolt)
if(tension < max_tension)
if(do_after(M, 5 * tension))
to_chat(M, SPAN_WARNING("You pump [src], charging the magnetic coils."))
tension++
else
to_chat(M, SPAN_NOTICE("\The [src]'s magnetic coils are at maximum charge."))
return
var/obj/item/next
if(belt.len)
next = belt[1]
if(do_after(M, 10))
if(next)
belt -= next //Remove grenade from loaded list.
bolt = next
to_chat(M, SPAN_WARNING("You pump [src], loading \a [next] into the chamber."))
else
to_chat(M, SPAN_WARNING("You pump [src], but the magazine is empty."))
/obj/item/gun/launcher/crossbow/vaurca/proc/load(obj/item/W, mob/user)
if(belt.len >= belt_size)
to_chat(user, SPAN_WARNING("[src] is full."))
return
user.remove_from_mob(W)
W.forceMove(src)
belt.Insert(1, W) //add to the head of the list, so that it is loaded on the next pump
user.visible_message("[user] inserts \a [W] into [src].", SPAN_NOTICE("You insert \a [W] into [src]."))
/obj/item/gun/launcher/crossbow/vaurca/proc/unload(mob/user)
if(belt.len)
var/obj/item/arrow/rod/R = belt[belt.len]
belt.len--
user.put_in_hands(R)
user.visible_message("[user] removes \a [R] from [src].", SPAN_NOTICE("You remove \a [R] from [src]."))
else
to_chat(user, SPAN_WARNING("[src] is empty."))
/obj/item/gun/launcher/crossbow/vaurca/attackby(obj/item/attacking_item, mob/user)
if(istype(attacking_item, /obj/item/arrow))
load(attacking_item, user)
if(istype(attacking_item, /obj/item/stack/rods))
var/obj/item/stack/rods/R = attacking_item
if (R.use(1))
var/obj/item/arrow/rod/ROD = new /obj/item/arrow/rod(src)
load(ROD, user)
else
..()
/obj/item/gun/launcher/crossbow/vaurca/attack_hand(mob/user)
if(user.get_inactive_hand() == src)
unload(user)
else
..()
/obj/item/gun/launcher/crossbow/vaurca/superheat_rod(mob/user)
if(!user || !bolt) return
if(bolt.throwforce >= 25) return
if(!istype(bolt,/obj/item/arrow/rod)) return
bolt.throwforce = 25
bolt.icon_state = "metal-rod-superheated"
/obj/item/gun/launcher/crossbow/vaurca/update_icon()
return