mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 19:47:22 +01:00
Merge remote-tracking branch 'upstream/master' into botany-rework
This commit is contained in:
@@ -188,3 +188,9 @@
|
||||
//Behavior for magazines
|
||||
/obj/item/ammo_box/magazine/proc/ammo_count()
|
||||
return stored_ammo.len
|
||||
|
||||
/obj/item/ammo_box/magazine/proc/empty_magazine()
|
||||
var/turf_mag = get_turf(src)
|
||||
for(var/obj/item/ammo in stored_ammo)
|
||||
ammo.forceMove(turf_mag)
|
||||
stored_ammo -= ammo
|
||||
@@ -375,3 +375,9 @@
|
||||
desc = "A cap for children toys."
|
||||
caliber = "caps"
|
||||
projectile_type = /obj/item/projectile/bullet/cap
|
||||
|
||||
/obj/item/ammo_casing/laser
|
||||
desc = "An experimental laser casing."
|
||||
caliber = "laser"
|
||||
projectile_type = /obj/item/projectile/beam/laser
|
||||
icon_state = "lasercasing"
|
||||
|
||||
@@ -437,3 +437,12 @@
|
||||
/obj/item/ammo_box/magazine/toy/m762/update_icon()
|
||||
..()
|
||||
icon_state = "a762-[round(ammo_count(),10)]"
|
||||
|
||||
/obj/item/ammo_box/magazine/laser
|
||||
name = "encased laser projector magazine"
|
||||
desc = "Fits experimental laser ammo casings."
|
||||
icon_state = "laser"
|
||||
ammo_type = /obj/item/ammo_casing/laser
|
||||
origin_tech = "combat=3"
|
||||
caliber = "laser"
|
||||
max_ammo = 20
|
||||
|
||||
@@ -26,6 +26,9 @@
|
||||
|
||||
/obj/item/ammo_casing/magic/chaos
|
||||
projectile_type = /obj/item/projectile/magic
|
||||
|
||||
/obj/item/ammo_casing/magic/spellblade
|
||||
projectile_type = /obj/item/projectile/magic/spellblade
|
||||
|
||||
/obj/item/ammo_casing/magic/chaos/newshot()
|
||||
projectile_type = pick(typesof(/obj/item/projectile/magic))
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
ammo_type = /obj/item/ammo_casing/magic/change
|
||||
icon_state = "staffofchange"
|
||||
item_state = "staffofchange"
|
||||
fire_sound = "sound/magic/Staff_Change.ogg"
|
||||
|
||||
/obj/item/weapon/gun/magic/staff/animate
|
||||
name = "staff of animation"
|
||||
@@ -15,6 +16,7 @@
|
||||
ammo_type = /obj/item/ammo_casing/magic/animate
|
||||
icon_state = "staffofanimation"
|
||||
item_state = "staffofanimation"
|
||||
fire_sound = "sound/magic/Staff_animation.ogg"
|
||||
|
||||
/obj/item/weapon/gun/magic/staff/healing
|
||||
name = "staff of healing"
|
||||
@@ -22,6 +24,7 @@
|
||||
ammo_type = /obj/item/ammo_casing/magic/heal
|
||||
icon_state = "staffofhealing"
|
||||
item_state = "staffofhealing"
|
||||
fire_sound = "sound/magic/Staff_Healing.ogg"
|
||||
|
||||
/obj/item/weapon/gun/magic/staff/healing/handle_suicide() //Stops people trying to commit suicide to heal themselves
|
||||
return
|
||||
@@ -35,6 +38,7 @@
|
||||
max_charges = 10
|
||||
recharge_rate = 2
|
||||
no_den_usage = 1
|
||||
fire_sound = "sound/magic/Staff_Chaos.ogg"
|
||||
|
||||
/obj/item/weapon/gun/magic/staff/door
|
||||
name = "staff of door creation"
|
||||
@@ -45,16 +49,17 @@
|
||||
max_charges = 10
|
||||
recharge_rate = 2
|
||||
no_den_usage = 1
|
||||
fire_sound = "sound/magic/Staff_Door.ogg"
|
||||
|
||||
/obj/item/weapon/gun/magic/staff/honk
|
||||
name = "staff of the honkmother"
|
||||
desc = "Honk"
|
||||
fire_sound = "sound/items/airhorn.ogg"
|
||||
ammo_type = /obj/item/ammo_casing/magic/honk
|
||||
icon_state = "honker"
|
||||
item_state = "honker"
|
||||
max_charges = 4
|
||||
recharge_rate = 8
|
||||
fire_sound = "sound/items/airhorn.ogg"
|
||||
|
||||
/obj/item/weapon/gun/magic/staff/focus
|
||||
name = "mental focus"
|
||||
@@ -63,3 +68,23 @@
|
||||
icon_state = "focus"
|
||||
item_state = "focus"
|
||||
ammo_type = list(/obj/item/ammo_casing/forcebolt)
|
||||
|
||||
/obj/item/weapon/gun/magic/staff/spellblade
|
||||
name = "spellblade"
|
||||
desc = "A deadly combination of laziness and boodlust, this blade allows the user to dismember their enemies without all the hard work of actually swinging the sword."
|
||||
fire_sound = "sound/magic/Fireball.ogg"
|
||||
ammo_type = /obj/item/ammo_casing/magic/spellblade
|
||||
icon_state = "spellblade"
|
||||
item_state = "spellblade"
|
||||
hitsound = 'sound/weapons/rapierhit.ogg'
|
||||
force = 20
|
||||
armour_penetration = 75
|
||||
block_chance = 50
|
||||
sharp = 1
|
||||
edge = 1
|
||||
max_charges = 4
|
||||
|
||||
/obj/item/weapon/gun/magic/staff/spellblade/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance, damage, attack_type)
|
||||
if(attack_type == PROJECTILE_ATTACK)
|
||||
final_block_chance = 0
|
||||
return ..()
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
/obj/item/weapon/gun/magic/wand/death
|
||||
name = "wand of death"
|
||||
desc = "This deadly wand overwhelms the victim's body with pure energy, slaying them without fail."
|
||||
fire_sound = "sound/magic/WandoDeath.ogg"
|
||||
ammo_type = /obj/item/ammo_casing/magic/death
|
||||
icon_state = "deathwand"
|
||||
max_charges = 3 //3, 2, 2, 1
|
||||
@@ -79,6 +80,7 @@
|
||||
name = "wand of resurrection"
|
||||
desc = "This wand uses healing magics to heal and revive. They are rarely utilized within the Wizard Federation for some reason."
|
||||
ammo_type = /obj/item/ammo_casing/magic/heal
|
||||
fire_sound = "sound/magic/Staff_Healing.ogg"
|
||||
icon_state = "revivewand"
|
||||
max_charges = 3 //3, 2, 2, 1
|
||||
|
||||
@@ -96,6 +98,7 @@
|
||||
name = "wand of polymorph"
|
||||
desc = "This wand is attuned to chaos and will radically alter the victim's form."
|
||||
ammo_type = /obj/item/ammo_casing/magic/change
|
||||
fire_sound = "sound/magic/Staff_Change.ogg"
|
||||
icon_state = "polywand"
|
||||
max_charges = 10 //10, 5, 5, 4
|
||||
|
||||
@@ -115,6 +118,7 @@
|
||||
icon_state = "telewand"
|
||||
max_charges = 10 //10, 5, 5, 4
|
||||
no_den_usage = 1
|
||||
fire_sound = "sound/magic/Wand_Teleport.ogg"
|
||||
|
||||
/obj/item/weapon/gun/magic/wand/teleport/zap_self(mob/living/user)
|
||||
do_teleport(user, user, 10)
|
||||
@@ -132,6 +136,7 @@
|
||||
name = "wand of door creation"
|
||||
desc = "This particular wand can create doors in any wall for the unscrupulous wizard who shuns teleportation magics."
|
||||
ammo_type = /obj/item/ammo_casing/magic/door
|
||||
fire_sound = "sound/magic/Staff_Door.ogg"
|
||||
icon_state = "doorwand"
|
||||
max_charges = 20 //20, 10, 10, 7
|
||||
|
||||
@@ -147,6 +152,7 @@
|
||||
/obj/item/weapon/gun/magic/wand/fireball
|
||||
name = "wand of fireball"
|
||||
desc = "This wand shoots scorching balls of fire that explode into destructive flames."
|
||||
fire_sound = "sound/magic/Fireball.ogg"
|
||||
ammo_type = /obj/item/ammo_casing/magic/fireball
|
||||
icon_state = "firewand"
|
||||
max_charges = 8 //8, 4, 4, 3
|
||||
|
||||
@@ -249,3 +249,15 @@
|
||||
/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag)
|
||||
..()
|
||||
empty_alarm()
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/lasercarbine
|
||||
name = "\improper IK-60 Laser Carbine"
|
||||
desc = "An experimental carbine. Uses encased laser projectors as ammunition."//we need to uncouple the toroidal resistance dejammers
|
||||
icon_state = "lasercarbine"
|
||||
item_state = "laser"
|
||||
w_class = 3
|
||||
origin_tech = "combat=5;materials=5"
|
||||
mag_type = /obj/item/ammo_box/magazine/laser
|
||||
fire_sound = 'sound/weapons/emitter2.ogg'
|
||||
can_suppress = 0
|
||||
burst_size = 2
|
||||
|
||||
@@ -0,0 +1,98 @@
|
||||
/obj/item/weapon/gun/projectile/bow
|
||||
name = "bow"
|
||||
desc = "A sturdy bow made out of wood and reinforced with iron."
|
||||
icon_state = "bow_unloaded"
|
||||
item_state = "bow"
|
||||
fire_sound = 'sound/weapons/grenadelaunch.ogg'
|
||||
mag_type = /obj/item/ammo_box/magazine/internal/bow
|
||||
flags = HANDSLOW
|
||||
weapon_weight = WEAPON_HEAVY
|
||||
var/draw_sound = 'sound/weapons/draw_bow.ogg'
|
||||
var/ready_to_fire = 0
|
||||
var/slowdown_when_ready = 2
|
||||
|
||||
/obj/item/weapon/gun/projectile/bow/update_icon()
|
||||
if(magazine.ammo_count() && !ready_to_fire)
|
||||
icon_state = "bow_loaded"
|
||||
else if(ready_to_fire)
|
||||
icon_state = "bow_firing"
|
||||
slowdown = slowdown_when_ready
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
slowdown = initial(slowdown)
|
||||
|
||||
/obj/item/weapon/gun/projectile/bow/dropped(mob/user)
|
||||
if(magazine && magazine.ammo_count())
|
||||
magazine.empty_magazine()
|
||||
ready_to_fire = FALSE
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/gun/projectile/bow/attack_self(mob/living/user)
|
||||
if(!ready_to_fire && magazine.ammo_count())
|
||||
ready_to_fire = TRUE
|
||||
playsound(user, draw_sound, 100, 1)
|
||||
update_icon()
|
||||
else
|
||||
ready_to_fire = FALSE
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/gun/projectile/bow/attackby(obj/item/A, mob/user, params)
|
||||
var/num_loaded = magazine.attackby(A, user, params, 1)
|
||||
if(num_loaded)
|
||||
to_chat(user, "<span class='notice'>You ready \the [A] into \the [src].</span>")
|
||||
update_icon()
|
||||
chamber_round()
|
||||
|
||||
/obj/item/weapon/gun/projectile/bow/can_shoot()
|
||||
. = ..()
|
||||
if(!ready_to_fire)
|
||||
return FALSE
|
||||
|
||||
/obj/item/weapon/gun/projectile/bow/shoot_with_empty_chamber(mob/living/user as mob|obj)
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/bow/process_chamber(eject_casing = 0, empty_chamber = 1)
|
||||
. = ..()
|
||||
ready_to_fire = FALSE
|
||||
update_icon()
|
||||
|
||||
// ammo
|
||||
/obj/item/ammo_box/magazine/internal/bow
|
||||
name = "bow internal magazine"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/arrow
|
||||
caliber = "arrow"
|
||||
max_ammo = 1
|
||||
|
||||
|
||||
/obj/item/projectile/bullet/reusable/arrow
|
||||
name = "arrow"
|
||||
icon_state = "arrow"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/arrow
|
||||
range = 10
|
||||
damage = 25
|
||||
damage_type = BRUTE
|
||||
|
||||
/obj/item/ammo_casing/caseless/arrow
|
||||
name = "arrow"
|
||||
desc = "Stab, stab, stab."
|
||||
icon_state = "arrow"
|
||||
force = 10
|
||||
sharp = 1
|
||||
projectile_type = /obj/item/projectile/bullet/reusable/arrow
|
||||
caliber = "arrow"
|
||||
|
||||
//quiver
|
||||
/obj/item/weapon/storage/backpack/quiver
|
||||
name = "quiver"
|
||||
desc = "A quiver for holding arrows."
|
||||
icon_state = "quiver"
|
||||
item_state = "quiver"
|
||||
storage_slots = 20
|
||||
can_hold = list(
|
||||
/obj/item/ammo_casing/caseless/arrow
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/backpack/quiver/full/New()
|
||||
..()
|
||||
for(var/i in 1 to storage_slots)
|
||||
new /obj/item/ammo_casing/caseless/arrow(src)
|
||||
@@ -53,6 +53,7 @@
|
||||
damage = 70
|
||||
stun = 5
|
||||
weaken = 5
|
||||
dismemberment = 50
|
||||
armour_penetration = 50
|
||||
var/breakthings = TRUE
|
||||
|
||||
@@ -82,6 +83,7 @@
|
||||
armour_penetration = 0
|
||||
nodamage = 1
|
||||
stun = 0
|
||||
dismemberment = 0
|
||||
weaken = 0
|
||||
breakthings = FALSE
|
||||
|
||||
@@ -113,6 +115,7 @@
|
||||
armour_penetration = 15
|
||||
damage = 15
|
||||
stun = 0
|
||||
dismemberment = 0
|
||||
weaken = 0
|
||||
breakthings = FALSE
|
||||
|
||||
@@ -142,5 +145,6 @@
|
||||
damage = 60
|
||||
forcedodge = 1
|
||||
stun = 0
|
||||
dismemberment = 0
|
||||
weaken = 0
|
||||
breakthings = FALSE
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
var/jitter = 0
|
||||
var/embed = 0 // whether or not the projectile can embed itself in the mob
|
||||
var/forcedodge = 0 //to pass through everything
|
||||
var/dismemberment = 0 //The higher the number, the greater the bonus to dismembering. 0 will not dismember at all.
|
||||
|
||||
var/log = 1 //whether print to admin attack logs or just keep it in the diary
|
||||
|
||||
|
||||
@@ -17,6 +17,12 @@
|
||||
damage = 10
|
||||
damage_type = BRUTE
|
||||
nodamage = 0
|
||||
|
||||
//explosion values
|
||||
var/exp_heavy = 0
|
||||
var/exp_light = 2
|
||||
var/exp_flash = 3
|
||||
var/exp_fire = 2
|
||||
|
||||
/obj/item/projectile/magic/death/on_hit(var/mob/living/carbon/G)
|
||||
. = ..()
|
||||
@@ -27,11 +33,16 @@
|
||||
/obj/item/projectile/magic/fireball/Range()
|
||||
var/turf/T1 = get_step(src,turn(dir, -45))
|
||||
var/turf/T2 = get_step(src,turn(dir, 45))
|
||||
var/turf/T3 = get_step(src,dir)
|
||||
var/mob/living/L = locate(/mob/living) in T1 //if there's a mob alive in our front right diagonal, we hit it.
|
||||
if(L && L.stat != DEAD)
|
||||
Bump(L) //Magic Bullet #teachthecontroversy
|
||||
return
|
||||
L = locate(/mob/living) in T2
|
||||
if(L && L.stat != DEAD)
|
||||
Bump(L)
|
||||
return
|
||||
L = locate(/mob/living) in T3
|
||||
if(L && L.stat != DEAD)
|
||||
Bump(L)
|
||||
return
|
||||
@@ -44,6 +55,14 @@
|
||||
if(ismob(target)) //multiple flavors of pain
|
||||
var/mob/living/M = target
|
||||
M.take_overall_damage(0,10) //between this 10 burn, the 10 brute, the explosion brute, and the onfire burn, your at about 65 damage if you stop drop and roll immediately
|
||||
|
||||
|
||||
/obj/item/projectile/magic/fireball/infernal
|
||||
name = "infernal fireball"
|
||||
exp_heavy = -1
|
||||
exp_light = -1
|
||||
exp_flash = 4
|
||||
exp_fire= 5
|
||||
|
||||
/obj/item/projectile/magic/resurrection
|
||||
name = "bolt of resurrection"
|
||||
@@ -266,3 +285,12 @@ proc/wabbajack(mob/living/M)
|
||||
// Change our allegiance!
|
||||
var/mob/living/simple_animal/hostile/mimic/copy/C = change
|
||||
C.ChangeOwner(firer)
|
||||
|
||||
/obj/item/projectile/magic/spellblade
|
||||
name = "blade energy"
|
||||
icon_state = "lavastaff"
|
||||
damage = 15
|
||||
damage_type = BURN
|
||||
flag = "magic"
|
||||
dismemberment = 50
|
||||
nodamage = 0
|
||||
@@ -299,6 +299,7 @@ obj/item/projectile/kinetic/New()
|
||||
damage_type = BRUTE
|
||||
damage = 5
|
||||
range = 3
|
||||
dismemberment = 20
|
||||
|
||||
/obj/item/projectile/plasma/New()
|
||||
var/turf/proj_turf = get_turf(src)
|
||||
|
||||
Reference in New Issue
Block a user