Jump to content

  • Log In with Google      Sign In   
  • Create Account


Member Since 18 Oct 2005
Offline Last Active Today, 12:56 PM

#5142639 Using MakeHuman..is it cheating?

Posted by SimonForsman on 27 March 2014 - 11:09 AM

Does it matter if it is "cheating" ?


If you are doing this to learn then it is a good idea to use tools that let you focus on the part you are trying to learn.

If you are doing it for fun then use whatever you think is most fun :)

and finally, if you are trying to create something, use whatever tools you're most productive with. (The only thing that matters is the end result)

#5141116 Is hatred for unity justified?

Posted by SimonForsman on 21 March 2014 - 03:44 PM

He does have a point about the initial loading time, even for small scenes. A lot of companies create their own scene exporters in order to create their own loading pipeline.


The type of games made in Unity is often a simple physics based platformer. This is because Unity is an amazing tool for creating that kind of games, but no. Just because Unity is inviting (and to some extend does all the work for you) to make that kind of games it doesn't mean you have to create the game like that. A "mistake" a lot of people do is to make their games too physics based, because it is so easy. So to some extend I understands what he is saying, but there are tons of games not like that.


No I don't think his hate for Unity is justifiable. If you care about tech then maybe yes, but if you care about games then no.


Related: http://blogs.unity3d.com/2012/04/01/semantic-game-builder-interface-to-be-integrated-into-unity/


Are people actually using the built in editor and scene system for anything beyond prototyping or small games ?

For pretty much any reasonably large project you'll be far more productive with a more specialized system.

#5140473 Pair Programming Revisited

Posted by SimonForsman on 19 March 2014 - 05:44 PM

So a little background about me. I've been developing software in the back bedroom for many years, along with my brothers. Worked for a dozen different companies in varied team sizes, on many successful projects over the past 8 years. So I would consider myself pretty experienced (Games, Applications, Web Applications, C++/Assembly/Flash/PHP etc. you get the idea).


So now, on my most recent contract. The most highest paying one I've ever had, a very important UK project, but arguably one of the more easier projects I've been involved with, and working alongside generally less talented developers than most of my previous roles. I've come across this new buzz word called "Pair Programming" (PP).


Now I'm not sure how I've managed to avoid PP for so long in my career. But apparently, PP is not only the solution to improving code quality, but is apparently the only way any good software was ever built, and any project that has been successfully developed without PP is a miracle.


(I personally think considering the importance of the project we're working on. We should take the hiring process more seriously and hire quality developers i.e. nerds. over hiring 'politically savvy' sub-standard developers and coming up with various processes to improve their output on such an important project.)


*end of rant*


Now looking at this objectively. If I do a google search for PP. I can see a lot of studies that report PP to be more productive, improve code quality, and reduce bugs. I can't understand this when most programming tasks are trivial (or at least seem trivial to me). Once the architectural aspects of a task have been discussed. A good programmer should be competent enough to implement the architectural specification. Then once implemented, another developer should be able to code-review it, just to pick up any small programming mistakes (not architectural mistakes as that has been cemented before coding).


Looking back on an old topic on GameDev.net about PP, seems mostly negative views on it. Perhaps GameDev.net developers have a different view, or perhaps the majority of developers have a different view, and these studies are skewed?


I think the problem is that in most projects. There are 10-20% of programmers that are truly talented and motivated. They are responsible for the core, and even much of the bulk of any software project. The other 80-90% lack talent and/or motivation and don't contribute much (especially when you factor in the number of bugs, and hacks they introduce). PP works well for them.


"I find with PP I'm much more productive" - Perhaps thats because when you work alone, you're not focused, and browse the internet most of the time. Or perhaps thats because you're not as good as your pair, so your output is being raised (perhaps your "better-half" is less productive - assuming he is motivated on his own).


"I find with PP we spot errors like semicolons, and brackets more quickly" - Missing semicolons and brackets is simply unacceptable. If you make these silly mistakes shame on you. If it takes you a long time to spot them after the compiler has helped you find the line, then well I think you need to find new profession.


"I find with PP we come up with different solutions to solve a problem" - No, discussing how you're going to tackle a task gives you different solutions to solve a problem, this is architectural design. If you have discussed a problem properly before writing a single line of code. Then there are very few ways of implementing the code, especially once you follow an agreed upon coding standard/convention.


"I find with PP I learn lots" - You can also learn a lot just by reading or reviewing the code, instead of interrupting someone's train of thought. I actually find I learn much better by playing with the code, figuring out how things work and developing a complete map of the code base, instead of relying on someone else to tell me all the answers.


"After a long day with PP I feel satisfied" - This is very interesting. Considering programmers tend to be introverted. I find programming solo, very therapeutic, and I can code into the evening with people reminding me to go home. Makes you feel pumped and really good about yourself. With PP, I start to get a headache in the afternoon, and just want to go home. It's painful, emotionally draining. - I don't consider myself that introverted, I enjoy talking to people, helping them with problems, and chatting up the female staff. I just don't enjoy pair programming. I feel like an impatient kid jumping up and down watching a programmer slowly write code, and constantly correcting them, and trying to convince them to do it my way.


It probably is a case of talent and motivation. I've done a lot of pairing with others over the past 6 months. But when I think of all the times when I've paired with other people. I've felt that it would've been of better quality on my own (they disregarded certain safer techniques that I would've used), and done quicker (they seemed tired, and not properly focused). While they felt that they produced better quality code with me, and that they were productive.


(Weak Programmer + Good Programmer) / 2 = Average Programmer.

(Lazy Programmer + Motivated Programmer) / 2 = Average Programmer.


In closing. I have a habit of checking the git blame (or svn annotate) whenever I see some pathetic excuse for code (dirty copy and paste, badly named variables, not following code conventions, lazy hacks etc.). So I can tell the programmer what I think of his work. However, many a time, I've done this, and to my surprise I discover that the work was paired on (in the comments we mention the initials of who we paired with on the task). So I'm not convinced that pairing is the solution to improving code quality. Finding decent programmers is the best solution (which requires a combination of good pay, and more importantly good interview and selection process). Perhaps our education system is swamping the software industry (especially big companies) with graduate programmers who are neither motivated or up to the standards of the older generation of back-bedroom programmers.


It could also be that I'm not much of a team player biggrin.png - Although I actually enjoy discussing and planning things with others. I'm just old fashioned in that I like to do the work on my own.


Coming soon: Quad programming, the only way real software is made.

("We tried making a hello world program, and were scratching our heads trying to find out why it wouldn't compile. My number 2 couldn't smell it. Number 3 suggested reading the error message, thats what his iPhone says. Number 4 guessed it was a pesky semi colon...")


You are forgetting a few things though, less experienced programmers learn alot while paired up with a more experienced developer and the experienced developer will improve his teaching skills at the same time (This is very valuable to a company in the long run), On large complex projects it is very hard for any single developer to be an expert on everything (and even if you have a company filled with übergodprogrammergurus they still won't be familiar with every part of a large codebase), pairing helps spread knowledge within the company. If the programmer who wrote your <insert component or system here> gets sick, quits etc. it really helps to have other people in the company who are familiar with the work he has done.


Pair programming isn't primarily for your benefit or your partners benefit, it is for your employers benefit.

#5140136 Editing a Python Script during Runtime?

Posted by SimonForsman on 18 March 2014 - 04:27 PM

If you only need to reload scripts during runtime you could just toss in a button that reloads the script for you. (or opens a file dialog where you can select new scripts to load), or throw in a console where you can enter your own python code and have it execute immediatly.


If you need to detect when a file changes you can look here: http://stackoverflow.com/questions/931093/how-do-i-make-my-program-watch-for-file-modification-in-c

#5139088 Is Windows phone worth it vs iOS and android?

Posted by SimonForsman on 14 March 2014 - 04:50 PM

Thank you for that long answer, but what I am really asking for is if someone have released on all these platform and what their "stats" are. Like if their income was 70% iOS, 20 Android and 10% Windows phone for example or if Windows phone maybe just had 0.05% of their income from the game. 


It can vary greatly between games and sales isn't everything, the exposure you get on a less crowded platform can greatly boost your sales on the bigger platforms.


Developers buy tens of thousands of copies of their own games and pay people to write reviews and use other shady tactics to push them up on the lists, EA and other big publishers are releasing high profile games using established brands for iOS and Android, You need to advertise your game very agressively in order to stand a chance on those platforms or get lucky with some viral youtube videos.


On WP things are alot easier. Less competition makes it easier for people to actually find your game and if the WP users like your game you can be fairly certain that the iOS and Android users will find out about it (Even WP users have friends).


This is pretty much the same situation as on the desktop, if you are a small unknown indie developer you want to hit as many platforms as you can in order to maximize your chances of getting noticed, the smaller the target platform the easier it is to stand out.

#5136722 The inevitable God object

Posted by SimonForsman on 06 March 2014 - 02:21 AM

This will probably not be well recieved; but I think just packing everything into a God Object which is globally accessible is just much simpler then all this hassle.


From anywhere in the code just pass down the God Object or have it be a Global variable with all its members/managers public, then from anywhere add/remove/update players/state.


The problem with such an approach is that you'll very easily end up adding/removing/updating players/state from anywhere which makes your code difficult to maintain(and it tends to get worse as your codebase grows), difficult to test(very little will be testable in isolation) and a pain in the arse to version control (the more spread out your changes are the more likely you are to run into conflicts that need to be resolved manually when merging commits).

#5136720 Switch or Not?

Posted by SimonForsman on 06 March 2014 - 02:09 AM



In the console?

No, you'll need to start working with graphics. Select an API and learn some of its basic functions (creating a window, getting user input, drawing graphics, etc.) then start making simple graphical games with that API.
That would be directx.
Cin >> isn't for input in a gui?



No, cin reads from standard input (console, pipes, etc). Most GUIs are event driven so you get input by handling the input events.

#5136168 The inevitable God object

Posted by SimonForsman on 03 March 2014 - 02:10 PM



Anyone else experiencing that most of your code end up in a God Object?


Over some time I have toyed with several different programming ways. From pure procedural to strict OOP. As I program my game I encounter problems such as how to move messages between objects. Even messages across a network. These messages has to be properly identified, dispatched and call the correct methods. All messages are derived from a base object such that they can all be stored in the same STL container.


We can take advantage of double dispatch to avoid down casting these message objects. However now a message has to be accompanied by all the possible objects it may interact with. So in order for this message to have that acces, we need an interface that holds everything, the God object, or GameManager or whatever.


C++ has so many quirks that most of my code are based on solving these quirks rather then focusing on the game itself.


Am I alone, is this a noob thing, or what?


Why does a message need to be derived from anything ? , a message should preferably just be data so you should be able to use the same class/struct for all messages (no need for inheritance), if your messages have methods then they're either improperly named or are doing far too much.


Personally i would have a message dispatcher object, senders can then send any message they want to the dispatcher and interested objects can implement a listener interface (or inherit from a pure virtual listener class in languages such as C++) and then just subscribe to messages based on type, source, etc.

Then the dispatcher just have to call a callback method in the listener interface/class when a matching message arrives and leave the exact details of how to deal with the message to the recieving object. (messages can then be a simple struct with a type identifier, basic information about the sender and some data)

#5135437 Unmaintainable code

Posted by SimonForsman on 28 February 2014 - 01:04 PM


This program looks like it might have been developed using the following rule: you can only add new code, you can never delete or change existing code.Actually, that gives me an idea...

I like this new paradigm, I think the first two years of college should strictly enforce this, just to drive into the minds of students how vital it is to think ahead, before you begin writing anything.

Is their any formal name for this scheme, or should it be called the rip-off programming paradigm.



write-only programming ?

#5134990 C++ IDEs for Linux

Posted by SimonForsman on 27 February 2014 - 04:10 AM


I guess this was one of the main reasons SDL dropped LGPL in favor of zlib. 

Nope, it was literally SDL developers noticing people like you that get nervous when they hear "LGPL". So they changed their licence to something else that was less likely to flip the switches of some people.



There is also the issue of iOS, WP and consoles, complying with the LGPL on a restricted platform is virtually impossible.

On Android you can be compliant but due to the lack of dynamic linking it is still a hassle. (you need to provide object files for re-linking the apk just like you would if you used static linking on the PC)


Using QT with the LGPL license on Win/Mac/Linux isn't a problem, just link dynamically.


These days when a large number of games has to run on mobile devices and consoles the LGPL is becoming very restrictive and its best to only use LGPL libraries for tools or for Win/Mac/Linux ports.

#5133436 May I use Warcraft3 models/textures/etc. in my Android/iOS Game?

Posted by SimonForsman on 21 February 2014 - 09:16 PM

May I use Warcraft3 models/textures/etc. in my Android/iOS Game?


You need to obtain permission from Activision Blizzard if you wish to use their assets.

#5131370 What's in a language that makes you like it

Posted by SimonForsman on 14 February 2014 - 01:28 PM

Do you mind if a language is slow or fast like C or C++? C++ seems to be used by most because of its speed and the fact that its multiparadigm.
Why hasn't any language be made as fast as C? Lua is like 10x slower than C even though it's like the fastest scripting language.
What would happen if lua were a compiled language?


Languages don't have "speed". their implementations do. (Allthough some language features in higher level languages can make certain optimizations very difficult for a compiler to perform) JIT compilation as it is used by Java and C# however has its own performance advantages but it is difficult to take advantage of them on the client due to the long startup delay you get if you try to do heavy optimization when the program starts, This is one of the reasons for Javas popularity on servers. The server JVM can greatly outperform todays C and C++ compilers in code that makes heavy use of dynamic dispatch for example.


Languages such as D and Go have the potential to be as fast as C or C++ (or even faster if they become more popular) but they're not popular enough (and probably never will be due to inertia), currently the best Go compiler is quite a bit slower than Oracles Java VM or Microsofts .Net.


The compiler is ultimatly responsible for generating "optimal" assembly. The opensource community, Microsoft, (Apple ??), and CPU manufacturers push millions of dollars into compiler R&D primarily for C++ due to its popularity(The OS and/or CPU with the best performing C++ compiler has a huge advantage over the competition since the compiler has such a big impact on the final performance.


Microsoft and Oracle also push quite a bit of resources into the .Net and Java runtimes but they are far harder languages to optimize due to the safety requirements (Java also suffers quite a bit from its early focus on the Sparc CPU architecture(parts of the language can't run natively on a x86 CPU).


When it comes to scripting languages such as Lua, Python, etc the only sane option is interpretation and JIT compilation (Having to recompile your scripts using a AOT compiler before you can test even a minor change would remove one of the biggest advantages you get from a scripting language and many of these languages allow you to create and modify functions, classes, etc at runtime and have the changes take effect immediatly (this is a huge advantage when you are tweaking gameplay code as you can enter your changes using a in-game console while the game is running, see the result immediatly and save or discard your changes as you see fit rather than having to recompile and restart the application every time you wish to test a small change)

#5131207 What's in a language that makes you like it

Posted by SimonForsman on 14 February 2014 - 01:11 AM


Do you know Malbolge is named after the 8th circle of hell? To criticize it for being hell to program with is criticizing it for living up to its name.

that explains and is really weird



Google esoteric languages , there are tons of them, most of them are created as a joke or simply to test how far you can take language design and still get a "usable" result

, They are not intended to be used for real work.


Most serious programming languages have atleast some advantage.


Also, you don't have to put a '?' to print out anything in php ?


echo 'Hello World';


is all you need in php.


The <?php <% <? or <?=(shorthand echo) tags are used to tell the preprocessor where the php block starts, Since php code is frequently inserted in HTML documents it has to be contained in a tag(as anything else could cause a conflict with HTML text content) and starting that tag with a special character (i.e '?' or '%') avoids conflicts with future html tags.

#5130276 Anti-copy authentication

Posted by SimonForsman on 10 February 2014 - 07:12 AM

Thank you SimonForsman!


I'm really convainced by your arguments, But are them also valid for mobile games (Android, windows phone, iOS)?


iOS requires the user to jailbreak their phone in order to pirate games, most users don't so i wouldn't bother on iOS


on Android piracy is a bit easier as it allows users to install from sources other than google play but in general people who have the ability to pay (i.e, they have a creditcard tied to their account) won't have any problem paying a few dollars for a game, most pirates on mobiles are kids who wouldn't buy your game anyway, a F2P model can be far more profitable on smartphones in general (as it allows wealthy people with poor spending habits to throw hundreds of dollars your way while the kids and cheapskates still provide some ad revenue and help your store rankings)

#5130247 Anti-copy authentication

Posted by SimonForsman on 10 February 2014 - 04:41 AM

Thank you very much for your answer!


Isn't it useful to make mail or sms verification? (or voice recongnition ph34r.png dry.png )


For a singleplayer game ? No, the normal pirate procedure is to simply bypass the verification code so it doesn't matter what you do, keep it simple to reduce the hassle for paying customers, if you want to add complexity to slow the pirates down that complexity should be behind the scenes(paying customers shouldn't have to know its there). (obfuscated code, redundant checks, encrypted files and other measures to make bypassing the verification more timeconsuming) but it takes significant effort on your part and probably won't buy you more than a few days or even just a few hours,


If you absolutely want a decent DRM scheme for a offline singleplayer game you should just license something like Tages instead. It is pretty obnoxious to crack(and has to be cracked individually for each protected game) which is good but its driver has also caused a few really serious issues such as bluescreens on system boot for example, requiring a re-install of the OS or a manual uninstallation of the driver from safe-mode which is pretty darn bad. (especially since only paying customers have to suffer from those side effects) so its a trade-off. (AFAIK the latest version of Tages is stable and their major problems are mostly in the past but DRM kernel drivers are always a big risk)