home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 June / PCFJune.iso / Xenon / XenonSource.exe / demo4 / actorinfo.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2000-09-12  |  8.1 KB  |  189 lines

  1. //-------------------------------------------------------------
  2. //
  3. // Class:    CActorInfo
  4. //
  5. // Author:    John M Phillips
  6. //
  7. // Started:    06/05/00
  8. //
  9. // Base:    None
  10. //
  11. // Derived:    None
  12. //
  13. //-------------------------------------------------------------
  14.  
  15. #include "demo4.h"
  16.  
  17. //-------------------------------------------------------------
  18.  
  19. CActorInfoList ActorInfoList;
  20.  
  21. //-------------------------------------------------------------
  22.  
  23. ActorInfo CActorInfoList::m_info_list[INFO_TOTAL] = {
  24.  
  25.     // pickups
  26.  
  27.     {    "ShieldPickup",                ACTOR_TYPE_PICKUP,    0,        32,    32,    16,    16,    8.f,  INFINITE_SHIELD,    50    },
  28.     {    "SpeedPickup",                ACTOR_TYPE_PICKUP,    0,        32,    32,    16,    16,    8.f,  INFINITE_SHIELD,    50    },
  29.     {    "WeaponPickup",                ACTOR_TYPE_PICKUP,    0,        32,    32,    16,    16,    8.f,  INFINITE_SHIELD,    50    },
  30.     {    "CloakPickup",                ACTOR_TYPE_PICKUP,    0,        32,    32,    16,    16,    8.f,  INFINITE_SHIELD,    50    },
  31.     {    "DivePickup",                ACTOR_TYPE_PICKUP,    0,        32,    32,    16,    16,    8.f,  INFINITE_SHIELD,    50    },
  32.     {    "ScorePickup",                ACTOR_TYPE_PICKUP,    0,        32,    32,    16,    16,    8.f,  INFINITE_SHIELD,    50    },
  33.     {    "ClonePickup",                ACTOR_TYPE_PICKUP,    0,        32,    32,    16,    16,    8.f,  INFINITE_SHIELD,    50    },
  34.     {    "WingtipPickup",            ACTOR_TYPE_PICKUP,    0,        32,    64,    16,    32,    8.f,  INFINITE_SHIELD,    50    },
  35.     {    "MissilePickup",            ACTOR_TYPE_PICKUP,    0,        32,    32,    16,    16,    8.f,  INFINITE_SHIELD,    50    },
  36.     {    "LaserPickup",                ACTOR_TYPE_PICKUP,    0,        32,    32,    16,    16,    8.f,  INFINITE_SHIELD,    50    },
  37.     {    "LifePickup",                ACTOR_TYPE_PICKUP,    0,        32,    32,    16,    16,    8.f,  INFINITE_SHIELD,    50    },
  38.  
  39.     // aliens
  40.  
  41.     {    "WallHugger",                ACTOR_TYPE_ALIEN,    0,    64,    64,    32,    32,    8.f, 5,    20    },
  42.     {    "SmallStandardAsteroid",    ACTOR_TYPE_ALIEN,    0,        32,    32,    16,    16,    16.f,1,    10    },
  43.     {    "MediumStandardAsteroid",    ACTOR_TYPE_ALIEN,    0,        64,    64,    32,    32,    12.f,2,    20    },
  44.     {    "BigStandardAsteroid",        ACTOR_TYPE_ALIEN,    0,        96,    96,    48,    48,    8.f, 3, 40    },
  45.     {    "SmallHighDensityAsteroid",    ACTOR_TYPE_ALIEN,    0,        32,    32,    16,    16, 16.f, 2, 20    },
  46.     {    "MediumHighDensityAsteroid",ACTOR_TYPE_ALIEN,    0,        64,    64,    32,    32,    12.f, 4, 40    },
  47.     {    "BigHighDensityAsteroid",    ACTOR_TYPE_ALIEN,    0,        96,    96,    48,    48,  8.f, 4, 80    },
  48.     {    "SmallIndestuctibleAsteroid",ACTOR_TYPE_ALIEN,    0,        32,    32,    16,    16,    16.f, INFINITE_SHIELD, 0    },
  49.     {    "MediumIndestuctibleAsteroid",ACTOR_TYPE_ALIEN,    0,        64,    64,    32,    32,    12.f, INFINITE_SHIELD, 0    },
  50.     {    "BigIndestuctibleAsteroid",ACTOR_TYPE_ALIEN,    0,        96,    96,    48,    48,    8.f, INFINITE_SHIELD, 0        },
  51.     {    "Rusher",                    ACTOR_TYPE_ALIEN,    "rusher.bmp",        64,    32,    32,    16,    16.f, 5, 30        },
  52.     {    "Pod",                        ACTOR_TYPE_ALIEN,    0,            96,    96,    48,    48,    8.f, 10, 100    },
  53.     {    "Homer",                    ACTOR_TYPE_ALIEN,    0,        64,    64,    32,    32,    16.f, 5, 100    },
  54.     {    "Drone",                    ACTOR_TYPE_ALIEN,    0,        32,    32,    16, 16, 16.f, 1, 30        },
  55.     {    "StandardLoner",            ACTOR_TYPE_ALIEN,    0,        64,    64,    32,    32,    16.f, 2, 30    },
  56.     {    "MediumLoner",                ACTOR_TYPE_ALIEN,    0,        64,    64,    32,    32,    16.f, 4, 60    },
  57.     {    "ArmouredLoner",            ACTOR_TYPE_ALIEN,    0,        64,    64,    32,    32, 16.f, 6, 90    },
  58.     {    "OrganicGun",                ACTOR_TYPE_ALIEN,    0,        64,    64,    32,    32,    8.f, 5,    20    },
  59.  
  60.     // bullets
  61.  
  62.     {    "Missile",                    ACTOR_TYPE_BULLET,    "missile.bmp",        16,16,8,8,0.f,INFINITE_SHIELD,0,0,0,1,2,3,10.f,10.f,10.f    },
  63.     {    "HomingMissile",            ACTOR_TYPE_BULLET,    0,        32,32,16,16,0.f,INFINITE_SHIELD,0,0,0,1,2,3,5.f,5.f,5.f        },
  64.     {    "Laser",                    ACTOR_TYPE_BULLET,    0,                    0,0,0,0,0.f,INFINITE_SHIELD,0,0,0,2,4,6,20.f,20.f,20.f        },
  65.     {    "HomerProjectile",            ACTOR_TYPE_ALIENBULLET,0,    16,16,8,8,0.f,1,50,0,0,2,4,6,3.f,3.f,3.f                    },
  66.     {    "Spinner",                    ACTOR_TYPE_ALIENBULLET,0,    16,16,8,8,16.f,INFINITE_SHIELD,0,0,0,1,2,3,5.f,5.f,5.f        },
  67.     {    "Spore",                    ACTOR_TYPE_ALIENBULLET,0,    16,16,8,8,8.f,1,5,0,0,2,4,6,1.5f,1.5f,1.5f },
  68.  
  69.     // weapons
  70.  
  71.     {    "MissileWeapon",            ACTOR_TYPE_WEAPON,    0,                    0,0,0,0,0.f,INFINITE_SHIELD,0,0.1f,0.25f    },
  72.     {    "HomingMissileWeapon",        ACTOR_TYPE_WEAPON,    0,                    0,0,0,0,0.f,INFINITE_SHIELD,0,0.1f,0.25f    },
  73.     {    "LaserWeapon",                ACTOR_TYPE_WEAPON,    0,                    0,0,0,0,0.f,INFINITE_SHIELD,0,0.1f,0.1f     },
  74.     {    "HomerProjectileWeapon",    ACTOR_TYPE_WEAPON,    0,                    0,0,0,0,0.f,INFINITE_SHIELD,0,5.f,5.f        },
  75.     {    "SpinnerWeapon",            ACTOR_TYPE_WEAPON,    0,                    0,0,0,0,0.f,INFINITE_SHIELD,0,1.f,1.f        },
  76.  
  77.     // ship
  78.  
  79.     {    "Ship",                        ACTOR_TYPE_SHIP,    "Ship2.bmp",        64,64,32,32,0.f,100,0    },
  80.  
  81.     // upgrades
  82.  
  83.     {    "Clone",                    ACTOR_TYPE_UPGRADE,    0,        32,32,16,16,8.f,50,50    },
  84.     {    "Wingtip",                    ACTOR_TYPE_UPGRADE,    0,        32,64,16,32,8.f,INFINITE_SHIELD,0    },
  85.     
  86.     // engines
  87.  
  88.     {    "ShipEngine",                ACTOR_TYPE_ENGINE,    0,        16,32,8,0,10.f,INFINITE_SHIELD,0    },
  89.     {    "CloneEngine",                ACTOR_TYPE_ENGINE,    0,        32,32,16,0,10.f,INFINITE_SHIELD,0    },
  90.     {    "RetroEngine",                ACTOR_TYPE_ENGINE,    0,        32,32,16,16,10.f,INFINITE_SHIELD,0    },
  91.  
  92.     // effects
  93.  
  94.     {    "SmallExplosion",            ACTOR_TYPE_ALIEN,    "explode16.bmp",    16,16,8,8,40.f,INFINITE_SHIELD,0    },
  95.     {    "MediumExplosion",            ACTOR_TYPE_ALIEN,    "explode32.bmp",    32,32,16,16,40.f,INFINITE_SHIELD,0    },
  96.     {    "BigExplosion",                ACTOR_TYPE_ALIEN,    "explode64.bmp",    64,64,32,32,40.f,INFINITE_SHIELD,0    },
  97.     {    "StandardDustEffect",        ACTOR_TYPE_EFFECT,    0,        4,4,2,2,16.f,INFINITE_SHIELD,0    },
  98.     {    "HighDensityDustEffect",    ACTOR_TYPE_EFFECT,    0,        4,4,2,2,16.f,INFINITE_SHIELD,0    },
  99.     {    "SmokeEffect",                ACTOR_TYPE_EFFECT,    0,        32,32,16,16,8.f,INFINITE_SHIELD,0    },
  100.     {    "Label",                    ACTOR_TYPE_LABEL,    0,                    0,0,0,0,0.f,INFINITE_SHIELD,0 },
  101.  
  102.     // generators
  103.  
  104.     {    "DroneGenerator",            ACTOR_TYPE_WEAPON,    0,                    0,0,0,0,0.f,INFINITE_SHIELD,0    },
  105.     {    "RusherGenerator",            ACTOR_TYPE_WEAPON,    0,                    0,0,0,0,0.f,INFINITE_SHIELD,0    },
  106.     {    "SporeGenerator",            ACTOR_TYPE_WEAPON,    0,                    0,0,0,0,0.f,INFINITE_SHIELD,0    },
  107.  
  108.     // boss
  109.  
  110.     {    "BossMouth",                ACTOR_TYPE_BOSS,    0,                    0,0,0,0,0.f,INFINITE_SHIELD,0    },
  111.     {    "BossEye",                    ACTOR_TYPE_BOSS,    0,    32,32,16,16,0.f,INFINITE_SHIELD,0    },
  112.     {    "BossControl",                ACTOR_TYPE_BOSS,    0,                    0,0,0,0,0.f,INFINITE_SHIELD,0    }
  113. };
  114.  
  115. //-------------------------------------------------------------
  116.  
  117. bool CActorInfoList::load(const char *filename)
  118. {
  119.     gsCFile::setDirectory(DIRECTORY_ROOT);
  120.  
  121.     gsCIniFile file;
  122.  
  123.     if (!file.open(filename))
  124.         return false;
  125.  
  126.     if (strcmp(file.readString("Title","Game","UNKNOWN"),"Xenon") != 0 ||
  127.         file.readInt("Title","Version",0) != 1) {
  128.         file.close();
  129.         return false;
  130.         }
  131.  
  132.     for (int i = 0; i < INFO_TOTAL; i++) {
  133.  
  134.         ActorInfo *info = &m_info_list[i];
  135.  
  136.         const char *name = info->m_name;
  137.  
  138.         const char *type = file.readString(name,"Type","UNKNOWN");
  139.  
  140.         if        (strcmp(type,"Ship") == 0) info->m_type = ACTOR_TYPE_SHIP;
  141.         else if (strcmp(type,"Bullet") == 0) info->m_type = ACTOR_TYPE_BULLET;
  142.         else if (strcmp(type,"Upgrade") == 0) info->m_type = ACTOR_TYPE_UPGRADE;
  143.         else if (strcmp(type,"Engine") == 0) info->m_type = ACTOR_TYPE_ENGINE;
  144.         else if (strcmp(type,"Weapon") == 0) info->m_type = ACTOR_TYPE_WEAPON;
  145.         else if (strcmp(type,"Pickup") == 0) info->m_type = ACTOR_TYPE_PICKUP;
  146.         else if (strcmp(type,"Alien") == 0) info->m_type = ACTOR_TYPE_ALIEN;
  147.         else if (strcmp(type,"AlienBullet") == 0) info->m_type = ACTOR_TYPE_ALIENBULLET;
  148.         else if (strcmp(type,"Label") == 0) info->m_type = ACTOR_TYPE_LABEL;
  149.         else if (strcmp(type,"Effect") == 0) info->m_type = ACTOR_TYPE_EFFECT;
  150.         else {
  151.             file.close();
  152.             return false;
  153.             }
  154.  
  155.         const char *filename = file.readString(name,"ImageFilename","NONE");
  156.  
  157.         if (strcmp(filename,"NONE") == 0)
  158.             info->m_filename = 0;
  159.         else
  160.             info->m_filename = strdup(filename);
  161.  
  162.         info->m_tile_width = file.readInt(name,"TileWidth",0);
  163.         info->m_tile_height = file.readInt(name,"TileHeight",0);
  164.         info->m_hotspot_x = file.readInt(name,"HotspotX",0);
  165.         info->m_hotspot_y = file.readInt(name,"HotspotY",0);
  166.  
  167.         info->m_initial_shield = file.readInt(name,"InitialShield",INFINITE_SHIELD);
  168.         info->m_kill_bonus = file.readInt(name,"KillBonus",0);
  169.  
  170.         info->m_fire_delay = file.readFloat(name,"FireDelay",0.f);
  171.         info->m_autofire_delay = file.readFloat(name,"AutofireDelay",0.f);
  172.  
  173.         info->m_energy[0] = file.readInt(name,"EnergyGrade0",0);
  174.         info->m_energy[1] = file.readInt(name,"EnergyGrade1",0);
  175.         info->m_energy[2] = file.readInt(name,"EnergyGrade2",0);
  176.  
  177.         info->m_speed[0] = file.readFloat(name,"SpeedGrade0",0);
  178.         info->m_speed[1] = file.readFloat(name,"SpeedGrade1",0);
  179.         info->m_speed[2] = file.readFloat(name,"SpeedGrade2",0);
  180.         }
  181.  
  182.     file.close();
  183.  
  184.     return true;
  185. }
  186.  
  187. //-------------------------------------------------------------
  188.  
  189.