Hi !
Featured games (90)
games approved by the League of Dukes
Games in Showcase (707)
Games in Android Showcase (206)
games submitted by our members
Games in WIP (781)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
   Home   Help   Search   Login   Register   
  Show Posts
Pages: [1] 2 3 ... 48
1  Game Development / Performance Tuning / Re: Turn-based game - world map performance issue on: 2017-01-17 04:05:44
Definitely need to see what is happening when the lag occurs. I wouldn't assume it is strictly because of the time taking to load everything--it could also be a result of what is done with the images once they are loaded.

One thing in the back of my mind, also, is wondering whether and how images are being used multiple times. It could make a difference if every instance is a Image or WritableImage, or if one is using multiple ImageView's that all tap into the same base image.
2  Game Development / Newbie & Debugging Questions / Re: getting rid of "instanceof" on: 2017-01-16 04:42:11
Whew! Java sure is verbose. Anyway, I was wondering if anybody had a good explanation of the difference between <? super >and <? extends>. I googled around and found some explanations, but it didn't really sink in for me.

They are kind of like a greater than or less than, but referring to the extends chain. One gets the class and all super classes, the other gets the class and all sub classes.
3  Game Development / Newbie & Debugging Questions / Re: getting rid of "instanceof" on: 2017-01-12 20:27:29
Thanks to folks to contributing to this discussion. I am very much looking forward to examining the discussion points in detail.

It seems to me, on general principles, if a subclass doesn't allow you to use the same methods of the parent class, differences being accounted for via Override, then something is fishy about the decision to subclass in that instance.

I will have to dive into the details to figure out why collision-testing is not something where one can simply make an Interface, e.g., Collidable or OccupiesSpace, and cover the needed object requirements in the various implementations of the method, so that the same method call can suffice. Seems to me like it should be possible. But, I haven't had to do collision testing in my game or audio programs, and the alternative algorithm that I tested (mapping the object to a grid similar in size to the actual screen, and testing the points you traverse or move to for occupants before occupying them), worked pretty well.
4  Game Development / Newbie & Debugging Questions / Re: getting rid of "instanceof" on: 2017-01-10 21:37:08
My current notion for handling "states" is to make use of enums.

    class Ball 
        enum State {NORMAL, SOME_OTHER_STATE};
        State state;

        public Ball()
             *  Code that initializes the state variable in the constructor, probably.


        @Override // for an Interface such as one for animatable objects.
        public void update()
            switch (state)
                case NORMAL:
                case SOME_OTHER_STATE:

In other words, I tend to hold variations in state as properties, not as separate subclasses.

If you are going to use subclasses, that seems to me to imply also making collections that are specific to the subclass (e.g., ArrayList<NormalBall>) and coding routines specifically for iterations through those collections, rather than testing every Object with instanceof. But if taking a route such as this, I think using Interfaces makes more sense than subclassing.
5  Games Center / Showcase / Re: Equal on: 2017-01-09 08:51:09
I like that the timer now shows in the two choices. Good idea!

Using the PC version, as far as I could tell, the two games (Challenge and Time Attack) were identical. On Time Attack I didn't see where I was accumulating any time, and a single mistake ended the game.

Also, it would have been nice to first play one then another without having to exit the program and reload it. Is there a way to navigate from one to the other without reloading?
6  Games Center / Showcase / Re: Equal on: 2017-01-06 18:53:24
I like the idea of earning time -- perhaps it can be related to how quickly the person answers? If faster answers are profitable, this motivates players to find quicker ways to disprove or prove the propositions, rather than use the entire segment to ensure correctness of an answer.

But it is probably good to resist adding complexity (or making it optional), as there is value in clarity.

The shape/mode of the timer might require tinkering to fit in between the buttons.
7  Games Center / Showcase / Re: Equal on: 2017-01-06 08:32:59

I'm wondering if it is possible to allow key strokes, (A and F?) for the = and <>. I can press a button quickly, but my mousing is quite a bottleneck in terms of reflexes and speed. Moving the mouse seems to me an unwelcome distraction from evaluating the equations.

I'm wishing the timer were in between the two equations, or somewhere closer. My peripheral vision is not so good.

At first I was bugged that the rounds were of different lengths, especially when they got longer. It took me a while to realize that the point is to see how many you can get correct in a row!

I am playing a desktop version on Windows 10.

Thanks for that. Good work!
8  Java Game APIs & Engines / Engines, Libraries and Tools / Re: {LibGDX} How do you make your UIs? on: 2017-01-05 20:08:36
I see it even upsets the forum's code tag syntax highlighter Smiley

Cas Smiley

Made me laugh.

I also appreciate the JavaFX suggestion.

I think the "if" clause ("if UI-heavy") is worth highlighting. UI components and Canvas and Image (WritableImage ~= BufferedImage, and ImageView allows easy transformations) -- they are all Nodes. This equivalence of status is very helpful for coding a UI-heavy game.

But of course, that doesn't help if you're already committed to libgdx.
9  Discussions / Miscellaneous Topics / Re: What I did today on: 2017-01-05 04:58:51
Finally got my head around JavaFX Properties, and how they can be used in binding or hooked to Listeners. I don't know why previous attempts to read a book chapter on them were so difficult, but attacking it first thing this morning was the ticket.

Part of the confusion maybe is that they can act just like normal properties that you can set and get. But probably I was just tired and unfocused on previous occasions. After the round of work that led to better understanding the JavaFX application thread and some code reading of that cool JavaFX particle generator I've linked a couple times, it all became much clearer.

Also got the fade in of a drone and windchime working on Hexara. The code is somewhat rewritten and updated from the last iteration. I'm thinking I'll let the stars be part of the opening sequence instead of just having a black background. Am hoping to do a bit more before calling it a day.
10  Games Center / WIP games, tools & toy projects / Re: Hexara rewrite with Java 8 & JavaFX on: 2017-01-04 04:17:27
I have coded the dunes landscape and some twinkling stars.

The title blocks are fading out and the landscape is coming in.
OOPS--note to self: have to manage the stars that are appearing in the dunes!

Completed fade:

The dunes are also created via Perlin noise. I'd like to have some sort of mountains in the background, and maybe a bit of atmospheric glow near the horizon. The sky I did before has a crude milky-way sort of cloud in it and some comets. On TODO list.

The biggest hitch was getting worried about altering Node values (opacity property values) from outside of the "JavaFX Application Thread". It took a good half day just to research and figure this out. Turns out that threads created by JavaFX animation timers are considered by JavaFX to be part of the JavaFX Application Thread. So, it's fine. The main thing is to not forget the plan of limiting the Audio thread to passing messages to the Animation thread, and not have it act directly on the Nodes. (Shouldn't do this anyway as the Audio thread needs to run as free as possible.)

I hate spending time second-guessing plans that are working, but I did learn important things in the process.
11  Java Game APIs & Engines / JavaFX / Re: [SOLVED] problem Adding/removing Nodes on: 2017-01-04 03:43:05
I think I have a resolution to the concern given by @nsigma. The situation where I was modifying "live" Nodes from "outside" the FX Application thread turns out to have been an incorrect framing of the situation that was occurring.

The Application API has the following quote.


JavaFX creates an application thread for running the application start method, processing input events, and running animation timelines. Creation of JavaFX Scene and Stage objects as well as modification of scene graph operations to live objects (those objects already attached to a scene) must be done on the JavaFX application thread.

Thus, the code areas from where it is okay to modify the live nodes are actually pretty substantial. This would explain why I am able to modify opacity values from a method called by the AnimationTimer. I'm also able to remove the TitleBlocks node via this same method--and not throw the "not on FX application thread" exception.

The thread that was throwing the exception before was actually my Audio thread, while I was still within a NoteListener callback. I've rewritten the NoteListener so now it flips a switch that tells the update() method (on the AnimationTimer thread) to do the remove(node).

The NoteListener callbacks really need to be terse anyway (yes, never block the Audio thread!), nothing more than flipping a switch for the AnimationTimer thread to do the brunt of the work.
12  Java Game APIs & Engines / JavaFX / Re: [SOLVED] problem Adding/removing Nodes on: 2017-01-04 00:58:42
Here is a code example that led me astray in terms of thinking that it might be okay to modify some properties of "live" nodes off of the JavaFX Application thread. In this particle generator, the Node subclass Canvas is being modified intensely: 20,000 objects per 60 fps frame are having location and other attributes altered.

Is the animation timer actually on the JavaFX Application thread? It is a separate thread, it seems to me.

Here's a link to watch the particle generator in action:

<a href=";hl=en_US&amp;start=" target="_blank">;hl=en_US&amp;start=</a>

Anyway, nothing dire is happening. So, I am wondering what is going on. Why doesn't this program crash on a regular basis? Could it be that the only thing of concern is that some of the property references are being updated during a render iteration, and the differences between old vs. new values do not matter to this process?

I'm having trouble finding more information. The Node documentation does clearly state that modifications to a live node should be done on the FX Application thread. Will continue researching.
13  Java Game APIs & Engines / JavaFX / Re: [SOLVED] problem Adding/removing Nodes on: 2017-01-02 15:42:10
@nsigma Thanks for clarifying. I will keep your warning in mind.

Fingers crossed, maybe it's just a situation where property changes might not propagate in the order made or something minor, rather than an outright crash. I suspect that JavaFX is more robust than Swing. But I'll look into it further, and be on the lookout for problems as Hexara develops.
14  Java Game APIs & Engines / JavaFX / Re: problem Adding/removing Nodes on: 2017-01-02 14:46:06
The FX Application thread seems to be the JavaFX equivalent of the EDT on Swing. If this error crops up, the solution is to schedule the code to run on the FX Application thread. This can be done as follows:

Surely you mean never, ever, ever touch JavaFX off the FX Application thread, the same as never, ever, ever touch Swing off the EDT?!  Pointing

I am still figuring out what is or isn't "touching" the FX Application thread, to use your terms.

There is a lot that can be done with JavaFX controls off of the FX thread. (And should be, to avoid clogging the thread and slowing down the app.) I can change properties from an external thread. In the opening for Hexara that I'm recoding, an animation thread is handling an opacity fade. The error message came up only when trying to add or remove a node to the current scene.
15  Java Game APIs & Engines / JavaFX / Re: problem Adding/removing Nodes on: 2017-01-02 05:13:35
Found the answer!

The FX Application thread seems to be the JavaFX equivalent of the EDT on Swing. If this error crops up, the solution is to schedule the code to run on the FX Application thread. This can be done as follows:

    Platform.runLater(Runnable runnable);

API for Platform

This being Java 8, the Runnable can be implemented via a Lambda, instead of an anonymous class.
        () -> { root.getChildren().add(img); }

The above reminds me of the code used in a main() when starting up an application that uses Swing:
    EventQueue.InvokeLater(new Runnable()
        public void run()
            JFrame frame = new JFrame();
            // etc.

As with the EDT, the API warns us not to try and do too much on the FX Application thread, as it can be a bottleneck.
16  Java Game APIs & Engines / JavaFX / [SOLVED] problem Adding/removing Nodes on: 2017-01-02 01:23:42
[NOTE: Every time I have a question with JavaFX, I think I will post it here before searching elsewhere. If/when I find an answer, I will follow up and include it here, assuming no one beats me to it. Goal: JGO forums become more relevant to Java game programmers using JavaFX if we have more questions and tutorials at this site.]

I ran into the following error when trying to add or delete a Node from a method that is NOT the overridden start(Stage) method.
    java.lang.IllegalStateException: Not on FX application thread; ... 

Example of calling code that elicits this error:

For nodes added in the start() method, the code: root.getChildren().remove(img); creates the same error.

The code that tries to add or remove is located in a method in the same class that implements Application . A Group variable named root has been made an instance variable rather than the usual practice of making the root node a local variable of the start() method.

My goal is to manage cross-fades between different visual elements. I was thinking that once a node is faded out and no longer needed, I would delete it. And as new nodes are needed, I would add them. But the Exception is preventing this.

Alternatively, I can access the existing nodes to null them or vary their properties. Is this the way to manage the nodes? Flip the visibility or manage opacity and null them when they are not being used, but leave the nulled nodes as placeholders? That could leave me with a scene with 80% of the nodes being null or invisible at any one time which intuitively seems kind of fishy.

Or is this sort of thing (cross-fading lots of nodes) something that can or should be handled with managing multiple Scene variables?
17  Games Center / WIP games, tools & toy projects / Hexara rewrite with Java 8 & JavaFX on: 2017-01-02 00:38:34
in progress jar: Hexara8

stalled Java2D version: Hexara (old)

My resolution for 2017 is to finish and publish Hexara. I want to get more adept with JavaFX and Java 8, so I decided to convert the previously stalled project.

Managed to get a running start into the New Year!

I have a three-tiered system set up for timing and animation that seems like it will work out pretty well.
1) asynchronous, e.g., mouse motions, keyboard input (will be loosely coupled to other tiers) [hasn't been implemented yet]
2) graphics animation via an AnimationTimer (runs at 60fps)
3) scheduled events and sound playback (runs at 44100 fps)

The AnimationTimer has but a single line of code. The overridden handle() method consists of the following:
    for (Animatable aa : Animatables.array) aa.update(); 

Animatable is an Interface with one method: update().
Animatables.array is a static array. I use a CopyOnWriteArrayList rather than an ArrayList, to allow concurrent access (can add or delete while array is iterating).

That covers the "update" portion of the game loop. As for "render"--that seems to be automatically handled by JavaFX. There is no need for Swing's paintComponent() method or equivalent.

For the blocks that hold the letters: I'm using Rectangles. For the "cold" blocks, the innermost Rectangle is given a fill of silver (outer rectangles are progressively darker, and just the shape is drawn). The letter nodes are drawn after the Rectangle nodes and set up with a black fill.

For the "hot" blocks, the innermost rectangle is overwritten by a WritableImage (replacing awt.image.BufferedImage) created via a PixelWriter (replacing awt.image.WritableRaster) that obtains data over a 64 by 128 rectangle using Z-animation and a Perlin Simplex Noise function. The animation is run at half the speed (30fps -- seems sufficient and is less of a cpu load than using a smaller z-increment at full speed) and the resulting graphic is scaled, rotated (for even-numbered positions), and translated via an ImageView node. The six ImageView's all use the same static WritableImage as a source.

The series of notes played (via a real-time synth) are scheduled with an audio event-scheduler I wrote. When scheduling, it is possible to include a NoteListener as a callback function.

The NoteListener code on the managing class for the TitleBlocks sets a variable that tells the update() method to flip from "cold" to "hot", for the first six notes. Loose coupling is very important so as not to burden the audio thread--let the animation thread handle the bulk of the work!

The start of the seventh note in the musical motif provides a hook into the note's main volume envelope and flips a flag, so that the animation loop will inspect and use this value to set the Group (all the blocks) opacity--thus the fading of the graphics is a function of the note dying away. I do a bit of filtering and scaling of the envelope values to manage the visual fade. It probably seems a little long for a title sequence, but the intention is to cross-fade with the sounds and images of the main puzzle panel. Also, there will eventually be another visual animation (glow bloom and fade) triggered by the start of the seventh note.

I'm excited that this is coming together! Am pleased that the JavaFX code is clearer, easier to manage, and less verbose than Java2D, so far. Cross-fading to the puzzle panel is going to require some working out. I'm not sure yet if I'll be flipping visibility switches and opacity values of nodes, or nulling and resetting the nodes, or if I'll actually be adding and removing the Nodes from the root node. To be continued.
18  Game Development / Newbie & Debugging Questions / Re: Making fields public that use both setters and getters on: 2016-12-28 19:33:14
That is a very interesting concept, philfrei. I will probably create a new branch, test that out, and see how it works.

I'd be interested in seeing what you come up with, if you post your test!

I've started rewriting Hexara (was Java2D/AWT/Swing) with JavaFX 8. I'll be trying out some ideas in that process, too.

Even if the results are not conclusive pro or con, having something to chew on and discuss could lead us to come up with some good patterns, or to feel better about continuing to use the tried-and-true.
19  Game Development / Newbie & Debugging Questions / Re: Making fields public that use both setters and getters on: 2016-12-27 22:33:29
We've been handed a ton of improvements to the language and we are still discussing when to use getters and setters for oop programming rather than how best to set variables up for functional programming?

This is a common enough situation (objects that moves around the screen having a "position" state), that it would be really helpful to have an article that specifically explores how this might be handled via "functional programming" and the associated pros and cons.

It could be that having an object that is simply a collection of states would be helpful. I've seen examples of classes without any code at all, just the variables. I use this construction in the audio I do (for envelopes and for the sine-based "operators" of the phase-modulation synth), and they are working out well.

I've also seen examples (in functional programming) where the variables are all public and final, and the sole method is one that returns a new copy to replace the old. (Too costly when the position is changed every frame?)

Setting things up so that Streams, say, could be used for setting new locations or doing collision checking would be useful, as this automatically brings multi-core benefits without having to code synchronization or fork/joins.

So, yeah, the question is interesting but I wish it were asked in reference to good fp practices rather than oop.

[EDIT: all the searches I've done so far only show a couple articles on FP for Java game programming and they are behind paywalls.]
20  Discussions / Miscellaneous Topics / Re: What I did today on: 2016-12-24 10:05:33
As requested, the trailer for one of our new songs:

Nice work! Really fine production.
21  Discussions / General Discussions / New Year Resolutions -- 2017 on: 2016-12-23 19:01:02
A place to put programming-related goals for year 2017.


This is the year I will get an actual program out for sale. I have allowed cold feet and self-doubts to block finishing anything for far too long. Will probably just go for instead of Steam, initially.

Also: strengthen knowledge about functional programming and Java 8. Started reading "Java 8 In Action" and it seems to be a very good book for this.
22  Game Development / Newbie & Debugging Questions / Re: Concurrent Modification when changing maps? on: 2016-12-09 04:53:40
Use a stream?

strings.forEach( Your-Consumer-here );

At least, maybe, use them for the *theoretically* simple stuff like iterating for a render or update. (Assumes they don't overlap--which they shouldn't if you designed things right.)
23  Game Development / Newbie & Debugging Questions / Re: Concurrent Modification when changing maps? on: 2016-12-06 22:38:48
I am also not using multiple threads.

The JVM begs to differ:
I get a concurrent modification error ...
24  Game Development / Newbie & Debugging Questions / Re: Concurrent Modification when changing maps? on: 2016-12-06 22:35:58
I wonder if this is a job for CopyOnWriteArrayList?

If iterations outnumber mutations (which is usually the case if you are using the list in a render loop), then this could be just the ticket.

It pretty much works the same as an ArrayList, but with elements that make it thread safe.

I think we are getting to the point where almost any use of Synchronization is suspect, given all the new thread-safe and functional-programming based tools that have been added to Java.

25  Discussions / Business and Project Management Discussions / Re: Crowdfunding in 27 Easy Steps video on: 2016-12-03 07:43:57
I think that kickstarter mainly works for feel-good campaigns: if you can't amaze people or put a smile on their face, you'd going to have a tough ride.

Seems to me like this thought from Riven is a good bottom line for any attempt at crowd-funding--certainly something I'm going to keep in mind if I ever give it a go.

I'm surprised that a company would make its "business model" one of repeatedly going back to KickStarter. Don't most people think of KickStart as a place to get a leg up when you are just starting out? I think veteran companies would have a harder time, because of this, and their "customers/supporters" would be increasingly demanding and value conscious rather than altruistic and generous.

Maybe the changes they talk about (from their early campaigns to later) have more to do with them being a returning company than about changes in crowdfunding in general?

Stuff about researching and understanding fulfillment costs--those are good lessons to learn from, regardless.
26  Games Center / WIP games, tools & toy projects / Re: RainThunder on: 2016-11-30 06:26:09
Yes, just a separator. I put very little into the GUI. It is just a series of JavaFX HBoxes, stacked one on top of another in a GridPane. The "separator" is an empty HBox with a background color:

    HBox sectionBar = new HBox();
    sectionBar.setStyle("-fx-background-color: #8080FF;");

Supposed to be light blue. Is kind of purple now that you mention it. It shouldn't have moved! Computer needs an exorcist?

I look forward to seeing what you come up with.
27  Games Center / WIP games, tools & toy projects / Re: RainThunder on: 2016-11-29 19:14:47
You should bundle every one of your effects into one big jar Smiley
One question: what does the purple bar represent? I saw it moving but couldn't understand it...
Oh, also: do you think we might be able to use your ambiance library/libraries in our games? I'd love to be able to implement that kind of sound effects in my next project!


I'm curious what the purple bar is that you are seeing. The code only should have a simple JavaFX GUI with buttons and sliders. Are you referring to the 3D-Sound program where I was trying out a time-delay based algorithm for implementing 3D audio? In that, the purple cylinders that rise and sink in place, corresponding to audio source locations. They are loudest when tallest, and quiet when they sink into the "chessboard" floor.

I'm quite perplexed in terms of figuring out what to make freely available or not. I don't want to commit too much of the code yet, as part of my way of development includes rewriting fundamental parts of it as I learn more, and I don't want to be encumbered by obligations for backwards compatibility. (Ran into this with SiVi a couple years ago.)

Yes, it is possible to combine the various into a single library jar.

J0, when you are ready to seriously consider going forward, maybe you can message me and check in on the status of things. (Same to anyone else.) I'd like to be part of a team, and the audio expertise is one of the main things I can bring. I'm also looking for situations to implement "real-world" examples of the library being used.
28  Games Center / WIP games, tools & toy projects / Re: BabyGraph on: 2016-11-26 03:56:16

Small suggestion: I was wondering about moving the "Congratulations" panel down a bit to allow the player to see the source of the sweets-geyser?
29  Games Center / WIP games, tools & toy projects / RainThunder on: 2016-11-26 03:02:12

A procedural rain and thunder app: RainThunder.jar

Sample of audio output: RainThunderDemo.ogg

I wasn't sure whether to put this in a new thread or add it to the "forest ambience" thread from a short while ago. I think this is ready to show, despite there being room for improvement. It is a mild thunderstorm, not supercharged, Hollywood-level drama.

The source sf/x files came from, if you are curious as to the original sound cue. I use about half of this cue (7 seconds).

The main new component is a "ClipSectionPlayer" tool. With it, you can specify sections of clips (my equivalent of the Java Clip, not itself), and play them as a chain. Start and end frames are required. At this point a single cross-fade length is used for all the seams.

I vary the playback frequency to get different "intensities" (ranging from something like 1/2 speed to 3x's speed). At the faster playbacks, code adds more and longer sections to achieve similar lengths throughout the intensity range. It wouldn't be too hard to make the event length an independent parameter.

One challenge was making the taper long enough not to sound abrupt with the faster playbacks, without bringing in a long sample. After trying several approaches, I tried a crude granular approach: the first half of the decay sample is broken into many short overlapping fragments which are chained. Most of the thunder events, thus are made from just a few longer sections for the body, followed by numerous but shorter sections from the "tapering" sample.

The rain and wind use a clip-slicer tool (explained in earlier posts). I made a crude low frequency (LF) "noise" tool, to vary the volume of the rain and wind. At this point, the tool varies the "wind" slightly before the "rain", and errs on the side of subtlety. It seems to me, the LF noise wave should be filtered slightly (maybe with simple box filter) before using with the rain, on the theory that the rain reflects the sum of wind gusts occurring during its fall. Having a variable high-Q filter for the wind would be very helpful for more theatrical wind effects. As it stands, the wind is almost more a texture-thickener for the rain than something that reads clearly in its own right.
30  Discussions / Miscellaneous Topics / Re: What I did today on: 2016-11-14 09:15:55
Glad to know all our members in NZ are okay. 7.8 Richter, wasn't it? That is scary.
Pages: [1] 2 3 ... 48
Galdo (256 views)
2017-01-12 13:44:09

Archive (424 views)
2017-01-02 05:31:41

0AndrewShepherd0 (883 views)
2016-12-16 03:58:39

0AndrewShepherd0 (821 views)
2016-12-15 21:50:57

Lunch (956 views)
2016-12-06 16:01:40

ral0r2 (1189 views)
2016-11-23 16:08:26

ClaasJG (1289 views)
2016-11-10 17:36:32

CoffeeChemist (1316 views)
2016-11-05 00:46:53

jay4842 (1400 views)
2016-11-01 19:04:52

theagentd (1214 views)
2016-10-24 17:51:53
List of Learning Resources
by elect
2016-09-09 09:47:55

List of Learning Resources
by elect
2016-09-08 09:47:20

List of Learning Resources
by elect
2016-09-08 09:46:51

List of Learning Resources
by elect
2016-09-08 09:46:27

List of Learning Resources
by elect
2016-09-08 09:45:41

List of Learning Resources
by elect
2016-09-08 08:39:20

List of Learning Resources
by elect
2016-09-08 08:38:19

Rendering resources
by Roquen
2016-08-08 05:55:21 is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!