Boss-based RTS games.

Started by
18 comments, last by popsoftheyear 14 years, 11 months ago
When I decided to start a new project for Carnegie Mellon University's Game Creation Society, I wanted to make a simple 2D RTS with traditional gameplay reminiscent of Total Annihilation, with networking and basic RTS unit types and resources. I put together a pretty robust engine, and brought it to the first meeting of the group. Most of the people there were nonplussed by my lack of imagination in design, so we got into a discussion about how to make something more interesting out of my engine. We eventually came around to the idea of having one team with all incredibly massive, powerful, expensive units, and another side with all tiny, cheap swarming units. We started talking about various interpretations of this theme until we stripped it down to the basics. "Think Godzilla versus the U.S. Army," someone said, and we all found that idea rather appealing. Once we realized that nobody knew how to do networking, we decided to make a single-player interpretation on the theme. Also not wanting to handle incredibly complex AI for the few weeks we had to do the project, we came up with an idea that was basically "Shadow of the Colossus meets Tower Defense meets Command and Conquer." We called it Project:Confidential. The idea behind Project: Confidential is that the player controls a traditional set of RTS units: tanks, artillery, infantry, etc. and must defend a few key structures (as in Tower Defense) from a giant, usually slow, monster. We went with the theme of 1950's B-movie monsters. We didn't want the gameplay to just be "rush the monster with tons of units until it dies," so we wanted to make each monster a puzzle; and each level would be designed in such a way as to make use of the monster's strengths and weaknesses. For example, we had plans of a floating brain monster that took over your units, and which had to be stopped by artillery; and a monster that sat in the sand with only its back exposed, but which utterly destroyed everything in front of it. Other ideas included monsters which had to be lured into key areas, like water, before they would take damage; or monsters which would teleport to new areas when they felt threatened. We quickly discovered that the reason bosses aren't included in most RTS games is because bosses traditionally are maintained in genres that require fine control by the player to defeat, and which have a recognizable pattern that the player must figure out and counter. RTS games don't generally offer fine levels of control, so any boss battle would usually reduce to "order these units to attack the boss until its dead". We tried to counter this tendency by giving the monsters "bodyguards" that would defeat player armies trying to swarm the monster, and by giving each monster a totally unique attack strategy. Most of these ideas never made it into the current build of the game, but we managed to nail down the basics. We'll be continuing the project further over the summer and next semester; so hopefully it will be more fleshed-out by then. You can try out the project here: RTSDemo.php.jnlp
Advertisement
WebStart is refusing to start the application since it's unsigned. Any chance of a signed version?
It is signed. What, specifically, does it say is not signed?
natives-linux.jar

That's probably already enough to figure out what's wrong, but just in case:
JNLPException[category: Security Error : Exception: null : LaunchDesc: <jnlp spec="1.0+" codebase="http://www.kittsplace.com/klingenco/Confidential/" href="http://www.kittsplace.com/klingenco/Confidential/RTSDemo.jnlp">  <information>    <title>login</title>    <vendor>Thatotherguy</vendor>    <homepage href="http://slick.cokeandcode.com"/>    <description>RTS</description>    <description kind="short">RTS</description>    <icon href="http://www.kittsplace.com/klingenco/Confidential/shortcut.ico" height="16" width="16" kind="shortcut"/>    <offline-allowed/>  </information>  <security>    <all-permissions/>  </security>  <update check="timeout" policy="always"/>  <resources>    <java max-heap-size="134217728" href="http://java.sun.com/products/autodl/j2se" version="1.5+"/>    <jar href="http://www.kittsplace.com/klingenco/Confidential/RTSDemo.jar" download="eager" main="false"/>    <jar href="http://www.kittsplace.com/klingenco/Confidential/thingle.jar" download="eager" main="false"/>    <jar href="http://www.kittsplace.com/klingenco/Confidential/xstream-1.3.1.jar" download="eager" main="false"/>    <jar href="http://www.kittsplace.com/klingenco/Confidential/res.jar" download="eager" main="false"/>    <extension href="http://slick.cokeandcode.com/demos/slick.jnlp" version="b237"/>    <java max-heap-size="134217728" href="http://java.sun.com/products/autodl/j2se" version="1.4+"/>    <nativelib href="http://www.kittsplace.com/klingenco/Confidential/natives-linux.jar" download="eager" main="false"/>  </resources>  <application-desc main-class="RTSDemo"/></jnlp> ]	at com.sun.javaws.LaunchDownload.checkSignedResourcesHelper(LaunchDownload.java:1321)	at com.sun.javaws.LaunchDownload.checkSignedResources(LaunchDownload.java:1162)	at com.sun.javaws.Launcher.prepareLaunchFile(Launcher.java:778)	at com.sun.javaws.Launcher.prepareToLaunch(Launcher.java:217)	at com.sun.javaws.Launcher.launch(Launcher.java:111)	at com.sun.javaws.Main.launchApp(Main.java:315)	at com.sun.javaws.Main.continueInSecureThread(Main.java:219)	at com.sun.javaws.Main$1.run(Main.java:107)	at java.lang.Thread.run(Thread.java:619)
Gotcha. I need to sign the native libraries with my own keytool. They're signed by a third party right now. Thanks, I will fix that immediately.
I'll check back in the morning. Your description got me interested :)
natives signed.
It's working now :)

Looks interesting.

It's a pain that you can't select multiple units. Can't really use GI's like that. It would also help if I knew what I was selecting without having to think about it by looking at the unit. In the same vein, I can't tell what's currently in the build queue, and canceling build does not refund any spent money.

With around 10 or 15 enemy units visible and attacking on screen, the framerate slows to 1 fps and the sound starts lagging. Usually it's around 20-30 fps, though.

Every time I lose the game, it goes into an infinite loop between showing the briefing screen and showing a new game (I saw a new barracks) whenever I click the mouse.

That giant crab can really one-shot all my big guns, tanks, and cleaners?

When running the game for the 2nd time without closing the browser, after it went into the loop, I once got this exception (but not always):
java.lang.NullPointerException	at sun.font.TrueTypeGlyphMapper.<init>(TrueTypeGlyphMapper.java:44)	at sun.font.TrueTypeFont.getMapper(TrueTypeFont.java:1161)	at sun.font.FileFontStrike.<init>(FileFontStrike.java:151)	at sun.font.FileFont.createStrike(FileFont.java:74)	at sun.font.Font2D.getStrike(Font2D.java:331)	at sun.font.Font2D.getStrike(Font2D.java:262)	at sun.font.CompositeStrike.getStrikeForSlot(CompositeStrike.java:59)	at sun.font.CompositeStrike.getFontMetrics(CompositeStrike.java:75)	at sun.font.FontDesignMetrics.initMatrixAndMetrics(FontDesignMetrics.java:345)	at sun.font.FontDesignMetrics.<init>(FontDesignMetrics.java:336)	at sun.font.FontDesignMetrics.getMetrics(FontDesignMetrics.java:284)	at sun.java2d.SunGraphics2D.getFontMetrics(SunGraphics2D.java:764)	at org.newdawn.slick.TrueTypeFont.getFontImage(TrueTypeFont.java:111)	at org.newdawn.slick.TrueTypeFont.createPlainSet(TrueTypeFont.java:157)	at org.newdawn.slick.TrueTypeFont.<init>(TrueTypeFont.java:90)	at org.newdawn.slick.thingle.internal.slick.SlickThinletFactory.<init>(SlickThinletFactory.java:36)	at StartScreen.init(StartScreen.java:37)	at Start.init(Start.java:55)	at org.newdawn.slick.state.StateBasedGame.init(StateBasedGame.java:155)	at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:357)	at RTSDemo.main(RTSDemo.java:58)	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)	at java.lang.reflect.Method.invoke(Method.java:597)	at com.sun.javaws.Launcher.executeApplication(Launcher.java:1171)	at com.sun.javaws.Launcher.executeMainClass(Launcher.java:1117)	at com.sun.javaws.Launcher.doLaunchApp(Launcher.java:966)	at com.sun.javaws.Launcher.run(Launcher.java:121)	at java.lang.Thread.run(Thread.java:619)
You CAN select multiple units. Click and drag with the mouse from the top left to the bottom right. This is is box-select. You can also double-click on a unit to select all of that type of unit.


I'll see what I can do to reproduce your bug with the loading screen. Also, I have never seen that exception before.

The idea behind the crab's laser was that it was supposed to force you to micro-manage all of your units. It used to be that the laser did about half its current damage, and had no splash damage. When playtesting we discovered that the player could easily defeat the crab just by building a bunch of GIs or jeeps and throwing them at it.

I should probably have it give you the funds back when you cancel...

What specs are you running at? Turning off the frame manager, I can easily get 300+ FPS running on a Q6600 and high-end Nvidia card. Running on my laptop, which has a T9300 dual core, I get about 150 FPS. With the frame limiter I get 60FPS with little jumps every now and then. I haven't done much testing on other hardware.
For some reason, it keeps telling me the download stalled.
Check out the first gameplay video from my javascript/PHP RTS game

This topic is closed to new replies.

Advertisement