mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
TG: Not a whole lot going on in this commit, just more work on preparation for the
traitor factions update. Added some new sprites and weapons. New weapon: Delivery grenade. Can spawn an x amount of mob/object y in a constant radius. It is currently used for carp and manhack delivery grenades. !! Important !!: Certain telecomms computers were causing very nasty machine disruption through some very silly mishap involving re-programming a computer's network. Basically, it was breaking machine procs every time you messed with them. This should hopefully make telecomms a lot more stable. Fixed a bug where the reflexes nanoaug would not actually dodge the projectile if the person was clicking directly inside the target's 32x32 border. I changed around some core PDA messaging functions in preparation to PDA Chatrooms (yes Legality it's happening). However I'm going to hold off actually implementing it until Messycakes is either completed with his PDA UI overhaul or just stops working on it. Committed two patches from separate people in the forums. Chemical Cigarettes by Neek (http://nanotrasen.com/phpBB3/viewtopic.php?f=16&t=8775) and Clicking genetics blocks by Willox (http://nanotrasen.com/phpBB3/viewtopic.php?f=16&t=8857). Check their respective threads for more details. Sorry I couldn't get this earlier, guys! Revision: r3755 Author: vageyenaman
This commit is contained in:
@@ -181,17 +181,23 @@
|
||||
else
|
||||
return null
|
||||
|
||||
/proc/getblockstring(input,block,subblock,blocksize)
|
||||
/proc/getblockstring(input,block,subblock,blocksize,src,ui) // src is probably used here just for urls; ui is 1 when requesting for the unique identifier screen, 0 for structural enzymes screen
|
||||
var/string
|
||||
var/subpos = 1 // keeps track of the current sub block
|
||||
var/blockpos = 1 // keeps track of the current block
|
||||
|
||||
|
||||
for(var/i = 1, i <= length(input), i++) // loop through each letter
|
||||
|
||||
var/pushstring = copytext(input, i, i+1)
|
||||
var/pushstring
|
||||
|
||||
if(subpos == subblock && blockpos == block) // if the current block/subblock is selected, mark it
|
||||
pushstring = "</font color><b>[copytext(input, i, i+1)]</b><font color='blue'>"
|
||||
else
|
||||
if(ui) //This is for allowing block clicks to be differentiated
|
||||
pushstring = "<a href='?src=\ref[src];uimenuset=[num2text(blockpos)];uimenusubset=[num2text(subpos)]'>[copytext(input, i, i+1)]</a>"
|
||||
else
|
||||
pushstring = "<a href='?src=\ref[src];semenuset=[num2text(blockpos)];semenusubset=[num2text(subpos)]'>[copytext(input, i, i+1)]</a>"
|
||||
|
||||
string += pushstring // push the string to the return string
|
||||
|
||||
@@ -266,6 +272,8 @@
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
|
||||
if (temp2 >= 2050 + BLOCKADD)
|
||||
return 1
|
||||
else
|
||||
@@ -330,7 +338,7 @@
|
||||
/////////////////////////// DNA HELPER-PROCS
|
||||
|
||||
/////////////////////////// DNA MISC-PROCS
|
||||
/proc/updateappearance(mob/M as mob,structure)
|
||||
/proc/updateappearance(mob/M as mob , structure)
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
M.dna.check_integrity()
|
||||
var/mob/living/carbon/human/H = M
|
||||
@@ -1032,7 +1040,7 @@
|
||||
//src.temphtml = text("Unique Identifier: <font color='blue'>[getleftblocks(src.connected.occupant.dna.uni_identity,uniblock,3)][src.subblock == 1 ? "<U><B>"+getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),1,1)+"</U></B>" : getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),1,1)][src.subblock == 2 ? "<U><B>"+getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),2,1)+"</U></B>" : getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),2,1)][src.subblock == 3 ? "<U><B>"+getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),3,1)+"</U></B>" : getblock(getblock(src.connected.occupant.dna.uni_identity,src.uniblock,3),3,1)][getrightblocks(src.connected.occupant.dna.uni_identity,uniblock,3)]</FONT><BR><BR>")
|
||||
|
||||
// New way of displaying DNA blocks
|
||||
src.temphtml = text("Unique Identifier: <font color='blue'>[getblockstring(src.connected.occupant.dna.uni_identity,uniblock,subblock,3)]</FONT><br><br>")
|
||||
src.temphtml = text("Unique Identifier: <font color='blue'>[getblockstring(src.connected.occupant.dna.uni_identity,uniblock,subblock,3, src,1)]</FONT><br><br>")
|
||||
|
||||
src.temphtml += text("Selected Block: <font color='blue'><B>[]</B></FONT><BR>", src.uniblock)
|
||||
src.temphtml += text("<A href='?src=\ref[];unimenuminus=1'><-</A> Block <A href='?src=\ref[];unimenuplus=1'>-></A><BR><BR>", src, src)
|
||||
@@ -1057,6 +1065,14 @@
|
||||
if (src.subblock > 1)
|
||||
src.subblock--
|
||||
dopage(src,"unimenu")
|
||||
if (href_list["uimenuset"] && href_list["uimenusubset"]) // This chunk of code updates selected block / sub-block based on click
|
||||
var/menuset = text2num(href_list["uimenuset"])
|
||||
var/menusubset = text2num(href_list["uimenusubset"])
|
||||
if ((menuset <= 13) && (menuset >= 1))
|
||||
src.uniblock = menuset
|
||||
if ((menusubset <= 3) && (menusubset >= 1))
|
||||
src.subblock = menusubset
|
||||
dopage(src, "unimenu")
|
||||
if (href_list["unipulse"])
|
||||
if(src.connected.occupant)
|
||||
var/block
|
||||
@@ -1119,7 +1135,7 @@
|
||||
//src.temphtml = text("Structural Enzymes: <font color='blue'>[]</FONT><BR><BR>", src.connected.occupant.dna.struc_enzymes)
|
||||
|
||||
// New shit, it doesn't suck (as much)
|
||||
src.temphtml = text("Structural Enzymes: <font color='blue'>[getblockstring(src.connected.occupant.dna.struc_enzymes,strucblock,subblock,3)]</FONT><br><br>")
|
||||
src.temphtml = text("Structural Enzymes: <font color='blue'>[getblockstring(src.connected.occupant.dna.struc_enzymes,strucblock,subblock,3,src,0)]</FONT><br><br>")
|
||||
// SE of occupant, selected block, selected subblock, block size (3 subblocks)
|
||||
|
||||
src.temphtml += text("Selected Block: <font color='blue'><B>[]</B></FONT><BR>", src.strucblock)
|
||||
@@ -1153,6 +1169,14 @@
|
||||
if (src.subblock > 1)
|
||||
src.subblock--
|
||||
dopage(src,"strucmenu")
|
||||
if (href_list["semenuset"] && href_list["semenusubset"]) // This chunk of code updates selected block / sub-block based on click (se stands for strutural enzymes)
|
||||
var/menuset = text2num(href_list["semenuset"])
|
||||
var/menusubset = text2num(href_list["semenusubset"])
|
||||
if ((menuset <= 14) && (menuset >= 1))
|
||||
src.strucblock = menuset
|
||||
if ((menusubset <= 3) && (menusubset >= 1))
|
||||
src.subblock = menusubset
|
||||
dopage(src, "strucmenu")
|
||||
if (href_list["strucpulse"])
|
||||
var/block
|
||||
var/newblock
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
icon_state = "comm_monitor"
|
||||
|
||||
var/screen = 0 // the screen number:
|
||||
var/list/t_machines = list() // the machines located by the computer
|
||||
var/list/machinelist = list() // the machines located by the computer
|
||||
var/obj/machinery/telecomms/SelectedMachine
|
||||
|
||||
var/network = "NULL" // the network to probe
|
||||
@@ -83,7 +83,7 @@
|
||||
switch(href_list["operation"])
|
||||
|
||||
if("release")
|
||||
t_machines = list()
|
||||
machines = list()
|
||||
screen = 0
|
||||
|
||||
if("mainmenu")
|
||||
@@ -116,7 +116,7 @@
|
||||
else
|
||||
network = newnet
|
||||
screen = 0
|
||||
t_machines = list()
|
||||
machinelist = list()
|
||||
temp = "<font color = #336699>- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -</font color>"
|
||||
|
||||
updateUsrDialog()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:04
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -243,6 +243,7 @@
|
||||
dat += "<li><a href='byond://?src=\ref[src];choice=1'><img src=pda_notes.png> Notekeeper</a></li>"
|
||||
dat += "<li><a href='byond://?src=\ref[src];choice=2'><img src=pda_mail.png> Messenger</a></li>"
|
||||
dat += "<li><a href='byond://?src=\ref[src];choice=41'><img src=pda_notes.png> View Crew Manifest</a></li>"
|
||||
//dat += "<li><a href='byond://?src=\red[src];choice=chatroom'><img src=pda_chatroom.png> Nanotrasen Relay Chat</a></li>"
|
||||
|
||||
if (cartridge)
|
||||
if (cartridge.access_clown)
|
||||
@@ -382,6 +383,17 @@
|
||||
dat += "OTHER: [round(unknown_level)]%<br>"
|
||||
dat += "Temperature: [round(environment.temperature-T0C)]°C<br>"
|
||||
dat += "<br>"
|
||||
|
||||
if (5)
|
||||
dat += "<h4><img src=pda_chatroom.png> Nanotrasen Relay Chat</h4>"
|
||||
|
||||
dat += "<h4><img src=pda_menu.png> Detected Channels</h4>: <li>"
|
||||
for(var/datum/chatroom/C in chatrooms)
|
||||
dat += "<a href='byond://?src=\ref[src];pdachannel=[C.name]'>#[html_encode(lowertext(C.name))]"
|
||||
if(C.password != "")
|
||||
dat += " <img src=pda_locked.png>"
|
||||
dat += "</li>"
|
||||
|
||||
if (41) //crew manifest
|
||||
|
||||
dat += "<h4><img src=pda_notes.png> Crew Manifest</h4>"
|
||||
@@ -454,12 +466,14 @@
|
||||
mode = 2
|
||||
if("21")//Read messeges
|
||||
mode = 21
|
||||
if("41")//Read messeges
|
||||
if("41")//Check Manifest
|
||||
mode = 41
|
||||
if("3")//Atmos scan
|
||||
mode = 3
|
||||
if("4")//Redirects to hub
|
||||
mode = 0
|
||||
if("chatroom") // chatroom hub
|
||||
mode = 5
|
||||
|
||||
|
||||
//MAIN FUNCTIONS===================================
|
||||
@@ -555,70 +569,84 @@
|
||||
return
|
||||
|
||||
last_text = world.time
|
||||
// check if telecomms I/O route 1459 is stable
|
||||
//var/telecomms_intact = telecomms_process(P.owner, owner, t)
|
||||
var/obj/machinery/message_server/useMS = null
|
||||
if(message_servers)
|
||||
for (var/obj/machinery/message_server/MS in message_servers)
|
||||
//PDAs are now dependant on the Message Server.
|
||||
if(MS.active)
|
||||
useMS = MS
|
||||
break
|
||||
if(useMS) // only send the message if it's stable
|
||||
useMS.send_pda_message("[P.owner]","[owner]","[t]")
|
||||
|
||||
tnote += "<i><b>→ To [P.owner]:</b></i><br>[t]<br>"
|
||||
P.tnote += "<i><b>← From <a href='byond://?src=\ref[P];choice=Message;target=\ref[src]'>[owner]</a> ([ownjob]):</b></i><br>[t]<br>"
|
||||
|
||||
var/AnsweringMS = 0
|
||||
for (var/obj/machinery/message_server/MS in world)
|
||||
MS.send_pda_message("[P.owner]","[owner]","[t]")
|
||||
if(MS.active)
|
||||
AnsweringMS++
|
||||
// Give every ghost the ability to see all messages
|
||||
for (var/mob/dead/observer/G in world)
|
||||
G.show_message("<i>PDA message from <b>[src.owner]</b> to <b>[P:owner]</b>: [t]</i>")
|
||||
|
||||
if(!AnsweringMS)
|
||||
return
|
||||
if (prob(15)) //Give the AI a chance of intercepting the message
|
||||
var/who = src.owner
|
||||
if(prob(50))
|
||||
who = P:owner
|
||||
for(var/mob/living/silicon/ai/ai in world)
|
||||
ai.show_message("<i>Intercepted message from <b>[who]</b>: [t]</i>")
|
||||
|
||||
tnote += "<i><b>→ To [P.owner]:</b></i><br>[t]<br>"
|
||||
P.tnote += "<i><b>← From <a href='byond://?src=\ref[P];choice=Message;target=\ref[src]'>[owner]</a> ([ownjob]):</b></i><br>[t]<br>"
|
||||
|
||||
// Give every ghost the ability to see all messages
|
||||
for (var/mob/dead/observer/G in world)
|
||||
G.show_message("<i>PDA message from <b>[src.owner]</b> to <b>[P:owner]</b>: [t]</i>")
|
||||
|
||||
if (prob(15)) //Give the AI a chance of intercepting the message
|
||||
var/who = src.owner
|
||||
if(prob(50))
|
||||
who = P:owner
|
||||
for(var/mob/living/silicon/ai/ai in world)
|
||||
ai.show_message("<i>Intercepted message from <b>[who]</b>: [t]</i>")
|
||||
|
||||
if (!P.silent)
|
||||
playsound(P.loc, 'twobeep.ogg', 50, 1)
|
||||
for (var/mob/O in hearers(3, P.loc))
|
||||
O.show_message(text("\icon[P] *[P.ttone]*"))
|
||||
if( P.loc && ishuman(P.loc) )
|
||||
var/mob/living/carbon/human/H = P.loc
|
||||
H << "\icon[P] <b>Message from [src.owner] ([ownjob]), </b>\"[t]\" (<a href='byond://?src=\ref[P];choice=Message;skiprefresh=1;target=\ref[src]'>Reply</a>)"
|
||||
|
||||
P.overlays = null
|
||||
P.overlays += image('pda.dmi', "pda-r")
|
||||
if (!P.silent)
|
||||
playsound(P.loc, 'twobeep.ogg', 50, 1)
|
||||
for (var/mob/O in hearers(3, P.loc))
|
||||
O.show_message(text("\icon[P] *[P.ttone]*"))
|
||||
if( P.loc && ishuman(P.loc) )
|
||||
var/mob/living/carbon/human/H = P.loc
|
||||
H << "\icon[P] <b>Message from [src.owner] ([ownjob]), </b>\"[t]\" (<a href='byond://?src=\ref[P];choice=Message;skiprefresh=1;target=\ref[src]'>Reply</a>)"
|
||||
log_pda("[usr] (PDA: [src.name]) sent \"[t]\" to [P.name]")
|
||||
P.overlays = null
|
||||
P.overlays += image('pda.dmi', "pda-r")
|
||||
else
|
||||
U << "ERROR: Server isn't responding."
|
||||
|
||||
// pAI Message
|
||||
else
|
||||
|
||||
var/AnsweringMS = 0
|
||||
for (var/obj/machinery/message_server/MS in world)
|
||||
MS.send_pda_message("[P]","[src]","[t]")
|
||||
if(MS.active)
|
||||
AnsweringMS++
|
||||
//var/telecomms_intact = telecomms_process(P.owner, owner, t)
|
||||
var/obj/machinery/message_server/useMS = null
|
||||
if(message_servers)
|
||||
for (var/obj/machinery/message_server/MS in message_servers)
|
||||
//PDAs are now dependant on the Message Server.
|
||||
if(MS.active)
|
||||
useMS = MS
|
||||
break
|
||||
if(useMS) // only send the message if it's stable
|
||||
useMS.send_pda_message("[P.owner]","[owner]","[t]")
|
||||
tnote += "<i><b>→ To [P]:</b></i><br>[t]<br>"
|
||||
P.tnote += "<i><b>← From <a href='byond://?src=\ref[P];soft=pdamessage;target=\ref[src]'>[src]</a>:</b></i><br>[t]<br>"
|
||||
|
||||
if(!AnsweringMS)
|
||||
return
|
||||
// Give every ghost the ability to see all messages
|
||||
for (var/mob/dead/observer/G in world)
|
||||
G.show_message("<i>PDA message from <b>[src.owner]</b> to <b>[P:owner]</b>: [t]</i>")
|
||||
|
||||
if (prob(15)) //Give the AI a chance of intercepting the message
|
||||
var/who = src
|
||||
if(prob(50))
|
||||
who = P
|
||||
for (var/mob/living/silicon/ai/ai in world)
|
||||
ai.show_message("<i>Intercepted message from <b>[who]</b>: [t]</i>")
|
||||
|
||||
tnote += "<i><b>→ To [P]:</b></i><br>[t]<br>"
|
||||
P.tnote += "<i><b>← From <a href='byond://?src=\ref[P];soft=pdamessage;target=\ref[src]'>[src]</a>:</b></i><br>[t]<br>"
|
||||
if (!P.silent)
|
||||
playsound(P.loc, 'twobeep.ogg', 50, 1)
|
||||
for (var/mob/O in hearers(3, P.loc))
|
||||
O.show_message(text("\icon[P] *[P.ttone]*"))
|
||||
if( P.loc && ishuman(P.loc) )
|
||||
var/mob/living/carbon/human/H = P.loc
|
||||
H << "\icon[P] <b>Message from [src.owner] ([ownjob]), </b>\"[t]\" (<a href='byond://?src=\ref[P];choice=Message;skiprefresh=1;target=\ref[src]'>Reply</a>)"
|
||||
log_pda("[usr] (PDA: [src.name]) sent \"[t]\" to [P.name]")
|
||||
else
|
||||
U << "ERROR: Server isn't responding."
|
||||
|
||||
|
||||
if (prob(15)) //Give the AI a chance of intercepting the message
|
||||
var/who = src
|
||||
if(prob(50))
|
||||
who = P
|
||||
for (var/mob/living/silicon/ai/ai in world)
|
||||
ai.show_message("<i>Intercepted message from <b>[who]</b>: [t]</i>")
|
||||
|
||||
playsound(P.loc, 'twobeep.ogg', 50, 1)
|
||||
|
||||
log_pda("[usr] (PDA: [src.name]) sent \"[t]\" to [P.name]")
|
||||
|
||||
|
||||
if("Send Honk")//Honk virus
|
||||
if(istype(cartridge, /obj/item/weapon/cartridge/clown))//Cartridge checks are kind of unnecessary since everything is done through switch.
|
||||
@@ -756,6 +784,37 @@
|
||||
id.loc = get_turf(src)
|
||||
id = null
|
||||
|
||||
/obj/item/device/pda/proc/telecomms_process(var/receipent, var/originator, var/data)
|
||||
var/telecomms_intact = 0
|
||||
/* Make sure telecomms is intact */
|
||||
for (var/obj/machinery/telecomms/receiver/R in world)
|
||||
|
||||
if((1459 in R.freq_listening) && R.on)
|
||||
|
||||
for (var/obj/machinery/telecomms/bus/B in R.links)
|
||||
|
||||
if((1459 in B.freq_listening) && B.on)
|
||||
|
||||
for(var/obj/machinery/telecomms/server/S in B.links)
|
||||
|
||||
if((1459 in S.freq_listening) && S.on)
|
||||
// Add a log
|
||||
S.add_entry("[originator] sent to [receipent]: \"[data]\"", "PDA log")
|
||||
|
||||
for(var/obj/machinery/telecomms/broadcaster/C in S.links)
|
||||
|
||||
if(((1459 in C.freq_listening || C.freq_listening.len == 0)) && C.on)
|
||||
|
||||
telecomms_intact = 1
|
||||
break
|
||||
|
||||
break
|
||||
break
|
||||
break
|
||||
|
||||
return telecomms_intact
|
||||
|
||||
|
||||
/obj/item/device/pda/verb/verb_remove_id()
|
||||
set category = "Object"
|
||||
set name = "Remove id"
|
||||
|
||||
@@ -122,9 +122,17 @@ ZIPPO
|
||||
var/icon_butt = "cigbutt"
|
||||
var/lastHolder = null
|
||||
var/smoketime = 300
|
||||
var/chem_volume = 15
|
||||
var/butt_count = 5 //count of butt sprite variations
|
||||
|
||||
/obj/item/clothing/mask/cigarette/New()
|
||||
..()
|
||||
flags |= NOREACT // so it doesn't react until you light it
|
||||
create_reagents(chem_volume) // making the cigarrete a chemical holder with a maximum volume of 15
|
||||
|
||||
/obj/item/clothing/mask/cigarette/Del()
|
||||
..()
|
||||
del(reagents)
|
||||
|
||||
/obj/item/clothing/mask/cigarette/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
@@ -155,10 +163,37 @@ ZIPPO
|
||||
return
|
||||
|
||||
|
||||
/obj/item/clothing/mask/cigarette/afterattack(obj/item/weapon/reagent_containers/glass/glass, mob/user as mob)
|
||||
..()
|
||||
if(istype(glass)) // you can dip cigarettes into beakers
|
||||
var/transfered = glass.reagents.trans_to(src, chem_volume)
|
||||
if(transfered) // if reagents were transfered, show the message
|
||||
user << "\blue You dip \the [src] into \the [glass]."
|
||||
else // if not, either the beaker was empty, or the cigarette was full
|
||||
if(!glass.reagents.total_volume)
|
||||
user << "\red [glass] is empty."
|
||||
else
|
||||
user << "\red [src] is full."
|
||||
|
||||
|
||||
/obj/item/clothing/mask/cigarette/proc/light(var/flavor_text = "[usr] lights the [name].")
|
||||
if(!src.lit)
|
||||
src.lit = 1
|
||||
src.damtype = "fire"
|
||||
if(reagents.get_reagent_amount("plasma")) // the plasma explodes when exposed to fire
|
||||
var/datum/effect/effect/system/reagents_explosion/e = new()
|
||||
e.set_up(round (src.reagents.get_reagent_amount("plasma")/2.5, 1), get_turf(src), 0, 0)
|
||||
e.start()
|
||||
del(src)
|
||||
return
|
||||
if(reagents.get_reagent_amount("fuel")) // the fuel explodes, too, but much less violently
|
||||
var/datum/effect/effect/system/reagents_explosion/e = new()
|
||||
e.set_up(round (src.reagents.get_reagent_amount("fuel")/5, 1), get_turf(src), 0, 0)
|
||||
e.start()
|
||||
del(src)
|
||||
return
|
||||
src.flags &= ~NOREACT // allowing reagents to react after being lit
|
||||
src.reagents.handle_reactions()
|
||||
src.icon_state = icon_on
|
||||
src.item_state = icon_on
|
||||
for(var/mob/O in viewers(usr, null))
|
||||
@@ -181,6 +216,14 @@ ZIPPO
|
||||
return
|
||||
if(location)
|
||||
location.hotspot_expose(700, 5)
|
||||
if(reagents && reagents.total_volume) // check if it has any reagents at all
|
||||
if( iscarbon(src.loc) && (src == loc:wear_mask) ) // if it's in the human/monkey mouth, transfer reagents to the mob
|
||||
var/mob/living/carbon/C = loc
|
||||
if(prob(15)) // so it's not an instarape in case of acid
|
||||
reagents.reaction(C, INGEST)
|
||||
reagents.trans_to(C, REAGENTS_METABOLISM)
|
||||
else // else just remove some of the reagents
|
||||
reagents.remove_any(REAGENTS_METABOLISM)
|
||||
return
|
||||
|
||||
|
||||
@@ -214,6 +257,7 @@ ZIPPO
|
||||
throw_speed = 0.5
|
||||
item_state = "cigaroff"
|
||||
smoketime = 1500
|
||||
chem_volume = 20
|
||||
butt_count = 0
|
||||
|
||||
/obj/item/clothing/mask/cigarette/cigar/cohiba
|
||||
@@ -230,6 +274,7 @@ ZIPPO
|
||||
icon_on = "cigar2on"
|
||||
icon_off = "cigar2off"
|
||||
smoketime = 7200
|
||||
chem_volume = 30
|
||||
|
||||
/obj/item/weapon/cigbutt
|
||||
name = "cigarette butt"
|
||||
@@ -360,6 +405,14 @@ ZIPPO
|
||||
slot_flags = SLOT_BELT
|
||||
var/cigcount = 6
|
||||
|
||||
New()
|
||||
..()
|
||||
flags |= NOREACT
|
||||
create_reagents(15)//so people can inject cigarettes without opening a packet
|
||||
|
||||
Del()
|
||||
..()
|
||||
del(reagents)
|
||||
|
||||
update_icon()
|
||||
icon_state = "[initial(icon_state)][cigcount]"
|
||||
@@ -375,6 +428,7 @@ ZIPPO
|
||||
else
|
||||
cigcount--
|
||||
var/obj/item/clothing/mask/cigarette/W = new /obj/item/clothing/mask/cigarette(user)
|
||||
reagents.trans_to(W, reagents.total_volume)
|
||||
user.put_in_hand(W)
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
CONTAINS:
|
||||
EMP GRENADE
|
||||
FLASHBANG
|
||||
CRITTER GRENADE
|
||||
|
||||
*/
|
||||
|
||||
@@ -231,6 +232,7 @@ FLASHBANG
|
||||
else
|
||||
if (M.ear_damage >= 5)
|
||||
M << "\red Your ears start to ring!"
|
||||
M.update_icons()
|
||||
|
||||
prime() // Prime now just handles the two loops that query for people in lockers and people who can see it.
|
||||
var/turf/T = get_turf(src)
|
||||
@@ -289,7 +291,7 @@ FLASHBANG
|
||||
|
||||
/obj/item/weapon/flashbang/clusterbang
|
||||
desc = "Use of this weapon may constiute a war crime in your area, consult your local captain."
|
||||
name = "Clusterbang"
|
||||
name = "clusterbang"
|
||||
icon = 'grenade.dmi'
|
||||
icon_state = "clusterbang"
|
||||
var/child = 0
|
||||
@@ -367,6 +369,159 @@ FLASHBANG
|
||||
|
||||
|
||||
|
||||
/****************************Critter Grenades***********************************************/
|
||||
|
||||
|
||||
/obj/item/weapon/spawnergrenade
|
||||
desc = "It is set to detonate in 3 seconds. It will unleash unleash an unspecified anomaly into the vicinity."
|
||||
name = "delivery grenade"
|
||||
icon = 'grenade.dmi'
|
||||
icon_state = "delivery"
|
||||
w_class = 2.0
|
||||
item_state = "flashbang"
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
origin_tech = "materials=3;magnets=4"
|
||||
var/active = 0
|
||||
var/det_time = 30
|
||||
var/banglet = 0
|
||||
var/spawner_type = null // must be an object path
|
||||
var/deliveryamt = 1 // amount of type to deliver
|
||||
|
||||
|
||||
proc/prime()
|
||||
return
|
||||
|
||||
proc/clown_check(var/mob/living/user)
|
||||
return
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (isscrewdriver(W))
|
||||
switch(src.det_time)
|
||||
if ("1")
|
||||
src.det_time = 30
|
||||
user.show_message("\blue You set the delivery grenade for 3 second detonation time.")
|
||||
src.desc = "It is set to detonate in 3 seconds."
|
||||
if ("30")
|
||||
src.det_time = 100
|
||||
user.show_message("\blue You set the delivery grenade for 10 second detonation time.")
|
||||
src.desc = "It is set to detonate in 10 seconds."
|
||||
if ("100")
|
||||
src.det_time = 1
|
||||
user.show_message("\blue You set the delivery grenade for instant detonation.")
|
||||
src.desc = "It is set to detonate instantly."
|
||||
src.add_fingerprint(user)
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
afterattack(atom/target as mob|obj|turf|area, mob/user as mob)
|
||||
if (istype(target, /obj/item/weapon/storage)) return ..() // Trying to put it in a full container
|
||||
if (istype(target, /obj/item/weapon/gun/grenadelauncher)) return ..()
|
||||
if((user.equipped() == src)&&(!active)&&(clown_check(user)))
|
||||
user << "\red You prime the delivery grenade! [det_time/10] seconds!"
|
||||
src.active = 1
|
||||
src.icon_state = "delivery1"
|
||||
playsound(src.loc, 'armbomb.ogg', 75, 1, -3)
|
||||
spawn(src.det_time)
|
||||
prime()
|
||||
return
|
||||
user.dir = get_dir(user, target)
|
||||
user.drop_item()
|
||||
var/t = (isturf(target) ? target : target.loc)
|
||||
walk_towards(src, t, 3)
|
||||
return
|
||||
|
||||
|
||||
attack_paw(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
|
||||
attack_hand()
|
||||
walk(src, null, null)
|
||||
..()
|
||||
return
|
||||
|
||||
prime() // Prime now just handles the two loops that query for people in lockers and people who can see it.
|
||||
|
||||
if(spawner_type && deliveryamt)
|
||||
// Make a quick flash
|
||||
var/turf/T = get_turf(src)
|
||||
playsound(T, 'phasein.ogg', 100, 1)
|
||||
for(var/mob/living/carbon/human/M in viewers(T, null))
|
||||
if(M:eyecheck() <= 0)
|
||||
flick("e_flash", M.flash) // flash dose faggots
|
||||
|
||||
for(var/i=1, i<=deliveryamt, i++)
|
||||
var/atom/movable/x = new spawner_type
|
||||
x.loc = T
|
||||
if(prob(50))
|
||||
for(var/j = 1, j <= rand(1, 3), j++)
|
||||
step(x, pick(NORTH,SOUTH,EAST,WEST))
|
||||
|
||||
// Spawn some hostile syndicate critters
|
||||
if(istype(x, /obj/effect/critter))
|
||||
var/obj/effect/critter/C = x
|
||||
|
||||
C.atkcarbon = 1
|
||||
C.atksilicon = 1
|
||||
C.atkmech = 0
|
||||
C.atksynd = 0
|
||||
C.aggressive = 1
|
||||
|
||||
del(src)
|
||||
return
|
||||
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
if(!active)
|
||||
if(clown_check(user))
|
||||
user << "\red You prime the delivery grenade! [det_time/10] seconds!"
|
||||
src.active = 1
|
||||
src.icon_state = "delivery1"
|
||||
add_fingerprint(user)
|
||||
spawn( src.det_time )
|
||||
prime()
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
attack_hand()
|
||||
walk(src, null, null)
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
clown_check(var/mob/living/user)
|
||||
if ((CLUMSY in user.mutations) && prob(50))
|
||||
user << "\red Huh? How does this thing work?!"
|
||||
src.active = 1
|
||||
src.icon_state = "delivery1"
|
||||
playsound(src.loc, 'armbomb.ogg', 75, 1, -3)
|
||||
spawn( 5 )
|
||||
prime()
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/spawnergrenade/manhacks
|
||||
name = "manhack delivery grenade"
|
||||
spawner_type = /obj/effect/critter/manhack
|
||||
deliveryamt = 5
|
||||
origin_tech = "materials=3;magnets=4;syndicate=4"
|
||||
|
||||
/obj/item/weapon/spawnergrenade/spesscarp
|
||||
name = "carp delivery grenade"
|
||||
spawner_type = /obj/effect/critter/spesscarp
|
||||
deliveryamt = 5
|
||||
origin_tech = "materials=3;magnets=4;syndicate=4"
|
||||
|
||||
/obj/item/weapon/spawnergrenade/elitespesscarp
|
||||
name = "elite carp delivery grenade"
|
||||
spawner_type = /obj/effect/critter/spesscarp/elite
|
||||
deliveryamt = 2
|
||||
origin_tech = "materials=3;magnets=4;syndicate=4"
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
|
||||
|
||||
/obj/item/weapon/implant
|
||||
name = "implant"
|
||||
desc = "An implant. Not usually seen outside a body."
|
||||
@@ -240,6 +238,44 @@ the implant may become unstable and either pre-maturely inject the subject or si
|
||||
H << "\blue You feel a surge of loyalty towards NanoTrasen."
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/implant/adrenalin
|
||||
name = "adrenalin"
|
||||
desc = "Removes all stuns and knockdowns."
|
||||
var/uses
|
||||
|
||||
get_data()
|
||||
var/dat = {"
|
||||
<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> Cybersun Industries Adrenalin Implant<BR>
|
||||
<b>Life:</b> Five days.<BR>
|
||||
<b>Important Notes:</b> <font color='red'>Illegal</font><BR>
|
||||
<HR>
|
||||
<b>Implant Details:</b> Subjects injected with implant can activate a massive injection of adrenalin.<BR>
|
||||
<b>Function:</b> Contains nanobots to stimulate body to mass-produce Adrenalin.<BR>
|
||||
<b>Special Features:</b> Will prevent and cure most forms of brainwashing.<BR>
|
||||
<b>Integrity:</b> Implant can only be used three times before the nanobots are depleted."}
|
||||
return dat
|
||||
|
||||
|
||||
trigger(emote, mob/source as mob)
|
||||
if (src.uses < 1) return 0
|
||||
if (emote == "pale")
|
||||
src.uses--
|
||||
source << "\blue You feel a sudden surge of energy!"
|
||||
source.SetStunned(0)
|
||||
source.SetWeakened(0)
|
||||
source.SetParalysis(0)
|
||||
|
||||
return
|
||||
|
||||
|
||||
implanted(mob/source as mob)
|
||||
source.mind.store_memory("A implant can be activated by using the pale emote, <B>say *pale</B> to attempt to activate.", 0, 0)
|
||||
source << "The implanted freedom implant can be activated by using the pale emote, <B>say *pale</B> to attempt to activate."
|
||||
return
|
||||
|
||||
|
||||
//BS12 Explosive
|
||||
/obj/item/weapon/implant/explosive
|
||||
name = "explosive implant"
|
||||
|
||||
@@ -74,6 +74,15 @@
|
||||
update()
|
||||
return
|
||||
|
||||
/obj/item/weapon/implanter/adrenalin
|
||||
name = "implanter-adrenalin"
|
||||
|
||||
/obj/item/weapon/implanter/adrenalin/New()
|
||||
src.imp = new /obj/item/weapon/implant/adrenalin(src)
|
||||
..()
|
||||
update()
|
||||
return
|
||||
|
||||
/obj/item/weapon/implanter/compressed
|
||||
name = "implanter (C)"
|
||||
icon_state = "cimplanter0"
|
||||
|
||||
@@ -883,7 +883,7 @@
|
||||
user << "\red [target] is full."
|
||||
return
|
||||
|
||||
if(!target.is_open_container() && !ismob(target) && !istype(target,/obj/item/weapon/reagent_containers/food)) //You can inject humans and food but you cant remove the shit.
|
||||
if(!target.is_open_container() && !ismob(target) && !istype(target,/obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/clothing/mask/cigarette)) //You can inject humans and food but you cant remove the shit.
|
||||
user << "\red You cannot directly fill this object."
|
||||
return
|
||||
|
||||
@@ -1079,7 +1079,7 @@
|
||||
if(istype(target, /obj/item/weapon/implantcase/chem))
|
||||
return
|
||||
|
||||
if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/metroid_core))
|
||||
if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/metroid_core) && !istype(target, /obj/item/clothing/mask/cigarette) && !istype(target, /obj/item/weapon/cigpacket))
|
||||
user << "\red You cannot directly fill this object."
|
||||
return
|
||||
if(target.reagents.total_volume >= target.reagents.maximum_volume)
|
||||
|
||||
@@ -10,12 +10,6 @@ emp_act
|
||||
|
||||
/mob/living/carbon/human/bullet_act(var/obj/item/projectile/P, var/def_zone)
|
||||
|
||||
if(REFLEXES in augmentations)
|
||||
if(prob(50))
|
||||
var/message = pick("[src] skillfully dodges the [P.name]!", "[src] ducks, dodging the [P.name]!", "[src] effortlessly jumps out of the way of the [P.name]!", "[src] dodges the [P.name] in one graceful movement!", "[src] leans back, dodging the [P.name] narrowly!")
|
||||
visible_message("\red <B>[message]</B>")
|
||||
return -1
|
||||
|
||||
if(wear_suit && istype(wear_suit, /obj/item/clothing/suit/armor/laserproof))
|
||||
if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam))
|
||||
var/reflectchance = 40 - round(P.damage/3)
|
||||
|
||||
@@ -516,6 +516,7 @@
|
||||
M.Friends = Friends
|
||||
M.tame = tame
|
||||
M.rabid = rabid
|
||||
M.Discipline = Discipline
|
||||
if(i != 1) step_away(M,src)
|
||||
|
||||
del(src)
|
||||
|
||||
@@ -78,7 +78,14 @@ obj/item/weapon/gun/energy/laser/retro
|
||||
projectile_type = "/obj/item/projectile/beam/heavylaser"
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/xray
|
||||
name = "xray laser gun"
|
||||
desc = "A high-power laser gun capable of expelling concentrated xray blasts."
|
||||
icon_state = "xray"
|
||||
fire_sound = 'laser3.ogg'
|
||||
origin_tech = "combat=5;materials=3;magnets=2;syndicate=2"
|
||||
projectile_type = "/obj/item/projectile/beam/xray"
|
||||
charge_cost = 50
|
||||
|
||||
|
||||
////////Laser Tag////////////////////
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
|
||||
|
||||
/*
|
||||
#define BRUTE "brute"
|
||||
#define BURN "burn"
|
||||
@@ -30,6 +28,7 @@
|
||||
var/current = null
|
||||
var/turf/original = null // the original turf clicked
|
||||
var/turf/starting = null // the projectile's starting turf
|
||||
var/list/permutated = list() // we've passed through these atoms, don't try to hit them again
|
||||
|
||||
var/p_x = 16
|
||||
var/p_y = 16 // the pixel location of the tile that the player clicked. Default is the center
|
||||
@@ -77,6 +76,8 @@
|
||||
|
||||
if(bumped) return
|
||||
|
||||
var/forcedodge = 0 // force the projectile to pass
|
||||
|
||||
bumped = 1
|
||||
if(firer && istype(A, /mob))
|
||||
var/mob/M = A
|
||||
@@ -84,10 +85,18 @@
|
||||
loc = A.loc
|
||||
return // nope.avi
|
||||
|
||||
if(!silenced)
|
||||
// check for dodge (i can't place in bullet_act because then things get wonky)
|
||||
if((REFLEXES in M.augmentations) && (!M.stat && !M.lying))
|
||||
if(prob(85))
|
||||
var/message = pick("[M] skillfully dodges the [name]!", "[M] ducks, dodging the [name]!", "[M] effortlessly jumps out of the way of the [name]!", "[M] dodges the [name] in one graceful movement!", "[M] leans back, dodging the [name] narrowly!", "[M] sidesteps, avoiding the [name] narrowly.", "[M] barely weaves out of the way of the [name].")
|
||||
M.visible_message("\red <B>[message]</B>")
|
||||
forcedodge = 1
|
||||
|
||||
if(!silenced && !forcedodge)
|
||||
visible_message("\red [A.name] is hit by the [src.name] in the [def_zone]!")//X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter
|
||||
else
|
||||
M << "\red You've been shot in the [def_zone] by the [src.name]!"
|
||||
if(!forcedodge)
|
||||
M << "\red You've been shot in the [def_zone] by the [src.name]!"
|
||||
if(istype(firer, /mob))
|
||||
M.attack_log += "\[[time_stamp()]\] <b>[firer]/[firer.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>[src]</b>"
|
||||
firer.attack_log += "\[[time_stamp()]\] <b>[firer]/[firer.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>[src]</b>"
|
||||
@@ -106,12 +115,13 @@
|
||||
spawn(0)
|
||||
if(A)
|
||||
var/permutation = A.bullet_act(src, def_zone) // searches for return value
|
||||
if(permutation == -1) // the bullet passes through a dense object!
|
||||
if(permutation == -1 || forcedodge) // the bullet passes through a dense object!
|
||||
bumped = 0 // reset bumped variable!
|
||||
if(istype(A, /turf))
|
||||
loc = A
|
||||
else
|
||||
loc = A.loc
|
||||
permutated.Add(A)
|
||||
return
|
||||
|
||||
if(istype(A,/turf))
|
||||
@@ -147,8 +157,9 @@
|
||||
if(!bumped)
|
||||
if(loc == original)
|
||||
for(var/mob/living/M in original)
|
||||
Bump(M)
|
||||
sleep(1)
|
||||
if(!(M in permutated))
|
||||
Bump(M)
|
||||
sleep(1)
|
||||
return
|
||||
|
||||
/obj/item/projectile/test //Used to see if you can hit them.
|
||||
|
||||
@@ -63,6 +63,10 @@
|
||||
icon_state = "heavylaser"
|
||||
damage = 60
|
||||
|
||||
/obj/item/projectile/beam/xray
|
||||
name = "xray beam"
|
||||
icon_state = "xray"
|
||||
damage = 30
|
||||
|
||||
/obj/item/projectile/beam/pulse
|
||||
name = "pulse"
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
|
||||
|
||||
|
||||
/* --- Traffic Control Scripting Language --- */
|
||||
// Nanotrasen TCS Language - Made by Doohl
|
||||
@@ -16,14 +18,13 @@
|
||||
/* -- Compile a raw block of text -- */
|
||||
|
||||
proc/Compile(code as message)
|
||||
var
|
||||
n_scriptOptions/nS_Options/options = new()
|
||||
n_Scanner/nS_Scanner/scanner = new(code, options)
|
||||
list/tokens = scanner.Scan()
|
||||
n_Parser/nS_Parser/parser = new(tokens, options)
|
||||
node/BlockDefinition/GlobalBlock/program = parser.Parse()
|
||||
var/n_scriptOptions/nS_Options/options = new()
|
||||
var/n_Scanner/nS_Scanner/scanner = new(code, options)
|
||||
var/list/tokens = scanner.Scan()
|
||||
var/n_Parser/nS_Parser/parser = new(tokens, options)
|
||||
var/node/BlockDefinition/GlobalBlock/program = parser.Parse()
|
||||
|
||||
list/returnerrors = list()
|
||||
var/list/returnerrors = list()
|
||||
|
||||
returnerrors += scanner.errors
|
||||
returnerrors += parser.errors
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 751 B After Width: | Height: | Size: 1.3 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 23 KiB |
BIN
icons/pda_icons/pda_chatroom.png
Normal file
BIN
icons/pda_icons/pda_chatroom.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 223 B |
BIN
icons/pda_icons/pda_locked.PNG
Normal file
BIN
icons/pda_icons/pda_locked.PNG
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 215 B |
Reference in New Issue
Block a user