From 813fe38a0e67d3ee31dc06ea2f5aa174e1505597 Mon Sep 17 00:00:00 2001 From: johns <> Date: Wed, 17 Apr 2002 22:11:08 +0000 Subject: [PATCH] Removed hardcoded unit-types, spells and upgrades. --- doc/ChangeLog.html | 2 + src/unit/upgrade.cpp | 230 +++++++++++++++++++++---------------------- 2 files changed, 117 insertions(+), 115 deletions(-) diff --git a/doc/ChangeLog.html b/doc/ChangeLog.html index bf751474d..b474df681 100644 --- a/doc/ChangeLog.html +++ b/doc/ChangeLog.html @@ -792,6 +792,8 @@ <LI>Added master, music, and cd volume control options. (from Nehal Mistry) <LI>Added fog of war control to preferences. (from Nehal Mistry) <LI>Fixed bug #542313: Sleep does not work with NEW_AI. + <LI>Added support for loading CCL files out of zip archive. + <LI>Removed hardcoded unit-types, spells and upgrades. <LI>+++ </UL> diff --git a/src/unit/upgrade.cpp b/src/unit/upgrade.cpp index 022e948ba..c39b13284 100644 --- a/src/unit/upgrade.cpp +++ b/src/unit/upgrade.cpp @@ -159,6 +159,18 @@ global Upgrade* UpgradeByIdent(const char* ident) return NULL; } +/** +** Find upgrade by wc number. +** +** @param num The upgrade number used in f.e. puds. +** @return Upgrade pointer. +*/ +local Upgrade* UpgradeByWcNum(unsigned num) +{ + return UpgradeByIdent(UpgradeWcNames[num]); +} + + /** ** Init upgrade/allow structures */ @@ -238,7 +250,7 @@ global void ParsePudALOW(const char* alow,int length __attribute__((unused))) 38, 39, // unit-gnomish-submarine unit-giant-turtle 40, 41, // unit-gnomish-flying-machine unit-goblin-zeppelin 42, 43, // unit-gryphon-rider unit-dragon - -1, -1, // NULL NULL + -1, -1, // unused 14, 15, // unit-dwarves unit-goblin-sappers 70, 71, // unit-gryphon-aviary unit-dragon-roost 58, 59, // unit-farm unit-pig-farm @@ -258,77 +270,75 @@ global void ParsePudALOW(const char* alow,int length __attribute__((unused))) 72, 73, // unit-human-shipyard unit-orc-shipyard 103,104,// unit-human-wall unit-orc-wall }; - // spell allow bits -> internal names. - // FIXME: spells allow bits -> wc2num -> internal names. - static char* spells[32] = { - "upgrade-holy-vision", - "upgrade-healing", - NULL, - "upgrade-exorcism", - "upgrade-flame-shield", - "upgrade-fireball", - "upgrade-slow", - "upgrade-invisibility", - "upgrade-polymorph", - "upgrade-blizzard", - "upgrade-eye-of-kilrogg", - "upgrade-bloodlust", - NULL, - "upgrade-raise-dead", - "upgrade-death-coil", - "upgrade-whirlwind", - "upgrade-haste", - "upgrade-unholy-armor", - "upgrade-runes", - "upgrade-death-and-decay", - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, + // spells allow bits -> wc2num -> internal names. + static char spell_for_bit[32] = { + 34, // upgrade-holy-vision + 35, // upgrade-healing + -1, // not used + 36, // upgrade-exorcism + 37, // upgrade-flame-shield + 38, // upgrade-fireball + 39, // upgrade-slow + 40, // upgrade-invisibility + 41, // upgrade-polymorph + 42, // upgrade-blizzard + 43, // upgrade-eye-of-kilrogg + 44, // upgrade-bloodlust + -1, // not used + 45, // upgrade-raise-dead + 46, // upgrade-death-coil + 47, // upgrade-whirlwind + 48, // upgrade-haste + 49, // upgrade-unholy-armor + 50, // upgrade-runes + 51, // upgrade-death-and-decay + -1, // not used + -1, // not used + -1, // not used + -1, // not used + -1, // not used + -1, // not used + -1, // not used + -1, // not used + -1, // not used + -1, // not used + -1, // not used + -1, // not used }; - // upgrades allow bits -> internal names. - // FIXME: upgrades allow bits -> wc2num -> internal names. - static char* upgrades[64] = { - "upgrade-arrow1", "upgrade-throwing-axe1", - "upgrade-arrow2", "upgrade-throwing-axe2", - "upgrade-sword1", "upgrade-battle-axe1", - "upgrade-sword2" , "upgrade-battle-axe2", - "upgrade-human-shield1", "upgrade-orc-shield1", - "upgrade-human-shield2", "upgrade-orc-shield2", - "upgrade-human-ship-cannon1", "upgrade-orc-ship-cannon1", - "upgrade-human-ship-cannon2", "upgrade-orc-ship-cannon2", - "upgrade-human-ship-armor1", "upgrade-orc-ship-armor1", - "upgrade-human-ship-armor2", "upgrade-orc-ship-armor2", - NULL, NULL, - NULL, NULL, - "upgrade-catapult1", "upgrade-ballista1", - "upgrade-catapult2", "upgrade-ballista2", - NULL, NULL, - NULL, NULL, - "upgrade-ranger", "upgrade-berserker", - "upgrade-longbow", "upgrade-light-axes", - "upgrade-ranger-scouting", "upgrade-berserker-scouting", - "upgrade-ranger-marksmanship", "upgrade-berserker-regeneration", - "upgrade-paladin", "upgrade-ogre-mage", - NULL, NULL, - NULL, NULL, - NULL, NULL, - NULL, NULL, - NULL, NULL, - NULL, NULL, - NULL, NULL, - NULL, NULL, - NULL, NULL, - NULL, NULL, - NULL, NULL, + // upgrades allow bits -> wc2num -> internal names. + static char upgrade_for_bit[64] = { + 4, 6, // upgrade-arrow1 upgrade-throwing-axe1 + 5, 7, // upgrade-arrow2 upgrade-throwing-axe2 + 0, 2, // upgrade-sword1 upgrade-battle-axe1 + 1, 3, // upgrade-sword2 upgrade-battle-axe2 + 8,10, // upgrade-human-shield1 upgrade-orc-shield1 + 9,11, // upgrade-human-shield2 upgrade-orc-shield2 + 12,14, // upgrade-human-ship-cannon1 upgrade-orc-ship-cannon1 + 13,15, // upgrade-human-ship-cannon2 upgrade-orc-ship-cannon2 + 16,18, // upgrade-human-ship-armor1 upgrade-orc-ship-armor1 + 17,19, // upgrade-human-ship-armor2 upgrade-orc-ship-armor2 + -1,-1, // unused + -1,-1, // unused + 20,22, // upgrade-catapult1 upgrade-ballista1 + 21,23, // upgrade-catapult2 upgrade-ballista2 + -1,-1, // unused + -1,-1, // unused + 24,28, // upgrade-ranger upgrade-berserker + 25,29, // upgrade-longbow upgrade-light-axes + 26,30, // upgrade-ranger-scouting upgrade-berserker-scouting + 27,31, // upgrade-ranger-marksmanship upgrade-berserker-regeneration + 33,32, // upgrade-paladin upgrade-ogre-mage + -1,-1, // unused + -1,-1, // unused + -1,-1, // unused + -1,-1, // unused + -1,-1, // unused + -1,-1, // unused + -1,-1, // unused + -1,-1, // unused + -1,-1, // unused + -1,-1, // unused + -1,-1, // unused }; int i; int b; @@ -345,7 +355,7 @@ global void ParsePudALOW(const char* alow,int length __attribute__((unused))) v=(*alow++)&0xFF; for( b=0; b<8; ++b ) { - if( unit_for_bit[i*16+0+b*2]>0 ) { + if( unit_for_bit[i*16+0+b*2]>=0 ) { if( v&(1<<b) ) { AllowUnitId(player, UnitTypeByWcNum(unit_for_bit[i*16+0+b*2])->Type, @@ -374,21 +384,14 @@ global void ParsePudALOW(const char* alow,int length __attribute__((unused))) int v; v=*alow++; - DebugLevel3Fn(" %x\n",v); for( b=0; b<8; ++b ) { - if( v&(1<<b) ) { - if( spells[i*8+b] ) { - DebugLevel3Fn(" %d %s +R\n", - player->Player,spells[i*8+b]); - - AllowUpgradeByIdent(player,spells[i*8+b],'R'); - } - } else { - if( spells[i*8+b] ) { - DebugLevel3Fn(" %d %s -F\n", - player->Player,spells[i*8+b]); - - AllowUpgradeByIdent(player,spells[i*8+b],'F'); + if( spell_for_bit[i*8+b]>=0 ) { + if( v&(1<<b) ) { + AllowUpgradeId(player, + UpgradeByWcNum(spell_for_bit[i*8+b])-Upgrades,'R'); + } else { + AllowUpgradeId(player, + UpgradeByWcNum(spell_for_bit[i*8+b])-Upgrades,'F'); } } } @@ -403,14 +406,12 @@ global void ParsePudALOW(const char* alow,int length __attribute__((unused))) int v; v=*alow++; - DebugLevel3Fn(" %x\n",v); for( b=0; b<8; ++b ) { if( v&(1<<b) ) { - if( spells[i*8+b] ) { - DebugLevel3Fn(" %d %s +A\n", - player->Player,spells[i*8+b]); - - AllowUpgradeByIdent(player,spells[i*8+b],'A'); + // FIXME: combine with 'R'esearched and 'F'orbidden + if( spell_for_bit[i*8+b]>=0 ) { + AllowUpgradeId(player, + UpgradeByWcNum(spell_for_bit[i*8+b])-Upgrades,'A'); } } } @@ -418,21 +419,20 @@ global void ParsePudALOW(const char* alow,int length __attribute__((unused))) } // - // Spells researched + // Spells researching + // FIXME: not useful. // for( player=Players; player<Players+16; ++player ) { for( i=0; i<4; ++i ) { int v; v=*alow++; - DebugLevel3Fn(" %x\n",v); for( b=0; b<8; ++b ) { if( v&(1<<b) ) { - if( spells[i*8+b] ) { - DebugLevel3Fn(" %d %s +U\n", - player->Player,spells[i*8+b]); - - AllowUpgradeByIdent(player,spells[i*8+b],'U'); + // FIXME: combine with 'R'esearched and 'F'orbidden + if( spell_for_bit[i*8+b]>=0 ) { + AllowUpgradeId(player, + UpgradeByWcNum(spell_for_bit[i*8+b])-Upgrades,'U'); } } } @@ -440,22 +440,22 @@ global void ParsePudALOW(const char* alow,int length __attribute__((unused))) } // - // Upgrades allowed + // Upgrades allowed // for( player=Players; player<Players+16; ++player ) { for( i=0; i<4; ++i ) { int v; v=*alow++; - DebugLevel3Fn(" %x\n",v); for( b=0; b<8; ++b ) { if( v&(1<<b) ) { - if( upgrades[i*16+b*2+0] ) { - DebugLevel3Fn(" %d %s +A\n", - player->Player,upgrades[i*16+b*2]); - - AllowUpgradeByIdent(player,upgrades[i*16+b*2+0],'A'); - AllowUpgradeByIdent(player,upgrades[i*16+b*2+1],'A'); + if( upgrade_for_bit[i*16+b*2+0]>=0 ) { + AllowUpgradeId(player, + UpgradeByWcNum(upgrade_for_bit[i*16+b*2+0])-Upgrades + ,'A'); + AllowUpgradeId(player, + UpgradeByWcNum(upgrade_for_bit[i*16+b*2+1])-Upgrades + ,'A'); } } } @@ -463,22 +463,22 @@ global void ParsePudALOW(const char* alow,int length __attribute__((unused))) } // - // Upgrades acquired + // Upgrades acquired // for( player=Players; player<Players+16; ++player ) { for( i=0; i<4; ++i ) { int v; v=*alow++; - DebugLevel3Fn(" %x\n",v); for( b=0; b<8; ++b ) { if( v&(1<<b) ) { - if( upgrades[i*16+b*2+0] ) { - DebugLevel3Fn(" %d %s +U\n", - player->Player,upgrades[i*16+b*2]); - - AllowUpgradeByIdent(player,upgrades[i*16+b*2+0],'U'); - AllowUpgradeByIdent(player,upgrades[i*16+b*2+1],'U'); + if( upgrade_for_bit[i*16+b*2+0]>=0 ) { + AllowUpgradeId(player, + UpgradeByWcNum(upgrade_for_bit[i*16+b*2+0])-Upgrades + ,'U'); + AllowUpgradeId(player, + UpgradeByWcNum(upgrade_for_bit[i*16+b*2+1])-Upgrades + ,'U'); } } }