mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-11 23:23:28 +01:00
Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into russian
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
icon_state = "laser"
|
||||
item_state = "laser"
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
charge_cost = 830
|
||||
charge_cost = 760
|
||||
w_class = 3.0
|
||||
materials = list(MAT_METAL=2000)
|
||||
origin_tech = "combat=3;magnets=2"
|
||||
|
||||
@@ -207,6 +207,24 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
|
||||
var/overheat_time = 16
|
||||
var/recent_reload = 1
|
||||
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator/super
|
||||
name = "super-kinetic accelerator"
|
||||
desc = "An upgraded, superior version of the proto-kinetic accelerator."
|
||||
icon_state = "kineticgun_u"
|
||||
projectile_type = "/obj/item/projectile/kinetic/super"
|
||||
overheat_time = 15
|
||||
fire_delay = 15
|
||||
origin_tech = "combat=3;powerstorage=2"
|
||||
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator/hyper
|
||||
name = "hyper-kinetic accelerator"
|
||||
desc = "An upgraded, even more superior version of the proto-kinetic accelerator."
|
||||
icon_state = "kineticgun_h"
|
||||
projectile_type = "/obj/item/projectile/kinetic/hyper"
|
||||
overheat_time = 13
|
||||
fire_delay = 13
|
||||
origin_tech = "combat=4;powerstorage=3"
|
||||
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg
|
||||
flags = NODROP
|
||||
|
||||
@@ -337,4 +355,69 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
|
||||
|
||||
self_recharge = 1
|
||||
use_external_power = 1
|
||||
recharge_time = 5
|
||||
recharge_time = 5
|
||||
|
||||
/obj/item/weapon/gun/energy/wormhole_projector
|
||||
name = "bluespace wormhole projector"
|
||||
desc = "A projector that emits high density quantum-coupled bluespace beams."
|
||||
projectile_type = "/obj/item/projectile/beam/wormhole"
|
||||
charge_cost = 0
|
||||
fire_sound = "sound/weapons/pulse3.ogg"
|
||||
item_state = null
|
||||
icon_state = "wormhole_projector100"
|
||||
modifystate = "wormhole_projector"
|
||||
var/obj/effect/portal/blue
|
||||
var/obj/effect/portal/orange
|
||||
|
||||
var/mode = 0 //0 = blue 1 = orange
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/wormhole_projector/attack_self(mob/living/user as mob)
|
||||
switch_modes()
|
||||
|
||||
/obj/item/weapon/gun/energy/wormhole_projector/proc/switch_modes(mob/living/user as mob)
|
||||
switch(mode)
|
||||
if(0)
|
||||
mode = 1
|
||||
user << "<span class='warning'>[name] is now set to orange.</span>"
|
||||
projectile_type = "/obj/item/projectile/beam/wormhole/orange"
|
||||
modifystate = "wormhole_projector_orange"
|
||||
if(1)
|
||||
mode = 0
|
||||
user << "<span class='warning'>[name] is now set to blue.</span>"
|
||||
projectile_type = "/obj/item/projectile/beam/wormhole"
|
||||
modifystate = "wormhole_projector"
|
||||
update_icon()
|
||||
if(user.hand)
|
||||
user.update_inv_l_hand()
|
||||
else
|
||||
user.update_inv_r_hand()
|
||||
|
||||
/obj/item/weapon/gun/energy/wormhole_projector/Fire(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, params, reflex = 0)
|
||||
..()
|
||||
switch_modes(user)
|
||||
|
||||
/obj/item/weapon/gun/energy/wormhole_projector/proc/portal_destroyed(obj/effect/portal/P)
|
||||
if(P.icon_state == "portal")
|
||||
blue = null
|
||||
if(orange)
|
||||
orange.target = null
|
||||
else
|
||||
orange = null
|
||||
if(blue)
|
||||
blue.target = null
|
||||
|
||||
/obj/item/weapon/gun/energy/wormhole_projector/proc/create_portal(obj/item/projectile/beam/wormhole/W)
|
||||
var/obj/effect/portal/P = new /obj/effect/portal(get_turf(W), null, src)
|
||||
P.precision = 0
|
||||
P.failchance = 0
|
||||
if(W.name == "bluespace beam")
|
||||
qdel(blue)
|
||||
blue = P
|
||||
else
|
||||
qdel(orange)
|
||||
P.icon_state = "portal1"
|
||||
orange = P
|
||||
if(orange && blue)
|
||||
blue.target = get_turf(orange)
|
||||
orange.target = get_turf(blue)
|
||||
@@ -0,0 +1,127 @@
|
||||
/obj/item/weapon/gun/medbeam
|
||||
name = "Medical Beamgun"
|
||||
desc = "Delivers medical nanites in a focused beam."
|
||||
icon = 'icons/obj/chronos.dmi'
|
||||
icon_state = "chronogun"
|
||||
item_state = "chronogun"
|
||||
w_class = 3.0
|
||||
|
||||
var/mob/living/current_target
|
||||
var/last_check = 0
|
||||
var/check_delay = 10 //Check los as often as possible, max resolution is SSobj tick though
|
||||
var/max_range = 8
|
||||
var/active = 0
|
||||
var/datum/beam/current_beam = null
|
||||
|
||||
heavy_weapon = 1
|
||||
|
||||
/obj/item/weapon/gun/medbeam/New()
|
||||
..()
|
||||
processing_objects.Add(src)
|
||||
|
||||
/obj/item/weapon/gun/medbeam/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/gun/medbeam/dropped(mob/user)
|
||||
..()
|
||||
LoseTarget()
|
||||
|
||||
/obj/item/weapon/gun/medbeam/proc/LoseTarget()
|
||||
if(active)
|
||||
qdel(current_beam)
|
||||
active = 0
|
||||
on_beam_relase(current_target)
|
||||
current_target = null
|
||||
|
||||
/obj/item/weapon/gun/medbeam/Fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, params)
|
||||
add_fingerprint(user)
|
||||
|
||||
if(!isliving(target))
|
||||
return
|
||||
if(current_target)
|
||||
LoseTarget()
|
||||
|
||||
current_target = target
|
||||
active = 1
|
||||
current_beam = new(user,current_target,time=6000)
|
||||
spawn(0)
|
||||
current_beam.Start()
|
||||
|
||||
feedback_add_details("gun_fired","[src.type]")
|
||||
|
||||
/obj/item/weapon/gun/medbeam/afterattack(obj/target, mob/user, proximity)
|
||||
if(target.loc == loc || target == user)
|
||||
return
|
||||
|
||||
if(!current_target && isliving(target))
|
||||
current_target = target
|
||||
active = 1
|
||||
current_beam = new(user,current_target,time=6000)
|
||||
spawn(0)
|
||||
current_beam.Start()
|
||||
|
||||
/obj/item/weapon/gun/medbeam/process()
|
||||
var/mob/living/carbon/human/H = loc
|
||||
if(!istype(H))
|
||||
LoseTarget()
|
||||
return
|
||||
|
||||
if(!current_target)
|
||||
LoseTarget()
|
||||
return
|
||||
|
||||
if(world.time <= last_check+check_delay)
|
||||
return
|
||||
|
||||
last_check = world.time
|
||||
|
||||
if(get_dist(H,current_target)>max_range || !los_check(H,current_target))
|
||||
LoseTarget()
|
||||
H << "<span class='warning'>You lose control of the beam!</span>"
|
||||
return
|
||||
|
||||
if(current_target)
|
||||
on_beam_tick(current_target)
|
||||
|
||||
/obj/item/weapon/gun/medbeam/proc/los_check(mob/user,mob/target)
|
||||
var/turf/user_turf = user.loc
|
||||
if(!istype(user_turf))
|
||||
return 0
|
||||
var/obj/dummy = new(user_turf)
|
||||
dummy.pass_flags |= PASSTABLE & PASSGLASS & PASSGRILLE //Grille/Glass so it can be used through common windows
|
||||
for(var/turf/turf in getline(user_turf,target))
|
||||
if(turf.density)
|
||||
qdel(dummy)
|
||||
return 0
|
||||
for(var/atom/movable/AM in turf)
|
||||
if(!AM.CanPass(dummy,turf,1))
|
||||
qdel(dummy)
|
||||
return 0
|
||||
for(var/obj/effect/ebeam/medical/B in turf)// Don't cross the str-beams!
|
||||
if(B.owner != current_beam)
|
||||
explosion(B.loc,0,3,5,8)
|
||||
qdel(dummy)
|
||||
return 0
|
||||
qdel(dummy)
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/gun/medbeam/proc/on_beam_hit(var/mob/living/target)
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/medbeam/proc/on_beam_tick(var/mob/living/target)
|
||||
target.adjustBruteLoss(-4)
|
||||
target.adjustFireLoss(-4)
|
||||
if(ishuman(target))
|
||||
var/var/mob/living/carbon/human/H = target
|
||||
for(var/obj/item/organ/external/E in H.organs)
|
||||
if(prob(10))
|
||||
if(E.mend_fracture())
|
||||
E.perma_injury = 0
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/medbeam/proc/on_beam_relase(var/mob/living/target)
|
||||
return
|
||||
|
||||
/obj/effect/ebeam/medical
|
||||
name = "medical beam"
|
||||
@@ -9,6 +9,7 @@
|
||||
/obj/item/projectile/energy/electrode
|
||||
name = "electrode"
|
||||
icon_state = "spark"
|
||||
color = "#FFFF00"
|
||||
nodamage = 1
|
||||
stun = 5
|
||||
weaken = 5
|
||||
|
||||
@@ -218,6 +218,16 @@
|
||||
damage_type = BRUTE
|
||||
flag = "bomb"
|
||||
range = 3
|
||||
var/splash = 0
|
||||
|
||||
/obj/item/projectile/kinetic/super
|
||||
damage = 11
|
||||
range = 4
|
||||
|
||||
/obj/item/projectile/kinetic/hyper
|
||||
damage = 12
|
||||
range = 5
|
||||
splash = 1
|
||||
|
||||
obj/item/projectile/kinetic/New()
|
||||
var/turf/proj_turf = get_turf(src)
|
||||
@@ -243,6 +253,11 @@ obj/item/projectile/kinetic/New()
|
||||
var/turf/simulated/mineral/M = target_turf
|
||||
M.gets_drilled(firer)
|
||||
new /obj/item/effect/kinetic_blast(target_turf)
|
||||
if(src.splash)
|
||||
for(var/turf/T in range(splash, target_turf))
|
||||
if(istype(T, /turf/simulated/mineral))
|
||||
var/turf/simulated/mineral/M = T
|
||||
M.gets_drilled(firer)
|
||||
|
||||
/obj/item/effect/kinetic_blast
|
||||
name = "kinetic explosion"
|
||||
@@ -316,3 +331,27 @@ obj/item/projectile/kinetic/New()
|
||||
/obj/item/projectile/plasma/adv/mech
|
||||
damage = 10
|
||||
range = 6
|
||||
|
||||
/obj/item/projectile/beam/wormhole
|
||||
name = "bluespace beam"
|
||||
icon_state = "spark"
|
||||
hitsound = "sparks"
|
||||
damage = 3
|
||||
var/obj/item/weapon/gun/energy/wormhole_projector/gun = null
|
||||
color = "#33CCFF"
|
||||
|
||||
/obj/item/projectile/beam/wormhole/orange
|
||||
name = "orange bluespace beam"
|
||||
color = "#FF6600"
|
||||
|
||||
/obj/item/projectile/beam/wormhole/OnFired()
|
||||
gun = shot_from
|
||||
|
||||
/obj/item/projectile/beam/wormhole/on_hit(atom/target)
|
||||
if(ismob(target))
|
||||
var/turf/portal_destination = pick(orange(6, src))
|
||||
do_teleport(target, portal_destination)
|
||||
return ..()
|
||||
if(!gun)
|
||||
qdel(src)
|
||||
gun.create_portal(src)
|
||||
Reference in New Issue
Block a user