mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
Purges Ninja and its snowflake/badcode
Removes basically any and all active references to the ninjacode. A fresh slate if we were to port ninja code from someone now.
This commit is contained in:
@@ -275,7 +275,6 @@ client
|
|||||||
<option value='?_src_=vars;give_disease=\ref[D]'>Give Disease</option>
|
<option value='?_src_=vars;give_disease=\ref[D]'>Give Disease</option>
|
||||||
<option value='?_src_=vars;godmode=\ref[D]'>Toggle Godmode</option>
|
<option value='?_src_=vars;godmode=\ref[D]'>Toggle Godmode</option>
|
||||||
<option value='?_src_=vars;build_mode=\ref[D]'>Toggle Build Mode</option>
|
<option value='?_src_=vars;build_mode=\ref[D]'>Toggle Build Mode</option>
|
||||||
<option value='?_src_=vars;ninja=\ref[D]'>Make Space Ninja</option>
|
|
||||||
<option value='?_src_=vars;make_skeleton=\ref[D]'>Make 2spooky</option>
|
<option value='?_src_=vars;make_skeleton=\ref[D]'>Make 2spooky</option>
|
||||||
<option value='?_src_=vars;direct_control=\ref[D]'>Assume Direct Control</option>
|
<option value='?_src_=vars;direct_control=\ref[D]'>Assume Direct Control</option>
|
||||||
<option value='?_src_=vars;drop_everything=\ref[D]'>Drop Everything</option>
|
<option value='?_src_=vars;drop_everything=\ref[D]'>Drop Everything</option>
|
||||||
@@ -560,17 +559,6 @@ client
|
|||||||
src.give_disease(M)
|
src.give_disease(M)
|
||||||
href_list["datumrefresh"] = href_list["give_spell"]
|
href_list["datumrefresh"] = href_list["give_spell"]
|
||||||
|
|
||||||
else if(href_list["ninja"])
|
|
||||||
if(!check_rights(R_SPAWN)) return
|
|
||||||
|
|
||||||
var/mob/M = locate(href_list["ninja"])
|
|
||||||
if(!istype(M))
|
|
||||||
usr << "This can only be used on instances of type /mob"
|
|
||||||
return
|
|
||||||
|
|
||||||
src.cmd_admin_ninjafy(M)
|
|
||||||
href_list["datumrefresh"] = href_list["ninja"]
|
|
||||||
|
|
||||||
else if(href_list["godmode"])
|
else if(href_list["godmode"])
|
||||||
if(!check_rights(R_REJUVINATE)) return
|
if(!check_rights(R_REJUVINATE)) return
|
||||||
|
|
||||||
|
|||||||
@@ -66,7 +66,7 @@
|
|||||||
var/list/uplink_items_bought = list()
|
var/list/uplink_items_bought = list()
|
||||||
var/total_TC = 0
|
var/total_TC = 0
|
||||||
var/spent_TC = 0
|
var/spent_TC = 0
|
||||||
|
|
||||||
//fix scrying raging mages issue.
|
//fix scrying raging mages issue.
|
||||||
var/isScrying = 0
|
var/isScrying = 0
|
||||||
|
|
||||||
@@ -550,9 +550,6 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
switch(new_obj_type)
|
switch(new_obj_type)
|
||||||
if("download")
|
|
||||||
new_objective = new /datum/objective/download
|
|
||||||
new_objective.explanation_text = "Download [target_number] research levels."
|
|
||||||
if("capture")
|
if("capture")
|
||||||
new_objective = new /datum/objective/capture
|
new_objective = new /datum/objective/capture
|
||||||
new_objective.explanation_text = "Accumulate [target_number] capture points."
|
new_objective.explanation_text = "Accumulate [target_number] capture points."
|
||||||
|
|||||||
@@ -1,431 +0,0 @@
|
|||||||
/*
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
+++++++++++++++++++++++++++++++++// //++++++++++++++++++++++++++++++++++
|
|
||||||
==================================SPACE NINJA ABILITIES====================================
|
|
||||||
___________________________________________________________________________________________
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
*/
|
|
||||||
|
|
||||||
//=======//SAFETY CHECK//=======//
|
|
||||||
/*
|
|
||||||
X is optional, tells the proc to check for specific stuff. C is also optional.
|
|
||||||
All the procs here assume that the character is wearing the ninja suit if they are using the procs.
|
|
||||||
They should, as I have made every effort for that to be the case.
|
|
||||||
In the case that they are not, I imagine the game will run-time error like crazy.
|
|
||||||
s_cooldown ticks off each second based on the suit recharge proc, in seconds. Default of 1 seconds. Some abilities have no cool down.
|
|
||||||
*/
|
|
||||||
/obj/item/clothing/suit/space/space_ninja/proc/ninjacost(C = 0,X = 0)
|
|
||||||
var/mob/living/carbon/human/U = affecting
|
|
||||||
if( (U.stat||U.incorporeal_move)&&X!=3 )//Will not return if user is using an adrenaline booster since you can use them when stat==1.
|
|
||||||
U << "<span class='warning'>You must be conscious and solid to do this.</span>"//It's not a problem of stat==2 since the ninja will explode anyway if they die.
|
|
||||||
return 1
|
|
||||||
else if(C&&cell.charge<C*10)
|
|
||||||
U << "<span class='warning'>Not enough energy.</span>"
|
|
||||||
return 1
|
|
||||||
switch(X)
|
|
||||||
if(1)
|
|
||||||
cancel_stealth()//Get rid of it.
|
|
||||||
if(2)
|
|
||||||
if(s_bombs<=0)
|
|
||||||
U << "<span class='warning'>There are no more smoke bombs remaining.</span>"
|
|
||||||
return 1
|
|
||||||
if(3)
|
|
||||||
if(a_boost<=0)
|
|
||||||
U << "<span class='warning'>You do not have any more adrenaline boosters.</span>"
|
|
||||||
return 1
|
|
||||||
return (s_coold)//Returns the value of the variable which counts down to zero.
|
|
||||||
|
|
||||||
//=======//TELEPORT GRAB CHECK//=======//
|
|
||||||
/obj/item/clothing/suit/space/space_ninja/proc/handle_teleport_grab(turf/T, mob/living/U)
|
|
||||||
if(istype(U.get_active_hand(),/obj/item/weapon/grab))//Handles grabbed persons.
|
|
||||||
var/obj/item/weapon/grab/G = U.get_active_hand()
|
|
||||||
G.affecting.loc = locate(T.x+rand(-1,1),T.y+rand(-1,1),T.z)//variation of position.
|
|
||||||
if(istype(U.get_inactive_hand(),/obj/item/weapon/grab))
|
|
||||||
var/obj/item/weapon/grab/G = U.get_inactive_hand()
|
|
||||||
G.affecting.loc = locate(T.x+rand(-1,1),T.y+rand(-1,1),T.z)//variation of position.
|
|
||||||
return
|
|
||||||
|
|
||||||
//=======//SMOKE//=======//
|
|
||||||
/*Summons smoke in radius of user.
|
|
||||||
Not sure why this would be useful (it's not) but whatever. Ninjas need their smoke bombs.*/
|
|
||||||
/obj/item/clothing/suit/space/space_ninja/proc/ninjasmoke()
|
|
||||||
set name = "Smoke Bomb"
|
|
||||||
set desc = "Blind your enemies momentarily with a well-placed smoke bomb."
|
|
||||||
set category = "Ninja Ability"
|
|
||||||
set popup_menu = 0//Will not see it when right clicking.
|
|
||||||
|
|
||||||
if(!ninjacost(,2))
|
|
||||||
var/mob/living/carbon/human/U = affecting
|
|
||||||
U << "<span class='notice'>There are <B>[s_bombs]</B> smoke bombs remaining.</span>"
|
|
||||||
var/datum/effect/effect/system/smoke_spread/bad/smoke = new /datum/effect/effect/system/smoke_spread/bad()
|
|
||||||
smoke.set_up(10, 0, U.loc)
|
|
||||||
smoke.start()
|
|
||||||
playsound(U.loc, 'sound/effects/bamf.ogg', 50, 2)
|
|
||||||
s_bombs--
|
|
||||||
s_coold = 1
|
|
||||||
return
|
|
||||||
|
|
||||||
//=======//9-8 TILE TELEPORT//=======//
|
|
||||||
//Click to to teleport 9-10 tiles in direction facing.
|
|
||||||
/obj/item/clothing/suit/space/space_ninja/proc/ninjajaunt()
|
|
||||||
set name = "Phase Jaunt (10E)"
|
|
||||||
set desc = "Utilizes the internal VOID-shift device to rapidly transit in direction facing."
|
|
||||||
set category = "Ninja Ability"
|
|
||||||
set popup_menu = 0
|
|
||||||
|
|
||||||
var/C = 100
|
|
||||||
if(!ninjacost(C,1))
|
|
||||||
var/mob/living/carbon/human/U = affecting
|
|
||||||
var/turf/destination = get_teleport_loc(U.loc,U,9,1,3,1,0,1)
|
|
||||||
var/turf/mobloc = get_turf(U.loc)//To make sure that certain things work properly below.
|
|
||||||
if(destination&&istype(mobloc, /turf))//The turf check prevents unusual behavior. Like teleporting out of cryo pods, cloners, mechs, etc.
|
|
||||||
spawn(0)
|
|
||||||
playsound(U.loc, "sparks", 50, 1)
|
|
||||||
anim(mobloc,src,'icons/mob/mob.dmi',,"phaseout",,U.dir)
|
|
||||||
|
|
||||||
handle_teleport_grab(destination, U)
|
|
||||||
U.loc = destination
|
|
||||||
|
|
||||||
spawn(0)
|
|
||||||
spark_system.start()
|
|
||||||
playsound(U.loc, 'sound/effects/phasein.ogg', 25, 1)
|
|
||||||
playsound(U.loc, "sparks", 50, 1)
|
|
||||||
anim(U.loc,U,'icons/mob/mob.dmi',,"phasein",,U.dir)
|
|
||||||
|
|
||||||
spawn(0)
|
|
||||||
destination.kill_creatures(U)//Any living mobs in teleport area are gibbed. Check turf procs for how it does it.
|
|
||||||
s_coold = 1
|
|
||||||
cell.charge-=(C*10)
|
|
||||||
else
|
|
||||||
U << "<span class='danger'>The VOID-shift device is malfunctioning, teleportation failed.</span>"
|
|
||||||
return
|
|
||||||
|
|
||||||
//=======//RIGHT CLICK TELEPORT//=======//
|
|
||||||
//Right click to teleport somewhere, almost exactly like admin jump to turf.
|
|
||||||
/obj/item/clothing/suit/space/space_ninja/proc/ninjashift(turf/T in oview())
|
|
||||||
set name = "Phase Shift (20E)"
|
|
||||||
set desc = "Utilizes the internal VOID-shift device to rapidly transit to a destination in view."
|
|
||||||
set category = null//So it does not show up on the panel but can still be right-clicked.
|
|
||||||
set src = usr.contents//Fixes verbs not attaching properly for objects. Praise the DM reference guide!
|
|
||||||
|
|
||||||
var/C = 200
|
|
||||||
if(!ninjacost(C,1))
|
|
||||||
var/mob/living/carbon/human/U = affecting
|
|
||||||
var/turf/mobloc = get_turf(U.loc)//To make sure that certain things work properly below.
|
|
||||||
if((!T.density)&&istype(mobloc, /turf))
|
|
||||||
spawn(0)
|
|
||||||
playsound(U.loc, 'sound/effects/sparks4.ogg', 50, 1)
|
|
||||||
anim(mobloc,src,'icons/mob/mob.dmi',,"phaseout",,U.dir)
|
|
||||||
|
|
||||||
handle_teleport_grab(T, U)
|
|
||||||
U.loc = T
|
|
||||||
|
|
||||||
spawn(0)
|
|
||||||
spark_system.start()
|
|
||||||
playsound(U.loc, 'sound/effects/phasein.ogg', 25, 1)
|
|
||||||
playsound(U.loc, 'sound/effects/sparks2.ogg', 50, 1)
|
|
||||||
anim(U.loc,U,'icons/mob/mob.dmi',,"phasein",,U.dir)
|
|
||||||
|
|
||||||
spawn(0)//Any living mobs in teleport area are gibbed.
|
|
||||||
T.kill_creatures(U)
|
|
||||||
s_coold = 1
|
|
||||||
cell.charge-=(C*10)
|
|
||||||
else
|
|
||||||
U << "<span class='warning'>You cannot teleport into solid walls or from solid matter</span>"
|
|
||||||
return
|
|
||||||
|
|
||||||
//=======//EM PULSE//=======//
|
|
||||||
//Disables nearby tech equipment.
|
|
||||||
/obj/item/clothing/suit/space/space_ninja/proc/ninjapulse()
|
|
||||||
set name = "EM Burst (25E)"
|
|
||||||
set desc = "Disable any nearby technology with a electro-magnetic pulse."
|
|
||||||
set category = "Ninja Ability"
|
|
||||||
set popup_menu = 0
|
|
||||||
|
|
||||||
var/C = 250
|
|
||||||
if(!ninjacost(C,1))
|
|
||||||
var/mob/living/carbon/human/U = affecting
|
|
||||||
playsound(U.loc, 'sound/effects/EMPulse.ogg', 60, 2)
|
|
||||||
empulse(U, 4, 6) //Procs sure are nice. Slightly weaker than wizard's disable tch.
|
|
||||||
s_coold = 2
|
|
||||||
cell.charge-=(C*10)
|
|
||||||
return
|
|
||||||
|
|
||||||
//=======//ENERGY BLADE//=======//
|
|
||||||
//Summons a blade of energy in active hand.
|
|
||||||
/obj/item/clothing/suit/space/space_ninja/proc/ninjablade()
|
|
||||||
set name = "Energy Blade (5E)"
|
|
||||||
set desc = "Create a focused beam of energy in your active hand."
|
|
||||||
set category = "Ninja Ability"
|
|
||||||
set popup_menu = 0
|
|
||||||
|
|
||||||
var/C = 50
|
|
||||||
if(!ninjacost(C))
|
|
||||||
var/mob/living/carbon/human/U = affecting
|
|
||||||
if(!kamikaze)
|
|
||||||
if(!U.get_active_hand()&&!istype(U.get_inactive_hand(), /obj/item/weapon/melee/energy/blade))
|
|
||||||
var/obj/item/weapon/melee/energy/blade/W = new()
|
|
||||||
spark_system.start()
|
|
||||||
playsound(U.loc, "sparks", 50, 1)
|
|
||||||
U.put_in_hands(W)
|
|
||||||
cell.charge-=(C*10)
|
|
||||||
else
|
|
||||||
U << "<span class='warning'>You can only summon one blade. Try dropping an item first.</span>"
|
|
||||||
else//Else you can run around with TWO energy blades. I don't know why you'd want to but cool factor remains.
|
|
||||||
if(!U.get_active_hand())
|
|
||||||
var/obj/item/weapon/melee/energy/blade/W = new()
|
|
||||||
U.put_in_hands(W)
|
|
||||||
if(!U.get_inactive_hand())
|
|
||||||
var/obj/item/weapon/melee/energy/blade/W = new()
|
|
||||||
U.put_in_inactive_hand(W)
|
|
||||||
spark_system.start()
|
|
||||||
playsound(U.loc, "sparks", 50, 1)
|
|
||||||
s_coold = 1
|
|
||||||
return
|
|
||||||
|
|
||||||
//=======//NINJA STARS//=======//
|
|
||||||
/*Shoots ninja stars at random people.
|
|
||||||
This could be a lot better but I'm too tired atm.*/
|
|
||||||
/obj/item/clothing/suit/space/space_ninja/proc/ninjastar()
|
|
||||||
set name = "Energy Star (5E)"
|
|
||||||
set desc = "Launches an energy star at a random living target."
|
|
||||||
set category = "Ninja Ability"
|
|
||||||
set popup_menu = 0
|
|
||||||
|
|
||||||
var/C = 50
|
|
||||||
if(!ninjacost(C))
|
|
||||||
var/mob/living/carbon/human/U = affecting
|
|
||||||
var/targets[] = list()//So yo can shoot while yo throw dawg
|
|
||||||
for(var/mob/living/M in oview(loc))
|
|
||||||
if(M.stat) continue//Doesn't target corpses or paralyzed persons.
|
|
||||||
targets.Add(M)
|
|
||||||
if(targets.len)
|
|
||||||
var/mob/living/target=pick(targets)//The point here is to pick a random, living mob in oview to shoot stuff at.
|
|
||||||
|
|
||||||
var/turf/curloc = U.loc
|
|
||||||
var/atom/targloc = get_turf(target)
|
|
||||||
if (!targloc || !istype(targloc, /turf) || !curloc)
|
|
||||||
return
|
|
||||||
if (targloc == curloc)
|
|
||||||
return
|
|
||||||
var/obj/item/projectile/bullet/dart/A = new /obj/item/projectile/bullet/dart(U.loc)
|
|
||||||
A.current = curloc
|
|
||||||
A.yo = targloc.y - curloc.y
|
|
||||||
A.xo = targloc.x - curloc.x
|
|
||||||
cell.charge-=(C*10)
|
|
||||||
A.process()
|
|
||||||
else
|
|
||||||
U << "<span class='warning'>There are no targets in view.</span>"
|
|
||||||
return
|
|
||||||
|
|
||||||
//=======//ENERGY NET//=======//
|
|
||||||
/*Allows the ninja to capture people, I guess.
|
|
||||||
Must right click on a mob to activate.*/
|
|
||||||
/obj/item/clothing/suit/space/space_ninja/proc/ninjanet(mob/living/carbon/M in oview())//Only living carbon mobs.
|
|
||||||
set name = "Energy Net (20E)"
|
|
||||||
set desc = "Captures a fallen opponent in a net of energy. Will teleport them to a holding facility after 30 seconds."
|
|
||||||
set category = null
|
|
||||||
set src = usr.contents
|
|
||||||
|
|
||||||
var/C = 200
|
|
||||||
if(!ninjacost(C,1)&&iscarbon(M))
|
|
||||||
var/mob/living/carbon/human/U = affecting
|
|
||||||
if(M.client)//Monkeys without a client can still step_to() and bypass the net. Also, netting inactive people is lame.
|
|
||||||
//if(M)//DEBUG
|
|
||||||
if(!locate(/obj/effect/energy_net) in M.loc)//Check if they are already being affected by an energy net.
|
|
||||||
for(var/turf/T in getline(U.loc, M.loc))
|
|
||||||
if(T.density)//Don't want them shooting nets through walls. It's kind of cheesy.
|
|
||||||
U << "You may not use an energy net through solid obstacles!"
|
|
||||||
return
|
|
||||||
spawn(0)
|
|
||||||
U.Beam(M,"n_beam",,15)
|
|
||||||
M.anchored = 1//Anchors them so they can't move.
|
|
||||||
U.say("Get over here!")
|
|
||||||
var/obj/effect/energy_net/E = new /obj/effect/energy_net(M.loc)
|
|
||||||
E.layer = M.layer+1//To have it appear one layer above the mob.
|
|
||||||
for(var/mob/O in viewers(U, 3))
|
|
||||||
O.show_message(text("<span class='warning'>[] caught [] with an energy net!</span>", U, M), 1)
|
|
||||||
E.affecting = M
|
|
||||||
E.master = U
|
|
||||||
spawn(0)//Parallel processing.
|
|
||||||
E.process(M)
|
|
||||||
cell.charge-=(C*10)
|
|
||||||
else
|
|
||||||
U << "They are already trapped inside an energy net."
|
|
||||||
else
|
|
||||||
U << "They will bring no honor to your Clan!"
|
|
||||||
return
|
|
||||||
|
|
||||||
//=======//ADRENALINE BOOST//=======//
|
|
||||||
/*Wakes the user so they are able to do their thing. Also injects a decent dose of radium.
|
|
||||||
Movement impairing would indicate drugs and the like.*/
|
|
||||||
/obj/item/clothing/suit/space/space_ninja/proc/ninjaboost()
|
|
||||||
set name = "Adrenaline Boost"
|
|
||||||
set desc = "Inject a secret chemical that will counteract all movement-impairing effect."
|
|
||||||
set category = "Ninja Ability"
|
|
||||||
set popup_menu = 0
|
|
||||||
|
|
||||||
if(!ninjacost(,3))//Have to make sure stat is not counted for this ability.
|
|
||||||
var/mob/living/carbon/human/U = affecting
|
|
||||||
//Wouldn't need to track adrenaline boosters if there was a miracle injection to get rid of paralysis and the like instantly.
|
|
||||||
//For now, adrenaline boosters ARE the miracle injection. Well, radium, really.
|
|
||||||
U.SetParalysis(0)
|
|
||||||
U.SetStunned(0)
|
|
||||||
U.SetWeakened(0)
|
|
||||||
/*
|
|
||||||
Due to lag, it was possible to adrenaline boost but remain helpless while life.dm resets player stat.
|
|
||||||
This lead to me and others spamming adrenaline boosters because they failed to kick in on time.
|
|
||||||
It's technically possible to come back from crit with this but it is very temporary.
|
|
||||||
Life.dm will kick the player back into unconsciosness the next process loop.
|
|
||||||
*/
|
|
||||||
U.stat = 0//At least now you should be able to teleport away or shoot ninja stars.
|
|
||||||
if(U.said_last_words)
|
|
||||||
U.said_last_words=0
|
|
||||||
spawn(30)//Slight delay so the enemy does not immedietly know the ability was used. Due to lag, this often came before waking up.
|
|
||||||
U.say(pick("A CORNERED FOX IS MORE DANGEROUS THAN A JACKAL!","HURT ME MOOORRREEE!","IMPRESSIVE!"))
|
|
||||||
spawn(70)
|
|
||||||
reagents.reaction(U, 2)
|
|
||||||
reagents.trans_id_to(U, "radium", a_transfer)
|
|
||||||
U << "<span class='warning'>You are beginning to feel the after-effect of the injection.</span>"
|
|
||||||
a_boost--
|
|
||||||
s_coold = 3
|
|
||||||
return
|
|
||||||
|
|
||||||
/*
|
|
||||||
===================================================================================
|
|
||||||
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<KAMIKAZE MODE>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
||||||
===================================================================================
|
|
||||||
Or otherwise known as anime mode. Which also happens to be ridiculously powerful.
|
|
||||||
*/
|
|
||||||
|
|
||||||
//=======//NINJA MOVEMENT//=======//
|
|
||||||
//Also makes you move like you're on crack.
|
|
||||||
/obj/item/clothing/suit/space/space_ninja/proc/ninjawalk()
|
|
||||||
set name = "Shadow Walk"
|
|
||||||
set desc = "Combines the VOID-shift and CLOAK-tech devices to freely move between solid matter. Toggle on or off."
|
|
||||||
set category = "Ninja Ability"
|
|
||||||
set popup_menu = 0
|
|
||||||
|
|
||||||
var/mob/living/carbon/human/U = affecting
|
|
||||||
if(!U.incorporeal_move)
|
|
||||||
U.incorporeal_move = 2
|
|
||||||
U << "<span class='notice'>You will now phase through solid matter.</span>"
|
|
||||||
else
|
|
||||||
U.incorporeal_move = 0
|
|
||||||
U << "<span class='notice'>You will no-longer phase through solid matter.</span>"
|
|
||||||
return
|
|
||||||
|
|
||||||
//=======//5 TILE TELEPORT/GIB//=======//
|
|
||||||
//Allows to gib up to five squares in a straight line. Seriously.
|
|
||||||
/obj/item/clothing/suit/space/space_ninja/proc/ninjaslayer()
|
|
||||||
set name = "Phase Slayer"
|
|
||||||
set desc = "Utilizes the internal VOID-shift device to mutilate creatures in a straight line."
|
|
||||||
set category = "Ninja Ability"
|
|
||||||
set popup_menu = 0
|
|
||||||
|
|
||||||
if(!ninjacost())
|
|
||||||
var/mob/living/carbon/human/U = affecting
|
|
||||||
var/turf/destination = get_teleport_loc(U.loc,U,5)
|
|
||||||
var/turf/mobloc = get_turf(U.loc)//To make sure that certain things work properly below.
|
|
||||||
if(destination&&istype(mobloc, /turf))
|
|
||||||
U.say("Ai Satsugai!")
|
|
||||||
spawn(0)
|
|
||||||
playsound(U.loc, "sparks", 50, 1)
|
|
||||||
anim(mobloc,U,'icons/mob/mob.dmi',,"phaseout",,U.dir)
|
|
||||||
|
|
||||||
spawn(0)
|
|
||||||
for(var/turf/T in getline(mobloc, destination))
|
|
||||||
spawn(0)
|
|
||||||
T.kill_creatures(U)
|
|
||||||
if(T==mobloc||T==destination) continue
|
|
||||||
spawn(0)
|
|
||||||
anim(T,U,'icons/mob/mob.dmi',,"phasein",,U.dir)
|
|
||||||
|
|
||||||
handle_teleport_grab(destination, U)
|
|
||||||
U.loc = destination
|
|
||||||
|
|
||||||
spawn(0)
|
|
||||||
spark_system.start()
|
|
||||||
playsound(U.loc, 'sound/effects/phasein.ogg', 25, 1)
|
|
||||||
playsound(U.loc, "sparks", 50, 1)
|
|
||||||
anim(U.loc,U,'icons/mob/mob.dmi',,"phasein",,U.dir)
|
|
||||||
s_coold = 1
|
|
||||||
else
|
|
||||||
U << "<span class='danger'>The VOID-shift device is malfunctioning, teleportation failed.</span>"
|
|
||||||
return
|
|
||||||
|
|
||||||
//=======//TELEPORT BEHIND MOB//=======//
|
|
||||||
/*Appear behind a randomly chosen mob while a few decoy teleports appear.
|
|
||||||
This is so anime it hurts. But that's the point.*/
|
|
||||||
/obj/item/clothing/suit/space/space_ninja/proc/ninjamirage()
|
|
||||||
set name = "Spider Mirage"
|
|
||||||
set desc = "Utilizes the internal VOID-shift device to create decoys and teleport behind a random target."
|
|
||||||
set category = "Ninja Ability"
|
|
||||||
set popup_menu = 0
|
|
||||||
|
|
||||||
if(!ninjacost())//Simply checks for stat.
|
|
||||||
var/mob/living/carbon/human/U = affecting
|
|
||||||
var/targets[]
|
|
||||||
targets = new()
|
|
||||||
for(var/mob/living/M in oview(6))
|
|
||||||
if(M.stat) continue//Doesn't target corpses or paralyzed people.
|
|
||||||
targets.Add(M)
|
|
||||||
if(targets.len)
|
|
||||||
var/mob/living/target=pick(targets)
|
|
||||||
var/locx
|
|
||||||
var/locy
|
|
||||||
var/turf/mobloc = get_turf(target.loc)
|
|
||||||
var/safety = 0
|
|
||||||
switch(target.dir)
|
|
||||||
if(NORTH)
|
|
||||||
locx = mobloc.x
|
|
||||||
locy = (mobloc.y-1)
|
|
||||||
if(locy<1)
|
|
||||||
safety = 1
|
|
||||||
if(SOUTH)
|
|
||||||
locx = mobloc.x
|
|
||||||
locy = (mobloc.y+1)
|
|
||||||
if(locy>world.maxy)
|
|
||||||
safety = 1
|
|
||||||
if(EAST)
|
|
||||||
locy = mobloc.y
|
|
||||||
locx = (mobloc.x-1)
|
|
||||||
if(locx<1)
|
|
||||||
safety = 1
|
|
||||||
if(WEST)
|
|
||||||
locy = mobloc.y
|
|
||||||
locx = (mobloc.x+1)
|
|
||||||
if(locx>world.maxx)
|
|
||||||
safety = 1
|
|
||||||
else safety=1
|
|
||||||
if(!safety&&istype(mobloc, /turf))
|
|
||||||
U.say("Kumo no Shinkiro!")
|
|
||||||
var/turf/picked = locate(locx,locy,mobloc.z)
|
|
||||||
spawn(0)
|
|
||||||
playsound(U.loc, "sparks", 50, 1)
|
|
||||||
anim(mobloc,U,'icons/mob/mob.dmi',,"phaseout",,U.dir)
|
|
||||||
|
|
||||||
spawn(0)
|
|
||||||
var/limit = 4
|
|
||||||
for(var/turf/T in oview(5))
|
|
||||||
if(prob(20))
|
|
||||||
spawn(0)
|
|
||||||
anim(T,U,'icons/mob/mob.dmi',,"phasein",,U.dir)
|
|
||||||
limit--
|
|
||||||
if(limit<=0) break
|
|
||||||
|
|
||||||
handle_teleport_grab(picked, U)
|
|
||||||
U.loc = picked
|
|
||||||
U.dir = target.dir
|
|
||||||
|
|
||||||
spawn(0)
|
|
||||||
spark_system.start()
|
|
||||||
playsound(U.loc, 'sound/effects/phasein.ogg', 25, 1)
|
|
||||||
playsound(U.loc, "sparks", 50, 1)
|
|
||||||
anim(U.loc,U,'icons/mob/mob.dmi',,"phasein",,U.dir)
|
|
||||||
s_coold = 1
|
|
||||||
else
|
|
||||||
U << "<span class='danger'>The VOID-shift device is malfunctioning, teleportation failed.</span>"
|
|
||||||
else
|
|
||||||
U << "<span class='warning'>There are no targets in view.</span>"
|
|
||||||
return
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1312,32 +1312,6 @@ datum
|
|||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
download
|
|
||||||
var/target_amount
|
|
||||||
proc/gen_amount_goal()
|
|
||||||
target_amount = rand(10,20)
|
|
||||||
explanation_text = "Download [target_amount] research levels."
|
|
||||||
return target_amount
|
|
||||||
|
|
||||||
|
|
||||||
check_completion()
|
|
||||||
if(!ishuman(owner.current))
|
|
||||||
return 0
|
|
||||||
if(!owner.current || owner.current.stat == 2)
|
|
||||||
return 0
|
|
||||||
if(!(istype(owner.current:wear_suit, /obj/item/clothing/suit/space/space_ninja)&&owner.current:wear_suit:s_initialized))
|
|
||||||
return 0
|
|
||||||
var/current_amount
|
|
||||||
var/obj/item/clothing/suit/space/space_ninja/S = owner.current:wear_suit
|
|
||||||
if(!S.stored_research.len)
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
for(var/datum/tech/current_data in S.stored_research)
|
|
||||||
if(current_data.level>1) current_amount+=(current_data.level-1)
|
|
||||||
if(current_amount<target_amount) return 0
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
debrain//I want braaaainssss
|
debrain//I want braaaainssss
|
||||||
New(var/text,var/joba,var/datum/mind/targeta)
|
New(var/text,var/joba,var/datum/mind/targeta)
|
||||||
target = targeta
|
target = targeta
|
||||||
|
|||||||
@@ -570,33 +570,6 @@ datum/objective/nuclear
|
|||||||
if(!steal_target) return 1 // Free Objective
|
if(!steal_target) return 1 // Free Objective
|
||||||
return steal_target.check_completion(owner)
|
return steal_target.check_completion(owner)
|
||||||
|
|
||||||
datum/objective/download
|
|
||||||
proc/gen_amount_goal()
|
|
||||||
target_amount = rand(10,20)
|
|
||||||
explanation_text = "Download [target_amount] research levels."
|
|
||||||
return target_amount
|
|
||||||
|
|
||||||
|
|
||||||
check_completion()
|
|
||||||
if(blocked) return 0
|
|
||||||
if(!ishuman(owner.current))
|
|
||||||
return 0
|
|
||||||
if(!owner.current || owner.current.stat == 2)
|
|
||||||
return 0
|
|
||||||
if(!(istype(owner.current:wear_suit, /obj/item/clothing/suit/space/space_ninja)&&owner.current:wear_suit:s_initialized))
|
|
||||||
return 0
|
|
||||||
var/current_amount
|
|
||||||
var/obj/item/clothing/suit/space/space_ninja/S = owner.current:wear_suit
|
|
||||||
if(!S.stored_research.len)
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
for(var/datum/tech/current_data in S.stored_research)
|
|
||||||
if(current_data.level>1) current_amount+=(current_data.level-1)
|
|
||||||
if(current_amount<target_amount) return 0
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
datum/objective/capture
|
datum/objective/capture
|
||||||
proc/gen_amount_goal()
|
proc/gen_amount_goal()
|
||||||
target_amount = rand(5,10)
|
target_amount = rand(5,10)
|
||||||
|
|||||||
@@ -237,15 +237,6 @@ var/list/camera_names=list()
|
|||||||
if (S.current == src)
|
if (S.current == src)
|
||||||
O << "[U] holds \a [itemname] up to one of the cameras ..."
|
O << "[U] holds \a [itemname] up to one of the cameras ..."
|
||||||
O << browse(text("<HTML><HEAD><TITLE>[]</TITLE></HEAD><BODY><TT>[]</TT></BODY></HTML>", itemname, info), text("window=[]", itemname))
|
O << browse(text("<HTML><HEAD><TITLE>[]</TITLE></HEAD><BODY><TT>[]</TT></BODY></HTML>", itemname, info), text("window=[]", itemname))
|
||||||
else if(istype(W, /obj/item/weapon/melee/energy/blade))//Putting it here last since it's a special case. I wonder if there is a better way to do these than type casting.
|
|
||||||
deactivate(user,2)//Here so that you can disconnect anyone viewing the camera, regardless if it's on or off.
|
|
||||||
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
|
|
||||||
spark_system.set_up(5, 0, loc)
|
|
||||||
spark_system.start()
|
|
||||||
playsound(loc, 'sound/weapons/blade1.ogg', 50, 1)
|
|
||||||
playsound(loc, "sparks", 50, 1)
|
|
||||||
visible_message("<span class='notice'>The camera has been sliced apart by [] with an energy blade!</span>")
|
|
||||||
del(src)
|
|
||||||
else
|
else
|
||||||
..()
|
..()
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -74,10 +74,6 @@
|
|||||||
//Cameras can't track people wearing an agent card or a ninja hood.
|
//Cameras can't track people wearing an agent card or a ninja hood.
|
||||||
if(H.wear_id && istype(H.wear_id.GetID(), /obj/item/weapon/card/id/syndicate))
|
if(H.wear_id && istype(H.wear_id.GetID(), /obj/item/weapon/card/id/syndicate))
|
||||||
continue
|
continue
|
||||||
if(istype(H.head, /obj/item/clothing/head/helmet/space/space_ninja))
|
|
||||||
var/obj/item/clothing/head/helmet/space/space_ninja/hood = H.head
|
|
||||||
if(!hood.canremove)
|
|
||||||
continue
|
|
||||||
//Skipping aliens because shit, that's OP
|
//Skipping aliens because shit, that's OP
|
||||||
if(isalien(M))
|
if(isalien(M))
|
||||||
continue
|
continue
|
||||||
@@ -119,9 +115,6 @@
|
|||||||
if(H.wear_id && istype(H.wear_id.GetID(), /obj/item/weapon/card/id/syndicate))
|
if(H.wear_id && istype(H.wear_id.GetID(), /obj/item/weapon/card/id/syndicate))
|
||||||
src << "Unable to locate an airlock"
|
src << "Unable to locate an airlock"
|
||||||
return
|
return
|
||||||
if(istype(H.head, /obj/item/clothing/head/helmet/space/space_ninja) && !H.head.canremove)
|
|
||||||
src << "Unable to locate an airlock"
|
|
||||||
return
|
|
||||||
if(H.digitalcamo)
|
if(H.digitalcamo)
|
||||||
src << "Unable to locate an airlock"
|
src << "Unable to locate an airlock"
|
||||||
return
|
return
|
||||||
@@ -175,10 +168,6 @@
|
|||||||
U << "Follow camera mode terminated."
|
U << "Follow camera mode terminated."
|
||||||
U.cameraFollow = null
|
U.cameraFollow = null
|
||||||
return
|
return
|
||||||
if(istype(H.head, /obj/item/clothing/head/helmet/space/space_ninja) && !H.head.canremove)
|
|
||||||
U << "Follow camera mode terminated."
|
|
||||||
U.cameraFollow = null
|
|
||||||
return
|
|
||||||
if(H.digitalcamo)
|
if(H.digitalcamo)
|
||||||
U << "Follow camera mode terminated."
|
U << "Follow camera mode terminated."
|
||||||
U.cameraFollow = null
|
U.cameraFollow = null
|
||||||
|
|||||||
@@ -182,15 +182,6 @@
|
|||||||
A.transfer_ai("INACTIVE","AICARD",src,user)
|
A.transfer_ai("INACTIVE","AICARD",src,user)
|
||||||
return
|
return
|
||||||
|
|
||||||
attack_hand(var/mob/user as mob)
|
|
||||||
if(ishuman(user))//Checks to see if they are ninja
|
|
||||||
if(istype(user:gloves, /obj/item/clothing/gloves/space_ninja)&&user:gloves:candrain&&!user:gloves:draining)
|
|
||||||
if(user:wear_suit:s_control)
|
|
||||||
user:wear_suit:transfer_ai("INACTIVE","NINJASUIT",src,user)
|
|
||||||
else
|
|
||||||
user << "<span class='danger'>ERROR:</span> Remote access channel disabled.</span>"
|
|
||||||
return
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This is a good place for AI-related object verbs so I'm sticking it here.
|
This is a good place for AI-related object verbs so I'm sticking it here.
|
||||||
If adding stuff to this, don't forget that an AI need to cancel_camera() whenever it physically moves to a different location.
|
If adding stuff to this, don't forget that an AI need to cancel_camera() whenever it physically moves to a different location.
|
||||||
@@ -226,28 +217,6 @@ That prevents a few funky behaviors.
|
|||||||
T.cancel_camera()
|
T.cancel_camera()
|
||||||
T << "You have been downloaded to a mobile storage device. Remote device connection severed."
|
T << "You have been downloaded to a mobile storage device. Remote device connection severed."
|
||||||
U << "<span class='notice'><b>Transfer successful</b>:</span> [T.name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory."
|
U << "<span class='notice'><b>Transfer successful</b>:</span> [T.name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory."
|
||||||
if("NINJASUIT")
|
|
||||||
var/obj/item/clothing/suit/space/space_ninja/C = src
|
|
||||||
if(C.AI)//If there is an AI on card.
|
|
||||||
U << "<span class='danger'>Transfer failed:</span> Existing AI found on this terminal. Remove existing AI to install a new one."
|
|
||||||
else
|
|
||||||
if (ticker.mode.name == "AI malfunction")
|
|
||||||
var/datum/game_mode/malfunction/malf = ticker.mode
|
|
||||||
for (var/datum/mind/malfai in malf.malf_ai)
|
|
||||||
if (T.mind == malfai)
|
|
||||||
U << "<span class='danger'>ERROR:</span> Remote transfer interface disabled."
|
|
||||||
return
|
|
||||||
if(T.stat)//If the ai is dead/dying.
|
|
||||||
U << "<span class='danger'>ERROR:</span> [T.name] data core is corrupted. Unable to install."
|
|
||||||
else
|
|
||||||
new /obj/structure/AIcore/deactivated(T.loc)
|
|
||||||
T.aiRestorePowerRoutine = 0
|
|
||||||
T.control_disabled = 1
|
|
||||||
T.loc = C
|
|
||||||
C.AI = T
|
|
||||||
T.cancel_camera()
|
|
||||||
T << "You have been downloaded to a mobile storage device. Remote device connection severed."
|
|
||||||
U << "<span class='notice'><b>Transfer successful</b>:</span> [T.name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory."
|
|
||||||
|
|
||||||
if("INACTIVE")//Inactive AI object.
|
if("INACTIVE")//Inactive AI object.
|
||||||
var/obj/structure/AIcore/deactivated/T = target
|
var/obj/structure/AIcore/deactivated/T = target
|
||||||
@@ -265,17 +234,6 @@ That prevents a few funky behaviors.
|
|||||||
A << "You have been uploaded to a stationary terminal. Remote device connection restored."
|
A << "You have been uploaded to a stationary terminal. Remote device connection restored."
|
||||||
U << "<span class='notice'><b>Transfer successful</b>:</span> [A.name] ([rand(1000,9999)].exe) installed and executed succesfully. Local copy has been removed."
|
U << "<span class='notice'><b>Transfer successful</b>:</span> [A.name] ([rand(1000,9999)].exe) installed and executed succesfully. Local copy has been removed."
|
||||||
del(T)
|
del(T)
|
||||||
if("NINJASUIT")
|
|
||||||
var/obj/item/clothing/suit/space/space_ninja/C = src
|
|
||||||
var/mob/living/silicon/ai/A = C.AI
|
|
||||||
if(A)
|
|
||||||
A.control_disabled = 0
|
|
||||||
C.AI = null
|
|
||||||
A.loc = T.loc
|
|
||||||
A.cancel_camera()
|
|
||||||
A << "You have been uploaded to a stationary terminal. Remote device connection restored."
|
|
||||||
U << "<span class='notice'><b>Transfer succesful</b>:</span> [A.name] ([rand(1000,9999)].exe) installed and executed succesfully. Local copy has been removed."
|
|
||||||
del(T)
|
|
||||||
if("AIFIXER")//AI Fixer terminal.
|
if("AIFIXER")//AI Fixer terminal.
|
||||||
var/obj/machinery/computer/aifixer/T = target
|
var/obj/machinery/computer/aifixer/T = target
|
||||||
switch(interaction)
|
switch(interaction)
|
||||||
@@ -320,76 +278,6 @@ That prevents a few funky behaviors.
|
|||||||
U << "<span class='danger'>ERROR:</span> Reconstruction in progress."
|
U << "<span class='danger'>ERROR:</span> Reconstruction in progress."
|
||||||
else if (!T.occupant)
|
else if (!T.occupant)
|
||||||
U << "<span class='danger'>ERROR:</span> Unable to locate artificial intelligence."
|
U << "<span class='danger'>ERROR:</span> Unable to locate artificial intelligence."
|
||||||
if("NINJASUIT")
|
|
||||||
var/obj/item/clothing/suit/space/space_ninja/C = src
|
|
||||||
if(!T.contents.len)
|
|
||||||
if (!C.AI)
|
|
||||||
U << "No AI to copy over!"
|
|
||||||
else
|
|
||||||
var/mob/living/silicon/ai/A = C.AI
|
|
||||||
A.loc = T
|
|
||||||
T.occupant = A
|
|
||||||
C.AI = null
|
|
||||||
A.control_disabled = 1
|
|
||||||
T.overlays += image('icons/obj/computer.dmi', "ai-fixer-full")
|
|
||||||
T.overlays -= image('icons/obj/computer.dmi', "ai-fixer-empty")
|
|
||||||
A.cancel_camera()
|
|
||||||
A << "You have been uploaded to a stationary terminal. Sadly, there is no remote access from here."
|
|
||||||
U << "<span class='notice'><b>Transfer successful</b>:</span> [A.name] ([rand(1000,9999)].exe) installed and executed succesfully. Local copy has been removed."
|
|
||||||
else
|
|
||||||
if(!C.AI && T.occupant && !T.active)
|
|
||||||
if (T.occupant.stat)
|
|
||||||
U << "<span class='danger'>ERROR:</span> [T.occupant.name] data core is corrupted. Unable to install."
|
|
||||||
else
|
|
||||||
T.overlays += image('icons/obj/computer.dmi', "ai-fixer-empty")
|
|
||||||
T.overlays -= image('icons/obj/computer.dmi', "ai-fixer-full")
|
|
||||||
T.occupant << "You have been downloaded to a mobile storage device. Still no remote access."
|
|
||||||
U << "<span class='notice'><b>Transfer successful</b>:</span> [T.occupant.name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory."
|
|
||||||
T.occupant.loc = C
|
|
||||||
T.occupant.cancel_camera()
|
|
||||||
T.occupant = null
|
|
||||||
else if (C.AI)
|
|
||||||
U << "<span class='danger'>ERROR:</span> Artificial intelligence detected on terminal."
|
|
||||||
else if (T.active)
|
|
||||||
U << "<span class='danger'>ERROR:</span> Reconstruction in progress."
|
|
||||||
else if (!T.occupant)
|
|
||||||
U << "<span class='danger'>ERROR:</span> Unable to locate artificial intelligence."
|
|
||||||
if("NINJASUIT")//Ninjasuit
|
|
||||||
var/obj/item/clothing/suit/space/space_ninja/T = target
|
|
||||||
switch(interaction)
|
|
||||||
if("AICARD")
|
|
||||||
var/obj/item/device/aicard/C = src
|
|
||||||
if(T.s_initialized&&U==T.affecting)//If the suit is initialized and the actor is the user.
|
|
||||||
|
|
||||||
var/mob/living/silicon/ai/A_T = locate() in C//Determine if there is an AI on target card. Saves time when checking later.
|
|
||||||
var/mob/living/silicon/ai/A = T.AI//Deterine if there is an AI in suit.
|
|
||||||
|
|
||||||
if(A)//If the host AI card is not empty.
|
|
||||||
if(A_T)//If there is an AI on the target card.
|
|
||||||
U << "<span class='danger'>ERROR:</span> [A_T.name] already installed. Remove [A_T.name] to install a new one."
|
|
||||||
else
|
|
||||||
A.loc = C//Throw them into the target card. Since they are already on a card, transfer is easy.
|
|
||||||
C.name = "inteliCard - [A.name]"
|
|
||||||
C.icon_state = "aicard-full"
|
|
||||||
T.AI = null
|
|
||||||
A.cancel_camera()
|
|
||||||
A << "You have been uploaded to a mobile storage device."
|
|
||||||
U << "<span class='notice'><b>SUCCESS</b>:</span> [A.name] ([rand(1000,9999)].exe) removed from host and stored within local memory."
|
|
||||||
else//If host AI is empty.
|
|
||||||
if(C.flush)//If the other card is flushing.
|
|
||||||
U << "<span class='danger'>ERROR:</span> AI flush is in progress, cannot execute transfer protocol."
|
|
||||||
else
|
|
||||||
if(A_T&&!A_T.stat)//If there is an AI on the target card and it's not inactive.
|
|
||||||
A_T.loc = T//Throw them into suit.
|
|
||||||
C.icon_state = "aicard"
|
|
||||||
C.name = "inteliCard"
|
|
||||||
C.overlays.len = 0
|
|
||||||
T.AI = A_T
|
|
||||||
A_T.cancel_camera()
|
|
||||||
A_T << "You have been uploaded to a mobile storage device."
|
|
||||||
U << "<span class='notice'><b>SUCCESS</b>:</span> [A_T.name] ([rand(1000,9999)].exe) removed from local memory and installed to host."
|
|
||||||
else if(A_T)//If the target AI is dead. Else just go to return since nothing would happen if both are empty.
|
|
||||||
U << "<span class='danger'>ERROR:</span> [A_T.name] data core is corrupted. Unable to install."
|
|
||||||
else
|
else
|
||||||
U << "<span class='danger'>ERROR:</span> AI flush is in progress, cannot execute transfer protocol."
|
U << "<span class='danger'>ERROR:</span> AI flush is in progress, cannot execute transfer protocol."
|
||||||
return
|
return
|
||||||
@@ -32,13 +32,6 @@
|
|||||||
if(..())
|
if(..())
|
||||||
return
|
return
|
||||||
|
|
||||||
if(ishuman(user))//Checks to see if they are ninja
|
|
||||||
if(istype(user:gloves, /obj/item/clothing/gloves/space_ninja)&&user:gloves:candrain&&!user:gloves:draining)
|
|
||||||
if(user:wear_suit:s_control)
|
|
||||||
user:wear_suit.transfer_ai("AIFIXER","NINJASUIT",src,user)
|
|
||||||
else
|
|
||||||
user << "<span class='danger'>ERROR: </span>Remote access channel disabled."
|
|
||||||
return
|
|
||||||
var/dat = "<h3>AI System Integrity Restorer</h3><br><br>"
|
var/dat = "<h3>AI System Integrity Restorer</h3><br><br>"
|
||||||
|
|
||||||
if (src.occupant)
|
if (src.occupant)
|
||||||
|
|||||||
@@ -1082,7 +1082,7 @@ About the new airlock wires panel:
|
|||||||
else
|
else
|
||||||
spawn(0) close(1)
|
spawn(0) close(1)
|
||||||
src.busy = 0
|
src.busy = 0
|
||||||
else if (istype(I, /obj/item/weapon/card/emag) || istype(I, /obj/item/weapon/melee/energy/blade))
|
else if (istype(I, /obj/item/weapon/card/emag))
|
||||||
if (!operating)
|
if (!operating)
|
||||||
operating = -1
|
operating = -1
|
||||||
if(density)
|
if(density)
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
/obj/machinery/door/unpowered/attackby(obj/item/I as obj, mob/user as mob)
|
/obj/machinery/door/unpowered/attackby(obj/item/I as obj, mob/user as mob)
|
||||||
// TODO: is energy blade only attack circuity like emag?
|
// TODO: is energy blade only attack circuity like emag?
|
||||||
if (istype(I, /obj/item/weapon/card/emag) || istype(I, /obj/item/weapon/melee/energy/blade))
|
if (istype(I, /obj/item/weapon/card/emag))
|
||||||
return
|
return
|
||||||
|
|
||||||
if (locked)
|
if (locked)
|
||||||
|
|||||||
@@ -196,11 +196,6 @@
|
|||||||
if (src.operating)
|
if (src.operating)
|
||||||
return
|
return
|
||||||
|
|
||||||
//ninja swords? You may pass.
|
|
||||||
if (src.density && istype(I, /obj/item/weapon/melee/energy/blade))
|
|
||||||
hackOpen(I, user)
|
|
||||||
return 1
|
|
||||||
|
|
||||||
//If it's a weapon, smash windoor. Unless it's an id card, agent card, ect.. then ignore it (Cards really shouldnt damage a door anyway)
|
//If it's a weapon, smash windoor. Unless it's an id card, agent card, ect.. then ignore it (Cards really shouldnt damage a door anyway)
|
||||||
if(src.density && istype(I, /obj/item/weapon) && !istype(I, /obj/item/weapon/card))
|
if(src.density && istype(I, /obj/item/weapon) && !istype(I, /obj/item/weapon/card))
|
||||||
var/aforce = I.force
|
var/aforce = I.force
|
||||||
@@ -241,13 +236,6 @@
|
|||||||
if (src.electronics)
|
if (src.electronics)
|
||||||
src.electronics.icon_state = "door_electronics_smoked"
|
src.electronics.icon_state = "door_electronics_smoked"
|
||||||
|
|
||||||
if(istype(I, /obj/item/weapon/melee/energy/blade))
|
|
||||||
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
|
|
||||||
spark_system.set_up(5, 0, src.loc)
|
|
||||||
spark_system.start()
|
|
||||||
playsound(get_turf(src), "sparks", 50, 1)
|
|
||||||
playsound(get_turf(src), 'sound/weapons/blade1.ogg', 50, 1)
|
|
||||||
visible_message("<span class='warning'>The glass door was sliced open by [user]!</span>")
|
|
||||||
flick("[src.base_state]spark", src)
|
flick("[src.base_state]spark", src)
|
||||||
sleep(6)
|
sleep(6)
|
||||||
open()
|
open()
|
||||||
|
|||||||
@@ -483,11 +483,6 @@
|
|||||||
/obj/mecha/attack_hand(mob/user as mob)
|
/obj/mecha/attack_hand(mob/user as mob)
|
||||||
src.log_message("Attack by hand/paw. Attacker - [user].",1)
|
src.log_message("Attack by hand/paw. Attacker - [user].",1)
|
||||||
|
|
||||||
if(ishuman(user))
|
|
||||||
if(istype(user:gloves, /obj/item/clothing/gloves/space_ninja)&&user:gloves:candrain&&!user:gloves:draining)
|
|
||||||
call(/obj/item/clothing/gloves/space_ninja/proc/drain)("MECHA",src,user:wear_suit)
|
|
||||||
return
|
|
||||||
|
|
||||||
if ((M_HULK in user.mutations) && !prob(src.deflect_chance))
|
if ((M_HULK in user.mutations) && !prob(src.deflect_chance))
|
||||||
src.take_damage(15)
|
src.take_damage(15)
|
||||||
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||||
|
|||||||
@@ -125,16 +125,3 @@
|
|||||||
..()
|
..()
|
||||||
_color = null
|
_color = null
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/obj/item/weapon/melee/energy/blade
|
|
||||||
name = "energy blade"
|
|
||||||
desc = "A concentrated beam of energy in the shape of a blade. Very stylish... and lethal."
|
|
||||||
icon_state = "blade"
|
|
||||||
force = 70.0//Normal attacks deal very high damage.
|
|
||||||
throwforce = 1//Throwing or dropping the item deletes it.
|
|
||||||
throw_speed = 1
|
|
||||||
throw_range = 1
|
|
||||||
w_class = 4.0//So you can't hide it in your pocket or some such.
|
|
||||||
flags = FPRINT
|
|
||||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
|
||||||
var/datum/effect/effect/system/spark_spread/spark_system
|
|
||||||
@@ -40,22 +40,13 @@
|
|||||||
return
|
return
|
||||||
else
|
else
|
||||||
user << "<span class='warning'>Access Denied</span>"
|
user << "<span class='warning'>Access Denied</span>"
|
||||||
else if((istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && !src.broken)
|
else if(istype(W, /obj/item/weapon/card/emag) && !src.broken)
|
||||||
broken = 1
|
broken = 1
|
||||||
locked = 0
|
locked = 0
|
||||||
desc = "It appears to be broken."
|
desc = "It appears to be broken."
|
||||||
icon_state = src.icon_broken
|
icon_state = src.icon_broken
|
||||||
if(istype(W, /obj/item/weapon/melee/energy/blade))
|
for(var/mob/O in viewers(user, 3))
|
||||||
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
|
O.show_message(text("<span class='notice'>The locker has been broken by [] with an electromagnetic card!</span>", user), 1, text("You hear a faint electrical spark."), 2)
|
||||||
spark_system.set_up(5, 0, src.loc)
|
|
||||||
spark_system.start()
|
|
||||||
playsound(get_turf(src), 'sound/weapons/blade1.ogg', 50, 1)
|
|
||||||
playsound(get_turf(src), "sparks", 50, 1)
|
|
||||||
for(var/mob/O in viewers(user, 3))
|
|
||||||
O.show_message(text("<span class='notice'>The locker has been sliced open by [] with an energy blade!</span>", user), 1, text("<span class='warning>You hear metal being sliced and sparks flying.</span>"), 2)
|
|
||||||
else
|
|
||||||
for(var/mob/O in viewers(user, 3))
|
|
||||||
O.show_message(text("<span class='notice'>The locker has been broken by [] with an electromagnetic card!</span>", user), 1, text("You hear a faint electrical spark."), 2)
|
|
||||||
|
|
||||||
if(!locked)
|
if(!locked)
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -33,22 +33,14 @@
|
|||||||
|
|
||||||
/obj/item/weapon/storage/secure/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
/obj/item/weapon/storage/secure/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||||
if(locked)
|
if(locked)
|
||||||
if ( (istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && (!src.emagged))
|
if ( istype(W, /obj/item/weapon/card/emag) && (!src.emagged))
|
||||||
emagged = 1
|
emagged = 1
|
||||||
src.overlays += image('icons/obj/storage.dmi', icon_sparking)
|
src.overlays += image('icons/obj/storage.dmi', icon_sparking)
|
||||||
sleep(6)
|
sleep(6)
|
||||||
src.overlays = null
|
src.overlays = null
|
||||||
overlays += image('icons/obj/storage.dmi', icon_locking)
|
overlays += image('icons/obj/storage.dmi', icon_locking)
|
||||||
locked = 0
|
locked = 0
|
||||||
if(istype(W, /obj/item/weapon/melee/energy/blade))
|
user << "You short out the lock on [src]."
|
||||||
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
|
|
||||||
spark_system.set_up(5, 0, src.loc)
|
|
||||||
spark_system.start()
|
|
||||||
playsound(get_turf(src), 'sound/weapons/blade1.ogg', 50, 1)
|
|
||||||
playsound(get_turf(src), "sparks", 50, 1)
|
|
||||||
user << "You slice through the lock on [src]."
|
|
||||||
else
|
|
||||||
user << "You short out the lock on [src]."
|
|
||||||
return
|
return
|
||||||
|
|
||||||
if (istype(W, /obj/item/weapon/screwdriver))
|
if (istype(W, /obj/item/weapon/screwdriver))
|
||||||
|
|||||||
@@ -168,20 +168,6 @@
|
|||||||
New()
|
New()
|
||||||
_color = "red"
|
_color = "red"
|
||||||
|
|
||||||
/obj/item/weapon/melee/energy/blade/New()
|
|
||||||
spark_system = new /datum/effect/effect/system/spark_spread()
|
|
||||||
spark_system.set_up(5, 0, src)
|
|
||||||
spark_system.attach(src)
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/item/weapon/melee/energy/blade/dropped()
|
|
||||||
qdel(src)
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/item/weapon/melee/energy/blade/proc/toss()
|
|
||||||
qdel(src)
|
|
||||||
return
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Energy Axe
|
* Energy Axe
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -73,23 +73,14 @@
|
|||||||
else
|
else
|
||||||
user << "<span class='notice'>The locker appears to be broken.</span>"
|
user << "<span class='notice'>The locker appears to be broken.</span>"
|
||||||
return
|
return
|
||||||
else if((istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && !src.broken)
|
else if(istype(W, /obj/item/weapon/card/emag) && !src.broken)
|
||||||
broken = 1
|
broken = 1
|
||||||
locked = 0
|
locked = 0
|
||||||
desc = "It appears to be broken."
|
desc = "It appears to be broken."
|
||||||
icon_state = icon_off
|
icon_state = icon_off
|
||||||
flick(icon_broken, src)
|
flick(icon_broken, src)
|
||||||
if(istype(W, /obj/item/weapon/melee/energy/blade))
|
for(var/mob/O in viewers(user, 3))
|
||||||
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
|
O.show_message("<span class='warning'>The locker has been broken by [user] with an electromagnetic card!</span>", 1, "You hear a faint electrical spark.", 2)
|
||||||
spark_system.set_up(5, 0, src.loc)
|
|
||||||
spark_system.start()
|
|
||||||
playsound(get_turf(src), 'sound/weapons/blade1.ogg', 50, 1)
|
|
||||||
playsound(get_turf(src), "sparks", 50, 1)
|
|
||||||
for(var/mob/O in viewers(user, 3))
|
|
||||||
O.show_message("<span class='warning'>The locker has been sliced open by [user] with an energy blade!</span>", 1, "You hear metal being sliced and sparks flying.", 2)
|
|
||||||
else
|
|
||||||
for(var/mob/O in viewers(user, 3))
|
|
||||||
O.show_message("<span class='warning'>The locker has been broken by [user] with an electromagnetic card!</span>", 1, "You hear a faint electrical spark.", 2)
|
|
||||||
update_icon()
|
update_icon()
|
||||||
else
|
else
|
||||||
if(istype(W, /obj/item/weapon/weldingtool))
|
if(istype(W, /obj/item/weapon/weldingtool))
|
||||||
|
|||||||
@@ -451,7 +451,7 @@
|
|||||||
overlays.len = 0
|
overlays.len = 0
|
||||||
overlays += redlight
|
overlays += redlight
|
||||||
return
|
return
|
||||||
else if ( (istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && locked &&!broken)
|
else if ( istype(W, /obj/item/weapon/card/emag) && locked &&!broken)
|
||||||
overlays.len = 0
|
overlays.len = 0
|
||||||
overlays += emag
|
overlays += emag
|
||||||
overlays += sparks
|
overlays += sparks
|
||||||
|
|||||||
@@ -190,17 +190,6 @@
|
|||||||
T.attackby(W,user)
|
T.attackby(W,user)
|
||||||
del(src)
|
del(src)
|
||||||
|
|
||||||
else if( istype(W, /obj/item/weapon/melee/energy/blade) )
|
|
||||||
var/turf/T = get_turf(src)
|
|
||||||
if(!mineral)
|
|
||||||
T.ChangeTurf(/turf/simulated/wall)
|
|
||||||
else
|
|
||||||
T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[mineral]"))
|
|
||||||
if(mineral != "plasma")
|
|
||||||
T = get_turf(src)
|
|
||||||
T.attackby(W,user)
|
|
||||||
del(src)
|
|
||||||
|
|
||||||
/obj/structure/falsewall/update_icon()//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open
|
/obj/structure/falsewall/update_icon()//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open
|
||||||
..()
|
..()
|
||||||
if(density)
|
if(density)
|
||||||
@@ -286,7 +275,7 @@
|
|||||||
T.ChangeTurf(/turf/simulated/wall)
|
T.ChangeTurf(/turf/simulated/wall)
|
||||||
T = get_turf(src)
|
T = get_turf(src)
|
||||||
T.attackby(W,user)
|
T.attackby(W,user)
|
||||||
del(src)
|
qdel(src)
|
||||||
|
|
||||||
else if( istype(W, /obj/item/weapon/pickaxe) )
|
else if( istype(W, /obj/item/weapon/pickaxe) )
|
||||||
var/obj/item/weapon/pickaxe/used_pick = W
|
var/obj/item/weapon/pickaxe/used_pick = W
|
||||||
@@ -296,14 +285,7 @@
|
|||||||
T.ChangeTurf(/turf/simulated/wall)
|
T.ChangeTurf(/turf/simulated/wall)
|
||||||
T = get_turf(src)
|
T = get_turf(src)
|
||||||
T.attackby(W,user)
|
T.attackby(W,user)
|
||||||
del(src)
|
qdel(src)
|
||||||
|
|
||||||
else if( istype(W, /obj/item/weapon/melee/energy/blade) )
|
|
||||||
var/turf/T = get_turf(src)
|
|
||||||
T.ChangeTurf(/turf/simulated/wall)
|
|
||||||
T = get_turf(src)
|
|
||||||
T.attackby(W,user)
|
|
||||||
del(src)
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -370,16 +370,6 @@
|
|||||||
destroy()
|
destroy()
|
||||||
return
|
return
|
||||||
|
|
||||||
if(istype(W, /obj/item/weapon/melee/energy/blade))
|
|
||||||
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
|
|
||||||
spark_system.set_up(5, 0, src.loc)
|
|
||||||
spark_system.start()
|
|
||||||
playsound(get_turf(src), 'sound/weapons/blade1.ogg', 50, 1)
|
|
||||||
playsound(get_turf(src), "sparks", 50, 1)
|
|
||||||
for(var/mob/O in viewers(user, 4))
|
|
||||||
O.show_message("<span class='notice'>The [src] was sliced apart by [user]!</span>", 1, "<span class='warning'>You hear [src] coming apart.</span>", 2)
|
|
||||||
destroy()
|
|
||||||
|
|
||||||
if(user.drop_item(W, src.loc))
|
if(user.drop_item(W, src.loc))
|
||||||
if(W.loc == src.loc && params_list.len)
|
if(W.loc == src.loc && params_list.len)
|
||||||
var/clamp_x = clicked.Width() / 2
|
var/clamp_x = clicked.Width() / 2
|
||||||
|
|||||||
@@ -248,31 +248,6 @@
|
|||||||
log_admin("[user.real_name] ([user.ckey]) dismantled with a pdiff of [pdiff] at [loc]!")
|
log_admin("[user.real_name] ([user.ckey]) dismantled with a pdiff of [pdiff] at [loc]!")
|
||||||
return
|
return
|
||||||
|
|
||||||
else if(istype(W, /obj/item/weapon/melee/energy/blade)) //Oh sweet, some snowflakes !
|
|
||||||
|
|
||||||
if(mineral == "diamond") //Nah fuck off I'm made of diamonds
|
|
||||||
return
|
|
||||||
|
|
||||||
var/obj/item/weapon/melee/energy/blade/EB = W
|
|
||||||
EB.spark_system.start()
|
|
||||||
user.visible_message("<span class='notice'>[user] stabs \his [EB] into \the [src] and begin to slice it apart.</span>", \
|
|
||||||
"<span class='notice'>You stab your [EB] into \the [src] and begin to slice it apart.</span>")
|
|
||||||
playsound(src, "sparks", 50, 1)
|
|
||||||
|
|
||||||
if(do_after(user, src, 70))
|
|
||||||
EB.spark_system.start()
|
|
||||||
playsound(src, "sparks", 50, 1)
|
|
||||||
playsound(src, 'sound/weapons/blade1.ogg', 50, 1)
|
|
||||||
user.visible_message("<span class='warning'>[user] slices through \the [src] using \his [EB].</span>", \
|
|
||||||
"<span class='notice'>You slice through \the [src] using your [EB].</span>")
|
|
||||||
dismantle_wall(1)
|
|
||||||
|
|
||||||
var/pdiff = performWallPressureCheck(src.loc)
|
|
||||||
if(pdiff)
|
|
||||||
message_admins("[user.real_name] ([formatPlayerPanel(user,user.ckey)]) sliced up a wall with a pdiff of [pdiff] at [formatJumpTo(loc)]!")
|
|
||||||
log_admin("[user.real_name] ([user.ckey]) sliced up a wall with a pdiff of [pdiff] at [loc]!")
|
|
||||||
return
|
|
||||||
|
|
||||||
else if(istype(W, /obj/item/mounted)) //If we place it, we don't want to have a silly message
|
else if(istype(W, /obj/item/mounted)) //If we place it, we don't want to have a silly message
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -734,7 +734,6 @@ var/global/floorIsLava = 0
|
|||||||
<A href='?src=\ref[src];secretsfun=aliens'>Trigger an Alien infestation</A><BR>
|
<A href='?src=\ref[src];secretsfun=aliens'>Trigger an Alien infestation</A><BR>
|
||||||
<A href='?src=\ref[src];secretsfun=alien_silent'>Spawn an Alien silently</A><BR>
|
<A href='?src=\ref[src];secretsfun=alien_silent'>Spawn an Alien silently</A><BR>
|
||||||
<A href='?src=\ref[src];secretsfun=spiders'>Trigger a Spider infestation</A><BR>
|
<A href='?src=\ref[src];secretsfun=spiders'>Trigger a Spider infestation</A><BR>
|
||||||
<A href='?src=\ref[src];secretsfun=spaceninja'>Send in a space ninja</A><BR>
|
|
||||||
<A href='?src=\ref[src];secretsfun=striketeam'>Send in a strike team</A><BR>
|
<A href='?src=\ref[src];secretsfun=striketeam'>Send in a strike team</A><BR>
|
||||||
<A href='?src=\ref[src];secretsfun=carp'>Trigger a Carp migration</A><BR>
|
<A href='?src=\ref[src];secretsfun=carp'>Trigger a Carp migration</A><BR>
|
||||||
<A href='?src=\ref[src];secretsfun=radiation'>Irradiate the station</A><BR>
|
<A href='?src=\ref[src];secretsfun=radiation'>Irradiate the station</A><BR>
|
||||||
@@ -971,14 +970,6 @@ var/global/floorIsLava = 0
|
|||||||
message_admins("[key_name_admin(usr)] toggled Aliens [aliens_allowed ? "on" : "off"].", 1)
|
message_admins("[key_name_admin(usr)] toggled Aliens [aliens_allowed ? "on" : "off"].", 1)
|
||||||
feedback_add_details("admin_verb","TA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
feedback_add_details("admin_verb","TA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||||
|
|
||||||
/datum/admins/proc/toggle_space_ninja()
|
|
||||||
set category = "Server"
|
|
||||||
set desc="Toggle space ninjas spawning."
|
|
||||||
set name="Toggle Space Ninjas"
|
|
||||||
toggle_space_ninja = !toggle_space_ninja
|
|
||||||
log_admin("[key_name(usr)] toggled Space Ninjas to [toggle_space_ninja].")
|
|
||||||
message_admins("[key_name_admin(usr)] toggled Space Ninjas [toggle_space_ninja ? "on" : "off"].", 1)
|
|
||||||
feedback_add_details("admin_verb","TSN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
|
||||||
#define LOBBY_TICKING_STOPPED 0
|
#define LOBBY_TICKING_STOPPED 0
|
||||||
#define LOBBY_TICKING_RESTARTED 2
|
#define LOBBY_TICKING_RESTARTED 2
|
||||||
/datum/admins/proc/delay()
|
/datum/admins/proc/delay()
|
||||||
|
|||||||
@@ -97,8 +97,6 @@ var/list/admin_verbs_fun = list(
|
|||||||
/client/proc/one_click_antag,
|
/client/proc/one_click_antag,
|
||||||
/client/proc/antag_madness,
|
/client/proc/antag_madness,
|
||||||
/datum/admins/proc/toggle_aliens,
|
/datum/admins/proc/toggle_aliens,
|
||||||
/datum/admins/proc/toggle_space_ninja,
|
|
||||||
/client/proc/send_space_ninja,
|
|
||||||
// FUUUUCKED /client/proc/zombie_event, // ZOMBB-B-BIES
|
// FUUUUCKED /client/proc/zombie_event, // ZOMBB-B-BIES
|
||||||
/client/proc/cmd_admin_add_freeform_ai_law,
|
/client/proc/cmd_admin_add_freeform_ai_law,
|
||||||
/client/proc/cmd_admin_add_random_ai_law,
|
/client/proc/cmd_admin_add_random_ai_law,
|
||||||
@@ -137,7 +135,6 @@ var/list/admin_verbs_server = list(
|
|||||||
/datum/admins/proc/adspawn,
|
/datum/admins/proc/adspawn,
|
||||||
/datum/admins/proc/adjump,
|
/datum/admins/proc/adjump,
|
||||||
/datum/admins/proc/toggle_aliens,
|
/datum/admins/proc/toggle_aliens,
|
||||||
/datum/admins/proc/toggle_space_ninja,
|
|
||||||
/client/proc/toggle_random_events,
|
/client/proc/toggle_random_events,
|
||||||
/client/proc/check_customitem_activity,
|
/client/proc/check_customitem_activity,
|
||||||
/client/proc/dump_chemreactions,
|
/client/proc/dump_chemreactions,
|
||||||
@@ -226,8 +223,6 @@ var/list/admin_verbs_hideable = list(
|
|||||||
/client/proc/drop_bomb,
|
/client/proc/drop_bomb,
|
||||||
/client/proc/cinematic,
|
/client/proc/cinematic,
|
||||||
/datum/admins/proc/toggle_aliens,
|
/datum/admins/proc/toggle_aliens,
|
||||||
/datum/admins/proc/toggle_space_ninja,
|
|
||||||
/client/proc/send_space_ninja,
|
|
||||||
/client/proc/cmd_admin_add_freeform_ai_law,
|
/client/proc/cmd_admin_add_freeform_ai_law,
|
||||||
/client/proc/cmd_admin_add_random_ai_law,
|
/client/proc/cmd_admin_add_random_ai_law,
|
||||||
/client/proc/cmd_admin_create_centcom_report,
|
/client/proc/cmd_admin_create_centcom_report,
|
||||||
@@ -392,7 +387,7 @@ var/list/admin_verbs_mod = list(
|
|||||||
var/mob/body = mob
|
var/mob/body = mob
|
||||||
if(body.mind) body.mind.isScrying = 1
|
if(body.mind) body.mind.isScrying = 1
|
||||||
body.ghostize(1)
|
body.ghostize(1)
|
||||||
|
|
||||||
if(body && !body.key)
|
if(body && !body.key)
|
||||||
body.key = "@[key]" //Haaaaaaaack. But the people have spoken. If it breaks; blame adminbus
|
body.key = "@[key]" //Haaaaaaaack. But the people have spoken. If it breaks; blame adminbus
|
||||||
feedback_add_details("admin_verb","O") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
feedback_add_details("admin_verb","O") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||||
|
|||||||
@@ -37,9 +37,6 @@
|
|||||||
log_admin("[key_name(usr)] has spawned a nuke team.")
|
log_admin("[key_name(usr)] has spawned a nuke team.")
|
||||||
if(!src.makeNukeTeam())
|
if(!src.makeNukeTeam())
|
||||||
usr << "<span class='warning'>Unfortunately there weren't enough candidates available.</span>"
|
usr << "<span class='warning'>Unfortunately there weren't enough candidates available.</span>"
|
||||||
if("8")
|
|
||||||
log_admin("[key_name(usr)] has spawned a ninja.")
|
|
||||||
src.makeSpaceNinja()
|
|
||||||
if("9")
|
if("9")
|
||||||
log_admin("[key_name(usr)] has spawned aliens.")
|
log_admin("[key_name(usr)] has spawned aliens.")
|
||||||
src.makeAliens()
|
src.makeAliens()
|
||||||
@@ -2000,10 +1997,6 @@
|
|||||||
if(!check_rights(R_FUN,0))
|
if(!check_rights(R_FUN,0))
|
||||||
removed_paths += dirty_path
|
removed_paths += dirty_path
|
||||||
continue
|
continue
|
||||||
else if(ispath(path, /obj/item/weapon/melee/energy/blade))//Not an item one should be able to spawn./N
|
|
||||||
if(!check_rights(R_FUN,0))
|
|
||||||
removed_paths += dirty_path
|
|
||||||
continue
|
|
||||||
else if(ispath(path, /obj/effect/bhole))
|
else if(ispath(path, /obj/effect/bhole))
|
||||||
if(!check_rights(R_FUN,0))
|
if(!check_rights(R_FUN,0))
|
||||||
removed_paths += dirty_path
|
removed_paths += dirty_path
|
||||||
@@ -2484,12 +2477,6 @@
|
|||||||
feedback_add_details("admin_secrets_fun_used","PDA")
|
feedback_add_details("admin_secrets_fun_used","PDA")
|
||||||
new /datum/event/pda_spam
|
new /datum/event/pda_spam
|
||||||
|
|
||||||
if("spaceninja")
|
|
||||||
feedback_inc("admin_secrets_fun_used",1)
|
|
||||||
feedback_add_details("admin_secrets_fun_used","SN")
|
|
||||||
if(toggle_space_ninja)
|
|
||||||
if(space_ninja_arrival())//If the ninja is actually spawned. They may not be depending on a few factors.
|
|
||||||
message_admins("[key_name_admin(usr)] has sent in a space ninja", 1)
|
|
||||||
if("carp")
|
if("carp")
|
||||||
feedback_inc("admin_secrets_fun_used",1)
|
feedback_inc("admin_secrets_fun_used",1)
|
||||||
feedback_add_details("admin_secrets_fun_used","C")
|
feedback_add_details("admin_secrets_fun_used","C")
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ client/proc/one_click_antag()
|
|||||||
<a href='?src=\ref[src];makeAntag=6'>Make Wizard (Requires Ghosts)</a><br>
|
<a href='?src=\ref[src];makeAntag=6'>Make Wizard (Requires Ghosts)</a><br>
|
||||||
<a href='?src=\ref[src];makeAntag=11'>Make Vox Raiders (Requires Ghosts)</a><br>
|
<a href='?src=\ref[src];makeAntag=11'>Make Vox Raiders (Requires Ghosts)</a><br>
|
||||||
<a href='?src=\ref[src];makeAntag=7'>Make Nuke Team (Requires Ghosts)</a><br>
|
<a href='?src=\ref[src];makeAntag=7'>Make Nuke Team (Requires Ghosts)</a><br>
|
||||||
<a href='?src=\ref[src];makeAntag=8'>Make Space Ninja (Requires Ghosts)</a><br>
|
|
||||||
<a href='?src=\ref[src];makeAntag=9'>Make Aliens (Requires Ghosts)</a><br>
|
<a href='?src=\ref[src];makeAntag=9'>Make Aliens (Requires Ghosts)</a><br>
|
||||||
<a href='?src=\ref[src];makeAntag=10'>Make Deathsquad (Syndicate) (Requires Ghosts)</a><br>
|
<a href='?src=\ref[src];makeAntag=10'>Make Deathsquad (Syndicate) (Requires Ghosts)</a><br>
|
||||||
"}
|
"}
|
||||||
@@ -293,11 +292,6 @@ client/proc/one_click_antag()
|
|||||||
/datum/admins/proc/makeAliens()
|
/datum/admins/proc/makeAliens()
|
||||||
alien_infestation(3)
|
alien_infestation(3)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/datum/admins/proc/makeSpaceNinja()
|
|
||||||
space_ninja_arrival()
|
|
||||||
return 1
|
|
||||||
|
|
||||||
/datum/admins/proc/makeDeathsquad()
|
/datum/admins/proc/makeDeathsquad()
|
||||||
var/list/mob/dead/observer/candidates = list()
|
var/list/mob/dead/observer/candidates = list()
|
||||||
var/mob/dead/observer/theghost = null
|
var/mob/dead/observer/theghost = null
|
||||||
|
|||||||
@@ -500,17 +500,6 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
|||||||
if(synd_spawn)
|
if(synd_spawn)
|
||||||
new_character.loc = get_turf(synd_spawn)
|
new_character.loc = get_turf(synd_spawn)
|
||||||
call(/datum/game_mode/proc/equip_syndicate)(new_character)
|
call(/datum/game_mode/proc/equip_syndicate)(new_character)
|
||||||
if("Space Ninja")
|
|
||||||
var/ninja_spawn[] = list()
|
|
||||||
for(var/obj/effect/landmark/L in landmarks_list)
|
|
||||||
if(L.name=="carpspawn")
|
|
||||||
ninja_spawn += L
|
|
||||||
new_character.equip_space_ninja()
|
|
||||||
new_character.internal = new_character.s_store
|
|
||||||
new_character.internals.icon_state = "internal1"
|
|
||||||
if(ninja_spawn.len)
|
|
||||||
var/obj/effect/landmark/ninja_spawn_here = pick(ninja_spawn)
|
|
||||||
new_character.loc = ninja_spawn_here.loc
|
|
||||||
if("Death Commando")//Leaves them at late-join spawn.
|
if("Death Commando")//Leaves them at late-join spawn.
|
||||||
new_character.equip_death_commando()
|
new_character.equip_death_commando()
|
||||||
new_character.internal = new_character.s_store
|
new_character.internal = new_character.s_store
|
||||||
|
|||||||
@@ -1,15 +1,3 @@
|
|||||||
/obj/item/clothing/gloves/space_ninja
|
|
||||||
desc = "These nano-enhanced gloves insulate from electricity and provide fire resistance."
|
|
||||||
name = "ninja gloves"
|
|
||||||
icon_state = "s-ninja"
|
|
||||||
item_state = "s-ninja"
|
|
||||||
siemens_coefficient = 0.2
|
|
||||||
var/draining = 0
|
|
||||||
var/candrain = 0
|
|
||||||
var/mindrain = 200
|
|
||||||
var/maxdrain = 400
|
|
||||||
species_fit = list("Vox")
|
|
||||||
|
|
||||||
/obj/item/clothing/gloves/captain
|
/obj/item/clothing/gloves/captain
|
||||||
desc = "Regal blue gloves, with a nice gold trim. Swanky."
|
desc = "Regal blue gloves, with a nice gold trim. Swanky."
|
||||||
name = "captain's gloves"
|
name = "captain's gloves"
|
||||||
|
|||||||
@@ -92,15 +92,6 @@
|
|||||||
vchange = !vchange
|
vchange = !vchange
|
||||||
user << "<span class='notice'>The voice changer is now [vchange ? "on" : "off"]!</span>"
|
user << "<span class='notice'>The voice changer is now [vchange ? "on" : "off"]!</span>"
|
||||||
|
|
||||||
/obj/item/clothing/mask/gas/voice/space_ninja
|
|
||||||
name = "ninja mask"
|
|
||||||
desc = "A close-fitting mask that acts both as an air filter and a post-modern fashion statement."
|
|
||||||
icon_state = "s-ninja"
|
|
||||||
item_state = "s-ninja_mask"
|
|
||||||
vchange = 1
|
|
||||||
siemens_coefficient = 0.2
|
|
||||||
species_fit = list("Vox")
|
|
||||||
|
|
||||||
/obj/item/clothing/mask/gas/clown_hat
|
/obj/item/clothing/mask/gas/clown_hat
|
||||||
name = "clown wig and mask"
|
name = "clown wig and mask"
|
||||||
desc = "A true prankster's facial attire. A clown is incomplete without his wig and mask."
|
desc = "A true prankster's facial attire. A clown is incomplete without his wig and mask."
|
||||||
|
|||||||
@@ -65,16 +65,6 @@
|
|||||||
w_class = 2
|
w_class = 2
|
||||||
gas_transfer_coefficient = 0.90
|
gas_transfer_coefficient = 0.90
|
||||||
|
|
||||||
/obj/item/clothing/mask/ninjascarf
|
|
||||||
name = "ninja scarf"
|
|
||||||
desc = "A stealthy, dark scarf."
|
|
||||||
icon_state = "ninja_scarf"
|
|
||||||
item_state = "ninja_scarf"
|
|
||||||
flags = FPRINT
|
|
||||||
w_class = 2
|
|
||||||
gas_transfer_coefficient = 0.90
|
|
||||||
siemens_coefficient = 0
|
|
||||||
|
|
||||||
/obj/item/clothing/mask/pig
|
/obj/item/clothing/mask/pig
|
||||||
name = "pig mask"
|
name = "pig mask"
|
||||||
desc = "A rubber pig mask."
|
desc = "A rubber pig mask."
|
||||||
|
|||||||
@@ -84,20 +84,6 @@
|
|||||||
heat_protection = FEET
|
heat_protection = FEET
|
||||||
max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE
|
max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||||
|
|
||||||
/obj/item/clothing/shoes/space_ninja
|
|
||||||
name = "ninja shoes"
|
|
||||||
desc = "A pair of running shoes. Excellent for running and even better for smashing skulls."
|
|
||||||
icon_state = "s-ninja"
|
|
||||||
permeability_coefficient = 0.01
|
|
||||||
flags = NOSLIP
|
|
||||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
|
||||||
siemens_coefficient = 0.2
|
|
||||||
|
|
||||||
cold_protection = FEET
|
|
||||||
min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE
|
|
||||||
heat_protection = FEET
|
|
||||||
max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE
|
|
||||||
|
|
||||||
/obj/item/clothing/shoes/sandal
|
/obj/item/clothing/shoes/sandal
|
||||||
desc = "A pair of rather plain, wooden sandals."
|
desc = "A pair of rather plain, wooden sandals."
|
||||||
name = "sandals"
|
name = "sandals"
|
||||||
|
|||||||
@@ -1,12 +1,3 @@
|
|||||||
/obj/item/clothing/head/helmet/space/space_ninja
|
|
||||||
desc = "What may appear to be a simple black garment is in fact a highly sophisticated nano-weave helmet. Standard issue ninja gear."
|
|
||||||
name = "ninja hood"
|
|
||||||
icon_state = "s-ninja"
|
|
||||||
item_state = "s-ninja_mask"
|
|
||||||
allowed = list(/obj/item/weapon/cell)
|
|
||||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 25)
|
|
||||||
siemens_coefficient = 0.2
|
|
||||||
|
|
||||||
/obj/item/clothing/suit/space/jetstream
|
/obj/item/clothing/suit/space/jetstream
|
||||||
desc = "It appears to be Jetstream Sam's suit"
|
desc = "It appears to be Jetstream Sam's suit"
|
||||||
name = "Jetstream Sam's suit"
|
name = "Jetstream Sam's suit"
|
||||||
@@ -16,55 +7,3 @@
|
|||||||
slowdown = 0
|
slowdown = 0
|
||||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||||
siemens_coefficient = 0.2
|
siemens_coefficient = 0.2
|
||||||
|
|
||||||
/obj/item/clothing/suit/space/space_ninja
|
|
||||||
name = "ninja suit"
|
|
||||||
desc = "A unique, vaccum-proof suit of nano-enhanced armor designed specifically for Spider Clan assassins."
|
|
||||||
icon_state = "s-ninja"
|
|
||||||
item_state = "s-ninja_suit"
|
|
||||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_storage,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_nitrogen,/obj/item/weapon/cell)
|
|
||||||
slowdown = 0
|
|
||||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
|
||||||
siemens_coefficient = 0.2
|
|
||||||
|
|
||||||
//Important parts of the suit.
|
|
||||||
var/mob/living/carbon/affecting = null//The wearer.
|
|
||||||
var/obj/item/weapon/cell/cell//Starts out with a high-capacity cell using New().
|
|
||||||
var/datum/effect/effect/system/spark_spread/spark_system//To create sparks.
|
|
||||||
var/reagent_list[] = list("tricordrazine","dexalinp","spaceacillin","anti_toxin","nutriment","radium","hyronalin")//The reagents ids which are added to the suit at New().
|
|
||||||
var/stored_research[]//For stealing station research.
|
|
||||||
var/obj/item/weapon/disk/tech_disk/t_disk//To copy design onto disk.
|
|
||||||
|
|
||||||
//Other articles of ninja gear worn together, used to easily reference them after initializing.
|
|
||||||
var/obj/item/clothing/head/helmet/space/space_ninja/n_hood
|
|
||||||
var/obj/item/clothing/shoes/space_ninja/n_shoes
|
|
||||||
var/obj/item/clothing/gloves/space_ninja/n_gloves
|
|
||||||
|
|
||||||
//Main function variables.
|
|
||||||
var/s_initialized = 0//Suit starts off.
|
|
||||||
var/s_coold = 0//If the suit is on cooldown. Can be used to attach different cooldowns to abilities. Ticks down every second based on suit ntick().
|
|
||||||
var/s_cost = 5.0//Base energy cost each ntick.
|
|
||||||
var/s_acost = 25.0//Additional cost for additional powers active.
|
|
||||||
var/k_cost = 200.0//Kamikaze energy cost each ntick.
|
|
||||||
var/k_damage = 1.0//Brute damage potentially done by Kamikaze each ntick.
|
|
||||||
var/s_delay = 40.0//How fast the suit does certain things, lower is faster. Can be overridden in specific procs. Also determines adverse probability.
|
|
||||||
var/a_transfer = 20.0//How much reagent is transferred when injecting.
|
|
||||||
var/r_maxamount = 80.0//How much reagent in total there is.
|
|
||||||
|
|
||||||
//Support function variables.
|
|
||||||
var/spideros = 0//Mode of SpiderOS. This can change so I won't bother listing the modes here (0 is hub). Check ninja_equipment.dm for how it all works.
|
|
||||||
var/s_active = 0//Stealth off.
|
|
||||||
var/s_busy = 0//Is the suit busy with a process? Like AI hacking. Used for safety functions.
|
|
||||||
var/kamikaze = 0//Kamikaze on or off.
|
|
||||||
var/k_unlock = 0//To unlock Kamikaze.
|
|
||||||
|
|
||||||
//Ability function variables.
|
|
||||||
var/s_bombs = 10.0//Number of starting ninja smoke bombs.
|
|
||||||
var/a_boost = 3.0//Number of adrenaline boosters.
|
|
||||||
|
|
||||||
//Onboard AI related variables.
|
|
||||||
var/mob/living/silicon/ai/AI//If there is an AI inside the suit.
|
|
||||||
var/obj/item/device/paicard/pai//A slot for a pAI device
|
|
||||||
var/obj/effect/overlay/hologram//Is the AI hologram on or off? Visible only to the wearer of the suit. This works by attaching an image to a blank overlay.
|
|
||||||
var/flush = 0//If an AI purge is in progress.
|
|
||||||
var/s_control = 1//If user in control of the suit.
|
|
||||||
|
|||||||
@@ -71,9 +71,6 @@ var/list/event_last_fired = list()
|
|||||||
possibleEvents[/datum/event/spider_infestation] = 15
|
possibleEvents[/datum/event/spider_infestation] = 15
|
||||||
if(aliens_allowed && !sent_aliens_to_station)
|
if(aliens_allowed && !sent_aliens_to_station)
|
||||||
possibleEvents[/datum/event/alien_infestation] = 10
|
possibleEvents[/datum/event/alien_infestation] = 10
|
||||||
if(!sent_ninja_to_station && toggle_space_ninja)
|
|
||||||
possibleEvents[/datum/event/space_ninja] = 0 //Fix the ninja code first
|
|
||||||
|
|
||||||
for(var/event_type in event_last_fired) if(possibleEvents[event_type])
|
for(var/event_type in event_last_fired) if(possibleEvents[event_type])
|
||||||
var/time_passed = world.time - event_last_fired[event_type]
|
var/time_passed = world.time - event_last_fired[event_type]
|
||||||
var/full_recharge_after = 60 * 60 * 10 // Was 3 hours, changed to 1 hour since rounds rarely last that long anyways
|
var/full_recharge_after = 60 * 60 * 10 // Was 3 hours, changed to 1 hour since rounds rarely last that long anyways
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
/datum/event/space_ninja/setup()
|
|
||||||
space_ninja_arrival()
|
|
||||||
@@ -251,8 +251,6 @@ Works together with spawning an observer, noted above.
|
|||||||
U.client.images += image(tempHud,target,"hudalien")
|
U.client.images += image(tempHud,target,"hudalien")
|
||||||
if("Death Commando")
|
if("Death Commando")
|
||||||
U.client.images += image(tempHud,target,"huddeathsquad")
|
U.client.images += image(tempHud,target,"huddeathsquad")
|
||||||
if("Ninja")
|
|
||||||
U.client.images += image(tempHud,target,"hudninja")
|
|
||||||
if("Vampire")
|
if("Vampire")
|
||||||
U.client.images += image(tempHud,target,"vampire")
|
U.client.images += image(tempHud,target,"vampire")
|
||||||
if("VampThrall")
|
if("VampThrall")
|
||||||
|
|||||||
@@ -91,12 +91,6 @@
|
|||||||
if(!gibbed)
|
if(!gibbed)
|
||||||
emote("deathgasp") //let the world KNOW WE ARE DEAD
|
emote("deathgasp") //let the world KNOW WE ARE DEAD
|
||||||
|
|
||||||
//For ninjas exploding when they die.
|
|
||||||
if( istype(wear_suit, /obj/item/clothing/suit/space/space_ninja) && wear_suit:s_initialized )
|
|
||||||
src << browse(null, "window=spideros")//Just in case.
|
|
||||||
var/location = loc
|
|
||||||
explosion(location, 1, 2, 3, 4)
|
|
||||||
|
|
||||||
update_canmove()
|
update_canmove()
|
||||||
if(client) blind.layer = 0
|
if(client) blind.layer = 0
|
||||||
|
|
||||||
|
|||||||
@@ -172,8 +172,6 @@
|
|||||||
if(mind.changeling)
|
if(mind.changeling)
|
||||||
stat("Chemical Storage", mind.changeling.chem_charges)
|
stat("Chemical Storage", mind.changeling.chem_charges)
|
||||||
stat("Genetic Damage Time", mind.changeling.geneticdamage)
|
stat("Genetic Damage Time", mind.changeling.geneticdamage)
|
||||||
if (istype(wear_suit, /obj/item/clothing/suit/space/space_ninja)&&wear_suit:s_initialized)
|
|
||||||
stat("Energy Charge", round(wear_suit:cell:charge/100))
|
|
||||||
|
|
||||||
if(istype(loc, /obj/spacepod)) // Spacdpods!
|
if(istype(loc, /obj/spacepod)) // Spacdpods!
|
||||||
var/obj/spacepod/S = loc
|
var/obj/spacepod/S = loc
|
||||||
|
|||||||
@@ -1445,27 +1445,6 @@ var/global/list/organ_damage_overlays = list(
|
|||||||
see_invisible = SEE_INVISIBLE_LIVING
|
see_invisible = SEE_INVISIBLE_LIVING
|
||||||
seer = 0
|
seer = 0
|
||||||
|
|
||||||
if(istype(wear_mask, /obj/item/clothing/mask/gas/voice/space_ninja))
|
|
||||||
var/obj/item/clothing/mask/gas/voice/space_ninja/O = wear_mask
|
|
||||||
switch(O.mode)
|
|
||||||
if(0)
|
|
||||||
var/target_list[] = list()
|
|
||||||
for(var/mob/living/target in oview(src))
|
|
||||||
if( target.mind&&(target.mind.special_role||issilicon(target)) )//They need to have a mind.
|
|
||||||
target_list += target
|
|
||||||
if(target_list.len)//Everything else is handled by the ninja mask proc.
|
|
||||||
O.assess_targets(target_list, src)
|
|
||||||
if(!druggy) see_invisible = SEE_INVISIBLE_LIVING
|
|
||||||
if(1)
|
|
||||||
see_in_dark = 5
|
|
||||||
if(!druggy) see_invisible = SEE_INVISIBLE_LIVING
|
|
||||||
if(2)
|
|
||||||
sight |= SEE_MOBS
|
|
||||||
if(!druggy) see_invisible = SEE_INVISIBLE_LEVEL_TWO
|
|
||||||
if(3)
|
|
||||||
sight |= SEE_TURFS
|
|
||||||
if(!druggy) see_invisible = SEE_INVISIBLE_LIVING
|
|
||||||
|
|
||||||
if(glasses)
|
if(glasses)
|
||||||
var/obj/item/clothing/glasses/G = glasses
|
var/obj/item/clothing/glasses/G = glasses
|
||||||
if(istype(G))
|
if(istype(G))
|
||||||
@@ -1970,8 +1949,6 @@ var/global/list/organ_damage_overlays = list(
|
|||||||
holder.icon_state = "hudwizard"
|
holder.icon_state = "hudwizard"
|
||||||
if("Death Commando")
|
if("Death Commando")
|
||||||
holder.icon_state = "huddeathsquad"
|
holder.icon_state = "huddeathsquad"
|
||||||
if("Ninja")
|
|
||||||
holder.icon_state = "hudninja"
|
|
||||||
if("Vampire") // TODO: Check this
|
if("Vampire") // TODO: Check this
|
||||||
holder.icon_state = "hudvampire"
|
holder.icon_state = "hudvampire"
|
||||||
|
|
||||||
|
|||||||
@@ -495,16 +495,6 @@ var/list/ai_list = list()
|
|||||||
O.show_message(text("<span class='danger'>[] took a swipe at []!</span>", M, src), 1)
|
O.show_message(text("<span class='danger'>[] took a swipe at []!</span>", M, src), 1)
|
||||||
return
|
return
|
||||||
|
|
||||||
/mob/living/silicon/ai/attack_hand(mob/living/carbon/M as mob)
|
|
||||||
if(ishuman(M))//Checks to see if they are ninja
|
|
||||||
if(istype(M:gloves, /obj/item/clothing/gloves/space_ninja)&&M:gloves:candrain&&!M:gloves:draining)
|
|
||||||
if(M:wear_suit:s_control)
|
|
||||||
M:wear_suit:transfer_ai("AICORE", "NINJASUIT", src, M)
|
|
||||||
else
|
|
||||||
M << "<span class='danger'>ERROR: </span>Remote access channel disabled."
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
/mob/living/silicon/ai/attack_animal(mob/living/simple_animal/M as mob)
|
/mob/living/silicon/ai/attack_animal(mob/living/simple_animal/M as mob)
|
||||||
if(!istype(M))
|
if(!istype(M))
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -233,36 +233,6 @@ proc/Gibberish(t, p)//t is the inputted message, and any value higher than 70 fo
|
|||||||
message = stutter(message)
|
message = stutter(message)
|
||||||
return message
|
return message
|
||||||
|
|
||||||
|
|
||||||
/proc/ninjaspeak(n)
|
|
||||||
/*
|
|
||||||
The difference with stutter is that this proc can stutter more than 1 letter
|
|
||||||
The issue here is that anything that does not have a space is treated as one word (in many instances). For instance, "LOOKING," is a word, including the comma.
|
|
||||||
It's fairly easy to fix if dealing with single letters but not so much with compounds of letters./N
|
|
||||||
*/
|
|
||||||
var/te = html_decode(n)
|
|
||||||
var/t = ""
|
|
||||||
n = length(n)
|
|
||||||
var/p = 1
|
|
||||||
while(p <= n)
|
|
||||||
var/n_letter
|
|
||||||
var/n_mod = rand(1,4)
|
|
||||||
if(p+n_mod>n+1)
|
|
||||||
n_letter = copytext(te, p, n+1)
|
|
||||||
else
|
|
||||||
n_letter = copytext(te, p, p+n_mod)
|
|
||||||
if (prob(50))
|
|
||||||
if (prob(30))
|
|
||||||
n_letter = text("[n_letter]-[n_letter]-[n_letter]")
|
|
||||||
else
|
|
||||||
n_letter = text("[n_letter]-[n_letter]")
|
|
||||||
else
|
|
||||||
n_letter = text("[n_letter]")
|
|
||||||
t = text("[t][n_letter]")
|
|
||||||
p=p+n_mod
|
|
||||||
return copytext(sanitize(t),1,MAX_MESSAGE_LEN)
|
|
||||||
|
|
||||||
|
|
||||||
/proc/shake_camera(mob/M, duration=0, strength=1)
|
/proc/shake_camera(mob/M, duration=0, strength=1)
|
||||||
if(!M || !M.client || M.shakecamera)
|
if(!M || !M.client || M.shakecamera)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -689,26 +689,6 @@ Note that amputating the affected organ does in fact remove the infection from t
|
|||||||
if (prob(25))
|
if (prob(25))
|
||||||
release_restraints()
|
release_restraints()
|
||||||
|
|
||||||
// This is mostly for the ninja suit to stop ninja being so crippled by breaks.
|
|
||||||
// TODO: consider moving this to a suit proc or process() or something during
|
|
||||||
// hardsuit rewrite.
|
|
||||||
/*
|
|
||||||
if(!(status & ORGAN_SPLINTED) && istype(owner,/mob/living/carbon/human))
|
|
||||||
|
|
||||||
var/mob/living/carbon/human/H = owner
|
|
||||||
|
|
||||||
if(H.wear_suit && istype(H.wear_suit,/obj/item/clothing/suit/space))
|
|
||||||
return
|
|
||||||
|
|
||||||
//var/obj/item/clothing/suit/space/suit = H.wear_suit
|
|
||||||
|
|
||||||
if(!suit.supporting_limbs)
|
|
||||||
return
|
|
||||||
|
|
||||||
owner << "You feel \the [suit] constrict about your [display_name], supporting it."
|
|
||||||
status |= ORGAN_SPLINTED
|
|
||||||
suit.supporting_limbs |= src
|
|
||||||
remove ninja code */
|
|
||||||
return
|
return
|
||||||
|
|
||||||
/datum/organ/external/proc/robotize()
|
/datum/organ/external/proc/robotize()
|
||||||
|
|||||||
@@ -602,11 +602,6 @@
|
|||||||
if(stat & (BROKEN|MAINT))
|
if(stat & (BROKEN|MAINT))
|
||||||
return
|
return
|
||||||
|
|
||||||
if(ishuman(user))
|
|
||||||
if(istype(user:gloves, /obj/item/clothing/gloves/space_ninja)&&user:gloves:candrain&&!user:gloves:draining)
|
|
||||||
call(/obj/item/clothing/gloves/space_ninja/proc/drain)("APC",src,user:wear_suit)
|
|
||||||
return
|
|
||||||
// do APC interaction
|
|
||||||
src.interact(user)
|
src.interact(user)
|
||||||
|
|
||||||
/obj/machinery/power/apc/attack_alien(mob/living/carbon/alien/humanoid/user)
|
/obj/machinery/power/apc/attack_alien(mob/living/carbon/alien/humanoid/user)
|
||||||
|
|||||||
@@ -63,10 +63,6 @@
|
|||||||
|
|
||||||
/obj/item/weapon/cell/attack_self(mob/user as mob)
|
/obj/item/weapon/cell/attack_self(mob/user as mob)
|
||||||
src.add_fingerprint(user)
|
src.add_fingerprint(user)
|
||||||
if(ishuman(user))
|
|
||||||
if(istype(user:gloves, /obj/item/clothing/gloves/space_ninja)&&user:gloves:candrain&&!user:gloves:draining)
|
|
||||||
call(/obj/item/clothing/gloves/space_ninja/proc/drain)("CELL",src,user:wear_suit)
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/item/weapon/cell/attackby(obj/item/W, mob/user)
|
/obj/item/weapon/cell/attackby(obj/item/W, mob/user)
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -121,10 +121,6 @@
|
|||||||
user << "You need more welding fuel to complete this task."
|
user << "You need more welding fuel to complete this task."
|
||||||
return
|
return
|
||||||
|
|
||||||
if(istype(I, /obj/item/weapon/melee/energy/blade))
|
|
||||||
user << "You can't place that item inside the disposal unit."
|
|
||||||
return
|
|
||||||
|
|
||||||
if(istype(I, /obj/item/weapon/storage/bag/))
|
if(istype(I, /obj/item/weapon/storage/bag/))
|
||||||
var/obj/item/weapon/storage/bag/B = I
|
var/obj/item/weapon/storage/bag/B = I
|
||||||
if(B.contents.len == 0)
|
if(B.contents.len == 0)
|
||||||
|
|||||||
@@ -590,11 +590,6 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
|||||||
if(stat & (BROKEN|NOPOWER))
|
if(stat & (BROKEN|NOPOWER))
|
||||||
return
|
return
|
||||||
|
|
||||||
if(ishuman(user))
|
|
||||||
if(istype(user:gloves, /obj/item/clothing/gloves/space_ninja)&&user:gloves:candrain&&!user:gloves:draining)
|
|
||||||
call(/obj/item/clothing/gloves/space_ninja/proc/drain)("RESEARCH",src,user:wear_suit)
|
|
||||||
return
|
|
||||||
|
|
||||||
user.set_machine(src)
|
user.set_machine(src)
|
||||||
var/dat = "<style>a:link {color: #0066CC} a:visited {color: #0066CC}</style>"
|
var/dat = "<style>a:link {color: #0066CC} a:visited {color: #0066CC}</style>"
|
||||||
files.RefreshResearch()
|
files.RefreshResearch()
|
||||||
|
|||||||
@@ -126,13 +126,6 @@
|
|||||||
return
|
return
|
||||||
if (shocked)
|
if (shocked)
|
||||||
shock(user,50)
|
shock(user,50)
|
||||||
if(ishuman(user))
|
|
||||||
if(istype(user:gloves, /obj/item/clothing/gloves/space_ninja)&&user:gloves:candrain&&!user:gloves:draining)
|
|
||||||
call(/obj/item/clothing/gloves/space_ninja/proc/drain)("RESEARCH",src,user:wear_suit)
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/r_n_d/server/centcom
|
/obj/machinery/r_n_d/server/centcom
|
||||||
name = "Centcom Central R&D Database"
|
name = "Centcom Central R&D Database"
|
||||||
|
|||||||
@@ -304,10 +304,7 @@
|
|||||||
#include "code\game\gamemodes\events\clang.dm"
|
#include "code\game\gamemodes\events\clang.dm"
|
||||||
#include "code\game\gamemodes\events\dust.dm"
|
#include "code\game\gamemodes\events\dust.dm"
|
||||||
#include "code\game\gamemodes\events\miniblob.dm"
|
#include "code\game\gamemodes\events\miniblob.dm"
|
||||||
#include "code\game\gamemodes\events\ninja_abilities.dm"
|
|
||||||
#include "code\game\gamemodes\events\ninja_equipment.dm"
|
|
||||||
#include "code\game\gamemodes\events\power_failure.dm"
|
#include "code\game\gamemodes\events\power_failure.dm"
|
||||||
#include "code\game\gamemodes\events\space_ninja.dm"
|
|
||||||
#include "code\game\gamemodes\events\spacevines.dm"
|
#include "code\game\gamemodes\events\spacevines.dm"
|
||||||
#include "code\game\gamemodes\events\wormholes.dm"
|
#include "code\game\gamemodes\events\wormholes.dm"
|
||||||
#include "code\game\gamemodes\events\holidays\Christmas.dm"
|
#include "code\game\gamemodes\events\holidays\Christmas.dm"
|
||||||
@@ -811,7 +808,7 @@
|
|||||||
#include "code\game\objects\structures\vehicles\adminbus_powers.dm"
|
#include "code\game\objects\structures\vehicles\adminbus_powers.dm"
|
||||||
#include "code\game\objects\structures\vehicles\clowncart.dm"
|
#include "code\game\objects\structures\vehicles\clowncart.dm"
|
||||||
#include "code\game\objects\structures\vehicles\gokart.dm"
|
#include "code\game\objects\structures\vehicles\gokart.dm"
|
||||||
#include "code\game\objects\structures\vehicles\vehicle.dm"
|
#include "code\game\objects\structures\vehicles\vehicle.dm"
|
||||||
#include "code\game\objects\structures\vehicles\wheelchair.dm"
|
#include "code\game\objects\structures\vehicles\wheelchair.dm"
|
||||||
#include "code\game\objects\structures\vehicles\wizmobile.dm"
|
#include "code\game\objects\structures\vehicles\wizmobile.dm"
|
||||||
#include "code\game\turfs\simulated.dm"
|
#include "code\game\turfs\simulated.dm"
|
||||||
@@ -1029,7 +1026,6 @@
|
|||||||
#include "code\modules\events\prison_break.dm"
|
#include "code\modules\events\prison_break.dm"
|
||||||
#include "code\modules\events\radiation_storm.dm"
|
#include "code\modules\events\radiation_storm.dm"
|
||||||
#include "code\modules\events\rogue_drones.dm"
|
#include "code\modules\events\rogue_drones.dm"
|
||||||
#include "code\modules\events\space_ninja.dm"
|
|
||||||
#include "code\modules\events\spacevine.dm"
|
#include "code\modules\events\spacevine.dm"
|
||||||
#include "code\modules\events\spider_infestation.dm"
|
#include "code\modules\events\spider_infestation.dm"
|
||||||
#include "code\modules\events\spontaneous_appendicitis.dm"
|
#include "code\modules\events\spontaneous_appendicitis.dm"
|
||||||
@@ -1741,4 +1737,4 @@
|
|||||||
#include "maps\RandomZLevels\challenge.dm"
|
#include "maps\RandomZLevels\challenge.dm"
|
||||||
#include "maps\RandomZLevels\stationCollision.dm"
|
#include "maps\RandomZLevels\stationCollision.dm"
|
||||||
#include "maps\RandomZLevels\wildwest.dm"
|
#include "maps\RandomZLevels\wildwest.dm"
|
||||||
// END_INCLUDE
|
// END_INCLUDE
|
||||||
|
|||||||
Reference in New Issue
Block a user