Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Silicon Updates - AI Cores - Holograms - Borgs - On My! #65

Merged
merged 108 commits into from
Feb 19, 2025
Merged
Show file tree
Hide file tree
Changes from 11 commits
Commits
Show all changes
108 commits
Select commit Hold shift + click to select a range
30a0d9e
First Commit
Ossa88 Nov 19, 2024
76ca5f2
missed a comma
Ossa88 Nov 19, 2024
fd7c50e
Modularization of Custom AI Holograms
Ossa88 Nov 20, 2024
2dd4069
Modularized all cyborgs modulars into individual files.
Ossa88 Nov 20, 2024
669e602
forgot to readd the ninja_borg.dm
Ossa88 Nov 20, 2024
a6a1d42
formatting
Ossa88 Nov 20, 2024
e28a8cd
New Borg Object Icons
Ossa88 Nov 21, 2024
037200a
New Comment Block
Ossa88 Nov 21, 2024
30abfba
Cyborg Module for making borgs Ninjas - not placed or makable
Ossa88 Nov 21, 2024
b9a5656
Service Borg Part 1
Ossa88 Nov 21, 2024
1477a5d
Robot Upgrades Modularization - not enabled yet
Ossa88 Nov 21, 2024
c426ad5
More Service Borg Upgrades
Ossa88 Nov 22, 2024
2a62067
Fixed the Admin Borg Panel so my testing is easier
Ossa88 Nov 22, 2024
283a979
God damn random numpad press
Ossa88 Nov 22, 2024
3b15a0d
Readded shovel... will update picture later
Ossa88 Nov 22, 2024
66c3a66
All modules are in... just need to fix the bug.
Ossa88 Nov 22, 2024
b67dea0
Added Fische AI core
Ossa88 Nov 23, 2024
b5422b3
Typo in NuMeka that made sprite invisible
Ossa88 Nov 23, 2024
7b55c12
Split the numeka1 file into male and female sub files.
Ossa88 Nov 23, 2024
b04bfef
Moved all files into proper modularization structure.
Ossa88 Nov 23, 2024
dd23381
Added the Omni Tools to Engi, Med, Service
Ossa88 Nov 23, 2024
a36db08
readded razer and lighter..
Ossa88 Nov 23, 2024
c8ea7bc
readded TG items after requested. Found the rag.
Ossa88 Nov 23, 2024
f1e0c24
Updated some comments
Ossa88 Nov 23, 2024
2575cff
moved my files to prevent a TM conflict
Ossa88 Nov 23, 2024
925bd15
Engiborgs now have 3 omniarms
Ossa88 Nov 24, 2024
f762471
removed test code that wasnt required
Ossa88 Nov 24, 2024
0703283
created a science module sprite
Ossa88 Nov 24, 2024
8bfef86
added science borgs
Ossa88 Nov 24, 2024
b4abe17
science borgs added
Ossa88 Nov 24, 2024
11d5fbe
returns the old med borg tools until I can correct what went wrong in…
Ossa88 Nov 24, 2024
fea34d1
Corrects Omnitools having no force
Ossa88 Nov 24, 2024
3006ae8
Accidently edited a obj at a level higher than intended... corrected.
Ossa88 Nov 24, 2024
19c9507
Comment fix
Ossa88 Nov 25, 2024
e3a0a08
Science borg gets upgraded survey scanner
Ossa88 Nov 25, 2024
5115452
a single indent was missing.... changed the var names to be more unique.
Ossa88 Nov 25, 2024
4b0fb6f
Merge branch 'PentestSS13:master' into AI-Cores
Ossa88 Nov 25, 2024
514a115
Merge branch 'PentestSS13:master' into AI-Cores
Ossa88 Nov 25, 2024
da97a75
Refactor Code
Ossa88 Nov 27, 2024
5ca1c41
Pulled all the code out of robot_upgrades.dm
Ossa88 Nov 27, 2024
d8eb2c8
New Module Icons enabled.
Ossa88 Nov 27, 2024
cb30d50
Updated all the comment blocks
Ossa88 Nov 27, 2024
89ed0ba
these files were not supposed to get refactored.
Ossa88 Nov 27, 2024
ecda40c
corrected comment
Ossa88 Nov 27, 2024
8cea7c5
Did not realize the ash_plating was located inside the old module.dmi…
Ossa88 Nov 27, 2024
8a96905
Lots of Changes:
Ossa88 Nov 28, 2024
3f9f8b6
added missing sprite to janitor.dmi
Ossa88 Nov 28, 2024
3a86ba0
fixed again
Ossa88 Nov 28, 2024
7cdf127
Cyborg Model Selector Update:
Ossa88 Dec 2, 2024
44f5273
Cleans up the Admin Borg Panel by ignoring PKA upgrades for miner models
Ossa88 Dec 2, 2024
e061940
forgot cover open sprites for science borgos
Ossa88 Dec 2, 2024
5d394c6
Revert:
Ossa88 Dec 3, 2024
8634ae9
Merge branch 'PentestSS13:master' into AI-Cores
Ossa88 Dec 3, 2024
a71af66
New Modules for Science Borgs
Ossa88 Dec 3, 2024
7e4ccdd
Seems a change I wanted to push a while ago was never commited and I …
Ossa88 Dec 8, 2024
3aa4754
forgot to change search node id
Ossa88 Dec 8, 2024
7f51106
Merge branch 'PentestSS13:master' into AI-Cores
Ossa88 Dec 8, 2024
e41d3c2
This is just a test... remember to move these back to their proper or…
Ossa88 Dec 10, 2024
48d05be
Merge branch 'PentestSS13:master' into AI-Cores
Ossa88 Dec 14, 2024
e189d23
Corrects a flaw where ionthrusters when removed could still be turned…
Ossa88 Dec 25, 2024
377c582
New syndicate borg sprites from Frenjo
Ossa88 Jan 7, 2025
1d1e268
Merge branch 'PentestSS13:master' into AI-Cores
Ossa88 Jan 7, 2025
2704a4b
Merge branch 'PentestSS13:master' into AI-Cores
Ossa88 Jan 9, 2025
4f027d1
Global Proc Code Created
Ossa88 Jan 13, 2025
c7a1fcf
Comment change
Ossa88 Jan 13, 2025
a7d29cf
Removal of Botany Tools from Service Cyborg Start
Ossa88 Jan 13, 2025
c748cc8
Corrects issue where botany omni tools were not passing hydroponics c…
Ossa88 Jan 13, 2025
8356744
Removed old comment code
Ossa88 Jan 13, 2025
9ffca3e
Botany Omni Tool added to the techweb.
Ossa88 Jan 13, 2025
8d29f1c
redundant add/remove code optimized
Ossa88 Jan 13, 2025
d37c8e1
HighCap Light Replacer Cost Increased
Ossa88 Jan 13, 2025
cce2d4d
Adjusted code
Ossa88 Jan 13, 2025
13c7758
code cleanup
Ossa88 Jan 13, 2025
ff918a6
science borg gets spess knife now
Ossa88 Jan 13, 2025
006feb7
More science borg skins
Ossa88 Jan 13, 2025
e9a9672
Cleaned up clipboard paper printer code
Ossa88 Jan 13, 2025
9fa2c9e
code cleanup
Ossa88 Jan 13, 2025
5e39629
code cleanup
Ossa88 Jan 14, 2025
dd7795f
Added ability for cyborgs to drop things in their grabby hands.
Ossa88 Jan 14, 2025
89c3fed
PANDORA'S BOX ADDED
Ossa88 Jan 14, 2025
bec01d9
fix
Ossa88 Jan 14, 2025
b381584
fix plx
Ossa88 Jan 14, 2025
4a52081
Merge branch 'PentestSS13:master' into AI-Cores
Ossa88 Jan 14, 2025
38d746c
replaced files
Ossa88 Jan 14, 2025
0dee5d9
Merge branch 'AI-Cores' of https://github.com/Ossa88/PentestMain into…
Ossa88 Jan 14, 2025
0f8b4d6
final fix?
Ossa88 Jan 14, 2025
91242c0
Merge branch 'PentestSS13:master' into AI-Cores
Ossa88 Jan 20, 2025
6a0fa1e
added stock parts to the science borg apparatus
Ossa88 Jan 20, 2025
a5bffc1
Merge branch 'AI-Cores' of https://github.com/Ossa88/PentestMain into…
Ossa88 Jan 20, 2025
e24bbbb
Went ahead and swapped back the engi omnitool
Ossa88 Jan 22, 2025
5c6916e
science borgs get a emag module
Ossa88 Jan 22, 2025
78e9a0c
PANDORA gets an emag module
Ossa88 Jan 22, 2025
9aa0a20
Cyborg RPED added to pandora
Ossa88 Jan 22, 2025
5d82178
pandoras_box research added
Ossa88 Jan 22, 2025
82004f3
oppsie
Ossa88 Jan 22, 2025
8a087e9
Capitalization
Ossa88 Jan 22, 2025
167b3f2
Fixes research node not appearing.
Ossa88 Jan 22, 2025
7fd6dd6
Fix 3 year old bug with cyborg lamp sprite
Ossa88 Jan 23, 2025
c5c6e52
Updated Syndi Borg Loadouts
Ossa88 Jan 23, 2025
7f7760d
Adv med scanner for Medical/SyndMedical
Ossa88 Jan 25, 2025
4d1b0d4
LAyout design notes
Ossa88 Jan 25, 2025
6d2a192
Merge branch 'PentestSS13:master' into AI-Cores
Ossa88 Jan 26, 2025
d1f5a23
Merge branch 'PentestSS13:master' into AI-Cores
Ossa88 Feb 11, 2025
d1550c2
Merge branch 'PentestSS13:master' into AI-Cores
Ossa88 Feb 12, 2025
4702737
Merge branch 'PentestSS13:master' into AI-Cores
Ossa88 Feb 13, 2025
a14d846
Nested all robots changes into a single .dme
Ossa88 Feb 17, 2025
4c6cf79
Merge branch 'PentestSS13:master' into AI-Cores
Ossa88 Feb 18, 2025
3d00e4b
Service Borgies can now take care of fish friends
Ossa88 Feb 18, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions code/_globalvars/lists/flavor_misc.dm
Original file line number Diff line number Diff line change
Expand Up @@ -112,13 +112,22 @@ GLOBAL_LIST_INIT(ai_core_display_screens, sortList(list(
"Alien",
"Angel",
"Banned",
"Bee",
"Borb",
"Boy",
"BoxFort",
"Bliss",
"Blue",
"Catamari",
"Cheese",
"Clown",
"Darkmatter",
"Database",
"Dorf",
"Firewall",
"Fox",
"Fuzzy",
"Girl",
"Gentoo",
"Glitchman",
"Gondola",
Expand All @@ -127,25 +136,35 @@ GLOBAL_LIST_INIT(ai_core_display_screens, sortList(list(
"HAL 9000",
"Heartline",
"Helios",
"Hotdog",
"House",
"Inverted",
"Lamp",
"Liz",
"Matrix",
"Monochrome",
"Murica",
"Nadburn",
"Nanotrasen",
"Not Malf",
"President",
"Random",
"Rainbow",
"Rainbowslime",
"RandomGod",
"Red",
"Red October",
"Static",
"Syndicat Meow",
"Text",
"Terminal",
"Tiger",
"Too Deep",
"Triumvirate",
"Triumvirate-M",
"Voiddonut",
"Vox",
"YesMan",
"Weird")))

/proc/resolve_ai_icon(input)
Expand Down
8 changes: 7 additions & 1 deletion code/modules/mob/living/silicon/ai/ai.dm
Original file line number Diff line number Diff line change
Expand Up @@ -676,7 +676,13 @@
"floating face" = 'icons/mob/ai.dmi',
"xeno queen" = 'icons/mob/alien.dmi',
"horror" = 'icons/mob/ai.dmi',
"clock" = 'icons/mob/ai.dmi'
"clock" = 'icons/mob/ai.dmi',
"holo-angel" = 'modular_pentest/icons/mob/aiholo.dmi',
"holo-borb" = 'modular_pentest/icons/mob/aiholo.dmi',
"holo-biggestfan" = 'modular_pentest/icons/mob/aiholo.dmi',
"holo-cloudkat" = 'modular_pentest/icons/mob/aiholo.dmi',
"holo-donut" = 'modular_pentest/icons/mob/aiholo.dmi',
"holo-frostphoenix" = 'modular_pentest/icons/mob/aiholo.dmi'
)

input = input("Please select a hologram:") as null|anything in sortList(icon_list)
Expand Down
Binary file modified icons/mob/ai.dmi
Binary file not shown.
Binary file added modular_pentest/icons/mob/aiholo.dmi
Binary file not shown.
Binary file added modular_pentest/icons/mob/numekas1.dmi
Binary file not shown.
Binary file added modular_pentest/icons/obj/borg_modules.dmi
Binary file not shown.
Binary file added modular_pentest/icons/obj/borg_service.dmi
Binary file not shown.
257 changes: 257 additions & 0 deletions modular_pentest/modules/robots/_robot_modules.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,257 @@
/*
Replaces robot_modules.dm

Code to allow the selection of modules for borgs
Contains the general borg module selector code

For Types see the following:

Clown Borg Upgrades: clown_borg.dm
Default Borg Upgrades: default_borg.dm
Engineering Borg Upgrades: engi_borg.dm
Janitor Borg Upgrades: jani_borg.dm
Medical Borg Upgrades: med_borg.dm
Miner Borg Upgrades: miner_borg.dm
Ninja Borg Upgrades: ninja_borg.dm
Peacekeeper Borg Upgrades: peace_borg.dm
Security Borg Upgrades: sec_borg.dm
Service Borg Upgrades: serv_borg.dm
Syndicate Borg Upgeades: synd_borg.dm
*/

/obj/item/robot_module
name = "Default"
icon = 'icons/obj/module.dmi'
icon_state = "std_mod"
w_class = WEIGHT_CLASS_GIGANTIC
item_state = "electronic"
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
flags_1 = CONDUCT_1

var/list/basic_modules = list() //a list of paths, converted to a list of instances on New()
var/list/emag_modules = list() //ditto
var/list/modules = list() //holds all the usable modules
var/list/added_modules = list() //modules not inherient to the robot module, are kept when the module changes
var/list/storages = list()

var/cyborg_base_icon = "robot" //produces the icon for the borg and, if no special_light_key is set, the lights
var/special_light_key //if we want specific lights, use this instead of copying lights in the dmi

var/moduleselect_icon = "nomod"

var/can_be_pushed = TRUE
var/magpulsing = FALSE
var/clean_on_move = FALSE

var/did_feedback = FALSE

var/hat_offset = -3

var/list/ride_offset_x = list("north" = 0, "south" = 0, "east" = -6, "west" = 6)
var/list/ride_offset_y = list("north" = 4, "south" = 4, "east" = 3, "west" = 3)
var/ride_allow_incapacitated = TRUE
var/allow_riding = TRUE
var/canDispose = FALSE // Whether the borg can stuff itself into disposal

var/icon/cyborg_icon_override //WS Addition, need this shit to use VG icons

/obj/item/robot_module/Initialize()
. = ..()
for(var/i in basic_modules)
var/obj/item/I = new i(src)
basic_modules += I
basic_modules -= i
for(var/i in emag_modules)
var/obj/item/I = new i(src)
emag_modules += I
emag_modules -= i

/obj/item/robot_module/Destroy()
basic_modules.Cut()
emag_modules.Cut()
modules.Cut()
added_modules.Cut()
storages.Cut()
return ..()

/obj/item/robot_module/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_CONTENTS)
return
for(var/obj/O in modules)
O.emp_act(severity)
..()

/obj/item/robot_module/proc/get_usable_modules()
. = modules.Copy()

/obj/item/robot_module/proc/get_inactive_modules()
. = list()
var/mob/living/silicon/robot/R = loc
for(var/m in get_usable_modules())
if(!(m in R.held_items))
. += m

/obj/item/robot_module/proc/get_or_create_estorage(storage_type)
for(var/datum/robot_energy_storage/S in storages)
if(istype(S, storage_type))
return S

return new storage_type(src)

/obj/item/robot_module/proc/add_module(obj/item/I, nonstandard, requires_rebuild)
if(istype(I, /obj/item/stack))
var/obj/item/stack/S = I

if(is_type_in_list(S, list(/obj/item/stack/sheet/metal, /obj/item/stack/rods, /obj/item/stack/tile/plasteel)))
if(S.custom_materials && custom_materials.len)
if(S.custom_materials[SSmaterials.GetMaterialRef(/datum/material/iron)])
S.cost = S.custom_materials[SSmaterials.GetMaterialRef(/datum/material/iron)] * 0.25
S.source = get_or_create_estorage(/datum/robot_energy_storage/metal)

else if(istype(S, /obj/item/stack/sheet/glass))
S.cost = 500
S.source = get_or_create_estorage(/datum/robot_energy_storage/glass)

else if(istype(S, /obj/item/stack/medical))
S.cost = 250
S.source = get_or_create_estorage(/datum/robot_energy_storage/medical)

else if(istype(S, /obj/item/stack/cable_coil))
S.cost = 1
S.source = get_or_create_estorage(/datum/robot_energy_storage/wire)

else if(istype(S, /obj/item/stack/marker_beacon))
S.cost = 1
S.source = get_or_create_estorage(/datum/robot_energy_storage/beacon)

if(S && S.source)
S.custom_materials = null
S.is_cyborg = 1

if(I.loc != src)
I.forceMove(src)
modules += I
ADD_TRAIT(I, TRAIT_NODROP, CYBORG_ITEM_TRAIT)
I.mouse_opacity = MOUSE_OPACITY_OPAQUE
if(nonstandard)
added_modules += I
if(requires_rebuild)
rebuild_modules()
return I

/obj/item/robot_module/proc/remove_module(obj/item/I, delete_after)
basic_modules -= I
modules -= I
emag_modules -= I
added_modules -= I
rebuild_modules()
if(delete_after)
qdel(I)

/obj/item/robot_module/proc/respawn_consumable(mob/living/silicon/robot/R, coeff = 1)
for(var/datum/robot_energy_storage/st in storages)
st.energy = min(st.max_energy, st.energy + coeff * st.recharge_rate)

for(var/obj/item/I in get_usable_modules())
if(istype(I, /obj/item/assembly/flash))
var/obj/item/assembly/flash/F = I
F.times_used = 0
F.burnt_out = FALSE
F.update_appearance()
else if(istype(I, /obj/item/melee/baton))
var/obj/item/melee/baton/B = I
if(B.cell)
B.cell.charge = B.cell.maxcharge
else if(istype(I, /obj/item/gun/energy))
var/obj/item/gun/energy/EG = I
if(!EG.chambered)
EG.recharge_newshot() //try to reload a new shot.

R.toner = R.tonermax

/obj/item/robot_module/proc/rebuild_modules() //builds the usable module list from the modules we have
var/mob/living/silicon/robot/R = loc
var/held_modules = R.held_items.Copy()
R.uneq_all()
modules = list()
for(var/obj/item/I in basic_modules)
add_module(I, FALSE, FALSE)
if(R.emagged)
for(var/obj/item/I in emag_modules)
add_module(I, FALSE, FALSE)
for(var/obj/item/I in added_modules)
add_module(I, FALSE, FALSE)
for(var/i in held_modules)
if(i)
R.activate_module(i)
if(R.hud_used)
R.hud_used.update_robot_modules_display()

/obj/item/robot_module/proc/transform_to(new_module_type)
var/mob/living/silicon/robot/R = loc
var/obj/item/robot_module/RM = new new_module_type(R)
if(!RM.be_transformed_to(src))
qdel(RM)
return
R.module = RM
R.update_module_innate()
RM.rebuild_modules()
INVOKE_ASYNC(RM, PROC_REF(do_transform_animation))
qdel(src)
return RM

/obj/item/robot_module/proc/be_transformed_to(obj/item/robot_module/old_module)
for(var/i in old_module.added_modules)
added_modules += i
old_module.added_modules -= i
did_feedback = old_module.did_feedback
return TRUE

/obj/item/robot_module/proc/do_transform_animation()
var/mob/living/silicon/robot/R = loc
if(R.hat)
R.hat.forceMove(get_turf(R))
R.hat = null
R.cut_overlays()
R.setDir(SOUTH)
do_transform_delay()

/obj/item/robot_module/proc/do_transform_delay()
var/mob/living/silicon/robot/R = loc
var/prev_lockcharge = R.lockcharge
sleep(1)
flick("[cyborg_base_icon]_transform", R)
R.notransform = TRUE
R.SetLockdown(1)
R.set_anchored(TRUE)
R.logevent("Chassis configuration has been set to [name].")
sleep(1)
for(var/i in 1 to 4)
playsound(R, pick('sound/items/drill_use.ogg', 'sound/items/jaws_cut.ogg', 'sound/items/jaws_pry.ogg', 'sound/items/welder.ogg', 'sound/items/ratchet.ogg'), 80, TRUE, -1)
sleep(7)
if(!prev_lockcharge)
R.SetLockdown(0)
R.setDir(SOUTH)
R.set_anchored(FALSE)
R.notransform = FALSE
R.updatehealth()
R.update_icons()
R.notify_ai(NEW_MODULE)
if(R.hud_used)
R.hud_used.update_robot_modules_display()
SSblackbox.record_feedback("tally", "cyborg_modules", 1, R.module)

/**
* check_menu: Checks if we are allowed to interact with a radial menu
*
* Arguments:
* * user The mob interacting with a menu
*/
/obj/item/robot_module/proc/check_menu(mob/user)
if(!istype(user))
return FALSE
if(user.incapacitated() || !user.Adjacent(src))
return FALSE
return TRUE
Loading
Loading