mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-21 11:07:12 +01:00
Merge remote-tracking branch 'upstream/master' into sleeper-changes
This commit is contained in:
@@ -8,8 +8,9 @@ var/global/nologevent = 0
|
||||
msg = "<span class=\"admin\"><span class=\"prefix\">ADMIN LOG:</span> <span class=\"message\">[msg]</span></span>"
|
||||
log_adminwarn(msg)
|
||||
for(var/client/C in admins)
|
||||
if(R_SERVER & C.holder.rights)
|
||||
to_chat(C, msg)
|
||||
if(R_ADMIN & C.holder.rights)
|
||||
if(!(C.prefs.toggles & CHAT_NO_ADMINLOGS))
|
||||
to_chat(C, msg)
|
||||
|
||||
/proc/msg_admin_attack(var/text) //Toggleable Attack Messages
|
||||
log_attack(text)
|
||||
|
||||
@@ -56,6 +56,7 @@ var/list/admin_verbs_admin = list(
|
||||
/datum/admins/proc/show_player_notes,
|
||||
/client/proc/free_slot, /*frees slot for chosen job*/
|
||||
/client/proc/toggleattacklogs,
|
||||
/client/proc/toggleadminlogs,
|
||||
/client/proc/toggledebuglogs,
|
||||
/client/proc/update_mob_sprite,
|
||||
/client/proc/toggledrones,
|
||||
@@ -883,6 +884,20 @@ var/list/admin_verbs_snpc = list(
|
||||
else
|
||||
to_chat(usr, "You now won't get attack log messages")
|
||||
|
||||
/client/proc/toggleadminlogs()
|
||||
set name = "Toggle Admin Log Messages"
|
||||
set category = "Preferences"
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
prefs.toggles ^= CHAT_NO_ADMINLOGS
|
||||
prefs.save_preferences(src)
|
||||
if(prefs.toggles & CHAT_NO_ADMINLOGS)
|
||||
to_chat(usr, "You now won't get admin log messages.")
|
||||
else
|
||||
to_chat(usr, "You now will get admin log messages.")
|
||||
|
||||
/client/proc/toggledrones()
|
||||
set name = "Toggle Maintenance Drones"
|
||||
set category = "Server"
|
||||
|
||||
@@ -83,6 +83,9 @@
|
||||
<A href='?src=\ref[src];secretsfun=securitylevel3'>Security Level - Gamma</A>
|
||||
<A href='?src=\ref[src];secretsfun=securitylevel4'>Security Level - Epsilon</A>
|
||||
<A href='?src=\ref[src];secretsfun=securitylevel5'>Security Level - Delta</A><BR>
|
||||
<b>Create Weather</b><BR>
|
||||
<A href='?src=\ref[src];secretsfun=weatherashstorm'>Weather - Ash Storm</A>
|
||||
<A href='?src=\ref[src];secretsfun=weatherdarkness'>Weather - Advanced Darkness</A>
|
||||
<BR>
|
||||
</center>"}
|
||||
|
||||
@@ -104,6 +107,7 @@
|
||||
<A href='?src=\ref[src];secretsfun=onlyoneteam'>Dodgeball (TDM)!</A><BR>
|
||||
<b>Round-enders</b><br>
|
||||
<A href='?src=\ref[src];secretsfun=floorlava'>The floor is lava! (DANGEROUS: extremely lame)</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=fakelava'>The floor is fake-lava! (non-harmful)</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=monkey'>Turn all humans into monkeys</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=fakeguns'>Make all items look like guns</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=prisonwarp'>Warp all Players to Prison</A><BR>
|
||||
|
||||
+29
-52
@@ -2548,60 +2548,37 @@
|
||||
L.fix()
|
||||
message_admins("[key_name_admin(usr)] fixed all lights", 1)
|
||||
if("floorlava")
|
||||
if(floorIsLava)
|
||||
to_chat(usr, "The floor is lava already.")
|
||||
feedback_inc("admin_secrets_fun_used", 1)
|
||||
feedback_add_details("admin_secrets_fun_used", "LF")
|
||||
var/sure = alert(usr, "Are you sure you want to do this?", "Confirmation", "Yes", "No")
|
||||
if(sure == "No")
|
||||
return
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","LF")
|
||||
|
||||
//Options
|
||||
var/length = input(usr, "How long will the lava last? (in seconds)", "Length", 180) as num
|
||||
length = min(abs(length), 1200)
|
||||
|
||||
var/damage = input(usr, "How deadly will the lava be?", "Damage", 2) as num
|
||||
damage = min(abs(damage), 100)
|
||||
|
||||
var/sure = alert(usr, "Are you sure you want to do this?", "Confirmation", "YES!", "Nah")
|
||||
if(sure == "Nah")
|
||||
weather_master.run_weather("the floor is lava")
|
||||
message_admins("[key_name_admin(usr)] made the floor lava")
|
||||
if("fakelava")
|
||||
feedback_inc("admin_secrets_fun_used", 1)
|
||||
feedback_add_details("admin_secrets_fun_used", "LZ")
|
||||
var/sure = alert(usr, "Are you sure you want to do this?", "Confirmation", "Yes", "No")
|
||||
if(sure == "No")
|
||||
return
|
||||
floorIsLava = 1
|
||||
|
||||
message_admins("[key_name_admin(usr)] made the floor LAVA! It'll last [length] seconds and it will deal [damage] damage to everyone.", 1)
|
||||
|
||||
for(var/turf/simulated/floor/F in world)
|
||||
if((F.z in config.station_levels))
|
||||
F.name = "lava"
|
||||
F.desc = "The floor is LAVA!"
|
||||
F.overlays += "lava"
|
||||
F.lava = 1
|
||||
|
||||
spawn(0)
|
||||
for(var/i = i, i < length, i++) // 180 = 3 minutes
|
||||
if(damage)
|
||||
for(var/mob/living/carbon/L in living_mob_list)
|
||||
if(istype(L.loc, /turf/simulated/floor)) // Are they on LAVA?!
|
||||
var/turf/simulated/floor/F = L.loc
|
||||
if(F.lava)
|
||||
var/safe = 0
|
||||
for(var/obj/structure/O in F.contents)
|
||||
if(O.level > F.level && !istype(O, /obj/structure/window)) // Something to stand on and it isn't under the floor!
|
||||
safe = 1
|
||||
break
|
||||
if(!safe)
|
||||
L.adjustFireLoss(damage)
|
||||
|
||||
|
||||
sleep(10)
|
||||
|
||||
for(var/turf/simulated/floor/F in world) // Reset everything.
|
||||
if((F.z in config.station_levels))
|
||||
F.name = initial(F.name)
|
||||
F.desc = initial(F.desc)
|
||||
F.overlays.Cut()
|
||||
F.lava = 0
|
||||
F.update_icon()
|
||||
floorIsLava = 0
|
||||
return
|
||||
weather_master.run_weather("fake lava")
|
||||
message_admins("[key_name_admin(usr)] made aesthetic lava on the floor")
|
||||
if("weatherashstorm")
|
||||
feedback_inc("admin_secrets_fun_used", 1)
|
||||
feedback_add_details("admin_secrets_fun_used", "WA")
|
||||
var/sure = alert(usr, "Are you sure you want to do this?", "Confirmation", "Yes", "No")
|
||||
if(sure == "No")
|
||||
return
|
||||
weather_master.run_weather("ash storm")
|
||||
message_admins("[key_name_admin(usr)] spawned an ash storm on the mining asteroid")
|
||||
if("weatherdarkness")
|
||||
feedback_inc("admin_secrets_fun_used", 1)
|
||||
feedback_add_details("admin_secrets_fun_used", "WD")
|
||||
var/sure = alert(usr, "Are you sure you want to do this?", "Confirmation", "Yes", "No")
|
||||
if(sure == "No")
|
||||
return
|
||||
weather_master.run_weather("advanced darkness")
|
||||
message_admins("[key_name_admin(usr)] made the station go through advanced darkness")
|
||||
if("retardify")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","RET")
|
||||
|
||||
@@ -24,7 +24,8 @@
|
||||
|
||||
admin_forcemove(usr, T)
|
||||
log_admin("[key_name(usr)] jumped to [A]")
|
||||
message_admins("[key_name_admin(usr)] jumped to [A]")
|
||||
if(!isobserver(usr))
|
||||
message_admins("[key_name_admin(usr)] jumped to [A]")
|
||||
feedback_add_details("admin_verb","JA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/jumptoturf(var/turf/T in world)
|
||||
@@ -35,7 +36,8 @@
|
||||
return
|
||||
|
||||
log_admin("[key_name(usr)] jumped to [T.x], [T.y], [T.z] in [T.loc]")
|
||||
message_admins("[key_name_admin(usr)] jumped to [T.x], [T.y], [T.z] in [T.loc]", 1)
|
||||
if(!isobserver(usr))
|
||||
message_admins("[key_name_admin(usr)] jumped to [T.x], [T.y], [T.z] in [T.loc]", 1)
|
||||
admin_forcemove(usr, T)
|
||||
feedback_add_details("admin_verb","JT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
@@ -48,7 +50,8 @@
|
||||
return
|
||||
|
||||
log_admin("[key_name(usr)] jumped to [key_name(M)]")
|
||||
message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]", 1)
|
||||
if(!isobserver(usr))
|
||||
message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]", 1)
|
||||
if(src.mob)
|
||||
var/mob/A = src.mob
|
||||
var/turf/T = get_turf(M)
|
||||
@@ -69,7 +72,8 @@
|
||||
if(T)
|
||||
admin_forcemove(usr, T)
|
||||
feedback_add_details("admin_verb","JC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
message_admins("[key_name_admin(usr)] jumped to coordinates [tx], [ty], [tz]")
|
||||
if(!isobserver(usr))
|
||||
message_admins("[key_name_admin(usr)] jumped to coordinates [tx], [ty], [tz]")
|
||||
|
||||
/client/proc/jumptokey()
|
||||
set category = "Admin"
|
||||
@@ -87,7 +91,8 @@
|
||||
return
|
||||
var/mob/M = selection:mob
|
||||
log_admin("[key_name(usr)] jumped to [key_name(M)]")
|
||||
message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]", 1)
|
||||
if(!isobserver(usr))
|
||||
message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]", 1)
|
||||
|
||||
admin_forcemove(usr, M.loc)
|
||||
|
||||
|
||||
@@ -843,7 +843,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
sec_briefcase.contents += new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow
|
||||
sec_briefcase.contents += new /obj/item/weapon/gun/projectile/revolver/mateba
|
||||
sec_briefcase.contents += new /obj/item/ammo_box/a357
|
||||
sec_briefcase.contents += new /obj/item/weapon/c4
|
||||
sec_briefcase.contents += new /obj/item/weapon/grenade/plastic/c4
|
||||
M.equip_to_slot_or_del(sec_briefcase, slot_l_hand)
|
||||
|
||||
var/obj/item/device/pda/heads/pda = new(M)
|
||||
|
||||
@@ -144,7 +144,7 @@ var/global/sent_strike_team = 0
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/box/flashbangs(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_in_backpack)
|
||||
if(!leader_selected)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/grenade/plastic/x4(src), slot_in_backpack)
|
||||
else
|
||||
equip_to_slot_or_del(new /obj/item/weapon/pinpointer(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/disk/nuclear(src), slot_in_backpack)
|
||||
|
||||
@@ -148,10 +148,10 @@ var/global/sent_syndicate_strike_team = 0
|
||||
|
||||
equip_to_slot_or_del(new /obj/item/ammo_box/magazine/m45(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray/combat/nanites(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/grenade/plastic/x4(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_in_backpack)
|
||||
if(!syndicate_leader_selected)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/grenade/plastic/x4(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/card/emag(src), slot_in_backpack)
|
||||
else
|
||||
equip_to_slot_or_del(new /obj/item/weapon/pinpointer(src), slot_in_backpack)
|
||||
|
||||
@@ -76,7 +76,9 @@
|
||||
var/dat = text("<TT><B>Health Sensor</B> <A href='?src=\ref[src];scanning=1'>[scanning?"On":"Off"]</A>")
|
||||
if(scanning && health_scan)
|
||||
dat += "<BR>Health: [health_scan]"
|
||||
user << browse(dat, "window=hscan")
|
||||
var/datum/browser/popup = new(user, "hscan", name, 400, 400)
|
||||
popup.set_content(dat)
|
||||
popup.open(0)
|
||||
onclose(user, "hscan")
|
||||
return
|
||||
|
||||
|
||||
@@ -139,7 +139,9 @@
|
||||
</TT>
|
||||
<BR><BR><A href='?src=\ref[src];refresh=1'>Refresh</A>
|
||||
<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"}
|
||||
user << browse(dat, "window=infra")
|
||||
var/datum/browser/popup = new(user, "infra", name, 400, 400)
|
||||
popup.set_content(dat)
|
||||
popup.open(0)
|
||||
onclose(user, "infra")
|
||||
|
||||
/obj/item/device/assembly/infra/Topic(href, href_list)
|
||||
|
||||
@@ -114,7 +114,9 @@
|
||||
dat += "<BR><A href='?src=\ref[src];scanning=1'>[scanning?"Armed":"Unarmed"]</A> (Movement sensor active when armed!)"
|
||||
dat += "<BR><BR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
|
||||
dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"
|
||||
user << browse(dat, "window=prox")
|
||||
var/datum/browser/popup = new(user, "prox", name, 400, 400)
|
||||
popup.set_content(dat)
|
||||
popup.open(0)
|
||||
onclose(user, "prox")
|
||||
return
|
||||
|
||||
|
||||
@@ -81,7 +81,9 @@
|
||||
[t1]
|
||||
</TT>
|
||||
"}
|
||||
user << browse(dat, "window=radio")
|
||||
var/datum/browser/popup = new(user, "radio", name, 400, 400)
|
||||
popup.set_content(dat)
|
||||
popup.open(0)
|
||||
onclose(user, "radio")
|
||||
return
|
||||
|
||||
|
||||
@@ -96,7 +96,9 @@
|
||||
<A href='?src=\ref[src];refresh=1'>Refresh</A>
|
||||
<BR><BR>
|
||||
<A href='?src=\ref[src];close=1'>Close</A>"}
|
||||
user << browse(dat, "window=timer")
|
||||
var/datum/browser/popup = new(user, "timer", name, 400, 400)
|
||||
popup.set_content(dat)
|
||||
popup.open(0)
|
||||
onclose(user, "timer")
|
||||
return
|
||||
|
||||
|
||||
@@ -97,18 +97,18 @@
|
||||
display_name = "cowboy hat"
|
||||
path = /obj/item/clothing/head/cowboyhat
|
||||
|
||||
/datum/gear/hat/beret/purple
|
||||
/datum/gear/hat/pr_beret
|
||||
display_name = "beret, purple"
|
||||
path = /obj/item/clothing/head/beret/purple_normal
|
||||
|
||||
/datum/gear/hat/beret/black
|
||||
/datum/gear/hat/bl_beret
|
||||
display_name = "beret, black"
|
||||
path = /obj/item/clothing/head/beret/black
|
||||
|
||||
/datum/gear/hat/beret/blue
|
||||
/datum/gear/hat/blu_beret
|
||||
display_name = "beret, blue"
|
||||
path = /obj/item/clothing/head/beret/blue
|
||||
|
||||
/datum/gear/hat/beret/red
|
||||
/datum/gear/hat/red_beret
|
||||
display_name = "beret, red"
|
||||
path = /obj/item/clothing/head/beret
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
/datum/gear/suit
|
||||
subtype_path = /datum/gear/suit
|
||||
slot = slot_wear_suit
|
||||
cost = 2
|
||||
sort_category = "External Wear"
|
||||
|
||||
//WINTER COATS
|
||||
/datum/gear/suit/coat
|
||||
subtype_path = /datum/gear/suit/coat
|
||||
cost = 2
|
||||
|
||||
/datum/gear/suit/coat/grey
|
||||
display_name = "winter coat"
|
||||
path = /obj/item/clothing/suit/hooded/wintercoat
|
||||
|
||||
/datum/gear/suit/coat/job
|
||||
subtype_path = /datum/gear/suit/coat
|
||||
subtype_path = /datum/gear/suit/coat/job
|
||||
subtype_cost_overlap = FALSE
|
||||
|
||||
/datum/gear/suit/coat/job/sec
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/datum/gear/uniform
|
||||
subtype_path = /datum/gear/uniform
|
||||
slot = slot_w_uniform
|
||||
cost = 2
|
||||
sort_category = "Uniforms and Casual Dress"
|
||||
|
||||
/datum/gear/uniform/skirt
|
||||
@@ -24,7 +25,6 @@
|
||||
path = /obj/item/clothing/under/blackskirt
|
||||
|
||||
/datum/gear/uniform/skirt/job
|
||||
cost = 2
|
||||
subtype_path = /datum/gear/uniform/skirt/job
|
||||
subtype_cost_overlap = FALSE
|
||||
|
||||
@@ -100,7 +100,6 @@
|
||||
|
||||
/datum/gear/uniform/sec
|
||||
subtype_path = /datum/gear/uniform/sec
|
||||
cost = 2
|
||||
|
||||
/datum/gear/uniform/sec/formal
|
||||
display_name = "security uniform, formal"
|
||||
@@ -122,6 +121,9 @@ datum/gear/uniform/secorporate
|
||||
path = /obj/item/clothing/under/rank/security2
|
||||
allowed_roles = list("Head of Security", "Warden", "Security Officer", "Detective", "Security Pod Pilot")
|
||||
|
||||
/datum/gear/uniform/shorts
|
||||
subtype_path = /datum/gear/uniform/shorts
|
||||
|
||||
/datum/gear/uniform/shorts/red
|
||||
display_name = "shorts, red"
|
||||
path = /obj/item/clothing/under/shorts/red
|
||||
@@ -142,6 +144,9 @@ datum/gear/uniform/secorporate
|
||||
display_name = "shorts, grey"
|
||||
path = /obj/item/clothing/under/shorts/grey
|
||||
|
||||
/datum/gear/uniform/pants
|
||||
subtype_path = /datum/gear/uniform/pants
|
||||
|
||||
/datum/gear/uniform/pants/jeans
|
||||
display_name = "jeans, classic"
|
||||
path = /obj/item/clothing/under/pants/classicjeans
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
..()
|
||||
return
|
||||
|
||||
if(flags & NODROP)
|
||||
if(!usr.canUnEquip(src))
|
||||
return
|
||||
|
||||
var/obj/item/clothing/ears/O
|
||||
@@ -634,8 +634,10 @@ BLIND // can't see anything
|
||||
//makes sure that the clothing is equipped so that we can't drag it into our hand from miles away.
|
||||
if(!(src.loc == usr))
|
||||
return
|
||||
|
||||
if(!( usr.restrained() ) && !( usr.stat ) && ( over_object ))
|
||||
if(!usr.canUnEquip(src))
|
||||
to_chat(usr, "[src] appears stuck on you!")
|
||||
return
|
||||
switch(over_object.name)
|
||||
if("r_hand")
|
||||
usr.unEquip(src)
|
||||
|
||||
@@ -298,9 +298,7 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank/emergency_oxygen, /obj/item/toy, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/lighter)
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/suit.dmi'
|
||||
)
|
||||
sprite_sheets = list("Vox" = 'icons/mob/species/vox/suit.dmi')
|
||||
|
||||
/obj/item/clothing/head/winterhood
|
||||
name = "winter hood"
|
||||
@@ -327,7 +325,7 @@
|
||||
/obj/item/clothing/suit/hooded/wintercoat/security
|
||||
name = "security winter coat"
|
||||
icon_state = "wintercoat_sec"
|
||||
armor = list(melee = 15, bullet = 10, laser = 20, energy = 5, bomb = 15, bio = 0, rad = 0) //worse stats than normal armor, but this one protects arms and makes space hurt less, CHOICES!
|
||||
armor = list(melee = 10, bullet = 10, laser = 10, energy = 5, bomb = 15, bio = 0, rad = 0)
|
||||
allowed = list(/obj/item/weapon/gun/energy, /obj/item/weapon/reagent_containers/spray/pepper, /obj/item/weapon/gun/projectile, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/weapon/melee/baton, /obj/item/weapon/restraints/handcuffs, /obj/item/device/flashlight/seclite, /obj/item/weapon/melee/classic_baton/telescopic)
|
||||
hoodtype = /obj/item/clothing/head/winterhood/security
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/item/clothing/under/syndicate
|
||||
name = "tactical turtleneck"
|
||||
desc = "It's some non-descript, slightly suspicious looking, support clothing."
|
||||
desc = "A non-descript and slightly suspicious looking turtleneck with digital camouflage cargo pants."
|
||||
icon_state = "syndicate"
|
||||
item_state = "bl_suit"
|
||||
item_color = "syndicate"
|
||||
@@ -11,8 +11,9 @@
|
||||
name = "combat turtleneck"
|
||||
|
||||
/obj/item/clothing/under/syndicate/tacticool
|
||||
name = "\improper Tacticool turtleneck"
|
||||
name = "tacticool turtleneck"
|
||||
desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-."
|
||||
icon_state = "tactifool"
|
||||
item_state = "bl_suit"
|
||||
item_color = "tactifool"
|
||||
item_color = "tactifool"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
@@ -209,7 +209,9 @@ log transactions
|
||||
dat += "<span class='warning'>Unable to connect to accounts database, please retry and if the issue persists contact Nanotrasen IT support.</span>"
|
||||
reconnect_database()
|
||||
|
||||
user << browse(dat,"window=atm;size=550x650")
|
||||
var/datum/browser/popup = new(user, "atm", name, 550, 650)
|
||||
popup.set_content(dat)
|
||||
popup.open(0)
|
||||
else
|
||||
user << browse(null,"window=atm")
|
||||
|
||||
|
||||
@@ -516,7 +516,7 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/ite
|
||||
/obj/item/clothing/mask/gas/voice, /obj/item/clothing/glasses/thermal,\
|
||||
/obj/item/device/chameleon, /obj/item/weapon/card/emag,\
|
||||
/obj/item/weapon/storage/toolbox/syndicate, /obj/item/weapon/aiModule,\
|
||||
/obj/item/device/radio/headset/syndicate, /obj/item/weapon/c4,\
|
||||
/obj/item/device/radio/headset/syndicate, /obj/item/weapon/grenade/plastic/c4,\
|
||||
/obj/item/device/powersink, /obj/item/weapon/storage/box/syndie_kit,\
|
||||
/obj/item/toy/syndicateballoon, /obj/item/weapon/gun/energy/laser/captain,\
|
||||
/obj/item/weapon/hand_tele, /obj/item/weapon/rcd, /obj/item/weapon/tank/jetpack,\
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
var/ore_pickup_rate = 15
|
||||
var/sheet_per_ore = 1
|
||||
var/point_upgrade = 1
|
||||
var/list/ore_values = list(("sand" = 1), ("iron" = 1), ("plasma" = 15), ("silver" = 16), ("gold" = 18), ("uranium" = 30), ("diamond" = 50), ("bananium" = 60), ("tranquillite" = 60))
|
||||
var/list/ore_values = list(("sand" = 1), ("iron" = 1), ("plasma" = 15), ("silver" = 16), ("gold" = 18), ("uranium" = 30), ("diamond" = 50), ("bluespace crystal" = 50), ("bananium" = 60), ("tranquillite" = 60))
|
||||
var/list/supply_consoles = list("Science", "Robotics", "Research Director's Desk", "Mechanic", "Engineering" = list("metal", "glass", "plasma"), "Chief Engineer's Desk" = list("metal", "glass", "plasma"), "Atmospherics" = list("metal", "glass", "plasma"), "Bar" = list("uranium", "plasma"), "Virology" = list("plasma", "uranium", "gold"))
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/New()
|
||||
@@ -958,14 +958,15 @@
|
||||
/**********************Mining Scanner**********************/
|
||||
|
||||
/obj/item/device/mining_scanner
|
||||
desc = "A scanner that checks surrounding rock for useful minerals, it can also be used to stop gibtonite detonations. Requires you to wear mesons to work properly."
|
||||
name = "mining scanner"
|
||||
desc = "A scanner that checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations. Wear material scanners for optimal results."
|
||||
name = "manual mining scanner"
|
||||
icon_state = "mining1"
|
||||
item_state = "analyzer"
|
||||
w_class = 2
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
var/cooldown = 0
|
||||
origin_tech = "engineering=1;magnets=1"
|
||||
|
||||
/obj/item/device/mining_scanner/attack_self(mob/user)
|
||||
if(!user.client)
|
||||
@@ -989,29 +990,51 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/device/t_scanner/adv_mining_scanner
|
||||
desc = "A scanner that automatically checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations. Requires you to wear mesons to function properly."
|
||||
name = "advanced mining scanner"
|
||||
desc = "A scanner that automatically checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations. Wear meson scanners for optimal results. This one has an extended range."
|
||||
name = "advanced automatic mining scanner"
|
||||
icon_state = "mining0"
|
||||
item_state = "analyzer"
|
||||
w_class = 2
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
var/cooldown = 0
|
||||
var/cooldown = 35
|
||||
var/on_cooldown = 0
|
||||
var/range = 7
|
||||
var/meson = TRUE
|
||||
origin_tech = "engineering=3;magnets=3"
|
||||
|
||||
/obj/item/device/t_scanner/adv_mining_scanner/cyborg
|
||||
flags = CONDUCT | NODROP
|
||||
|
||||
/obj/item/device/t_scanner/adv_mining_scanner/material
|
||||
meson = FALSE
|
||||
desc = "A scanner that automatically checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations. Wear material scanners for optimal results. This one has an extended range."
|
||||
|
||||
/obj/item/device/t_scanner/adv_mining_scanner/lesser
|
||||
name = "automatic mining scanner"
|
||||
desc = "A scanner that automatically checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations. Wear meson scanners for optimal results."
|
||||
range = 4
|
||||
cooldown = 50
|
||||
|
||||
/obj/item/device/t_scanner/adv_mining_scanner/lesser/material
|
||||
desc = "A scanner that automatically checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations. Wear material scanners for optimal results."
|
||||
meson = FALSE
|
||||
|
||||
/obj/item/device/t_scanner/adv_mining_scanner/scan()
|
||||
if(!cooldown)
|
||||
cooldown = 1
|
||||
spawn(35)
|
||||
cooldown = 0
|
||||
if(!on_cooldown)
|
||||
on_cooldown = 1
|
||||
spawn(cooldown)
|
||||
on_cooldown = 0
|
||||
var/turf/t = get_turf(src)
|
||||
var/list/mobs = recursive_mob_check(t, client_check = 1, sight_check = 0, include_radio = 0)
|
||||
if(!mobs.len)
|
||||
return
|
||||
mineral_scan_pulse(mobs, t)
|
||||
if(meson)
|
||||
mineral_scan_pulse(mobs, t, range)
|
||||
else
|
||||
mineral_scan_pulse_material(mobs, t, range)
|
||||
|
||||
//For use with mesons
|
||||
/proc/mineral_scan_pulse(list/mobs, turf/T, range = world.view)
|
||||
var/list/minerals = list()
|
||||
for(var/turf/simulated/mineral/M in range(range, T))
|
||||
@@ -1029,6 +1052,26 @@
|
||||
if(C)
|
||||
C.images -= I
|
||||
|
||||
//For use with material scanners
|
||||
/proc/mineral_scan_pulse_material(list/mobs, turf/T, range = world.view)
|
||||
var/list/minerals = list()
|
||||
for(var/turf/simulated/mineral/M in range(range, T))
|
||||
if(M.scan_state)
|
||||
minerals += M
|
||||
if(minerals.len)
|
||||
for(var/turf/simulated/mineral/M in minerals)
|
||||
var/obj/effect/overlay/temp/mining_overlay/C = new/obj/effect/overlay/temp/mining_overlay(M)
|
||||
C.icon_state = M.scan_state
|
||||
|
||||
/obj/effect/overlay/temp/mining_overlay
|
||||
layer = 18
|
||||
icon = 'icons/turf/mining.dmi'
|
||||
anchored = 1
|
||||
mouse_opacity = 0
|
||||
duration = 30
|
||||
pixel_x = -4
|
||||
pixel_y = -4
|
||||
|
||||
/**********************Xeno Warning Sign**********************/
|
||||
/obj/structure/sign/xeno_warning_mining
|
||||
name = "DANGEROUS ALIEN LIFE"
|
||||
|
||||
@@ -9,6 +9,27 @@
|
||||
|
||||
/**********************Miner Lockers**************************/
|
||||
|
||||
/obj/structure/closet/wardrobe/miner
|
||||
name = "mining wardrobe"
|
||||
icon_state = "mixed"
|
||||
icon_closed = "mixed"
|
||||
|
||||
/obj/structure/closet/wardrobe/miner/New()
|
||||
..()
|
||||
contents = list()
|
||||
new /obj/item/weapon/storage/backpack/duffel(src)
|
||||
new /obj/item/weapon/storage/backpack/industrial(src)
|
||||
new /obj/item/weapon/storage/backpack/satchel_eng(src)
|
||||
new /obj/item/clothing/under/rank/miner(src)
|
||||
new /obj/item/clothing/under/rank/miner(src)
|
||||
new /obj/item/clothing/under/rank/miner(src)
|
||||
new /obj/item/clothing/shoes/workboots(src)
|
||||
new /obj/item/clothing/shoes/workboots(src)
|
||||
new /obj/item/clothing/shoes/workboots(src)
|
||||
new /obj/item/clothing/gloves/fingerless(src)
|
||||
new /obj/item/clothing/gloves/fingerless(src)
|
||||
new /obj/item/clothing/gloves/fingerless(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/miner
|
||||
name = "miner's equipment"
|
||||
icon_state = "miningsec1"
|
||||
@@ -21,20 +42,11 @@
|
||||
|
||||
/obj/structure/closet/secure_closet/miner/New()
|
||||
..()
|
||||
sleep(2)
|
||||
if(prob(50))
|
||||
new /obj/item/weapon/storage/backpack/industrial(src)
|
||||
else
|
||||
new /obj/item/weapon/storage/backpack/satchel_eng(src)
|
||||
new /obj/item/device/radio/headset/headset_cargo(src)
|
||||
new /obj/item/clothing/under/rank/miner(src)
|
||||
new /obj/item/clothing/gloves/fingerless(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/device/mining_scanner(src)
|
||||
new /obj/item/weapon/storage/bag/ore(src)
|
||||
new /obj/item/device/flashlight/lantern(src)
|
||||
new /obj/item/weapon/shovel(src)
|
||||
new /obj/item/weapon/pickaxe(src)
|
||||
new /obj/item/device/radio/headset/headset_cargo/mining(src)
|
||||
new /obj/item/device/t_scanner/adv_mining_scanner/lesser(src)
|
||||
new /obj/item/weapon/storage/bag/ore(src)
|
||||
new /obj/item/clothing/glasses/meson(src)
|
||||
|
||||
/**********************Shuttle Computer**************************/
|
||||
|
||||
@@ -79,7 +79,9 @@
|
||||
dat += text("Bluespace crystals: [amt_bluespace]<br>")
|
||||
|
||||
dat += text("<br><br><A href='?src=\ref[src];removeall=1'>Empty box</A>")
|
||||
user << browse("[dat]", "window=orebox")
|
||||
var/datum/browser/popup = new(user, "orebox", name, 400, 400)
|
||||
popup.set_content(dat)
|
||||
popup.open(0)
|
||||
return
|
||||
|
||||
/obj/structure/ore_box/Topic(href, href_list)
|
||||
|
||||
@@ -490,6 +490,16 @@
|
||||
return
|
||||
if(RESIST_HEAT in mutations)
|
||||
return
|
||||
var/thermal_protection = get_thermal_protection()
|
||||
|
||||
if(thermal_protection >= FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT)
|
||||
return
|
||||
if(thermal_protection >= FIRE_SUIT_MAX_TEMP_PROTECT)
|
||||
bodytemperature += 11
|
||||
else
|
||||
bodytemperature += BODYTEMP_HEATING_MAX
|
||||
|
||||
/mob/living/carbon/human/proc/get_thermal_protection()
|
||||
var/thermal_protection = 0 //Simple check to estimate how protected we are against multiple temperatures
|
||||
if(wear_suit)
|
||||
if(wear_suit.max_heat_protection_temperature >= FIRE_SUIT_MAX_TEMP_PROTECT)
|
||||
@@ -498,34 +508,9 @@
|
||||
if(head.max_heat_protection_temperature >= FIRE_HELM_MAX_TEMP_PROTECT)
|
||||
thermal_protection += (head.max_heat_protection_temperature*THERMAL_PROTECTION_HEAD)
|
||||
thermal_protection = round(thermal_protection)
|
||||
if(thermal_protection >= FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT)
|
||||
return
|
||||
if(thermal_protection >= FIRE_SUIT_MAX_TEMP_PROTECT)
|
||||
bodytemperature += 11
|
||||
return
|
||||
else
|
||||
bodytemperature += BODYTEMP_HEATING_MAX
|
||||
return
|
||||
//END FIRE CODE
|
||||
return thermal_protection
|
||||
|
||||
/*
|
||||
/mob/living/carbon/human/proc/adjust_body_temperature(current, loc_temp, boost)
|
||||
var/temperature = current
|
||||
var/difference = abs(current-loc_temp) //get difference
|
||||
var/increments// = difference/10 //find how many increments apart they are
|
||||
if(difference > 50)
|
||||
increments = difference/5
|
||||
else
|
||||
increments = difference/10
|
||||
var/change = increments*boost // Get the amount to change by (x per increment)
|
||||
var/temp_change
|
||||
if(current < loc_temp)
|
||||
temperature = min(loc_temp, temperature+change)
|
||||
else if(current > loc_temp)
|
||||
temperature = max(loc_temp, temperature-change)
|
||||
temp_change = (temperature - current)
|
||||
return temp_change
|
||||
*/
|
||||
//END FIRE CODE
|
||||
|
||||
/mob/living/carbon/human/proc/stabilize_temperature_from_calories()
|
||||
if(bodytemperature <= species.cold_level_1) //260.15 is 310.15 - 50, the temperature where you start to feel effects.
|
||||
|
||||
@@ -54,6 +54,8 @@
|
||||
|
||||
var/list/butcher_results = null
|
||||
|
||||
var/list/weather_immunities = list()
|
||||
|
||||
var/list/surgeries = list() //a list of surgery datums. generally empty, they're added when the player wants them.
|
||||
|
||||
var/gene_stability = DEFAULT_GENE_STABILITY
|
||||
|
||||
@@ -315,7 +315,7 @@ var/list/robot_verbs_default = list(
|
||||
if(camera && "Robots" in camera.network)
|
||||
camera.network.Add("Medical")
|
||||
module_sprites["Basic"] = "Medbot"
|
||||
module_sprites["Standard"] = "surgeon"
|
||||
module_sprites["Surgeon"] = "surgeon"
|
||||
module_sprites["Advanced Droid"] = "droid-medical"
|
||||
module_sprites["Needles"] = "medicalrobot"
|
||||
module_sprites["Standard"] = "robotMedi"
|
||||
@@ -1486,4 +1486,4 @@ var/list/robot_verbs_default = list(
|
||||
if(1)
|
||||
disable_component("comms", 160)
|
||||
if(2)
|
||||
disable_component("comms", 60)
|
||||
disable_component("comms", 60)
|
||||
|
||||
@@ -164,7 +164,7 @@
|
||||
if(!item_to_add)
|
||||
usr.visible_message("[usr] pets [src].","<span class='notice'>You rest your hand on [src]'s back for a moment.</span>")
|
||||
return
|
||||
if(istype(item_to_add,/obj/item/weapon/c4)) // last thing he ever wears, I guess
|
||||
if(istype(item_to_add,/obj/item/weapon/grenade/plastic/c4)) // last thing he ever wears, I guess
|
||||
item_to_add.afterattack(src,usr,1)
|
||||
return
|
||||
|
||||
@@ -208,7 +208,7 @@
|
||||
//Many hats added, Some will probably be removed, just want to see which ones are popular.
|
||||
/mob/living/simple_animal/pet/corgi/proc/place_on_head(obj/item/item_to_add, var/mob/user as mob)
|
||||
|
||||
if(istype(item_to_add,/obj/item/weapon/c4)) // last thing he ever wears, I guess
|
||||
if(istype(item_to_add,/obj/item/weapon/grenade/plastic/c4)) // last thing he ever wears, I guess
|
||||
item_to_add.afterattack(src,user,1)
|
||||
return
|
||||
|
||||
|
||||
@@ -60,7 +60,9 @@
|
||||
for(var/obj/item/P in src)
|
||||
dat += "<tr><td><a href='?src=\ref[src];retrieve=\ref[P]'>[P.name]</a></td></tr>"
|
||||
dat += "</table></center>"
|
||||
user << browse("<html><head><title>[name]</title></head><body>[dat]</body></html>", "window=filingcabinet;size=350x300")
|
||||
var/datum/browser/popup = new(user, "filingcabinet", name, 350, 300)
|
||||
popup.set_content(dat)
|
||||
popup.open(0)
|
||||
|
||||
return
|
||||
|
||||
@@ -83,7 +85,7 @@
|
||||
|
||||
/obj/structure/filingcabinet/Topic(href, href_list)
|
||||
if(href_list["retrieve"])
|
||||
usr << browse("", "window=filingcabinet") // Close the menu
|
||||
usr << browse(null, "window=filingcabinet") // Close the menu
|
||||
|
||||
//var/retrieveindex = text2num(href_list["retrieve"])
|
||||
var/obj/item/P = locate(href_list["retrieve"])//contents[retrieveindex]
|
||||
|
||||
@@ -224,7 +224,7 @@
|
||||
explosive.forceMove(user.loc)
|
||||
explosive = null
|
||||
qdel(src)
|
||||
if(istype(I, /obj/item/weapon/grenade) || istype(I, /obj/item/weapon/c4))
|
||||
if(istype(I, /obj/item/weapon/grenade) || istype(I, /obj/item/weapon/grenade/plastic/c4))
|
||||
if(explosive)
|
||||
to_chat(user, "<span class='warning'>There is already a device attached behind \the [src], remove it first.</span>")
|
||||
return 1
|
||||
@@ -268,11 +268,6 @@
|
||||
var/obj/item/weapon/grenade/G = explosive
|
||||
explosive = null
|
||||
G.prime()
|
||||
else if(istype(explosive, /obj/item/weapon/c4))
|
||||
var/obj/item/weapon/c4/C = explosive
|
||||
explosive = null
|
||||
C.target = get_step(get_turf(src), dir)
|
||||
C.explode(get_turf(loc))
|
||||
|
||||
/obj/structure/sign/picture_frame/proc/toggle_tilt(mob/user)
|
||||
if(!isliving(usr) || usr.stat)
|
||||
@@ -312,4 +307,4 @@
|
||||
/obj/structure/sign/picture_frame/hear_message(mob/living/M as mob, msg)
|
||||
..()
|
||||
for(var/obj/O in contents)
|
||||
O.hear_message(M, msg)
|
||||
O.hear_message(M, msg)
|
||||
|
||||
@@ -40,7 +40,9 @@
|
||||
dat += "Current toner level: [toner]"
|
||||
if(!toner)
|
||||
dat +="<BR>Please insert a new toner cartridge!"
|
||||
user << browse(dat, "window=copier")
|
||||
var/datum/browser/popup = new(user, "copier", name, 400, 400)
|
||||
popup.set_content(dat)
|
||||
popup.open(0)
|
||||
onclose(user, "copier")
|
||||
return
|
||||
|
||||
|
||||
@@ -86,20 +86,49 @@
|
||||
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator
|
||||
name = "proto-kinetic accelerator"
|
||||
desc = "According to Nanotrasen accounting, this is mining equipment. It's been modified for extreme power output to crush rocks, but often serves as a miner's first defense against hostile alien life; it's not very powerful unless used in a low pressure environment."
|
||||
desc = "In the year 2544, only a year after the discovery of a potentially \
|
||||
world-changing substance, now colloquially referred to as plasma, the \
|
||||
Nanotrasen-UEG mining conglomerate introduced a prototype of a gun-like \
|
||||
device intended for quick, effective mining of plasma in the low \
|
||||
pressures of the solar system. Included in this presentation were \
|
||||
demonstrations of the gun being fired at collections of rocks contained \
|
||||
in vacuumed environments, obliterating them instantly while maintaining \
|
||||
the structure of the ores buried within them. Additionally, volunteers \
|
||||
were called from the crowd to have the gun used on them, only proving that \
|
||||
the gun caused little harm to objects in standard pressure. \n\
|
||||
An official from an unnamed, now long dissipated company observed this \
|
||||
presentation and offered to share their self-recharger cells, powered \
|
||||
by the user's bioelectrical field, another new and unknown technology. \
|
||||
They warned that the cells were incredibly experimental and several times \
|
||||
had injured workers, but the scientists as Nanotrasen were unable to resist \
|
||||
the money-saving potential of self recharging cells. Upon accepting this \
|
||||
offer, it took only a matter of days to prove the volatility of these cells, \
|
||||
as they exploded left and right whenever inserted into the prototype devices, \
|
||||
only throwing more money in the bin. \n\
|
||||
Whenever the Nanotrasen scientists were on the edge of giving up, a \
|
||||
breakthrough was made by head researcher Miles Parks McCollum, who \
|
||||
demonstrated that the cells could be stabilized when exposed to radium \
|
||||
then cooled with cryostylane. After this discovery, the low pressure gun, \
|
||||
now named the Kinetic Accelerator, was hastily completed and made compatible \
|
||||
with the self-recharging cells. As a result of poor testing, the currently \
|
||||
used guns lose their charge when not in use, and when two Kinetic Accelerators \
|
||||
come in proximity of one another, they will interfere with each other. Despite \
|
||||
this, the shoddy guns still see use in the mining of plasma to this day."
|
||||
icon_state = "kineticgun"
|
||||
item_state = "kineticgun"
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/kinetic)
|
||||
cell_type = /obj/item/weapon/stock_parts/cell/emproof
|
||||
// Apparently these are safe to carry? I'm sure goliaths would disagree.
|
||||
needs_permit = 0
|
||||
var/overheat_time = 16
|
||||
unique_rename = 1
|
||||
origin_tech = "combat=3;powerstorage=3;engineering=3"
|
||||
weapon_weight = WEAPON_LIGHT
|
||||
origin_tech = "combat=2;powerstorage=1"
|
||||
can_flashlight = 1
|
||||
flight_x_offset = 15
|
||||
flight_y_offset = 9
|
||||
var/overheat_time = 16
|
||||
var/holds_charge = FALSE
|
||||
var/unique_frequency = FALSE // modified by KA modkits
|
||||
|
||||
var/overheat = FALSE
|
||||
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator/super
|
||||
|
||||
@@ -265,7 +265,9 @@
|
||||
dat += "<BR><A href='?src=\ref[src];eject=1'>Eject beaker</A>[((R.total_volume&&R.reagent_list.len) ? "-- <A href='?src=\ref[src];empty_beaker=1'>Empty beaker</A>":"")]<BR>"
|
||||
dat += "<A href='?src=\ref[user];mach_close=pandemic'>Close</A>"
|
||||
|
||||
user << browse("<TITLE>[src.name]</TITLE><BR>[dat]", "window=pandemic;size=575x400")
|
||||
var/datum/browser/popup = new(user, "pandemic", name, 575, 400)
|
||||
popup.set_content(dat)
|
||||
popup.open(0)
|
||||
onclose(user, "pandemic")
|
||||
return
|
||||
|
||||
|
||||
@@ -319,9 +319,8 @@
|
||||
if("parts")
|
||||
left_part += output_parts_list(part_set)
|
||||
left_part += "<hr><a href='?src=\ref[src];screen=main'>Return</a>"
|
||||
dat = {"<html>
|
||||
<head>
|
||||
<title>[name]</title>
|
||||
dat = {"
|
||||
<title>[name]</title>
|
||||
<style>
|
||||
.res_name {font-weight: bold; text-transform: capitalize;}
|
||||
.red {color: #f00;}
|
||||
@@ -335,21 +334,19 @@
|
||||
<script language='javascript' type='text/javascript'>
|
||||
[js_byjax]
|
||||
</script>
|
||||
</head><body>
|
||||
<body>
|
||||
<table style='width: 100%;'>
|
||||
<tr>
|
||||
<td style='width: 65%; padding-right: 10px;'>
|
||||
[left_part]
|
||||
</td>
|
||||
<td style='width: 35%; background: #ccc;' id='queue'>
|
||||
<td style='width: 35%; background: #000;' id='queue'>
|
||||
[list_queue()]
|
||||
</td>
|
||||
<tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>"}
|
||||
user << browse(dat, "window=mecha_fabricator;size=1000x430")
|
||||
</table>"}
|
||||
var/datum/browser/popup = new(user, "mecha_fabricator", name, 1000, 430)
|
||||
popup.set_content(dat)
|
||||
popup.open(0)
|
||||
onclose(user, "mecha_fabricator")
|
||||
return
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
|
||||
/obj/item/organ/internal/eyes/luminescent_crystal/New()
|
||||
set_light(2)
|
||||
..()
|
||||
|
||||
/obj/item/organ/internal/brain/crystal
|
||||
name = "crystalized brain"
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
origin_tech = "bluespace=4;materials=3"
|
||||
points = 50
|
||||
var/blink_range = 8 // The teleport range when crushed/thrown at someone.
|
||||
refined_type = /obj/item/stack/sheet/bluespace_crystal
|
||||
|
||||
/obj/item/weapon/ore/bluespace_crystal/New()
|
||||
..()
|
||||
@@ -38,4 +39,22 @@
|
||||
name = "artificial bluespace crystal"
|
||||
desc = "An artificially made bluespace crystal, it looks delicate."
|
||||
origin_tech = "bluespace=2"
|
||||
blink_range = 4 // Not as good as the organic stuff!
|
||||
blink_range = 4 // Not as good as the organic stuff!
|
||||
|
||||
// Polycrystals, aka stacks
|
||||
|
||||
var/global/list/datum/stack_recipe/bluespace_crystal_recipes = list(new/datum/stack_recipe("Breadkdown into bluespace crystal", /obj/item/weapon/ore/bluespace_crystal, 1, one_per_turf = 0, on_floor = 1))
|
||||
|
||||
/obj/item/stack/sheet/bluespace_crystal
|
||||
name = "bluespace polycrystal"
|
||||
icon = 'icons/obj/telescience.dmi'
|
||||
icon_state = "polycrystal"
|
||||
desc = "A stable polycrystal, made of fused-together bluespace crystals. You could probably break one off."
|
||||
origin_tech = "bluespace=4;materials=3"
|
||||
attack_verb = list("bluespace polybashed", "bluespace polybattered", "bluespace polybludgeoned", "bluespace polythrashed", "bluespace polysmashed")
|
||||
|
||||
/obj/item/stack/sheet/bluespace_crystal/New()
|
||||
..()
|
||||
recipes = bluespace_crystal_recipes
|
||||
pixel_x = rand(0,4)-4
|
||||
pixel_y = rand(0,4)-4
|
||||
Reference in New Issue
Block a user