• 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

128 Neutral

About pingz

  • Rank

Personal Information

  1. [quote name='L. Spiro' timestamp='1351498335' post='4994975']I get the feeling I am the only one who actually read every word of all of the press releases on this subject.[/quote] That is not a press release. That is a very long winded opinion piece by a software developer that runs a website/forum called mollyrocket.com. You can sum it all up in one sentence... "Be afraid today of what Microsoft might do in a few years". Reading it was a waste of time. [quote name='L. Spiro' timestamp='1351498335' post='4994975']everything you get on your Metro machine will be obtained from the Windows Store and nowhere else.[/quote] That cannot be said because it has not happened. I could say that tomorrow Apple will patent the idea of making "software for entertainment" and legally force all developers to stop making games for all platforms but theirs. Apple has been very litigious with patents... and Apple does have a store where they control what can and cannot be sold... but *STILL* I could not in my right mind say that would be something to be afraid of. - Tom
  2. [quote name='L. Spiro' timestamp='1351488972' post='4994949']<br />There is no guarantee of anything being ported over, and many game companies not (yet) willing to out, with no guarantee they ever will.<br />[/quote] You are right... but that is today and the future can go many ways. One path is that Windows 8 eventually takes off and the store does well and game developers and some applications start being ported or developed for the store and the desktop is eventually removed (but I still hold this as extremely unlikely). The other is that it doesn't take off... or at least not on desktop PCs. Few port games and apps to it... and Microsoft either gives up and/or looses faith in store model and the desktop continues to thrive like it has for over 20 years now. I believe it will be somewhere in the middle... Windows Store with both Metro fullscreen and desktop windowed apps using the new WinRT APIs. People will still be able to install software from websites, but thru the new APPX system and 3rd-party installers will be disallowed (weak install tools have been the bane of Windows stability for decades). Either way it goes... it won't be decided for quite a few years from now. The desktop is still here... you can install any application you want today on Windows 8. Nothing is lost... but there is a hope that this improved WinRT software development and deployment model takes hold. - Tom
  3. [quote name='tstrimple' timestamp='1351483046' post='4994931']<br />Microsoft's intention was never to block "top games", it looks like a simple oversight in converting between the ESRB and PEGI systems which was corrected as soon as the mistake was noticed.<br />[/quote] Yep. That was the point I was trying to make... I just didn't do it as well as you just did.
  4. [quote name='superman3275' timestamp='1351480896' post='4994924']I believe this guy is a Microsoft troll.[/quote] I'm a fact troll... when I see they are missing I am compelled to add them to the conversation. [quote name='superman3275' timestamp='1351480896' post='4994924']I live in the U.S. and can tell you 99% of games are M rated[/quote] I live in Dallas, Texas. Checkmate! You just misread what I said... "In the US the ESRB has a M+17 rating which is what 99% of all games ***fall below***." ... or more clearly there are almost no AO games in the US marketplace. I make this point because Microsoft allows M rated games in the store... they always have. The issue is only with the PEGI system in Europe. [quote name='superman3275' timestamp='1351480896' post='4994924']99% of games are M rated[/quote] You are wrong. The vast majority of games are rated less than M. Here are the stats for 2010: http://kotaku.com/5782792/just-5-percent-of-games-were-rated-m-last-year-says-esrb Still as far as sales are concerned... I would expect M rated games sell way more... but that is a guess. Personally I don't think I've bought a game not rated M in a while which is probably why you believed they were the majority. [quote name='superman3275' timestamp='1351480896' post='4994924']Also it is 16+[/quote] You are wrong... M is 17+. See the ESRB site: http://www.esrb.org/ratings/ratings_guide.jsp [quote name='superman3275' timestamp='1351480896' post='4994924']The ESRB is very strict, and their rules are constantly becoming stricter.[/quote] I disagree... I would argue they are becoming less strict. They just started to allow mobile/downloadable game developers to "self rate" their games online for free: http://www.pcgamesn.com/indie/esrb-launch-free-rating-system-downloadable-games It is great to be a indie developer right now. - Tom
  5. [quote name='L. Spiro' timestamp='1351477345' post='4994910']<br />Seems they can be pressured after all.<br />[/quote] This had nothing to do with pressure... it has to do with the definition of "adult" games. In Europe the PEGI system has adult games with graphic sexual material at the "PEGI 18" rating. They have no rating above PEGI 18. In the US the ESRB has a M+17 rating which is what 99% of all games fall below. Then there is an adult AO rating... that is for graphic sexual material. Microsoft wanted to keep the crazy hardcore games out of the store... things like "RapeLay" and not games like "Mass Effect 3". To do that they went with Mature in the US and PEGI 16 in Europe... keeping things simple defining what ratings are allowed and which are not. The problem is it kept games like "Mass Effect 3" which are rated PEGI 18 out of the store in Europe. So the change is to allow PEGI 18 games, but they are subject to refusal if the content violates the terms of the store. More difficult to certify, but keeps the very few PEGI 18 games there are in the store.
  6. [quote name='Servant of the Lord' timestamp='1351478615' post='4994915']<br />my games will eventually have to be released to Metro or else not be on Windows at all<br />[/quote] The desktop isn't going anywhere. Do you really think Visual Studio will become Metro only? Do you think any programmer inside of Microsoft that works day in and out using Visual Studio thinks that is the future of all applications? If you look closely at the new WinRT API you'll see it supports multiple Window objects in a single application. While you currently have no way to create a second window... that obviously won't be true forever. WinRT is "Metro" style apps only right now... within a year I expect the next WinRT revision will allow desktop applications as well. People seem to think WinRT and Metro is about killing the desktop and open distribution of apps... it is not. The real goal is replacing the 20 years of legacy APIs that keep Windows from being secure and performant on lower end devices. - Tom
  7. Supporting Windows 8 is easy and opens you to a huge marketplace. It would be just as foolish to ignore it as it would be to ignore iOS. For most existing DX11 games it wouldn't be more than a week of effort. You only need to do three basic things: 1) use the new WinRT APIs where they are required (the compiler will tell you). 2) add touch support (possibly the hardest task depending on your game). 3) don't include porn. In the end Microsoft only wants a safe and friendly marketplace for consumers. They don't care if your game is fun or even if it even sells a single copy. You can in fact put the game in their marketplace and use your own sales system that allows you to keep *every* single penny of a sale. This is the opposite of Valve and Steam... they just want games that will make them money (see the Greenlight popularity contest). If your game isn't that... you will not be allowed into the store. Period. - Tom
  8. Its a little rough around the edges... but i love the concept. In general i felt lost when i first started... i didn't first understand what team i was on. I didn't get a feel for what i was supposed to do. Some more screen prompts and maybe some tutorial like messages on first play would help. The AI vehicles didn't seem to move around, but they would shoot me when i got close. The AI biped robots seem to ignore me in the vehicle. I sort of expected them to shoot at me or at least try to avoid me to some extent. It wasn't clear that i cannot damage the overhead drop ships. Maybe a sheild effect that lights up when you shoot at it to make it look like my shooting was ineffective. Performace seemed great at all the highest setting, but i have a monster GPU. Can't wait to see the first multiplayer beta.
  9. What i'm struggling with is should i have separate sprite and UI systems in a 2d game? It seems like there is alot of the UI system that sprites can take advantage of... input, messaging, rendering, parent/child relationships, z-order, states, animation. So it seems like a perfect fit... or is it? I don't think i've seen these two things combined in the past. Any thoughts or experience to share?
  10. Sorry that was my anon post above... for some reason i got logged out.
  11. Here is some code ripped right out of my project. This is the stuff i have implemented in Lua. The only reason i haven't moved it to C++ code is because it's not a performance bottleneck and it's much easier to read this way. function lclass( name, super_ ) -- do some error checking! if type( name ) ~= "string" then error( "expected string class name!", 2 ) end if _G[ name ] ~= nil then error( "class name '" .. name .. "' already in use!", 2 ) end -- create the class table and it's meta table... local class_ = {} local class_meta = {} setmetatable( class_, class_meta ) -- store the typename for convient checking later. class_.__typename = name -- when the class instance is indexed we -- pass any nil to the function table. class_.__index = class_ -- when the class name is called we fire -- off instance creation... a fast C one! class_meta.__call = _c_lclass_create_instance -- this meta member is almost always the same so -- let's just add a default implementation if we -- don't have one already. if not super_ or not super_.__concat then class_.__concat = _lclass_concat end -- by default have tostring return the typename. if not super_ or not super_.__tostring then class_.__tostring = typename end -- do we have a super class? if super_ ~= nil then if type( super_ ) ~= "class" then error( "base is not a class!", 2 ) end -- store super for later. class_.__super = super_ -- chain the super class off our class meta. setmetatable( class_meta, super_ ) class_meta.__index = class_meta end -- register the class at the global scope. _G[ name ] = class_ end I originaly had this all implemented in the Lua script, but it was a major bottleneck in the code. It's much faster as C++ code that only uses the Lua API and not a wrapper like Luabind. static int lclass_type( lua_State* L ) { luaL_checkany( L, 1); int type = lua_type(L, 1); if ( type == LUA_TTABLE ) { lua_pushstring( L, "__typename" ); lua_gettable( L, -2 ); if ( lua_type( L, -1 ) == LUA_TSTRING ) { lua_settop( L, 0 ); lua_pushstring( L, "class" ); return 1; } } lua_settop( L, 0 ); lua_pushstring(L, lua_typename(L, type )); return 1; } static int lclass_typename( lua_State* L ) { luaL_checkany( L, 1); int type = lua_type(L, 1); if ( type == LUA_TTABLE ) { lua_pushstring( L, "__typename" ); lua_gettable( L, -2 ); if ( lua_type( L, -1 ) == LUA_TSTRING ) { lua_remove( L, 1 ); SHG_ASSERT( lua_gettop( L ) == 1 ); return 1; } } lua_settop( L, 0 ); lua_pushnil( L ); return 1; } static bool lclass_isclass( lua_State* L, int i ) { SHG_ASSERT( L ); i = lua_abs_index( L, i ); if ( lua_istable( L, i ) ) { lua_pushstring( L, "__typename" ); lua_gettable( L, i ); if ( lua_isstring( L, -1 ) ) { lua_pop( L, 1 ); return true; } lua_pop( L, 1 ); } return false; } static int lclass_create_instance( lua_State* L ) { SHG_ASSERT( lclass_isclass( L, 1 ) ); // the first index is the class metatable // which is followed by a variable amount // of arguments for the init function. int argument_count = lua_gettop( L ) - 1; // create the new object with the meta. lua_newtable( L ); lua_pushvalue( L, 1 ); lua_setmetatable( L, -2 ); SHG_ASSERT( lclass_isclass( L, -1 ) ); // see if the meta has an __init function. lua_pushstring( L, "__init" ); lua_gettable( L, 1 ); if ( lua_isfunction( L, -1 ) ) { // replace self with the function. lua_replace( L, 1 ); SHG_ASSERT( lua_isfunction( L, 1 ) ); // copy the new object then insert one as the // first argument and another as the bottom. SHG_ASSERT( lclass_isclass( L, -1 ) ); lua_pushvalue( L, -1 ); lua_insert( L, 2 ); lua_insert( L, 1 ); SHG_ASSERT( lclass_isclass( L, 1 ) ); SHG_ASSERT( lua_isfunction( L, 2 ) ); SHG_ASSERT( lclass_isclass( L, 3 ) ); // call the function. SHG_ASSERT( lua_gettop( L ) >= 3 ); lua_call( L, lua_gettop( L ) - 2, 0 ); } else { lua_pop( L, 1 ); } SHG_ASSERT( lua_gettop( L ) == 1 ); SHG_ASSERT( lclass_isclass( L, 1 ) ); return 1; } This is how i register the C++ code in the Lua state. // Register stuff for the class system. lua_pushcfunction( L, lclass_type ); lua_setglobal( L, "type" ); lua_pushcfunction( L, lclass_typename ); lua_setglobal( L, "typename" ); lua_pushcfunction( L, lclass_create_instance ); lua_setglobal( L, "_c_lclass_create_instance" ); Notice i overloaded the standard lua 'type' function with my own which recognizes classes. I'm split on whether type should return "class" or "my_class_name"... one day i'll figure that out. Finally to define and create an instance of a class in lua you do the following: lclass ( 'point2' ) function point2:__init( arg1, arg2 ) if arg2 == nil and typename( arg1 ) == "point2" then self.x = arg1.x self.y = arg1.y return end self.x = arg1 or 0 self.y = arg2 or self.x end function point2:__tostring() return "{ " self.x .. ", " .. self.y .. " }" end function point2:dot( point ) return self.x * point.x + self.y * point.y end // Create a point and use it. local new_point = point2( 1, 3.4 ) io.write( new_point:dot( point2( 6.4 ) ) ) Notice it's very much like how Luabind's OO system works with *much* lesss code (but Luabind has a few more features). Also many of these class/OO systems like to have a 'new' function, but IMO it makes little sense to have a 'new' when there is not a 'delete'. Hope this helps some.
  12. One thing i should mention is that it's not always faster. I haven't tested it, but i'm fairly certain that UnrealScript would beat Lua on slower platforms like P2s. This is because internally Lua treats all numbers as floating point values and these older CPUs handle them much slower than newer processors.
  13. Quote:algorhythmic: Although in the long run you'd want to design your own VM and compiler as lua would prove to slow for anything serious. Actually i don't believe that's true. Sweeney has said that UnrealScript is a 20x perf hit compared to C++ code. This is more than what is said of Lua code, 10x. Still i didn't want to go just on some offhand approximation, so i started to benchmark UScript vs. Lua (http://lua-users.org/wiki/LuaVersusUnrealScript). This is a work in progress still as i've had a hell of a time getting good timing results i can trust from UnrealScript, but i've finally found a reliable method and i'm going to be updating it today. So far i've found that Lua *is* faster than UnrealScript.
  14. A note on Luabind. I've used it for a long while on a puzzle project and found that it carries more overhead than i expected. Our puzzle game is 99% Lua code with just some low level stuff (image loading, rendering, sound objects,etc) written in C++. It was a risk as Lua is generally accepted to be a 10x perf hit to C/C++ code, but i felt it was an appropriate project to test the limits of Lua. I used Luabinds-oo system for all my pure lua classes and exported stuff that i thought would be faster in C++ like point2 and rect2 classes. When i tested it on my low end system (P2 266MHz) i was getting dismal performance... 10 to 15fps. So this set me out on looking for places to improve it. Originally i thought... hey if some Lua code is slow i'll replace it with a fast C++ function. That doesn't quite work out if your using Luabind. The overhead of the Luabind calls plus using luabind::object to query lua variables made most of my "fast C" versions of Lua functions very slow... slower than the originals sometimes. Since i had alot of per-frame temporaries in my Lua code (like point and rect obects) the instantiation overheads from Luabind were murder. I've since switched to my own pure-Lua OO system and it's at least twice as fast as Luabind's. I moved my point2 and rect2 classes to pure Lua classes with one or two functions overloaded in C++ (without using Luabind). On my low end i get over 50fps and on the high end (P3 2.8GHz) it hits ~600fps... really. So my message is Luabind is good and easy to use and works great for most projects, but it can bite you if your game is heavy on Luabind derived objects. Learn to use Lua via it's C-API. There is a learning curve to it, but it's a well designed and fast interface. You can find some more info on what exactly the bottlenecks were if you search for my posts on the Luabind list.
  15. You can always cast something to something else with old C-style casting. A* theA = (A*)theEclass; It's just a horribly unsafe habit to get into. Since you've designed yourself into a corner with the multiple inheritance you may just have to resort to such code thuggery.