I have had an idea for a game for a long time. Now I have come to understand that I can’t do it without learning some programming.
But I don’t know which I should choose?
I understand that this game I thinking of will take a long time to make and that it probably never will be finish but that’s ok, I just don’t want to start with one language only to figure out that I can’t make it with that one.
To give you an idea; I’m thinking of a virtual world game. I want time to past in the game affecting the world: crops growing, people to have hunger and thirst, day and night. Think the Settlers, Sims and Civilization.
Someone will probably say that why don’t I go and play Runescape but that one like many of those games are really just about fighting and I want a game about growing and making things. And it would be fun to make it myself.
My brother works with flash and he think I should learn that as he can help me with it but as far as I have seen there is no game like the one I want to make with flash (?)
It would also be fun if it could be a game you could play over the internet.
Anyone care to point me in the right direction, please?
Maybe you can do this with AGS? And I suggest learning Italian, because it's a nice language! ;D
Hmm, Flash (or actually the language in it is actionscript) is ok, but it won't work on all platforms (for example iPhone), you have to have the latest version of the player to play, it's not really aimed at coding strategy games and such, although there's plenty of examples that it can be done, and you can pretty much forget about more advanced 3d. Also some other options offer tools to help out and work faster.
Well since you're starting out, you'd probably want to start of your search with a game engine (if you're not familiar with the term look it up a bit on wiki or similar), AGS is sort of that but specialised in making (retro) adventure games, there is other software that's far more versatile.
Most of game engines offer basically a set of tools (like map editor, mesh and graphics importing etc.) and on a programing level they're about 2 or 3 steps above a programing language.
Now, why I'm mentioning game engines, well, as does AGS, they usually have a set of their own commands/language which is based on one of the basic programing languages but have some higher functions available so you don't have to program absolutley everything - such as AGS has a sprite editor where you can change the animation or making rooms etc. But they're based on the basics and you should know a programing language (at least enough to modify stuff others have done but you want to use in your project - AGS example might be using plugins).
As far as I can tell your best options are C++, C# and Python. They're the most popular and widespread. They come with their own software accessories like compliers, but you can get and download them from various sites, like for example for Python http://www.python.org/ .
All of the mainstream languages can basically do everything, depending on which API, game engine or other surroundings you choose, you'll need to know that language (granted some work on more than one).
To get started, go to a bookstore and get a book on a language you choose, it's as simple as that. If you want to learn other languages later, it'll be waaay easier.
Also it'll depend if you want to make a 2d or a 3d game, pricey or free, for pc or more platforms, what genre (you might wanna find a specialized one) etc. Here are 2 sites that should offer options:
http://www.devmaster.net/engines/
http://en.wikipedia.org/wiki/List_of_game_engines
Hope that helps a bit. You can of course always get somebody else to do the coding for you, but you have to offer something to the project as well and it's good to know limitations and pipeline (process/steps of creating) of the tools at your disposal.
By the sound of what you wanna make and examples of games, you can probably do with a 2d engines which are usually simpler to use and there's more options for small or no fees.
over the internet + helping brother -> flash, me says
Still, take a look at this (http://www.adventuregamestudio.co.uk/games.php?action=detail&id=1224). Maybe AGS could do that!
I'd actually say to check out html 5 or javascript or c#.
http://www.phoboslab.org/biolab/ is an example of a game written with html 5 and javascript. The reason why I would recommend this over flash is because not everyone has or likes flash, but all browsers have javascript and html. It's one of those situations where you could build the game into your site and be sure that everyone would at least be able to pull it up.
As for c#, it started as quite a slow but more visual, object-oriented offshoot of c++ but now it's pretty fast. Elements that would take you several hours to set up in c++, like guis, are very quick to do in c# and it the learning curve is a bit smoother I imagine.
But still with Flash or with html5, you don't actually get a standalone solution, you have to have a player/browser...
In my experience the language/platform with the best ease of use to power ratio is XNA with C#
XNA does limit you to windows but as a beginner, platform independancy should be pretty low on your list of requirements.
XNA also has the advantage of being heavily supported with a lot of tutorials and stuff around.
Yeah, I've been using C# (With a little XNA every now and again) for some time now, and I've been fully satisfied with the results. With XNA you can do 3D pretty easily, so if it's anything like RunEscape in that respect, it could make things easier.
Basically, you should be able to do what you want equally well with most of your options, but what you choose will change both the quality of the final product, and how difficult the initial coding will be.
I'm taking a short break from AGS, and so will have plenty of time to get even more familiar with C#, and possibly be a C# tutor of sorts...
Anyway: C# == good; Happy to help. :)
Thanks all for your answers, as I feared there is a lot of different things to think of.
I been looking at different game engines like Unity but I see there is a lot more out there. Thanks for the links.
I really love AGS but it feels like it’s not build for making games like those I mentioned earlier and even in AGS I feel that if I want to make more advanced game I will have to learn to script.
I think to that I should start with a 2D games and a one that’s free, as long as the fees don’t get too big. ;D
ProgZmax, that something to think of as well. But still to have someone to ask is a great help too.
Still, sounds like most of you say C# (don’t know XNA â€" have to look that one up)
Thanks for all help!!! (off to the bookshop we go…)
If you decide to use C# and XNA (which I also recommend), download Visual C# 2010 Express (http://www.microsoft.com/express/Downloads/#2010-Visual-CS) and XNA Game Studio 4.0 (http://creators.xna.com/en-US/downloads).
XNA is a wrapper for DirectX which basically makes stuff way more accessible.
Here is a page with a few beginner's tutorials:
http://www.xnadevelopment.com/tutorials.shtml
Quote from: BlueAngel on Mon 20/09/2010 12:52:33
It would also be fun if it could be a game you could play over the internet.
Can you easily make your game playable over the internet using C# / XNA?
Also, if you want your game to be playable on Linux / MacOS you would have to choose a different language (C++ / Allegro I suppose).
I´m a little confused over XNA, do I need to own a Xbox 360? ???
No
You don't need an XBox, it's just that the package is made for both PC and XBox (you make software in a way that with just a few changes, ie making the controls work with a gamepad and such will make it work on XBox as well) and basically Microsoft wants people to make content for XBLA. ;D
Ok, thanks! :)
I had experimented with C# and XNA a few weeks ago, but I had difficulties doing very primitive stuff. I tried to make a few cubes and let the camera freely move around/through them. I couldn't even do that.
I even looked at the 3D primitives tutorial script they offer, but was completely confused in how to make multiple cubes and having the camera have free roam with mouse and keyboard. With their script, it seemed that the cube was positioned relative to the camera, not to the world. It's a bad example script for n00bs, if you ask me.
:P I always get stuck on simple things when I'm learning something new. Then it's usually okay from then on.
Does anyone here know how to do this?
There are plenty of different languages, platforms and engines but there isn't really one that works best. It is kind of personal, so I would recommend you test several things and choose what you like the most. Even if you already stuck to something it never hurts to test different things, you might like it better.
Things you could try Flash, Javascript / HTML5, C++ and a lib like allegro or SDL, Microsoft's developer tools, Java, Python, AGS, ... what just pops in my mind
For me C++ and SDL is often the winning team, but I would also consider AGS as a real option. :D
Quote from: Ryan Timothy on Thu 23/09/2010 15:35:14
I had experimented with C# and XNA a few weeks ago, but I had difficulties doing very primitive stuff. I tried to make a few cubes and let the camera freely move around/through them. I couldn't even do that.
I even looked at the 3D primitives tutorial script they offer, but was completely confused in how to make multiple cubes and having the camera have free roam with mouse and keyboard. With their script, it seemed that the cube was positioned relative to the camera, not to the world. It's a bad example script for n00bs, if you ask me.
:P I always get stuck on simple things when I'm learning something new. Then it's usually okay from then on.
Does anyone here know how to do this?
If you want to make serious 3d games then I suppose learning some of the theory first helps (eg matrices and transformations). But, if you want to make 2d games in XNA you don't need to learn any of that, and it's much easier.
If you are not an experienced programmer, Game Maker is also a good choice. Its power compared to that of XNA is limited, but it's much simpler to jump right in.
Yeah that's the thing. I wanted to dabble in making some 3D games for experience.
I can do the whole models things. Importing and using them, angles, etc. I just for some reason couldn't figure out how to create a cube through scripting. I do understand matrices. The tutorial script does show how to make the cube, just not how to display it properly.
That's the only trouble I'm having with it.
There are 2 matrices to deal with.
The camera matrix, which deals with the models orientation relative to the camera
and the world matric which deals with the models position in the world.
I would suggest one of those matrices is not being updated as you move your camera.
Here's the 3D primitives tutorial (http://creators.xna.com/en-US/sample/primitives3D) that XNA offers. If someone could tweak that for me to use a camera matrix and a world matrix, I would give you cookies and hugs.
I'm completely lost with this example script and the viewing matrix of it all. So confused. :-\
I just want to make myself a little basic game for shits and giggles. I'm going to go off and cry now. :'(
Another vote for C#/XNA. The XNA framework is pretty well thought out and C# has a more friendly learning curve (and much less quirks) than something like C++. There are a handful of performance issues but they're usually not hard to work around you're not likely to be affected if just programming for Windows.
Plus Visual Studio is excellent for debugging and refactoring code, a reason why it is hard to recommend a HTML5/Javascript combo for a beginner.
It's also possible to target platforms other than Windows and the Xbox360 using some open source projects (Silversprite, MonoXna, XnaTouch) though these only support 2D at present. It does add some complexity to your project but it's worth the effort.
Maybe I'm just not very sharp in the legal department, but I really have tried my best to understand the licensing terms for Mono and yet I'm still uncertain what the deal is. From what I could gather, the Mono API is free and open source, yet in their on-line store (http://www.go-mono.com/store/) there's the proprietary Visual Studio Mono tools and also the MonoTouch devkit that only seems to run on Mac OS X. Is the latter really a requirement for developing iPhone/iPad apps? I mean, I don't mind paying to license a useful product, but I'm not planning to buy a Mac within this lifetime.
I would be very grateful if somebody could please clarify what the terms for using Mono for a commercial product are, and what if any limitations in platform support the free version has. Thanks.
Mono is free and allows you to target Windows, Mac, Linux etc. Novell products like MonoTouch and MonoDroid (for iPhone and Android) are built upon Mono and subject to licensing. MonoTouch is $399 for a single developer, which is quite steep but within the means of most indie developers.
There is an non-expiring evaluation version which which lets you run on the iPhone/iPad emulator, but you still need a Mac for this unfortunately.
Thanks for the answer, clarvalon. Mono is starting to look more and more attractive, though I'm beginning to feel that my grand plans for writing a cross-platform feature-extended (but editor-compatible) AGS runtime would be to reinvent the wheel now that you're so far into developing XAGE.
I really don't know where to go from here - there's so many creative AGS'ers writing ports, like you, or extending the engine's feature set with plugins, like Calin's been doing. It's awesome that this is happening, and I too want to take part in the community driven improvement and expansion of the engine, but it's slightly worrying that many of these advances are mutually exclusive. Doesn't help that CJ is so secretive about his vision for the future of the engine either, but I do understand he'd rather not appear to make any promises or keep being asked when a specific feature will be implemented. I digress, I know, but I just feel slightly anxious about the future of the game engine I intend to base my livelihood on for the next five years or so :)
Anyhow, many thanks for the explanation. It does suck a bit that you need a Mac OS X system to develop for Apple platforms, but I suppose I would need one to test Mac ports of my games on anyway :)
I doubt that Javascript will stick around much longer... considering how slow it is, it's showing its age.
For C#, mix it with NeoAxis Engine (http://www.neoaxisgroup.com/) and its web player, and you have one helluva way to make something AAA-class. With NA, you can make a simple shooter with no coding whatsoever, and knowing any bit of C# makes you almighty.
It's free to non-commercial use, $95 for Indie License lets you sell anything that doesn't profit over $100 000, and commerical license comes at $395.
Quote from: InCreator on Wed 06/10/2010 12:38:43
I doubt that Javascript will stick around much longer... considering how slow it is, it's showing its age.
Javascript is only becoming more and more important, and together with HTML 5 and the push from several companies to get off Flash, will almost certainly play a central role in web development for the next couple of generations at least. And Javascript optimization is a major focus for browser developers, which has led to great improvements in the last year or so.
In general, execution speed pretty much never leads to a popular programming language being abandoned (as computers get faster and compilers and runtime engines more optimized, why should it?). People have been saying that about Java for 15 years, and it hasn't happened.
To Ryan and anyone else out there who might find this useful: This (http://rbwhitaker.wikidot.com/xna-tutorials) is a collection of the best XNA tutorials I've seen to date. They are all written by the same person, so he knows what you know when.
It may or may not solve your problem. :)
Bookmarked! Thanks, wonkyth - only took a quick look on the front page, but just the attention to site structure make me feel this will be very useful.
Well I've been making some progress on my little 3D programming experiments. :P And I'm actually enjoying XNA quite a bit.
But I have a few questions for c# / xna that I don't quite understand yet.
Here's the first question:
namespace WindowsGame1
{
public class Slice
{
[...etc...]
}
public class Game1 : Microsoft.Xna.Framework.Game
{
Slice[,] Pizza = new Slice[10,10];
[..etc..]
I have a class called Slice and I'm making an array called Pizza containing that class. Now from what I understand, every variable in the Slice class would act just like a struct in AGS. Correct?
How do I find out what array index that I'm accessing?
For instance if I was accessing a function within the Slice class called Boob, like so:
Pizza[2, 4].Boob();
How do I find out that it was 2, 4 within the function? Without having to create 2 ints that store the indexes the moment I create the array.
Also, stupid question, how do I make a variable accessible to both of those classes? I tried declaring them outside the classes and namespace but it throws an error.
I could be completely wrong, but as far as my experience with oo-programming in general goes:
If you need to know it is element [2,4] then yes, you have to store these values in members of the instance.
Think of .ID, the AGS equivalent. Same thing. How else could you get them, and how to distinguish between [], [,], [,,], etc.?
I'm not sure about how c#/xna handles this, but with java at least you have to create the elements separately anyway. I.e. declaring an array isn't enough, you have to call the constructor method of every single element, otherwise every element points to null. As I take it you already know, that's the point where you assign the grid coordinates.
Pseudocode:
public class Slice
{
int i, j;
Slice(int i, int j) { // constructor
this.i = i;
this.j = j;
}
}
[...]
Slice[,] Pizza = new Slice[10,10];
for (int i = 0, i < 10; i++) {
for (int j = 0, j < 10; j++) {
Pizza[i, j] = new Slice(i, j); // create actual Slice instance and write i,j while at it =)
}
}
You don't have to do this; it depends on what you need the coordinates for. If you want Minesweeper fields to calculate their number of surrounding bombs; why not calculate it in some other class and use the array elements purely for storage?
As for the global variable, define it as a member of another class:
namespace WindowsGame1
{
public static class GV // global variables
{
public static int total_number_of_boobs;
}
public class Game1 : Microsoft.Xna.Framework.Game
{
GV.total_number_of_boobs = 22;
Like I said, all this applies to Java (I hope ;)); if something I said is wrong, please also ignore the rest of my post.
Yeah, that's what I was afraid of. I figured it was completely OO. Damn diddly dang it.
QuoteGV.total_number_of_boobs = 22;
And how did you know I was going to make a game with 22 boobs in it? Damn it, back to the drawing board. :P
Hmm i would discourage the use of a global variables class.
Try to keep your globals as static members of the relevant classes.
so instead of
GV.numberofboobs;
it would be
Boob.Count;
It doesnt make a whole lot of difference but its much neater and more intuitive.
as for the pizza/slice thing I dont think you should really need to reference the position of the slice within the class.
the slice class defines a slice which has no knowledge of its position in the pizza (i.e its parent) and so it shouldnt need to rely on that information.
AGS isnt really a good example since its not fully OO but a ViewFrame doesnt know which Loop its in and a Loop doesnt know which View its in. The same should apply for italian food.
Interesting points there Calin. I really should organize things per class, even if only for organization.
Quote from: Calin Leafshade on Wed 03/11/2010 17:48:35
AGS isnt really a good example since its not fully OO but a ViewFrame doesnt know which Loop its in and a Loop doesnt know which View its in. The same should apply for italian food.
Well, the way I see it, Italians are bad with directions which is why you must tell them where they are. :P
My favourite feature of object orientation is polymorphism. It has made my life as a game programmer a whole lot easier. Do check that out if you don't know what it is, or ask for more information.