Developing Tools for Indie Games Marc Flury Co-Founder.

Slides:



Advertisements
Similar presentations
Applied Software Project Management Andrew Stellman & Jennifer Greene Applied Software Project Management Why Software.
Advertisements

2006 Adobe Systems Incorporated. All Rights Reserved. 1 End-user programming and Flash Jen deHaan Sr. Technical Writer April 23 rd 2006.
SharePoint Forms All you ever wanted to know about forms but were afraid to ask.
Why Use Test Driven Development (TDD)?.  Why the need to change to TDD.  Talk about what TDD is.  Talk about the expectations of TDD.
Software Engineering Session 14 INFM 603. Software Software represents an aspect of reality –Input and output represent the state of the world –Software.
Implementing a Rewindable Instant Replay System for Temporal Debugging Mark Wesley Lead Gameplay Programmer – 2K Marin.
The Design Document Ahmet Uğur. Overview No standard format Should communicate the nature of the game effectively Companies with agreed format The design.
Alternate Software Development Methodologies
Learning about software Interfaces.  In this lab, you will examine  Excel Spreadsheet Interface  Access Database Interface  You will also learn about.
Larger Projects Mark Green School of Creative Media.
Computer Engineering 203 R Smith Agile Development 1/ Agile Methods What are Agile Methods? – Extreme Programming is the best known example – SCRUM.
Chapter 3.1 Teams and Processes. 2 Programming Teams In the 1980s programmers developed the whole game (and did the art and sounds too!) Now programmers.
Content Management Systems Why to use. And, if you’re going to use one, which one???
Visual Studio 2005 C# IDE Enhancements Luca Bolognese C# Program Manager Microsoft Corporation.
Chapter 25 – Configuration Management 1Chapter 25 Configuration management.
Michael Solomon Tugboat Software Managing the Software Development Process.
1. Learning Outcomes At the end of this lecture, you should be able to: –Define the term “Usability Engineering” –Describe the various steps involved.
XNA Studio: Introduction to XNA Brian Keller Product Manager Microsoft Corporation.
CS378 - Mobile Computing App Project Overview. App Project Teams of 2 or 3 students Develop an Android application of your choosing subject to instructor.
Unit 1 – Improving Productivity Loren Thomas Instructions ~ 100 words.
XP 1 HTML: The Language of the Web A Web page is a text file written in a language called Hypertext Markup Language. A markup language is a language that.
Why you should be using Version Control. Matt Krass Electrical/Software Engineer November 22, 2014.
6-January-2003cse Introduction © 2003 University of Washington1 Introduction CSE 403, Winter 2003 Software Engineering
Introduction CSE 1310 – Introduction to Computers and Programming Vassilis Athitsos University of Texas at Arlington 1.
Web/App Performance How to keep you out of the News
Max Planck Institute for Psycholinguistics Tool development report H. Brugman MPI Nijmegen.
COLD FUSION Deepak Sethi. What is it…. Cold fusion is a complete web application server mainly used for developing e-business applications. It allows.
 To explain the importance of software configuration management (CM)  To describe key CM activities namely CM planning, change management, version management.
Introduction CSE 1310 – Introduction to Computers and Programming Vassilis Athitsos University of Texas at Arlington 1.
Object-Oriented Software Engineering Practical Software Development using UML and Java Chapter 1: Software and Software Engineering.
CHAPTER TEN AUTHORING.
Just as there are many human languages, there are many computer programming languages that can be used to develop software. Some are named after people,
Luminance.  Major group refactoring.  Development Lead: Stephen Damm.  Project Manager: Martina Nagy.  Test team member: Chet Collins.  A lot of.
CSE 381 – Advanced Game Programming Code Setup.
Guide to Programming with Python Chapter One Getting Started: The Game Over Program.
AJAX 10 Most Common Mistakes. 1. Not giving immediate visual cues for clicking widgets. If something I'm clicking on is triggering Ajax actions, you have.
Intermediate 2 Computing Unit 2 - Software Development Topic 2 - Software Development Languages and Environments.
Mistakes, Errors and Defects. 12/7/2015Mistakes, Errors, Defects, Copyright M. Smith, ECE, University of Calgary, Canada 2 Basic Concepts  You are building.
CS5103 Software Engineering Lecture 02 More on Software Process Models.
® IBM Software Group © 2009 IBM Corporation Essentials of Modeling with the IBM Rational Software Architect, V7.5 Module 15: Traceability and Static Analysis.
Software Engineering Principles Practical Advice and Steps for Managing Your Project.
Delta3D: To Date Progress of the Delta3D Open Source Game Engine Erik Johnson, Technical Director.
Phoenix Scrum User Group Simplifying Scrum Online May 21 st 2009.
Introduction CSE 1310 – Introduction to Computers and Programming Vassilis Athitsos University of Texas at Arlington 1.
Reduced Instruction Set Computing Ammi Blankrot April 26, 2011 (RISC)
Oman College of Management and Technology Course – MM Topic 7 Production and Distribution of Multimedia Titles CS/MIS Department.
Designing Design Tools. What is design tools? Why do we need them?
1 Multimedia Development Team. 2 To discuss phases of MM production team members Multimedia I.
If you have a transaction processing system, John Meisenbacher
Beginning Software Craftsmanship Brendan Enrick Steve Smith
SPECKING OUT AAA ART DEVELOPMENT Know the Hell you’re getting into!
INTRODUCTION CSE 470 : Software Engineering. Goals of Software Engineering To produce software that is absolutely correct. To produce software with minimum.
Enterprise Library 3.0 Memi Lavi Solution Architect Microsoft Consulting Services Guy Burstein Senior Consultant Advantech – Microsoft Division.
Software Development Languages and Environments. Computer Languages Just as there are many human languages, there are many computer programming languages.
1 Developer Tasks for Non-Code Hackers André Schnabel, Christoph Noack , 10:30, La Cantine.
Tools and technology usage in PFMS application lifecycle management process LEPL Financial-Analytical Service, Ministry of Finance October, 2015 Dimitri.
Rapid Prototyping using UDK
Visual C# 2005: IDE Enhancements
Methods for attaching data to objects, and connecting behaviors
Using Collaboration Tools to Improve Artifact Consistency in CS577 Projects Allen Kou.
Unit# 8: Introduction to Computer Programming
Designing Design Tools
Tools of Software Development
Importance of logs in custom development
Touchstone Testing Platform
Tiffany Ong, Rushali Patel, Colin Dolese, Joseph Lim
Visual Studio 2010 和 .NET Framework 4 培训研讨会
DEV322 Visual Studio 2005 C# IDE Enhancements
Coupling Interaction: It occurs due to methods of a class invoking methods of other classes. Component Coupling: refers to interaction between two classes.
Games Development 2 Tools Programming
Presentation transcript:

Developing Tools for Indie Games Marc Flury Co-Founder

My Background Game programmer for ten years Worked at Harmonix for seven years

Now Moved to Seoul three years ago Founded Drool with Brian Gibson (artist, musician)

About Thumper Two developers (one programmer) Years of development time Plan to release within a year Using a custom engine

Why a custom engine? Fun (most of the time) Get better at making games New tools create new design possibilities

Thumper Codebase Hundreds of data files Thousands of game objects Hundreds of visual script nodes

The Challenge Develop tools efficiently - spend time on your game, not tools Develop the right tools, so you can create content efficiently As much about production as programming

My Experience 90% of code I write is not exciting/innovative, it’s nuts and bolts My technical skill has improved, but my most important skill is maximizing productivity

Be your own producer Wait, isn’t this a programming talk? Who needs a producer anyway?

Personal Production Techniques 1.Track your time and effort 2.Look at the big picture 3.Stay focused

Why track your time and effort? Your intuition of what’s important is probably wrong You can easily waste time Be a good engineer!

1. Track your time and effort Maintain a “work log” –Text file, spreadsheet, whatever Track how you spend your time, especially: –Bug fixing –Tasks that take longer than expected –Mistakes/bugs made by other developers, including non- programmers –Time spent not programming (chatting, , etc.) Use this actual data to decide when to refactor, improve tools, etc.

What’s helpful to me Test-driven development –Immediate, visual feedback –Helps catch common mistakes (ones I actually make!) –Useful up to a point, don’t take it too far Debug visualizations –Tasks, animations –Audio –Memory –Timers –Rendering

Long Distance Collaboration

Typical From: To: Subject: Rendering bug There is a rendering problem with shadow.mat in thump/run/decorators/blubber_monster.objlib. I’m not sure if there’s a problem with material settings or a code issue?

with Object URL From: To: Subject: Rendering bug There is a rendering problem with drl://decorators/blubber_monster.objlib?obj=shadow.mat. I’m not sure if there’s a problem with material settings or a code issue? drl://decorators/blubber_monster.objlib?obj=shadow.mat

Other applications Data validation reports Errors and warnings Working with external teams

Object URL Implementation

Editor vs. Game I was spending lots of time writing editor-only code Editor case is usually more complex –Objects can be created, deleted anytime –Maintain and display references –Cut, copy, paste –Undo, redo –Robust serialization (backwards-compatible, inter-file dependencies) Game requirements are totally different –Fast loading –Efficient memory usage –Cache-coherent

Editor vs. Game “Thumper is a small game, so I can just use the same file format and serialization code for the game and editor.” My intuition said: It will be less code to maintain (only one save/load) It will be simpler The editor is integrated into the game app, so the data should be the same

Editor vs. Game Reality said: Work log: a lot of time fixing editor-only bugs Difficult to make game data performant Packed binary formats are not ideal for robust save/load Binary file formats are not merge-able and lead to workflow problems Code was littered with #ifdefs

Editor vs. Game Use a human-readable, text-based format for editor Use packed, high performance binary for the game Doesn’t matter if you have separate editor/game apps or not The data is what matters

Text-based object format name: approach.sample id: 4002 path: samples/swish/short_whip.wave mode: kOneOff volume: 0.5 pitch: 1.0 pan: 0.0 channel_group: 3021

Benefits Separate formats reduce overall complexity Only need to maintain latest version of game data Cheap “concurrent” editing –cf: dev blog for The Witness Easy to search your “database” of objects (just grep)

What’s not helpful (to me) C++ const correctness Object orientated programming –Thinking in terms of classes/objects –Thinking about public vs. protected vs. private –Planning inheritance hierarchies

MeshMaterialCameraParticleSystem

MeshMaterial Camera ParticleSystem Object

MeshMaterial Camera ParticleSystem ObjectTransformObjectDrawObject

MeshMaterial Camera ParticleSystem ObjectTransformObjectDrawObject

MeshMaterial Camera ParticleSystem Object Component

MeshMaterial Camera ParticleSystem Object CompnentComponent DrawCompTransformComp

Mesh DrawComp TransformComp Material Camera TransformComp ParticleSystem DrawComp TransformComp Object Component DrawCompTransformComp

DrawComp Mesh DrawComp TransformComp Material Camera TransformComp ParticleSystem DrawComp TransformComp Object Component TransformComp DX9Mesh DX9MaterialDX9Camera DX9ParticleSystem

DrawComp Mesh DrawComp TransformComp Material Camera TransformComp ParticleSystem DrawComp TransformComp Object Component TransformComp DX9Mesh DX9MaterialDX9Camera DX9ParticleSystem

MeshMaterialCameraParticleSystem

MeshMaterialCameraParticleSystem Real problems Sort draw calls Batch/instance draw calls Minimize cache misses Minimize DX9 CPU overhead

MeshMaterialCameraParticleSystem Key 64-bit key

MeshMaterialCameraParticleSystem Data Key 64-bit key Transform, vertices, particles, etc.

MeshMaterialCameraParticleSystem KeyOffsetKeyOffsetKeyOffsetKeyOffset… Draw() Unsorted Data … Draw Data

MeshMaterialCameraParticleSystem Draw() Unsorted Draw Data Sort() KeyOffsetKeyOffsetKeyOffsetKeyOffset… Sorted Draw Data KeyOffsetKeyOffsetKeyOffsetKeyOffset… Data … …

MeshMaterialCameraParticleSystem Draw() Unsorted Draw Data Sort() Sorted Draw Data RenderDX9() KeyOffsetKeyOffsetKeyOffsetKeyOffset… Data … KeyOffsetKeyOffsetKeyOffsetKeyOffset… Data …

KeyOffsetKeyOffsetKeyOffsetKeyOffset… Data … MeshMaterialCameraParticleSystem Draw() Unsorted Draw Data Sort() Sorted Draw Data RenderDX9() KeyOffsetKeyOffsetKeyOffsetKeyOffset… Data …

DrawComp Mesh DrawComp TransformComp Material Camera TransformComp ParticleSystem DrawComp TransformComp Object Component TransformComp DX9Mesh DX9MaterialDX9Camera DX9ParticleSystem

Data-orientated programming Understand your real problem Strive for a single point of enumeration, avoid mess of classes/objects Make your problem easier to visualize, debug, profile

2. See the Big Picture

Property-grid vs. Visual Scripting FxTrigger Flow

Every feature introduces risk

3. Stay Focused Don’t compete on feature set Do focused, high-quality work Explore one core tech feature fully Use constraints to limit scope

Prototype

b-bb-b-b-bb--b b b b b b b b bb--bb b-b b b b b b b b b b b b bb--bb--bb--bb--bb--bb--bb--bb--bb--bb b....b b b b--bb b bbb-b-b-bb-b-bb--bb--bb--bb--bb--bb--bb--bb--bb--bb b b-b b-b b-b b-b b--bb-b-b-bb-b b b b b b

Thumper’s Sequencer Tool A linear stream of data used for level design, animation, characters, etc.

Gameplay Creation Level Editor Demo

Obstacles, enemies Tentacle Finger Zillapede

Gameplay and “Physics” Controller JumpAnim

What we don’t have Animation package import/export and playback Physics Sophisticated 3D editor

Gameplay…