[Project] RTS game engine : OpenRTS is released

@erlend_sh THIS is an interesting question, and really defines what this community is all about. There is a “user code & project” subforum that is intended for this purpouse. Or not?

It is worth noting that forum is better suited for “open discussion”.
For “team collaboration” I’d reccommend something like https://slack.com/

No problem! We very recently did the same thing for Cubes. I’ll get you set up :smile:

Another good option if development is done 100% in public is Gitter.

1 Like

Wonderfull, thx !

I’ve opened this reddit thread to talk about OpenRTS and make promotion :smile:

Please come and follow the discussion, and don’t hesitate to vote ^^

1 Like

Hi there !

After a big refactor of the code, to integrate a json serializer and update the architecure, I’m back to work on new features.

Still on the map editing, I work on an auto covering engine that will place assets contextually. For now, here is a first implementation of the Poisson-Disc Sampling algorithm, with varied radius.

The principle is to occupy space without overlapping !

WIP !

6 Likes

a little pic to show the ground texture covering. You can see tuffets above the dirt or dirt in the joints of pavements.

Mmh…

Ok, ok, i’m perhaps not an artist, but the code works !

Thanks to all contributors to the transparency issue !

2 Likes

The procedural covering becomes a little contextual. Vegetation and rocks on this sreenshot are placed automatically.

3 Likes

Very nice progress. However we still need to think about how to blend the low-poly models with a somewhat more textured ground. I guess that “dune” set did it quite well, but this would require simple textures on all the models also.

Thank you for the kind coment :smile:

As you may have noticed, the OpenRTS project lack of artists and 3d designers :slight_smile: I’m sure that the dune set would be a nice addition, but it will require some adaptation.

Such a nice work !
Congratulations. It looks amazing.

Yeah… I am still planning to convert it. But the day has only 24h and I need some time to rest too :frowning: Give me some more weeks and I will hopefully find the time.

Now we are able to change color of the actors directly from the XML dataset. This will be usefull to test colors directly in-game without the modeling software, having multiple versions of the same object, differentiate factions…

Ladies and gentlemen, the OpenRTS’ Circus is in town !

9 Likes

Hi everybody !

The news are rare because we are working on features that are not very visible (networking, refactoring…), but the OpenRTS project is still going on !

Today, a short video to present the Sower, this piece of code that places assets procedurally. It’s now fully contextual, and almost fully dynamic :smile:

Hope you’ll like it !

8 Likes

Hey, congrats on the HN feature man :wink:

https://news.ycombinator.com/item?id=10245490

Better get over there and answer some questions while the potato is still hot.

1 Like

Thanks :slight_smile: the Hack News has brought tons of unique visitors (7000 in two days !), almost 250 stars on the github repository and some pull request for corrections :slight_smile: That’s great !

Unfortunatly, no addition to the team for now.

let’s stay tuned ^^

2 Likes

I followed the instructions in the Wiki (install gradle plugin 1.3.2 for JM3.0, gradle plugin 1.3.7.3 for HM3.1) and clone the project from the IDE: JMonkey 3.0 and 3.1a1. I can compile and run app.example.Game; but can not rotate the view. Also it complaint:
Build failure: gradle run.

 Stack trace:
    org.gradle.tooling.BuildException: Could not execute build using Gradle distribution 'https://services.gradle.org/distributions/gradle-2.2-all.zip'.
    	at org.gradle.tooling.internal.consumer.ResultHandlerAdapter.onFailure(ResultHandlerAdapter.java:57)
    	at org.gradle.tooling.internal.consumer.async.DefaultAsyncConsumerActionExecutor$1$1.run(DefaultAsyncConsumerActionExecutor.java:57)
    	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
    	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    	at java.lang.Thread.run(Thread.java:745)
    	at org.gradle.tooling.internal.consumer.BlockingResultHandler.getResult(BlockingResultHandler.java:46)
    	at org.gradle.tooling.internal.consumer.DefaultBuildLauncher.run(DefaultBuildLauncher.java:71)
    	at org.netbeans.gradle.project.tasks.AsyncGradleTask.runBuild(AsyncGradleTask.java:322)
    	at org.netbeans.gradle.project.tasks.AsyncGradleTask.doGradleTasksWithProgressIgnoreTaskDefCancel(AsyncGradleTask.java:427)
    	at org.netbeans.gradle.project.tasks.AsyncGradleTask.doGradleTasksWithProgressIgnoreTaskDefCancel(AsyncGradleTask.java:354)
    	at org.netbeans.gradle.project.tasks.AsyncGradleTask.doGradleTasksWithProgress(AsyncGradleTask.java:346)
    	at org.netbeans.gradle.project.tasks.AsyncGradleTask.access$400(AsyncGradleTask.java:76)
    	at org.netbeans.gradle.project.tasks.AsyncGradleTask$BuildExecutionItem$1.run(AsyncGradleTask.java:697)
    	at org.netbeans.gradle.project.tasks.GradleDaemonManager.runBlockingGradleTask(GradleDaemonManager.java:52)
    	at org.netbeans.gradle.project.tasks.GradleDaemonManager.access$200(GradleDaemonManager.java:23)
    	at org.netbeans.gradle.project.tasks.GradleDaemonManager$2.execute(GradleDaemonManager.java:129)
    	at org.jtrim.concurrent.AbstractTaskExecutorService$FunctionWrapper.execute(AbstractTaskExecutorService.java:270)
    	at org.jtrim.concurrent.AbstractTaskExecutorService$TaskOfAbstractExecutor.execute(AbstractTaskExecutorService.java:340)
    	at org.jtrim.concurrent.Tasks$RunOnceCancelableTask.execute(Tasks.java:342)
    	at org.jtrim.concurrent.ThreadPoolTaskExecutor$ThreadPoolTaskExecutorImpl$QueuedItem.runTask(ThreadPoolTaskExecutor.java:1213)
    	at org.jtrim.concurrent.ThreadPoolTaskExecutor$ThreadPoolTaskExecutorImpl$Worker.executeTask(ThreadPoolTaskExecutor.java:1049)
    	at org.jtrim.concurrent.ThreadPoolTaskExecutor$ThreadPoolTaskExecutorImpl$Worker.run(ThreadPoolTaskExecutor.java:1179)
    	at org.jtrim.concurrent.ThreadPoolTaskExecutor$ThreadPoolTaskExecutorImpl$Worker$1.run(ThreadPoolTaskExecutor.java:998)
    	at java.lang.Thread.run(Thread.java:745)
    Caused by: org.gradle.internal.exceptions.LocationAwareException: Execution failed for task ':core:run'.
    	at org.gradle.initialization.DefaultExceptionAnalyser.transform(DefaultExceptionAnalyser.java:77)
    	at org.gradle.initialization.MultipleBuildFailuresExceptionAnalyser.transform(MultipleBuildFailuresExceptionAnalyser.java:47)
    	at org.gradle.initialization.StackTraceSanitizingExceptionAnalyser.transform(StackTraceSanitizingExceptionAnalyser.java:30)
    	at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:108)
    	at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
    	at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:80)
    	at org.gradle.tooling.internal.provider.BuildModelAction.run(BuildModelAction.java:43)
    	at org.gradle.tooling.internal.provider.BuildModelAction.run(BuildModelAction.java:30)
    	at org.gradle.tooling.internal.provider.ConfiguringBuildAction.run(ConfiguringBuildAction.java:119)
    	at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:36)
    	at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
    	at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:47)
    	at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    	at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    	at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:35)
    	at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    	at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:24)
    	at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    	at org.gradle.launcher.daemon.server.exec.StartStopIfBuildAndStop.execute(StartStopIfBuildAndStop.java:33)
    	at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    	at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:71)
    	at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:69)
    	at org.gradle.util.Swapper.swap(Swapper.java:38)
    	at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:69)
    	at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    	at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
    	at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    	at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    	at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:70)
    	at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    	at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    	at org.gradle.launcher.daemon.server.exec.DaemonHygieneAction.execute(DaemonHygieneAction.java:39)
    	at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    	at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:46)
    	at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:246)
    	at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64)
    Caused by: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':core:run'.
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    	at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
    	at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
    	at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    	at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
    	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    	at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    	at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:305)
    	at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
    	at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
    	at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
    	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
    	at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:88)
    	at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
    	at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    	at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
    	at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68)
    	at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    	at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    	at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55)
    	at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149)
    	at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
    	... 32 more
    Caused by: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\jmonkeyplatform31\jdk\bin\java.exe'' finished with non-zero exit value -1073741819
    	at org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.java:365)
    	at org.gradle.process.internal.DefaultJavaExecAction.execute(DefaultJavaExecAction.java:31)
    	at org.gradle.api.tasks.JavaExec.exec(JavaExec.java:60)
    	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
    	at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:218)
    	at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:211)
    	at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:200)
    	at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:579)
    	at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:562)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    	... 55 more

Can someone please help?

I would advise to use the core project, since the exemple game is not stable at the moment.

You can run the main at OpenRTS-core.src.app.MainRTS.java. There you have both editor and game mode, accessible througt F1 and F2

Please open an issue on Github if you still have any complaints with this run.

About the camera, its orientation is fixed to the north. you can only translate it and zoom/unzoom.

Hey, I just wanted to say that this looks really really cool.
On my todo-list there is a mixed RTS / FPS game and for that I will definitely try your RTS framework!
I can’t wait to test your pathfinding algorithm under several conditions and then enhance it with some more features like ant algorithms etc.
Great work! My best compliments!
:chimpanzee_smile:

Hi and thanks for the kind comment :slight_smile:

The developpment may seem stoped but it’s not. OpenRTS will gain an entity system soon that is under development on another project.

Don’t hesitate to ask questions !

@methusalah Thanks for the fun project! I tried compiling and running OpenRTS-core.src.app.MainRTS.java. It run as before, but still complaint ‘Build failure: gradle run’. I am not sure if it is due to the cloning of the project. I’ll explore and tinkle my config before I open an issue on Github.

I noticed the key mapping seems wrong, the WASDQZ keys seems to be captured by the GUI panel in editor mode (or may be it was programmed as a shortcut key on purpose?). And keys WS (moving forward and backward) becomes SZ in the game mode. The arrow keys work in all modes.