From 14045259fa104822141bac820d9b91bb44ed8fbc Mon Sep 17 00:00:00 2001
From: tralezab <40974010+tralezab@users.noreply.github.com>
Date: Thu, 29 Jul 2021 02:17:03 -0700
Subject: [PATCH] Trash Cannons (#60476)
---
code/_globalvars/lists/maintenance_loot.dm | 1 +
code/datums/components/crafting/recipes.dm | 26 ++++
code/game/objects/items/granters.dm | 15 ++
code/game/objects/structures/cannon.dm | 103 -------------
.../game/objects/structures/cannons/cannon.dm | 138 ++++++++++++++++++
.../structures/cannons/cannon_instructions.dm | 20 +++
.../cannons}/cannonballs.dm | 12 ++
.../bullets/{cannon.dm => cannonball.dm} | 5 +
icons/obj/cannons.dmi | Bin 0 -> 2516 bytes
icons/obj/guns/projectiles.dmi | Bin 130382 -> 130608 bytes
icons/obj/stack_objects.dmi | Bin 48683 -> 49289 bytes
tgstation.dme | 7 +-
12 files changed, 221 insertions(+), 106 deletions(-)
delete mode 100644 code/game/objects/structures/cannon.dm
create mode 100644 code/game/objects/structures/cannons/cannon.dm
create mode 100644 code/game/objects/structures/cannons/cannon_instructions.dm
rename code/game/objects/{items/stacks => structures/cannons}/cannonballs.dm (83%)
rename code/modules/projectiles/projectile/bullets/{cannon.dm => cannonball.dm} (91%)
create mode 100644 icons/obj/cannons.dmi
diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm
index 14ba43ef0e8..530542d6581 100644
--- a/code/_globalvars/lists/maintenance_loot.dm
+++ b/code/_globalvars/lists/maintenance_loot.dm
@@ -314,6 +314,7 @@ GLOBAL_LIST_INIT(rarity_loot, list(//rare: really good items
list(//misc
/obj/item/disk/nuclear/fake = 1,
/obj/item/book/granter/crafting_recipe/pipegun_prime = 1,
+ /obj/item/book/granter/crafting_recipe/trash_cannon = 1,
) = 1,
))
diff --git a/code/datums/components/crafting/recipes.dm b/code/datums/components/crafting/recipes.dm
index ae175a8af4e..5a26c5ac75b 100644
--- a/code/datums/components/crafting/recipes.dm
+++ b/code/datums/components/crafting/recipes.dm
@@ -544,6 +544,32 @@
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
+/datum/crafting_recipe/trash_cannon
+ name = "Trash Cannon"
+ always_available = FALSE
+ tool_behaviors = list(TOOL_WELDER, TOOL_SCREWDRIVER)
+ result = /obj/structure/cannon/trash
+ reqs = list(
+ /obj/item/melee/skateboard/improvised = 1,
+ /obj/item/tank/internals/oxygen/red = 1,
+ /datum/reagent/drug/maint/tar = 15,
+ /obj/item/restraints/handcuffs/cable = 1,
+ /obj/item/storage/toolbox = 1,
+ )
+ category = CAT_WEAPONRY
+ subcategory = CAT_WEAPON
+
+/datum/crafting_recipe/trashball
+ name = "Trashball"
+ always_available = FALSE
+ result = /obj/item/stack/cannonball/trashball
+ reqs = list(
+ /obj/item/stack/sheet = 5,
+ /datum/reagent/consumable/space_cola = 10,
+ )
+ category = CAT_WEAPONRY
+ subcategory = CAT_AMMO
+
/datum/crafting_recipe/chainsaw
name = "Chainsaw"
result = /obj/item/chainsaw
diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm
index 48d4e4005f6..5e8976e58df 100644
--- a/code/game/objects/items/granters.dm
+++ b/code/game/objects/items/granters.dm
@@ -444,3 +444,18 @@
/obj/item/book/granter/crafting_recipe/pipegun_prime/recoil(mob/living/carbon/user)
to_chat(user, span_warning("The book turns to dust in your hands."))
qdel(src)
+
+/obj/item/book/granter/crafting_recipe/trash_cannon
+ name = "diary of a demoted engineer"
+ desc = "A lost journal. The engineer seems very deranged about their demotion."
+ crafting_recipe_types = list(
+ /datum/crafting_recipe/trash_cannon,
+ /datum/crafting_recipe/trashball,
+ )
+ icon_state = "book1"
+ oneuse = TRUE
+ remarks = list("\"I'll show them! I'll build a CANNON!\"", "\"Gunpowder is ideal, but i'll have to improvise...\"", "\"I savor the look on the CE's face when I BLOW down the walls to engineering!\"", "\"If the supermatter gets loose from my rampage, so be it!\"", "\"I'VE GONE COMPLETELY MENTAL!\"")
+
+/obj/item/book/granter/crafting_recipe/trash_cannon/recoil(mob/living/carbon/user)
+ to_chat(user, span_warning("The book turns to dust in your hands."))
+ qdel(src)
diff --git a/code/game/objects/structures/cannon.dm b/code/game/objects/structures/cannon.dm
deleted file mode 100644
index ce8b1807b82..00000000000
--- a/code/game/objects/structures/cannon.dm
+++ /dev/null
@@ -1,103 +0,0 @@
-/obj/structure/cannon
- name = "cannon"
- desc = "Holemaker Deluxe: A sporty model with a good stop power. Any cannon enthusiast should be expected to start here."
- density = TRUE
- anchored = TRUE
- icon_state = "falconet_patina"
- max_integrity = 300
- var/obj/item/stack/cannonball/loaded_cannonball = null
- var/charge_ignited = FALSE
- var/fire_delay = 15
- var/charge_size = 15
- var/fire_sound = 'sound/weapons/gun/general/cannon.ogg'
-
-/obj/structure/cannon/Initialize()
- . = ..()
- create_reagents(charge_size)
-
-/obj/structure/cannon/proc/fire()
- for(var/mob/shaken_mob in urange(10, src))
- if(shaken_mob.stat == CONSCIOUS)
- shake_camera(shaken_mob, 3, 1)
-
- playsound(src, fire_sound, 50, TRUE)
- if(loaded_cannonball)
- var/obj/projectile/fired_projectile = new loaded_cannonball.projectile_type(get_turf(src))
- QDEL_NULL(loaded_cannonball)
- fired_projectile.firer = src
- fired_projectile.fired_from = src
- fired_projectile.fire(dir2angle(dir))
- reagents.remove_all()
- charge_ignited = FALSE
-
-/obj/structure/cannon/attackby(obj/item/W, mob/user, params)
- if(charge_ignited)
- to_chat(user, span_danger("[src] is about to fire!"))
- return
- var/ignition_message = W.ignition_effect(src, user)
-
- if(istype(W, /obj/item/stack/cannonball))
- if(loaded_cannonball)
- to_chat(user, span_warning("[src] is already loaded!"))
- else
- var/obj/item/stack/cannonball/cannoneers_balls = W
- loaded_cannonball = new cannoneers_balls.type(src, 1)
- loaded_cannonball.copy_evidences(cannoneers_balls)
- to_chat(user, span_notice("You load a [cannoneers_balls.singular_name] into [src]."))
- cannoneers_balls.use(1, transfer = TRUE)
- return
-
- else if(ignition_message)
- if(!reagents.has_reagent(/datum/reagent/gunpowder,15))
- to_chat(user, span_warning("[src] needs at least 15u of gunpowder to fire!"))
- return
- visible_message(ignition_message)
- log_game("Cannon fired by [key_name(user)] in [AREACOORD(src)]")
- addtimer(CALLBACK(src, .proc/fire), fire_delay)
- charge_ignited = TRUE
- return
-
- else if(istype(W, /obj/item/reagent_containers))
- var/obj/item/reagent_containers/powder_keg = W
- if(!(powder_keg.reagent_flags & OPENCONTAINER))
- return ..()
- if(istype(powder_keg, /obj/item/reagent_containers/glass/rag))
- return ..()
-
- if(!powder_keg.reagents.total_volume)
- to_chat(user, span_warning("[powder_keg] is empty!"))
- return
- else if(!powder_keg.reagents.has_reagent(/datum/reagent/gunpowder, charge_size))
- to_chat(user, span_warning("[powder_keg] doesn't have at least 15u of gunpowder to fill [src]!"))
- return
- if(reagents.has_reagent(/datum/reagent/gunpowder, charge_size))
- to_chat(user, span_warning("[src] already contains a full charge of powder! It would be unwise to add more."))
- return
- powder_keg.reagents.trans_id_to(src, /datum/reagent/gunpowder, amount = charge_size)
- to_chat(user, span_notice("You load [src] with a charge of powder from [powder_keg]."))
- return
- if(W.tool_behaviour == TOOL_WRENCH)
- if(default_unfasten_wrench(user, W, time = 2 SECONDS))
- return
- ..()
-
-/obj/item/paper/crumpled/muddy/fluff/cannon_instructions
- name = "Mast of Cannon's Past's Cannon Instructions"
- desc = "A quickly written note detailing the basics of firing a cannon. Who wrote this?"
- info = @{"
-
-Ye don't know how to load cannon, and ye call yerself a fearsome pirate? I think ye be more alike a space sailor under the space monarchy's flag! Alas, everyone must learn how to blast holes in enemy ships. And thus:
-
-
HOW YE FIRES A CANNON:
-
-BE STEP ONE: LOAD THE LEAD BALL O' YE CHOICE!
-BE STEP TWO: LOAD 15U PIRATE STANDARD CHARGE O' GUNPOWDER!
-BE STEP THREE: LIGHT THE FUSE WITH SOMETHING, AND LET ER' RIP!
-
-
CANNONBALL TYPES:
-
-REGULAR CANNONBALL: A fine choice for killing landlubbers! Will take off any limb it hits, and most certainly down anyone hit in the chest! If they are not directly hit, they will be at least hurt by the shrapnel!
-EXPLOSIVE SHELLBALL: The most elegant in breaching (er killin', if you're good at aimin') tools, ye be packing this shell with many scuppering chemicals! Just make sure to not fire it when ye be close to target!
-MALFUNCTION SHOT: A very gentle "cannonball" dart at first glance, but make no mistake: This is their worst nightmare! Enjoy an easy boarding process while all their machines are broken and all their weapons unloaded from an EMP!
-THE BIGGEST ONE: A shellball, but much bigger. Ye won't be seein' much of these as they were discontinued for sinkin' the firer's ship as often as it sunk the scallywag's ship. Very big boom! If ye have one, ye have been warned!
- "}
diff --git a/code/game/objects/structures/cannons/cannon.dm b/code/game/objects/structures/cannons/cannon.dm
new file mode 100644
index 00000000000..395fb3b3147
--- /dev/null
+++ b/code/game/objects/structures/cannons/cannon.dm
@@ -0,0 +1,138 @@
+///how much projectile damage is lost when using a bad fuel
+#define BAD_FUEL_DAMAGE_TAX 20
+///extra chance it explodes upon firing
+#define BAD_FUEL_EXPLODE_PROBABILTY 10
+
+/obj/structure/cannon
+ name = "cannon"
+ desc = "Holemaker Deluxe: A sporty model with a good stop power. Any cannon enthusiast should be expected to start here."
+ density = TRUE
+ anchored = TRUE
+ icon_state = "falconet_patina"
+ max_integrity = 300
+ ///whether the cannon can be unwrenched from the ground.
+ var/anchorable_cannon = TRUE
+ var/obj/item/stack/cannonball/loaded_cannonball = null
+ var/charge_ignited = FALSE
+ var/fire_delay = 15
+ var/charge_size = 15
+ var/fire_sound = 'sound/weapons/gun/general/cannon.ogg'
+
+/obj/structure/cannon/Initialize()
+ . = ..()
+ create_reagents(charge_size)
+
+/obj/structure/cannon/examine(mob/user)
+ . = ..()
+ . += span_notice("[src] accepts gunpowder or welding fuel.")
+ . += span_warning("Using welding fuel will weaken the force of the projectile fired.")
+
+/obj/structure/cannon/proc/fire()
+ for(var/mob/shaken_mob in urange(10, src))
+ if(shaken_mob.stat == CONSCIOUS)
+ shake_camera(shaken_mob, 3, 1)
+
+ playsound(src, fire_sound, 50, TRUE)
+ flick(icon_state+"_fire", src)
+ if(loaded_cannonball)
+ var/obj/projectile/fired_projectile = new loaded_cannonball.projectile_type(get_turf(src))
+ if(reagents.has_reagent(/datum/reagent/fuel, charge_size))
+ fired_projectile.damage = max(2, fired_projectile.damage - BAD_FUEL_DAMAGE_TAX)
+ QDEL_NULL(loaded_cannonball)
+ fired_projectile.firer = src
+ fired_projectile.fired_from = src
+ fired_projectile.fire(dir2angle(dir))
+ reagents.remove_all()
+ charge_ignited = FALSE
+
+/obj/structure/cannon/attackby(obj/item/used_item, mob/user, params)
+ if(charge_ignited)
+ balloon_alert(user, "it's gonna fire!")
+ return
+ var/ignition_message = used_item.ignition_effect(src, user)
+
+ if(istype(used_item, /obj/item/stack/cannonball))
+ if(loaded_cannonball)
+ balloon_alert(user, "already loaded!")
+ else
+ var/obj/item/stack/cannonball/cannoneers_balls = used_item
+ loaded_cannonball = new cannoneers_balls.type(src, 1)
+ loaded_cannonball.copy_evidences(cannoneers_balls)
+ balloon_alert(user, "loaded a [cannoneers_balls.singular_name]")
+ cannoneers_balls.use(1, transfer = TRUE)
+ return
+
+ else if(ignition_message)
+ if(!reagents.has_reagent(/datum/reagent/gunpowder,charge_size) || !reagents.has_reagent(/datum/reagent/fuel,charge_size))
+ balloon_alert(user, "needs [reagents.maximum_volume]u of charge!")
+ return
+ visible_message(ignition_message)
+ log_game("Cannon fired by [key_name(user)] in [AREACOORD(src)]")
+ addtimer(CALLBACK(src, .proc/fire), fire_delay)
+ charge_ignited = TRUE
+ return
+
+ else if(istype(used_item, /obj/item/reagent_containers))
+ var/obj/item/reagent_containers/powder_keg = used_item
+ if(!(powder_keg.reagent_flags & OPENCONTAINER))
+ return ..()
+ if(istype(powder_keg, /obj/item/reagent_containers/glass/rag))
+ return ..()
+
+ if(!powder_keg.reagents.total_volume)
+ balloon_alert(user, "[powder_keg] is empty!")
+ return
+ if(reagents.total_volume == reagents.maximum_volume)
+ balloon_alert(user, "[src] is full!")
+ return
+ var/has_enough_gunpowder = powder_keg.reagents.has_reagent(/datum/reagent/gunpowder, charge_size)
+ var/has_enough_alt_fuel = powder_keg.reagents.has_reagent(/datum/reagent/fuel, charge_size)
+ if(!has_enough_gunpowder && !has_enough_alt_fuel)
+ balloon_alert(user, "[powder_keg] needs 15u of charge to load!")
+ to_chat(user, span_warning("[powder_keg] doesn't have at least 15u of gunpowder to fill [src]!"))
+ return
+ if(has_enough_gunpowder)
+ powder_keg.reagents.trans_id_to(src, /datum/reagent/gunpowder, amount = charge_size)
+ balloon_alert(user, "[src] loaded with gunpowder")
+ return
+ if(has_enough_alt_fuel)
+ powder_keg.reagents.trans_id_to(src, /datum/reagent/fuel, amount = charge_size)
+ balloon_alert(user, "[src] loaded with welding fuel")
+ return
+ if(anchorable_cannon && used_item.tool_behaviour == TOOL_WRENCH)
+ if(default_unfasten_wrench(user, used_item, time = 2 SECONDS))
+ return
+ ..()
+
+/obj/structure/cannon/trash
+ name = "trash cannon"
+ desc = "Okay, sure, you could call it a toolbox welded to an opened oxygen tank cabled to a skateboard, but it's a TRASH CANNON to us."
+ icon_state = "garbagegun"
+ anchored = FALSE
+ anchorable_cannon = FALSE
+ var/fires_before_deconstruction = 5
+
+/obj/structure/cannon/trash/fire()
+ var/explode_chance = 10
+ var/used_alt_fuel = reagents.has_reagent(/datum/reagent/fuel, charge_size)
+ if(used_alt_fuel)
+ explode_chance += BAD_FUEL_EXPLODE_PROBABILTY
+ . = ..()
+ fires_before_deconstruction--
+ if(used_alt_fuel)
+ fires_before_deconstruction--
+ if(prob(explode_chance))
+ visible_message(span_userdanger("[src] explodes!"))
+ explosion(src, heavy_impact_range = 1, light_impact_range = 5, flame_range = 5)
+ return
+ if(fires_before_deconstruction <= 0)
+ visible_message(span_warning("[src] falls apart from operation!"))
+ qdel(src)
+
+/obj/structure/cannon/trash/Destroy()
+ new /obj/item/stack/sheet/iron/five(src.loc)
+ new /obj/item/stack/rods(src.loc)
+ . = ..()
+
+#undef BAD_FUEL_DAMAGE_TAX
+#undef BAD_FUEL_EXPLODE_PROBABILTY
diff --git a/code/game/objects/structures/cannons/cannon_instructions.dm b/code/game/objects/structures/cannons/cannon_instructions.dm
new file mode 100644
index 00000000000..1ae484598d0
--- /dev/null
+++ b/code/game/objects/structures/cannons/cannon_instructions.dm
@@ -0,0 +1,20 @@
+/obj/item/paper/crumpled/muddy/fluff/cannon_instructions
+ name = "Mast of Cannon's Past's Cannon Instructions"
+ desc = "A quickly written note detailing the basics of firing a cannon. Who wrote this?"
+ info = @{"
+
+Ye don't know how to load cannon, and ye call yerself a fearsome pirate? I think ye be more alike a space sailor under the space monarchy's flag! Alas, everyone must learn how to blast holes in enemy ships. And thus:
+
+
HOW YE FIRES A CANNON:
+
+BE STEP ONE: LOAD THE LEAD BALL O' YE CHOICE!
+BE STEP TWO: LOAD 15U PIRATE STANDARD CHARGE O' GUNPOWDER!
+BE STEP THREE: LIGHT THE FUSE WITH SOMETHING, AND LET ER' RIP!
+
+
CANNONBALL TYPES:
+
+REGULAR CANNONBALL: A fine choice for killing landlubbers! Will take off any limb it hits, and most certainly down anyone hit in the chest! If they are not directly hit, they will be at least hurt by the shrapnel!
+EXPLOSIVE SHELLBALL: The most elegant in breaching (er killin', if you're good at aimin') tools, ye be packing this shell with many scuppering chemicals! Just make sure to not fire it when ye be close to target!
+MALFUNCTION SHOT: A very gentle "cannonball" dart at first glance, but make no mistake: This is their worst nightmare! Enjoy an easy boarding process while all their machines are broken and all their weapons unloaded from an EMP!
+THE BIGGEST ONE: A shellball, but much bigger. Ye won't be seein' much of these as they were discontinued for sinkin' the firer's ship as often as it sunk the scallywag's ship. Very big boom! If ye have one, ye have been warned!
+ "}
diff --git a/code/game/objects/items/stacks/cannonballs.dm b/code/game/objects/structures/cannons/cannonballs.dm
similarity index 83%
rename from code/game/objects/items/stacks/cannonballs.dm
rename to code/game/objects/structures/cannons/cannonballs.dm
index 4f66129932f..62a05a270aa 100644
--- a/code/game/objects/items/stacks/cannonballs.dm
+++ b/code/game/objects/structures/cannons/cannonballs.dm
@@ -56,3 +56,15 @@
/obj/item/stack/cannonball/the_big_one/five
amount = 5
+
+/obj/item/stack/cannonball/trashball
+ name = "trashballs"
+ singular_name = "trashball"
+ desc = "A clump of tightly packed garbage. It'll work as a cannonball, but it may be unhealthy to actually put this in a real cannon."
+ max_amount = 4
+ icon_state = "trashballs"
+ merge_type = /obj/item/stack/cannonball/trashball
+ projectile_type = /obj/projectile/bullet/cannonball/trashball
+
+/obj/item/stack/cannonball/trashball/four
+ amount = 4
diff --git a/code/modules/projectiles/projectile/bullets/cannon.dm b/code/modules/projectiles/projectile/bullets/cannonball.dm
similarity index 91%
rename from code/modules/projectiles/projectile/bullets/cannon.dm
rename to code/modules/projectiles/projectile/bullets/cannonball.dm
index b879e80bf97..9ee931e7f1f 100644
--- a/code/modules/projectiles/projectile/bullets/cannon.dm
+++ b/code/modules/projectiles/projectile/bullets/cannonball.dm
@@ -57,3 +57,8 @@
if(projectile_piercing == NONE)
explosion(target, devastation_range = GLOB.MAX_EX_DEVESTATION_RANGE, heavy_impact_range = GLOB.MAX_EX_HEAVY_RANGE, light_impact_range = GLOB.MAX_EX_LIGHT_RANGE, flash_range = GLOB.MAX_EX_FLASH_RANGE)
. = ..()
+
+/obj/projectile/bullet/cannonball/trashball
+ name = "trashball"
+ icon_state = "trashball"
+ damage = 90 //better than the biggest one but no explosion, so kinda just a worse normal cannonball
diff --git a/icons/obj/cannons.dmi b/icons/obj/cannons.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..f0e37c5310ac6df930f04db8881eeba4f3064d52
GIT binary patch
literal 2516
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