Fixes chargers being a magical source of charge

This commit is contained in:
mwerezak
2014-07-12 15:44:21 -04:00
parent 06ce667eef
commit f5c67f87ab
4 changed files with 51 additions and 31 deletions
+8 -7
View File
@@ -1,6 +1,6 @@
/obj/machinery/cell_charger
name = "cell charger"
desc = "It charges power cells."
name = "heavy-duty cell charger"
desc = "A much more powerful version of the standard recharger that is specially designed for charging power cells."
icon = 'icons/obj/power.dmi'
icon_state = "ccharger0"
anchored = 1
@@ -10,7 +10,9 @@
power_channel = EQUIP
var/obj/item/weapon/cell/charging = null
var/chargelevel = -1
var/efficiency = 0.875 //<1.0 means some power is lost in the charging process, >1.0 means free energy.
var/power_rating = 50000 //50 kW. A measure of how powerful this charger is for charging cells (this the power drawn when charging)
proc
updateicon()
icon_state = "ccharger[charging ? 1 : 0]"
@@ -93,9 +95,8 @@
if(!charging || (stat & (BROKEN|NOPOWER)) || !anchored)
return
var/power_used = 100000 //for 200 units of charge. Yes, thats right, 100 kW. Is something wrong with CELLRATE?
power_used = charging.give(power_used*CELLRATE*efficiency)
use_power(power_used)
if (!charging.fully_charged())
var/charge_used = charging.give(power_rating*CELLRATE)
use_power(charge_used/CELLRATE) //It's only while charging something, so I'm going to say use_power() is fine here...
updateicon()
+35 -19
View File
@@ -7,13 +7,19 @@ obj/machinery/recharger
anchored = 1
use_power = 1
idle_power_usage = 4
active_power_usage = 250
var/power_rating = 15000 //15 kW
var/obj/item/charging = null
var/list/allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/device/laptop, /obj/item/weapon/cell)
obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob)
if(istype(user,/mob/living/silicon))
return
if(istype(G, /obj/item/weapon/gun/energy) || istype(G, /obj/item/weapon/melee/baton) || istype(G,/obj/item/device/laptop))
var/allowed = 0
for (var/allowed_type in allowed_devices)
if (istype(G, allowed_type)) allowed = 1
if(allowed)
if(charging)
return
@@ -39,11 +45,10 @@ obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob)
user.drop_item()
G.loc = src
charging = G
use_power = 2
update_icon()
else if(istype(G, /obj/item/weapon/wrench))
if(charging)
user << "\red Remove the weapon first!"
user << "\red Remove [charging] first!"
return
anchored = !anchored
user << "You [anchored ? "attached" : "detached"] the recharger."
@@ -56,7 +61,6 @@ obj/machinery/recharger/attack_hand(mob/user as mob)
charging.update_icon()
charging.loc = loc
charging = null
use_power = 1
update_icon()
obj/machinery/recharger/attack_paw(mob/user as mob)
@@ -69,19 +73,20 @@ obj/machinery/recharger/process()
if(charging)
if(istype(charging, /obj/item/weapon/gun/energy))
var/obj/item/weapon/gun/energy/E = charging
if(E.power_supply.charge < E.power_supply.maxcharge)
E.power_supply.give(100)
if(!E.power_supply.fully_charged())
icon_state = "recharger1"
use_power(250/CELLRATE)
var/charge_used = E.power_supply.give(power_rating*CELLRATE)
use_power(charge_used/CELLRATE)
else
icon_state = "recharger2"
return
if(istype(charging, /obj/item/weapon/melee/baton))
var/obj/item/weapon/melee/baton/B = charging
if(B.bcell)
if(B.bcell.give(1500)) //Because otherwise it takes two minutes to fully charge due to 15k cells. - Neerti
if(!B.bcell.fully_charged())
icon_state = "recharger1"
use_power(200/CELLRATE)
var/charge_used = B.bcell.give(power_rating*CELLRATE)
use_power(charge_used/CELLRATE)
else
icon_state = "recharger2"
else
@@ -89,14 +94,22 @@ obj/machinery/recharger/process()
return
if(istype(charging, /obj/item/device/laptop))
var/obj/item/device/laptop/L = charging
if(L.stored_computer.battery.charge < L.stored_computer.battery.maxcharge)
L.stored_computer.battery.give(100)
if(!L.stored_computer.battery.fully_charged())
icon_state = "recharger1"
use_power(250/CELLRATE)
var/charge_used = L.stored_computer.battery.give(power_rating*CELLRATE)
use_power(charge_used/CELLRATE)
else
icon_state = "recharger2"
return
if(istype(charging, /obj/item/weapon/cell))
var/obj/item/weapon/cell/C = charging
if(!C.fully_charged())
icon_state = "recharger1"
var/charge_used = C.give(power_rating*CELLRATE)
use_power(charge_used/CELLRATE)
else
icon_state = "recharger2"
return
obj/machinery/recharger/emp_act(severity)
@@ -125,6 +138,8 @@ obj/machinery/recharger/wallcharger
name = "wall recharger"
icon = 'icons/obj/stationobjs.dmi'
icon_state = "wrecharger0"
power_rating = 25000 //25 kW , It's more specialized than the standalone recharger but more powerful
allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton)
obj/machinery/recharger/wallcharger/process()
if(stat & (NOPOWER|BROKEN) || !anchored)
@@ -133,19 +148,20 @@ obj/machinery/recharger/wallcharger/process()
if(charging)
if(istype(charging, /obj/item/weapon/gun/energy))
var/obj/item/weapon/gun/energy/E = charging
if(E.power_supply.charge < E.power_supply.maxcharge)
E.power_supply.give(100)
if(!E.power_supply.fully_charged())
icon_state = "wrecharger1"
use_power(250/CELLRATE)
var/charge_used = E.power_supply.give(power_rating*CELLRATE)
use_power(charge_used/CELLRATE)
else
icon_state = "wrecharger2"
return
if(istype(charging, /obj/item/weapon/melee/baton))
var/obj/item/weapon/melee/baton/B = charging
if(B.bcell)
if(B.bcell.give(1500)) //Because otherwise it takes two minutes to fully charge due to 15k cells. - Neerti
if(!B.bcell.fully_charged()) //Because otherwise it takes two minutes to fully charge due to 15k cells. - Neerti
icon_state = "wrecharger1"
use_power(200/CELLRATE)
var/charge_used = B.bcell.give(power_rating*CELLRATE)
use_power(charge_used/CELLRATE)
else
icon_state = "wrecharger2"
else
+2 -2
View File
@@ -98,7 +98,7 @@
return
// High brute damage or sharp objects may damage internal organs
if(internal_organs != null) if( (sharp && brute >= 5) || brute >= 10) if(prob(5))
if(internal_organs && ( (sharp && brute >= 5) || brute >= 10) && prob(5))
// Damage an internal organ
var/datum/organ/internal/I = pick(internal_organs)
I.take_damage(brute / 2)
@@ -387,7 +387,7 @@ Note that amputating the affected organ does in fact remove the infection from t
/datum/organ/external/proc/handle_germ_effects()
var/antibiotics = owner.reagents.get_reagent_amount("spaceacillin")
if (germ_level < INFECTION_LEVEL_ONE && prob(60)) //this could be an else clause, but it looks cleaner this way
if (germ_level > 0 && germ_level < INFECTION_LEVEL_ONE && prob(60)) //this could be an else clause, but it looks cleaner this way
germ_level-- //since germ_level increases at a rate of 1 per second with dirty wounds, prob(60) should give us about 5 minutes before level one.
if(germ_level >= INFECTION_LEVEL_ONE)
+6 -3
View File
@@ -22,6 +22,9 @@
/obj/item/weapon/cell/proc/percent() // return % charge of cell
return 100.0*charge/maxcharge
/obj/item/weapon/cell/proc/fully_charged()
return (charge == maxcharge)
// use power from a cell
/obj/item/weapon/cell/proc/use(var/amount)
if(rigged && amount > 0)
@@ -39,15 +42,15 @@
return 0
if(maxcharge < amount) return 0
var/power_used = min(maxcharge-charge,amount)
var/amount_used = min(maxcharge-charge,amount)
if(crit_fail) return 0
if(!prob(reliability))
minor_fault++
if(prob(minor_fault))
crit_fail = 1
return 0
charge += power_used
return power_used
charge += amount_used
return amount_used
/obj/item/weapon/cell/examine()