Merge pull request #494 from Fox-McCloud/Cyborg-Balance

Cyborg Rebalance
This commit is contained in:
ZomgPonies
2015-03-04 00:15:15 -05:00
15 changed files with 266 additions and 446 deletions
+2 -2
View File
@@ -320,8 +320,8 @@
newlap.spawn_files += (/datum/file/camnet_key/anomalyisolation)
newlap.spawn_files += (/datum/file/camnet_key/toxins)
newlap.spawn_files += (/datum/file/camnet_key/telepad)
if(access_rd in C.access)
newlap.spawn_files += (/datum/file/program/borg_control)
/* if(access_rd in C.access)
newlap.spawn_files += (/datum/file/program/borg_control) */
if(access_cent_specops in C.access)
newlap.spawn_files += (/datum/file/camnet_key/ert)
newlap.spawn_files += (/datum/file/camnet_key/centcom)
+2 -2
View File
@@ -361,12 +361,12 @@ Programs are a file that can be executed
drm = 1
active_state = "power"
volume = 5000
/*
/datum/file/program/borg_control
name = "Cyborg Maint"
image = 'icons/ntos/borgcontrol.png'
active_state = "robot"
volume = 9050
volume = 9050 */
/datum/file/program/AIupload
name = "AI Upload"
@@ -67,11 +67,11 @@
name = "armour plating"
energy_consumption = 0
external_type = /obj/item/robot_parts/robot_component/armour
max_damage = 60
max_damage = 100
/datum/robot_component/actuator
name = "actuator"
energy_consumption = 2
energy_consumption = 1
external_type = /obj/item/robot_parts/robot_component/actuator
max_damage = 50
@@ -121,7 +121,7 @@
/mob/living/silicon/robot/proc/is_component_functioning(module_name)
var/datum/robot_component/C = components[module_name]
return C && C.installed == 1 && C.toggled && C.is_powered()
// Returns component by it's string name
/mob/living/silicon/robot/proc/get_component(var/component_name)
var/datum/robot_component/C = components[component_name]
+67 -63
View File
@@ -16,16 +16,19 @@
update_items()
if (src.stat != DEAD) //still using power
use_power()
process_killswitch()
process_locks()
update_canmove()
update_gravity(mob_has_gravity())
handle_fire()
/mob/living/silicon/robot/proc/clamp_values()
// SetStunned(min(stunned, 30))
SetStunned(min(stunned, 30))
SetParalysis(min(paralysis, 30))
// SetWeakened(min(weakened, 20))
SetWeakened(min(weakened, 20))
sleeping = 0
adjustBruteLoss(0)
adjustToxLoss(0)
@@ -36,20 +39,23 @@
if (is_component_functioning("power cell") && cell)
if(src.cell.charge <= 0)
uneq_all()
src.stat = 1
src.stat = 1
has_power = 0
for(var/V in components)
var/datum/robot_component/C = components[V]
if(C.name == "actuator") // Let drained robots move, disable the rest
continue
C.consume_power()
else if (src.cell.charge <= 100)
uneq_all()
src.cell.use(1)
else
if(src.module_state_1)
src.cell.use(3)
src.cell.use(4)
if(src.module_state_2)
src.cell.use(3)
src.cell.use(4)
if(src.module_state_3)
src.cell.use(3)
src.cell.use(4)
for(var/V in components)
var/datum/robot_component/C = components[V]
@@ -57,15 +63,14 @@
if(!is_component_functioning("actuator"))
Paralyse(3)
src.eye_blind = 0
src.stat = 0
has_power = 1
else
uneq_all()
src.stat = 1
src.stat = 1
Paralyse(3)
/mob/living/silicon/robot/proc/handle_regular_status_updates()
if(src.camera && !scrambledcodes)
@@ -74,7 +79,9 @@
else
src.camera.status = 1
updatehealth()
health = maxHealth - (getOxyLoss() + getFireLoss() + getBruteLoss())
if(getOxyLoss() > 50) Paralyse(3)
if(src.sleeping)
Paralyse(3)
@@ -83,10 +90,21 @@
if(src.resting)
Weaken(5)
if(health < config.health_threshold_dead && src.stat != 2) //die only once
if(health <= config.health_threshold_dead && src.stat != 2) //die only once
death()
if (src.stat != 2) //Alive.
if(!istype(src,/mob/living/silicon/robot/drone))
if(health < 50) //Gradual break down of modules as more damage is sustained
if(uneq_module(module_state_3))
src << "<span class='warning'>SYSTEM ERROR: Module 3 OFFLINE.</span>"
if(health < 0)
if(uneq_module(module_state_2))
src << "<span class='warning'>SYSTEM ERROR: Module 2 OFFLINE.</span>"
if(health < -50)
if(uneq_module(module_state_1))
src << "<span class='warning'>CRITICAL ERROR: All modules OFFLINE.</span>"
if (src.paralysis || src.stunned || src.weakened) //Stunned etc.
src.stat = 1
if (src.stunned > 0)
@@ -95,34 +113,25 @@
AdjustWeakened(-1)
if (src.paralysis > 0)
AdjustParalysis(-1)
src.blinded = 1
src.eye_blind = max(eye_blind, 1)
else
src.blinded = 0
src.eye_blind = 0
else //Not stunned.
src.stat = 0
else //Dead.
src.blinded = 1
src.stat = 2
src.eye_blind = 1
if (src.stuttering) src.stuttering--
if (src.eye_blind)
src.eye_blind--
src.blinded = 1
if (src.ear_deaf > 0) src.ear_deaf--
if (src.ear_damage < 25)
src.ear_damage -= 0.05
src.ear_damage = max(src.ear_damage, 0)
src.density = !( src.lying )
if ((src.sdisabilities & BLIND))
src.blinded = 1
if ((src.sdisabilities & DEAF))
src.ear_deaf = 1
if (src.disabilities & BLIND)
src.eye_blind = max(1, eye_blind)
if (src.eye_blurry > 0)
src.eye_blurry--
@@ -154,31 +163,32 @@
/mob/living/silicon/robot/proc/handle_regular_hud_updates()
if (src.stat == 2 || XRAY in mutations || src.sight_mode & BORGXRAY)
if (src.stat == 2 || src.sight_mode & BORGXRAY)
src.sight |= SEE_TURFS
src.sight |= SEE_MOBS
src.sight |= SEE_OBJS
src.see_in_dark = 8
src.see_invisible = SEE_INVISIBLE_MINIMUM
else if (src.sight_mode & BORGMESON && src.sight_mode & BORGTHERM)
src.sight |= SEE_TURFS
src.sight |= SEE_MOBS
src.see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM
else if (src.sight_mode & BORGMESON)
src.sight |= SEE_TURFS
src.see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM
else if (src.sight_mode & BORGTHERM)
src.sight |= SEE_MOBS
src.see_in_dark = 8
src.see_invisible = SEE_INVISIBLE_LEVEL_TWO
else if (src.stat != 2)
src.sight &= ~SEE_MOBS
src.sight &= ~SEE_TURFS
src.sight &= ~SEE_OBJS
else
src.see_in_dark = 8
src.see_invisible = SEE_INVISIBLE_LEVEL_TWO
if (src.sight_mode & BORGMESON && src.sight_mode & BORGTHERM)
src.sight |= SEE_TURFS
src.sight |= SEE_MOBS
src.see_invisible = SEE_INVISIBLE_MINIMUM
else if (src.sight_mode & BORGMESON)
src.sight |= SEE_TURFS
src.see_invisible = SEE_INVISIBLE_MINIMUM
src.see_in_dark = 1
else if (src.sight_mode & BORGTHERM)
src.sight |= SEE_MOBS
src.see_invisible = SEE_INVISIBLE_LEVEL_TWO
else if (src.stat != 2)
src.sight &= ~SEE_MOBS
src.sight &= ~SEE_TURFS
src.sight &= ~SEE_OBJS
src.see_invisible = SEE_INVISIBLE_LEVEL_TWO
if(see_override)
see_invisible = see_override
regular_hud_updates()
@@ -212,17 +222,15 @@
src.healths.icon_state = "health6"
else
switch(health)
if(200 to INFINITY)
if(100 to INFINITY)
src.healths.icon_state = "health0"
if(150 to 200)
src.healths.icon_state = "health1"
if(100 to 150)
src.healths.icon_state = "health2"
if(50 to 100)
src.healths.icon_state = "health3"
src.healths.icon_state = "health2"
if(0 to 50)
src.healths.icon_state = "health3"
if(-50 to 0)
src.healths.icon_state = "health4"
if(config.health_threshold_dead to 0)
if(config.health_threshold_dead to -50)
src.healths.icon_state = "health5"
else
src.healths.icon_state = "health6"
@@ -319,16 +327,6 @@
src.module_state_3:screen_loc = ui_inv3
updateicon()
/mob/living/silicon/robot/proc/process_killswitch()
if(killswitch)
killswitch_time --
if(killswitch_time <= 0)
if(src.client)
src << "\red <B>Killswitch Activated"
killswitch = 0
spawn(5)
gib()
/mob/living/silicon/robot/proc/process_locks()
if(weapon_lock)
uneq_all()
@@ -348,7 +346,13 @@
/mob/living/silicon/robot/handle_fire()
if(..())
return
adjustFireLoss(3)
if(fire_stacks > 0)
fire_stacks--
fire_stacks = max(0, fire_stacks)
else
ExtinguishMob()
//adjustFireLoss(3)
return
/mob/living/silicon/robot/update_fire()
+55 -130
View File
@@ -8,8 +8,8 @@ var/list/robot_verbs_default = list(
real_name = "Cyborg"
icon = 'icons/mob/robots.dmi'
icon_state = "robot"
maxHealth = 200
health = 200
maxHealth = 100
health = 100
universal_speak = 1
var/sight_mode = 0
@@ -63,8 +63,6 @@ var/list/robot_verbs_default = list(
var/datum/effect/effect/system/spark_spread/spark_system//So they can initialize sparks whenever/N
var/jeton = 0
var/has_power = 1
var/killswitch = 0
var/killswitch_time = 60
var/weapon_lock = 0
var/weaponlock_time = 120
var/lawupdate = 1 //Cyborgs will sync their laws with their AI by default
@@ -76,7 +74,7 @@ var/list/robot_verbs_default = list(
var/braintype = "Cyborg"
var/base_icon = ""
var/crisis = 0
var/obj/item/borg/sight/hud/sec/sechud = null
var/obj/item/borg/sight/hud/med/healthhud = null
@@ -84,9 +82,9 @@ var/list/robot_verbs_default = list(
spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, src)
spark_system.attach(src)
add_language("Robot Talk", 1)
wires = new(src)
robot_modules_background = new()
@@ -98,9 +96,9 @@ var/list/robot_verbs_default = list(
radio = new /obj/item/device/radio/borg(src)
common_radio = radio
init()
if(!scrambledcodes && !camera)
camera = new /obj/machinery/camera(src)
camera.c_tag = real_name
@@ -126,7 +124,7 @@ var/list/robot_verbs_default = list(
cell.charge = 7500
..()
add_robot_verbs()
if(cell)
@@ -165,7 +163,7 @@ var/list/robot_verbs_default = list(
rbPDA.set_name_and_job(custom_name,braintype)
if(scrambledcodes)
rbPDA.hidden = 1
/mob/living/silicon/robot/binarycheck()
if(is_component_functioning("comms"))
var/datum/robot_component/RC = get_component("comms")
@@ -243,6 +241,7 @@ var/list/robot_verbs_default = list(
module_sprites["Standard"] = "surgeon"
module_sprites["Advanced Droid"] = "droid-medical"
module_sprites["Needles"] = "medicalrobot"
status_flags &= ~CANPUSH
if("Security")
module = new /obj/item/weapon/robot_module/security(src)
@@ -251,6 +250,7 @@ var/list/robot_verbs_default = list(
module_sprites["Red Knight"] = "Security"
module_sprites["Black Knight"] = "securityrobot"
module_sprites["Bloodhound"] = "bloodhound"
status_flags &= ~CANPUSH
if("Engineering")
module = new /obj/item/weapon/robot_module/engineering(src)
@@ -281,7 +281,7 @@ var/list/robot_verbs_default = list(
icon_state = "xenoborg-state-a"
modtype = "Xeno-Hu"
feedback_inc("xeborg_hunter",1)
//languages
module.add_languages(src)
@@ -445,7 +445,7 @@ var/list/robot_verbs_default = list(
set desc = "Augment visual feed with internal sensor overlays."
set category = "Robot Commands"
toggle_sensor_mode()
/mob/living/silicon/robot/proc/add_robot_verbs()
src.verbs |= robot_verbs_default
@@ -824,7 +824,7 @@ var/list/robot_verbs_default = list(
else
spark_system.start()
return ..()
/mob/living/silicon/robot/emag_act(user as mob)
if(!ishuman(user))
return
@@ -904,128 +904,44 @@ var/list/robot_verbs_default = list(
usr << "You unlock your cover."
/mob/living/silicon/robot/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
if (!ticker)
M << "You cannot attack people before the game has started."
return
if (istype(loc, /turf) && istype(loc.loc, /area/start))
M << "No attacking people at spawn, you jackass."
return
switch(M.a_intent)
if ("help")
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("<span class='notice'>[M] caresses [src]'s plating with its scythe like arm.</span>"), 1)
if ("grab")
if (M == src || anchored)
return
var/obj/item/weapon/grab/G = new /obj/item/weapon/grab(M, src )
M.put_in_active_hand(G)
G.synch()
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
visible_message("<span class='danger'>[M] has grabbed [src] passively!</span>")
if ("harm")
if (M.a_intent =="disarm")
if(!(lying))
M.do_attack_animation(src)
var/damage = rand(10, 20)
if (prob(90))
/*
if (M.class == "combat")
damage += 15
if(prob(20))
weakened = max(weakened,4)
stunned = max(stunned,4)
What is this?*/
playsound(loc, 'sound/weapons/slash.ogg', 25, 1, -1)
visible_message("<span class='danger'>[M] has slashed at [src]!</span>",\
"<span class='userdanger'>[M] has slashed at [src]!</span>")
if(prob(8))
flick("noise", flash)
adjustBruteLoss(damage)
updatehealth()
if (prob(85))
Stun(7)
step(src,get_dir(M,src))
spawn(5)
step(src,get_dir(M,src))
add_logs(M, src, "pushed", admin=0)
playsound(loc, 'sound/weapons/pierce.ogg', 50, 1, -1)
visible_message("<span class='danger'>[M] has forced back [src]!</span>", \
"<span class='userdanger'>[M] has forced back [src]!</span>")
else
playsound(loc, 'sound/weapons/slashmiss.ogg', 25, 1, -1)
visible_message("<span class='danger'>[M] took a swipe at [src]!</span>", \
"<span class='userdanger'>[M] took a swipe at [src]!</span>")
if ("disarm")
if(!(lying))
M.do_attack_animation(src)
if (rand(1,100) <= 85)
Stun(7)
step(src,get_dir(M,src))
spawn(5) step(src,get_dir(M,src))
playsound(loc, 'sound/weapons/pierce.ogg', 50, 1, -1)
visible_message("<span class='danger'>[M] has forced back [src]!</span>",\
"<span class='userdanger'>[M] has forced back [src]!</span>")
else
playsound(loc, 'sound/weapons/slashmiss.ogg', 25, 1, -1)
visible_message("<span class='danger'>[M] attempted to force back [src]!</span>",\
"<span class='userdanger'>[M] attempted to force back [src]!</span>")
else
..()
return
/mob/living/silicon/robot/attack_slime(mob/living/carbon/slime/M as mob)
if (!ticker)
M << "You cannot attack people before the game has started."
return
if(..()) //successful slime shock
flick("noise", flash)
var/stunprob = M.powerlevel * 7 + 10
if(prob(stunprob) && M.powerlevel >= 8)
adjustBruteLoss(M.powerlevel * rand(6,10))
if(M.Victim) return // can't attack while eating!
var/damage = rand(1, 3)
if (health > -100)
M.do_attack_animation(src)
visible_message("<span class='danger'>The [M.name] glomps [src]!</span>",\
"<span class='userdanger'>The [M.name] glomps [src]!</span>")
var/damage = rand(1, 3)
if(M.is_adult)
damage = rand(20, 40)
else
damage = rand(5, 35)
damage = round(damage / 2) // borgs recieve half damage
adjustBruteLoss(damage)
if(M.powerlevel > 0)
var/stunprob = 10
switch(M.powerlevel)
if(1 to 2) stunprob = 20
if(3 to 4) stunprob = 30
if(5 to 6) stunprob = 40
if(7 to 8) stunprob = 60
if(9) stunprob = 70
if(10) stunprob = 95
if(prob(stunprob))
M.powerlevel -= 3
if(M.powerlevel < 0)
M.powerlevel = 0
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("<span class='userdanger'>The [M.name] has electrified []!</span>", src), 1)
flick("noise", flash)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
if (prob(stunprob) && M.powerlevel >= 8)
adjustBruteLoss(M.powerlevel * rand(6,10))
updatehealth()
if(M.is_adult)
damage = rand(20, 40)
else
damage = rand(5, 35)
damage = round(damage / 2) // borgs recieve half damage
adjustBruteLoss(damage)
updatehealth()
return
@@ -1301,6 +1217,12 @@ var/list/robot_verbs_default = list(
return
/mob/living/silicon/robot/proc/self_destruct()
if(emagged)
if(mmi)
qdel(mmi)
explosion(src.loc,1,2,4)
else
explosion(src.loc,-1,0,2)
gib()
return
@@ -1313,9 +1235,12 @@ var/list/robot_verbs_default = list(
scrambledcodes = 1
//Disconnect it's camera so it's not so easily tracked.
if(src.camera)
src.camera.network = list()
cameranet.removeCamera(src.camera)
qdel(src.camera)
src.camera = null
// I'm trying to get the Cyborg to not be listed in the camera list
// Instead of being listed as "deactivated". The downside is that I'm going
// to have to check if every camera is null or not before doing anything, to prevent runtime errors.
// I could change the network to null but I don't know what would happen, and it seems too hacky for me.
/mob/living/silicon/robot/proc/ResetSecurityCodes()
set category = "Robot Commands"
@@ -1394,7 +1319,7 @@ var/list/robot_verbs_default = list(
faction = list("nanotrasen")
designation = "NT Combat Cyborg"
req_access = list(access_cent_specops)
/mob/living/silicon/robot/deathsquad/New(loc)
if(!cell)
cell = new /obj/item/weapon/stock_parts/cell(src)
@@ -1402,7 +1327,7 @@ var/list/robot_verbs_default = list(
cell.charge = 25000
..()
/mob/living/silicon/robot/deathsquad/init()
aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src)
@@ -1473,7 +1398,7 @@ var/list/robot_verbs_default = list(
cell.charge = 25000
..()
/mob/living/silicon/robot/syndicate/init()
aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src)
@@ -201,7 +201,7 @@
src.modules += new /obj/item/device/flashlight/seclite(src)
src.modules += new /obj/item/device/flash/cyborg(src)
src.modules += new /obj/item/weapon/restraints/handcuffs/cable/zipties/cyborg(src)
src.modules += new /obj/item/weapon/melee/baton/robot(src)
src.modules += new /obj/item/weapon/melee/baton/loaded/robot(src)
src.modules += new /obj/item/weapon/gun/energy/disabler/cyborg(src)
src.modules += new /obj/item/taperoll/police(src)
src.modules += new /obj/item/clothing/mask/gas/sechailer/cyborg(src)
+10 -6
View File
@@ -6,17 +6,21 @@
item_state = "stamp"
throwforce = 0
w_class = 1.0
throw_speed = 7
throw_range = 15
throw_speed = 3
throw_range = 7
m_amt = 60
_color = "qm"
_color = "cargo"
pressure_resistance = 2
attack_verb = list("stamped")
/obj/item/weapon/stamp/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] stamps 'VOID' on \his forehead, then promptly falls over, dead.</span>")
return (OXYLOSS)
/obj/item/weapon/stamp/qm
name = "Quartermaster's rubber stamp"
icon_state = "stamp-qm"
_color = "cargo"
_color = "qm"
/obj/item/weapon/stamp/law
name = "Law office's rubber stamp"
@@ -56,8 +60,8 @@
/obj/item/weapon/stamp/granted
name = "\improper GRANTED rubber stamp"
icon_state = "stamp-ok"
_color = "qm"
_color = "qm"
/obj/item/weapon/stamp/denied
name = "\improper DENIED rubber stamp"
icon_state = "stamp-deny"
@@ -63,8 +63,8 @@ obj/item/weapon/gun/energy/laser/retro
return 1
if(isrobot(src.loc))
var/mob/living/silicon/robot/R = src.loc
if(R && R.cell && R.cell.charge >= 500)
R.cell.use(500)
if(R && R.cell && R.cell.charge >= 83)
R.cell.use(83)
in_chamber = new/obj/item/projectile/beam(src)
return 1
return 0
+17 -11
View File
@@ -4,19 +4,24 @@
icon_state = "ionrifle"
item_state = null //so the human update icon uses the icon_state instead.
icon_override = 'icons/mob/in-hand/guns.dmi'
fire_sound = 'sound/weapons/Laser.ogg'
fire_sound = 'sound/weapons/IonRifle.ogg'
origin_tech = "combat=2;magnets=4"
w_class = 4.0
w_class = 5.0
flags = CONDUCT
slot_flags = SLOT_BACK
projectile_type = "/obj/item/projectile/ion"
/obj/item/weapon/gun/energy/ionrifle/emp_act(severity)
if(severity <= 2)
power_supply.use(round(power_supply.maxcharge / severity))
update_icon()
else
return
return
/obj/item/weapon/gun/energy/ionrifle/carbine
name = "ion carbine"
desc = "The MK.II Prototype Ion Projector is a lightweight carbine version of the larger ion rifle, built to be ergonomic and efficient."
icon_state = "ioncarbine"
item_state = "ioncarbine"
origin_tech = "combat=4;magnets=4;materials=4"
w_class = 3
slot_flags = SLOT_BELT
/obj/item/weapon/gun/energy/decloner
name = "biological demolecularisor"
@@ -288,7 +293,8 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
desc = "A self-defense weapon that exhausts organic targets, weakening them until they collapse."
icon_state = "disabler"
item_state = null
projectile_type = "/obj/item/projectile/beam/disabler"
projectile_type = /obj/item/projectile/beam/disabler
fire_sound = 'sound/weapons/taser2.ogg'
cell_type = "/obj/item/weapon/stock_parts/cell"
charge_cost = 500
@@ -319,7 +325,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
if(isrobot(src.loc))
var/mob/living/silicon/robot/R = src.loc
if(R && R.cell)
if(R.cell.use(charge_cost)) //Take power from the borg...
if(R.cell.use(charge_cost/10)) //Take power from the borg...
power_supply.give(charge_cost) //... to recharge the shot
update_icon()
@@ -336,7 +342,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
cell_type = "/obj/item/weapon/stock_parts/cell/secborg"
projectile_type = "/obj/item/projectile/bullet/midbullet3"
charge_cost = 300 //Yeah, let's NOT give them a 300 round clip that recharges, 20 is more reasonable and will actually hurt the borg's battery for overuse.
charge_cost = 200 //Yeah, let's NOT give them a 300 round clip that recharges, 20 is more reasonable and will actually hurt the borg's battery for overuse.
var/charge_tick = 0
var/recharge_time = 5
@@ -363,6 +369,6 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
if(isrobot(src.loc))
var/mob/living/silicon/robot/R = src.loc
if(R && R.cell)
if(R.cell.use(charge_cost)) //Take power from the borg...
if(R.cell.use(charge_cost/10)) //Take power from the borg...
power_supply.give(charge_cost) //...to recharge the shot
return 1
@@ -46,14 +46,14 @@
build_path = /obj/item/weapon/gun/energy/floragun
category = list("Weapons")
/datum/design/ionrifle
name = "Ion Rifle"
/datum/design/ioncarbine
name = "Ion Carbine"
desc = "How to dismantle a cyborg : The gun."
id = "ionrifle"
id = "ioncarbine"
req_tech = list("combat" = 5, "materials" = 4, "magnets" = 4)
build_type = PROTOLATHE
materials = list("$silver" = 4000, "$metal" = 6000, "$uranium" = 1000)
build_path = /obj/item/weapon/gun/energy/ionrifle
build_path = /obj/item/weapon/gun/energy/ionrifle/carbine
locked = 1
category = list("Weapons")