ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΗΛΕΚΤΡΟΝΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ

Πλατφόρμα λογισμικού για την σχεδίαση και ανάπτυξη τρισδιάστατων παιχνιδιών ρόλων (RPG)

Διπλωματική εργασία των Μαλλιά-Στολίδου Χρυσαφένιας (6128) Βουνοτρυπίδη Αστέριου (5701)

υπό την επίβλεψη του κ. Ανδρέα Λ. Συμεωνίδη Λέκτορα Α.Π.Θ

Θεσσαλονίκη, 2012

Στις οικογένειές μας που με θυσίες μάς έδωσαν την ευκαιρία να σπουδάσουμε

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Ευχαριστίες

Αρχικά θα θέλαμε να ευχαριστήσουμε όλους όσους συνετέλεσαν στην εκπόνηση της διπλωματικής μας εργασίας: • Τον καθηγητή μας, κύριο Ανδρέα Συμεωνίδη, για την εμπιστοσύνη που έδειξε αναθέτοντάς μας τη διπλωματική αυτή εργασία, για την υπομονή και επιμονή του αλλά και για την καθοδήγηση και την υποστήριξή του με γνώσεις, συμβουλές και καλή διάθεση σε όλη τη διάρκεια της προσπάθειάς μας. • Τους φίλους μας, που μας υπέμειναν καθ’ όλη τη διάρκειά της αλλά και την τηλεοπτική σειρά Friends που μας συντρόφευε σε κάθε μας συνάντηση.

Πλατφόρμα RPG παιχνιδι Σελίδα 1

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

Περίληψη – Πλατφόρμα σχεδίασης και ανάπτυξης RPG

Η βιομηχανία του Game Development είναι από τις μεγαλύτερες βιομηχανίες και είναι υπεύθυνη για ένα σημαντικό ποσοστό των παγκόσμιων πωλήσεων στον τομέα ανάπτυξης λογισμικού. Η ανάγκη για παιχνίδια μεγαλώνει όσο οι άνθρωποι εξοικειώνονται περισσότερο με τους υπολογιστές και η τεχνολογία γίνεται οικονομικά εφικτή για την πλειοψηφία του κόσμου. Η δημιουργία παιχνιδιών για υπολογιστές απαιτεί μια μεγάλη ομάδα επιστημόνων που θα συνεργάζεται αρμονικά και παράλληλα στους τομείς της σχεδίασης, σεναρίου, ανάλυσης, γραφικών και υλοποίησης του project. Τα σύγχρονα παιχνίδια κοστίζουν από 1 έως και 15 εκατομμύρια δολάρια ενώ τις περισσότερες φορές απαιτούνται αρκετά χρόνια για να φτάσει ένα παιχνίδι στην αγορά. Τα λεγόμενα Role Playing Games – RPG είναι από τα πιο σύγχρονα και γρήγορα εξελισσόμενα πεδία σε αυτή τη βιομηχανία. Αναπόσπαστο μέρος για ένα RPG είναι το σενάριο. Η συνολική ιστορία συχνά χωρίζεται σε μέρη μικρών αναζητήσεων που αποτελούν και τους στόχους επιμέρους αποστολών στους οποίους συμβάλλει κάθε παίκτης ανάλογα και με το χαρακτήρα που έχει δημιουργήσει και τις ικανότητες που έχει αναπτύξει. Ο πυρήνας μιας προσπάθειας game-development δεν είναι τίποτα άλλο από την που θα επιλεγεί από τους developers. Συνοψίζει ένα σύνθετο σύστημα που χρησιμεύει στην δημιουργία και ανάπτυξη computer ή video games. Αποτελείται από ένα πλαίσιο λογισμικού που προσφέρει στους επίδοξους developers ποικίλες δυνατότητες όπως Graphics Rendering, Physics engine, Sound, Scripting, Animation, Artificial Intelligence κ.α. Με αυτόν τον τρόπο πολλές και σύνθετες εργασίες, όλες απαραίτητες για την υλοποίηση ενός παιχνιδιού, συνοψίζονται σε ένα πακέτο. Στα πλαίσια της παρούσας διπλωματικής εργασίας αναπτύσσεται ο βασικός κορμός μιας game-engine με στόχο να υλοποιήσει το RPG Dungeons and Dragons. Στο project παρά την πλούσια διαθεσιμότητα σε full 3D game-engines, η υλοποίηση του παιχνιδιού δε θα γίνει με ένα έτοιμο πακέτο αλλά με συνδυασμό πολλών προγραμμάτων και βιβλιοθηκών με πυρήνα την πλατφόρμα του Ogre. Η συνδιαστική αυτή επιλογή γίνεται καθαρά για εκπαιδευτικούς λόγους, με αυτό τον τρόπο δίνεται η δυνατότητα στους developers να κατανοήσουν σε βάθος την λειτουργία των σύγχρονων παιχνιδομηχανών, δουλεύοντας ουσιαστικά σε ένα κατώτερο επίπεδο από ότι μπορεί να προσφέρει η σημερινή αγορά.

Βουνοτρυπίδης Αστέριος – [email protected] Μαλλιά-Στολίδου Χρυσαφένια – [email protected] Web Site της διπλωματικής: http://dnd-diploma.site90.com Θεσσαλονίκη, Νοέμβριος 2012

Πλατφόρμα RPG παιχνιδιών Σελίδα 2

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Abstract – platform for the design and development of 3D Role Playing Games

Game development is one of the biggest industries of the media and also gaining an important share of the earnings. The people‘s need for gaming is growing as their ability to handle computers and new technology gets bigger and also becomes financially affordable. Developing games is a difficult process requiring a big team of scientists working at the same time in various areas as design, scenario, analysis, graphics and realization of the project. Modern game development can cost to its producers from 1 to 15 million dollars after many years working on it. Role Playing Games are one of the most promising fields in the industry of game development. RPG games are based in various scenarios. During one scenario which includes many shorter tasks for the players, each character is developing its abilities. The core of a game development effort is without doubt the chosen from the developers’ game engine. A game engine is actually a complex system needed to develop computer or video games. It includes all the software needed to the developers to implement various abilities such as Graphics Rendering, Physics engine, Sound, Scripting, Animation, Artificial Intelligence etc. This way many and different but necessary parts of game developing are all included in one package, the game engine. Within the context of this diploma the developers describe the building up of a game engine for the Role Playing Game Dungeons and Dragons. The project despite the fact that nowadays there are available plenty full 3d game–engines in the market is focusing to a game engine joining many programs and libraries with the most essential part of the project which is the Ogre platform. This choice was made for educational purposes, this way the developers have the chance to deeply understand the function of modern game-engines as they work at a lower level from what the technology can offer today.

Βουνοτρυπίδης Αστέριος – [email protected] Μαλλιά-Στολίδου Χρυσαφένια – [email protected] Diploma Web Site: http://dnd-diploma.site90.com Thessaloniki, November 2012

Πλατφόρμα RPG παιχνιδι Σελίδα 3

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

Περιεχόμενα

Ευχαριστίες ...... 1 Περίληψη – Πλατφόρμα σχεδίασης και ανάπτυξης RPG ...... 2 Abstract – Platform for developing RPG ...... 3 Λίστα Εικόνων ...... 7 Λίστα Πινάκων ...... 9 Πίνακας Συντομογραφιών ...... 9 Κεφάλαιο 1 - Εισαγωγή ...... 10 1.1 Αντικείμενο της διπλωματικής ...... 10 1.2 Δομή της διπλωματικής ...... 10 Κεφάλαιο 2 - Γνωστικό Υπόβαθρο και Σχετικές Έρευνες ...... 12 2.1 Εισαγωγή ...... 12 2.2 Μια σύντομη αναδρομή στην ιστορία των παιχνιδιών ...... 12 2.3 Game Development ...... 13 2.3.1 Τι είναι Game Development και γιατί υπάρχει; ...... 13 2.3.2 Δημιουργώντας ένα παιχνίδι ...... 13 2.3.3 Τεχνική δημιουργίας παιχνιδιού ...... 14 2.4 Game-engine ...... 16 2.4.1 Ορισμός ...... 16 2.5 Πλατφόρμες ...... 21 2.5.1 Διαθέσιμες Πλατφόρμες ...... 21 2.5.2 Βοηθητικά Προγράμματα: ...... 26 2.6 Role-Playing Games ...... 28 2.6.1 Εισαγωγή ...... 28 2.6.2 Oι πρόγονοι των Role Playing Games ...... 28 2.6.3 Σενάρια και πλοκές στα RPG ...... 29 2.6.4 Είδη παικτών ...... 29 2.6.5 Δημιουργία Σεναρίου ...... 30 2.7 Dungeons and Dragons ...... 31 2.8 Επιλογή Πλατφόρμας ...... 32 2.8.1 Κριτήρια Επιλογής ...... 32 2.8.2 Τελική Επιλογή: ...... 33 2.9 Συμπεράσματα...... 33 ΚΕΦΑΛΑΙΟ 3 - Game Engine ...... 34 3.1 Εισαγωγή ...... 34 Η επιλογή μας στα πλαίσια της διπλωματικής εργασίας ...... 34

Πλατφόρμα RPG παιχνιδιών Σελίδα 4

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

3.2. Ogre ...... 34 3.3 OIS (Object-oriented Input System Library) ...... 36 3.4 CEGUI (Crazy Eddie's Graphical User Interface System ) ...... 37 3.5 MakeHuman ...... 38 3.6 ...... 40 3.6.1 MhxImporter ...... 40 3.6.2 Import in Blender ...... 40 3.6.4 Bone layers ...... 44 3.7 Ogre XMLConverter ...... 44 3.8 Σύνοψη ...... 45 ΚΕΦΑΛΑΙΟ 4 - ΑΠΑΙΤΗΣΕΙΣ ΣΥΣΤΗΜΑΤΟΣ ...... 46 4.1 ΕΙΣΑΓΩΓΗ ...... 46 4.2 ΑΠΑΙΤΗΣΕΙΣ ΣΥΣΤΗΜΑΤΟΣ ...... 46 4.2.1 Απαιτήσεις συστήματος του project Dungeons ‘N Dragons ...... 46 4.3 Αρχιτεκτονικός σχεδιασμός ...... 55 4.4 Οργάνωση συστήματος ...... 56 4.4.1 Το μοντέλο αποθετηρίου (repository model) ...... 56 4.4.2 Το μοντέλο πελάτη-διακομιστή (client-server) ...... 56 4.4.3 Το πολυεπίπεδο μοντέλο ...... 57 4.5 Αρχιτεκτονική του συστήματος Dungeons ‘N Dragons ...... 58 4.5.1 DnDEntities ...... 58 4.5.2 DnD_Boundaries ...... 68 4.5.3 DnD_Control ...... 68 4.5.4 Αποθήκευση δεδομένων ...... 69 4.5.5 Συνολικό διάγραμμα για όλο το λογισμικό...... 71 ΚΕΦΑΛΑΙΟ 5 - Σενάρια χρήσης ...... 72 5.1 Εισαγωγή ...... 72 5.2 Υλοποίηση βασικών απαιτήσεων συστήματος ...... 72 5.3 Βασικές οθόνες ...... 74 5.3 Υλοποίηση εφαρμογής ...... 78 5.3.1 Δημιουργία Entity ...... 78 5.3.2 Αρχικοποίησης της κ άμερας ...... 79 5.3.3 Μετακίνηση κάμερας...... 79 5.3.4 Μετακίνηση γωνίας θέασης κάμερας ...... 80 5.3.5 Αλληλεπίδραση κέρσορα ποντικιού με το terrain ...... 80 5.3.6 Update ...... 81 5.3.7 Κανονικοποίηση ...... 81 5.3.8 Κίνηση αντικειμένου ...... 83

Πλατφόρμα RPG παιχνιδι Σελίδα 5

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

5.3.9 Αντίληψη αντιπάλου ...... 84 5.3.10 Οθόνη...... 86 5.3.11 Δημιουργία παίκτη στο Battle Control ...... 86 5.4 Προβλήματα και δυσκολίες που αντιμετώπίστηκαν ...... 88 5.4.1 Export από blender ...... 88 5.4.2 Κίνηση με χρήση bhv αρχείων ...... 88 5.4.3 Προβλήματα υλοποίησης ...... 88 ΚΕΦΑΛΑΙΟ 6 - Συμπεράσματα και μελλοντικές επεκτάσεις ...... 90 6.1 Συμπεράσματα...... 90 6.2 Μελλοντικές επεκτάσεις ...... 90 ΠΑΡΑΡΤΗΜΑ Α – Rendering System του Ogre ...... 91 ΠΑΡΑΡΤΗΜΑ Β – Τμήμα του API της RPG πλατφόρμας ...... 95 DnD::DnDBoundaries::UserInterface::AdminUI Class Reference ...... 95 Public Member Functions ...... 95 Detailed Description ...... 95 Constructor & Destructor Documentation ...... 95 Member Function Documentation ...... 95 DnD::DnDBoundaries::UserInterface::BattleUI Class Reference ...... 97 Public Member Functions ...... 97 Detailed Description ...... 98 Constructor & Destructor Documentation ...... 98 Member Function Documentation ...... 98 ΒΙΒΛΙΟΓΡΑΦΙΑ ...... 101

Πλατφόρμα RPG παιχνιδιών Σελίδα 6

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Λίστα Εικόνων

Εικόνα 1 – Light gun ...... 12 Εικόνα 2 – Μηχανή Pong και Atari ...... 13 Εικόνα 3 - OpenSim ...... 27 Εικόνα 4 - Make Human ...... 27 Εικόνα 5 - Petri Net Modules ...... 29 Εικόνα 6 - Petri Net Modules, NPC ...... 31 Εικόνα 7 - Ποικιλία rendering techiques ...... 34 Εικόνα 8 - Απλουστευμένη εκδοχή της λειτουργίας του σωλήνα γραφικών ...... 35 Εικόνα 9 – Επιλογή χαρακτηριστικών ...... 38 Εικόνα 10 – Διαδικασία Export ...... 39 Εικόνα 11 – Makehuman Hairstyles ...... 39 Εικόνα 12 – Blender imports from Makehuman ...... 40 Εικόνα 13 – Χαρακτήρας μετά την εισαγωγή στο Blender ...... 41 Εικόνα 14 – Αποσυμφόρηση εικόνας ...... 41 Εικόνα 15 – Διαφορετικά scales ...... 42 Εικόνα 16 - Joints ...... 43 Εικόνα 17 – Σκελετός ...... 44 Εικόνα 18 – Πλατφόρμα DnD ...... 45 Εικόνα 19 – Select Monster UI ...... 48 Εικόνα 20 – Select Player UI ...... 48 Εικόνα 21 – Confirm UI ...... 49 Εικόνα 22 – DnD UI ...... 49 Εικόνα 23 – Options UI ...... 50 Εικόνα 24 – Admin UI ...... 50 Εικόνα 25 – New Game UI ...... 51 Εικόνα 26 – Roll Dice UI ...... 51 Εικόνα 27 – Spells UI ...... 52 Εικόνα 28 – Load UI ...... 52 Εικόνα 29 – Inventory UI ...... 53 Εικόνα 30 – Equipment UI ...... 53 Εικόνα 31 – Create Player UI ...... 54 Εικόνα 32 – Create Monster UI ...... 54 Εικόνα 33 – Create Scenario UI ...... 55 Εικόνα 34 – Σχεδιαγραμμα μοντέλου client-server ...... 57 Εικόνα 35 – Αρχιτεκτονική DnD ...... 58 Εικόνα 36 – Character Sheet επιτραπέζιου DnD...... 59 Εικόνα 37 – Πακέτο λογισμικού «Character» ...... 60 Εικόνα 38 – Πακέτο λογισμικού PlayerCharacteristics ...... 60 Εικόνα 39 – Πακέτο λογισμικού «Scenario» ...... 61 Εικόνα 40 – Πακέτο λογισμικού «Battle» ...... 61 Εικόνα 41 – Σύνδεση των πακέτων λογισμικού «Character, Battle, PlayerCharacteristics, Scenario» ...... 62 Εικόνα 42 – Races DnD ...... 63 Εικόνα 43 - Σύνδεση των πακέτων λογισμικού «Race, RaceCharacteristics» ...... 64 Εικόνα 44 – Classes DnD ...... 65 Εικόνα 45 – Πακέτο λογισμικού «DnDClass» ...... 65 Εικόνα 46 – Πακέτο λογισμικού «Spells» ...... 66 Εικόνα 47 – Πακέτο λογισμικού «Entities» ...... 67

Πλατφόρμα RPG παιχνιδι Σελίδα 7

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

Εικόνα 48 - Πακέτο λογισμικού «Entities» ...... 67 Εικόνα 49 – Πακέτο λογισμικού «DnD_Boundaries» ...... 68 Εικόνα 50 - Πακέτο λογισμικού «DnD_Control»...... 69 Εικόνα 51 – Σχεδίαση της Βάσης Δεδομένων ...... 70 Εικόνα 52 – Πακέτα λογισμικού για την πλατφόρμα RPG ...... 71 Εικόνα 53 – Σενάριο χρήσης ...... 72 Εικόνα 54 – DnD UI ...... 74 Εικόνα 55 – Load UI ...... 74 Εικόνα 56 – New Game UI ...... 75 Εικόνα 57 – Admin UI ...... 75 Εικόνα 58 – Create Player UI ...... 76 Εικόνα 59 – Create Monster UI ...... 76 Εικόνα 60 – Create Scenario UI ...... 77 Εικόνα 61 – Select Monster UI ...... 77 Εικόνα 62 – Select Player UI ...... 78 Εικόνα 63 – Battle UI ...... 78

Πλατφόρμα RPG παιχνιδιών Σελίδα 8

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Λίστα Πινάκων

Πίνακας 1 - Game Engines [WIK 12] ...... 17 Πίνακας 2 - Βασικός κώδικας για την αρχικοποίηση της OIS...... 37 Πίνακας 3 - Μια σύντομη ματιά στο API της OIS ...... 37 Πίνακας 4 - Κώδικας δημιουργίας και αρχικοποίησης οντοτήτων ...... 79 Πίνακας 5 - Κώδικας αρχικοποίησης της κάμερας ...... 79 Πίνακας 6 - Κώδικας αλλαγής θέσης της κάμερας ...... 79 Πίνακας 7 - Κώδικας αλλαγής γωνίας θέασης της κάμερας ...... 80 Πίνακας 8 - Κώδικας αλληλεπίδρασης mouse - terrain ...... 80 Πίνακας 9 - Κώδικας υπεύθυνος για τη συνεχή ροή του παιχνιδιού ...... 81 Πίνακας 10 - Κώδικας κανονικοποίησης διανύσματος κατεύθυνσης κίνησης ...... 81 Πίνακας 11 - Κώδικας απόφασης κίνησης παίκτη ...... 83 Πίνακας 12 - Κώδικας αλληλεπίδρασης ποντικιού - χαρακτήρα ...... 84 Πίνακας 13 - Κώδικας εμφάνισης αντικειμένων στην οθόνη - χρήση της βιβλιοθήκης CEGUI ...... 86 Πίνακας 14 - Κώδικας δημιουργίας αντικειμένων χαρακτήρων με δυναμικό τρόπο ...... 87

Πίνακας Συντομογραφιών

API: Application Programming Interface CP: Casual Player DM: Dungeon Master DnD: Dungeons and Dragons HCP: Hard - Core Player NPC: Non - Player Characters RPG: Role - Playing Game

Πλατφόρμα RPG παιχνιδι Σελίδα 9

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

Κεφάλαιο 1 - Εισαγωγή

1.1 Αντικείμενο της διπλωματικής Το game development αποτελεί μια τεράστια βιομηχανία που ωστόσο μετρά λίγες δεκαετίες ζωής και εξέλιξης. Το «δυσκολότερο» κομμάτι στην πολυμελή ομάδα ανάπτυξης ενός παιχνιδιού αναλαμβάνουν οι μηχανικοί λογισμικού, γεγονός που αποδεικνύεται και από τους ελάχιστους αναγνωρισμένους επαγγελματίες σε αυτόν τον τομέα σε παγκόσμια κλίμακα. Προφανώς, το εγχείρημα γίνεται ακόμα πιο δύσβατο όταν στοχεύσουμε στην ανάπτυξη όχι ενός συμβατικού παιχνιδιού αλλά των λεγόμενων Role Playing Games που κερδίζουν σταθερά έδαφος και διεκδικούν έως και το αποκλειστικό ενδιαφέρον μικρών και μεγάλων επίδοξων παικτών με εκατοντάδες εκατομμύρια μέλη στα ήδη υπάρχοντα παιχνίδια . Τον φιλόδοξο λοιπόν στόχο ανάπτυξης μιας παιχνιδομηχανής αναλαμβάνει η διπλωματική μας εργασία έχοντας εμπνευστεί από ένα από τα πιο ακριβή και πολύπλοκα σε κανόνες RPG’s. Ο λόγος γίνεται για το Dungeons and Dragons ένα επιτραπέζιο μέχρι σήμερα παιχνίδι για το οποίο στα πλαίσια της διπλωματικής υλοποιούμε τον βασικό κορμό μιας game- engine με πολλές βέβαια δυνατότητες επέκτασης όπως περιγράφεται και στο έκτο κεφάλαιο. Η πλατφόρμα που αναπτύσσεται μπορεί να αποτελέσει βάση για την υλοποίηση οποιουδήποτε παιχνιδιού λογικής RPG. 1.2 Δομή της διπλωματικής Η εργασία μας αναπτύσσεται σε έξι κεφάλαια αλλά και σε δύο παραρτήματα. Στo πρώτο παράρτημα μπορούν οι αναγνώστες να ανατρέξουν για περισσότερο εξειδικευμένες πληροφορίες ενώ στο δεύτερο διατίθεται τμήμα από το API της εφαρμογής που αναπτύχθηκε. Στην αρχή κάθε κεφαλαίου γίνεται μια μικρή εισαγωγή όσον αφορά στο περιεχόμενο του, ωστόσο κρίνεται σκόπιμο και σε αυτό το σημείο να γίνει μια σύντομη περιγραφή όλων των κεφαλαίων που απαρτίζουν την διπλωματική. Επιπλέον, στην αρχή της εργασίας παρατίθεται λίστα πινάκων και εικόνων καθώς και η θέση τους μέσα στο έγγραφο για διευκόλυνση του αναγνώστη ενώ στο τέλος αναφέρονται αναλυτικά και οι ποικίλες πηγές της βιβλιογραφίας. Στο δεύτερο κεφάλαιο με τίτλο «Γνωστικό υπόβαθρο και σχετικές έρευνες» γίνεται μια αναδρομή στην ιστορική εξέλιξη του game development αλλά και όλων των διαθέσιμων σύγχρονων εργαλείων στα χέρια των επίδοξων developers. Το κεφάλαιο μέσα από διεξοδική έρευνα στοχεύει στην επιλογή των κατάλληλων διαθέσιμων εργαλείων για την υλοποίηση του στόχου της εργασίας. Αξίζει να τονιστεί ότι ανεξάρτητα από τις διαφορετικές εφαρμογές, το συγκεκριμένο κεφάλαιο αποτελεί μια πολύτιμη παρακαταθήκη για τους μελλοντικούς game developers καθώς παρέχει τη ρουτίνα που πρέπει να ακολουθηθεί για το πάρσιμο των καθοριστικών για το project αποφάσεων σε αυτό το στάδιο. Στο τρίτο κεφάλαιο με τίτλο «Game Engine» αναλύεται όλο το πακέτο των προγραμμάτων και των βιβλιοθηκών που με πυρήνα την πλατφόρμα του Ogre συνδυάστηκαν για υλοποιήσουν την παιχνιδομηχανή που υλοποιεί το Dungeons and Dragons. Στο τέταρτο κεφάλαιο με τίτλο «Απαιτήσεις Συστήματος» περιγράφονται οι απαιτήσεις συστήματος του project. Αναφέρονται οι απαραίτητες αποφάσεις που πρέπει να γίνουν σε αυτό το στάδιο όσον αφορά στον αρχιτεκτονικό σχεδιασμό και την οργάνωση. Επιπλέον γίνεται μια αναφορά στα πιο δημοφιλή μοντέλα. Στο τελευταίο μέρος του αφιερώνεται στην λεπτομερή οργάνωση και αποδόμηση του project όπως τελικά υλοποιήθηκε. Στο πέμπτο κεφάλαιο με τίτλο «Σενάρια χρήσης» αναπτύσσεται η λογική του

Πλατφόρμα RPG παιχνιδιών Σελίδα 10

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

προγραμματιστικού θα το λέγαμε τμήματος της διπλωματικής που αποτελεί τον πυρήνα αλλά και το πιο σημαντικό κομμάτι της. Με αναλυτική περιγραφή αλλά και παρουσίαση σημαντικών τμημάτων του κώδικα στοχεύει στην κατανόηση από τον αναγνώστη αυτής καθ’ αυτής της υλοποίησης της παιχνιδομηχανής αλλά και την πολυπλοκότητα ενός τέτοιου εγχειρήματος. Στο έκτο κεφάλαιο γίνεται αναφορά στα συμπεράσματα που προέκυψαν από την εκπόνηση της διπλωματικής και κυρίως σε σκέψεις για τις μελλοντικές επεκτάσεις του project.

Πλατφόρμα RPG παιχνιδι Σελίδα 11

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

Κεφάλαιο 2 - Γνωστικό Υπόβαθρο και Σχετικές Έρευνες

2.1 Εισαγωγή Στο παρόν κεφάλαιο παρουσιάζονται στοιχεία ιστορικού περιεχομένου της εξέλιξης του Game Development καθώς και τα αποτελέσματα έρευνας όσον αφορά στις πλατφόρμες και το διαθέσιμο βοηθητικό λογισμικό που είναι διαθέσιμο. Σκοπός του κεφαλαίου είναι η διεξοδική μελέτη όλων των επιλογών και η απόφαση της καταλληλότερης για το αντικείμενο της εργασίας.

2.2 Μια σύντομη αναδρομή στην ιστορία των παιχνιδιών Τα Video Games έχουν ιστορία που κρατάει πάνω από μισό αιώνα. Για την ακρίβεια τα πρώτα ηλεκτρονικά βιντεοπαιχνίδια, προγραμματίστηκαν κατά τη δεκαετία του 1950. Φυσικά τα παιχνίδια αυτά δεν έχουν καμία σχέση με τα παιχνίδια όπως τα γνωρίζουμε σήμερα. Τα πρώτα παιχνίδια φτιάχτηκαν από ιδιώτες για να δουλεύουν σε Mainframe υπολογιστές της εποχής με σκοπό την ψυχαγωγία των ιδίων. Αυτά βέβαια τα παιχνίδια ήταν πολύ μικρά και ξεχάστηκαν εξαιτίας των νέων παιχνιδιών που τα αντικατέστησαν [WHC]. Στα 1959 – 1961 στο MIT προγραμματίστηκαν παιχνίδια τα οποία δουλεύαν με τη χρήση Light Pen. Ένα από αυτά ήταν και η τρίλιζα, χρησιμοποιώντας Light Pen έπαιζε ο χρήστης τρίλιζα ενάντια στον υπολογιστή. Έπειτα, τη δεκαετία του 1960 φτιάχτηκαν αρκετά παιχνίδια που διαδόθηκαν πολύ σύντομα λόγω της ανάπτυξης του διαδικτύου. Τέτοια ήταν: Tag, Volleyball και Ping Pong. Επίσης φτιάχτηκαν και παιχνίδια που ο παίκτης έπαιζε χρησιμοποιώντας το Light Gun όπως φαίνεται και παρακάτω στις φωτογραφίες [WHC].

Εικόνα 1 – Light gun

Στη δεκαετία του 1970 κάνει για πρώτη φορά την εμφάνισή της μια κονσόλα για παιχνίδια με την ονομασία Atari. Γίνεται γνωστή σε όλο τον πλανήτη και πουλάει πάνω από 19000 Pong μηχανές μέσα σε ένα χρόνο. Λίγο μετά εμφανίζεται και η παιχνιδομηχανή της Atari που έχει πολύ μικρές διαστάσεις και είναι για μπορεί να χρησιμοποιηθεί στο σπίτι [WHC].

Πλατφόρμα RPG παιχνιδιών Σελίδα 12

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Εικόνα 2 – Μηχανή Pong και Atari

Στη δεκαετία του 1980 έχουμε πλέον νέα παιχνίδια. Βασικό ρόλο για την ανάπτυξη παιχνιδιών με νέες προοπτικές αποτέλεσε το γεγονός ότι πλέον εισήχθη ο αντικειμενοστραφής προγραμματισμός. Νέες γλώσσες προγραμματισμού όπως η ++ η οποία χρησιμοποιείται μέχρι και σήμερα ως μία από τις πιο ισχυρές γλώσσες για την ανάπτυξη και τον προγραμματισμό ενός παιχνιδιού ήταν η αιτία για τον σχεδιασμό παιχνιδιών με μεγαλύτερες απαιτήσεις και πολυπλοκότητα. Πλέον έχουμε τα πρώτα Action και Adventure παιχνίδια, τα πρώτα Fighting, Racing καθώς επίσης και τα πρώτα RPGs. Εμφανίζονται πολλές νέες κονσόλες όπως αυτές της Nintendo και της Sega [WHC]. Διανύοντας τη δεκαετία του 1990 η βιομηχανία παιχνιδιών περνάει πλέον σε επόμενο στάδιο. Τα γραφικά των παιχνιδιών γίνονται ολοένα και καλύτερα, τα παιχνίδια αποκτούν σενάριο, και μια πληθώρα από παιχνιδομηχανές διαδέχεται η μια την άλλη. Πλέον αρχίζουν να εμφανίζονται και τα πρώτα παιχνίδια στα οποία μπορεί ο χρήστης να ελέγχει τις τρείς διαστάσεις του χώρου. Η κατάσταση αυτή συνεχίζεται και κατά τη δεκαετία του 2000 όπου αυτό που βλέπουμε να αλλάζει είναι η ποιότητα των παιχνιδιών και των γραφικών [WHC].

2.3 Game Development 2.3.1 Τι είναι Game Development και γιατί υπάρχει; Το «Game Development» είναι «Software Development» όπως πολύ χαρακτηριστικά αναφέρει ο Erik Bethke στο βιβλίο του Game Development and Production. Τα παιχνίδια είναι το λογισμικό εκείνο που απαρτίζεται από καλλιτεχνικά στοιχεία, μουσική και παιχνίδι. Τα παιχνίδια που φτιάχνονται σήμερα και έχουν σκοπό να γίνουν ευρέως διαδεδομένα έχουν έντονο το στοιχείο της ευφυίας του υπολογιστή, καθώς και της τεχνητής νοημοσύνης [ERI 03]. 2.3.2 Δημιουργώντας ένα παιχνίδι Η βιομηχανία του Game Development είναι από τις μεγαλύτερες βιομηχανίες και είναι υπεύθυνη για ένα σημαντικό ποσοστό των παγκόσμιων πωλήσεων στον τομέα των Media. Η ανάγκη για παιχνίδια μεγαλώνει όσο οι άνθρωποι εξοικειώνονται περισσότερο με τους υπολογιστές και η τεχνολογία γίνεται οικονομικά εφικτή για την πλειοψηφία του κόσμου. Η δημιουργία παιχνιδιών για υπολογιστές απαιτεί έναν ή μια ομάδα από Game Developers. Τα σύγχρονα παιχνίδια κοστίζουν από 1 έως και 15 εκατομμύρια δολλάρια ενώ τις περισσότερες φορές απαιτούνται αρκετά χρόνια για να φτάσει ένα παιχνίδι στην αγορά [DAV 06].

Πλατφόρμα RPG παιχνιδι Σελίδα 13

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

Για τη δημιουργία ενός παιχνιδιού υψηλών απαιτήσεων, είναι απαραίτητη η ύπαρξη μιας αρκετά μεγάλης ομάδας ατόμων που να δουλεύουν ταυτόχρονα και να συνεργάζονται για την τελική επίτευξη του στόχου τους. Υπάρχει πλήθος ατόμων με διαφορετικές ιδιότητες. Υπάρχει μια ομάδα προγραμματιστών, μια ομάδα που απαρτίζεται από γραφίστες, καλλιτέχνες, ηχολήπτες, μουσικοί, σεναριογράφοι, καθώς και πολλές άλλες ομάδες ατόμων που ανάλογα με τις ανάγκες του παιχνιδιού μπορεί να είναι απαραίτητα μέλη για τη δημιουργία του. Παρόλα αυτά, οι ομάδες αυτές δεν μπορούν από μόνες τους να δουλέψουν και να πετύχουν το επιθυμητό αποτέλεσμα. Θα πρέπει να υπάρχει μια ομάδα από μηχανικούς λογισμικού οι οποίοι να είναι υπεύθυνοι για την εύρυθμη λειτουργία της κάθε ομάδας, τον κατακερματισμό του έργου και το σωστό μοίρασμά του στα μέλη της ομάδας, τον έλεγχο της συνεργατικότητας και της σύνδεσης των κομματιών μεταξύ των διάφορων ομάδων καθώς επίσης και τον έλεγχο του αποτελέσματος. Τέλος, στην βιομηχανιά των παιχνιδιών στην κορυφή της πυραμίδας είναι ο Παραγωγός «Producer», ο οποίος είναι και ο άνθρωπος που προσπαθεί να κρατήσει το τρένο στις ράγες, δηλαδή προσπαθεί το έργο να μην ξεφύγει από τα όρια, έτσι ώστε να μπορέσει να ολοκληρωθεί χωρίς προβλήματα και απρόβλεπτες συνέπειες [COH 10].

2.3.3 Τεχνική δημιουργίας παιχνιδιού Μια καλά δοκιμασμένη τεχνική βήμα προς βήμα για τη δημιουργία ενός παιχνιδιού, είναι η εξής:

Βήμα 1: Απόφαση για το είδος του παιχνιδιού. Σε αυτό το βήμα πρέπει ο παραγωγός του παιχνιδιού να αποφασίσει τι είδους παιχνίδι είναι αυτό που θέλει να δημιουργήσει. Αν πρόκειται δηλαδή για παιχνίδι στρατηγικής, περιπέτεια ή κάτι άλλο. Επίσης, πολύ βασικό είναι να γνωρίζει αν το παιχνίδι που θα φτιάξει θα είναι με τρισδιάστατα γραφικά ή όχι. Εάν πρόκειται για παιχνίδι που θα παίζουν πολλοί χρήστες ταυτόχρονα (Multi-Player Game) ή θα παίζει ένας παίκτης (Single-Player Game). Τέλος πρέπει να αποφασίσει σε ποιές πλατφόρμες παιχνιδιών θα μπορεί να τρέξει το πρόγραμμα (PC, Play Station κ.α.) [URL 1].

Βήμα 2: Ελέγχος των γνώσεων της ομάδας, των εργαλείων που υπάρχουν, οικονομικές δυνατότητες καθώς και αποθέματα προηγούμενης εργασίας. Σε αυτή τη φάση, ο παραγωγός του παιχνιδιού πρέπει να κάνει ένα νέο βήμα που να ανταποκρίνεται περισσότερο στην πραγματικότητα. Πρέπει να δει τις δυνατότητες της ομάδας στη δημιουργία, αν δηλαδή υπάρχει η δυνατότητα από τα μέλη της ομάδας να δουλέψουν πάνω σε κάποια πλατφόρμα προγραμματισμού, εάν επίσης υπάρχει η δυνατότητα δημιουργίας περιβάλλοντος και χαρακτήρων καθώς και το εάν μπορεί να δωθεί κίνηση σε αυτούς τους χαρακτήρες. Επίσης πρέπει να δει και κάποια άλλα βασικά στοιχεία για τη δημιουργία ενός παιχνιδιού, όπως είναι να γίνει ένας βασικός έλεγχος για το εάν είναι απαραίτητο να αγοραστεί hardware και εάν υπάρχει αυτή η οικονομική δυνατότητα. Σε αυτή τη φάση πρέπει να παρθεί και η απόφαση από το σχεδιαστή για την επιλογή της πλατφόρμας δημιουργίας παιχνιδιού. Η απόφαση αυτή είναι βήμα καθοριστικής σημασίας και πρέπει να γίνει σωστός έλεγχος [URL 1].

Βήμα 3: Ανανέωση της αρχικής ιδέας με βάση τις πραγματικές δυνατότητες. Τώρα πλέον που έχουν γίνει τα πρώτα βήματα και υπάρχει η βασική γνώση των

Πλατφόρμα RPG παιχνιδιών Σελίδα 14

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

δυνατοτήτων της ομάδας και εφόσον έχει παρθεί η απόφαση για το περιβάλλον προγραμματισμού, πρέπει να αναδιατυπωθούν οι αρχικές σκέψεις με βάση του τι μπορεί να γίνει και τι όχι [URL 1].

Βήμα 4: Έλεγχος της αποτελεσματικότητας του παιχνιδιού. Σε αυτό το βήμα γίνεται ένας βασικός έλεγχος για το εάν τελικά μπορεί να επιτευχθεί ο στόχος της δημιουργίας του παιχνιδιού, εάν δηλαδή έχει ενδιαφέρον σαν παιχνίδι και πρόκειται να βρει ένα κομμάτι κόσμου που να το αγκαλιάσει. Ένας πολύ καλός και αποτελεσματικός τρόπος είναι να γίνει μια προσπάθεια, εάν αυτό είναι δυνατό, να δοκιμαστεί το παιχνίδι με οποιονδήποτε δυνατό τρόπο (πρίν κατασκευαστεί πραγματικά) σε ομάδες ανθρώπων και να γίνει ουσιαστικά ο έλεγχος της επιτυχίας ή όχι του παιχνιδιού. Κατά αυτό τον τρόπο γίνεται ένας σημαντικός έλεγχος που μπορεί να γλιτώσει την ομάδα από πολύ χρόνο και χρήμα [URL 1].

Βήμα 5: Αγορά του απαραίτητου Υλικού και Λογισμικού. Σε αυτό το σημείο, η ομάδα πρέπει να εφοδιαστεί με το απαραίτητο Hardware αλλά και Software για την εκκίνηση και ολοκλήρωση του παιχνιδιού. Πρέπει να γίνει εφοδιασμός της ομάδας με υπολογιστές και κονσόλες δοκιμής, καθώς και με όλα τα απαραίτητα προγράμματα και την πλατφόρμα του προγραμματισμού του παιχνιδιού [URL 1].

Βήμα 6: Τμήματα υψηλής επικινδυνότητας. Ως τώρα θεωρείται ότι έχει βρεθεί το απαραίτητο Hardware και Software για την επίτευξη του στόχου, η ομάδα έχει τη δυνατότητα να φέρει σε πέρας το έργο και υπάρχει βεβαιότητα ότι το παιχνίδι πρόκειται να είναι αρεστό σε ένα ευρύ κοινό. Υπάρχουν όμως μερικά κομμάτια τα οποία θεωρούνται υψηλής επικινδυνότητας σε σφάλματα (High - Risk Features). Σε τέτοιες περιπτώσεις μπορεί να συμβεί το εξής σημαντικό πρόβλημα. Η ομάδα εργασίας έχει σχεδόν ολοκληρώσει το έργο, όμως δεν μπορεί να βρεθεί λύση σε κάποιο συγκεκριμένο πρόβλημα. Σε αυτή την περίπτωση μπορεί το πρόβλημα να είναι άλυτο και ολόκληρος ο προηγούμενος σχεδιασμός χαμένος. Για το λόγο αυτό πρέπει να εντοπίζονται τα σημεία τα οποία ανήκουν σε αυτή την κατηγορία και ο υπόλοιπος σχεδιασμός να γίνεται με βάση τις ιδιαιτερότητές τους [URL 1].

Βήμα 7: Καθιέρωση μέσου για το game art της εφαρμογής. Στο βήμα αυτό η ομάδα καλείται να επιλέξει το μέσο μέσα από το οποίο θα εισάγει το gameart στο παιχνίδι κάτι που μπορεί να είναι από απλό έως πολύ σύνθετο ανάλογα ουσιαστικά με το λογισμικό, όλα εκείνα δηλαδή τα βοηθητικά προγράμματα (σχεδίαση χαρακτήρων, περιβαλλοντικών εφέ κλπ) που θα επιλέγουν για αυτό τον σκοπό. Από τη στιγμή που γίνει αυτή η επιλογή κρίνεται καθοριστικής σημασίας αυτή να καταγραφεί και να εξηγηθεί αναλυτικά ώστε να μην υπάρξει σύγχυση βραχυπρόθεσμα ή μακροπρόθεσμα στην πορεία της εφαρμογής [URL 1].

Βήμα 8: Ανάπτυξη ή απόκτηση του Game Art. To Game Art μπορεί να είναι ένα ογκώδες κομμάτι μιας Game Development προσπάθειας. Κατά τη διαδικασία του Game Development πρέπει να αποφασίστει αν η ομάδα θα

Πλατφόρμα RPG παιχνιδι Σελίδα 15

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

αναπτύξει το δικό της Game Art ή θα το αποκτήσει από κάπου όπως για παράδειγμα από ηλεκτρονικές σελίδες που υπάρχουν για αυτόν τον σκοπό. Μια τέτοια σελίδα είναι το Turbosguid το οποίο πουλάει ολόκληρες τρισδιάστατες πόλεις, τρισδιάστατα μοντέλα, μοντέλα με κίνηση και άλλα. Ωστόσο, βέβαια ακόμα και σε αυτή την περίπτωση είναι πολύ πιθανό να πρέπει να γίνουν κάποιες αλλαγές ώστε το Game Art που θα προμηθευτεί να ταιριάξει επιτυχώς στην εφαρμογή της ομάδας. Ίσως, βέβαια θα ήταν σοφό πριν επενδυθούν τόσα πολλά σε δουλειά τρίτων να εξεταστεί η λύση της ανάπτυξης Game Art από την ίδια την ομάδα [URL 1].

Βήμα 9: Ανάπτυξη μιας υλοποιήσιμης εκδοχής του παιχνιδιού.

Η επόμενη λογικά φάση είναι η ανάπτυξη από την ομάδα μιας υλοποιήσιμης εκδοχής ώστε να εξετάσει η ομάδα το παιχνίδι κατά τη διάρκεια που τρέχει. Αν όλα πάνε καλά τα σημαντικά κομμάτια και σημεία δε θα παρουσιάσουν κανένα πρόβλημα, ωστόσο σίγουρα σε αυτό το σημείο θα υπάρχουν αρκετές εκκρεμότητες και μικροζητήματα. Πρόκειται στην ουσία για το πρώτο τεστ της εφαρμογής, αφού πρώτη φορά το παιχνίδι υπάρχει σε μορφή που μπορεί να τρέξει από την αρχή μέχρι το τέλος, είναι μια πολύ καλή ευκαιρία για αποσφαλμάτωση [URL 1].

Βήμα 10: Ανάπτυξη τελικής εκδοχής του παιχνιδιού. Πρόκειται ουσιαστικά για την εκδοχή του παιχνιδιού στο προηγούμενο βήμα αφού όμως έχει πραγματοποιηθεί η αποσφαλμάτωση και πιθανές αλλαγές που κρίθηκαν αναγκαίες από την ομάδα. Κανονικά, σε αυτή τη φάση το παιχνίδι πρέπει να είναι ικανό να χρησιμοποιηθεί και να ελεγχθεί στην πράξη από τυχαία επιλεγμένο κόσμο χωρίς κάποιο σοβαρό πρόβλημα [URL 1].

Τελική εκδοχή. Μετά και από τις δοκιμές του προηγούμενου βήματος από ποικίλους τυχαίους και διαφορετικούς παίκτες μπορεί να θεωρείται έτοιμη πλέον η τελική εκδοχή της εφαρμογής της ομάδας, το παιχνίδι δηλαδή στην μορφή που θα προωθηθεί στην αγορά ή στον τελικό προορισμό του αν είναι κάποιος άλλος [URL 1].

2.4 Game-engine 2.4.1 Ορισμός Ο πυρήνας μιας προσπάθειας game-development δεν είναι τίποτα άλλο από την game engine που θα επιλεγεί από τους developers . Τι είναι όμως τελικά μια game-engine; Ο όρος πρώτη φορά χρησιμοποιείται στα μέσα του της δεκαετίας του 1990 όπου έχουμε και τις πρώτες μεγάλες αντίστοιχες εφαρμογές όπως το Doom και το Wolfstein. Συνοψίζει ένα σύνθετο σύστημα που χρησιμεύει στην δημιουργία και ανάπτυξη computer ή video games. Αποτελείται από ένα πλαίσιο λογισμικού που προσφέρει στους επίδοξους developers ποικίλες δυνατότητες όπως Graphics Rendering, Physics engine, Sound, Scripting, Animation, Artificial Intelligence κ.α. Με αυτόν τον τρόπο πολλές και σύνθετες εργασίες, όλες απαραίτητες για την υλοποίηση ενός παιχνιδιού, συνοψίζονται σε ένα πακέτο. Βασικοί στόχοι μιας μηχανής είναι να απλοποιεί τη διαδικασία ανάπτυξης αλλά και να είναι συμβατή με πολλές πλατφόρμες .

Πλατφόρμα RPG παιχνιδιών Σελίδα 16

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Σήμερα, υπάρχουν στην αγορά πολλές game-engines με κόστος χρήσης αλλά και free – open , μερικές από τις δημοφιλέστερες και τα κυριότερα χαρακτηριστικά τους παρουσιάζονται στον παρακάτω πίνακα:

Πίνακας 1 - Game Engines [WIK 12]

Γλώσσα S

Όνομα προγραμ- Πλατφόρμα 2D/3D Scripting Εφαρμογές Σημειώσεις D ματισμού L

Lua, Aleph One Marathon

Aleph One C++ Yes Yes 3D (Marathon clon FPS engine markup e) language

2D/3D game

Blender Python Yes No 3D Python Yo Frankie! engine

Primarily a Angry Birds physics engine,

Box2D C++ Yes Yes 2D Python series but used in many games

Duke Nukem FPS engine, Build C No No 2.5D 3D , Shadow 2.5D (2D grid engine Warrior , base geometry

Adventure BRGameE engine, 2.5D (3D

C++ and Lua No No 2.5D Trem de DOido ngine Ogre, OpenGL, OpenAL, .)

Full game engine; graphics, audio, Cafu

C++ Yes No 3D Lua physics, scripting,

Engine networking, and

map editor [3]

C++ Yes Yes 3D Crystal Graphics, audio,

Πλατφόρμα RPG παιχνιδι Σελίδα 17

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

Γλώσσα S

Όνομα προγραμ- Πλατφόρμα 2D/3D Scripting Εφαρμογές Σημειώσεις D ματισμού L

Space physics

Previous gen, 2d

Cube C++ Yes Yes 3D grid-based system

Delta3d C++ Yes No 2.5D Python .

Produces browser games with pseudo-3D views, sounds Dimension and music. eX Games can be Java Yes No 2.5D VBscript Multiplay turned into er Engine Facebook Apps. Intended for beginners. Free support and hosting.

ENIGMA C++ Yes No 2D EDL

Env3D Java Yes No 3D 3D game engine .

FlashPunk ActionScript Yes No 2D

Has Blender integration GameKit similar to BGE. C++ Yes No 3D Lua

(OgreKit) Fully integrated Bullet physics library

Πλατφόρμα RPG παιχνιδιών Σελίδα 18

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Γλώσσα S

Όνομα προγραμ- Πλατφόρμα 2D/3D Scripting Εφαρμογές Σημειώσεις D ματισμού L

2D based 1 C Yes No 3D ACS Doom , Doom II geometry

Full game engine, better known as id Tech 2 C Yes No 3D QuakeC Quake II the Quake II engine.

Full game engine, better known as C Yes No 3D QuakeC Quake III Arena the Quake III engine.

Full game engine, better known as the Doom C++ Yes No 3D via DLLs Doom 3 3engine with a set of good tools andMegaTexture.

2d game engine

Indielib C++ No Yes 2.5D in C++.

Editor based

Maratis C++ Yes No 3D Lua Save Our Souls environment.

iOS, Android, Windows, Mac Crimson Steam

Moai SDK C++ Yes Yes 2D Lua OS X and Chrome

Pirates browser compatible

Multivers Python and No No 3D Python Open source e Platform Java MMO and Virtual

Πλατφόρμα RPG παιχνιδι Σελίδα 19

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

Γλώσσα S

Όνομα προγραμ- Πλατφόρμα 2D/3D Scripting Εφαρμογές Σημειώσεις D ματισμού L

World Development Platform.

OpenSimu

C# Yes No 3D LSL lator

3D accelerated, supports Window

ORX C/C++ Yes Yes 2D s, , Mac OS X, iPhone,

iPad and Android

Full game engine, Quake

C Yes No 3D QuakeC Quake first true 3D id engine tech engine.

Sphere C++ Yes No 2D JavaScript

Balanced RTS, simulated

Spring C++ Yes Yes 3D Lua Annihilation, events, OpenGL -K

Runs on any JavaScript-

Storymoto JavaScript Yes No 3D JavaScript Adslife enabled browser, client side.

First or Third Person 3D

URGE C++ Yes No 3D Computer Games Engine, created

with OpenGL and its own physics

Πλατφόρμα RPG παιχνιδιών Σελίδα 20

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Γλώσσα S

Όνομα προγραμ- Πλατφόρμα 2D/3D Scripting Εφαρμογές Σημειώσεις D ματισμού L

engine.

MMORPG framework Lua(client), WorldForg consisting of C++ Yes Yes 3D Python(server e Libraries, Server, ) Client, and Media.

2.5 Πλατφόρμες Η ποικιλία διαθέσιμων και ολοκληρωμένων game engines όπως φάνηκε και από τον παραπάνω πίνακα είναι πλέον μεγάλη. Ωστόσο στα πλαίσια της εργασίας μας και για εκπαιδευτικούς λόγους, δε χρησιμοποιείται μια ολοκληρωμένη engine. Η επιλογή μας είναι με πυρήνα μια βασική πλατφόρμα και το συνδυασμό βοηθητικών προγραμμάτων να πετύχουμε την υλοποίηση των λειτουργιών μιας game engine.Επομένως, καθοριστικό κομμάτι της εργασίας μας ήταν η επιλογή της κατάλληλης πλατφόρμας. Μέσα από μια μεγάλη ποικιλία διαθέσιμων επιλογών εκ των οποίων άλλες είναι πιο ευέλικτες, άλλες έχουν περισσότερες δυνατότητες, άλλες διαθέτουν ζωντανές και ενημερωμένες διαδικτυακές κοινότητες ενώ (ενδελεχή) ρόλο διαδραματίζουν τα διαθέσιμα (Documentation), το πόσο βοηθητικά και “καλογραμμένα” είναι τα διαθέσιμα API τους [URL 2]. 2.5.1 Διαθέσιμες Πλατφόρμες Στη σημερινή πραγματικότητα η επιστήμη του Game Development έχει να δείξει μια πληθώρα από πλατφόρμες που ο υποψήφιος προγραμματιστής δύναται να χρησιμοποιήσει. Πολλές από αυτές είναι ανοιχτού κώδικα ενώ άλλες είναι διαθέσιμες μέσα από συγκεκριμένες εταιρίες. Επιγραμματικά να αναφέρουμε τις κυριότερες που εξετάστηκαν ως υποψήφιες επιλογής :

Ανοιχτού Κώδικα: 1. Ogre 3D Πρόκειται για μια Open Source 3D πλατφόρμα που μπορεί να χρησιμοποιηθεί όχι μόνο για Game Development αλλά και για επιμέρους δημιουργία σκηνικών, Special Effects ή Animation. Δίνει τη δυνατότητα ενός πολύ καλά οργανωμένου API, οπότε αποφεύγει κανείς να χρησιμοποιεί τεχνικές χαμηλού επιπέδου προγραμματισμού κερδίζοντας πολύτιμο χρόνο. Υποστηρίζει την τρισδιάστατη γραφική αναπαράσταση με μια αντικειμενοστραφή προσέγγιση κάτι που εξηγεί και την σχεδόν αποκλειστική χρήση της αντικειμενοστραφούς γλώσσας C++ χωρίς αυτό να αποκλείει και τη χρήση άλλων όπως Python, Java, Ruby κ.α. Με

Πλατφόρμα RPG παιχνιδι Σελίδα 21

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

τον όρο αντικειμενοστραφή προσέγγιση με απλά λόγια θεωρούμε ότι ένα πρόγραμμα αποτελείται από ανεξάρτητες ενότητες - αντικείμενα που αλληλεπιδρούν μεταξύ τους [GRE 06]. Το Ogre διαθέτει μια πληθώρα χαρακτηριστικών που χωρίς υπερβολή θα λέγαμε ξεπερνούν ή επικαλύπτουν σχεδόν κάθε διαθέσιμο αντίστοιχο λογισμικό. Παρακάτω γίνεται αναφορά στα περισσότερα από αυτά:

• Υποστήριξη OpenGL και Direct3D • Υποστήριξη Windows, Linux και MAC • Αυτόματος χειρισμός του Render. • Έτοιμες βιβλιοθήκες με σημαντικά εργαλεία που μπορούν να χρησιμοποιηθούν χωρίς να είναι απαραίτητο στον προγραμματιστή η αλλαγή του κώδικά τους. • Υποστηρίζει τον προγραμματισμό στην κάρτα γραφικών, τον προγραμματισμό σε γλώσσες υψηλού επιπέδου αλλά και Assebly όπως Cg, HLSL, GLSL. • Παρέχει τη δυνατότητα χρήσης μια σειράς τύπων αρχείων όπως είναι για εικόνα PNG, TGA, DDS, TIF, GIF, JPG, και για συμπιεσμένα κείμενα DXTC. • Πολύ καλή υποστήριξη σε τεχνικές μετατροπής Render - to - Texture. • Υποστηρίζει μηχανισμούς που αλλάζουν το αντικείμενο ανάλογα με την απόσταση και άλλα κριτήρια ανάλογα με την ποιότητα απόδοσης που απαιτείται από τον προγραμματιστή (Matterial LOD). • Δίνει τη δυνατότητα εισαγωγής και εξαγωγής αρχείων από τα περισσότερα πακέτα ανοιχτού κώδικα που υπαρχουν. • Υπάρχει δυνατότητα πλήρους πρόσβασης σε Vertex και Index Buffers. • Υπάρχει πλήρης έλεγχος στο σκελετό και τα κόκκαλα του αντικειμένου, με αποτέλεσμα την σωστή κίνηση και συμπεριφορά στο χώρο. • Διαθέσιμο Plugin για ιεράρχιση των γραφικών ανάλογα με το κατά πόσο ταιριάζουν στην εκάστοτε εφαρμογή. • Υποστήριξη μια μεγάλης ποικιλίας τεχνικών σκίασης των αντικειμένων. • Υποστήριξη για εύκολη χρήση πακέτων που περιέχουν έτοιμα σκηνικά περιβάλλοντος. • Αυτόματη διαχείριση της διαφάνειας των αντικειμένων. • Εξυπνοι και επεκτάσιμοι τρόποι για τη διαχείριση συμπιεσμένων αρχείων όπως ZIP και PK3. [GRE 06]

2. Blender Πρόκειται για μια πολύ ισχυρή πλατφόρμα ανοιχτού κώδικα την οποία μπορεί να χρησιμοποιήσει κανείς με κατάλληλο τρόπο με σκοπό τη δημιουργία ενός παιχνιδιού. Βέβαια πολύ συχνά χρησιμοποιείται για τη δημιουργία μοντέλων καθώς και την κίνησή τους για τη μετέπειτα εμφάνισή τους σε ταινίες. Το Blender επίσης χρησιμοποιείται και για τη δημιουργία βίντεο [LAN 10]. Γενικότερα μπορούμε να πούμε ότι το Blender είναι ένα εργαλείο με τα εξής χαρακτηριστικά:

• Χρησιμοποιείται ευρέως για τη δημιουργία 3D χαρακτήρων με σκοπό τη χρήση τους σε ταινίες. • Είναι πολύ ισχυρό στο να μπορεί να δώσει χρώμα στα διάφορα μοντέλα. • Έχει μεγάλη ποικιλία από συναρτήσεις που χρησιμοποιούνται για την κίνηση των αντικειμένων. Τα μοντέλα που δημιουργούνται στο Blender μπορούν να κινούνται και στο χώρο και να κάνουν επίσης διάφορες ενέργειες.

Πλατφόρμα RPG παιχνιδιών Σελίδα 22

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

• Το Blender έχει τη δική του μηχανή για Render που μπορεί να χρησιμοποιηθεί ως ένα πολύ φωτεινό στούντιο με σκοπό τη δημιουργία ταινίας. • Αντίθετα με τα υπόλοιπα εργαλεία για δημιουργία 3D μοντέλων, το Blender έχει τη δυνατότητα να δημιουργεί ταινίες χωρίς τη χρήση κάποιου άλλου προγράμματος. Έχει ουσιαστικά ένα δικό του μοναδικό περιβάλλον στο οποίο μπορεί να κάνει επεξεργασία βίντεο. • Εκτός από όλα αυτά, έχει επίσης ένα πολύ ισχυρό και πλήρες περιβάλλον στο οποίο μπορεί κανείς να φτιάξει τη δική του εφαρμογή - παιχνίδι. Η γλώσσα προγραμματισμού που χρησιμοποιεί είναι η Python. [LAN 10]

3. RL - Glue H RL-Glue (Reinfhorcement Learning Glue) προσφέρει ένα interface που επιτρέπει στον προγραμματιστή να συνδέσει πράκτορες, περιβάλλον και πειραματικά προγράμματα μαζί ακόμα και αν είναι γραμμένα σε διαφορετικές γλώσσες (C/C++, Java, Matlab, Python, Lisp). Αυτό το χαρακτηριστικό αποτελεί το κύριο πλεονέκτημα για χρήση της RL-Glue και εκφράζεται σε πολλές δυνατότητες για τον προγραμματιστή όπως:

• Προγραμματισμό πρακτόρων και περιβάλλοντος σε γλώσσα της επιλογής του προγραμματιστή. • Δυνατότητα χρήσης πρακτόρων ή περιβάλλοντος που σχεδιάστηκαν από άλλον προγραμματιστή - μέλος της κοινότητας. • Επέκταση παιχνιδιού, προγράμματος ή προβλήματος ώστε να τρέχει σε RL-Glue και να είναι διαθέσιμο - προσβάσιμο και από τη υπόλοιπη κοινότητα.

Αξίζει να αναφέρουμε ότι χρησιμοποιείται κυρίως για τεχνητή νοημοσύνη και συγκεκριμένα σε Projects που πραγματεύονται ευφυΐα πρακτόρων [BRI 09] & [URL 3].

4. Genesis 3D Είναι μία ανοιχτού κώδικα Game Development μηχανή η οποία παρέχει τα εξής εργαλεία : • Actor Studio : Πρόγραμμα το οποίο μετατρέπει 3D μοντέλα στη μορφή που τα δέχεται η μηχανή Genesis 3D. • Actor Viewer : Λογισμικό προσομοίωσης των 3D μοντέλων στη μηχανή Genesis 3D. • Texture Packer : Λογισμικό δημιουργίας βιβλιοθηκών TXL. • World Editor : Λογισμικό δημιουργίας τρισδιάστατου περιβάλλοντος.

Ο συνδυασμός αυτών δίνει στον προγραμματιστή ό, τι χρειάζεται για να αναπτύξει μια 3D εφαρμογή. Επιπλέον, διαθέτει Online Forum και καλά οργανωμένο API (C/C++ πλατφόρμα) [URL 4].

5. Irrlicht Εngine Πρόκειται για μια ευέλικτη και απλή στη χρήση μηχανή γραφικών χρήσιμη για ποικιλία εφαρμογών από τρισδιάστατες εφαρμογές προσομοίωσης μέχρι παιχνίδια στρατηγικής. Μερικά από τα κύρια πλεονεκτήματα της είναι τα εξής:

Πλατφόρμα RPG παιχνιδι Σελίδα 23

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

• Είναι διαθέσιμα παραπάνω από ένα API. • Εξαιρετικά εύκολη εγκατάσταση. • Μεγάλη ευελιξία, ο προγραμματιστής μπορεί να αλλάξει ή να επηρεάσει σχεδόν τα πάντα στη μηχανή. • Σταθερότητα, ακόμα και σε περίπτωση λάθους εμφανίζει ένα μήνυμα - προειδοποίηση χωρίς να σταματήσει να τρέχει. • Μεγάλη απόδοση στην ταχύτητα. • Διαθέσιμο και αναλυτικό Documentation. [URL 5]

6. NeoEngine Πρόκειται στην ουσία για ένα ολοκληρωμένο πακέτο βιβλιοθηκών που θα μπορούσε κάποιος προγραμματιστής να χρησιμοποιήσει για να φτιάξει μια μηχανή γραφικών παρά θα λέγαμε για μια ολοκληρωμένη μηχανή προγραμματισμού παιχνιδιών. Δίνει τη δυνατότητα χρήσης σε Windows και Linux ενώ σύντομα και η πλατφόρμα των MAC θα είναι εφικτή [URL 6].

7. 3D Το Unity 3D είναι μια νέας τεχνολογίας πλατφόρμα που έχει ως στόχο της να κάνει τη ζωή του προγραμματιστή παιχνιδιών ευκολότερη. Χρησιμοποιώντας την πλαρφόρμα αυτή μπορεί κανείς να κάνει παιχνίδια πολύ εύκολα αλλά και πολύ γρήγορα. Με το Unity προγραμματίζονται παιχνίδια τα οποία μπορουν να χρησιμοποιηθούν από τις γνωστότερες και συχνά χρησιμοποιήσιμες πλατφόρμες που υπάρχουν αυτή τη στιγμή στην αγορά, όπως είναι το iPhone, iPod, iPad, συσκευές με Android, Xbox, PS3, Wii. Μπορεί επίσης κανείς εύκολα να φτιάξει παιχνίδια και να τα δημοσιεύσει στο Internet. Το Unity3D είναι ένα εργαλείο το οποίο μπορεί να χρησιμοποιηθεί από τις πλατφόρμες των Windows και των Mac [RYA 10].

8. Η Crystal Space είναι ένα πλήρως εξοπλισμένο πακέτο λογισμικού γραμμένο σε C++ σχεδιασμένο για να χρησιμοποιείται κυρίως σε εφαρμογές παιχνιδιών και εικονικής πραγματικότητας ωστόσο μπορεί χωρίς πρόβλημα να αναπτύξει και 2D εφαρμογές. Δίνει τη δυνατότητα χρήσης σε Windows, GNU/Linux και Mac OS X. Επιπλέον, υποστηρίζει χρήση OpenGL σε όλες τις πλατφόρμες. Κύριο χαρακτηριστικό είναι η ένταξη αντικειμένων, κειμένων και άλλων τύπων αρχείων σε βιβλιοθήκες και στη συνέχεια η τοποθέτηση τους σε ξεχωριστούς ZIP φακέλους [URL 8] & [URL 7].

9. Ultimate 3D Είναι μία μηχανή γραφικών σχεδιασμένη για υψηλού επιπέδου τρισδιάστατα γραφικά χωρίς ιδιαίτερο κόπο και γνώσεις. Προσφέρει πληθώρα χαρακτηριστικών που μπορούν να οδηγήσουν σε εντυπωσιακά γραφικά χωρίς ωστόσο να αυξάνεται η πολυπλοκότητα στη χρήση. Τα κυριότερα από αυτά είναι:

• «Vertex Tweening», πρόκειται για μια τεχνική δημιουργίας πλαισίων βασισμένων σε Animations.

Πλατφόρμα RPG παιχνιδιών Σελίδα 24

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

• Ευκολόχρηστο σύστημα φωτισμού και ομίχλης. • Υποστήριξη για περιβαλλοντικά εφέ (π.χ. Sky Spheres, Sky Cubes κ.α.). • Συναρτήσεις για σχεδίαση δισδιάστατων γραφικών και κειμένων. • Πλήρως αυτοματοποιημένη δημιουργία επιπέδων για λεπτομέρειες. • Συναρτήσεις για τροποποίηση μοντέλων χωρίς να σταματήσει να τρέχει το λογισμικό. • Τεχνικές σκίασης και άλλων εφέ. • Υποστήριξη χρήσης πολλών καμερών. [URL 9]

Κλειστού Κώδικα:

1. GameMaker Το Game Maker είναι η πιο φθηνή πλατφόρμα που υπάρχει αυτή τη στιγμή στην αγορά. Δίνει τη δυνατότητα δημιουργίας παιχνιδιού χρησιμοποιώντας καθαρά την πλατφόρμα και χωρίς να χρειάζεται να γράψει κανείς πολλές γραμμές κώδικα. Βέβαια, οι δυνατότητες που παρέχει αυτή η πλατφόρμα είναι πολύ περιορισμένες, και έτσι δεν μπορεί να χρησιμοποιηθεί από κάποιον όταν χρειάζεται να κάνει ένα παιχνίδι μεγάλης πολυπλοκότητας [URL 10].

2. Unity Pro Το Unity Pro είναι είναι η πλατφόρμα του Unity 3D η οποία συμπεριλαμβάνει ένα μεγάλο κομμάτι από χαρακτηριστικά τα οποία δεν παρέχονται στην απλή πλατφόρμα του Unity, όπως για παράδειγμα οι αυτόματες σκιές [URL 11].

3. Το C4 Engine είναι μια πλατφόρμα η οποία περιέχει ένα δυναμικά ολοκληρωμένο εργαλείο για προγραμματισμό παιχνιδιών σε Windows και Mac OS. Το C4 Engine δεν αποτελεί μόνο ένα εργοστάσιο παραγωγής 3D γραφικών αλλά συμπεριλαμβάνει και ένα ολοκληρωμένο τμήμα υποστήριξης για ήχο, διαδικτυακή επικοινωνία, συσκευές εισόδου και πολλά άλλα [URL 12].

4. 3D Πρόκειται για μια πλατφόρμα η οποία είναι φτιαγμένη έτσι ώστε να μπορεί ευέλικτα αλλά και αποτελεσματικά να δώσει λύσεις στη δημιουργία παιχνιδιών για μια μεγάλη ποικιλία από συσκευές που να μπορούν να τα δεχτούν. Περιέχει εργαλεία και API που βοηθάνε πολύ στην ολοκλήρωση ενός παιχνιδιού. Παιχνίδια γραμμένα με τη χρήση αυτής της πλατφόρμας μπορεί κανείς να δει σε παιχνιδομηχανές όπως το XBOX 360 και το Wii. Επίσης, τα παιχνίδια αυτά δημιουργούνται και για απευθείας χρήση τους σε PC ή ακόμα και διαδικτυακά [URL 13].

5. Adobe Director 11 Πρόκειται για ένα πολύ δυνατό εργαλείο που χρησιμοποιείται για επεξεργασία βίντεο κυρίως, ωστόσο έχει αρκέτές δυνατότητες και στη δημιουργία παιχνιδιών. Τα γραφικά που

Πλατφόρμα RPG παιχνιδι Σελίδα 25

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

μπορεί να κάνει κανείς για ένα παιχνίδι που φτιάχνεται από το Adobe Director 11 είναι τουλάχιστον αξιοπρεπή. Έχει πολλές δυνατότητες για συνεργασία με πολλά προγράμματα αφού μπορεί να επεξεργαστεί πολλούς τύπους αρχείων για εικόνα, ήχο και βίντεο. Επίσης έχει τη δυνατότητα να επεξεργάζεται 3D μοντέλα και σε συνδυασμό με το 3DS Max μπορεί να κανείς να κάνει κάτι πάρα πολύ καλό στον τομέα του προγραμματισμού παιχνιδιών. Η πλατφόρμα αυτή χρησιμοποιεί για τον προγραμματισμό της κίνησης τη γλώσσα Lingo ή τη γλώσσα Javascript. Έχει τη δυνατότητα να επεμβαίνει και σε αρχεία βίντεο που είναι γραμμένα σε Adobe Flash [URL 14].

2.5.2 Βοηθητικά Προγράμματα:

1. OpenSim Το Project του Open Simulator ξεκίνησε στις αρχές του 2007 από τους Darren Guard και Steffan Andersson και βασίστηκε ουσιαστικά στον ανοιχτό κώδικα του Second Life. Second Life είναι ένα τρισδιάστατος εικονικός κόσμος όπου οι χρήστες μπορούν να εγγραφούν και να φτιάξουν το δικό τους Avatar. Μέσα από αυτό μπορούν ουσιαστικά (πάντα Online) να επικοινωνήσουν με άλλους χρήστες - Avatar, να δουλέψουν, να ψωνίσουν, να δημιουργήσουν σχέσεις και γενικά να προσομοιώσουν σχεδόν κάθε ανθρώπινη δραστηριότητα στα πλαίσια του εικονικού κόσμου. Αρχικά, ωστόσο, ο κώδικας του Second Life ήταν κλειστός μέχρι που η δημιουργικότητα των χρηστών και οι δυνατότητες περαιτέρω ανάπτυξης του επέβαλλαν ουσιαστικά να γίνει ο κώδικας προσβάσιμος από τους ενδιαφερόμενους (Open-Source) [JOS 10]. Το Open Sim αν και αρχικά δεν προοριζόταν για κάτι τέτοιο από τους δημιουργούς του εξελίχθηκε σε ένα πλήρες λογισμικό που δίνει τη δυνατότητα για ποικίλες εικονικές εφαρμογές. Πρόκειται για μια τρισδιάστατη πλατφόρμα, έναν τρισδιάστατο πολλαπλών χρηστών Server. Μπορεί να χρησιμοποιηθεί για τη δημιουργία ενός εικονικού περιβάλλοντος ή κόσμου το οποίο θα είναι προσβάσιμο από πολλαπλούς χρήστες και πάνω σε πολλαπλά πρωτόκολλα [JOS 10].

Πλατφόρμα RPG παιχνιδιών Σελίδα 26

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Εικόνα 3 - OpenSim

2. Make Human Το Make Human είναι λογισμικό ανοιχτού κώδικα το οποίο χρησιμοποιείται για τη δημιουργία ανδροειδών στον τρισδιάστατο χώρο. Πρόκειται για ένα αρκετά καλό και οργανωμένο λογισμικό που ξεχωρίζει ανάμεσα σε άλλα λόγω του υψηλής ποιότητας αποτελέσματος γραφικών και της πολύ καλής ανάλυσης των χαρακτηριστικών του μοντέλου που δημιουργείται στο πλέγμα (mesh). Στην παρακάτω φωτογραφία γίνεται μια αναπαράσταση της ποιότητας του πλέγματος στο Make Human [WMH].

Εικόνα 4 - Make Human

Το Make Human είναι γραμμένο κατά ένα μικρό κομμάτι σε γλώσσα C ενώ το μεγαλύτερο

Πλατφόρμα RPG παιχνιδι Σελίδα 27

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

κομμάτι είναι γραμμένο σε Python. Αυτό συμβαίνει γιατί η Python είναι γλώσσα που έχει ένα μεγάλο όγκο από βιβλιοθήκες και Plugins που μπορούν να χρησιμοποιηθούν απλουστεύοντας κατά πολύ την εφαρμογή. Το Make Human συνεργάζεται και με αρκετά άλλα προγράμματα, όπως είναι το Renderman, το Wavefont, το Blender, το Collada και το Doom 3. Οι τύποι αρχείων που υποστηρίζει είναι .rib, .obj, .mhx, .dae, .md5 [WMH].

3. Sweet Home Το Sweet Home είναι ένα ανοιχτού κώδικα λογισμικό το οποίο έχει έτοιμες συναρτήσεις που μπορούν να χρησιμοποιηθούν για τη δημιουργία χώρων και επίπλων για το σπίτι. Είναι ένα εργαλείο που είναι γραμμένο σε Java. Το Sweet Home υποστηρίζει αρχεία τύπου .obj και μπορεί να συνεργαστεί αρκετά καλά με άλλα λογισμικά ανοιχτού κώδικα όπως είναι το Blender [URL 15].

2.6 Role-Playing Games

2.6.1 Εισαγωγή Τα παιχνίδια είναι μια από τις πιο ενεργές περιοχές στον τομέα του προγραμματισμού. Το σημαντικό κομμάτι που απασχολεί τους σχεδιαστές παιχνιδιών, είναι να μπορεί ένα παιχνίδι να διασκεδάσει τους παίκτες και να τους ψυχαγωγήσει με μια ποικιλία από ενδιαφέροντα σενάρια. Ένα είδος παιχνιδιού που προκαλεί το ενδιαφέρον μιας μεγάλης μερίδας ανθρώπων που ασχολούνται με αυτά είναι τα RPGs. Αναπόσπαστο μέρος για ένα RPG είναι το σενάριο. Οι παίκτες των RPG αναζητούν ποικίλα και πλούσια σενάρια. Η συνολική ιστορία συχνά χωρίζεται σε μέρη μικρών αναζητήσεων που αποτελούν και τους στόχους επιμέρους αποστολών. Μέσα σε αυτές τις ιστορίες οι παίκτες αποκτούν εμπειρίες, εμπλέκονται σε μάχες αυξάνοντας τις δυνάμεις τους, τις μαγικές τους ικανότητες, την ευφυία τους και άλλα από τα χαρακτηριστικά τους [YOU 11].

2.6.2 Oι πρόγονοι των Role Playing Games Τα λεγόμενα War Games λίγο πολύ υπήρχαν από τότε που άρχισαν και οι πόλεμοι της σύγχρονης ιστορίας της ανθρωπότητας και επακόλουθα η ιδέα να προσομοιώσει κανείς μια μάχη. Η αφετηρία τους μπορεί να τοποθετηθεί στις αρχές του 19ου αιώνα στην Πρωσία αν και ιστορικά καταγεγραμμένες αναφορές σε πολεμικά παιχνίδια μπορεί να εντοπίσουμε ακόμα και 400 χρόνια πριν. Ωστόσο, στη σύγχρονη ιστορία ο H. G. Wells είναι αυτός που θεωρείται ο «παππούς» των πολεμικών παιχνιδιών και άρα ο «προ-πάππους» θα λέγαμε των RPGs. O Wells το 1915 εκδίδει ένα βιβλίο κανόνων με τίτλο «Little Wars» που σήμερα θεωρείται η βίβλος των πολεμικών παιχνιδιών, το οποίο αν και ήταν πολύ δημοφιλές δεν οδήγησε το κοινό σε ασχολία με τα πολεμικά παιχνίδια μέχρι και το 1953. Γενικά, τις δεκαετίες ΄60 και ΄70 τα πολεμικά παιχνίδια γνώρισαν μεγάλη αποδοχή από την νεολαία και το αντικείμενο εξελίχθηκε χωρίς υπερβολή σε μια τεράστια βιομηχανία μετά και την καθοριστικής για το χώρο σημασίας δημιουργία του Άρχοντα των Δαχτυλιδιών [URL 16]. Το 1968 εντοπίζουμε τις πρώτες ρίζες του Role-Playing και έχουμε από τον Gygax το πρώτο πολεμικό παιχνίδι που περιελάμβανε κανόνες για γίγαντες, ξωτικά, μάγους και μαγικά ξόρκια, το επονομαζόμενο Chainmail που θεωρείται ο πρόγονος του Dungeons And Dragons. Στις αρχές της δεκαετίας του ΄70 δύο μεγάλα μυαλά ο Arneson και ο Gygax συναντήθηκαν και ξεκίνησε μια καθοριστική για το χώρο του RPG συνεργασία. Στα επόμενα

Πλατφόρμα RPG παιχνιδιών Σελίδα 28

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

χρόνια μετά από εξέλιξη του Chainmail, δημιουργία του Blackmoor Dungeon Campaign αλλά και συνδυασμό της εφευρετικότητας και φαντασίας των δύο αντρών γεννιέται το πρώτο πραγματικό RPG, που δεν είναι άλλο από το Dungeons and Dragons, ένα νέο χόμπι είχε δημιουργηθεί [URL 16].

2.6.3 Σενάρια και πλοκές στα RPG Καθοριστικό ρόλο στα RPG παίζει το σενάριο των αποστολών των χαρακτήρων και του «Party», ανάλογα με το πόσο πρωτότυπο και ενδιαφέρον είναι, αν δίνει τη δυνατότητα διαλόγων και επαφών με NPCs αντίστοιχα ανεβαίνει και το ενδιαφέρον των παικτών και άρα η επιτυχία του παιχνιδιού. Ωστόσο, η δημιουργία αυτών των σεναρίων και διαλόγων με αυτά τα χαρακτηριστικά είναι αρκετά δύσκολη. Παρόλα αυτά, είναι διαθέσιμη αυτή τη στιγμή στην αγορά έρευνα που ασχολείται με τη δημιουργία τέτοιων σεναρίων και πλοκών. Μία γνωστή μέθοδος, είναι αυτή που χρησιμοποιεί τα Petri Net Modules . Αυτή χρησιμοποιεί το «παρελθόν» των παικτών για να τους κατατάξει σε τύπους, το σύστημα δηλαδή επιλέγει σημαντικά - κύρια γεγονότα για να δημιουργήσει το κατάλληλο για τον τύπο του παίκτη σενάριο. Θα μπορούσαμε να χωρίσουμε σε τρία μέρη την παραπάνω διαδικασία :

• Κατηγοριοποίηση σε τύπους παικτών • Δημιουργία σεναρίου χρησιμοποιώντας τα Petri Net Scripts. • Γέννηση και υλοποίηση της αποστολής στην πλατφόρμα του παιχνιδιού. [YOU 11]

Εικόνα 5 - Petri Net Modules

2.6.4 Είδη παικτών Στα Role-Playing Games οι χαρακτήρες που υπάρχουν χωρίζονται σε δύο τύπους. Τους σκληροπηρυνικούς παίκτες (Ηard-Core Players) και τους κλασσικούς παίκτες (Casual Players). Ο διαχωρισμός αυτός ανάμεσα στους παίκτες γίνεται βάση κάποιων κρητιρίων. Τα κριτήρια αυτά είναι τα εξής:

• Ο μέσος χρόνος που σπαταλάει ένας παίκτης παίζοντας μια αποστολή. • Ο μέσος αριθμός των μαχών που δίνει ένας παίκτης ανά αποστολή.

Πλατφόρμα RPG παιχνιδι Σελίδα 29

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

• Ο μέσος αριθμός των συζητήσεων με τους NPCs κατά τη διάρκεια μιας αποστολής. • Ο μέσος αριθμός θανάτου του χαρακτήρα του παίκτη κατά τη διάρκεια μιας αποστολής. • Ένας δείκτης που ελέγχει το ποσοστό ανάμεσα στον αριθμό των δύσκολων και απλών αποστολών του παιχνιδιού.

Τα βασικά χαρακτηριστικά των CP είναι τα εξής:

• Μεταφέρουν αντικείμενα. • Είναι παρατηρητικοί • Συζητάνε πολύ με τους NPCs. • Χρησιμοποιούνε συχνά αντικείμενα για να αποφύγουν δύσκολες καταστάσεις • Επιδιώκουν ήσυχες καταστάσεις • Αναζητούν σπάνια αντικείμενα. • Επισκέπτονται επικίνδυνες περιοχές. • Αναζητούν νέα μαγικά.

Τα βασικά χαρακτηριστικά των HCP είναι τα εξής:

• Επιδιώκουν την προμήθεια και αγορά πολεμικού εξοπλισμού. • Κάνουν εγκλήματα. • Προσπαθούν να σώσουν φυλακισμένους NPCs. • Επιτίθεντε στους εχθρούς τους. • Προφυλάσουν τους συμπαίκτες τους. • Εξασκούν τα ταλέντα τους. • Εξασκούν τις πολεμικές τους ικανότητες.

Οι CP απολαμβάνουν το παιχνίδι ανακαλύπτοντας νέα μέρη, βλέποντας άγνωστες καταστάσεις και συζητώντας με NPCs ή άλλους κανονικούς παίκτες. Από την άλλη μεριά, οι HCP, αγχώνονται λόγω της δυσκολίας των αποστολών που έχουν αναλάβει να φέρουν εις πέρας, όμως η λύτρωση για αυτούς έρχεται όταν τελικά καταφέρνουν να ολοκληρώσουν την αποστολή τους [YOU 11].

2.6.5 Δημιουργία Σεναρίου Για τη δημιουργία σεναρίου, σύμφωνα με τη μεθοδολογία Petri Net, πρέπει να γίνει αρχικά ένας βασικός διαχωρισμός του συνολικού σεναρίου της κάθε αποστολής, σε πολλά και μικρά γεγονότα (Events). Κάθε γεγονώς έχει ουσιαστικά να κάνει με τη δυναμική συμπεριφορά των παικτών σε σχέση με το περιβάλλον ή με τους NPCs. Η μεθοδολογία Petri Net χρησιμοποιείται για να αναπαραστήσει γεγονόντα. Πιο συγκεκριμένα, χρησιμοποιείται για να αναπαραστήσει τις διάφορες τοποθεσίες, τα αντικείμενα, τις καταστάσεις, τους NPCs και επίσης καθορίζει την ροή των συζητήσεων των παικτών με τους NPCs ανάλογα με το σενάριο και τις επιλογές των παικτών. Στις παρακάτω εικόνες παρουσιάζονται κάποιες περιπτώσεις γεγονότων κατά τη διάρκεια συζήτησης παίκτη με NPC καθώς και κατά τη διάρκεια μιας μάχης [YOU 11].

Πλατφόρμα RPG παιχνιδιών Σελίδα 30

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Εικόνα 6 - Petri Net Modules, NPC

2.7 Dungeons and Dragons Το Dungeons and Dragons είναι ένα επιτραπέζιο Role Playing Game φαντασίας των Gary Gygax και Dave Arneson. Η πρώτη έκδοση έγινε το 1974 από την TSR (Tactical Studies Rules) και το 1997 από την Wizards of the Coast. To DnD ξεφεύγει από τα πλαίσια των παραδοσιακών παιχνιδιών πολέμου ή περιπέτειας και δίνει σε κάθε παίκτη την δυνατότητα

Πλατφόρμα RPG παιχνιδι Σελίδα 31

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

να φτιάξει τον δικό του μοναδικό χαρακτήρα βασισμένο πάντα στους δοσμένους κανόνες από τους δημιουργούς του παιχνιδιού. Οι παίκτες δημιουργούν ομάδες «Party» που φέρουν εις πέρας αποστολές - περιπέτειες στον φανταστικό κόσμο του DnD, τα σενάρια των οποίων δημιουργεί και αφηγείται ο DM ο οποίος εκτός των άλλων διαχειρίζεται και όλο τον φανταστικό κόσμο και τα πλάσματά του. Κατά τη διάρκεια του παιχνιδιού και καθώς η μία αποστολή διαδέχεται την άλλη οι παίκτες κερδίζουν εμπειρία και οι χαρακτήρες τους αναπτύσσουν τα ταλέντα και τις ξεχωριστές τους ικανότητες και «μεγαλώνουν» - ανεβαίνουν επίπεδο (Level up). Πολλές φορές μία περιπέτεια μπορεί να χρειαστεί περισσότερες από μία συναντήσεις των παικτών και του DM για να ολοκληρωθεί ενώ μια σειρά από συνεχόμενες επιμέρους περιπέτειες ονομάζεται «Campaign». Τα απαραίτητα αντικείμενα για το παιχνίδι είναι μόνο τα βιβλία των κανόνων, οι ειδικές φόρμες με τα στοιχεία των χαρακτήρων των παικτών, ένα σετ από ειδικά ζάρια και πολύ φαντασία. Τα βασικά βιβλία των κανόνων είναι τρία, το Player's Handbook, το Dungeon Master Guide και το Monster Manual. Στις μέρες μας βέβαια στην αγορά μπορεί να προμηθευτεί κανείς και άλλα βοηθητικά αξεσουάρ όπως μινιατούρες των χαρακτήρων, έτοιμα σενάρια κ.α [WDD].

2.8 Επιλογή Πλατφόρμας

2.8.1 Κριτήρια Επιλογής Όλη η παραπάνω έρευνα έγινε με σκοπό την επιλογή της κατάλληλης πλατφόρμας για το αντικείμενο της εργασίας μας. Τα βασικά κριτήρια που καθόρισαν την επιλογή της πλατφόρμας ήταν: 1. Να είναι ανοιχτού κώδικα Βασικό κριτήριο για την επιλογή της πλατφόρμας ήταν να είναι Open Source. Όταν μιλάμε για λογισμικό ανοιχτού κώδικα, εννοούμε ότι ο προγραμματιστής έχει τα εξής δικαιώματα:

• να χρησιμοποιεί το λογισμικό για όποιο σκοπό επιθυμεί. • να έχει πρόσβαση στον τρόπο λειτουργίας του λογισμικού και να τον τροποποιεί όπως κρίνει σκόπιμο. • να αναδιανέμει το λογισμικό • αναδιανομής όχι μόνο για την αρχική εκδοχή του λογισμικού, αλλά και για εκείνες που ενδέχεται να δημιούργησε ο ίδιος, βασιζόμενος στην αρχική. Το μεγάλο πλεονέκτημα του ελεύθερου λογισμικού είναι ότι τέτοιες τεχνολογίες εξελίσσονται ταχύτατα και κάθε φορά που παρουσιάζεται ένα πρόβλημα, η λύση βρίσκεται σε χρόνο ρεκόρ από τους πολυάριθμους προγραμματιστές που μπορούν να εξετάσουν τον πηγαίο κώδικα [ΒΑΡ 09].

2. Να έχει διαθέσιμο και εύχρηστο API και Documentation Ένα καλά οργανωμένο και εύχρηστο Documentation διευκολύνει σε μεγάλο βαθμό αφ' ενός την κατανόηση του κώδικα και αφ' ετέρου στην αξιοποίηση του για ανάπτυξη εφαρμογών βασισμένων σε αυτήν την πλατφόρμα.

3. Να υπάρχει ζωντανό και ανανεωμένο forum Ένα καλό, ζωντανό και ανανεωμένο forum μπορεί να βοηθήσει πολύ σε περίπτωση προβλήματος κατά την ανάπτυξη του κώδικα.

Πλατφόρμα RPG παιχνιδιών Σελίδα 32

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

4. Να έχει ιστορικό χρήσης από εταιρίες και προγραμματιστές Ένα επίσης σημαντικό κριτήριο για την επιλογή της πλατφόρμας είναι να γίνει έλεγχος εάν η πλατφόρμα έχει χρησιμοποιηθεί σε μεγάλα έργα με αντίστοιχο περιεχόμενο και εάν το αποτέλεσμα ήταν ικανοποιητικό.

5. Ισχυρή γλώσσα προγραμματισμού για Game Development Καθοριστικό στοιχείο για την επιλογή της πλατφόρμας είναι και η γλώσσα προγραμματισμού στην οποία βασίζεται. Το κατά πόσο αυτή είναι αντικειμενοστραφής, γρήγορη, ισχυρή και μπορεί να συνδυαστεί και με άλλες γλώσσες.

6. Άλλα κριτήρια Άλλα κριτήρια για την επιλογή της πλατφόρμας είναι να υπάρχει επίσημη ιστοσελίδα με άφθονο υλικό και οδηγίες. Επίσης καλό είναι να υπάρχει πλούσια διαθέσιμη βιβλιογραφία και αρθρογραφία.

2.8.2 Τελική Επιλογή: Με βάση όλη την έρευνα που έγινε παραπάνω για τις διαθέσιμες πλατφόρμες και με δεδομένα τα παραπάνω κριτήρια, αποφασίστηκε η επιλογή του Ogre ως η βασική πλατφόρμα για την ανάπτυξη του λογισμικού. Το Ogre πληρεί όλες τις παραπάνω προϋποθέσεις και ο πηγαίος κώδικας του Ogre είναι σε C++, γεγονός που κρίνεται αρκετά θετικό αν σκεφτεί κανείς ότι η C++ θεωρείται μια από τις πιο γρήγορες και ισχυρές γλώσσες προγραμματισμού.

2.9 Συμπεράσματα Η απόφαση για τη βασική πλατφόρμα σε μια Game Development εφαρμογή πρέπει να είναι αποτέλεσμα αναλυτικής έρευνας και μελέτης των διαθέσιμων επιλογών. Η έρευνα αυτή κρίνεται απαραίτητη για τους προγραμματιστές για την καλύτερη κατανόηση του αντικειμένου εργασίας τους. Επιπλέον, η ορθότητα αυτής της έρευνας ελαχιστοποιεί την πιθανότητα λανθασμένης επιλογής η οποία είναι πιθανό μακροπρόθεσμα να είχε μεγάλο κόστος σε χρόνο και χρήμα. Μέσα από αυτό το κεφάλαιο αναλύθηκαν οι περισσότερες επιλογές, εκτιμήθηκαν βάση συγκεκριμένων κριτηρίων και πάρθηκε η τελική απόφαση.

Πλατφόρμα RPG παιχνιδι Σελίδα 33

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

ΚΕΦΑΛΑΙΟ 3 - Game Engine

3.1 Εισαγωγή Η επιλογή μας στα πλαίσια της διπλωματικής εργασίας Στα πλαίσια του project μας παρά την πλούσια διαθεσιμότητα σε full 3D game -engines, η υλοποίηση του παιχνιδιού θα υλοποιηθεί όχι με ένα έτοιμο πακέτο αλλά με συνδυασμό πολλών προ γραμμάτων και βιβλιοθηκών με πυρήνα την πλατφόρμα του Ogre. Η συνδιαστική αυτή επιλογή γίνεται καθαρά για εκπαιδευτικούς λόγους και με αυτό τον τρόπο δίνεται η δυνατότητα στους developers να κατανοήσουν σε βάθος την λειτουργία των σύγχρονων παιχνιδομηχανών , δουλεύοντας ουσιαστικά σε ένα κατώτερο επίπεδο από ότι μπορεί να προσφέρει η σημερινή αγορά. Σε αυτό το κεφάλαιο αναφερόμαστε αναλυτικά σε κάθε κομμάτι αυτού του συνδυασμού που συνθέτει την game engine της εργασίας μας .

3.2. Ogre H open-source 3D πλατφόρμα του Ogre χρησιμοποιείται στα πλαίσια της εργασίας ουσιαστικά σαν rendering engine . Παρά το γεγονός ότι αυτή είναι και η βασική της λειτουργία, αξίζει να αναφερθεί ότι κάποιες λειτουργίες όπως τα γραφικά και το animation θα μπορούσαν να υποστηριχ τούν από την μηχανή του Ogre και μάλιστα για εξειδικευμένες και σύνθετες εφαρμογές, κάτι που δεν επιλέγεται για τους λόγους που αναφέρθηκαν. Ωστόσο, υπάρχουν και λειτουργίες που δεν υποστηρίζονται όπως χαρακτηριστικά είναι το audio που είναι απαραίτητο σε κάθε παιχνίδι. Σε αυτές τις ελλείψεις που καθιστούν το Ogre απλά μία rendering engine , όπως δηλώνει και το όνομα του ( Object-Oriented Graphics Rendering Engine ), στηρίζονται και οι «αντιφρονούντες » της πλατφόρμας. Στον αντίποδα αυτών οι υποστηρικτές της , ανακαλύπτουν στο Ogre την ελευθερία των επίδοξων developers να χρησιμοποιήσουν ότι physics, input, audio και άλλες βιβλιοθήκες επιθυμούν. Άλλωστε η Ogre υποστηρίζει βιβλιοθήκες όπως η OIS, SDL, CEGUI κ.α., σε κάποιες από αυτές θα αναφερθούμε αναλυτικά και παρακάτω.

• Rendering: Με τον όρο rendering εκφράζουμε την διαδικασία απόδοσης ενός μοντέλου σε μια εικόνα , στα πλαίσια προγραμμάτων υπολογιστών. Ένα scene file, όπως λέγεται, περιέχει κάθε λεπτομέρεια και δείκτη που χρειάζεται για την πλήρη περιγραφή ενός μοντέλου. Για παράδειγμα σίγουρα περιέχει δείκτες για την γεωμετρία, τη θέση της κάμερας , τον φωτισμό και τις σκιές. Αυτή θα λέγαμε είναι η «είσοδος» ενός rendering program για να ποδώσει σαν έξοδο το image file. Η διαδικασία του rendering αποτελεί έναν καθοριστικής σημασίας τομέα στο χώρο του και απασχολεί επιστήμονες σαν ξεχωριστός και ανεξάρτητος τομέας έρευνας κυρίως από την δεκαετία του 1970. Η σημασία του γίνεται κατανοητή αν σκεφτούμε τη χρήση που έχει σε ποικίλες ανθρώπινες δραστηριότητες από τα video- computer games έως την αρχιτεκτονική , τα εφέ στον κινηματογράφο και την τηλεόραση ή τους προσομοιωτές . Εικόνα 7 - Ποικιλία rendering techiques

Πλατφόρμα RPG παιχνιδιών Σελίδα 34

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Στο παράρτημα παρατίθενται οι κλάσεις που αποτελούν το render system από το API του Ogre. Αξίζει να αναφερθεί ότι το Ogre είναι μια «realtime» rendering μηχανή, που σημαίνει ότι για να ολοκληρωθεί η διαδικασία για ένα μοντέλο απαιτείται 1/30 με 1/100 δευτερολέπτου. Μια ματιά στις κλάσεις μπορεί να μας δώσει μια πρώτη εικόνα για το πόσο σύνθετο και πολύπλοκο είναι το rendering ενός μοντέλου αλλά και να δικαιώσει τον τίτλο του Ogre ως μία από τις πιο προσεγμένες και ακριβείς rendering engines.

• OpenGL (Open G raphics Library)

Στα πλαίσια της διαδικασίας του rendering απαραίτητη εκτός από την πλατφόρμα του Ogre είναι και μια βασική rendering library. Αυτό τον ρόλο στην εργασία μας παίζει η OpenGL η οποία στην ουσία χρησιμοποιείται μαζί με την engine ώστε να παραχθούν τα επιθυμητά 2D ή 3D γραφικά στον υπολογιστή. Η OpenGL αποτελείται από πάνω από 250 διαφορετικές συναρτήσεις που μπορούν να κληθούν για να σχηματιστούν ακόμη και τα πιο σύνθετα σχήματα και σκηνές . Αναπτύχθηκε από την Silicon Graphics Inc στα 1992 και βρίσκει ευρεία εφαρμογή στην εικονική πραγματικότητα, CAD, προσομοιωτές πτήσης, παιχνίδια κ.α. Είναι συμβατή και με τα τρία δημοφιλέστερα λειτουργικά : Linux, MacOS X, Windows. Η βασική λειτουργία της είναι να δέχεται ορίσματα όπως σημεία, γραμμές και πολύγωνα και να τα μετατρέπει σε pixels μέσω ενός σωλήνα γραφικών τον λεγόμενο, OpenGL state machine. Χρειάζεται προσοχή στο γεγονός ότι η OpenGL είναι απλά μία βιβλιοθήκη δηλαδή δεν έχει καμία «μνήμη των» αντικειμένων, δεν θυμάται αν ζωγραφίσαμε ένα τρίγωνο ή που το ζωγραφίσαμε. Τέλος, μπορεί να χρησιμοποιηθεί με πολλές γλώσσες προγραμματισμού, αν και η c++ η οποία επιλέχθηκε για το project φαίνεται να είναι η καλύτερη.

Εικόνα 8 - Απλουστευμένη εκδοχή της λειτουργίας του σωλήνα γραφικών

• ΤΥΠΟΙ ΑΡΧΕΙΩΝ .mesh και .skeleton

Το Ogre υποστηρίζει πολλούς κοινά χρησιμοποιούμενους τύπους αρχείων όπως τους .bsp (Quake bsp file), .shader (Quake 3 shader file), .ttf (True type font file), .png, .tga, .jpg, .raw, .gif, .dds , .cg (Cg shader file), .asm (Assembly shader file), .zip (Packed resources),

Πλατφόρμα RPG παιχνιδι Σελίδα 35

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

.xml (XML file), .xsd (XML schema file that defines Ogre specific file formats that are XML based), .log.

Επιπλέον, χρησιμοποιεί και τους παρακάτω συγκεκριμένους τύπους αρχείων :

• .material (Ogre manual: material scripts) • .compositor (Ogre manual: compositor scripts) • .particle (Ogre manual: particle scripts) • .overlay (Ogre manual: overlay scripts) • .fontdef (Ogre manual: font definition scripts) • .skeleton (Δυαδικό αρχείο που περιέχει το σκελετό και την κίνηση των μοντέλων) • .mesh (Δυαδικό αρχείο που περιέχει την οντότητα του μοντέλου) • .scene (XML αρχείο που περιέχει πολλές οντότητες) • .cfg (Αρχείο ρύθμισης πολλαπλών χρήσεων) • .inc (Πρότυπο αρχείο) • .scheme (XML αρχείο γραφικού περιβάλλοντος) • .imageset (XML αρχείο γραφικού περιβάλλοντος) • .layout (XML αρχείο γραφικού περιβάλλοντος) • .font (XML αρχείο γραφικού περιβάλλοντος)

[WOG ]

Συγκεκριμένα θα ασχοληθούμε περαιτέρω με τους τύπους .mesh και .skeleton καθώς ο συνδυασμός αυτών είναι που τελικά φορτώνει η μηχανή του Ogre από την τοποθεσία resources.cfg και συνθέτει το animation.

Ø .mesh Αυτός ο τύπος αρχείων όπως δηλώνει και η ονομασία του -mesh=δίχτυ, πλέγμα-, χρησιμοποιείται για την γεωμετρική αναπαράσταση αντικειμένων χρησιμοποιώντας μια συλλογή πολυγώνων.

Ø .skeleton Αυτός ο τύπος αρχείων έχει αποθηκευμένη στην ουσία την πληροφορία για τα κόκκαλα –σκελετό π.χ. των χαρακτήρων αλλά και στοιχεία για το animation.

3.3 OIS (Object-oriented Input System Library) Πρόκειται για την βιβλιοθήκη που χρησιμοποιήθηκε στο project για την επικοινωνία developers με υπολογιστικό σύστημα. Η OIS μπορεί να εδραιώσει την επικοινωνία με τρεις βασικές κατηγορίες περιφερειακών συσκευών εισόδου: keyboards, mice, joysticks. Επιλέχθηκε για τη συμβατότητα της με τη c++ αλλά κυρίως για την τέλεια σύνδεση της με το Ogre, αξίζει να αναφερθεί πως η OIS χρησιμοποιείται στο Ogre από την έκδοση 1.4 ενώ προτείνεται επίσημα ως η βέλτιστη επιλογή από την επίσημη ιστοσελίδα του Ogre. Τεράστια διευκόλυνση αποτελεί και το γεγονός ότι στην εν λόγω ιστοσελίδα υπάρχουν διαθέσιμες αναλυτικές οδηγίες για τη χρήση της OIS στα πλαίσια του Ogre. Αυτό παρακάμπτει τα όποια μειονεκτήματα θα βρίσκαμε στη χρήσης της με χαρακτηριστικότερη την σχετικά πολύπλοκη αρχικοποίηση που είναι απαραίτητη για τη λειτουργία της στο σύστημα . [WOG]

Πλατφόρμα RPG παιχνιδιών Σελίδα 36

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Πίνακας 2 - Βασικός κώδικας για την αρχικοποίηση της OIS

OIS :: ParamList pl ; size_t windowHnd = 0; std :: ostringstream windowHndStr ; m_win ->getCustomAttribute ("WINDOW" , &windowHnd ); windowHndStr << windowHnd ; pl. insert (std :: make_pair (std :: string ("WINDOW" ), windowHndStr. str ())) ; m_InputManager = OIS :: InputManager :: createInputSystem ( pl ); m_Mouse = static_cast (m_InputManager - >createInputObject (OIS :: OISMouse , false )) ; m_Keyboard = static_cast (m_InputManager - >createInputObject (OIS :: OISKeyboard , false )) ; unsigned int width , height , depth; int top , left m_win ->getMetrics (width , height , depth , left , top ); const OIS :: MouseState &ms = m_Mouse ->getMouseState () ; ms. width = width; ms. height = height;

Μια σύντομη ματιά στο API της OIS μπορεί να δώσει μια πρώτη εικόνα για τις δυνατότητες που παρέχει:

Πίνακας 3 - Μια σύντομη ματιά στο API της OIS

OIS::Axis OIS::ForceEffect OIS::KeyEvent

OIS::Button OIS::ForceFeedback OIS::KeyListener

OIS::Component OIS::InputManager OIS::Mouse

OIS::ConditionalEffect OIS::Interface OIS::MouseEvent

OIS::ConstantEffect OIS::JoyStick OIS::MouseListener

OIS::Effect OIS::JoyStickEvent OIS::MouseState

OIS::Envelope OIS::JoyStickListener OIS::Object

OIS::EventArg OIS::JoyStickState OIS::PeriodicEffect

OIS::Exception OIS::Keyboard OIS::Pov OIS::RampEffect OIS::Slider

3.4 CEGUI (Crazy Eddie's Graphical User Interface System ) Πρόκειται για τη βιβλιοθήκη που επιλέχτηκε στα πλαίσια του project για τα γραφικά. Πιο αναλυτικά ο όρος GUI χρησιμοποιείται για να περιγράψει ένα interface ανάμεσα στους χρήστες και ποικίλες ηλεκτρονικές συσκευές μέσω εικόνων, παραθύρων κλπ και όχι

Πλατφόρμα RPG παιχνιδι Σελίδα 37

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

κειμένων. Τα πιο δημοφιλή και γνωστά στο κοινό GUI που έχουν αναπτυχθεί είναι τα , Mac OS X, X Window System, BlackBerry OS, Android, Windows Phone και Apple's iOS για smartphone. Συγκεκριμένα η CEGUI φαίνεται να είναι η καλύτερη επιλογή λόγω της γλώσσας προγραμματισμού (c++) αλλά και της πλατφόρμας του Ogre. Μάλιστα, μόνο μετά την έκδοση 1.7 κατάφερε το Ogre να «απεξαρτηθεί » από τη CEGUI, η οποία τουλάχιστον από την έκδοση 1.0 αποτελούσε δεδομένη επιλογή για τις εφαρμογές που χρησιμοποιούσαν τη συγκεκριμένη πλατφόρμα. Για αυτό το λόγο άλλωστε οι developers μπορούν να επισκεφθούν μέσω της επίσημης ιστοσελίδας της πλατφόρμας παραδείγματα κώδικα, τα οποία αποτελούν πολύτιμη βοήθεια για τους προγραμματιστές . Βασικό πλεονέκτημα που προσδίδει ιδιαίτερη ευελιξία στη CEGUI θεωρείται η χρήση xml αρχείων.

3.5 MakeHuman Η έκδοση 1.alpha6.0 του MakeHuman χρησιμοποιήθηκε για την μοντελοποίηση των χαρακτήρων – παικτών . Όλα τα αντικείμενα που συνθέτουν ένα χαρακτήρα προλαμβάνονται στο .mesh αρχείο που δημιουργεί τελικά το πρόγραμμα, με εξαίρεση τα μαλλιά-περούκα τα οποία δεν περιλαμβάνονται λεπτομέρεια στην οποία θα επανέλθουμε παρακάτω. Το αρχείο αυτό στη συνέχεια μέσω του mhximporter εισάγεται στο blender. Η δημιουργία ενός χαρακτήρα στο πρόγραμμα είναι σχετικά απλή διαδικασία, δίνεται η δυνατότητα επιλογής των φυσικών χαρακτηριστικών από ύψος και βάρος έως εθνικότητα ενώ υπάρχει η δυνατότητα ελέγχου της κάμερας . Επιπλέον, οι χαρακτήρες που δημιουργούνται μπορούν να σωθούν (.mhx) και να φορτωθούν αργότερα για περαιτέρω επεξεργασία ή για export στους δυνατούς τύπους αρχείων.

Εικόνα 9 – Επιλογή χαρακτηριστικών

Πλατφόρμα RPG παιχνιδιών Σελίδα 38

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Εικόνα 10 – Διαδικασία Export

Οι διαφορετικές περούκες όπως αναφέρθηκε δεν περιλαμβάνονται στο .mesh αρχείο. Η διαδικασία που πρέπει να γίνει είναι ξεχωριστό export . Αυτό αποδεικνύεται πλεονέκτημα, καθώς είμαστε ελεύθεροι να εξάγουμε διαφορετικά χτενίσματα και να επιλέγουμε στη συνέχεια στο blender αυτό που επιθυμούμε για τον χαρακτήρα μας. Οι τύποι αρχείων στους οποίους μπορούμε να εξάγουμε είναι .obj – που συνήθως προτιμάται για τα παιχνίδια- ή .curves που δίνει ρεαλιστικότερη όψη στο τελικό οπτικό αποτέλεσμα.

Εικόνα 11 – Makehuman Hairstyles

Πλατφόρμα RPG παιχνιδι Σελίδα 39

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

3.6 Blender Η έκδοση του Blender που τελικά χρησιμοποιήθηκε είναι η 2.57. Το καθοριστικό κριτήριο της επιλογής αποτέλεσε η συμβατότητα με την αντίστοιχη του MakeHuman για τη διευκόλυνση της διαδικασίας ανταλλαγής αρχείων ανάμεσα στα δύο προγράμματα.

3.6.1 MhxImporter Πρόκειται για ένα add-on του Blender, υπεύθυνο για την εισαγωγή όλων των αρχείων που επιθυμούμε να επεξεργαστούμε από το MakeHuman . Προσοχή χρειάζεται στην απαραίτητη ενεργοποίηση του add-on από το αντίστοιχο μενού του Blender πριν οποιαδήποτε ενέργεια. [WMH] 3.6.2 Import in Blender Αμέσως μετά την ενεργοποίηση είμαστε έτοιμοι για την εισαγωγή των αρχείων. Αυτό γίνεται εύκολα από το αντίστοιχο μενού όπως απεικονίζεται χαρακτηριστικά και στην παρακάτω εικόνα.

Εικόνα 12 – Blender imports from Makehuman

Μετά την επιλογή εμφανίζεται η εικόνα του χαρακτήρα μας στην οθόνη όπως βλέπουμε παρακάτω.

Πλατφόρμα RPG παιχνιδιών Σελίδα 40

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Εικόνα 13 – Χαρακτήρας μετά την εισαγωγή στο Blender

Για την αποσυμφόρηση της εικόνας μπορούμε να επιλέξουμε ενιαίο στρώμα σε ενιαίο χρόνο.

Εικόνα 14 – Αποσυμφόρηση εικόνας

3.6.3 Επιλογές εισαγωγής • Scale Το MakeHuman χρησιμοποιεί εσωτερικά τη μονάδα του δεκατόμετρου (dm) έτσι κλίμακα 1, 0 σημαίνει 1 BU=1dm. Επομένως, αν η σκηνή γίνεται σε άλλη κλίμακα το scale θα πρέπει να τροποποιηθεί αναλόγως . Για παράδειγμα αν η μονάδα μας είναι μέτρα ορίζουμε scale =0, 1 ενώ αν είναι ίντσες ορίζουμε scale=1/0 , 254=3, 94. Αυτό

Πλατφόρμα RPG παιχνιδι Σελίδα 41

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

είναι προτιμότερο από το να χρειαστεί να κάνουμε rescaling στο Blender καθώς επηρεάζονται έμμεσα πολλές παράμετροι όπως το SSS (subsurface scattering ).

Εικόνα 15 – Διαφορετικά scales

• Enforce version Τόσο ο MhxImporter όσο και τα mhx αρχεία έχουν τον αριθμό έκδοση τους που σκ οπό έχει τον μεταξύ τους συγχρονισμό. Συνήθως , το αρχείο είναι ασυμβίβαστο με τον εισαγωγέα και δεν συνίσταται το να προσπαθήσουμε να το ανοίξουμε όπως και να έχει. Μια εναλλακτική λύση είναι να φορτώσουμε το χαρακτήρα σε μια ενημερωμένη έκδοση του MakeHuman και να ξανακάνουμε την εξαγωγή. • Proxies Όπως βλέπουμε και στ ο τρίτο μέρος της παραπάνω εικόνας του παραπάνω σχήματος, ο χαρακτήρας χρειάζεται δεκαπλάσια κλιμάκωση του scale. Ωστόσο, τέτοιες μορφές του χαρακτήρα θα μπορούσαν στην πορεία να μας χρησιμεύσουν για παράδειγμα σαν φόντο. • Replace scene Η επιλογή αυτή διαγράφει όλα τα . mesh και αδειάζει τη σκηνή , ωστόσο άλλα αντικείμενα όπως κάμερες και φώτα δεν επηρεάζονται. • Cage Με σωστή διαμόρφωση ανάλογα και με το proxy μπορεί να φτιαχτεί ένα κλουβί γύρω από το .mesh. • Clothes Τα ρούχα που εισάγουμε είναι πολύ απλά αλλά απαραίτητα για τους χαρακτήρες μας ειδικά αν αυτοί πρωταγωνιστούν σε ένα game ή μια μικρού μήκους ταινία ενώ υπάρχει η δυνατότητα επεξεργασίας τους από το Blender. • Stretchy limbs Αυτή η δυνατότητα χρησιμοποιείται κυρίως σε χαρακτήρες cartoon. Με χαρακτηριστικό παράδειγμα την ElasticGirl από τους Απίθανους! Ωστόσο , στη δικιά μας εφαρμογή και σε όσες σκοπεύουν σε ρεαλιστικότητα γενικά αυτή η επιλογή παραμένει απενεργοποιημένη.

• Face shapes

Όπως δηλώνει και το όνομά της αυτή η επιλογή χρησιμοποιείται αν επιθυμούμε να

Πλατφόρμα RPG παιχνιδιών Σελίδα 42

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

δώσουμε διαφορετικές εκφράσεις στο πρόσωπο του χαρακτήρα μας ή να δημιουργήσουμε διάφορα στιγμιότυπα. Αν δεν σκοπεύουμε να το κάνουμε , καλό είναι να την απενεργοποιήσουμε εξ αρχής .

• Body shapes Σκοπός είναι αυτή η επιλογή να χρησιμοποιείται για να διορθώνει το σώμα του χαρακτήρα. Ωστόσο , η πείρα δείχνει ότι δεν έχει να μας προσφέρει κάτι. • Symmetric shapes Σημαντική επιλογή καθώς όλα τα shapekeys δίνονται σε αριστερή και δε ξιά εκδοχή, παρά το γεγονός ότι αποθηκεύονται συμμετρικά. Έτσι κάνοντας αυτή την επιλογή μπορώ για παράδειγμα να έχω για τον χαρακτήρα μου ένα ενιαίο shape _smile αντί smile_L και smile_R. • Diamonds Το αρχείο .mesh από το MakeHuman εισάγεται με μια σειρά από διαμάντια για την τοποθεσία των αρθρώσεων. Οι developers πολλές φορές επιλέγουν να τα αγνοούν και να τα διαγράφουν. Ωστόσο ο εισαγωγέας μπορεί εύκολα να τα αναγνωρίσει εξαιτίας του τριγωνικού τους σχήματος και σε ορισμένες περιπτ ώσεις είναι απαραίτητα για να διατηρήσουμε τις σωστές κορυφές . • Bend joints Το Blender λειτουργεί καλύτερα αν το .mesh του χαρακτήρα έχει ελαφρώς λυγισμένους αγκώνες και γόνατα , ενώ η μορφή που εισάγουμε από το MakeHuman δεν είναι έτσι. Επομένως , με αυτή τ ην επιλογή ενεργοποιημένη κατά τη διαδικασία φόρτωσης του αρχείου γίνεται και αυτή η προσαρμογή στον χαρακτήρα , ώστε να έχουμε τη βέλτιστη συμπεριφορά στο Blender. [LAR 10]

Εικόνα 16 - Joints

Πλατφόρμα RPG παιχνιδι Σελίδα 43

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

3.6.4 Bone layers Τα bone layers ουσιαστικά ομαδοποιούν αρθρώσεις για να διευκολύνουν την εργασία του animator και είναι οργανωμένα ως εξής : 1. The MasterFloor and Root (hip) bones. 2. The spine. 3. Arm IK. 4. Arm FK. 5. Leg IK. 6. Leg FK. 7. Finger control. 8. Individual fingers. 9. Face control. 10. Unused 11. Head, jaw, eyes. 12. Helper bones 13. Deform bones

Εικόνα 17 – Σκελετός

3.7 Ogre XMLConverter Είναι ένα εργαλείο γραμμής εντολών που μετατρέπει τύπους αρχείων .mesh και .skeleton σε xml αρχεία και το αντίστροφο. Πρόκειται για ένα πολύ χρήσιμο εργαλείο για την αποσφαλμάτωση των .mesh αρχείων αλλά και για την ανταλλαγή δεδομένων μεταξύ τους . Πολλοί developers επιλέγουν να κάνουν export σε xml καθώς είναι πιο απλό και στη συνέχεια με τη βοήθεια αυτού του εργαλείου να δημιουργήσουν ένα binary αρχείο από

Πλατφόρμα RPG παιχνιδιών Σελίδα 44

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

αυτό. Επιπρόσθετο πλεονέκτημα, αποτελεί το γεγονός το Ogre XMLConverter έχει τη δυνατότητα να δημιουργήσει επιπλέον πληροφορίες αναφορικά με το .mesh όπως οριοθέτηση περιοχής και επίπεδα λεπτομέρειας . [OGR 12]

3.8 Σύνοψη Ο συνδυασμός των επιλογών των κατάλληλων προγραμμάτων που έγιναν σε αυτό το κεφάλαιο, οι οποίες συνοψίζονται στην παρακάτω εικόνα, αποτελούν την πλατφόρμα του συστήματος δημιουργίας RPG παιχνιδιού.

Εικόνα 18 – Πλατφόρμα DnD

Πλατφόρμα RPG παιχνιδι Σελίδα 45

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

ΚΕΦΑΛΑΙΟ 4 - ΑΠΑΙΤΗΣΕΙΣ ΣΥΣΤΗΜΑΤΟΣ

4.1 ΕΙΣΑΓΩΓΗ Στο παρόν κεφάλαιο περιγράφονται οι απαιτήσεις συστήματος του project Dungeons and Dragons. Στη συνέχεια, αναφέρονται οι απαραίτητες επιλογές που πρέπει να γίνουν σε αυτό το στάδιο όσον αφορά στον αρχιτεκτονικό σχεδιασμό και την οργάνωση του συστήματος παράλληλα με μια περιγραφή των πιο δημοφιλών μοντέλων. Τέλος, περιγράφονται αναλυτικά μετά τις αποφάσεις που πάρθηκαν η οργάνωση και αποδόμηση του project όπως ακριβώς υλοποιήθηκε.

4.2 ΑΠΑΙΤΗΣΕΙΣ ΣΥΣΤΗΜΑΤΟΣ Οι απαιτήσεις ενός συστήματος είναι οι περιγραφές των υπηρεσιών που παρέχονται από το σύστημα και οι λειτουργικοί περιορισμοί του. Οι απαιτήσεις αυτές αντανακλούν τις ανάγκες υποψήφιων πελατών για ένα σύστημα που βοηθάει στην επίλυση κάποιων προβλημάτων όπως ο έλεγχος μιας συσκευής, η υποβολή μιας παραγγελίας ή η ανεύρεση πληροφοριών. Η διαδικασία του εντοπισμού, της ανάλυσης, της τεκμηρίωσης και του έλεγχου αυτών των υπηρεσιών και των περιορισμών ονομάζεται τεχνολογία απαιτήσεων (requirements engineering). Το έγγραφο των απαιτήσεων συστήματος που ορισμένες φορές ονομάζεται λειτουργικές προδιαγραφές, θα πρέπει να είναι ακριβές. Είναι απαραίτητο δηλαδή να ορίζεται με ακρίβεια τι ακριβώς πρόκειται να υλοποιηθεί και μπορεί να αποτελεί μέρος της σύμβασης μεταξύ αγοραστών και κατασκευαστών λογισμικού. Οι απαιτήσεις συστήματος λογισμικού συνήθως κατατάσσονται σε λειτουργικές απαιτήσεις, μη λειτουργικές απαιτήσεις και απαιτήσεις πεδίου. Οι λειτουργικές απαιτήσεις ενός συστήματος περιγράφουν τι θα πρέπει να κάνει το σύστημα (ή τι δε θα πρέπει) και μπορούν να εκφραστούν με διάφορους τρόπους. Ο πιο συνήθης τρόπος για τη σύνταξη των προδιαγραφών του συστήματος είναι η χρήση φυσικής γλώσσας αν και μπορεί να δημιουργήσει συγχύσεις. Η κατανόηση της φυσικής γλώσσας προϋποθέτει ότι οι αναγνώστες και οι συγγραφείς χρησιμοποιούν τις ίδιες λέξεις για τις ίδιες έννοιες. Εξαιτίας αυτού και άλλοι τρόποι έκφρασης των απαιτήσεων συστήματος αναπτύχθηκαν και υιοθετήθηκαν όπως η χρήση ψευδογλώσσας, γλώσσας γραφικών (SADT, Jacobsen κ.α.), σημειογραφίες που βασίζονται σε μαθηματικές έννοιες. Ωστόσο, η χρήση της φυσικής γλώσσας εξακολουθεί να είναι από τις πιο ευέλικτες επιλογές και ταυτόχρονα κατανοητή και από μη ειδικούς. [SOM 08]

4.2.1 Απαιτήσεις συστήματος του project Dungeons ‘N Dragons • Το σύστημά μας θα πρέπει να μπορεί να δημιουργεί χαρακτήρες. Οι χαρακτήρες αυτοί θα είναι επιλογή από ένα σύνολο race και κλάσεων. • Το σύστημά μας θα πρέπει να δίνει τη δυνατότητα δημιουργίας ενός καινούριου είδους race ή μιας καινούριας κλάσης. • Το σύστημά μας θα πρέπει να μπορεί να διαχειρίζεται μάχες. • Το σύστημά μας θα πρέπει να δίνει τη δυνατότητα δημιουργίας σεναρίων- περιπετειών. • Το σύστημά μας θα πρέπει να δίνει τη δυνατότητα για level-up των παικτών.

Πλατφόρμα RPG παιχνιδιών Σελίδα 46

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

• Το σύστημά μας θα πρέπει να δίνει τη δυνατότητα για επικοινωνία μεταξύ των παικτών. • Το σύστημά μας θα πρέπει να μπορεί να αξιοποιεί την έτοιμη βιβλιοθήκη με τα τέρατα που ήδη υπάρχουν. • Το σύστημά μας θα πρέπει να δίνει τη δυνατότητα δημιουργίας ενός καινούριου είδους τέρατος. • Το σύστημά μας θα πρέπει να μπορεί να έχει τρισδιάστατη απεικόνιση των χαρακτήρων και του κόσμου. • Οι χαρακτήρες θα πρέπει να έχουν συγκεκριμένες ικανότητες (skills) από ένα ήδη υπάρχων σύνολο. • Το σύστημα θα πρέπει να δίνει τη δυνατότητα δημιουργίας ενός καινούργιου skill. • Το σύστημα θα πρέπει να δίνει τη δυνατότητα σε κάθε χαρακτήρα να επιλέγει ένα από τα aligment. Επίσης δημιουργία νέου “είδους” aligment. • Το σύστημα θα πρέπει να δίνει τη δυνατότητα στους χαρακτήρες να επιλέγουν τον απαραίτητο εξοπλισμό. • Το σύστημα πρέπει να δίνει τη δυνατότητα κίνησης στους παίκτες μέσα στον κόσμο. • Το σύστημα θα πρέπει ελέγχει ποιοί χαρακτήρες μπορούν να κάνουν ποιά spell ανάλογα με την περίσταση. Επίσης θα πρέπει να μπορεί να δίνει τη δυνατότητα δημιουργίας νέων ειδών spell. • Το σύστημα θα πρέπει να διαχειρίζεται τις επιπτώσεις από τα spell και να απεικονίζει τις νέες καταστάσεις στον κόσμο. • Το σύστημα θα πρέπει συνεχώς να μπορεί να ανανεώνει την κατάσταση (κούραση, ικανότητες και τα xp-experience points) των παικτών ανάλογα με την εξέλιξη της περιπέτειας. • Το σύστημα πρέπει να διαχειρίζεται τη διαδοχή μέρας και νύχτας και αντίστοιχα να έχει επιπτώσεις στην εξέλιξη της ιστορίας και στην κατάσταση των παικτών(πχ όραση).

Οι περισσότερες από αυτές τις απαιτήσεις σε αυτό το στάδιο κρίθηκε χρήσιμο να σχεδιαστούν έστω και σε πρώιμο στάδιο ώστε να προγραμματιστεί και η υλοποίηση . Προφανώς, όπως θα εξετάσουμε και παρακάτω αξίζει να σχολιαστεί η διαφορά που προκύπτει στην τελική υλοποίηση που εξετάζεται στο πέμπτο κεφάλαιο από τη θεωρητική ουσιαστικά πρώτη σχεδίαση που αποτυπώνεται στις παρακάτω εικόνες.

Πλατφόρμα RPG παιχνιδι Σελίδα 47

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

Εικόνα 19 – Select Monster UI

Εικόνα 20 – Select Player UI

Πλατφόρμα RPG παιχνιδιών Σελίδα 48

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Εικόνα 21 – Confirm UI

Εικόνα 22 – DnD UI

Πλατφόρμα RPG παιχνιδι Σελίδα 49

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

Εικόνα 23 – Options UI

Εικόνα 24 – Admin UI

Πλατφόρμα RPG παιχνιδιών Σελίδα 50

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Εικόνα 25 – New Game UI

Εικόνα 26 – Roll Dice UI

Πλατφόρμα RPG παιχνιδι Σελίδα 51

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

Εικόνα 27 – Spells UI

Εικόνα 28 – Load UI

Πλατφόρμα RPG παιχνιδιών Σελίδα 52

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Εικόνα 29 – Inventory UI

Εικόνα 30 – Equipment UI

Πλατφόρμα RPG παιχνιδι Σελίδα 53

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

Εικόνα 31 – Create Player UI

Εικόνα 32 – Create Monster UI

Πλατφόρμα RPG παιχνιδιών Σελίδα 54

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Εικόνα 33 – Create Scenario UI

4.3 Αρχιτεκτονικός σχεδιασμός

Το επόμενο στάδιο μετά τον καθορισμό των βασικών απαιτήσεων του project μας είναι οι αποφάσεις που πρέπει να ληφθούν όσον αφορά στην αρχιτεκτονική του συστήματος και η σχεδίαση της. Τα μεγάλα συστήματα αναλύονται πάντα σε υποσυστήματα που παρέχουν κάποιο σχετικό σύνολο υπηρεσιών. Η διαδικασία του αρχικού σχεδιασμού με σκοπό τον προσδιορισμό αυτών των υποσυστημάτων και την εδραίωση ενός πλαισίου εργασίας για τον έλεγχο και την επικοινωνία τους ονομάζεται αρχιτεκτονικός σχεδιασμός. Οι Bass κ.α. εξετάζουν τρί α πλεονεκτήματα που έχει ο ρητός σχεδιασμός και η τεκμηρίωση μιας αρχιτεκτονικής λογισμικού : • Επικοινωνία με τους ενδιαφερόμενους για το σύστημα. Η αρχιτεκτονική είναι μια υψηλού επιπέδου παρουσίαση του συστήματος που μπορεί να αποτελέσει το επίκεντρο συζητήσεων με τους ενδιαφερόμενους για το σύστημα. • Ανάλυση συστήματος. Η ρητή διατύπωση της αρχιτεκτονικής του συστήματος σε ένα πρώιμο στάδιο της αν άπτυξης του απαιτεί κάποια ανάλυση . Οι αποφάσεις του αρχιτεκτονικού σχεδιασμού έχουν καθοριστική επίδραση στο αν το σύστημα θα μπορέσει να ικανοποιήσει κρίσιμες απαιτήσεις όπως η απόδοση , η αξιοπιστία και η συντηρησιμότητα. • Επαναχρησιμοποίηση σε μεγάλη κλ ίμακα. Ένα μοντέλο αρχιτεκτονικής συστήματος είναι μια συμπαγής και διαχειρίσιμη περιγραφή του πως είναι οργανωμένο το σύστημα και πως συνεργάζονται μεταξύ τους τα συστατικά του στοιχεία. Η αρχιτεκτονική συστήματος είναι συχνά ίδια μεταξύ συστημάτων με παρ όμοιες

Πλατφόρμα RPG παιχνιδι Σελίδα 55

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

απαιτήσεις για αυτό μπορεί να υποστηρίζει την επαναχρησιμοποίηση λογισμικού σε μεγάλη κλίμακα.

[SOM 08]

4.4 Οργάνωση συστήματος Η διάρθρωση του συστήματος αντανακλά τη βασική στρατηγική του. Πολλές φορές κάποιες αποφάσεις για το συνολικό μοντέλο οργάνωσης λαμβάνονται από νωρίς κατά τη διαδικασία του αρχιτεκτονικού σχεδιασμού. Η οργάνωση του συστήματος μπορεί να αντικατοπτρίζεται άμεσα στη δομή των υποσυστημάτων. Υπάρχουν τρία στυλ οργάνωσης που χρησιμοποιούνται σε ευρεία κλίμακα. Αξίζει να τα εξετάσουμε πιο αναλυτικά το καθένα, πρόκειται για το στυλ του κοινόχρηστου αποθετηρίου δεδομένων, των κοινόχρηστων υπηρεσιών και διακομιστών και το στυλ της αφηρημένης μηχανής ή αλλιώς πολυεπίπεδο στυλ.

4.4.1 Το μοντέλο αποθετηρίου (repository model) Η λογική αυτού του μοντέλου μας λέει ότι τα υποσυστήματα που απαρτίζουν ένα σύστημα πρέπει να ανταλλάσσουν πληροφορίες ώστε να συνεργάζονται αποτελεσματικά. Αυτό μπορεί να γίνει με δύο βασικούς τρόπους: 1. Όλα τα κοινόχρηστα δεδομένα αποθηκεύονται σε μια κεντρική βάση δεδομένων που μπορεί να προσπελαστεί από όλα τα υποσυστήματα. Ένα μοντέλο συστήματος που βασίζεται σε κοινόχρηστη βάση δεδομένων λέγεται μερικές φορές μοντέλο αποθετηρίου. 2. Κάθε υποσύστημα τηρεί τη δική του βάση δεδομένων. Η ανταλλαγή δεδομένων με τα άλλα υποσυστήματα γίνεται μέσω της μεταβίβασης μηνυμάτων μεταξύ των υποσυστημάτων.

Παραδείγματα συστημάτων τέτοιου τύπου συναντάμε σε συστήματα διοίκησης και ελέγχου, σε πληροφοριακά συστήματα διοίκησης, σε συστήματα CAD και σε εργαλειοθήκες CASE. [SOM 08]

4.4.2 Το μοντέλο πελάτη-διακομιστή (client-server) Πρόκειται για ένα αρχιτεκτονικό μοντέλο σύμφωνα με το οποίο το σύστημα οργανώνεται ως ένα σύνολο υπηρεσιών και αντίστοιχων διακομιστών και πελατών που προσπελάζουν και χρησιμοποιούν αυτές τις υπηρεσίες . Τα κύρια συστατικά αυτού του μοντέλου είναι τα εξής :

1. Ένα σύνολο διακομιστών που παρέχουν υπηρεσίες προς άλλα υποσυστήματα. Παραδείγματα διακομιστών είναι οι διακομιστές εκτύπωσης που προσφέρουν υπηρεσίες εκτύπωσης, οι διακομιστές αρχείων που παρέχουν υπηρεσίες διαχείρισης

Πλατφόρμα RPG παιχνιδιών Σελίδα 56

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

αρχείων ή ένας διακομιστής μεταγλώττισης που παρέχει υπηρεσίες μεταγλώττισης γλωσσών προγραμματισμού. 2. Ένα σύνολο πελατών που κάνουν χρήση των υπηρεσιών οι οποίες παρέχονται από τους διακομιστές. Οι πελάτες είναι και οι ίδιοι συνήθως υποσυστήματα. Είναι δυνατό να υπάρχουν πολλά στιγμιότυπα ενός προγράμματος πελάτη που εκτελούνται ταυτόχρονα. 3. Ένα δίκτυο που επιτρέπει στους πελάτες να προσπελάζουν τις υπηρεσίες. Αυτό δεν είναι εντελώς απαραίτητο αφού οι πελάτες και οι διακομιστές μπορεί να εκτελούνται στην ίδια μηχανή. Στην πράξη όμως , τα περισσότερα από αυτά τα συστήματα υλοποιούνται ως κατανεμημένα συστήματα.

[SOM 08]

Εικόνα 34 – Σχεδιαγραμμα μοντέλου client-server

4.4.3 Το πολυεπίπεδο μοντέλο Το πολυεπίπεδο μοντέλο αρχιτεκτονικής οργανώνει το σύστημα σε επίπεδα , καθένα από τα οποία παρέχει ένα σύνολο υπηρεσιών. Κάθε επίπεδο μπορεί να θεωρηθεί ως μια αφηρημένη μηχανή (για αυτό μερικές φορές λέγεται και μοντέλο αφηρημένης μηχανής ), της οποίας η γλώσσα ορίζεται από τις υπηρεσίες που παρέχει το επίπεδο. Αυτή η «γλώσσα» χρησιμοποιείται για την υλοποίηση του επόμενου επιπέδου αφηρημένης μηχανής. Για παράδειγμα ένας συνηθισμένος τρόπος υλοποίησης μιας γλώσσας είναι να ορίσουμε μια ιδανική «μηχανή γλωσσών» και να μεταγλωττίσουμε τη γλώσσα σε κώδικα για αυτή τη μηχανή/ Στη συνέχεια, ένα επιπλέον μεταφραστικό στάδιο μετατρέπει αυτόν τον κώδικα της αφηρημένης μηχανής σε κώδικα πραγματικής μηχανής . Η πολυεπίπεδη λογική προσεγγίζει τ η βαθμιαία ανάπτυξη συστημάτων. Καθώς αναπτύσσεται ένα επίπεδο κάποιες από τις υπηρεσίες που παρέχονται από αυτό μπορούν να διατεθούν στους πελάτες .Είναι επίσης μια εύκολα μεταβλητή και φορητή αρχιτεκτονική. Μειονεκτήματα είναι ότι η δόμηση συστημάτων μπο ρεί να παρουσιάσει δυσκολίες ενώ άλλο ένα πρόβλημα μπορεί να είναι η απόδοση.

Πλατφόρμα RPG παιχνιδι Σελίδα 57

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

[SOM 08] 4.5 Αρχιτεκτονική του συστήματος Dungeons ‘N Dragons Η αρχιτεκτονική που επιλέχθηκε για την ανάπτυξη του project είναι τέτοια ώστε να ξεχωρίζουν τρία μεγάλα πακέτα λογισμικού:entities, boundaries, control (ECB Pattern). Οι πληροφορίες που απαραίτητα πρέπει να ανταλλάσσονται μεταξύ τους και τα δεδομένα που αποθηκεύονται για αυτό το λόγο υλοποιούνται μέσω της ύπαρξης μιας κεντρικής βάσης δεδομένων. Παρακάτω αναλύεται το κάθε πακέτο ξεχωριστά, η σύνδεση τους και ο ρόλος της βάσης δεδομένων.

Εικόνα 35 – Αρχιτεκτονική DnD

4.5.1 DnDEntities Στο πακέτο αυτό που όπως φαίνεται και από το παρακάτω σχεδιάγραμμα είναι αρκετά πολυπληθές και σύνθετο συνυπάρχουν όλες οι οντότητες του project μας. Βασικά ορίζονται και κατανέμονται σε πακέτα όλες οι πληροφορίες και τα χαρακτηριστικά που θα υπάρχουν στο παιχνίδι σχετικά με τη δημιουργία ενός παίκτη αλλά και την ίδια τη διεξαγωγή του παιχνιδιού το σενάριο του κλπ. Παρακάτω αναλυτικά θα περιγράψουμε τα επιμέρους πακέτα κλάσεων που αποτελούν το entities. Σημασία έχει να επισημάνουμε πως καθοριστική σε αυτό το βήμα ήταν η χρήση των βιβλίων του επιτραπέζιου παιχνιδιού Dungeons and Dragons (κυρίως του Player’sHandbook-PHB) καθώς έγινε προσπάθεια οι σύνθετοι κανόνες του να απεικονιστούν πιστά στην online εφαρμογή του.

• CHARACTER • Character : Η λογική με την οποία σχηματίζεται ένας παίκτης ή ένα τέρας σύμφωνα με το παιχνίδι μας είναι η ίδια οπότε υπάρχουν χαρακτηριστικά τα οποία είναι κοινά. Αυτή η κλάση αποτελείται από αυτά τα κοινά χαρακτηριστικά που είναι οι μεταβλητές : name, level, hit_points, armor_class, dice, position καθώς και από τις αντίστοιχες συναρτήσεις για τον ορισμό και επεξεργασία τους . • Player : Κάθε παίκτης έχει κάποια συγκεκριμένα χαρακτηριστικά που καθορίζονται από τη δημιουργία του με βασικότερα το τι πλάσμα-race θα επιλέξει να είναι και τι ειδικότητα – class θα έχει αλλά και κάποια που καθορίζονται από ρίψη ζαριού όπως πόσους πόντους ικανότητας θα έχει να διανείμει στα skills, πόσο έμπειρος είναι (experience points), τι εξοπλισμό θα κουβαλάει στο inventory του και σε τι διάθεση

Πλατφόρμα RPG παιχνιδιών Σελίδα 58

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

θα είναι. Φυσικά για τον ορισμό και την αλλαγή αυτών των μεταβλητών ορίζονται και οι αντίστοιχες κλάσεις . • Monster: Εδώ σαν μεταβλητές έχουμε βασικά χαρακτηριστικά των τεράτων που μάχονται με τους παίκτες που είναι τα ακόλουθα : size, hit_dice, speed, monster_ability καθώς και τις αντίστοιχες συναρτήσεις για τον ορισμό και αλλαγή αυτών των χαρακτηριστικών.

Εικόνα 36 – Character Sheet επιτραπέζιου DnD

Πλατφόρμα RPG παιχνιδι Σελίδα 59

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

Εικόνα 37 – Πακέτο λογισμικού «Character» • Player Characteristics Αυτό το πακέτο αποτελείται από τις κλάσεις equipment, inventory και skills. Η κλάση inventory είναι στην ουσία υλικός εξοπλισμός που μπορεί να κουβαλάει πάνω του ένας παίκτης από φαγητό έως σκοινί για αναρρίχηση , όπως φαίνεται και στο σχεδιάγραμμα οι μεταβλητές δίνουν τον διαθέσιμο χώρο και το είδος του εξοπλισμού. Η κλάση equipment όπως δηλώνει και το όνομα της περιγράφει τον εξοπλισμό και αντίστοιχα η κλάση skills τις δεξιότητες του παίκτη και το πόσο ικανός είνα ι στην καθεμία κάτι που έχει επιλέξει ο ίδιος κατανέμοντας στις διάφορες δεξιότητες τα skill_points που έχει σαν παίκτης.

Εικόνα 38 – Πακέτο λογισμικού PlayerCharacteristics

Πλατφόρμα RPG παιχνιδιών Σελίδα 60

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

• Scenario Αυτό το πακέτο αφορά στην πλοκή της περιπέτειας στην οποία θα εμπλακεί ο παίκτης και σε όλες τις απαραίτητες πληροφορίες για αυτή. Συγκεκριμένα έχουμε δύο κλάσεις. Η κλάση Quest με μεταβλητές το plot και τον Player και η κλάση Plot που δίνει στην ουσία σε φυσική γλώσσα μέσω της μεταβλητής scenario την πλοκή της περιπέτειας και μέσω της μεταβλητής monster τα τέρατα που θα αντιμετωπίσουν οι παίκτες.

Εικόνα 39 – Πακέτο λογισμικού «Scenario»

• Battle Το πακέτο αποτελείται μόνο από την κλάση battle, η οποία με τις μεταβλητές της και τις αντίστοιχες συναρτήσεις ορίζει ποιοι παίκτες συμμετέχουν στην μάχη , ποια τέρατα αντιμετωπίζουν, σε ποιο μέρος διεξάγεται η μάχη και με ποια σειρά παίζουν (επιτίθενται ή αμύνονται ) οι παίκτες και τα τέρατα ( initiative).

Εικόνα 40 – Πακέτο λογισμικού «Battle»

Πλατφόρμα RPG παιχνιδι Σελίδα 61

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

Η σύνδεση των παραπάνω πακέτων λογισμικού φαίνεται στο σχήμα που ακολουθεί :

Εικόνα 41 – Σύνδεση των πακέτων λογισμικού «Character, Battle, PlayerCharacteristics , Scenario»

• RACE Σε αυτό το πακέτο απεικονίζονται όλες οι δυνατές επιλογές που μπορεί να κάνει ένας παίκτης για το τι πλάσμα θα είναι. Σύμφωνα πάντα με τα βιβλία υπάρχουν τα εξής 7 διαφορετικά races : human, halfing, gnome, dwarf, half-orc, half -elf και elf. Η κάθε επιλογή σηματοδοτεί και κάποια διαφορετικά χαρακτηριστικά για τον παίκτη που θα δημιουργηθεί τα οποία στην ουσία εκφράζονται από τις μεταβλητές της κλάσης race που κληρονομούν όλες οι υπόλοιπ ες κλάσεις και είναι τα ακόλουθα:

Πλατφόρμα RPG παιχνιδιών Σελίδα 62

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

name, race-description, favorite_dndclass, race_ability, race_features, speed. Προφανώς υπάρχουν και εδώ οι αντίστοιχες συναρτήσεις.

Εικόνα 42 – Races DnD

• RACE CHARACTERISTICS Αυτό το πακέτο συγκεντρώνει τα χαρακτηριστικά που απορρέουν από ένα race για έναν παίκτη και χωρίζεται σε δύο μεγάλες κλάσεις τις abilities και descriptions. • Abilities: Η κλάση αυτή περιέχει τα πέντε βασικά χαρακτηριστικά ενός χαρακτήρα – παίκτη που δεν είναι άλλα από τα constitution, charisma, dexterity, strength, intelligence καθώς και τις αντίστοιχες συναρτήσεις set-get για αυτές τις μεταβλητές. • Descriptions: Η κλάση αυτή περιέχει μεταβλητές που δίνουν επιπρόσθετες, συμπληρωματικές πληροφορίες για τον παίκτη μας όπως είναι για παράδειγμα η θρησκεία του και τις αντίστοιχες συναρτήσεις . Επιγραμματικά οι μεταβλητές είναι οι literacy, personality, physical_desc, relations, aligment, lands, religion, language, names, adventures.

Παρακάτω φαίνεται η σύνδεση των πακέτων λογισμικού «Race» και «RaceCharacteristics»:

Πλατφόρμα RPG παιχνιδι Σελίδα 63

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

Εικόνα 43 - Σύνδεση των πακέτων λογισμικού «Race, RaceCharacteristics »

• DnDClass Σε αυτό το πακέτο απεικονίζεται όλες οι δυνατές επιλογές για την ειδικότητα που θα έχει ένας χαρακτήρας , η οποία είναι η δεύτερη καθοριστική επιλογή κατά τη δημιουργία χαρακτήρα μετά το race. Σύμφωνα με τα βιβλία υπάρχουν έντεκα βασικές

Πλατφόρμα RPG παιχνιδιών Σελίδα 64

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

κλάσεις : barbarian, ranger , cleric, fighter, paladin, monk, rogue, bard , sorcerer, druid, wizard. Όπως φαί νεται και στο σχεδιάγραμμα υπάρχει στο πακέτο υπάρχει και η κλάση DnDClass την οποία κληρονομούν όλες οι υπόλοιπες. Όπως φαίνεται και από τις συναρτήσεις αυτών των κλάσεων η ειδικότητα ενός παίκτη καθορίζει και τη συμπεριφορά του στη μάχη , για παράδειγμα ο παίκτης sorcerer θα επιτεθεί κάνοντας ένα ξόρκι - castspell() ενώ ο barbarian θα χρησιμοποιήσει την σωματική του δύναμη - attack( mon:Monster) .

Εικόνα 44 – Classes DnD

Εικόνα 45 – Πακέτο λογισμικού «DnDClass»

Πλατφόρμα RPG παιχνιδι Σελίδα 65

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

• Spells Το πακέτο αυτό που αποτελείται από την κλάση spells ουσιαστικά μέσω των μεταβλητών του και των αντίστοιχων συναρτήσεων set-get, δίνει όλες τις απαραίτητες πληροφορίες για κάθε ξόρκι που μπορεί να υλοποιηθεί από τους παίκτες που έχουν αυτή την ικανότητα δηλαδή τους sorcerers ή wizards. Επιγραμματικά οι μεταβλητές που δίνουν αυτά τα χαρακτηριστικά είναι οι name, school, category , level, range, casting_time, duration.

Εικόνα 46 – Πακέτο λογισμικού «Spells»

Παρακάτω δείχνουμε την σύνδεση όλων των πακέτων λογισμικού για το πακέτο « Entities» ενώ στη συνέχεια θα δείξουμε μια φωτογραφία που να δείχνει τη συνολική σύνδεση μεταξύ των κλάσεων για το πακέτο αυτό.

Πλατφόρμα RPG παιχνιδιών Σελίδα 66

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Εικόνα 47 – Πακέτο λογισμικού «Entities»

Εικόνα 48 - Πακέτο λογισμικού «Entities»

Πλατφόρμα RPG παιχνιδι Σελίδα 67

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

4.5.2 DnD_Boundaries Το πακέτο boundaries στην ουσία υλοποιεί την σύνδεση με τη μηχανή καθώς αποτελείται από τις κλάσεις για τα κουμπιά , επιλογείς και πλαίσ ια κειμένου που είναι διαθέσιμα στον χρήστη ώστε να επικοινωνεί με τη μηχανή για τις πράξεις που επιθυμεί. Με αυτή τη λογική αποτελείται από τις τρεις αντίστοιχες κλάσεις Button, Selector και TextField.

Εικόνα 49 – Πακέτο λογισμικού «DnD_Boundaries»

4.5.3 DnD_Control Το πακέτο αυτό αποτελείται από τις κλάσεις που πραγματοποιούν την σύνδεση ανάμεσα στα δύο προηγούμενα. Αποτελείται από τα εξής επιμέρους πακέτα κλάσεων όπως απεικονίζεται και στο παρακάτω διάγραμμα: • Create Scenario : Difficulty , ChooseScenario • Create Player : Name , ChooseRace, ChooseClass, RollDiceSkills, ChooseEquipment , RollDiceMood, ChooseSkills • Attack : ChooseMonster , ChooseWeapon, RollDamageDice, RollACDice • Play Battle: Attack, Defence , CastSpell, Steal, Sing • Sing : ChoosePurpose , RollDice • Options: New, Sane , Load, Exit • Inventory : AddObject , RemoveObject, CheckSpace • CastSpell : ChooseCharacter , ChooseSpell, RollACDice, RollEffectDice • Steal : ChooseCharacter , RollDice

Πλατφόρμα RPG παιχνιδιών Σελίδα 68

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Εικόνα 50 - Πακέτο λογισμικού «DnD_Control»

4.5.4 Αποθήκευση δεδομένων Η database όπως φαίνεται και στο συγκεντρωτικό διάγραμμα παρακάτω χρησιμοποιείται για την αποθήκευση ή φόρτωση δεδομένων όταν αυτό είναι απαραίτητο ώστε να υλοποιηθούν οι επιλογές που προσφέρονται στον χρήστη από το πακέτο Boundaries. Συνήθως η επιλογή αποθήκευσης γ ια τη δημιουργία παιχνιδιών γίνεται μέσω κάποιου αρχείου. Αυτό συμβαίνει έτσι ώστε να μην υπάρχει ανάγκη εγκατάστασης της βάσης δεδομένων κάθε φορά που μεταφέρεται το παιχνίδι σε κάποιον υπολογιστή. Όμως , στην περίπτωσή μας που η πλατφόρμα λογισμικού είναι σύνθετη και εκτενής, μια σχεσιακή βάση δεδομένων θα μπορούσε να διευκολύνει πολύ τους Developers στην αποθήκευση των δεδομένων τους. Λύση σε αυτό το πρόβλημα δίνει η Sqlite η οποία αποθηκεύει τα δεδομένα σε αρχείο, η δομή του οποίου είναι ίδια με τη δομή της βάσης δεδομένων. Έτσι στο πρόγραμμά μας χρησιμοποιήθηκε η sqlite3.

Πλατφόρμα RPG παιχνιδι Σελίδα 69

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

Εικόνα 51 – Σχεδίαση της Βάσης Δεδομένων

Πλατφόρμα RPG παιχνιδιών Σελίδα 70

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

4.5.5 Συνολικό διάγραμμα για όλο το λογισμικό

Εικόνα 52 – Πακέτα λογισμικού για την πλατφόρμα RPG

Πλατφόρμα RPG παιχνιδι Σελίδα 71

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

ΚΕΦΑΛΑΙΟ 5 - Σενάρια χρήσης

5.1 Εισαγωγή Το κεφάλαιο χωρίζεται σε τέσσερα μέρη. Στο πρώτο μέρος ο αναγνώστης βλέπει τα σενάρια χρήσης που υλοποιήθηκαν στο πλαίσιο της εργασίας και του παρέχονται διάφορες πληροφορίες για την υλοποίηση αυτή. Έπειτα , στο δεύτερο μέρος, παίρνει μια εικόνα για την υλοποίηση τελικά στην πράξη των απαιτήσεων συστήματος που ορίστηκαν θεωρητικά και είχαν σχεδιαστεί αρχικά στο τέταρτο κεφάλαιο. Στο τρίτο μέρος ιεραρχούνται και παρου σιάζονται ορισμένα σημαντικά κομμάτια κώδικα άξια σχολιασμού για ποικίλους λόγους. Τέλος, το τέταρτο τμήμα αυτού του κεφαλαίου αναφέρεται στα διάφορα προβλήματα και δυσκολίες που αντιμετώπίστηκαν καθώς επίσης και κάποια προβλήματα που έμεινα άλυτα. 5.2 Υλο ποίηση βασικών απαιτήσεων συστήματος Οι απαιτήσεις λογισμικού , όπως περιγράφτηκαν στο 4ο κεφάλαιο, υπήρξαν ο βασικός άξονας και η πηξίδα πάνω στην οποία κινήθηκαμε για να υλοποιήσουμε τμήμα αυτού του μεγάλου προγράμματος. Έτσι φτιάχτηκε ένα βασικό σενάριο το οποίο έπρεπε να φέρουμε εις πέρας. Το σενάριο αυτό μπορεί να περιγραφτεί αναλυτικά από το παρακάτω σχήμα:

Εικόνα 53 – Σενάριο χρήσης

Πλατφόρμα RPG παιχνιδιών Σελίδα 72

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Οι πληροφορίες που αντλούνται από το παραπάνω σχήμα είναι η εξής: • Θα πρέπει ο Administrator να μπορεί να δημιουργήσει νέο παίκτη. • Θα πρέπει ο Administrator να μπορεί να δημιουργήσει νέο τέρας. • Θα πρέπει ο Administrator να μπορεί να φτιάξει νέο σενάριο στο οποίο να δηλώσει πόσοι θα είναι οι παίκτες, πόσα τα τέρατα και ποιά τέρατα θα συμμετέχουν σε αυτό το σενάριο. • Θα πρέπει ο χρήστης να μπορεί να δημιουργήσει νέο παιχνίδι ή να φορτώσει ένα ήδη υπάρχον. • Θα πρέπει να μπορεί να επιλέξει σενάριο για το νέο παιχνίδι και τους παίκτες που θα συμμετέχουν σε αυτό. • Τέλος θα μπορεί να διεξάγει μια μάχη

Το παραπάνω σενάριο χρήσης υλοποιήθηκε σχεδόν στο ακέραιο. Ωστόσο, παρά το γεγονώς ότι το σενάριο δεν συμπεριλαμβάνει στο σύνολο το λογισμικό που σχεδιάστηκε αναλυτικά στο 4 ο κεφάλαιο δημιουργήθηκαν και αρχικοποιήθηκαν όλες οι κλάσεις που περιγράφτηκαν. Στο σημείο αυτό δεν κρίθηκε αναγκαίο να αναπτυχθούν όλες οι κλάσεις που αρχικά σχεδιάστηκαν γιατί κάτι τέτοιο θα ήταν πολύ χρονοβόρο και δε θα προσέφερε νέα στοιχεία στην ανάπτυξη του λογισμικού, αλλά θα αναλωνόταν σε τεχνικές που έχουν χρησιμοποιηθεί στα ήδη υπάρχοντα κομμάτια υλοποίησης. Σε αυτό το σημείο του εγγράφου θεωρείται ότι είναι σωστό να δωθούν κάποιες πληροφορίες για νέους μηχανικούς λογισμικού που ενδέχεται να συνεχίσουν αυτό το έργο λογισμικού: • Κατά τη δημιουργία ενός νέου Player ή ενός νέου Monster δίνεται η δυνατότητα επιλογής του Μοντέλου για τον παίκτη αυτό. Πρακτικά αυτό σημαίνει ότι ένας administrator που θέλει να φτιάξει έναν νέο Character, έχει τη δυνατότητα να του δώσει ένα νέο μοντέλο για την εμφάνιση και το Animation του παίκτη αυτού. Όμως για να μπορεί να γίνει πρέπει να προσθέσει το όνομα του μοντέλου του παίκτη στη λίστα που βρίσκεται στο φάκελο «res» και το αρχείο έχει όνομα «PlayerList.cfg». Επίσης πρέπει να βάλει το .mesh, το .skeleton και τα .matterial αρχεία στον φάκελο «models» που βρίσκεται στα «media». Τέλος πρέπει να καθορίσει τα animation του νέου μοντέλου ανάλογα με τα ονόματα που τους έχει δώσει από το πρόγραμμα επεξεργασίας 3d μοντέλων (Blender, 3ds max, Maya κλπ) μέσα από την κλάση Character του πακέτου «DnD::Entities::Character» • Ο προγραμματιστής έχει τη δυνατότητα να δημιουργήσει νέες κλάσεις και Races καθώς και να διαγράψει τις παλιές. Αυτό είναι μια βασική λειτουργία και κάνει την πλατφόρμα αυτή να παίρνει μια πολύ γενικότερη μορφή πλατφόρμας δημιουργίας RPG παιχνιδίων και όχι συγκεκριμένα του DnD. Για να αξιοποιήσει αυτή τη δυνατότητα ο προγραμματιστής πρέπει απλά να δημιουργήσει νέες κλάσεις DnDClass, ή Race, και να τους δώσει τα χαρακτηριστικά τους. Αντίστοιχα μπορεί να διαγράψει τέτοιου είδους κλάσεις που δεν θέλει πλέον να χρησιμοποιούνται. Θα πρέπει όμως την αντίστοιχη διαδικασία να κάνει και ο Database Manager, ο οποίος θα πρέπει να δώσει τα ονόματα των νέων κλάσεων μαζί με τα χαρακτηριστικά τους στη βάση δεδομένων.

Πλατφόρμα RPG παιχνιδι Σελίδα 73

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

5.3 Βασικές οθόνες Σε αυτό το σημείο ο αναγνώστης αξίζει να επανέλθει στο προηγούμενο κεφάλαιο όπου θεωρητικά σχεδιάζονταν οι βασικές οθόνες μέσω των απαιτήσεων συστήματος και να συγκρίνει με την τελική υλοποίηση . Αξίζει να αναφερθεί ότι ορισμένες οθόνες τελικά δεν ήταν απαραίτητες ενώ άλλες διαφέρουν αρκετά, γεγονός που είναι αναμενόμενο και κατανοητό να συμβαίνει σε αντίστοιχες εφαρμογές σε λογικά βέβαια πλαίσια που δεν ξεφεύγουν από τον αρχικό στόχο.

Εικόνα 54 – DnD UI

Εικόνα 55 – Load UI

Πλατφόρμα RPG παιχνιδιών Σελίδα 74

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Εικόνα 56 – New Game UI

Εικόνα 57 – Admin UI

Πλατφόρμα RPG παιχνιδι Σελίδα 75

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

Εικόνα 58 – Create Player UI

Εικόνα 59 – Create Monster UI

Πλατφόρμα RPG παιχνιδιών Σελίδα 76

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Εικόνα 60 – Create Scenario UI

Εικόνα 61 – Select Monster UI

Πλατφόρμα RPG παιχνιδι Σελίδα 77

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

Εικόνα 62 – Select Player UI

Εικόνα 63 – Battle UI 5.3 Υλοποίηση εφαρμογής Σε αυτό το κομμάτι παρουσιάζονται σημαντικά κομμάτια του κώδικα και η απαραίτητη για την κατανόηση επεξήγηση της λειτουργίας που επιτελεί το καθένα.

5.3.1 Δημιουργία Entity Πρόκειται στην ουσία για μια διαδικασία που δίνει υπόσταση-οντότητα στα αντικείμενα που ήδη έχουν σε προηγούμενη φάση δημιουργηθεί. Στο συγκεκριμένο παράδειγμα αφού έχει οριστεί ο αριθμός των παικτών και οπότε δημιουργήθηκαν τόσα αντικείμενα τύπου

Πλατφόρμα RPG παιχνιδιών Σελίδα 78

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου player ( pl(number_of_player) ) ορίζεται και ένα entity για το καθένα. Αντίστοιχη προφανώς διαδικασία ακολουθείται και για τα monsters. Παρακάτω παρατίθεται το κομμάτι κώδικα που υλοποιεί τη δημιουργία ενός entity για κάθε παίκτη καθώς και ο καθορισμός της αρχικής θέσης, του μεγέθους του και της αρχικής του φοράς ως προς το χώρο. Πίνακας 4 - Κώδικας δημιουργίας και αρχικοποίησης οντοτήτων for (int i = 0; i < number_of_players; i++) { mEntity[i] = m_pSceneMgr->createEntity(pl[i].getName() + "_hero_entities" + ::lexical_cast(i), pl[i].getModelName() + ".mesh"); mEntity[i]->setCastShadows(true); mNode[i]= m_pSceneMgr->getRootSceneNode()- >createChildSceneNode(pl[i].getName() + "_heroNode" + boost::lexical_cast(i), Ogre::Vector3(1250.0f + 1110.0f + i * 430, 0.0f + mEntityTransportY[i], 500.0f + 110.0f)); mNode[i]->attachObject(mEntity[i]); mNode[i]->setScale(mEntityScale[i], mEntityScale[i], mEntityScale[i]); mNode[i]->yaw(Ogre::Degree(mEntityRot[i])); mAnimationState[i] = mEntity[i]->getAnimationState(anim_idle[i]); mAnimationState[i]->setLoop(true); mAnimationState[i]->setEnabled(true); }

5.3.2 Αρχικοποίησης της κάμερας

Πίνακας 5 - Κώδικας αρχικοποίησης της κάμερας

m_pCamera = m_pSceneMgr->createCamera("Camera"); m_pCamera->setPosition(Vector3(1250 + 3000, 1000, 1250 + 1000)); m_pCamera->lookAt(Vector3(10, 10, 10)); m_pCamera->setNearClipDistance(1);

5.3.3 Μετακίνηση κάμερας Υλοποιεί τη μετακίνηση της κάμερας προς ποικίλες κατευθύνσεις (μπροστά, πίσω. δεξιά, αριστερά) ορίζοντας τις κατάλληλες μεταβλητές για τον καθορισμό της ταχύτητας της κάμερας.

Πίνακας 6 - Κώδικας αλλαγής θέσης της κάμερας

if (mCameraForward == true) { m_pCamera->moveRelative(Ogre::Vector3(0, 0, -1) * mCameraSpeed * 100); } if (mCameraBackward == true) {

Πλατφόρμα RPG παιχνιδι Σελίδα 79

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

m_pCamera->moveRelative(Ogre::Vector3(0, 0, 1) * mCameraSpeed * 100); } if (mCameraLeft == true) { m_pCamera->moveRelative(Ogre::Vector3(-1, 0, 0) * mCameraSpeed * 100); } if (mCameraRight == true) { m_pCamera->moveRelative(Ogre::Vector3(1, 0, 0) * mCameraSpeed * 100); }

5.3.4 Μετακίνηση γωνίας θέασης κάμερας Υλοποιεί την περιστροφή της κάμερας στις αντίστοιχες γωνίες ανάλογα με την κίνηση του κέρσορα του ποντικιού.

Πίνακας 7 - Κώδικας αλλαγής γωνίας θέασης της κάμερας

CEGUI::System::getSingleton().injectMouseMove(evt.state.X.rel, evt.state.Y.rel); if (mCenterMouseDown) { m_pCamera->yaw(Ogre::Degree(-evt.state.X.rel * mCameraRotateSpeed)); m_pCamera->pitch(Ogre::Degree(-evt.state.Y.rel * mCameraRotateSpeed)); } attackCursor(evt);

5.3.5 Αλληλεπίδραση κέρσορα ποντικιού με το terrain Το κομμάτι αυτό κώδικα δίνει τη δυνατότητα στο ποντίκι να αντιλαμβάνεται τη θέση του κέρσορα μόνο πάνω στο terrain. Επίσης, καθορίζεται η διεύθυνση και τοποθεσία που πρόκειται να κινηθεί ο επιλεγμένος παίκτης.

Πίνακας 8 - Κώδικας αλληλεπίδρασης mouse - terrain

CEGUI::Point mousePos = CEGUI::MouseCursor::getSingleton().getPosition(); Ogre::Ray mouseRay = m_pCamera->getCameraToViewportRay (mousePos.d_x/float(evt.state.width), mousePos.d_y/float(evt.state.height)); mRaySceneQuery->setRay(mouseRay); Ogre::RaySceneQueryResult &result = mRaySceneQuery->execute(); Ogre::RaySceneQueryResult::iterator itr = result.begin(); if (itr != result.end() && itr->worldFragment) { mDirection[selected] = Ogre::Vector3::ZERO; mDestination[selected] = itr->worldFragment->singleIntersection; mDestination[selected] = Ogre::Vector3(mDestination[selected].x, mEntityTransportY[selected],

Πλατφόρμα RPG παιχνιδιών Σελίδα 80

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

mDestination[selected].z); mDirection[selected] = mDestination[selected] - mNode[selected]- >getPosition(); return true; } else { return false; }

5.3.6 Update Η συνάρτηση αυτή είναι υπεύθυνη για το update. Εκτελείται κάθε ελάχιστα κλάσματα δευτερολέπτου δημιουργώντας την ψευδαίσθηση της συνέχειας στην κίνηση. Όπως φαίνεται στην ουσία καλεί άλλες πέντε συναρτήσεις που η κάθε μία είναι υπεύθυνη για τη συνεχή ανανέωση από κάτι όπως είναι το ποντίκι, η θέση και η γωνία της κάμερας, αν διεξάγεται μάχη, αν κλείνουμε την εφαρμογή και αν κινείται ένα αντικείμενο.

Πίνακας 9 - Κώδικας υπεύθυνος για τη συνεχή ροή του παιχνιδιού void BattleUI::update(double timeSinceLastFrame) { updateSetUp(timeSinceLastFrame); updateShutDown(); updateCamera(); updateMouse(); updateEntityMovement(timeSinceLastFrame);

if (mAttackMode) { updateAttackMode(attacker, defender, timeSinceLastFrame); } }

5.3.7 Κανονικοποίηση Το παρακάτω κομμάτι κώδικα απεικονίζει την αναγκαία κανονικοποίηση των διανυσμάτων για την ορθή μετακίνηση των παικτών από ένα σημείο σε ένα άλλο. Ελέγχεται με αυτό τον τρόπο η ταχύτητα μετακίνησης καθώς και η σιγουριά επιτυχούς μετακίνησης.

Πίνακας 10 - Κώδικας κανονικοποίησης διανύσματος κατεύθυνσης κίνησης void BattleUI::regularization(int selected) { // Regularization if (mDirection[selected].x != 0 && mDirection[selected].z != 0) { if (abs(mDirection[selected].x) > abs(mDirection[selected].z)) { if (mDirection[selected].z > 0) {

Πλατφόρμα RPG παιχνιδι Σελίδα 81

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

mDirection[selected].z = abs(mDirection[selected].z / mDirection[selected].x); } else { mDirection[selected].z = -abs(mDirection[selected].z / mDirection[selected].x); } if (mDirection[selected].x > 0) { mDirection[selected].x = 1; } else { mDirection[selected].x = -1; } } else { if (mDirection[selected].x > 0) { mDirection[selected].x = abs(mDirection[selected].x / mDirection[selected].z); } else { mDirection[selected].x = -abs(mDirection[selected].x / mDirection[selected].z); } if (mDirection[selected].z > 0) { mDirection[selected].z = 1; } else { mDirection[selected].z = -1; } } mDirection[selected].y = 0; } else if (mDirection[selected].x == 0) { if (mDirection[selected].z > 0) { mDirection[selected].z = 1; } else { mDirection[selected].z = -1; }} else if (mDirection[selected].z == 0) { if (mDirection[selected].x > 0) { mDirection[selected].x = 1; } else {

Πλατφόρμα RPG παιχνιδιών Σελίδα 82

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

mDirection[selected].x = -1 } } }

5.3.8 Κίνηση αντικειμένου Στο παρακάτω κομμάτι κώδικα περιγράφεται όλη η διαδικασία κίνησης του επιλεγμένου παίκτη, από την περιστροφή του προς την κατεύθυνση που του δώθηκε εντολή να κινηθεί, μέχρι τη στιγμή που η μεταβλητή κίνησής του γίνεται αληθής (true).

Πίνακας 11 - Κώδικας απόφασης κίνησης παίκτη void BattleUI::moveSelectedItem(int selected) { mNode[selected]->resetOrientation(); mNode[selected]->yaw(Ogre::Degree(mEntityRot[selected])); float x = abs(mDirection[selected].x); float z = abs(mDirection[selected].z);

if (x < 0.1) { x = 0; mDirection[selected].x = x; } else if (z < 0.1) { z = 0; mDirection[selected].z = z; } else { float f1 = atan(x/z) * 180 / PI; float f2 = atan(z/x) * 180 / PI; if (mDirection[selected].x > 0.0 && mDirection[selected].z > 0.0) { mNode[selected]->yaw(Ogre::Degree(0)); mNode[selected]->yaw(Ogre::Degree(f1)); } else if (mDirection[selected].x > 0.0 && mDirection[selected].z < 0.0) { mNode[selected]->yaw(Ogre::Degree(90)); mNode[selected]->yaw(Ogre::Degree(f2)); } else if (mDirection[selected].x < 0.0 && mDirection[selected].z < 0.0) { mNode[selected]->yaw(Ogre::Degree(180)); mNode[selected]->yaw(Ogre::Degree(f1)); }

Πλατφόρμα RPG παιχνιδι Σελίδα 83

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

else if (mDirection[selected].x < 0.0 && mDirection[selected].z > 0.0) { mNode[selected]->yaw(Ogre::Degree(270)); mNode[selected]->yaw(Ogre::Degree(f2)); } } if (x != 0 && z == 0) { if (mDirection[selected].x > 0.0) { mNode[selected]->yaw(Ogre::Degree(90)); } else { mNode[selected]->yaw(Ogre::Degree(270)); } } if (x == 0 && z != 0) { if (mDirection[selected].z > 0.0) { mNode[selected]->yaw(Ogre::Degree(0)); } else { mNode[selected]->yaw(Ogre::Degree(180)); } } regularization(selected); mEntityMove[selected] = true; }

5.3.9 Αντίληψη αντιπάλου Ο παρακάνω κώδικας περιγράφει πως το mouse όταν βρίσκεται πάνω σε ένα αντικείμενο αντιλαμβάνεται την ύπαρξη του. Οι ενέργειες που εκτελούνται είναι η αλλαγή του σχήματος του ποντικιού και η αλλαγή κατάστασης σε θέση μάχης σε περίπτωση που ο χρήστης πατήσει το αριστερό κουμπί του ποντικιού.

Πίνακας 12 - Κώδικας αλληλεπίδρασης ποντικιού - χαρακτήρα void BattleUI::attackCursor(const OIS::MouseEvent &evt) { int selected = findSelectedEntity(); CEGUI::System::getSingleton().injectMouseMove(evt.state.X.rel, evt.state.Y.rel); CEGUI::MouseCursor *mouse = CEGUI::MouseCursor::getSingletonPtr(); float width = (float)evt.state.width; float height = (float)evt.state.height; float mousePosX = mouse->getPosition().d_x; float mousePosY = mouse->getPosition().d_y; mousePosX /= width;

Πλατφόρμα RPG παιχνιδιών Σελίδα 84

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

mousePosY /= height; float left; float right; float top; float bottom; left = mousePosX - 0.001; right = mousePosX + 0.001; top = mousePosY - 0.001; bottom = mousePosY + 0.001; Ogre::Ray topLeft = m_pCamera->getCameraToViewportRay(left, top); Ogre::Ray topRight = m_pCamera->getCameraToViewportRay(right, top); Ogre::Ray bottomLeft = m_pCamera->getCameraToViewportRay(left, bottom); Ogre::Ray bottomRight = m_pCamera->getCameraToViewportRay(right, bottom);

Ogre::PlaneBoundedVolume vol; vol.planes.push_back(Ogre::Plane(topLeft.getPoint(3), topRight.getPoint(3), bottomRight.getPoint(3))); vol.planes.push_back(Ogre::Plane(topLeft.getOrigin(), topLeft.getPoint(100), topRight.getPoint(100))); vol.planes.push_back(Ogre::Plane(topLeft.getOrigin(), bottomLeft.getPoint(100), topLeft.getPoint(100))); vol.planes.push_back(Ogre::Plane(bottomLeft.getOrigin(), bottomRight.getPoint(100), bottomLeft.getPoint(100))); vol.planes.push_back(Ogre::Plane(topRight.getOrigin(), topRight.getPoint(100), bottomRight.getPoint(100))); Ogre::PlaneBoundedVolumeList volList; volList.push_back(vol); mouseOverEntity = false; mVolQuery->setVolumes(volList); Ogre::SceneQueryResult result = mVolQuery->execute(); CEGUI::MouseCursor::getSingleton().setImage("TaharezLook", "MouseEsWeCursor"); Ogre::SceneQueryResultMovableList::iterator iter; for (iter = result.movables.begin(); iter != result.movables.end(); ++iter) { bool flag; for (int i = 0; i < number_of_players + number_of_monsters; i++) { flag = false; if (dead[i] == true) { flag = true; } if (((*iter)->getName() == mEntity[i]->getName()) && ((*iter)->getName() != mEntity[selected]-getName()) && (flag == false)) {

Πλατφόρμα RPG παιχνιδι Σελίδα 85

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

CEGUI::MouseCursor::getSingleton().setImage("TaharezLook", "MouseArrow"); mouseOverEntity = true; attacker = *mSelectedIter; defender = *iter; break; } else { CEGUI::MouseCursor::getSingleton().setImage("TaharezLook", "MouseEsWeCursor"); mouseOverEntity = false; } } }

5.3.10 Οθόνη Το παρακάτω κομμάτι κώδικα θέλει μέσω ενός παραδείγματος συγκεκριμένα για το κουμπί «NEW GAMΕ» να δείξει τη λογική που δημιουργήθηκαν οι διάφορες οθόνες. Έτσι, παραπάνω φαίνεται ο κώδικας που δημιουργεί το κουμπί, του δίνει τη θέση και το μέγεθος του στο window αλλά και ορίζει τι θα συμβεί αν πατήσεις πάνω του. Βλέπουμε ότι όλα αυτά υλοποιούνται με τη βοήθεια της βιβλιοθήκης CEGUI.

Πίνακας 13 - Κώδικας εμφάνισης αντικειμένων στην οθόνη - χρήση της βιβλιοθήκης CEGUI

CEGUI::WindowManager &wmgr = CEGUI::WindowManager::getSingleton(); sheet = wmgr.createWindow("DefaultWindow", "CEGUIDemo/Sheet"); CEGUI::Window *new_game = wmgr.createWindow("TaharezLook/Button", "CEGUIDemo/NewGameButton"); new_game->setText("New Game"); new_game->setPosition(CEGUI::UVector2(CEGUI::UDim(button_start_position[0], 0), CEGUI::UDim(button_start_position[1], 0.0))); new_game->setSize(CEGUI::UVector2(CEGUI::UDim(button_size[0], 0), CEGUI::UDim(button_size[1], 0.0))); sheet->addChildWindow(new_game); CEGUI::System::getSingleton().setGUISheet(sheet); new_game->subscribeEvent(CEGUI::PushButton::EventClicked, CEGUI::Event::Subscriber(&DnDUI::new_game, this));

5.3.11 Δημιουργία παίκτη στο Battle Control Στο παρακάτω κομμάτι κώδικα φαίνεται η δυναμική δημιουργία παικτών μέσα στο battle control η οποία είναι απαραίτητη καθώς κάθε σενάριο και game θα περιλαμβάνει σίγουρα διαφορετικό αριθμό παικτών και αντίστοιχα τεράτων (για τα οποία επίσης χρησιμοποιείται δυναμική δημιουργία).

Πλατφόρμα RPG παιχνιδιών Σελίδα 86

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Πίνακας 14 - Κώδικας δημιουργίας αντικειμένων χαρακτήρων με δυναμικό τρόπο

Player *BattleControl::createPlayers(int game_id, int &number_of_players) { players = selectPlayers(game_id); int player_counter; int player_charact_counter; player_counter = 0; for (int i = 0; i < players.size(); i++) { if (players[i] == "pl") { player_charact_counter = 0; player_counter ++; } else { switch(player_charact_counter) { case 0: hero_name.push_back(players[i]); break; case 1: model_name.push_back(players[i]); break; case 2: class_name.push_back(players[i]); break; case 3: race_name.push_back(players[i]); break; case 4: constitution.push_back(players[i]); break; case 5: charisma.push_back(players[i]); break; case 6: dexterity.push_back(players[i]); break; case 7: strength.push_back(players[i]); break; case 8: intelligence.push_back(players[i]); break; } player_charact_counter++;

Πλατφόρμα RPG παιχνιδι Σελίδα 87

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

} } pl = new Player[player_counter]; for (int i = 0; i < player_counter; i++) { pl[i].setName(hero_name[i]); pl[i].setModelName(model_name[i]); pl[i].chooseRace(race_name[i], atoi(constitution[i].c_str()), atoi(charisma[i].c_str()), atoi(dexterity[i].c_str()), atoi(strength[i].c_str()), atoi(intelligence[i].c_str())); pl[i].chooseDnDClass(class_name[i]); } return pl; }

5.4 Προβλήματα και δυσκολίες που αντιμετώπίστηκαν 5.4.1 Export από blender Ένα πρόβλημα με το οποίο ήρθαμε αντιμέτωποι κατά τη διαδικασία export του χαρακτήρα από το blender σε αρχεία τύπου .mesh και .skeleton αποτέλεσε η διαπίστωση μας ότι αν ο χαρακτήρας είχε πάνω από 256 κόκκαλα δε μπορούσε να δημιουργηθεί το .skeleton αρχείο αλλά μόνο το .skeleton.xml. Το πρόβλημα λύθηκε με τη διαγραφή κόκκαλων χειροκίνητα μέσα από τα xml αρχεία και στη συνέχεια με τη χρήση του OgreXMLConverter του οποίοιυ η λειτουργία περιγράφεται ακριβώς παραπάνω. Αξίζει να σημειωθεί ότι μια πιθανή λύση θα ήταν η αφαίρεση των περιττών κόκκαλων από το blender ώστε στη συνέχεια να εκτελούνταν κανονικά το export.

5.4.2 Κίνηση με χρήση bhv αρχείων Όσον αφορά στην υλοποίηση της κίνησης των χαρακτήρων αρχικά έγινε προσπάθεια αυτή να δοθεί μέσω bhv αρχείων. Τα bhv αρχεία είναι αρχεία δεδομένων κίνησης που εφαρμόζουν σε έτοιμους χαρακτήρες υποβάλλοντας τους το καθένα σε διαφορετικές κινήσεις. Ωστόσο, οι κινήσεις αυτές δεν γινόταν στατικά με αποτέλεσμα το animation να προκαλεί μεταφορά του χαρακτήρα, πράγμα που έπρεπε να γίνεται από την πλατφόρμα και μόνο. Σαν συνέπεια ένας χαρακτήρας που έκανε walk μέσω του αντίστοιχου bhv στο τέλος της κίνησης να επανέρχεται στην αρχική του θέση. Για αυτό το λόγο η κίνηση τελικά υλοποιήθηκε δημιουργώντας στατικά animation μέσα από το περιβάλλον του blender.

5.4.3 Προβλήματα υλοποίησης Κατά τη διάρκεια υλοποίησης του σεναρίου χρήσης δεν ήταν δυνατόν να λείψουν και τα προβλήματα προσέγγισης των λύσεων. Αρχικά, έπρεπε να γίνει απόλυτα κατανοητό το κομμάτι διαχείρισης της εμφάνισης τρισδιάστατων χαρακτήρων στην οθόνη, δηλαδή να γίνει αντιληπτό το API του Ogre3D. Έπειτα, λόγω του γεγονότος ότι χρησιμοποιήθηκαν πολλές βιβλιοθήκες για την υλοποίηση της μηχανής (Game Engine) υπήρξε μια χρονική περίοδος που έπρεπε να ξεχωρίσουμε τις διάφορες βιβλιοθήκες και να αντιληφθούμε τι είναι αυτό που κάνει η καθεμία και τι όχι.

Πλατφόρμα RPG παιχνιδιών Σελίδα 88

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Πιο συγκεκριμένα, το βασικό πρόβλημα που προέκυψε κατά τη διάρκεια της υλοποίησης του σεναρίου ήταν ότι δεν μπορούσαμε να καταφέρουμε να μεταβούμε από τη μια οθόνη στην άλλη χωρίς να προκληθεί κάποιο πρόβλημα. Το πρόβλημα αυτό λύθηκε με τη χρήση ενός Framework για το οποίο γίνεται εκτενής αναφορά στο Site του Ogre3d και πιο συγκεκριμένα στη σελίδα: http://www.ogre3d.org/tikiwiki/tiki- index.php?page=Advanced+Ogre+Framework#comments&highlight=Framework Είναι γεγονός όμως ότι το Ogre3D καθώς και η βιβλιοθήκη CEGUI έχουν πολύ καλά γραμμένο και Forums τα οποία οι χρήστες προσπαθούν να τα κρατάνε ζωντανά και ενημερωμένα, πράγμα που βοήθησε πάρα πολύ στην εύκολη αντιμετώπιση διαφόρων προβλημάτων που προέκυπταν κατά καιρούς.

Πλατφόρμα RPG παιχνιδι Σελίδα 89

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

ΚΕΦΑΛΑΙΟ 6 - Συμπεράσματα και μελλοντικές επεκτάσεις

6.1 Συμπεράσματα Με την ολοκλήρωση της διπλωματικής μας εργασίας σίγουρα προκύπτουν κάποια βασικά συμπεράσματα όσον αφορά το game development και αντίστοιχα project. Αρχικά, αν και είναι γνωστό αξίζει να ξανατονίσουμε ότι η δημιουργία ενός παιχνιδιού είναι μια σύνθετη αποστολή και υπόθεση μιας μεγάλης ομάδας επαγγελματιών και όχι μόνο προγραμματιστών. Παρ’ όλα αυτά, δε θα ήταν υπερβολή να βγάλουμε σαν συμπέρασμα ότι σίγουρα το προγραμματιστικό κομμάτι που αφορά κυρίως στην ανάπτυξη της game-engine είναι από τα πιο δύσκολα και απαιτητικά σε ένα αντίστοιχο εγχείρημα. Καθοριστική σημασία για την επιτυχία του project έχει ο αρχικός σωστά προσανατολισμένος καθορισμός απαιτήσεων, η σωστή αποδόμηση αλλά και επιτυχείς επιλογές για την αρχιτεκτονική του συστήματος. Όπως, βέβαια αναφέρθηκε και παραπάνω πολλά από αυτά τα προβλήματα και οι καίριες επιλογές δεν αποτελούν πλέον μεγάλο πεδίο προβληματισμού καθώς στην αγορά υπάρχουν πολλές έτοιμες παιχνιδομηχανές. Η υλοποίηση της παιχνιδομηχανής μέσα από το συνδυασμό μιας μεγάλης ποικιλίας βιβλιοθηκών, προγραμμάτων και της πλατφόρμας του Ogre για τη σύνθεση παιχνιδομηχανής έγινε καθαρά για εκπαιδευτικούς λόγους. Τέλος, θεωρούμε ότι σε project τέτοιας εμβέλειας και πολυπλοκότητας όσο είναι η ανάπτυξη μιας παιχνιδομηχανής αλλά και σε επέκταση ενός ολόκληρου παιχνιδιού με ότι συνεπάγεται είναι σχεδόν αναγκαίο να υιοθετείται λογική open-source. 6.2 Μελλοντικές επεκτάσεις Όπως ειπώθηκε και παραπάνω η διπλωματική μας πέτυχε την υλοποίηση του βασικού κορμού της game-engine για το RPG Dungeons ‘n Dragons. Ωστόσο, η παιχνιδομηχανή έχει πολλές δυνατότητες επέκτασης όσον αφορά και στη διεξαγωγή του battle μεταξύ παικτών και τεράτων αλλά όσον αφορά και στην υλοποίηση υπόλοιπων λειτουργιών του παιχνιδιού. Χαρακτηριστικό παράδειγμα είναι η υλοποίηση των πολυάριθμων spells αλλά και διαφορετικών τύπων επίθεσης κατά τη διάρκεια του battle. Επιπλέον, τα γραφικά του παιχνιδιού ήταν ένα πεδίο στο οποίο δεν εστίασε η διπλωματική αλλά ωστόσο είναι αναγκαία για την ολοκλήρωση του παιχνιδιού ώστε να κυκλοφορήσει στην αγορά αν υποθέσουμε ότι αυτός είναι ένας μελλοντικός στόχος. Όλοι είμαστε εξοικειωμένοι με τα εντυπωσιακά γραφικά των online RPGs και οπότε γίνεται ξεκάθαρο η καθοριστική σημασία τους για τη δημοτικότητα του παιχνιδιού. Τέλος, δημιουργήσαμε το site http://dnd-diploma.site90.com όπου έχει ανέβει η έως τώρα προσπάθεια μας . Οι επίδοξοι συνεχιστές θα μπορούν να έχουν πρόσβαση στον κώδικα αλλά και σε εκτελέσιμες μορφές του και προφανώς συνεχώς θα γίνονται συνεχώς ενημερώσεις ώστε όλοι οι επισκέπτες να συνεισφέρουν σε κάθε νέα έκδοση.

Πλατφόρμα RPG παιχνιδιών Σελίδα 90

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

ΠΑΡΑΡΤΗΜΑ Α – Rendering System του Ogre

Class Ogre::DefaultHardwareVertexBuffer

Specialisation of HardwareVertexBuffer for emulation.

Class Ogre::DefaultHardwareIndexBuffer

Specialisation of HardwareIndexBuffer for emulation.

Class Ogre::DefaultHardwareBufferManagerBase

Specialisation of HardwareBufferManagerBase to emulate hardware buffers.

Class Ogre::DefaultHardwareBufferManager

DefaultHardwareBufferManager as a Singleton .

Class Ogre::HardwareBuffer

Abstract class defining common features of hardware buffers.

Class Ogre::HardwareBufferLicensee

Abstract interface representing a 'licensee' of a hardware buffer copy.

Class Ogre::TempBlendedBufferInfo

Structure for recording the use of temporary blend buffers.

Class Ogre::HardwareBufferManagerBase

Base definition of a hardware buffer manager.

Class Ogre::HardwareBufferManager

Singleton wrapper for hardware buffer manager

Class Ogre::HardwareIndexBuffer

Specialisation of HardwareBuffer for vertex index buffers, still abstract.

Class Ogre::HardwareIndexBufferSharedPtr

Shared pointer implementation used to share index buffers.

Class Ogre::HardwareOcclusionQuery

This is a abstract class that that provides the interface for the query class for hardware occlusion

Class Ogre::HardwarePixelBuffer

Specialisation of HardwareBuffer for a pixel buffer.

Class Ogre::HardwarePixelBufferSharedPtr

Shared pointer implementation used to share pixel buffers.

Class Ogre::HardwareVertexBuffer

Specialisation of HardwareBuffer for a vertex buffer.

Πλατφόρμα RPG παιχνιδι Σελίδα 91

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

Class Ogre::HardwareVertexBufferSharedPtr

Shared pointer implementation used to share index buffers.

Class Ogre::VertexElement

This class declares the usage of a single vertex buffer as a component of a complete VertexDeclaration .

Class Ogre::VertexDeclaration

This class declares the format of a set of vertex inputs, which can be issued to the rendering API through a RenderOperation .

Class Ogre::VertexBufferBinding

Records the state of all the vertex buffer bindings required to provide a vertex declaration with the input data it needs for the vertex elements.

Class Ogre::RenderOperation

'New' rendering operation using vertex buffers.

Class Ogre::RenderQueue

Class to manage the scene object rendering queue.

Class Ogre::RenderQueueInvocation

Class representing the invocation of queue groups in a RenderQueue .

Class Ogre::RenderQueueInvocationSequence

Class to hold a linear sequence of RenderQueueInvocation objects.

Class Ogre::RenderQueueListener

Abstract interface which classes must implement if they wish to receive events from the render queue.

Struct Ogre::RenderablePass

Struct associating a single Pass with a single Renderable .

Class Ogre::QueuedRenderableVisitor

Visitor interface for items in a QueuedRenderableCollection .

Class Ogre::QueuedRenderableCollection

Lowest level collection of renderables.

Class Ogre::RenderPriorityGroup

Collection of renderables by priority.

Class Ogre::RenderQueueGroup

A grouping level underneath RenderQueue which groups renderables to be issued at coarsely the same time to the renderer.

Class Ogre::RenderSystem

Defines the functionality of a 3D API.

Πλατφόρμα RPG παιχνιδιών Σελίδα 92

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

Struct

Ogre::DriverVersion

DriverVersion is used by RenderSystemCapabilities and both GL and D3D9 to store the version of the current GPU driver.

Class

Ogre::RenderSystemCapabilities

singleton class for storing the capabilities of the graphics card.

Class

Ogre::RenderSystemCapabilitiesManager

Class for managing RenderSystemCapabilities database for Ogre .

Class

Ogre::RenderSystemCapabilitiesSerializer

Class for serializing RenderSystemCapabilities to / from a .rendercaps script.

Class

Ogre::RenderTarget

A 'canvas' which can receive the results of a rendering operation.

Struct

Ogre::RenderTargetEvent

Struct containing information about a RenderTarget event.

Struct

Ogre::RenderTargetViewportEvent

Struct containing information about a RenderTarget Viewport-specific event.

Class

Ogre::RenderTargetListener

A interface class defining a listener which can be used to receive notifications of RenderTarget events.

Class

Ogre::RenderTexture

This class represents a RenderTarget that renders to a Texture .

Class

Ogre::MultiRenderTarget

This class represents a render target that renders to multiple RenderTextures at once.

Class

Ogre::RenderToVertexBuffer

An object which renders geometry to a vertex.

Class

Ogre::RenderWindow

Manages the target rendering window.

Class

Ogre::VertexData

Πλατφόρμα RPG παιχνιδι Σελίδα 93

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

Summary class collecting together vertex source information.

Class

Ogre::IndexData

Summary class collecting together index data source information.

Class

Ogre::VertexCacheProfiler

Vertex cache profiler.

Class

Ogre::Viewport

An abstraction of a viewport, i.e.

Class Ogre::WindowEventListener

Callback class used to send out window events to client app

Class

Ogre::WindowEventUtilities

Utility class to handle Window Events/Pumping/Messages

Πλατφόρμα RPG παιχνιδιών Σελίδα 94

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

ΠΑΡΑΡΤΗΜΑ Β – Τμήμα του API της RPG πλατφόρμας

DnD::DnDBoundaries::UserInterface::AdminUI Class Reference

#include Public Member Functions • AdminUI () • ~AdminUI () • void enter () • void init () • void destroy () • void setCamera () • void setGUI () • void createScene () • void exit () • bool keyPressed (const OIS::KeyEvent &keyEventRef) • bool keyReleased (const OIS::KeyEvent &keyEventRef) • bool mouseMoved (const OIS::MouseEvent &evt) • bool mousePressed (const OIS::MouseEvent &evt, OIS::MouseButtonID id) • bool mouseReleased (const OIS::MouseEvent &evt, OIS::MouseButtonID id) • void update (double timeSinceLastFrame) • bool create_player (const CEGUI::EventArgs &e) • bool create_monster (const CEGUI::EventArgs &e) • bool create_scenario (const CEGUI::EventArgs &e) • bool resume (const CEGUI::EventArgs &e)

Detailed Description This boundary class includes all the functions and variables needed for initializing and controlling the scene and its graphics of Admin screen. Definition at line 46 of file AdminUI.h.

Constructor & Destructor Documentation AdminUI::AdminUI () Constructor function Definition at line 13 of file AdminUI.cpp. AdminUI::~AdminUI () Destructor function Definition at line 16 of file AdminUI.cpp.

Member Function Documentation bool AdminUI::create_monster (const CEGUI::EventArgs & e) This function is responsible for all the actions needed when the user presses the button for creating monster Definition at line 198 of file AdminUI.cpp.

Πλατφόρμα RPG παιχνιδι Σελίδα 95

Πλατφόρμα σχεδίασης και ανάπτυξης RPG bool AdminUI::create_player (const CEGUI::EventArgs & e) This function is responsible for all the actions needed when the user presses the button for creating player Definition at line 191 of file AdminUI.cpp. bool AdminUI::create_scenario (const CEGUI::EventArgs & e) This function is responsible for all the actions needed when the user presses the button for creating scenario Definition at line 205 of file AdminUI.cpp. void AdminUI::createScene () This function is responsible for everything needed to be set for the scene such as background, render, menu etc Definition at line 71 of file AdminUI.cpp. void AdminUI::destroy () This function empties the scene from all the graphics Definition at line 35 of file AdminUI.cpp. void AdminUI::enter () This function is responsible for calling all the needed functions to initialize the scene Definition at line 39 of file AdminUI.cpp. void AdminUI::exit () This function destroy camera and scene Definition at line 140 of file AdminUI.cpp. void AdminUI::init () This function initializes parameters about the light, the background of the scene and the start_button Definition at line 19 of file AdminUI.cpp. bool AdminUI::keyPressed (const OIS::KeyEvent & keyEventRef ) This function is responsible for the actions need to be done when a key is pressed Definition at line 151 of file AdminUI.cpp. bool AdminUI::keyReleased (const OIS::KeyEvent & keyEventRef ) This function is responsible for the actions need to be done when a key is released Definition at line 160 of file AdminUI.cpp. bool AdminUI::mouseMoved (const OIS::MouseEvent & evt ) This function is responsible for the actions need to be done when the mouse moves Definition at line 164 of file AdminUI.cpp. bool AdminUI::mousePressed (const OIS::MouseEvent & evt , OIS::MouseButtonID id ) This function is responsible for the actions need to be done when the mouse is pressed Definition at line 169 of file AdminUI.cpp. bool AdminUI::mouseReleased (const OIS::MouseEvent & evt , OIS::MouseButtonID id ) This function is responsible for the actions need to be done when the mouse is released Definition at line 174 of file AdminUI.cpp. bool AdminUI::resume (const CEGUI::EventArgs & e) This function is responsible for all the actions needed when the user presses the button resume Definition at line 212 of file AdminUI.cpp.

Πλατφόρμα RPG παιχνιδιών Σελίδα 96

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου void AdminUI::setCamera () This function initializes all the parameters needed for the camera Definition at line 52 of file AdminUI.cpp. void AdminUI::setGUI () This function loads the basic graphics for the scene Definition at line 46 of file AdminUI.cpp. void AdminUI::update (double timeSinceLastFrame ) This function is responsible for updating scene every few seconds Definition at line 179 of file AdminUI.cpp.

The documentation for this class was generated from the following files: • trunk/DnD_Boundaries/UserInterface/inc/ AdminUI.h • trunk/DnD_Boundaries/UserInterface/ AdminUI.cpp

DnD::DnDBoundaries::UserInterface::BattleUI Class Reference

#include Public Member Functions • BattleUI () • ~BattleUI () • void enter () • void init () • void new_game () • void load_game () • void setCamera () • void setGUI () • void createScene () • void exit () • bool keyPressed (const OIS::KeyEvent &keyEventRef) • bool keyReleased (const OIS::KeyEvent &keyEventRef) • bool mouseMoved (const OIS::MouseEvent &evt) • bool mousePressed (const OIS::MouseEvent &evt, OIS::MouseButtonID id) • bool mouseReleased (const OIS::MouseEvent &evt, OIS::MouseButtonID id) • void update (double timeSinceLastFrame) • void updateSetUp (double timeSinceLastFrame) • void updateShutDown () • void updateCamera () • void updateMouse () • void updateEntityMovement (double timeSinceLastFrame) • void updateAttackMode (Ogre::MovableObject *attacker, Ogre::MovableObject *defender, double timeSinceLastFrame) • void changeObjectSelection () • void deselectObject (Ogre::MovableObject *obj) • void selectObject (Ogre::MovableObject *obj) • void setObjectTurn () • void attack (int attacker, int defender, double timeSinceLastFrame) • int findSelectedEntity ()

Πλατφόρμα RPG παιχνιδι Σελίδα 97

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

• bool findDestination (int selected, const OIS::MouseEvent &evt, OIS::MouseButtonID id) • void moveSelectedItem (int selected) • void attackCursor (const OIS::MouseEvent &evt) • void moveAttacker (Ogre::MovableObject *attacker, Ogre::MovableObject *defender) • void return2somePlace (int selected) • void regularization (int selected) • void hitPointsLeft (int temp_attacker, int temp_defender)

Detailed Description This boundary class includes all the functions and variables needed for the battle Definition at line 51 of file BattleUI.h.

Constructor & Destructor Documentation BattleUI::BattleUI () Definition at line 18 of file BattleUI.cpp. BattleUI::~BattleUI () Definition at line 45 of file BattleUI.cpp.

Member Function Documentation void BattleUI::attack (int attacker , int defender , double timeSinceLastFrame ) Definition at line 656 of file BattleUI.cpp. void BattleUI::attackCursor (const OIS::MouseEvent & evt ) Definition at line 563 of file BattleUI.cpp. void BattleUI::changeObjectSelection () Definition at line 428 of file BattleUI.cpp. void BattleUI::createScene () This function is responsible for enerything needed to be set for the new scene Definition at line 98 of file BattleUI.cpp. void BattleUI::deselectObject (Ogre::MovableObject * obj ) Definition at line 424 of file BattleUI.cpp. void BattleUI::enter () This function is responsible for calling all the needed functions to initailize the scene Definition at line 48 of file BattleUI.cpp. void BattleUI::exit () This function destroy camera and scene Definition at line 139 of file BattleUI.cpp. bool BattleUI::findDestination (int selected , const OIS::MouseEvent & evt , OIS::MouseButtonID id ) Definition at line 475 of file BattleUI.cpp. int BattleUI::findSelectedEntity () Definition at line 463 of file BattleUI.cpp. void BattleUI::hitPointsLeft (int temp_attacker , int temp_defender ) Definition at line 833 of file BattleUI.cpp.

Πλατφόρμα RPG παιχνιδιών Σελίδα 98

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου void BattleUI::init () This function initializes parametres about the scene Definition at line 55 of file BattleUI.cpp. bool BattleUI::keyPressed (const OIS::KeyEvent & keyEventRef ) This function is responsible for the actions need to be done when a key is pressed Definition at line 148 of file BattleUI.cpp. bool BattleUI::keyReleased (const OIS::KeyEvent & keyEventRef ) This function is responsible for the actions need to be done when a key is released Definition at line 174 of file BattleUI.cpp. void BattleUI::load_game () This function is responsible for the actions needed when the button load game is pressed Definition at line 349 of file BattleUI.cpp. bool BattleUI::mouseMoved (const OIS::MouseEvent & evt ) This function is responsible for the actions need to be done when the mouse moves Definition at line 204 of file BattleUI.cpp. bool BattleUI::mousePressed (const OIS::MouseEvent & evt , OIS::MouseButtonID id ) This function is responsible for the actions need to be done when the mouse is pressed Definition at line 216 of file BattleUI.cpp. bool BattleUI::mouseReleased (const OIS::MouseEvent & evt , OIS::MouseButtonID id ) This function is responsible for the actions need to be done when the mouse is released Definition at line 251 of file BattleUI.cpp. void BattleUI::moveAttacker (Ogre::MovableObject * attacker , Ogre::MovableObject * defender ) Definition at line 670 of file BattleUI.cpp. void BattleUI::moveSelectedItem (int selected ) Definition at line 499 of file BattleUI.cpp. void BattleUI::new_game () This function is responsible for the actions needed when the button new game is pressed Definition at line 287 of file BattleUI.cpp. void BattleUI::regularization (int selected ) Definition at line 779 of file BattleUI.cpp. void BattleUI::return2somePlace (int selected ) Definition at line 757 of file BattleUI.cpp. void BattleUI::selectObject (Ogre::MovableObject * obj ) Definition at line 420 of file BattleUI.cpp. void BattleUI::setCamera () This function initializes all the parametres needed for the camera Definition at line 81 of file BattleUI.cpp. void BattleUI::setGUI () This function loads the basic graphics for the scene Definition at line 72 of file BattleUI.cpp. void BattleUI::setObjectTurn () Definition at line 456 of file BattleUI.cpp.

Πλατφόρμα RPG παιχνιδι Σελίδα 99

Πλατφόρμα σχεδίασης και ανάπτυξης RPG void BattleUI::update (double timeSinceLastFrame ) This function is responsible for updating scene every few seconds Definition at line 260 of file BattleUI.cpp. void BattleUI::updateAttackMode (Ogre::MovableObject * attacker , Ogre::MovableObject * defender , double timeSinceLastFrame ) Definition at line 627 of file BattleUI.cpp. void BattleUI::updateCamera () Definition at line 365 of file BattleUI.cpp. void BattleUI::updateEntityMovement (double timeSinceLastFrame ) Definition at line 384 of file BattleUI.cpp. void BattleUI::updateMouse () Definition at line 380 of file BattleUI.cpp. void BattleUI::updateSetUp (double timeSinceLastFrame ) Definition at line 352 of file BattleUI.cpp. void BattleUI::updateShutDown () Definition at line 358 of file BattleUI.cpp.

The documentation for this class was generated from the following files: • trunk/DnD_Boundaries/UserInterface/inc/ BattleUI.h • trunk/DnD_Boundaries/UserInterface/ BattleUI.cpp

Πλατφόρμα RPG παιχνιδιών Σελίδα 100

Διπλωματική εργασία Α. Βουνοτρυπίδη – Χ. Μαλλιά Στολίδου

ΒΙΒΛΙΟΓΡΑΦΙΑ

[BRI 09] Brian Tanner, Adam White - 2009. RL-Glue: Language - Independent Software for Reinforcement-Learning Experiments. [COH 10] Cohen D.S., Sergio A. Bustamante II - 2010. Producing Games. [DAV 06] Daven Sanassy, Gavin Stannard, Nicholas Wilson - 2006. Spherica: 3D Game Development. [ERI 03] Erik Bethke - 2003. Game Development and Production. [GRE 06] Gregory Junker - 2006. Pro OGRE 3D Programming. [JOS 10] Joshua Bell, Morgaine Dinova, David Levine - 2010. VWRAP for Virtual Worlds Interoperability [LAN 10] Lance Flavell - 2010. Beginning Blender. [RYA 10] Ryan Henson Creighton – 2010. Unity 3D Game Development by Example - Beginner's Guide. [URL 1] http://www.3dcognition.com/gamedevprinciples3.html [URL 2] http://www.3dcognition.com/gamedevprinciples10.html [URL 3] http://glue.rl-community.org/wiki/About_RL-Glue [URL 4] http://www.genesis3d.com [URL 5] http://www.irrlicht.sourceforge.net/faq.html [URL 6] http://www.gpwiki.org/index.php/NeoEngine [URL 7] http://www.devmaster.net/engines/engine_details.php?id=33 [URL 8] http://www.crystalspace3d.org/main/Main_Page [URL 9] http://www.ultimate3d.org [URL 10] http://www.yoyogames.com [URL 11] http://www.http://unity3d.com [URL 12] http://www.terathon.com/c4engine [URL 13] http://www.garagegames.com/products/torque-3d [URL 14] http://www.adobe.com/products/director/ [URL 15] http://www.sweethome3d.com/userGuide.jsp [URL 16] http://ptgptb.org/0001/history1.html [WDD] http://en.wikipedia.org/wiki/Dungeons_%26_Dragons [WHC] http://en.wikipedia.org/wiki/History_of_computer_and_video_games [WMH] http://en.wikipedia.org/wiki/MakeHuman [YOU 11] Young-Seol Lee and Sung-Bae Cho – 2011. Context - Aware Petri Net for Dynamic Procedural Content Generation in Role-Playing Game. [SOM 08] Ι.Sommerville 2009. Βασικές Αρχές Τεχνολογίας Λογισμικού

Πλατφόρμα RPG παιχνιδι Σελίδα 101

Πλατφόρμα σχεδίασης και ανάπτυξης RPG

[LAR 10] Making a short movie with MakeHuman and Blender 2.5 in two weeks. Thomas Larsson November 24, 2010 [ΒΑΡ 09] Βαρελάς Παναγιώτης – 2009. Ελεύθερο λογισμικό παγιδευμένο στον καπιταλισμό! [URL 16] http://www.stack.nl/~dimitri/doxygen/index.html [GDA 03] Dungeon Master's Guide. E.Gary Gygax – Dave Arneson [GDA 03] Player's Handbook. E.Gary Gygax – Dave Arneson [GDA 03] Monster Manual. E.Gary Gygax – Dave Arneson

Πλατφόρμα RPG παιχνιδιών Σελίδα 102