Outpost Universe Forums

Projects & Development => Outpost 2 Programming & Development => Topic started by: spirit1flyer on November 22, 2005, 11:52:21 PM

Title: Placing Units For Multiple Players?
Post by: spirit1flyer on November 22, 2005, 11:52:21 PM
I made this code to test adding in a AI but something doesn't work right. I want to make the AI have units of their own and have more or less units. But any changes I make to struct VehicleInfo unitSet2[] =  never show up?  can anyone give me a little help here?


here is my basedata.h

Code: [Select]
#ifndef BASEDATA_H
#define BASEDATA_H

#include <OP2Helper.h>
#include <BaseBuilder.h>

#define numof(array) (sizeof(array)/sizeof(array[0]))
#define autosize(array) numof(array), array

struct BeaconInfo beaconSet1[] =
{   { 10,  17, mapMiningBeacon, 1, 0, -1},
{  5,  17, mapMiningBeacon, 1, 0, -1},
{  -5,  17, mapMiningBeacon, 0, 0, -1},
{ 0,  17, mapMiningBeacon, 0, 0, -1},
{ 15,  17, mapFumarole, -1, -1, -1},
{ 20,  17, mapFumarole, -1, -1, -1},
};

struct VehicleInfo unitSet1[] =
{
{  14,  14, mapConVec,   mapCommandCenter, 2},
{  13,  14, mapConVec,   mapStructureFactory, 2},
{  14,  13, mapConVec,   mapTokamak, 2},
{  12,  14, mapConVec,   mapStandardLab, 2},
{  12,  13, mapConVec,   mapAgridome, 2},
{  13,  13, mapConVec,   mapCommonOreSmelter, 2},
{ 9,  9, mapCargoTruck,  mapNone, 2},
{ 10,  9, mapCargoTruck,  mapNone, 2},
{  9,  10, mapCargoTruck,  mapNone, 2},
{  10,  10, mapCargoTruck,  mapNone, 2},
{ 10,  13, mapRoboSurveyor,  mapNone, 2},
{ 11,  14, mapRoboMiner,  mapNone, 2},
{  11,   13, mapEarthworker,  mapNone, 2},
{  10,  14, mapRoboDozer,  mapNone, 2},
{  15,  10, mapLynx,  mapMicrowave, 2},
{  16,  10, mapLynx,  mapMicrowave, 2},
{  15,  9, mapLynx,  mapMicrowave, 2},
{  16,  9, mapLynx,  mapMicrowave, 2},
};
struct VehicleInfo unitSet2[] =
{
{  19,  19, mapConVec,   mapCommandCenter, 2},
};

struct BaseInfo base[] =
{
{ autosize(beaconSet1), 0, 0, 0,0, 0, 0, autosize(unitSet1) },
{ autosize(beaconSet1), 0, 0, 0,0, 0, 0, autosize(unitSet2) },
};

struct StartLocation startLocation[] =
{
{ 49,  14, &base[0]},
{ 29,  14, &base[0]},
};

and here is my main.cpp

Code: [Select]
#define WIN32_LEAN_AND_MEAN  
#include <windows.h>

#include <Outpost2DLL.h>
#include <OP2Helper.h>
#include <BaseBuilder.h>
#include "BaseData.h"


char MapName[]   = "cow.map";
char LevelDesc[]  = "easy colony plymouth. or Sandbox game";
char TechtreeName[]  = "multitek.TXT";  
SDescBlock DescBlock = { Colony, 2, 12, 0 };


BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
if (fdwReason == DLL_PROCESS_ATTACH)
{
  DisableThreadLibraryCalls(hinstDLL);
}

    return TRUE;
}


int InitProc()
{
int i;

RandomizeStartingLocations(autosize(startLocation));
Player[0].GoPlymouth();
Player[1].GoEden();


for (i = 0; i < TethysGame::NoPlayers(); i++)
{
  InitPlayerResources(i);

  StartLocation &sLoc = startLocation[i];
  CreateBase(i, sLoc.x, sLoc.y, *sLoc.baseInfo);
  Player[i].CenterViewOn(sLoc.x, sLoc.y);

}


// Misc initialization
TethysGame::CreateWreck(20, 20, (map_id)11999, 0);
    
    TethysGame::ForceMoraleGood(-1);
if (TethysGame::UsesMorale())
  TethysGame::FreeMoraleLevel(-1);
TethysGame::SetDaylightEverywhere(TethysGame::UsesDayNight() == 0);
TethysGame::SetDaylightMoves(-1);
GameMap::SetInitialLightLevel(-62);

    
Trigger population = CreateResourceTrigger(1, 1, resColonists, 400, 0, cmpGreaterEqual, "NoResponseToTrigger");

CreateVictoryCondition(1, 0, population, "Have 400 Colonists.");


return 1; // return 1 if OK; 0 on failure

void AIProc()
{



}

void __cdecl GetSaveRegions(struct BufferDesc &bufDesc)
{
bufDesc.bufferStart = 0;
bufDesc.length = 0;  
}


int StatusProc()
{

return 0; // must return 0
}

SCRIPT_API void NoResponseToTrigger()
{

}
Title: Placing Units For Multiple Players?
Post by: Hooman on November 23, 2005, 01:21:43 AM
Lol, easy to spot error. :)

Take a look at:
Code: [Select]
struct StartLocation startLocation[] = 
{
{ 49,  14, &base[0]},
{ 29,  14, &base[0]},
};


Change the second line to &base[1].

You've built two base layouts, but only ever used one. That, and the only difference between the two, was the units.

 
Title: Placing Units For Multiple Players?
Post by: spirit1flyer on November 23, 2005, 11:01:58 AM
Quote
Lol, easy to spot error.

great thanks  :)

Quote
You've built two base layouts, but only ever used one. That, and the only difference between the two, was the units.

yea and the difference between us is that you can see the errors and I can't  :P  
Title: Placing Units For Multiple Players?
Post by: spirit1flyer on November 23, 2005, 11:48:55 AM
Using my code above, How would I make it so the human player is always player 1? and is always eden?


Edit: it looks like all I need to do is take out
Code: [Select]
RandomizeStartingLocations(autosize(startLocation));  
but it does seem to keep me from making the human player just have the units and not the base

Edit 2 :  I think I need to add a start location in but I don't know how to do that yet. If anyone knows how to do it I would be thankful for the help


Edit 3:  I don't know quite how I did it I just changed
Code: [Select]
struct StartLocation startLocation[] = 
{
{ 49,  14, &base[1]},
{ 29,  14, &base[0]},
};

just a little and I got it working so thanks for the help with the other problem