diff --git a/code/FEA/FEA_fire.dm b/code/FEA/FEA_fire.dm index 6aaf328b9be..1ef4c74558f 100644 --- a/code/FEA/FEA_fire.dm +++ b/code/FEA/FEA_fire.dm @@ -62,101 +62,105 @@ var/bypassing = 0 - proc/perform_exposure() - var/turf/simulated/floor/location = loc - if(!istype(location)) return 0 +/obj/effect/hotspot/proc/perform_exposure() + var/turf/simulated/floor/location = loc + if(!istype(location)) return 0 - if(volume > CELL_VOLUME*0.95) bypassing = 1 - else bypassing = 0 + if(volume > CELL_VOLUME*0.95) bypassing = 1 + else bypassing = 0 - if(bypassing) - if(!just_spawned) - volume = location.air.fuel_burnt*FIRE_GROWTH_RATE - temperature = location.air.temperature - else - var/datum/gas_mixture/affected = location.air.remove_ratio(volume/location.air.volume) - affected.temperature = temperature - affected.react() - temperature = affected.temperature - volume = affected.fuel_burnt*FIRE_GROWTH_RATE - location.assume_air(affected) + if(bypassing) + if(!just_spawned) + volume = location.air.fuel_burnt*FIRE_GROWTH_RATE + temperature = location.air.temperature + else + var/datum/gas_mixture/affected = location.air.remove_ratio(volume/location.air.volume) + affected.temperature = temperature + affected.react() + temperature = affected.temperature + volume = affected.fuel_burnt*FIRE_GROWTH_RATE + location.assume_air(affected) - for(var/atom/item in loc) - item.temperature_expose(null, temperature, volume) + for(var/atom/item in loc) + if(!bypassing) + item.temperature_expose(null, temperature, volume) + if(item) // It's possible that the item is deleted in temperature_expose + item.fire_act(null, temperature, volume) + + return 0 + + +/obj/effect/hotspot/process(turf/simulated/list/possible_spread) + if(just_spawned) + just_spawned = 0 return 0 + var/turf/simulated/floor/location = loc + if(!istype(location)) + del(src) - process(turf/simulated/list/possible_spread) - if(just_spawned) - just_spawned = 0 - return 0 + if((temperature < FIRE_MINIMUM_TEMPERATURE_TO_EXIST) || (volume <= 1)) + del(src) - var/turf/simulated/floor/location = loc - if(!istype(location)) - del(src) + if(location.air.toxins < 0.5 || location.air.oxygen < 0.5) + del(src) - if((temperature < FIRE_MINIMUM_TEMPERATURE_TO_EXIST) || (volume <= 1)) - del(src) + perform_exposure() - if(location.air.toxins < 0.5 || location.air.oxygen < 0.5) - del(src) + if(location.wet) location.wet = 0 - perform_exposure() + if(bypassing) + icon_state = "3" + location.burn_tile() - if(location.wet) location.wet = 0 + //Possible spread due to radiated heat + if(location.air.temperature > FIRE_MINIMUM_TEMPERATURE_TO_SPREAD) + var/radiated_temperature = location.air.temperature*FIRE_SPREAD_RADIOSITY_SCALE - if(bypassing) - icon_state = "3" - location.burn_tile() - - //Possible spread due to radiated heat - if(location.air.temperature > FIRE_MINIMUM_TEMPERATURE_TO_SPREAD) - var/radiated_temperature = location.air.temperature*FIRE_SPREAD_RADIOSITY_SCALE - - for(var/turf/simulated/possible_target in possible_spread) - if(!possible_target.active_hotspot) - possible_target.hotspot_expose(radiated_temperature, CELL_VOLUME/4) + for(var/turf/simulated/possible_target in possible_spread) + if(!possible_target.active_hotspot) + possible_target.hotspot_expose(radiated_temperature, CELL_VOLUME/4) + else + if(volume > CELL_VOLUME*0.4) + icon_state = "2" else - if(volume > CELL_VOLUME*0.4) - icon_state = "2" + icon_state = "1" + + if(temperature > location.max_fire_temperature_sustained) + location.max_fire_temperature_sustained = temperature + + if(temperature > location.heat_capacity) + location.to_be_destroyed = 1 + /*if(prob(25)) + location.ReplaceWithSpace() + return 0*/ + return 1 + + +/obj/effect/hotspot/New() + ..() + dir = pick(cardinal) + return + + +/obj/effect/hotspot/Del() + if (istype(loc, /turf/simulated)) + var/turf/simulated/T = loc + loc:active_hotspot = null + + if(T.to_be_destroyed) + var/chance_of_deletion + if (T.heat_capacity) //beware of division by zero + chance_of_deletion = T.max_fire_temperature_sustained / T.heat_capacity * 8 //there is no problem with prob(23456), min() was redundant --rastaf0 else - icon_state = "1" + chance_of_deletion = 100 + if(prob(chance_of_deletion)) + T.ChangeTurf(/turf/space) + else + T.to_be_destroyed = 0 + T.max_fire_temperature_sustained = 0 - if(temperature > location.max_fire_temperature_sustained) - location.max_fire_temperature_sustained = temperature - - if(temperature > location.heat_capacity) - location.to_be_destroyed = 1 - /*if(prob(25)) - location.ReplaceWithSpace() - return 0*/ - return 1 - - - New() - ..() - dir = pick(cardinal) - return - - - Del() - if (istype(loc, /turf/simulated)) - var/turf/simulated/T = loc - loc:active_hotspot = null - - if(T.to_be_destroyed) - var/chance_of_deletion - if (T.heat_capacity) //beware of division by zero - chance_of_deletion = T.max_fire_temperature_sustained / T.heat_capacity * 8 //there is no problem with prob(23456), min() was redundant --rastaf0 - else - chance_of_deletion = 100 - if(prob(chance_of_deletion)) - T.ChangeTurf(/turf/space) - else - T.to_be_destroyed = 0 - T.max_fire_temperature_sustained = 0 - - loc = null - ..() - return + loc = null + ..() + return diff --git a/code/game/atoms.dm b/code/game/atoms.dm index f23d6c09b49..4a59c4a7a8c 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -233,6 +233,9 @@ its easier to just keep the beam vertical. /atom/proc/blob_act() return +/atom/proc/fire_act() + return + /atom/proc/attack_hand(mob/user as mob) return diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index cd0c9ef1d7e..91a48884fb7 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -127,15 +127,17 @@ else if(istype(M, /mob/living/carbon/monkey) || istype(M, /mob/living/carbon/alien/humanoid)) var/mob/living/carbon/george = M //they can only hold things :( - if(george.get_active_hand() && (istype(george.get_active_hand(), /obj/item/weapon/card/id) || istype(george.get_active_hand(), /obj/item/device/pda)) && src.check_access(george.get_active_hand())) + if(src.check_access(george.get_active_hand())) return 1 return 0 -/obj/proc/check_access(obj/item/weapon/card/id/I) +/obj/item/proc/GetAccess() + return list() - if (istype(I, /obj/item/device/pda)) - var/obj/item/device/pda/pda = I - I = pda.id +/obj/item/proc/GetID() + return null + +/obj/proc/check_access(obj/item/I) if(!src.req_access && !src.req_one_access) //no requirements return 1 @@ -145,14 +147,14 @@ var/list/L = src.req_access if(!L.len && (!src.req_one_access || !src.req_one_access.len)) //no requirements return 1 - if(!I || !istype(I, /obj/item/weapon/card/id) || !I.access) //not ID or no access + if(!I) return 0 for(var/req in src.req_access) - if(!(req in I.access)) //doesn't have this access + if(!(req in I.GetAccess())) //doesn't have this access return 0 if(src.req_one_access && src.req_one_access.len) for(var/req in src.req_one_access) - if(req in I.access) //has an access from the single access list + if(req in I.GetAccess()) //has an access from the single access list return 1 return 0 return 1 diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 684e6428f59..fc4d9334344 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -368,7 +368,7 @@ var/global/datum/controller/occupations/job_master if(locate(/obj/item/device/pda,H))//I bet this could just use locate. It can --SkyMarshal var/obj/item/device/pda/pda = locate(/obj/item/device/pda,H) pda.owner = H.real_name - pda.ownjob = H.wear_id.assignment + pda.ownjob = C.assignment pda.name = "PDA-[H.real_name] ([pda.ownjob])" return 1 diff --git a/code/game/machinery/bots/ed209bot.dm b/code/game/machinery/bots/ed209bot.dm index fe2590f93e2..e95457cd7e4 100644 --- a/code/game/machinery/bots/ed209bot.dm +++ b/code/game/machinery/bots/ed209bot.dm @@ -705,22 +705,17 @@ Auto Patrol: []"}, if(istype(perp:belt, /obj/item/weapon/gun/energy/laser/bluetag)) threatcount += 2 - if (src.check_records) + if(src.check_records) for (var/datum/data/record/E in data_core.general) var/perpname = perp.name - if (perp:wear_id) - var/obj/item/weapon/card/id/id = perp:wear_id - if(istype(perp:wear_id, /obj/item/device/pda)) - var/obj/item/device/pda/pda = perp:wear_id - id = pda.id - if (id) + if(perp.wear_id) + var/obj/item/weapon/card/id/id = perp.wear_id.GetID() + if(id) perpname = id.registered_name - else - var/obj/item/device/pda/pda = perp:wear_id - perpname = pda.owner - if (E.fields["name"] == perpname) + + if(E.fields["name"] == perpname) for (var/datum/data/record/R in data_core.security) - if ((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*")) + if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*")) threatcount = 4 break diff --git a/code/game/machinery/bots/secbot.dm b/code/game/machinery/bots/secbot.dm index 3470c1e7568..59f3e0341bd 100644 --- a/code/game/machinery/bots/secbot.dm +++ b/code/game/machinery/bots/secbot.dm @@ -621,16 +621,11 @@ Auto Patrol: []"}, if(src.check_records) for (var/datum/data/record/E in data_core.general) var/perpname = perp.name - if(perp:wear_id) - var/obj/item/weapon/card/id/id = perp:wear_id - if(istype(perp:wear_id, /obj/item/device/pda)) - var/obj/item/device/pda/pda = perp:wear_id - id = pda.id + if(perp.wear_id) + var/obj/item/weapon/card/id/id = perp.wear_id.GetID() if(id) perpname = id.registered_name - else - var/obj/item/device/pda/pda = perp:wear_id - perpname = pda.owner + if(E.fields["name"] == perpname) for (var/datum/data/record/R in data_core.security) if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*")) diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index f31e1a1a51d..23be1f83f09 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -384,7 +384,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() updateUsrDialog() if(screen == 10) var/obj/item/weapon/card/id/ID = O - if (access_RC_announce in ID.access) + if (access_RC_announce in ID.GetAccess()) announceAuth = 1 else announceAuth = 0 diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 631137f6f4e..e76e1520935 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -229,6 +229,15 @@ var/global/list/obj/item/device/pda/PDAs = list() else return 0 +/obj/item/device/pda/GetAccess() + if(id) + return id.GetAccess() + else + return ..() + +/obj/item/device/pda/GetID() + return id + /obj/item/device/pda/MouseDrop(obj/over_object as obj, src_location, over_location) var/mob/M = usr if((!istype(over_object, /obj/screen)) && !M.restrained() && !M.stat && can_use()) diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 4e229dba336..fd11c202420 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -79,13 +79,11 @@ src.add_fingerprint(user) return -/obj/item/weapon/card/id/attack_hand(mob/user as mob) - var/obj/item/weapon/storage/wallet/WL - if( istype(loc, /obj/item/weapon/storage/wallet) ) - WL = loc - ..() - if(WL) - WL.update_icon() +/obj/item/weapon/card/id/GetAccess() + return access + +/obj/item/weapon/card/id/GetID() + return src /obj/item/weapon/card/id/verb/read() set name = "Read ID Card" diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 0ba5e9660bc..aaa9f7ab5ff 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -226,7 +226,7 @@ //The stop_warning parameter will stop the insertion message from being displayed. It is intended for cases where you are inserting multiple items at once, //such as when picking up all the items on a tile with one click. /obj/item/weapon/storage/proc/handle_item_insertion(obj/item/W as obj, prevent_warning = 0) - if(!istype(W)) return + if(!istype(W)) return 0 if(usr) usr.u_equip(W) usr.update_icons() //update our overlays @@ -251,10 +251,11 @@ if(usr.s_active) usr.s_active.show_to(usr) update_icon() + return 1 //Call this proc to handle the removal of an item from the storage item. The item will be moved to the atom sent as new_target /obj/item/weapon/storage/proc/remove_from_storage(obj/item/W as obj, atom/new_location) - if(!istype(W)) return + if(!istype(W)) return 0 if(istype(src, /obj/item/weapon/storage/fancy)) var/obj/item/weapon/storage/fancy/F = src @@ -284,6 +285,7 @@ W.maptext = "" W.on_exit_storage(src) update_icon() + return 1 //This proc is called when you want to place an item into the storage item. /obj/item/weapon/storage/attackby(obj/item/W as obj, mob/user as mob) diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm index 7a65764b1b3..7c3e70420fd 100644 --- a/code/game/objects/items/weapons/storage/wallets.dm +++ b/code/game/objects/items/weapons/storage/wallets.dm @@ -24,49 +24,66 @@ "/obj/item/weapon/reagent_containers/dropper", "/obj/item/weapon/screwdriver", "/obj/item/weapon/stamp") + slot_flags = SLOT_ID - attackby(obj/item/A as obj, mob/user as mob) - ..() - update_icon() - return - - update_icon() - for(var/obj/item/weapon/card/id/ID in contents) - switch(ID.icon_state) - if("id") - icon_state = "walletid" - return - if("silver") - icon_state = "walletid_silver" - return - if("gold") - icon_state = "walletid_gold" - return - if("centcom") - icon_state = "walletid_centcom" - return - icon_state = "wallet" + var/obj/item/weapon/card/id/front_id = null +/obj/item/weapon/storage/wallet/remove_from_storage(obj/item/W as obj, atom/new_location) + . = ..(W, new_location) + if(.) + if(W == front_id) + front_id = null + update_icon() - proc/get_id() - for(var/obj/item/weapon/card/id/ID in contents) - if(istype(ID)) - return ID +/obj/item/weapon/storage/wallet/handle_item_insertion(obj/item/W as obj, prevent_warning = 0) + . = ..(W, prevent_warning) + if(.) + if(!front_id && istype(W, /obj/item/weapon/card/id)) + front_id = W + update_icon() -/obj/item/weapon/storage/wallet/random - New() - ..() - var/item1_type = pick( /obj/item/weapon/spacecash/c10,/obj/item/weapon/spacecash/c100,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c20,/obj/item/weapon/spacecash/c200,/obj/item/weapon/spacecash/c50, /obj/item/weapon/spacecash/c500) - var/item2_type - if(prob(50)) - item2_type = pick( /obj/item/weapon/spacecash/c10,/obj/item/weapon/spacecash/c100,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c20,/obj/item/weapon/spacecash/c200,/obj/item/weapon/spacecash/c50, /obj/item/weapon/spacecash/c500) - var/item3_type = pick( /obj/item/weapon/coin/silver, /obj/item/weapon/coin/silver, /obj/item/weapon/coin/gold, /obj/item/weapon/coin/iron, /obj/item/weapon/coin/iron, /obj/item/weapon/coin/iron ) +/obj/item/weapon/storage/wallet/update_icon() - spawn(2) - if(item1_type) - new item1_type(src) - if(item2_type) - new item2_type(src) - if(item3_type) - new item3_type(src) \ No newline at end of file + if(front_id) + switch(front_id.icon_state) + if("id") + icon_state = "walletid" + return + if("silver") + icon_state = "walletid_silver" + return + if("gold") + icon_state = "walletid_gold" + return + if("centcom") + icon_state = "walletid_centcom" + return + icon_state = "wallet" + + +/obj/item/weapon/storage/wallet/GetID() + return front_id + +/obj/item/weapon/storage/wallet/GetAccess() + var/obj/item/I = GetID() + if(I) + return I.GetAccess() + else + return ..() + +/obj/item/weapon/storage/wallet/random/New() + ..() + var/item1_type = pick( /obj/item/weapon/spacecash/c10,/obj/item/weapon/spacecash/c100,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c20,/obj/item/weapon/spacecash/c200,/obj/item/weapon/spacecash/c50, /obj/item/weapon/spacecash/c500) + var/item2_type + if(prob(50)) + item2_type = pick( /obj/item/weapon/spacecash/c10,/obj/item/weapon/spacecash/c100,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c20,/obj/item/weapon/spacecash/c200,/obj/item/weapon/spacecash/c50, /obj/item/weapon/spacecash/c500) + var/item3_type = pick( /obj/item/weapon/coin/silver, /obj/item/weapon/coin/silver, /obj/item/weapon/coin/gold, /obj/item/weapon/coin/iron, /obj/item/weapon/coin/iron, /obj/item/weapon/coin/iron ) + + spawn(2) + if(item1_type) + new item1_type(src) + if(item2_type) + new item2_type(src) + if(item3_type) + new item3_type(src) \ No newline at end of file diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 3de171a5b74..3ba15e13214 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -87,12 +87,10 @@ if(!C) continue var/perpname = "wot" if(perp.wear_id) - C.images += image(tempHud,perp,"hud[ckey(perp:wear_id:GetJobName())]") - if(istype(perp.wear_id,/obj/item/weapon/card/id)) - perpname = perp.wear_id:registered_name - else if(istype(perp.wear_id,/obj/item/device/pda)) - var/obj/item/device/pda/tempPda = perp.wear_id - perpname = tempPda.owner + var/obj/item/weapon/card/id/I = perp.wear_id.GetID() + if(I) + C.images += image(tempHud,perp,"hud[ckey(I.GetJobName())]") + perpname = I.registered_name else perpname = perp.name C.images += image(tempHud,perp,"hudunknown") diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 151ec807f06..4abb3db83f6 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -393,10 +393,9 @@ item.throw_at(target, item.throw_range, item.throw_speed) -/mob/living/carbon/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > CARBON_LIFEFORM_FIRE_RESISTANCE) - adjustFireLoss(CARBON_LIFEFORM_FIRE_DAMAGE) +/mob/living/carbon/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) ..() + bodytemperature = max(bodytemperature, BODYTEMP_HEAT_DAMAGE_LIMIT+10) /mob/living/carbon/can_use_hands() if(handcuffed) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 8433a15bdf3..c2f6a904b69 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -270,11 +270,8 @@ var/criminal = "None" if(wear_id) - if(istype(wear_id,/obj/item/weapon/card/id)) - perpname = wear_id:registered_name - else if(istype(wear_id,/obj/item/device/pda)) - var/obj/item/device/pda/tempPda = wear_id - perpname = tempPda.owner + var/obj/item/weapon/card/id/I = wear_id.GetID() + perpname = I.registered_name else perpname = name diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 08bf79e12e0..19e97de3fdc 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -495,15 +495,26 @@ if(istype(usr, /mob/living/carbon/human)) var/mob/living/carbon/human/H = usr if(istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/sunglasses/sechud)) + + /* // Uncomment if you want sechuds to need security access + var/allowed_access = 0 + if(H.wear_id) + var/list/access = H.wear_id.GetAccess() + if(access_security in access) + allowed_access = 1 + return + + if(!allowed_access) + H << "ERROR: Invalid Access" + return + */ + var/perpname = "wot" var/modified = 0 if(wear_id) - if(istype(wear_id,/obj/item/weapon/card/id)) - perpname = wear_id:registered_name - else if(istype(wear_id,/obj/item/device/pda)) - var/obj/item/device/pda/tempPda = wear_id - perpname = tempPda.owner + var/obj/item/weapon/card/id/I = wear_id.GetID() + perpname = I.registered_name else perpname = src.name diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 4a839bd050d..bb04cfa392d 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -35,7 +35,7 @@ var/obj/item/glasses = null var/obj/item/head = null var/obj/item/ears = null - var/obj/item/weapon/card/id/wear_id = null + var/obj/item/wear_id = null var/obj/item/r_store = null var/obj/item/l_store = null var/obj/item/s_store = null diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index c227342adcd..6f2730d8be2 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1105,15 +1105,10 @@ if(!druggy) see_invisible = SEE_INVISIBLE_LIVING else if(istype(glasses, /obj/item/clothing/glasses/hud)) - var/obj/item/clothing/glasses/hud/health/O = glasses - - if(istype(O, /obj/item/clothing/glasses/hud/health)) - O.process_hud(src) - if(!druggy) see_invisible = SEE_INVISIBLE_LIVING - - else if(istype(O, /obj/item/clothing/glasses/hud/security)) - O.process_hud(src) - if(!druggy) see_invisible = SEE_INVISIBLE_LIVING + var/obj/item/clothing/glasses/hud/O = glasses + O.process_hud(src) + if(!druggy) + see_invisible = SEE_INVISIBLE_LIVING else see_invisible = SEE_INVISIBLE_LIVING else diff --git a/html/changelog.html b/html/changelog.html index b088e098b9f..c90e3aaa781 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -48,6 +48,15 @@ Stuff which is in development and not yet visible to players or just code relate should be listed in the changelog upon commit tho. Thanks. --> +