diff --git a/code/WorkInProgress/BS12/uplink_kits.dm b/code/WorkInProgress/BS12/uplink_kits.dm new file mode 100644 index 00000000000..1ef400a9721 --- /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 00000000000..ad91a4b82c8 --- /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 12e783bef52..9d32e01be2e 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 f810315c43c..3dd79221fd2 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 6c019395f00..fa8ba91b1f9 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 feca3189d69..a5b58106e8e 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 c95a71c247d..d4ddddffe06 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 e11fdcf8359..9fb82265024 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 fed83f7bde5..43961f8104e 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 9ece34642b3..36c27ac0dca 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 b63b1b10ad0..36b7496aa40 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 866f9c4ba7c..76113946fba 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 e0957395571..5502ef94625 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 5c2e1b656ee..549cb1fed2e 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 7eaf181c496..cd2f20335c0 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 74113fb607e..6749918f241 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 959864e8cca..fe785d2be05 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 04ac74caa96..def3aa1ed48 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 d4c0b48a0c1..916ed714558 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 6fd1277a512..6f239bd378b 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 858e881f4f3..8a75655bb37 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 e9740b9a191..866fe8ad32a 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 eee0df81965..08ac39f9457 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 f4a289f0641..d27140cb3e6 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"