From 1e1426fa8ae5839f1b43306650d4eb187c8ec01c Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 14 Jun 2013 16:36:55 -0700 Subject: [PATCH] Minor vox sprite fix, added vox to Create Admin verb. --- baystation12.dme | 1 + code/modules/admin/topic.dm | 20 +++-- code/modules/admin/verbs/one_click_antag.dm | 95 +++++++++++++++++++- code/modules/admin/verbs/vox_raiders.dm | 66 ++++++++++++++ icons/mob/human_races/r_def_vox.dmi | Bin 2013 -> 2036 bytes icons/mob/human_races/r_vox.dmi | Bin 2013 -> 2033 bytes 6 files changed, 172 insertions(+), 10 deletions(-) create mode 100644 code/modules/admin/verbs/vox_raiders.dm diff --git a/baystation12.dme b/baystation12.dme index 68d5ab3d3d0..78f58149999 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -710,6 +710,7 @@ #include "code\modules\admin\verbs\striketeam_syndicate.dm" #include "code\modules\admin\verbs\ticklag.dm" #include "code\modules\admin\verbs\tripAI.dm" +#include "code\modules\admin\verbs\vox_raiders.dm" #include "code\modules\assembly\assembly.dm" #include "code\modules\assembly\bomb.dm" #include "code\modules\assembly\helpers.dm" diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 292327ca274..6303e8d0da0 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -11,31 +11,31 @@ if("1") log_admin("[key_name(usr)] has spawned a traitor.") if(!src.makeTraitors()) - usr << "\red Unfortunatly there were no candidates available" + usr << "\red Unfortunately there weren't enough candidates available." if("2") log_admin("[key_name(usr)] has spawned a changeling.") if(!src.makeChanglings()) - usr << "\red Unfortunatly there were no candidates available" + usr << "\red Unfortunately there weren't enough candidates available." if("3") log_admin("[key_name(usr)] has spawned revolutionaries.") if(!src.makeRevs()) - usr << "\red Unfortunatly there were no candidates available" + usr << "\red Unfortunately there weren't enough candidates available." if("4") log_admin("[key_name(usr)] has spawned a cultists.") if(!src.makeCult()) - usr << "\red Unfortunatly there were no candidates available" + usr << "\red Unfortunately there weren't enough candidates available." if("5") log_admin("[key_name(usr)] has spawned a malf AI.") if(!src.makeMalfAImode()) - usr << "\red Unfortunatly there were no candidates available" + usr << "\red Unfortunately there weren't enough candidates available." if("6") log_admin("[key_name(usr)] has spawned a wizard.") if(!src.makeWizard()) - usr << "\red Unfortunatly there were no candidates available" + usr << "\red Unfortunately there weren't enough candidates available." if("7") log_admin("[key_name(usr)] has spawned a nuke team.") if(!src.makeNukeTeam()) - usr << "\red Unfortunatly there were no candidates available" + usr << "\red Unfortunately there weren't enough candidates available." if("8") log_admin("[key_name(usr)] has spawned a ninja.") src.makeSpaceNinja() @@ -44,8 +44,10 @@ src.makeAliens() if("10") log_admin("[key_name(usr)] has spawned a death squad.") - if(!src.makeDeathsquad()) - usr << "\red Unfortunatly there were no candidates available" + if("11") + log_admin("[key_name(usr)] has spawned vox raiders.") + if(!src.makeVoxRaiders()) + usr << "\red Unfortunately there weren't enough candidates available." else if(href_list["dbsearchckey"] || href_list["dbsearchadmin"]) var/adminckey = href_list["dbsearchadmin"] var/playerckey = href_list["dbsearchckey"] diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 8ef53eb0232..823d1adc2f0 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -17,6 +17,7 @@ client/proc/one_click_antag() Make Cult
Make Malf AI
Make Wizard (Requires Ghosts)
+ Make Vox Raiders (Requires Ghosts)
"} /* These dont work just yet Ninja, aliens and deathsquad I have not looked into yet @@ -429,4 +430,96 @@ client/proc/one_click_antag() ticker.mode.traitors += new_syndicate_commando.mind new_syndicate_commando.equip_syndicate_commando(syndicate_leader_selected) - return new_syndicate_commando \ No newline at end of file + return new_syndicate_commando + +/datum/admins/proc/makeVoxRaiders() + + var/list/mob/dead/observer/candidates = list() + var/mob/dead/observer/theghost = null + var/time_passed = world.time + var/input = "Disregard shinies, acquire hardware." + + var/leader_chosen = 0 //when the leader is chosen. The last person spawned. + + //Generates a list of candidates from active ghosts. The admin picks which players to respawn as the vox. + for(var/mob/dead/observer/G in player_list) + spawn(0) + if(is_alien_whitelisted(src, "Vox") || !config.usealienwhitelist) + switch(alert(G,"Do you wish to be considered for a vox raiding party arriving on the station?","Please answer in 30 seconds!","Yes","No")) + if("Yes") + if((world.time-time_passed)>300)//If more than 30 game seconds passed. + return + candidates += G + if("No") + return + else + return + + sleep(300) //Debug. + + for(var/mob/dead/observer/G in candidates) + if(!G.key) + candidates.Remove(G) + + if(candidates.len) + var/raiders = 1 + //Spawns vox raiders and equips them. Two raiders, two engineers. + for (var/obj/effect/landmark/L in world) + if(L.name == "Response Team") + if(raiders<=0) + break + + var/mob/living/carbon/human/new_vox = create_vox_raider(L, leader_chosen) + + while((!theghost || !theghost.client) && candidates.len) + theghost = pick(candidates) + candidates.Remove(theghost) + + if(!theghost) + del(new_vox) + break + + new_vox.key = theghost.key + new_vox << "\blue You are a Vox Primalis, fresh out of the Shoal. Your crew has arrived at the NSV Exodus to begin pillaging! Your current goal is: \red [input]" + new_vox << "\red Don't forget to turn on your nitrogen internals!" + + raiders-- + if(raiders >= 4) + return 0 + else + return 0 + return 1 + +/datum/admins/proc/create_vox_raider(obj/spawn_location, leader_chosen = 0) + var/mob/living/carbon/human/new_vox = new(spawn_location.loc) + + new_vox.gender = pick(MALE, FEMALE) + var/datum/preferences/A = new() //Randomize appearance for the raider. + A.randomize_appearance_for(new_vox) + new_vox.h_style = "Short Vox Quills" + new_vox.regenerate_icons() + + var/sounds = rand(2,10) + var/i = 0 + var/newname = "" + + while(i<=sounds) + i++ + newname += pick(list("ti","hi","ki","ya","ta","ha","ka","ya","chi","cha","kah")) + + new_vox.real_name = capitalize(newname) + new_vox.name = new_vox.real_name + new_vox.age = rand(12,20) + + new_vox.dna.ready_dna(new_vox) // Creates DNA. + new_vox.dna.mutantrace = "vox" // Actually makes the vox! How about that. + new_vox.mind_initialize() + new_vox.mind.assigned_role = "MODE" + new_vox.mind.special_role = "Vox Raider" + + //Adds them to current traitor list. Which is really the extra antagonist list. + ticker.mode.traitors += new_vox.mind + new_vox.equip_vox_raider() + + usr << "\red Returning vox." + return new_vox \ No newline at end of file diff --git a/code/modules/admin/verbs/vox_raiders.dm b/code/modules/admin/verbs/vox_raiders.dm new file mode 100644 index 00000000000..4aa9b323a97 --- /dev/null +++ b/code/modules/admin/verbs/vox_raiders.dm @@ -0,0 +1,66 @@ +/mob/living/carbon/human/proc/equip_vox_raider() + + var/obj/item/device/radio/R = new /obj/item/device/radio/headset/syndicate(src) + R.set_frequency(SYND_FREQ) //Same frequency as the syndicate team in Nuke mode. + equip_to_slot_or_del(R, slot_ears) + + equip_to_slot_or_del(new /obj/item/clothing/under/vox/vox_robes(src), slot_w_uniform) + equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(src), slot_shoes) // REPLACE THESE WITH CODED VOX ALTERNATIVES. + equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(src), slot_gloves) // AS ABOVE. + + switch(rand(1,4)) // Come up with a better way of doing this - ticker of some sort maybe. + if(1) // Vox raider! + equip_to_slot_or_del(new /obj/item/clothing/suit/space/vox/carapace(src), slot_wear_suit) + equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/vox/carapace(src), slot_head) + equip_to_slot_or_del(new /obj/item/weapon/melee/telebaton(src), slot_belt) + equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(src), slot_glasses) // REPLACE WITH CODED VOX ALTERNATIVE. + equip_to_slot_or_del(new /obj/item/device/chameleon(src), slot_l_store) + + var/obj/item/weapon/crossbow/W = new(src) + W.cell = new /obj/item/weapon/cell/crap(W) + W.cell.charge = 500 + equip_to_slot_or_del(W, slot_r_hand) + + if(2) // Vox engineer! + equip_to_slot_or_del(new /obj/item/clothing/suit/space/vox/pressure(src), slot_wear_suit) + equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/vox/pressure(src), slot_head) + equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(src), slot_belt) + equip_to_slot_or_del(new /obj/item/clothing/glasses/meson(src), slot_glasses) // REPLACE WITH CODED VOX ALTERNATIVE. + equip_to_slot_or_del(new /obj/item/weapon/storage/box/emps(src), slot_l_store) + + equip_to_slot_or_del(new /obj/item/weapon/pickaxe/plasmacutter(src), slot_r_hand) + + if(3) // Vox saboteur! + equip_to_slot_or_del(new /obj/item/clothing/suit/space/vox/carapace(src), slot_wear_suit) + equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/vox/carapace(src), slot_head) + equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(src), slot_belt) + equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(src), slot_glasses) // REPLACE WITH CODED VOX ALTERNATIVE. + equip_to_slot_or_del(new /obj/item/weapon/card/emag(src), slot_l_store) + + var/obj/item/weapon/storage/pneumatic/W = new(src) + W.tank = new /obj/item/weapon/tank/nitrogen(W) + equip_to_slot_or_del(W, slot_r_hand) + + if(4) // Vox medic! + equip_to_slot_or_del(new /obj/item/clothing/suit/space/vox/pressure(src), slot_wear_suit) + equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/vox/pressure(src), slot_head) + equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(src), slot_belt) // Who needs actual surgical tools? + equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health(src), slot_glasses) // REPLACE WITH CODED VOX ALTERNATIVE. + equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray(src), slot_l_store) + + equip_to_slot_or_del(new /obj/item/weapon/circular_saw(src), slot_l_hand) + equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/toxin(src), slot_r_hand) + + equip_to_slot_or_del(new /obj/item/clothing/mask/breath/vox(src), slot_wear_mask) + equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(src), slot_back) + equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_r_store) + + var/obj/item/weapon/card/id/syndicate/W = new(src) + W.name = "[real_name]'s Legitimate Human ID Card" + W.icon_state = "id" + W.access = list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage, access_syndicate) + W.assignment = "Trader" + W.registered_name = real_name + equip_to_slot_or_del(W, slot_wear_id) + + return 1 \ No newline at end of file diff --git a/icons/mob/human_races/r_def_vox.dmi b/icons/mob/human_races/r_def_vox.dmi index 4dad2129d5081210cc8b17f09b135559b390776b..2024f52583b50e825812a2bc3ec746d95564adb2 100644 GIT binary patch delta 1774 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 MGu{pN#GaJ;7t?4TGynhq