Files
Polaris/code/modules/power/cell.dm
vageyenaman@gmail.com c18a576136 There's quite a bit in this revision.
Admin changes:
     Admin attack logs now have a timestamps. Basically, before each log entry there is something that displays [hour:minute:second]. I plan on expanding this functionality to all kinds of logs, as well as creating a global attack log, but this will do for now.


Gloves:
     You can still electrify any gloves with a power cell, however you have to use wires on non-insulated (yellow) gloves to create a "ghetto-insulation" system. I might make these gloves' stun effects more watered-down than normal insulated gloves, but that will probably be for later on.


Bugfixes:
     Fixed some miscellaneous runtime errors, and more importantly, the shotgun. You can dry-pump it by clicking on it, which will eject any used shots or just make that badass "chuck-chick" sound to let everyone know you mean business. Combat shotguns can now shoot twice without the need to pump.

     I also possibly fixed the issue with metroids' AI process locking up. Someone's going to have to PM me on the forums to tell me if this worked or not, because I have not been able to reproduce the bug (although I do know where it's happening in the code).


Chemistry:
     Alright, so this is where the meat of this update is. In a previous revision (r1905) I mentioned the addition of a new "color" variable. This variable now has a use. When you use a spray cleaner, or a chem sprayer which now is significantly more powerful, the color combination of all the reagents inside the sprayer will be displayed instead of the plain old blue-white color. This will allow for people to easily distinguish reagents and colors, for instance, if you see some chemist running around spraying orange or purple stuff chances are that's acid he's spraying, so you should probably subdue him! 

     In addition, you will now be able to see beakers (large ones too) fill up visually. The color of the reagents inside the beaker is overlayed on top of the beaker. The colors may be subject to change to make them brighter or more easily identifiable by "category". Currently, most pharmaceuticals have a light pinkish color. Polytrinic acid has a distinct purple color, etc. However, with due time I can picture chemists mixing other, benign-ish reagents with harmful reagents so passerbys think that a chemist is spraying someone with something harmless, but in reality is spraying them with a bunch of PAcid. There are some consequences, for instance, concentrated acid is more powerful than watered-down acid.


Have fun with that.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1922 316c924e-a436-60f5-8080-3fe189b3f50e
2011-07-25 03:37:21 +00:00

189 lines
5.0 KiB
Plaintext

// the power cell
// charge from 0 to 100%
// fits in APC to provide backup power
/obj/item/weapon/cell/New()
..()
charge = charge * maxcharge/100.0 // map obj has charge as percentage, convert to real value here
spawn(5)
updateicon()
/obj/item/weapon/cell/proc/updateicon()
if(maxcharge <= 2500)
icon_state = "cell"
else
icon_state = "hpcell"
overlays = null
if(charge < 0.01)
return
else if(charge/maxcharge >=0.995)
overlays += image('power.dmi', "cell-o2")
else
overlays += image('power.dmi', "cell-o1")
/obj/item/weapon/cell/proc/percent() // return % charge of cell
return 100.0*charge/maxcharge
// use power from a cell
/obj/item/weapon/cell/proc/use(var/amount)
charge = max(0, charge-amount)
if(rigged && amount > 0)
explode()
// recharge the cell
/obj/item/weapon/cell/proc/give(var/amount)
var/power_used = min(maxcharge-charge,amount)
if(crit_fail)
power_used = 0
else if(prob(reliability))
charge += power_used
else
minor_fault++
if(prob(minor_fault))
crit_fail = 1
power_used = 0
if(rigged && amount > 0)
explode()
return power_used
/obj/item/weapon/cell/examine()
set src in view(1)
if(usr /*&& !usr.stat*/)
if(maxcharge <= 2500)
usr << "[desc]\nThe manufacturer's label states this cell has a power rating of [maxcharge], and that you should not swallow it.\nThe charge meter reads [round(src.percent() )]%."
else
usr << "This power cell has an exciting chrome finish, as it is an uber-capacity cell type! It has a power rating of [maxcharge]!!!\nThe charge meter reads [round(src.percent() )]%."
if(crit_fail)
usr << "\red This power cell seems to be faulty"
/obj/item/weapon/cell/attack_self(mob/user as mob)
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
//Just because someone gets you occasionally with stun gloves doesn't mean you can put in code to kill everyone who tries to make some.
/obj/item/weapon/cell/attackby(obj/item/W, mob/user)
..()
var/obj/item/clothing/gloves/G = W
if(istype(G))
// var/datum/effects/system/spark_spread/s = new /datum/effects/system/spark_spread
// s.set_up(3, 1, src)
// s.start()
// if (prob(80+(G.siemens_coefficient*100)) && electrocute_mob(user, src, src))
// return 1
if(!istype(src, /obj/item/clothing/gloves/yellow))
if(!G.wired)
user << "You run an electrical current through the gloves, but nothing happens!"
return
if(charge < 1000)
return
// G.siemens_coefficient = max(G.siemens_coefficient,0.3)
G.elecgen = 1
G.uses = min(5, round(charge / 1000))
use(G.uses*1000)
updateicon()
user << "\red These gloves are now electrically charged!"
else if(istype(W, /obj/item/weapon/reagent_containers/syringe))
var/obj/item/weapon/reagent_containers/syringe/S = W
user << "You inject the solution into the power cell."
if(S.reagents.has_reagent("plasma", 5))
rigged = 1
S.reagents.clear_reagents()
/obj/item/weapon/cell/proc/explode()
var/turf/T = get_turf(src.loc)
/*
* 1000-cell explosion(T, -1, 0, 1, 1)
* 2500-cell explosion(T, -1, 0, 1, 1)
* 10000-cell explosion(T, -1, 1, 3, 3)
* 15000-cell explosion(T, -1, 2, 4, 4)
* */
if (charge==0)
return
var/devastation_range = -1 //round(charge/11000)
var/heavy_impact_range = round(sqrt(charge)/60)
var/light_impact_range = round(sqrt(charge)/30)
var/flash_range = light_impact_range
if (light_impact_range==0)
rigged = 0
corrupt()
return
//explosion(T, 0, 1, 2, 2)
explosion(T, devastation_range, heavy_impact_range, light_impact_range, flash_range)
spawn(1)
del(src)
/obj/item/weapon/cell/proc/corrupt()
charge /= 2
maxcharge /= 2
if (prob(10))
rigged = 1 //broken batterys are dangerous
/obj/item/weapon/cell/emp_act(severity)
charge -= 1000 / severity
if (charge < 0)
charge = 0
if(reliability != 100 && prob(50/severity))
reliability -= 10 / severity
..()
/obj/item/weapon/cell/ex_act(severity)
switch(severity)
if(1.0)
del(src)
return
if(2.0)
if (prob(50))
del(src)
return
if (prob(50))
corrupt()
if(3.0)
if (prob(25))
del(src)
return
if (prob(25))
corrupt()
return
/obj/item/weapon/cell/blob_act()
if(prob(75))
explode()
/obj/item/weapon/cell/proc/get_electrocute_damage()
switch (charge)
if (9000 to INFINITY)
return min(rand(90,150),rand(90,150))
if (2500 to 9000-1)
return min(rand(70,145),rand(70,145))
if (1750 to 2500-1)
return min(rand(35,110),rand(35,110))
if (1500 to 1750-1)
return min(rand(30,100),rand(30,100))
if (750 to 1500-1)
return min(rand(25,90),rand(25,90))
if (250 to 750-1)
return min(rand(20,80),rand(20,80))
if (100 to 250-1)
return min(rand(20,65),rand(20,65))
else
return 0