From ddc7f45a1363624ccff0f1ed23437e4f0008d8bc Mon Sep 17 00:00:00 2001 From: "musketstgstation@gmail.com" Date: Wed, 29 Feb 2012 22:50:14 +0000 Subject: [PATCH] Integrated BS12's improved uplink code, courtesy of SkyMarshal. This means items now spawn in your hand if possible, items are sorted into categories, and only items you have enough telecrystals to purchase will be displayed. Also, the same basic code is now used for PDA, headset and nuke-round uplinks, and it should be easier to add new items. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3216 316c924e-a436-60f5-8080-3fe189b3f50e --- code/WorkInProgress/BS12/uplink_kits.dm | 53 +++ code/WorkInProgress/BS12/uplinks.dm | 369 ++++++++++++++++++ code/datums/mind.dm | 16 +- code/defines/obj/weapon.dm | 4 +- code/defines/procs/helpers.dm | 22 +- code/game/gamemodes/blob/blob.dm | 2 + code/game/gamemodes/changeling/changeling.dm | 3 + code/game/gamemodes/cult/cult.dm | 3 + code/game/gamemodes/extended/extended.dm | 3 + code/game/gamemodes/game_mode.dm | 43 ++ .../game/gamemodes/malfunction/malfunction.dm | 4 + code/game/gamemodes/meteor/meteor.dm | 3 + code/game/gamemodes/nuclear/nuclear.dm | 3 + code/game/gamemodes/revolution/revolution.dm | 3 + code/game/gamemodes/sandbox/sandbox.dm | 3 + code/game/gamemodes/traitor/traitor.dm | 15 +- code/game/gamemodes/wizard/wizard.dm | 3 + code/game/jobs/job_controller.dm | 4 +- code/game/objects/closets/nuclear.dm | 2 +- code/game/objects/devices/PDA/PDA.dm | 2 +- .../objects/items/weapons/implants/implant.dm | 9 +- code/game/objects/radio/radio.dm | 4 +- html/changelog.html | 9 + tgstation.dme | 8 +- 24 files changed, 564 insertions(+), 26 deletions(-) create mode 100644 code/WorkInProgress/BS12/uplink_kits.dm create mode 100644 code/WorkInProgress/BS12/uplinks.dm diff --git a/code/WorkInProgress/BS12/uplink_kits.dm b/code/WorkInProgress/BS12/uplink_kits.dm new file mode 100644 index 0000000000..1ef400a972 --- /dev/null +++ b/code/WorkInProgress/BS12/uplink_kits.dm @@ -0,0 +1,53 @@ +/obj/item/weapon/storage/syndie_kit + name = "Box" + desc = "A sleek, sturdy box" + icon_state = "box_of_doom" + item_state = "syringe_kit" + +/obj/item/weapon/storage/syndie_kit/imp_freedom + name = "Freedom Implant (with injector)" + +/obj/item/weapon/storage/syndie_kit/imp_freedom/New() + var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(src) + O.imp = new /obj/item/weapon/implant/freedom(O) + O.update() + ..() + return + +/*/obj/item/weapon/storage/syndie_kit/imp_compress + name = "Compressed Matter Implant (with injector)" + +/obj/item/weapon/storage/syndie_kit/imp_compress/New() + new /obj/item/weapon/implanter/compressed(src) + ..() + return + +/obj/item/weapon/storage/syndie_kit/imp_explosive + name = "Explosive Implant (with injector)" + +/obj/item/weapon/storage/syndie_kit/imp_explosive/New() + var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(src) + O.imp = new /obj/item/weapon/implant/explosive(O) + O.name = "(BIO-HAZARD) BIO-detpack" + O.update() + ..() + return*/ + +/obj/item/weapon/storage/syndie_kit/imp_uplink + name = "Uplink Implant (with injector)" + +/obj/item/weapon/storage/syndie_kit/imp_uplink/New() + var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(src) + O.imp = new /obj/item/weapon/implant/uplink(O) + O.update() + ..() + return + +/obj/item/weapon/storage/syndie_kit/space + name = "Space Suit and Helmet" + +/obj/item/weapon/storage/syndie_kit/space/New() + new /obj/item/clothing/suit/space/syndicate(src) + new /obj/item/clothing/head/helmet/space/syndicate(src) + ..() + return diff --git a/code/WorkInProgress/BS12/uplinks.dm b/code/WorkInProgress/BS12/uplinks.dm new file mode 100644 index 0000000000..ad91a4b82c --- /dev/null +++ b/code/WorkInProgress/BS12/uplinks.dm @@ -0,0 +1,369 @@ +/* + +SYNDICATE UPLINKS + +TO-DO: + Once wizard is fixed, make sure the uplinks work correctly for it. wizard.dm is right now uncompiled and with broken code in it. + + Clean the code up and comment it. Part of it is right now copy-pasted, with the general Topic() and modifications by Abi79. + + I should take a more in-depth look at both the copy-pasted code for the individual uplinks below, and at each gamemode's code + to see how uplinks are assigned and if there are any bugs with those. + + +A list of items and costs is stored under the datum of every game mode, alongside the number of crystals, and the welcoming message. + +*/ + +/obj/item/device/uplink + var/welcome // Welcoming menu message + var/menu_message = "" // The actual menu text + var/items // List of items + var/list/ItemList // Parsed list of items + var/uses // Numbers of crystals + // List of items not to shove in their hands. + var/list/NotInHand = list(/obj/machinery/singularity_beacon/syndicate) + + New() + welcome = ticker.mode.uplink_welcome + items = dd_replacetext(ticker.mode.uplink_items, "\n", "") // Getting the text string of items + ItemList = dd_text2list(src.items, ";") // Parsing the items text string + uses = ticker.mode.uplink_uses + +//Let's build a menu! + proc/generate_menu() + src.menu_message = "[src.welcome]
" + src.menu_message += "Tele-Crystals left: [src.uses]
" + src.menu_message += "
" + src.menu_message += "Request item:
" + src.menu_message += "Each item costs a number of tele-crystals as indicated by the number following their name.

" + + var/cost + var/item + var/name + var/path_obj + var/path_text + var/category_items = 1 //To prevent stupid :P + + for(var/D in ItemList) + var/list/O = stringsplit(D, ":") + if(O.len != 3) //If it is not an actual item, make a break in the menu. + if(O.len == 1) //If there is one item, it's probably a title + src.menu_message += "[O[1]]
" + category_items = 0 + else //Else, it's a white space. + if(category_items < 1) //If there were no itens in the last category... + src.menu_message += "We apologize, as you could not afford anything from this category.
" + src.menu_message += "
" + continue + + path_text = O[1] + cost = text2num(O[2]) + + if(cost>uses) + continue + + path_obj = text2path(path_text) + item = new path_obj() + name = O[3] + del item + + src.menu_message += "[name] ([cost])
" + category_items++ + + src.menu_message += "
" + return + + Topic(href, href_list) + if (href_list["buy_item"]) + if(text2num(href_list["cost"]) > uses) // Not enough crystals for the item + return 0 + + //if(usr:mind && ticker.mode.traitors[usr:mind]) + //var/datum/traitorinfo/info = ticker.mode.traitors[usr:mind] + //info.spawnlist += href_list["buy_item"] + + uses -= text2num(href_list["cost"]) + + return 1 + + +/* + *PDA uplink + */ + +//Syndicate uplink hidden inside a traitor PDA +//Communicate with traitor through the PDA's note function. + +/obj/item/device/uplink/pda + name = "uplink module" + desc = "An electronic uplink system of unknown origin." + icon = 'module.dmi' + icon_state = "power_mod" + var/obj/item/device/pda/hostpda = null + + var/orignote = null //Restore original notes when locked. + var/active = 0 //Are we currently active? + var/lock_code = "" //The unlocking password. + + proc + unlock() + if ((isnull(src.hostpda)) || (src.active)) + return + + src.orignote = src.hostpda.note + src.active = 1 + src.hostpda.mode = 1 //Switch right to the notes program + + src.generate_menu() + print_to_host(menu_message) + + for (var/mob/M in viewers(1, src.hostpda.loc)) + if (M.client && M.machine == src.hostpda) + src.hostpda.attack_self(M) + + return + + print_to_host(var/text) + if (isnull(hostpda)) + return + hostpda.note = text + + for (var/mob/M in viewers(1, hostpda.loc)) + if (M.client && M.machine == hostpda) + hostpda.attack_self(M) + return + + shutdown_uplink() + if (isnull(src.hostpda)) + return + active = 0 + hostpda.note = orignote + if (hostpda.mode==1) + hostpda.mode = 0 + hostpda.updateDialog() + return + + attack_self(mob/user as mob) + src.generate_menu() + src.hostpda.note = src.menu_message + + + Topic(href, href_list) + if ((isnull(src.hostpda)) || (!src.active)) + return + + if (usr.stat || usr.restrained() || !in_range(src.hostpda, usr)) + return + + if(..() == 1) // We can afford the item + var/path_obj = text2path(href_list["buy_item"]) + var/mob/A = src.hostpda.loc + var/item = new path_obj(get_turf(src.hostpda)) + if(ismob(A) && !(locate(item) in NotInHand)) //&& !istype(item, /obj/spawner)) + if(!A.r_hand) + item:loc = A + A.r_hand = item + item:layer = 20 + else if(!A.l_hand) + item:loc = A + A.l_hand = item + item:layer = 20 + else + item:loc = get_turf(A) + usr.update_clothing() + // usr.client.onBought("[item:name]") When we have the stats again, uncomment. + /* if(istype(item, /obj/spawner)) // Spawners need to have del called on them to avoid leaving a marker behind + del item*/ + //HEADFINDBACK + src.attack_self(usr) + src.hostpda.attack_self(usr) + return + + +/* + *Portable radio uplink + */ + +//A Syndicate uplink disguised as a portable radio +/obj/item/device/uplink/radio/implanted + New() + ..() + uses = 5 + return + + explode() + var/obj/item/weapon/implant/uplink/U = src.loc + var/mob/living/A = U.imp_in + A.gib() + ..() +// var/turf/location = get_turf(src.loc) +// if(location) +// location.hotspot_expose(700,125) +// explosion(location, 0, 0, 2, 4, 1) + +// var/obj/item/weapon/implant/uplink/U = src.loc +// var/mob/living/A = U.imp_in +// var/datum/organ/external/head = A:organs["head"] +// head.destroyed = 1 +// spawn(2) +// head.droplimb() +// del(src.master) +// del(src) +// return + + +/obj/item/device/uplink/radio + name = "ship bounced radio" + icon = 'radio.dmi' + icon_state = "radio" + var/temp = null //Temporary storage area for a message offering the option to destroy the radio + var/selfdestruct = 0 //Set to 1 while the radio is self destructing itself. + var/obj/item/device/radio/origradio = null + flags = FPRINT | TABLEPASS | CONDUCT | ONBELT + w_class = 2.0 + item_state = "radio" + throwforce = 5 + throw_speed = 4 + throw_range = 20 + m_amt = 100 + + attack_self(mob/user as mob) + var/dat + + if (src.selfdestruct) + dat = "Self Destructing..." + else + if (src.temp) + dat = "[src.temp]

Clear" + else + src.generate_menu() + dat = src.menu_message + if (src.origradio) // Checking because sometimes the radio uplink may be spawned by itself, not as a normal unlockable radio + dat += "Lock
" + dat += "
" + dat += "Self-Destruct" + + user << browse(dat, "window=radio") + onclose(user, "radio") + return + + Topic(href, href_list) + if (usr.stat || usr.restrained()) + return + + if (!( istype(usr, /mob/living/carbon/human))) + return 1 + + if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)) || istype(src.loc,/obj/item/weapon/implant/uplink))) + usr.machine = src + + if(href_list["buy_item"]) + if(..() == 1) // We can afford the item + var/path_obj = text2path(href_list["buy_item"]) + var/item = new path_obj(get_turf(src.loc)) + var/mob/A = src.loc + if(istype(src.loc,/obj/item/weapon/implant/uplink)) + var/obj/item/weapon/implant/uplink/U = src.loc + A = U.imp_in + if(ismob(A) && !(locate(item) in NotInHand)) //&& !istype(item, /obj/spawner)) + if(!A.r_hand) + item:loc = A + A.r_hand = item + item:layer = 20 + else if(!A.l_hand) + item:loc = A + A.l_hand = item + item:layer = 20 + else + item:loc = get_turf(A) + /* if(istype(item, /obj/spawner)) // Spawners need to have del called on them to avoid leaving a marker behind + del item*/ + // usr.client.onBought("[item:name]") When we have the stats again, uncomment. + src.attack_self(usr) + return + + else if (href_list["lock"] && src.origradio) + // presto chango, a regular radio again! (reset the freq too...) + usr.machine = null + usr << browse(null, "window=radio") + var/obj/item/device/radio/T = src.origradio + var/obj/item/device/uplink/radio/R = src + R.loc = T + T.loc = usr + // R.layer = initial(R.layer) + R.layer = 0 + if (usr.client) + usr.client.screen -= R + if (usr.r_hand == R) + usr.u_equip(R) + usr.r_hand = T + + else + usr.u_equip(R) + usr.l_hand = T + R.loc = T + T.layer = 20 + T.set_frequency(initial(T.frequency)) + T.attack_self(usr) + return + + else if (href_list["selfdestruct"]) + src.temp = "Self-Destruct" + + else if (href_list["selfdestruct2"]) + src.selfdestruct = 1 + spawn (100) + explode() + return + + else if (href_list["clear_selfdestruct"]) + src.temp = null + + attack_self(usr) +// if (istype(src.loc, /mob)) +// attack_self(src.loc) +// else +// for(var/mob/M in viewers(1, src)) +// if (M.client) +// src.attack_self(M) + return + + proc/explode() + var/turf/location = get_turf(src.loc) + if(location) + location.hotspot_expose(700,125) + explosion(location, 0, 0, 2, 4, 1) + + del(src.master) + del(src) + return + + proc/shutdown_uplink() + if (!src.origradio) + return + var/list/nearby = viewers(1, src) + for(var/mob/M in nearby) + if (M.client && M.machine == src) + M << browse(null, "window=radio") + M.machine = null + + var/obj/item/device/radio/T = src.origradio + var/obj/item/device/uplink/radio/R = src + var/mob/L = src.loc + R.loc = T + T.loc = L + // R.layer = initial(R.layer) + R.layer = 0 + if (istype(L)) + if (L.client) + L.client.screen -= R + if (L.r_hand == R) + L.u_equip(R) + L.r_hand = T + else + L.u_equip(R) + L.l_hand = T + T.layer = 20 + T.set_frequency(initial(T.frequency)) + return \ No newline at end of file diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 12e783bef5..9d32e01be2 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -245,8 +245,8 @@ datum/mind istype(current,/mob/living/carbon/human) ) text = "Uplink: give" - var/obj/item/weapon/syndicate_uplink/suplink = find_syndicate_uplink() - var/obj/item/weapon/integrated_uplink/iuplink = find_integrated_uplink() + var/obj/item/device/uplink/suplink = find_syndicate_uplink() + var/obj/item/device/uplink/iuplink = find_integrated_uplink() var/crystals if (suplink) crystals = suplink.uses @@ -797,8 +797,8 @@ datum/mind memory = null//Remove any memory they may have had. if("crystals") if (usr.client.holder.level >= 3) - var/obj/item/weapon/syndicate_uplink/suplink = find_syndicate_uplink() - var/obj/item/weapon/integrated_uplink/iuplink = find_integrated_uplink() + var/obj/item/device/uplink/suplink = find_syndicate_uplink() + var/obj/item/device/uplink/iuplink = find_integrated_uplink() var/crystals if (suplink) crystals = suplink.uses @@ -855,7 +855,7 @@ datum/mind */ proc/find_syndicate_uplink() - var/obj/item/weapon/syndicate_uplink/uplink = null + var/obj/item/device/uplink/radio/uplink = null var/list/L = current.get_contents() for (var/obj/item/device/radio/radio in L) uplink = radio.traitorradio @@ -866,7 +866,7 @@ datum/mind proc/find_integrated_uplink() //world << "DEBUG: find_integrated_uplink()" - var/obj/item/weapon/integrated_uplink/uplink = null + var/obj/item/device/uplink/uplink = null var/list/L = current.get_contents() for (var/obj/item/device/pda/pda in L) uplink = pda.uplink @@ -876,8 +876,8 @@ datum/mind proc/take_uplink() //assuming only one uplink because I am tired of all this uplink shit --rastaf0 var/list/L = current.get_contents() - var/obj/item/weapon/syndicate_uplink/suplink = null - var/obj/item/weapon/integrated_uplink/iuplink = null + var/obj/item/device/uplink/radio/suplink = null + var/obj/item/device/uplink/pda/iuplink = null for (var/obj/item/device/radio/radio in L) suplink = radio.traitorradio if (suplink) diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index f810315c43..3dd79221fd 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -928,7 +928,7 @@ item_state = "shard-glass" g_amt = 3750 -/obj/item/weapon/syndicate_uplink +/*/obj/item/weapon/syndicate_uplink name = "station bounced radio" desc = "Remain silent about this..." icon = 'radio.dmi' @@ -945,7 +945,7 @@ throw_speed = 4 throw_range = 20 m_amt = 100 - origin_tech = "magnets=2;syndicate=3" + origin_tech = "magnets=2;syndicate=3"*/ /obj/item/weapon/SWF_uplink name = "station bounced radio" diff --git a/code/defines/procs/helpers.dm b/code/defines/procs/helpers.dm index 6c019395f0..fa8ba91b1f 100644 --- a/code/defines/procs/helpers.dm +++ b/code/defines/procs/helpers.dm @@ -1485,4 +1485,24 @@ proc/oview_or_orange(distance = world.view , center = usr , type) . = oview(distance,center) if("range") . = orange(distance,center) - return \ No newline at end of file + return + +/proc/stringsplit(txt, character) + var + cur_text = txt + last_found = 1 + found_char = findtext(cur_text,character) + list/list = list() + if(found_char) + var/fs = copytext(cur_text,last_found,found_char) + list += fs + last_found = found_char+length(character) + found_char = findtext(cur_text,character,last_found) + while(found_char) + var + found_string = copytext(cur_text,last_found,found_char) + last_found = found_char+length(character) + list += found_string + found_char = findtext(cur_text,character,last_found) + list += copytext(cur_text,last_found,length(cur_text)+1) + return list \ No newline at end of file diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm index feca3189d6..a5b58106e8 100644 --- a/code/game/gamemodes/blob/blob.dm +++ b/code/game/gamemodes/blob/blob.dm @@ -10,6 +10,8 @@ var config_tag = "blob" required_players = 0 + uplink_welcome = "Syndicate Uplink Console:" + uplink_uses = 10 var/const/waittime_l = 1800 //lower bound on time before intercept arrives (in tenths of seconds) diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index c95a71c247..d4ddddffe0 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -9,6 +9,9 @@ required_players = 15 required_enemies = 1 + uplink_welcome = "Syndicate Uplink Console:" + uplink_uses = 10 + var const prob_int_murder_target = 50 // intercept names the assassination target half the time diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index e11fdcf835..9fb8226502 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -23,6 +23,9 @@ required_players = 15 required_enemies = 3 + uplink_welcome = "Nar-Sie Uplink Console:" + uplink_uses = 10 + var/datum/mind/sacrifice_target = null var/finished = 0 var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds) diff --git a/code/game/gamemodes/extended/extended.dm b/code/game/gamemodes/extended/extended.dm index fed83f7bde..43961f8104 100644 --- a/code/game/gamemodes/extended/extended.dm +++ b/code/game/gamemodes/extended/extended.dm @@ -3,6 +3,9 @@ config_tag = "extended" required_players = 0 + uplink_welcome = "Syndicate Uplink Console:" + uplink_uses = 10 + var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds) var/const/waittime_h = 1800 diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 9ece34642b..36c27ac0dc 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -23,6 +23,49 @@ list/restricted_jobs = list() required_players = 0 required_enemies = 0 + uplink_welcome + uplink_uses + uplink_items = {"Highly Visible and Dangerous Weapons; +/obj/item/weapon/gun/projectile:6:Revolver; +/obj/item/ammo_magazine/a357:2:Ammo-357; +/obj/item/weapon/gun/energy/crossbow:5:Energy Crossbow; +/obj/item/weapon/melee/energy/sword:4:Energy Sword; +/obj/item/weapon/storage/box/syndicate:10:Syndicate Bundle; +/obj/item/weapon/storage/emp_kit:4:5 EMP Grenades; +Whitespace:Seperator; +Stealthy and Inconspicuous Weapons; +/obj/item/weapon/pen/parapen:3:Paralysis Pen; +/obj/item/weapon/soap/syndie:1:Syndicate Soap; +/obj/item/weapon/cartridge/syndicate:3:Detomatix PDA Cartridge; +Whitespace:Seperator; +Stealth and Camouflage Items; +/obj/item/clothing/under/chameleon:3:Chameleon Jumpsuit; +/obj/item/clothing/shoes/syndigaloshes:2:No-Slip Syndicate Shoes; +/obj/item/weapon/card/id/syndicate:3:Agent ID card; +/obj/item/clothing/mask/gas/voice:4:Voice Changer; +/obj/item/clothing/glasses/thermal:4:Thermal Imaging Glasses; +/obj/item/device/chameleon:4:Chameleon-Projector; +/obj/item/weapon/cloaking_device:4:Cloaking Device; +Whitespace:Seperator; +Devices and Tools; +/obj/item/weapon/card/emag:4:Cryptographic Sequencer; +/obj/item/weapon/storage/toolbox/syndicate:1:Fully Loaded Toolbox; +/obj/item/weapon/storage/syndie_kit/space:3:Space Suit; +/obj/item/device/encryptionkey/binary:3:Binary Translator Key; +/obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module; +/obj/item/weapon/plastique:2:C-4 (Destroys walls); +/obj/item/device/powersink:5:Powersink (DANGER!); +/obj/machinery/singularity_beacon/syndicate:7:Singularity Beacon (DANGER!); +/obj/item/weapon/circuitboard/teleporter:20:Teleporter Circuit Board; +Whitespace:Seperator; +Implants; +/obj/item/weapon/storage/syndie_kit/imp_freedom:3:Freedom Implant; +/obj/item/weapon/storage/syndie_kit/imp_uplink:10:Uplink Implant (Contains 5 Telecrystals); +Whitespace:Seperator; +Badassery; +/obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon); +Whitespace:Seperator;"} + /datum/game_mode/proc/announce() //to be calles when round starts world << "Notice: [src] did not define announce()" diff --git a/code/game/gamemodes/malfunction/malfunction.dm b/code/game/gamemodes/malfunction/malfunction.dm index b63b1b10ad..36b7496aa4 100644 --- a/code/game/gamemodes/malfunction/malfunction.dm +++ b/code/game/gamemodes/malfunction/malfunction.dm @@ -6,6 +6,10 @@ config_tag = "malfunction" required_players = 20 required_enemies = 1 + + uplink_welcome = "Crazy AI Uplink Console:" + uplink_uses = 10 + var/const/waittime_l = 600 var/const/waittime_h = 1800 // started at 1800 diff --git a/code/game/gamemodes/meteor/meteor.dm b/code/game/gamemodes/meteor/meteor.dm index 866f9c4ba7..76113946fb 100644 --- a/code/game/gamemodes/meteor/meteor.dm +++ b/code/game/gamemodes/meteor/meteor.dm @@ -7,6 +7,9 @@ var/nometeors = 1 required_players = 0 + uplink_welcome = "EVIL METEOR Uplink Console:" + uplink_uses = 10 + /datum/game_mode/meteor/announce() world << "The current game mode is - Meteor!" diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index e095739557..5502ef9462 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -8,6 +8,9 @@ required_players = 15 required_enemies = 5 + uplink_welcome = "Corporate Backed Uplink Console:" + uplink_uses = 40 + var/const/agents_possible = 5 //If we ever need more syndicate agents. var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds) var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds) diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 5c2e1b656e..549cb1fed2 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -18,6 +18,9 @@ required_players = 20 required_enemies = 3 + uplink_welcome = "Revolutionary Uplink Console:" + uplink_uses = 10 + var/finished = 0 var/checkwin_counter = 0 var/const/max_headrevs = 3 diff --git a/code/game/gamemodes/sandbox/sandbox.dm b/code/game/gamemodes/sandbox/sandbox.dm index 7eaf181c49..cd2f20335c 100644 --- a/code/game/gamemodes/sandbox/sandbox.dm +++ b/code/game/gamemodes/sandbox/sandbox.dm @@ -3,6 +3,9 @@ config_tag = "sandbox" required_players = 0 + uplink_welcome = "Syndicate Uplink Console:" + uplink_uses = 10 + /datum/game_mode/sandbox/announce() world << "The current game mode is - Sandbox!" world << "Build your own station with the sandbox-panel command!" diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 74113fb607..6749918f24 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -9,6 +9,9 @@ required_players = 0 required_enemies = 1 + uplink_welcome = "Syndicate Uplink Console:" + uplink_uses = 10 + var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds) var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds) @@ -232,10 +235,16 @@ R = foo loc = "in the [S.name] on your back" break + if (!R && istype(traitor_mob.l_store, /obj/item/device/pda)) + R = traitor_mob.l_store + loc = "in your pocket" + if (!R && istype(traitor_mob.r_store, /obj/item/device/pda)) + R = traitor_mob.r_store + loc = "in your pocket" if (!R && traitor_mob.w_uniform && istype(traitor_mob.belt, /obj/item/device/radio)) R = traitor_mob.belt loc = "on your belt" - if (!R && istype(traitor_mob.ears, /obj/item/device/radio)) + if ((!R && istype(traitor_mob.ears, /obj/item/device/radio)) || prob(10)) R = traitor_mob.ears loc = "on your head" if (!R) @@ -254,7 +263,7 @@ freq += 1 freq = freqlist[rand(1, freqlist.len)] - var/obj/item/weapon/syndicate_uplink/T = new /obj/item/weapon/syndicate_uplink(R) + var/obj/item/device/uplink/radio/T = new /obj/item/device/uplink/radio(R) R:traitorradio = T R:traitor_frequency = freq T.name = R.name @@ -266,7 +275,7 @@ // generate a passcode if the uplink is hidden in a PDA var/pda_pass = "[rand(100,999)] [pick("Alpha","Bravo","Delta","Omega")]" - var/obj/item/weapon/integrated_uplink/T = new /obj/item/weapon/integrated_uplink(R) + var/obj/item/device/uplink/pda/T = new /obj/item/device/uplink/pda(R) R:uplink = T T.lock_code = pda_pass T.hostpda = R diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index 959864e8cc..fe785d2be0 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -8,6 +8,9 @@ required_players = 0 required_enemies = 1 + uplink_welcome = "Wizardly Uplink Console:" + uplink_uses = 10 + var/finished = 0 var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds) diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 04ac74caa9..def3aa1ed4 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -254,8 +254,8 @@ var/global/datum/controller/occupations/job_master else H.equip_if_possible(new /obj/item/weapon/pen/blue(H), H.slot_r_store) H.equip_if_possible(new /obj/item/device/pda(H), H.slot_belt) - if(istype(H.belt, /obj/item/device/pda))//I bet this could just use locate - var/obj/item/device/pda/pda = H.belt + if(locate(/obj/item/device/pda,H))//I bet this could just use locate. It can --SkyMarshal + var/obj/item/device/pda/pda = locate(/obj/item/device/pda,H) pda.owner = H.real_name pda.ownjob = H.wear_id.assignment pda.name = "PDA-[H.real_name] ([pda.ownjob])" diff --git a/code/game/objects/closets/nuclear.dm b/code/game/objects/closets/nuclear.dm index d4c0b48a0c..916ed71455 100644 --- a/code/game/objects/closets/nuclear.dm +++ b/code/game/objects/closets/nuclear.dm @@ -19,6 +19,6 @@ new /obj/item/weapon/pinpointer(src) new /obj/item/weapon/pinpointer(src) new /obj/item/device/pda/syndicate(src) - var/obj/item/weapon/syndicate_uplink/U = new /obj/item/weapon/syndicate_uplink(src) + var/obj/item/device/uplink/radio/U = new /obj/item/device/uplink/radio(src) U.uses = 40 return diff --git a/code/game/objects/devices/PDA/PDA.dm b/code/game/objects/devices/PDA/PDA.dm index 6fd1277a51..6f239bd378 100644 --- a/code/game/objects/devices/PDA/PDA.dm +++ b/code/game/objects/devices/PDA/PDA.dm @@ -31,7 +31,7 @@ var/note = "Congratulations, your station has chosen the Thinktronic 5230 Personal Data Assistant!" //Current note in the notepad function. var/cart = "" //A place to stick cartridge menu information - var/obj/item/weapon/integrated_uplink/uplink = null + var/obj/item/device/uplink/pda/uplink = null var/obj/item/weapon/card/id/id = null //Making it possible to slot an ID card into the PDA so it can function as both. var/ownjob = null //related to above diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 858e881f4f..8a75655bb3 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -34,19 +34,20 @@ desc = "Summon things." var activation_emote = "chuckle" - obj/item/weapon/syndicate_uplink/uplink = null + obj/item/device/uplink/radio/uplink = null New() activation_emote = pick("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink") - uplink = new /obj/item/weapon/syndicate_uplink/implanted(src) + uplink = new /obj/item/device/uplink/radio/implanted(src) ..() return implanted(mob/source as mob) - source.mind.store_memory("Uplink implant can be activated by using the [activation_emote] emote, say *[activation_emote] to attempt to activate.", 0, 0) - source << "The implanted uplink implant can be activated by using the [activation_emote] emote, say *[activation_emote] to attempt to activate." + activation_emote = input("Choose activation emote:") in list("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink") + source.mind.store_memory("Uplink implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", 0, 0) + source << "The implanted uplink implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate." return diff --git a/code/game/objects/radio/radio.dm b/code/game/objects/radio/radio.dm index e9740b9a19..866fe8ad32 100644 --- a/code/game/objects/radio/radio.dm +++ b/code/game/objects/radio/radio.dm @@ -16,7 +16,7 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use traitor_frequency = 0 //tune to frequency to unlock traitor supplies canhear_range = 3 // the range which mobs can hear this radio from obj/item/device/radio/patch_link = null - obj/item/weapon/syndicate_uplink/traitorradio = null + obj/item/device/uplink/traitorradio = null wires = WIRE_SIGNAL | WIRE_RECEIVE | WIRE_TRANSMIT b_stat = 0 broadcasting = 0 @@ -185,7 +185,7 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use usr.machine = null usr << browse(null, "window=radio") // now transform the regular radio, into a (disguised)syndicate uplink! - var/obj/item/weapon/syndicate_uplink/T = traitorradio + var/obj/item/device/uplink/radio/T = traitorradio var/obj/item/device/radio/R = src R.loc = T T.loc = usr diff --git a/html/changelog.html b/html/changelog.html index eee0df8196..08ac39f945 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -92,6 +92,15 @@ should be listed in the changelog upon commit tho. Thanks. --> +
+

29/2/2012

+

muskets updated:

+ +
+ +

2/26/2012

Doohl updated:

diff --git a/tgstation.dme b/tgstation.dme index f4a289f064..d27140cb3e 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -146,6 +146,8 @@ #define FILE_DIR "code/unused/powerarmor" #define FILE_DIR "code/unused/spacecraft" #define FILE_DIR "code/WorkInProgress" +#define FILE_DIR "code/WorkInProgress/BS12" +#define FILE_DIR "code/WorkInProgress/computer3" #define FILE_DIR "code/WorkInProgress/mapload" #define FILE_DIR "code/WorkInProgress/organs" #define FILE_DIR "code/WorkInProgress/virus2" @@ -632,7 +634,6 @@ #include "code\game\objects\devices\PDA\cart.dm" #include "code\game\objects\devices\PDA\PDA.dm" #include "code\game\objects\devices\PDA\radio.dm" -#include "code\game\objects\devices\PDA\uplink.dm" #include "code\game\objects\items\apc_frame.dm" #include "code\game\objects\items\blueprints.dm" #include "code\game\objects\items\candle.dm" @@ -675,7 +676,6 @@ #include "code\game\objects\items\weapons\toilets.dm" #include "code\game\objects\items\weapons\tools.dm" #include "code\game\objects\items\weapons\twohanded.dm" -#include "code\game\objects\items\weapons\uplinks.dm" #include "code\game\objects\items\weapons\implants\implant.dm" #include "code\game\objects\items\weapons\implants\implantcase.dm" #include "code\game\objects\items\weapons\implants\implantchair.dm" @@ -1025,6 +1025,10 @@ #include "code\modules\security levels\keycard authentication.dm" #include "code\modules\security levels\security levels.dm" #include "code\WorkInProgress\explosion_particles.dm" +#include "code\WorkInProgress\BS12\uplink_kits.dm" +#include "code\WorkInProgress\BS12\uplinks.dm" +#include "code\WorkInProgress\computer3\datastore.dm" +#include "code\WorkInProgress\computer3\file.dm" #include "code\WorkInProgress\mapload\dmm_suite.dm" #include "code\WorkInProgress\mapload\reader.dm" #include "code\WorkInProgress\organs\implants.dm"