diff --git a/byond-extools.dll b/byond-extools.dll
index bd6b34c48e..718b475f9a 100644
Binary files a/byond-extools.dll and b/byond-extools.dll differ
diff --git a/code/__DEFINES/_extools.dm b/code/__DEFINES/_extools.dm
new file mode 100644
index 0000000000..4513243aae
--- /dev/null
+++ b/code/__DEFINES/_extools.dm
@@ -0,0 +1 @@
+#define EXTOOLS (world.system_type == MS_WINDOWS ? "byond-extools.dll" : "libbyond-extools.so")
diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm
index 621af2c811..dad2a38afd 100644
--- a/code/__DEFINES/atmospherics.dm
+++ b/code/__DEFINES/atmospherics.dm
@@ -281,8 +281,6 @@ GLOBAL_LIST_INIT(atmos_adjacent_savings, list(0,0))
#define CALCULATE_ADJACENT_TURFS(T) SSadjacent_air.queue[T] = 1
#endif
-#define EXTOOLS (world.system_type == MS_WINDOWS ? "byond-extools.dll" : "libbyond-extools.so")
-
GLOBAL_VAR(atmos_extools_initialized) // this must be an uninitialized (null) one or init_monstermos will be called twice because reasons
#define ATMOS_EXTOOLS_CHECK if(!GLOB.atmos_extools_initialized){\
GLOB.atmos_extools_initialized=TRUE;\
diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm
index 65994dda5a..8efb2617bd 100644
--- a/code/__DEFINES/dcs/signals.dm
+++ b/code/__DEFINES/dcs/signals.dm
@@ -32,7 +32,7 @@
#define COMSIG_ELEMENT_DETACH "element_detach"
/// sent to the component itself when unregistered from a parent
-#define COMSIG_COMPONENT_UNREGISTER_PARENT "component_unregister_parent"
+#define COMSIG_COMPONENT_UNREGISTER_PARENT "component_unregister_parent"
/// sent to the component itself when registered to a parent
#define COMSIG_COMPONENT_REGISTER_PARENT "component_register_parent"
@@ -184,6 +184,7 @@
// #define HEARING_SOURCE 8
#define COMSIG_MOVABLE_DISPOSING "movable_disposing" //called when the movable is added to a disposal holder object for disposal movement: (obj/structure/disposalholder/holder, obj/machinery/disposal/source)
#define COMSIG_MOVABLE_TELEPORTED "movable_teleported" //from base of do_teleport(): (channel, turf/origin, turf/destination)
+#define COMSIG_MOVABLE_CHASM_DROP "movable_chasm_drop" //from base of /datum/component/chasm/drop() (/datum/component/chasm)
// /mind signals
#define COMSIG_PRE_MIND_TRANSFER "pre_mind_transfer" //from base of mind/transfer_to() before it's done: (new_character, old_character)
diff --git a/code/__HELPERS/_extools_api.dm b/code/__HELPERS/_extools_api.dm
new file mode 100644
index 0000000000..af348dc939
--- /dev/null
+++ b/code/__HELPERS/_extools_api.dm
@@ -0,0 +1,5 @@
+#define EXTOOLS_LOGGING // rust_g is used as a fallback if this is undefined
+
+/proc/extools_log_write()
+
+/proc/extools_finalize_logging()
diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm
index 62e6c4daf9..888c20003f 100644
--- a/code/__HELPERS/_logging.dm
+++ b/code/__HELPERS/_logging.dm
@@ -4,10 +4,15 @@
#define SEND_SOUND(target, sound) DIRECT_OUTPUT(target, sound)
#define SEND_TEXT(target, text) DIRECT_OUTPUT(target, text)
#define WRITE_FILE(file, text) DIRECT_OUTPUT(file, text)
+#ifdef EXTOOLS_LOGGING
+// proc hooked, so we can just put in standard TRUE and FALSE
+#define WRITE_LOG(log, text) extools_log_write(log,text,TRUE)
+#define WRITE_LOG_NO_FORMAT(log, text) extools_log_write(log,text,FALSE)
+#else
//This is an external call, "true" and "false" are how rust parses out booleans
#define WRITE_LOG(log, text) rustg_log_write(log, text, "true")
#define WRITE_LOG_NO_FORMAT(log, text) rustg_log_write(log, text, "false")
-
+#endif
//print a warning message to world.log
#define WARNING(MSG) warning("[MSG] in [__FILE__] at line [__LINE__] src: [UNLINT(src)] usr: [usr].")
/proc/warning(msg)
@@ -216,7 +221,11 @@
/* Close open log handles. This should be called as late as possible, and no logging should hapen after. */
/proc/shutdown_logging()
+#ifdef EXTOOLS_LOGGING
+ extools_finalize_logging()
+#else
rustg_log_close_all()
+#endif
/* Helper procs for building detailed log lines */
diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm
index 6dc1433bc8..980ec38909 100644
--- a/code/_onclick/hud/alert.dm
+++ b/code/_onclick/hud/alert.dm
@@ -184,14 +184,23 @@
/obj/screen/alert/hot
name = "Too Hot"
- desc = "You're flaming hot! Get somewhere cooler and take off any insulating clothing like a fire suit."
+ desc = "The air around you is pretty toasty! Consider putting on some insulating clothing, or moving to a cooler area."
icon_state = "hot"
/obj/screen/alert/cold
name = "Too Cold"
- desc = "You're freezing cold! Get somewhere warmer and take off any insulating clothing like a space suit."
+ desc = "The air around you is pretty cold! Consider wearing a coat, or moving to a warmer area."
icon_state = "cold"
+/obj/screen/alert/sweat
+ name = "Sweating"
+ desc = "You're sweating! Get somewhere cooler and take off any insulating clothing like a fire suit."
+ icon_state = "sweat"
+
+/obj/screen/alert/shiver
+ name = "Shivering"
+ desc = "You're shivering! Get somewhere warmer and take off any insulating clothing like a space suit."
+
/obj/screen/alert/lowpressure
name = "Low Pressure"
desc = "The air around you is hazardously thin. A space suit would protect you."
diff --git a/code/datums/accents.dm b/code/datums/accents.dm
index edfdfb9fee..9baba90c32 100644
--- a/code/datums/accents.dm
+++ b/code/datums/accents.dm
@@ -94,6 +94,7 @@
/datum/accent/robot/modify_speech(list/speech_args)
speech_args[SPEECH_SPANS] = SPAN_ROBOT
+ return speech_args
/datum/accent/dullahan/modify_speech(list/speech_args, datum/source, mob/living/carbon/owner)
if(owner)
diff --git a/code/datums/components/chasm.dm b/code/datums/components/chasm.dm
index 0bb6c4a0af..f5a34bfca2 100644
--- a/code/datums/components/chasm.dm
+++ b/code/datums/components/chasm.dm
@@ -76,19 +76,11 @@
return FALSE
if(M.is_flying())
return FALSE
- if(ishuman(AM))
- var/mob/living/carbon/human/H = AM
- if(istype(H.belt, /obj/item/wormhole_jaunter))
- var/obj/item/wormhole_jaunter/J = H.belt
- //To freak out any bystanders
- H.visible_message("[H] falls into [parent]!")
- J.chasm_react(H)
- return FALSE
return TRUE
/datum/component/chasm/proc/drop(atom/movable/AM)
//Make sure the item is still there after our sleep
- if(!AM || QDELETED(AM))
+ if(!AM || QDELETED(AM) || SEND_SIGNAL(AM, COMSIG_MOVABLE_CHASM_DROP, src))
return
falling_atoms[AM] = (falling_atoms[AM] || 0) + 1
var/turf/T = target_turf
diff --git a/code/datums/diseases/advance/symptoms/fire.dm b/code/datums/diseases/advance/symptoms/fire.dm
index ea1897b67d..891d8a286a 100644
--- a/code/datums/diseases/advance/symptoms/fire.dm
+++ b/code/datums/diseases/advance/symptoms/fire.dm
@@ -113,9 +113,9 @@ Bonus
symptom_delay_max = 90
var/chems = FALSE
var/explosion_power = 1
- threshold_desc = "Resistance 9: Doubles the intensity of the effect, but reduces its frequency.
\
- Stage Speed 8: Increases explosion radius when the host is wet.
\
- Transmission 8: Additionally synthesizes chlorine trifluoride and napalm inside the host."
+ threshold_desc = list("Resistance 9" = "Doubles the intensity of the effect, but reduces its frequency.",
+ "Stage Speed 8" = "Increases explosion radius when the host is wet.",
+ "Transmission 8" = "Additionally synthesizes chlorine trifluoride and napalm inside the host.")
/datum/symptom/alkali/Start(datum/disease/advance/A)
if(!..())
diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm
index 659d50c077..2e6353b8a8 100644
--- a/code/game/gamemodes/dynamic/dynamic.dm
+++ b/code/game/gamemodes/dynamic/dynamic.dm
@@ -204,10 +204,7 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null)
var/threatadd = input("Specify how much threat to add (negative to subtract). This can inflate the threat level.", "Adjust Threat", 0) as null|num
if(!threatadd)
return
- if(threatadd > 0)
- create_threat(threatadd)
- else
- remove_threat(threatadd)
+ create_threat(threatadd)
else if (href_list["injectlate"])
latejoin_injection_cooldown = 0
forced_injection = TRUE
diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm
index 7f8b720509..2a9944f770 100644
--- a/code/game/objects/items/crayons.dm
+++ b/code/game/objects/items/crayons.dm
@@ -735,7 +735,11 @@
if(isobj(target))
if(actually_paints)
var/list/hsl = rgb2hsl(hex2num(copytext(paint_color,2,4)),hex2num(copytext(paint_color,4,6)),hex2num(copytext(paint_color,6,8)))
- if(hsl[3] < 0.25 && !istype(target, /obj/structure/window) && !istype(target, /obj/effect/decal/cleanable/crayon)) //Colors too dark are rejected
+ var/static/whitelisted = typecacheof(list(/obj/structure/window,
+ /obj/effect/decal/cleanable/crayon,
+ /obj/machinery/door/window)
+ )
+ if(hsl[3] < 0.25 && !whitelisted[target]) //Colors too dark are rejected
to_chat(usr, "A color that dark on an object like this? Surely not...")
return FALSE
diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm
index 767f8fc395..277d132b12 100644
--- a/code/game/objects/items/defib.dm
+++ b/code/game/objects/items/defib.dm
@@ -394,8 +394,6 @@
to_chat(user, "[src] are recharging!")
return
- user.stop_pulling() //User has hands full, and we don't care about anyone else pulling on it, their problem. CLEAR!!
-
if(user.a_intent == INTENT_DISARM)
do_disarm(M, user)
return
diff --git a/code/game/world.dm b/code/game/world.dm
index 2d174c86e5..121d51136d 100644
--- a/code/game/world.dm
+++ b/code/game/world.dm
@@ -11,6 +11,11 @@ GLOBAL_LIST(topic_status_cache)
/world/New()
if (fexists(EXTOOLS))
call(EXTOOLS, "maptick_initialize")()
+ #ifdef EXTOOLS_LOGGING
+ call(EXTOOLS, "init_logging")()
+ else
+ CRASH("[EXTOOLS] does not exist!")
+ #endif
enable_debugger()
#ifdef REFERENCE_TRACKING
enable_reference_tracking()
@@ -274,6 +279,7 @@ GLOBAL_LIST(topic_status_cache)
GM.__gasmixture_unregister()
num_deleted++
log_world("Deallocated [num_deleted] gas mixtures")
+ shutdown_logging() // makes sure the thread is closed before end, else we terminate
..()
/world/proc/update_status()
diff --git a/code/modules/mining/equipment/wormhole_jaunter.dm b/code/modules/mining/equipment/wormhole_jaunter.dm
index c17b62ba6c..e9f8079400 100644
--- a/code/modules/mining/equipment/wormhole_jaunter.dm
+++ b/code/modules/mining/equipment/wormhole_jaunter.dm
@@ -18,6 +18,15 @@
SSblackbox.record_feedback("tally", "jaunter", 1, "User") // user activated
activate(user, TRUE)
+/obj/item/wormhole_jaunter/equipped(mob/user, slot)
+ . = ..()
+ if(slot == SLOT_BELT)
+ RegisterSignal(user, COMSIG_MOVABLE_CHASM_DROP, .proc/chasm_react)
+
+/obj/item/wormhole_jaunter/dropped(mob/user)
+ . = ..()
+ UnregisterSignal(user, COMSIG_MOVABLE_CHASM_DROP)
+
/obj/item/wormhole_jaunter/proc/turf_check(mob/user)
var/turf/device_turf = get_turf(user)
if(!device_turf || is_centcom_level(device_turf.z) || is_reserved_level(device_turf.z))
@@ -71,13 +80,14 @@
SSblackbox.record_feedback("tally", "jaunter", 1, "EMP") // EMP accidental activation
activate(M)
-/obj/item/wormhole_jaunter/proc/chasm_react(mob/user)
- if(user.get_item_by_slot(SLOT_BELT) == src)
- to_chat(user, "Your [name] activates, saving you from the chasm!")
- SSblackbox.record_feedback("tally", "jaunter", 1, "Chasm") // chasm automatic activation
- activate(user, FALSE, TRUE)
- else
- to_chat(user, "[src] is not attached to your belt, preventing it from saving you from the chasm. RIP.")
+/obj/item/wormhole_jaunter/proc/chasm_react(mob/source, datum/component/chasm/C)
+ to_chat(source, "Your [name] activates, saving you from the chasm!")
+ SSblackbox.record_feedback("tally", "jaunter", 1, "Chasm") // chasm automatic activation
+ activate(source, FALSE, TRUE)
+ if(C)
+ var/atom/A = C.parent
+ A.visible_message("[source] falls into [A]!")
+ return TRUE
//jaunter tunnel
/obj/effect/portal/jaunt_tunnel
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index ed509f900a..89f5783124 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -1956,19 +1956,19 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
H.adjust_bodytemperature(natural*(1/(thermal_protection+1)) + min(thermal_protection * (loc_temp - H.bodytemperature) / BODYTEMP_HEAT_DIVISOR, BODYTEMP_HEATING_MAX))
switch((loc_temp - H.bodytemperature)*thermal_protection)
if(-INFINITY to -50)
- H.throw_alert("temp", /obj/screen/alert/cold, 3)
+ H.throw_alert("tempfeel", /obj/screen/alert/cold, 3)
if(-50 to -35)
- H.throw_alert("temp", /obj/screen/alert/cold, 2)
+ H.throw_alert("tempfeel", /obj/screen/alert/cold, 2)
if(-35 to -20)
- H.throw_alert("temp", /obj/screen/alert/cold, 1)
+ H.throw_alert("tempfeel", /obj/screen/alert/cold, 1)
if(-20 to 0) //This is the sweet spot where air is considered normal
- H.clear_alert("temp")
+ H.clear_alert("tempfeel")
if(0 to 15) //When the air around you matches your body's temperature, you'll start to feel warm.
- H.throw_alert("temp", /obj/screen/alert/hot, 1)
+ H.throw_alert("tempfeel", /obj/screen/alert/hot, 1)
if(15 to 30)
- H.throw_alert("temp", /obj/screen/alert/hot, 2)
+ H.throw_alert("tempfeel", /obj/screen/alert/hot, 2)
if(30 to INFINITY)
- H.throw_alert("temp", /obj/screen/alert/hot, 3)
+ H.throw_alert("tempfeel", /obj/screen/alert/hot, 3)
// +/- 50 degrees from 310K is the 'safe' zone, where no damage is dealt.
if(H.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT && !HAS_TRAIT(H, TRAIT_RESISTHEAT))
@@ -1986,6 +1986,14 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
else
firemodifier = min(firemodifier, 0)
burn_damage = max(log(2-firemodifier,(H.bodytemperature-BODYTEMP_NORMAL))-5,0) // this can go below 5 at log 2.5
+ if (burn_damage)
+ switch(burn_damage)
+ if(0 to 2)
+ H.throw_alert("temp", /obj/screen/alert/sweat, 1)
+ if(2 to 4)
+ H.throw_alert("temp", /obj/screen/alert/sweat, 2)
+ else
+ H.throw_alert("temp", /obj/screen/alert/sweat, 3)
burn_damage = burn_damage * heatmod * H.physiology.heat_mod
if (H.stat < UNCONSCIOUS && (prob(burn_damage) * 10) / 4) //40% for level 3 damage on humans
H.emote("scream")
@@ -1998,14 +2006,18 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/cold, multiplicative_slowdown = ((BODYTEMP_COLD_DAMAGE_LIMIT - H.bodytemperature) / COLD_SLOWDOWN_FACTOR))
switch(H.bodytemperature)
if(200 to BODYTEMP_COLD_DAMAGE_LIMIT)
+ H.throw_alert("temp", /obj/screen/alert/shiver, 1)
H.apply_damage(COLD_DAMAGE_LEVEL_1*coldmod*H.physiology.cold_mod, BURN)
if(120 to 200)
+ H.throw_alert("temp", /obj/screen/alert/shiver, 2)
H.apply_damage(COLD_DAMAGE_LEVEL_2*coldmod*H.physiology.cold_mod, BURN)
else
+ H.throw_alert("temp", /obj/screen/alert/shiver, 3)
H.apply_damage(COLD_DAMAGE_LEVEL_3*coldmod*H.physiology.cold_mod, BURN)
else
H.remove_movespeed_modifier(/datum/movespeed_modifier/cold)
+ H.clear_alert("temp")
SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "cold")
SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "hot")
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index 38029b5d4c..25a9cf0043 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -187,12 +187,13 @@
*/
/obj/machinery/photocopier/proc/do_copy_loop(datum/callback/copy_cb, mob/user)
busy = TRUE
- var/i
- for(i in 1 to num_copies)
+ var/num_loops
+ for(var/i in 1 to num_copies)
//if(attempt_charge(src, user) & COMPONENT_OBJ_CANCEL_CHARGE)
// break
addtimer(copy_cb, i SECONDS)
- addtimer(CALLBACK(src, .proc/reset_busy), i SECONDS)
+ num_loops++
+ addtimer(CALLBACK(src, .proc/reset_busy), num_loops SECONDS)
/**
* Sets busy to `FALSE`. Created as a proc so it can be used in callbacks.
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index fd8f900552..d4e3f6ad0d 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -985,6 +985,13 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
layer = ABOVE_MOB_LAYER
moveable = TRUE
+/obj/machinery/power/supermatter_crystal/shard/examine(mob/user)
+ . = ..()
+ if(anchored)
+ . += "[src] is anchored to the floor."
+ else
+ . += "[src] is unanchored, but can be bolted down."
+
/obj/machinery/power/supermatter_crystal/shard/engine
name = "anchored supermatter shard"
is_main_engine = TRUE
diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm
index 1b608060ce..75e862778a 100644
--- a/code/modules/research/designs/misc_designs.dm
+++ b/code/modules/research/designs/misc_designs.dm
@@ -469,7 +469,7 @@
build_type = PROTOLATHE
materials = list(/datum/material/iron = 5000, /datum/material/glass = 1000, /datum/material/gold = 1000, /datum/material/silver = 1000)
build_path = /obj/item/holosign_creator/engineering
- category = list("Equipment")
+ category = list("Tool Designs")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/holosignatmos
@@ -479,7 +479,7 @@
build_type = PROTOLATHE
materials = list(/datum/material/iron = 5000, /datum/material/glass = 1000, /datum/material/gold = 1000, /datum/material/silver = 1000)
build_path = /obj/item/holosign_creator/atmos
- category = list("Equipment")
+ category = list("Tool Designs")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/holosignfirelock
@@ -489,7 +489,7 @@
build_type = PROTOLATHE
materials = list(/datum/material/iron = 5000, /datum/material/glass = 1000, /datum/material/gold = 1000, /datum/material/silver = 1000)
build_path = /obj/item/holosign_creator/firelock
- category = list("Equipment")
+ category = list("Tool Designs")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/holosigncombifan
@@ -499,7 +499,7 @@
build_type = PROTOLATHE
materials = list(/datum/material/iron = 7500, /datum/material/glass = 2500, /datum/material/silver = 2500, /datum/material/gold = 2500, /datum/material/titanium = 1750)
build_path = /obj/item/holosign_creator/combifan
- category = list("Equipment")
+ category = list("Tool Designs")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/forcefield_projector
@@ -509,7 +509,7 @@
build_type = PROTOLATHE
materials = list(/datum/material/iron = 2500, /datum/material/glass = 1000)
build_path = /obj/item/forcefield_projector
- category = list("Equipment")
+ category = list("Tool Designs")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/holobarrier_med
diff --git a/code/modules/ruins/spaceruin_code/hilbertshotel.dm b/code/modules/ruins/spaceruin_code/hilbertshotel.dm
index d97eae5766..4859fcfca0 100644
--- a/code/modules/ruins/spaceruin_code/hilbertshotel.dm
+++ b/code/modules/ruins/spaceruin_code/hilbertshotel.dm
@@ -183,6 +183,13 @@ GLOBAL_VAR_INIT(hhmysteryRoomNumber, 1337)
. = ..()
promptAndCheckIn(user)
+/obj/item/hilbertshotel/ghostdojo/linkTurfs(datum/turf_reservation/currentReservation, currentRoomnumber)
+ . = ..()
+ var/area/hilbertshotel/currentArea = get_area(locate(currentReservation.bottom_left_coords[1], currentReservation.bottom_left_coords[2], currentReservation.bottom_left_coords[3]))
+ for(var/turf/closed/indestructible/hoteldoor/door in currentArea)
+ door.parentSphere = src
+ door.desc = "The door to this hotel room. Strange, this door doesnt even seem openable. The doorknob, however, seems to buzz with unusual energy...
Alt-Click to look through the peephole."
+
//Template Stuff
/datum/map_template/hilbertshotel
name = "Hilbert's Hotel Room"
diff --git a/code/modules/unit_tests/character_saving.dm b/code/modules/unit_tests/character_saving.dm
index 6c83d4142a..bdcb0f0276 100644
--- a/code/modules/unit_tests/character_saving.dm
+++ b/code/modules/unit_tests/character_saving.dm
@@ -11,4 +11,4 @@
if(P.features["ooc_notes"] != "Bar")
Fail("OOC text is failing to save.")
catch(var/exception/e)
- Fail("Failed to save and load character due to exception [e.name]")
+ Fail("Failed to save and load character due to exception [e.file]:[e.line], [e.name]")
diff --git a/html/changelog.html b/html/changelog.html
index 01d3861fc5..864b5d19b0 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -50,6 +50,21 @@
-->