Crusher Gaming

This commit is contained in:
Chompstation Bot
2021-08-24 23:58:27 +00:00
parent 9fa44f50ce
commit d189c9a12f
19 changed files with 8837 additions and 13 deletions

View File

@@ -42,3 +42,7 @@
//Ouch my toes!
#define CALTROP_BYPASS_SHOES 1
#define CALTROP_IGNORE_WALKERS 2
// Conflict element IDs
#define CONFLICT_ELEMENT_CRUSHER "crusher"
#define CONFLICT_ELEMENT_KA "kinetic_accelerator"

View File

@@ -772,3 +772,9 @@
#define COMPONENT_BLOCK_LIGHT_EATER (1<<0)
///from base of [/datum/element/light_eater/proc/devour]: (atom/eaten_light)
#define COMSIG_LIGHT_EATER_DEVOUR "light_eater_devour"
// conflict checking elements
/// (id) - returns flags - Registered on something by conflict checking elements.
#define COMSIG_CONFLICT_ELEMENT_CHECK "conflict_element_check"
/// A conflict was found
#define ELEMENT_CONFLICT_FOUND (1<<0)

View File

@@ -58,5 +58,6 @@
//#define isturf(D) istype(D, /turf) //Built in
#define isopenspace(A) istype(A, /turf/simulated/open)
#define isspace(A) istype(A, /turf/space)
#define ismineralturf(A) istype(A, /turf/simulated/mineral)
#define istaurtail(A) istype(A, /datum/sprite_accessory/tail/taur)

View File

@@ -0,0 +1,35 @@
/**
* Simple conflict checking for getting number of conflicting things on someone with the same ID.
*/
/datum/element/conflict_checking
element_flags = ELEMENT_BESPOKE | ELEMENT_DETACH
id_arg_index = 1
/// we don't need to KNOW who has us, only our ID.
var/id
/datum/element/conflict_checking/Attach(datum/target, id)
. = ..()
if(. & ELEMENT_INCOMPATIBLE)
return
if(!isatom(target))
return ELEMENT_INCOMPATIBLE
if(!length(id))
. = ELEMENT_INCOMPATIBLE
CRASH("Invalid ID in conflict checking element.")
if(isnull(src.id))
src.id = id
RegisterSignal(target, COMSIG_CONFLICT_ELEMENT_CHECK, .proc/check)
/datum/element/conflict_checking/proc/check(datum/source, id_to_check)
if(id == id_to_check)
return ELEMENT_CONFLICT_FOUND
/**
* Counts number of conflicts on something that have a conflict checking element.
*/
/atom/proc/ConflictElementCount(id)
. = 0
for(var/i in GetAllContents())
var/atom/movable/AM = i
if(SEND_SIGNAL(AM, COMSIG_CONFLICT_ELEMENT_CHECK, id) & ELEMENT_CONFLICT_FOUND)
++.

View File

@@ -223,6 +223,8 @@
size = "bulky"
if(ITEMSIZE_HUGE)
size = "huge"
if(ITEMSIZE_NO_CONTAINER)
size = "massive"
return ..(user, "", "It is a [size] item.")
/obj/item/attack_hand(mob/living/user as mob)

View File

@@ -63,7 +63,7 @@
if(istype(W, /obj/item/weapon/material))
if(istype(W, /obj/item/weapon/material/sharpeningkit))
to_chat(user, "Really? Sharpening a [W] with [src]? You goofball.")
to_chat(user, "As much as you'd like to sharpen [W] with [src], the logistics just don't work out.")
return
var/obj/item/weapon/material/M = W
if(uses >= M.w_class*2)
@@ -71,7 +71,7 @@
uses -= M.w_class*2
return
else
to_chat(user, "Not enough material to sharpen [M]. You need [M.w_class*2] [M.material.sheet_plural_name].")
to_chat(user, "There's not enough spare sheets to sharpen [M]. You need [M.w_class*2] [M.material.sheet_plural_name].")
return
else
to_chat(user, "You can't sharpen [W] with [src]!")

View File

@@ -48,7 +48,8 @@
/obj/item/device/ano_scanner,
/obj/item/device/cataloguer,
/obj/item/device/radio,
/obj/item/device/mapping_unit
/obj/item/device/mapping_unit,
/obj/item/weapon/kinetic_crusher
)
/obj/item/weapon/storage/belt/explorer/pathfinder

View File

@@ -0,0 +1,55 @@
/obj/item/rig_module/gauntlets
name = "proto-kinetic gear unit"
desc = "A set of paired proto-kinetic gauntlets and greaves. There's no way this is actually usable. Right?"
icon_state = "module"
interface_name = "proto-kinetic gear unit"
interface_desc = "A set of paired proto-kinetic gauntlets and greaves. For disrupting rocks and creatures' innards."
activate_string = "Deploy Gauntlets"
deactivate_string = "Undeploy Gauntlets"
usable = 0
toggleable = 1
use_power_cost = 0
active_power_cost = 2.5
passive_power_cost = 0
var/obj/item/weapon/kinetic_crusher/machete/gauntlets/rig/stored_gauntlets
/obj/item/rig_module/gauntlets/Initialize()
. = ..()
stored_gauntlets = new /obj/item/weapon/kinetic_crusher/machete/gauntlets/rig(src)
stored_gauntlets.storing_module = src
/obj/item/rig_module/gauntlets/activate()
..()
var/mob/living/M = holder.wearer
var/datum/gender/TU = gender_datums[M.get_visible_gender()]
if(M.l_hand && M.r_hand)
to_chat(M, "<span class='danger'>Your hands are full.</span>")
deactivate()
return
if(M.a_intent == I_HURT)
M.visible_message(
"<span class='danger'>[M] throws [TU.his] arms out, extending [stored_gauntlets] from \the [holder] with a click!</span>",
"<span class='danger'>You throw your arms out, extending [stored_gauntlets] from \the [holder] with a click!</span>",
"<span class='notice'>You hear a threatening hiss and a click.</span>"
)
else
M.visible_message(
"<span class='notice'>[M] extends [stored_gauntlets] from \the [holder] with a click!</span>",
"<span class='notice'>You extend [stored_gauntlets] from \the [holder] with a click!</span>",
"<span class='notice'>You hear a hiss and a click.</span>")
playsound(src, 'sound/items/helmetdeploy.ogg', 40, 1)
M.put_in_hands(stored_gauntlets)
/obj/item/rig_module/gauntlets/deactivate()
..()
var/mob/living/M = holder.wearer
if(!M)
return
for(var/obj/item/weapon/kinetic_crusher/machete/gauntlets/gaming in M.contents)
M.drop_from_inventory(gaming, src)

View File

@@ -369,7 +369,7 @@
icon_state = "holster_machete"
slot = ACCESSORY_SLOT_WEAPON
concealed_holster = 0
can_hold = list(/obj/item/weapon/material/knife/machete)
can_hold = list(/obj/item/weapon/material/knife/machete, /obj/item/weapon/kinetic_crusher/machete)
//sound_in = 'sound/effects/holster/sheathin.ogg'
//sound_out = 'sound/effects/holster/sheathout.ogg'

View File

@@ -0,0 +1,407 @@
// ported from Citadel-Station-13/Citadel-Station-13-RP#3015, basically all the work done by silicons
// thanks silicons
/*********************Mining Hammer****************/
/obj/item/weapon/kinetic_crusher
icon = 'icons/obj/mining_vr.dmi'
icon_state = "crusher"
item_state = "crusher0"
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_melee_vr.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_melee_vr.dmi'
)
name = "proto-kinetic crusher"
desc = "An early design of the proto-kinetic accelerator, it is little more than an combination of various mining tools cobbled together, forming a high-tech club. \
While it is an effective mining tool, it did little to aid any but the most skilled and/or suicidal miners against local fauna."
force = 0 //You can't hit stuff unless wielded
w_class = ITEMSIZE_LARGE
slot_flags = SLOT_BACK
throwforce = 5
throw_speed = 4
/*
armour_penetration = 10
custom_materials = list(/datum/material/iron=1150, /datum/material/glass=2075)
*/
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("smashed", "crushed", "cleaved", "chopped", "pulped")
sharp = TRUE
edge = TRUE
// sharpness = SHARP_EDGED
action_button_name = "Toggle Light"
// actions_types = list(/datum/action/item_action/toggle_light)
// var/list/trophies = list()
var/charged = TRUE
var/charge_time = 15
var/detonation_damage = 50
var/backstab_bonus = 30
/// does it have a light icon
var/integ_light_icon = TRUE
/// is the light on?
var/integ_light_on = FALSE
var/brightness_on = 7
var/wielded = FALSE // track wielded status on item
/// is this emagged? (unlocks !!!FUN!!!)
var/emagged = 0
/// Damage penalty factor to detonation damage to non simple mobs
var/human_damage_nerf = 0.25
/// Damage penalty factor to backstab bonus damage to non simple mobs
var/human_backstab_nerf = 0.25
/// damage buff for throw impacts
var/thrown_bonus = 35
/// do we need to be wielded?
var/requires_wield = TRUE
/// do we have a charge overlay?
var/charge_overlay = TRUE
/// do we update item state?
var/update_item_state = FALSE
/obj/item/weapon/kinetic_crusher/cyborg //probably give this a unique sprite later
desc = "An integrated version of the standard kinetic crusher with a grinded down axe head to dissuade mis-use against crewmen. Deals damage equal to the standard crusher against creatures, however."
force = 10 //wouldn't want to give a borg a 20 brute melee weapon unemagged now would we
detonation_damage = 60
wielded = 1
/obj/item/weapon/kinetic_crusher/Initialize(mapload)
. = ..()
AddElement(/datum/element/conflict_checking, CONFLICT_ELEMENT_CRUSHER)
/*
/obj/item/weapon/kinetic_crusher/Initialize()
. = ..()
if(requires_Wield)
RegisterSignal(src, COMSIG_TWOHANDED_WIELD, .proc/on_wield)
RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, .proc/on_unwield)
/obj/item/weapon/kinetic_crusher/ComponentInitialize()
. = ..()
if(requires_wield)
AddComponent(/datum/component/butchering, 60, 110) //technically it's huge and bulky, but this provides an incentive to use it
AddComponent(/datum/component/two_handed, force_unwielded=0, force_wielded=20)
*/
/obj/item/weapon/kinetic_crusher/Destroy()
// QDEL_LIST(trophies)
return ..()
/obj/item/weapon/kinetic_crusher/emag_act()
. = ..()
if(emagged)
return
emagged = TRUE
desc = desc + " The destabilizer module occasionally sparks and glows a menacing red."
/obj/item/weapon/kinetic_crusher/proc/can_mark(mob/living/victim)
if(emagged)
return TRUE
return !ishuman(victim) && !issilicon(victim)
/// triggered on wield of two handed item
/obj/item/weapon/kinetic_crusher/proc/on_wield(obj/item/source, mob/user)
wielded = TRUE
/// triggered on unwield of two handed item
/obj/item/weapon/kinetic_crusher/proc/on_unwield(obj/item/source, mob/user)
wielded = FALSE
/obj/item/weapon/kinetic_crusher/examine(mob/living/user)
. = ..()
. += "<span class='notice'>Mark a[emagged ? "nything": " creature"] with the destabilizing force, then hit them in melee to do <b>[force + detonation_damage]</b> damage.</span>"
. += "<span class='notice'>Does <b>[force + detonation_damage + backstab_bonus]</b> damage if the target is backstabbed, instead of <b>[force + detonation_damage]</b>.</span>"
/*
for(var/t in trophies)
var/obj/item/crusher_trophy/T = t
. += "<span class='notice'>It has \a [T] attached, which causes [T.effect_desc()].</span>"
*/
/*
/obj/item/weapon/kinetic_crusher/attackby(obj/item/I, mob/living/user)
if(I.tool_behaviour == TOOL_CROWBAR)
if(LAZYLEN(trophies))
to_chat(user, "<span class='notice'>You remove [src]'s trophies.</span>")
I.play_tool_sound(src)
for(var/t in trophies)
var/obj/item/crusher_trophy/T = t
T.remove_from(src, user)
else
to_chat(user, "<span class='warning'>There are no trophies on [src].</span>")
else if(istype(I, /obj/item/crusher_trophy))
var/obj/item/crusher_trophy/T = I
T.add_to(src, user)
else
return ..()
*/
/obj/item/weapon/kinetic_crusher/attack(mob/living/target, mob/living/carbon/user)
if(!wielded && requires_wield)
to_chat(user, "<span class='warning'>[src] is too heavy to use with one hand.</span>")
return
..()
/obj/item/weapon/kinetic_crusher/afterattack(atom/target, mob/living/user, proximity_flag, clickparams)
. = ..()
/*
if(istype(target, /obj/item/crusher_trophy))
var/obj/item/crusher_trophy/T = target
T.add_to(src, user)
*/
if(requires_wield && !wielded)
return
if(!proximity_flag && charged)//Mark a target, or mine a tile.
var/turf/proj_turf = user.loc
if(!isturf(proj_turf))
return
var/obj/item/projectile/destabilizer/D = new /obj/item/projectile/destabilizer(proj_turf)
/*
for(var/t in trophies)
var/obj/item/crusher_trophy/T = t
T.on_projectile_fire(D, user)
*/
D.preparePixelProjectile(target, user, clickparams)
D.firer = user
D.hammer_synced = src
playsound(user, 'sound/weapons/plasma_cutter.ogg', 100, 1)
D.fire()
charged = FALSE
update_icon()
addtimer(CALLBACK(src, .proc/Recharge), charge_time * (user?.ConflictElementCount(CONFLICT_ELEMENT_CRUSHER) || 1))
return
if(proximity_flag && isliving(target))
detonate(target, user)
/obj/item/weapon/kinetic_crusher/proc/detonate(mob/living/L, mob/living/user, thrown = FALSE)
var/datum/modifier/crusher_mark/CM = L.get_modifier_of_type(/datum/modifier/crusher_mark)
if(!CM || CM.hammer_synced != src)
return
if(!QDELETED(L))
L.remove_modifiers_of_type(/datum/modifier/crusher_mark)
new /obj/effect/temp_visual/kinetic_blast(get_turf(L))
var/backstab_dir = get_dir(user, L)
var/def_check = L.getarmor(null, "bomb")
var/detonation_damage = src.detonation_damage * (!ishuman(L)? 1 : human_damage_nerf)
var/backstab_bonus = src.backstab_bonus * (!ishuman(L)? 1 : human_backstab_nerf)
var/thrown_bonus = thrown? (src.thrown_bonus * (!ishuman(L)? 1 : human_damage_nerf)) : 0
if(thrown? (get_dir(src, L) & L.dir) : ((user.dir & backstab_dir) && (L.dir & backstab_dir)))
L.apply_damage(detonation_damage + backstab_bonus + thrown_bonus, BRUTE, blocked = def_check)
playsound(src, 'sound/weapons/Kenetic_accel.ogg', 100, 1) //Seriously who spelled it wrong
else
L.apply_damage(detonation_damage + thrown_bonus, BRUTE, blocked = def_check)
/obj/item/weapon/kinetic_crusher/throw_impact(atom/hit_atom, speed)
. = ..()
if(!isliving(hit_atom))
return
var/mob/living/L = hit_atom
if(L.has_modifier_of_type(/datum/modifier/crusher_mark))
detonate(L, thrower, TRUE)
/obj/item/weapon/kinetic_crusher/proc/Recharge()
if(!charged)
charged = TRUE
update_icon()
playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)
/obj/item/weapon/kinetic_crusher/ui_action_click(mob/user, actiontype)
integ_light_on = !integ_light_on
playsound(src, 'sound/weapons/empty.ogg', 100, TRUE)
update_brightness(user)
update_icon()
/obj/item/weapon/kinetic_crusher/proc/update_brightness(mob/user = null)
if(integ_light_on)
set_light(brightness_on)
else
set_light(0)
/obj/item/weapon/kinetic_crusher/update_icon()
. = ..()
cut_overlay("[icon_state]_uncharged")
cut_overlay("[icon_state]_lit")
if(charge_overlay)
if(!charged)
add_overlay("[icon_state]_uncharged")
if(integ_light_icon)
if(integ_light_on)
add_overlay("[icon_state]_lit")
/*
/obj/item/weapon/kinetic_crusher/glaive
name = "proto-kinetic glaive"
desc = "A modified design of a proto-kinetic crusher, it is still little more of a combination of various mining tools cobbled together \
and kit-bashed into a high-tech cleaver on a stick - with a handguard and a goliath hide grip. While it is still of little use to any \
but the most skilled and/or suicidal miners against local fauna, it's an elegant weapon for a more civilized hunter."
look gary there i am
- hatterhat
*/
/obj/item/weapon/kinetic_crusher/machete
name = "proto-kinetic machete"
desc = "A scaled down version of a proto-kinetic crusher, used by people who don't want to lug around an axe-hammer."
icon_state = "glaive-machete"
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_melee_vr.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_melee_vr.dmi',
)
item_state = "c-machete"
w_class = ITEMSIZE_SMALL
attack_verb = list("cleaved", "chopped", "pulped", "stabbed", "skewered")
force = 24
can_cleave = TRUE
requires_wield = FALSE
// yeah yeah buff but polaris mobs are meatwalls.
backstab_bonus = 40
detonation_damage = 26
// meme option
thrown_bonus = 20
update_item_state = FALSE
/obj/item/weapon/kinetic_crusher/machete/gauntlets
// did someone say single target damage
name = "\improper proto-kinetic gear"
desc = "A pair of scaled-down proto-kinetic crusher destabilizer modules shoved into gauntlets and greaves, used by those who wish to spit in the eyes of God."
hitsound = 'sound/weapons/resonator_blast.ogg'
embed_chance = 0
icon_state = "crusher-hands"
item_state = "c-gauntlets"
attack_verb = list("bashed", "kicked", "punched", "struck", "axe kicked", "uppercut", "cross-punched", "jabbed", "hammerfisted", "roundhouse kicked")
integ_light_icon = FALSE
w_class = ITEMSIZE_HUGE
force = 30
can_cleave = FALSE
requires_wield = TRUE
backstab_bonus = 55
detonation_damage = 35
var/obj/item/offhand/crushergauntlets/offhand
/obj/item/weapon/kinetic_crusher/machete/gauntlets/equipped()
. = ..()
START_PROCESSING(SSprocessing, src)
/obj/item/weapon/kinetic_crusher/machete/gauntlets/dropped(mob/user)
ready_toggle(TRUE)
STOP_PROCESSING(SSprocessing, src)
. = ..()
/obj/item/weapon/kinetic_crusher/machete/gauntlets/Destroy()
. = ..()
STOP_PROCESSING(SSprocessing, src)
/obj/item/weapon/kinetic_crusher/machete/gauntlets/attack_self(mob/user)
ready_toggle()
/obj/item/weapon/kinetic_crusher/machete/gauntlets/process()
if(wielded) // are we supposed to be wielded
if(!offhand) // does our offhand exist
ready_toggle(TRUE) // no? well, shit
/// toggles twohand. if forced is true, forces an unready state
/obj/item/weapon/kinetic_crusher/machete/gauntlets/proc/ready_toggle(var/forced = 0)
var/mob/living/M = loc
if(istype(M) && forced == 0)
if(M.can_wield_item(src) && src.is_held_twohanded(M))
name = initial(name)
wielded = TRUE
to_chat(M, "<span class ='notice'>You ready [src].</span>")
var/obj/item/offhand/crushergauntlets/O = new(M)
O.name = "[name] - readied"
O.desc = "As much as you'd like to punch things with one hand, [src] is far too unwieldy for that."
O.linked = src
M.put_in_inactive_hand(O)
offhand = O
else
name = "[initial(name)] (unreadied)"
wielded = FALSE
to_chat(M, "<span class ='notice'>You unready [src].</span>")
if(offhand)
QDEL_NULL(offhand)
/obj/item/offhand
icon = 'icons/obj/weapons.dmi'
icon_state = "offhand"
name = "offhand that shouldn't exist doo dee doo"
w_class = ITEMSIZE_NO_CONTAINER
// var/linked - redefine this wherever
/obj/item/offhand/crushergauntlets
var/obj/item/weapon/kinetic_crusher/machete/gauntlets/linked
/obj/item/offhand/crushergauntlets/dropped(mob/user as mob)
if(linked.wielded)
linked.ready_toggle(TRUE)
/obj/item/weapon/kinetic_crusher/machete/gauntlets/rig
name = "mounted proto-kinetic gear"
var/obj/item/rig_module/gauntlets/storing_module
/obj/item/weapon/kinetic_crusher/machete/gauntlets/rig/dropped(mob/user)
. = ..()
if(storing_module)
src.forceMove(storing_module)
storing_module.stored_gauntlets = src
user.visible_message(
"<span class='notice'>[user] retracts [src] with a click and a hiss.</span>",
"<span class='notice'>You retract [src] with a click and a hiss.</span>",
"<span class='notice'>You hear a click and a hiss.</span>"
)
playsound(src, 'sound/items/helmetdeploy.ogg', 40, 1)
storing_module.active = FALSE
else
QDEL_NULL(src)
/obj/item/weapon/kinetic_crusher/machete/dagger
name = "proto-kinetic dagger"
desc = "A scaled down version of a proto-kinetic machete, usually used in a last ditch scenario."
icon_state = "glaive-dagger"
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_melee_vr.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_melee_vr.dmi',
)
item_state = "c-knife"
w_class = ITEMSIZE_SMALL
force = 15
requires_wield = FALSE
charge_overlay = FALSE
backstab_bonus = 35
detonation_damage = 25
// woohoo
thrown_bonus = 35
//destablizing force
/obj/item/projectile/destabilizer
name = "destabilizing force"
icon_state = "pulse1"
nodamage = TRUE
damage = 0 //We're just here to mark people. This is still a melee weapon.
damage_type = BRUTE
check_armour = "bomb"
range = 6
accuracy = INFINITY // NO.
// log_override = TRUE
var/obj/item/weapon/kinetic_crusher/hammer_synced
/obj/item/projectile/destabilizer/Destroy()
hammer_synced = null
return ..()
/obj/item/projectile/destabilizer/on_hit(atom/target, blocked = FALSE)
if(isliving(target))
var/mob/living/L = target
L.add_modifier(/datum/modifier/crusher_mark, 30 SECONDS, firer, TRUE)
var/target_turf = get_turf(target)
if(ismineralturf(target_turf))
var/turf/simulated/mineral/M = target_turf
new /obj/effect/temp_visual/kinetic_blast(M)
M.GetDrilled(firer)
..()
/*
//trophies
there would be any if we had some
but alas
- hatterhat
*/

View File

@@ -17,7 +17,102 @@
var/icon_vend = "adh-tool-vend"
circuit = /obj/item/weapon/circuitboard/mining_equipment_vendor
var/obj/item/weapon/card/id/inserted_id
<<<<<<< HEAD
var/list/prize_list // Initialized just below! (if you're wondering why - check CONTRIBUTING.md, look for: "hidden" init proc)
||||||| parent of bfac91465b... Crusher Gaming (#11462)
var/list/prize_list = list(
new /datum/data/mining_equipment("1 Marker Beacon", /obj/item/stack/marker_beacon, 10),
new /datum/data/mining_equipment("10 Marker Beacons", /obj/item/stack/marker_beacon/ten, 100),
new /datum/data/mining_equipment("30 Marker Beacons", /obj/item/stack/marker_beacon/thirty, 300),
new /datum/data/mining_equipment("Whiskey", /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, 125),
new /datum/data/mining_equipment("Absinthe", /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe, 125),
new /datum/data/mining_equipment("Cigar", /obj/item/clothing/mask/smokable/cigarette/cigar/havana, 150),
new /datum/data/mining_equipment("Soap", /obj/item/weapon/soap/nanotrasen, 200),
new /datum/data/mining_equipment("Laser Pointer", /obj/item/device/laser_pointer, 900),
new /datum/data/mining_equipment("Geiger Counter", /obj/item/device/geiger, 750),
new /datum/data/mining_equipment("Plush Toy", /obj/random/plushie, 300),
new /datum/data/mining_equipment("Umbrella", /obj/item/weapon/melee/umbrella/random, 200),
// new /datum/data/mining_equipment("Fulton Beacon", /obj/item/fulton_core, 500),
new /datum/data/mining_equipment("Point Transfer Card", /obj/item/weapon/card/mining_point_card, 500),
// new /datum/data/mining_equipment("Fulton Pack", /obj/item/extraction_pack, 1200),
// new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/weapon/pickaxe/silver, 1200),
// new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/weapon/pickaxe/diamond, 2000),
new /datum/data/mining_equipment("Fishing Net", /obj/item/weapon/material/fishing_net, 500),
new /datum/data/mining_equipment("Titanium Fishing Rod", /obj/item/weapon/material/fishing_rod/modern, 1000),
// new /datum/data/mining_equipment("Space Cash", /obj/item/weapon/spacecash/c1000, 2000),
new /datum/data/mining_equipment("Industrial Hardsuit - Control Module", /obj/item/weapon/rig/industrial, 10000),
new /datum/data/mining_equipment("Industrial Hardsuit - Plasma Cutter", /obj/item/rig_module/device/plasmacutter, 800),
new /datum/data/mining_equipment("Industrial Hardsuit - Drill", /obj/item/rig_module/device/drill, 5000),
new /datum/data/mining_equipment("Industrial Hardsuit - Ore Scanner", /obj/item/rig_module/device/orescanner, 1000),
new /datum/data/mining_equipment("Industrial Hardsuit - Advanced Optics", /obj/item/rig_module/vision/mining, 1250),
new /datum/data/mining_equipment("Industrial Hardsuit - Maneuvering Jets", /obj/item/rig_module/maneuvering_jets, 1250),
new /datum/data/mining_equipment("Hardsuit - Intelligence Storage", /obj/item/rig_module/ai_container, 2500),
new /datum/data/mining_equipment("Hardsuit - Smoke Bomb Deployer", /obj/item/rig_module/grenade_launcher/smoke, 2000),
new /datum/data/mining_equipment("Industrial Equipment - Phoron Bore", /obj/item/weapon/gun/magnetic/matfed/phoronbore/loaded, 3000),
new /datum/data/mining_equipment("Industrial Equipment - Sheet-Snatcher",/obj/item/weapon/storage/bag/sheetsnatcher, 500), new /datum/data/mining_equipment("Digital Tablet - Standard", /obj/item/modular_computer/tablet/preset/custom_loadout/standard, 500),
new /datum/data/mining_equipment("Digital Tablet - Advanced", /obj/item/modular_computer/tablet/preset/custom_loadout/advanced, 1000),
new /datum/data/mining_equipment("Fine Excavation Kit - Chisels",/obj/item/weapon/storage/excavation, 500),
new /datum/data/mining_equipment("Fine Excavation Kit - Measuring Tape",/obj/item/device/measuring_tape, 125),
new /datum/data/mining_equipment("Fine Excavation Kit - Hand Pick",/obj/item/weapon/pickaxe/hand, 375),
new /datum/data/mining_equipment("Explosive Excavation Kit - Plastic Charge",/obj/item/weapon/plastique/seismic, 1500),
new /datum/data/mining_equipment("Injector (L) - Glucose",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, 500),
new /datum/data/mining_equipment("Injector (L) - Panacea",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity, 500),
new /datum/data/mining_equipment("Injector (L) - Trauma",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute, 500),
new /datum/data/mining_equipment("Nanopaste Tube", /obj/item/stack/nanopaste, 1000),
new /datum/data/mining_equipment("Defense Equipment - Phase Pistol",/obj/item/weapon/gun/energy/phasegun/pistol, 400),
new /datum/data/mining_equipment("Defense Equipment - Smoke Bomb",/obj/item/weapon/grenade/smokebomb, 100),
new /datum/data/mining_equipment("Defense Equipment - Razor Drone Deployer",/obj/item/weapon/grenade/spawnergrenade/manhacks/station, 1000),
new /datum/data/mining_equipment("Defense Equipment - Sentry Drone Deployer",/obj/item/weapon/grenade/spawnergrenade/ward, 1500),
new /datum/data/mining_equipment("Defense Equipment - Steel Machete", /obj/item/weapon/material/knife/machete, 500)
)
=======
var/list/prize_list = list(
new /datum/data/mining_equipment("1 Marker Beacon", /obj/item/stack/marker_beacon, 10),
new /datum/data/mining_equipment("10 Marker Beacons", /obj/item/stack/marker_beacon/ten, 100),
new /datum/data/mining_equipment("30 Marker Beacons", /obj/item/stack/marker_beacon/thirty, 300),
new /datum/data/mining_equipment("Whiskey", /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, 125),
new /datum/data/mining_equipment("Absinthe", /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe, 125),
new /datum/data/mining_equipment("Cigar", /obj/item/clothing/mask/smokable/cigarette/cigar/havana, 150),
new /datum/data/mining_equipment("Soap", /obj/item/weapon/soap/nanotrasen, 200),
new /datum/data/mining_equipment("Laser Pointer", /obj/item/device/laser_pointer, 900),
new /datum/data/mining_equipment("Geiger Counter", /obj/item/device/geiger, 750),
new /datum/data/mining_equipment("Plush Toy", /obj/random/plushie, 300),
new /datum/data/mining_equipment("Umbrella", /obj/item/weapon/melee/umbrella/random, 200),
// new /datum/data/mining_equipment("Fulton Beacon", /obj/item/fulton_core, 500),
new /datum/data/mining_equipment("Point Transfer Card", /obj/item/weapon/card/mining_point_card, 500),
// new /datum/data/mining_equipment("Fulton Pack", /obj/item/extraction_pack, 1200),
// new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/weapon/pickaxe/silver, 1200),
// new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/weapon/pickaxe/diamond, 2000),
new /datum/data/mining_equipment("Fishing Net", /obj/item/weapon/material/fishing_net, 500),
new /datum/data/mining_equipment("Titanium Fishing Rod", /obj/item/weapon/material/fishing_rod/modern, 1000),
// new /datum/data/mining_equipment("Space Cash", /obj/item/weapon/spacecash/c1000, 2000),
new /datum/data/mining_equipment("Industrial Hardsuit - Control Module", /obj/item/weapon/rig/industrial, 10000),
new /datum/data/mining_equipment("Industrial Hardsuit - Plasma Cutter", /obj/item/rig_module/device/plasmacutter, 800),
new /datum/data/mining_equipment("Industrial Hardsuit - Drill", /obj/item/rig_module/device/drill, 5000),
new /datum/data/mining_equipment("Industrial Hardsuit - Ore Scanner", /obj/item/rig_module/device/orescanner, 1000),
new /datum/data/mining_equipment("Industrial Hardsuit - Advanced Optics", /obj/item/rig_module/vision/mining, 1250),
new /datum/data/mining_equipment("Industrial Hardsuit - Maneuvering Jets", /obj/item/rig_module/maneuvering_jets, 1250),
new /datum/data/mining_equipment("Hardsuit - Intelligence Storage", /obj/item/rig_module/ai_container, 2500),
new /datum/data/mining_equipment("Hardsuit - Smoke Bomb Deployer", /obj/item/rig_module/grenade_launcher/smoke, 2000),
new /datum/data/mining_equipment("Industrial Equipment - Phoron Bore", /obj/item/weapon/gun/magnetic/matfed/phoronbore/loaded, 3000),
new /datum/data/mining_equipment("Industrial Equipment - Sheet-Snatcher",/obj/item/weapon/storage/bag/sheetsnatcher, 500),
new /datum/data/mining_equipment("Digital Tablet - Standard", /obj/item/modular_computer/tablet/preset/custom_loadout/standard, 500),
new /datum/data/mining_equipment("Digital Tablet - Advanced", /obj/item/modular_computer/tablet/preset/custom_loadout/advanced, 1000),
new /datum/data/mining_equipment("Fine Excavation Kit - Chisels",/obj/item/weapon/storage/excavation, 500),
new /datum/data/mining_equipment("Fine Excavation Kit - Measuring Tape",/obj/item/device/measuring_tape, 125),
new /datum/data/mining_equipment("Fine Excavation Kit - Hand Pick",/obj/item/weapon/pickaxe/hand, 375),
new /datum/data/mining_equipment("Explosive Excavation Kit - Plastic Charge",/obj/item/weapon/plastique/seismic, 1500),
new /datum/data/mining_equipment("Injector (L) - Glucose",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, 500),
new /datum/data/mining_equipment("Injector (L) - Panacea",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity, 500),
new /datum/data/mining_equipment("Injector (L) - Trauma",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute, 500),
new /datum/data/mining_equipment("Nanopaste Tube", /obj/item/stack/nanopaste, 1000),
new /datum/data/mining_equipment("Defense Equipment - Phase Pistol",/obj/item/weapon/gun/energy/phasegun/pistol, 400),
new /datum/data/mining_equipment("Defense Equipment - Smoke Bomb",/obj/item/weapon/grenade/smokebomb, 100),
new /datum/data/mining_equipment("Defense Equipment - Razor Drone Deployer",/obj/item/weapon/grenade/spawnergrenade/manhacks/station, 1000),
new /datum/data/mining_equipment("Defense Equipment - Sentry Drone Deployer",/obj/item/weapon/grenade/spawnergrenade/ward, 1500),
new /datum/data/mining_equipment("Defense Equipment - Steel Machete", /obj/item/weapon/material/knife/machete, 500)
)
>>>>>>> bfac91465b... Crusher Gaming (#11462)
var/dirty_items = FALSE // Used to refresh the static/redundant data in case the machine gets VV'd
/datum/data/mining_equipment
@@ -41,6 +136,8 @@
EQUIPMENT("Defense Equipment - Razor Drone Deployer", /obj/item/weapon/grenade/spawnergrenade/manhacks/station/locked, 1000),
EQUIPMENT("Defense Equipment - Sentry Drone Deployer", /obj/item/weapon/grenade/spawnergrenade/ward, 1500),
EQUIPMENT("Defense Equipment - Smoke Bomb", /obj/item/weapon/grenade/smokebomb, 100),
EQUIPMENT("Hybrid Equipment - Proto-Kinetic Dagger", /obj/item/weapon/kinetic_crusher/machete/dagger, 500),
EQUIPMENT("Hybrid Equipment - Proto-Kinetic Machete", /obj/item/weapon/kinetic_crusher/machete, 1000),
EQUIPMENT("Durasteel Fishing Rod", /obj/item/weapon/material/fishing_rod/modern/strong, 7500),
EQUIPMENT("Titanium Fishing Rod", /obj/item/weapon/material/fishing_rod/modern, 1000),
EQUIPMENT("Fishing Net", /obj/item/weapon/material/fishing_net, 500),
@@ -100,12 +197,13 @@
prize_list["Hardsuit"] = list(
EQUIPMENT("Hardsuit - Control Module", /obj/item/weapon/rig/industrial/vendor, 2000),
EQUIPMENT("Hardsuit - Drill", /obj/item/rig_module/device/drill, 5000),
EQUIPMENT("Hardsuit - Intelligence Storage",/obj/item/rig_module/ai_container, 2500),
EQUIPMENT("Hardsuit - Intelligence Storage", /obj/item/rig_module/ai_container, 2500),
EQUIPMENT("Hardsuit - Maneuvering Jets", /obj/item/rig_module/maneuvering_jets, 1250),
EQUIPMENT("Hardsuit - Material Scanner", /obj/item/rig_module/vision/material, 500),
EQUIPMENT("Hardsuit - Ore Scanner", /obj/item/rig_module/device/orescanner, 1000),
EQUIPMENT("Hardsuit - Plasma Cutter", /obj/item/rig_module/device/plasmacutter, 800),
EQUIPMENT("Hardsuit - Smoke Bomb Deployer", /obj/item/rig_module/grenade_launcher/smoke,2000),
EQUIPMENT("Hardsuit - Smoke Bomb Deployer", /obj/item/rig_module/grenade_launcher/smoke, 2000),
EQUIPMENT("Hardsuit - Proto-Kinetic Gauntlets", /obj/item/rig_module/gauntlets, 2000),
)
prize_list["Miscellaneous"] = list(
EQUIPMENT("Absinthe", /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe, 125),

View File

@@ -55,6 +55,8 @@
EQUIPMENT("Defense Equipment - Razor Drone Deployer", /obj/item/weapon/grenade/spawnergrenade/manhacks/station/locked, 100),
EQUIPMENT("Defense Equipment - Sentry Drone Deployer", /obj/item/weapon/grenade/spawnergrenade/ward, 150),
EQUIPMENT("Defense Equipment - Frontier Carbine", /obj/item/weapon/gun/energy/locked/frontier/carbine, 750),
EQUIPMENT("Hybrid Equipment - Proto-Kinetic Dagger", /obj/item/weapon/kinetic_crusher/machete/dagger, 75),
EQUIPMENT("Hybrid Equipment - Proto-Kinetic Machete", /obj/item/weapon/kinetic_crusher/machete, 250),
EQUIPMENT("Fishing Net", /obj/item/weapon/material/fishing_net, 50),
EQUIPMENT("Titanium Fishing Rod", /obj/item/weapon/material/fishing_rod/modern, 100),
EQUIPMENT("Durasteel Fishing Rod", /obj/item/weapon/material/fishing_rod/modern/strong, 750),

View File

@@ -0,0 +1,43 @@
/datum/modifier/crusher_mark
name = "destabilized"
desc = "You've been struck by a destabilizing bolt. By all accounts, this is probably a bad thing."
stacks = MODIFIER_STACK_EXTEND
on_created_text = "You feel destabilized."
on_expired_text = "You feel stable again."
var/mutable_appearance/marked_underlay
var/obj/item/weapon/kinetic_crusher/hammer_synced
/*
/datum/modifier/New(var/new_holder, var/new_origin)
holder = new_holder
if(new_origin)
origin = weakref(new_origin)
else // We assume the holder caused the modifier if not told otherwise.
origin = weakref(holder)
..()
/mob/living/proc/add_modifier(var/modifier_type, var/expire_at = null, var/mob/living/origin = null, var/suppress_failure = FALSE)
*/
/datum/modifier/crusher_mark/New(var/new_holder, var/new_origin)
. = ..()
if(isliving(new_origin))
var/mob/living/origin = new_origin
var/obj/item/weapon/kinetic_crusher/to_sync = locate(/obj/item/weapon/kinetic_crusher) in origin
if(to_sync)
hammer_synced = to_sync
if(hammer_synced? hammer_synced.can_mark(holder) : TRUE)
marked_underlay = mutable_appearance('icons/effects/effects.dmi', "shield2")
marked_underlay.pixel_x = -holder.pixel_x
marked_underlay.pixel_y = -holder.pixel_y
holder.underlays += marked_underlay
/datum/modifier/crusher_mark/Destroy()
hammer_synced = null
if(holder)
holder.underlays -= marked_underlay
QDEL_NULL(marked_underlay)
return ..()
/datum/modifier/crusher_mark/on_expire()
holder.underlays -= marked_underlay //if this is being called, we should have a holder at this point.
..()

View File

@@ -658,7 +658,7 @@
return
//roll to-hit
miss_modifier = max(15*(distance-2) - accuracy + miss_modifier + target_mob.get_evasion(), 0)
miss_modifier = max(15*(distance-2) - accuracy + miss_modifier + target_mob.get_evasion(), -100)
var/hit_zone = get_zone_with_miss_chance(def_zone, target_mob, miss_modifier, ranged_attack=(distance > 1 || original != target_mob)) //if the projectile hits a target we weren't originally aiming at then retain the chance to miss
var/result = PROJECTILE_FORCE_MISS

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff