mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-20 03:19:58 +01:00
For a robust crafting system, I need a new materials framework. For a new materials framework, I need to clean up reagents. To clean up reagents, I need to pare down foods from reagent holders. To pare down foods from reagent holders, I need to port edibility components. To port edibility components, I need to port processing components. To port processing components, I need to port tool behaviors. This is all back-end code, no new features or functionality from this.
254 lines
7.8 KiB
Plaintext
254 lines
7.8 KiB
Plaintext
//ghetto shotgun, mostly based on the tg-version. Also this file can be used for more improvised guns in the future - Alberyk
|
|
|
|
/obj/item/gun/projectile/shotgun/improvised //similar to the double barrel, but without the option to fire both barrels
|
|
name = "improvised shotgun"
|
|
desc = "An improvised pipe assembly that can fire shotgun shells."
|
|
icon = 'icons/obj/guns/ishotgun.dmi'
|
|
icon_state = "ishotgun"
|
|
item_state = "ishotgun"
|
|
max_shells = 2
|
|
w_class = WEIGHT_CLASS_BULKY
|
|
force = 11
|
|
recoil = 2
|
|
accuracy = -1
|
|
slot_flags = SLOT_BACK
|
|
caliber = "shotgun"
|
|
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
|
|
handle_casings = CYCLE_CASINGS
|
|
load_method = SINGLE_CASING
|
|
needspin = FALSE
|
|
fire_sound = 'sound/weapons/gunshot/gunshot_shotgun2.ogg'
|
|
var/fail_chance = 35
|
|
|
|
/obj/item/gun/projectile/shotgun/improvised/feedback_hints(mob/user, distance, is_adjacent)
|
|
. += ..()
|
|
switch(fail_chance)
|
|
if(1)
|
|
. += "All craftsmanship is of the highest quality."
|
|
if(2 to 25)
|
|
. += "All craftsmanship is of high quality."
|
|
if(26 to 50)
|
|
. += "All craftsmanship is of average quality."
|
|
if(51 to 75)
|
|
. += "All craftsmanship is of low quality."
|
|
if(100)
|
|
. += "All craftsmanship is of the lowest quality."
|
|
|
|
/obj/item/gun/projectile/shotgun/improvised/special_check(var/mob/living/carbon/human/M)
|
|
if(prob(fail_chance))
|
|
M.visible_message(SPAN_DANGER("[M]'s weapon blows up, shattering into pieces!"),
|
|
SPAN_DANGER("[src] blows up in your face!"),
|
|
"You hear a loud bang!")
|
|
|
|
M.take_organ_damage(0,30)
|
|
M.drop_item()
|
|
new /obj/item/material/shard/shrapnel(get_turf(src))
|
|
qdel(src)
|
|
return 0
|
|
|
|
return ..()
|
|
|
|
|
|
/obj/item/gun/projectile/shotgun/improvised/attackby(obj/item/attacking_item, mob/user)
|
|
if(istype(attacking_item, /obj/item/surgery/circular_saw) || istype(attacking_item, /obj/item/melee/energy) || istype(attacking_item, /obj/item/gun/energy/plasmacutter) && w_class != 3)
|
|
to_chat(user, SPAN_NOTICE("You begin to shorten the barrel of \the [src]."))
|
|
if(loaded.len)
|
|
for(var/i in 1 to max_shells)
|
|
Fire(user, user) //will this work? //it will. we call it twice, for twice the FUN
|
|
user.visible_message(SPAN_DANGER("The shotgun goes off!"),
|
|
SPAN_DANGER("The shotgun goes off in your face!"))
|
|
|
|
return
|
|
if(attacking_item.use_tool(src, user, 30, volume = 50))
|
|
icon_state = "ishotgunsawn"
|
|
item_state = "ishotgunsawn"
|
|
w_class = WEIGHT_CLASS_NORMAL
|
|
force = 11
|
|
slot_flags &= ~SLOT_BACK
|
|
slot_flags |= (SLOT_BELT|SLOT_HOLSTER)
|
|
name = "sawn-off improvised shotgun"
|
|
to_chat(user, SPAN_WARNING("You shorten the barrel of \the [src]!"))
|
|
else
|
|
..()
|
|
|
|
/obj/item/gun/projectile/shotgun/improvised/sawn
|
|
name = "sawn-off improvised shotgun"
|
|
desc = "An improvised pipe assembly that can fire shotgun shells."
|
|
icon_state = "ishotgunsawn"
|
|
item_state = "ishotgunsawn"
|
|
slot_flags = SLOT_BELT|SLOT_HOLSTER
|
|
w_class = WEIGHT_CLASS_NORMAL
|
|
force = 11
|
|
|
|
// shotgun construction
|
|
|
|
/obj/item/stock
|
|
name = "rifle stock"
|
|
desc = "A classic rifle stock that doubles as a grip, roughly carved out of wood."
|
|
icon = 'icons/obj/improvised.dmi'
|
|
icon_state = "riflestock"
|
|
var/buildstate = 0
|
|
|
|
/obj/item/stock/feedback_hints(mob/user, distance, is_adjacent)
|
|
. += ..()
|
|
switch(buildstate)
|
|
if(1)
|
|
. += "It is carved in the shape of a pistol handle."
|
|
if(2)
|
|
. += "It has a receiver installed."
|
|
if(3)
|
|
. += "It has a pipe installed."
|
|
|
|
/obj/item/receivergun
|
|
name = "receiver"
|
|
desc = "A receiver and trigger assembly for a firearm."
|
|
icon = 'icons/obj/improvised.dmi'
|
|
icon_state = "receiver"
|
|
var/buildstate = 0
|
|
|
|
/obj/item/receivergun/update_icon()
|
|
icon_state = "ishotgun[buildstate]"
|
|
|
|
/obj/item/receivergun/feedback_hints(mob/user, distance, is_adjacent)
|
|
. += ..()
|
|
switch(buildstate)
|
|
if(1)
|
|
. += "It has a pipe segment installed."
|
|
if(2)
|
|
. += "It has a stock installed."
|
|
if(3)
|
|
. += "Its pieces are held together by tape roll."
|
|
|
|
/obj/item/receivergun/attackby(obj/item/attacking_item, mob/user)
|
|
if(istype(attacking_item, /obj/item/pipe))
|
|
if(buildstate == 0)
|
|
qdel(attacking_item)
|
|
to_chat(user, SPAN_NOTICE("You place the pipe and the receiver together."))
|
|
buildstate++
|
|
update_icon()
|
|
return
|
|
else if(istype(attacking_item, /obj/item/stock))
|
|
if(buildstate == 1)
|
|
qdel(attacking_item)
|
|
to_chat(user, SPAN_NOTICE("You add the stock to the assembly."))
|
|
buildstate++
|
|
update_icon()
|
|
return
|
|
else if(istype(attacking_item, /obj/item/tape_roll))
|
|
if(buildstate == 2)
|
|
qdel(attacking_item)
|
|
to_chat(user, SPAN_NOTICE("You strap the pieces together with tape."))
|
|
buildstate++
|
|
update_icon()
|
|
return
|
|
else if(attacking_item.tool_behaviour == TOOL_CABLECOIL)
|
|
var/obj/item/stack/cable_coil/C = attacking_item
|
|
if(buildstate == 3)
|
|
if(C.use(10))
|
|
to_chat(user, SPAN_NOTICE("You tie the lengths of cable to the pipegun, making a sling."))
|
|
new /obj/item/gun/projectile/shotgun/pump/rifle/magazine_fed/pipegun(get_turf(src))
|
|
qdel(src)
|
|
else
|
|
to_chat(user, SPAN_NOTICE("You need at least ten lengths of cable if you want to make a sling!"))
|
|
return
|
|
|
|
..()
|
|
|
|
//ghetto handgun, sprites by datberry
|
|
|
|
/obj/item/gun/projectile/improvised_handgun
|
|
name = "improvised handgun"
|
|
desc = "A common sight in an amateur's workshop, this is a simple- yet effective- improvised handgun."
|
|
max_shells = 7
|
|
recoil = 2
|
|
accuracy = -1
|
|
offhand_accuracy = 1
|
|
fire_delay = ROF_PISTOL
|
|
icon = 'icons/obj/guns/ipistol.dmi'
|
|
icon_state = "ipistol"
|
|
item_state = "ipistol"
|
|
caliber = ".45"
|
|
allowed_magazines = list(/obj/item/ammo_magazine/c45m)
|
|
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
|
|
fire_sound = 'sound/weapons/gunshot/gunshot_light.ogg'
|
|
load_method = MAGAZINE
|
|
jam_chance = 20
|
|
needspin = FALSE
|
|
|
|
/obj/item/gun/projectile/improvised_handgun/feedback_hints(mob/user, distance, is_adjacent)
|
|
. += ..()
|
|
switch(jam_chance)
|
|
if(1)
|
|
. += "All craftsmanship is of the highest quality."
|
|
if(2 to 25)
|
|
. += "All craftsmanship is of high quality."
|
|
if(26 to 50)
|
|
. += "All craftsmanship is of average quality."
|
|
if(51 to 75)
|
|
. += "All craftsmanship is of low quality."
|
|
if(100)
|
|
. += "All craftsmanship is of the lowest quality."
|
|
|
|
/obj/item/gun/projectile/improvised_handgun/loaded
|
|
magazine_type = /obj/item/ammo_magazine/c45m
|
|
|
|
/obj/item/stock/update_icon()
|
|
icon_state = "ipistol[buildstate]"
|
|
|
|
/obj/item/stock/attackby(obj/item/attacking_item, mob/user)
|
|
if(istype(attacking_item, /obj/item/material/hatchet))
|
|
if(buildstate == 0)
|
|
to_chat(user, SPAN_NOTICE("You carve the rifle stock."))
|
|
buildstate++
|
|
update_icon()
|
|
return
|
|
else if(istype(attacking_item, /obj/item/receivergun))
|
|
if(buildstate == 1)
|
|
qdel(attacking_item)
|
|
to_chat(user, SPAN_NOTICE("You add the receiver to the assembly."))
|
|
buildstate++
|
|
update_icon()
|
|
return
|
|
else if(istype(attacking_item, /obj/item/pipe))
|
|
if(buildstate == 2)
|
|
qdel(attacking_item)
|
|
to_chat(user, SPAN_NOTICE("You strap the pipe to the assembly."))
|
|
buildstate++
|
|
update_icon()
|
|
return
|
|
else if(attacking_item.tool_behaviour == TOOL_WELDER)
|
|
if(buildstate == 3)
|
|
var/obj/item/weldingtool/T = attacking_item
|
|
if(T.use(0,user))
|
|
if(!src || !T.isOn()) return
|
|
playsound(src.loc, 'sound/items/welder_pry.ogg', 100, 1)
|
|
to_chat(user, SPAN_NOTICE("You shorten the barrel with the welding tool."))
|
|
var/obj/item/gun/projectile/improvised_handgun/G = new(get_turf(src))
|
|
G.jam_chance = rand(1,100)
|
|
qdel(src)
|
|
..()
|
|
|
|
/obj/item/gun/projectile/automatic/improvised
|
|
name = "improvised machine pistol"
|
|
desc = "An improvised automatic handgun."
|
|
icon = 'icons/obj/guns/ismg.dmi'
|
|
icon_state = "ismg"
|
|
item_state = "ismg"
|
|
load_method = MAGAZINE
|
|
magazine_type = /obj/item/ammo_magazine/c45uzi
|
|
allowed_magazines = list(/obj/item/ammo_magazine/c45uzi)
|
|
max_shells = 16
|
|
caliber = ".45"
|
|
sel_mode = 1
|
|
accuracy = -1
|
|
fire_delay = ROF_PISTOL
|
|
burst = 3
|
|
burst_delay = 3
|
|
move_delay = 3
|
|
dispersion = list(5, 10, 15, 20)
|
|
jam_chance = 20
|
|
|
|
needspin = FALSE
|
|
|
|
firemodes = list()
|