Better UIs (#9355)

Improved the UIs of: Memories/Notes, cult tomes, autolathes, biogenerators, chem heaters, wizard spellbooks, cryopods, soulstones, space heaters.
This commit is contained in:
Geeves
2020-07-18 00:10:28 +03:00
committed by GitHub
parent 5ffb4c4486
commit 2b81cdd077
21 changed files with 262 additions and 120 deletions
+4 -2
View File
@@ -23,8 +23,10 @@
for(var/rune in subtypesof(/datum/rune))
var/datum/rune/R = new rune
runes_by_name[R.name] = rune
tome_data += "<b>[R.name]</b>: <i>[R.desc]</i>"
tome_data += "This rune [R.can_be_talisman() ? "<b><i>can</i></b>" : "<b><i>cannot</i></b>"] be turned into a talisman.<br>"
tome_data += "<div class='rune-block'>"
tome_data += "<b>[capitalize_first_letters(R.name)]</b>: <i>[R.desc]</i><br>"
tome_data += "This rune <b><i>[R.can_be_talisman() ? "can" : "cannot"]</i></b> be turned into a talisman.<br><hr>"
tome_data += "</div>"
/datum/controller/subsystem/cult/proc/add_rune(var/datum/rune/R)
if(check_rune_limit())
+3 -1
View File
@@ -137,7 +137,9 @@
output += "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
obj_count++
recipient << browse(output,"window=memory")
var/datum/browser/memory_win = new(recipient, "memory")
memory_win.set_content(output)
memory_win.open()
/datum/mind/proc/edit_memory()
if(!ROUND_IS_STARTED)
+14 -11
View File
@@ -56,18 +56,21 @@
to_chat(scribe, SPAN_WARNING("You are unable to write a rune here."))
return
// This counts how many runes exist in the game, for some sort of arbitrary rune limit. I trust the old devs had their reasons. - Geeves
if(SScult.check_rune_limit())
to_chat(scribe, SPAN_WARNING("The cloth of reality can't take that much of a strain. Remove some runes first!"))
return
else
switch(alert("What shall you do with the tome?", "Tome of Nar'sie", "Read it", "Scribe a rune", "Cancel"))
if("Cancel")
switch(alert("What shall you do with the tome?", "Tome of Nar'sie", "Read it", "Scribe a rune", "Cancel"))
if("Cancel")
return
if("Read it")
if(use_check_and_message(user))
return
if("Read it")
if(use_check_and_message(user))
return
user << browse("[SScult.tome_data]", "window=Arcane Tome")
var/datum/browser/tome_win = new(user, "Arcane Tome", "Nar'Sie's Runes")
tome_win.set_content(SScult.tome_data)
tome_win.add_stylesheet("cult", 'html/browser/cult.css')
tome_win.open()
return
if("Scribe a rune")
// This counts how many runes exist in the game, for some sort of arbitrary rune limit. I trust the old devs had their reasons. - Geeves
if(SScult.check_rune_limit())
to_chat(scribe, SPAN_WARNING("The cloth of reality can't take that much of a strain. Remove some runes first!"))
return
//only check if they want to scribe a rune, so they can still read if standing on a rune
+12 -11
View File
@@ -51,8 +51,7 @@
print_loc = src
/obj/machinery/autolathe/Destroy()
qdel(wires)
wires = null
QDEL_NULL(wires)
return ..()
/obj/machinery/autolathe/proc/update_recipe_list()
@@ -69,7 +68,7 @@
if(shocked)
shock(user, 50)
var/dat = "<center><h1>Autolathe Control Panel</h1><hr/>"
var/dat = "<center>"
if(!disabled)
dat += "<table width = '100%'>"
@@ -77,14 +76,15 @@
var/material_bottom = "<tr>"
for(var/material in stored_material)
material_top += "<td width = '25%' align = center><b>[material]</b></td>"
material_top += "<td width = '25%' align = center><b>[capitalize_first_letters(material)]</b></td>"
material_bottom += "<td width = '25%' align = center>[stored_material[material]]<b>/[storage_capacity[material]]</b></td>"
dat += "[material_top]</tr>[material_bottom]</tr></table><hr>"
dat += "<h2>Printable Designs</h2><h3>Showing: <a href='?src=\ref[src];change_category=1'>[show_category]</a>.</h3></center><table width = '100%'>"
dat += "<h2>Printable Designs</h2><h3>Showing: <a href='?src=\ref[src];change_category=1'>[show_category]</a></h3></center><table width = '100%'>"
var/index = 0
for(var/datum/autolathe/recipe/R in machine_recipes)
for(var/recipe in machine_recipes)
var/datum/autolathe/recipe/R = recipe
index++
if(R.hidden && !hacked || (show_category != "All" && show_category != R.category))
continue
@@ -108,7 +108,7 @@
else
material_string += ", "
material_string += "[round(R.resources[material] * mat_efficiency)] [material]"
material_string += ".<br></td>"
material_string += "<br></td>"
//Build list of multipliers for sheets.
if(R.is_stack)
if(max_sheets)
@@ -119,12 +119,13 @@
multiplier_string += "<a href='?src=\ref[src];make=[index];multiplier=[i]'>\[x[i]\]</a>"
multiplier_string += "<a href='?src=\ref[src];make=[index];multiplier=[max_sheets]'>\[x[max_sheets]\]</a>"
dat += "<tr><td width = 180>[R.hidden ? "<font color = 'red'>*</font>" : ""]<b>[can_make ? "<a href='?src=\ref[src];make=[index];multiplier=1'>" : ""][R.name][can_make ? "</a>" : ""]</b>[R.hidden ? "<font color = 'red'>*</font>" : ""][multiplier_string]</td><td align = right>[material_string]</tr>"
dat += "<tr class='build'><td width = 40%>[R.hidden ? "<font color = 'red'>*</font>" : ""]<b>[can_make ? "<a href='?src=\ref[src];make=[index];multiplier=1'>" : "<div class='no-build'>"][R.name][can_make ? "</a>" : "</div>"]</b>[R.hidden ? "<font color = 'red'>*</font>" : ""][multiplier_string]</td><td align = right>[material_string]</tr>"
dat += "</table><hr>"
user << browse(dat, "window=autolathe")
onclose(user, "autolathe")
var/datum/browser/autolathe_win = new(user, "autolathe", "<center>Autolathe Control Panel</center>")
autolathe_win.set_content(dat)
autolathe_win.add_stylesheet("misc", 'html/browser/misc.css')
autolathe_win.open()
/obj/machinery/autolathe/attackby(obj/item/O, mob/user)
if(busy)
+17 -15
View File
@@ -422,10 +422,10 @@
switch(menustat)
if("menu")
if (beaker)
dat += "<table><tr><td colspan=7><H2>Commands</H2></td></tr>"
dat += "<tr><td><A href='?src=\ref[src];action=activate'>Activate Biogenerator</A></td></tr>"
dat += "<tr><td><A href='?src=\ref[src];action=detach'>Detach Container</A><BR></td></tr>"
dat += "<tr><td>Name</td><td>Cost</td><td colspan=5>Production Amount</td></tr>"
dat += "<table style='width:100%'><tr><td colspan='6'><H2>Commands</H2></td></tr>"
dat += "<tr><td colspan='2'><A href='?src=\ref[src];action=activate'>Activate Biogenerator</A></td></tr>"
dat += "<tr><td colspan='2'><A href='?src=\ref[src];action=detach'>Detach Container</A><BR></td></tr>"
dat += "<tr><td colspan='2'>Name</td><td colspan='2'>Cost</td><td colspan='4'>Production Amount</td></tr>"
var/lastclass = "Commands"
for (var/k in biorecipies)
@@ -439,19 +439,19 @@
if(emag == 0 || emagged == 1)
if(lastclass != class)
dat += "<tr><td colspan=7><H2>[class]</H2><td></tr>"
dat += "<tr><td colspan='6'><H2>[class]</H2></td></tr>"
lastclass = class
dat += "<tr><td>[name]<td>[round(cost/build_eff)]</td>"
dat += "<tr class='build'><td colspan='2'>[name]</td><td colspan='2'>[round(cost/build_eff)]</td>"
dat += "<td colspan='4'>"
for(var/num in listamount)
dat += "<td>"
var/fakenum = ""
if(num <= 9)
fakenum = "0"
if(num*round(cost/build_eff) > points)
dat += "([fakenum][num])"
dat += "<div class='no-build inline'>([fakenum][num])</div>"
else
dat += "<A href='?src=\ref[src];action=create;itemid=[id];count=[num]'>([fakenum][num])</A>"
dat += "</td>"
dat += "</td>"
dat += "</tr>"
dat += "</table>"
@@ -459,19 +459,20 @@
else
dat += "<BR><FONT COLOR=red>No beaker inside. Please insert a beaker.</FONT><BR>"
if("nopoints")
dat += "You do not have biomass to create products.<BR>Please, put growns into reactor and activate it.<BR>"
dat += "You do not have biomass to create products.<BR>Please put growns into the reactor and activate it.<BR>"
dat += "<A href='?src=\ref[src];action=menu'>Return to menu</A>"
if("complete")
dat += "Operation complete.<BR>"
dat += "<A href='?src=\ref[src];action=menu'>Return to menu</A>"
if("void")
dat += "<FONT COLOR=red>Error: No growns inside.</FONT><BR>Please, put growns into reactor.<BR>"
dat += "<FONT COLOR=red>Error: No growns inside.</FONT><BR>Please put growns into the reactor.<BR>"
dat += "<A href='?src=\ref[src];action=menu'>Return to menu</A>"
dat += "</body><html>"
dat += "</body></html>"
user << browse(dat, "window=biogenerator")
onclose(user, "biogenerator")
return
var/datum/browser/biogen_win = new(user, "biogenerator", "Biogenerator", 450, 500)
biogen_win.set_content(dat)
biogen_win.add_stylesheet("misc", 'html/browser/misc.css')
biogen_win.open()
/obj/machinery/biogenerator/attack_hand(mob/user as mob)
interact(user)
@@ -556,6 +557,7 @@
if("detach")
if(beaker)
beaker.forceMove(src.loc)
usr.put_in_hands(beaker)
beaker = null
update_icon()
if("create")
+18 -18
View File
@@ -52,33 +52,33 @@
if(stat & BROKEN)
return
user.set_machine(src)
var/dat ="<html>"
dat += "<head><TITLE>Chem Heater MKI</TITLE><style>body{font-family:Garamond}</style></head>"
dat += "<body><H1>Chem Heater MKI</H1>"
var/dat = "<html>"
dat += "<p>Power: <a href='?src=\ref[src];action=togglepower'>[use_power ? "On" : "Off"]</a></p>"
dat += "<p>Target Temp: [round(target_temperature)]K / [round(target_temperature - T0C,0.1)]C<br> "
dat += "Power: <a href='?src=\ref[src];action=togglepower'>[use_power ? "On" : "Off"]</a>"
dat += "("
dat += "<a href='?src=\ref[src];action=adjusttemp;power=-100'>----</a>|"
dat += "<a href='?src=\ref[src];action=adjusttemp;power=-25'>---</a>|"
dat += "<a href='?src=\ref[src];action=adjusttemp;power=-5'>--</a>|"
dat += "<a href='?src=\ref[src];action=adjusttemp;power=-1'>-</a>|"
dat += "<a href='?src=\ref[src];action=adjusttemp;power=1'>+</a>|"
dat += "<a href='?src=\ref[src];action=adjusttemp;power=5'>++</a>|"
dat += "<a href='?src=\ref[src];action=adjusttemp;power=25'>+++</a>|"
dat += "<p>Target Temp: [round(target_temperature)]K / [round(target_temperature - T0C,0.1)]C<br>"
dat += "| "
dat += "<a href='?src=\ref[src];action=adjusttemp;power=-100'>----</a>"
dat += "<a href='?src=\ref[src];action=adjusttemp;power=-25'>---</a>"
dat += "<a href='?src=\ref[src];action=adjusttemp;power=-5'>--</a>"
dat += "<a href='?src=\ref[src];action=adjusttemp;power=-1'>-</a>"
dat += "<a href='?src=\ref[src];action=adjusttemp;power=1'>+</a>"
dat += "<a href='?src=\ref[src];action=adjusttemp;power=5'>++</a>"
dat += "<a href='?src=\ref[src];action=adjusttemp;power=25'>+++</a>"
dat += "<a href='?src=\ref[src];action=adjusttemp;power=100'>++++</a>"
dat += ")</p>"
dat += "| </p>"
if(container)
dat += "<p>Beaker Temp: [round(container.get_temperature(),0.01)]K / [round(container.get_temperature() - T0C,0.1)]C (<a href='?src=\ref[src];action=removebeaker'>Remove</a>)</p>"
dat += "<p>Beaker Temp: [round(container.get_temperature(),0.01)]K / [round(container.get_temperature() - T0C,0.1)]C <a href='?src=\ref[src];action=removebeaker'>Remove</a></p>"
else
dat += "<p>No container loaded!</p>"
dat += "</body><html>"
dat += "</html>"
user << browse(dat, "window=chem_heater")
onclose(user, "chem_heater")
var/datum/browser/chem_win = new(user, "chem_heater", "Chem Heater MKI")
chem_win.set_content(dat)
chem_win.open()
/obj/machinery/chem_heater/Topic(href, href_list)
if(stat & BROKEN) return
+26 -19
View File
@@ -59,16 +59,17 @@ var/global/list/frozen_crew = list()
if(!(ROUND_IS_STARTED))
return
dat += "<hr/><br/><b>[storage_name]</b><br/>"
dat += "<i>Welcome, [user.real_name].</i><br/><br/><hr/>"
dat += "<a href='?src=\ref[src];log=1'>View Storage Log</a>.<br>"
dat += "<hr><b>[storage_name]</b><br>"
dat += "<i>Welcome, [user.real_name].</i><br><hr><br>"
dat += "<a href='?src=\ref[src];log=1'>View Storage Log</a><br>"
if(allow_items)
dat += "<a href='?src=\ref[src];view=1'>View Objects</a>.<br>"
dat += "<a href='?src=\ref[src];item=1'>Recover Object</a>.<br>"
dat += "<a href='?src=\ref[src];allitems=1'>Recover All Objects</a>.<br>"
dat += "<a href='?src=\ref[src];view=1'>View Objects</a><br>"
dat += "<a href='?src=\ref[src];item=1'>Recover Object</a><br>"
dat += "<a href='?src=\ref[src];allitems=1'>Recover All Objects</a><br>"
user << browse(dat, "window=cryopod_console")
onclose(user, "cryopod_console")
var/datum/browser/cryocon_win = new(user, "cryopod_console", "Cryogenic Oversight Console")
cryocon_win.set_content(dat)
cryocon_win.open()
/obj/machinery/computer/cryopod/Topic(href, href_list)
if(..())
@@ -82,12 +83,14 @@ var/global/list/frozen_crew = list()
if(!length(frozen_crew))
to_chat(user, SPAN_WARNING("Nothing has been stored recently."))
return
var/dat = "<center><b>Recently Stored [storage_type]</b></center><br/><hr/>"
var/dat = "<center><b>Recently Stored [storage_type]</b></center><hr>"
for(var/person in frozen_crew)
dat += " - [person]<br/>"
dat += "<hr/>"
dat += " - [person]<br>"
dat += "<hr>"
user << browse(dat, "window=cryolog")
var/datum/browser/cryolog_win = new(user, "cryolog", "Cryogenic Storage Log")
cryolog_win.set_content(dat)
cryolog_win.open()
if(href_list["view"])
if(!allow_items)
@@ -96,19 +99,21 @@ var/global/list/frozen_crew = list()
to_chat(user, SPAN_WARNING("There are no stored objects."))
return
var/dat = "<center><b>Recently Stored Objects</b></center><br/><hr/>"
var/dat = "<center><b>Recently Stored Objects</b></center><br><hr>"
for(var/obj/item/I in frozen_items)
dat += " - [I.name]<br/>"
dat += "<hr/>"
dat += " - [I.name]<br>"
dat += "<hr>"
user << browse(dat, "window=cryoitems")
var/datum/browser/cryoitems_win = new(user, "cryoitems", "Cryogenic Storage Log")
cryoitems_win.set_content(dat)
cryoitems_win.open()
else if(href_list["item"])
if(!allow_items)
return
if(frozen_items.len <= 0)
to_chat(user, SPAN_NOTICE("There is nothing to recover from storage."))
to_chat(user, SPAN_WARNING("There is nothing to recover from storage."))
return
var/obj/item/I = input(user, "Please choose which object to retrieve.", "Object recovery", null) as null|anything in frozen_items
@@ -116,12 +121,14 @@ var/global/list/frozen_crew = list()
return
if(!(I in frozen_items))
to_chat(user, SPAN_NOTICE("\The [I] is no longer in storage."))
to_chat(user, SPAN_WARNING("\The [I] is no longer in storage."))
return
visible_message(SPAN_NOTICE("The console beeps happily as it disgorges \the [I]."), range = 3)
I.forceMove(get_turf(src))
if(Adjacent(user))
user.put_in_hands(I)
frozen_items -= I
log_and_message_admins("has retrieved \an [I] from \the [src]", user, get_turf(src))
@@ -130,7 +137,7 @@ var/global/list/frozen_crew = list()
return
if(frozen_items.len <= 0)
to_chat(user, SPAN_NOTICE("There is nothing to recover from storage."))
to_chat(user, SPAN_WARNING("There is nothing to recover from storage."))
return
visible_message(SPAN_NOTICE("The console beeps happily as it disgorges the desired objects."), range = 3)
+11 -18
View File
@@ -109,35 +109,28 @@
interact(user)
/obj/machinery/space_heater/interact(mob/user)
var/dat
dat = "Power cell: "
var/dat = "Power cell: "
if(cell)
dat += "Detected<BR>"
dat += "Detected<br>"
else
dat += "Not Detected<BR>"
dat += "Not Detected<br>"
dat += "Power: "
if(on)
dat += "<A href='?src=\ref[src];op=off'>On</A><BR>"
dat += "<A href='?src=\ref[src];op=off'>On</A><br>"
else
dat += "<A href='?src=\ref[src];op=on'>Off</A><BR>"
dat += "<A href='?src=\ref[src];op=on'>Off</A><br>"
dat += "Power Level: [cell ? round(cell.percent(),1) : 0]%<BR><BR>"
dat += "Power Level: [cell ? round(cell.percent(),1) : 0]%<br><br>"
dat += "Set Temperature: "
dat += "<A href='?src=\ref[src];op=temp;val=-5'>-</A>"
dat += " [set_temperature]K ([set_temperature-T0C]&deg;C)"
dat += "<A href='?src=\ref[src];op=temp;val=5'>+</A><BR>"
dat += " [set_temperature]K ([set_temperature-T0C]&deg;C) "
dat += "<A href='?src=\ref[src];op=temp;val=5'>+</A><br>"
user.set_machine(src)
user << browse("<HEAD><TITLE>Space Heater Control Panel</TITLE></HEAD><TT>[dat]</TT>", "window=spaceheater")
onclose(user, "spaceheater")
return // needed?
var/datum/browser/heater_win = new(user, "spaceheater", "Space Heater Control Panel")
heater_win.set_content(dat)
heater_win.open()
/obj/machinery/space_heater/Topic(href, href_list)
if (usr.stat)
@@ -37,26 +37,26 @@
///////////////////Options for using captured souls///////////////////////////////////////
/obj/item/device/soulstone/attack_self(mob/user)
if (!in_range(src, user))
if(!in_range(src, user))
return
user.set_machine(src)
var/dat = "<TT><B>Soul Stone</B><BR>"
var/dat = ""
for(var/mob/living/simple_animal/shade/A in src)
dat += "Captured Soul: [A.name]<br>"
dat += {"<A href='byond://?src=\ref[src];choice=Summon'>Summon Shade</A>"}
dat += "<br>"
dat += {"<a href='byond://?src=\ref[src];choice=Close'> Close</a>"}
user << browse(dat, "window=aicard")
onclose(user, "aicard")
return
dat += "Captured Soul: [A.name]<hr>"
dat += "<A href='byond://?src=\ref[src];choice=Summon'>Summon Shade</A><br>"
dat += "<i>This will summon the spirit of [A.name] in a pure energy form. Be cautious, for they will be weak without a protective construct to house them.</i><hr>"
dat += "<a href='byond://?src=\ref[src];choice=Close'>Close</a>"
var/datum/browser/soulstone_win = new(user, "soulstone", capitalize_first_letters(name))
soulstone_win.set_content(dat)
soulstone_win.add_stylesheet("cult", 'html/browser/cult.css')
soulstone_win.open()
/obj/item/device/soulstone/Topic(href, href_list)
var/mob/U = usr
if (!in_range(src, U)||U.machine!=src)
U << browse(null, "window=aicard")
U << browse(null, "window=soulstone")
U.unset_machine()
return
@@ -65,7 +65,7 @@
switch(href_list["choice"])//Now we switch based on choice.
if ("Close")
U << browse(null, "window=aicard")
U << browse(null, "window=soulstone")
U.unset_machine()
return
@@ -78,14 +78,15 @@ var/list/artefact_feedback = list(/obj/structure/closet/wizard/armor = "HS",
var/name = "" //name of target
var/desc = "" //description of target
var/info = "" //additional information
dat += "<div class='spell-block'>"
if(ispath(spellbook.spells[i],/datum/spellbook))
var/datum/spellbook/S = spellbook.spells[i]
name = initial(S.name)
name = html_decode(capitalize_first_letters(initial(S.name)))
desc = initial(S.book_desc)
info = "<font color='#ff33cc'>[initial(S.max_uses)] Spell Slots</font>"
else if(ispath(spellbook.spells[i],/obj))
var/obj/O = spellbook.spells[i]
name = "Artefact: [capitalize(initial(O.name))]" //because 99.99% of objects dont have capitals in them and it makes it look weird.
name = "Artefact: [capitalize_first_letters(initial(O.name))]" //because 99.99% of objects dont have capitals in them and it makes it look weird.
desc = initial(O.desc)
else if(ispath(spellbook.spells[i],/spell))
var/spell/S = spellbook.spells[i]
@@ -110,9 +111,14 @@ var/list/artefact_feedback = list(/obj/structure/closet/wizard/armor = "HS",
if(spellbook.book_flags & CAN_MAKE_CONTRACTS)
dat += " <A href='byond://?src=\ref[src];path=[spellbook.spells[i]];contract=1;'>Make Contract</a>"
dat += "<br><i>[desc]</i><br>"
dat += "</div>"
dat += "<center><A href='byond://?src=\ref[src];reset=1'>Re-memorize your spellbook.</a></center>"
dat += "<center><A href='byond://?src=\ref[src];lock=1'>[spellbook.book_flags & LOCKED ? "Unlock" : "Lock"] the spellbook.</a></center>"
user << browse(dat,"window=spellbook")
var/datum/browser/spellbook_win = new(user, "spellbook", spellbook.title)
spellbook_win.set_content(dat)
spellbook_win.add_stylesheet("spellbook", 'html/browser/spellbook.css')
spellbook_win.open()
/obj/item/spellbook/Topic(href,href_list)
..()
@@ -233,7 +239,7 @@ var/list/artefact_feedback = list(/obj/structure/closet/wizard/armor = "HS",
return "You learn the spell [S]"
/datum/spellbook
var/name = "\improper book of tomes"
var/name = "book of tomes"
var/desc = "The legendary book of spells of the wizard."
var/book_desc = "Holds information on the various tomes available to a wizard"
var/feedback = "" //doesn't need one.
@@ -3,7 +3,7 @@
/datum/spellbook/battlemage
name = "\improper battlemage's bible"
name = "battlemage's bible"
feedback = "BM"
desc = "A treatise on the use of magic in combat situation."
book_desc = "Mix physical with the mystical in head to head combat."
@@ -2,7 +2,7 @@
spellbook_type = /datum/spellbook/cleric
/datum/spellbook/cleric
name = "\improper cleric's tome"
name = "cleric's tome"
feedback = "CR"
desc = "For those who do not harm, or at least feel sorry about it."
book_desc = "All about healing and control. Mobility and offense comes at a higher price but not impossible."
@@ -2,7 +2,7 @@
spellbook_type = /datum/spellbook/druid
/datum/spellbook/druid
name = "\improper druid's leaflet"
name = "druid's leaflet"
feedback = "DL"
desc = "It smells like an air freshener."
book_desc = "Summons, nature, and a bit o' healin."
@@ -3,7 +3,7 @@
/datum/spellbook/necromancer
name = "\improper necromancer's grimoire"
name = "necromancer's grimoire"
feedback = "NG"
desc = "A grimoire full of spells dealing with the death and the afterlife."
book_desc = "A spellbook full of dark magic dealing mostly with the afterlife."
@@ -2,7 +2,7 @@
spellbook_type = /datum/spellbook/spatial
/datum/spellbook/spatial
name = "\improper spatial manual"
name = "spatial manual"
feedback = "SP"
desc = "You feel like this might disappear from out of under you."
book_desc = "Movement and teleportation. Run from your problems!"
@@ -2,7 +2,7 @@
spellbook_type = /datum/spellbook/standard
/datum/spellbook/standard
name = "\improper standard spellbook"
name = "standard spellbook"
feedback = "SB"
title = "Book of Spells and Artefacts"
title_desc = "Buy spells using your available spell slots. Artefacts may also be bought however their cost is permanent."
@@ -9,7 +9,7 @@
..()
/datum/spellbook/student
name = "\improper student's spellbook"
name = "student's spellbook"
feedback = "ST"
desc = "This spell book has a sticker on it that says, 'certified for children 5 and older'."
book_desc = "This spellbook is dedicated to teaching neophytes in the ways of magic."
+42
View File
@@ -0,0 +1,42 @@
.uiTitle,
head,
header {
background-color: #4b1b1b;
color: #e02b2b;
}
body {
background-color: #3a1515;
color: #ec2d2d;
}
hr {
background-color: #581f1f;
}
a,
a:link,
a:visited,
a:active,
.linkOn,
.linkOff {
background: #5a2222;
color: #ff6868;
transition: background 0.2s, color 0.2s;
}
a:hover {
background: #ff6868;
color: #5a2222;
}
.rune-block {
background-color: #3a1515;
color: #ec2d2d;
transition: background-color 0.2s, color 0.2s;
}
.rune-block:hover {
background-color: #240d0d;
color: #ff1616;
}
+39
View File
@@ -0,0 +1,39 @@
h1,
h2,
h3,
h4,
h5,
h6 {
padding: 8px 0 4px 0;
color: #5c87a8;
}
table {
border-collapse: collapse;
}
tr.build {
border-bottom: 1px solid transparent;
transition: background-color 0.2s, color 0.2s, border 0.2s;
}
tr.build:hover {
border-bottom: 1px solid #5c87a8;
background-color: #1d1d1d;
color: #99c2c9;
}
.no-build {
display: inline-block;
color: #141414;
text-decoration: none;
background-color: #7c7c7c;
border: 1px solid #161616;
padding: 1px 4px 1px 4px;
margin: 0 2px 0 0;
cursor: default;
}
.inline {
display: inline;
}
+39
View File
@@ -0,0 +1,39 @@
.uiTitle,
head,
header {
background-color: #371146;
color: #cb6df0;
}
body {
background: #3e144e;
color: #d486f3;
}
a,
a:link,
a:visited,
a:active,
.linkOn,
.linkOff {
background: #591b72;
color: #ce7dee;
transition: background 0.2s, color 0.2s;
}
a:hover {
background: #ce7dee;
color: #591b72;
}
.spell-block {
background-color: #3e144e;
color: #d486f3;
transition: background-color 0.2s, color 0.2s;
}
.spell-block:hover {
background-color: #280c33;
color: #e39bff;
}
+6
View File
@@ -0,0 +1,6 @@
author: Geeves
delete-after: True
changes:
- rscadd: "Improved the UIs of, Memories/Notes, cult tomes, autolathes, biogenerators, chem heaters, wizard spellbooks, cryopods, soulstones, space heaters."