Everything Forever Entertainment
Randy HatakedaKyle 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?