Jump to content

  • Log In with Google      Sign In   
  • Create Account

Banner advertising on our site currently available from just $5!

1. Learn about the promo. 2. Sign up for GDNet+. 3. Set up your advert!

Josh Petrie

Member Since 11 Jun 2003
Offline Last Active Private

#5233584 Engine design, global interfaces

Posted by Josh Petrie on 08 June 2015 - 12:40 PM

This is a friendly reminder to play nice. This is the last time I'm going to edit out insults from the thread and bother trying to preserve the discussion. Next time I'll just nuke entire posts and issue warnings.



Have a nice day.

#5233013 Founding a game studio

Posted by Josh Petrie on 05 June 2015 - 02:02 PM

The risk inherent in Kickstarter is not that you won't get the funding, it's that you'll get the funding and then be unable to deliver.


This is not a risk at all, I mean what risk.. if you can't deliver nobody is going to sue you or anything. 



This is flat-out wrong and extremely dangerous. You should read Kickstarter's Terms of Service. If the OP funds a project via Kickstarter, he or she engages in a legal contract with those backers. Kickstarter's TOS says of this:


When a project is successfully funded, the creator must complete the project and fulfill each reward. Once a creator has done so, they’ve satisfied their obligation to their backers.

Throughout the process, creators owe their backers a high standard of effort, honest communication, and a dedication to bringing the project to life. At the same time, backers must understand that when they back a project, they’re helping to create something new — not ordering something that already exists. There may be changes or delays, and there’s a chance something could happen that prevents the creator from being able to finish the project as promised.

If a creator is unable to complete their project and fulfill rewards, they’ve failed to live up to the basic obligations of this agreement. To right this, they must make every reasonable effort to find another way of bringing the project to the best possible conclusion for backers. A creator in this position has only remedied the situation and met their obligations to backers if:

  • they post an update that explains what work has been done, how funds were used, and what prevents them from finishing the project as planned;
  • they work diligently and in good faith to bring the project to the best possible conclusion in a timeframe that’s communicated to backers;
  • they’re able to demonstrate that they’ve used funds appropriately and made every reasonable effort to complete the project as promised;
  • they’ve been honest, and have made no material misrepresentations in their communication to backers; and
  • they offer to return any remaining funds to backers who have not received their reward (in proportion to the amounts pledged), or else explain how those funds will be used to complete the project in some alternate form.

The creator is solely responsible for fulfilling the promises made in their project. If they’re unable to satisfy the terms of this agreement, they may be subject to legal action by backers


Failure to finish a project does carry the very real risk of legal action against the creator, and Kickstarter will not defend you. This clause in their TOS notwithstanding, you can generally be sued for anything, regardless of how valid that claim against you is. Completely spurious claims are often rejected early in the legal processing and at severe penalties to the person bringing the claim, and while no precedent exists in any legal system (that I am aware of) for a failed Kickstarter project yet, when you are talking about somebody failing to produce something after taking in a significant sum of money from backers you can reasonable expect that a claim against the creator would not be trivially dismissed.

#5232966 Engine design, global interfaces

Posted by Josh Petrie on 05 June 2015 - 10:27 AM

Singleton classes

...are strictly inferior to any of the other options you've listed. They're just extra boilerplate around a global. Usually boilerplate that's harmful or poorly implemented.


A class with all static member functions visible through a global instance



Another pointless abstraction; just use your third option (free, C-style functions). The only real motivating reason to use a static class is if you have a language like C# which does not permit global free functions.



Globally visible member functions, C-style



This is what I would suggest if you aren't going to use your forth option (passing the objects around) which I think is the best.



Passing around pointers to anyone interested



This is what you should use. It sounds like it's basically what you're doing, so that's good. One potential improvement you may consider is breaking up the interfaces you pass around, so you have more granularity in them. The typical objection to "pass all the things around" is "but then I just have to have a FooManager and BarManager and QuuxManager in every function!"


This is good. This tells you that your design is shit; having to pass the dependencies shows you how many dependencies you have (in a painful, hard-to-ignore fashion) and so you should focus on reorganizing things to reduce dependencies. One way to help this along is to break up the functionality of larger monolithic "manager" classes so you don't need to pass "huge" interfaces to things that only need a small subset of that functionality.


The "making your dependencies explicit" thing is a compelling advantage of the passing-the-pointers approach. Another one is that these interfaces are encapsulated in instances, allowing you the possibility of having more than one (perhaps for testing or for running two simulations concurrently but independently). A third is the lack of global accessibility: the fewer possibilities you have for a project to access globally-available systems and state, the easier it is to reason about changes and potential bug fixes. As recently as last week I spent a few hours tracking down a bug that was frustrating because the inputs to the function calls entering the code were exactly bitwise equal, but the behavior was massively different in two different contexts. The crux of the issue turned out to be access to a global state tucked away in some tiny, easy-to-overlook utility class function.


If you really, really don't want to pass your dependencies around, I'd only fall back as far as your third option: freestanding C-style interfaces. Ideally you never do this if the interface has any kind of state, because as soon as you introduce state to that API you run into the massive downsides of the freestanding interface approach (which are all shared in various forms by your earlier suggestions): it's bad for testing and it's bad for concurrency. 


Fundamentally the choice is simple: do you want global state, or do you want instanced state? Instanced state is generally better, as it's nice and siloed for testing, concurrency and isolation. Instanced state trivially degenerates to global state (if you want only one, make only one). Instanced state makes your dependencies explicit, but does require a little more typing to pass instances around. Global state prevents you from "accidentally" making more copies of the state than you expect, but in my experience this either never happens or happens with inexperienced/incompetent engineers who need to be taught that it's probably not a good idea to instantiate a new RenderDevice object for every new function they write (or perhaps the fallout of a bad API design that doesn't make it clear what the side-effects of the API are).


Everything beyond that choice is various ways to hang window decoration on one approach or the other. Most of that window decoration is, in my experience, dumb boilerplate crap and consequently of little redeeming value.


That said...


I think you'll get the most bang-for-your-buck by trying to direct your refactoring efforts to redesigning systems and subsystems such that they don't need the cumbersome dependencies you're currently having to carry around all over. This is a hard task, and one that's especially difficult to describe a general process for beyond the common sense (look at dependency, look at why dependency is needed, remove that need or move it elsewhere). But I think it's the better approach. If you provide more concrete examples of the some of the dependencies you don't like carrying and why you need them where you need them, maybe more specific advice could be given.

#5232957 Trying to find a job

Posted by Josh Petrie on 05 June 2015 - 09:44 AM

 I did 1 mediocre year and didn't even get to the actual computer classes because there are so many prerequisites which were strictly required despite my SAT scores exempting me from them...  I now have a year that I haven't been going to college, I sort of don't plan on going back and if I do I might change the major to business because I have been learning programming on my own by reading books.



This is a bad attitude. Fortunately, (maybe) it's the attitude of just about everybody who starts a computer science degree, the idea that they know better or should be exempt from some things. The sooner you disabuse yourself of this notion the better; if you don't, life is going to crush your soul in short order.


Computer science is not about programming, and there is incredibly useful information in most of those classes. Even if there isn't, the act of getting through those classes even though you might feel (justifiably or not) that they are pointless busywork is itself a useful skill. You will need to do precisely the same thing in the real world.


That said, a business degree would not be a terrible course of action, as it will also teach you useful stuff about things it sounds like you might want to do (run a business yourself). Going back to finish either of those degrees would be a good course of action. Not going back at all, probably less so: you are exposing yourself to significant risk in finding a job if working for yourself does not pan out.


I know that it will take some time before I can start making commercial games



It doesn't, really. If you can make a game now, you can make a commercial game now. 


Then it hit me, I wonder if there is some sort of job or something I can do which would serve as experience for my agenda. Is there anything out there for a programmer just starting off?




Quite unlikely. The fact that you don't have a computer science or similar degree is going to make you very low on the list of potential candidates in today's job market, which is filled to bursting with fresh college graduates ready to take on entry-level jobs.


 im probably wasting my time writing this because the world always expects people to have prior experience for everything. 



This is common lament, but it's not that accurate. Nobody sane expects prior industry experience for entry-level jobs. That's what an entry-level job is. Some studios don't hire entry-level programmers, for one reason or another, but most do. And many don't advertise such positions aggressively because they get enough people applying for more senior positions or unsolicited that can be funneled in to an interview pipe for an entry-level position instead.


But if you don't care about the job, there's plenty of possible options. You could work at a GameStop or similar game retailer, for example. I feel like that would be better than a generic fast food job since at least it's related to something you're interested in.

#5232825 Founding a game studio

Posted by Josh Petrie on 04 June 2015 - 02:03 PM

Do you think is it possible to realize something like this?



Yes. But I am not convinced that you current can, not to the specifications and through the process you're envisioning in your head. 


I ask you again,  what's the minimun number of people that I'd need to get everything done in a few years? What roles (art designer/programmer/consultant/audio...) should I search when I'm looking for people to put in my project? (Ik the question sounds bad)



One. If you can't do all the things you need to do, however, you have to find some other way to get that particular task accomplished. You should look for ways to fill in the gaps in your own ability or knowledge.


May I need a publisher or working and selling a game as indie is the same? What are the benefits and cons of having a publisher?



You don't need a publisher, and you probably don't want one. A publishing deal is another one of those things you might think you're "supposed to have," but it's unlikely to actually happen (publishers aren't generally going to take a risk on an unproven studio without a tangible product ready to go, that is, already demonstrably built). And you probably don't want it to happen, because while publishers give you money, they also generally end up owning the game and the intellectual property. You give up significant control over your project when you sign with a publisher in most cases, and as an unestablished single-person developer you are unlikely to be able to negotiate a favorable contract with a publisher. Put the idea of a publisher out of your head.


Do you have any source (book, website, ...) that can help me understanding better the process of making and selling a game?



People don't generally write books on that subject.

#5232808 Founding a game studio

Posted by Josh Petrie on 04 June 2015 - 12:00 PM

With that said, I thought that fundraising would be the best choice, keeping in mind the concept of Kickstarter, all or nothing, with all decisions taken after knowledge of the budget, and if the fundraising go wrong, I will not lose anything (at least in dream).



The risk inherent in Kickstarter is not that you won't get the funding, it's that you'll get the funding and then be unable to deliver

#5232775 Founding a game studio

Posted by Josh Petrie on 04 June 2015 - 09:40 AM

It sounds like you are mostly putting the cart before the horse.


You don't need to make a big production of starting to work on game projects you plan to sell. You don't even need to form a legal company, although if you're going to involve other people in the production process at all, you probably should, and there are potentially some tax benefits for doing so (discuss this with a certified accountant or tax planner).


In the US a good option for this is to form an LLC. This involves only a few forms and a small fee (consult the website or office of your local government for details), and it lets you have a legal entity shielding you from total liability and provides a useful entity to assign intellectual property to in the event you bring a partner/collaborator/employee on.


As for employees: this is where you start to get ahead of yourself. Stay far, far away from hiring people as you can. You can bring on collaborators or partners (be sure to consult a lawyer and draw up contracts stipulating the ownership of their own, terms of their work, compensation, et cetera), or you can purchase work from third-party artists/developers/whatever. But as soon as you start talking about "hiring" people, people's expectations of that arrangement change, to the tune of expecting a salary and benefits. Salary alone can run you anywhere from 60k to 90k per year, approximately, depending on who you are hiring for what and where they are physically and in their career. Benefits are another several thousands of dollars on top of that. At this point you've gone from maybe a few hundred dollars in LLC filing fees to needing have a cash flow that will support nearly 100k a year. That's a huge jump, and you don't even have a product yet.


And the project? "A zombie-survival FPS" is totally doable, but "astonishing graphics" tend to cost money, both in terms of an artist who can produce them and a programmer who can build or leverage the technology to render them well in the game. That's starting to feel like where you'll need to scope the project back because you may not have the capital; if you need both a programmer and an artist because you can't do one or both yourself you're now talking about two employees, so maybe 200k a year. Conservatively.


To more directly answer your questions:


How much does it cost, first to found, then to run a game studio (yearly)?



If you can't at least come up with ballpark numbers for this yourself, you really have no business running a studio. Every company is going to operate differently, with different costs and overhead, and managing and planning for that is going to be a critical part of your role as the founder of the studio. Unless you can afford to simply hire somebody to manage it. Sit down and think about what you (think you) want, specifically, and then go out and start doing research on those specific things. How much do programmers cost on average in your area? Are you going to want an office? What's office space rent like in that area? Electrical and internet bills? Et cetera. 


What are the roles in a game studio and how much everyone should be paid?



You don't hire the positions "a studio should have." You hire the positions you need. Ideally, in the beginning, that's as few as possible (zero). But if you have a critical gap in your skills, you're going to need to fill that. Hiring somebody to do it is one way, but establishing contract work arrangements is probably better. Frankly I'd worry less about who to hire and for what positions and more about finding a good accountant and a good lawyer and how to pay them. Rather than try to staff up to make your dream project, find a project you can make yourself without hiring anybody, maybe buying a few assets or whatever.


Do I need to have already founded the Studio to start a Kickstarter campaign?



Individuals can run KickStarter campaigns, as far as I know (consult the Terms of Service for details). So no, you don't need to have formed the company, although it's probably a good idea for the liability shield. What's more important is having an actual product and a plan that will convince people to hand over money and be something you can actually achieve. I would try to build as much of your project as you can without even considering Kickstarter. Not only will you then have something that more closely resembles the final product (which is more interesting to donators), but you also reduce the risk the project will fail (since it's further along) and the scope of the things you're asking for Kickstarter money for are likely to be smaller. For example, maybe you can build your game with cheap/free assets off Turbosquid and the like to get the gameplay, mechanics and technical details down. Then you can find a good artist, work out a contract, and engage a Kickstarter campaign to cover the actual cost of that contract to get your final art in the game.


I really think at this point the only things you should consider doing are:

  • form an LLC or whatever the equivalent is in your area if you're not in the US
  • work on your project yourself, without involving the hiring of employees or the pomp and flash of a "studio" until you have something resembling a fun, salable product
  • then go from there

#5232388 Defning a namespace class in a header file

Posted by Josh Petrie on 02 June 2015 - 09:22 AM

I've removed some of the controversial posts (and related discussion around them). Now back to your regularly-scheduled thread topic.

#5228616 System/Component Design: How do you do it?

Posted by Josh Petrie on 12 May 2015 - 12:17 PM

What do you mean by "component?" Do you just mean "component" in the sense of "some part of your code," or do you mean "component" in the sense of "component-based entities systems" that everybody loves to agonize over these days?

#5228378 USA official buildings and symbols in a game? (law issues?)

Posted by Josh Petrie on 11 May 2015 - 10:15 AM

Well, if you like to play games with your livelihood, that's your business.


But since you asked: my tolerance for what I perceive to be pointless risk is zero. I wouldn't use either without talking to lawyer.

#5228373 Sound Effect using SlimDX.Directsound

Posted by Josh Petrie on 11 May 2015 - 09:37 AM

And you've tried what, precisely? Without demonstrating some indication of what your code currently looks like, what the desired result is, and what you get instead, there's very little we can do to help you.

#5228371 USA official buildings and symbols in a game? (law issues?)

Posted by Josh Petrie on 11 May 2015 - 09:34 AM

I wont have much money to spent on lawyers



Whenever you say this, you need to follow it up in your head with "so I don't have much money to spend on legal issues... like getting sued... either." 


If you can't afford a lawyer (how do you know this? have you actually gone to one and asked for a quote? they'll do that, you know -- talk with you beforehand to give you some idea of the time and thus money it will take to go over your issue), then you certainly can't afford to do anything that would risk legal action being taken against you.


Thus, don't make any attempt to toe any legal lines. Use the rule of thumb that "if you have to ask if it's okay, don't do it."

#5228005 Back Face Culling idea

Posted by Josh Petrie on 08 May 2015 - 02:06 PM


Any issues with this? It would save lots of multiplications and additions





It wouldn't though. To get the view vector in model space you have to invert the appropriate matrix, which is (potentially) non-trivial. Plus, you're already going to be doing the transforms to bring the triangles forward into view space anyway, so you're potentially actually doing *more* transforms in the worser cases.


Finally, the current approach works at the granularity of the primitive (triangle); to do what you're suggesting most-efficiently you'd want to do it at the level of the "object" (collection of primitives that could share an inverted transform from earlier) which is additional state for the pipeline to manage that it currently doesn't manage.



The multiplications involved are unlikely to be the bottleneck for most applications these days anyhow.

#5227786 DirectX 11 Frank Luna

Posted by Josh Petrie on 07 May 2015 - 09:37 AM

This is probably due to the encoding of your shader file. Make sure they're ASCII; you don't want a byte-order mark at the start, the compiler won't handle it well.

#5227521 help~~how to recreate direct3d device in dx11 like dx9

Posted by Josh Petrie on 06 May 2015 - 09:29 AM

Have you read the documentation?


Device removal in D3D11 is more serious (and should be less common) than loss of the device in D3D9. You basically need to recreate everything, including re-initializing the device itself.


That said, if you get this error frequently that suggests a more serious problem. You should only get that message under normal circumstances when the device is physically removed (or if the drivers updated). You can try calling GetDeviceRemovedReasonto find out what's up. Bad drivers or a bad card may be involved.