From 0a91f3a1f39bc35512c924b961e1b8d4131ef461 Mon Sep 17 00:00:00 2001 From: Sharkmare <34294231+Sharkmare@users.noreply.github.com> Date: Mon, 10 Apr 2023 14:28:55 +0200 Subject: [PATCH] Codename Flipper Illegal PAI system Vix Personal Assistant, Hacking Multitool, all in one companion for penetration testing --- code/modules/mob/living/silicon/pai/pai.dm | 4 +- code/modules/mob/living/silicon/pai/pai_vr.dm | 6 +- icons/obj/paicard_ch.dmi | Bin 0 -> 6611 bytes .../game/objects/items/devices/flipper.dm | 246 ++++++++++++++++++ vorestation.dme | 1 + 5 files changed, 252 insertions(+), 5 deletions(-) create mode 100644 icons/obj/paicard_ch.dmi create mode 100644 modular_chomp/code/game/objects/items/devices/flipper.dm diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 0f3ca13a5d..304f7b234f 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -26,7 +26,7 @@ var/obj/item/device/communicator/integrated/communicator // Our integrated communicator. var/chassis = "pai-repairbot" // A record of your chosen chassis. - var/global/list/possible_chassis = list( + var/list/possible_chassis = list( //CHOMPEDIT: This doesnt need to be /Global/ and actually makes us unable to make unique children "Drone" = "pai-repairbot", "Cat" = "pai-cat", "Mouse" = "pai-mouse", @@ -57,7 +57,7 @@ //VOREStation Addition End ) - var/global/list/possible_say_verbs = list( + var/list/possible_say_verbs = list( //CHOMPEDIT: This doesnt need to be /Global/ and actually makes us unable to make unique children "Robotic" = list("states","declares","queries"), "Natural" = list("says","yells","asks"), "Beep" = list("beeps","beeps loudly","boops"), diff --git a/code/modules/mob/living/silicon/pai/pai_vr.dm b/code/modules/mob/living/silicon/pai/pai_vr.dm index c182563619..1f7013750e 100644 --- a/code/modules/mob/living/silicon/pai/pai_vr.dm +++ b/code/modules/mob/living/silicon/pai/pai_vr.dm @@ -10,12 +10,12 @@ var/icon/holo_icon_north var/holo_icon_dimension_X = 32 var/holo_icon_dimension_Y = 32 - var/global/list/wide_chassis = list( + var/list/wide_chassis = list( //CHOMPEDIT: This doesnt need to be /Global/ and actually makes us unable to make unique children "rat", "panther", "teppi" ) - var/global/list/flying_chassis = list( + var/list/flying_chassis = list( //CHOMPEDIT: This doesnt need to be /Global/ and actually makes us unable to make unique children "pai-parrot", "pai-bat", "pai-butterfly", @@ -28,7 +28,7 @@ //the birds especially! Just naw. If someone else wants to mess with 12x4 frames of animation where //most of the pixels are different kinds of green and tastefully translate that to whitescale //they can have fun with that! I not doing it! - var/global/list/allows_eye_color = list( + var/list/allows_eye_color = list( //CHOMPEDIT: This doesnt need to be /Global/ and actually makes us unable to make unique children "pai-repairbot", "pai-typezero", "pai-bat", diff --git a/icons/obj/paicard_ch.dmi b/icons/obj/paicard_ch.dmi new file mode 100644 index 0000000000000000000000000000000000000000..f2a430bce8471312d366a5d31c18cfb7b54ac33a GIT binary patch literal 6611 zcmc&(cTiLBnhwnZYHWa_hzf#q6u}EYf{0>3iWCtL0@Ax85FjDJAA(BN(4+_Lx5+$h<9veajDo{e_JqlGS0HN-1z4* zIyXqE?E=g~Z&JgxoL!6h`Ukg4xyIz<&k$(=Id3zY^pAr3zA@92d(tUS(qDVzT7cE^ zwnYZU|5!GSW8Boed*XS^#puQl){n%$99vMk_(JdCg2{$kPrJ)$>kC&5^yR{=eM+>) z#;1->J$!tL|~-P~J@$r#!!jd#<_lvZlv|^$5t#2k!|}A>+vS z-$%Rj5BIM69$cRnTI29*3L@3l5aJl{irMH~anIeH&~cm8$G4kV_r6ngSz;j4aDmp? zjRpHu748h>jr_}3?eM13SzK>5&f!aDc=&F0CDpOkWxc@jS(_Z(7xL`;|Prs-N9i>cqTY zW}7g0@F+g2|A)+_*|@{Ec%(;4v%gI6TEBQm7SlEr?%LDq{xqf`-SPCRL()C%f{}%m z!+qKUG4fVEk>y$LkOBGhuioO4v98vwmgUEqiwe}omca9dx|ZJl34u~H#tw-4+xx{? zbnWC5DD7g&M-mARvU}&zV9N#CC&0I_{{Hc^Acwo5py-=i+)6^bfq^aNPnXP{(j^oL z#q>omzkYqTy^|xx`IH)d{}Sk8m74H`atC^dNH3zqOVsUDW+%#8)KuAgesmpM?ro#f zp|S0hc9hq6zxxdBmTL~n7P<7s7K&cWha!3kNBl>;$m+Bnj+5kz{HnF-!H{^y8s_Ta zy4KtbOJu^@C+7G1q;AE-q02Vb?=2PKP_&s(or+2OdU$hpvI8SLos;;AzC_tEb!sEx zrzM>lM)%}o2A(fpwa{m$^RLkGil2.#?#f?!Kvja+hCRsLK1cu6Tmx4CYo)bv^j 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 u4|=j>M!DayLR+=}xoiI4e!TT_cThat card is too damaged to activate!") + return + var/time_till_respawn = user.time_till_respawn() + if(time_till_respawn == -1) // Special case, never allowed to respawn + to_chat(usr, "Respawning is not allowed!") + else if(time_till_respawn) // Nonzero time to respawn + to_chat(usr, "You can't do that yet! You died too recently. You need to wait another [round(time_till_respawn/10/60, 0.1)] minutes.") + return + if(jobban_isbanned(usr, "pAI")) + to_chat(usr,"You cannot join a pAI card when you are banned from playing as a pAI.") + return + + for(var/ourkey in paikeys) + if(ourkey == user.ckey) + to_chat(usr, "You can't just rejoin any old pAI card!!! Your card still exists.") + return + + var/choice = tgui_alert(user, "You sure you want to inhabit this PAI, or submit yourself to being recruited?", "Confirmation", list("Inhabit", "Recruit", "Cancel")) + if(choice == "Cancel") + return ..() + if(choice == "Recruit") + paiController.recruitWindow(user) + return ..() + choice = tgui_alert(user, "Do you want to load your pAI data?", "Load", list("Yes", "No")) + var/actual_pai_name + var/turf/location = get_turf(src) + if(choice == "No") + var/pai_name = "Vix"//tgui_input_text(user, "Choose your character's name", "Character Name") + actual_pai_name = sanitize_name(pai_name, ,1) + if(isnull(actual_pai_name)) + return ..() + var/obj/item/device/paicard/flipper/card = new(location) + var/mob/living/silicon/pai/flipper/new_pai = new(card) + new_pai.key = user.key + paikeys |= new_pai.ckey + card.setPersonality(new_pai) + new_pai.SetName(actual_pai_name) + + if(choice == "Yes") + var/obj/item/device/paicard/flipper/card = new(location) + var/mob/living/silicon/pai/flipper/new_pai = new(card) + new_pai.key = user.key + paikeys |= new_pai.ckey + card.setPersonality(new_pai) + if(!new_pai.savefile_load(new_pai)) + var/pai_name = "Vix"//tgui_input_text(new_pai, "Choose your character's name", "Character Name") + actual_pai_name = sanitize_name(pai_name, ,1) + if(isnull(actual_pai_name)) + return ..() + + qdel(src) + return ..() + +//proc override to avoid pAI players being invisible while the chassis selection window is open +/mob/living/silicon/pai/flipper/choose_chassis() + set category = "pAI Commands" + set name = "Choose Chassis" + var/choice + + choice = tgui_input_list(usr, "What would you like to use for your mobile chassis icon?", "Chassis Choice", possible_chassis) + if(!choice) return + var/oursize = size_multiplier + resize(1, FALSE, TRUE, TRUE, FALSE) //We resize ourselves to normal here for a moment to let the vis_height get reset + chassis = possible_chassis[choice] + vore_capacity = 1 + vore_capacity_ex = list("stomach" = 1) + resize(oursize, FALSE, TRUE, TRUE, FALSE) //And then back again now that we're sure the vis_height is correct. + update_icon() \ No newline at end of file diff --git a/vorestation.dme b/vorestation.dme index 5978925a64..b64ff0474d 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -4557,6 +4557,7 @@ #include "modular_chomp\code\game\objects\items.dm" #include "modular_chomp\code\game\objects\items\petrifier.dm" #include "modular_chomp\code\game\objects\items\clockwork\ratvarian_spear.dm" +#include "modular_chomp\code\game\objects\items\devices\flipper.dm" #include "modular_chomp\code\game\objects\items\weapons\capture_crystal.dm" #include "modular_chomp\code\game\objects\structures\desert_planet_structures.dm" #include "modular_chomp\code\game\objects\structures\gargoyle.dm"