diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 4d913e38f1..fb0e659330 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -320,7 +320,7 @@ #define COMSIG_PEN_ROTATED "pen_rotated" //called after rotation in /obj/item/pen/attack_self(): (rotation, mob/living/carbon/user) // /obj/item/projectile signals (sent to the firer) -#define COMSIG_PROJECTILE_SELF_ON_HIT "projectile_self_on_hit" // from base of /obj/projectile/proc/on_hit(): (atom/movable/firer, atom/target, Angle) +#define COMSIG_PROJECTILE_SELF_ON_HIT "projectile_self_on_hit" // from base of /obj/item/projectile/proc/on_hit(): (atom/movable/firer, atom/target, Angle) #define COMSIG_PROJECTILE_ON_HIT "projectile_on_hit" // from base of /obj/item/projectile/proc/on_hit(): (atom/movable/firer, atom/target, Angle) #define COMSIG_PROJECTILE_BEFORE_FIRE "projectile_before_fire" // from base of /obj/item/projectile/proc/fire(): (obj/item/projectile, atom/original_target) #define COMSIG_PROJECTILE_RANGE_OUT "projectile_range_out" // sent to targets during the process_hit proc of projectiles diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 5466e9267b..4b488030a0 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -181,7 +181,7 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( #define islandmine(A) (istype(A, /obj/effect/mine)) -#define isammocasing(A) (istype(A, /obj/i +#define isammocasing(A) (istype(A, /obj/item/ammo_casing)) #define isidcard(I) (istype(I, /obj/item/card/id)) diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index 1b3a2df782..3c28e50ea3 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -93,7 +93,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_PASSTABLE" = TRAIT_PASSTABLE, "TRAIT_GIANT" = TRAIT_GIANT, "TRAIT_DWARF" = TRAIT_DWARF, - "TRAIT_SILENT_FOOTSTEPS" = TRAIT_SILENT_FOOTSTEPS, "TRAIT_NICE_SHOT" = TRAIT_NICE_SHOT, "TRAIT_COMBAT_MODE_LOCKED" = TRAIT_COMBAT_MODE_LOCKED, "TRAIT_SPRINT_LOCKED" = TRAIT_SPRINT_LOCKED, diff --git a/code/datums/components/embedded.dm b/code/datums/components/embedded.dm index d0159cd4a4..2324b36033 100644 --- a/code/datums/components/embedded.dm +++ b/code/datums/components/embedded.dm @@ -269,7 +269,7 @@ var/damage = weapon.w_class * pain_mult var/chance = pain_chance - if(pain_stam_pct && victim.stam_paralyzed) //if it's a less-lethal embed, give them a break if they're already stamcritted + if(pain_stam_pct && IS_STAMCRIT(victim)) //if it's a less-lethal embed, give them a break if they're already stamcritted chance *= 0.3 damage *= 0.7 diff --git a/code/datums/components/pellet_cloud.dm b/code/datums/components/pellet_cloud.dm index 2fc4fd929c..938d9f5f56 100644 --- a/code/datums/components/pellet_cloud.dm +++ b/code/datums/components/pellet_cloud.dm @@ -187,7 +187,7 @@ break ///One of our pellets hit something, record what it was and check if we're done (terminated == num_pellets) -/datum/component/pellet_cloud/proc/pellet_hit(obj/projectile/P, atom/movable/firer, atom/target, Angle) +/datum/component/pellet_cloud/proc/pellet_hit(obj/item/projectile/P, atom/movable/firer, atom/target, Angle) pellets -= P terminated++ hits++ @@ -199,7 +199,7 @@ finalize() ///One of our pellets disappeared due to hitting their max range (or just somehow got qdel'd), remove it from our list and check if we're done (terminated == num_pellets) -/datum/component/pellet_cloud/proc/pellet_range(obj/projectile/P) +/datum/component/pellet_cloud/proc/pellet_range(obj/item/projectile/P) pellets -= P terminated++ UnregisterSignal(P, list(COMSIG_PARENT_QDELETING, COMSIG_PROJECTILE_RANGE_OUT, COMSIG_PROJECTILE_SELF_ON_HIT)) @@ -208,7 +208,7 @@ /// Minor convenience function for creating each shrapnel piece with circle explosions, mostly stolen from the MIRV component /datum/component/pellet_cloud/proc/pew(atom/target, spread=0) - var/obj/projectile/P = new projectile_type(get_turf(parent)) + var/obj/item/projectile/P = new projectile_type(get_turf(parent)) //Shooting Code: P.spread = spread @@ -225,7 +225,7 @@ ///All of our pellets are accounted for, time to go target by target and tell them how many things they got hit by. /datum/component/pellet_cloud/proc/finalize() - var/obj/projectile/P = projectile_type + var/obj/item/projectile/P = projectile_type var/proj_name = initial(P.name) for(var/atom/target in targets_hit) @@ -238,10 +238,6 @@ target.visible_message("[target] is hit by a [proj_name]!", null, null, COMBAT_MESSAGE_RANGE, target) to_chat(target, "You're hit by a [proj_name]!") - for(var/M in purple_hearts) - var/mob/living/martyr = M - if(martyr.stat == DEAD && martyr.client) - martyr.client.give_award(/datum/award/achievement/misc/lookoutsir, martyr) UnregisterSignal(parent, COMSIG_PARENT_PREQDELETED) if(queued_delete) qdel(parent) diff --git a/code/datums/elements/embed.dm b/code/datums/elements/embed.dm index fd74cc0e7c..0bfeafb4be 100644 --- a/code/datums/elements/embed.dm +++ b/code/datums/elements/embed.dm @@ -168,7 +168,7 @@ * If we hit a valid target (carbon or closed turf), we create the shrapnel_type object and immediately call tryEmbed() on it, targeting what we impacted. That will lead * it to call tryForceEmbed() on its own embed element (it's out of our hands here, our projectile is done), where it will run through all the checks it needs to. */ -/datum/element/embed/proc/checkEmbedProjectile(obj/projectile/P, atom/movable/firer, atom/hit) +/datum/element/embed/proc/checkEmbedProjectile(obj/item/projectile/P, atom/movable/firer, atom/hit) if(!iscarbon(hit) && !isclosedturf(hit)) Detach(P) return // we don't care diff --git a/code/game/gamemodes/gangs/gang_items.dm b/code/game/gamemodes/gangs/gang_items.dm index d3ccb5a355..7d6ecd00f6 100644 --- a/code/game/gamemodes/gangs/gang_items.dm +++ b/code/game/gamemodes/gangs/gang_items.dm @@ -288,7 +288,7 @@ datum/gang_item/clothing/shades //Addition: Why not have cool shades on a gang m name = "Fragmentation Grenade" id = "frag nade" cost = 5 - item_path = /obj/item/grenade/syndieminibomb/concussion/frag + item_path = /obj/item/grenade/frag /datum/gang_item/equipment/implant_breaker name = "Implant Breaker" diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index cb0e9ee356..1ee8b1e224 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -53,7 +53,7 @@ /obj/effect/mine/shrapnel name = "shrapnel mine" - var/shrapnel_type = /obj/projectile/bullet/shrapnel + var/shrapnel_type = /obj/item/projectile/bullet/shrapnel var/shrapnel_magnitude = 3 /obj/effect/mine/shrapnel/mineEffect(mob/victim) @@ -61,7 +61,7 @@ /obj/effect/mine/shrapnel/sting name = "stinger mine" - shrapnel_type = /obj/projectile/bullet/pellet/stingball + shrapnel_type = /obj/item/projectile/bullet/pellet/stingball /obj/effect/mine/kickmine name = "kick mine" diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 4982da4520..7a1976c40a 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -107,7 +107,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb mouse_drag_pointer = MOUSE_ACTIVE_POINTER //the icon to indicate this object is being dragged - var/datum/embedding_behavior/embedding + var/list/embedding = NONE var/flags_cover = 0 //for flags such as GLASSESCOVERSEYES var/heat = 0 diff --git a/code/game/objects/items/grenades/flashbang.dm b/code/game/objects/items/grenades/flashbang.dm index 19ac820841..2965f98a05 100644 --- a/code/game/objects/items/grenades/flashbang.dm +++ b/code/game/objects/items/grenades/flashbang.dm @@ -72,7 +72,7 @@ - shrapnel_type = /obj/projectile/bullet/pellet/stingball + shrapnel_type = /obj/item/projectile/bullet/pellet/stingball @@ -96,7 +96,7 @@ - shrapnel_type = /obj/projectile/bullet/pellet/stingball/mega + shrapnel_type = /obj/item/projectile/bullet/pellet/stingball/mega @@ -212,7 +212,7 @@ lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' var/rots_per_mag = 3 /// how many times we need to "rotate" the charge in hand per extra tile of magnitude - shrapnel_type = /obj/projectile/bullet/shrapnel + shrapnel_type = /obj/item/projectile/bullet/shrapnel var/rots = 1 /// how many times we've "rotated" the charge /obj/item/grenade/primer/attack_self(mob/user) @@ -233,4 +233,4 @@ lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' rots_per_mag = 2 - shrapnel_type = /obj/projectile/bullet/pellet/stingball + shrapnel_type = /obj/item/projectile/bullet/pellet/stingball diff --git a/code/game/objects/items/grenades/grenade.dm b/code/game/objects/items/grenades/grenade.dm index a2833c77ba..bb99bf3d6e 100644 --- a/code/game/objects/items/grenades/grenade.dm +++ b/code/game/objects/items/grenades/grenade.dm @@ -41,7 +41,7 @@ shrapnel_initialized = TRUE AddComponent(/datum/component/pellet_cloud, projectile_type=shrapnel_type, magnitude=shrapnel_radius) playsound(src, 'sound/items/eatfood.ogg', 50, 1) - SEND_SIGNAL(src, COMSIG_GRENADE_ARMED, det_time, delayoverride) + SEND_SIGNAL(src, COMSIG_GRENADE_ARMED, det_time) preprime(user, det_time) user.transferItemToLoc(src, user, TRUE)//>eat a grenade set to 5 seconds >rush captain sleep(det_time)//so you dont die instantly diff --git a/code/game/objects/items/grenades/syndieminibomb.dm b/code/game/objects/items/grenades/syndieminibomb.dm index f579120246..ae2877dcaf 100644 --- a/code/game/objects/items/grenades/syndieminibomb.dm +++ b/code/game/objects/items/grenades/syndieminibomb.dm @@ -27,7 +27,7 @@ name = "frag grenade" desc = "An anti-personnel fragmentation grenade, this weapon excels at killing soft targets by shredding them with metal shrapnel." icon_state = "frag" - shrapnel_type = /obj/projectile/bullet/shrapnel + shrapnel_type = /obj/item/projectile/bullet/shrapnel shrapnel_radius = 4 ex_heavy = 1 ex_light = 3 @@ -36,7 +36,7 @@ /obj/item/grenade/frag/mega name = "FRAG grenade" desc = "An anti-everything fragmentation grenade, this weapon excels at killing anything any everything by shredding them with metal shrapnel." - shrapnel_type = /obj/projectile/bullet/shrapnel/mega + shrapnel_type = /obj/item/projectile/bullet/shrapnel/mega shrapnel_radius = 12 /obj/item/grenade/frag/prime() diff --git a/code/game/objects/items/shrapnel.dm b/code/game/objects/items/shrapnel.dm index cd3436846e..d3ffe62af8 100644 --- a/code/game/objects/items/shrapnel.dm +++ b/code/game/objects/items/shrapnel.dm @@ -26,7 +26,7 @@ name = "\improper .38 DumDum bullet" embedding = list(embed_chance=70, fall_chance=7, jostle_chance=7, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.4, pain_mult=5, jostle_pain_mult=6, rip_time=10, embed_chance_turf_mod=-100) -/obj/projectile/bullet/shrapnel +/obj/item/projectile/bullet/shrapnel name = "flying shrapnel shard" damage = 9 range = 10 @@ -38,7 +38,7 @@ ricochet_incidence_leeway = 60 hit_stunned_targets = TRUE -/obj/projectile/bullet/shrapnel/mega +/obj/item/projectile/bullet/shrapnel/mega name = "flying shrapnel hunk" range = 25 dismemberment = 10 @@ -46,7 +46,7 @@ ricochet_chance = 90 ricochet_decay_chance = 0.9 -/obj/projectile/bullet/pellet/stingball +/obj/item/projectile/bullet/pellet/stingball name = "stingball pellet" damage = 3 stamina = 8 @@ -59,10 +59,10 @@ ricochet_incidence_leeway = 0 shrapnel_type = /obj/item/shrapnel/stingball -/obj/projectile/bullet/pellet/stingball/mega +/obj/item/projectile/bullet/pellet/stingball/mega name = "megastingball pellet" ricochets_max = 6 ricochet_chance = 110 -/obj/projectile/bullet/pellet/stingball/on_ricochet(atom/A) +/obj/item/projectile/bullet/pellet/stingball/on_ricochet(atom/A) hit_stunned_targets = TRUE // ducking will save you from the first wave, but not the rebounds diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm index e44314c5ca..6ad0b789b5 100644 --- a/code/game/objects/items/twohanded.dm +++ b/code/game/objects/items/twohanded.dm @@ -667,7 +667,7 @@ force_wielded = 19 force_unwielded = 11 throwforce = 21 - embedding = getEmbeddingBehavior(embed_chance = 75, embedded_pain_multiplier = 1.5) //plasmaglass spears are sharper + embedding = list(embed_chance = 75, pain_mult = 1.5) //plasmaglass spears are sharper icon_prefix = "spearplasma" qdel(tip) var/obj/item/twohanded/spear/S = locate() in parts_list @@ -682,7 +682,7 @@ if(G) explosive = G name = "explosive lance" - embedding = getEmbeddingBehavior(embed_chance = 0, embedded_pain_multiplier = 1)//elances should not be embeddable + embedding = list(embed_chance = 0, pain_mult = 1)//elances should not be embeddable desc = "A makeshift spear with [G] attached to it." update_icon() diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 80d1fa04c8..ba3eba9bd3 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -324,7 +324,7 @@ /obj/proc/rnd_crafted(obj/machinery/rnd/production/P) return -/obj/handle_ricochet(obj/projectile/P) +/obj/handle_ricochet(obj/item/projectile/P) . = ..() if(. && ricochet_damage_mod) take_damage(P.damage * ricochet_damage_mod, P.damage_type, P.flag, 0, turn(P.dir, 180), P.armour_penetration) // pass along ricochet_damage_mod damage to the structure for the ricochet diff --git a/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm b/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm index 3981cf5c9c..a21c0656dc 100644 --- a/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm +++ b/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm @@ -93,7 +93,7 @@ embedded() add_mob_blood(target)//Place blood on the stake loc = C // Put INSIDE the character - B.receive_damage(w_class * embedding.pain_mult) + B.receive_damage(w_class * embedding["pain_mult"]) if(C.mind) var/datum/antagonist/bloodsucker/bloodsucker = C.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) if(bloodsucker) diff --git a/code/modules/cargo/packs/security.dm b/code/modules/cargo/packs/security.dm index 5b739430c2..fca85952c9 100644 --- a/code/modules/cargo/packs/security.dm +++ b/code/modules/cargo/packs/security.dm @@ -234,7 +234,6 @@ desc = "Contains one speedloader of .38 DumDum ammunition, good for embedding in soft targets. Requires Security or Forensics access to open." cost = 1200 access = FALSE - small_item = TRUE access_any = list(ACCESS_SECURITY, ACCESS_FORENSICS_LOCKERS) contains = list(/obj/item/ammo_box/c38/dumdum) crate_name = ".38 match crate" @@ -244,7 +243,6 @@ desc = "Contains one speedloader of match grade .38 ammunition, perfect for showing off trickshots. Requires Security or Forensics access to open." cost = 1200 access = FALSE - small_item = TRUE access_any = list(ACCESS_SECURITY, ACCESS_FORENSICS_LOCKERS) contains = list(/obj/item/ammo_box/c38/match) crate_name = ".38 match crate" @@ -260,6 +258,5 @@ name = "Stingbang Single-Pack" desc = "Contains one \"stingbang\" grenade, perfect for playing meanhearted pranks. Requires Security access to open." cost = 1400 - small_item = TRUE contains = list(/obj/item/grenade/stingbang) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 3a9c5e1b12..62819f7de8 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -247,7 +247,7 @@ /mob/living/carbon/Topic(href, href_list) ..() //strip panel - if(usr.canUseTopic(src, BE_CLOSE, NO_DEXTERY)) + if(usr.canUseTopic(src, BE_CLOSE)) if(href_list["internal"] && !HAS_TRAIT(src, TRAIT_NO_INTERNALS)) var/slot = text2num(href_list["internal"]) var/obj/item/ITEM = get_item_by_slot(slot) @@ -267,7 +267,7 @@ visible_message("[usr] [internal ? "opens" : "closes"] the valve on [src]'s [ITEM.name].", \ "[usr] [internal ? "opens" : "closes"] the valve on your [ITEM.name].", \ target = usr, target_message = "You [internal ? "opens" : "closes"] the valve on [src]'s [ITEM.name].") - if(href_list["embedded_object"] && usr.canUseTopic(src, BE_CLOSE, NO_DEXTERITY)) + if(href_list["embedded_object"] && usr.canUseTopic(src, BE_CLOSE)) var/obj/item/bodypart/L = locate(href_list["embedded_limb"]) in bodyparts if(!L) return diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 560fc2972d..16c09a8166 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -72,7 +72,7 @@ I.add_mob_blood(src)//it embedded itself in you, of course it's bloody! I.forceMove(src) I.embedded() - L.receive_damage(I.w_class*I.embedding.impact_pain_mult) + L.receive_damage(I.w_class*I.embedding["impact_pain_mult"]) visible_message("[I] embeds itself in [src]'s [L.name]!","[I] embeds itself in your [L.name]!") SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "embedded", /datum/mood_event/embedded) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index f59cb4b68e..0a12718e5d 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -52,11 +52,6 @@ return martial_art_result return ..() -/mob/living/carbon/human/can_embed(obj/item/I) - if(I.get_sharpness() || is_pointed(I) || is_type_in_typecache(I, GLOB.can_embed_types)) - return TRUE - return FALSE - /mob/living/carbon/human/proc/check_martial_melee_block() if(mind) if(mind.martial_art && prob(mind.martial_art.block_chance) && mind.martial_art.can_use(src) && in_throw_mode && !incapacitated(FALSE, TRUE)) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index b94c808550..d20553d8ad 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -120,7 +120,7 @@ hitpush = FALSE skipcatch = TRUE blocked = TRUE - else if(I && I.throw_speed >= EMBED_THROWSPEED_THRESHOLD && can_embed(I, src) && prob(I.embedding.embed_chance) && !HAS_TRAIT(src, TRAIT_PIERCEIMMUNE) && (!HAS_TRAIT(src, TRAIT_AUTO_CATCH_ITEM) || incapacitated() || get_active_held_item())) + else if(I && I.throw_speed >= EMBED_THROWSPEED_THRESHOLD && can_embed(I, src) && prob(I.embedding["embed_chance"]) && !HAS_TRAIT(src, TRAIT_PIERCEIMMUNE) && (!HAS_TRAIT(src, TRAIT_AUTO_CATCH_ITEM) || incapacitated() || get_active_held_item())) embed_item(I) hitpush = FALSE skipcatch = TRUE //can't catch the now embedded item diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 775b5aa1d4..08252d4e05 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -210,7 +210,7 @@ w_class = WEIGHT_CLASS_NORMAL name = "energy dagger" hitsound = 'sound/weapons/blade1.ogg' - embedding = getEmbeddingBehavior(embed_chance = 100, embedded_fall_chance = 0) //rule of cool + embedding = list(embed_chance = 100, fall_chance = 0) //rule of cool throwforce = 35 playsound(user, 'sound/weapons/saberon.ogg', 5, 1) to_chat(user, "[src] is now active.") diff --git a/code/modules/projectiles/ammunition/ballistic/lmg.dm b/code/modules/projectiles/ammunition/ballistic/lmg.dm index 170edf8ce3..0688d09e3c 100644 --- a/code/modules/projectiles/ammunition/ballistic/lmg.dm +++ b/code/modules/projectiles/ammunition/ballistic/lmg.dm @@ -25,9 +25,9 @@ /obj/item/ammo_casing/mm712x82/match name = "7.12x82mm match bullet casing" desc = "A 7.12x82mm bullet casing manufactured to unfailingly high standards, you could pull off some cool trickshots with this." - projectile_type = /obj/projectile/bullet/mm712x82_match + projectile_type = /obj/item/projectile/bullet/mm712x82_match -/obj/projectile/bullet/mm712x82_match +/obj/item/projectile/bullet/mm712x82_match name = "7.12x82mm match bullet" damage = 40 ricochets_max = 2 diff --git a/code/modules/projectiles/ammunition/ballistic/revolver.dm b/code/modules/projectiles/ammunition/ballistic/revolver.dm index a80c94eb8a..693b258e3d 100644 --- a/code/modules/projectiles/ammunition/ballistic/revolver.dm +++ b/code/modules/projectiles/ammunition/ballistic/revolver.dm @@ -15,7 +15,7 @@ name = ".357 match bullet casing" desc = "A .357 bullet casing, manufactured to exceedingly high standards." caliber = "357" - projectile_type = /obj/projectile/bullet/a357/match + projectile_type = /obj/item/projectile/bullet/a357/match // 7.62x38mmR (Nagant Revolver) @@ -58,14 +58,14 @@ /obj/item/ammo_casing/c38/match name = ".38 Match bullet casing" desc = "A .38 bullet casing, manufactured to exceedingly high standards." - projectile_type = /obj/projectile/bullet/c38/match + projectile_type = /obj/item/projectile/bullet/c38/match /obj/item/ammo_casing/c38/match/bouncy name = ".38 Rubber bullet casing" desc = "A .38 rubber bullet casing, manufactured to exceedingly high standards." - projectile_type = /obj/projectile/bullet/c38/match/bouncy + projectile_type = /obj/item/projectile/bullet/c38/match/bouncy /obj/item/ammo_casing/c38/dumdum name = ".38 DumDum bullet casing" desc = "A .38 DumDum bullet casing." - projectile_type = /obj/projectile/bullet/c38/dumdum \ No newline at end of file + projectile_type = /obj/item/projectile/bullet/c38/dumdum \ No newline at end of file diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index 817b805e78..4009027d25 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -45,6 +45,17 @@ desc = "Designed to quickly reload revolvers. Iceblox bullets contain a cryogenic payload." ammo_type = /obj/item/ammo_casing/c38/iceblox +/obj/item/ammo_box/c38/dumdum + name = "speed loader (.38 DumDum)" + desc = "Designed to quickly reload revolvers. DumDum bullets shatter on impact and shred the target's innards, likely getting caught inside." + ammo_type = /obj/item/ammo_casing/c38/dumdum + + +/obj/item/ammo_box/c38/match + name = "speed loader (.38 Match)" + desc = "Designed to quickly reload revolvers. These rounds are manufactured within extremely tight tolerances, making them easy to show off trickshots with." + ammo_type = /obj/item/ammo_casing/c38/match + /obj/item/ammo_box/c9mm name = "ammo box (9mm)" icon_state = "9mmbox" diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index ea2673d9ce..d85e083cb5 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -303,9 +303,9 @@ beam_segments[beam_index] = null /obj/item/projectile/Bump(atom/A) + var/datum/point/pcache = trajectory.copy_to() var/turf/T = get_turf(A) if(trajectory && ricochets < ricochets_max && check_ricochet_flag(A) && check_ricochet(A)) - var/datum/point/pcache = trajectory.copy_to() ricochets++ if(A.handle_ricochet(src)) on_ricochet(A) @@ -391,7 +391,7 @@ return T //Returns null if nothing at all was found. -/obj/projectile/proc/check_ricochet(atom/A) +/obj/item/projectile/proc/check_ricochet(atom/A) var/chance = ricochet_chance * A.ricochet_chance_mod if(firer && HAS_TRAIT(firer, TRAIT_NICE_SHOT)) chance += NICE_SHOT_RICOCHET_BONUS diff --git a/code/modules/projectiles/projectile/bullets/revolver.dm b/code/modules/projectiles/projectile/bullets/revolver.dm index d38434832b..5643804ac1 100644 --- a/code/modules/projectiles/projectile/bullets/revolver.dm +++ b/code/modules/projectiles/projectile/bullets/revolver.dm @@ -20,7 +20,7 @@ ricochet_auto_aim_angle = 10 ricochet_auto_aim_range = 3 -/obj/projectile/bullet/c38/match +/obj/item/projectile/bullet/c38/match name = ".38 Match bullet" ricochets_max = 4 ricochet_chance = 100 @@ -30,7 +30,7 @@ ricochet_decay_chance = 1 ricochet_decay_damage = 1 -/obj/projectile/bullet/c38/match/bouncy +/obj/item/projectile/bullet/c38/match/bouncy name = ".38 Rubber bullet" damage = 10 stamina = 30 @@ -41,7 +41,7 @@ ricochet_decay_damage = 0.8 shrapnel_type = NONE -/obj/projectile/bullet/c38/dumdum +/obj/item/projectile/bullet/c38/dumdum name = ".38 DumDum bullet" damage = 15 armour_penetration = -30 @@ -106,7 +106,7 @@ armour_penetration = 45 // admin only really, for ocelot memes -/obj/projectile/bullet/a357/match +/obj/item/projectile/bullet/a357/match name = ".357 match bullet" ricochets_max = 5 ricochet_chance = 140 diff --git a/modular_citadel/code/modules/mob/living/carbon/human/human.dm b/modular_citadel/code/modules/mob/living/carbon/human/human.dm index 168dd7680c..47de66fcd1 100644 --- a/modular_citadel/code/modules/mob/living/carbon/human/human.dm +++ b/modular_citadel/code/modules/mob/living/carbon/human/human.dm @@ -16,7 +16,7 @@ if(!I || !L || I.loc != src || !(I in L.embedded_objects)) return L.embedded_objects -= I - L.receive_damage(I.embedding.rip_pain_mult*I.w_class*painmul)//It hurts to rip it out, get surgery you dingus. And if you're ripping it out quickly via resist, it's gonna hurt even more + L.receive_damage(I.embedding["remove_pain_mult"]*I.w_class*painmul)//It hurts to rip it out, get surgery you dingus. And if you're ripping it out quickly via resist, it's gonna hurt even more I.forceMove(get_turf(src)) I.unembedded() user.put_in_hands(I)