BDCFF extension for Emerald Mines

(and various Emerald Mines / Boulder Dash clones)
Proposal V0.15
February 24 2008
This is an old version restored from an even older backup, so it's probably not as complete as it once was. Preserved for historical purposes.

Based on the Crazy Dream 9 proposal, which is based on Tim Stridmann's BDCFF proposal v0.32.

Contributing to this proposal: LogicDeLuxe, HerzAusGold, David Tritscher, cirix, Steffest
Current duscussion thread for this proposal is

Currently this proposal supports all elements from the various C64 Boulderdash engines and all elements from the various (amiga) Emerald Mine engines.
It allso provides a framework (at least) to extend it for other elements occuring in other engines/clones.

StructurePropertiesMap codesSubsets
All properties are optional.
Names are not case sensitive.
An engine should ignore unknown properties and switch to default values if a property is absent.
Game and Cave Properties
ID Name Description Default value Actions
1AcidPropertiesElement to eat, growth propability DIRT 0.03 [edit]
4AmoebaGrowthProbAmoeba slow (and fast) growth probability (two or one number) 0.03 and 0.25 [edit]
5AmoebaThresholdThe percentage of the cave the amoeba is allowed to occupy before turning to boulders (number). 0.227 [edit]
6AmoebaTimeAmoeba slow growth time (number)  [edit]
7AmoebaTypeBD1: Timer starts immediately (even before the cave start signal).
BD2: Timer starts at the first possibility of growing. (default)
1stB: Like BD2, except the timer does not start before the cave start signal. 
8AuthorCave (or game) author (string) for cave default equals game author [edit]
12BiterPropertiesDelay; Element to eat 0 DIAMOND [edit]
11BladderPropertiesColides with DUMMY [edit]
13BonusLifeBonus life score (number, default = 500)  [edit]
14BonusTimeReward for collecting a clock  [edit]
15BorderPropertiesBD1: When elements move to upper or lower border, their delay state become permanent. (default if Levels=5)
PLCK: Like BD1, except that the upper and lower borders aren't scanned at all. (default if Levels=1)
1stB: Upper and lower border are wrapped around. Detection is implemented through copying the opposided lines. Movement is redirected. If the active guy steps off the border, the cave is scrolled to the other side and the game is paused during that time.
perfect: Like 1stB, except the detection is also done through redirection. (Has no line shifting and no side effects)
wraparound: The cave scrolls endlessly instead of back, ie. you won't see any borders.
Object-instructions may wraparound as well. If they do, the type must be specified beforehead. In case of BD1 or PLCK, the structures are truncated at the upper and lower borders and line shifted at the side borders. 
65BugValuePoints gained when a Bug is destroyed  [edit]
16CaveDelayUsed in BoulderDash Construction Kit engine (CaveDelay and FrameTime can not be combined)  [edit]
17CaveMaxTimeIf you reach that number by collecting too many clocks, the time overflows to 0. (default=999)  [edit]
18CaveSizeDefault cave width and height (two numbers, default values = 40 and 22). Available only in [game] section.  [edit]
19CaveTimeCave total times for each level (five - or one - numbers). Available only in [cave] section  [edit]
20CharsetCharacter set, for example "space" for BD3 "original" [edit]
62CrystalValuePoints gained when a Crystal is collected  [edit]
21DateDate of cave (or game) creating (string, 2002 or 2002-10 or 2002-10-31 format)  [edit]
22DescriptionCave (or game) description (string)  [edit]
23DiagonalMovementThe guy can move diagonal. (default=false)  [edit]
24DiamondsRequiredNumber of diamonds required to successfully finish the cave for each level (five - or one - numbers). Available only in [cave] section  [edit]
25DiamondValueDiamondValue  [edit]
60DiamondValuePoints gained when a Diamond is collected  [edit]
27DummyPropertiesCan collect diamonds (boolean), dropped boulder cause penalty (boolean), may be destroyed (boolean). (default values=false false true)
(The dummy is also known as a Voodoo doll) 
68DynamiteValuePoints gained when a Dynamite is collected  [edit]
28Effectelement1 element2
This applies a Lord Diego-Effect, except it is much more general. There may be several Effect attributes.
Replaces element 1 with element 2 in the effect table. 
59EmeraldValuePoints gained when an Emerald is collected  [edit]
29EnemyDirectiondirection [type [time]] (time is a number, default=forward BD1)
direction can be forward or backward
type can be
BD1: never change direction
1stB: change direction every time seconds, first change occours at the start signal
CrLi: like 1stB, except the direction does not change at the start signal. 
3EngineSpecific Engine this file is intended for. Depends of the Gametype  [edit]
30FingerprintIs used to validate a demo recording or a highscore table which makes it authentic for competition purposes.
For validating a demo recording, the Fingerprint is placed at the end in the [demo]-section. This is a CRC of the Executable, the demofile (if it is not part of the BDCFF-file) and the [game]-section including all its [cave]-sections. Nested existing other [demo]-sections, [highscore]-section and the Fingerprint itself are excluded from the CRC.
For validating a highscore table, the Fingerprint is placed in the end of the [highscore]-section. This is a CRC of the Executable and the BDCFF-file, but all [demo]-sections are excluded from the CRC. 
31FontsetFont set, for example "space" for BD3 "original"  [edit]
72ForcefieldTimeThe time a forcefield keeps active after collecting  [edit]
32FrameTimeDefault=200; 200 ms per frame, ie 5 frames per second. (CaveDelay and FrameTime can not be combined)  [edit]
70GateWheelTimeThe time a timeGatewheel keeps spinning after activation  [edit]
10GraphicSetName of the Graphicset or Spriteset to be used The default graphics of the engine [edit]
33HatchingDelayThe guy's hatching delay. This is the number of scanning frames inbox will be flashing before the guy's hatching. (number, default=21)  [edit]
34InitialBorderInitial border element (element name). This element is used to draw the border. Default is STEELWALL  [edit]
35InitialFillInitial fill element (element name). This element is used to fill entire field, except for the border . Default is DIRT  [edit]
36InOutBoxTypeBD1: Alternate between full and empty on each appearance (if there is an even number of active In/Outboxes, they won't flash)
1stB: (default) Like BD1, except flashing is enforced by ensuring the first accouring In/Outbox has a different state on each scan.
synchronious: All In/Outboxes have a common state alternating on each scan. This is common behavior in many Boulder Dash Clones.
The guy can only appear when its Inbox is in its empty state. Any Inbox in its filled state has to wait to "flash" to its empty state first. Hence the Inbox behavior has influence on the pattern several guys appear. 
37IntermissionIs intermission (boolean, default value = false). Available only in [cave] section  [edit]
38IntermissionPropertiesCan scroll, immediate bonus life, bonus life when solved (booleans, default values = false true false).  [edit]
39IntermissionSizeDefault intermission cave width and height (two numbers, default values = 20 and 12). Available only in [game] section  [edit]
57KeyValuePoints gained when a Key is collected  [edit]
40LevelsDefault number of levels (number, default = 1). Available only in [game] section  [edit]
42LivesInitial number of lives [maximum number of lives] (numbers, default = 3 9). Available only in [game] section  [edit]
43MagicWallTimeMagic wall milling time (number)  [edit]
44MagicWallTypeBD1: (default if Levels=5) when a boulder falls into it, the caves scan restarts from top left. Amoebas beyond that point aren't count. Amoeba can be converted because of this.
BD2: (default if Levels=1) no special timing, does not care about amoeba.
1stBN: like BD2, except timer does not start before the cave start signal (however, the wall can be activated before that point.).
1stBA: like 1stBN, but does convert amoeba (without the BD1 behavior) 
74MusicSetName of the Musicset or Backgroundmusic to be used (if present) The default music of the engine [edit]
45NameCave (or game) title (string)  [edit]
73Note1string: content of note 1..n  [edit]
63NutValuePoints gained when a Nut is cracked  [edit]
71PacmanScorePoints gained when a Pacman is destroyed  [edit]
61PearlValuePoints gained when a Pearl is collected  [edit]
46PenaltyTimeTime discount when a dummy is destroyed  [edit]
47PushingBoulderProbProbability normal and with sweet collected. (number [number], default = 0.25, 1.0)  [edit]
48RandomFillPseudo-randomly placed elements (four or less pairs of element name and it's probability). This info is used to pseudo-randomly fill entire field. Available only in [cave] section.  [edit]
49RandSeedRandom generator seed values for corresponding pseudo-randomly placed elements (five numbers)  [edit]
67RobotValuePoints gained when a Robot is destroyed  [edit]
55ScrollpropertiesBD1: Scroll per step.
1stB: Follow the first guy in Cave. (default) 
50SelectableIs selectable (boolean, default value = true). Available only in [cave] section  [edit]
51SizeCurrent cave width and height (two numbers, default values correspond to game info). Available only in [cave] section. Can range from 20 12 up to 128 128.  [edit]
52SlimePermeabilitySlime probabilitiy of penetrating (float number, default=1.0)  [edit]
53SlimePermeabilityC64Slime permeability C64 style (number, 8 bit all with equal value, default=0)  [edit]
75SoundSetName of the Soundset or SoundFX to be used (if present) The default SoundFX of the engine [edit]
66SpaceShipValuePoints gained when a SpaceShip is destroyed  [edit]
58TimeValuePoints gained for the remaining time when exiting  [edit]
69WheelTimeThe time a Robotwheel keeps spinning after activation  [edit]
56WWWLink to author's webpage  [edit]
64YamValuePoints gained when a Yam is destroyed  [edit]
Add new property