I am try to build a way to handle fire, like in a crafting system. So, I wrote something that handles:
heat, dryness, humidity, type of wood (different burning time), and finally carbonize to other matter (coal or ash, dipends on volume of the burned object).
WOOD matter has a "critic heat" level that if overpassed can start a combustion process. The dryness percentage determines how much time we need to make the object starting the combustion (when HEAT reaches the "critic" level).
Fire is an object that "incorporates" other objects (becomes the father in the childnodes). Every burning object inherits the type "fire" with all his scripts . Furthermore the combustion process spreads to all the objects that have the same "burning" properties script and are inside the same room (this is dangerous!)... in this test we have a fireplace so it's safe!
The bigger the object is (see volume attribute) the longer the combustion lasts.
The wetter the object is (see WET attribute, in %) the longer it takes to start burning.
The burning object loses volume every turn.
When the combustion finally stops:
In future, the Weather lib available in this forum could affect the dryness of a wooden object. So it will be more difficult to set up a campfire after a raining day... :-D
This is a very "simplified" idea of the real combustion process. Could be something useful to make some type of crafting lib.
Also, the "clock", "liquid" and "stackable" library available in the Libraries and Code Samples of this forum are included.
The Liquid lib is included to develop (in the future) something to interact with fire, to stop the burning process. Water...
test_fire_and_combustion.aslx (Main file to run)
Clock_lib.aslx (from this Code and Samples Forum, modified to the Warhammer Fantasy Roleplay imperial calendar system... Yes, initially I wanted to develop a WFRP text adventure game...)
library_fire.aslx (the main fire library)
LiquidLib.aslx (from this Code and Samples Forum, included, but still not used, for the purpose to interact liquids with fire)
StackLib.aslx (from this Code and Samples Forum, to stack objects, you can stack coal if you create a stacker object for coal )
Utility.aslx (stores some utlity function)
Download from here:
There are a lot of code loggers that I put to monitor the attribute values.
Start the main file and try this commands in sequence:
I divided the combustion process into three phases:
HEATING / DRYING
The heat level starts to increase turn by turn, even the dryness value increase , so the chunk now is IN the fire and heating but not completely burning
The heat level reaches the CRITIC heat value, so the chunk is burning. This also changes the volume of the object, for example If you stop the burning process (at this moment it's impossible, I didn't wrote any code to stop the fire) you will notice that the chunk has less VOLUME value than before.
COAL / ASH
The code replaces the chunk with coal, taken from a REPOSITORY of objects.
The REPOSITORY has the purpose of storing the prototype objects to be cloned.
After some turns in the combustion process, you will notice:
Some ash inside the tinderbox, that once was the woodstick.
Some coal inside the fireplace, that once was the wood chunk.
You don't need to set fire to all three logs, if you want. Just do it for one and the combustion process will spread to all the contents of the fireplace.
Some wood chunks burn before others (depending on the type of wood) and therefore you will realize that by setting fire to the most durable one, you will be sure that the fire will burn all three. The Holm chunk is the most durable one.
This is a very very very alpha version so I need some encouragement.
I'm cutting and pasting my original reply here.
Fire is my most-developed part of my template (aside from a world clock time and regions/ambience).
What you want to look at are the class libraries for fire, and you can see how they work by:
Start the world template. Wait about a minute for the sun to come up (was in the middle of testing world time)
Then try the following:
get match You pick it up. light match The match ignites! light candle with match The candle ignites! douse candle You douse the candle. light candle with match The candle ignites!
Then, just stare at the screen for a second, then the following happens:
The match burns out.
There's nothing left of the match.
And then wait even longer, the following happens:
There's nothing left of the candle.
My goal was different than yours. I wasn't worried about crafting, just how fire interacts with objects.
My objects class for fire means:
an object can catch fire or cannot
an object can be a source of fire (a match can light) or cannot (a candle must get lit)
different objects can burn once, ever, and that's it (a match) or be doused and re-lit, until it reaches maximum burn consumption
Added a turnscript "Global Heat", to reproduce the natural loss of HEAT after the combustion. Something HOT slowly go back to its natural climatic temperature. I set it to 25°, but you can set it the number you want, the WEATHER library could be helpful to this scope.
Yes, this is a different approach. My lib is for a turn based game, so I tried to avoid timers.
Anyway feel free to use anything you want from my code, hoping this could inspire you.
I am trying to find the original "Portable Lanten" code, a long ago once posted in this forum. Where can I find it? This forum has changed a bit and now it's hard to find some old posts...
Thank you for the reply.
Is this what you're looking for;
Thank you, but what I mean was a page with a code (and a turnscript).
It seems it's disappeared. Anybody remember what I'm referring to?
I found it.
It was changed from "portable lantern" and integrated with this new thread!