diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm index 477b25e5944..b49f7ac4a09 100644 --- a/code/game/objects/items/pneumaticCannon.dm +++ b/code/game/objects/items/pneumaticCannon.dm @@ -306,45 +306,3 @@ charge_type = /obj/item/reagent_containers/food/snacks/pie/cream/nostun maxWeightClass = 6 //2 pies charge_ticks = 2 //4 second/pie - -/obj/item/pneumatic_cannon/speargun - name = "kinetic speargun" - desc = "A weapon favored by carp hunters. Fires specialized spears using kinetic energy." - icon = 'icons/obj/guns/projectile.dmi' - icon_state = "speargun" - inhand_icon_state = "speargun" - w_class = WEIGHT_CLASS_BULKY - force = 10 - fire_sound = 'sound/weapons/gun/general/grenade_launch.ogg' - gasPerThrow = 0 - checktank = FALSE - range_multiplier = 3 - throw_amount = 1 - pressureSetting = 2 - maxWeightClass = 2 //a single magspear - spin_item = FALSE - var/static/list/magspear_typecache = typecacheof(/obj/item/throwing_star/magspear) - -/obj/item/pneumatic_cannon/speargun/Initialize() - . = ..() - allowed_typecache = magspear_typecache - -/obj/item/storage/backpack/magspear_quiver - name = "quiver" - desc = "A quiver for holding magspears." - icon_state = "quiver" - inhand_icon_state = "quiver" - -/obj/item/storage/backpack/magspear_quiver/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 20 - STR.max_combined_w_class = 40 - STR.display_numerical_stacking = TRUE - STR.set_holdable(list( - /obj/item/throwing_star/magspear - )) - -/obj/item/storage/backpack/magspear_quiver/PopulateContents() - for(var/i in 1 to 20) - new /obj/item/throwing_star/magspear(src) diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index 7326fc85b8b..4d97111346c 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -468,3 +468,24 @@ /obj/item/electronics, /obj/item/wallframe/camera )) + +/obj/item/storage/bag/harpoon_quiver + name = "harpoon quiver" + desc = "A quiver for holding harpoons." + icon_state = "quiver" + inhand_icon_state = "quiver" + worn_icon_state = "harpoon_quiver" + +/obj/item/storage/bag/harpoon_quiver/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_w_class = WEIGHT_CLASS_TINY + STR.max_items = 40 + STR.max_combined_w_class = 100 + STR.set_holdable(list( + /obj/item/ammo_casing/caseless/harpoon + )) + +/obj/item/storage/bag/harpoon_quiver/PopulateContents() + for(var/i in 1 to 40) + new /obj/item/ammo_casing/caseless/harpoon(src) diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 3f10a324a69..2a9c7e2d106 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -150,8 +150,8 @@ new /obj/item/book/granter/spell/summonitem(src) if("white_whale_holy_grail") //Unique items that don't appear anywhere else - new /obj/item/pneumatic_cannon/speargun(src) - new /obj/item/storage/backpack/magspear_quiver(src) + new /obj/item/gun/ballistic/rifle/boltaction/harpoon(src) + new /obj/item/storage/bag/harpoon_quiver(src) new /obj/item/clothing/suit/space/hardsuit/carp(src) new /obj/item/clothing/mask/gas/carp(src) new /obj/item/grenade/spawnergrenade/spesscarp(src) diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index dd69f7cdf3d..71309efbeb5 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -339,18 +339,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 throwforce = 0 embedding = list("pain_mult" = 0, "jostle_pain_mult" = 0, "embed_chance" = 100, "fall_chance" = 0) -/obj/item/throwing_star/magspear - name = "magnetic spear" - desc = "A reusable spear that is typically loaded into kinetic spearguns." - icon = 'icons/obj/ammo.dmi' - icon_state = "magspear" - throwforce = 25 //kills regular carps in one hit - force = 10 - throw_range = 0 //throwing these invalidates the speargun - attack_verb_continuous = list("stabs", "rips", "gores", "impales") - attack_verb_simple = list("stab", "rip", "gore", "impale") - embedding = list("pain_mult" = 8, "embed_chance" = 100, "fall_chance" = 0, "impact_pain_mult" = 15) //55 damage+embed on hit - /obj/item/switchblade name = "switchblade" icon_state = "switchblade" diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index e7b6d18b2a2..e5ac220f629 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -332,7 +332,7 @@ Contains: inhand_icon_state = "space_suit_syndicate" slowdown = 0 //Space carp magic, never stop believing armor = list(MELEE = -20, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 75, FIRE = 60, ACID = 75) //As whimpy whimpy whoo - allowed = list(/obj/item/tank/internals, /obj/item/pneumatic_cannon/speargun) //I'm giving you a hint here + allowed = list(/obj/item/tank/internals, /obj/item/gun/ballistic/rifle/boltaction/harpoon) //I'm giving you a hint here helmettype = /obj/item/clothing/head/helmet/space/hardsuit/carp /obj/item/clothing/head/helmet/space/hardsuit/carp/equipped(mob/living/carbon/human/user, slot) diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index e5e307d7f48..2df969e27ad 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -252,7 +252,7 @@ body_parts_covered = CHEST|GROIN|ARMS cold_protection = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT //Space carp like space, so you should too - allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/pneumatic_cannon/speargun) + allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/gun/ballistic/rifle/boltaction/harpoon) hoodtype = /obj/item/clothing/head/hooded/carp_hood /obj/item/clothing/head/hooded/carp_hood diff --git a/code/modules/projectiles/ammunition/caseless/misc.dm b/code/modules/projectiles/ammunition/caseless/misc.dm index 083b5e848c3..a32ab55ffc5 100644 --- a/code/modules/projectiles/ammunition/caseless/misc.dm +++ b/code/modules/projectiles/ammunition/caseless/misc.dm @@ -12,3 +12,11 @@ projectile_type = /obj/projectile/beam/weak/penetrator variance = 0.8 click_cooldown_override = 1 + + // Harpoons (Ballistic Harpoon Gun) + +/obj/item/ammo_casing/caseless/harpoon + name = "harpoon" + caliber = "harpoon" + icon_state = "magspear" + projectile_type = /obj/projectile/bullet/harpoon diff --git a/code/modules/projectiles/boxes_magazines/internal/rifle.dm b/code/modules/projectiles/boxes_magazines/internal/rifle.dm index d4df54f75c5..c3570546fbd 100644 --- a/code/modules/projectiles/boxes_magazines/internal/rifle.dm +++ b/code/modules/projectiles/boxes_magazines/internal/rifle.dm @@ -13,3 +13,7 @@ /obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage ammo_type = /obj/item/ammo_casing/magic/arcane_barrage +/obj/item/ammo_box/magazine/internal/boltaction/harpoon + max_ammo = 1 + caliber = "harpoon" + ammo_type = /obj/item/ammo_casing/caseless/harpoon diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm index c661f0189d0..3d4d996e583 100644 --- a/code/modules/projectiles/guns/ballistic/rifle.dm +++ b/code/modules/projectiles/guns/ballistic/rifle.dm @@ -77,6 +77,16 @@ process_fire(user, user, FALSE) . = 1 +/obj/item/gun/ballistic/rifle/boltaction/harpoon + name = "ballistic harpoon gun" + desc = "A weapon favored by carp hunters, but just as infamously employed by agents of the Animal Rights Consortium against human aggressors. Because it's ironic." + icon_state = "speargun" + inhand_icon_state = "speargun" + worn_icon_state = "speargun" + mag_type = /obj/item/ammo_box/magazine/internal/boltaction/harpoon + fire_sound = 'sound/weapons/gun/sniper/shot.ogg' + can_be_sawn_off = FALSE + /obj/item/gun/ballistic/rifle/boltaction/enchanted name = "enchanted bolt action rifle" desc = "Careful not to lose your head." diff --git a/code/modules/projectiles/projectile/bullets/rifle.dm b/code/modules/projectiles/projectile/bullets/rifle.dm index d1794ef3036..367a2a1be77 100644 --- a/code/modules/projectiles/projectile/bullets/rifle.dm +++ b/code/modules/projectiles/projectile/bullets/rifle.dm @@ -25,3 +25,15 @@ name = "enchanted 7.62 bullet" damage = 20 stamina = 80 + +// Harpoons (Harpoon Gun) + +/obj/projectile/bullet/harpoon + name = "harpoon" + icon_state = "gauss" + damage = 60 + armour_penetration = 50 + wound_bonus = -20 + bare_wound_bonus = 80 + embedding = list(embed_chance=100, fall_chance=3, jostle_chance=4, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.4, pain_mult=5, jostle_pain_mult=6, rip_time=10) + wound_falloff_tile = -5 diff --git a/code/modules/spells/spell_types/rightandwrong.dm b/code/modules/spells/spell_types/rightandwrong.dm index 3d20f5e711e..eb0d84723c9 100644 --- a/code/modules/spells/spell_types/rightandwrong.dm +++ b/code/modules/spells/spell_types/rightandwrong.dm @@ -20,7 +20,7 @@ GLOBAL_LIST_INIT(summoned_guns, list( /obj/item/gun/ballistic/automatic/ar, /obj/item/gun/ballistic/revolver/mateba, /obj/item/gun/ballistic/rifle/boltaction, - /obj/item/pneumatic_cannon/speargun, + /obj/item/gun/ballistic/rifle/boltaction/harpoon, /obj/item/gun/ballistic/automatic/mini_uzi, /obj/item/gun/energy/lasercannon, /obj/item/gun/energy/kinetic_accelerator/crossbow/large, @@ -116,7 +116,7 @@ GLOBAL_VAR_INIT(summon_magic_triggered, FALSE) var/gun_type = pick(GLOB.summoned_guns) var/obj/item/gun/G = new gun_type(get_turf(H)) - if (istype(G)) // The list contains some non-gun type guns like the speargun which do not have this proc + if (istype(G)) // The list may contain some non-gun type guns which do not have this proc G.unlock() playsound(get_turf(H),'sound/magic/summon_guns.ogg', 50, TRUE) diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi index 5026d453f84..cfeec414b6e 100644 Binary files a/icons/mob/clothing/back.dmi and b/icons/mob/clothing/back.dmi differ diff --git a/icons/mob/clothing/belt.dmi b/icons/mob/clothing/belt.dmi index ea140df9ab4..5c8df6d5904 100644 Binary files a/icons/mob/clothing/belt.dmi and b/icons/mob/clothing/belt.dmi differ diff --git a/icons/mob/clothing/belt_mirror.dmi b/icons/mob/clothing/belt_mirror.dmi index 368adb79802..b5a209f6290 100644 Binary files a/icons/mob/clothing/belt_mirror.dmi and b/icons/mob/clothing/belt_mirror.dmi differ diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi index ab61fd5e623..818d48d5127 100644 Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ