Ports Goonchat from Baystation. (#9635)

changes:

    rscadd: "Ported a new chat system, Goonchat, that allows for cool things like changing font style, size, spacing, highlighting up to 5 strings in the chat, and DARK MODE."
    rscadd: "Repeated chat messages can now get compacted. You can disable this in goonchat settings."
    rscadd: "You can change icon style to any font on your system."
    tweak: "The game window has been altered a bit to adjust for this."
    rscdel: "Removed skin style prefs as they are no longer used."
This commit is contained in:
Matt Atlas
2020-09-24 23:06:04 +03:00
committed by GitHub
parent a7401aeb1d
commit d4666caaac
277 changed files with 4057 additions and 2955 deletions
+1 -1
View File
@@ -52,7 +52,7 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid).
update_icon()
else
if(busy)
visible_message("<span class='notice'>\icon [src] flashes: insufficient materials: [getLackingMaterials(D)].</span>")
visible_message("<span class='notice'>[icon2html(src, viewers(get_turf(src)))] flashes: insufficient materials: [getLackingMaterials(D)].</span>")
busy = 0
update_icon()
+3 -3
View File
@@ -125,12 +125,12 @@ var/global/list/obj/machinery/message_server/message_servers = list()
if(2)
if(!Console.silent)
playsound(Console.loc, 'sound/machines/twobeep.ogg', 50, 1)
Console.audible_message(text("\icon[Console] *The Requests Console beeps: 'PRIORITY Alert in [sender]'"),,5)
Console.message_log += "<B><FONT color='red'>High Priority message from <A href='?src=\ref[Console];write=[sender]'>[sender]</A></FONT></B><BR>[authmsg]"
Console.audible_message(text("[icon2html(Console, viewers(get_turf(Console)))] *The Requests Console beeps: 'PRIORITY Alert in [sender]'"),,5)
Console.message_log += "<B><span class='warning'>High Priority message from <A href='?src=\ref[Console];write=[sender]'>[sender]</A></span></B><BR>[authmsg]"
else
if(!Console.silent)
playsound(Console.loc, 'sound/machines/twobeep.ogg', 50, 1)
Console.audible_message(text("\icon[Console] *The Requests Console beeps: 'Message from [sender]'"),,4)
Console.audible_message(text("[icon2html(Console, viewers(get_turf(Console)))] *The Requests Console beeps: 'Message from [sender]'"),,4)
Console.message_log += "<B>Message from <A href='?src=\ref[Console];write=[sender]'>[sender]</A></B><BR>[authmsg]"
Console.set_light(2)
+1 -1
View File
@@ -46,7 +46,7 @@
update_icon()
else
if(busy)
visible_message("<span class='notice'>\icon [src] flashes: insufficient materials: [getLackingMaterials(D)].</span>")
visible_message("<span class='notice'>[icon2html(src, viewers(get_turf(src)))] [src] flashes: insufficient materials: [getLackingMaterials(D)].</span>")
busy = 0
update_icon()
@@ -63,7 +63,7 @@
var/obj/item/device/measuring_tape/P = W
user.visible_message("<span class='notice'>[user] extends [P] towards [src].</span>","<span class='notice'>You extend [P] towards [src].</span>")
if(do_after(user,40))
to_chat(user, "<span class='notice'>\icon[P] [src] has been excavated to a depth of [2*src.excavation_level]cm.</span>")
to_chat(user, "<span class='notice'>[icon2html(P, user)] [src] has been excavated to a depth of [2*src.excavation_level]cm.</span>")
return
if (istype(W, /obj/item/pickaxe))
@@ -85,7 +85,7 @@
if(excavation_level > 100)
//failure
user.visible_message("<font color='red'><b>[src] suddenly crumbles away.</b></font>",\
user.visible_message("<span class='warning'><b>[src] suddenly crumbles away.</b></span>",\
"<span class='warning'>[src] has disintegrated under your onslaught, any secrets it was holding are long gone.</span>")
qdel(src)
return
@@ -99,9 +99,9 @@
var/obj/machinery/artifact/X = O
if(X.my_effect)
X.my_effect.artifact_id = artifact_find.artifact_id
src.visible_message("<font color='red'><b>[src] suddenly crumbles away.</b></font>")
src.visible_message("<span class='warning'><b>[src] suddenly crumbles away.</b></span>")
else
user.visible_message("<font color='red'><b>[src] suddenly crumbles away.</b></font>",\
user.visible_message("<span class='warning'><b>[src] suddenly crumbles away.</b></span>",\
"<span class='notice'>[src] has been whittled away under your careful excavation, but there was nothing of interest inside.</span>")
qdel(src)
@@ -48,17 +48,17 @@
if(!previous_power_state)
previous_power_state = 1
icon_state = "cellold1"
src.visible_message("<span class='notice'>\icon[src] [src] suddenly comes to life!</span>")
src.visible_message("<span class='notice'>[icon2html(src, viewers(get_turf(src)))] [src] suddenly comes to life!</span>")
//slowly grow a mob
if(prob(5))
src.visible_message("<span class='notice'>\icon[src] [src] [pick("gloops","glugs","whirrs","whooshes","hisses","purrs","hums","gushes")].</span>")
src.visible_message("<span class='notice'>[icon2html(src, viewers(get_turf(src)))] [src] [pick("gloops","glugs","whirrs","whooshes","hisses","purrs","hums","gushes")].</span>")
//if we've finished growing...
if(time_spent_spawning >= time_per_spawn)
time_spent_spawning = 0
use_power = 1
src.visible_message("<span class='notice'>\icon[src] [src] pings!</span>")
src.visible_message("<span class='notice'>[icon2html(src, viewers(get_turf(src)))] [src] pings!</span>")
icon_state = "cellold1"
desc = "It's full of a bubbling viscous liquid, and is lit by a mysterious glow."
if(spawn_type)
@@ -79,7 +79,7 @@
if(previous_power_state)
previous_power_state = 0
icon_state = "cellold0"
src.visible_message("<span class='notice'>\icon[src] [src] suddenly shuts down.</span>")
src.visible_message("<span class='notice'>[icon2html(src, viewers(get_turf(src)))] [src] suddenly shuts down.</span>")
//cloned mob slowly breaks down
time_spent_spawning = max(time_spent_spawning + last_process - world.time, 0)
@@ -77,7 +77,7 @@
viables.Remove(type)
construction[button_desc] = type
fail_message = "<span class='notice'>\icon[src] a [pick("loud","soft","sinister","eery","triumphant","depressing","cheerful","angry")] \
fail_message = "<span class='notice'>[icon2html(src, viewers(get_turf(src)))] a [pick("loud","soft","sinister","eery","triumphant","depressing","cheerful","angry")] \
[pick("horn","beep","bing","bleep","blat","honk","hrumph","ding")] sounds and a \
[pick("yellow","purple","green","blue","red","orange","white")] \
[pick("light","dial","meter","window","protrusion","knob","antenna","swirly thing")] \
@@ -89,7 +89,7 @@
if(spawning_types.len && powered())
spawn_progress_time += world.time - last_process_time
if(spawn_progress_time > max_spawn_time)
src.visible_message("<span class='notice'>\icon[src] [src] pings!</span>")
src.visible_message("<span class='notice'>[icon2html(src, viewers(get_turf(src)))] [src] pings!</span>")
var/obj/source_material = pop(stored_materials)
var/spawn_type = pop(spawning_types)
@@ -112,7 +112,7 @@
icon_state = "borgcharger0(old)"
else if(prob(5))
src.visible_message("<span class='notice'>\icon[src] [src] [pick("clicks","whizzes","whirrs","whooshes","clanks","clongs","clonks","bangs")].</span>")
src.visible_message("<span class='notice'>[icon2html(src, viewers(get_turf(src)))] [src] [pick("clicks","whizzes","whirrs","whooshes","clanks","clongs","clonks","bangs")].</span>")
last_process_time = world.time
@@ -139,9 +139,9 @@
if(index > 0 && index <= construction.len)
if(stored_materials.len > spawning_types.len)
if(spawning_types.len)
src.visible_message("<span class='notice'>\icon[src] a [pick("light","dial","display","meter","pad")] on [src]'s front [pick("blinks","flashes")] [pick("red","yellow","blue","orange","purple","green","white")].</span>")
src.visible_message("<span class='notice'>[icon2html(src, viewers(get_turf(src)))] a [pick("light","dial","display","meter","pad")] on [src]'s front [pick("blinks","flashes")] [pick("red","yellow","blue","orange","purple","green","white")].</span>")
else
src.visible_message("<span class='notice'>\icon[src] [src]'s front compartment slides shut.</span>")
src.visible_message("<span class='notice'>[icon2html(src, viewers(get_turf(src)))] [src]'s front compartment slides shut.</span>")
spawning_types.Add(construction[construction[index]])
spawn_progress_time = 0
@@ -64,7 +64,7 @@
var/atom/toplevelholder = holder
while(!istype(toplevelholder.loc, /turf))
toplevelholder = toplevelholder.loc
toplevelholder.visible_message("<span class='warning'>\icon[toplevelholder] [toplevelholder] [display_msg]</span>")
toplevelholder.visible_message("<span class='warning'>[icon2html(toplevelholder, viewers(get_turf(toplevelholder)))] [toplevelholder] [display_msg]</span>")
/datum/artifact_effect/proc/DoEffectTouch(var/mob/user)
/datum/artifact_effect/proc/DoEffectAura(var/atom/holder)
@@ -34,7 +34,7 @@
if(prob(75))
to_chat(H, "<b><font color='red' size='[num2text(rand(1,5))]'>[pick(drastic_messages)]</b></font>")
else
to_chat(H, "<font color='red'>[pick(messages)]</font>")
to_chat(H, "<span class='warning'>[pick(messages)]</span>")
if(prob(50))
H.dizziness += rand(3,5)
@@ -45,7 +45,7 @@
for (var/mob/living/carbon/human/H in range(src.effectrange,T))
if(prob(5))
if(prob(75))
to_chat(H, "<font color='red'>[pick(messages)]</font>")
to_chat(H, "<span class='warning'>[pick(messages)]</span>")
else
to_chat(H, "<font color='red' size='[num2text(rand(1,5))]'><b>[pick(drastic_messages)]</b></font>")
@@ -61,7 +61,7 @@
if(prob(95))
to_chat(H, "<font color='red' size='[num2text(rand(1,5))]'><b>[pick(drastic_messages)]</b></font>")
else
to_chat(H, "<font color='red'>[pick(messages)]</font>")
to_chat(H, "<span class='warning'>[pick(messages)]</span>")
if(prob(50))
H.dizziness += rand(3,5)
@@ -32,7 +32,7 @@
if(prob(75))
to_chat(H, "<b><font color='blue' size='[num2text(rand(1,5))]'>[pick(drastic_messages)]</b></font>")
else
to_chat(H, "<font color='blue'>[pick(messages)]</font>")
to_chat(H, "<span class='notice'>[pick(messages)]</span>")
if(prob(50))
H.dizziness += rand(3,5)
@@ -43,7 +43,7 @@
for (var/mob/living/carbon/human/H in range(src.effectrange,T))
if(prob(5))
if(prob(75))
to_chat(H, "<font color='blue'>[pick(messages)]</font>")
to_chat(H, "<span class='notice'>[pick(messages)]</span>")
else
to_chat(H, "<font color='blue' size='[num2text(rand(1,5))]'><b>[pick(drastic_messages)]</b></font>")
@@ -59,7 +59,7 @@
if(prob(95))
to_chat(H, "<font color='blue' size='[num2text(rand(1,5))]'><b>[pick(drastic_messages)]</b></font>")
else
to_chat(H, "<font color='blue'>[pick(messages)]</font>")
to_chat(H, "<span class='notice'>[pick(messages)]</span>")
if(prob(50))
H.dizziness += rand(3,5)
@@ -80,7 +80,7 @@
..()
else if(istype(W,/obj/item/pen))
plaque_contents = sanitize(input("What would you like to write on the plaque:","Skeleton plaque",""))
user.visible_message("[user] writes something on the base of [src].","You relabel the plaque on the base of \icon[src] [src].")
user.visible_message("<b>[user]</b> writes something on the base of [src].","You relabel the plaque on the base of [icon2html(src, user)] [src].")
if(src.contents.Find(/obj/item/fossil/skull/horned))
src.desc = "A creature made of [src.contents.len-1] assorted bones and a horned skull. The plaque reads \'[plaque_contents]\'."
else
@@ -115,7 +115,7 @@
if(charges >= 0.1)
if(prob(5))
src.visible_message("<span class='warning'>\icon[src] [src]'s eyes glow ruby red for a moment!</span>")
src.visible_message("<span class='warning'>[icon2html(src, viewers(get_turf(src)))] [src]'s eyes glow ruby red for a moment!</span>")
charges -= 0.1
//check on our shadow wights
@@ -60,7 +60,7 @@
var/list/options = list("[holder_atom] seems to be listening intently to [source]...",\
"[holder_atom] seems to be focusing on [source]...",\
"[holder_atom] seems to turn it's attention to [source]...")
holder_atom.loc.visible_message("<span class='notice'>\icon[holder_atom] [pick(options)]</span>")
holder_atom.loc.visible_message("<span class='notice'>[icon2html(holder_atom, viewers(get_turf(holder_atom)))] [pick(options)]</span>")
if(prob(20))
spawn(2)
@@ -116,5 +116,5 @@
listening|=M
for(var/mob/M in listening)
to_chat(M, "\icon[holder_atom] <b>[holder_atom]</b> reverberates, <span class='notice'>\"[msg]\"</span>")
to_chat(M, "[icon2html(holder_atom, M)] <b>[holder_atom]</b> reverberates, <span class='notice'>\"[msg]\"</span>")
last_talk_time = world.time
@@ -80,7 +80,7 @@
var/pname = "[src] report #[++report_num]"
var/info = "<b>[src] analysis report #[report_num]</b><br>"
info += "<br>"
info += "\icon[scanned_object] [results]"
info += "[icon2html(scanned_object, viewers(get_turf(src)))] [results]"
P.stamped = list(/obj/item/stamp)
P.overlays = list("paper_stamped")
P.set_content_unsafe(pname, info)
@@ -235,16 +235,16 @@
//emergency stop if seal integrity reaches 0
if(scanner_seal_integrity <= 0 || (scanner_temperature >= 1273 && !rad_shield))
stop_scanning()
visible_message("<span class='notice'>\icon[src] buzzes unhappily. It has failed mid-scan!</span>", range = 2)
visible_message("<span class='notice'>[icon2html(src, viewers(get_turf(src)))] buzzes unhappily. It has failed mid-scan!</span>", range = 2)
if(prob(5))
visible_message("<span class='notice'>\icon[src] [pick("whirrs","chuffs","clicks")][pick(" excitedly"," energetically"," busily")].</span>", range = 2)
visible_message("<span class='notice'>[icon2html(src, viewers(get_turf(src)))] [pick("whirrs","chuffs","clicks")][pick(" excitedly"," energetically"," busily")].</span>", range = 2)
else
//gradually cool down over time
if(scanner_temperature > 0)
scanner_temperature = max(scanner_temperature - 5 - 10 * rand(), 0)
if(prob(0.75))
visible_message("<span class='notice'>\icon[src] [pick("plinks","hisses")][pick(" quietly"," softly"," sadly"," plaintively")].</span>", range = 2)
visible_message("<span class='notice'>[icon2html(src, viewers(get_turf(src)))] [pick("plinks","hisses")][pick(" quietly"," softly"," sadly"," plaintively")].</span>", range = 2)
last_process_worldtime = world.time
/obj/machinery/radiocarbon_spectrometer/proc/stop_scanning()
@@ -262,7 +262,7 @@
used_coolant = 0
/obj/machinery/radiocarbon_spectrometer/proc/complete_scan()
visible_message("<span class='notice'>\icon[src] makes an insistent chime.</span>", range = 2)
visible_message("<span class='notice'>[icon2html(src, viewers(get_turf(src)))] makes an insistent chime.</span>", range = 2)
if(scanned_item)
//create report
@@ -103,9 +103,9 @@
if(interval > 0)
//apply the touch effect to the holder
if(holder)
to_chat(holder, "the \icon[src] [src] held by [holder] shudders in your grasp.")
to_chat(holder, "[icon2html(src, viewers(get_turf(src)))] [src] held by [holder] shudders in your grasp.")
else
src.loc.visible_message("the \icon[src] [src] shudders.")
src.loc.visible_message("[icon2html(src, viewers(get_turf(src)))] [src] shudders.")
inserted_battery.battery_effect.DoEffectTouch(holder)
//consume power
@@ -131,13 +131,13 @@
//work out if we need to shutdown
if(inserted_battery.stored_charge <= 0)
src.loc.visible_message("<span class='notice'>\icon[src] [src] buzzes.</span>", "<span class='notice'>\icon[src] You hear something buzz.</span>")
src.loc.visible_message("<span class='notice'>[icon2html(src, viewers(get_turf(src)))] [src] buzzes.</span>", "<span class='notice'>You hear something buzz.</span>")
shutdown_emission()
else if(world.time > time_end)
src.loc.visible_message("<span class='notice'>\icon[src] [src] chimes.</span>", "<span class='notice'>\icon[src] You hear something chime.</span>")
src.loc.visible_message("<span class='notice'>[icon2html(src, viewers(get_turf(src)))] [src] chimes.</span>", "<span class='notice'>You hear something chime.</span>")
shutdown_emission()
else
src.visible_message("<span class='notice'>\icon[src] [src] buzzes.</span>", "<span class='notice'>\icon[src] You hear something buzz.</span>")
src.visible_message("<span class='notice'>[icon2html(src, viewers(get_turf(src)))] [src] buzzes.</span>", "<span class='notice'>You hear something buzz.</span>")
shutdown_emission()
last_process = world.time
@@ -164,7 +164,7 @@
if(href_list["startup"])
if(inserted_battery && inserted_battery.battery_effect && (inserted_battery.stored_charge > 0) )
activated = 1
src.visible_message("<span class='notice'>\icon[src] [src] whirrs.</span>", "\icon[src]<span class='notice'>You hear something whirr.</span>")
src.visible_message("<span class='notice'>[icon2html(src, viewers(get_turf(src)))] [src] whirrs.</span>", "<span class='notice'>You hear something whirr.</span>")
if(!inserted_battery.battery_effect.activated)
inserted_battery.battery_effect.ToggleActivate(1)
time_end = world.time + duration
@@ -210,6 +210,6 @@
M.lastattacker = user
if(inserted_battery.battery_effect)
user.attack_log += "\[[time_stamp()]\]<font color='red'> Tapped [M.name] ([M.ckey]) with [name] (EFFECT: [inserted_battery.battery_effect.effecttype])</font>"
user.attack_log += "\[[time_stamp()]\]<span class='warning'> Tapped [M.name] ([M.ckey]) with [name] (EFFECT: [inserted_battery.battery_effect.effecttype])</span>"
M.attack_log += "\[[time_stamp()]\]<font color='orange'> Tapped by [user.name] ([user.ckey]) with [name] (EFFECT: [inserted_battery.battery_effect.effecttype])</font>"
msg_admin_attack("[key_name_admin(user)] tapped [key_name_admin(M)] with [name] (EFFECT: [inserted_battery.battery_effect.effecttype]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)",ckey=key_name(user),ckey_target=key_name(M) )
@@ -101,7 +101,7 @@
dat += "<br>"
dat += "<br>"
dat += "<hr>"
dat += "<font color='blue'><b>Always wear safety gear and consult a field manual before operation.</b></font><br>"
dat += "<span class='notice'><b>Always wear safety gear and consult a field manual before operation.</b></span><br>"
if(!locked)
dat += "<A href='?src=\ref[src];lock=1'>Lock console</A><br>"
else
@@ -248,7 +248,7 @@
success = 1
for(var/mob/living/carbon/C in T)
C.weakened += 5
C.visible_message("<span class='notice'>\icon[C] [C] begins to float in the air!","You feel tingly and light, but it is difficult to move.</span>")
C.visible_message("<span class='notice'>[icon2html(C, viewers(get_turf(C)))] [C] begins to float in the air!","You feel tingly and light, but it is difficult to move.</span>")
if("nitrogen")
success = 1
//
@@ -271,19 +271,19 @@
success = 1
for(var/mob/living/silicon/R in T)
R.weakened += 5
R.visible_message("<span class='notice'>\icon[R] [R] begins to float in the air!","You feel tingly and light, but it is difficult to move.</span>")
R.visible_message("<span class='notice'>[icon2html(R, viewers(get_turf(R)))] [R] begins to float in the air!","You feel tingly and light, but it is difficult to move.</span>")
//
//in case we have a bad field type
if(!success)
return
for(var/mob/living/simple_animal/C in T)
C.visible_message("<span class='notice'>\icon[C] [C] begins to float in the air!","You feel tingly and light, but it is difficult to move.</span>")
C.visible_message("<span class='notice'>[icon2html(C, viewers(get_turf(C)))] [C] begins to float in the air!","You feel tingly and light, but it is difficult to move.</span>")
C.weakened += 5
suspension_field = new(T)
suspension_field.field_type = field_type
src.visible_message("<span class='notice'>\icon[src] [src] activates with a low hum.</span>")
src.visible_message("<span class='notice'>[icon2html(src, viewers(get_turf(src)))] [src] activates with a low hum.</span>")
icon_state = "suspension3"
for(var/obj/item/I in T)
@@ -293,7 +293,7 @@
if(collected)
suspension_field.icon_state = "energynet"
suspension_field.add_overlay("shield2")
src.visible_message("<span class='notice'>\icon[suspension_field] [suspension_field] gently absconds [collected > 1 ? "something" : "several things"].</span>")
src.visible_message("<span class='notice'>[icon2html(suspension_field, viewers(get_turf(suspension_field)))] [suspension_field] gently absconds [collected > 1 ? "something" : "several things"].</span>")
else
if(istype(T,/turf/simulated/mineral) || istype(T,/turf/simulated/wall))
suspension_field.icon_state = "shieldsparkles"
@@ -308,7 +308,7 @@
to_chat(M, "<span class='info'>You no longer feel like floating.</span>")
M.weakened = min(M.weakened, 3)
src.visible_message("<span class='notice'>\icon[src] [src] deactivates with a gentle shudder.</span>")
src.visible_message("<span class='notice'>[icon2html(src, viewers(get_turf(src)))] [src] deactivates with a gentle shudder.</span>")
qdel(suspension_field)
suspension_field = null
icon_state = "suspension2"
@@ -12,7 +12,7 @@
/obj/item/device/gps/attack_self(var/mob/user as mob)
var/turf/T = get_turf(src)
to_chat(user, "<span class='notice'>\icon[src] [src] flashes <i>[T.x].[rand(0,9)]:[T.y].[rand(0,9)]:[T.z].[rand(0,9)]</i>.</span>")
to_chat(user, "<span class='notice'>[icon2html(src, user)] [src] flashes <i>[T.x].[rand(0,9)]:[T.y].[rand(0,9)]:[T.z].[rand(0,9)]</i>.</span>")
/obj/item/device/measuring_tape
name = "measuring tape"
@@ -45,7 +45,7 @@
positive_locations.Add(D)
for(var/mob/L in range(src, 1))
to_chat(L, "<span class='notice'>\icon[src] [src] pings.</span>")
to_chat(L, "<span class='notice'>[icon2html(src, L)] [src] pings.</span>")
else if(istype(A,/obj/structure/boulder))
var/obj/structure/boulder/B = A
@@ -64,7 +64,7 @@
positive_locations.Add(D)
for(var/mob/L in range(src, 1))
to_chat(L, "<span class='notice'>\icon[src] [src] pings [pick("madly","wildly","excitedly","crazily")]!</span>")
to_chat(L, "<span class='notice'>[icon2html(src, L)] [src] pings [pick("madly","wildly","excitedly","crazily")]!</span>")
/obj/item/device/depth_scanner/attack_self(var/mob/user as mob)
return src.interact(user)
@@ -52,9 +52,9 @@
scan_ticks = 0
var/turf/T = get_turf(src)
if(target_radio)
T.visible_message("\icon[src] [src] [pick("chirps","chirrups","cheeps")] happily.")
T.visible_message("[icon2html(src, viewers(get_turf(T)))] [src] [pick("chirps","chirrups","cheeps")] happily.")
else
T.visible_message("\icon[src] [src] [pick("chirps","chirrups","cheeps")] sadly.")
T.visible_message("[icon2html(src, viewers(get_turf(T)))] [src] [pick("chirps","chirrups","cheeps")] sadly.")
else
icon_state = "pinoff"