diff --git a/baystation12.dme b/baystation12.dme index a720e22d05..227cf0d312 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -179,8 +179,13 @@ #include "code\game\area\areas.dm" #include "code\game\area\Space Station 13 areas.dm" #include "code\game\dna\dna2.dm" +#include "code\game\dna\dna2_domutcheck.dm" #include "code\game\dna\dna2_helpers.dm" #include "code\game\dna\dna_modifier.dm" +#include "code\game\dna\genes\disabilities.dm" +#include "code\game\dna\genes\gene.dm" +#include "code\game\dna\genes\monkey.dm" +#include "code\game\dna\genes\powers.dm" #include "code\game\gamemodes\events.dm" #include "code\game\gamemodes\factions.dm" #include "code\game\gamemodes\game_mode.dm" @@ -440,6 +445,7 @@ #include "code\game\objects\effects\decals\Cleanable\humans.dm" #include "code\game\objects\effects\decals\Cleanable\misc.dm" #include "code\game\objects\effects\decals\Cleanable\robots.dm" +#include "code\game\objects\effects\decals\Cleanable\tracks.dm" #include "code\game\objects\effects\spawners\bombspawner.dm" #include "code\game\objects\effects\spawners\gibspawner.dm" #include "code\game\objects\effects\spawners\vaultspawner.dm" @@ -613,6 +619,7 @@ #include "code\game\objects\structures\crates_lockers\closets\secure\cargo.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\engineering.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\freezer.dm" +#include "code\game\objects\structures\crates_lockers\closets\secure\guncabinet.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\hydroponics.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\medical.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\personal.dm" @@ -782,6 +789,7 @@ #include "code\modules\economy\TradeDestinations.dm" #include "code\modules\events\alien_infestation.dm" #include "code\modules\events\blob.dm" +#include "code\modules\events\borers.dm" #include "code\modules\events\brand_intelligence.dm" #include "code\modules\events\carp_migration.dm" #include "code\modules\events\comms_blackout.dm" @@ -1102,6 +1110,7 @@ #include "code\modules\projectiles\guns\projectile\pistol.dm" #include "code\modules\projectiles\guns\projectile\pneumatic.dm" #include "code\modules\projectiles\guns\projectile\revolver.dm" +#include "code\modules\projectiles\guns\projectile\rocket.dm" #include "code\modules\projectiles\guns\projectile\shotgun.dm" #include "code\modules\projectiles\projectile\animate.dm" #include "code\modules\projectiles\projectile\beams.dm" @@ -1132,8 +1141,10 @@ #include "code\modules\reagents\reagent_containers\robodropper.dm" #include "code\modules\reagents\reagent_containers\spray.dm" #include "code\modules\reagents\reagent_containers\syringes.dm" +#include "code\modules\reagents\reagent_containers\food\cans.dm" #include "code\modules\reagents\reagent_containers\food\condiment.dm" #include "code\modules\reagents\reagent_containers\food\drinks.dm" +#include "code\modules\reagents\reagent_containers\food\sandwich.dm" #include "code\modules\reagents\reagent_containers\food\snacks.dm" #include "code\modules\reagents\reagent_containers\food\drinks\bottle.dm" #include "code\modules\reagents\reagent_containers\food\drinks\drinkingglass.dm" @@ -1302,6 +1313,7 @@ #include "code\WorkInProgress\Cael_Aislinn\Supermatter\LaserComputer.dm" #include "code\WorkInProgress\Cael_Aislinn\Supermatter\ZeroPointLaser.dm" #include "code\WorkInProgress\Chinsky\ashtray.dm" +#include "code\WorkInProgress\Chinsky\guestpass.dm" #include "code\WorkInProgress\Cib\MedicalSideEffects.dm" #include "code\WorkInProgress\kilakk\fax.dm" #include "code\WorkInProgress\Mini\atmos_control.dm" diff --git a/code/WorkInProgress/Cael_Aislinn/Jungle/jungle_temple.dm b/code/WorkInProgress/Cael_Aislinn/Jungle/jungle_temple.dm index 43292f02f2..20009c0a64 100644 --- a/code/WorkInProgress/Cael_Aislinn/Jungle/jungle_temple.dm +++ b/code/WorkInProgress/Cael_Aislinn/Jungle/jungle_temple.dm @@ -204,7 +204,7 @@ var/obj/structure/closet/crate/freezer/C = new(src.loc) var/num = rand(2,6) var/new_type = pick( - /obj/item/weapon/reagent_containers/food/drinks/beer, \ + /obj/item/weapon/reagent_containers/food/drinks/cans/beer, \ /obj/item/weapon/reagent_containers/food/drinks/tea, \ /obj/item/weapon/reagent_containers/food/drinks/dry_ramen, \ /obj/item/weapon/reagent_containers/food/snacks/candiedapple, \ diff --git a/code/WorkInProgress/Chinsky/ashtray.dm b/code/WorkInProgress/Chinsky/ashtray.dm index ab3a636251..5ec88ac8bd 100644 --- a/code/WorkInProgress/Chinsky/ashtray.dm +++ b/code/WorkInProgress/Chinsky/ashtray.dm @@ -17,35 +17,34 @@ /obj/item/ashtray/attackby(obj/item/weapon/W as obj, mob/user as mob) if (health < 1) return - if (istype(W,/obj/item/clothing/mask/cigarette) || istype(W, /obj/item/weapon/match)) - if(user) - if (contents.len >= max_butts) - user << "This ashtray is full." - return - user.u_equip(W) - W.loc = src - if ((user.client && user.s_active != src)) - user.client.screen -= W + if (istype(W,/obj/item/weapon/cigbutt) || istype(W,/obj/item/clothing/mask/cigarette) || istype(W, /obj/item/weapon/match)) + if (contents.len >= max_butts) + user << "This ashtray is full." + return + user.u_equip(W) + W.loc = src + + if (istype(W,/obj/item/clothing/mask/cigarette)) var/obj/item/clothing/mask/cigarette/cig = W if (cig.lit == 1) src.visible_message("[user] crushes [cig] in [src], putting it out.") - cig.smoketime = 0 + processing_objects.Remove(cig) + var/obj/item/butt = new cig.type_butt(src) + cig.transfer_fingerprints_to(butt) + del(cig) else if (cig.lit == 0) - if(istype(cig, /obj/item/weapon/match)) - user << "You place [cig] in [src] without even lighting it. Why would you do that?" - else - user << "You place [cig] in [src] without even smoking it. Why would you do that?" - else if (cig.lit == -1) - src.visible_message("[user] places [cig] in [src].") - user.update_inv_l_hand() - user.update_inv_r_hand() - add_fingerprint(user) - if (contents.len == max_butts) - icon_state = icon_full - desc = empty_desc + " It's stuffed full." - else if (contents.len > max_butts/2) - icon_state = icon_half - desc = empty_desc + " It's half-filled." + user << "You place [cig] in [src] without even smoking it. Why would you do that?" + + src.visible_message("[user] places [W] in [src].") + user.update_inv_l_hand() + user.update_inv_r_hand() + add_fingerprint(user) + if (contents.len == max_butts) + icon_state = icon_full + desc = empty_desc + " It's stuffed full." + else if (contents.len > max_butts/2) + icon_state = icon_half + desc = empty_desc + " It's half-filled." else health = max(0,health - W.force) user << "You hit [src] with [W]." @@ -62,7 +61,6 @@ if (contents.len) src.visible_message("\red [src] slams into [hit_atom] spilling its contents!") for (var/obj/item/clothing/mask/cigarette/O in contents) - contents -= O O.loc = src.loc icon_state = icon_empty return ..() @@ -70,7 +68,6 @@ /obj/item/ashtray/proc/die() src.visible_message("\red [src] shatters spilling its contents!") for (var/obj/item/clothing/mask/cigarette/O in contents) - contents -= O O.loc = src.loc icon_state = icon_broken diff --git a/code/WorkInProgress/Chinsky/guestpass.dm b/code/WorkInProgress/Chinsky/guestpass.dm new file mode 100644 index 0000000000..8a959c5b76 --- /dev/null +++ b/code/WorkInProgress/Chinsky/guestpass.dm @@ -0,0 +1,186 @@ +///////////////////////////////////////////// +//Guest pass //////////////////////////////// +///////////////////////////////////////////// +/obj/item/weapon/card/id/guest + name = "guest pass" + desc = "Allows temporary access to station areas." + icon_state = "guest" + + var/temp_access = list() //to prevent agent cards stealing access as permanent + var/expiration_time = 0 + var/reason = "NOT SPECIFIED" + +/obj/item/weapon/card/id/guest/GetAccess() + if (world.time > expiration_time) + return access + else + return temp_access + +/obj/item/weapon/card/id/guest/examine() + ..() + if (world.time < expiration_time) + usr << "\blue This pass expires at [worldtime2text(expiration_time)]." + else + usr << "\red It expired at [worldtime2text(expiration_time)]." + +/obj/item/weapon/card/id/guest/read() + if (world.time > expiration_time) + usr << "This pass expired at [worldtime2text(expiration_time)]." + else + usr << "This pass expires at [worldtime2text(expiration_time)]." + + usr << "It grants access to following areas:" + for (var/A in temp_access) + usr << "[get_access_desc(A)]." + usr << "Issuing reason: [reason]." + return + +///////////////////////////////////////////// +//Guest pass terminal//////////////////////// +///////////////////////////////////////////// + +/obj/machinery/computer/guestpass + name = "guest pass terminal" + icon_state = "guest" + density = 0 + + + var/obj/item/weapon/card/id/giver + var/list/accesses = list() + var/giv_name = "NOT SPECIFIED" + var/reason = "NOT SPECIFIED" + var/duration = 0 + + var/list/internal_log = list() + var/mode = 0 // 0 - making pass, 1 - viewing logs + +/obj/machinery/computer/guestpass/New() + ..() + uid = "[rand(100,999)]-G[rand(10,99)]" + +/obj/machinery/computer/guestpass/attackby(obj/O, mob/user) + if(istype(O, /obj/item/weapon/card/id)) + user.drop_item() + O.loc = src + giver = O + updateUsrDialog() + +/obj/machinery/computer/guestpass/attack_ai(var/mob/user as mob) + return attack_hand(user) + +/obj/machinery/computer/guestpass/attack_paw(var/mob/user as mob) + return attack_hand(user) + +/obj/machinery/computer/guestpass/attack_hand(var/mob/user as mob) + if(..()) + return + + user.set_machine(src) + var/dat + + if (mode == 1) //Logs + dat += "
| Name | Rank | Activity |
|---|---|---|
| Name | Rank | Activity |
|---|---|---|
| Heads | ||
| [name] | [heads[name]] | [isactive[name]] |
| Security | ||
| [name] | [sec[name]] | [isactive[name]] |
| Engineering | ||
| [name] | [eng[name]] | [isactive[name]] |
| Medical | ||
| [name] | [med[name]] | [isactive[name]] |
| Science | ||
| [name] | [sci[name]] | [isactive[name]] |
| Civilian | ||
| [name] | [civ[name]] | [isactive[name]] |
| Silicon | ||
| [name] | [bot[name]] | [isactive[name]] |
| Miscellaneous | ||
| [name] | [misc[name]] | [isactive[name]] |
| Heads | ||
| [name] | [heads[name]] | [isactive[name]] |
| Security | ||
| [name] | [sec[name]] | [isactive[name]] |
| Engineering | ||
| [name] | [eng[name]] | [isactive[name]] |
| Medical | ||
| [name] | [med[name]] | [isactive[name]] |
| Science | ||
| [name] | [sci[name]] | [isactive[name]] |
| Civilian | ||
| [name] | [civ[name]] | [isactive[name]] |
| Silicon | ||
| [name] | [bot[name]] | [isactive[name]] |
| Miscellaneous | ||
| [name] | [misc[name]] | [isactive[name]] |
According this blueprints you are in open space now.
+According the blueprints, you are now in outer space. Hold your breath.
"} if (AREA_STATION) text += {" -According this blueprints you are in [A.name] now.
+According the blueprints, you are now in \"[A.name]\".
You may move an amendment to the drawing.
"} if (AREA_SPECIAL) text += {" -This place isn't noted on these blueprints.
+This place isn't noted on the blueprint.
"} else return @@ -105,20 +105,20 @@ move an amendment to the drawing. if(!istype(res,/list)) switch(res) if(ROOM_ERR_SPACE) - usr << "\red New area must be complete airtight!" + usr << "\red The new area must be completely airtight!" return if(ROOM_ERR_TOOLARGE) - usr << "\red New area too large!" + usr << "\red The new area too large!" return else usr << "\red Error! Please notify administration!" return var/list/turf/turfs = res - var/str = trim(stripped_input(usr,"New area title","Blueprints editing", "", MAX_NAME_LEN)) + var/str = trim(stripped_input(usr,"New area name:","Blueprint Editing", "", MAX_NAME_LEN)) if(!str || !length(str)) //cancel return if(length(str) > 50) - usr << "\red Text too long." + usr << "\red Name too long." return var/area/A = new A.name = str @@ -153,8 +153,8 @@ move an amendment to the drawing. /obj/item/blueprints/proc/edit_area() var/area/A = get_area() //world << "DEBUG: edit_area" - var/prevname = A.name - var/str = trim(stripped_input(usr,"New area title","Blueprints editing", prevname, MAX_NAME_LEN)) + var/prevname = "[A.name]" + var/str = trim(stripped_input(usr,"New area name:","Blueprint Editing", prevname, MAX_NAME_LEN)) if(!str || !length(str) || str==prevname) //cancel return if(length(str) > 50) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index cd3368b941..09300be121 100755 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -26,7 +26,7 @@ var/global/list/obj/item/device/pda/PDAs = list() var/f_lum = 2 //Luminosity for the flashlight function var/silent = 0 //To beep or not to beep, that is the question var/toff = 0 //If 1, messenger disabled - var/tnote = null //Current Texts + var/tnote[0] //Current Texts var/last_text //No text spamming var/last_honk //Also no honk spamming that's bad too var/ttone = "beep" //The ringtone! @@ -38,7 +38,10 @@ var/global/list/obj/item/device/pda/PDAs = list() var/cart = "" //A place to stick cartridge menu information var/detonate = 1 // Can the PDA be blown up? var/hidden = 0 // Is the PDA hidden from the PDA list? - + var/active_conversation = null // New variable that allows us to only view a single conversation. + var/list/conversations = list() // For keeping up with who we have PDA messsages from. + var/newmessage = 0 //To remove hackish overlay check + 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 @@ -243,7 +246,13 @@ var/global/list/obj/item/device/pda/PDAs = list() if(usr.stat == 2) usr << "You can't do that because you are dead!" return - var/HTML = "
Close"
-
- if ((!isnull(cartridge)) && (mode == 0))
- dat += " |
Eject [cartridge]"
- if (mode)
- dat += " |
Return"
- dat += " |
Refresh"
-
- dat += "
Retry"
- else
- switch (mode)
- if (0)
- dat += "
Notekeeper
Messenger
View Crew Manifest
Nanotrasen Relay Chat
Honk Synthesizer
Set Status Display
Power Monitor
Medical Records
[scanmode == 1 ? "Disable" : "Enable"] Medical Scanner
Security Records
Security Bot Access
Supply Records
Delivery Bot Control
Custodial Locator
Signaler System
[scanmode == 3 ? "Disable" : "Enable"] Reagent Scanner
[scanmode == 4 ? "Disable" : "Enable"] Halogen Counter
[scanmode == 5 ? "Disable" : "Enable"] Gas Scanner
Toggle Remote Door
Atmospheric Scan
[fon ? "Disable" : "Enable"] Flashlight
Notekeeper V2.1
SpaceMessenger V3.9.4
Ringer: [silent == 1 ? "Off" : "On"] | "
- dat += "
Send / Receive: [toff == 1 ? "Off" : "On"] | "
- dat += "
Set Ringtone | "
- dat += "
Messages
Detected PDAs
*Detonate*)"
- if (istype(cartridge, /obj/item/weapon/cartridge/clown))
- dat += " (
*Send Virus*)"
- if (istype(cartridge, /obj/item/weapon/cartridge/mime))
- dat += " (*Send Virus*)"
- dat += "
SpaceMessenger V3.9.4
Clear Messages"
-
- dat += "
Messages
Atmospheric Readings
Nanotrasen Relay Chat
Detected Channels
"
- dat += "
Crew Manifest
Remote Signaling System
Station Status Display Interlink
Power Monitors - Please select one
Power Monitor Total power: [powmonitor.powernet.avail] W" - - if (44) //medical records //This thing only displays a single screen so it's hard to really get the sub-menu stuff working. - menu = "
Total load: [num2text(powmonitor.powernet.viewload,10)] W
" - - menu += "" - - if(L.len > 0) - menu += "Area Eqp./Lgt./Env. Load Cell
" - - var/list/S = list(" Off","AOff"," On", " AOn") - var/list/chg = list("N","C","F") - - for(var/obj/machinery/power/apc/A in L) - menu += copytext(add_tspace(A.area.name, 30), 1, 30) - menu += " [S[A.equipment+1]] [S[A.lighting+1]] [S[A.environ+1]] [add_lspace(A.lastused_total, 6)] [A.cell ? "[add_lspace(round(A.cell.percent()), 3)]% [chg[A.charging+1]]" : " N/C"]
" - - menu += "
Medical Record List
Medical Record
Medical Data
Security Record List
Security Record
Security Data
Securitron Interlink
Scan for active bots
refresh)
Return to bot list"
-
- if (47) //quartermaster order records
- menu = "
Supply Record Interlink
M.U.L.E. bot Interlink V0.8
Scan for active bots
refresh)
Return to bot list"
-
- if (49) //janitorial locator
- menu = "
Persistent Custodial Object Locator" - - t += "Stored capacity : [round(100.0*charge/capacity, 0.1)]%
" - - t += "Input: [charging ? "Charging" : "Not Charging"] [chargemode ? "Auto Off" : "Auto Off "]
" - - - t += "Input level: M - - - [add_lspace(chargelevel,5)] + + + M
" - - t += "
" - - t += "Output: [online ? "Online Offline" : "Online Offline "]
" - - t += "Output level: M - - - [add_lspace(output,5)] + + + M
" - - t += "Output load: [round(loaddemand)] W
" - - t += "
LIST OF SPELLS AVAILABLE
Magic Missile:
This spell fires several, slow moving, magic projectiles at nearby targets. If they hit a target, it is paralyzed and takes minor damage.
Fireball:
This spell fires a fireball at a target and does not require wizard garb. Be careful not to fire it at people that are standing next to you.
Disintegrate:This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown.
Disable Technology:
This spell disables all weapons, cameras and most other technology in range.
Smoke:
This spell spawns a cloud of choking smoke at your location and does not require wizard garb.
Blind:
This spell temporarly blinds a single person and does not require wizard garb.
Forcewall:
This spell creates an unbreakable wall that lasts for 30 seconds and does not require wizard garb.
Blink:
This spell randomly teleports you a short distance. Useful for evasion or getting into areas if you have patience.
Teleport:
This spell teleports you to a type of area of your selection. Very useful if you are in danger, but has a decent cooldown, and is unpredictable.
Mutate:
This spell causes you to turn into a hulk, and gain telekinesis for a short while.
Ethereal Jaunt:
This spell creates your ethereal form, temporarily making you invisible and able to pass through walls.
Knock:
This spell opens nearby doors and does not require wizard garb.
LIST OF SPELLS AVAILABLE
Magic Missile:
This spell fires several, slow moving, magic projectiles at nearby targets. If they hit a target, it is paralyzed and takes minor damage.
Fireball:
This spell fires a fireball at a target and does not require wizard garb. Be careful not to fire it at people that are standing next to you.
Disintegrate:This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown.
Disable Technology:
This spell disables all weapons, cameras and most other technology in range.
Smoke:
This spell spawns a cloud of choking smoke at your location and does not require wizard garb.
Blind:
This spell temporarly blinds a single person and does not require wizard garb.
Forcewall:
This spell creates an unbreakable wall that lasts for 30 seconds and does not require wizard garb.
Blink:
This spell randomly teleports you a short distance. Useful for evasion or getting into areas if you have patience.
Teleport:
This spell teleports you to a type of area of your selection. Very useful if you are in danger, but has a decent cooldown, and is unpredictable.
Mutate:
This spell causes you to turn into a hulk, and gain telekinesis for a short while.
Ethereal Jaunt:
This spell creates your ethereal form, temporarily making you invisible and able to pass through walls.
Knock:
This spell opens nearby doors and does not require wizard garb.
| t |
| Command | ||
|---|---|---|
| {{:name}} | {{:rank}} | {{:active}} |
| {{:name}} | {{:rank}} | {{:active}} |
| Security | ||
| {{:name}} | {{:rank}} | {{:active}} |
| {{:name}} | {{:rank}} | {{:active}} |
| Engineering | ||
| {{:name}} | {{:rank}} | {{:active}} |
| {{:name}} | {{:rank}} | {{:active}} |
| Medical | ||
| {{:name}} | {{:rank}} | {{:active}} |
| {{:name}} | {{:rank}} | {{:active}} |
| Science | ||
| {{:name}} | {{:rank}} | {{:active}} |
| {{:name}} | {{:rank}} | {{:active}} |
| Civilian | ||
| {{:name}} | {{:rank}} | {{:active}} |
| {{:name}} | {{:rank}} | {{:active}} |
| Misc | ||
| {{:name}} | {{:rank}} | {{:active}} |
| Area | Eqp. | Lgt. | Env | Cell |
|---|---|---|---|---|
| {{:Name}} | + {{:~string('', Equipment==1 ? '#4f7529' : '#8f1414')}} + {{:~string(' | ', Lights==1 ? '#4f7529' : '#8f1414')}} + {{:~string(' | ', Environment==1 ? '#4f7529' : '#8f1414')}} + {{:~string(' | {1} | ', CellStatus==1 ? '#4f7529' : '#8f1414', CellStatus==-1 ? 'No Cell' : CellPct + '%')}} +