Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Automatic weaponry, Syndicate Items and more! #4181

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
0c040df
Draf of Big PR that adds Guns, weaponized lipstick, parrying and chap…
Syndicat-Meow Nov 8, 2024
c0bba93
draf PR thingy
Syndicat-Meow Nov 8, 2024
2a164de
Revert "Draf of Big PR that adds Guns, weaponized lipstick, parrying …
Syndicat-Meow Nov 9, 2024
2858654
Reapply "Draf of Big PR that adds Guns, weaponized lipstick, parrying…
Syndicat-Meow Nov 9, 2024
c2e6dc6
Revert "draf PR thingy"
Syndicat-Meow Nov 9, 2024
716fd8e
Syndicate Presents... GUNS!!
Syndicat-Meow Nov 9, 2024
8d4f888
Syndicate presents... more weapons!!
Syndicat-Meow Nov 9, 2024
c448889
updated the prices cause I forgot to do that earlier
Syndicat-Meow Nov 9, 2024
7a60643
forgot those sprites, tee hee~
Syndicat-Meow Nov 9, 2024
f9bb04c
What the fuck is a "emergency_clown"?!
Syndicat-Meow Nov 13, 2024
49056f2
Merge remote-tracking branch 'upstream/master' into Syndicate_present…
Syndicat-Meow Nov 13, 2024
5aa8244
"MERGE CONFLICT" Get meow conflicted
Syndicat-Meow Nov 30, 2024
1a944d1
Merge remote-tracking branch 'upstream/master' into Syndicate_present…
Syndicat-Meow Nov 30, 2024
34302e6
get meow conflicted part 2
Syndicat-Meow Nov 30, 2024
46f14fd
dumb
ThePooba Nov 30, 2024
0698f44
fixes cat runtime, this should work now.
Syndicat-Meow Nov 30, 2024
00dacde
FINAL MEOWDOWN!
Syndicat-Meow Nov 30, 2024
e7e2889
fuck this game
ThePooba Dec 1, 2024
40d8175
Merge branch 'Syndicate_presents_New_weapons!!' of https://github.com…
ThePooba Dec 1, 2024
3254d8a
sprite fix for rebar crossbow
Syndicat-Meow Dec 11, 2024
e02defb
lipstickfix
ThePooba Dec 13, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 @@ -290,6 +290,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 @@ -524,6 +524,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 @@ -535,13 +541,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 @@ -595,7 +605,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 @@ -617,6 +626,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
Loading