From defc4c1f94108e2cd9e99cfac5ca5a890a280793 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Mon, 18 May 2015 20:09:09 -0400 Subject: [PATCH] Adds check_charge(), checked_use() --- .../game/objects/items/weapons/power_cells.dm | 5 +++- code/game/objects/items/weapons/stunbaton.dm | 4 +-- .../modules/mob/living/silicon/robot/robot.dm | 3 +-- code/modules/power/cell.dm | 27 ++++++++++++++----- code/modules/power/power.dm | 2 +- code/modules/projectiles/guns/energy.dm | 2 +- 6 files changed, 29 insertions(+), 14 deletions(-) diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm index 5cab6b24cb..bd344d2267 100644 --- a/code/game/objects/items/weapons/power_cells.dm +++ b/code/game/objects/items/weapons/power_cells.dm @@ -88,8 +88,11 @@ name = "infinite-capacity power cell!" icon_state = "icell" origin_tech = null - maxcharge = 30000 + maxcharge = 30000 //determines how badly mobs get shocked matter = list("metal" = 700, "glass" = 80) + + check_charge() + return 1 use() return 1 diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index ca495ee263..811cd4f866 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -35,13 +35,13 @@ /obj/item/weapon/melee/baton/proc/deductcharge(var/chrgdeductamt) if(bcell) - if(bcell.charge >= chrgdeductamt) - bcell.use(chrgdeductamt) + if(bcell.checked_use(chrgdeductamt)) return 1 else status = 0 update_icon() return 0 + return null /obj/item/weapon/melee/baton/update_icon() if(status) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 71171212a2..542daeed5f 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1234,8 +1234,7 @@ var/list/robot_verbs_default = list( return 0 var/power_use = amount * CYBORG_POWER_USAGE_MULTIPLIER - if(cell.charge >= CELLRATE * power_use) - cell.use(CELLRATE * power_use) + if(cell.checked_use(CELLRATE * power_use)) used_power_this_tick += power_use return 1 return 0 diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 553891565c..f664890be9 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -9,7 +9,7 @@ spawn(5) updateicon() -/obj/item/weapon/cell/drain_power(var/drain_check, var/surge, var/amount = 0) +/obj/item/weapon/cell/drain_power(var/drain_check, var/surge, var/power = 0) if(drain_check) return 1 @@ -17,9 +17,9 @@ if(charge <= 0) return 0 - var/cell_amt = min((amount * CELLRATE), charge) - use(cell_amt) - return cell_amt / CELLRATE + var/cell_amt = power * CELLRATE + + return use(cell_amt) / CELLRATE /obj/item/weapon/cell/proc/updateicon() overlays.Cut() @@ -37,13 +37,26 @@ /obj/item/weapon/cell/proc/fully_charged() return (charge == maxcharge) -// use power from a cell +// checks if the power cell is able to provide the specified amount of charge +/obj/item/weapon/cell/proc/check_charge(var/amount) + return (charge >= amount) + +// use power from a cell, returns the amount actually used /obj/item/weapon/cell/proc/use(var/amount) if(rigged && amount > 0) explode() return 0 - charge = max(0, charge - amount) - return charge + var/used = min(charge, amount) + charge -= used + return used + +// Checks if the specified amount can be provided. If it can, it removes the amount +// from the cell and returns 1. Otherwise does nothing and returns 0. +/obj/item/weapon/cell/proc/checked_use(var/amount) + if(!check_charge(amount)) + return 0 + use(amount) + return 1 // recharge the cell /obj/item/weapon/cell/proc/give(var/amount) diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 7cfcc53246..4a172b361b 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -374,7 +374,7 @@ if (source_area) source_area.use_power(drained_energy/CELLRATE) else if (istype(power_source,/datum/powernet)) - var/drained_power = drained_energy/CELLRATE //convert from "joules" to "watts" + var/drained_power = drained_energy/CELLRATE drained_power = PN.draw_power(drained_power) else if (istype(power_source, /obj/item/weapon/cell)) cell.use(drained_energy) diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index f85f41276f..c167964f34 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -57,7 +57,7 @@ /obj/item/weapon/gun/energy/consume_next_projectile() if(!power_supply) return null if(!ispath(projectile_type)) return null - if(power_supply.charge < charge_cost || !power_supply.use(charge_cost)) return null + if(!power_supply.checked_use(charge_cost)) return null return new projectile_type(src) /obj/item/weapon/gun/energy/proc/get_external_power_supply()