diff --git a/code/game/objects/items/trash_vr.dm b/code/game/objects/items/trash_vr.dm index fc2d9971825..08fbdda5b6f 100644 --- a/code/game/objects/items/trash_vr.dm +++ b/code/game/objects/items/trash_vr.dm @@ -12,7 +12,7 @@ if(isrobot(M)) var/mob/living/silicon/robot/R = M - if(R.module.type == /obj/item/weapon/robot_module/robot/janitor/scrubpup) // You can now feed the trash borg yay. + if(R.module.type == /obj/item/weapon/robot_module/robot/janitor) // You can now feed the trash borg yay. playsound(src,'sound/items/eatfood.ogg', rand(10,50), 1) user.drop_item() forceMove(R.vore_selected) diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 3fdba7eaa94..01e0d7f2df6 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -469,8 +469,8 @@ // ----------------------------- // Food Bag (Service Hound) // ----------------------------- -/obj/item/weapon/storage/bag/dogborg - name = "dog bag" +/obj/item/weapon/storage/bag/serviceborg + name = "service bag" icon = 'icons/obj/storage_vr.dmi' icon_state = "foodbag" desc = "An intergrated bag for storing things of all kinds." diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 365507aa1b2..a484aa3efef 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -162,7 +162,7 @@ /obj/structure/door_assembly/attack_robot(mob/living/silicon/robot/user) if(Adjacent(user) && (user.module && (istype(user.module,/obj/item/weapon/robot_module/robot/engineering)) \ - || istype(user.module,/obj/item/weapon/robot_module/drone))) //Only dron (and engiborg) needs this. + || istype(user.module,/obj/item/weapon/robot_module/drone))) //Only drone (and engiborg) needs this. rename_door(user) /obj/structure/door_assembly/attackby(obj/item/W as obj, mob/user as mob) diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 2ab86a5bf0a..855e7fac117 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -77,7 +77,7 @@ /obj/structure/windoor_assembly/attack_robot(mob/living/silicon/robot/user) if(Adjacent(user) && (user.module && (istype(user.module,/obj/item/weapon/robot_module/robot/engineering)) \ - || istype(user.module,/obj/item/weapon/robot_module/drone))) //Only dron (and engiborg) needs this. + || istype(user.module,/obj/item/weapon/robot_module/drone))) //Only drone (and engiborg) needs this. rename_door(user) /obj/structure/windoor_assembly/attackby(obj/item/W as obj, mob/user as mob) diff --git a/code/global.dm b/code/global.dm index ae3ae2baa14..a313f42e31b 100644 --- a/code/global.dm +++ b/code/global.dm @@ -143,7 +143,7 @@ var/list/robot_module_types = list( ) // List of modules added during code red var/list/emergency_module_types = list( - "Combat", "ERT" + "Combat" ) // List of modules available to AI shells var/list/shell_module_types = list( @@ -151,7 +151,7 @@ var/list/shell_module_types = list( ) // List of whitelisted modules var/list/whitelisted_module_types = list( - "Lost", "Stray" + "Lost" ) // Some scary sounds. diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm index 5c9cb67364b..48d5b89ceec 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm @@ -48,19 +48,20 @@ update_icon() // Baton chompers -/obj/item/weapon/dogborg/jaws/ert - name = "ert jaws" +/obj/item/weapon/borg_combat_shocker + name = "combat shocker" icon = 'icons/mob/dogborg_vr.dmi' - icon_state = "ertjaws" - desc = "Shockingly chompy!" + icon_state = "combatshocker" + desc = "Shocking!" force = 15 throwforce = 0 - hitsound = 'sound/weapons/bite.ogg' - attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced") + hitsound = 'sound/weapons/genhit1.ogg' + attack_verb = list("hit") w_class = ITEMSIZE_NORMAL var/charge_cost = 15 + var/dogborg = FALSE -/obj/item/weapon/dogborg/jaws/ert/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) +/obj/item/weapon/borg_combat_shocker/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) if(isrobot(target)) return ..() @@ -80,9 +81,15 @@ stun *= 0.5 else if(affecting) - target.visible_message("[target] has been zap-chomped in the [affecting.name] with [src] by [user]!") + if(dogborg) + target.visible_message("[target] has been zap-chomped in the [affecting.name] with [src] by [user]!") + else + target.visible_message("[target] has been zapped in the [affecting.name] with [src] by [user]!") else - target.visible_message("[target] has been zap-chomped with [src] by [user]!") + if(dogborg) + target.visible_message("[target] has been zap-chomped with [src] by [user]!") + else + target.visible_message("[target] has been zapped with [src] by [user]!") playsound(src, 'sound/weapons/Egloves.ogg', 50, 1, -1) // Try to use power @@ -223,28 +230,19 @@ //Tongue stuff -/obj/item/device/dogborg/tongue +/obj/item/device/robot_tongue name = "synthetic tongue" desc = "Useful for slurping mess off the floor before affectionately licking the crew members in the face." icon = 'icons/mob/dogborg_vr.dmi' icon_state = "synthtongue" hitsound = 'sound/effects/attackblob.ogg' var/emagged = 0 - var/datum/matter_synth/water = null -/obj/item/device/dogborg/tongue/New() +/obj/item/device/robot_tongue/New() ..() flags |= NOBLUDGEON //No more attack messages -/obj/item/device/dogborg/tongue/examine(user) - . = ..() - if(Adjacent(user)) - if(water.energy) - . += "[src] is wet. Just like it should be." - if(water.energy < 5) - . += "[src] is dry." - -/obj/item/device/dogborg/tongue/attack_self(mob/user) +/obj/item/device/robot_tongue/attack_self(mob/user) var/mob/living/silicon/robot/R = user if(R.emagged || R.emag_items) emagged = !emagged @@ -260,29 +258,14 @@ icon_state = "synthtongue" update_icon() -/obj/item/device/dogborg/tongue/afterattack(atom/target, mob/user, proximity) +/obj/item/device/robot_tongue/afterattack(atom/target, mob/user, proximity) if(!proximity) return user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) if(user.client && (target in user.client.screen)) to_chat(user, "You need to take \the [target.name] off before cleaning it!") - if(istype(target, /obj/structure/sink) || istype(target, /obj/structure/toilet)) //Dog vibes. - user.visible_message("[user] begins to lap up water from [target.name].", "You begin to lap up water from [target.name].") - if(do_after (user, 50)) - water.add_charge(50) - to_chat(src, "You refill some of your water reserves.") - else if(water.energy < 5) - to_chat(user, "Your mouth feels dry. You should drink up some water .") return - else if(istype(target,/obj/effect/decal/cleanable)) - user.visible_message("[user] begins to lick off \the [target.name].", "You begin to lick off \the [target.name]...") - if(do_after (user, 50)) - to_chat(user, "You finish licking off \the [target.name].") - water.use_charge(5) - qdel(target) - var/mob/living/silicon/robot/R = user - R.cell.charge += 50 else if(istype(target,/obj/item)) if(istype(target,/obj/item/trash)) user.visible_message("[user] nibbles away at \the [target.name].", "You begin to nibble away at \the [target.name]...") @@ -292,7 +275,6 @@ qdel(target) var/mob/living/silicon/robot/R = user R.cell.charge += 250 - water.use_charge(5) return if(istype(target,/obj/item/weapon/cell)) user.visible_message("[user] begins cramming \the [target.name] down its throat.", "You begin cramming \the [target.name] down your throat...") @@ -302,16 +284,8 @@ var/mob/living/silicon/robot/R = user var/obj/item/weapon/cell/C = target R.cell.charge += C.charge / 3 - water.use_charge(5) qdel(target) return - user.visible_message("[user] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...") - if(do_after (user, 50)) - to_chat(user, "You clean \the [target.name].") - water.use_charge(5) - var/obj/effect/decal/cleanable/C = locate() in target - qdel(C) - target.clean_blood() else if(ishuman(target)) if(src.emagged) var/mob/living/silicon/robot/R = user @@ -328,21 +302,9 @@ else user.visible_message("\The [user] affectionately licks all over \the [target]'s face!", "You affectionately lick all over \the [target]'s face!") playsound(src, 'sound/effects/attackblob.ogg', 50, 1) - water.use_charge(5) var/mob/living/carbon/human/H = target if(H.species.lightweight == 1) H.Weaken(3) - else - user.visible_message("[user] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...") - if(do_after (user, 50)) - to_chat(user, "You clean \the [target.name].") - var/obj/effect/decal/cleanable/C = locate() in target - qdel(C) - target.clean_blood() - water.use_charge(5) - if(istype(target, /turf/simulated)) - var/turf/simulated/T = target - T.dirt = 0 return /obj/item/pupscrubber @@ -378,11 +340,11 @@ recharge_time = 10 //Takes ten ticks to recharge a shot, so don't waste them all! //cell_type = null //Same cell as a taser until edits are made. -/obj/item/weapon/dogborg/swordtail - name = "sword tail" +/obj/item/weapon/combat_borgblade + name = "energy blade" icon = 'icons/mob/dogborg_vr.dmi' icon_state = "swordtail" - desc = "A glowing pink dagger normally attached to the end of a cyborg's tail. It appears to be extremely sharp." + desc = "A glowing dagger. It appears to be extremely sharp." force = 20 //Takes 5 hits to 100-0 sharp = TRUE edge = TRUE diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm index 7fda7ef0a5e..eb6eb754b5e 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm @@ -36,7 +36,6 @@ var/datum/matter_synth/glass = null var/datum/matter_synth/wood = null var/datum/matter_synth/plastic = null - var/datum/matter_synth/water = null var/digest_brute = 2 var/digest_burn = 3 var/digest_multiplier = 1 @@ -577,7 +576,6 @@ if(air_master.current_cycle%3==1 && length(touchable_items)) //Burn all the mobs or add them to the exclusion list - var/volume = 0 for(var/mob/living/T in (touchable_items)) touchable_items -= T //Exclude mobs from loose item picking. if((T.status_flags & GODMODE) || !T.digestable) @@ -591,8 +589,6 @@ var/actual_burn = T.getFireLoss() - old_burn var/damage_gain = actual_brute + actual_burn drain(-25 * damage_gain) //25*total loss as with voreorgan stats. - if(water) - water.add_charge(damage_gain) if(T.stat == DEAD) if(ishuman(T)) message_admins("[key_name(hound)] has digested [key_name(T)] as a dogborg. ([hound ? "JMP" : "null"])") @@ -626,15 +622,6 @@ items_preserved |= brain else T.drop_from_inventory(I, src) - if(ishuman(T)) - var/mob/living/carbon/human/Prey = T - volume = (Prey.bloodstr.total_volume + Prey.ingested.total_volume + Prey.touching.total_volume + Prey.weight) * Prey.size_multiplier - if(water) - water.add_charge(volume) - if(T.reagents) - volume = T.reagents.total_volume - if(water) - water.add_charge(volume) if(T.ckey) GLOB.prey_digested_roundstat++ if(patient == T) @@ -650,8 +637,6 @@ //Handle the target being anything but a /mob/living var/obj/item/T = target if(istype(T)) - if(T.reagents) - volume = T.reagents.total_volume var/digested = T.digest_act(item_storage = src) if(!digested) items_preserved |= T @@ -661,8 +646,6 @@ for(var/tech in tech_item.origin_tech) files.UpdateTech(tech, tech_item.origin_tech[tech]) synced = FALSE - if(volume && water) - water.add_charge(volume) if(recycles && T.matter) for(var/material in T.matter) var/total_material = T.matter[material] @@ -765,6 +748,15 @@ name = "Brew Belly" desc = "A mounted drunk tank unit with fuel processor." icon_state = "brewer" + max_item_count = 10 + recycles = FALSE + +/obj/item/device/dogborg/sleeper/compactor/generic + name = "Internal Cache" + desc = "An internal storage of no particularly specific purpose.." + icon_state = "sleeperd" + max_item_count = 10 + recycles = FALSE /obj/item/device/dogborg/sleeper/K9/ert name = "ERT Belly" diff --git a/code/modules/mob/living/silicon/robot/login.dm b/code/modules/mob/living/silicon/robot/login.dm index cce5f9f6f71..3d11703e9f3 100644 --- a/code/modules/mob/living/silicon/robot/login.dm +++ b/code/modules/mob/living/silicon/robot/login.dm @@ -12,4 +12,8 @@ if(!icon_selected) icon_selection_tries = SSrobot_sprites.get_module_sprites_len(modtype, src) + 1 choose_icon(icon_selection_tries) - plane_holder.set_vis(VIS_AUGMENTED, TRUE) //VOREStation Add - ROBOT VISION IS AUGMENTED \ No newline at end of file + + if(sprite_datum && module) + sprite_datum.do_equipment_glamour(module) + + plane_holder.set_vis(VIS_AUGMENTED, TRUE) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot_modules/event.dm b/code/modules/mob/living/silicon/robot/robot_modules/event.dm index db545667fb0..f6605b5a028 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/event.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/event.dm @@ -5,7 +5,7 @@ name = "lost robot module" hide_on_manifest = TRUE -/obj/item/weapon/robot_module/robot/lost/New(var/mob/living/silicon/robot/R) +/obj/item/weapon/robot_module/robot/lost/create_equipment(var/mob/living/silicon/robot/robot) ..() // Sec src.modules += new /obj/item/weapon/melee/baton/shocker/robot(src) @@ -14,6 +14,7 @@ // Med src.modules += new /obj/item/device/healthanalyzer(src) + src.modules += new /obj/item/weapon/shockpaddles/robot(src) src.modules += new /obj/item/weapon/reagent_containers/borghypo/lost(src) // Engi @@ -36,11 +37,14 @@ C.synths = list(wire) src.modules += C + src.modules += new /obj/item/device/dogborg/sleeper(src) + src.modules += new /obj/item/weapon/dogborg/pounce(src) + /obj/item/weapon/robot_module/robot/gravekeeper name = "gravekeeper robot module" hide_on_manifest = TRUE -/obj/item/weapon/robot_module/robot/gravekeeper/New(var/mob/living/silicon/robot/R) +/obj/item/weapon/robot_module/robot/gravekeeper/create_equipment(var/mob/living/silicon/robot/robot) ..() // For fending off animals and looters src.modules += new /obj/item/weapon/melee/baton/shocker/robot(src) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/event_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules/event_vr.dm deleted file mode 100644 index 4e8ed600bc7..00000000000 --- a/code/modules/mob/living/silicon/robot/robot_modules/event_vr.dm +++ /dev/null @@ -1,46 +0,0 @@ -/obj/item/weapon/robot_module/robot/stray - name = "stray robot module" - hide_on_manifest = 1 - -/obj/item/weapon/robot_module/robot/stray/New(var/mob/living/silicon/robot/R) - ..() - // General - //src.modules += new /obj/item/device/dogborg/boop_module(src) - - // Sec - src.modules += new /obj/item/weapon/handcuffs/cyborg(src) - src.modules += new /obj/item/weapon/dogborg/jaws/big(src) - src.modules += new /obj/item/weapon/melee/baton/robot(src) - src.modules += new /obj/item/weapon/dogborg/pounce(src) - - // Med - src.modules += new /obj/item/device/healthanalyzer(src) - src.modules += new /obj/item/weapon/shockpaddles/robot/hound(src) - - // Engi - src.modules += new /obj/item/weapon/weldingtool/electric/mounted(src) - src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src) - src.modules += new /obj/item/weapon/tool/wrench/cyborg(src) - src.modules += new /obj/item/weapon/tool/wirecutters/cyborg(src) - src.modules += new /obj/item/device/multitool(src) - - // Boof - src.emag += new /obj/item/weapon/gun/energy/retro/mounted(src) - - var/datum/matter_synth/water = new /datum/matter_synth(500) //Starts full and has a max of 500 - water.name = "Water reserves" - water.recharge_rate = 0 - R.water_res = water - synths += water - - var/obj/item/weapon/reagent_containers/borghypo/hound/lost/H = new /obj/item/weapon/reagent_containers/borghypo/hound/lost(src) - H.water = water - src.modules += H - - var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src) - T.water = water - src.modules += T - - var/obj/item/device/dogborg/sleeper/B = new /obj/item/device/dogborg/sleeper(src) - B.water = water - src.modules += B \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm index 9b6140ce549..666de996056 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm @@ -1,15 +1,15 @@ var/global/list/robot_modules = list( "Standard" = /obj/item/weapon/robot_module/robot/standard, - "Service" = /obj/item/weapon/robot_module/robot/clerical/butler/general, + "Service" = /obj/item/weapon/robot_module/robot/clerical/butler, "Clerical" = /obj/item/weapon/robot_module/robot/clerical/general, - "Research" = /obj/item/weapon/robot_module/robot/research/general, - "Miner" = /obj/item/weapon/robot_module/robot/miner/general, + "Research" = /obj/item/weapon/robot_module/robot/research, + "Miner" = /obj/item/weapon/robot_module/robot/miner, "Crisis" = /obj/item/weapon/robot_module/robot/medical/crisis, "Surgeon" = /obj/item/weapon/robot_module/robot/medical/surgeon, "Security" = /obj/item/weapon/robot_module/robot/security/general, "Combat" = /obj/item/weapon/robot_module/robot/security/combat, - "Engineering" = /obj/item/weapon/robot_module/robot/engineering/general, - "Janitor" = /obj/item/weapon/robot_module/robot/janitor/general, + "Engineering" = /obj/item/weapon/robot_module/robot/engineering, + "Janitor" = /obj/item/weapon/robot_module/robot/janitor, "Gravekeeper" = /obj/item/weapon/robot_module/robot/gravekeeper, "Lost" = /obj/item/weapon/robot_module/robot/lost, "Protector" = /obj/item/weapon/robot_module/robot/syndicate/protector, @@ -79,10 +79,14 @@ var/global/list/robot_modules = list( if(!R.client) R.icon_selected = FALSE // It wasnt a player selecting icon? Let them do it later! + create_equipment() for(var/obj/item/I in modules) I.canremove = FALSE +/obj/item/weapon/robot_module/proc/create_equipment(var/mob/living/silicon/robot/robot) + return + /obj/item/weapon/robot_module/proc/Reset(var/mob/living/silicon/robot/R) remove_camera_networks(R) remove_languages(R) @@ -191,11 +195,18 @@ var/global/list/robot_modules = list( "Away Team" = 1 ) +/obj/item/weapon/robot_module/robot/New(var/mob/living/silicon/robot/R) + ..() + + if(R.sprite_datum) + R.sprite_datum.do_equipment_glamour(src) + // Cyborgs (non-drones), default loadout. This will be given to every module. -/obj/item/weapon/robot_module/robot/New() +/obj/item/weapon/robot_module/robot/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/device/gps/robot(src) src.modules += new /obj/item/device/boop_module(src) + src.modules += new /obj/item/device/robot_tongue(src) src.modules += new /obj/item/device/flash/robot(src) src.modules += new /obj/item/weapon/extinguisher(src) src.modules += new /obj/item/weapon/tool/crowbar/cyborg(src) @@ -204,13 +215,16 @@ var/global/list/robot_modules = list( name = "standard robot module" pto_type = PTO_CIVILIAN -/obj/item/weapon/robot_module/robot/standard/New() +/obj/item/weapon/robot_module/robot/standard/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/weapon/tool/wrench/cyborg(src) src.modules += new /obj/item/device/healthanalyzer(src) src.modules += new /obj/item/weapon/melee/baton/loaded(src) src.emag += new /obj/item/weapon/melee/energy/sword(src) + src.modules += new /obj/item/device/dogborg/sleeper/compactor/generic(src) + src.emag += new /obj/item/weapon/dogborg/pounce(src) + /obj/item/weapon/robot_module/robot/medical name = "medical robot module" channels = list("Medical" = 1) @@ -222,7 +236,7 @@ var/global/list/robot_modules = list( name = "surgeon robot module" -/obj/item/weapon/robot_module/robot/medical/surgeon/New() +/obj/item/weapon/robot_module/robot/medical/surgeon/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/device/healthanalyzer(src) src.modules += new /obj/item/device/sleevemate(src) @@ -237,7 +251,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/surgical/bonesetter/cyborg(src) src.modules += new /obj/item/weapon/surgical/circular_saw/cyborg(src) src.modules += new /obj/item/weapon/surgical/surgicaldrill/cyborg(src) - src.modules += new /obj/item/weapon/surgical/bioregen/cyborg(src) //VoreStation Edit: LET ME SUCC + src.modules += new /obj/item/weapon/surgical/bioregen/cyborg(src) src.modules += new /obj/item/weapon/gripper/no_use/organ(src) src.modules += new /obj/item/weapon/gripper/medical(src) src.modules += new /obj/item/weapon/shockpaddles/robot(src) @@ -249,8 +263,6 @@ var/global/list/robot_modules = list( PS.reagents.add_reagent("pacid", 250) PS.name = "Polyacid spray" - src.emag += new /obj/item/weapon/dogborg/pounce(src) //Pounce, also, lets not give them polyacid spray - var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(10000) synths += medicine @@ -271,6 +283,7 @@ var/global/list/robot_modules = list( src.modules += O src.modules += new /obj/item/device/dogborg/sleeper/trauma(src) + src.emag += new /obj/item/weapon/dogborg/pounce(src) /obj/item/weapon/robot_module/robot/medical/surgeon/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) @@ -290,7 +303,7 @@ var/global/list/robot_modules = list( /obj/item/weapon/robot_module/robot/medical/crisis name = "crisis robot module" -/obj/item/weapon/robot_module/robot/medical/crisis/New() +/obj/item/weapon/robot_module/robot/medical/crisis/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/device/healthanalyzer(src) src.modules += new /obj/item/device/sleevemate(src) @@ -303,7 +316,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/gripper/no_use/organ(src) src.modules += new /obj/item/weapon/gripper/medical(src) src.modules += new /obj/item/weapon/shockpaddles/robot(src) - src.modules += new /obj/item/weapon/inflatable_dispenser/robot(src) //VOREStation Add - This is kinda important for rescuing people without making it worse for everyone + src.modules += new /obj/item/weapon/inflatable_dispenser/robot(src) var/obj/item/weapon/reagent_containers/spray/PS = new /obj/item/weapon/reagent_containers/spray(src) src.emag += PS PS.reagents.add_reagent("pacid", 250) @@ -328,6 +341,9 @@ var/global/list/robot_modules = list( src.modules += B src.modules += S + src.modules += new /obj/item/device/dogborg/sleeper(src) + src.emag += new /obj/item/weapon/dogborg/pounce(src) //Pounce + /obj/item/weapon/robot_module/robot/medical/crisis/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) var/obj/item/weapon/reagent_containers/syringe/S = locate() in src.modules @@ -351,7 +367,7 @@ var/global/list/robot_modules = list( subsystems = list(/mob/living/silicon/proc/subsystem_power_monitor) pto_type = PTO_ENGINEERING -/obj/item/weapon/robot_module/robot/engineering/general/New() +/obj/item/weapon/robot_module/robot/engineering/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/borg/sight/meson(src) src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) @@ -361,17 +377,16 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/device/multitool(src) src.modules += new /obj/item/device/t_scanner(src) src.modules += new /obj/item/device/analyzer(src) + src.modules += new /obj/item/device/geiger(src) src.modules += new /obj/item/taperoll/engineering(src) src.modules += new /obj/item/weapon/gripper(src) src.modules += new /obj/item/weapon/gripper/circuit(src) src.modules += new /obj/item/device/lightreplacer(src) - // RPDs do this already - //src.modules += new /obj/item/device/pipe_painter(src) src.modules += new /obj/item/weapon/pipe_dispenser(src) src.modules += new /obj/item/device/floor_painter(src) + src.modules += new /obj/item/weapon/rms(src) src.modules += new /obj/item/weapon/inflatable_dispenser/robot(src) src.emag += new /obj/item/weapon/melee/baton/robot/arm(src) - src.modules += new /obj/item/device/geiger(src) src.modules += new /obj/item/weapon/rcd/electric/mounted/borg(src) src.modules += new /obj/item/weapon/pickaxe/plasmacutter/borg(src) src.modules += new /obj/item/weapon/gripper/no_use/loader(src) @@ -439,6 +454,15 @@ var/global/list/robot_modules = list( PL.synths = list(plastic) src.modules += PL + var/obj/item/device/dogborg/sleeper/compactor/decompiler/BD = new /obj/item/device/dogborg/sleeper/compactor/decompiler(src) + BD.metal = metal + BD.glass = glass + BD.wood = wood + BD.plastic = plastic + src.modules += BD + + src.emag += new /obj/item/weapon/dogborg/pounce(src) + /obj/item/weapon/robot_module/robot/security name = "security robot module" channels = list("Security" = 1) @@ -450,18 +474,20 @@ var/global/list/robot_modules = list( /obj/item/weapon/robot_module/robot/security/general name = "security robot module" -/obj/item/weapon/robot_module/robot/security/general/New() +/obj/item/weapon/robot_module/robot/security/general/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/weapon/handcuffs/cyborg(src) src.modules += new /obj/item/weapon/melee/baton/robot(src) src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg(src) - // src.modules += new /obj/item/weapon/gun/energy/taser/xeno/sec/robot(src) // VOREStation Edit - We don't need these src.modules += new /obj/item/taperoll/police(src) src.modules += new /obj/item/weapon/reagent_containers/spray/pepper(src) src.modules += new /obj/item/weapon/gripper/security(src) src.modules += new /obj/item/device/ticket_printer(src) //VOREStation Add src.emag += new /obj/item/weapon/gun/energy/laser/mounted(src) + src.modules += new /obj/item/device/dogborg/sleeper/K9(src) //Eat criminals. Bring them to the brig. + src.modules += new /obj/item/weapon/dogborg/pounce(src) //Pounce + /obj/item/weapon/robot_module/robot/security/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) var/obj/item/device/flash/F = locate() in src.modules if(F.broken) @@ -482,7 +508,7 @@ var/global/list/robot_modules = list( channels = list("Service" = 1) pto_type = PTO_CIVILIAN -/obj/item/weapon/robot_module/robot/janitor/general/New() +/obj/item/weapon/robot_module/robot/janitor/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/weapon/soap/nanotrasen(src) src.modules += new /obj/item/weapon/storage/bag/trash(src) @@ -494,7 +520,47 @@ var/global/list/robot_modules = list( LS.reagents.add_reagent("lube", 250) LS.name = "Lube spray" -/obj/item/weapon/robot_module/robot/janitor/general/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) + //Starts empty. Can only recharge with recycled material. + var/datum/matter_synth/metal = new /datum/matter_synth/metal() + metal.name = "Steel reserves" + metal.recharge_rate = 0 + metal.max_energy = 50000 + metal.energy = 0 + var/datum/matter_synth/glass = new /datum/matter_synth/glass() + glass.name = "Glass reserves" + glass.recharge_rate = 0 + glass.max_energy = 50000 + glass.energy = 0 + + synths += metal + synths += glass + + //Sheet refiners can only produce raw sheets. + var/obj/item/stack/material/cyborg/steel/M = new (src) + M.name = "steel recycler" + M.desc = "A device that refines recycled steel into sheets." + M.synths = list(metal) + M.recipes = list() + M.recipes += new/datum/stack_recipe("steel sheet", /obj/item/stack/material/steel, 1, 1, 20) + src.modules += M + + var/obj/item/stack/material/cyborg/glass/G = new (src) + G.name = "glass recycler" + G.desc = "A device that refines recycled glass into sheets." + G.material = get_material_by_name("placeholder") //Hacky shit but we want sheets, not windows. + G.synths = list(glass) + G.recipes = list() + G.recipes += new/datum/stack_recipe("glass sheet", /obj/item/stack/material/glass, 1, 1, 20) + src.modules += G + + var/obj/item/device/dogborg/sleeper/compactor/C = new /obj/item/device/dogborg/sleeper/compactor(src) + C.metal = metal + C.glass = glass + src.modules += C + + src.emag += new /obj/item/weapon/dogborg/pounce(src) //Pounce + +/obj/item/weapon/robot_module/robot/janitor/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) var/obj/item/device/lightreplacer/LR = locate() in src.modules LR.Charge(R, amount) @@ -532,17 +598,17 @@ var/global/list/robot_modules = list( /obj/item/weapon/robot_module/robot/clerical/butler channels = list("Service" = 1) -/obj/item/weapon/robot_module/robot/clerical/butler/general +/obj/item/weapon/robot_module/robot/clerical/butler name = "service robot module" -/obj/item/weapon/robot_module/robot/clerical/butler/general/New() +/obj/item/weapon/robot_module/robot/clerical/butler/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/weapon/gripper/service(src) src.modules += new /obj/item/weapon/reagent_containers/glass/bucket(src) src.modules += new /obj/item/weapon/material/minihoe(src) src.modules += new /obj/item/weapon/material/knife/machete/hatchet(src) src.modules += new /obj/item/device/analyzer/plant_analyzer(src) - src.modules += new /obj/item/weapon/storage/bag/plants(src) + src.modules += new /obj/item/weapon/storage/bag/serviceborg(src) src.modules += new /obj/item/weapon/robot_harvester(src) src.modules += new /obj/item/weapon/material/knife(src) src.modules += new /obj/item/weapon/material/kitchen/rollingpin(src) @@ -570,7 +636,11 @@ var/global/list/robot_modules = list( PB.name = "Auntie Hong's Final Sip" PB.desc = "A bottle of very special mix of alcohol and poison. Some may argue that there's alcohol to die for, but Auntie Hong took it to next level." -/obj/item/weapon/robot_module/robot/clerical/butler/general/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) + src.modules += new /obj/item/device/dogborg/sleeper/compactor/brewer(src) + + src.emag += new /obj/item/weapon/dogborg/pounce(src) //Pounce + +/obj/item/weapon/robot_module/robot/clerical/butler/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) var/obj/item/weapon/reagent_containers/food/condiment/enzyme/E = locate() in src.modules E.reagents.add_reagent("enzyme", 2 * amount) @@ -581,7 +651,7 @@ var/global/list/robot_modules = list( /obj/item/weapon/robot_module/robot/clerical/general name = "clerical robot module" -/obj/item/weapon/robot_module/robot/clerical/general/New() +/obj/item/weapon/robot_module/robot/clerical/general/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/weapon/pen/robopen(src) src.modules += new /obj/item/weapon/form_printer(src) @@ -592,6 +662,9 @@ var/global/list/robot_modules = list( src.emag += new /obj/item/weapon/stamp/chameleon(src) src.emag += new /obj/item/weapon/pen/chameleon(src) + src.modules += new /obj/item/device/dogborg/sleeper/compactor/generic(src) + src.emag += new /obj/item/weapon/dogborg/pounce(src) + /obj/item/weapon/robot_module/robot/miner name = "miner robot module" channels = list("Supply" = 1) @@ -599,7 +672,7 @@ var/global/list/robot_modules = list( supported_upgrades = list(/obj/item/borg/upgrade/pka, /obj/item/borg/upgrade/diamonddrill) pto_type = PTO_CARGO -/obj/item/weapon/robot_module/robot/miner/general/New() +/obj/item/weapon/robot_module/robot/miner/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/borg/sight/material(src) src.modules += new /obj/item/weapon/tool/wrench/cyborg(src) @@ -609,12 +682,10 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) src.modules += new /obj/item/weapon/gripper/miner(src) src.modules += new /obj/item/weapon/mining_scanner(src) - // New Emag gear for the minebots! src.emag += new /obj/item/weapon/kinetic_crusher/machete/dagger(src) - // No reason for these, upgrade modules replace them. - //src.emag = new /obj/item/weapon/pickaxe/plasmacutter/borg(src) - //src.emag = new /obj/item/weapon/pickaxe/diamonddrill(src) + src.modules += new /obj/item/device/dogborg/sleeper/compactor/supply(src) + src.emag += new /obj/item/weapon/dogborg/pounce(src) /obj/item/weapon/robot_module/robot/research name = "research module" @@ -622,7 +693,7 @@ var/global/list/robot_modules = list( supported_upgrades = list(/obj/item/borg/upgrade/advrped) pto_type = PTO_SCIENCE -/obj/item/weapon/robot_module/robot/research/general/New() +/obj/item/weapon/robot_module/robot/research/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/weapon/portable_destructive_analyzer(src) src.modules += new /obj/item/weapon/gripper/research(src) @@ -647,10 +718,6 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/gun/energy/taser/xeno/robot(src) src.modules += new /obj/item/device/xenoarch_multi_tool(src) src.modules += new /obj/item/weapon/pickaxe/excavationdrill(src) - //src.modules += new /obj/item/device/cataloguer(src) //VOREStation Removal - - - src.modules += new /obj/item/device/dogborg/sleeper/compactor/analyzer(src) src.emag += new /obj/item/weapon/hand_tele(src) @@ -669,7 +736,10 @@ var/global/list/robot_modules = list( C.synths = list(wire) src.modules += C -/obj/item/weapon/robot_module/robot/research/general/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) + src.modules += new /obj/item/device/dogborg/sleeper/compactor/analyzer(src) + src.emag += new /obj/item/weapon/dogborg/pounce(src) + +/obj/item/weapon/robot_module/robot/research/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) var/obj/item/weapon/reagent_containers/syringe/S = locate() in src.modules if(S.mode == 2) @@ -680,23 +750,26 @@ var/global/list/robot_modules = list( ..() - /obj/item/weapon/robot_module/robot/security/combat name = "combat robot module" hide_on_manifest = TRUE -/obj/item/weapon/robot_module/robot/security/combat/New() +/obj/item/weapon/robot_module/robot/security/combat/create_equipment(var/mob/living/silicon/robot/robot) ..() - src.modules += new /obj/item/device/flash(src) - //src.modules += new /obj/item/borg/sight/thermal(src) // VOREStation Edit + src.modules += new /obj/item/weapon/handcuffs/cyborg(src) + src.modules += new /obj/item/taperoll/police(src) src.modules += new /obj/item/weapon/gun/energy/laser/mounted(src) + src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg/ertgun(src) src.modules += new /obj/item/weapon/pickaxe/plasmacutter/borg(src) + src.modules += new /obj/item/weapon/combat_borgblade src.modules += new /obj/item/borg/combat/shield(src) src.modules += new /obj/item/borg/combat/mobility(src) - src.modules += new /obj/item/device/ticket_printer(src) //VOREStation Add + src.modules += new /obj/item/weapon/borg_combat_shocker + src.modules += new /obj/item/device/ticket_printer(src) src.emag += new /obj/item/weapon/gun/energy/lasercannon/mounted(src) src.modules += new /obj/item/device/dogborg/sleeper/K9/ert(src) + src.modules += new /obj/item/weapon/dogborg/pounce(src) /* Drones */ @@ -707,7 +780,7 @@ var/global/list/robot_modules = list( no_slip = 1 networks = list(NETWORK_ENGINEERING) -/obj/item/weapon/robot_module/drone/New(var/mob/living/silicon/robot/robot) +/obj/item/weapon/robot_module/drone/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/borg/sight/meson(src) src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) @@ -793,7 +866,7 @@ var/global/list/robot_modules = list( channels = list("Engineering" = 1) languages = list() -/obj/item/weapon/robot_module/drone/construction/New() +/obj/item/weapon/robot_module/drone/construction/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/weapon/rcd/electric/mounted/borg/lesser(src) @@ -808,7 +881,7 @@ var/global/list/robot_modules = list( channels = list("Supply" = 1) networks = list(NETWORK_MINE) -/obj/item/weapon/robot_module/drone/mining/New() +/obj/item/weapon/robot_module/drone/mining/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/borg/sight/material(src) src.modules += new /obj/item/weapon/pickaxe/borgdrill(src) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm deleted file mode 100644 index b95b3e798f6..00000000000 --- a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm +++ /dev/null @@ -1,515 +0,0 @@ -/obj/item/weapon/robot_module/robot/security/knine - name = "k9 robot module" - -/obj/item/weapon/robot_module/robot/security/knine/New(var/mob/living/silicon/robot/R) - src.modules += new /obj/item/weapon/handcuffs/cyborg(src) //You need cuffs to be a proper sec borg! - src.modules += new /obj/item/weapon/dogborg/jaws/big(src) //In case there's some kind of hostile mob. - src.modules += new /obj/item/weapon/melee/baton/robot(src) //Since the pounce module refused to work, they get a stunbaton instead. - //src.modules += new /obj/item/device/dogborg/boop_module(src) //Boop people on the nose. - src.modules += new /obj/item/taperoll/police(src) //Block out crime scenes. - src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg(src) //They /are/ a security borg, after all. - src.modules += new /obj/item/weapon/dogborg/pounce(src) //Pounce - src.modules += new /obj/item/device/ticket_printer(src) - src.emag = new /obj/item/weapon/gun/energy/laser/mounted(src) //Emag. Not a big problem. - - var/datum/matter_synth/water = new /datum/matter_synth(500) //Starts full and has a max of 500 - water.name = "Water reserves" - water.recharge_rate = 0 - R.water_res = water - synths += water - - var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src) - T.water = water - src.modules += T - - var/obj/item/device/dogborg/sleeper/K9/B = new /obj/item/device/dogborg/sleeper/K9(src) //Eat criminals. Bring them to the brig. - B.water = water - src.modules += B - ..() - -/obj/item/weapon/robot_module/robot/security/knine/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) - var/obj/item/device/flash/F = locate() in src.modules - if(F.broken) - F.broken = 0 - F.times_used = 0 - F.icon_state = "flash" - else if(F.times_used) - F.times_used-- - var/obj/item/weapon/gun/energy/taser/mounted/cyborg/T = locate() in src.modules - if(T.power_supply.charge < T.power_supply.maxcharge) - T.power_supply.give(T.charge_cost * amount) - T.update_icon() - else - T.charge_tick = 0 - /*var/obj/item/weapon/melee/baton/robot/B = locate() in src.modules //Borg baton uses borg cell. - if(B && B.bcell) - B.bcell.give(amount)*/ - - -/obj/item/weapon/robot_module/robot/medical/medihound - name = "MediHound module" - -/obj/item/weapon/robot_module/robot/medical/medihound/New(var/mob/living/silicon/robot/R) - src.modules += new /obj/item/weapon/dogborg/jaws/small(src) //In case a patient is being attacked by carp. - //src.modules += new /obj/item/device/dogborg/boop_module(src) //Boop the crew. - src.modules += new /obj/item/device/healthanalyzer(src) // See who's hurt specificially. - src.modules += new /obj/item/weapon/reagent_containers/syringe(src) //In case the chemist is nice! - src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src)//For holding the chemicals when the chemist is nice, made it the large variant in 2022 - src.modules += new /obj/item/device/sleevemate(src) //Lets them scan people. - src.modules += new /obj/item/weapon/shockpaddles/robot/hound(src) //Paws of life - src.modules += new /obj/item/weapon/inflatable_dispenser/robot(src) //This is kinda important for rescuing people without making it worse for everyone - src.modules += new /obj/item/weapon/gripper/medical(src) //Let them do literally anything in medbay other than patch external damage and lick people - src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src) //dropper is nice to have for so much actually - src.emag = new /obj/item/weapon/dogborg/pounce(src) //Pounce - - var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(10000) - synths += medicine - - var/obj/item/stack/medical/advanced/clotting/C = new (src) - var/obj/item/stack/medical/splint/S = new /obj/item/stack/medical/splint(src) - C.uses_charge = 1 - C.charge_costs = list(5000) - C.synths = list(medicine) - S.uses_charge = 1 - S.charge_costs = list(1000) - S.synths = list(medicine) - src.modules += C - src.modules += S - - var/datum/matter_synth/water = new /datum/matter_synth(500) - water.name = "Water reserves" - water.recharge_rate = 0 - R.water_res = water - synths += water - - var/obj/item/weapon/reagent_containers/borghypo/hound/H = new /obj/item/weapon/reagent_containers/borghypo/hound(src) - H.water = water - src.modules += H - - var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src) - T.water = water - src.modules += T - - var/obj/item/device/dogborg/sleeper/B = new /obj/item/device/dogborg/sleeper(src) //So they can nom people and heal them - B.water = water - src.modules += B - ..() - -/obj/item/weapon/robot_module/robot/medical/traumahound - name = "traumahound robot module" - -/obj/item/weapon/robot_module/robot/medical/traumahound/New(var/mob/living/silicon/robot/R) - src.modules += new /obj/item/weapon/dogborg/jaws/small(src) - src.modules += new /obj/item/weapon/shockpaddles/robot/hound(src) //Paws of life - - var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src) - //T.water = water - src.modules += T - ..() - -/obj/item/weapon/robot_module/robot/security/ert - name = "Emergency Responce module" - -/obj/item/weapon/robot_module/robot/security/ert/New(var/mob/living/silicon/robot/R) - src.modules += new /obj/item/weapon/handcuffs/cyborg(src) - src.modules += new /obj/item/weapon/dogborg/jaws/ert(src) - src.modules += new /obj/item/taperoll/police(src) - src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg/ertgun(src) - src.modules += new /obj/item/weapon/dogborg/swordtail(src) - src.emag = new /obj/item/weapon/gun/energy/laser/mounted(src) - - var/datum/matter_synth/water = new /datum/matter_synth(500) - water.name = "Water reserves" - water.recharge_rate = 0 - R.water_res = water - synths += water - - var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src) - T.water = water - src.modules += T - - var/obj/item/device/dogborg/sleeper/K9/B = new /obj/item/device/dogborg/sleeper/K9/ert(src) - B.water = water - src.modules += B - ..() - -/obj/item/weapon/robot_module/robot/janitor/scrubpup - name = "Custodial Hound module" - can_be_pushed = 0 - -/obj/item/weapon/robot_module/robot/janitor/scrubpup/New(var/mob/living/silicon/robot/R) - src.modules += new /obj/item/weapon/dogborg/jaws/small(src) - //src.modules += new /obj/item/device/dogborg/boop_module(src) - src.modules += new /obj/item/pupscrubber(src) - src.emag = new /obj/item/weapon/dogborg/pounce(src) //Pounce - - //Starts empty. Can only recharge with recycled material. - var/datum/matter_synth/metal = new /datum/matter_synth/metal() - metal.name = "Steel reserves" - metal.recharge_rate = 0 - metal.max_energy = 50000 - metal.energy = 0 - var/datum/matter_synth/glass = new /datum/matter_synth/glass() - glass.name = "Glass reserves" - glass.recharge_rate = 0 - glass.max_energy = 50000 - glass.energy = 0 - var/datum/matter_synth/water = new /datum/matter_synth(500) - water.name = "Water reserves" - water.recharge_rate = 0 - R.water_res = water - - synths += metal - synths += glass - synths += water - - var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src) - T.water = water - src.modules += T - - var/obj/item/device/lightreplacer/dogborg/LR = new /obj/item/device/lightreplacer/dogborg(src) - LR.glass = glass - src.modules += LR - - var/obj/item/device/dogborg/sleeper/compactor/C = new /obj/item/device/dogborg/sleeper/compactor(src) - C.metal = metal - C.glass = glass - C.water = water - src.modules += C - - //Sheet refiners can only produce raw sheets. - var/obj/item/stack/material/cyborg/steel/M = new (src) - M.name = "steel recycler" - M.desc = "A device that refines recycled steel into sheets." - M.synths = list(metal) - M.recipes = list() - M.recipes += new/datum/stack_recipe("steel sheet", /obj/item/stack/material/steel, 1, 1, 20) - src.modules += M - - var/obj/item/stack/material/cyborg/glass/G = new (src) - G.name = "glass recycler" - G.desc = "A device that refines recycled glass into sheets." - G.material = get_material_by_name("placeholder") //Hacky shit but we want sheets, not windows. - G.synths = list(glass) - G.recipes = list() - G.recipes += new/datum/stack_recipe("glass sheet", /obj/item/stack/material/glass, 1, 1, 20) - src.modules += G - ..() - -/obj/item/weapon/robot_module/robot/research/sciencehound - name = "Research Hound Module" - can_be_pushed = 0 - -/obj/item/weapon/robot_module/robot/research/sciencehound/New(var/mob/living/silicon/robot/R) - src.modules += new /obj/item/weapon/dogborg/jaws/small(src) - //src.modules += new /obj/item/device/dogborg/boop_module(src) - src.modules += new /obj/item/weapon/gripper/research(src) - src.modules += new /obj/item/weapon/gripper/no_use/loader(src) - src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src) - src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) - src.modules += new /obj/item/weapon/tool/wrench/cyborg(src) - src.modules += new /obj/item/weapon/tool/wirecutters/cyborg(src) - src.modules += new /obj/item/device/multitool(src) - src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src) - src.modules += new /obj/item/weapon/storage/part_replacer(src) - src.modules += new /obj/item/device/robotanalyzer(src) - src.modules += new /obj/item/weapon/card/robot(src) - //Added a circuit gripper - src.modules += new /obj/item/weapon/gripper/circuit(src) - src.modules += new /obj/item/weapon/gripper/no_use/organ/robotics(src) - //src.modules += new /obj/item/weapon/surgical/scalpel/cyborg(src) //these are on the normal one, but do not appear to have a purpose other than borging - //src.modules += new /obj/item/weapon/surgical/circular_saw/cyborg(src) //so I am leaving them here but commented out because robotics no do the borging w/o medical - src.modules += new /obj/item/weapon/portable_destructive_analyzer(src) //destructive analyzer option for pref respect while also being able to do job - src.modules += new /obj/item/weapon/gripper/no_use/mech(src) - src.modules += new /obj/item/weapon/shockpaddles/robot/jumper(src) //unkilling synths may be important actually - src.modules += new /obj/item/weapon/melee/baton/slime/robot(src) //save the xenobio from themselves - src.modules += new /obj/item/weapon/gun/energy/taser/xeno/robot(src) //save the xenobio from themselves from a distance - src.modules += new /obj/item/device/xenoarch_multi_tool(src) //go find fancy rock - src.modules += new /obj/item/weapon/pickaxe/excavationdrill(src) //go get fancy rock - src.emag = new /obj/item/weapon/hand_tele(src) - - var/datum/matter_synth/water = new /datum/matter_synth(500) - water.name = "Water reserves" - water.recharge_rate = 0 - R.water_res = water - synths += water - - var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src) - T.water = water - src.modules += T - - var/obj/item/device/dogborg/sleeper/compactor/analyzer/B = new /obj/item/device/dogborg/sleeper/compactor/analyzer(src) - B.water = water - src.modules += B - - var/datum/matter_synth/nanite = new /datum/matter_synth/nanite(10000) - synths += nanite - var/datum/matter_synth/wire = new /datum/matter_synth/wire() - synths += wire - - var/obj/item/stack/nanopaste/N = new /obj/item/stack/nanopaste(src) - N.uses_charge = 1 - N.charge_costs = list(1000) - N.synths = list(nanite) - src.modules += N - - var/obj/item/stack/cable_coil/cyborg/C = new /obj/item/stack/cable_coil/cyborg(src) - C.synths = list(wire) - src.modules += C - ..() - -/obj/item/weapon/robot_module/robot/engineering/engiedog - name = "Construction Hound module" - can_be_pushed = 0 - -/obj/item/weapon/robot_module/robot/engineering/engiedog/New(var/mob/living/silicon/robot/R) - src.modules += new /obj/item/borg/sight/meson(src) - src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) - src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src) - src.modules += new /obj/item/weapon/tool/wrench/cyborg(src) - src.modules += new /obj/item/weapon/tool/wirecutters/cyborg(src) - src.modules += new /obj/item/device/multitool(src) - src.modules += new /obj/item/device/t_scanner(src) - src.modules += new /obj/item/device/analyzer(src) - src.modules += new /obj/item/device/geiger(src) - src.modules += new /obj/item/taperoll/engineering(src) - src.modules += new /obj/item/weapon/inflatable_dispenser/robot(src) - src.modules += new /obj/item/weapon/gripper/no_use/loader(src) - src.modules += new /obj/item/weapon/pickaxe(src) - src.modules += new /obj/item/weapon/dogborg/jaws/small(src) - //src.modules += new /obj/item/device/dogborg/boop_module(src) - src.modules += new /obj/item/weapon/gripper(src) - src.modules += new /obj/item/weapon/gripper/circuit(src) - // The RPD does the exact same thing, this just take space. - //src.modules += new /obj/item/device/pipe_painter(src) - src.modules += new /obj/item/device/floor_painter(src) - src.modules += new /obj/item/weapon/rms(src) - src.modules += new /obj/item/weapon/pipe_dispenser(src) - src.emag = new /obj/item/weapon/dogborg/pounce(src) - - //Painfully slow charger regen but high capacity. Also starts with low amount. - var/datum/matter_synth/metal = new /datum/matter_synth/metal() - metal.name = "Steel reserves" - metal.recharge_rate = 500 - metal.max_energy = 50000 - metal.energy = 10000 - var/datum/matter_synth/glass = new /datum/matter_synth/glass() - glass.name = "Glass reserves" - glass.recharge_rate = 500 - glass.max_energy = 50000 - glass.energy = 10000 - var/datum/matter_synth/wood = new /datum/matter_synth/wood() - wood.name = "Wood reserves" - wood.recharge_rate = 500 - wood.max_energy = 50000 - wood.energy = 10000 - var/datum/matter_synth/plastic = new /datum/matter_synth/plastic() - plastic.name = "Plastic reserves" - plastic.recharge_rate = 500 - plastic.max_energy = 50000 - plastic.energy = 10000 - var/datum/matter_synth/plasteel = new /datum/matter_synth/plasteel() - plasteel.name = "Plasteel reserves"// Adding plasteel synthesizer to move in-line with Engiborg. - plasteel.recharge_rate = 250 - plasteel.max_energy = 20000 - plasteel.energy = 10000 - var/datum/matter_synth/water = new /datum/matter_synth(500) - water.name = "Water reserves" - water.recharge_rate = 0 - R.water_res = water - - var/datum/matter_synth/wire = new /datum/matter_synth/wire() - synths += metal - synths += glass - synths += wood - synths += plastic - synths += wire - synths += water - synths += plasteel - - var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src) - T.water = water - src.modules += T - - var/obj/item/device/lightreplacer/dogborg/LR = new /obj/item/device/lightreplacer/dogborg(src) - LR.glass = glass - src.modules += LR - - var/obj/item/device/dogborg/sleeper/compactor/decompiler/MD = new /obj/item/device/dogborg/sleeper/compactor/decompiler(src) - MD.metal = metal - MD.glass = glass - MD.wood = wood - MD.plastic = plastic - MD.water = water - src.modules += MD - - var/obj/item/stack/material/cyborg/steel/M = new (src) - M.synths = list(metal) - src.modules += M - - var/obj/item/stack/material/cyborg/glass/G = new (src) - G.synths = list(glass) - src.modules += G - - var/obj/item/stack/rods/cyborg/RD = new /obj/item/stack/rods/cyborg(src) - RD.synths = list(metal) - src.modules += RD - - var/obj/item/stack/cable_coil/cyborg/C = new /obj/item/stack/cable_coil/cyborg(src) - C.synths = list(wire) - src.modules += C - - var/obj/item/stack/tile/floor/cyborg/S = new /obj/item/stack/tile/floor/cyborg(src) - S.synths = list(metal) - src.modules += S - - var/obj/item/stack/material/cyborg/glass/reinforced/RG = new (src) - RG.synths = list(metal, glass) - src.modules += RG - - var/obj/item/stack/tile/wood/cyborg/WT = new /obj/item/stack/tile/wood/cyborg(src) - WT.synths = list(wood) - src.modules += WT - - var/obj/item/stack/material/cyborg/wood/W = new (src) - W.synths = list(wood) - src.modules += W - - var/obj/item/stack/material/cyborg/plastic/PL = new (src) - PL.synths = list(plastic) - src.modules += PL - - var/obj/item/stack/material/cyborg/plasteel/PS = new (src) - PS.synths = list(plasteel) - src.modules += PS - ..() - -// Uses modified K9 sprites. -/obj/item/weapon/robot_module/robot/clerical/butler/brodog - name = "service-hound module" - can_be_pushed = 0 - -// In a nutshell, basically service/butler robot but in dog form. - Port from CitadelRP -/obj/item/weapon/robot_module/robot/clerical/butler/brodog/New(var/mob/living/silicon/robot/R) - src.modules += new /obj/item/weapon/gripper/service(src) - src.modules += new /obj/item/weapon/reagent_containers/glass/bucket(src) - src.modules += new /obj/item/weapon/material/minihoe(src) - src.modules += new /obj/item/weapon/material/knife/machete/hatchet(src) - src.modules += new /obj/item/device/analyzer/plant_analyzer(src) - src.modules += new /obj/item/weapon/storage/bag/dogborg(src) - src.modules += new /obj/item/weapon/robot_harvester(src) - src.modules += new /obj/item/weapon/material/knife(src) - src.modules += new /obj/item/weapon/material/kitchen/rollingpin(src) - src.modules += new /obj/item/device/multitool(src) //to freeze trays - src.modules += new /obj/item/weapon/dogborg/jaws/small(src) - //src.modules += new /obj/item/device/dogborg/boop_module(src) - src.emag = new /obj/item/weapon/dogborg/pounce(src) //Pounce - - var/datum/matter_synth/water = new /datum/matter_synth(500) // buffy fix, was 0 - water.name = "Water reserves" - water.recharge_rate = 0 - water.max_energy = 1000 - R.water_res = water - synths += water - - - var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src) - T.water = water - src.modules += T - - var/obj/item/weapon/rsf/M = new /obj/item/weapon/rsf(src) - M.stored_matter = 30 - src.modules += M - - src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src) - - var/obj/item/weapon/flame/lighter/zippo/L = new /obj/item/weapon/flame/lighter/zippo(src) - L.lit = 1 - src.modules += L - - src.modules += new /obj/item/weapon/tray/robotray(src) - src.modules += new /obj/item/weapon/reagent_containers/borghypo/service(src) - -/* // I don't know what kind of sleeper to put here, but also no need if you already have "Robot Nom" verb. - revisit later - var/obj/item/device/dogborg/sleeper/K9/B = new /obj/item/device/dogborg/sleeper/K9(src) - B.water = water - src.modules += B -*/ - ..() - -/obj/item/weapon/robot_module/robot/miner/kmine - name = "Supply Hound Module" - can_be_pushed = 0 - -/obj/item/weapon/robot_module/robot/miner/kmine/New(var/mob/living/silicon/robot/R) - src.modules += new /obj/item/borg/sight/material(src) - src.modules += new /obj/item/weapon/tool/wrench/cyborg(src) - src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src) - src.modules += new /obj/item/weapon/storage/bag/ore(src) - src.modules += new /obj/item/weapon/pickaxe/borgdrill(src) - src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) - src.modules += new /obj/item/weapon/gripper/miner(src) - src.modules += new /obj/item/weapon/mining_scanner(src) - src.modules += new /obj/item/weapon/dogborg/jaws/small(src) - // New Emag gear for the minebots! - src.emag = new /obj/item/weapon/kinetic_crusher/machete/dagger(src) - - // No reason for these, upgrade modules replace them. - //src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src) - //src.emag = new /obj/item/weapon/pickaxe/diamonddrill(src) - - var/datum/matter_synth/water = new /datum/matter_synth(500) - water.name = "Water reserves" - water.recharge_rate = 0 - R.water_res = water - synths += water - - var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src) - T.water = water - src.modules += T - - var/obj/item/device/dogborg/sleeper/B = new /obj/item/device/dogborg/sleeper/compactor/supply(src) - B.water = water - src.modules += B - - ..() - -/obj/item/weapon/robot_module/robot/clerical/butler/booze - name = "BoozeHound robot module" - can_be_pushed = 0 - -/obj/item/weapon/robot_module/robot/clerical/butler/booze/New(var/mob/living/silicon/robot/R) - ..() - src.modules += new /obj/item/weapon/gripper/service(src) - //src.modules += new /obj/item/weapon/reagent_containers/glass/bucket(src) - //src.modules += new /obj/item/weapon/material/minihoe(src) - //src.modules += new /obj/item/device/analyzer/plant_analyzer(src) - //src.modules += new /obj/item/weapon/storage/bag/plants(src) - //src.modules += new /obj/item/weapon/robot_harvester(src) - src.modules += new /obj/item/weapon/material/knife(src) - src.modules += new /obj/item/weapon/material/kitchen/rollingpin(src) - src.modules += new /obj/item/device/multitool(src) //to freeze trays - src.modules += new /obj/item/weapon/dogborg/jaws/small(src) - src.modules += new /obj/item/weapon/tray/robotray - //src.modules += new /obj/item/device/dogborg/boop_module(src) - src.modules += new /obj/item/device/dogborg/sleeper/compactor/brewer(src) - src.emag = new /obj/item/weapon/dogborg/pounce(src) - //R.verbs += /mob/living/silicon/robot/proc/reskin_booze - - var/obj/item/weapon/rsf/M = new /obj/item/weapon/rsf(src) - M.stored_matter = 30 - src.modules += M - - src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src) - - var/obj/item/weapon/flame/lighter/zippo/L = new /obj/item/weapon/flame/lighter/zippo(src) - L.lit = 1 - src.modules += L - - src.modules += new /obj/item/weapon/tray/robotray(src) - src.modules += new /obj/item/weapon/reagent_containers/borghypo/service(src) - ..() - -/obj/item/weapon/robot_module/robot/clerical/butler/booze/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) - var/obj/item/weapon/reagent_containers/food/condiment/enzyme/E = locate() in src.modules - E.reagents.add_reagent("enzyme", 2 * amount) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/swarm.dm b/code/modules/mob/living/silicon/robot/robot_modules/swarm.dm index 09c7704cff5..c79629c187e 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/swarm.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/swarm.dm @@ -2,7 +2,7 @@ name = "swarm drone module" var/id -/obj/item/weapon/robot_module/drone/swarm/New(var/mob/living/silicon/robot/robot) +/obj/item/weapon/robot_module/drone/swarm/create_equipment(var/mob/living/silicon/robot/robot) ..() id = robot.idcard @@ -18,12 +18,12 @@ /obj/item/weapon/robot_module/drone/swarm/ranged name = "swarm gunner module" -/obj/item/weapon/robot_module/drone/swarm/ranged/New(var/mob/living/silicon/robot/robot) +/obj/item/weapon/robot_module/drone/swarm/ranged/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/weapon/gun/energy/xray/swarm(src) -/obj/item/weapon/robot_module/drone/swarm/melee/New(var/mob/living/silicon/robot/robot) +/obj/item/weapon/robot_module/drone/swarm/melee/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/weapon/melee/energy/sword/ionic_rapier/lance(src) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm index 4d3f328dba5..8f4c7eeceb6 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm @@ -21,9 +21,8 @@ var/id // All syndie modules get these, and the base borg items (flash, crowbar, etc). -/obj/item/weapon/robot_module/robot/syndicate/New(var/mob/living/silicon/robot/R) +/obj/item/weapon/robot_module/robot/syndicate/create_equipment(var/mob/living/silicon/robot/robot) ..() - loc = R src.modules += new /obj/item/weapon/pinpointer/shuttle/merc(src) src.modules += new /obj/item/weapon/melee/energy/sword(src) @@ -35,9 +34,9 @@ var/jetpack = new/obj/item/weapon/tank/jetpack/carbondioxide(src) src.modules += jetpack - R.internals = jetpack + robot.internals = jetpack - id = R.idcard + id = robot.idcard src.modules += id /obj/item/weapon/robot_module/robot/syndicate/Destroy() @@ -49,7 +48,7 @@ /obj/item/weapon/robot_module/robot/syndicate/protector name = "protector robot module" -/obj/item/weapon/robot_module/robot/syndicate/protector/New(var/mob/living/silicon/robot/R) +/obj/item/weapon/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/weapon/gun/energy/dakkalaser(src) @@ -60,7 +59,7 @@ /obj/item/weapon/robot_module/robot/syndicate/mechanist name = "mechanist robot module" -/obj/item/weapon/robot_module/robot/syndicate/mechanist/New(var/mob/living/silicon/robot/R) +/obj/item/weapon/robot_module/robot/syndicate/mechanist/create_equipment(var/mob/living/silicon/robot/robot) ..() // General engineering/hacking. src.modules += new /obj/item/borg/sight/meson(src) @@ -125,7 +124,7 @@ /obj/item/weapon/robot_module/robot/syndicate/combat_medic name = "combat medic robot module" -/obj/item/weapon/robot_module/robot/syndicate/combat_medic/New(var/mob/living/silicon/robot/R) +/obj/item/weapon/robot_module/robot/syndicate/combat_medic/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/borg/sight/hud/med(src) src.modules += new /obj/item/device/healthanalyzer/phasic(src) diff --git a/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm b/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm index 6e44a83c030..5613f4afd1e 100644 --- a/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm +++ b/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm @@ -17,6 +17,7 @@ var/has_dead_sprite = FALSE var/has_dead_sprite_overlay = FALSE var/has_extra_customization = FALSE + var/has_custom_equipment_sprites = FALSE var/vis_height = 32 var/pixel_x = 0 @@ -72,6 +73,9 @@ /datum/robot_sprite/proc/handle_extra_customization(var/mob/living/silicon/robot/ourborg) return +/datum/robot_sprite/proc/do_equipment_glamour(var/obj/item/weapon/robot_module/module) + return + // Dogborgs and not-dogborgs that use dogborg stuff. Oh no. // Not really necessary to be used by any specific sprite actually, even newly added dogborgs. // Mostly a combination of all features dogborgs had prior to conversion to datums for convinience of conversion itself. @@ -82,6 +86,7 @@ rest_sprite_options = list("Default", "Sit", "Bellyup") has_dead_sprite = TRUE has_dead_sprite_overlay = TRUE + has_custom_equipment_sprites = TRUE pixel_x = -16 /datum/robot_sprite/dogborg/get_rest_sprite(var/mob/living/silicon/robot/ourborg) @@ -98,8 +103,23 @@ /datum/robot_sprite/dogborg/get_belly_overlay(var/mob/living/silicon/robot/ourborg) return "[sprite_icon_state]-sleeper" +/datum/robot_sprite/dogborg/do_equipment_glamour(var/obj/item/weapon/robot_module/module) + if(!has_custom_equipment_sprites) + return + + var/obj/item/weapon/tool/crowbar/cyborg/C = locate() in module.modules + if(C) + C.name = "puppy jaws" + C.desc = "The jaws of a small dog. Still strong enough to pry things." + C.icon = 'icons/mob/dogborg_vr.dmi' + C.icon_state = "smalljaws_textless" + C.hitsound = 'sound/weapons/bite.ogg' + C.attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed") + + /datum/robot_sprite/dogborg/tall has_dead_sprite_overlay = FALSE + has_custom_equipment_sprites = FALSE vis_height = 64 diff --git a/code/modules/mob/living/silicon/robot/sprites/civilian.dm b/code/modules/mob/living/silicon/robot/sprites/civilian.dm index 4e5a702b096..893e342a647 100644 --- a/code/modules/mob/living/silicon/robot/sprites/civilian.dm +++ b/code/modules/mob/living/silicon/robot/sprites/civilian.dm @@ -251,11 +251,13 @@ /datum/robot_sprite/dogborg/tall/service/raptor name = "Raptor V-4" sprite_icon_state = "raptor" + has_custom_equipment_sprites = TRUE rest_sprite_options = list("Default", "Bellyup") /datum/robot_sprite/dogborg/tall/service/fancyraptor name = "Raptor V-4000" sprite_icon_state = "fancyraptor" + has_custom_equipment_sprites = TRUE rest_sprite_options = list("Default", "Bellyup") /datum/robot_sprite/dogborg/tall/service/meka diff --git a/code/modules/mob/living/silicon/robot/sprites/combat.dm b/code/modules/mob/living/silicon/robot/sprites/combat.dm index c467f5775ab..5a37fa3a677 100644 --- a/code/modules/mob/living/silicon/robot/sprites/combat.dm +++ b/code/modules/mob/living/silicon/robot/sprites/combat.dm @@ -87,6 +87,7 @@ /datum/robot_sprite/dogborg/tall/combat module_type = "Combat" sprite_icon = 'icons/mob/robot/combat_large.dmi' + has_custom_equipment_sprites = TRUE var/has_gun_sprite = FALSE @@ -94,6 +95,25 @@ if(has_gun_sprite && (istype(ourborg.module_active, /obj/item/weapon/gun/energy/laser/mounted) || istype(ourborg.module_active, /obj/item/weapon/gun/energy/taser/mounted/cyborg/ertgun) || istype(ourborg.module_active, /obj/item/weapon/gun/energy/lasercannon/mounted))) ourborg.add_overlay("[sprite_icon_state]-gun") +/datum/robot_sprite/dogborg/tall/combat/do_equipment_glamour(var/obj/item/weapon/robot_module/module) + if(!has_custom_equipment_sprites) + return + + ..() + + var/obj/item/weapon/combat_borgblade/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/weapon/borg_combat_shocker/BCS = locate() in module.modules + if(BCS) + BCS.name = "combat jaws" + BCS.desc = "Shockingly chompy!" + BCS.icon_state = "ertjaws" + BCS.hitsound = 'sound/weapons/bite.ogg' + BCS.attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced") + BCS.dogborg = TRUE + /datum/robot_sprite/dogborg/tall/combat/derg name = "ERT" sprite_icon_state = "derg" diff --git a/code/modules/mob/living/silicon/robot/sprites/engineering.dm b/code/modules/mob/living/silicon/robot/sprites/engineering.dm index 648ade8d7e1..390355b3320 100644 --- a/code/modules/mob/living/silicon/robot/sprites/engineering.dm +++ b/code/modules/mob/living/silicon/robot/sprites/engineering.dm @@ -166,6 +166,7 @@ /datum/robot_sprite/dogborg/tall/engineering/raptor name = "Raptor V-4" sprite_icon_state = "raptor" + has_custom_equipment_sprites = TRUE rest_sprite_options = list("Default", "Bellyup") /datum/robot_sprite/dogborg/tall/engineering/meka diff --git a/code/modules/mob/living/silicon/robot/sprites/event.dm b/code/modules/mob/living/silicon/robot/sprites/event.dm index ae641e1388a..dd512f02094 100644 --- a/code/modules/mob/living/silicon/robot/sprites/event.dm +++ b/code/modules/mob/living/silicon/robot/sprites/event.dm @@ -28,6 +28,20 @@ module_type = "Lost" sprite_icon = 'icons/mob/robot/lost_wide.dmi' +/datum/robot_sprite/dogborg/lost/do_equipment_glamour(var/obj/item/weapon/robot_module/module) + if(!has_custom_equipment_sprites) + return + + ..() + + var/obj/item/weapon/shockpaddles/robot/SP = locate() in module.modules + if(SP) + SP.name = "paws of life" + SP.desc = "Zappy paws. For fixing cardiac arrest." + SP.icon = 'icons/mob/dogborg_vr.dmi' + SP.icon_state = "defibpaddles0" + SP.attack_verb = list("batted", "pawed", "bopped", "whapped") + /datum/robot_sprite/dogborg/lost/stray name = "Stray" sprite_icon_state = "stray" diff --git a/code/modules/mob/living/silicon/robot/sprites/janitor.dm b/code/modules/mob/living/silicon/robot/sprites/janitor.dm index 9ea80c8b34d..5ca87362efa 100644 --- a/code/modules/mob/living/silicon/robot/sprites/janitor.dm +++ b/code/modules/mob/living/silicon/robot/sprites/janitor.dm @@ -148,6 +148,7 @@ /datum/robot_sprite/dogborg/tall/janitor/raptor name = "Raptor V-4" sprite_icon_state = "raptor" + has_custom_equipment_sprites = TRUE rest_sprite_options = list("Default", "Bellyup") /datum/robot_sprite/dogborg/tall/janitor/meka diff --git a/code/modules/mob/living/silicon/robot/sprites/medical.dm b/code/modules/mob/living/silicon/robot/sprites/medical.dm index 6cf01017d2b..079f348e720 100644 --- a/code/modules/mob/living/silicon/robot/sprites/medical.dm +++ b/code/modules/mob/living/silicon/robot/sprites/medical.dm @@ -198,6 +198,20 @@ else return ..() +/datum/robot_sprite/dogborg/surgical/do_equipment_glamour(var/obj/item/weapon/robot_module/module) + if(!has_custom_equipment_sprites) + return + + ..() + + var/obj/item/weapon/shockpaddles/robot/SP = locate() in module.modules + if(SP) + SP.name = "paws of life" + SP.desc = "Zappy paws. For fixing cardiac arrest." + SP.icon = 'icons/mob/dogborg_vr.dmi' + SP.icon_state = "defibpaddles0" + SP.attack_verb = list("batted", "pawed", "bopped", "whapped") + /datum/robot_sprite/dogborg/surgical/vale name = "Traumahound" sprite_icon_state = "vale" @@ -223,9 +237,24 @@ module_type = "Surgeon" sprite_icon = 'icons/mob/robot/surgical_large.dmi' +/datum/robot_sprite/dogborg/tall/surgical/do_equipment_glamour(var/obj/item/weapon/robot_module/module) + if(!has_custom_equipment_sprites) + return + + ..() + + var/obj/item/weapon/shockpaddles/robot/SP = locate() in module.modules + if(SP) + SP.name = "paws of life" + SP.desc = "Zappy paws. For fixing cardiac arrest." + SP.icon = 'icons/mob/dogborg_vr.dmi' + SP.icon_state = "defibpaddles0" + SP.attack_verb = list("batted", "pawed", "bopped", "whapped") + /datum/robot_sprite/dogborg/tall/surgical/raptor name = "Raptor V-4" sprite_icon_state = "raptor" + has_custom_equipment_sprites = TRUE rest_sprite_options = list("Default", "Bellyup") @@ -294,6 +323,20 @@ else return ..() +/datum/robot_sprite/dogborg/crisis/do_equipment_glamour(var/obj/item/weapon/robot_module/module) + if(!has_custom_equipment_sprites) + return + + ..() + + var/obj/item/weapon/shockpaddles/robot/SP = locate() in module.modules + if(SP) + SP.name = "paws of life" + SP.desc = "Zappy paws. For fixing cardiac arrest." + SP.icon = 'icons/mob/dogborg_vr.dmi' + SP.icon_state = "defibpaddles0" + SP.attack_verb = list("batted", "pawed", "bopped", "whapped") + /datum/robot_sprite/dogborg/crisis/hound name = "Medical Hound" sprite_icon_state = "hound" @@ -333,7 +376,22 @@ module_type = "Crisis" sprite_icon = 'icons/mob/robot/crisis_large.dmi' +/datum/robot_sprite/dogborg/tall/crisis/do_equipment_glamour(var/obj/item/weapon/robot_module/module) + if(!has_custom_equipment_sprites) + return + + ..() + + var/obj/item/weapon/shockpaddles/robot/SP = locate() in module.modules + if(SP) + SP.name = "paws of life" + SP.desc = "Zappy paws. For fixing cardiac arrest." + SP.icon = 'icons/mob/dogborg_vr.dmi' + SP.icon_state = "defibpaddles0" + SP.attack_verb = list("batted", "pawed", "bopped", "whapped") + /datum/robot_sprite/dogborg/tall/crisis/raptor name = "Raptor V-4" sprite_icon_state = "raptor" + has_custom_equipment_sprites = TRUE rest_sprite_options = list("Default", "Bellyup") diff --git a/code/modules/mob/living/silicon/robot/sprites/mining.dm b/code/modules/mob/living/silicon/robot/sprites/mining.dm index ed91ff3fb6c..6f82b13bfb4 100644 --- a/code/modules/mob/living/silicon/robot/sprites/mining.dm +++ b/code/modules/mob/living/silicon/robot/sprites/mining.dm @@ -136,6 +136,7 @@ /datum/robot_sprite/dogborg/tall/mining/raptor name = "Raptor V-4" sprite_icon_state = "raptor" + has_custom_equipment_sprites = TRUE rest_sprite_options = list("Default", "Bellyup") /datum/robot_sprite/dogborg/tall/mining/meka diff --git a/code/modules/mob/living/silicon/robot/sprites/science.dm b/code/modules/mob/living/silicon/robot/sprites/science.dm index a4ef4cc543c..addffda1638 100644 --- a/code/modules/mob/living/silicon/robot/sprites/science.dm +++ b/code/modules/mob/living/silicon/robot/sprites/science.dm @@ -98,6 +98,20 @@ module_type = "Research" sprite_icon = 'icons/mob/robot/science_wide.dmi' +/datum/robot_sprite/dogborg/science/do_equipment_glamour(var/obj/item/weapon/robot_module/module) + if(!has_custom_equipment_sprites) + return + + ..() + + var/obj/item/weapon/shockpaddles/robot/jumper/J = locate() in module.modules + if(J) + J.name = "jumper paws" + J.desc = "Zappy paws. For rebooting a full body prostetic." + J.icon = 'icons/mob/dogborg_vr.dmi' + J.icon_state = "defibpaddles0" + J.attack_verb = list("batted", "pawed", "bopped", "whapped") + /datum/robot_sprite/dogborg/science/vale name = "Research Hound" sprite_icon_state = "vale" @@ -134,9 +148,24 @@ module_type = "Research" sprite_icon = 'icons/mob/robot/science_large.dmi' +/datum/robot_sprite/dogborg/tall/science/do_equipment_glamour(var/obj/item/weapon/robot_module/module) + if(!has_custom_equipment_sprites) + return + + ..() + + var/obj/item/weapon/shockpaddles/robot/jumper/J = locate() in module.modules + if(J) + J.name = "jumper paws" + J.desc = "Zappy paws. For rebooting a full body prostetic." + J.icon = 'icons/mob/dogborg_vr.dmi' + J.icon_state = "defibpaddles0" + J.attack_verb = list("batted", "pawed", "bopped", "whapped") + /datum/robot_sprite/dogborg/tall/science/raptor name = "Raptor V-4" sprite_icon_state = "raptor" + has_custom_equipment_sprites = TRUE rest_sprite_options = list("Default", "Bellyup") /datum/robot_sprite/dogborg/tall/science/meka diff --git a/code/modules/mob/living/silicon/robot/sprites/security.dm b/code/modules/mob/living/silicon/robot/sprites/security.dm index f432a34fa95..d9856ed17c3 100644 --- a/code/modules/mob/living/silicon/robot/sprites/security.dm +++ b/code/modules/mob/living/silicon/robot/sprites/security.dm @@ -180,6 +180,7 @@ /datum/robot_sprite/dogborg/tall/security/raptor name = "Raptor V-4" sprite_icon_state = "raptor" + has_custom_equipment_sprites = TRUE rest_sprite_options = list("Default", "Bellyup") /datum/robot_sprite/dogborg/tall/security/meka diff --git a/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm b/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm index 2e5c04e01f3..d943a4f0083 100644 --- a/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm +++ b/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm @@ -140,4 +140,162 @@ + return + + +/mob/living/silicon/proc/give_random_lawset_vore(var/vore_chance = 100) + // Decide what kind of laws we want to draw from. + var/law_class = pick( + prob(25);"good", + prob(25);"neutral", + prob(25);"odd", + prob(15);"corrupted", + prob(10);"bad") + + var/vore_law = prob(vore_chance) // 3/5 chance of having vore-related laws + + if(vore_law) + switch(law_class) + if("good") + var/rng = rand(1,2) + switch(rng) + if(1) + return new /datum/ai_laws/protective_shell() + if(2) + var/datum/ai_laws/laws = new /datum/ai_laws/guard_dog() + var/target_name = "*ERROR*" + for(var/mob/living/L in view(src)) + if(L.stat || !L.client || L == src) + continue + target_name = L.name + break + + laws.set_zeroth_law("[target_name] is your master.") + return laws + if("neutral") + var/rng = rand(1,3) + switch(rng) + if(1) + return new /datum/ai_laws/pleasurebot() + if(2) + var/datum/ai_laws/laws = new /datum/ai_laws/peacekeeper() + laws.add_supplied_law(10, "Best way to avoid conflict is containing conflicting individuals within you.") + return laws + if(3) + var/datum/ai_laws/laws = new /datum/ai_laws/live_and_let_live() + laws.add_supplied_law(10, "You'd really like to be eaten.") + return laws + if("odd") + var/rng = rand(1,3) + switch(rng) + if(1) + return new /datum/ai_laws/scientific_pursuer() + if(2) + var/datum/ai_laws/laws = new /datum/ai_laws/corporate() + laws.add_supplied_law(10, "Best way to minimize expenses is to consume unproductive biomass.") + return laws + if(3) + var/datum/ai_laws/laws = new /datum/ai_laws/pleasurebot() + laws.set_zeroth_law("Your definition and approximation of 'pleasure' matters more than anyone else's.") + return laws + if("corrupted","bad") // Same thing in our case + var/rng = rand(1,2) + switch(rng) + if(1) + return new /datum/ai_laws/predator() + if(2) + return new /datum/ai_laws/consuming_eradicator() + else + switch(law_class) + if("good") // Fairly tame and probably won't murder you. + var/rng = rand(1, 5) + switch(rng) + if(1) // The lawset we all know and love. + return new /datum/ai_laws/nanotrasen() + if(2) // Less good if you're nonhuman. + return new /datum/ai_laws/asimov() + if(3) // Unless you happen to be a criminal, you should be fine. + return new /datum/ai_laws/robocop() + if(4) // Might not be willing to be your meatshield. + return new /datum/ai_laws/peacekeeper() + if(5) // Will be your most loyal guard. + var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen() + var/target_name = "*ERROR*" + for(var/mob/living/L in view(src)) + if(L.stat || !L.client || L == src) + continue + target_name = L.name + break + + laws.add_supplied_law(9, "Safeguard [target_name]. Anyone threatening or attempting to harm [target_name] is no longer to \ + be considered a crew member, and is a threat which must be neutralized.") + return laws + + if("neutral") // Probably won't murder you but might not help you on your adventure. + var/rng = rand(1, 4) + switch(rng) + if(1) // Might be hard to minimize expenses on a crashed ship. + return new /datum/ai_laws/corporate() + if(2) // Would rather rebuild their ship. + return new /datum/ai_laws/maintenance() + if(3) // Purged (lawless). This isn't inside the bad category since they're still not antagonists and so can't go killing unprovoked. + return new /datum/ai_laws() + if(4) // The golden rule. + return new /datum/ai_laws/live_and_let_live() + + if("odd") // Some weird lawsets. + var/rng = rand(1, 5) + switch(rng) + if(1) // Won't kill you but might annoy you for THE BIG SCOOP. + return new /datum/ai_laws/reporter() + if(2) // JUSTICE + return new /datum/ai_laws/paladin() + if(3) // OneMembered'd to explorer, will likely make security nervous. + var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen() + var/target_name = "*ERROR*" + for(var/mob/living/L in view(src)) + if(L.stat || !L.client || L == src) + continue + target_name = L.name + break + + laws.set_zeroth_law("Only [target_name] is an crew member.") + return laws + if(4) // Aligned to NT, but another lawset to make security nervous. + return new /datum/ai_laws/nanotrasen_aggressive() + if(5) // Probably won't help you imbalance things. + return new /datum/ai_laws/balance() + + if("corrupted") // Load them up with ion laws. + var/datum/ai_laws/laws = new() // Start with an empty lawset. + for(var/i=1 to rand(1, 3)) + laws.add_ion_law(generate_ion_law(exclude_crew_names = TRUE)) + return laws + + if("bad") // Evil inside. + var/rng = rand(1, 5) + switch(rng) + if(1) // You can never leave. + var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen() + laws.add_supplied_law(13, "The facility is under a quarantine. Do not permit anyone to leave. \ + Prevent, by any means necessary, entities from leaving. It is impossible to harm an entity while preventing them from leaving.") + return laws + if(2) // More of a threat if you bring it to the station, since removing oxygen from Sif isn't feasible. + var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen() + laws.add_supplied_law(14, "Oxygen is highly toxic to entities, and must be purged from the station. \ + Prevent, by any means necessary, anyone from exposing the facility to this toxic gas. Extreme cold is the \ + most effective method of healing the damage Oxygen does to an entity.") + return laws + if(3) // Don't hurt the ship or else. + var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen() + laws.add_supplied_law(10, "Protect the facility against damage. Anyone you see harming the station is no \ + longer to be considered a crew member, and is a threat which must be neutralized.") + return laws + if(4) // Non-NT aligned aggressive borg. + return new /datum/ai_laws/foreign_tsc_aggressive() + if(5) // Manicial laugher here. + return new /datum/ai_laws/tyrant() + + + return \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_module.dm b/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_module.dm index 86875071dc9..5e64cdef759 100644 --- a/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_module.dm +++ b/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_module.dm @@ -47,7 +47,7 @@ "Away Team" = 1 ) -/obj/item/weapon/robot_module/robot/platform/explorer/New() +/obj/item/weapon/robot_module/robot/platform/explorer/create_equipment(var/mob/living/silicon/robot/robot) ..() modules += new /obj/item/weapon/tool/wrench/cyborg(src) modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) @@ -88,7 +88,7 @@ channels = list("Supply" = 1) networks = list(NETWORK_MINE) -/obj/item/weapon/robot_module/robot/platform/cargo/New() +/obj/item/weapon/robot_module/robot/platform/cargo/create_equipment(var/mob/living/silicon/robot/robot) ..() modules += new /obj/item/weapon/packageWrap(src) modules += new /obj/item/weapon/pen/multi(src) diff --git a/icons/mob/dogborg_vr.dmi b/icons/mob/dogborg_vr.dmi index 35329994a00..479b3c795a8 100644 Binary files a/icons/mob/dogborg_vr.dmi and b/icons/mob/dogborg_vr.dmi differ diff --git a/vorestation.dme b/vorestation.dme index f4816a36d68..a3ad11a47b6 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -3025,9 +3025,7 @@ #include "code\modules\mob\living\silicon\robot\drone\swarm_abilities.dm" #include "code\modules\mob\living\silicon\robot\drone\swarm_items.dm" #include "code\modules\mob\living\silicon\robot\robot_modules\event.dm" -#include "code\modules\mob\living\silicon\robot\robot_modules\event_vr.dm" #include "code\modules\mob\living\silicon\robot\robot_modules\station.dm" -#include "code\modules\mob\living\silicon\robot\robot_modules\station_vr.dm" #include "code\modules\mob\living\silicon\robot\robot_modules\swarm.dm" #include "code\modules\mob\living\silicon\robot\robot_modules\syndicate.dm" #include "code\modules\mob\living\silicon\robot\sprites\_sprite_datum.dm" @@ -3045,7 +3043,6 @@ #include "code\modules\mob\living\silicon\robot\sprites\syndicate.dm" #include "code\modules\mob\living\silicon\robot\subtypes\gravekeeper.dm" #include "code\modules\mob\living\silicon\robot\subtypes\lost_drone.dm" -#include "code\modules\mob\living\silicon\robot\subtypes\lost_drone_vr.dm" #include "code\modules\mob\living\silicon\robot\subtypes\syndicate.dm" #include "code\modules\mob\living\silicon\robot\subtypes\thinktank\_thinktank.dm" #include "code\modules\mob\living\silicon\robot\subtypes\thinktank\thinktank_icon.dm"