Skip to content

Commit

Permalink
Automatic weaponry, Syndicate Items and more! (#4181)
Browse files Browse the repository at this point in the history
* Draf of Big PR that adds Guns, weaponized lipstick, parrying and chaplain scythe.

* draf PR thingy

* Revert "Draf of Big PR that adds Guns, weaponized lipstick, parrying and chaplain scythe."

This reverts commit 0c040df.

* Reapply "Draf of Big PR that adds Guns, weaponized lipstick, parrying and chaplain scythe."

This reverts commit 2a164de.

* Revert "draf PR thingy"

This reverts commit c0bba93.

* Syndicate Presents... GUNS!!

* Syndicate presents... more weapons!!

* updated the prices cause I forgot to do that earlier

* forgot those sprites, tee hee~

* What the fuck is a "emergency_clown"?!

Why? the PR was done and then this came along?! god damnit...

* "MERGE CONFLICT" Get meow conflicted

I hate when merge conflict happens, and I will add a new cat each fucking merge conflict and that I promise.

* get meow conflicted part 2

* dumb

* fixes cat runtime, this should work now.

* fuck this game

* sprite fix for rebar crossbow

* lipstickfix

---------

Co-authored-by: ThePooba <[email protected]>
  • Loading branch information
Syndicat-Meow and ThePooba authored Dec 13, 2024
1 parent d85f481 commit 6a54ec3
Show file tree
Hide file tree
Showing 55 changed files with 709 additions and 19 deletions.
2 changes: 2 additions & 0 deletions code/__DEFINES/mobfactions.dm
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
#define FACTION_CLOWN "clowns"
/// Headslugs
#define FACTION_CREATURE "creature"
/// Cats
#define FACTION_CAT "cat"
/// Faithless and shadowpeople
#define FACTION_FAITHLESS "faithless"
/// Gnomes
Expand Down
6 changes: 6 additions & 0 deletions code/__DEFINES/projectiles.dm
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,12 @@
#define CALIBER_ARROW "arrow"
/// The caliber used by the harpoon gun.
#define CALIBER_HARPOON "harpoon"
/// The caliber used by the rebar crossbow.
#define CALIBER_REBAR "sharpened rod"
/// The caliber used by the rebar crossbow when forced to hold 2 rods.
#define CALIBER_REBAR_FORCED "sharpened rod"
/// The caliber used by the syndicate rebar crossbow.
#define CALIBER_REBAR_SYNDIE "sharpened rod"
/// The caliber used by the meat hook.
#define CALIBER_HOOK "hook"
/// The caliber used by the changeling tentacle mutation.
Expand Down
2 changes: 1 addition & 1 deletion code/__DEFINES/traits/declarations.dm
Original file line number Diff line number Diff line change
Expand Up @@ -437,7 +437,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
/// Blowing kisses actually does damage to the victim
#define TRAIT_KISS_OF_DEATH "kiss_of_death"
/// Syndie kisses can apply burn damage
/* #define TRAIT_SYNDIE_KISS "syndie_kiss" */
#define TRAIT_SYNDIE_KISS "syndie_kiss"
/// Used to activate french kissing
#define TRAIT_GARLIC_BREATH "kiss_of_garlic_death"
/// Addictions don't tick down, basically they're permanently addicted
Expand Down
1 change: 1 addition & 0 deletions code/_globalvars/traits/_traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_JAILBIRD" = TRAIT_JAILBIRD,
"TRAIT_JOLLY" = TRAIT_JOLLY,
"TRAIT_KISS_OF_DEATH" = TRAIT_KISS_OF_DEATH,
"TRAIT_SYNDIE_KISS" = TRAIT_SYNDIE_KISS,
"TRAIT_KNOCKEDOUT" = TRAIT_KNOCKEDOUT,
"TRAIT_KNOW_ENGI_WIRES" = TRAIT_KNOW_ENGI_WIRES,
"TRAIT_KNOW_ROBO_WIRES" = TRAIT_KNOW_ROBO_WIRES,
Expand Down
11 changes: 11 additions & 0 deletions code/datums/components/crafting/equipment.dm
Original file line number Diff line number Diff line change
Expand Up @@ -198,3 +198,14 @@
tool_paths = list(/obj/item/bikehorn)
time = 40 SECONDS
category = CAT_EQUIPMENT

/datum/crafting_recipe/rebar_quiver
name = "Rebar Storage Quiver"
result = /obj/item/storage/bag/rebar_quiver
time = 10
reqs = list(
/obj/item/tank/internals/oxygen = 1,
/obj/item/stack/cable_coil = 15,
)
category = CAT_EQUIPMENT
tool_behaviors = list(TOOL_WELDER, TOOL_WIRECUTTER)
27 changes: 27 additions & 0 deletions code/datums/components/crafting/ranged_weapon.dm
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,33 @@
time = 5 SECONDS
category = CAT_WEAPON_RANGED

/datum/crafting_recipe/rebarxbow
name = "Heated Rebar Crossbow"
result = /obj/item/gun/ballistic/rifle/rebarxbow
reqs = list(
/obj/item/stack/rods = 6,
/obj/item/stack/cable_coil = 12,
/obj/item/inducer = 1,
)
tool_behaviors = list(TOOL_WELDER)
time = 5 SECONDS
category = CAT_WEAPON_RANGED

/datum/crafting_recipe/rebarxbowforced
name = "Forced Rebar Crossbow"
desc = "A much quicker reload... for a chance of shooting yourself when you fire it."
result = /obj/item/gun/ballistic/rifle/rebarxbow/forced
reqs = list(
/obj/item/gun/ballistic/rifle/rebarxbow = 1,
)
blacklist = list(
/obj/item/gun/ballistic/rifle/rebarxbow/forced,
/obj/item/gun/ballistic/rifle/rebarxbow/syndie,
)
tool_behaviors = list(TOOL_CROWBAR)
time = 1 SECONDS
category = CAT_WEAPON_RANGED

/datum/crafting_recipe/pipegun_prime
name = "Regal Pipegun"
always_available = FALSE
Expand Down
30 changes: 30 additions & 0 deletions code/datums/components/crafting/weapon_ammo.dm
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,36 @@
time = 0.5 SECONDS
category = CAT_WEAPON_AMMO

/datum/crafting_recipe/paperball
name = "Paper Ball"
result = /obj/item/ammo_casing/rebar/paperball
reqs = list(
/obj/item/paper = 1,
)
time = 0.1 SECONDS
category = CAT_WEAPON_AMMO

/datum/crafting_recipe/rebarsyndie
name = "jagged iron rod"
always_available = FALSE
result = /obj/item/ammo_casing/rebar/syndie
reqs = list(
/obj/item/stack/rods = 1,
)
tool_behaviors = list(TOOL_WIRECUTTER)
time = 0.5 SECONDS
time = 0.1 SECONDS
category = CAT_WEAPON_AMMO

/datum/crafting_recipe/healium_bolt
name = "healium crystal crossbow bolt"
result = /obj/item/ammo_casing/rebar/healium
reqs = list(
/obj/item/grenade/gas_crystal/healium_crystal = 1
)
time = 0.1 SECONDS
category = CAT_WEAPON_AMMO

/datum/crafting_recipe/pulseslug
name = "Pulse Slug Shell"
result = /obj/item/ammo_casing/shotgun/pulseslug
Expand Down
19 changes: 12 additions & 7 deletions code/datums/components/fullauto.dm
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,12 @@
var/turf/target_loc //For dealing with locking on targets due to BYOND engine limitations (the mouse input only happening when mouse moves).
var/autofire_stat = AUTOFIRE_STAT_IDLE
var/mouse_parameters
var/autofire_shot_delay = 0.3 SECONDS //Time between individual shots.
var/mouse_status = AUTOFIRE_MOUSEUP //This seems hacky but there can be two MouseDown() without a MouseUp() in between if the user holds click and uses alt+tab, printscreen or similar.
/// Time between individual shots.
var/autofire_shot_delay = 0.3 SECONDS
/// This seems hacky but there can be two MouseDown() without a MouseUp() in between if the user holds click and uses alt+tab, printscreen or similar.
var/mouse_status = AUTOFIRE_MOUSEUP
/// Should dual wielding be allowed?
var/allow_akimbo

///windup autofire vars
///Whether the delay between shots increases over time, simulating a spooling weapon
Expand All @@ -26,14 +30,15 @@
var/timerid
COOLDOWN_DECLARE(next_shot_cd)

/datum/component/automatic_fire/Initialize(autofire_shot_delay, windup_autofire, windup_autofire_reduction_multiplier, windup_autofire_cap, windup_spindown)
/datum/component/automatic_fire/Initialize(autofire_shot_delay, windup_autofire, windup_autofire_reduction_multiplier, windup_autofire_cap, windup_spindown, allow_akimbo = TRUE)
. = ..()
if(!isgun(parent))
return COMPONENT_INCOMPATIBLE
var/obj/item/gun = parent
RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(wake_up))
if(autofire_shot_delay)
src.autofire_shot_delay = autofire_shot_delay
src.allow_akimbo = allow_akimbo
if(windup_autofire)
src.windup_autofire = windup_autofire
src.windup_autofire_reduction_multiplier = windup_autofire_reduction_multiplier
Expand Down Expand Up @@ -291,21 +296,21 @@
return COMPONENT_AUTOFIRE_ONMOUSEDOWN_BYPASS


/obj/item/gun/proc/do_autofire(datum/source, atom/target, mob/living/shooter, params)
/obj/item/gun/proc/do_autofire(datum/source, atom/target, mob/living/shooter, allow_akimbo, params)
SIGNAL_HANDLER
if(semicd || shooter.incapacitated())
return NONE
if(!can_shoot())
shoot_with_empty_chamber(shooter)
return NONE
INVOKE_ASYNC(src, PROC_REF(do_autofire_shot), source, target, shooter, params)
INVOKE_ASYNC(src, PROC_REF(do_autofire_shot), source, target, shooter, allow_akimbo, params)
return COMPONENT_AUTOFIRE_SHOT_SUCCESS //All is well, we can continue shooting.


/obj/item/gun/proc/do_autofire_shot(datum/source, atom/target, mob/living/shooter, params)
/obj/item/gun/proc/do_autofire_shot(datum/source, atom/target, mob/living/shooter, allow_akimbo, params)
var/obj/item/gun/akimbo_gun = shooter.get_inactive_held_item()
var/bonus_spread = 0
if(istype(akimbo_gun) && weapon_weight < WEAPON_MEDIUM)
if(istype(akimbo_gun) && weapon_weight < WEAPON_MEDIUM && allow_akimbo)
if(akimbo_gun.weapon_weight < WEAPON_MEDIUM && akimbo_gun.can_trigger_gun(shooter))
bonus_spread = dual_wield_spread
addtimer(CALLBACK(akimbo_gun, TYPE_PROC_REF(/obj/item/gun, process_fire), target, shooter, TRUE, params, null, bonus_spread), 1)
Expand Down
11 changes: 9 additions & 2 deletions code/game/objects/items/cosmetics.dm
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@
update_appearance(UPDATE_ICON)

/obj/item/lipstick/update_icon_state()
icon_state = "lipstick[open ? "_uncap" : null]"
inhand_icon_state = "lipstick[open ? "open" : null]"
icon_state = "[initial(icon_state)][open ? "_uncap" : null]"
inhand_icon_state = "[initial(icon_state)][open ? "open" : null]"
return ..()

/obj/item/lipstick/update_overlays()
Expand Down Expand Up @@ -65,6 +65,13 @@
desc = "An incredibly potent tube of lipstick made from the venom of the dreaded Yellow Spotted Space Lizard, as deadly as it is chic. Try not to smear it!"
lipstick_trait = TRAIT_KISS_OF_DEATH

/obj/item/lipstick/syndie
name = "syndie lipstick"
desc = "Syndicate branded lipstick with a killer dose of kisses. Observe safety regulations!"
icon_state = "slipstick"
lipstick_color = COLOR_SYNDIE_RED
lipstick_trait = TRAIT_SYNDIE_KISS

/obj/item/lipstick/random
name = "lipstick"
icon_state = "random_lipstick"
Expand Down
13 changes: 13 additions & 0 deletions code/game/objects/items/granters/crafting/rebarxbowsyndie.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
/obj/item/book/granter/crafting_recipe/dusting/rebarxbowsyndie_ammo
name = "SYNDICATE REBAR CROSSBOW AMMO CRAFTING MANUAL"
desc = "This book will self destruct upon being read a second time."
crafting_recipe_types = list(
/datum/crafting_recipe/rebarsyndie
)
uses = 1
remarks = list(
"AIM FOR THE LEGS TO CRIPPLE YOUR FOES",
"USE A ROD AND WIRECUTTERS TO MAKE BETTER AMMO",
"BE AWARE OF THE SCOPE'S BLIND SPOTS",
"READ THIS BOOK AGAIN TO DUST IT.",
)
12 changes: 12 additions & 0 deletions code/game/objects/items/grenades/spawnergrenade.dm
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,15 @@
inhand_icon_state = null
spawner_type = /mob/living/basic/clown/mutant
deliveryamt = 5

/obj/item/grenade/spawnergrenade/cat
name = "Catnade"
desc = "You can hear faint meowing and the sounds of claws on metal coming from within."
spawner_type = list(/mob/living/simple_animal/hostile/feral, /mob/living/simple_animal/hostile/feraltabby)
deliveryamt = 5

/obj/item/grenade/spawnergrenade/cat/syndicate
name = "Syndicatnade"
desc = "You can hear aggressive meowing and the sounds of sharpened claws on metal coming from within."
spawner_type = /mob/living/simple_animal/hostile/syndicat
deliveryamt = 3
25 changes: 23 additions & 2 deletions code/game/objects/items/hand_items.dm
Original file line number Diff line number Diff line change
Expand Up @@ -548,6 +548,12 @@
color = COLOR_BLACK
kiss_type = /obj/projectile/kiss/death

/obj/item/hand_item/kisser/syndie
name = "syndie kiss"
desc = "oooooo you like syndicate ur a syndiekisser"
color = COLOR_SYNDIE_RED
kiss_type = /obj/projectile/kiss/syndie

/obj/projectile/kiss
name = "kiss"
icon = 'icons/mob/simple/animal.dmi'
Expand All @@ -559,13 +565,17 @@
damage_type = BRUTE
damage = 0 // love can't actually hurt you
armour_penetration = 100 // but if it could, it would cut through even the thickest plate
var/silent_blown = FALSE

/obj/projectile/kiss/fire(angle, atom/direct_target)
if(firer)
if(firer && !silent_blown)
name = "[name] blown by [firer]"

return ..()

/obj/projectile/kiss/Impact(atom/A)
def_zone = BODY_ZONE_HEAD // let's keep it PG, people

if(damage > 0 || !isliving(A)) // if we do damage or we hit a nonliving thing, we don't have to worry about a harmless hit because we can't wrongly do damage anyway
return ..()

Expand Down Expand Up @@ -619,7 +629,6 @@
living_target.visible_message("<b>[living_target]</b> [other_msg]", span_userdanger("Whoa! [self_msg]"))

/obj/projectile/kiss/on_hit(atom/target, blocked, pierce_hit)
def_zone = BODY_ZONE_HEAD // let's keep it PG, people
. = ..()
if(isliving(target))
var/mob/living/living_target = target
Expand All @@ -641,6 +650,18 @@
var/obj/item/organ/internal/heart/dont_go_breakin_my_heart = heartbreakee.get_organ_slot(ORGAN_SLOT_HEART)
dont_go_breakin_my_heart.apply_organ_damage(999)

// Based on energy gun characteristics
/obj/projectile/kiss/syndie
name = "syndie kiss"
color = COLOR_SYNDIE_RED
impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser
damage_type = BURN
armor_flag = LASER
armour_penetration = 0
damage = 25
wound_bonus = -20
bare_wound_bonus = 40
silent_blown = TRUE

/obj/projectile/kiss/french
name = "french kiss (is that a hint of garlic?)"
Expand Down
1 change: 1 addition & 0 deletions code/game/objects/items/stacks/rods.dm
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \
new/datum/stack_recipe("catwalk floor tile", /obj/item/stack/tile/catwalk_tile, 1, 4, 20, category = CAT_TILES), \
new/datum/stack_recipe("stairs frame", /obj/structure/stairs_frame, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \
new/datum/stack_recipe("white cane", /obj/item/cane/white, 3, time = 1 SECONDS, one_per_turf = FALSE, category = CAT_TOOLS), \
new/datum/stack_recipe("sharpened iron rod", /obj/item/ammo_casing/rebar, 1, time = 0.2 SECONDS, one_per_turf = FALSE, category = CAT_WEAPON_AMMO), \
))

/obj/item/stack/rods
Expand Down
9 changes: 9 additions & 0 deletions code/game/objects/items/stacks/sheets/mineral.dm
Original file line number Diff line number Diff line change
Expand Up @@ -489,6 +489,7 @@ GLOBAL_LIST_INIT(metalhydrogen_recipes, list(
new /datum/stack_recipe("ancient armor", /obj/item/clothing/suit/armor/elder_atmosian, req_amount = 5, res_amount = 1, check_density = FALSE, category = CAT_CLOTHING),
new /datum/stack_recipe("ancient helmet", /obj/item/clothing/head/helmet/elder_atmosian, req_amount = 3, res_amount = 1, check_density = FALSE, category = CAT_CLOTHING),
new /datum/stack_recipe("metallic hydrogen axe", /obj/item/fireaxe/metal_h2_axe, req_amount = 15, res_amount = 1, check_density = FALSE, category = CAT_WEAPON_MELEE),
new /datum/stack_recipe("metallic hydrogen bolts", /obj/item/ammo_casing/rebar/hydrogen, req_amount = 1, res_amount = 1, check_density = FALSE, category = CAT_WEAPON_AMMO),
))

/obj/item/stack/sheet/mineral/metal_hydrogen
Expand All @@ -507,6 +508,10 @@ GLOBAL_LIST_INIT(metalhydrogen_recipes, list(
. = ..()
. += GLOB.metalhydrogen_recipes

GLOBAL_LIST_INIT(zaukerite_recipes, list(
new /datum/stack_recipe("zaukerite shard", /obj/item/ammo_casing/rebar/zaukerite, req_amount=1, res_amount=1, category = CAT_WEAPON_AMMO),
))

/obj/item/stack/sheet/mineral/zaukerite
name = "zaukerite"
icon_state = "zaukerite"
Expand All @@ -517,3 +522,7 @@ GLOBAL_LIST_INIT(metalhydrogen_recipes, list(
mats_per_unit = list(/datum/material/zaukerite = SHEET_MATERIAL_AMOUNT)
merge_type = /obj/item/stack/sheet/mineral/zaukerite
material_type = /datum/material/zaukerite

/obj/item/stack/sheet/mineral/zaukerite/get_main_recipes()
. = ..()
. += GLOB.zaukerite_recipes
24 changes: 24 additions & 0 deletions code/game/objects/items/storage/bags.dm
Original file line number Diff line number Diff line change
Expand Up @@ -573,4 +573,28 @@
for(var/i in 1 to 40)
new /obj/item/ammo_casing/caseless/harpoon(src)

/obj/item/storage/bag/rebar_quiver
name = "Rebar Storage Quiver"
icon = 'icons/obj/weapons/guns/bows/quivers.dmi'
icon_state = "rebar_quiver"
worn_icon_state = "rebar_quiver"
inhand_icon_state = "rebar_quiver"
desc = "A oxygen tank cut in half, used for holding sharpened rods for the rebar crossbow."
slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_SUITSTORE
resistance_flags = FLAMMABLE

/obj/item/storage/bag/rebar_quiver/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_TINY
atom_storage.max_slots = 10
atom_storage.max_total_storage = 15
atom_storage.set_holdable(list(
/obj/item/ammo_casing/rebar,
/obj/item/ammo_casing/rebar/syndie,
/obj/item/ammo_casing/rebar/healium,
/obj/item/ammo_casing/rebar/hydrogen,
/obj/item/ammo_casing/rebar/zaukerite,
/obj/item/ammo_casing/rebar/paperball,
))

#undef ORE_BAG_BALOON_COOLDOWN
8 changes: 8 additions & 0 deletions code/game/objects/items/storage/uplink_kits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,14 @@
icon_state = "syndiebox"
illustration = "writing_syndie"

/obj/item/storage/box/syndie_kit/rebarxbowsyndie
name = "Boxed Rebar Crossbow"
desc = "A scoped weapon with low armor penetration, but devestating against flesh. Features instruction manual for making specialty ammo."

/obj/item/storage/box/syndie_kit/rebarxbowsyndie/PopulateContents()
new /obj/item/book/granter/crafting_recipe/dusting/rebarxbowsyndie_ammo(src)
new /obj/item/gun/ballistic/rifle/rebarxbow/syndie(src)

/obj/item/storage/box/syndie_kit/origami_bundle
name = "origami kit"
desc = "A box full of a number of rather masterfully engineered paper planes and a manual on \"The Art of Origami\"."
Expand Down
1 change: 0 additions & 1 deletion code/game/objects/items/storage/wallets.dm
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
/obj/item/gbp_punchcard,
/obj/item/implanter,
/obj/item/lighter,
/obj/item/lipstick,
/obj/item/match,
/obj/item/paper,
/obj/item/pen,
Expand Down
Loading

0 comments on commit 6a54ec3

Please sign in to comment.