[MIRROR] Borg Icon Optimization and Weapon Modulation (#9655)

Co-authored-by: Cameron Lennox <killer65311@gmail.com>
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
CHOMPStation2StaffMirrorBot
2024-12-19 20:56:15 -07:00
committed by GitHub
parent c5fb5d13ae
commit 0192924910
26 changed files with 537 additions and 362 deletions

View File

@@ -0,0 +1,61 @@
/// This file contains everything that involves the borg overlay system that is applied to borgs in robot/sprites_sprite_datum.dm
/// These are applied ON /datum/robot_sprite to tell it what overlays it can or can not have.
/// If you make a borg that has a laser, taser, and shield, here's an Example:
/// sprite_flags = ROBOT_HAS_LASER_SPRITE | ROBOT_HAS_TASER_SPRITE | ROBOT_HAS_SHIELD_SPRITE
/// NOTES: You are NOT EXPECTED TO HAVE A GUN SPRITE IF YOU HAVE A DEDICATED LASER/TASER/DISABLER SPRITE. Doing so will cause BAD THINGS to happen!!!
/// IMPORTANT: Flags operate on a 1 2 4 8 10 20 40 80 100 200 400 800 1000 2000 4000 8000 etc system. Not 1 2 4 8 16 32 64 like I thought at first (oops)
#define ROBOT_HAS_SPEED_SPRITE 0x1 //Ex: /obj/item/borg/combat/mobility Replaces old has_speed_sprite
#define ROBOT_HAS_SHIELD_SPRITE 0x2 //Ex: /obj/item/borg/combat/shield Replaces old has_shield_sprite
#define ROBOT_HAS_SHIELD_SPEED_SPRITE 0x4 //Ex: Has a sprite for when both is activated AND has /obj/item/borg/combat/mobility
#define ROBOT_HAS_LASER_SPRITE 0x8 //Ex: /obj/item/gun/energy/robotic/laser Replaces old has_laser_sprite
#define ROBOT_HAS_TASER_SPRITE 0x10 //Ex: /obj/item/gun/energy/robotic/taser Replaces old has_taser_sprite
#define ROBOT_HAS_GUN_SPRITE 0x20 //Ex: Has a general gun sprite. Replaces old has_gun_sprite
#define ROBOT_HAS_DISABLER_SPRITE 0x40 //Ex: /obj/item/gun/energy/taser/mounted/cyborg/ertgun HOWEVER it is not used on this codebase (Virgo) but may be used downstream.
#define ROBOT_HAS_MELEE_SPRITE 0x80 //Ex: Generic borg melee
#define ROBOT_HAS_DAGGER_SPRITE 0x100 //Ex: Specialized dagger.
#define ROBOT_HAS_BLADE_SPRITE 0x200 //Ex: Specialized blade
/// For sanity's sake for you spriters out there that don't want to dig through the code, attach the below as a suffix for your sprites:
/// Speed: -roll
/// Shield: -shield
/// Both: -speed_shield
/// Laser: -laser
/// Taser: -taser
/// Gun: -gun
/// Disabler: -disabler
/// Melee: -melee
/// Blade: -blade
/// Dagger: -dagger
/// GUN DEFINES
/// These are applied on GUNS to classify them as a GUN, TASER, OR LASER.
/// So every borg weapon is a child of '/obj/item/gun/energy/robotic' and given the 'laser' 'taser' 'gun' etc flag. ALL guns have 'gun' by default.
#define COUNTS_AS_ROBOT_GUN 0x1
#define COUNTS_AS_ROBOT_TASER 0x2
#define COUNTS_AS_ROBOT_LASER 0x4
#define COUNTS_AS_ROBOT_DISABLER 0x8
/// MELEE WEAPON DEFINES
/// These are applied on MELEE WEAPONS to classify them as MELEE WEAPONS that give sprites.
/// Use 'melee' if your borg ONLY has a generic melee sprite. If they have more unique sprites, use the other ones!
/// Currently, only the borg blade is used. But you could expand this define list!
#define COUNTS_AS_ROBOTIC_MELEE 0x1
#define COUNTS_AS_ROBOT_DAGGER 0x2
#define COUNTS_AS_ROBOT_BLADE 0x4
/// ADDITIONAL NOTES:
/// If you want to have a special type of item that will be used on borgs that is NOT a gun OR is not included above that causes an overlay, have no fear!
/// Currently, the SHIELD, SPEED, and both are included. If you want your borg to have a cool special overlay, use 'handle_extra_icon_updates'!
/// Here's an example:
/*
/datum/robot_sprite/combat/fluff/foopwotch/handle_extra_icon_updates(var/mob/living/silicon/robot/ourborg) //Make sure the path is correct!
..() //THIS IS ESSENTIAL. IF YOU FORGET THIS LINE, YOU WILL NOT GET THE NORMAL SPRITES.
if(ourborg.has_active_type(/obj/item/weapon/combat_borgblade))
ourborg.add_overlay("[sprite_icon_state]-dagger")
*/

View File

@@ -365,7 +365,7 @@
generic_error(R, type)
return 0
var/obj/T = R.has_upgrade_module(/obj/item/gun/energy/taser/mounted/cyborg)
var/obj/T = R.has_upgrade_module(/obj/item/gun/energy/robotic/taser)
if(!T)
to_chat(usr, span_warning("This robot has had its taser removed!"))
return 0
@@ -375,7 +375,7 @@
to_chat(usr, "There's no room for another cooling unit!")
return 0
var/obj/item/gun/energy/taser/mounted/cyborg/B = T
var/obj/item/gun/energy/robotic/taser/B = T
B.recharge_time = max(2 , B.recharge_time - 4)
return 1

View File

@@ -1,110 +1,3 @@
/obj/item/melee/dogborg/jaws
icon = 'icons/mob/dogborg_vr.dmi'
hitsound = 'sound/weapons/bite.ogg'
throwforce = 0
w_class = ITEMSIZE_NORMAL
pry = 1
tool_qualities = list(TOOL_CROWBAR)
/obj/item/melee/dogborg/jaws/big
name = "combat jaws"
icon_state = "jaws"
desc = "The jaws of the law."
force = 25
armor_penetration = 25
defend_chance = 15
attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced")
/obj/item/melee/dogborg/jaws/small
name = "puppy jaws"
icon_state = "smalljaws"
desc = "The jaws of a small dog."
force = 10
defend_chance = 5
attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed")
var/emagged = 0
/obj/item/melee/dogborg/jaws/small/attack_self(mob/user)
var/mob/living/silicon/robot/R = user
if(R.emagged || R.emag_items)
emagged = !emagged
if(emagged)
name = "combat jaws"
icon_state = "jaws"
desc = "The jaws of the law."
force = 25
armor_penetration = 25
defend_chance = 15
attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced")
else
name = "puppy jaws"
icon_state = "smalljaws"
desc = "The jaws of a small dog."
force = 10
armor_penetration = 0
defend_chance = 5
attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed")
update_icon()
// Baton chompers
/obj/item/melee/borg_combat_shocker
name = "combat shocker"
icon = 'icons/mob/dogborg_vr.dmi'
icon_state = "combatshocker"
desc = "Shocking!"
force = 15
throwforce = 0
hitsound = 'sound/weapons/genhit1.ogg'
attack_verb = list("hit")
w_class = ITEMSIZE_NORMAL
var/charge_cost = 15
var/dogborg = FALSE
/obj/item/melee/borg_combat_shocker/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
if(isrobot(target))
return ..()
var/agony = 60 // Copied from stun batons
var/stun = 0 // ... same
var/obj/item/organ/external/affecting = null
if(ishuman(target))
var/mob/living/carbon/human/H = target
affecting = H.get_organ(hit_zone)
if(user.a_intent == I_HURT)
// Parent handles messages
. = ..()
//whacking someone causes a much poorer electrical contact than deliberately prodding them.
agony *= 0.5
stun *= 0.5
else
if(affecting)
if(dogborg)
target.visible_message(span_danger("[target] has been zap-chomped in the [affecting.name] with [src] by [user]!"))
else
target.visible_message(span_danger("[target] has been zapped in the [affecting.name] with [src] by [user]!"))
else
if(dogborg)
target.visible_message(span_danger("[target] has been zap-chomped with [src] by [user]!"))
else
target.visible_message(span_danger("[target] has been zapped with [src] by [user]!"))
playsound(src, 'sound/weapons/Egloves.ogg', 50, 1, -1)
// Try to use power
var/stunning = FALSE
if(isrobot(loc))
var/mob/living/silicon/robot/R = loc
if(R.cell?.use(charge_cost) == charge_cost)
stunning = TRUE
if(stunning)
target.stun_effect_act(stun, agony, hit_zone, src)
msg_admin_attack("[key_name(user)] stunned [key_name(target)] with the [src].")
if(ishuman(target))
var/mob/living/carbon/human/H = target
H.forcesay(hit_appends)
//Boop //New and improved, now a simple reagent sniffer.
/obj/item/boop_module
name = "boop module"
@@ -419,20 +312,6 @@
recharge_time = 1 //Takes ten ticks to recharge a laser, so don't waste them all!
//cell_type = null //Same cell as a taser until edits are made.
/obj/item/melee/combat_borgblade
name = "energy blade"
icon = 'icons/mob/dogborg_vr.dmi'
icon_state = "swordtail"
desc = "A glowing dagger. It appears to be extremely sharp."
force = 35 //Takes 3 hits to 100-0
armor_penetration = 70
sharp = TRUE
edge = TRUE
throwforce = 0 //This shouldn't be thrown in the first place.
hitsound = 'sound/weapons/blade1.ogg'
attack_verb = list("slashed", "stabbed", "jabbed", "mauled", "sliced")
w_class = ITEMSIZE_NORMAL
/obj/item/lightreplacer/dogborg
name = "light replacer"
desc = "A device to automatically replace lights. This version is capable to produce a few replacements using your internal matter reserves."

View File

@@ -135,13 +135,25 @@
else
return 0
/mob/living/silicon/robot/proc/get_active_modules()
return list(module_state_1, module_state_2, module_state_3)
// This one takes an object's type instead of an instance, as above.
/mob/living/silicon/robot/proc/has_active_type(var/type_to_compare, var/explicit = FALSE)
var/list/active_modules = list(module_state_1, module_state_2, module_state_3)
var/list/active_modules = get_active_modules()
if(is_type_in_modules(type_to_compare, active_modules, explicit))
return TRUE
return FALSE
/// Searches through a provided list to see if we have a module that is in that list.
/mob/living/silicon/robot/proc/has_active_type_list(var/list/type_to_compare, var/explicit = FALSE)
var/list/active_modules = get_active_modules()
if(islist(type_to_compare))
for(var/object_to_compare in type_to_compare)
if(is_type_in_modules(object_to_compare, active_modules, explicit))
return TRUE
return FALSE
/mob/living/silicon/robot/proc/is_type_in_modules(var/type, var/list/modules, var/explicit = FALSE)
for(var/atom/module in modules)
if(explicit && isatom(module))
@@ -284,6 +296,7 @@
contents += O
if(istype(module_state_1,/obj/item/borg/sight))
sight_mode |= module_state_1:sight_mode
update_icon()
else if(!module_state_2)
module_state_2 = O
O.hud_layerise()
@@ -291,6 +304,7 @@
contents += O
if(istype(module_state_2,/obj/item/borg/sight))
sight_mode |= module_state_2:sight_mode
update_icon()
else if(!module_state_3)
module_state_3 = O
O.hud_layerise()
@@ -298,6 +312,7 @@
contents += O
if(istype(module_state_3,/obj/item/borg/sight))
sight_mode |= module_state_3:sight_mode
update_icon()
else
to_chat(src, span_notice("You need to disable a module first!"))
return

View File

@@ -340,7 +340,7 @@
module_state_2:screen_loc = ui_inv2
if(module_state_3)
module_state_3:screen_loc = ui_inv3
update_icon()
//update_icon() //Removed and moved to robot/inventory.dm so it's not being called EVERY LIFE TICK
/mob/living/silicon/robot/proc/process_killswitch()
if(killswitch)

View File

@@ -1500,7 +1500,7 @@
else
return FALSE
if(given_type == /obj/item/borg/upgrade/restricted/tasercooler)
var/obj/item/gun/energy/taser/mounted/cyborg/T = has_upgrade_module(/obj/item/gun/energy/taser/mounted/cyborg)
var/obj/item/gun/energy/robotic/taser/T = has_upgrade_module(/obj/item/gun/energy/robotic/taser)
if(T && T.recharge_time <= 2)
return T
else if(!T)

View File

@@ -33,7 +33,7 @@
can_be_pushed = 0
/obj/item/robot_module/robot/exploration/New(var/mob/living/silicon/robot/R)
src.modules += new /obj/item/dogborg/sleeper/exploration(src)
src.modules += new /obj/item/gun/energy/locked/phasegun/unlocked/mounted/cyborg(src)
src.modules += new /obj/item/gun/energy/robotic/phasegun(src)
src.modules += new /obj/item/cataloguer(src)
src.modules += new /obj/item/roller_holder(src)
src.modules += new /obj/item/gun/energy/taser/mounted/cyborg/flare(src)

View File

@@ -29,7 +29,7 @@
src.modules += new /obj/item/robotanalyzer(src)
// Potato
src.emag += new /obj/item/gun/energy/retro/mounted(src)
src.emag += new /obj/item/gun/energy/robotic/laser/retro(src)
var/datum/matter_synth/wire = new /datum/matter_synth/wire()
synths += wire
@@ -68,7 +68,7 @@
src.modules += new /obj/item/gripper/gravekeeper(src)
// For really persistent looters
src.emag += new /obj/item/gun/energy/retro/mounted(src)
src.emag += new /obj/item/gun/energy/robotic/laser/retro(src)
var/datum/matter_synth/wood = new /datum/matter_synth/wood(50000) //CHOMPEdit - "Buffing this to 50k on account of broken code not letting us pick up more stacks. Wee."
synths += wood

View File

@@ -517,13 +517,13 @@ var/global/list/robot_modules = list(
..()
src.modules += new /obj/item/handcuffs/cyborg(src)
src.modules += new /obj/item/melee/baton/robot(src)
src.modules += new /obj/item/gun/energy/taser/mounted/cyborg(src)
src.modules += new /obj/item/gun/energy/robotic/taser(src)
src.modules += new /obj/item/taperoll/police(src)
src.modules += new /obj/item/reagent_containers/spray/pepper(src)
src.modules += new /obj/item/gripper/security(src)
src.modules += new /obj/item/ticket_printer(src) //VOREStation Add
src.modules += new /obj/item/gun/energy/locked/phasegun/unlocked/mounted/cyborg(src) // CHOMPedit: Phasegun for regular sec cyborg.
src.emag += new /obj/item/gun/energy/laser/mounted(src)
src.modules += new /obj/item/gun/energy/robotic/phasegun(src) // CHOMPedit: Phasegun for regular sec cyborg.
src.emag += new /obj/item/gun/energy/robotic/laser/rifle(src)
src.modules += new /obj/item/dogborg/sleeper/K9(src) //Eat criminals. Bring them to the brig.
src.modules += new /obj/item/dogborg/pounce(src) //Pounce
@@ -722,7 +722,7 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/gripper/miner(src)
src.modules += new /obj/item/mining_scanner(src)
src.modules += new /obj/item/card/id/cargo/miner/borg(src)
src.modules += new /obj/item/gun/energy/locked/phasegun/unlocked/mounted/cyborg(src) //CHOMPedit: Phasegun for regular mining cyborg.
src.modules += new /obj/item/gun/energy/robotic/phasegun(src) //CHOMPedit: Phasegun for regular mining cyborg.
src.modules += new /obj/item/vac_attachment(src) //CHOMPAdd
src.emag += new /obj/item/kinetic_crusher/machete/dagger(src)
@@ -757,7 +757,7 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/storage/part_replacer(src)
src.modules += new /obj/item/shockpaddles/robot/jumper(src)
src.modules += new /obj/item/melee/baton/slime/robot(src)
src.modules += new /obj/item/gun/energy/taser/xeno/robot(src)
src.modules += new /obj/item/gun/energy/robotic/taser/xeno(src)
src.modules += new /obj/item/xenoarch_multi_tool(src)
src.modules += new /obj/item/pickaxe/excavationdrill(src)
@@ -801,15 +801,15 @@ var/global/list/robot_modules = list(
..()
src.modules += new /obj/item/handcuffs/cyborg(src)
src.modules += new /obj/item/taperoll/police(src)
src.modules += new /obj/item/gun/energy/laser/mounted(src)
src.modules += new /obj/item/gun/energy/taser/mounted/cyborg/ertgun(src)
src.modules += new /obj/item/gun/energy/robotic/laser/rifle(src)
src.modules += new /obj/item/gun/energy/robotic/disabler(src)
src.modules += new /obj/item/pickaxe/plasmacutter/borg(src)
src.modules += new /obj/item/melee/combat_borgblade(src)
src.modules += new /obj/item/melee/robotic/dagger(src)
src.modules += new /obj/item/borg/combat/shield(src)
src.modules += new /obj/item/borg/combat/mobility(src)
src.modules += new /obj/item/melee/borg_combat_shocker(src)
src.modules += new /obj/item/melee/robotic/borg_combat_shocker(src)
src.modules += new /obj/item/ticket_printer(src)
src.emag += new /obj/item/gun/energy/lasercannon/mounted(src)
src.emag += new /obj/item/gun/energy/robotic/laser/heavy(src)
src.modules += new /obj/item/dogborg/sleeper/K9/ert(src)
src.modules += new /obj/item/dogborg/pounce(src)
@@ -930,5 +930,5 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/pickaxe/borgdrill(src)
src.modules += new /obj/item/storage/bag/ore(src)
src.modules += new /obj/item/storage/bag/sheetsnatcher/borg(src)
src.modules += new /obj/item/gun/energy/locked/phasegun/unlocked/mounted/cyborg(src) //Chompedit, makes the mining borg able to defend itself.
src.modules += new /obj/item/gun/energy/robotic/phasegun(src) //Chompedit, makes the mining borg able to defend itself.
src.emag += new /obj/item/pickaxe/diamonddrill(src)

View File

@@ -12,7 +12,7 @@
src.modules += new /obj/item/flash/robot(src)
src.modules += new /obj/item/handcuffs/cable/tape/cyborg(src)
src.modules += new /obj/item/melee/baton/robot(src)
src.modules += new /obj/item/gun/energy/taser/mounted/cyborg/swarm(src)
src.modules += new /obj/item/gun/energy/robotic/taser/swarm(src)
src.modules += new /obj/item/matter_decompiler/swarm(src)
/obj/item/robot_module/drone/swarm/ranged

View File

@@ -53,7 +53,7 @@
/obj/item/robot_module/robot/syndicate/protector/create_equipment(var/mob/living/silicon/robot/robot)
..()
src.modules += new /obj/item/shield_projector/rectangle/weak(src)
src.modules += new /obj/item/gun/energy/dakkalaser(src)
src.modules += new /obj/item/gun/energy/robotic/laser/dakkalaser(src)
src.modules += new /obj/item/handcuffs/cyborg(src)
src.modules += new /obj/item/melee/baton/robot(src)

View File

@@ -2,6 +2,7 @@
var/name
var/module_type
var/default_sprite = FALSE
var/sprite_flags
var/sprite_icon
var/sprite_icon_state
@@ -27,7 +28,60 @@
var/whitelist_ckey
var/whitelist_charname
/// Determines if the borg has the proper flags to show an overlay.
/datum/robot_sprite/proc/sprite_flag_check(var/flag_to_check)
return (sprite_flags & flag_to_check)
/datum/robot_sprite/proc/handle_extra_icon_updates(var/mob/living/silicon/robot/ourborg)
if(ourborg.resting) //Don't do ANY of the overlay code if we're resting. It just won't look right!
return
if(sprite_flag_check(ROBOT_HAS_SHIELD_SPEED_SPRITE))
if(ourborg.has_active_type(/obj/item/borg/combat/shield) && ourborg.has_active_type(/obj/item/borg/combat/mobility))
ourborg.add_overlay("[sprite_icon_state]-speed_shield")
return //Stop here. No need to add more overlays. Nothing else is compatible.
if(sprite_flag_check(ROBOT_HAS_SPEED_SPRITE) && ourborg.has_active_type(/obj/item/borg/combat/mobility))
ourborg.icon_state = "[sprite_icon_state]-roll"
return //Stop here. No need to add more overlays. Nothing else is compatible.
if(sprite_flag_check(ROBOT_HAS_SHIELD_SPRITE))
if(ourborg.has_active_type(/obj/item/borg/combat/shield))
var/obj/item/borg/combat/shield/shield = locate() in ourborg
if(shield && shield.active)
ourborg.add_overlay("[sprite_icon_state]-shield")
for(var/thing_to_check in ourborg.get_active_modules()) //We look at our active modules. Let's peep!
//Melee Check
if(istype(thing_to_check, /obj/item/melee/robotic))
var/obj/item/melee/robotic/melee = thing_to_check
if(sprite_flag_check(ROBOT_HAS_MELEE_SPRITE) && melee.weapon_flag_check(COUNTS_AS_ROBOTIC_MELEE))
ourborg.add_overlay("[sprite_icon_state]-melee")
continue
if(sprite_flag_check(ROBOT_HAS_DAGGER_SPRITE) && melee.weapon_flag_check(COUNTS_AS_ROBOT_DAGGER))
ourborg.add_overlay("[sprite_icon_state]-dagger")
continue
if(sprite_flag_check(ROBOT_HAS_BLADE_SPRITE) && melee.weapon_flag_check(COUNTS_AS_ROBOT_BLADE))
ourborg.add_overlay("[sprite_icon_state]-blade")
continue
//Gun Check
if(istype(thing_to_check, /obj/item/gun/energy/robotic))
var/obj/item/gun/energy/robotic/gun = thing_to_check
if(sprite_flag_check(ROBOT_HAS_GUN_SPRITE) && gun.gun_flag_check(COUNTS_AS_ROBOT_GUN))
ourborg.add_overlay("[sprite_icon_state]-gun")
continue
if(sprite_flag_check(ROBOT_HAS_LASER_SPRITE) && gun.gun_flag_check(COUNTS_AS_ROBOT_LASER))
ourborg.add_overlay("[sprite_icon_state]-laser")
continue
if(sprite_flag_check(ROBOT_HAS_TASER_SPRITE) && gun.gun_flag_check(COUNTS_AS_ROBOT_TASER))
ourborg.add_overlay("[sprite_icon_state]-taser")
continue
if(sprite_flag_check(ROBOT_HAS_DISABLER_SPRITE) && gun.gun_flag_check(COUNTS_AS_ROBOT_DISABLER))
ourborg.add_overlay("[sprite_icon_state]-disabler")
continue
else //We are NEITHER a melee or a gun (Or whatever else you add in here in the future)
continue //Go on to the next.
return
/datum/robot_sprite/proc/get_belly_overlay(var/mob/living/silicon/robot/ourborg, var/size = 1, var/b_class) //CHOMPEdit, allows use of our multi belly system

View File

@@ -4,18 +4,6 @@
module_type = "Combat"
sprite_icon = 'icons/mob/robot/combat.dmi'
var/has_speed_sprite = FALSE
var/has_shield_sprite = FALSE
/datum/robot_sprite/combat/handle_extra_icon_updates(var/mob/living/silicon/robot/ourborg)
if(has_speed_sprite && istype(ourborg.module_active, /obj/item/borg/combat/mobility))
ourborg.icon_state = "[sprite_icon_state]-roll"
if(has_shield_sprite)
if(ourborg.has_active_type(/obj/item/borg/combat/shield))
var/obj/item/borg/combat/shield/shield = locate() in ourborg
if(shield && shield.active)
ourborg.add_overlay("[sprite_icon_state]-shield")
/datum/robot_sprite/combat/default
name = DEFAULT_ROBOT_SPRITE_NAME
default_sprite = TRUE
@@ -24,17 +12,15 @@
/datum/robot_sprite/combat/marina
name = "Haruka"
sprite_icon_state = "marina"
has_speed_sprite = TRUE
has_shield_sprite = TRUE
sprite_flags = ROBOT_HAS_SPEED_SPRITE | ROBOT_HAS_SHIELD_SPRITE
/datum/robot_sprite/combat/droid
name = "Android"
sprite_icon_state = "droid"
has_speed_sprite = TRUE
has_shield_sprite = TRUE
sprite_flags = ROBOT_HAS_SPEED_SPRITE | ROBOT_HAS_SHIELD_SPRITE
/datum/robot_sprite/combat/droid/get_eyes_overlay(var/mob/living/silicon/robot/ourborg)
if(istype(ourborg.module_active,/obj/item/borg/combat/mobility))
if(ourborg.has_active_type(/obj/item/borg/combat/mobility))
return
else
return ..()
@@ -42,32 +28,30 @@
/datum/robot_sprite/combat/insekt
name = "Insekt"
sprite_icon_state = "insekt"
has_shield_sprite = TRUE
sprite_flags = ROBOT_HAS_SHIELD_SPRITE
/datum/robot_sprite/combat/decapod
name = "Decapod"
sprite_icon_state = "decapod"
has_custom_open_sprites = TRUE
has_shield_sprite = TRUE
sprite_flags = ROBOT_HAS_SHIELD_SPRITE
/datum/robot_sprite/combat/mechoid
name = "Acheron"
sprite_icon_state = "mechoid"
has_speed_sprite = TRUE
has_shield_sprite = TRUE
sprite_flags = ROBOT_HAS_SPEED_SPRITE | ROBOT_HAS_SHIELD_SPRITE
/datum/robot_sprite/combat/zoomba
name = "ZOOM-BA"
sprite_icon_state = "zoomba"
has_dead_sprite = TRUE
has_speed_sprite = TRUE
has_shield_sprite = TRUE
sprite_flags = ROBOT_HAS_SPEED_SPRITE | ROBOT_HAS_SHIELD_SPRITE
/datum/robot_sprite/combat/worm
name = "W02M"
sprite_icon_state = "worm-combat" //CHOMPEdit
has_custom_open_sprites = TRUE
has_shield_sprite = TRUE
sprite_flags = ROBOT_HAS_SHIELD_SPRITE
sprite_icon = 'modular_chomp/icons/mob/wormborg.dmi' //CHOMPEdit
has_vore_belly_sprites = TRUE //CHOMPEdit
has_dead_sprite = TRUE //CHOMPEdit
@@ -91,33 +75,17 @@
sprite_icon = 'icons/mob/robot/combat_large.dmi'
has_custom_equipment_sprites = TRUE
var/has_gun_sprite = FALSE
var/has_speed_sprite = FALSE
var/has_shield_sprite = FALSE
/datum/robot_sprite/dogborg/tall/combat/handle_extra_icon_updates(var/mob/living/silicon/robot/ourborg)
if(has_gun_sprite && (istype(ourborg.module_active, /obj/item/gun/energy/laser/mounted) || istype(ourborg.module_active, /obj/item/gun/energy/taser/mounted/cyborg/ertgun) || istype(ourborg.module_active, /obj/item/gun/energy/lasercannon/mounted)))
ourborg.add_overlay("[sprite_icon_state]-gun")
if(has_speed_sprite && (istype(ourborg.module_active, /obj/item/borg/combat/mobility)))
ourborg.icon_state = "[sprite_icon_state]-roll"
if(has_shield_sprite)
if(ourborg.has_active_type(/obj/item/borg/combat/shield))
var/obj/item/borg/combat/shield/shield = locate() in ourborg
if(shield && shield.active)
ourborg.add_overlay("[sprite_icon_state]-shield")
/datum/robot_sprite/dogborg/tall/combat/do_equipment_glamour(var/obj/item/robot_module/module)
if(!has_custom_equipment_sprites)
return
..()
var/obj/item/melee/combat_borgblade/CBB = locate() in module.modules
var/obj/item/melee/robotic/dagger/CBB = locate() in module.modules
if(CBB)
CBB.name = "sword tail"
CBB.desc = "A glowing dagger normally attached to the end of a cyborg's tail. It appears to be extremely sharp."
var/obj/item/melee/borg_combat_shocker/BCS = locate() in module.modules
var/obj/item/melee/robotic/borg_combat_shocker/BCS = locate() in module.modules
if(BCS)
BCS.name = "combat jaws"
BCS.desc = "Shockingly chompy!"
@@ -130,7 +98,7 @@
name = "ERT"
sprite_icon_state = "derg"
rest_sprite_options = list("Default")
has_gun_sprite = TRUE
sprite_flags = ROBOT_HAS_GUN_SPRITE
/datum/robot_sprite/dogborg/tall/combat/hound
name = "Hound"
@@ -151,23 +119,21 @@
sprite_icon_state = "raptor"
sprite_hud_icon_state = "ert"
rest_sprite_options = list("Default", "Bellyup")
has_gun_sprite = TRUE
has_eye_light_sprites = TRUE
has_shield_sprite = TRUE
has_speed_sprite = TRUE
sprite_flags = ROBOT_HAS_GUN_SPRITE | ROBOT_HAS_SHIELD_SPRITE | ROBOT_HAS_SPEED_SPRITE
/datum/robot_sprite/dogborg/tall/combat/raptor/get_eyes_overlay(var/mob/living/silicon/robot/ourborg)
if(istype(ourborg.module_active,/obj/item/borg/combat/mobility))
if(ourborg.has_active_type(/obj/item/borg/combat/mobility))
return
else
return ..()
/datum/robot_sprite/dogborg/tall/combat/raptor/get_eye_light_overlay(var/mob/living/silicon/robot/ourborg)
if(istype(ourborg.module_active,/obj/item/borg/combat/mobility))
if(ourborg.has_active_type(/obj/item/borg/combat/mobility))
return
else
return ..()
/datum/robot_sprite/dogborg/tall/combat/raptor/get_belly_overlay(var/mob/living/silicon/robot/ourborg)
if(istype(ourborg.module_active,/obj/item/borg/combat/mobility))
if(ourborg.has_active_type(/obj/item/borg/combat/mobility))
return
else
return ..()

View File

@@ -8,19 +8,10 @@
module_type = "Lost"
sprite_icon = 'icons/mob/robot/lost.dmi'
var/has_shield_sprite = FALSE
/datum/robot_sprite/lost/handle_extra_icon_updates(var/mob/living/silicon/robot/ourborg)
if(has_shield_sprite)
if(ourborg.has_active_type(/obj/item/borg/combat/shield))
var/obj/item/borg/combat/shield/shield = locate() in ourborg
if(shield && shield.active)
ourborg.add_overlay("[sprite_icon_state]-shield")
/datum/robot_sprite/lost/drone
name = "AG Model"
sprite_icon_state = "drone"
has_shield_sprite = TRUE
sprite_flags = ROBOT_HAS_SHIELD_SPRITE
// Wide/dogborg sprites
@@ -54,23 +45,10 @@
sprite_icon = 'icons/mob/robot/lost_large.dmi'
sprite_hud_icon_state = "lost"
var/has_shield_sprite = FALSE
var/has_laser_sprite = FALSE
/datum/robot_sprite/dogborg/tall/lost/handle_extra_icon_updates(var/mob/living/silicon/robot/ourborg)
if(has_laser_sprite && istype(ourborg.module_active, /obj/item/gun/energy/retro/mounted))
ourborg.add_overlay("[sprite_icon_state]-laser")
if(has_shield_sprite)
if(ourborg.has_active_type(/obj/item/borg/combat/shield))
var/obj/item/borg/combat/shield/shield = locate() in ourborg
if(shield && shield.active)
ourborg.add_overlay("[sprite_icon_state]-shield")
/datum/robot_sprite/dogborg/tall/lost/raptor
name = "Raptor V-4"
sprite_icon_state = "raptor"
has_shield_sprite = TRUE
has_laser_sprite = TRUE
sprite_flags = ROBOT_HAS_SHIELD_SPRITE | ROBOT_HAS_LASER_SPRITE
// Gravekeeper
@@ -82,24 +60,15 @@
sprite_icon = 'icons/mob/robot/gravekeeper.dmi'
sprite_hud_icon_state = "lost"
var/has_shield_sprite = FALSE
/datum/robot_sprite/gravekeeper/handle_extra_icon_updates(var/mob/living/silicon/robot/ourborg)
if(has_shield_sprite)
if(ourborg.has_active_type(/obj/item/borg/combat/shield))
var/obj/item/borg/combat/shield/shield = locate() in ourborg
if(shield && shield.active)
ourborg.add_overlay("[sprite_icon_state]-shield")
/datum/robot_sprite/gravekeeper/drone
name = "AG Model"
sprite_icon_state = "drone"
has_shield_sprite = TRUE
sprite_flags = ROBOT_HAS_SHIELD_SPRITE
/datum/robot_sprite/gravekeeper/sleek
name = "WTOperator"
sprite_icon_state = "sleek"
has_shield_sprite = TRUE
sprite_flags = ROBOT_HAS_SHIELD_SPRITE
// Tall sprites
@@ -109,20 +78,7 @@
sprite_icon = 'icons/mob/robot/gravekeeper_large.dmi'
sprite_hud_icon_state = "lost"
var/has_shield_sprite = FALSE
var/has_laser_sprite = FALSE
/datum/robot_sprite/dogborg/tall/gravekeeper/handle_extra_icon_updates(var/mob/living/silicon/robot/ourborg)
if(has_laser_sprite && istype(ourborg.module_active, /obj/item/gun/energy/retro/mounted))
ourborg.add_overlay("[sprite_icon_state]-laser")
if(has_shield_sprite)
if(ourborg.has_active_type(/obj/item/borg/combat/shield))
var/obj/item/borg/combat/shield/shield = locate() in ourborg
if(shield && shield.active)
ourborg.add_overlay("[sprite_icon_state]-shield")
/datum/robot_sprite/dogborg/tall/gravekeeper/raptor
name = "Raptor V-4"
sprite_icon_state = "raptor"
has_shield_sprite = TRUE
has_laser_sprite = TRUE
sprite_flags = ROBOT_HAS_SHIELD_SPRITE | ROBOT_HAS_LASER_SPRITE

View File

@@ -84,12 +84,6 @@
whitelist_ckey = "jademanique"
whitelist_charname = "B.A.U-Kingside"
/datum/robot_sprite/fluff/jademanique/handle_extra_icon_updates(var/mob/living/silicon/robot/ourborg)
if(istype(ourborg.module_active, /obj/item/gun/energy/laser/mounted))
ourborg.add_overlay("[sprite_icon_state]-laser")
if(istype(ourborg.module_active, /obj/item/gun/energy/taser/mounted/cyborg))
ourborg.add_overlay("[sprite_icon_state]-taser")
// L
/datum/robot_sprite/fluff/lunarfleet

View File

@@ -150,11 +150,6 @@
/datum/robot_sprite/dogborg/tall/science
module_type = "Research"
sprite_icon = 'icons/mob/robot/science_large.dmi'
var/has_taser_sprite = FALSE
/datum/robot_sprite/dogborg/tall/science/handle_extra_icon_updates(var/mob/living/silicon/robot/ourborg)
if(has_taser_sprite && istype(ourborg.module_active, /obj/item/gun/energy/taser/xeno/robot))
ourborg.add_overlay("[sprite_icon_state]-taser")
/datum/robot_sprite/dogborg/tall/science/do_equipment_glamour(var/obj/item/robot_module/module)
if(!has_custom_equipment_sprites)
@@ -173,7 +168,7 @@
name = "Raptor V-4"
sprite_icon_state = "raptor"
has_custom_equipment_sprites = TRUE
has_taser_sprite = TRUE
sprite_flags = ROBOT_HAS_TASER_SPRITE
rest_sprite_options = list("Default", "Bellyup")
/datum/robot_sprite/dogborg/tall/science/meka

View File

@@ -124,38 +124,26 @@
module_type = "Security"
sprite_icon = 'icons/mob/robot/security_wide.dmi'
var/has_laser_sprite = FALSE
var/has_taser_sprite = FALSE
/datum/robot_sprite/dogborg/security/handle_extra_icon_updates(var/mob/living/silicon/robot/ourborg)
if(has_laser_sprite && istype(ourborg.module_active, /obj/item/gun/energy/laser/mounted))
ourborg.add_overlay("[sprite_icon_state]-laser")
if(has_taser_sprite && istype(ourborg.module_active, /obj/item/gun/energy/taser/mounted/cyborg))
ourborg.add_overlay("[sprite_icon_state]-taser")
/datum/robot_sprite/dogborg/security/k9
name = "K9"
sprite_icon_state = "k9"
sprite_hud_icon_state = "k9"
has_eye_light_sprites = TRUE
has_laser_sprite = TRUE
has_taser_sprite = TRUE
sprite_flags = ROBOT_HAS_TASER_SPRITE | ROBOT_HAS_LASER_SPRITE
/datum/robot_sprite/dogborg/security/k92
name = "K9 Alt"
sprite_icon_state = "k92"
sprite_hud_icon_state = "k9"
has_eye_sprites = FALSE
has_laser_sprite = TRUE
has_taser_sprite = TRUE
sprite_flags = ROBOT_HAS_TASER_SPRITE | ROBOT_HAS_LASER_SPRITE
/datum/robot_sprite/dogborg/security/vale
name = "Hound V2"
sprite_icon_state = "vale"
sprite_hud_icon_state = "k9"
has_eye_light_sprites = TRUE
has_laser_sprite = TRUE
has_taser_sprite = TRUE
sprite_flags = ROBOT_HAS_TASER_SPRITE | ROBOT_HAS_LASER_SPRITE
/datum/robot_sprite/dogborg/security/borgi
name = "Borgi"
@@ -170,14 +158,12 @@
sprite_icon_state = "otie"
sprite_hud_icon_state = "k9"
has_eye_light_sprites = TRUE
has_laser_sprite = TRUE
has_taser_sprite = TRUE
sprite_flags = ROBOT_HAS_TASER_SPRITE | ROBOT_HAS_LASER_SPRITE
/datum/robot_sprite/dogborg/security/drake
name = "Drake"
sprite_icon_state = "drake"
has_laser_sprite = TRUE
has_taser_sprite = TRUE
sprite_flags = ROBOT_HAS_TASER_SPRITE | ROBOT_HAS_LASER_SPRITE
// Tall sprites
@@ -185,21 +171,11 @@
module_type = "Security"
sprite_icon = 'icons/mob/robot/security_large.dmi'
var/has_laser_sprite = FALSE
var/has_taser_sprite = FALSE
/datum/robot_sprite/dogborg/tall/security/handle_extra_icon_updates(var/mob/living/silicon/robot/ourborg)
if(has_laser_sprite && istype(ourborg.module_active, /obj/item/gun/energy/laser/mounted))
ourborg.add_overlay("[sprite_icon_state]-laser")
if(has_taser_sprite && istype(ourborg.module_active, /obj/item/gun/energy/taser/mounted/cyborg))
ourborg.add_overlay("[sprite_icon_state]-taser")
/datum/robot_sprite/dogborg/tall/security/raptor
name = "Raptor V-4"
sprite_icon_state = "raptor"
has_custom_equipment_sprites = TRUE
has_laser_sprite = TRUE
has_taser_sprite = TRUE
sprite_flags = ROBOT_HAS_TASER_SPRITE | ROBOT_HAS_LASER_SPRITE
rest_sprite_options = list("Default", "Bellyup")
/datum/robot_sprite/dogborg/tall/security/meka

View File

@@ -114,17 +114,11 @@
sprite_icon = 'icons/mob/robot/syndie_large.dmi'
sprite_hud_icon_state = "malf"
var/has_gun_sprite = FALSE
/datum/robot_sprite/dogborg/tall/protector/handle_extra_icon_updates(var/mob/living/silicon/robot/ourborg)
if(has_gun_sprite && istype (ourborg.module_active, /obj/item/gun/energy/dakkalaser))
ourborg.add_overlay("[sprite_icon_state]-gun")
/datum/robot_sprite/dogborg/tall/protector/syndiprotraptor
name = "Raptor V-4"
sprite_icon_state = "syndiprotraptor"
has_eye_light_sprites = TRUE
has_gun_sprite = TRUE
sprite_flags = ROBOT_HAS_GUN_SPRITE
rest_sprite_options = list("Default", "Bellyup")
// Mechanist

View File

@@ -64,8 +64,7 @@
modules += bandaid
synths += medicine
var/obj/item/gun/energy/locked/phasegun/unlocked/mounted/cyborg/phasegun = new(src) //CHOMP Edit
modules += phasegun
modules += new /obj/item/gun/energy/robotic/phasegun(src) //CHOMP Edit
emag += new /obj/item/chainsaw(src)

View File

@@ -0,0 +1,279 @@
/// This file PRIMARILY contains guns for borgs. The key word being PRIMARILY.
/// Some things are included in here for relevence's sake (like the dogborg blade)
/obj/item/gun/energy/robotic/proc/gun_flag_check(var/flag_to_check) //Checks for the flag of the gun.
return (borg_flags & flag_to_check)
/obj/item/melee/robotic/proc/weapon_flag_check(var/flag_to_check) //Checks for the flag of the gun.
return (borg_flags & flag_to_check)
/// The base gun types. Build off these four.
/obj/item/gun/energy/robotic
name = "Cybernetic Gun"
desc = "A gun commonly used by cyborgs and other robotic lifeforms to stun"
var/borg_flags = COUNTS_AS_ROBOT_GUN //We add flags to this!
self_recharge = 1
use_external_power = 1
projectile_type = /obj/item/projectile/beam/lasertag //This is the base gun and should never be used.
/obj/item/gun/energy/robotic/laser
borg_flags = COUNTS_AS_ROBOT_GUN | COUNTS_AS_ROBOT_LASER
projectile_type = /obj/item/projectile/beam
/obj/item/gun/energy/robotic/taser
name = "Cybernetic Taser"
desc = "An integrated taser that is used to neutralize foes."
borg_flags = COUNTS_AS_ROBOT_GUN | COUNTS_AS_ROBOT_TASER
icon_state = "taser"
item_state = null //so the human update icon uses the icon_state instead.
projectile_type = /obj/item/projectile/beam/stun
charge_cost = 400
recharge_time = 7 //Time it takes for shots to recharge (in ticks)
/obj/item/gun/energy/robotic/disabler
borg_flags = COUNTS_AS_ROBOT_GUN | COUNTS_AS_ROBOT_DISABLER
name = "disabler"
desc = "A small and nonlethal gun produced by NT.."
icon = 'icons/mob/dogborg_vr.dmi'
icon_state = "ertgunstun"
fire_sound = 'sound/weapons/eLuger.ogg'
projectile_type = /obj/item/projectile/beam/disable
charge_cost = 240
recharge_time = 10
/// Variant gun types
/// Tasers
/obj/item/gun/energy/robotic/taser/xeno
name = "xeno taser gun"
desc = "Straight out of NT's testing laboratories, this small gun is used to subdue non-humanoid xeno life forms. \
While marketed towards handling slimes, it may be useful for other creatures."
icon_state = "taserblue"
fire_sound = 'sound/weapons/taser2.ogg'
charge_cost = 120
projectile_type = /obj/item/projectile/beam/stun/xeno
accuracy = 30
description_info = "This gun will stun a slime or other lesser slimy lifeform for about two seconds if hit with the projectile it fires."
description_fluff = "An easy to use weapon designed by NanoTrasen, for NanoTrasen. This weapon is based on the NT Mk30 NL, \
it's core components swaped out for a new design made to subdue lesser slime-based xeno lifeforms at a distance. It is \
ineffective at stunning non-slimy lifeforms such as humanoids."
recharge_time = 3
/obj/item/gun/energy/robotic/taser/swarm
name = "disabler"
desc = "An archaic device which attacks the target's nervous-system or control circuits."
icon_state = "disabler"
projectile_type = /obj/item/projectile/beam/stun/disabler
charge_cost = 800
recharge_time = 5 //0.5 SECONDS
/// Lasers
/obj/item/gun/energy/robotic/laser/retro
name = "retro laser"
icon_state = "retro"
item_state = "retro"
desc = "A 23rd century model of the basic lasergun. Nevertheless, it is still quite deadly and easy to maintain, making it a favorite amongst pirates and other outlaws."
projectile_type = /obj/item/projectile/beam
fire_delay = 10
/obj/item/gun/energy/robotic/laser/rifle
name = "Mounted Laser Rifle"
desc = "A Hephaestus Industries G40E rifle, designed to kill with concentrated energy blasts. This variant has the ability to \
switch between standard fire and a more efficent but weaker 'suppressive' fire."
description_fluff = "The leading arms producer in the SCG, Hephaestus typically only uses its 'top level' branding for its military-grade equipment used by armed forces across human space."
icon_state = "laser"
item_state = "laser"
wielded_item_state = "laser-wielded"
fire_delay = 8
force = 10
projectile_type = /obj/item/projectile/beam/midlaser
firemodes = list(
list(mode_name="normal", fire_delay=8, projectile_type=/obj/item/projectile/beam/midlaser, charge_cost = 240),
list(mode_name="suppressive", fire_delay=5, projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 60),
)
one_handed_penalty = 0
/obj/item/gun/energy/robotic/laser/heavy
name = "mounted laser cannon"
desc = "With the laser cannon, the lasing medium is enclosed in a tube lined with uranium-235 and subjected to high neutron \
flux in a nuclear reactor core. This incredible technology may help YOU achieve high excitation rates with small laser volumes!"
icon_state = "lasercannon"
item_state = null
wielded_item_state = "mhdhowitzer-wielded" //Placeholder (Sure it is.)
projectile_type = /obj/item/projectile/beam/heavylaser //Fun fact: This isn't actually the normal cannon.
recharge_time = 10
accuracy = 0
one_handed_penalty = 0
charge_cost = 400
fire_delay = 20
/obj/item/gun/energy/robotic/laser/dakkalaser
name = "suppression gun"
desc = "A massive weapon designed to pressure the opposition by raining down a torrent of energy pellets."
icon_state = "dakkalaser"
item_state = "dakkalaser"
wielded_item_state = "dakkalaser-wielded"
charge_cost = 24
projectile_type = /obj/item/projectile/energy/blue_pellet
cell_type = /obj/item/cell/device/weapon/recharge //This one doesn't use borg power, it has it's own power cell. I don't know why, but I'm not here to balance/unbalance it.
self_recharge = 0 //Ditto
use_external_power = 0 //Ditto
accuracy = 75 // Suppressive weapons don't work too well if there's no risk of being hit.
burst_delay = 1 // Burst faster than average.
firemodes = list(
list(mode_name="single shot", burst = 1, burst_accuracy = list(75), dispersion = list(0), charge_cost = 24),
list(mode_name="five shot burst", burst = 5, burst_accuracy = list(75,75,75,75,75), dispersion = list(1,1,1,1,1)),
list(mode_name="ten shot burst", burst = 10, burst_accuracy = list(75,75,75,75,75,75,75,75,75,75), dispersion = list(2,2,2,2,2,2,2,2,2,2)),
)
/// MELEE WEAPONS
/obj/item/melee/robotic //Just the parent. Don't use this one.
name = "Robotic Appendage"
desc = "A robotic weapon of some sort."
icon = 'icons/mob/dogborg_vr.dmi'
icon_state = "swordtail"
var/borg_flags = COUNTS_AS_ROBOTIC_MELEE
/obj/item/melee/robotic/jaws
icon = 'icons/mob/dogborg_vr.dmi'
hitsound = 'sound/weapons/bite.ogg'
throwforce = 0
w_class = ITEMSIZE_NORMAL
pry = 1
tool_qualities = list(TOOL_CROWBAR)
/obj/item/melee/robotic/jaws/big
name = "combat jaws"
icon_state = "jaws"
desc = "The jaws of the law."
force = 25
armor_penetration = 25
defend_chance = 15
attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced")
/obj/item/melee/robotic/jaws/small
name = "puppy jaws"
icon_state = "smalljaws"
desc = "The jaws of a small dog."
force = 10
defend_chance = 5
attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed")
var/emagged = 0
/obj/item/melee/robotic/jaws/small/attack_self(mob/user)
var/mob/living/silicon/robot/R = user
if(R.emagged || R.emag_items)
emagged = !emagged
if(emagged)
name = "combat jaws"
icon_state = "jaws"
desc = "The jaws of the law."
force = 25
armor_penetration = 25
defend_chance = 15
attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced")
else
name = "puppy jaws"
icon_state = "smalljaws"
desc = "The jaws of a small dog."
force = 10
armor_penetration = 0
defend_chance = 5
attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed")
update_icon()
/obj/item/melee/robotic/borg_combat_shocker
name = "combat shocker"
icon = 'icons/mob/dogborg_vr.dmi'
icon_state = "combatshocker"
desc = "Shocking!"
force = 15
throwforce = 0
hitsound = 'sound/weapons/genhit1.ogg'
attack_verb = list("hit")
w_class = ITEMSIZE_NORMAL
var/charge_cost = 15
var/dogborg = FALSE
/obj/item/melee/robotic/borg_combat_shocker/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
if(isrobot(target))
return ..()
var/agony = 60 // Copied from stun batons
var/stun = 0 // ... same
var/obj/item/organ/external/affecting = null
if(ishuman(target))
var/mob/living/carbon/human/H = target
affecting = H.get_organ(hit_zone)
if(user.a_intent == I_HURT)
// Parent handles messages
. = ..()
//whacking someone causes a much poorer electrical contact than deliberately prodding them.
agony *= 0.5
stun *= 0.5
else
if(affecting)
if(dogborg)
target.visible_message(span_danger("[target] has been zap-chomped in the [affecting.name] with [src] by [user]!"))
else
target.visible_message(span_danger("[target] has been zapped in the [affecting.name] with [src] by [user]!"))
else
if(dogborg)
target.visible_message(span_danger("[target] has been zap-chomped with [src] by [user]!"))
else
target.visible_message(span_danger("[target] has been zapped with [src] by [user]!"))
playsound(src, 'sound/weapons/Egloves.ogg', 50, 1, -1)
// Try to use power
var/stunning = FALSE
if(isrobot(loc))
var/mob/living/silicon/robot/R = loc
if(R.cell?.use(charge_cost) == charge_cost)
stunning = TRUE
if(stunning)
target.stun_effect_act(stun, agony, hit_zone, src)
msg_admin_attack("[key_name(user)] stunned [key_name(target)] with the [src].")
if(ishuman(target))
var/mob/living/carbon/human/H = target
H.forcesay(hit_appends)
/obj/item/melee/robotic/blade //For downstreams that use blade
name = "Robotic Blade"
desc = "A glowing blade. It appears to be extremely sharp."
borg_flags = COUNTS_AS_ROBOTIC_MELEE | COUNTS_AS_ROBOT_BLADE
icon = 'icons/mob/dogborg_vr.dmi'
icon_state = "swordtail"
force = 35 //Takes 3 hits to 100-0
armor_penetration = 70
sharp = TRUE
edge = TRUE
throwforce = 0 //This shouldn't be thrown in the first place.
hitsound = 'sound/weapons/blade1.ogg'
attack_verb = list("slashed", "stabbed", "jabbed", "mauled", "sliced")
w_class = ITEMSIZE_NORMAL
/obj/item/melee/robotic/dagger //For downstreams that use dagger
name = "Robotic Dagger"
desc = "A glowing dagger. It appears to be extremely sharp."
borg_flags = COUNTS_AS_ROBOTIC_MELEE | COUNTS_AS_ROBOT_DAGGER
icon = 'icons/mob/dogborg_vr.dmi'
icon_state = "swordtail"
force = 35 //Takes 3 hits to 100-0
armor_penetration = 70
sharp = TRUE
edge = TRUE
throwforce = 0 //This shouldn't be thrown in the first place.
hitsound = 'sound/weapons/blade1.ogg'
attack_verb = list("slashed", "stabbed", "jabbed", "mauled", "sliced")
w_class = ITEMSIZE_NORMAL

View File

@@ -6,12 +6,6 @@
if(water.energy < 5)
. += span_notice("[src] is dry.")
/obj/item/gun/energy/taser/mounted/cyborg/flare
name = "flare gun"
desc = "A flare-gun"
projectile_type = /obj/item/projectile/energy/flash/flare
fire_sound = 'sound/weapons/tablehit1.ogg'
/obj/item/shield_projector/line/exploborg
name = "expirmental shield projector"
description_info = "This creates a shield in a straight line perpendicular to the direction where the user was facing when it was activated. \
@@ -23,41 +17,6 @@
line_length = 7 // How long the line is. Recommended to be an odd number.
offset_from_center = 2 // How far from the projector will the line's center be.
/obj/item/melee/combat_borgblade/explotailspear
name = "energy tail"
desc = "A glowing tail spear with a moderate range. It appears to be extremely sharp."
force = 45
armor_penetration = 25 //30 to try and make it not useless against armored mobs but not fully nullify it.
reach = 3
projectile_parry_chance = 15.
/obj/item/melee/dogborg/jaws/big/explojaws
name = "explo jaws"
desc = "Highly lethal jaws for close range combat."
force = 60
armor_penetration = 25 //To try and make it not useless against armored mobs but not fully nullify it
projectile_parry_chance = 15
/obj/item/gun/energy/medigun/mounted/smallmedigun
name = "borg directed restoration system"
desc = "An adapted version of the BL-3 'Phoenix, for expiremental useage in borgs."
projectile_type = /obj/item/projectile/beam/medical_cell/borg
accept_cell_type = /obj/item/cell/device
cell_type = /obj/item/cell/device/weapon
charge_cost = 600
fire_delay = 6
/obj/item/projectile/beam/medical_cell/borg
range = 4
/obj/item/projectile/beam/medical_cell/borg/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
if(target.stat != DEAD)
target.adjustBruteLoss(-3.75)
target.adjustFireLoss(-3.75)
else
return 1
// To repair a single module
/obj/item/self_repair_system
name = "plating repair system"
@@ -133,3 +92,69 @@
power_tick = 10
repair_time = 15
repair_amount = 3
// Robot Weapons
/obj/item/gun/energy/robotic/flare
name = "flare gun"
desc = "A flare-gun"
projectile_type = /obj/item/projectile/energy/flash/flare
fire_sound = 'sound/weapons/tablehit1.ogg'
icon = 'icons/obj/gun.dmi'
icon_state = "taser"
charge_cost = 480
borg_flags = COUNTS_AS_ROBOT_GUN | COUNTS_AS_ROBOT_TASER
/obj/item/gun/energy/robotic/smallmedigun
name = "borg directed restoration system"
desc = "An adapted version of the BL-3 'Phoenix, for expiremental useage in borgs."
projectile_type = /obj/item/projectile/beam/medical_cell/borg
accept_cell_type = /obj/item/cell/device
cell_type = /obj/item/cell/device/weapon
charge_cost = 600
fire_delay = 6
force = 5
icon_state = "medbeam"
icon = 'icons/obj/gun_vr.dmi'
accuracy = 100
fire_sound = 'sound/weapons/eluger.ogg'
self_recharge = 1
use_external_power = 1
/obj/item/projectile/beam/medical_cell/borg
range = 4
/obj/item/projectile/beam/medical_cell/borg/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
if(target.stat != DEAD)
target.adjustBruteLoss(-3.75)
target.adjustFireLoss(-3.75)
else
return 1
/obj/item/melee/robotic/blade/explotailspear
name = "energy tail"
desc = "A glowing tail spear with a moderate range. It appears to be extremely sharp."
force = 45
armor_penetration = 25 //30 to try and make it not useless against armored mobs but not fully nullify it.
reach = 3
projectile_parry_chance = 15.
/obj/item/melee/robotic/jaws/big/explojaws
name = "explo jaws"
desc = "Highly lethal jaws for close range combat."
force = 60
armor_penetration = 25 //To try and make it not useless against armored mobs but not fully nullify it
projectile_parry_chance = 15
/obj/item/gun/energy/robotic/phasegun
name = "EW26 Artemis Mounted"
desc = "The RayZar EW26 Artemis, also known as the 'phase carbine', is a downsized energy-based weapon specifically designed for use against wildlife. This one has a safety interlock that prevents firing while in proximity to the facility." //ChompEDIT
description_fluff = "RayZar is Ward-Takahashis main consumer weapons brand, known for producing and licensing a wide variety of specialist energy weapons of various types and quality primarily for the civilian market."
icon = 'icons/obj/gun.dmi'
icon_state = "phasecarbine"
charge_cost = 160
recharge_time = 16
projectile_type = /obj/item/projectile/energy/phase
use_external_power = 1
self_recharge = 1
borg_flags = COUNTS_AS_ROBOT_GUN | COUNTS_AS_ROBOT_LASER

View File

@@ -29,15 +29,15 @@
/obj/item/robot_module/robot/exploration/New(var/mob/living/silicon/robot/R)
src.modules += new /obj/item/dogborg/sleeper/exploration(src)
src.modules += new /obj/item/cataloguer(src)
src.modules += new /obj/item/gun/energy/taser/mounted/cyborg/flare(src)
src.modules += new /obj/item/gun/energy/robotic/flare(src)
src.modules += new /obj/item/dogborg/pounce(src)
src.modules += new /obj/item/melee/combat_borgblade/explotailspear(src)
src.modules += new /obj/item/gun/energy/medigun/mounted/smallmedigun(src)
src.modules += new /obj/item/melee/robotic/blade/explotailspear(src)
src.modules += new /obj/item/gun/energy/robotic/smallmedigun(src)
src.modules += new /obj/item/shield_projector/line/exploborg(src)
src.modules += new /obj/item/roller_holder(src)
src.modules += new /obj/item/self_repair_system(src)
src.modules += new /obj/item/card/id/exploration/borg(src)
src.emag += new /obj/item/melee/dogborg/jaws/big/explojaws(src)
src.emag += new /obj/item/melee/robotic/jaws/big/explojaws(src)
..()

View File

@@ -27,17 +27,7 @@
/datum/robot_sprite/dogborg/wide/combat
module_type = "Combat"
has_custom_equipment_sprites = TRUE
var/has_gun_sprite = FALSE
var/has_taser_sprite = FALSE
var/has_blade_sprite = FALSE
/datum/robot_sprite/dogborg/wide/combat/handle_extra_icon_updates(var/mob/living/silicon/robot/ourborg)
if(has_gun_sprite && (istype(ourborg.module_active, /obj/item/gun/energy/laser/mounted) || istype(ourborg.module_active, /obj/item/gun/energy/lasercannon/mounted)))
ourborg.add_overlay("[sprite_icon_state]-laser")
if (has_taser_sprite && (istype(ourborg.module_active, /obj/item/gun/energy/taser/mounted/cyborg/ertgun)))
ourborg.add_overlay("[sprite_icon_state]-taser")
if (has_blade_sprite && (istype(ourborg.module_active, /obj/item/melee/combat_borgblade)))
ourborg.add_overlay("[sprite_icon_state]-blade")
has_eye_sprites = FALSE
/datum/robot_sprite/dogborg/wide/combat/blade/do_equipment_glamour(var/obj/item/robot_module/module)
if(!has_custom_equipment_sprites)
@@ -45,11 +35,11 @@
..()
var/obj/item/melee/combat_borgblade/CBB = locate() in module.modules
var/obj/item/melee/robotic/blade/CBB = locate() in module.modules
if(CBB)
CBB.name = "combat saw"
CBB.desc = "A high frequency blade attached to the end of a cyborg's tail. It appears to be extremely sharp."
var/obj/item/melee/borg_combat_shocker/BCS = locate() in module.modules
var/obj/item/melee/robotic/borg_combat_shocker/BCS = locate() in module.modules
if(BCS)
BCS.name = "combat jaws"
BCS.desc = "Shockingly chompy!"
@@ -64,6 +54,4 @@
sprite_icon_state = "blade"
sprite_hud_icon_state = "ert"
rest_sprite_options = list()
has_gun_sprite = TRUE
has_taser_sprite = TRUE
has_blade_sprite = TRUE
sprite_flags = ROBOT_HAS_LASER_SPRITE | ROBOT_HAS_DISABLER_SPRITE | ROBOT_HAS_DAGGER_SPRITE

View File

@@ -4,8 +4,6 @@
sprite_icon_state = "secvale"
sprite_hud_icon_state = "k9"
has_eye_light_sprites = TRUE
has_laser_sprite = FALSE //Missing from the dmi
has_taser_sprite = FALSE //ditto
/datum/robot_sprite/dogborg/security/cat
name = "Cat"
@@ -13,8 +11,6 @@
sprite_icon_state = "vixsec"
sprite_hud_icon_state = "k9"
has_eye_light_sprites = TRUE
has_laser_sprite = FALSE //Missing from the dmi
has_taser_sprite = FALSE //ditto
/datum/robot_sprite/dogborg/tall/security/dullahan
@@ -25,8 +21,6 @@
name = "Dullahan"
sprite_icon_state = "dullahansec"
sprite_hud_icon_state = "k9"
has_laser_sprite = FALSE //Missing from the dmi
has_taser_sprite = FALSE //ditto
has_eye_light_sprites = TRUE
has_vore_belly_sprites = TRUE
@@ -34,8 +28,6 @@
name = "Dullahan v2"
sprite_icon_state = "dullahansec_alt"
sprite_hud_icon_state = "k9"
has_laser_sprite = FALSE //Missing from the dmi
has_taser_sprite = FALSE //ditto
has_eye_light_sprites = TRUE
has_vore_belly_sprites = TRUE

Binary file not shown.

Before

Width:  |  Height:  |  Size: 190 KiB

After

Width:  |  Height:  |  Size: 169 KiB

View File

@@ -46,6 +46,7 @@
#include "code\__defines\belly_modes_ch.dm"
#include "code\__defines\belly_modes_vr.dm"
#include "code\__defines\blueprints.dm"
#include "code\__defines\borg_overlays.dm"
#include "code\__defines\callbacks.dm"
#include "code\__defines\chat.dm"
#include "code\__defines\chemistry.dm"
@@ -4088,6 +4089,7 @@
#include "code\modules\projectiles\guns\energy\altevian_vr.dm"
#include "code\modules\projectiles\guns\energy\bsharpoon_vr.dm"
#include "code\modules\projectiles\guns\energy\crestrose_vr.dm"
#include "code\modules\projectiles\guns\energy\cyborg.dm"
#include "code\modules\projectiles\guns\energy\dominator_vr.dm"
#include "code\modules\projectiles\guns\energy\gunsword_vr.dm"
#include "code\modules\projectiles\guns\energy\hooklauncher.dm"