12/21 modernizations from TG live (#103)
* sync (#3) * shuttle auto call * Merge /vore into /master (#39) * progress * Compile errors fixed No idea if it's test worthy tho as conflicts with race overhaul and narky removal. * Update admins.txt * efforts continue Fuck grab code, seriously * grab code is cancer * Execute the Narkism Do not hesitate. Show no mercy. * holy shit grab code is awful * have I bitched about grab code My bitching, let me show you it * código de agarre es una mierda No really it is * yeah I don't even know anymore. * Lolnope. Fuck grab code * I'm not even sure what to fix anymore * Self eating is not an acceptable fate * Taste the void, son. * My code doesn't pass it's own sanity check. Maybe it's a sign of things to come. * uncommented and notes * It Works and I Don't Know Why (#38) * shuttle auto call * it works and I don't know why * Subsystem 12/21 Most Recent TG subsystem folder * globalvars 12/21 Tossed out the flavor_misc and parallax files * Onclick 12/21 as well as .dme updates * _defines 12/21 ommited old _MC.dm * _HELPERS 12/21 Preserved snowflake placement of furry sprites * _defeines/genetics reapplied narkism holdover for snowflake races. * Oops forgot mutant colors * modules porting 12/21 + Sounds/icons Admin, Client and most of mob life files ommitted * enviroment file * Admin optimizations ahelp log system kept * Mob ports 12/21 Flavor text preserved * datums ported 12/21 * Game ported 12/21 * batch of duplicate fixes/dogborg work Dogborgs need to be modernized to refractored borg standards. * moar fixes * Maps and futher compile fixes
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
force = 40
|
||||
throwforce = 20
|
||||
armour_penetration = 50
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
var/datum/effect_system/spark_spread/spark_system
|
||||
|
||||
/obj/item/weapon/katana/energy/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
@@ -37,7 +38,7 @@
|
||||
/obj/item/weapon/katana/energy/proc/returnToOwner(mob/living/carbon/human/user, doSpark = 1, caught = 0)
|
||||
if(!istype(user))
|
||||
return
|
||||
loc = get_turf(src)
|
||||
forceMove(get_turf(user))
|
||||
|
||||
if(doSpark)
|
||||
spark_system.start()
|
||||
@@ -50,7 +51,6 @@
|
||||
else if(user.equip_to_slot_if_possible(src, slot_belt, 0, 1, 1))
|
||||
msg = "Your Energy Katana teleports back to you, sheathing itself as it does so!</span>"
|
||||
else
|
||||
loc = get_turf(user)
|
||||
msg = "Your Energy Katana teleports to your location!"
|
||||
|
||||
if(caught)
|
||||
|
||||
@@ -14,7 +14,7 @@ Contents:
|
||||
typepath = /datum/round_event/ghost_role/ninja
|
||||
max_occurrences = 1
|
||||
earliest_start = 30000 // 1 hour
|
||||
|
||||
min_players = 15
|
||||
|
||||
/datum/round_event/ghost_role/ninja
|
||||
var/success_spawn = 0
|
||||
@@ -55,7 +55,7 @@ Contents:
|
||||
if(!candidates.len)
|
||||
return NOT_ENOUGH_PLAYERS
|
||||
|
||||
var/mob/dead/selected_candidate = popleft(candidates)
|
||||
var/mob/dead/selected_candidate = pick_n_take(candidates)
|
||||
var/key = selected_candidate.key
|
||||
|
||||
//Prepare ninja player mind
|
||||
@@ -66,7 +66,7 @@ Contents:
|
||||
var/list/possible_targets = list()
|
||||
for(var/datum/mind/M in ticker.minds)
|
||||
if(M.current && M.current.stat != DEAD)
|
||||
if(istype(M.current,/mob/living/carbon/human))
|
||||
if(ishuman(M.current))
|
||||
if(M.special_role)
|
||||
possible_targets[M] = 0 //bad-guy
|
||||
else if(M.assigned_role in command_positions)
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
heat_protection = HANDS
|
||||
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
|
||||
strip_delay = 120
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
var/draining = 0
|
||||
var/candrain = 0
|
||||
var/mindrain = 200
|
||||
@@ -40,7 +41,7 @@
|
||||
/obj/item/clothing/gloves/space_ninja/Touch(atom/A,proximity)
|
||||
if(!candrain || draining)
|
||||
return 0
|
||||
if(!istype(loc, /mob/living/carbon/human))
|
||||
if(!ishuman(loc))
|
||||
return 0 //Only works while worn
|
||||
|
||||
var/mob/living/carbon/human/H = loc
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
name = "ninja hood"
|
||||
icon_state = "s-ninja"
|
||||
item_state = "s-ninja_mask"
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 25)
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 25, fire = 100, acid = 100)
|
||||
strip_delay = 12
|
||||
unacidable = 1
|
||||
blockTracking = 1//Roughly the only unique thing about this helmet.
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
blockTracking = 1//Roughly the only unique thing about this helmet.
|
||||
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
|
||||
@@ -16,3 +16,4 @@ Contents:
|
||||
icon_state = "s-ninja"
|
||||
item_state = "s-ninja_mask"
|
||||
strip_delay = 120
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
|
||||
@@ -3,7 +3,7 @@ It will teleport people to a holding facility after 30 seconds. (Check the proce
|
||||
It is possible to destroy the net by the occupant or someone else.
|
||||
*/
|
||||
|
||||
/obj/effect/energy_net
|
||||
/obj/structure/energy_net
|
||||
name = "energy net"
|
||||
desc = "It's a net made of green energy."
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
@@ -14,27 +14,21 @@ It is possible to destroy the net by the occupant or someone else.
|
||||
mouse_opacity = 1//So you can hit it with stuff.
|
||||
anchored = 1//Can't drag/grab the trapped mob.
|
||||
layer = ABOVE_ALL_MOB_LAYER
|
||||
var/health = 25//How much health it has.
|
||||
obj_integrity = 25//How much health it has.
|
||||
max_integrity = 25
|
||||
var/mob/living/affecting = null//Who it is currently affecting, if anyone.
|
||||
var/mob/living/master = null//Who shot web. Will let this person know if the net was successful or failed.
|
||||
|
||||
|
||||
|
||||
/obj/effect/energy_net/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1)
|
||||
/obj/structure/energy_net/play_attack_sound(damage, damage_type = BRUTE, damage_flag = 0)
|
||||
switch(damage_type)
|
||||
if(BRUTE)
|
||||
if(sound_effect)
|
||||
playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1)
|
||||
playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1)
|
||||
if(BURN)
|
||||
if(sound_effect)
|
||||
playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1)
|
||||
else
|
||||
return
|
||||
health -= damage
|
||||
if(health <=0)
|
||||
qdel(src)
|
||||
playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1)
|
||||
|
||||
/obj/effect/energy_net/Destroy()
|
||||
/obj/structure/energy_net/Destroy()
|
||||
if(affecting)
|
||||
var/mob/living/carbon/M = affecting
|
||||
M.anchored = 0
|
||||
@@ -44,7 +38,7 @@ It is possible to destroy the net by the occupant or someone else.
|
||||
master << "<span class='userdanger'>ERROR</span>: unable to initiate transport protocol. Procedure terminated."
|
||||
return ..()
|
||||
|
||||
/obj/effect/energy_net/process(mob/living/carbon/M)
|
||||
/obj/structure/energy_net/process(mob/living/carbon/M)
|
||||
var/check = 30//30 seconds before teleportation. Could be extended I guess.
|
||||
var/mob_name = affecting.name//Since they will report as null if terminated before teleport.
|
||||
//The person can still try and attack the net when inside.
|
||||
@@ -67,37 +61,33 @@ It is possible to destroy the net by the occupant or someone else.
|
||||
|
||||
density = 0//Make the net pass-through.
|
||||
invisibility = INVISIBILITY_ABSTRACT//Make the net invisible so all the animations can play out.
|
||||
health = INFINITY//Make the net invincible so that an explosion/something else won't kill it while, spawn() is running.
|
||||
resistance_flags |= INDESTRUCTIBLE //Make the net invincible so that an explosion/something else won't kill it while, spawn() is running.
|
||||
for(var/obj/item/W in M)
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
if(W==M:w_uniform)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(W == H.w_uniform)
|
||||
continue//So all they're left with are shoes and uniform.
|
||||
if(W==M:shoes)
|
||||
if(W == H.shoes)
|
||||
continue
|
||||
M.unEquip(W)
|
||||
|
||||
spawn(0)
|
||||
playsound(M.loc, 'sound/effects/sparks4.ogg', 50, 1)
|
||||
anim(M.loc,M,'icons/mob/mob.dmi',,"phaseout",,M.dir)
|
||||
playsound(M.loc, 'sound/effects/sparks4.ogg', 50, 1)
|
||||
PoolOrNew(/obj/effect/overlay/temp/dir_setting/ninja/phase/out, list(get_turf(M), M.dir))
|
||||
|
||||
M.loc = pick(holdingfacility)//Throw mob in to the holding facility.
|
||||
visible_message("[M] suddenly vanishes!")
|
||||
M.forceMove(pick(holdingfacility)) //Throw mob in to the holding facility.
|
||||
M << "<span class='danger'>You appear in a strange place!</span>"
|
||||
|
||||
spawn(0)
|
||||
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
|
||||
spark_system.set_up(5, 0, M.loc)
|
||||
spark_system.start()
|
||||
playsound(M.loc, 'sound/effects/phasein.ogg', 25, 1)
|
||||
playsound(M.loc, 'sound/effects/sparks2.ogg', 50, 1)
|
||||
anim(M.loc,M,'icons/mob/mob.dmi',,"phasein",,M.dir)
|
||||
qdel(src)//Wait for everything to finish, delete the net. Else it will stop everything once net is deleted, including the spawn(0).
|
||||
|
||||
for(var/mob/O in viewers(src, 3))
|
||||
O.show_message("[M] vanishes!", 1, "<span class='italics'>You hear sparks flying!</span>", 2)
|
||||
|
||||
if(!isnull(master))//As long as they still exist.
|
||||
master << "<span class='notice'><b>SUCCESS</b>: transport procedure of \the [affecting] complete.</span>"
|
||||
M.notransform = 0
|
||||
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
|
||||
spark_system.set_up(5, 0, M.loc)
|
||||
spark_system.start()
|
||||
playsound(M.loc, 'sound/effects/phasein.ogg', 25, 1)
|
||||
playsound(M.loc, 'sound/effects/sparks2.ogg', 50, 1)
|
||||
PoolOrNew(/obj/effect/overlay/temp/dir_setting/ninja/phase, list(get_turf(M), M.dir))
|
||||
qdel(src)
|
||||
|
||||
else//And they are free.
|
||||
M << "<span class='notice'>You are free of the net!</span>"
|
||||
@@ -106,61 +96,7 @@ It is possible to destroy the net by the occupant or someone else.
|
||||
|
||||
|
||||
|
||||
/obj/effect/energy_net/bullet_act(obj/item/projectile/Proj)
|
||||
. = ..()
|
||||
take_damage(Proj.damage, Proj.damage_type)
|
||||
|
||||
|
||||
|
||||
/obj/effect/energy_net/ex_act(severity, target)
|
||||
switch(severity)
|
||||
if(1)
|
||||
qdel(src)
|
||||
if(2)
|
||||
qdel(src)
|
||||
if(3)
|
||||
take_damage(rand(10,25), BRUTE, 0)
|
||||
|
||||
/obj/effect/energy_net/blob_act(obj/effect/blob/B)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/energy_net/hitby(atom/movable/AM)
|
||||
..()
|
||||
var/tforce = 0
|
||||
if(ismob(AM))
|
||||
tforce = 10
|
||||
else if(isobj(AM))
|
||||
var/obj/O = AM
|
||||
tforce = O.throwforce
|
||||
take_damage(tforce)
|
||||
|
||||
|
||||
/obj/effect/energy_net/attack_hulk(mob/living/carbon/human/user)
|
||||
..(user, 1)
|
||||
user.visible_message("<span class='danger'>[user] rips the energy net apart!</span>", \
|
||||
"<span class='notice'>You easily destroy the energy net.</span>")
|
||||
qdel(src)
|
||||
|
||||
|
||||
|
||||
/obj/effect/energy_net/attack_paw(mob/user)
|
||||
/obj/structure/energy_net/attack_paw(mob/user)
|
||||
return attack_hand()
|
||||
|
||||
|
||||
|
||||
/obj/effect/energy_net/attack_alien(mob/living/user)
|
||||
user.do_attack_animation(src)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1)
|
||||
user.visible_message("<span class='danger'>[user] slices the energy net apart!</span>", \
|
||||
"\green You slice the energy net to pieces.")
|
||||
qdel(src)
|
||||
|
||||
|
||||
|
||||
/obj/effect/energy_net/attacked_by(obj/item/weapon/W, mob/user)
|
||||
..()
|
||||
take_damage(W.force, W.damtype)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -23,5 +23,6 @@
|
||||
reagents.trans_id_to(H, "radium", a_transfer)
|
||||
H << "<span class='danger'>You are beginning to feel the after-effect of the injection.</span>"
|
||||
a_boost--
|
||||
H << "<span class='notice'>There are <B>[a_boost]</B> adrenaline boosts remaining.</span>"
|
||||
s_coold = 3
|
||||
return
|
||||
@@ -9,22 +9,22 @@
|
||||
if(!ninjacost(200,N_STEALTH_CANCEL) && iscarbon(C))
|
||||
var/mob/living/carbon/human/H = affecting
|
||||
if(C.client)//Monkeys without a client can still step_to() and bypass the net. Also, netting inactive people is lame.
|
||||
if(!locate(/obj/effect/energy_net) in C.loc)//Check if they are already being affected by an energy net.
|
||||
if(!locate(/obj/structure/energy_net) in C.loc)//Check if they are already being affected by an energy net.
|
||||
for(var/turf/T in getline(H.loc, C.loc))
|
||||
if(T.density)//Don't want them shooting nets through walls. It's kind of cheesy.
|
||||
H << "<span class='warning'>You may not use an energy net through solid obstacles!</span>"
|
||||
return
|
||||
spawn(0)
|
||||
H.Beam(C,"n_beam",,15)
|
||||
H.Beam(C,"n_beam",time=15)
|
||||
H.say("Get over here!")
|
||||
var/obj/effect/energy_net/E = new /obj/effect/energy_net(C.loc)
|
||||
var/obj/structure/energy_net/E = new /obj/structure/energy_net(C.loc)
|
||||
H.visible_message("<span class='danger'>[H] caught [C] with an energy net!</span>","<span class='notice'>You caught [C] with an energy net!</span>")
|
||||
E.affecting = C
|
||||
E.master = H
|
||||
spawn(0)//Parallel processing.
|
||||
E.process(C)
|
||||
else
|
||||
H << "<span class='warning'>They are already trapped inside an energy net!</span>"
|
||||
H << "<span class='warning'>[C.p_they(TRUE)] are already trapped inside an energy net!</span>"
|
||||
else
|
||||
H << "<span class='warning'>They will bring no honor to your Clan!</span>"
|
||||
H << "<span class='warning'>[C.p_they(TRUE)] will bring no honor to your Clan!</span>"
|
||||
return
|
||||
@@ -9,11 +9,11 @@
|
||||
|
||||
if(!ninjacost(10))
|
||||
var/mob/living/carbon/human/H = affecting
|
||||
var/slot = H.hand ? slot_l_hand : slot_r_hand
|
||||
|
||||
if(H.equip_to_slot_or_del(new /obj/item/weapon/throwing_star/ninja(H), slot))
|
||||
var/obj/item/weapon/throwing_star/ninja/N = new(H)
|
||||
if(H.put_in_hands(N))
|
||||
H << "<span class='notice'>A throwing star has been created in your hand!</span>"
|
||||
|
||||
else
|
||||
qdel(N)
|
||||
H.throw_mode_on() //So they can quickly throw it.
|
||||
|
||||
|
||||
|
||||
@@ -18,9 +18,9 @@ Contents:
|
||||
U << "<span class='warning'>You don't have enough power to enable Stealth!</span>"
|
||||
return
|
||||
s_active=!s_active
|
||||
animate(U, alpha = 0,time = 15)
|
||||
animate(U, alpha = 50,time = 15)
|
||||
U.visible_message("<span class='warning'>[U.name] vanishes into thin air!</span>", \
|
||||
"<span class='notice'>You are now invisible to normal detection.</span>")
|
||||
"<span class='notice'>You are now mostly invisible to normal detection.</span>")
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
/obj/item/clothing/suit/space/space_ninja/proc/ninja_sword_recall()
|
||||
set name = "Recall Energy Katana (Variable Cost)"
|
||||
set desc = "Teleports the Energy Katana linked to this suit to it's wearer, cost based on distance."
|
||||
set desc = "Teleports the Energy Katana linked to this suit to its wearer, cost based on distance."
|
||||
set category = "Ninja Ability"
|
||||
set popup_menu = 0
|
||||
|
||||
@@ -32,9 +32,6 @@
|
||||
if(energyKatana in C.stomach_contents)
|
||||
C.stomach_contents -= energyKatana
|
||||
|
||||
if(energyKatana in C.internal_organs)
|
||||
C.internal_organs -= energyKatana
|
||||
|
||||
energyKatana.loc = get_turf(energyKatana)
|
||||
|
||||
if(inview) //If we can see the katana, throw it towards ourselves, damaging people as we go.
|
||||
|
||||
@@ -12,7 +12,7 @@ Contents:
|
||||
|
||||
//Handles elporting while grabbing someone
|
||||
/obj/item/clothing/suit/space/space_ninja/proc/handle_teleport_grab(turf/T, mob/living/H)
|
||||
if(H.pulling && (istype(H.pulling, /mob/living)))
|
||||
if(H.pulling && (isliving(H.pulling)))
|
||||
var/mob/living/victim = H.pulling
|
||||
if(!victim.anchored)
|
||||
victim.forceMove(locate(T.x+rand(-1,1),T.y+rand(-1,1),T.z))
|
||||
@@ -31,22 +31,19 @@ Contents:
|
||||
var/turf/destination = get_teleport_loc(H.loc,H,9,1,3,1,0,1)
|
||||
var/turf/mobloc = get_turf(H.loc)//Safety
|
||||
|
||||
if(destination&&istype(mobloc, /turf))//So we don't teleport out of containers
|
||||
spawn(0)
|
||||
playsound(H.loc, "sparks", 50, 1)
|
||||
anim(mobloc,src,'icons/mob/mob.dmi',,"phaseout",,H.dir)
|
||||
if(destination && isturf(mobloc))//So we don't teleport out of containers
|
||||
playsound(H.loc, "sparks", 50, 1)
|
||||
PoolOrNew(/obj/effect/overlay/temp/dir_setting/ninja/phase/out, list(get_turf(H), H.dir))
|
||||
|
||||
handle_teleport_grab(destination, H)
|
||||
H.loc = destination
|
||||
|
||||
spawn(0)
|
||||
spark_system.start()
|
||||
playsound(H.loc, 'sound/effects/phasein.ogg', 25, 1)
|
||||
playsound(H.loc, "sparks", 50, 1)
|
||||
anim(H.loc,H,'icons/mob/mob.dmi',,"phasein",,H.dir)
|
||||
spark_system.start()
|
||||
playsound(H.loc, 'sound/effects/phasein.ogg', 25, 1)
|
||||
playsound(H.loc, "sparks", 50, 1)
|
||||
PoolOrNew(/obj/effect/overlay/temp/dir_setting/ninja/phase, list(get_turf(H), H.dir))
|
||||
|
||||
spawn(0)
|
||||
destination.phase_damage_creatures(20,H)//Paralyse and damage mobs and mechas on the turf
|
||||
destination.phase_damage_creatures(20,H)//Paralyse and damage mobs and mechas on the turf
|
||||
s_coold = 1
|
||||
else
|
||||
H << "<span class='danger'>The VOID-shift device is malfunctioning, <B>teleportation failed</B>.</span>"
|
||||
@@ -63,22 +60,19 @@ Contents:
|
||||
if(!ninjacost(200,N_STEALTH_CANCEL))
|
||||
var/mob/living/carbon/human/H = affecting
|
||||
var/turf/mobloc = get_turf(H.loc)//To make sure that certain things work properly below.
|
||||
if((!T.density)&&istype(mobloc, /turf))
|
||||
spawn(0)
|
||||
playsound(H.loc, 'sound/effects/sparks4.ogg', 50, 1)
|
||||
anim(mobloc,src,'icons/mob/mob.dmi',,"phaseout",,H.dir)
|
||||
if(T.density && isturf(mobloc))
|
||||
playsound(H.loc, "sparks", 50, 1)
|
||||
PoolOrNew(/obj/effect/overlay/temp/dir_setting/ninja/phase/out, list(get_turf(H), H.dir))
|
||||
|
||||
handle_teleport_grab(T, H)
|
||||
H.loc = T
|
||||
|
||||
spawn(0)
|
||||
spark_system.start()
|
||||
playsound(H.loc, 'sound/effects/phasein.ogg', 25, 1)
|
||||
playsound(H.loc, 'sound/effects/sparks2.ogg', 50, 1)
|
||||
anim(H.loc,H,'icons/mob/mob.dmi',,"phasein",,H.dir)
|
||||
spark_system.start()
|
||||
playsound(H.loc, 'sound/effects/phasein.ogg', 25, 1)
|
||||
playsound(H.loc, "sparks", 50, 1)
|
||||
PoolOrNew(/obj/effect/overlay/temp/dir_setting/ninja/phase, list(get_turf(H), H.dir))
|
||||
|
||||
spawn(0)//Any living mobs in teleport area are gibbed.
|
||||
T.phase_damage_creatures(20,H)//Paralyse and damage mobs and mechas on the turf
|
||||
T.phase_damage_creatures(20,H)//Paralyse and damage mobs and mechas on the turf
|
||||
s_coold = 1
|
||||
else
|
||||
H << "<span class='danger'>You cannot teleport into solid walls or from solid matter</span>"
|
||||
|
||||
@@ -281,5 +281,5 @@ They *could* go in their appropriate files, but this is supposed to be modular
|
||||
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
|
||||
spark_system.set_up(5, 0, loc)
|
||||
playsound(src, "sparks", 50, 1)
|
||||
visible_message("<span class='danger'>[H] electrocutes [src] with their touch!</span>", "<span class='userdanger'>[H] electrocutes you with their touch!</span>")
|
||||
visible_message("<span class='danger'>[H] electrocutes [src] with [H.p_their()] touch!</span>", "<span class='userdanger'>[H] electrocutes you with [H.p_their()] touch!</span>")
|
||||
electrocute_act(25, H)
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
item_state = "secshoes"
|
||||
permeability_coefficient = 0.01
|
||||
flags = NOSLIP
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30, fire = 100, acid = 100)
|
||||
strip_delay = 120
|
||||
cold_protection = FEET
|
||||
min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT
|
||||
|
||||
@@ -18,8 +18,8 @@ Contents:
|
||||
item_state = "s-ninja_suit"
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/internals,/obj/item/weapon/stock_parts/cell)
|
||||
slowdown = 0
|
||||
unacidable = 1
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
resistance_flags = LAVA_PROOF | ACID_PROOF
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30, fire = 100, acid = 100)
|
||||
strip_delay = 12
|
||||
|
||||
//Important parts of the suit.
|
||||
|
||||
@@ -41,15 +41,24 @@
|
||||
|
||||
else if(istype(I, /obj/item/weapon/disk/tech_disk))//If it's a data disk, we want to copy the research on to the suit.
|
||||
var/obj/item/weapon/disk/tech_disk/TD = I
|
||||
if(TD.stored)//If it has something on it.
|
||||
var/has_research = 0
|
||||
for(var/V in TD.tech_stored)
|
||||
if(V)
|
||||
has_research = 1
|
||||
break
|
||||
if(has_research)//If it has something on it.
|
||||
U << "Research information detected, processing..."
|
||||
if(do_after(U,s_delay, target = src))
|
||||
for(var/datum/tech/current_data in stored_research)
|
||||
if(current_data.id==TD.stored.id)
|
||||
if(current_data.level<TD.stored.level)
|
||||
current_data.level=TD.stored.level
|
||||
break
|
||||
TD.stored = null
|
||||
for(var/V1 in 1 to TD.max_tech_stored)
|
||||
var/datum/tech/new_data = TD.tech_stored[V1]
|
||||
TD.tech_stored[V1] = null
|
||||
if(!new_data)
|
||||
continue
|
||||
for(var/V2 in stored_research)
|
||||
var/datum/tech/current_data = V2
|
||||
if(current_data.id == new_data.id)
|
||||
current_data.level = max(current_data.level, new_data.level)
|
||||
break
|
||||
U << "<span class='notice'>Data analyzed and updated. Disk erased.</span>"
|
||||
else
|
||||
U << "<span class='userdanger'>ERROR</span>: Procedure interrupted. Process terminated."
|
||||
|
||||
Reference in New Issue
Block a user