diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 42d917cb405..5057bb1d3b0 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -404,7 +404,7 @@ steam.start() -- spawns the effect /obj/effect/effect/chem_smoke name = "smoke" - opacity = 1 + opacity = 0 anchored = 0.0 mouse_opacity = 0 var/amount = 6.0 @@ -415,28 +415,12 @@ steam.start() -- spawns the effect /obj/effect/effect/chem_smoke/New() ..() - var/datum/reagents/R = new/datum/reagents(500) - reagents = R - R.my_atom = src - spawn (200+rand(10,30)) delete() return /obj/effect/effect/chem_smoke/Move() ..() - for(var/atom/A in view(2, src)) - if(reagents.has_reagent("radium")||reagents.has_reagent("uranium")||reagents.has_reagent("carbon")||reagents.has_reagent("thermite")||reagents.has_reagent("synthflesh")||reagents.has_reagent("firefighting_foam")||reagents.has_reagent("honey"))//Prevents unholy radium spam by reducing the number of 'greenglows' down to something reasonable -Sieve - if(prob(5)) - reagents.reaction(A) - else - reagents.reaction(A) - - return - -/obj/effect/effect/chem_smoke/Crossed(mob/living/carbon/M as mob ) - ..() - reagents.reaction(M) return @@ -488,11 +472,18 @@ steam.start() -- spawns the effect msg_admin_attack("A chemical smoke reaction has taken place in ([whereLink]). No associated key.", 0, 1) log_game("A chemical smoke reaction has taken place in ([where])[contained]. No associated key.") - start() + start(effect_range = 2) var/i = 0 var/color = mix_color_from_reagents(chemholder.reagents.reagent_list) - + var/obj/effect/effect/chem_smoke/smokeholder = new /obj/effect/effect/chem_smoke(src.location) + for(var/atom/A in view(effect_range, smokeholder)) + chemholder.reagents.reaction(A) + if(iscarbon(A)) + var/mob/living/carbon/C = A + if(!(C.wear_mask && (C.internals != null || C.wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT))) + chemholder.reagents.copy_to(C, chemholder.reagents.total_volume) + qdel(smokeholder) for(i=0, i 20) return @@ -508,16 +499,12 @@ steam.start() -- spawns the effect else direction = pick(alldirs) - if(chemholder.reagents.total_volume != 1) // can't split 1 very well - chemholder.reagents.copy_to(smoke, chemholder.reagents.total_volume / number) // copy reagents to each smoke, divide evenly - if(color) smoke.icon += color // give the smoke color, if it has any to begin with else // if no color, just use the old smoke icon smoke.icon = 'icons/effects/96x96.dmi' smoke.icon_state = "smoke" - for(i=0, i=25 && i<=40) //Smoke - var/datum/effect/effect/system/chem_smoke_spread/S = new /datum/effect/effect/system/chem_smoke_spread + var/datum/effect/effect/system/harmless_smoke_spread/S = new /datum/effect/effect/system/harmless_smoke_spread //Why was this chem_smoke_spread when there are no chems involved? S.attach(P.loc) S.set_up(P, 10, 0, P.loc) playsound(P.loc, 'sound/effects/smoke.ogg', 50, 1, -3) @@ -884,9 +884,9 @@ var/global/list/obj/item/device/pda/PDAs = list() message += "It melts in a puddle of plastic." else message += "Your [P] shatters in a thousand pieces!" - + JFLOG("[M]'s PDA Detonated >>> [message]") - + if(M && isliving(M)) message = "\red" + message M.show_message(message, 1) @@ -1402,26 +1402,26 @@ var/global/list/obj/item/device/pda/PDAs = list() A.emp_act(severity) /** -* +* * JFLOG -* +* * These functions as well as all the log statements are being used to gather user data for how -* people are using the PDA files with the intent of revising them based on this data. -* -* They are being added on 28/03/2015 and the intent is to remove them in two weeks. If you're -* reading this and it's substantially past that point, you should remove anything marked with -* 'JFLOG'. -* -* All changes should be contained to PDA.dm except the creation function which is contained in +* people are using the PDA files with the intent of revising them based on this data. +* +* They are being added on 28/03/2015 and the intent is to remove them in two weeks. If you're +* reading this and it's substantially past that point, you should remove anything marked with +* 'JFLOG'. +* +* All changes should be contained to PDA.dm except the creation function which is contained in * job_controller.dm. -* -* - Jack Fractal +* +* - Jack Fractal **/ /obj/item/device/pda/proc/JFLOG_DescribeSelf() return "([src]|[cartridge ? cartridge.name : "None"])" - + /obj/item/device/pda/proc/JFLOG(message as text) if (config) log_pda("[JFLOG_DescribeSelf()] >>> [message]") diff --git a/code/game/objects/items/devices/guitar.dm b/code/game/objects/items/devices/guitar.dm new file mode 100644 index 00000000000..c302536ac88 --- /dev/null +++ b/code/game/objects/items/devices/guitar.dm @@ -0,0 +1,41 @@ +//copy pasta of the space piano, don't hurt me -Pete + +/obj/item/device/guitar + name = "guitar" + desc = "It's made of wood and has bronze strings." + icon = 'icons/obj/musician.dmi' + icon_state = "guitar" + item_state = "guitar" + icon_override = 'icons/mob/in-hand/tools.dmi' + force = 10 + var/datum/song/handheld/song + +/obj/item/device/guitar/New() + song = new("guitar", src) + song.instrumentExt = "ogg" + +/obj/item/device/guitar/Destroy() + del(song) + song = null + ..() + +/obj/item/device/guitar/attack_self(mob/user as mob) + interact(user) + +/obj/item/device/guitar/interact(mob/user as mob) + if(!user) + return + + if(!isliving(user) || user.stat || user.restrained() || user.lying) + return + + user.set_machine(src) + song.interact(user) + +/datum/table_recipe/guitar + name = "Guitar" + result = /obj/item/device/guitar + reqs = list(/obj/item/stack/sheet/wood = 5, + /obj/item/stack/cable_coil = 6) + tools = list(/obj/item/weapon/screwdriver, /obj/item/weapon/wirecutters) + time = 80 \ No newline at end of file diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 60f9beb8592..71107a04342 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -1252,4 +1252,52 @@ obj/item/toy/cards/deck/syndicate/black cooldown = 1 spawn(30) cooldown = 0 return - ..() \ No newline at end of file + ..() + +// DND Character minis. Use the naming convention (type)character for the icon states. +/obj/item/toy/character + icon = 'icons/obj/toy.dmi' + w_class = 2 + pixel_z = 5 + +/obj/item/toy/character/alien + name = "Xenomorph Miniature" + desc = "A miniature xenomorph. Scary!" + icon_state = "aliencharacter" +/obj/item/toy/character/cleric + name = "Cleric Miniature" + desc = "A wee little cleric, with his wee little staff." + icon_state = "clericcharacter" +/obj/item/toy/character/warrior + name = "Warrior Miniature" + desc = "That sword would make a decent toothpick." + icon_state = "warriorcharacter" +/obj/item/toy/character/thief + name = "Thief Miniature" + desc = "Hey, where did my wallet go!?" + icon_state = "thiefcharacter" +/obj/item/toy/character/wizard + name = "Wizard Miniature" + desc = "MAGIC!" + icon_state = "wizardcharacter" +/obj/item/toy/character/cthulhu + name = "Cthulhu Miniature" + desc = "The dark lord has risen!" + icon_state = "darkmastercharacter" +/obj/item/toy/character/lich + name = "Lich Miniature" + desc = "Murderboner extraordinaire." + icon_state = "lichcharacter" +/obj/item/weapon/storage/box/characters + name = "Box of Miniatures" + desc = "The nerd's best friends." + icon_state = "box" +/obj/item/weapon/storage/box/characters/New() + ..() + new /obj/item/toy/character/alien(src) + new /obj/item/toy/character/cleric(src) + new /obj/item/toy/character/warrior(src) + new /obj/item/toy/character/thief(src) + new /obj/item/toy/character/wizard(src) + new /obj/item/toy/character/cthulhu(src) + new /obj/item/toy/character/lich(src) \ No newline at end of file diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index bb2d820e54f..dee6c2afaaf 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -180,6 +180,10 @@ var/global/nologevent = 0 Thunderdome Admin | Thunderdome Observer | "} + if(M.client.related_accounts_cid.len) + body += "

Related accounts by CID: [list2text(M.client.related_accounts_cid, " - ")]
" + if(M.client.related_accounts_ip.len) + body += "Related accounts by IP: [list2text(M.client.related_accounts_ip, " - ")]
" body += {"
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index bfb9dbb5cc1..076b05d2187 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -63,7 +63,8 @@ var/list/admin_verbs_admin = list( /client/proc/delbook, /client/proc/empty_ai_core_toggle_latejoin, /client/proc/freeze, - /client/proc/freezemecha + /client/proc/freezemecha, + /client/proc/alt_check ) var/list/admin_verbs_ban = list( diff --git a/code/modules/admin/verbs/alt_check.dm b/code/modules/admin/verbs/alt_check.dm new file mode 100644 index 00000000000..5366f240945 --- /dev/null +++ b/code/modules/admin/verbs/alt_check.dm @@ -0,0 +1,20 @@ +/client/proc/alt_check() + set category = "Admin" + set name = "Alt Account Checker" + + var/dat = {"Just to be sure you should try to also look up computer IDs/IPs on the server logs for a second opinion. +
Additionally make an attempt to introduce new players to the server +
"} + + if(dbcon.IsConnected()) + for(var/client/C in clients) + dat += "

[C.ckey] (Player Age: [C.player_age]) - [C.computer_id] / [C.address]
" + if(C.related_accounts_cid.len) + dat += "--Accounts associated with CID: " + dat += "[list2text(C.related_accounts_cid, " - ")]
" + if(C.related_accounts_ip.len) + dat += "--Accounts associated with IP: " + dat += "[list2text(C.related_accounts_ip, " - ")] " + usr << browse(dat, "window=alt_panel;size=640x480") + return + diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index 8f96fa89437..3e5dea3cacc 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -41,9 +41,9 @@ //////////////////////////////////// //things that require the database// //////////////////////////////////// - var/player_age = "Requires database" //So admins know why it isn't working - Used to determine how old the account is - in days. - var/related_accounts_ip = "Requires database" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this ip - var/related_accounts_cid = "Requires database" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this computer id + var/player_age = "--" //So admins know why it isn't working - Used to determine how old the account is - in days. + var/list/related_accounts_ip = list() //So admins know why it isn't working - Used to determine what other accounts previously logged in from this ip + var/list/related_accounts_cid = list() //So admins know why it isn't working - Used to determine what other accounts previously logged in from this computer id preload_rsc = 1 // This is 0 so we can set it to an URL once the player logs in and have them download the resources from a different server. diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 43d9569ea39..67bf068d604 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -307,17 +307,21 @@ var/DBQuery/query_ip = dbcon.NewQuery("SELECT ckey FROM erro_player WHERE ip = '[address]'") query_ip.Execute() - related_accounts_ip = "" + related_accounts_ip = list() while(query_ip.NextRow()) - related_accounts_ip += "[query_ip.item[1]], " - break + if(ckey != query_ip.item[1]) + related_accounts_ip.Add("[query_ip.item[1]]") var/DBQuery/query_cid = dbcon.NewQuery("SELECT ckey FROM erro_player WHERE computerid = '[computer_id]'") query_cid.Execute() - related_accounts_cid = "" + related_accounts_cid = list() while(query_cid.NextRow()) - related_accounts_cid += "[query_cid.item[1]], " - break + if(ckey != query_cid.item[1]) + related_accounts_cid.Add("[query_cid.item[1]]") + + //Log all the alts + if(related_accounts_cid.len) + log_access("Alts: [key_name(src)]:[list2text(related_accounts_cid, " - ")]") //Just the standard check to see if it's actually a number if(sql_id) diff --git a/code/modules/events/tgevents/vent_clog.dm b/code/modules/events/tgevents/vent_clog.dm index 10b25a37eb8..1e31e08485d 100755 --- a/code/modules/events/tgevents/vent_clog.dm +++ b/code/modules/events/tgevents/vent_clog.dm @@ -32,5 +32,5 @@ var/datum/effect/effect/system/chem_smoke_spread/smoke = new smoke.set_up(R, rand(1, 2), 0, vent, 0, silent = 1) playsound(vent.loc, 'sound/effects/smoke.ogg', 50, 1, -3) - smoke.start() + smoke.start(3) R.delete() //GC the reagents diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm index 2a2d6214e71..4a249312ba2 100644 --- a/code/modules/mob/living/carbon/alien/life.dm +++ b/code/modules/mob/living/carbon/alien/life.dm @@ -54,15 +54,6 @@ breath = loc.remove_air(breath_moles) - // Handle chem smoke effect -- Doohl - for(var/obj/effect/effect/chem_smoke/smoke in view(1, src)) - if(smoke.reagents.total_volume) - smoke.reagents.reaction(src, INGEST) - spawn(5) - if(smoke) - smoke.reagents.copy_to(src, 10) // I dunno, maybe the reagents enter the blood stream through the lungs? - break // If they breathe in the nasty stuff once, no need to continue checking - else //Still give containing object the chance to interact if(istype(loc, /obj/)) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 885733f0a71..132f11bcd08 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -369,28 +369,6 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc if(prob(5)) rupture_lung() - // Handle chem smoke effect -- Doohl - var/block = 0 - if(wear_mask) - if(wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT) - block = 1 - if(glasses) - if(glasses.flags & BLOCK_GAS_SMOKE_EFFECT) - block = 1 - if(head) - if(head.flags & BLOCK_GAS_SMOKE_EFFECT) - block = 1 - - if(!block) - - for(var/obj/effect/effect/chem_smoke/smoke in view(1, src)) - if(smoke.reagents.total_volume) - smoke.reagents.reaction(src, INGEST) - spawn(5) - if(smoke) - smoke.reagents.copy_to(src, 10) // I dunno, maybe the reagents enter the blood stream through the lungs? - break // If they breathe in the nasty stuff once, no need to continue checking - else //Still give containing object the chance to interact if(istype(loc, /obj/)) var/obj/location_as_object = loc diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index cd0db0092b4..51162a425ff 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -250,21 +250,6 @@ var/breath_moles = environment.total_moles()*BREATH_PERCENTAGE breath = loc.remove_air(breath_moles) - // Handle chem smoke effect -- Doohl - var/block = 0 - if(wear_mask) - if(istype(wear_mask, /obj/item/clothing/mask/gas)) - block = 1 - - if(!block) - - for(var/obj/effect/effect/chem_smoke/smoke in view(1, src)) - if(smoke.reagents.total_volume) - smoke.reagents.reaction(src, INGEST) - spawn(5) - if(smoke) - smoke.reagents.copy_to(src, 10) // I dunno, maybe the reagents enter the blood stream through the lungs? - break // If they breathe in the nasty stuff once, no need to continue checking else //Still give containing object the chance to interact diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index abe1d517e4a..f9c21cf46fc 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -129,7 +129,7 @@ var beakerCurrentVolume = 0 if(beaker && beaker:reagents && beaker:reagents.reagent_list.len) for(var/datum/reagent/R in beaker:reagents.reagent_list) - beakerContents.Add(list(list("name" = R.name, "volume" = R.volume))) // list in a list because Byond merges the first list... + beakerContents.Add(list(list("name" = R.name, "id"=R.id, "volume" = R.volume))) // list in a list because Byond merges the first list... beakerCurrentVolume += R.volume data["beakerContents"] = beakerContents @@ -178,6 +178,16 @@ R.add_reagent(href_list["dispense"], min(amount, energy * 10, space)) energy = max(energy - min(amount, energy * 10, space) / 10, 0) + if(href_list["remove"]) + if(beaker) + if(href_list["removeamount"]) + var/amount = text2num(href_list["removeamount"]) + if(isnum(amount) && (amount > 0)) + var/obj/item/weapon/reagent_containers/glass/B = beaker + var/datum/reagents/R = B.reagents + var/id = href_list["remove"] + R.remove_reagent(id, amount) + if(href_list["ejectBeaker"]) if(beaker) var/obj/item/weapon/reagent_containers/glass/B = beaker diff --git a/code/modules/reagents/newchem/food.dm b/code/modules/reagents/newchem/food.dm index 8add8de4b76..52be1d5848a 100644 --- a/code/modules/reagents/newchem/food.dm +++ b/code/modules/reagents/newchem/food.dm @@ -119,12 +119,12 @@ datum/reagent/honey/on_mob_life(var/mob/living/M as mob) M.reagents.add_reagent("sugar", 0.8) ..() return -/* //Commenting this out until smoke is rewritten, otherwise, this spam so much honeycomb it's not funny + datum/reagent/honey/reaction_turf(var/turf/T, var/volume) src = null if(volume >= 5) new /obj/item/weapon/reagent_containers/food/snacks/honeycomb(T) - return */ + return /datum/reagent/chocolate name = "Chocolate" diff --git a/code/modules/reagents/newchem/medicine.dm b/code/modules/reagents/newchem/medicine.dm index f4fa2569931..dcd3d1e03f5 100644 --- a/code/modules/reagents/newchem/medicine.dm +++ b/code/modules/reagents/newchem/medicine.dm @@ -94,13 +94,12 @@ datum/reagent/synthflesh/reaction_mob(var/mob/living/M, var/method=TOUCH, var/vo ..() return -/* //again, not until smoke rewrite--so many gibs,aghh! datum/reagent/synthflesh/reaction_turf(var/turf/T, var/volume) //let's make a mess! src = null if(volume >= 5) new /obj/effect/decal/cleanable/blood/gibs(T) playsound(T, 'sound/effects/splat.ogg', 50, 1, -3) - return */ + return datum/reagent/charcoal name = "Charcoal" diff --git a/code/modules/reagents/newchem/pyro.dm b/code/modules/reagents/newchem/pyro.dm index 7739795bae6..ae53d8db3c3 100644 --- a/code/modules/reagents/newchem/pyro.dm +++ b/code/modules/reagents/newchem/pyro.dm @@ -260,50 +260,40 @@ name = "smoke_powder" id = "smoke_powder" result = "smoke_powder" + required_reagents = list("stabilizing_agent" = 1, "potassium" = 1, "sugar" = 1, "phosphorus" = 1) + result_amount = 1 + +/datum/chemical_reaction/smoke + name = "smoke" + id = "smoke" + result = null required_reagents = list("potassium" = 1, "sugar" = 1, "phosphorus" = 1) - result_amount = 3 + result_amount = 1 +/datum/chemical_reaction/smoke/on_reaction(var/datum/reagents/holder, var/created_volume) + var/forbidden_reagents = list(id, "sugar", "phosphorus", "potassium") //Do not transfer this stuff through smoke. + for(var/f_reagent in forbidden_reagents) + if(holder.has_reagent(f_reagent)) + holder.remove_reagent(f_reagent, holder.get_reagent_amount(f_reagent)) + var/location = get_turf(holder.my_atom) + var/datum/effect/effect/system/chem_smoke_spread/S = new /datum/effect/effect/system/chem_smoke_spread + S.attach(location) + playsound(location, 'sound/effects/smoke.ogg', 50, 1, -3) + spawn(0) + if(S) + S.set_up(holder, 10, 0, location) + S.start(created_volume >= 10 ? 3 : 2) + if(holder && holder.my_atom) + holder.clear_reagents() + return -/datum/chemical_reaction/smoke_powder_smoke +/datum/chemical_reaction/smoke/smoke_powder name = "smoke_powder_smoke" id = "smoke_powder_smoke" - result = null required_reagents = list("smoke_powder" = 1) required_temp = 374 secondary = 1 - -/datum/chemical_reaction/smoke_powder_smoke/on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - var/datum/effect/effect/system/chem_smoke_spread/S = new /datum/effect/effect/system/chem_smoke_spread - S.attach(location) - playsound(location, 'sound/effects/smoke.ogg', 50, 1, -3) - spawn(0) - if(S) - S.set_up(holder, 10, 0, location) - S.start() - sleep(10) - S.start() - if(holder && holder.my_atom) - holder.clear_reagents() - return - -/datum/chemical_reaction/smoke_powder/on_reaction(var/datum/reagents/holder, var/created_volume) - if(holder.has_reagent("stabilizing_agent")) - return - holder.remove_reagent("smoke_powder", created_volume) - var/location = get_turf(holder.my_atom) - var/datum/effect/effect/system/chem_smoke_spread/S = new /datum/effect/effect/system/chem_smoke_spread - S.attach(location) - playsound(location, 'sound/effects/smoke.ogg', 50, 1, -3) - spawn(0) - if(S) - S.set_up(holder, 10, 0, location) - S.start() - sleep(10) - S.start() - if(holder && holder.my_atom) - holder.clear_reagents() - return + result_amount = 1 /datum/reagent/sonic_powder name = "Sonic Powder" diff --git a/code/modules/store/items.dm b/code/modules/store/items.dm index 32001533d9b..3c97841e2f2 100644 --- a/code/modules/store/items.dm +++ b/code/modules/store/items.dm @@ -75,6 +75,12 @@ typepath = /obj/item/device/violin cost = 500 +/datum/storeitem/guitar + name = "guitar" + desc = "It's made of wood and has bronze strings." + typepath = /obj/item/device/guitar + cost = 700 + /datum/storeitem/baby name = "Toddler" desc = "This baby looks almost real. Wait, did it just burp?" diff --git a/icons/mob/in-hand/tools.dmi b/icons/mob/in-hand/tools.dmi index 781d6304e56..d2d0661bd1e 100644 Binary files a/icons/mob/in-hand/tools.dmi and b/icons/mob/in-hand/tools.dmi differ diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi index cfde5ba0c1b..7a50f234aeb 100644 Binary files a/icons/obj/toy.dmi and b/icons/obj/toy.dmi differ diff --git a/nano/templates/chem_dispenser.tmpl b/nano/templates/chem_dispenser.tmpl index 3de1d02984d..4ecc76683e0 100644 --- a/nano/templates/chem_dispenser.tmpl +++ b/nano/templates/chem_dispenser.tmpl @@ -58,9 +58,22 @@ Used In File(s): \code\modules\reagents\Chemistry-Machinery.dm

{{if data.isBeakerLoaded}} + {{if data.beakerCurrentVolume}} + Dispose: + {{/if}} Volume: {{:data.beakerCurrentVolume}} / {{:data.beakerMaxVolume}}
{{for data.beakerContents}} - {{:value.volume}} units of {{:value.name}}
+
+ + {{:helper.link('1', null, {'remove' : value.id, 'removeamount' : 1})}} + {{:helper.link('5', null, {'remove' : value.id, 'removeamount' : 5})}} + {{:helper.link('10', null, {'remove' : value.id, 'removeamount' : 10})}} + {{:helper.link('ALL', null, {'remove' : value.id, 'removeamount' : value.volume})}} + + + {{:value.volume}} units of {{:value.name}} + +
{{empty}} {{if data.glass}} diff --git a/paradise.dme b/paradise.dme index d25034eea08..2a3b3545770 100644 --- a/paradise.dme +++ b/paradise.dme @@ -580,6 +580,7 @@ #include "code\game\objects\items\devices\debugger.dm" #include "code\game\objects\items\devices\flash.dm" #include "code\game\objects\items\devices\flashlight.dm" +#include "code\game\objects\items\devices\guitar.dm" #include "code\game\objects\items\devices\laserpointer.dm" #include "code\game\objects\items\devices\lightreplacer.dm" #include "code\game\objects\items\devices\megaphone.dm" @@ -831,6 +832,7 @@ #include "code\modules\admin\verbs\adminjump.dm" #include "code\modules\admin\verbs\adminpm.dm" #include "code\modules\admin\verbs\adminsay.dm" +#include "code\modules\admin\verbs\alt_check.dm" #include "code\modules\admin\verbs\atmosdebug.dm" #include "code\modules\admin\verbs\BrokenInhands.dm" #include "code\modules\admin\verbs\cinematic.dm" diff --git a/sound/guitar/Ab3.ogg b/sound/guitar/Ab3.ogg new file mode 100644 index 00000000000..6e242786c40 Binary files /dev/null and b/sound/guitar/Ab3.ogg differ diff --git a/sound/guitar/Ab4.ogg b/sound/guitar/Ab4.ogg new file mode 100644 index 00000000000..6f854ea5d3f Binary files /dev/null and b/sound/guitar/Ab4.ogg differ diff --git a/sound/guitar/Ab5.ogg b/sound/guitar/Ab5.ogg new file mode 100644 index 00000000000..53ba1c01520 Binary files /dev/null and b/sound/guitar/Ab5.ogg differ diff --git a/sound/guitar/Ab6.ogg b/sound/guitar/Ab6.ogg new file mode 100644 index 00000000000..d0a238ba607 Binary files /dev/null and b/sound/guitar/Ab6.ogg differ diff --git a/sound/guitar/An3.ogg b/sound/guitar/An3.ogg new file mode 100644 index 00000000000..1f06e6d4f28 Binary files /dev/null and b/sound/guitar/An3.ogg differ diff --git a/sound/guitar/An4.ogg b/sound/guitar/An4.ogg new file mode 100644 index 00000000000..f3354df46b9 Binary files /dev/null and b/sound/guitar/An4.ogg differ diff --git a/sound/guitar/An5.ogg b/sound/guitar/An5.ogg new file mode 100644 index 00000000000..fc3b1b345c9 Binary files /dev/null and b/sound/guitar/An5.ogg differ diff --git a/sound/guitar/An6.ogg b/sound/guitar/An6.ogg new file mode 100644 index 00000000000..f58a50d2a65 Binary files /dev/null and b/sound/guitar/An6.ogg differ diff --git a/sound/guitar/Bb3.ogg b/sound/guitar/Bb3.ogg new file mode 100644 index 00000000000..e88343d88fb Binary files /dev/null and b/sound/guitar/Bb3.ogg differ diff --git a/sound/guitar/Bb4.ogg b/sound/guitar/Bb4.ogg new file mode 100644 index 00000000000..11b883285da Binary files /dev/null and b/sound/guitar/Bb4.ogg differ diff --git a/sound/guitar/Bb5.ogg b/sound/guitar/Bb5.ogg new file mode 100644 index 00000000000..5d9b10f87a6 Binary files /dev/null and b/sound/guitar/Bb5.ogg differ diff --git a/sound/guitar/Bb6.ogg b/sound/guitar/Bb6.ogg new file mode 100644 index 00000000000..c7f11ef59a6 Binary files /dev/null and b/sound/guitar/Bb6.ogg differ diff --git a/sound/guitar/Bn3.ogg b/sound/guitar/Bn3.ogg new file mode 100644 index 00000000000..0d6022369fa Binary files /dev/null and b/sound/guitar/Bn3.ogg differ diff --git a/sound/guitar/Bn4.ogg b/sound/guitar/Bn4.ogg new file mode 100644 index 00000000000..7e8682d5ff0 Binary files /dev/null and b/sound/guitar/Bn4.ogg differ diff --git a/sound/guitar/Bn5.ogg b/sound/guitar/Bn5.ogg new file mode 100644 index 00000000000..1912da7f66c Binary files /dev/null and b/sound/guitar/Bn5.ogg differ diff --git a/sound/guitar/Bn6.ogg b/sound/guitar/Bn6.ogg new file mode 100644 index 00000000000..985ec744dfb Binary files /dev/null and b/sound/guitar/Bn6.ogg differ diff --git a/sound/guitar/Cb4.ogg b/sound/guitar/Cb4.ogg new file mode 100644 index 00000000000..0d6022369fa Binary files /dev/null and b/sound/guitar/Cb4.ogg differ diff --git a/sound/guitar/Cb5.ogg b/sound/guitar/Cb5.ogg new file mode 100644 index 00000000000..7e8682d5ff0 Binary files /dev/null and b/sound/guitar/Cb5.ogg differ diff --git a/sound/guitar/Cb6.ogg b/sound/guitar/Cb6.ogg new file mode 100644 index 00000000000..1912da7f66c Binary files /dev/null and b/sound/guitar/Cb6.ogg differ diff --git a/sound/guitar/Cb7.ogg b/sound/guitar/Cb7.ogg new file mode 100644 index 00000000000..985ec744dfb Binary files /dev/null and b/sound/guitar/Cb7.ogg differ diff --git a/sound/guitar/Cn4.ogg b/sound/guitar/Cn4.ogg new file mode 100644 index 00000000000..0279b73f8bd Binary files /dev/null and b/sound/guitar/Cn4.ogg differ diff --git a/sound/guitar/Cn5.ogg b/sound/guitar/Cn5.ogg new file mode 100644 index 00000000000..ece600a6c1a Binary files /dev/null and b/sound/guitar/Cn5.ogg differ diff --git a/sound/guitar/Cn6.ogg b/sound/guitar/Cn6.ogg new file mode 100644 index 00000000000..8c2fecc62aa Binary files /dev/null and b/sound/guitar/Cn6.ogg differ diff --git a/sound/guitar/Db4.ogg b/sound/guitar/Db4.ogg new file mode 100644 index 00000000000..8a14f1f8365 Binary files /dev/null and b/sound/guitar/Db4.ogg differ diff --git a/sound/guitar/Db5.ogg b/sound/guitar/Db5.ogg new file mode 100644 index 00000000000..46a67f20ce0 Binary files /dev/null and b/sound/guitar/Db5.ogg differ diff --git a/sound/guitar/Db6.ogg b/sound/guitar/Db6.ogg new file mode 100644 index 00000000000..a07095c6033 Binary files /dev/null and b/sound/guitar/Db6.ogg differ diff --git a/sound/guitar/Dn4.ogg b/sound/guitar/Dn4.ogg new file mode 100644 index 00000000000..587099a0ddc Binary files /dev/null and b/sound/guitar/Dn4.ogg differ diff --git a/sound/guitar/Dn5.ogg b/sound/guitar/Dn5.ogg new file mode 100644 index 00000000000..d6a9c38415a Binary files /dev/null and b/sound/guitar/Dn5.ogg differ diff --git a/sound/guitar/Dn6.ogg b/sound/guitar/Dn6.ogg new file mode 100644 index 00000000000..4e44d5e72fe Binary files /dev/null and b/sound/guitar/Dn6.ogg differ diff --git a/sound/guitar/Eb4.ogg b/sound/guitar/Eb4.ogg new file mode 100644 index 00000000000..1f93c8273d1 Binary files /dev/null and b/sound/guitar/Eb4.ogg differ diff --git a/sound/guitar/Eb5.ogg b/sound/guitar/Eb5.ogg new file mode 100644 index 00000000000..5b795377f38 Binary files /dev/null and b/sound/guitar/Eb5.ogg differ diff --git a/sound/guitar/Eb6.ogg b/sound/guitar/Eb6.ogg new file mode 100644 index 00000000000..5febf7a37b3 Binary files /dev/null and b/sound/guitar/Eb6.ogg differ diff --git a/sound/guitar/En3.ogg b/sound/guitar/En3.ogg new file mode 100644 index 00000000000..d9679bd78ea Binary files /dev/null and b/sound/guitar/En3.ogg differ diff --git a/sound/guitar/En4.ogg b/sound/guitar/En4.ogg new file mode 100644 index 00000000000..50dad80f506 Binary files /dev/null and b/sound/guitar/En4.ogg differ diff --git a/sound/guitar/En5.ogg b/sound/guitar/En5.ogg new file mode 100644 index 00000000000..8617c069201 Binary files /dev/null and b/sound/guitar/En5.ogg differ diff --git a/sound/guitar/En6.ogg b/sound/guitar/En6.ogg new file mode 100644 index 00000000000..a487ce33e4b Binary files /dev/null and b/sound/guitar/En6.ogg differ diff --git a/sound/guitar/Fb3.ogg b/sound/guitar/Fb3.ogg new file mode 100644 index 00000000000..d9679bd78ea Binary files /dev/null and b/sound/guitar/Fb3.ogg differ diff --git a/sound/guitar/Fb4.ogg b/sound/guitar/Fb4.ogg new file mode 100644 index 00000000000..50dad80f506 Binary files /dev/null and b/sound/guitar/Fb4.ogg differ diff --git a/sound/guitar/Fb5.ogg b/sound/guitar/Fb5.ogg new file mode 100644 index 00000000000..8617c069201 Binary files /dev/null and b/sound/guitar/Fb5.ogg differ diff --git a/sound/guitar/Fb6.ogg b/sound/guitar/Fb6.ogg new file mode 100644 index 00000000000..a487ce33e4b Binary files /dev/null and b/sound/guitar/Fb6.ogg differ diff --git a/sound/guitar/Fn3.ogg b/sound/guitar/Fn3.ogg new file mode 100644 index 00000000000..4e37dc58126 Binary files /dev/null and b/sound/guitar/Fn3.ogg differ diff --git a/sound/guitar/Fn4.ogg b/sound/guitar/Fn4.ogg new file mode 100644 index 00000000000..3bf9957d48a Binary files /dev/null and b/sound/guitar/Fn4.ogg differ diff --git a/sound/guitar/Fn5.ogg b/sound/guitar/Fn5.ogg new file mode 100644 index 00000000000..ad0a0ecec79 Binary files /dev/null and b/sound/guitar/Fn5.ogg differ diff --git a/sound/guitar/Fn6.ogg b/sound/guitar/Fn6.ogg new file mode 100644 index 00000000000..50457e7bf4c Binary files /dev/null and b/sound/guitar/Fn6.ogg differ diff --git a/sound/guitar/Gb3.ogg b/sound/guitar/Gb3.ogg new file mode 100644 index 00000000000..1b2e6c503de Binary files /dev/null and b/sound/guitar/Gb3.ogg differ diff --git a/sound/guitar/Gb4.ogg b/sound/guitar/Gb4.ogg new file mode 100644 index 00000000000..122a0c5c17d Binary files /dev/null and b/sound/guitar/Gb4.ogg differ diff --git a/sound/guitar/Gb5.ogg b/sound/guitar/Gb5.ogg new file mode 100644 index 00000000000..b0346e2f365 Binary files /dev/null and b/sound/guitar/Gb5.ogg differ diff --git a/sound/guitar/Gb6.ogg b/sound/guitar/Gb6.ogg new file mode 100644 index 00000000000..4f873de27cf Binary files /dev/null and b/sound/guitar/Gb6.ogg differ diff --git a/sound/guitar/Gn3.ogg b/sound/guitar/Gn3.ogg new file mode 100644 index 00000000000..783cded9fe5 Binary files /dev/null and b/sound/guitar/Gn3.ogg differ diff --git a/sound/guitar/Gn4.ogg b/sound/guitar/Gn4.ogg new file mode 100644 index 00000000000..92f9cd2fd9d Binary files /dev/null and b/sound/guitar/Gn4.ogg differ diff --git a/sound/guitar/Gn5.ogg b/sound/guitar/Gn5.ogg new file mode 100644 index 00000000000..42fdebc209b Binary files /dev/null and b/sound/guitar/Gn5.ogg differ diff --git a/sound/guitar/Gn6.ogg b/sound/guitar/Gn6.ogg new file mode 100644 index 00000000000..a36bf38f001 Binary files /dev/null and b/sound/guitar/Gn6.ogg differ