diff --git a/code/__DEFINES/vv.dm b/code/__DEFINES/vv.dm index cb38597f7b1..85d6b5483d4 100644 --- a/code/__DEFINES/vv.dm +++ b/code/__DEFINES/vv.dm @@ -132,10 +132,6 @@ #define VV_HK_COPY_OUTFIT "copy_outfit" #define VV_HK_MOD_MUTATIONS "quirkmut" #define VV_HK_MOD_QUIRKS "quirkmod" -#define VV_HK_MAKE_MONKEY "human_monkify" -#define VV_HK_MAKE_CYBORG "human_cyborgify" -#define VV_HK_MAKE_SLIME "human_slimeify" -#define VV_HK_MAKE_ALIEN "human_alienify" #define VV_HK_SET_SPECIES "setspecies" #define VV_HK_PURRBATION "purrbation" diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 33aca41eb1d..f309aac633c 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -230,18 +230,6 @@ switch(href_list["simplemake"]) if("observer") M.change_mob_type( /mob/dead/observer , null, null, delmob ) - if("drone") - M.change_mob_type( /mob/living/carbon/alien/humanoid/drone , null, null, delmob ) - if("hunter") - M.change_mob_type( /mob/living/carbon/alien/humanoid/hunter , null, null, delmob ) - if("queen") - M.change_mob_type( /mob/living/carbon/alien/humanoid/royal/queen , null, null, delmob ) - if("praetorian") - M.change_mob_type( /mob/living/carbon/alien/humanoid/royal/praetorian , null, null, delmob ) - if("sentinel") - M.change_mob_type( /mob/living/carbon/alien/humanoid/sentinel , null, null, delmob ) - if("larva") - M.change_mob_type( /mob/living/carbon/alien/larva , null, null, delmob ) if("human") var/posttransformoutfit = usr.client.robust_dress_shop() if (!posttransformoutfit) @@ -249,42 +237,10 @@ var/mob/living/carbon/human/newmob = M.change_mob_type( /mob/living/carbon/human , null, null, delmob ) if(posttransformoutfit && istype(newmob)) newmob.equipOutfit(posttransformoutfit) - if("slime") - M.change_mob_type( /mob/living/simple_animal/slime , null, null, delmob ) - if("adultslime") - var/mob/living/simple_animal/slime/baby_slime = M.change_mob_type( /mob/living/simple_animal/slime , null, null, delmob ) - baby_slime.amount_grown = SLIME_EVOLUTION_THRESHOLD - baby_slime.Evolve() if("monkey") M.change_mob_type( /mob/living/carbon/human/species/monkey , null, null, delmob ) if("robot") M.change_mob_type( /mob/living/silicon/robot , null, null, delmob ) - if("cat") - M.change_mob_type( /mob/living/simple_animal/pet/cat , null, null, delmob ) - if("runtime") - M.change_mob_type( /mob/living/simple_animal/pet/cat/runtime , null, null, delmob ) - if("corgi") - M.change_mob_type( /mob/living/simple_animal/pet/dog/corgi , null, null, delmob ) - if("ian") - M.change_mob_type( /mob/living/simple_animal/pet/dog/corgi/ian , null, null, delmob ) - if("pug") - M.change_mob_type( /mob/living/simple_animal/pet/dog/pug , null, null, delmob ) - if("crab") - M.change_mob_type( /mob/living/simple_animal/crab , null, null, delmob ) - if("coffee") - M.change_mob_type( /mob/living/simple_animal/crab/coffee , null, null, delmob ) - if("parrot") - M.change_mob_type( /mob/living/simple_animal/parrot , null, null, delmob ) - if("polyparrot") - M.change_mob_type( /mob/living/simple_animal/parrot/poly , null, null, delmob ) - if("constructjuggernaut") - M.change_mob_type( /mob/living/simple_animal/hostile/construct/juggernaut , null, null, delmob ) - if("constructartificer") - M.change_mob_type( /mob/living/simple_animal/hostile/construct/artificer , null, null, delmob ) - if("constructwraith") - M.change_mob_type( /mob/living/simple_animal/hostile/construct/wraith , null, null, delmob ) - if("shade") - M.change_mob_type( /mob/living/simple_animal/shade , null, null, delmob ) else if(href_list["boot2"]) if(!check_rights(R_ADMIN)) @@ -550,46 +506,6 @@ message_admins("[key_name(usr)] set 'forced_threat_level' to [GLOB.dynamic_forced_threat_level].") dynamic_mode_options(usr) - else if(href_list["monkeyone"]) - if(!check_rights(R_SPAWN)) - return - - var/mob/living/carbon/human/H = locate(href_list["monkeyone"]) - if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human.", confidential = TRUE) - return - - log_admin("[key_name(usr)] attempting to monkeyize [key_name(H)].") - message_admins(span_adminnotice("[key_name_admin(usr)] attempting to monkeyize [key_name_admin(H)].")) - H.monkeyize() - - else if(href_list["humanone"]) - if(!check_rights(R_SPAWN)) - return - - var/mob/living/carbon/human/Mo = locate(href_list["humanone"]) - if(!ismonkey(Mo)) - to_chat(usr, "This can only be used on monkeys.", confidential = TRUE) - return - - log_admin("[key_name(usr)] attempting to humanize [key_name(Mo)].") - message_admins(span_adminnotice("[key_name_admin(usr)] attempting to humanize [key_name_admin(Mo)].")) - Mo.humanize() - - else if(href_list["corgione"]) - if(!check_rights(R_SPAWN)) - return - - var/mob/living/carbon/human/H = locate(href_list["corgione"]) - if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human.", confidential = TRUE) - return - - log_admin("[key_name(usr)] attempting to corgize [key_name(H)].") - message_admins(span_adminnotice("[key_name_admin(usr)] attempting to corgize [key_name_admin(H)].")) - H.corgize() - - else if(href_list["forcespeech"]) if(!check_rights(R_FUN)) return @@ -773,9 +689,11 @@ if(!check_rights(R_SPAWN)) return - var/mob/living/carbon/human/H = locate(href_list["makeai"]) - if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human.", confidential = TRUE) + var/mob/our_mob = locate(href_list["makeai"]) + if(!istype(our_mob)) + return + if(isAI(our_mob)) + to_chat(usr, "That's already an AI.", confidential = TRUE) return var/move = TRUE @@ -784,68 +702,25 @@ return if("No") move = FALSE - if(QDELETED(H)) + if(QDELETED(our_mob)) to_chat(usr, span_danger("Subject was deleted already. Transform canceled.")) return - message_admins(span_danger("Admin [key_name_admin(usr)] AIized [key_name_admin(H)]!")) - log_admin("[key_name(usr)] AIized [key_name(H)].") - H.AIize(TRUE, H.client, move) - - else if(href_list["makealien"]) - if(!check_rights(R_SPAWN)) - return - - var/mob/living/carbon/human/H = locate(href_list["makealien"]) - if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human.", confidential = TRUE) - return - - usr.client.cmd_admin_alienize(H) - - else if(href_list["makeslime"]) - if(!check_rights(R_SPAWN)) - return - - var/mob/living/carbon/human/H = locate(href_list["makeslime"]) - if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human.", confidential = TRUE) - return - - usr.client.cmd_admin_slimeize(H) - - else if(href_list["makeblob"]) - if(!check_rights(R_SPAWN)) - return - - var/mob/living/carbon/human/H = locate(href_list["makeblob"]) - if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human.", confidential = TRUE) - return - - usr.client.cmd_admin_blobize(H) - + message_admins(span_danger("Admin [key_name_admin(usr)] AIized [key_name_admin(our_mob)]!")) + log_admin("[key_name(usr)] AIized [key_name(our_mob)].") + our_mob.AIize(TRUE, our_mob.client, move) else if(href_list["makerobot"]) if(!check_rights(R_SPAWN)) return - var/mob/living/carbon/human/H = locate(href_list["makerobot"]) - if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human.", confidential = TRUE) + var/mob/our_mob = locate(href_list["makerobot"]) + if(!istype(our_mob)) + return + if(iscyborg(our_mob)) + to_chat(usr, "That's already a cyborg.", confidential = TRUE) return - usr.client.cmd_admin_robotize(H) - - else if(href_list["makeanimal"]) - if(!check_rights(R_SPAWN)) - return - - var/mob/M = locate(href_list["makeanimal"]) - if(isnewplayer(M)) - to_chat(usr, "This cannot be used on instances of type /mob/dead/new_player.", confidential = TRUE) - return - - usr.client.cmd_admin_animalize(M) + usr.client.cmd_admin_robotize(our_mob) else if(href_list["adminplayeropts"]) var/mob/M = locate(href_list["adminplayeropts"]) diff --git a/code/modules/admin/verbs/admingame.dm b/code/modules/admin/verbs/admingame.dm index 2152160993d..59e9c24c3d1 100644 --- a/code/modules/admin/verbs/admingame.dm +++ b/code/modules/admin/verbs/admingame.dm @@ -96,81 +96,44 @@ body += "Play sound to | " body += "Language Menu" - if (M.client) + if(M.client) if(!isnewplayer(M)) body += "

" - body += "Transformation:" - body += "
" + body += "Transformation:
" + if(isobserver(M)) + body += "Ghost | " + else + body += "Make Ghost | " - //Human if(ishuman(M) && !ismonkey(M)) - body += "Human | " + body += "Human | " else - body += "Humanize | " + body += "Make Human | " - //Monkey if(ismonkey(M)) - body += "Monkeyized | " + body += "Monkey | " else - body += "Monkeyize | " + body += "Make Monkey | " - //Corgi - if(iscorgi(M)) - body += "Corgized | " + if(iscyborg(M)) + body += "Cyborg | " else - body += "Corgize | " + body += "Make Cyborg | " - //AI / Cyborg if(isAI(M)) - body += "Is an AI " - else if(ishuman(M)) - body += "Make AI | " - body += "Make Robot | " - body += "Make Alien | " - body += "Make Slime | " - body += "Make Blob | " - - //Simple Animals - if(isanimal(M)) - body += "Re-Animalize | " + body += "AI" else - body += "Animalize | " + body += "Make AI" - body += "

" - body += "Rudimentary transformation:
These transformations only create a new mob type and copy stuff over. They do not take into account MMIs and similar mob-specific things. The buttons in 'Transformations' are preferred, when possible.

" - body += "Observer | " - body += "\[ Alien: Drone, " - body += "Hunter, " - body += "Sentinel, " - body += "Praetorian, " - body += "Queen, " - body += "Larva \] " - body += "Human " - body += "\[ slime: Baby, " - body += "Adult \] " - body += "Monkey | " - body += "Cyborg | " - body += "Cat | " - body += "Runtime | " - body += "Corgi | " - body += "Ian | " - body += "Crab | " - body += "Coffee | " - body += "\[ Construct: Juggernaut , " - body += "Artificer , " - body += "Wraith \] " - body += "Shade" - body += "
" - - if (M.client) body += "

" body += "Other actions:" body += "
" - body += "Forcesay | " - body += "Thunderdome 1 | " - body += "Thunderdome 2 | " - body += "Thunderdome Admin | " - body += "Thunderdome Observer | " + if(!isnewplayer(M)) + body += "Forcesay | " + body += "Thunderdome 1 | " + body += "Thunderdome 2 | " + body += "Thunderdome Admin | " + body += "Thunderdome Observer | " body += "Commend Behavior | " body += "
" diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index d65e9620324..76703c9eb21 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -39,53 +39,13 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that /client/proc/cmd_admin_robotize(mob/M in GLOB.mob_list) set category = "Admin.Fun" - set name = "Make Robot" + set name = "Make Cyborg" if(!SSticker.HasRoundStarted()) tgui_alert(usr,"Wait until the game starts") return - if(ishuman(M)) - log_admin("[key_name(src)] has robotized [M.key].") - var/mob/living/carbon/human/H = M - INVOKE_ASYNC(H, /mob/living/carbon/human.proc/Robotize) - - else - tgui_alert(usr,"Invalid mob") - -/client/proc/cmd_admin_blobize(mob/M in GLOB.mob_list) - set category = "Admin.Fun" - set name = "Make Blob" - - if(!SSticker.HasRoundStarted()) - tgui_alert(usr,"Wait until the game starts") - return - if(ishuman(M)) - log_admin("[key_name(src)] has blobized [M.key].") - var/mob/living/carbon/human/H = M - H.become_overmind() - else - tgui_alert(usr,"Invalid mob") - - -/client/proc/cmd_admin_animalize(mob/M in GLOB.mob_list) - set category = "Admin.Fun" - set name = "Make Simple Animal" - - if(!SSticker.HasRoundStarted()) - tgui_alert(usr,"Wait until the game starts") - return - - if(!M) - tgui_alert(usr,"That mob doesn't seem to exist, close the panel and try again.") - return - - if(isnewplayer(M)) - tgui_alert(usr,"The mob must not be a new_player.") - return - - log_admin("[key_name(src)] has animalized [M.key].") - INVOKE_ASYNC(M, /mob.proc/Animalize) - + log_admin("[key_name(src)] has robotized [M.key].") + INVOKE_ASYNC(M, /mob.proc/Robotize) /client/proc/makepAI(turf/T in GLOB.mob_list) set category = "Admin.Fun" @@ -100,7 +60,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that if(!choice) return if(!isobserver(choice)) - var/confirm = tgui_alert(usr, "[choice.key] isn't ghosting right now. Are you sure you want to yank him out of them out of their body and place them in this pAI?", "Spawn pAI Confirmation", list("Yes", "No")) + var/confirm = tgui_alert(usr, "[choice.key] isn't ghosting right now. Are you sure you want to yank them out of their body and place them in this pAI?", "Spawn pAI Confirmation", list("Yes", "No")) if(confirm != "Yes") return var/obj/item/paicard/card = new(T) @@ -120,37 +80,6 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that SSpai.candidates.Remove(candidate) SSblackbox.record_feedback("tally", "admin_verb", 1, "Make pAI") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/cmd_admin_alienize(mob/M in GLOB.mob_list) - set category = "Admin.Fun" - set name = "Make Alien" - - if(!SSticker.HasRoundStarted()) - tgui_alert(usr,"Wait until the game starts") - return - if(ishuman(M)) - INVOKE_ASYNC(M, /mob/living/carbon/human/proc/Alienize) - SSblackbox.record_feedback("tally", "admin_verb", 1, "Make Alien") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - log_admin("[key_name(usr)] made [key_name(M)] into an alien at [AREACOORD(M)].") - message_admins(span_adminnotice("[key_name_admin(usr)] made [ADMIN_LOOKUPFLW(M)] into an alien.")) - else - tgui_alert(usr,"Invalid mob") - -/client/proc/cmd_admin_slimeize(mob/M in GLOB.mob_list) - set category = "Admin.Fun" - set name = "Make slime" - - if(!SSticker.HasRoundStarted()) - tgui_alert(usr,"Wait until the game starts") - return - if(ishuman(M)) - INVOKE_ASYNC(M, /mob/living/carbon/human/proc/slimeize) - SSblackbox.record_feedback("tally", "admin_verb", 1, "Make Slime") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - log_admin("[key_name(usr)] made [key_name(M)] into a slime at [AREACOORD(M)].") - message_admins(span_adminnotice("[key_name_admin(usr)] made [ADMIN_LOOKUPFLW(M)] into a slime.")) - else - tgui_alert(usr,"Invalid mob") - - //TODO: merge the vievars version into this or something maybe mayhaps /client/proc/cmd_debug_del_all(object as text) set category = "Debug" diff --git a/code/modules/admin/view_variables/topic.dm b/code/modules/admin/view_variables/topic.dm index 8f5a2c05772..cc6a552bafd 100644 --- a/code/modules/admin/view_variables/topic.dm +++ b/code/modules/admin/view_variables/topic.dm @@ -60,22 +60,6 @@ vv_update_display(A, "dir", dir2text(A.dir)) - else if(href_list["makehuman"]) - if(!check_rights(R_SPAWN)) - return - - var/mob/living/carbon/human/Mo = locate(href_list["makehuman"]) in GLOB.mob_list - if(!ismonkey(Mo)) - to_chat(usr, "This can only be done to monkeys", confidential = TRUE) - return - - if(tgui_alert(usr,"Confirm mob type change?",,list("Transform","Cancel")) != "Transform") - return - if(!Mo) - to_chat(usr, "Mob doesn't exist anymore", confidential = TRUE) - return - holder.Topic(href, list("humanone"=href_list["makehuman"])) - else if(href_list["adjustDamage"] && href_list["mobToDamage"]) if(!check_rights(NONE)) return diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 87e35da8c45..788f73eda06 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -780,10 +780,6 @@ VV_DROPDOWN_OPTION(VV_HK_COPY_OUTFIT, "Copy Outfit") VV_DROPDOWN_OPTION(VV_HK_MOD_MUTATIONS, "Add/Remove Mutation") VV_DROPDOWN_OPTION(VV_HK_MOD_QUIRKS, "Add/Remove Quirks") - VV_DROPDOWN_OPTION(VV_HK_MAKE_MONKEY, "Make Monkey") - VV_DROPDOWN_OPTION(VV_HK_MAKE_CYBORG, "Make Cyborg") - VV_DROPDOWN_OPTION(VV_HK_MAKE_SLIME, "Make Slime") - VV_DROPDOWN_OPTION(VV_HK_MAKE_ALIEN, "Make Alien") VV_DROPDOWN_OPTION(VV_HK_SET_SPECIES, "Set Species") VV_DROPDOWN_OPTION(VV_HK_PURRBATION, "Toggle Purrbation") @@ -838,30 +834,6 @@ remove_quirk(T) else add_quirk(T) - if(href_list[VV_HK_MAKE_MONKEY]) - if(!check_rights(R_SPAWN)) - return - if(tgui_alert(usr,"Confirm mob type change?",,list("Transform","Cancel")) != "Transform") - return - usr.client.holder.Topic("vv_override", list("monkeyone"=href_list[VV_HK_TARGET])) - if(href_list[VV_HK_MAKE_CYBORG]) - if(!check_rights(R_SPAWN)) - return - if(tgui_alert(usr,"Confirm mob type change?",,list("Transform","Cancel")) != "Transform") - return - usr.client.holder.Topic("vv_override", list("makerobot"=href_list[VV_HK_TARGET])) - if(href_list[VV_HK_MAKE_ALIEN]) - if(!check_rights(R_SPAWN)) - return - if(tgui_alert(usr,"Confirm mob type change?",,list("Transform","Cancel")) != "Transform") - return - usr.client.holder.Topic("vv_override", list("makealien"=href_list[VV_HK_TARGET])) - if(href_list[VV_HK_MAKE_SLIME]) - if(!check_rights(R_SPAWN)) - return - if(tgui_alert(usr,"Confirm mob type change?",,list("Transform","Cancel")) != "Transform") - return - usr.client.holder.Topic("vv_override", list("makeslime"=href_list[VV_HK_TARGET])) if(href_list[VV_HK_SET_SPECIES]) if(!check_rights(R_SPAWN)) return diff --git a/code/modules/mob/mob_transformation_simple.dm b/code/modules/mob/mob_transformation_simple.dm index 91baf04ab2e..01aa30a7d75 100644 --- a/code/modules/mob/mob_transformation_simple.dm +++ b/code/modules/mob/mob_transformation_simple.dm @@ -47,7 +47,7 @@ D.updateappearance(mutcolor_update=1, mutations_overlay_update=1) else if(ishuman(M)) var/mob/living/carbon/human/H = M - client.prefs.safe_transfer_prefs_to(H) + client?.prefs.safe_transfer_prefs_to(H) H.dna.update_dna_identity() if(mind && isliving(M)) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 99f84ccbb74..5b81e921471 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -57,26 +57,6 @@ set_species(species) return src -/mob/living/carbon/human/AIize(transfer_after = TRUE, client/preference_source) - if (notransform) - return - for(var/t in bodyparts) - qdel(t) - - return ..() - -/mob/living/carbon/AIize(transfer_after = TRUE, client/preference_source) - if (notransform) - return - notransform = TRUE - Paralyze(1, ignore_canstun = TRUE) - for(var/obj/item/W in src) - dropItemToGround(W) - regenerate_icons() - icon = null - invisibility = INVISIBILITY_MAXIMUM - return ..() - /mob/proc/AIize(transfer_after = TRUE, client/preference_source, move = TRUE) var/list/turf/landmark_loc = list() @@ -103,33 +83,45 @@ if(client) stop_sound_channel(CHANNEL_LOBBYMUSIC) - if(!transfer_after) - mind.active = FALSE + var/mob/living/silicon/ai/our_AI = new /mob/living/silicon/ai(pick(landmark_loc), null, src) + . = our_AI - . = new /mob/living/silicon/ai(pick(landmark_loc), null, src) + if(mind) + if(!transfer_after) + mind.active = FALSE + mind.transfer_to(our_AI) + else if(transfer_after) + our_AI.key = key if(preference_source) apply_pref_name(/datum/preference/name/ai, preference_source) qdel(src) -/mob/living/carbon/human/proc/Robotize(delete_items = 0, transfer_after = TRUE) +/mob/living/carbon/AIize(transfer_after = TRUE, client/preference_source) if (notransform) return notransform = TRUE Paralyze(1, ignore_canstun = TRUE) - for(var/obj/item/W in src) - if(delete_items) - qdel(W) - else - dropItemToGround(W) + dropItemToGround(W) regenerate_icons() icon = null invisibility = INVISIBILITY_MAXIMUM + return ..() + +/mob/living/carbon/human/AIize(transfer_after = TRUE, client/preference_source) + if (notransform) + return for(var/t in bodyparts) qdel(t) + return ..() + +/mob/proc/Robotize(delete_items = 0, transfer_after = TRUE) + if(notransform) + return + notransform = TRUE var/mob/living/silicon/robot/R = new /mob/living/silicon/robot(loc) R.gender = gender @@ -161,6 +153,24 @@ INVOKE_ASYNC(R, /mob/living/silicon/robot.proc/replace_banned_cyborg) qdel(src) +/mob/living/Robotize(delete_items = 0, transfer_after = TRUE) + if(notransform) + return + notransform = TRUE + Paralyze(1, ignore_canstun = TRUE) + + for(var/obj/item/W in src) + if(delete_items) + qdel(W) + else + dropItemToGround(W) + regenerate_icons() + icon = null + invisibility = INVISIBILITY_MAXIMUM + + notransform = FALSE + return ..() + /mob/living/silicon/robot/proc/replace_banned_cyborg() to_chat(src, "You are job banned from cyborg! Appeal your job ban if you want to avoid this in the future!") ghostize(FALSE)