310 likes | 435 Vues
Explore the intricacies of developing an isometric RPG using C++ and DirectX. This guide covers essential topics including advanced map generation, enemy spawning, and AI pathfinding. Learn to implement a complex spell system with dynamic handling, as well as manage user input with context-sensitive mouse events. Discover best practices for working with Visual Studio 2008, using Blender for asset creation, and optimizing performance with efficient algorithms. Perfect for aspiring game developers looking to deepen their understanding of game mechanics and programming techniques in the 3D gaming space.
E N D
Everything Forever Entertainment RandyHatakeda Kyle Pickering
Debriefing • C++ • DirectX • 3D • RPG • Isometric View • FMOD • Point-Based
Extrinsic Tools • Visual Studio 2008 • Direct X February 2010 SDK • NVIDIA Shader Library • Blender
Special Features • Simple Input • DirectX Mesh Loading • Map Generation • Enemy Spawning • A.I. • Pathfinding • Dynamic Spell Handling System
Feature - Simple Input • Mouse • Context Sensitive Mouse Events • Shift • 1, 2, 3, 4, and 5
Feature - Single Mesh Hierarchy • One mesh, multiple instances • Animation Controllers
Feature - Map Generation • Individual Tiles • Tile Layouts • World Map Generated
Feature - Enemy Spawning • Up to 12 enemies alive at a time • The World finds a point where one can spawn • Outside of visible radius • Inside a global radius • Enemies are removed if they are outside the global radius
Feature - A.I. • A.I. Level • General Choice • Action Choice
Feature - Pathfinding • Search Pattern • Creates a list of nodes • Converts list to XYZs
Feature - Complex Spell System • The Spell Class Has: • Heavily logic-based update function • Ability to create more Spell Entities • An Individual Spell Entity Has: • Attributes relating to updates • Events • Init, Death, Update, Hit
Discuss Problem Solving Techniques • .cpp files • Map editor • .X parser • Enemy spell aiming calculation • Using cosine to calculate y axis height (0 – 180) • Picking
Tech - Dot CPP Files • “Cross inclusion” Problem • When certain classes need to be aware of eachother.
Tech - Map Editor • In the console • Creates the tile layout text files
Tech - Dot X File Parser Tool • Animated model came with one gigantic animation • Animated model file is 100,000 lines long • The tool: • Isolates a set of frames, removing the unwanted • Creates an Animation Set, used by DirectX
Tech - Enemy Aiming • Calculate distances • Calculate times • Calculate time differences • Pick smallest • Select action
Tech - Cosine • Wanted a smooth natural flight up and down. • Cosine arc delivers: • Int a = (currentLifetime / maxLifetime) * 180; • spellPos.y = cos(a) * maximumHeight;
Team Dynamics • Planned very generally, made more specific goals as we went • Separated out work so we wouldn’t have to worry about conflicts
Team - The Master Plan • Single Day • Green, Yellow, Red • Fairly broad and general, with a few specifics: • 3D in DirectX • Complex Spell System • Map Generation through Text Files
Team - One Step at a Time • Akin to SCRUM/Agile Development • Exception: Very loosely defined product backlog, or “wishlist”
Team - Separated Work • Separated workload in a manner that • Allowed for minimal conflict with file manipulation
What We’d Like to Change • Hooking up animation controllers to animated models • Enemy Initialization • Further Entity Inheritance through abstract Classes, perhaps Interface Classes.
Horrible - Connecting Meshes • Game-Side and DirectX-Side • Game-Side models had Animation Controllers • Initializing in the Game-Side added to an “uncontrolledAnim” integer. • DirectX hooks up Animation Controllers to the proper mesh during update. • Better solution: use .cpp files.
Horrible - Enemy Initialization • They couldn’t be initialized when they were created without changing the structure • Update checks a bool to see if they have been initialized or not.
Horrible – Similar Classes • The player, enemy, and destructable class share many attributes and methods • health • sufferDamage() • Using further derived classes would allow for all health-based entities to share the same functions
Lessons Learned • Dot CPP file usage • Plan on paper, check logic, convert to code • Knowing what you want at the beginning is best • Optimization algorithms, not sqrt()
Lesson - CPP Files Are Awesome • We didn’t know the power of Dot CPP files at the start of development
Lesson - Know What You Want • Few specific goals resulted in few specific successes
Lesson - Plan, Check, Code • Step 1: Plan out logic, on paper • Step 2: Check logic, on paper • Step 3: Code • Step 4: ???????????? • Step 5: Profit
Lesson - Optimize? • Single lines aren’t horrible • Sqrt() • New • Delete • Cos() • Optimize entire algorithms
The End • Questions?