mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-24 04:28:12 +01:00
Whitespace Standardization [MDB IGNORE] (#15748)
* Update settings * Whitespace changes * Comment out merger hooks in gitattributes Corrupt maps would have to be resolved in repo before hooks could be updated * Revert "Whitespace changes" This reverts commitafbdd1d844. * Whitespace again minus example * Gitignore example changelog * Restore changelog merge setting * Keep older dmi hook attribute until hooks can be updated * update vscode settings too * Renormalize remaining * Revert "Gitignore example changelog" This reverts commitde22ad375d. * Attempt to normalize example.yml (and another file I guess) * Try again
This commit is contained in:
@@ -1,17 +1,17 @@
|
||||
/obj/item/projectile/animate
|
||||
name = "bolt of animation"
|
||||
icon_state = "ice_1"
|
||||
damage = 0
|
||||
damage_type = BURN
|
||||
nodamage = 1
|
||||
check_armour = "energy"
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#55AAFF"
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/animate/Bump(var/atom/change)
|
||||
if((istype(change, /obj/item) || istype(change, /obj/structure)) && !is_type_in_list(change, protected_objects))
|
||||
var/obj/O = change
|
||||
new /mob/living/simple_mob/hostile/mimic/copy(O.loc, O, firer)
|
||||
..()
|
||||
/obj/item/projectile/animate
|
||||
name = "bolt of animation"
|
||||
icon_state = "ice_1"
|
||||
damage = 0
|
||||
damage_type = BURN
|
||||
nodamage = 1
|
||||
check_armour = "energy"
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#55AAFF"
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/animate/Bump(var/atom/change)
|
||||
if((istype(change, /obj/item) || istype(change, /obj/structure)) && !is_type_in_list(change, protected_objects))
|
||||
var/obj/O = change
|
||||
new /mob/living/simple_mob/hostile/mimic/copy(O.loc, O, firer)
|
||||
..()
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,471 +1,471 @@
|
||||
/obj/item/projectile/bullet
|
||||
name = "bullet"
|
||||
icon_state = "bullet"
|
||||
fire_sound = 'sound/weapons/Gunshot4.ogg'
|
||||
damage = 60
|
||||
damage_type = BRUTE
|
||||
nodamage = 0
|
||||
check_armour = "bullet"
|
||||
embed_chance = 20 //Modified in the actual embed process, but this should keep embed chance about the same
|
||||
sharp = TRUE
|
||||
hitsound_wall = "ricochet"
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect
|
||||
excavation_amount = 20
|
||||
var/mob_passthrough_check = 0
|
||||
hud_state = "pistol_lightap"
|
||||
hud_state_empty = "pistol_empty" // Just in case we somehow have no hud_state_empty defined
|
||||
|
||||
muzzle_type = /obj/effect/projectile/muzzle/bullet
|
||||
|
||||
/obj/item/projectile/bullet/on_hit(var/atom/target, var/blocked = 0)
|
||||
if (..(target, blocked))
|
||||
var/mob/living/L = target
|
||||
shake_camera(L, 3, 2)
|
||||
|
||||
/obj/item/projectile/bullet/attack_mob(var/mob/living/target_mob, var/distance, var/miss_modifier)
|
||||
if(penetrating > 0 && damage > 20 && prob(damage))
|
||||
mob_passthrough_check = 1
|
||||
else
|
||||
mob_passthrough_check = 0
|
||||
return ..()
|
||||
|
||||
/obj/item/projectile/bullet/can_embed()
|
||||
//prevent embedding if the projectile is passing through the mob
|
||||
if(mob_passthrough_check)
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/obj/item/projectile/bullet/check_penetrate(var/atom/A)
|
||||
if(!A || !A.density) return 1 //if whatever it was got destroyed when we hit it, then I guess we can just keep going
|
||||
|
||||
if(istype(A, /obj/mecha))
|
||||
return 1 //mecha have their own penetration handling
|
||||
|
||||
if(ismob(A))
|
||||
if(!mob_passthrough_check)
|
||||
return 0
|
||||
if(iscarbon(A))
|
||||
damage *= 0.7 //squishy mobs absorb KE
|
||||
return 1
|
||||
|
||||
var/chance = damage
|
||||
if(istype(A, /turf/simulated/wall))
|
||||
var/turf/simulated/wall/W = A
|
||||
chance = round(damage/W.material.integrity*180)
|
||||
else if(istype(A, /obj/machinery/door))
|
||||
var/obj/machinery/door/D = A
|
||||
chance = round(damage/D.maxhealth*180)
|
||||
if(D.glass) chance *= 2
|
||||
else if(istype(A, /obj/structure/girder))
|
||||
chance = 100
|
||||
|
||||
if(prob(chance))
|
||||
if(A.opacity)
|
||||
//display a message so that people on the other side aren't so confused
|
||||
A.visible_message("<span class='warning'>\The [src] pierces through \the [A]!</span>")
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
/* short-casing projectiles, like the kind used in pistols or SMGs */
|
||||
|
||||
/obj/item/projectile/bullet/pistol // 9mm pistols and most SMGs. Sacrifice power for capacity.
|
||||
fire_sound = 'sound/weapons/gunshot2.ogg'
|
||||
damage = 20
|
||||
hud_state = "pistol"
|
||||
hud_state_empty = "pistol_empty"
|
||||
|
||||
/obj/item/projectile/bullet/pistol/ap
|
||||
damage = 15
|
||||
armor_penetration = 30
|
||||
hud_state = "pistol_light_ap"
|
||||
|
||||
/obj/item/projectile/bullet/pistol/hp
|
||||
damage = 25
|
||||
armor_penetration = -50
|
||||
hud_state = "pistol_ap"
|
||||
|
||||
/obj/item/projectile/bullet/pistol/medium // .45 (and maybe .40 if it ever gets added) caliber security pistols. Balance between capacity and power.
|
||||
fire_sound = 'sound/weapons/gunshot3.ogg' // Snappier sound.
|
||||
damage = 25
|
||||
hud_state = "pistol"
|
||||
|
||||
/obj/item/projectile/bullet/pistol/medium/ap
|
||||
damage = 20
|
||||
armor_penetration = 15
|
||||
hud_state = "pistol_light_ap"
|
||||
|
||||
/obj/item/projectile/bullet/pistol/medium/hp
|
||||
damage = 30
|
||||
armor_penetration = -50
|
||||
hud_state = "pistol_ap"
|
||||
|
||||
/obj/item/projectile/bullet/pistol/strong // .357 and .44 caliber stuff. High power pistols like the Mateba or Desert Eagle. Sacrifice capacity for power.
|
||||
fire_sound = 'sound/weapons/gunshot4.ogg'
|
||||
damage = 60
|
||||
hud_state = "pistol_heavy"
|
||||
|
||||
/obj/item/projectile/bullet/pistol/rubber/strong // "Rubber" bullets for high power pistols.
|
||||
fire_sound = 'sound/weapons/gunshot3.ogg' // Rubber shots have less powder, but these still have more punch than normal rubber shot.
|
||||
damage = 10
|
||||
agony = 60
|
||||
embed_chance = 0
|
||||
sharp = FALSE
|
||||
check_armour = "melee"
|
||||
hud_state = "pistol_special"
|
||||
|
||||
/obj/item/projectile/bullet/pistol/rubber // "Rubber" bullets for all other pistols.
|
||||
name = "rubber bullet"
|
||||
damage = 5
|
||||
agony = 40
|
||||
embed_chance = 0
|
||||
sharp = FALSE
|
||||
check_armour = "melee"
|
||||
hud_state = "pistol_special"
|
||||
fire_sound ='sound/weapons/Gunshot_pathetic.ogg' // Rubber shots have less powder in the casing.
|
||||
|
||||
/* shotgun projectiles */
|
||||
|
||||
/obj/item/projectile/bullet/shotgun
|
||||
name = "slug"
|
||||
fire_sound = 'sound/weapons/Gunshot_shotgun.ogg'
|
||||
damage = 50
|
||||
armor_penetration = 20
|
||||
hud_state = "shotgun_slug"
|
||||
hud_state_empty = "shotgun_empty"
|
||||
|
||||
/obj/item/projectile/bullet/shotgun/beanbag //because beanbags are not bullets
|
||||
name = "beanbag"
|
||||
damage = 20
|
||||
agony = 60
|
||||
embed_chance = 0
|
||||
sharp = FALSE
|
||||
check_armour = "melee"
|
||||
hud_state = "shotgun_beanbag"
|
||||
|
||||
//Should do about 80 damage at 1 tile distance (adjacent), and 50 damage at 3 tiles distance.
|
||||
//Overall less damage than slugs in exchange for more damage at very close range and more embedding
|
||||
/obj/item/projectile/bullet/pellet/shotgun
|
||||
name = "shrapnel"
|
||||
fire_sound = 'sound/weapons/Gunshot_shotgun.ogg'
|
||||
damage = 13
|
||||
pellets = 6
|
||||
range_step = 1
|
||||
spread_step = 10
|
||||
hud_state = "shotgun_buckshot"
|
||||
|
||||
/obj/item/projectile/bullet/pellet/shotgun/flak
|
||||
damage = 2 //The main weapon using these fires four at a time, usually with different destinations. Usually.
|
||||
range_step = 2
|
||||
spread_step = 30
|
||||
armor_penetration = 10
|
||||
hud_state = "shotgun_flechette"
|
||||
|
||||
//EMP shotgun 'slug', it's basically a beanbag that pops a tiny emp when it hits. //Not currently used
|
||||
/obj/item/projectile/bullet/shotgun/ion
|
||||
name = "ion slug"
|
||||
fire_sound = 'sound/weapons/Laser.ogg' // Really? We got nothing better than this?
|
||||
damage = 15
|
||||
embed_chance = 0
|
||||
sharp = FALSE
|
||||
check_armour = "melee"
|
||||
hud_state = "shotgun_ion"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/bullet/shotgun/ion/on_hit(var/atom/target, var/blocked = 0)
|
||||
..()
|
||||
empulse(target, 0, 0, 0, 0) //Only affects what it hits
|
||||
return 1
|
||||
|
||||
|
||||
/* "Rifle" rounds */
|
||||
|
||||
/obj/item/projectile/bullet/rifle
|
||||
fire_sound = 'sound/weapons/Gunshot_generic_rifle.ogg'
|
||||
armor_penetration = 15
|
||||
penetrating = 1
|
||||
hud_state = "rifle"
|
||||
hud_state_empty = "rifle_empty"
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a762
|
||||
fire_sound = 'sound/weapons/Gunshot_heavy.ogg'
|
||||
damage = 35
|
||||
hud_state = "rifle_heavy"
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a762/sniper // Hitscan specifically for sniper ammo; to be implimented at a later date, probably for the SVD. -Ace
|
||||
fire_sound = 'sound/weapons/Gunshot_sniper.ogg'
|
||||
hitscan = 1 //so the ammo isn't useless as a sniper weapon
|
||||
hud_state = "hivelo"
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a762/ap
|
||||
damage = 30
|
||||
armor_penetration = 50 // At 30 or more armor, this will do more damage than standard rounds.
|
||||
hud_state = "rifle_ap"
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a762/hp
|
||||
damage = 40
|
||||
armor_penetration = -50
|
||||
penetrating = 0
|
||||
hud_state = "hivelo_iff"
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a762/hunter // Optimized for killing simple animals and not people, because Balance(tm)
|
||||
damage = 20
|
||||
SA_bonus_damage = 50 // 70 total on animals.
|
||||
SA_vulnerability = SA_ANIMAL
|
||||
hud_state = "rifle_heavy"
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a545
|
||||
fire_sound = 'sound/weapons/Gunshot_light.ogg'
|
||||
damage = 25
|
||||
hud_state = "rifle"
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a545/ap
|
||||
damage = 20
|
||||
armor_penetration = 50 // At 40 or more armor, this will do more damage than standard rounds.
|
||||
hud_state = "rifle_ap"
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a545/hp
|
||||
damage = 35
|
||||
armor_penetration = -50
|
||||
penetrating = 0
|
||||
hud_state = "hivelo_iff"
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a545/hunter
|
||||
damage = 15
|
||||
SA_bonus_damage = 35 // 50 total on animals.
|
||||
SA_vulnerability = SA_ANIMAL
|
||||
hud_state = "rifle_heavy"
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a145 // 14.5�114mm is bigger than a .50 BMG round.
|
||||
fire_sound = 'sound/weapons/Gunshot_cannon.ogg' // This is literally an anti-tank rifle caliber. It better sound like a fucking cannon.
|
||||
damage = 80
|
||||
stun = 3
|
||||
weaken = 3
|
||||
penetrating = 5
|
||||
armor_penetration = 80
|
||||
hitscan = 1 //so the PTR isn't useless as a sniper weapon
|
||||
hud_state = "sniper"
|
||||
|
||||
icon_state = "bullet_alt"
|
||||
tracer_type = /obj/effect/projectile/tracer/cannon
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a145/highvel
|
||||
damage = 50
|
||||
stun = 1
|
||||
weaken = 0
|
||||
penetrating = 15
|
||||
armor_penetration = 90
|
||||
hud_state = "sniper_flak"
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a44rifle
|
||||
fire_sound = 'sound/weapons/gunshot4.ogg'
|
||||
damage = 50
|
||||
hud_state = "revolver"
|
||||
|
||||
/* Miscellaneous */
|
||||
|
||||
/obj/item/projectile/bullet/suffocationbullet//How does this even work?
|
||||
name = "co bullet"
|
||||
damage = 20
|
||||
damage_type = OXY
|
||||
hud_state = "pistol_tranq"
|
||||
|
||||
/obj/item/projectile/bullet/cyanideround
|
||||
name = "poison bullet"
|
||||
damage = 40
|
||||
damage_type = TOX
|
||||
hud_state = "pistol_tranq"
|
||||
|
||||
/obj/item/projectile/bullet/burstbullet
|
||||
name = "exploding bullet"
|
||||
fire_sound = 'sound/effects/Explosion1.ogg'
|
||||
damage = 20
|
||||
embed_chance = 0
|
||||
edge = TRUE
|
||||
hud_state = "pistol_fire"
|
||||
|
||||
/obj/item/projectile/bullet/burstbullet/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(isturf(target))
|
||||
explosion(target, -1, 0, 2)
|
||||
..()
|
||||
|
||||
/* Incendiary */
|
||||
|
||||
/obj/item/projectile/bullet/incendiary
|
||||
name = "incendiary bullet"
|
||||
icon_state = "bullet_alt"
|
||||
damage = 15
|
||||
damage_type = BURN
|
||||
incendiary = 0.5
|
||||
flammability = 2
|
||||
hud_state = "pistol_fire"
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/flamethrower
|
||||
name = "ball of fire"
|
||||
desc = "Don't stand in the fire."
|
||||
icon_state = "fireball"
|
||||
damage = 10
|
||||
embed_chance = 0
|
||||
incendiary = 2
|
||||
flammability = 4
|
||||
agony = 30
|
||||
range = 4
|
||||
vacuum_traversal = 0
|
||||
hud_state = "flame"
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/flamethrower/after_move()
|
||||
..()
|
||||
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
if(istype(T))
|
||||
for(var/obj/effect/plant/Victim in T)
|
||||
if(prob(max(20, 100 - (Victim.seed.get_trait(TRAIT_ENDURANCE))))) // Chance to immediately kill a vine or rampant growth, minimum of 20%.
|
||||
Victim.die_off()
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/flamethrower/large
|
||||
damage = 5
|
||||
incendiary = 3
|
||||
flammability = 2
|
||||
range = 6
|
||||
hud_state = "flame"
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/flamethrower/tiny
|
||||
damage = 2
|
||||
incendiary = 0
|
||||
flammability = 2
|
||||
modifier_type_to_apply = /datum/modifier/fire/stack_managed/weak
|
||||
modifier_duration = 20 SECONDS
|
||||
range = 6
|
||||
agony = 0
|
||||
hud_state = "flame"
|
||||
|
||||
/* Practice rounds and blanks */
|
||||
|
||||
/obj/item/projectile/bullet/practice
|
||||
damage = 5
|
||||
hud_state = "smg_light"
|
||||
|
||||
/obj/item/projectile/bullet/pistol/cap // Just the primer, such as a cap gun.
|
||||
name = "cap"
|
||||
damage_type = HALLOSS
|
||||
fire_sound = 'sound/effects/snap.ogg'
|
||||
damage = 0
|
||||
nodamage = 1
|
||||
embed_chance = 0
|
||||
sharp = FALSE
|
||||
hud_state = "monkey"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/bullet/pistol/cap/process()
|
||||
loc = null
|
||||
qdel(src)
|
||||
|
||||
/obj/item/projectile/bullet/blank
|
||||
name = "blank"
|
||||
damage_type = HALLOSS
|
||||
fire_sound = 'sound/weapons/Gunshot_generic_rifle.ogg' // Blanks still make loud noises.
|
||||
damage = 0
|
||||
nodamage = 1
|
||||
embed_chance = 0
|
||||
sharp = FALSE
|
||||
hud_state = "smg_light"
|
||||
|
||||
/* BB Rounds */
|
||||
/obj/item/projectile/bullet/bb // Generic single BB
|
||||
name = "BB"
|
||||
damage = 0
|
||||
agony = 0
|
||||
embed_chance = 0
|
||||
sharp = FALSE
|
||||
silenced = TRUE
|
||||
hud_state = "pistol_light"
|
||||
|
||||
/obj/item/projectile/bullet/pellet/shotgun/bb // Shotgun
|
||||
name = "BB"
|
||||
damage = 0
|
||||
agony = 0
|
||||
embed_chance = 0
|
||||
sharp = FALSE
|
||||
pellets = 6
|
||||
range_step = 1
|
||||
spread_step = 10
|
||||
silenced = TRUE
|
||||
hud_state = "pistol_light"
|
||||
|
||||
/* toy projectiles */
|
||||
/obj/item/projectile/bullet/cap
|
||||
name = "cap"
|
||||
desc = "SNAP!"
|
||||
damage = 0 // It's a damn toy.
|
||||
embed_chance = 0
|
||||
nodamage = TRUE
|
||||
sharp = FALSE
|
||||
damage_type = HALLOSS
|
||||
impact_effect_type = null
|
||||
fire_sound = 'sound/effects/snap.ogg'
|
||||
combustion = FALSE
|
||||
hud_state = "pistol_light"
|
||||
|
||||
/obj/item/projectile/bullet/cap/process()
|
||||
loc = null
|
||||
qdel(src)
|
||||
|
||||
/obj/item/projectile/bullet/foam_dart
|
||||
name = "foam dart"
|
||||
desc = "I hope you're wearing eye protection."
|
||||
damage = 0 // It's a damn toy.
|
||||
embed_chance = 0
|
||||
nodamage = TRUE
|
||||
sharp = FALSE
|
||||
damage_type = HALLOSS
|
||||
impact_effect_type = null
|
||||
fire_sound = 'sound/items/syringeproj.ogg'
|
||||
combustion = FALSE
|
||||
icon = 'icons/obj/gun_toy.dmi'
|
||||
icon_state = "foamdart_proj"
|
||||
range = 15
|
||||
hud_state = "grenade_dummy"
|
||||
|
||||
/obj/item/projectile/bullet/foam_dart/on_impact(var/atom/A)
|
||||
. = ..()
|
||||
var/turf/T = get_turf(loc)
|
||||
if(istype(T))
|
||||
new /obj/item/ammo_casing/afoam_dart(get_turf(loc))
|
||||
|
||||
/obj/item/projectile/bullet/foam_dart/on_range(var/atom/A)
|
||||
. = ..()
|
||||
var/turf/T = get_turf(loc)
|
||||
if(istype(T))
|
||||
new /obj/item/ammo_casing/afoam_dart(get_turf(loc))
|
||||
|
||||
/obj/item/projectile/bullet/foam_dart_riot
|
||||
name = "riot foam dart"
|
||||
desc = "Whose smart idea was it to use toys as crowd control? Ages 18 and up."
|
||||
damage = 0 // It's a damn toy.
|
||||
embed_chance = 0
|
||||
agony = 50 // The riot part of the riot dart
|
||||
nodamage = TRUE
|
||||
sharp = FALSE
|
||||
damage_type = HALLOSS
|
||||
impact_effect_type = null
|
||||
fire_sound = 'sound/items/syringeproj.ogg'
|
||||
combustion = FALSE
|
||||
icon = 'icons/obj/gun_toy.dmi'
|
||||
icon_state = "foamdart_riot_proj"
|
||||
range = 15
|
||||
hud_state = "grenade_he"
|
||||
|
||||
/obj/item/projectile/bullet/foam_dart_riot/on_impact(var/atom/A)
|
||||
. = ..()
|
||||
var/turf/T = get_turf(loc)
|
||||
if(istype(T))
|
||||
new /obj/item/ammo_casing/afoam_dart/riot(get_turf(loc))
|
||||
|
||||
/obj/item/projectile/bullet/foam_dart_riot/on_range(var/atom/A)
|
||||
. = ..()
|
||||
var/turf/T = get_turf(loc)
|
||||
if(istype(T))
|
||||
/obj/item/projectile/bullet
|
||||
name = "bullet"
|
||||
icon_state = "bullet"
|
||||
fire_sound = 'sound/weapons/Gunshot4.ogg'
|
||||
damage = 60
|
||||
damage_type = BRUTE
|
||||
nodamage = 0
|
||||
check_armour = "bullet"
|
||||
embed_chance = 20 //Modified in the actual embed process, but this should keep embed chance about the same
|
||||
sharp = TRUE
|
||||
hitsound_wall = "ricochet"
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect
|
||||
excavation_amount = 20
|
||||
var/mob_passthrough_check = 0
|
||||
hud_state = "pistol_lightap"
|
||||
hud_state_empty = "pistol_empty" // Just in case we somehow have no hud_state_empty defined
|
||||
|
||||
muzzle_type = /obj/effect/projectile/muzzle/bullet
|
||||
|
||||
/obj/item/projectile/bullet/on_hit(var/atom/target, var/blocked = 0)
|
||||
if (..(target, blocked))
|
||||
var/mob/living/L = target
|
||||
shake_camera(L, 3, 2)
|
||||
|
||||
/obj/item/projectile/bullet/attack_mob(var/mob/living/target_mob, var/distance, var/miss_modifier)
|
||||
if(penetrating > 0 && damage > 20 && prob(damage))
|
||||
mob_passthrough_check = 1
|
||||
else
|
||||
mob_passthrough_check = 0
|
||||
return ..()
|
||||
|
||||
/obj/item/projectile/bullet/can_embed()
|
||||
//prevent embedding if the projectile is passing through the mob
|
||||
if(mob_passthrough_check)
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/obj/item/projectile/bullet/check_penetrate(var/atom/A)
|
||||
if(!A || !A.density) return 1 //if whatever it was got destroyed when we hit it, then I guess we can just keep going
|
||||
|
||||
if(istype(A, /obj/mecha))
|
||||
return 1 //mecha have their own penetration handling
|
||||
|
||||
if(ismob(A))
|
||||
if(!mob_passthrough_check)
|
||||
return 0
|
||||
if(iscarbon(A))
|
||||
damage *= 0.7 //squishy mobs absorb KE
|
||||
return 1
|
||||
|
||||
var/chance = damage
|
||||
if(istype(A, /turf/simulated/wall))
|
||||
var/turf/simulated/wall/W = A
|
||||
chance = round(damage/W.material.integrity*180)
|
||||
else if(istype(A, /obj/machinery/door))
|
||||
var/obj/machinery/door/D = A
|
||||
chance = round(damage/D.maxhealth*180)
|
||||
if(D.glass) chance *= 2
|
||||
else if(istype(A, /obj/structure/girder))
|
||||
chance = 100
|
||||
|
||||
if(prob(chance))
|
||||
if(A.opacity)
|
||||
//display a message so that people on the other side aren't so confused
|
||||
A.visible_message("<span class='warning'>\The [src] pierces through \the [A]!</span>")
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
/* short-casing projectiles, like the kind used in pistols or SMGs */
|
||||
|
||||
/obj/item/projectile/bullet/pistol // 9mm pistols and most SMGs. Sacrifice power for capacity.
|
||||
fire_sound = 'sound/weapons/gunshot2.ogg'
|
||||
damage = 20
|
||||
hud_state = "pistol"
|
||||
hud_state_empty = "pistol_empty"
|
||||
|
||||
/obj/item/projectile/bullet/pistol/ap
|
||||
damage = 15
|
||||
armor_penetration = 30
|
||||
hud_state = "pistol_light_ap"
|
||||
|
||||
/obj/item/projectile/bullet/pistol/hp
|
||||
damage = 25
|
||||
armor_penetration = -50
|
||||
hud_state = "pistol_ap"
|
||||
|
||||
/obj/item/projectile/bullet/pistol/medium // .45 (and maybe .40 if it ever gets added) caliber security pistols. Balance between capacity and power.
|
||||
fire_sound = 'sound/weapons/gunshot3.ogg' // Snappier sound.
|
||||
damage = 25
|
||||
hud_state = "pistol"
|
||||
|
||||
/obj/item/projectile/bullet/pistol/medium/ap
|
||||
damage = 20
|
||||
armor_penetration = 15
|
||||
hud_state = "pistol_light_ap"
|
||||
|
||||
/obj/item/projectile/bullet/pistol/medium/hp
|
||||
damage = 30
|
||||
armor_penetration = -50
|
||||
hud_state = "pistol_ap"
|
||||
|
||||
/obj/item/projectile/bullet/pistol/strong // .357 and .44 caliber stuff. High power pistols like the Mateba or Desert Eagle. Sacrifice capacity for power.
|
||||
fire_sound = 'sound/weapons/gunshot4.ogg'
|
||||
damage = 60
|
||||
hud_state = "pistol_heavy"
|
||||
|
||||
/obj/item/projectile/bullet/pistol/rubber/strong // "Rubber" bullets for high power pistols.
|
||||
fire_sound = 'sound/weapons/gunshot3.ogg' // Rubber shots have less powder, but these still have more punch than normal rubber shot.
|
||||
damage = 10
|
||||
agony = 60
|
||||
embed_chance = 0
|
||||
sharp = FALSE
|
||||
check_armour = "melee"
|
||||
hud_state = "pistol_special"
|
||||
|
||||
/obj/item/projectile/bullet/pistol/rubber // "Rubber" bullets for all other pistols.
|
||||
name = "rubber bullet"
|
||||
damage = 5
|
||||
agony = 40
|
||||
embed_chance = 0
|
||||
sharp = FALSE
|
||||
check_armour = "melee"
|
||||
hud_state = "pistol_special"
|
||||
fire_sound ='sound/weapons/Gunshot_pathetic.ogg' // Rubber shots have less powder in the casing.
|
||||
|
||||
/* shotgun projectiles */
|
||||
|
||||
/obj/item/projectile/bullet/shotgun
|
||||
name = "slug"
|
||||
fire_sound = 'sound/weapons/Gunshot_shotgun.ogg'
|
||||
damage = 50
|
||||
armor_penetration = 20
|
||||
hud_state = "shotgun_slug"
|
||||
hud_state_empty = "shotgun_empty"
|
||||
|
||||
/obj/item/projectile/bullet/shotgun/beanbag //because beanbags are not bullets
|
||||
name = "beanbag"
|
||||
damage = 20
|
||||
agony = 60
|
||||
embed_chance = 0
|
||||
sharp = FALSE
|
||||
check_armour = "melee"
|
||||
hud_state = "shotgun_beanbag"
|
||||
|
||||
//Should do about 80 damage at 1 tile distance (adjacent), and 50 damage at 3 tiles distance.
|
||||
//Overall less damage than slugs in exchange for more damage at very close range and more embedding
|
||||
/obj/item/projectile/bullet/pellet/shotgun
|
||||
name = "shrapnel"
|
||||
fire_sound = 'sound/weapons/Gunshot_shotgun.ogg'
|
||||
damage = 13
|
||||
pellets = 6
|
||||
range_step = 1
|
||||
spread_step = 10
|
||||
hud_state = "shotgun_buckshot"
|
||||
|
||||
/obj/item/projectile/bullet/pellet/shotgun/flak
|
||||
damage = 2 //The main weapon using these fires four at a time, usually with different destinations. Usually.
|
||||
range_step = 2
|
||||
spread_step = 30
|
||||
armor_penetration = 10
|
||||
hud_state = "shotgun_flechette"
|
||||
|
||||
//EMP shotgun 'slug', it's basically a beanbag that pops a tiny emp when it hits. //Not currently used
|
||||
/obj/item/projectile/bullet/shotgun/ion
|
||||
name = "ion slug"
|
||||
fire_sound = 'sound/weapons/Laser.ogg' // Really? We got nothing better than this?
|
||||
damage = 15
|
||||
embed_chance = 0
|
||||
sharp = FALSE
|
||||
check_armour = "melee"
|
||||
hud_state = "shotgun_ion"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/bullet/shotgun/ion/on_hit(var/atom/target, var/blocked = 0)
|
||||
..()
|
||||
empulse(target, 0, 0, 0, 0) //Only affects what it hits
|
||||
return 1
|
||||
|
||||
|
||||
/* "Rifle" rounds */
|
||||
|
||||
/obj/item/projectile/bullet/rifle
|
||||
fire_sound = 'sound/weapons/Gunshot_generic_rifle.ogg'
|
||||
armor_penetration = 15
|
||||
penetrating = 1
|
||||
hud_state = "rifle"
|
||||
hud_state_empty = "rifle_empty"
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a762
|
||||
fire_sound = 'sound/weapons/Gunshot_heavy.ogg'
|
||||
damage = 35
|
||||
hud_state = "rifle_heavy"
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a762/sniper // Hitscan specifically for sniper ammo; to be implimented at a later date, probably for the SVD. -Ace
|
||||
fire_sound = 'sound/weapons/Gunshot_sniper.ogg'
|
||||
hitscan = 1 //so the ammo isn't useless as a sniper weapon
|
||||
hud_state = "hivelo"
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a762/ap
|
||||
damage = 30
|
||||
armor_penetration = 50 // At 30 or more armor, this will do more damage than standard rounds.
|
||||
hud_state = "rifle_ap"
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a762/hp
|
||||
damage = 40
|
||||
armor_penetration = -50
|
||||
penetrating = 0
|
||||
hud_state = "hivelo_iff"
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a762/hunter // Optimized for killing simple animals and not people, because Balance(tm)
|
||||
damage = 20
|
||||
SA_bonus_damage = 50 // 70 total on animals.
|
||||
SA_vulnerability = SA_ANIMAL
|
||||
hud_state = "rifle_heavy"
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a545
|
||||
fire_sound = 'sound/weapons/Gunshot_light.ogg'
|
||||
damage = 25
|
||||
hud_state = "rifle"
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a545/ap
|
||||
damage = 20
|
||||
armor_penetration = 50 // At 40 or more armor, this will do more damage than standard rounds.
|
||||
hud_state = "rifle_ap"
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a545/hp
|
||||
damage = 35
|
||||
armor_penetration = -50
|
||||
penetrating = 0
|
||||
hud_state = "hivelo_iff"
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a545/hunter
|
||||
damage = 15
|
||||
SA_bonus_damage = 35 // 50 total on animals.
|
||||
SA_vulnerability = SA_ANIMAL
|
||||
hud_state = "rifle_heavy"
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a145 // 14.5�114mm is bigger than a .50 BMG round.
|
||||
fire_sound = 'sound/weapons/Gunshot_cannon.ogg' // This is literally an anti-tank rifle caliber. It better sound like a fucking cannon.
|
||||
damage = 80
|
||||
stun = 3
|
||||
weaken = 3
|
||||
penetrating = 5
|
||||
armor_penetration = 80
|
||||
hitscan = 1 //so the PTR isn't useless as a sniper weapon
|
||||
hud_state = "sniper"
|
||||
|
||||
icon_state = "bullet_alt"
|
||||
tracer_type = /obj/effect/projectile/tracer/cannon
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a145/highvel
|
||||
damage = 50
|
||||
stun = 1
|
||||
weaken = 0
|
||||
penetrating = 15
|
||||
armor_penetration = 90
|
||||
hud_state = "sniper_flak"
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a44rifle
|
||||
fire_sound = 'sound/weapons/gunshot4.ogg'
|
||||
damage = 50
|
||||
hud_state = "revolver"
|
||||
|
||||
/* Miscellaneous */
|
||||
|
||||
/obj/item/projectile/bullet/suffocationbullet//How does this even work?
|
||||
name = "co bullet"
|
||||
damage = 20
|
||||
damage_type = OXY
|
||||
hud_state = "pistol_tranq"
|
||||
|
||||
/obj/item/projectile/bullet/cyanideround
|
||||
name = "poison bullet"
|
||||
damage = 40
|
||||
damage_type = TOX
|
||||
hud_state = "pistol_tranq"
|
||||
|
||||
/obj/item/projectile/bullet/burstbullet
|
||||
name = "exploding bullet"
|
||||
fire_sound = 'sound/effects/Explosion1.ogg'
|
||||
damage = 20
|
||||
embed_chance = 0
|
||||
edge = TRUE
|
||||
hud_state = "pistol_fire"
|
||||
|
||||
/obj/item/projectile/bullet/burstbullet/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(isturf(target))
|
||||
explosion(target, -1, 0, 2)
|
||||
..()
|
||||
|
||||
/* Incendiary */
|
||||
|
||||
/obj/item/projectile/bullet/incendiary
|
||||
name = "incendiary bullet"
|
||||
icon_state = "bullet_alt"
|
||||
damage = 15
|
||||
damage_type = BURN
|
||||
incendiary = 0.5
|
||||
flammability = 2
|
||||
hud_state = "pistol_fire"
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/flamethrower
|
||||
name = "ball of fire"
|
||||
desc = "Don't stand in the fire."
|
||||
icon_state = "fireball"
|
||||
damage = 10
|
||||
embed_chance = 0
|
||||
incendiary = 2
|
||||
flammability = 4
|
||||
agony = 30
|
||||
range = 4
|
||||
vacuum_traversal = 0
|
||||
hud_state = "flame"
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/flamethrower/after_move()
|
||||
..()
|
||||
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
if(istype(T))
|
||||
for(var/obj/effect/plant/Victim in T)
|
||||
if(prob(max(20, 100 - (Victim.seed.get_trait(TRAIT_ENDURANCE))))) // Chance to immediately kill a vine or rampant growth, minimum of 20%.
|
||||
Victim.die_off()
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/flamethrower/large
|
||||
damage = 5
|
||||
incendiary = 3
|
||||
flammability = 2
|
||||
range = 6
|
||||
hud_state = "flame"
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/flamethrower/tiny
|
||||
damage = 2
|
||||
incendiary = 0
|
||||
flammability = 2
|
||||
modifier_type_to_apply = /datum/modifier/fire/stack_managed/weak
|
||||
modifier_duration = 20 SECONDS
|
||||
range = 6
|
||||
agony = 0
|
||||
hud_state = "flame"
|
||||
|
||||
/* Practice rounds and blanks */
|
||||
|
||||
/obj/item/projectile/bullet/practice
|
||||
damage = 5
|
||||
hud_state = "smg_light"
|
||||
|
||||
/obj/item/projectile/bullet/pistol/cap // Just the primer, such as a cap gun.
|
||||
name = "cap"
|
||||
damage_type = HALLOSS
|
||||
fire_sound = 'sound/effects/snap.ogg'
|
||||
damage = 0
|
||||
nodamage = 1
|
||||
embed_chance = 0
|
||||
sharp = FALSE
|
||||
hud_state = "monkey"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/bullet/pistol/cap/process()
|
||||
loc = null
|
||||
qdel(src)
|
||||
|
||||
/obj/item/projectile/bullet/blank
|
||||
name = "blank"
|
||||
damage_type = HALLOSS
|
||||
fire_sound = 'sound/weapons/Gunshot_generic_rifle.ogg' // Blanks still make loud noises.
|
||||
damage = 0
|
||||
nodamage = 1
|
||||
embed_chance = 0
|
||||
sharp = FALSE
|
||||
hud_state = "smg_light"
|
||||
|
||||
/* BB Rounds */
|
||||
/obj/item/projectile/bullet/bb // Generic single BB
|
||||
name = "BB"
|
||||
damage = 0
|
||||
agony = 0
|
||||
embed_chance = 0
|
||||
sharp = FALSE
|
||||
silenced = TRUE
|
||||
hud_state = "pistol_light"
|
||||
|
||||
/obj/item/projectile/bullet/pellet/shotgun/bb // Shotgun
|
||||
name = "BB"
|
||||
damage = 0
|
||||
agony = 0
|
||||
embed_chance = 0
|
||||
sharp = FALSE
|
||||
pellets = 6
|
||||
range_step = 1
|
||||
spread_step = 10
|
||||
silenced = TRUE
|
||||
hud_state = "pistol_light"
|
||||
|
||||
/* toy projectiles */
|
||||
/obj/item/projectile/bullet/cap
|
||||
name = "cap"
|
||||
desc = "SNAP!"
|
||||
damage = 0 // It's a damn toy.
|
||||
embed_chance = 0
|
||||
nodamage = TRUE
|
||||
sharp = FALSE
|
||||
damage_type = HALLOSS
|
||||
impact_effect_type = null
|
||||
fire_sound = 'sound/effects/snap.ogg'
|
||||
combustion = FALSE
|
||||
hud_state = "pistol_light"
|
||||
|
||||
/obj/item/projectile/bullet/cap/process()
|
||||
loc = null
|
||||
qdel(src)
|
||||
|
||||
/obj/item/projectile/bullet/foam_dart
|
||||
name = "foam dart"
|
||||
desc = "I hope you're wearing eye protection."
|
||||
damage = 0 // It's a damn toy.
|
||||
embed_chance = 0
|
||||
nodamage = TRUE
|
||||
sharp = FALSE
|
||||
damage_type = HALLOSS
|
||||
impact_effect_type = null
|
||||
fire_sound = 'sound/items/syringeproj.ogg'
|
||||
combustion = FALSE
|
||||
icon = 'icons/obj/gun_toy.dmi'
|
||||
icon_state = "foamdart_proj"
|
||||
range = 15
|
||||
hud_state = "grenade_dummy"
|
||||
|
||||
/obj/item/projectile/bullet/foam_dart/on_impact(var/atom/A)
|
||||
. = ..()
|
||||
var/turf/T = get_turf(loc)
|
||||
if(istype(T))
|
||||
new /obj/item/ammo_casing/afoam_dart(get_turf(loc))
|
||||
|
||||
/obj/item/projectile/bullet/foam_dart/on_range(var/atom/A)
|
||||
. = ..()
|
||||
var/turf/T = get_turf(loc)
|
||||
if(istype(T))
|
||||
new /obj/item/ammo_casing/afoam_dart(get_turf(loc))
|
||||
|
||||
/obj/item/projectile/bullet/foam_dart_riot
|
||||
name = "riot foam dart"
|
||||
desc = "Whose smart idea was it to use toys as crowd control? Ages 18 and up."
|
||||
damage = 0 // It's a damn toy.
|
||||
embed_chance = 0
|
||||
agony = 50 // The riot part of the riot dart
|
||||
nodamage = TRUE
|
||||
sharp = FALSE
|
||||
damage_type = HALLOSS
|
||||
impact_effect_type = null
|
||||
fire_sound = 'sound/items/syringeproj.ogg'
|
||||
combustion = FALSE
|
||||
icon = 'icons/obj/gun_toy.dmi'
|
||||
icon_state = "foamdart_riot_proj"
|
||||
range = 15
|
||||
hud_state = "grenade_he"
|
||||
|
||||
/obj/item/projectile/bullet/foam_dart_riot/on_impact(var/atom/A)
|
||||
. = ..()
|
||||
var/turf/T = get_turf(loc)
|
||||
if(istype(T))
|
||||
new /obj/item/ammo_casing/afoam_dart/riot(get_turf(loc))
|
||||
|
||||
/obj/item/projectile/bullet/foam_dart_riot/on_range(var/atom/A)
|
||||
. = ..()
|
||||
var/turf/T = get_turf(loc)
|
||||
if(istype(T))
|
||||
new /obj/item/ammo_casing/afoam_dart/riot(get_turf(loc))
|
||||
@@ -1,101 +1,101 @@
|
||||
/obj/item/projectile/change
|
||||
name = "bolt of change"
|
||||
icon_state = "ice_1"
|
||||
damage = 0
|
||||
damage_type = BURN
|
||||
nodamage = 1
|
||||
check_armour = "energy"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/change/on_hit(var/atom/change)
|
||||
wabbajack(change)
|
||||
|
||||
/obj/item/projectile/change/proc/wabbajack(var/mob/M)
|
||||
if(istype(M, /mob/living) && M.stat != DEAD)
|
||||
if(M.transforming)
|
||||
return
|
||||
if(M.has_brain_worms())
|
||||
return //Borer stuff - RR
|
||||
|
||||
if(istype(M, /mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/Robot = M
|
||||
if(Robot.mmi)
|
||||
qdel(Robot.mmi)
|
||||
else
|
||||
for(var/obj/item/W in M)
|
||||
if(istype(W, /obj/item/weapon/implant)) //TODO: Carn. give implants a dropped() or something
|
||||
qdel(W)
|
||||
continue
|
||||
M.drop_from_inventory(W)
|
||||
|
||||
var/mob/living/new_mob
|
||||
|
||||
var/options = list("robot", "slime")
|
||||
for(var/t in GLOB.all_species)
|
||||
options += t
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.species)
|
||||
options -= H.species.name
|
||||
else if(isrobot(M))
|
||||
options -= "robot"
|
||||
else if(isslime(M))
|
||||
options -= "slime"
|
||||
|
||||
var/randomize = pick(options)
|
||||
switch(randomize)
|
||||
if("robot")
|
||||
new_mob = new /mob/living/silicon/robot(M.loc)
|
||||
new_mob.gender = M.gender
|
||||
new_mob.invisibility = 0
|
||||
new_mob.job = "Cyborg"
|
||||
var/mob/living/silicon/robot/Robot = new_mob
|
||||
Robot.mmi = new /obj/item/device/mmi(new_mob)
|
||||
Robot.mmi.transfer_identity(M) //Does not transfer key/client.
|
||||
if("slime")
|
||||
new_mob = new /mob/living/simple_mob/slime/xenobio(M.loc)
|
||||
new_mob.universal_speak = 1
|
||||
else
|
||||
var/mob/living/carbon/human/H
|
||||
if(ishuman(M))
|
||||
H = M
|
||||
else
|
||||
new_mob = new /mob/living/carbon/human(M.loc)
|
||||
H = new_mob
|
||||
|
||||
if(M.gender == MALE)
|
||||
H.gender = MALE
|
||||
H.name = pick(first_names_male)
|
||||
else if(M.gender == FEMALE)
|
||||
H.gender = FEMALE
|
||||
H.name = pick(first_names_female)
|
||||
else
|
||||
H.gender = NEUTER
|
||||
H.name = pick(first_names_female|first_names_male)
|
||||
|
||||
H.name += " [pick(last_names)]"
|
||||
H.real_name = H.name
|
||||
|
||||
H.set_species(randomize)
|
||||
H.universal_speak = 1
|
||||
var/datum/preferences/A = new() //Randomize appearance for the human
|
||||
A.randomize_appearance_and_body_for(H)
|
||||
|
||||
if(new_mob)
|
||||
for (var/spell/S in M.spell_list)
|
||||
new_mob.add_spell(new S.type)
|
||||
|
||||
new_mob.a_intent = "hurt"
|
||||
if(M.mind)
|
||||
M.mind.transfer_to(new_mob)
|
||||
else
|
||||
new_mob.key = M.key
|
||||
|
||||
to_chat(new_mob, "<span class='warning'>Your form morphs into that of \a [lowertext(randomize)].</span>")
|
||||
|
||||
qdel(M)
|
||||
return
|
||||
else
|
||||
to_chat(M, "<span class='warning'>Your form morphs into that of \a [lowertext(randomize)].</span>")
|
||||
/obj/item/projectile/change
|
||||
name = "bolt of change"
|
||||
icon_state = "ice_1"
|
||||
damage = 0
|
||||
damage_type = BURN
|
||||
nodamage = 1
|
||||
check_armour = "energy"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/change/on_hit(var/atom/change)
|
||||
wabbajack(change)
|
||||
|
||||
/obj/item/projectile/change/proc/wabbajack(var/mob/M)
|
||||
if(istype(M, /mob/living) && M.stat != DEAD)
|
||||
if(M.transforming)
|
||||
return
|
||||
if(M.has_brain_worms())
|
||||
return //Borer stuff - RR
|
||||
|
||||
if(istype(M, /mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/Robot = M
|
||||
if(Robot.mmi)
|
||||
qdel(Robot.mmi)
|
||||
else
|
||||
for(var/obj/item/W in M)
|
||||
if(istype(W, /obj/item/weapon/implant)) //TODO: Carn. give implants a dropped() or something
|
||||
qdel(W)
|
||||
continue
|
||||
M.drop_from_inventory(W)
|
||||
|
||||
var/mob/living/new_mob
|
||||
|
||||
var/options = list("robot", "slime")
|
||||
for(var/t in GLOB.all_species)
|
||||
options += t
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.species)
|
||||
options -= H.species.name
|
||||
else if(isrobot(M))
|
||||
options -= "robot"
|
||||
else if(isslime(M))
|
||||
options -= "slime"
|
||||
|
||||
var/randomize = pick(options)
|
||||
switch(randomize)
|
||||
if("robot")
|
||||
new_mob = new /mob/living/silicon/robot(M.loc)
|
||||
new_mob.gender = M.gender
|
||||
new_mob.invisibility = 0
|
||||
new_mob.job = "Cyborg"
|
||||
var/mob/living/silicon/robot/Robot = new_mob
|
||||
Robot.mmi = new /obj/item/device/mmi(new_mob)
|
||||
Robot.mmi.transfer_identity(M) //Does not transfer key/client.
|
||||
if("slime")
|
||||
new_mob = new /mob/living/simple_mob/slime/xenobio(M.loc)
|
||||
new_mob.universal_speak = 1
|
||||
else
|
||||
var/mob/living/carbon/human/H
|
||||
if(ishuman(M))
|
||||
H = M
|
||||
else
|
||||
new_mob = new /mob/living/carbon/human(M.loc)
|
||||
H = new_mob
|
||||
|
||||
if(M.gender == MALE)
|
||||
H.gender = MALE
|
||||
H.name = pick(first_names_male)
|
||||
else if(M.gender == FEMALE)
|
||||
H.gender = FEMALE
|
||||
H.name = pick(first_names_female)
|
||||
else
|
||||
H.gender = NEUTER
|
||||
H.name = pick(first_names_female|first_names_male)
|
||||
|
||||
H.name += " [pick(last_names)]"
|
||||
H.real_name = H.name
|
||||
|
||||
H.set_species(randomize)
|
||||
H.universal_speak = 1
|
||||
var/datum/preferences/A = new() //Randomize appearance for the human
|
||||
A.randomize_appearance_and_body_for(H)
|
||||
|
||||
if(new_mob)
|
||||
for (var/spell/S in M.spell_list)
|
||||
new_mob.add_spell(new S.type)
|
||||
|
||||
new_mob.a_intent = "hurt"
|
||||
if(M.mind)
|
||||
M.mind.transfer_to(new_mob)
|
||||
else
|
||||
new_mob.key = M.key
|
||||
|
||||
to_chat(new_mob, "<span class='warning'>Your form morphs into that of \a [lowertext(randomize)].</span>")
|
||||
|
||||
qdel(M)
|
||||
return
|
||||
else
|
||||
to_chat(M, "<span class='warning'>Your form morphs into that of \a [lowertext(randomize)].</span>")
|
||||
return
|
||||
@@ -1,337 +1,337 @@
|
||||
/obj/item/projectile/energy
|
||||
name = "energy"
|
||||
icon_state = "spark"
|
||||
damage = 0
|
||||
damage_type = BURN
|
||||
check_armour = "energy"
|
||||
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect
|
||||
hitsound_wall = 'sound/weapons/effects/searwall.ogg'
|
||||
hitsound = 'sound/weapons/zapbang.ogg'
|
||||
hud_state = "plasma"
|
||||
hud_state_empty = "battery_empty"
|
||||
|
||||
var/flash_strength = 10
|
||||
|
||||
//releases a burst of light on impact or after travelling a distance
|
||||
/obj/item/projectile/energy/flash
|
||||
name = "chemical shell"
|
||||
icon_state = "bullet"
|
||||
fire_sound = 'sound/weapons/gunshot_pathetic.ogg'
|
||||
hitsound_wall = null
|
||||
damage = 5
|
||||
range = 15 //if the shell hasn't hit anything after travelling this far it just explodes.
|
||||
var/flash_range = 0
|
||||
var/brightness = 7
|
||||
var/light_colour = "#ffffff"
|
||||
hud_state = "grenade_dummy"
|
||||
|
||||
/obj/item/projectile/energy/flash/on_impact(var/atom/A)
|
||||
var/turf/T = flash_range? src.loc : get_turf(A)
|
||||
if(!istype(T)) return
|
||||
|
||||
//blind adjacent people
|
||||
for (var/mob/living/carbon/M in viewers(T, flash_range))
|
||||
if(M.eyecheck() < 1)
|
||||
M.flash_eyes()
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
flash_strength *= H.species.flash_mod
|
||||
|
||||
if(flash_strength > 0)
|
||||
H.Confuse(flash_strength + 5)
|
||||
H.Blind(flash_strength)
|
||||
H.eye_blurry = max(H.eye_blurry, flash_strength + 5)
|
||||
H.adjustHalLoss(22 * (flash_strength / 5)) // Five flashes to stun. Bit weaker than melee flashes due to being ranged.
|
||||
|
||||
//snap pop
|
||||
playsound(src, 'sound/effects/snap.ogg', 50, 1)
|
||||
src.visible_message("<span class='warning'>\The [src] explodes in a bright flash!</span>")
|
||||
|
||||
var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread()
|
||||
sparks.set_up(2, 1, T)
|
||||
sparks.start()
|
||||
|
||||
new /obj/effect/decal/cleanable/ash(src.loc) //always use src.loc so that ash doesn't end up inside windows
|
||||
new /obj/effect/effect/smoke/illumination(T, 5, brightness, brightness, light_colour)
|
||||
|
||||
//blinds people like the flash round, but can also be used for temporary illumination
|
||||
/obj/item/projectile/energy/flash/flare
|
||||
fire_sound = 'sound/weapons/grenade_launcher.ogg'
|
||||
damage = 10
|
||||
flash_range = 1
|
||||
brightness = 15
|
||||
flash_strength = 20
|
||||
hud_state = "grenade_dummy"
|
||||
|
||||
/obj/item/projectile/energy/flash/flare/on_impact(var/atom/A)
|
||||
light_colour = pick("#e58775", "#ffffff", "#90ff90", "#a09030")
|
||||
|
||||
..() //initial flash
|
||||
|
||||
//residual illumination
|
||||
new /obj/effect/effect/smoke/illumination(src.loc, rand(190,240) SECONDS, range=8, power=3, color=light_colour) //same lighting power as flare
|
||||
|
||||
/obj/item/projectile/energy/electrode
|
||||
name = "electrode"
|
||||
icon_state = "spark"
|
||||
fire_sound = 'sound/weapons/Gunshot2.ogg'
|
||||
taser_effect = 1
|
||||
agony = 40
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#FFFFFF"
|
||||
hud_state = "taser"
|
||||
//Damage will be handled on the MOB side, to prevent window shattering.
|
||||
|
||||
/obj/item/projectile/energy/electrode/strong
|
||||
agony = 55
|
||||
hud_state = "taser"
|
||||
|
||||
/obj/item/projectile/energy/electrode/stunshot
|
||||
name = "stunshot"
|
||||
damage = 5
|
||||
agony = 80
|
||||
hud_state = "taser"
|
||||
|
||||
/obj/item/projectile/energy/electrode/stunshot/strong
|
||||
name = "stunshot"
|
||||
icon_state = "bullet"
|
||||
damage = 10
|
||||
taser_effect = 1
|
||||
agony = 100
|
||||
hud_state = "taser"
|
||||
|
||||
/obj/item/projectile/energy/declone
|
||||
name = "declone"
|
||||
icon_state = "declone"
|
||||
fire_sound = 'sound/weapons/pulse3.ogg'
|
||||
nodamage = 1
|
||||
damage_type = CLONE
|
||||
irradiate = 40
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#33CC00"
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser
|
||||
|
||||
combustion = FALSE
|
||||
hud_state = "plasma_pistol"
|
||||
|
||||
/obj/item/projectile/energy/excavate
|
||||
name = "kinetic blast"
|
||||
icon_state = "kinetic_blast"
|
||||
fire_sound = 'sound/weapons/pulse3.ogg'
|
||||
damage_type = BRUTE
|
||||
damage = 30
|
||||
armor_penetration = 60
|
||||
excavation_amount = 200
|
||||
check_armour = "melee"
|
||||
|
||||
vacuum_traversal = 0
|
||||
combustion = FALSE
|
||||
hud_state = "plasma_blast"
|
||||
|
||||
/obj/item/projectile/energy/excavate/weak
|
||||
damage = 15
|
||||
excavation_amount = 100
|
||||
|
||||
/obj/item/projectile/energy/dart
|
||||
name = "dart"
|
||||
icon_state = "toxin"
|
||||
damage = 5
|
||||
damage_type = TOX
|
||||
agony = 120
|
||||
check_armour = "energy"
|
||||
hud_state = "pistol_tranq"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/energy/bolt
|
||||
name = "bolt"
|
||||
icon_state = "cbbolt"
|
||||
damage = 10
|
||||
damage_type = TOX
|
||||
agony = 40
|
||||
stutter = 10
|
||||
hud_state = "electrothermal"
|
||||
|
||||
/obj/item/projectile/energy/bolt/large
|
||||
name = "largebolt"
|
||||
damage = 20
|
||||
hud_state = "electrothermal"
|
||||
|
||||
/obj/item/projectile/energy/bow
|
||||
name = "engergy bolt"
|
||||
icon_state = "cbbolt"
|
||||
damage = 20
|
||||
hud_state = "electrothermal"
|
||||
|
||||
/obj/item/projectile/energy/bow/heavy
|
||||
damage = 30
|
||||
icon_state = "cbbolt"
|
||||
hud_state = "electrothermal"
|
||||
|
||||
/obj/item/projectile/energy/bow/stun
|
||||
name = "stun bolt"
|
||||
agony = 30
|
||||
hud_state = "electrothermal"
|
||||
|
||||
/obj/item/projectile/energy/acid //Slightly up-gunned (Read: The thing does agony and checks bio resist) variant of the simple alien mob's projectile, for queens and sentinels.
|
||||
name = "acidic spit"
|
||||
icon_state = "neurotoxin"
|
||||
damage = 30
|
||||
damage_type = BURN
|
||||
agony = 10
|
||||
check_armour = "bio"
|
||||
armor_penetration = 25 // It's acid
|
||||
hitsound_wall = 'sound/weapons/effects/alien_spit_wall.ogg'
|
||||
hitsound = 'sound/weapons/effects/alien_spit_wall.ogg'
|
||||
hud_state = "electrothermal"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/energy/neurotoxin
|
||||
name = "neurotoxic spit"
|
||||
icon_state = "neurotoxin"
|
||||
damage = 0
|
||||
damage_type = BIOACID
|
||||
agony = 80
|
||||
check_armour = "bio"
|
||||
armor_penetration = 25 // It's acid-based
|
||||
hitsound_wall = 'sound/weapons/effects/alien_spit_wall.ogg'
|
||||
hitsound = 'sound/weapons/effects/alien_spit_wall.ogg'
|
||||
hud_state = "electrothermal"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/energy/neurotoxin/toxic //New alien mob projectile to match the player-variant's projectiles.
|
||||
name = "neurotoxic spit"
|
||||
icon_state = "neurotoxin"
|
||||
damage = 20
|
||||
damage_type = BIOACID
|
||||
agony = 20
|
||||
hud_state = "electrothermal"
|
||||
check_armour = "bio"
|
||||
armor_penetration = 25 // It's acid-based
|
||||
|
||||
/obj/item/projectile/energy/phoron
|
||||
name = "phoron bolt"
|
||||
icon_state = "energy"
|
||||
fire_sound = 'sound/effects/stealthoff.ogg'
|
||||
damage = 20
|
||||
damage_type = TOX
|
||||
irradiate = 20
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#33CC00"
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser
|
||||
hud_state = "plasma_rifle"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/energy/plasmastun
|
||||
name = "plasma pulse"
|
||||
icon_state = "plasma_stun"
|
||||
fire_sound = 'sound/weapons/blaster.ogg'
|
||||
armor_penetration = 10
|
||||
range = 4
|
||||
damage = 5
|
||||
agony = 55
|
||||
damage_type = BURN
|
||||
vacuum_traversal = 0 //Projectile disappears in empty space
|
||||
hud_state = "plasma_rifle_blast"
|
||||
|
||||
/obj/item/projectile/energy/plasmastun/proc/bang(var/mob/living/carbon/M)
|
||||
|
||||
to_chat(M, "<span class='danger'>You hear a loud roar.</span>")
|
||||
playsound(src, 'sound/effects/bang.ogg', 50, 1)
|
||||
var/ear_safety = 0
|
||||
ear_safety = M.get_ear_protection()
|
||||
if(ear_safety == 1)
|
||||
M.Confuse(150)
|
||||
else if (ear_safety > 1)
|
||||
M.Confuse(30)
|
||||
else if (!ear_safety)
|
||||
M.Stun(10)
|
||||
M.Weaken(2)
|
||||
M.ear_damage += rand(1, 10)
|
||||
M.ear_deaf = max(M.ear_deaf,15)
|
||||
if (M.ear_damage >= 15)
|
||||
to_chat(M, "<span class='danger'>Your ears start to ring badly!</span>")
|
||||
if (prob(M.ear_damage - 5))
|
||||
to_chat(M, "<span class='danger'>You can't hear anything!</span>")
|
||||
M.sdisabilities |= DEAF
|
||||
else
|
||||
if (M.ear_damage >= 5)
|
||||
to_chat(M, "<span class='danger'>Your ears start to ring!</span>")
|
||||
M.update_icons() //Just to apply matrix transform for laying asap
|
||||
|
||||
/obj/item/projectile/energy/plasmastun/on_hit(var/atom/target)
|
||||
bang(target)
|
||||
. = ..()
|
||||
|
||||
/obj/item/projectile/energy/blue_pellet
|
||||
name = "suppressive pellet"
|
||||
icon_state = "blue_pellet"
|
||||
fire_sound = 'sound/weapons/Laser4.ogg'
|
||||
damage = 5
|
||||
armor_penetration = 75
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
damage_type = BURN
|
||||
check_armour = "energy"
|
||||
light_color = "#00AAFF"
|
||||
|
||||
embed_chance = 0
|
||||
muzzle_type = /obj/effect/projectile/muzzle/pulse
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser
|
||||
hud_state = "plasma_sphere"
|
||||
|
||||
/obj/item/projectile/energy/phase
|
||||
name = "phase wave"
|
||||
icon_state = "phase"
|
||||
range = 6
|
||||
damage = 5
|
||||
SA_bonus_damage = 45 // 50 total on animals
|
||||
SA_vulnerability = SA_ANIMAL
|
||||
hud_state = "laser_heat"
|
||||
|
||||
/obj/item/projectile/energy/phase/light
|
||||
range = 4
|
||||
SA_bonus_damage = 35 // 40 total on animals
|
||||
hud_state = "laser_heat"
|
||||
|
||||
/obj/item/projectile/energy/phase/heavy
|
||||
range = 8
|
||||
SA_bonus_damage = 55 // 60 total on animals
|
||||
hud_state = "laser_heat"
|
||||
|
||||
/obj/item/projectile/energy/phase/heavy/cannon
|
||||
range = 10
|
||||
damage = 15
|
||||
SA_bonus_damage = 60 // 75 total on animals
|
||||
hud_state = "laser_heat"
|
||||
|
||||
/obj/item/projectile/energy/electrode/strong
|
||||
agony = 70
|
||||
hud_state = "taser"
|
||||
|
||||
/obj/item/projectile/energy
|
||||
flash_strength = 10
|
||||
hud_state = "taser"
|
||||
|
||||
/obj/item/projectile/energy/flash
|
||||
flash_range = 1
|
||||
hud_state = "grenade_dummy"
|
||||
|
||||
/obj/item/projectile/energy/flash/strong
|
||||
name = "chemical shell"
|
||||
icon_state = "bullet"
|
||||
damage = 10
|
||||
range = 15 //if the shell hasn't hit anything after travelling this far it just explodes.
|
||||
flash_strength = 15
|
||||
brightness = 15
|
||||
hud_state = "grenade_dummy"
|
||||
|
||||
/obj/item/projectile/energy/flash/flare
|
||||
flash_range = 2
|
||||
hud_state = "grenade_dummy"
|
||||
/obj/item/projectile/energy
|
||||
name = "energy"
|
||||
icon_state = "spark"
|
||||
damage = 0
|
||||
damage_type = BURN
|
||||
check_armour = "energy"
|
||||
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect
|
||||
hitsound_wall = 'sound/weapons/effects/searwall.ogg'
|
||||
hitsound = 'sound/weapons/zapbang.ogg'
|
||||
hud_state = "plasma"
|
||||
hud_state_empty = "battery_empty"
|
||||
|
||||
var/flash_strength = 10
|
||||
|
||||
//releases a burst of light on impact or after travelling a distance
|
||||
/obj/item/projectile/energy/flash
|
||||
name = "chemical shell"
|
||||
icon_state = "bullet"
|
||||
fire_sound = 'sound/weapons/gunshot_pathetic.ogg'
|
||||
hitsound_wall = null
|
||||
damage = 5
|
||||
range = 15 //if the shell hasn't hit anything after travelling this far it just explodes.
|
||||
var/flash_range = 0
|
||||
var/brightness = 7
|
||||
var/light_colour = "#ffffff"
|
||||
hud_state = "grenade_dummy"
|
||||
|
||||
/obj/item/projectile/energy/flash/on_impact(var/atom/A)
|
||||
var/turf/T = flash_range? src.loc : get_turf(A)
|
||||
if(!istype(T)) return
|
||||
|
||||
//blind adjacent people
|
||||
for (var/mob/living/carbon/M in viewers(T, flash_range))
|
||||
if(M.eyecheck() < 1)
|
||||
M.flash_eyes()
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
flash_strength *= H.species.flash_mod
|
||||
|
||||
if(flash_strength > 0)
|
||||
H.Confuse(flash_strength + 5)
|
||||
H.Blind(flash_strength)
|
||||
H.eye_blurry = max(H.eye_blurry, flash_strength + 5)
|
||||
H.adjustHalLoss(22 * (flash_strength / 5)) // Five flashes to stun. Bit weaker than melee flashes due to being ranged.
|
||||
|
||||
//snap pop
|
||||
playsound(src, 'sound/effects/snap.ogg', 50, 1)
|
||||
src.visible_message("<span class='warning'>\The [src] explodes in a bright flash!</span>")
|
||||
|
||||
var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread()
|
||||
sparks.set_up(2, 1, T)
|
||||
sparks.start()
|
||||
|
||||
new /obj/effect/decal/cleanable/ash(src.loc) //always use src.loc so that ash doesn't end up inside windows
|
||||
new /obj/effect/effect/smoke/illumination(T, 5, brightness, brightness, light_colour)
|
||||
|
||||
//blinds people like the flash round, but can also be used for temporary illumination
|
||||
/obj/item/projectile/energy/flash/flare
|
||||
fire_sound = 'sound/weapons/grenade_launcher.ogg'
|
||||
damage = 10
|
||||
flash_range = 1
|
||||
brightness = 15
|
||||
flash_strength = 20
|
||||
hud_state = "grenade_dummy"
|
||||
|
||||
/obj/item/projectile/energy/flash/flare/on_impact(var/atom/A)
|
||||
light_colour = pick("#e58775", "#ffffff", "#90ff90", "#a09030")
|
||||
|
||||
..() //initial flash
|
||||
|
||||
//residual illumination
|
||||
new /obj/effect/effect/smoke/illumination(src.loc, rand(190,240) SECONDS, range=8, power=3, color=light_colour) //same lighting power as flare
|
||||
|
||||
/obj/item/projectile/energy/electrode
|
||||
name = "electrode"
|
||||
icon_state = "spark"
|
||||
fire_sound = 'sound/weapons/Gunshot2.ogg'
|
||||
taser_effect = 1
|
||||
agony = 40
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#FFFFFF"
|
||||
hud_state = "taser"
|
||||
//Damage will be handled on the MOB side, to prevent window shattering.
|
||||
|
||||
/obj/item/projectile/energy/electrode/strong
|
||||
agony = 55
|
||||
hud_state = "taser"
|
||||
|
||||
/obj/item/projectile/energy/electrode/stunshot
|
||||
name = "stunshot"
|
||||
damage = 5
|
||||
agony = 80
|
||||
hud_state = "taser"
|
||||
|
||||
/obj/item/projectile/energy/electrode/stunshot/strong
|
||||
name = "stunshot"
|
||||
icon_state = "bullet"
|
||||
damage = 10
|
||||
taser_effect = 1
|
||||
agony = 100
|
||||
hud_state = "taser"
|
||||
|
||||
/obj/item/projectile/energy/declone
|
||||
name = "declone"
|
||||
icon_state = "declone"
|
||||
fire_sound = 'sound/weapons/pulse3.ogg'
|
||||
nodamage = 1
|
||||
damage_type = CLONE
|
||||
irradiate = 40
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#33CC00"
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser
|
||||
|
||||
combustion = FALSE
|
||||
hud_state = "plasma_pistol"
|
||||
|
||||
/obj/item/projectile/energy/excavate
|
||||
name = "kinetic blast"
|
||||
icon_state = "kinetic_blast"
|
||||
fire_sound = 'sound/weapons/pulse3.ogg'
|
||||
damage_type = BRUTE
|
||||
damage = 30
|
||||
armor_penetration = 60
|
||||
excavation_amount = 200
|
||||
check_armour = "melee"
|
||||
|
||||
vacuum_traversal = 0
|
||||
combustion = FALSE
|
||||
hud_state = "plasma_blast"
|
||||
|
||||
/obj/item/projectile/energy/excavate/weak
|
||||
damage = 15
|
||||
excavation_amount = 100
|
||||
|
||||
/obj/item/projectile/energy/dart
|
||||
name = "dart"
|
||||
icon_state = "toxin"
|
||||
damage = 5
|
||||
damage_type = TOX
|
||||
agony = 120
|
||||
check_armour = "energy"
|
||||
hud_state = "pistol_tranq"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/energy/bolt
|
||||
name = "bolt"
|
||||
icon_state = "cbbolt"
|
||||
damage = 10
|
||||
damage_type = TOX
|
||||
agony = 40
|
||||
stutter = 10
|
||||
hud_state = "electrothermal"
|
||||
|
||||
/obj/item/projectile/energy/bolt/large
|
||||
name = "largebolt"
|
||||
damage = 20
|
||||
hud_state = "electrothermal"
|
||||
|
||||
/obj/item/projectile/energy/bow
|
||||
name = "engergy bolt"
|
||||
icon_state = "cbbolt"
|
||||
damage = 20
|
||||
hud_state = "electrothermal"
|
||||
|
||||
/obj/item/projectile/energy/bow/heavy
|
||||
damage = 30
|
||||
icon_state = "cbbolt"
|
||||
hud_state = "electrothermal"
|
||||
|
||||
/obj/item/projectile/energy/bow/stun
|
||||
name = "stun bolt"
|
||||
agony = 30
|
||||
hud_state = "electrothermal"
|
||||
|
||||
/obj/item/projectile/energy/acid //Slightly up-gunned (Read: The thing does agony and checks bio resist) variant of the simple alien mob's projectile, for queens and sentinels.
|
||||
name = "acidic spit"
|
||||
icon_state = "neurotoxin"
|
||||
damage = 30
|
||||
damage_type = BURN
|
||||
agony = 10
|
||||
check_armour = "bio"
|
||||
armor_penetration = 25 // It's acid
|
||||
hitsound_wall = 'sound/weapons/effects/alien_spit_wall.ogg'
|
||||
hitsound = 'sound/weapons/effects/alien_spit_wall.ogg'
|
||||
hud_state = "electrothermal"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/energy/neurotoxin
|
||||
name = "neurotoxic spit"
|
||||
icon_state = "neurotoxin"
|
||||
damage = 0
|
||||
damage_type = BIOACID
|
||||
agony = 80
|
||||
check_armour = "bio"
|
||||
armor_penetration = 25 // It's acid-based
|
||||
hitsound_wall = 'sound/weapons/effects/alien_spit_wall.ogg'
|
||||
hitsound = 'sound/weapons/effects/alien_spit_wall.ogg'
|
||||
hud_state = "electrothermal"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/energy/neurotoxin/toxic //New alien mob projectile to match the player-variant's projectiles.
|
||||
name = "neurotoxic spit"
|
||||
icon_state = "neurotoxin"
|
||||
damage = 20
|
||||
damage_type = BIOACID
|
||||
agony = 20
|
||||
hud_state = "electrothermal"
|
||||
check_armour = "bio"
|
||||
armor_penetration = 25 // It's acid-based
|
||||
|
||||
/obj/item/projectile/energy/phoron
|
||||
name = "phoron bolt"
|
||||
icon_state = "energy"
|
||||
fire_sound = 'sound/effects/stealthoff.ogg'
|
||||
damage = 20
|
||||
damage_type = TOX
|
||||
irradiate = 20
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#33CC00"
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser
|
||||
hud_state = "plasma_rifle"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/energy/plasmastun
|
||||
name = "plasma pulse"
|
||||
icon_state = "plasma_stun"
|
||||
fire_sound = 'sound/weapons/blaster.ogg'
|
||||
armor_penetration = 10
|
||||
range = 4
|
||||
damage = 5
|
||||
agony = 55
|
||||
damage_type = BURN
|
||||
vacuum_traversal = 0 //Projectile disappears in empty space
|
||||
hud_state = "plasma_rifle_blast"
|
||||
|
||||
/obj/item/projectile/energy/plasmastun/proc/bang(var/mob/living/carbon/M)
|
||||
|
||||
to_chat(M, "<span class='danger'>You hear a loud roar.</span>")
|
||||
playsound(src, 'sound/effects/bang.ogg', 50, 1)
|
||||
var/ear_safety = 0
|
||||
ear_safety = M.get_ear_protection()
|
||||
if(ear_safety == 1)
|
||||
M.Confuse(150)
|
||||
else if (ear_safety > 1)
|
||||
M.Confuse(30)
|
||||
else if (!ear_safety)
|
||||
M.Stun(10)
|
||||
M.Weaken(2)
|
||||
M.ear_damage += rand(1, 10)
|
||||
M.ear_deaf = max(M.ear_deaf,15)
|
||||
if (M.ear_damage >= 15)
|
||||
to_chat(M, "<span class='danger'>Your ears start to ring badly!</span>")
|
||||
if (prob(M.ear_damage - 5))
|
||||
to_chat(M, "<span class='danger'>You can't hear anything!</span>")
|
||||
M.sdisabilities |= DEAF
|
||||
else
|
||||
if (M.ear_damage >= 5)
|
||||
to_chat(M, "<span class='danger'>Your ears start to ring!</span>")
|
||||
M.update_icons() //Just to apply matrix transform for laying asap
|
||||
|
||||
/obj/item/projectile/energy/plasmastun/on_hit(var/atom/target)
|
||||
bang(target)
|
||||
. = ..()
|
||||
|
||||
/obj/item/projectile/energy/blue_pellet
|
||||
name = "suppressive pellet"
|
||||
icon_state = "blue_pellet"
|
||||
fire_sound = 'sound/weapons/Laser4.ogg'
|
||||
damage = 5
|
||||
armor_penetration = 75
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
damage_type = BURN
|
||||
check_armour = "energy"
|
||||
light_color = "#00AAFF"
|
||||
|
||||
embed_chance = 0
|
||||
muzzle_type = /obj/effect/projectile/muzzle/pulse
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser
|
||||
hud_state = "plasma_sphere"
|
||||
|
||||
/obj/item/projectile/energy/phase
|
||||
name = "phase wave"
|
||||
icon_state = "phase"
|
||||
range = 6
|
||||
damage = 5
|
||||
SA_bonus_damage = 45 // 50 total on animals
|
||||
SA_vulnerability = SA_ANIMAL
|
||||
hud_state = "laser_heat"
|
||||
|
||||
/obj/item/projectile/energy/phase/light
|
||||
range = 4
|
||||
SA_bonus_damage = 35 // 40 total on animals
|
||||
hud_state = "laser_heat"
|
||||
|
||||
/obj/item/projectile/energy/phase/heavy
|
||||
range = 8
|
||||
SA_bonus_damage = 55 // 60 total on animals
|
||||
hud_state = "laser_heat"
|
||||
|
||||
/obj/item/projectile/energy/phase/heavy/cannon
|
||||
range = 10
|
||||
damage = 15
|
||||
SA_bonus_damage = 60 // 75 total on animals
|
||||
hud_state = "laser_heat"
|
||||
|
||||
/obj/item/projectile/energy/electrode/strong
|
||||
agony = 70
|
||||
hud_state = "taser"
|
||||
|
||||
/obj/item/projectile/energy
|
||||
flash_strength = 10
|
||||
hud_state = "taser"
|
||||
|
||||
/obj/item/projectile/energy/flash
|
||||
flash_range = 1
|
||||
hud_state = "grenade_dummy"
|
||||
|
||||
/obj/item/projectile/energy/flash/strong
|
||||
name = "chemical shell"
|
||||
icon_state = "bullet"
|
||||
damage = 10
|
||||
range = 15 //if the shell hasn't hit anything after travelling this far it just explodes.
|
||||
flash_strength = 15
|
||||
brightness = 15
|
||||
hud_state = "grenade_dummy"
|
||||
|
||||
/obj/item/projectile/energy/flash/flare
|
||||
flash_range = 2
|
||||
hud_state = "grenade_dummy"
|
||||
|
||||
@@ -1,364 +1,364 @@
|
||||
/obj/item/projectile/ion
|
||||
name = "ion bolt"
|
||||
icon_state = "ion"
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
damage = 0
|
||||
damage_type = BURN
|
||||
nodamage = 1
|
||||
check_armour = "energy"
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#55AAFF"
|
||||
hud_state = "plasma_blast"
|
||||
hud_state_empty = "battery_empty"
|
||||
|
||||
combustion = FALSE
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/ion
|
||||
hitsound_wall = 'sound/weapons/effects/searwall.ogg'
|
||||
hitsound = 'sound/weapons/ionrifle.ogg'
|
||||
|
||||
var/sev1_range = 0
|
||||
var/sev2_range = 1
|
||||
var/sev3_range = 1
|
||||
var/sev4_range = 1
|
||||
|
||||
/obj/item/projectile/ion/on_impact(var/atom/target)
|
||||
empulse(target, sev1_range, sev2_range, sev3_range, sev4_range)
|
||||
..()
|
||||
|
||||
/obj/item/projectile/ion/small
|
||||
sev1_range = -1
|
||||
sev2_range = 0
|
||||
sev3_range = 0
|
||||
sev4_range = 1
|
||||
|
||||
/obj/item/projectile/ion/pistol
|
||||
sev1_range = 0
|
||||
sev2_range = 0
|
||||
sev3_range = 0
|
||||
sev4_range = 0
|
||||
|
||||
/obj/item/projectile/bullet/gyro
|
||||
name ="explosive bolt"
|
||||
icon_state= "bolter"
|
||||
damage = 50
|
||||
check_armour = "bullet"
|
||||
sharp = TRUE
|
||||
edge = TRUE
|
||||
hud_state = "rocket_fire"
|
||||
|
||||
/obj/item/projectile/bullet/gyro/on_hit(var/atom/target, var/blocked = 0)
|
||||
explosion(target, -1, 0, 2)
|
||||
..()
|
||||
|
||||
/obj/item/projectile/temp
|
||||
name = "freeze beam"
|
||||
icon_state = "ice_2"
|
||||
fire_sound = 'sound/weapons/pulse3.ogg'
|
||||
damage = 0
|
||||
damage_type = BURN
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
nodamage = 1
|
||||
check_armour = "energy" // It actually checks heat/cold protection.
|
||||
var/target_temperature = 50
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#55AAFF"
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser
|
||||
hud_state = "water"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/temp/on_hit(atom/target, blocked = FALSE)
|
||||
..()
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
|
||||
var/protection = null
|
||||
var/potential_temperature_delta = null
|
||||
var/new_temperature = L.bodytemperature
|
||||
|
||||
if(target_temperature >= T20C) // Make it cold.
|
||||
protection = L.get_cold_protection(target_temperature)
|
||||
potential_temperature_delta = 75
|
||||
new_temperature = max(new_temperature - potential_temperature_delta, target_temperature)
|
||||
else // Make it hot.
|
||||
protection = L.get_heat_protection(target_temperature)
|
||||
potential_temperature_delta = 200 // Because spacemen temperature needs stupid numbers to actually hurt people.
|
||||
new_temperature = min(new_temperature + potential_temperature_delta, target_temperature)
|
||||
|
||||
var/temp_factor = abs(protection - 1)
|
||||
|
||||
new_temperature = round(new_temperature * temp_factor)
|
||||
L.bodytemperature = new_temperature
|
||||
//VOREStation Add Start - The last metroid has escaped from captivity, the galaxy is no longer safe.
|
||||
if(istype(L, /mob/living/simple_mob/vore/alienanimals/space_jellyfish) && target_temperature <= T0C)
|
||||
var/mob/living/simple_mob/vore/alienanimals/space_jellyfish/J = L
|
||||
J.adjustFireLoss(75)
|
||||
J.movement_cooldown *= 2
|
||||
//VOREStation Add End
|
||||
return 1
|
||||
|
||||
/obj/item/projectile/temp/hot
|
||||
name = "heat beam"
|
||||
target_temperature = 1000
|
||||
hud_state = "flame"
|
||||
|
||||
combustion = TRUE
|
||||
|
||||
/obj/item/projectile/meteor
|
||||
name = "meteor"
|
||||
icon = 'icons/obj/meteor.dmi'
|
||||
icon_state = "smallf"
|
||||
damage = 0
|
||||
damage_type = BRUTE
|
||||
nodamage = 1
|
||||
check_armour = "bullet"
|
||||
hud_state = "monkey"
|
||||
|
||||
/obj/item/projectile/meteor/Bump(atom/A as mob|obj|turf|area)
|
||||
if(A == firer)
|
||||
loc = A.loc
|
||||
return
|
||||
|
||||
sleep(-1) //Might not be important enough for a sleep(-1) but the sleep/spawn itself is necessary thanks to explosions and metoerhits
|
||||
|
||||
if(src)//Do not add to this if() statement, otherwise the meteor won't delete them
|
||||
if(A)
|
||||
|
||||
A.ex_act(2)
|
||||
playsound(src, 'sound/effects/meteorimpact.ogg', 40, 1)
|
||||
|
||||
for(var/mob/M in range(10, src))
|
||||
if(!M.stat && !istype(M, /mob/living/silicon/ai))\
|
||||
shake_camera(M, 3, 1)
|
||||
qdel(src)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
/obj/item/projectile/energy/floramut
|
||||
name = "alpha somatoray"
|
||||
icon_state = "energy"
|
||||
fire_sound = 'sound/effects/stealthoff.ogg'
|
||||
damage = 0
|
||||
damage_type = TOX
|
||||
nodamage = 1
|
||||
check_armour = "energy"
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#33CC00"
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser
|
||||
var/lasermod = 0
|
||||
combustion = FALSE
|
||||
hud_state = "electrothermal"
|
||||
|
||||
/obj/item/projectile/energy/floramut/on_hit(var/atom/target, var/blocked = 0)
|
||||
var/mob/living/M = target
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if((H.species.flags & IS_PLANT) && (M.nutrition < 500))
|
||||
if(prob(15))
|
||||
M.apply_effect((rand(30,80)),IRRADIATE)
|
||||
M.Weaken(5)
|
||||
var/datum/gender/TM = gender_datums[M.get_visible_gender()]
|
||||
for (var/mob/V in viewers(src))
|
||||
V.show_message(span_red("[M] writhes in pain as [TM.his] vacuoles boil."), 3, span_red("You hear the crunching of leaves."), 2)
|
||||
if(prob(35))
|
||||
// for (var/mob/V in viewers(src)) //Public messages commented out to prevent possible metaish genetics experimentation and stuff. - Cheridan
|
||||
// V.show_message("<font color='red'>[M] is mutated by the radiation beam.</font>", 3, "<font color='red'> You hear the snapping of twigs.</font>", 2)
|
||||
if(prob(80))
|
||||
randmutb(M)
|
||||
domutcheck(M,null)
|
||||
else
|
||||
randmutg(M)
|
||||
domutcheck(M,null)
|
||||
else
|
||||
M.adjustFireLoss(rand(5,15))
|
||||
M.show_message(span_red("The radiation beam singes you!"))
|
||||
// for (var/mob/V in viewers(src))
|
||||
// V.show_message("<font color='red'>[M] is singed by the radiation beam.</font>", 3, "<font color='red'> You hear the crackle of burning leaves.</font>", 2)
|
||||
else if(istype(target, /mob/living/carbon/))
|
||||
// for (var/mob/V in viewers(src))
|
||||
// V.show_message("The radiation beam dissipates harmlessly through [M]", 3)
|
||||
M.show_message(span_blue("The radiation beam dissipates harmlessly through your body."))
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/item/projectile/energy/floramut/gene
|
||||
name = "gamma somatoray"
|
||||
icon_state = "energy2"
|
||||
fire_sound = 'sound/effects/stealthoff.ogg'
|
||||
damage = 0
|
||||
damage_type = TOX
|
||||
nodamage = 1
|
||||
check_armour = "energy"
|
||||
var/decl/plantgene/gene = null
|
||||
hud_state = "electrothermal"
|
||||
|
||||
/obj/item/projectile/energy/florayield
|
||||
name = "beta somatoray"
|
||||
icon_state = "energy2"
|
||||
fire_sound = 'sound/effects/stealthoff.ogg'
|
||||
damage = 0
|
||||
damage_type = TOX
|
||||
nodamage = 1
|
||||
check_armour = "energy"
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#FFFFFF"
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser
|
||||
var/lasermod = 0
|
||||
hud_state = "electrothermal"
|
||||
|
||||
/obj/item/projectile/energy/florayield/on_hit(var/atom/target, var/blocked = 0)
|
||||
var/mob/living/M = target
|
||||
if(ishuman(target)) //These rays make plantmen fat.
|
||||
var/mob/living/carbon/human/H = M
|
||||
if((H.species.flags & IS_PLANT) && (M.nutrition < 500))
|
||||
M.adjust_nutrition(30)
|
||||
else if (istype(target, /mob/living/carbon/))
|
||||
M.show_message(span_blue("The radiation beam dissipates harmlessly through your body."))
|
||||
else
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/projectile/beam/mindflayer
|
||||
name = "flayer ray"
|
||||
|
||||
combustion = FALSE
|
||||
hud_state = "electrothermal"
|
||||
|
||||
/obj/item/projectile/beam/mindflayer/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/M = target
|
||||
M.Confuse(rand(5,8))
|
||||
..()
|
||||
|
||||
/obj/item/projectile/chameleon
|
||||
name = "bullet"
|
||||
icon_state = "bullet"
|
||||
damage = 1 // stop trying to murderbone with a fake gun dumbass!!!
|
||||
embed_chance = 0 // nope
|
||||
nodamage = 1
|
||||
damage_type = HALLOSS
|
||||
muzzle_type = /obj/effect/projectile/muzzle/bullet
|
||||
hud_state = "monkey"
|
||||
|
||||
/obj/item/projectile/bola
|
||||
name = "bola"
|
||||
icon_state = "bola"
|
||||
damage = 5
|
||||
embed_chance = 0 //Nada.
|
||||
damage_type = HALLOSS
|
||||
muzzle_type = null
|
||||
hud_state = "monkey"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/bola/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/M = target
|
||||
var/obj/item/weapon/handcuffs/legcuffs/bola/B = new(src.loc)
|
||||
if(!B.place_legcuffs(M,firer))
|
||||
if(B)
|
||||
qdel(B)
|
||||
..()
|
||||
|
||||
/obj/item/projectile/webball
|
||||
name = "ball of web"
|
||||
icon_state = "bola"
|
||||
damage = 10
|
||||
embed_chance = 0 //Nada.
|
||||
damage_type = BRUTE
|
||||
muzzle_type = null
|
||||
hud_state = "monkey"
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/webball/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(isturf(target.loc))
|
||||
var/obj/effect/spider/stickyweb/W = locate() in get_turf(target)
|
||||
if(!W && prob(75))
|
||||
visible_message("<span class='danger'>\The [src] splatters a layer of web on \the [target]!</span>")
|
||||
new /obj/effect/spider/stickyweb(target.loc)
|
||||
..()
|
||||
|
||||
/obj/item/projectile/beam/tungsten
|
||||
name = "core of molten tungsten"
|
||||
icon_state = "energy"
|
||||
fire_sound = 'sound/weapons/gauss_shoot.ogg'
|
||||
pass_flags = PASSTABLE | PASSGRILLE
|
||||
damage = 70
|
||||
damage_type = BURN
|
||||
check_armour = "laser"
|
||||
light_range = 4
|
||||
light_power = 3
|
||||
light_color = "#3300ff"
|
||||
hud_state = "alloy_spike"
|
||||
|
||||
muzzle_type = /obj/effect/projectile/muzzle/tungsten
|
||||
tracer_type = /obj/effect/projectile/tracer/tungsten
|
||||
impact_type = /obj/effect/projectile/impact/tungsten
|
||||
|
||||
/obj/item/projectile/beam/tungsten/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
L.add_modifier(/datum/modifier/grievous_wounds, 30 SECONDS)
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
|
||||
var/target_armor = H.getarmor(def_zone, check_armour)
|
||||
var/obj/item/organ/external/target_limb = H.get_organ(def_zone)
|
||||
|
||||
var/armor_special = 0
|
||||
|
||||
if(target_armor >= 60)
|
||||
var/turf/T = get_step(H, pick(alldirs - src.dir))
|
||||
H.throw_at(T, 1, 1, src)
|
||||
H.apply_damage(20, BURN, def_zone)
|
||||
if(target_limb)
|
||||
armor_special = 2
|
||||
target_limb.fracture()
|
||||
|
||||
else if(target_armor >= 45)
|
||||
H.apply_damage(15, BURN, def_zone)
|
||||
if(target_limb)
|
||||
armor_special = 1
|
||||
target_limb.dislocate()
|
||||
|
||||
else if(target_armor >= 30)
|
||||
H.apply_damage(10, BURN, def_zone)
|
||||
if(prob(30) && target_limb)
|
||||
armor_special = 1
|
||||
target_limb.dislocate()
|
||||
|
||||
else if(target_armor >= 15)
|
||||
H.apply_damage(5, BURN, def_zone)
|
||||
if(prob(15) && target_limb)
|
||||
armor_special = 1
|
||||
target_limb.dislocate()
|
||||
|
||||
if(armor_special > 1)
|
||||
target.visible_message("<span class='cult'>\The [src] slams into \the [target]'s [target_limb], reverberating loudly!</span>")
|
||||
|
||||
else if(armor_special)
|
||||
target.visible_message("<span class='cult'>\The [src] slams into \the [target]'s [target_limb] with a low rumble!</span>")
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/projectile/beam/tungsten/on_impact(var/atom/A)
|
||||
if(istype(A,/turf/simulated/shuttle/wall) || istype(A,/turf/simulated/wall) || (istype(A,/turf/simulated/mineral) && A.density) || istype(A,/obj/mecha) || istype(A,/obj/machinery/door))
|
||||
var/blast_dir = src.dir
|
||||
A.visible_message("<span class='danger'>\The [A] begins to glow!</span>")
|
||||
spawn(2 SECONDS)
|
||||
var/blastloc = get_step(A, blast_dir)
|
||||
if(blastloc)
|
||||
explosion(blastloc, -1, -1, 2, 3)
|
||||
..()
|
||||
|
||||
/obj/item/projectile/beam/tungsten/Bump(atom/A, forced=0)
|
||||
if(istype(A, /obj/structure/window)) //It does not pass through windows. It pulverizes them.
|
||||
var/obj/structure/window/W = A
|
||||
W.shatter()
|
||||
return 0
|
||||
..()
|
||||
/obj/item/projectile/ion
|
||||
name = "ion bolt"
|
||||
icon_state = "ion"
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
damage = 0
|
||||
damage_type = BURN
|
||||
nodamage = 1
|
||||
check_armour = "energy"
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#55AAFF"
|
||||
hud_state = "plasma_blast"
|
||||
hud_state_empty = "battery_empty"
|
||||
|
||||
combustion = FALSE
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/ion
|
||||
hitsound_wall = 'sound/weapons/effects/searwall.ogg'
|
||||
hitsound = 'sound/weapons/ionrifle.ogg'
|
||||
|
||||
var/sev1_range = 0
|
||||
var/sev2_range = 1
|
||||
var/sev3_range = 1
|
||||
var/sev4_range = 1
|
||||
|
||||
/obj/item/projectile/ion/on_impact(var/atom/target)
|
||||
empulse(target, sev1_range, sev2_range, sev3_range, sev4_range)
|
||||
..()
|
||||
|
||||
/obj/item/projectile/ion/small
|
||||
sev1_range = -1
|
||||
sev2_range = 0
|
||||
sev3_range = 0
|
||||
sev4_range = 1
|
||||
|
||||
/obj/item/projectile/ion/pistol
|
||||
sev1_range = 0
|
||||
sev2_range = 0
|
||||
sev3_range = 0
|
||||
sev4_range = 0
|
||||
|
||||
/obj/item/projectile/bullet/gyro
|
||||
name ="explosive bolt"
|
||||
icon_state= "bolter"
|
||||
damage = 50
|
||||
check_armour = "bullet"
|
||||
sharp = TRUE
|
||||
edge = TRUE
|
||||
hud_state = "rocket_fire"
|
||||
|
||||
/obj/item/projectile/bullet/gyro/on_hit(var/atom/target, var/blocked = 0)
|
||||
explosion(target, -1, 0, 2)
|
||||
..()
|
||||
|
||||
/obj/item/projectile/temp
|
||||
name = "freeze beam"
|
||||
icon_state = "ice_2"
|
||||
fire_sound = 'sound/weapons/pulse3.ogg'
|
||||
damage = 0
|
||||
damage_type = BURN
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
nodamage = 1
|
||||
check_armour = "energy" // It actually checks heat/cold protection.
|
||||
var/target_temperature = 50
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#55AAFF"
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser
|
||||
hud_state = "water"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/temp/on_hit(atom/target, blocked = FALSE)
|
||||
..()
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
|
||||
var/protection = null
|
||||
var/potential_temperature_delta = null
|
||||
var/new_temperature = L.bodytemperature
|
||||
|
||||
if(target_temperature >= T20C) // Make it cold.
|
||||
protection = L.get_cold_protection(target_temperature)
|
||||
potential_temperature_delta = 75
|
||||
new_temperature = max(new_temperature - potential_temperature_delta, target_temperature)
|
||||
else // Make it hot.
|
||||
protection = L.get_heat_protection(target_temperature)
|
||||
potential_temperature_delta = 200 // Because spacemen temperature needs stupid numbers to actually hurt people.
|
||||
new_temperature = min(new_temperature + potential_temperature_delta, target_temperature)
|
||||
|
||||
var/temp_factor = abs(protection - 1)
|
||||
|
||||
new_temperature = round(new_temperature * temp_factor)
|
||||
L.bodytemperature = new_temperature
|
||||
//VOREStation Add Start - The last metroid has escaped from captivity, the galaxy is no longer safe.
|
||||
if(istype(L, /mob/living/simple_mob/vore/alienanimals/space_jellyfish) && target_temperature <= T0C)
|
||||
var/mob/living/simple_mob/vore/alienanimals/space_jellyfish/J = L
|
||||
J.adjustFireLoss(75)
|
||||
J.movement_cooldown *= 2
|
||||
//VOREStation Add End
|
||||
return 1
|
||||
|
||||
/obj/item/projectile/temp/hot
|
||||
name = "heat beam"
|
||||
target_temperature = 1000
|
||||
hud_state = "flame"
|
||||
|
||||
combustion = TRUE
|
||||
|
||||
/obj/item/projectile/meteor
|
||||
name = "meteor"
|
||||
icon = 'icons/obj/meteor.dmi'
|
||||
icon_state = "smallf"
|
||||
damage = 0
|
||||
damage_type = BRUTE
|
||||
nodamage = 1
|
||||
check_armour = "bullet"
|
||||
hud_state = "monkey"
|
||||
|
||||
/obj/item/projectile/meteor/Bump(atom/A as mob|obj|turf|area)
|
||||
if(A == firer)
|
||||
loc = A.loc
|
||||
return
|
||||
|
||||
sleep(-1) //Might not be important enough for a sleep(-1) but the sleep/spawn itself is necessary thanks to explosions and metoerhits
|
||||
|
||||
if(src)//Do not add to this if() statement, otherwise the meteor won't delete them
|
||||
if(A)
|
||||
|
||||
A.ex_act(2)
|
||||
playsound(src, 'sound/effects/meteorimpact.ogg', 40, 1)
|
||||
|
||||
for(var/mob/M in range(10, src))
|
||||
if(!M.stat && !istype(M, /mob/living/silicon/ai))\
|
||||
shake_camera(M, 3, 1)
|
||||
qdel(src)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
/obj/item/projectile/energy/floramut
|
||||
name = "alpha somatoray"
|
||||
icon_state = "energy"
|
||||
fire_sound = 'sound/effects/stealthoff.ogg'
|
||||
damage = 0
|
||||
damage_type = TOX
|
||||
nodamage = 1
|
||||
check_armour = "energy"
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#33CC00"
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser
|
||||
var/lasermod = 0
|
||||
combustion = FALSE
|
||||
hud_state = "electrothermal"
|
||||
|
||||
/obj/item/projectile/energy/floramut/on_hit(var/atom/target, var/blocked = 0)
|
||||
var/mob/living/M = target
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if((H.species.flags & IS_PLANT) && (M.nutrition < 500))
|
||||
if(prob(15))
|
||||
M.apply_effect((rand(30,80)),IRRADIATE)
|
||||
M.Weaken(5)
|
||||
var/datum/gender/TM = gender_datums[M.get_visible_gender()]
|
||||
for (var/mob/V in viewers(src))
|
||||
V.show_message(span_red("[M] writhes in pain as [TM.his] vacuoles boil."), 3, span_red("You hear the crunching of leaves."), 2)
|
||||
if(prob(35))
|
||||
// for (var/mob/V in viewers(src)) //Public messages commented out to prevent possible metaish genetics experimentation and stuff. - Cheridan
|
||||
// V.show_message("<font color='red'>[M] is mutated by the radiation beam.</font>", 3, "<font color='red'> You hear the snapping of twigs.</font>", 2)
|
||||
if(prob(80))
|
||||
randmutb(M)
|
||||
domutcheck(M,null)
|
||||
else
|
||||
randmutg(M)
|
||||
domutcheck(M,null)
|
||||
else
|
||||
M.adjustFireLoss(rand(5,15))
|
||||
M.show_message(span_red("The radiation beam singes you!"))
|
||||
// for (var/mob/V in viewers(src))
|
||||
// V.show_message("<font color='red'>[M] is singed by the radiation beam.</font>", 3, "<font color='red'> You hear the crackle of burning leaves.</font>", 2)
|
||||
else if(istype(target, /mob/living/carbon/))
|
||||
// for (var/mob/V in viewers(src))
|
||||
// V.show_message("The radiation beam dissipates harmlessly through [M]", 3)
|
||||
M.show_message(span_blue("The radiation beam dissipates harmlessly through your body."))
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/item/projectile/energy/floramut/gene
|
||||
name = "gamma somatoray"
|
||||
icon_state = "energy2"
|
||||
fire_sound = 'sound/effects/stealthoff.ogg'
|
||||
damage = 0
|
||||
damage_type = TOX
|
||||
nodamage = 1
|
||||
check_armour = "energy"
|
||||
var/decl/plantgene/gene = null
|
||||
hud_state = "electrothermal"
|
||||
|
||||
/obj/item/projectile/energy/florayield
|
||||
name = "beta somatoray"
|
||||
icon_state = "energy2"
|
||||
fire_sound = 'sound/effects/stealthoff.ogg'
|
||||
damage = 0
|
||||
damage_type = TOX
|
||||
nodamage = 1
|
||||
check_armour = "energy"
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#FFFFFF"
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser
|
||||
var/lasermod = 0
|
||||
hud_state = "electrothermal"
|
||||
|
||||
/obj/item/projectile/energy/florayield/on_hit(var/atom/target, var/blocked = 0)
|
||||
var/mob/living/M = target
|
||||
if(ishuman(target)) //These rays make plantmen fat.
|
||||
var/mob/living/carbon/human/H = M
|
||||
if((H.species.flags & IS_PLANT) && (M.nutrition < 500))
|
||||
M.adjust_nutrition(30)
|
||||
else if (istype(target, /mob/living/carbon/))
|
||||
M.show_message(span_blue("The radiation beam dissipates harmlessly through your body."))
|
||||
else
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/projectile/beam/mindflayer
|
||||
name = "flayer ray"
|
||||
|
||||
combustion = FALSE
|
||||
hud_state = "electrothermal"
|
||||
|
||||
/obj/item/projectile/beam/mindflayer/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/M = target
|
||||
M.Confuse(rand(5,8))
|
||||
..()
|
||||
|
||||
/obj/item/projectile/chameleon
|
||||
name = "bullet"
|
||||
icon_state = "bullet"
|
||||
damage = 1 // stop trying to murderbone with a fake gun dumbass!!!
|
||||
embed_chance = 0 // nope
|
||||
nodamage = 1
|
||||
damage_type = HALLOSS
|
||||
muzzle_type = /obj/effect/projectile/muzzle/bullet
|
||||
hud_state = "monkey"
|
||||
|
||||
/obj/item/projectile/bola
|
||||
name = "bola"
|
||||
icon_state = "bola"
|
||||
damage = 5
|
||||
embed_chance = 0 //Nada.
|
||||
damage_type = HALLOSS
|
||||
muzzle_type = null
|
||||
hud_state = "monkey"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/bola/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/M = target
|
||||
var/obj/item/weapon/handcuffs/legcuffs/bola/B = new(src.loc)
|
||||
if(!B.place_legcuffs(M,firer))
|
||||
if(B)
|
||||
qdel(B)
|
||||
..()
|
||||
|
||||
/obj/item/projectile/webball
|
||||
name = "ball of web"
|
||||
icon_state = "bola"
|
||||
damage = 10
|
||||
embed_chance = 0 //Nada.
|
||||
damage_type = BRUTE
|
||||
muzzle_type = null
|
||||
hud_state = "monkey"
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/webball/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(isturf(target.loc))
|
||||
var/obj/effect/spider/stickyweb/W = locate() in get_turf(target)
|
||||
if(!W && prob(75))
|
||||
visible_message("<span class='danger'>\The [src] splatters a layer of web on \the [target]!</span>")
|
||||
new /obj/effect/spider/stickyweb(target.loc)
|
||||
..()
|
||||
|
||||
/obj/item/projectile/beam/tungsten
|
||||
name = "core of molten tungsten"
|
||||
icon_state = "energy"
|
||||
fire_sound = 'sound/weapons/gauss_shoot.ogg'
|
||||
pass_flags = PASSTABLE | PASSGRILLE
|
||||
damage = 70
|
||||
damage_type = BURN
|
||||
check_armour = "laser"
|
||||
light_range = 4
|
||||
light_power = 3
|
||||
light_color = "#3300ff"
|
||||
hud_state = "alloy_spike"
|
||||
|
||||
muzzle_type = /obj/effect/projectile/muzzle/tungsten
|
||||
tracer_type = /obj/effect/projectile/tracer/tungsten
|
||||
impact_type = /obj/effect/projectile/impact/tungsten
|
||||
|
||||
/obj/item/projectile/beam/tungsten/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
L.add_modifier(/datum/modifier/grievous_wounds, 30 SECONDS)
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
|
||||
var/target_armor = H.getarmor(def_zone, check_armour)
|
||||
var/obj/item/organ/external/target_limb = H.get_organ(def_zone)
|
||||
|
||||
var/armor_special = 0
|
||||
|
||||
if(target_armor >= 60)
|
||||
var/turf/T = get_step(H, pick(alldirs - src.dir))
|
||||
H.throw_at(T, 1, 1, src)
|
||||
H.apply_damage(20, BURN, def_zone)
|
||||
if(target_limb)
|
||||
armor_special = 2
|
||||
target_limb.fracture()
|
||||
|
||||
else if(target_armor >= 45)
|
||||
H.apply_damage(15, BURN, def_zone)
|
||||
if(target_limb)
|
||||
armor_special = 1
|
||||
target_limb.dislocate()
|
||||
|
||||
else if(target_armor >= 30)
|
||||
H.apply_damage(10, BURN, def_zone)
|
||||
if(prob(30) && target_limb)
|
||||
armor_special = 1
|
||||
target_limb.dislocate()
|
||||
|
||||
else if(target_armor >= 15)
|
||||
H.apply_damage(5, BURN, def_zone)
|
||||
if(prob(15) && target_limb)
|
||||
armor_special = 1
|
||||
target_limb.dislocate()
|
||||
|
||||
if(armor_special > 1)
|
||||
target.visible_message("<span class='cult'>\The [src] slams into \the [target]'s [target_limb], reverberating loudly!</span>")
|
||||
|
||||
else if(armor_special)
|
||||
target.visible_message("<span class='cult'>\The [src] slams into \the [target]'s [target_limb] with a low rumble!</span>")
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/projectile/beam/tungsten/on_impact(var/atom/A)
|
||||
if(istype(A,/turf/simulated/shuttle/wall) || istype(A,/turf/simulated/wall) || (istype(A,/turf/simulated/mineral) && A.density) || istype(A,/obj/mecha) || istype(A,/obj/machinery/door))
|
||||
var/blast_dir = src.dir
|
||||
A.visible_message("<span class='danger'>\The [A] begins to glow!</span>")
|
||||
spawn(2 SECONDS)
|
||||
var/blastloc = get_step(A, blast_dir)
|
||||
if(blastloc)
|
||||
explosion(blastloc, -1, -1, 2, 3)
|
||||
..()
|
||||
|
||||
/obj/item/projectile/beam/tungsten/Bump(atom/A, forced=0)
|
||||
if(istype(A, /obj/structure/window)) //It does not pass through windows. It pulverizes them.
|
||||
var/obj/structure/window/W = A
|
||||
W.shatter()
|
||||
return 0
|
||||
..()
|
||||
|
||||
Reference in New Issue
Block a user