Go on, ask me anything.

My first advice is, don’t :smiley: There’s almost no money in it unless you get onto one of the larger distribution platforms such as Steam or Direct2Drive.
The most efficient way to get people to know about your game is to give out free copies to journalists like this “candy” stuff they talk of in the States.
For my $200 I’d get advertising on ProjectWonderful. We spend about that each month on PW; not nearly enough really, we should probably spend more like $2000, but we need a lot more ads. And probably more products. If you’re releasing your first game chances are your advertising is going to be wasted.

Cas :slight_smile:

If you were going to start again from the ground up. What would you do? Like programming language, first game, business strategy. Assuming no prior bias towards java already. Would you use java anyway? assuming you hadn’t already had years of experience with it?

I’ve noticed you mention downloadable games aren’t really the way to go so i’ve grown curious.

I just wanted to clarify something.

I think cas had meant by applet/streaming/in browser games aren’t the way to go.

I think a buy/download or a free/download is still the way to go (and soon the only?)

Unless I’m mistaken…

edit:

princec:
Where can I find a Chaz?
Where did you find yours?

The only reason I used Java is because I was already using it and proficient enough, and it’s easy. I didn’t have a plan to support Linux (or even Mac for that matter) at the beginning. Now they’re a significant portion of revenues so definitely in retrospect that was quite a lucky decision. Nowadays… shamefully I think I’d admit that C++ may be a wiser decision, if only because I’d have some sharper skills for iOS and native Android coding.

My first game nowadays would be to do an online-only game. In fact we’re only going to do one more game that can be played single-player then we’ll probably give up on it. That also describes the business strategy too! I don’t know what style of game it’d be, because really I’m quite blinkered and only likes what I likes, if you see what I mean. Generally this means blowing stuff up.

Cas :slight_smile:

Browser-based gaming’s just another giant “niche” which has the advantage of extremely low barrier to entry for the player and disadvantage of requiring permanent internet connection, and a perceived throwaway value. There’s money to be made in it - just everyone else is trying to do it too. Competition is intense.

Free/download or buy/download is working for us, but only because of our wonderful patrons, Humble Bundle, Inc. and Valve.

There are a whole bunch of other niches and platforms you can target (though generally not with Java): iOS and the App Store; Android; XBLA/XBLIG; PSN & minis; Facebook games; browser MMOGS; and more that we don’t know about because if we did we’d be rich.

Chazzes are rare beasts. I’ve known this particular Chaz since we went to school together, about 27 years or so.

Cas :slight_smile:

Battlefield 3 FTW!! Oh wrong thread? sorry :persecutioncomplex:

How hard would it be to switch a project from JOGL to LWJGL, and is it worth it?

We started with LWJGL when we knew nothing about openGL and quickly fled to java2D to catch our breath for awhile. When it became evident that we’d need OpenGL, we switched, and the first search results obviously yielded JOGL (we didn’t really make the connection with lwjgl at the time).

We use JOGL’s shader program loader and API, their extremely easy to use text renderer/outliner, and an OpenGLGameWindow class with JOGL FBOs. We have our own keyboard input already built and handled by our own classes, and are using the 3d Sound system library from paulscode, so the input and openAL modules of lwjgl wouldn’t be too helpful.

From your perspective what are the big advantages of lwjgl and is there anything we won’t be able to do with JOGL?

JOGL is functionally identical to the GL component in LWJGL, but the style of LWJGL more closely matches the C APIs in some ways. There’s no real point switching if you’re already committed.

Cas :slight_smile:

Thanks for the extremely quick reply! My roommate and I both love revenge of the titans.

I was more nervous about the innate ability of LWJGL to support cross OS and cross platform, but this is probably just something I’ll end up looking at your source for and implementing our own way :-X

Right now we’re working on some kind of map editor to produce and serialize our game entitys and levels. Ours is planned to be somewhat of a “2D Borderlands”, in the style of metroid and castlevania, but with the loot collection, combat oriented gameplay, RPG Quests/leveling, and multiplayer of Borderlands/Diablo 2/Fallout. Not quite TD/RTS, but I’m sure we will probably have questions along the way since you are being extremely gracious :slight_smile:

How much shader and FBO/VBO technology do you use? We’re concerned about compatibility with integrated graphics and were wondering what your workaround for this is. Basically our entire rendering pipeline depends on an FBO that we use to draw the scene. Changing from HDR to non-HDR rendering is easy enough, but scrapping the entire FBO framework seems pretty nasty :frowning: We use a mixture of fixed function rendering with shaders for lights, shadows, bloom, and tone mapping.

We use VBOs exclusively but no FBOs or shaders yet.

Cas :slight_smile:

[quote=“princec,post:290,topic:36432”]

With the first point I refer to the calls you make to the Sys object that is supported by LWJGL for getting things like the clock accuracy and such in your game loop (which is pretty daunting, I’d say :X). I am not aware yet if this is handled by JOGL natively or if it’s done through java.

Do you do any interpolation in your game loop? I know there have been several threads on the weird stutter that occurs about once a second in some folks’ loops due to timer issues. My partner is convinced that we need some sort of interpolation algorithm, i.e. http://gamesfromwithin.com/casey-and-the-clearly-deterministic-contraptions, but I hope and pray that something like fullscreen mode will fix this. I just can’t seem to find a consensus on what’s actually causing the stutter.

EDIT: Fullscreen fixed it. Now we just get some screen tearing >_>

How does the ROTT DRM work technically ? I mean if you have the personal data, which flicker up on the title screen for a few seconds, in a plain text file, one could just change it right ?
Thought about this in a variety of ways. … Compression, Encryption…
How do you automate this, so that the build a user gets already has the info in there, without you having to do each build so to speak ?

so princec

whats the agenda in grand scheme of things?
Are you still working on RoTT polishing/updating/marketing

or are you working on any new projects?
I know you mentioned your next big project would be online, any idea on genre or any info?

[quote]With the first point I refer to the calls you make to the Sys object that is supported by LWJGL for getting things like the clock accuracy and such in your game loop (which is pretty daunting, I’d say :X). I am not aware yet if this is handled by JOGL natively or if it’s done through java.
[/quote]
Sys is implemented for all platforms in LWJGL and works the same way for all of them.

[quote]Do you do any interpolation in your game loop?
[/quote]
Nope. If the game is running at less than 60fps we run extra logic, assuming the logic is running faster than the rendering. If the logic is running slower than the rendering we’re flat out anyway and interpolation is just going to make things feel crappy.

Cas :slight_smile:

It’s not so complex - the user’s game, name and email are encoded into a registration key using a DSA algorithm with PKCS8EncodedKeySpec and our private key. The game client can decode this key using a public key. The code looks like this:



		PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(HexDecoder.decode(PRIVATE_KEY));
		KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
		privateKey = keyFactory.generatePrivate(privateKeySpec);

	public void register(PrivateKey privateKey) throws Exception {
		Signature dsa = Signature.getInstance(SIGNATURE_ALGORITHM);
		dsa.initSign(privateKey);
		dsa.update(name.getBytes(ENCODING));
		dsa.update(address.getBytes(ENCODING));
		dsa.update(email.getBytes(ENCODING));
		regCode = dsa.sign();
	}

regCode is some big long string it generates that can be decoded thusly:


 	public static RegistrationDetails checkRegistration(String gameTitle) throws Exception {
 		RegistrationDetails testRegistrationDetails = new RegistrationDetails(gameTitle);
		KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
		X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(HexDecoder.decode(PUBLIC_KEY));
		PublicKey publicKey = keyFactory.generatePublic(publicKeySpec);
		if (testRegistrationDetails.validate(publicKey)) {
			return testRegistrationDetails;
		} else {
			return null;
		}
 	}

	private boolean validate(PublicKey publicKey, String encoding) throws Exception {
		Signature dsa = Signature.getInstance(SIGNATURE_ALGORITHM);
		dsa.initVerify(publicKey);
		if (encoding != null) {
			dsa.update(name.getBytes(encoding));
			dsa.update(address.getBytes(encoding));
			dsa.update(email.getBytes(encoding));
		} else {
			dsa.update(name.getBytes());
			dsa.update(address.getBytes());
			dsa.update(email.getBytes());
		}
		return dsa.verify(regCode);
	}


Cas :slight_smile:

We have just hired our first employee! “Allicorn” will be making the add-on module for RotT which gives us Sandbox Mode, a new game mode where you can draw maps, specify the monsters which will appear, and exactly how many of each building the player has at his or her disposal. Then you upload the scenario to the server and people can download it and you compete for survival times on it like in survival mode. I expect he will take around 6 months to get it working, maybe a little longer as the first 3 months of looking at a project as big as RotT probably not much really gets achieved and Chaz and I are both very busy doing…

… a Steam release for the Ultrabundle games, which have all received a large tarting up and general refresh. Including Steam achievements and cloud support.

When that’s out of the way Chaz and I want to start work on our Steampunks game, which is going to be an evolution of some ideas we started in Treasure Tomb. The current random musings in our head are that it will be a mash-up between NetHack, Diablo, Borderlands, Droid Assault, and Gauntlet. We’d really like to do 4-player co-op with this one too, if I can make my tiny brain figure out how to make it good. I expect we’ll spend about 2 years on it unless some disaster occurs and we run out of money.

After that we want to do our free-to-play MMOG “Battledroid”, which is a massive robot battle simulator and game of territorial conquest and clan politics, which will take about 2-3 years, but that all rather depends on how Steampunks does.

Cas :slight_smile:

Sys is implemented for all platforms in LWJGL and works the same way for all of them.

[quote]Do you do any interpolation in your game loop?
[/quote]
Nope. If the game is running at less than 60fps we run extra logic, assuming the logic is running faster than the rendering. If the logic is running slower than the rendering we’re flat out anyway and interpolation is just going to make things feel crappy.

Cas :slight_smile:
[/quote]
This is good to know. We actually just fixed the screen tearing with vsync, but everything got super slow due to our game loop not being quite right.

[quote]When that’s out of the way Chaz and I want to start work on our Steampunks game, which is going to be an evolution of some ideas we started in Treasure Tomb. The current random musings in our head are that it will be a mash-up between NetHack, Diablo, Borderlands, Droid Assault, and Gauntlet. We’d really like to do 4-player co-op with this one too, if I can make my tiny brain figure out how to make it good. I expect we’ll spend about 2 years on it unless some disaster occurs and we run out of money.
[/quote]
This sounds like our side scrolling project in top down form, only you probably actually have the resources to do it a bit faster ^^ mentioned it a few posts above, not sure if you caught it

[quote]This sounds like our side scrolling project in top down form, only you probably actually have the resources to do it a bit faster ^^ mentioned it a few posts above, not sure if you caught it
[/quote]
Aye, I have a feeling they won’t turn out all that similar though ;D

Cas :slight_smile:

Aye, I have a feeling they won’t turn out all that similar though ;D

Cas :slight_smile:
[/quote]
Haha, doesn’t sound like it. 4 player Co-op is a dream of mine, too, I just hope it’s not as much of a nightmare as it sounds.

Concerning the clock accuracy, a hack mentionned several times on this forum allows to force Microsoft Windows to use an high precision timer. Therefore, JOGL does not need to implement an API for this, does it?

The more you use the specific helpers and features of JOGL, the harder such a switch will be. I admit that you can easily avoid using the texture API of JOGL but some more evolved features would require much work, for example the new API allowing to draw text and curves on the GPU and it would be the same for the next API for cross-platform (desktop and embedded) GUIs. I have often done the opposite operation (switching projects from LWJGL to JOGL) and it is mainly a matter of time. If you are very comfortable with OpenGL (and sometimes underlying windowing APIs), you can do it.

In my humble opinion, as JOGL and LWJGL are very similar (which is even more true now with JOGL 2.0), as they both provide similar “services” (with a few exceptions), it is not worth it. Some bug fixes are only in JOGL and not in LWJGL, some other bug fixes are only in LWJGL and not in JOGL. Then, some games work a bit better with JOGL, some games work a bit better with LWJGL. It would be fine to identify them more precisely and share our knowledge as I did when LWJGL was no more working on some ATI cards some years ago.

[quote=“Rejechted,post:287,topic:36432”]
JOAL works fine too, I just need to perform more tests because Michael Bien claimed JOAL works fine with OpenALSoft but I didn’t check it by myself. The OpenAL binding of LWJGL has been better maintained for years than ours :frowning:

[quote=“Rejechted,post:287,topic:36432”]
As I said, it is mainly a matter of time. I think porting things from LWJGL to JOGL is quite boring, it would be better if both teams had been able to find an agreement to maintain only a single set of APIs instead of LWJGL on one side and JogAmp on the other side. As time goes by, both projects are taking different roads and such a convergence becomes harder.