• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.


  • Content count

  • Joined

  • Last visited

Community Reputation

148 Neutral

About greerws

  • Rank
  1. Tyberthia, One thing to add on is that no matter what rode you take, go in small steps. If you already have a great game idea, I'd reccomend not starting with it. You want to get to figure out the right path (from the great information above, or any other that you decide), and work on learning a bit first. Once you've got a good understanding, and maybe a couple really simple games done and polished (like Tetris and/or Breakout clones) then start in on that first original game. By starting on something like Tetris, you can learn how to create a game without having to worry about coming up with any of the specifics yourself. There's a great article on gameDev about this progressive approach, [url="http://www.gamedev.net/page/resources/_/technical/game-programming/how-do-i-make-games-a-path-to-game-development-r892"]here[/url]. Your own path might be different, depending on if you start programming from scratch, or start with a higher level. Regardless, the basic principles still hold. Best of luck! Shawn
  2. Danny, Your question is a bit open ended so hard to answer, especially as there are so many different ways to answer it. The best (although generic) answer is to find a way to learn it while keeping yourself motivated. That in itself can be a big challenge. With that in mind, I'd reccomend taking a look at the C++ workshop that was run here. While the actual workshop itself was conducted some time ago, all of the material is still here on Gamedev and still relevant. You can find the forum section for it [url="http://www.gamedev.net/forum/76-cpp-workshop/"]here[/url], and there introduction is [url="http://www.gamedev.net/topic/392994-c-workshop---introduction/"]here[/url] It does require a text be purchased, but on Amazon you can get it for less then $10 used, or for $20 on Kindle. I didn't take the C++ workshop, but I did do a large percentage of the C# workshop, which looked to mirror it with regard to the projects, etc. Is this the best first step? Maybe not. But I don't think it's a bad one. Shawn
  3. Vibeth, I can't take credit for it, but the article[url="http://www.gamedev.net/page/resources/_/technical/game-programming/how-do-i-make-games-a-path-to-game-development-r892"] here [/url]lays out a good path toward developing games. It talks about a lot of important things and can serve as a good guide. Shawn
  4. So the first thing you may notice is the Hermes tag on this post. I'm big on not coming up with title for a game until it's about done. After all, how you can name something when it doesn't exist. However, you have to call the project something. When I'm talking to my co-designer/artist/brother, I can't keep stating "Hey, in the Pac-Man clone with Om Nom Game...". So, as is popular with development, we gave the project a working title. The use of Greek God names as project titles came in a rather roundabout way, but it works. With that aside, we've started planning out the game. While I'm not quite ready to start programming the game (there is still a bit more I want to pick up from the Android Game Development book I've been working through), the more the game is planned out ahead of time, the easier it will actually be to create when I'm ready. The up side of this project is that since it's a Pac-Man clone, we don't have to worry about any of the actual rules in the game. I'm using the Pac-Man Dossier by Jamey Pittman (http://home.comcast.net/~jpittman2/pacman/pacmandossier.html) as my bible on all things Pac-Man. After reading through it a number of times, I can think I can make an identical clone, implementing all of the game mechanics covered in the dossier. The game screen is represented by a 28x36 grid (with the map covering 28x31). Have the extra outside the map included with the grid is important for the ghost targeting and path finding logic. Each of these grid blocks is composed of an 8x8 grid. These smaller units will be used to track exactly where Om Nom (Pac-Man) and the Spider (Ghosts) are at a given point. The map itself will be tracked and rendered using a 28x31 array of tiles. It will include which texture to use, and how much to rotate it by (degrees of 90). A null texture value simply means don't render anything there. I'm going to use a separate 28x31 array of Booleans to determine if a tile is traversable. Because all walls are placed between traversable squares, this will work (you will never have a wall between two adjacent squares. If two squares are adjacent and traversable, you can move from one square to the other). Spider (Ghost) movement shouldn't be too hard. Each of the 4 ghost AIs (when in 2 of the game's modes) will always move toward their given target tile. So a single spider class can hold all this information. Then I can inherit from this to create each of the 4 spider's logic in how they place their target. This should keep the code repetition for spiders minimal. My initial thought for controlling Om Nom is to split the playable area with an X. Touching the top quadrant (is it a quadrant if it's split with an X and not a cross?) will turn Om Nom up, if possible. Touching right will turn him that way, etc. I think this should keep the control pretty straightforward and easy. I'm also thinking on having both Om Nom and the Spiders inherit from a single drawable object class. This class will include the Texture and vertices to be used when drawing it. The vertices will be combined with the objects world coordinate offset to place everything on the screen. That brings me to my last subject of the day. I had a discussion with my artists, and we came up with a list of assets that we'll need for the game play (there will be some other things needed, but this is what we need to make the foundational game itself playable). Art assets: 32x32 pixels Om Nom (forward, left, back ) walking animation [Pac-Man] Om Nom death animation Spider (forward, left, back) walking animation [the ghost] Star [the power up] Donut [first fruit bonus points] Cupcake [second fruit bonus points] Tiles (curve spike, straight spike) [the walls] (We're currently undecided on what the Spider entrance area will look like). 8x8 Candy [the pellets] We couldn't think of any other art assets needed in the game play section. That wraps it up for today. Shawn
  5. Matt, I like the idea of using the different boxes to represent different worlds in the game. Great idea! I'll look at using string for the map borders, but I was thinking about using spike strips (from Cut the Rope as well). I appreciate the feedback. Shawn
  6. So as this is my first entry, in my first blog, it's actually a bit intimidating as to what type out. Do I rework this until I come up with something meaningful, or just throw out the first thing that comes to mind? Do I go into some great depth with what my purpose is here, or do I simply let the blog speak for itself over time. In the end, I think I'll take the lazy route and just throw this out there and let it be what it will. With that, I have begun a new endeavor. I have dabbled in game development for some time now. I've done straight C++ and then went on to poke around Ogre some. I then looked to going to more "refined" (read 'easier') route and delved into some XNA. That spark kind of fizzed out and I got busy, and didn't do much game programming for some time. Finally, a few weeks ago I got the bug again, and when trying to decide how to apply it, I decided to give the Android a shot. I had learned Java, so thought this might be a good way to try and apply it. I picked up an Android Game Development book, and have been plugging away for some time. So, now I'm at the point where I'm looking to dig into my first couple of projects outside of the book. While I have a couple games in mind (in increasing difficulty), I'm going to start with something known. A Pac-Man clone. I did not realize prior to researching how in depth some of the AI is for Pac-Man. Each of the 4 ghosts has very distinct and specific AIs that they utilize. It's actually a pretty interesting system, and implementing all of this logic will be a good "work out". This gives me a game to create that's a little bit beyond a simple pong or Tetris (which I've done), but I don't have to worry about coming up with the game design. The only real change I'm planning on making from the original Pac-Man is the art assets. At the recommendation of my brother (who is my artists for everything I'll be developing), we'll be borrowing Om-Nom from one of my favorite android games, cut the rope. He'll be eating candy and stars, and getting chased by spiders. With a short term test bed game and a couple of original game designs planned (to be revealed at a later time), my brother and my game development venture is under way. Face Punch Games. Shawn
  7. Thank you for the quick response. I'll give some of these a try and see if I can generate the look I'm going for.
  8. Simon, I appreciate the quick response. I think your last idea is even better then what I was originally picturing. I think I'll give that a try and see how it works out. Thank you! Shawn
  9. Hello all. I'm laying out the design for a game on the Android using openGL ES, and I've stumbled upon an issue that I can't seem to find a solution for. I'm looking to be able to draw something on the screen, like a wall, then have a character pass behind the wall. When the character is behind the wall, I'm looking to apply an auro of transparency on the wall in front of the character, enabling you to see the character behind, without making the entire wall transparent. Any help anyone could offer any help, or at least point me in the right direction, I'd greatly appreciate it. Shawn
  10. Hello all. I'm laying out the design for a game on the Android using openGL ES, and I've stumbled upon an issue that I can't seem to find a solution for. I'm looking to be able to draw something on the screen, like a wall, then have a character pass behind the wall. When the character is behind the wall, I'm looking to apply an auro of transparency on the wall in front of the character, enabling you to see the character behind, without making the entire wall transparent. Any help anyone could offer any help, or at least point me in the right direction, I'd greatly appreciate it. Shawn
  11. First off, I know there's already a lot out about state management. However, I couldn't find anything that could help answer the question. I've got the basic idea of the states down, using the method put forth here: http://gamedevgeek.com/tutorials/managing-game-states-in-c/ Basically create a vector of states. The problem I'm having, is that I don't know how to go about filling out the handleEvents function of the state itself, specifically regarding any of the windows and message events. Do I have to write my own message handler class, then push messages through to it? Any help, or a nudge in the right direction would be appreciated. The applicable code is here. Most of it is just an empty shell as I've just been trying to get the handleEvents function working. <gameState.h> #ifndef GAMESTATE_H #define GAMESTATE_H #include "gameEngine.h" #include "windows.h" class GameState { public: virtual void init() = 0; virtual void cleanUp() = 0; virtual void pause() = 0; virtual void resume() = 0; virtual void handleEvents(GameEngine* game) = 0; virtual void update(GameEngine* game) = 0; virtual void draw(GameEngine* game) = 0; void changeState(GameEngine* game, GameState* state) { game->changeState(state); } protected: GameState() {} }; #endif introState.h #ifndef INTROSTATE_H #define INTROSTATE_H #include "gameState.h" #include "windows.h" class IntroState : public GameState { public: void init(); void cleanUp(); void pause(); void resume(); void handleEvents(GameEngine* game); void update(GameEngine* game); void draw(GameEngine* game); static IntroState* instance() { static IntroState m_IntroState; return &m_IntroState; } protected: IntroState() {} }; #endif gameEngine.h #ifndef GAMEENGINE_H #define GAMEENGINE_H #include <vector> #include "windows.h" using namespace std; class GameState; class GameEngine { public: bool init(HINSTANCE& hInstance, int& showCmd); void cleanUp(); void changeState(GameState* state); void pushState(GameState* state); void popState(); void handleEvents(); void update(); void draw(); bool running(); bool quit(); private: vector<GameState*> states; bool mRunning; WNDCLASSEX wcx; HWND ghMainWnd; HINSTANCE ghAppInst; }; #endif gameEngine.cpp #include "gameEngine.h" #include "gameState.h" void GameEngine::init(HINSTANCE& hInstance, int& showCmd) { mRunning = true; ghAppInst = hInstance; wcx.cbSize = sizeof(WNDCLASSEX); wcx.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; wcx.lpfnWndProc = WndProc; wcx.cbClsExtra = 0; wcx.cbWndExtra = 0; wcx.hInstance = ghAppInst; wcx.hIcon = LoadIcon(NULL, IDI_APPLICATION); wcx.hCursor = LoadCursor(NULL, IDC_ARROW); wcx.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); wcx.lpszMenuName = NULL; wcx.lpszClassName="Tetris Clone"; wcx.hIconSm = NULL; RegisterClassEx(&wcx); ghMainWnd = CreateWindowEx(0, "Tetris Clone", "Tetris Clone", WS_BORDER | WS_SYSMENU | WS_CAPTION| WS_VISIBLE, 500, 200, 320, 272, NULL, NULL, ghAppInst, NULL); ShowWindow(ghMainWnd, showCmd); UpdateWindow(ghMainWnd); } void GameEngine::cleanUp() { while ( !states.empty() ) { states.back()->cleanUp(); states.pop_back(); } } void GameEngine::changeState(GameState *state) { if ( !states.empty() ) { states.back()->cleanUp(); states.pop_back(); } states.push_back(state); states.back()->init(); } void GameEngine::pushState(GameState *state) { if ( !states.empty() ) { states.back()->pause(); } states.push_back(state); states.back()->init(); } void GameEngine::popState() { if ( !states.empty() ) { states.back()->cleanUp(); states.pop_back(); } if (!states.empty() ) { states.back()->resume(); } } void GameEngine::handleEvents() { // let the state handle events states.back()->handleEvents(this); } winMain.cpp #include "windows.h" #include "gameEngine.h" #include "introState.h" #include "gameState.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR cmdLine, int showCmd) { GameEngine game; game.init(hInstance, showCmd); game.changeState( IntroState::instance() ); while (game.running()) { game.handleEvents(); } game.cleanUp(); return 0; }