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:
Erthilo
2012-06-23 14:59:54 +01:00
parent c35bec8fc5
commit dfb6676ebb
19 changed files with 443 additions and 88 deletions

View File

@@ -181,17 +181,23 @@
else else
return null 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/string
var/subpos = 1 // keeps track of the current sub block var/subpos = 1 // keeps track of the current sub block
var/blockpos = 1 // keeps track of the current block var/blockpos = 1 // keeps track of the current block
for(var/i = 1, i <= length(input), i++) // loop through each letter 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 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'>" 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 string += pushstring // push the string to the return string
@@ -266,6 +272,8 @@
return 1 return 1
else else
return 0 return 0
if (temp2 >= 2050 + BLOCKADD) if (temp2 >= 2050 + BLOCKADD)
return 1 return 1
else else
@@ -330,7 +338,7 @@
/////////////////////////// DNA HELPER-PROCS /////////////////////////// DNA HELPER-PROCS
/////////////////////////// DNA MISC-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)) if(istype(M, /mob/living/carbon/human))
M.dna.check_integrity() M.dna.check_integrity()
var/mob/living/carbon/human/H = M 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>") //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 // 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("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) 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) if (src.subblock > 1)
src.subblock-- src.subblock--
dopage(src,"unimenu") 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 (href_list["unipulse"])
if(src.connected.occupant) if(src.connected.occupant)
var/block var/block
@@ -1119,7 +1135,7 @@
//src.temphtml = text("Structural Enzymes: <font color='blue'>[]</FONT><BR><BR>", src.connected.occupant.dna.struc_enzymes) //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) // 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) // 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) src.temphtml += text("Selected Block: <font color='blue'><B>[]</B></FONT><BR>", src.strucblock)
@@ -1153,6 +1169,14 @@
if (src.subblock > 1) if (src.subblock > 1)
src.subblock-- src.subblock--
dopage(src,"strucmenu") 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"]) if (href_list["strucpulse"])
var/block var/block
var/newblock var/newblock

View File

@@ -12,7 +12,7 @@
icon_state = "comm_monitor" icon_state = "comm_monitor"
var/screen = 0 // the screen number: 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/obj/machinery/telecomms/SelectedMachine
var/network = "NULL" // the network to probe var/network = "NULL" // the network to probe
@@ -83,7 +83,7 @@
switch(href_list["operation"]) switch(href_list["operation"])
if("release") if("release")
t_machines = list() machines = list()
screen = 0 screen = 0
if("mainmenu") if("mainmenu")
@@ -116,7 +116,7 @@
else else
network = newnet network = newnet
screen = 0 screen = 0
t_machines = list() machinelist = list()
temp = "<font color = #336699>- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -</font color>" temp = "<font color = #336699>- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -</font color>"
updateUsrDialog() updateUsrDialog()

View File

@@ -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

View File

@@ -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=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=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=\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)
if (cartridge.access_clown) if (cartridge.access_clown)
@@ -382,6 +383,17 @@
dat += "OTHER: [round(unknown_level)]%<br>" dat += "OTHER: [round(unknown_level)]%<br>"
dat += "Temperature: [round(environment.temperature-T0C)]&deg;C<br>" dat += "Temperature: [round(environment.temperature-T0C)]&deg;C<br>"
dat += "<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 if (41) //crew manifest
dat += "<h4><img src=pda_notes.png> Crew Manifest</h4>" dat += "<h4><img src=pda_notes.png> Crew Manifest</h4>"
@@ -454,12 +466,14 @@
mode = 2 mode = 2
if("21")//Read messeges if("21")//Read messeges
mode = 21 mode = 21
if("41")//Read messeges if("41")//Check Manifest
mode = 41 mode = 41
if("3")//Atmos scan if("3")//Atmos scan
mode = 3 mode = 3
if("4")//Redirects to hub if("4")//Redirects to hub
mode = 0 mode = 0
if("chatroom") // chatroom hub
mode = 5
//MAIN FUNCTIONS=================================== //MAIN FUNCTIONS===================================
@@ -555,70 +569,84 @@
return return
last_text = world.time 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>&rarr; To [P.owner]:</b></i><br>[t]<br>"
P.tnote += "<i><b>&larr; From <a href='byond://?src=\ref[P];choice=Message;target=\ref[src]'>[owner]</a> ([ownjob]):</b></i><br>[t]<br>"
var/AnsweringMS = 0 // Give every ghost the ability to see all messages
for (var/obj/machinery/message_server/MS in world) for (var/mob/dead/observer/G in world)
MS.send_pda_message("[P.owner]","[owner]","[t]") G.show_message("<i>PDA message from <b>[src.owner]</b> to <b>[P:owner]</b>: [t]</i>")
if(MS.active)
AnsweringMS++ 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(!AnsweringMS) if (!P.silent)
return playsound(P.loc, 'twobeep.ogg', 50, 1)
for (var/mob/O in hearers(3, P.loc))
tnote += "<i><b>&rarr; To [P.owner]:</b></i><br>[t]<br>" O.show_message(text("\icon[P] *[P.ttone]*"))
P.tnote += "<i><b>&larr; From <a href='byond://?src=\ref[P];choice=Message;target=\ref[src]'>[owner]</a> ([ownjob]):</b></i><br>[t]<br>" if( P.loc && ishuman(P.loc) )
var/mob/living/carbon/human/H = P.loc
// Give every ghost the ability to see all messages 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>)"
for (var/mob/dead/observer/G in world) log_pda("[usr] (PDA: [src.name]) sent \"[t]\" to [P.name]")
G.show_message("<i>PDA message from <b>[src.owner]</b> to <b>[P:owner]</b>: [t]</i>") P.overlays = null
P.overlays += image('pda.dmi', "pda-r")
if (prob(15)) //Give the AI a chance of intercepting the message else
var/who = src.owner U << "ERROR: Server isn't responding."
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")
// pAI Message // pAI Message
else else
var/AnsweringMS = 0 //var/telecomms_intact = telecomms_process(P.owner, owner, t)
for (var/obj/machinery/message_server/MS in world) var/obj/machinery/message_server/useMS = null
MS.send_pda_message("[P]","[src]","[t]") if(message_servers)
if(MS.active) for (var/obj/machinery/message_server/MS in message_servers)
AnsweringMS++ //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>&rarr; To [P]:</b></i><br>[t]<br>"
P.tnote += "<i><b>&larr; From <a href='byond://?src=\ref[P];soft=pdamessage;target=\ref[src]'>[src]</a>:</b></i><br>[t]<br>"
if(!AnsweringMS) // Give every ghost the ability to see all messages
return 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>&rarr; To [P]:</b></i><br>[t]<br>" if (!P.silent)
P.tnote += "<i><b>&larr; From <a href='byond://?src=\ref[P];soft=pdamessage;target=\ref[src]'>[src]</a>:</b></i><br>[t]<br>" 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("Send Honk")//Honk virus
if(istype(cartridge, /obj/item/weapon/cartridge/clown))//Cartridge checks are kind of unnecessary since everything is done through switch. 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.loc = get_turf(src)
id = null 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() /obj/item/device/pda/verb/verb_remove_id()
set category = "Object" set category = "Object"
set name = "Remove id" set name = "Remove id"

View File

@@ -122,9 +122,17 @@ ZIPPO
var/icon_butt = "cigbutt" var/icon_butt = "cigbutt"
var/lastHolder = null var/lastHolder = null
var/smoketime = 300 var/smoketime = 300
var/chem_volume = 15
var/butt_count = 5 //count of butt sprite variations 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) /obj/item/clothing/mask/cigarette/attackby(obj/item/weapon/W as obj, mob/user as mob)
..() ..()
@@ -155,10 +163,37 @@ ZIPPO
return 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].") /obj/item/clothing/mask/cigarette/proc/light(var/flavor_text = "[usr] lights the [name].")
if(!src.lit) if(!src.lit)
src.lit = 1 src.lit = 1
src.damtype = "fire" 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.icon_state = icon_on
src.item_state = icon_on src.item_state = icon_on
for(var/mob/O in viewers(usr, null)) for(var/mob/O in viewers(usr, null))
@@ -181,6 +216,14 @@ ZIPPO
return return
if(location) if(location)
location.hotspot_expose(700, 5) 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 return
@@ -214,6 +257,7 @@ ZIPPO
throw_speed = 0.5 throw_speed = 0.5
item_state = "cigaroff" item_state = "cigaroff"
smoketime = 1500 smoketime = 1500
chem_volume = 20
butt_count = 0 butt_count = 0
/obj/item/clothing/mask/cigarette/cigar/cohiba /obj/item/clothing/mask/cigarette/cigar/cohiba
@@ -230,6 +274,7 @@ ZIPPO
icon_on = "cigar2on" icon_on = "cigar2on"
icon_off = "cigar2off" icon_off = "cigar2off"
smoketime = 7200 smoketime = 7200
chem_volume = 30
/obj/item/weapon/cigbutt /obj/item/weapon/cigbutt
name = "cigarette butt" name = "cigarette butt"
@@ -360,6 +405,14 @@ ZIPPO
slot_flags = SLOT_BELT slot_flags = SLOT_BELT
var/cigcount = 6 var/cigcount = 6
New()
..()
flags |= NOREACT
create_reagents(15)//so people can inject cigarettes without opening a packet
Del()
..()
del(reagents)
update_icon() update_icon()
icon_state = "[initial(icon_state)][cigcount]" icon_state = "[initial(icon_state)][cigcount]"
@@ -375,6 +428,7 @@ ZIPPO
else else
cigcount-- cigcount--
var/obj/item/clothing/mask/cigarette/W = new /obj/item/clothing/mask/cigarette(user) 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) user.put_in_hand(W)
else else
return ..() return ..()

View File

@@ -2,6 +2,7 @@
CONTAINS: CONTAINS:
EMP GRENADE EMP GRENADE
FLASHBANG FLASHBANG
CRITTER GRENADE
*/ */
@@ -231,6 +232,7 @@ FLASHBANG
else else
if (M.ear_damage >= 5) if (M.ear_damage >= 5)
M << "\red Your ears start to ring!" 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. 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) var/turf/T = get_turf(src)
@@ -289,7 +291,7 @@ FLASHBANG
/obj/item/weapon/flashbang/clusterbang /obj/item/weapon/flashbang/clusterbang
desc = "Use of this weapon may constiute a war crime in your area, consult your local captain." 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 = 'grenade.dmi'
icon_state = "clusterbang" icon_state = "clusterbang"
var/child = 0 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"

View File

@@ -1,5 +1,3 @@
//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
/obj/item/weapon/implant /obj/item/weapon/implant
name = "implant" name = "implant"
desc = "An implant. Not usually seen outside a body." 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." H << "\blue You feel a surge of loyalty towards NanoTrasen."
return 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 //BS12 Explosive
/obj/item/weapon/implant/explosive /obj/item/weapon/implant/explosive
name = "explosive implant" name = "explosive implant"

View File

@@ -74,6 +74,15 @@
update() update()
return 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 /obj/item/weapon/implanter/compressed
name = "implanter (C)" name = "implanter (C)"
icon_state = "cimplanter0" icon_state = "cimplanter0"

View File

@@ -883,7 +883,7 @@
user << "\red [target] is full." user << "\red [target] is full."
return 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." user << "\red You cannot directly fill this object."
return return
@@ -1079,7 +1079,7 @@
if(istype(target, /obj/item/weapon/implantcase/chem)) if(istype(target, /obj/item/weapon/implantcase/chem))
return 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." user << "\red You cannot directly fill this object."
return return
if(target.reagents.total_volume >= target.reagents.maximum_volume) if(target.reagents.total_volume >= target.reagents.maximum_volume)

View File

@@ -10,12 +10,6 @@ emp_act
/mob/living/carbon/human/bullet_act(var/obj/item/projectile/P, var/def_zone) /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(wear_suit && istype(wear_suit, /obj/item/clothing/suit/armor/laserproof))
if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam)) if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam))
var/reflectchance = 40 - round(P.damage/3) var/reflectchance = 40 - round(P.damage/3)

View File

@@ -516,6 +516,7 @@
M.Friends = Friends M.Friends = Friends
M.tame = tame M.tame = tame
M.rabid = rabid M.rabid = rabid
M.Discipline = Discipline
if(i != 1) step_away(M,src) if(i != 1) step_away(M,src)
del(src) del(src)

View File

@@ -78,7 +78,14 @@ obj/item/weapon/gun/energy/laser/retro
projectile_type = "/obj/item/projectile/beam/heavylaser" 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//////////////////// ////////Laser Tag////////////////////

View File

@@ -1,5 +1,3 @@
//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
/* /*
#define BRUTE "brute" #define BRUTE "brute"
#define BURN "burn" #define BURN "burn"
@@ -30,6 +28,7 @@
var/current = null var/current = null
var/turf/original = null // the original turf clicked var/turf/original = null // the original turf clicked
var/turf/starting = null // the projectile's starting turf 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_x = 16
var/p_y = 16 // the pixel location of the tile that the player clicked. Default is the center 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 if(bumped) return
var/forcedodge = 0 // force the projectile to pass
bumped = 1 bumped = 1
if(firer && istype(A, /mob)) if(firer && istype(A, /mob))
var/mob/M = A var/mob/M = A
@@ -84,10 +85,18 @@
loc = A.loc loc = A.loc
return // nope.avi 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 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 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)) 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>" 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>" 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) spawn(0)
if(A) if(A)
var/permutation = A.bullet_act(src, def_zone) // searches for return value 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! bumped = 0 // reset bumped variable!
if(istype(A, /turf)) if(istype(A, /turf))
loc = A loc = A
else else
loc = A.loc loc = A.loc
permutated.Add(A)
return return
if(istype(A,/turf)) if(istype(A,/turf))
@@ -147,8 +157,9 @@
if(!bumped) if(!bumped)
if(loc == original) if(loc == original)
for(var/mob/living/M in original) for(var/mob/living/M in original)
Bump(M) if(!(M in permutated))
sleep(1) Bump(M)
sleep(1)
return return
/obj/item/projectile/test //Used to see if you can hit them. /obj/item/projectile/test //Used to see if you can hit them.

View File

@@ -63,6 +63,10 @@
icon_state = "heavylaser" icon_state = "heavylaser"
damage = 60 damage = 60
/obj/item/projectile/beam/xray
name = "xray beam"
icon_state = "xray"
damage = 30
/obj/item/projectile/beam/pulse /obj/item/projectile/beam/pulse
name = "pulse" name = "pulse"

View File

@@ -1,3 +1,5 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
/* --- Traffic Control Scripting Language --- */ /* --- Traffic Control Scripting Language --- */
// Nanotrasen TCS Language - Made by Doohl // Nanotrasen TCS Language - Made by Doohl
@@ -16,14 +18,13 @@
/* -- Compile a raw block of text -- */ /* -- Compile a raw block of text -- */
proc/Compile(code as message) proc/Compile(code as message)
var var/n_scriptOptions/nS_Options/options = new()
n_scriptOptions/nS_Options/options = new() var/n_Scanner/nS_Scanner/scanner = new(code, options)
n_Scanner/nS_Scanner/scanner = new(code, options) var/list/tokens = scanner.Scan()
list/tokens = scanner.Scan() var/n_Parser/nS_Parser/parser = new(tokens, options)
n_Parser/nS_Parser/parser = new(tokens, options) var/node/BlockDefinition/GlobalBlock/program = parser.Parse()
node/BlockDefinition/GlobalBlock/program = parser.Parse()
list/returnerrors = list() var/list/returnerrors = list()
returnerrors += scanner.errors returnerrors += scanner.errors
returnerrors += parser.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 B