2.10.0 - currently ------------------ - unknown section names are ignored - unknown keys in sections are ignored - missing required names/keys trigger warning and exit - invalid values trigger warning and exit - unknown table values trigger warning - exit will trigger abort of game - warnings without exit will cause rejection of level in network game todo: - disallow unknown section names and keys - make sections without required keys optional section names ------------- atomInfo info - required atomPlayer player - required atomShrink shrink - required atomScrambleDraw scrambleDraw - optional atomScrambleDel scrambleDel - optional atomFunc func - required atomBombs bomb - required atomGraphics graphics - required atomMap map - required [info] section keys ------------------- atomGameMode gameMode - required, string mask R23456STDL - at least one of 23456 set [player] section keys --------------------- atomBombs bombs - required, int - initial bomb count atomRange - required, int - initial bomb range atomRecLives - optional, int, default=0 - recommended lives count for level atomSpecialBombs - optional, int, default=0 - initial number of special bombs atomReviveVirus - optional, healthTable, default=Healthy - virus on revival atomInitVirus - optional, healthTable, default=Healthy - initial virus atomInitExtra - optional, initFlagsTable, default=0 - initial extra for players atomReviveExtra - optional, reviveFlags, default=0 - extras on revival atomArrayPos0[x] - x=0..MAX_PLAYER-1 - required(at least one x), EntryPos - possible player start positions [shrink] section keys --------------------- atomType - optional, shrinkTable, default=ST_Void - shrink type of level [scrambleDraw, scrambleDel] section keys ---------------------------------------- atomTime time - optional, float, default=GAME_TIME+SCRAMBLE_RAISE+1 - gametime at which to draw/delete new blocks - if missing, rest of section is ignored atomNumBlocks numBlocks - required, int - count of positions that follow atomArrayPos000[x] - required (numBlocks valid positions), EntryPos - positions at which to draw/delete blocks [func] section keys ------------------- atomExtra - optional, extraTable, default=SpecialExtraVoid atomKey - optional, keyTable, default=SpecialKeyVoid [bombs] section keys -------------------- atomBombClick - optional, bombClickTable, default=BombClickNone atomWallClick - optional, bombClickTable, default=BombClickNone atomPlayerClick - optional, bombClickTable, default=BombClickNone atomDirection - optional, bombDirTable, default=BombClickNone atomFuseTime - optional, fuseTimeTable, default=BOMB_TIME atomHaunt - optional, hauntFactorTable, default=HAUNT_NONE atomDefault - optional, bombTypeTable, default=BMTnormal atomSpecial - optional, bombTypeTable, default=BMTnormal atomHidden - optional, bombTypeTable, default=BMTnormal atomNastyCeil - optional, int, default=??? atomNastyGentle - optional, int, default=0 atomNastyRange - optional, int, default=0 atomNextNasty - optional, int, default=1 [graphics] section keys ----------------------- atomArrayBlock00[x] - x=0...MAX_BLOCK-1 - required, string - either one word (filename, invalid colors) - or four words (filename, fg, bg, add) [map] section keys ------------------ atomExtraDistribution - optional, distribExtraTable, default=DEnone atomProbBomb - optional, int, default=0 atomProbRange - optional, int, default=0 atomProbVirus - optional, int, default=0 atomProbSpecial - optional, int, default=0 atomProbHidden - optional, int, default=0 atomSlowFlame - optional, int, default=1 atomArrayRow000[x] - x=0..MAZE_H-1 - required, string with at least MAZE_W chars in _BRXbrsqveV healthTable ----------- static DBToInt healthTable[] = { { "bomb", (int) IllBomb }, { "empty", (int) IllEmpty }, { "healthy", (int) Healthy }, { "invisible", (int) IllInvisible }, { "malfunction", (int) IllMalfunction }, { "mini", (int) IllMini }, { "reverse", (int) IllReverse }, { "reverse2", (int) IllReverse2 }, { "run", (int) IllRun }, { "slow", (int) IllSlow }, { "teleport", (int) IllTeleport }, { NULL, -1 }, }; initFlagsTable -------------- static DBToInt initFlagsTable[] = { { "airpump", LF_Airpump }, { "bfarter", LF_Bfart }, { "choicebombtype", LF_Choice }, /* skywalker */ { "cloak", LF_Cloak }, { "daleif", LF_Daleif }, { "electrify", LF_Electrify }, { "farter", LF_Fart }, /* skywalker */ { "frogger", LF_Frogger }, /* skywalker */ { "jump", LF_Jump }, /* skywalker */ { "kick", LF_Kick }, { "morph", LF_Morph }, { "none", 0 }, { "phantom", LF_Phantom}, { "rc", LF_RC }, { "revive", LF_Revive }, { "snipe", LF_Snipe }, /** Skywalker **/ { "stop", LF_Stop}, { "sucker", LF_Suck }, { "teleport", LF_Teleport }, { "through", LF_Through }, { NULL, -1 }, }; reviveFlagsTable ---------------- static DBToInt reviveFlagsTable[] = { { "airpump", RF_Airpump }, { "bfarter", RF_Bfart }, { "choicebombtype", RF_Choice }, /* skywalker */ { "cloak", RF_Cloak }, { "daleif", RF_Daleif }, { "electrify", RF_Electrify }, { "farter", RF_Fart }, /* skywalker */ { "frogger", RF_Frogger }, /* skywalker */ { "jump", RF_Jump }, /* skywalker */ { "kick", RF_Kick }, { "morph", RF_Morph }, { "none", 0 }, { "phantom", RF_Phantom}, { "rc", RF_RC }, { "revive", RF_Revive }, { "snipe", RF_Snipe }, /** Skywalker **/ { "stop", RF_Stop}, { "sucker", RF_Suck }, { "teleport", RF_Teleport }, { "through", RF_Through }, { NULL, -1 }, }; shrinkTable ----------- static DBToInt shrinkTable[] = { { "circle", ST_Circle }, { "compound", ST_Compound }, { "compound2F", ST_Compound2F }, { "compoundExtra", ST_CompoundExtra }, { "compoundF", ST_CompoundF }, { "compoundSolid", ST_CompoundSolid }, { "constrictWave", ST_ConstrictWave }, { "diag", ST_Diag }, { "down", ST_Down }, { "downF", ST_DownF }, { "earlySpiral", ST_EarlySpiral }, { "horizontal", ST_Horiz }, { "istyCompound2F", ST_IstyCompound2F }, { "istySpiral", ST_IstySpiral3 }, { "lazyCompoundF", ST_LazyCompoundF }, { "move", ST_Move }, { "outwardExtra", ST_OutwardExtra }, { "outwardSpiral", ST_OutwardSpiral }, { "quad", ST_Quad }, { "savageCompound", ST_SavageCompound }, { "speedSpiral", ST_SpeedSpiral }, { "spiral", ST_Spiral }, { "spiral23", ST_Spiral23 }, { "spiral3", ST_Spiral3 }, { "spiral5", ST_Spiral5 }, { "spiralLego", ST_SpiralLego }, { "spiralPlus", ST_SpiralPlus }, { "void", ST_Void }, { NULL, -1 }, }; extraTable ---------- static DBToData extraTable[] = { { "air", (void *) SpecialExtraAir }, { "bfarter", (void *) SpecialExtraBfarter}, /* skywalker */ { "choicebombtype", (void *) SpecialExtraChoice }, /* skywalker */ { "cloak", (void *) SpecialExtraCloak }, { "daleif", (void *) SpecialExtraDaleif }, { "electrify", (void *) SpecialExtraElectrify }, { "evilgrail", (void *) SpecialExtraEvilGrail}, { "farter", (void *) SpecialExtraFarter}, /* skywalker */ { "frogger", (void *) SpecialExtraFrogger }, /* skywalker */ { "ghost", (void *) SpecialExtraGhost }, /* skywalker */ { "holyGrail", (void *) SpecialExtraHolyGrail }, { "igniteAll", (void *) SpecialExtraIgniteAll }, { "invincible", (void *) SpecialExtraInvincible }, { "jump", (void *) SpecialExtraJump }, /* skywalker */ { "junkie", (void *) SpecialExtraJunkie }, { "kick", (void *) SpecialExtraKick }, { "life", (void *) SpecialExtraLife }, { "longStunned", (void *) SpecialExtraLongStunned }, { "mayhem", (void *) SpecialExtraMayhem }, { "morph", (void *) SpecialExtraMorph }, { "multiple", (void *) SpecialExtraMultiple }, { "phantom", (void *) SpecialExtraPhantom }, { "poison", (void *) SpecialExtraPoison }, { "rc", (void *) SpecialExtraRC }, { "revive", (void *) SpecialExtraRevive }, { "slow", (void *) SpecialExtraSlow }, { "snipe", (void *) SpecialExtraSnipe }, /* skywalker */ { "specialBomb", (void *) SpecialExtraSpecialBomb }, { "speed", (void *) SpecialExtraSpeed }, { "speed2", (void *) SpecialExtraSpeed2 }, { "steal", (void *) SpecialExtraSteal }, { "stop", (void *) SpecialExtraStop}, { "stunOthers", (void *) SpecialExtraStunOthers }, { "sucker", (void *) SpecialExtraSuck }, { "swapcolor", (void *) SpecialExtraSwapColor }, /* skywalker */ { "swapposition", (void *) SpecialExtraSwapPosition }, /* skywalker */ { "teleport", (void *) SpecialExtraTeleport }, { "through", (void *) SpecialExtraThrough }, { "void", (void *) SpecialExtraVoid }, { NULL, NULL } }; keyTable -------- static DBToData keyTable[] = { { "air", (void *) SpecialKeyAir }, { "bfarter", (void *) SpecialKeyBfarter}, { "choicebombtype", (void *) SpecialKeyChoice }, /* skywalker */ { "cloak", (void *) SpecialKeyCloak }, { "electrify", (void *) SpecialKeyElectrify }, { "farter", (void *) SpecialKeyFarter}, /* skywalker */ { "frogger", (void *) SpecialKeyFrogger }, /* skywalker */ { "jump", (void *) SpecialKeyJump }, /* skywalker */ { "morph", (void *) SpecialKeyMorph }, { "rc", (void *) SpecialKeyRC }, { "snipe", (void *) SpecialKeySnipe }, /* skywalker */ { "specialBomb", (void *) SpecialKeySpecialBomb }, { "stop", (void *) SpecialKeyStop}, { "sucker", (void *) SpecialKeySuck }, { "teleport", (void *) SpecialKeyTeleport }, { "through", (void *) SpecialKeyThrough }, { "void", (void *) SpecialKeyVoid }, { NULL, NULL } }; bombClickTable -------------- static DBToData bombClickTable[] = { { "anticlockwise", (void *) BombClickAnticlockwise }, { "clockwise", (void *) BombClickClockwise }, { "contact", (void *) BombClickContact }, { "initial", (void *) BombClickInitial }, { "none", (void *) BombClickNone }, { "null", (void *) BombClickNone }, { "randomdir", (void *) BombClickRandomdir }, { "rebound", (void *) BombClickRebound }, { "snooker", (void *) BombClickSnooker }, { "split", (void *) BombClickSplit }, { "thru", (void *) BombClickThru }, { NULL, NULL }, }; bombDirTable ------------ static DBToInt bombDirTable[] = { { "down", GoDown }, { "left", GoLeft }, { "right", GoRight }, { "up", GoUp }, { "stop", GoStop }, { NULL, -1 } }; fuseTimeTable ------------- static DBToInt fuseTimeTable[] = { { "long", LONG_FUSE }, { "short", SHORT_FUSE }, { "normal", BOMB_TIME }, { NULL, -1 } }; hauntFactorTable ---------------- static DBToInt hauntFactorTable[] = { { "fast", HAUNT_FAST }, { "slow", HAUNT_SLOW }, { "none", HAUNT_NONE }, { NULL, -1 }, }; bombTypeTable ------------- static DBToInt bombTypeTable[] = { /* NAME IN LEVEL FILE ALFABETICAL ORDER !!! */ { "blastnow", BMTblastnow }, { "changedirectionathalf", BMTchangedirectionathalf /* Skywalker */} , { "close", BMTclose }, { "column", BMTcolumn }, { "comb", BMTcomb }, { "construction", BMTconstruction }, { "default", BMTdefault }, { "destruction", BMTdestruction }, { "diagional", BMTdiagthreebombs }, /* EPFL */ { "distance", BMTdistance }, { "farpyro2", BMTfarpyro }, { "firecracker", BMTfirecracker }, { "firecracker2", BMTfirecracker2 }, { "fungus", BMTfungus }, { "grenade", BMTgrenade }, { "lucky", BMTlucky }, { "mine", BMTmine }, { "napalm", BMTnapalm }, { "normal", BMTnormal }, { "nuclear", BMTnuclear }, { "parallel", BMTparallel }, { "parasol", BMTparasol }, { "protectbombs", BMTprotectbombs }, { "psycho", BMTpsycho }, { "pyro", BMTpyro }, { "pyro2", BMTpyro2 }, { "random", BMTrandom }, { "renovation", BMTrenovation }, { "ringofire", BMTringofire }, { "row", BMTrow }, { "scissor", BMTscissor }, { "scissor2", BMTscissor2 }, { "search", BMTsearch }, { "short", BMTshort }, { "snipe", BMTsnipe }, { "threebombs", BMTthreebombs }, { "trianglebombs", BMTtrianglebombs }, { NULL, NUM_BMT }, }; distribExtraTable ----------------- static DBToInt distribExtraTable[] = { { "all", (int) DEall }, { "double", (int) DEdouble }, { "get", (int) DEget }, { "none", (int) DEnone }, { "single", (int) DEsingle }, { "special", (int) DEspecial }, { NULL, -1 }, };