Commit 38f8a496 authored by progs's avatar progs

Arbres


git-svn-id: svn://svn.gna.org/svn/menareants/trunk@815 6832cf7c-ce15-0410-9f4e-c008ec2580bf
parent 4c57c97a
2006-08-22 Romain Bignon <progs@headfucking.net>
* server/IA.cpp: Restructuration un peu de FirstMovements() avec gestion de strategies que veut faire l'IA.
* Makefile.am: Mettre à jour avec "svn update" dorénavant, pour ne pas avoir à faire ./config.status --recheck.
* Batiments.h (ECTrees): Arbres qui permettent de se cacher derrière.
* src/data/anims/units: Nouvelles images pour les membres de la ville.
2006-08-21 Romain Bignon <progs@headfucking.net>
* server/IA.cpp: Correction d'un bug qui faisait que si un joueur partait en pleine partie, et que tous les autres joueurs
étaient prets, l'animation ne se lançait pas car les IA attendent que tout le monde soit pret pour se mettre pretes.
* src/MapEditor.cpp: Possibilité d'utiliser MAJ pour faire une selection d'un rectangle (première case selectionnée, puis
MAJ + case du coin opposé du rectangle de selection formé).
......
......@@ -7,6 +7,14 @@ AUTOMAKE_OPTIONS = foreign
doxygen:
@cd src && /usr/bin/doxygen && cd ../server && /usr/bin/doxygen && cd ../lib && /usr/bin/doxygen && cd ..
@echo "Created code documentation in `pwd`/doc"
update:
@echo "Updating.."
@svn update
@echo "Compilation.."
@./config.status --recheck > /dev/null && make > /dev/null
@echo "MenAreAnts is Up-to-date !"
@echo "You have to reinstall (with make install) this game."
clean-generic:
-rm -f .#* *~
\ No newline at end of file
-rm -f .#* *~
......@@ -600,6 +600,14 @@ doxygen:
@cd src && /usr/bin/doxygen && cd ../server && /usr/bin/doxygen && cd ../lib && /usr/bin/doxygen && cd ..
@echo "Created code documentation in `pwd`/doc"
update:
@echo "Updating.."
@svn update
@echo "Compilation.."
@./config.status --recheck > /dev/null && make > /dev/null
@echo "MenAreAnts is Up-to-date !"
@echo "You have to reinstall (with make install) this game."
clean-generic:
-rm -f .#* *~
# Tell versions [3.59,3.63) of GNU make to not export all variables.
......
......@@ -39,8 +39,9 @@ Note: Lire le fichier DEVELOPPEURS pour participer
- batiment ou unité ou upgrade du lance missile qui tire un champ electrique
- case Montagne où personne peut aller
- "unité" mur
- forets où on peut se cacher
- déchets radioactifs après une bombe nucléaire
- sous marins
- lance missile marin
- URSS
- Goulags où il est possible de mettre les prisoniers et qui font rapporter de l'argent
- France
......
......@@ -24,11 +24,45 @@
#include "Map.h"
/********************************************************************************************
* ECBTrees *
********************************************************************************************/
/** This is Forest */
class ECBTrees : public virtual ECBEntity
{
/* Constructeur/Destructeur */
public:
ENTITY_EMPTY_CONSTRUCTOR(ECBTrees) {}
ENTITY_CONSTRUCTOR(ECBTrees) {}
/* Constantes */
public:
virtual e_type Type() const { return E_TREES; }
virtual uint Cost() const { return 10000; }
virtual uint InitNb() const { return 1;}
virtual uint Visibility() const { return 0; } /**< Elle ne voit rien du tout */
virtual bool CanAttaq(const ECBEntity* e) { return false; }
virtual const char* Qual() const { return "la fort"; }
/** Mine is a building to prevent from constructing buildings here, and to be drawed at background. */
virtual bool IsBuilding() const { return true; }
virtual bool IsCity() const { return true; }
virtual bool AddUnits(uint) { return false; }
virtual bool WantMove(ECBMove::E_Move, int) { return false; }
virtual bool WantAttaq(uint x, uint y, bool) { return false; }
bool CanCreate(const ECBEntity*) { return false; }
};
/********************************************************************************************
* ECBMine *
********************************************************************************************/
#define MINE_CHARGETIME 2
/** This is a char factory */
/** This is a mine */
class ECBMine : public virtual ECBEntity
{
/* Constructeur/Destructeur */
......@@ -190,7 +224,7 @@ public:
public:
virtual e_type Type() const { return E_CAPITALE; }
virtual uint Cost() const { return 50000; }
virtual uint Cost() const { return 15000; }
virtual uint InitNb() const { return 2000; }
virtual uint Visibility() const { return 4; }
......
......@@ -180,6 +180,7 @@ public:
/*15*/E_MINE,
/*16*/E_OBELISK,
/*17*/E_MCDO,
/*18*/E_TREES,
/*XX*/E_END
};
......
......@@ -26,4 +26,5 @@ U_DECL(ECTourist)
U_DECL(ECMine)
U_DECL(ECObelisk)
U_DECL(ECMcDo)
U_DECL(ECTrees)
U_END
......@@ -25,6 +25,27 @@
#include "server/Map.h"
#include "lib/Batiments.h"
/********************************************************************************************
* ECTrees *
********************************************************************************************/
class ECTrees : public ECEntity, public ECBTrees
{
/* Constructeur/Destructeur */
public:
ENTITY_CONSTRUCTOR(ECTrees) {}
/* Methodes */
public:
/** @return last case */
virtual bool Return() { return false; }
virtual void CreateLast() {}
virtual void Union(ECEntity*) { return; }
};
/********************************************************************************************
* ECMine *
********************************************************************************************/
......
......@@ -1517,6 +1517,7 @@ bool EChannel::RemovePlayer(ECBPlayer* ppl, bool use_delete)
if(State() != EChannel::PLAYING || !CheckEndOfGame())
CheckReadys();
return true;
}
......
This diff is collapsed.
......@@ -29,6 +29,8 @@
class ECPlayer;
class EChannel;
class ECBEntity;
class ECBCase;
/** Artificial Intelligence class based on TClient */
class TIA : public TClient
......@@ -44,17 +46,19 @@ public:
/** Send an unformated message. */
int sendbuf(char* buf, int len) { return ia_recv(buf); }
int ia_recv(std::string msg);
void recv_msgs();
int recv_one_msg(std::string msg);
int ia_send(std::string msg) { return parsemsg(msg); }
bool Join(EChannel* chan);
void FirstMovements();
void MakeAllies();
void CheckIfIReady();
void WantMoveTo(ECBEntity* enti, ECBCase* dest);
/* Attributs */
public:
......@@ -67,11 +71,17 @@ public:
private:
static int SETCommand (std::vector<ECPlayer*> players, TIA *me, std::vector<std::string> parv);
static int LEACommand (std::vector<ECPlayer*> players, TIA *me, std::vector<std::string> parv);
static int ARMCommand (std::vector<ECPlayer*> players, TIA *me, std::vector<std::string> parv);
bool lock;
std::vector<std::string> msgs;
std::map<int, uint> units;
/*struct
{
} Action;*/
std::map<ECBEntity*, bool> recruted;
};
#endif /* ECD_IA_H */
......@@ -209,3 +209,26 @@ UNIT 2 * 13,2 500
UNIT 3 * 14,2 1000
UNIT 13 * 13,1 1000
UNIT 1 * 14,1 1000
UNIT 18 * 20,7 1
UNIT 18 * 21,7 1
UNIT 18 * 22,7 1
UNIT 18 * 26,14 1
UNIT 18 * 25,14 1
UNIT 18 * 25,15 1
UNIT 18 * 26,15 1
UNIT 18 * 26,16 1
UNIT 18 * 25,13 1
UNIT 18 * 24,13 1
UNIT 18 * 24,14 1
UNIT 18 * 26,17 1
UNIT 18 * 26,18 1
UNIT 18 * 25,18 1
UNIT 18 * 25,17 1
UNIT 18 * 25,19 1
UNIT 18 * 25,16 1
UNIT 18 * 24,17 1
UNIT 18 * 24,16 1
UNIT 18 * 44,11 1
UNIT 18 * 44,18 1
UNIT 18 * 5,12 1
UNIT 18 * 7,19 1
......@@ -176,3 +176,49 @@ UNIT 2 * 26,10 500
UNIT 13 * 24,13 1000
UNIT 2 * 24,14 500
UNIT 13 * 24,18 1000
UNIT 18 * 18,6 1
UNIT 18 * 17,6 1
UNIT 18 * 18,5 1
UNIT 18 * 17,7 1
UNIT 18 * 18,7 1
UNIT 18 * 18,13 1
UNIT 18 * 17,14 1
UNIT 18 * 18,14 1
UNIT 18 * 29,11 1
UNIT 18 * 29,12 1
UNIT 18 * 28,12 1
UNIT 18 * 28,13 1
UNIT 18 * 29,13 1
UNIT 18 * 27,15 1
UNIT 18 * 27,16 1
UNIT 18 * 26,17 1
UNIT 18 * 26,16 1
UNIT 18 * 34,5 1
UNIT 18 * 33,5 1
UNIT 18 * 33,6 1
UNIT 18 * 34,4 1
UNIT 18 * 33,4 1
UNIT 18 * 33,3 1
UNIT 18 * 25,7 1
UNIT 18 * 24,7 1
UNIT 18 * 24,8 1
UNIT 18 * 25,8 1
UNIT 18 * 25,6 1
UNIT 18 * 6,10 1
UNIT 18 * 6,11 1
UNIT 18 * 7,11 1
UNIT 18 * 7,12 1
UNIT 18 * 6,12 1
UNIT 18 * 5,12 1
UNIT 18 * 5,11 1
UNIT 18 * 5,13 1
UNIT 18 * 6,13 1
UNIT 18 * 2,16 1
UNIT 18 * 3,16 1
UNIT 18 * 8,14 1
UNIT 18 * 8,15 1
UNIT 18 * 9,15 1
UNIT 18 * 7,5 1
UNIT 18 * 7,6 1
UNIT 18 * 8,6 1
UNIT 18 * 8,7 1
......@@ -3,7 +3,7 @@
NAME IA Map
MISSION
PLAYER B
PLAYER A FuckYourself
PLAYER A
X 28
Y 10
MAP
......@@ -90,3 +90,58 @@ UNIT 4 A 18,9 1500
UNIT 5 A 10,3 100
UNIT 5 A 10,6 100
UNIT 15 A 8,5 1
UNIT 1 A 11,1 1000
UNIT 18 * 18,3 1
UNIT 18 * 18,6 1
UNIT 18 * 18,5 1
UNIT 18 * 18,4 1
UNIT 18 * 17,5 1
UNIT 18 * 17,4 1
UNIT 18 * 16,4 1
UNIT 18 * 16,5 1
UNIT 18 * 15,4 1
UNIT 18 * 15,5 1
UNIT 18 * 10,3 1
UNIT 18 * 10,4 1
UNIT 18 * 10,5 1
UNIT 18 * 10,6 1
UNIT 18 * 9,5 1
UNIT 18 * 9,4 1
UNIT 18 * 13,0 1
UNIT 18 * 14,0 1
UNIT 18 * 15,0 1
UNIT 18 * 12,0 1
UNIT 18 * 12,1 1
UNIT 18 * 13,1 1
UNIT 18 * 14,1 1
UNIT 18 * 15,1 1
UNIT 18 * 14,2 1
UNIT 18 * 13,2 1
UNIT 18 * 11,1 1
UNIT 18 * 14,9 1
UNIT 18 * 14,8 1
UNIT 18 * 13,9 1
UNIT 18 * 13,8 1
UNIT 18 * 12,8 1
UNIT 18 * 12,9 1
UNIT 18 * 11,9 1
UNIT 18 * 15,8 1
UNIT 18 * 4,1 1
UNIT 18 * 4,0 1
UNIT 18 * 3,0 1
UNIT 18 * 4,2 1
UNIT 18 * 4,3 1
UNIT 18 * 4,4 1
UNIT 18 * 4,5 1
UNIT 18 * 4,6 1
UNIT 18 * 4,7 1
UNIT 18 * 3,7 1
UNIT 18 * 3,6 1
UNIT 18 * 3,5 1
UNIT 18 * 3,4 1
UNIT 18 * 3,3 1
UNIT 18 * 3,2 1
UNIT 18 * 3,1 1
UNIT 18 * 4,8 1
UNIT 18 * 3,8 1
UNIT 18 * 3,9 1
......@@ -11,7 +11,7 @@ mAAAgmAAAktAAAttAAAttAAAttAB*ttAB*ttAB*tmAB*lmAB*hmBA*gmBA*ktBA*ttBA*ttBA*ttBBBt
mAAAdtAAAttAAAttAAAttAAAttAB*ttAB*ttAB*ttAB*tmAB*cmBA*dtBA*ttBA*ttBA*ttBA*ttBBBttBBBttBBBttBBBtmBBBc
mAAAdtAAAttAAAttAAAttAAAttAB*ttAB*ttAB*ttAB*tpAB*ppBA*qtBA*ttBA*ttBA*ttBA*ttBBBttBBBttBBBttBBBtmBBBc
mAAAdtAAAttAAAttAAAttAAAttAB*ttAB*ttAB*ttAB*tmAB*cmBA*dtBA*ttBA*ttBA*ttBA*ttBBBttBBBttBBBttBBBtmBBBc
mACAdtACAttACAttACAttACAttAE*ttAE*ttAE*tmAE*jmAE*emBD*fmBD*itBD*ttBD*ttBD*ttBCBttBCBttBCBttBCBtmBCBc
mACAdtACAttACAttACAttACAttAE*ttAB*ttAB*tmAE*jmAE*emBD*fmBD*itBD*ttBD*ttBD*ttBCBttBCBttBCBttBCBtmBCBc
mACAdtACAttACAttACAttACAttAE*ttAE*ttAE*tmAE*lmAE*bmBD*bmBD*ktBD*ttBD*ttBD*ttBCBttBCBttBCBttBCBtmBCBc
mACAdtACAttACAttACAttACAttAE*ttAE*ttAE*ttAE*ttAE*ttBD*ttBD*ttBD*ttBD*ttBD*ttBCBttBCBttBCBttBCBtmBCBc
mACAdtACAttACAttACAttACAttAE*ttAE*ttAE*tmAE*jmAE*amBD*amBD*itBD*ttBD*ttBD*ttBCBttBCBttBCBttBCBtmBCBc
......@@ -87,3 +87,24 @@ UNIT 13 * 6,12 1000
UNIT 13 * 12,3 1000
UNIT 13 * 12,11 1000
UNIT 13 * 13,7 1000
UNIT 18 * 7,1 1
UNIT 18 * 8,2 1
UNIT 18 * 7,2 1
UNIT 18 * 6,2 1
UNIT 18 * 6,1 1
UNIT 18 * 5,1 1
UNIT 18 * 13,1 1
UNIT 18 * 14,1 1
UNIT 18 * 14,2 1
UNIT 18 * 15,2 1
UNIT 18 * 15,1 1
UNIT 18 * 7,7 1
UNIT 18 * 8,7 1
UNIT 18 * 9,7 1
UNIT 18 * 10,7 1
UNIT 18 * 12,7 1
UNIT 18 * 11,7 1
UNIT 18 * 7,6 1
UNIT 18 * 12,6 1
UNIT 18 * 8,12 1
UNIT 18 * 11,12 1
......@@ -47,6 +47,12 @@ UNIT 1 A 3,4 1000
UNIT 3 A 3,5 1000
UNIT 2 A 2,5 500
UNIT 13 A 2,4 1000
UNIT 18 A 5,1 1
UNIT 18 A 5,2 1
UNIT 18 A 5,3 1
UNIT 18 A 4,3 1
UNIT 18 A 4,4 1
UNIT 18 A 5,4 1
UNIT 6 B 9,1 1000
UNIT 1 B 9,1 1000
UNIT 1 B 11,4 1000
......@@ -57,6 +63,10 @@ UNIT 13 B 10,4 1000
UNIT 2 B 8,2 500
UNIT 3 B 9,2 1000
UNIT 13 B 8,1 1000
UNIT 18 B 8,3 1
UNIT 18 B 9,3 1
UNIT 18 B 9,4 1
UNIT 18 B 8,4 1
UNIT 3 * 5,7 1000
UNIT 3 * 10,7 1000
UNIT 2 * 4,7 500
......
......@@ -119,3 +119,19 @@ UNIT 1 * 17,4 1000
UNIT 3 * 17,5 1000
UNIT 2 * 16,5 500
UNIT 13 * 16,4 1000
UNIT 18 * 13,3 1
UNIT 18 * 14,3 1
UNIT 18 * 13,4 1
UNIT 18 * 14,4 1
UNIT 18 * 10,15 1
UNIT 18 * 11,15 1
UNIT 18 * 11,16 1
UNIT 18 * 10,16 1
UNIT 18 * 9,16 1
UNIT 18 * 16,15 1
UNIT 18 * 16,16 1
UNIT 18 * 17,15 1
UNIT 18 * 17,16 1
UNIT 18 * 18,16 1
UNIT 18 * 8,5 1
UNIT 18 * 19,5 1
......@@ -58,6 +58,36 @@ private:
ECSpriteBase *explosion;
};
/********************************************************************************************
* ECTrees *
********************************************************************************************/
class ECTrees : public ECBatiment, public ECBTrees
{
/* Constructeur/Destructeur */
public:
ENTITY_EMPTY_CONSTRUCTOR(ECTrees) {}
ENTITY_CONSTRUCTOR(ECTrees), ECBatiment(Resources::Trees_Face()) {}
/* Infos */
public:
virtual const char* Name() const { return "Fort"; }
virtual const char* Infos() const { return "Quand une unit passe sous une fort elle disparait aux yeux de l'enemie."; }
virtual const char* Description() const { return Infos(); }
virtual ECImage* Icon() const { return Resources::Trees_Icon(); }
virtual bool CanBeSelected() const { return false; }
virtual bool OnTop() const { return true; }
virtual bool IsHiddenByMe(ECBEntity* e) const
{
assert(e);
if(e->IsInfantry()) return true;
else return false;
}
};
/********************************************************************************************
* ECMine *
********************************************************************************************/
......@@ -329,6 +359,12 @@ public:
ENTITY_CONSTRUCTOR(ECharFact), ECBatiment(Resources::CharFact_Face()) {}
virtual void Init()
{
ECEntity::Init();
Image()->SetAnim(true);
}
/* Infos */
public:
......
......@@ -368,7 +368,7 @@ int ARMCommand::Exec(PlayerList players, EC_Client *me, ParvList parv)
(*it)->Lock();
}
}
if(flags == ARM_CREATE && InGameForm && !entities.empty())
if(flags == ARM_CREATE && InGameForm && !entities.empty() && entities.front()->CanBeSelected())
InGameForm->BarreAct->SetEntity(entities.front());
}
......@@ -468,10 +468,11 @@ const char TInGameForm::GetWant(ECEntity* entity, int button_type)
if(!acase || acase->Showed() <= 0)
return W_NONE;
std::vector<ECBEntity*> ents = acase->Entities()->List();
if(Player()->Ready())
return W_NONE;
return (!ents.empty() && ECMap::CanSelect(acase)) ? W_SELECT : W_NONE;
std::vector<ECBEntity*> ents = acase->Entities()->List();
ECBCase* e_case = !entity ? 0 : entity->Move()->Empty() ? entity->Case() : entity->Move()->Dest();
if(entity && !IsPressed(SDLK_LALT) && entity->Owner() && entity->Owner()->IsMe())
......@@ -484,7 +485,7 @@ const char TInGameForm::GetWant(ECEntity* entity, int button_type)
return W_MATTAQ;
}
FOR(ECBEntity*, ents, enti)
if(entity->CanAttaq(enti) && !entity->Like(enti))
if(entity->CanAttaq(enti) && !entity->Like(enti) && !entity->IsHiddenOnCase())
return W_ATTAQ;
}
if(IsPressed(SDLK_LCTRL))
......@@ -519,7 +520,7 @@ const char TInGameForm::GetWant(ECEntity* entity, int button_type)
}
}
if(!ents.empty())
if(!ents.empty() && ECMap::CanSelect(acase))
return W_SELECT;
return W_NONE;
......
......@@ -373,8 +373,9 @@ TCredits::TCredits(ECImage* w)
"d'autorit de Mme Gay (histoire) et Mme Goetz (espagnol).\n"
"\n"
"Merci lodesi pour ses patchs.\n"
"Merci Anice pour sa voix.\n"
"\n"
"Merci galement Zic, Spouize, Nico, Mathieu, Thomas et Anice pour avoir test le jeu.", white_color);
"Merci galement Zic, Spouize, Nico, Mathieu, et Thomas pour avoir test le jeu.", white_color);
Memo->ScrollUp();
OkButton = AddComponent(new TButtonText(SCREEN_WIDTH/2-75,SCREEN_HEIGHT-70, 150,50, "Retour",
......
......@@ -227,11 +227,34 @@ bool ECEntity::Test(int souris_x, int souris_y)
&& (image->Y() <= souris_y) && (souris_y < int(image->Y()+image->GetHeight()))));
}
bool ECEntity::IsHiddenOnCase()
{
if(!Channel())
return false;
if((Channel()->CurrentEvent() & ARM_ATTAQ) && EventType() & ARM_ATTAQ)
return false;
if(Owner() && (Owner()->IsMe() || Owner()->IsAllie(Channel()->GetMe())))
return false;
std::vector<ECBEntity*> ents = Case()->Entities()->List();
bool hidden = false;
FOR(ECBEntity*, ents, enti)
if(dynamic_cast<ECEntity*>(enti)->IsHiddenByMe(this))
hidden = true;
else if(enti->Owner() && (dynamic_cast<ECPlayer*>(enti->Owner())->IsMe() || enti->Owner()->IsAllie(Channel()->GetMe())))
return false;
return hidden;
}
void ECEntity::Draw()
{
if(image && !Parent() && (!Map()->ShowMap()->HaveBrouillard() || Case()->Showed() > 0))
{
image->draw();
if(!IsHiddenOnCase())
image->draw();
if(attaq)
attaq->draw();
......@@ -361,7 +384,7 @@ void ECEntity::ChangeCase(ECBCase* newcase)
void ECEntity::SetShowedCases(bool show, bool forced)
{
if(!Case() || !Owner() || !forced && (Parent() ||
if(!Case() || !Owner() || !Visibility() || !forced && (Parent() ||
!dynamic_cast<ECPlayer*>(Owner())->IsMe() && !Owner()->IsAllie(dynamic_cast<EChannel*>(Owner()->Channel())->GetMe())))
return;
......@@ -563,6 +586,22 @@ ECBCase* ECMap::CreateCase(uint _x, uint _y, char type_id)
return 0;
}
bool ECMap::CanSelect(ECBCase* c)
{
std::vector<ECBEntity*> es = c->Entities()->List();
bool continuer = false;
FOR(ECBEntity*, es, enti)
{
ECEntity* entii = dynamic_cast<ECEntity*>(enti);
if(entii->CanBeSelected() && !entii->IsHiddenOnCase())
{
continuer = true;
break;
}
}
return continuer;
}
/** \note Preview use two screen pixels for one pixel in map */
void ECMap::CreatePreview(uint width, uint height, int flags)
{
......@@ -652,7 +691,9 @@ void ECMap::CreatePreview(uint width, uint height, int flags)
for(std::vector<ECBEntity*>::iterator enti = ents.begin(); enti != ents.end(); ++enti)
{
if(!(*enti)->Case() || (*enti)->Parent() || Brouillard() &&
dynamic_cast<ECase*>((*enti)->Case())->Showed() <= 0)
dynamic_cast<ECase*>((*enti)->Case())->Showed() <= 0 ||
dynamic_cast<ECEntity*>(*enti)->IsHiddenOnCase() ||
!dynamic_cast<ECEntity*>(*enti)->CanBeSelected())
continue;
Color col = (*enti)->Owner() ? color_eq[(*enti)->Owner()->Color()] : white_color;
yy = (*enti)->Case()->Y() * size_y;
......
......@@ -134,6 +134,9 @@ public:
virtual const char* Description() const = 0;
virtual ECImage* Icon() const = 0;
virtual ECSpriteBase* DeadCase() const;
virtual bool CanBeSelected() const { return true; }
virtual bool OnTop() const { return false; }
virtual bool IsHiddenByMe(ECBEntity* e) const { return false; }
/* Methodes */
public:
......@@ -163,6 +166,8 @@ public:
/* Attributs */
public:
bool IsHiddenOnCase();
bool Test(int x, int y);
ECSprite* Image() const { return image; }
......@@ -351,6 +356,8 @@ public:
virtual ECBCase* CreateCase(uint x, uint y, char type_id);
static bool CanSelect(ECBCase* c);
/* Attributs */
public:
......
......@@ -199,6 +199,8 @@
R_RESOURCE(ECSpriteBase, McDo_Right, "units/mcdo/right");
R_RESOURCE(ECSpriteBase, McDo_Dos, "units/mcdo/dos");
R_RESOURCE(ECSpriteBase, McDo_Caserne, "units/mcdo/caserne");
R_RESOURCE(ECImage, Trees_Icon, PKGDATADIR_PICS "units/trees_icon.png");
R_RESOURCE(ECSpriteBase, Trees_Face, "units/trees");
#undef R_RESOURCE
#undef R_RESOURCE_P
#define R_TYPE(type) std::vector<type*> Resources::type##_objects
......
......@@ -234,6 +234,8 @@ public:
R_RESOURCE(ECSpriteBase, McDo_Right);
R_RESOURCE(ECSpriteBase, McDo_Dos);
R_RESOURCE(ECSpriteBase, McDo_Caserne);
R_RESOURCE(ECImage, Trees_Icon);
R_RESOURCE(ECSpriteBase, Trees_Face);
};
#undef R_RESOURCE
......
src/data/anims/cases/capitale/1.png

17.2 KB | W: | H:

src/data/anims/cases/capitale/1.png

2.33 KB | W: | H:

src/data/anims/cases/capitale/1.png
src/data/anims/cases/capitale/1.png
src/data/anims/cases/capitale/1.png
src/data/anims/cases/capitale/1.png
  • 2-up
  • Swipe
  • Onion skin
src/data/anims/cases/ville/1.png

15.4 KB | W: | H:

src/data/anims/cases/ville/1.png

2.22 KB | W: | H:

src/data/anims/cases/ville/1.png
src/data/anims/cases/ville/1.png
src/data/anims/cases/ville/1.png
src/data/anims/cases/ville/1.png
  • 2-up
  • Swipe
  • Onion skin
src/data/anims/units/caserne/1.png

15.8 KB | W: | H:

src/data/anims/units/caserne/1.png

3.58 KB | W: | H:

src/data/anims/units/caserne/1.png
src/data/anims/units/caserne/1.png
src/data/anims/units/caserne/1.png
src/data/anims/units/caserne/1.png
  • 2-up
  • Swipe
  • Onion skin
src/data/anims/units/charfact/1.png

15.3 KB | W: | H:

src/data/anims/units/charfact/1.png

1.07 KB | W: | H:

src/data/anims/units/charfact/1.png
src/data/anims/units/charfact/1.png
src/data/anims/units/charfact/1.png
src/data/anims/units/charfact/1.png
  • 2-up
  • Swipe
  • Onion skin
FILES: 1
1.png 0
FILES: 5
1.png 1000
2.png 200
3.png 200
4.png 200
5.png 200
src/data/anims/units/defensetower/1.png

12.6 KB | W: | H:

src/data/anims/units/defensetower/1.png

12.7 KB | W: | H:

src/data/anims/units/defensetower/1.png
src/data/anims/units/defensetower/1.png
src/data/anims/units/defensetower/1.png
src/data/anims/units/defensetower/1.png
  • 2-up
  • Swipe
  • Onion skin
src/data/anims/units/obelisk/1.png

17 KB | W: | H:

src/data/anims/units/obelisk/1.png

16.6 KB | W: | H:

src/data/anims/units/obelisk/1.png
src/data/anims/units/obelisk/1.png
src/data/anims/units/obelisk/1.png
src/data/anims/units/obelisk/1.png
  • 2-up
  • Swipe
  • Onion skin
src/data/anims/units/obelisk/2.png

17 KB | W: | H:

src/data/anims/units/obelisk/2.png

16.6 KB | W: | H:

src/data/anims/units/obelisk/2.png
src/data/anims/units/obelisk/2.png
src/data/anims/units/obelisk/2.png
src/data/anims/units/obelisk/2.png
  • 2-up
  • Swipe
  • Onion skin
src/data/anims/units/obelisk/3.png

17 KB | W: | H:

src/data/anims/units/obelisk/3.png

16.6 KB | W: | H:

src/data/anims/units/obelisk/3.png
src/data/anims/units/obelisk/3.png
src/data/anims/units/obelisk/3.png
src/data/anims/units/obelisk/3.png
  • 2-up
  • Swipe
  • Onion skin
src/data/anims/units/obelisk/4.png

16.9 KB | W: | H:

src/data/anims/units/obelisk/4.png

16.7 KB | W: | H:

src/data/anims/units/obelisk/4.png
src/data/anims/units/obelisk/4.png
src/data/anims/units/obelisk/4.png
src/data/anims/units/obelisk/4.png
  • 2-up
  • Swipe
  • Onion skin
src/data/anims/units/obelisk/5.png

17 KB | W: | H:

src/data/anims/units/obelisk/5.png

16.9 KB | W: | H:

src/data/anims/units/obelisk/5.png
src/data/anims/units/obelisk/5.png
src/data/anims/units/obelisk/5.png
src/data/anims/units/obelisk/5.png
  • 2-up
  • Swipe
  • Onion skin