; tactics_ini.txt ; ; copyright 2008 (c) synthetic-reality.com, Dan Samuel, all rights reserved ; ; All available tactics maps for your world are defined in this file ; related assets are found in your world's "tactics" folder. ; (omit the .bmp on bitmap names and the .wav on sound effect files) ; ; tactics.ini includes the following sections: ; ; [general] - declares the number of maps in the file ; [tiles] - declares the appearance and properties of individual map tiles ; [sounds] - declares all the possible sound effect files. ; [soundsets] - declares sets of similar sound effect files (the game picks a sound at random from the set) ; [weapons] - declares available weapons ; [spells] - declares available spells ; [spellSets] - declares combinations of spells (a magic user is bound to a particular spell set) ; [pieces] - declares the available army pieces ; [mapNN] - one section per map (numbered from 1 to General/numMaps) ; ; --- ; ; 'Movement' values are formed by adding together these values: ; ; 1 - earth (normal, can walk on dirt) ; 2 - air (can be flown over) ; 4 - fire (lava) ; 8 - water (water) ; ; so, for example, a movement value of 9 means it can cross earth and water. 15 means it can cross anything. ; ; PIECES and TILES both have movement values, and a piece can cross a tile if it has ANY in common. ; So, generally set the tiles to the sort of thing they are, then give the PIECEs all the bits ; for all the things they can cross (for example, a flying piece probably gets a movement value ; of 15 since it can cross earth, air, fire, and water. (well, maybe not water) ; ; WEAPONS also have movement values (some weapons may not cross water, for example) ; ; NOTE: ini files do NOT like blank lines in the middle of a section, so if you want ; to break up the monotony, be sure to start the line with a comment semicolon ; ; NOTE: ini files tend to strip quotes if the value begins or ends with a quote, so add a leading space and a trailing comma where needed ; (you can generally imitate this file in that regard) (but it boils down to: if the line has more than one field on it, and the final ; field on the line is quoted, then add a comma at the end. If that same line starts with a quoted argument, add an extra space after ; the equal sign. ; ;--------- ; these are the COMMON tiles, which *can be overridden* by individual maps ; ; Note the following 'special' tileIds which you must use as described: ; ; 0 - not availble, not drawn, not passable, defines 'border' of map ; 249 - Start location for Red Player (should be a single pixel of this somewhere) ; 250 - Start location of Green Player ; 251 - start location of Yellow Player ; 252 - start location of Blue Player [Tiles] ; ; tileColorIndex = Name, bitmap, movement, ?? tile247 = "Slate", "tiles\tileSlate", 1, 0 tile114 = "Forest", "tiles\tileForest", 1, 0 tile50 = "Lava", "tiles\tileLava", 4, 0 tile205 = "Water", "tiles\tileWater", 8, 0 ; Starting locations MUST use these colorIndices tile249 = "Red Start", "tiles\tileSlate", 1, 0 tile250 = "Green Start", "tiles\tileSlate", 1, 0 tile251 = "Yellow Start", "tiles\tileSlate", 1, 0 tile252 = "Blue Start", "tiles\tileSlate", 1, 0 ;--------- ; These are the COMMON sounds ; they must be .wav files (but don't include the extension) and in the tactics folder ; They will be referred to by number, which should be between 1 and 255 ; the 'name' field is just a reminder to you as to what the sound is for ; [sounds] ; Name wave file ; Heroic Voice sound25 = "select Unit", "sfx\ready\heroic\at_your_command", sound26 = "select Unit", "sfx\ready\heroic\for_my_king", sound27 = "select Unit", "sfx\ready\heroic\i_await_your_command", sound28 = "select Unit", "sfx\ready\heroic\my_swords_serve_thee", sound29 = "select Unit", "sfx\ready\heroic\its_all_good", ; sound30 = "click on dest.", "sfx\move\heroic\by_your_command", sound31 = "click on dest.", "sfx\move\heroic\i_go", sound32 = "click on dest.", "sfx\move\heroic\o_tresspass_sweetly_urged", sound33 = "click on dest.", "sfx\move\heroic\there_is_no_other_way", sound34 = "click on dest.", "sfx\move\heroic\where_is_the_beef", ; sound35 = "click on target", "sfx\attack\heroic\by_grendels_hammer", sound36 = "click on target", "sfx\attack\heroic\i_attack", sound37 = "click on target", "sfx\attack\heroic\i_serve_as_good_as_you", sound38 = "click on target", "sfx\attack\heroic\sword_from_scabbard6", sound39 = "click on target", "sfx\attack\heroic\your_end_is_near", ; sound40 = "unit hurt", "sfx\pain\heroic\ahh", sound41 = "unit hurt", "sfx\pain\heroic\i_am_hurt", sound42 = "unit hurt", "sfx\pain\heroic\oof", sound43 = "unit hurt", "sfx\pain\heroic\ow2", ; sound45 = "unit died", "sfx\death\heroic\i_am_slain", sound46 = "unit died", "sfx\death\heroic\i_have_fallen_and_i_cannot_rise", ; ; Squeaky Voice sound100 = "select Unit", "sfx\ready\squeaky\awaiting_your_command", sound101 = "select Unit", "sfx\ready\squeaky\for_the_queen", sound102 = "select Unit", "sfx\ready\squeaky\i_will_avenge_thee", sound103 = "select Unit", "sfx\ready\squeaky\yes_my_liege", sound104 = "select Unit", "sfx\ready\squeaky\one_of_us", ; sound105 = "Move Unit", "sfx\move\squeaky\i_obey", sound106 = "Move Unit", "sfx\move\squeaky\none_shall_pass", sound107 = "Move Unit", "sfx\move\squeaky\there_will_be_blood", sound108 = "Move Unit", "sfx\move\squeaky\what_no_better", sound109 = "Move Unit", "sfx\move\squeaky\youre_standing_on_my_foot", ; sound110 = "Attack Unit", "sfx\attack\squeaky\by_the_power_of_grayskull", sound111 = "Attack Unit", "sfx\attack\squeaky\i_shall_make_an_ashtray_from_your_skull", sound112 = "Attack Unit", "sfx\attack\squeaky\youre_a_saucy_one", sound113 = "Attack Unit", "sfx\attack\squeaky\thou_art_slain", sound114 = "Attack Unit", "sfx\attack\squeaky\youll_shoot_your_eye_out", ; sound115 = "Unit Pain", "sfx\pain\squeaky\thats_going_to_leave_a_mark", sound116 = "Unit Pain", "sfx\pain\squeaky\tis_but_a_scratch", ; sound120 = "Unit Death", "sfx\death\squeaky\i_am_no_more", sound121 = "Unit Death", "sfx\death\squeaky\weve_run_out_of_beans", ; ; Rumbly Voice sound125 = "select Unit", "sfx\ready\rumbly\ready", sound126 = "select Unit", "sfx\ready\rumbly\for_the_king", sound127 = "select Unit", "sfx\ready\rumbly\it_is_a_good_day_to_die", sound128 = "select Unit", "sfx\ready\rumbly\remorse_is_for_weaklings", sound129 = "select Unit", "sfx\ready\rumbly\excellent", ; sound130 = "Move Unit", "sfx\move\rumbly\to_battle", sound131 = "Move Unit", "sfx\move\rumbly\cry_havoc", sound132 = "Move Unit", "sfx\move\rumbly\forward", sound133 = "Move Unit", "sfx\move\rumbly\i_seek_vengeance", sound134 = "Move Unit", "sfx\move\rumbly\engage", ; sound135 = "Attack Unit", "sfx\attack\rumbly\have_at_thee", sound136 = "Attack Unit", "sfx\attack\rumbly\i_am_rubber_you_are_glue", sound137 = "Attack Unit", "sfx\attack\rumbly\step_off", sound138 = "Attack Unit", "sfx\attack\rumbly\your_time_has_come", ; sound140 = "Unit Pain", "sfx\pain\rumbly\gargle", sound141 = "Unit Pain", "sfx\pain\rumbly\i_am_wounded", sound142 = "Unit Pain", "sfx\pain\rumbly\my_feet_hurt", sound143 = "Unit Pain", "sfx\pain\rumbly\ow", sound144 = "Unit Pain", "sfx\pain\rumbly\tis_a_foul_deed", ; sound145 = "Unit Death", "sfx\death\rumbly\i_die", ; ; ; ; Sultry voice sound150 = "select Unit", "sfx\ready\sultry\i_have_what_you_want", sound151 = "select Unit", "sfx\ready\sultry\if_I_must", sound152 = "select Unit", "sfx\ready\sultry\you_want_me_to_do_what", sound153 = "select Unit", "sfx\ready\sultry\your_place_or_mine", sound154 = "select Unit", "sfx\ready\sultry\im_ready", ; sound155 = "Move Unit", "sfx\move\sultry\does_that_work_for_you", sound156 = "Move Unit", "sfx\move\sultry\hot_stuff_coming_your_way", sound157 = "Move Unit", "sfx\move\sultry\mmm", sound158 = "Move Unit", "sfx\move\sultry\to_battle", ; sound160 = "Attack Unit", "sfx\attack\sultry\i_will_polish_my_nails_with_your_blood", sound161 = "Attack Unit", "sfx\attack\sultry\im_gonna_scratch_your_eyes_out", sound162 = "Attack Unit", "sfx\attack\sultry\oh_no_you_didnt", sound163 = "Attack Unit", "sfx\attack\sultry\oh_you_like_it_rough", sound164 = "Attack Unit", "sfx\attack\sultry\who_let_your_dogs_out", ; sound165 = "Unit Pain", "sfx\pain\sultry\uhhh", sound166 = "Unit Pain", "sfx\pain\sultry\eeeee", sound167 = "Unit Pain", "sfx\pain\sultry\eww2", sound168 = "Unit Pain", "sfx\pain\sultry\oh_no", sound169 = "Unit Pain", "sfx\pain\sultry\ow1", ; sound170 = "Unit Death", "sfx\death\sultry\dying_is_easy_comedy_is_hard", sound171 = "Unit Death", "sfx\death\sultry\im_done_for", ; ; ; animal voice sound175 = "select Unit", "sfx\ready\meow", sound176 = "select Unit", "sfx\ready\animal\murloc", sound177 = "select Unit", "sfx\ready\animal\ruhruh", sound178 = "select Unit", "sfx\ready\animal\yessssh", ; sound180 = "Move Unit", "sfx\move\animal\growl2", sound181 = "Move Unit", "sfx\move\animal\roar", ; sound185 = "Attack Unit", "sfx\attack\animal\growl1", sound186 = "Attack Unit", "sfx\attack\animal\growl3", sound187 = "Attack Unit", "sfx\attack\animal\growl4", sound188 = "Attack Unit", "sfx\attack\animal\growl", ; sound190 = "Unit Pain", "sfx\pain\animal\eep", sound191 = "Unit Pain", "sfx\pain\animal\hiss", sound192 = "Unit Pain", "sfx\pain\animal\ruhro", sound193 = "Unit Pain", "sfx\pain\animal\yelp2", sound194 = "Unit Pain", "sfx\pain\animal\yelp", ; ; -- none sound200 = "Unit Death", "sfx\death\animal\i am no more", ; ; ; ; weapons sound230 = "sword hit", "sfx\weapons\sword2", sound231 = "sword miss", "sfx\weapons\swordQuick7", sound232 = "sword crit", "sfx\weapons\sword2", ; ; Miscellaneous (these IDs are 'fixed' so don't change/reuse them -- you can bind them to different WAV files of course) ; sound245 = "battle launch", "sfx\", sound246 = "tile click ", "sfx\stock\tileClick", sound247 = "button click ", "sfx\stock\buttonClick", sound248 = "walking sound", "sfx\stock\footStep", sound249 = "new scene" "sfx\stock\welcome_my_lord", sound250 = "fanfare" "sfx\stock\vocal_fanfare", sound251 = "new player" "sfx\stock\fresh_meat", sound252 = "turn wake-up" "sfx\stock\have_you_no_orders_my_liege", sound253 = "left scene" "sfx\stock\thank_you_for_playing_wos_tactics", sound254 = "we lost" "sfx\stock\we_have_failed_you", sound255 = "we won" "sfx\stock\we_are_victorious", ;---------- ; These are the sound SETs ; A sound set has an id (1-255) ; A sound set has up to 10 potential soundIds, from which a sound effect will be randomly selected ; So, for example, you might have a sound set for "heroic voice beginning attack" and another for "animal voice in pain" ; ; Pieces are bound to sound SETs not SOUNDs (though a set is allowed to have a single entry, if that's all you need) ; [SoundSets] ; Name (for reminder only) soundSet10 = "Heroic Ready", 25, 26, 27, 28, 29 SoundSet20 = "Heroic Go", 30, 31, 32, 33, 34 soundSet30 = "Heroic Attack", 35, 36, 37, 38, 39 soundSet40 = "Heroic Pain", 40, 41, 42, 43 soundSet50 = "Heroic Death", 45, 46 ; soundSet11 = "Squeaky Ready", 100, 101, 102, 103, 104 SoundSet21 = "Squeaky Go", 105, 106, 107, 108, 109 soundSet31 = "Squeaky Attack", 110, 111, 112, 113, 114 soundSet41 = "Squeaky Pain", 115, 116 soundSet51 = "Squeaky Death", 120, 121 ; soundSet12 = "Rumbly Ready", 125, 126, 127, 128, 129 SoundSet22 = "Rumbly Go", 130, 131, 132, 133, 134 soundSet32 = "Rumbly Attack", 135, 136, 137, 138 soundSet42 = "Rumbly Pain", 140, 141, 142, 143, 144 soundSet52 = "Rumbly Death", 145 ; soundSet13 = "Sultry Ready", 150, 151, 152, 153, 154 SoundSet23 = "Sultry Go", 155, 156, 157, 158 soundSet33 = "Sultry Attack", 160, 161, 162, 163, 164 soundSet43 = "Sultry Pain", 165, 166, 167, 168, 169 soundSet53 = "Sultry Death", 170, 171 ; soundSet14 = "Animal Ready", 175, 176, 177, 178 SoundSet24 = "Animal Go", 180, 181 soundSet34 = "Animal Attack", 185, 186, 187 soundSet44 = "Animal Pain", 190, 191, 192, 193, 194 soundSet54 = "Animal Death", ; ; weapon sounds SoundSet100 = "Sword Hit", 230 soundSet101 = "sword miss", 231 soundSet102 = "sword crit", 232 ;--------- ; Weapons ; ; Each piece is assigned a weapon (which never changes) ; [Weapons] ; ; Name = keep it super short ; Class = the class of this weapon (think 'rock/paper/scissor') more than one weapon can have same class ; Dominates = id of weapon class which has no defense to this one (Rock Beats Scissors) ; Damage = basic hit point damage of weapon ; Movement = bitmap of tiles this weapon can cross ; add together: ; 1 - earth (normal, can walk on dirt) ; 2 - air (can be flown over) ; 4 - fire (lava) ; 8 - water (water) ; sets = sound set for hit, miss, or crit with that weapon ; ; 0 1 2 3 4 5 6 7 ; Name Class Dominates Damage Movement setHit setMiss setCrit weapon1 = "Rock", 1, 3, 2, 255, 100, 101, 102, weapon2 = "Paper", 2, 1, 2, 255, 100, 101, 102, weapon3 = "Scissors", 3, 2, 2, 255, 100, 101, 102, ;--------- ; Armor ; [Armor] ; ; Maybe never ;-------- ; Elements ; [Elements] ; ; Maybe never ; ;--------- ; Spells ; ; Some pieces have MP and can cast a limited amount of magic over the course of the battle. ; These are the individual spell definitions. Pieces are actually assigned 'spell sets' ; which identify the list of spells available to that piece. Which is never more than, say, three ; [Spells] ; ; Coming Soon, maybe ; ; Dominates - elementId (pieces are assigned to elements) ; Damage - basic hitpoints it takes from target ; MP - Mana required to cast ; ; Special Actions ; - heals ; - reduces rest ; - reduces MP ; - buff/debuff stat? (not sure how to do this reliably, nor for how long) ; ; sound sets hit/miss/fizzle ; sparkles ; ; Name ButtonBitmap Dominates Damage MP ;spell1 = "Fire Scourge", "buttons/spellFire", 0, 3, 1, ;--------- ; SpellSets ; ; A spell set defines a collection of spells. Each spell-capable piece is assigned to a single spell set, which ; gives it the ability to cast a small number of spells. maybe 3 max. ; [SpellSets] ; ; Coming Soon, maybe ;--------- ; These are the COMMON pieces, which can be overridden by individual maps (I might remove that feature) ; ; name - should be reasonably brief and UPPERCASE (has to fit in info popup) ; bitmap - should use the three special golden colors for areas which are to be dynamically recolored for team color ; max# - most you can have in a single army (0 for no limit, but 9 is hard max anyway) ; el - reserved for a future 'element' assignment ; mov - the piece's movement bits (what tiles it can cross. add together from this table:) ; 1 - earth (normal, can walk on dirt) ; 2 - air (can be flown over) ; 4 - fire (lava) ; 8 - water (water) ; mob - mobility (how many steps it can 'walk' in single turn) ; ; Note those are sound SET ids, not sound ids, in the setXXX columns ; setRdy - what piece says when you click on it ; setGo - what piece says when it starts to walk ; setAtt - what piece says when it starts attack ; setPain- what piece says when it gets hurt ; setDeath- what piece says when it gets killed ; ; wpn - weapon id (from WEAPONS section) also implies weapon class (for rock/paper/scissor effect) ; armour - reserved for future armor class ; spellSet - the id of the spellSet which lists which spells are available to this piece (currently none) ; req - WoS conditional, like "L3T4" (must be level 3 with token 4 in order to have piece in your army) ; ; NOTE: the command /tacticsBalance will print a simple report to help you find over-powered pieces ; [Pieces] ; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ; name bitmap max# hp mp str def agi el mov mob range minRange setRdy SetGo SetAtt SetPain SetDeath wpn armor spellSet req piece1 = "KING", "skins\josh59t", 1, 9, 0, 5, 5, 3, 1, 1, 4, 2, 0, 10, 20, 30, 40, 50, 3, 0, 0, "", piece2 = "SWORDSMAN", "skins\josh1t", 8, 5, 3, 5, 4, 3, 1, 1, 6, 1, 0, 10, 20, 30, 40, 50, 1, 0, 0, "", piece3 = "FENCER", "skins\josh94t", 4, 3, 3, 4, 3, 7, 1, 1, 6, 1, 0, 10, 20, 30, 40, 50, 2, 0, 0, "", piece4 = "ARMOURED KNIGHT", "skins\josh95t", 4, 7, 0, 5, 7, 1, 1, 1, 5, 1, 0, 12, 22, 32, 42, 52, 3, 0, 0, "", piece5 = "ARCHER", "skins\josh92t", 2, 5, 5, 4, 2, 4, 1, 1, 4, 4, 2, 11, 21, 31, 41, 51, 1, 0, 0, "", piece6 = "WIZARD", "skins\josh63t", 2, 4, 13, 1, 3, 2, 1, 13, 3, 4, 0, 10, 20, 30, 40, 50, 2, 0, 0, "", piece7 = "HARPY", "skins\josh52t", 4, 3, 3, 4, 3, 7, 1, 3, 6, 1, 0, 13, 23, 33, 43, 53, 3, 0, 0, "", piece8 = "BITEWORM", "skins\josh83t", 8, 5, 3, 5, 4, 3, 1, 1, 6, 1, 0, 14, 24, 34, 44, 54, 1, 0, 0, "", piece9 = "HOPPY", "skins\josh87t", 4, 3, 0, 2, 3, 3, 1, 1, 6, 5, 0, 11, 21, 31, 41, 51, 2, 0, 0, "", piece10 = "JELLY", "skins\josh2t", 4, 5, 0, 3, 4, 4, 1, 9, 4, 1, 0, 14, 24, 34, 44, 54, 3, 0, 0, "", piece11 = "SABRE MAN", "skins\josh7t", 4, 4, 3, 6, 3, 5, 1, 1, 4, 2, 0, 10, 20, 30, 40, 50, 1, 0, 0, "", piece12 = "SLOBBER", "skins\josh20t", 4, 5, 0, 4, 3, 2, 1, 13, 3, 2, 0, 14, 24, 34, 44, 54, 2, 0, 0, "", piece13 = "EYEBRAWL", "skins\josh23t", 2, 3, 5, 3, 3, 5, 1, 3, 4, 4, 2, 12, 22, 32, 42, 52, 3, 0, 0, "", piece14 = "SCARTAIL", "skins\josh28t", 2, 5, 3, 3, 3, 6, 1, 1, 5, 2, 0, 11, 21, 31, 41, 51, 1, 0, 0, "", piece15 = "SEA STING", "skins\josh45t", 2, 3, 0, 5, 3, 5, 1, 9, 4, 3, 0, 14, 24, 34, 44, 54, 2, 0, 0, "", piece16 = "FANG GHOUL", "skins\josh65t", 2, 4, 13, 4, 3, 3, 1, 15, 1, 5, 0, 12, 22, 32, 42, 52, 3, 0, 0, "", piece17 = "PINCER WORM", "skins\josh67t", 2, 3, 0, 5, 4, 3, 1, 1, 3, 2, 0, 14, 24, 34, 44, 54, 1, 0, 0, "", piece18 = "FANG LEAF", "skins\josh71t", 4, 5, 0, 6, 3, 3, 1, 9, 2, 3, 0, 11, 21, 31, 41, 51, 2, 0, 0, "", piece19 = "CAVE IMP", "skins\josh77t", 4, 5, 0, 3, 4, 4, 1, 9, 4, 1, 0, 12, 22, 32, 42, 52, 3, 0, 0, "", piece20 = "MAD BOX", "skins\josh79t", 2, 6, 10, 3, 3, 3, 1, 1, 4, 2, 0, 10, 20, 30, 40, 50, 1, 0, 0, "", .--------- ; The Maps ; ; * Each map has its own section, beginning with [map1] ; * Each map has a 256 color (wos palette) 'bitmap' file where each pixel's color specifies a 'tile' id. ; several colors are 'reserved' (see [tile] comments), but otherwise have only the meaning you assign them ; * in theory, each map may provide 'override' settings for individual pieces and tiles, though I suspect that is a bogus feature ; ; name - name of map ; author - short string descibing YOU (um, really short. your name.. or less) ; bitmap - path and name of map BMP in tactics folder (leave off the .bmp) ; elevationBitmap - (optional) bitmap with elevation data (taken from red component of color of pixel) ; must match height/width of map bitmap ; seed - (optional) random seed value for 'automatic bumpiness' (assumes no elevation bitmap) ; roughness - (optional) controls roughness of auto-bumpiness. (0 is completely flat) ; requirements - (optional) WoS conditional ("L3" requires level 3) required for you to HOST map ; (but anyone can PLAY on any map you host, whether they have requirements or not) ; ; Elevation notes: ; ; a piece cannot cross from one tile to another if their elevation difference is 32 or more (up or down) ; a weapon cannot shoot across one tile to another if their elevation difference is 64 or more (up or down) ; air-crossing pieces (and weapons) are exempt from this restriction ; You do NOT have to use elevation. flat maps are fine. [general] ; be sure to update this when you add maps! numMaps = 5 ; ; Each MAP has its own section, numbered map1 to mapN ; [map1] name = Tactics Island (flat) author = Samsyn bitmap = "maps\map1" requirements = "" seed = 0 [map2] name = Tactics Island Two author = Samsyn bitmap = "maps\map2" requirements = "" [map3] name = Tactics Island Three author = Samsyn bitmap = "maps\map3" requirements = "" [map4] name = Tactics Island (bumpy) author = Samsyn bitmap = "maps\map1" requirements = "" seed = 123456 roughness = 64 [map5] name = Tactics Island (rough) author = Samsyn bitmap = "maps\map1" requirements = "" seed = 25432 roughness = 255