procedural platformer in project anarchy game

Upload: alexandru-robert-dumbrava

Post on 09-Jan-2016

239 views

Category:

Documents


0 download

DESCRIPTION

Small procedural platformer in Project Anarchy using FSM and LD with PG. It's a small presentation about binding LD with PG. Game was written in LUA and C++.

TRANSCRIPT

Joc de tip platformer n Project Anarchy folosind algoritmi de generare procedural a nivelurilor

Joc de tip platformer n Project Anarchy folosindalgoritmi de generare procedural a nivelurilor

Student: DBV

Profesor coordonator : TDI

Un joc de tip platformer este un joc video care implic micarea unui avatar pentru a sri intre platforme suspendate sau peste obstacole sau chiar peste amndou pentru a avansa in lume. Aceste provocri sunt cunoscute ca i puzzle de srituri sau alergare liber (free-running). Juctorul controleaz sritura pentru a evita ciocnirea sau cderea de pe platformele suspendate.

Platforme / ObstacoleJucator / InamiciJocuri de tip platformerConinut proceduraln industria de jocuri digitale generarea de coninut procedural a fost folosit cu succes pentru a crea un coninut variat. Acest tip de coninut poate varia de la lumi ale jocului, la nivele, obiecte sau decoraii. Exemple de jocuri cu coninut generat procedural : Terraria, Civilisation, Diablo, Borderlands sau SpeedTree. Un exemplu interesant de generare procedurala o reprezint jocul Elite, un joc cu comer in spatiu unde doi programatori au reuit sa genereze 8 galaxi si 256 de stele cu numai 22KB de memorie, folosind doar numere pseudo-aleatoare.

Modelarea unui jocJocurile combin structuri de design. Regulile guverneaz ca jocul s foloseasc structurile in asa mod incat sa aib sens pentru utilizator. Contructia jocului da sens actiunii caracterelor non-jucabile, sau a altor entiti care populeaz jocul. Structurile n joc sunt fundamentale care sunt inter-conectate fiecare intre ele printr-o relatie intr-un mod stabil si consistent ce dau sens jocului. Ele trebuie s fie observabile si recunoscubile din perspectiva utilizatorului, cat si pentru caracterul folosit de juctor. Structurile in jocuri opereaz ca un context si particip n procesul de construire a sensului jocului.

Combinarea ntre modelare i generare proceduralGenerarea procedural de coninut poate fi combinat cu design-ul de niveluri. Cea mai buna metoda este acea de a crea un generator de continut compositional, care vede fiecare model ca un element de desing spatial i care simplu le interconecteaz, unul dupa altul bazndu-se pe niste reguli. Acest lucru se poate face fie cu elemente statice fie cu elemente parametrizabile. Acest lucru se poate face fie intr-o dimensiune ca in Tanagra fie n dou dimensiuni ca in ORE sau chiar n trei dimensiuni.

Project Anarchy (1)Project Anarchy de la Havok Industries este un motor de jocuri complet i conine o suit de componente de ultima generaie pentru crearea de jocuri pe dispozitive mobile. Tot odata cuprinde i o mare comunitate de dezvoltatori. Motorul Project Anarchy este inc la nceput dar promite c se va dezvolta rapid i c va acapara piaa deinut de alte motoare de jocuri precum Unity3D, Unreal 4, CryEngine sau altele. Project Anarchy este complet gratuit pentru dezvoltarea pe platforme mobile cum ar fi iOS, Android sau mai noul sistem de operare de la Samsung Tizen

Project Anarchy (2)

Project Anarchy (3)

Plugin Vision (1)Plugin-urile pentru motorul Project Anarchy sunt colecii de clase C++ compilate ntr-o bibliotec static sau dinamic. Exista clase speciale i mecanisme de declarare a membrilor pentru a face aceste clase vizibile n VForge i n motor de joc. n mod normal, plugin-urile sunt folosite pentru a expune clase customizate cum ar fi componentele sau entitile n VForge sau n motorul Vision.

class ProceduralRunPluginClass : public IVisPlugin_cl{public: void OnInitEnginePlugin(); void OnDeInitEnginePlugin(); const char *GetPluginName() { return "ProceduralRunPlugin"; // export de acelasi nume }};

Plugin Vision (2)ProceduralRunPluginClass g_myComponents;DECLARE_THIS_MODULE(g_myComponentModule, MAKE_VERSION(1,0), "DBV plugin", "Havok", "DBV plugin for procedural run game", &g_myComponents);VEXPORT IVisPlugin_cl* GetEnginePlugin_ProceduralRunPlugin(){ return &g_myComponents; }

class BasicBlock_cl : public VisBaseEntity_cl{public: BasicBlock_cl(); ~BasicBlock_cl(); VOVERRIDE void InitFunction(); VOVERRIDE void ThinkFunction(); V_DECLARE_SERIAL_DLLEXP( BasicBlock_cl, DECLSPEC_DLLEXPORT ); IMPLEMENT_OBJ_CLASS(BasicBlock_cl) ....

START_VAR_TABLE(BasicBlock_cl,VisBaseEntity_cl,entitate bloc",0, NULL ) DEFINE_VAR_FLOAT(BasicBlock_cl, Duration, "Duration for translation (seconds)", "2.0", 0, 0); DEFINE_VAR_VECTOR_FLOAT(BasicBlock_cl, EndPosition, "Desired position", "0.0,0.0,0.0", 0, 0);END_VAR_TABLEMasina cu stri finiteO main cu stri finite este bazat pe conceptul de stare, care n mod normal const n dou lucruri.- Un set de aciuni care ruleaz in acelai timp (animaia unui caracter, un sunet sau ateptarea unuei perioade de timp)- Un set de tranziii cu o verificare conditional care determin cnd se va trece n starea urmtoarea dndu-se eventuale condiii de ndeplinit.

Algoritmul utilizat

Conexiuni ntre striLegtura ntre striABCDEFGHIA****B******C***D****E***F****G****H****I*******Conexiuni LUAChooseState = function(o) o:ChooseNextState() o["State" .. State](o) o:CleanBlocks()end

CheckSubState = function(o, step, stepSize, type, quantity) if step>1 and step1 and step2 and step