Paradroid3D

Status
Nicht offen für weitere Antworten.

EgonOlsen

Bekanntes Mitglied
Hi,

ich bastel gerade an einem Paradroid-Clone (klassisches C64 Spiel...falls es jemand nicht kennen sollte)...

para3d_2_small.jpg


...und ich brauche dringend ein wenig Feedback zur Steuerung. Momentan gibt es zwei Ansichten: Die klassische "von-oben"-Ansicht und eine 3D-Ansicht. In beiden gibt es verschiedene Steuerungsvarianten und ich bin nicht sicher, welches die sinnvollste ist.

Die angebotenen Varianten sind diese:

2D:
- (1) Bewegung mit CRSR nach oben/unten-links/recht. Drehen und schiessen mit der der Maus
- (2) Bewegung und drehen mit CRSR, schiessen mit CTRL/STRG
- (3) Bewegung mit CRSR relativ zur Blickrichtung des Roboters. Drehen und schiessen mit der der Maus

3D:
- (1) Bewegung mit CRSR relativ zur Blickrichtung des Roboters. Drehen und schiessen mit der der Maus
- (2) Bewegung und drehen mit CRSR, schiessen mit CTRL/STRG

Hier die Tasten zum Umschalten und alle weiteren:

M: Steuerungsmodus wechseln
C: Kamera-Modus 2d/3d wechseln

UP/DOWN+LEFT/RIGHT: Bewegen/Drehen...je nach Steuerungsmodus
LEFT/RIGHT + SHIFT: Seitlich bewegen in einigen Steuerungsmodi
CTRL: Feuer
N: Energie sofort auf Maximum (ist quasi ein Cheat)
L: Level wechseln
W: Wireframe anzeigen (nur solange gedrückt)
ESC: Raus hier!

Das Spiel unterstützt OpenGL (unter Windows und Linux) und Software-Rendering. Wenn möglich, sollte man im kleinen Startfenster auch OpenGL auswählen...
 
B

Beni

Gast
Mir gefällt die 3D-Steuerung um einiges besser.

Ich würde auch bei 2D die Kugel in die "Blick"richtung bewegen, wenn UP gedrückt wird.

P.S. tolles Programm :toll:
 
G

Guest

Gast
Beni hat gesagt.:
Ich würde auch bei 2D die Kugel in die "Blick"richtung bewegen, wenn UP gedrückt wird.
Das geht auch. Musst zweimal "c" im 2D-Modus drücken, dann hast du diesen Modus.
 

Reality

Top Contributor
Kleine Frage: Hast du das nur mit JOGL und Java gemacht oder kam da auch 3D Software ins Spiel?

Liebe Grüße
Reality

PS: Super Spiel! :)
 

EgonOlsen

Bekanntes Mitglied
Reality hat gesagt.:
Kleine Frage: Hast du das nur mit JOGL und Java gemacht oder kam da auch 3D Software ins Spiel?
Kein JOGL...das ist mit LWJGL gemacht. Wenn du mit 3D Software irgendwas a la 3DStudio oder so meinst, dann nein...der Level wird aus einer ASCII-Datei erzeugt und die Roboter sind einfach nur automatisch generierte Sphären. Die Explosion ist sicher anders erstellt worden, aber nicht von mir. Sie ist momentan nur ein Platzhalter, bis ich was eigenes/anderes habe. Ansonsten nutzt das ganze eine 3D Engine, setzt also nicht direkt auf LWJGL auf, sondern hat noch eine Schicht dazwischen. Das wäre dann jPCT und die ist auch von mir....was sehr praktisch ist, weil ich sie dadurch sehr gut kenne... :wink:
Danke für die positive Kritik. Das motiviert zum Weitermachen.
 

EgonOlsen

Bekanntes Mitglied
Grizzly hat gesagt.:
Ja, aber leider nur 2 Level. :(
Ist ja auch noch lange nicht fertig. Das taktische Zwischenspiel vom Orginal Paradroid fehlt noch völlig, die Gegner müssen weiter ausdifferenziert werden usw...ging mir momentan wirklich hauptsächlich darum zu sehen, ob ihr mit der Steuerung klar kommt. An sich ist das alles noch ziemlich im Alpha-Stadium.
 

Kerberus

Bekanntes Mitglied
Kann es sein, dass dein Spiel nicht MacOSX kompatibel ist?
Wollte es starten und bekam folgende Fehlermeldung:
Code:
java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1517)
	at java.lang.Runtime.loadLibrary0(Runtime.java:788)
	at java.lang.System.loadLibrary(System.java:834)
	at org.lwjgl.Sys.initialize(Unknown Source)
	at org.lwjgl.Sys.<clinit>(Unknown Source)
	at org.lwjgl.opengl.Display.<clinit>(Unknown Source)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:141)
	at naroth.start.StartFrame.init(StartFrame.java:44)
	at naroth.start.StartFrame.<init>(StartFrame.java:23)
	at naroth.start.StartFrame.main(StartFrame.java:19)
	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:324)
	at com.sun.javaws.Launcher.executeApplication(Launcher.java:848)
	at com.sun.javaws.Launcher.executeMainClass(Launcher.java:808)
	at com.sun.javaws.Launcher.continueLaunch(Launcher.java:682)
	at com.sun.javaws.Launcher.handleApplicationDesc(Launcher.java:397)
	at com.sun.javaws.Launcher.handleLaunchFile(Launcher.java:199)
	at com.sun.javaws.Launcher.run(Launcher.java:167)
	at java.lang.Thread.run(Thread.java:552)
 

EgonOlsen

Bekanntes Mitglied
Kerberus hat gesagt.:
Kann es sein, dass dein Spiel nicht MacOSX kompatibel ist?
Opps...ja, ich glaube das Webstart-File ist an der Stelle falsch. LWJGL für Mac gibt es nicht vernünftig bisher, weswegen unter MacOS eigentlich nur Software verwendet werden sollte. Habe aber wohl vergessen, das Laden der LWJGL-jar in den OS-spezifischen Teil des jnlp zu verschieben..ich ändere das am Montag. Dann sollte es zumindest im Software-Modus laufen...und unter OpenGL, wenn die Mac-Variante davon fertig ist.
 

Oxygenic

Bekanntes Mitglied
Also die Drehbewegung per Cursortaste ist momentan noch zu ungenau, so ist es fast unmöglich, gerade einen Gang entlang zu laufen bzw. vernünftig auf einen Gegner zu zielen.

Was mich ein wenig irritiert hat, ist, dass man mit Ctrl feuert. Ich bin da eher die Space-Taste gewöhnt. Die ist im Eifer eines Gefechts auch schneller zu finden ;-)

Btw: wie hast du die Explosionen gemacht? Sind das nur Bitmaps oder tatsächlich 3D-Objekte?
 

Oxygenic

Bekanntes Mitglied
Eben habe ich noch ganz was böses entdeckt: Ich habe bein Game getestet und im Hintergrund Eclipse und Opera laufen gehabt. In beiden Programmen geht die Tastaturwiederholung jetzt nicht mehr - um in einem Text zu Navigieren muss man wie blöde die Cursortasten drücken.

Nachtrag: Das Problem lässt sich nicht mal durch einen Neustart des X-Servers beheben, der hängt sich dabei nämlich gleich komplett auf :-(
 

EgonOlsen

Bekanntes Mitglied
Oxygenic hat gesagt.:
Eben habe ich noch ganz was böses entdeckt: Ich habe bein Game getestet und im Hintergrund Eclipse und Opera laufen gehabt. In beiden Programmen geht die Tastaturwiederholung jetzt nicht mehr - um in einem Text zu Navigieren muss man wie blöde die Cursortasten drücken.
Ja, unter Linux gibt es da wohl ein Problem. Ich selber habe es nicht, aber schon von anderen gehört. Kann ich nur leider nicht viel dran machen, weil es wohl eine Macke in LWJGLs Keyboard-Code zu sein scheint. Werde ich Macher beizeiten mal anhauen deswegen.
Was das Drehen per Cursor-Tasten angeht: Ich denke, ich werde das ganz entfernen und nur noch auf Mausdrehung gehen. Die Explosionen sind 3D, aber müssen wie oben schon erwähnt noch ersetzt werden. Sie werden aber auch dann 3D sein.
 

0xdeadbeef

Top Contributor
Ich habe mal irgendwo gelesen, daß das Problem noch tiefergehend ist: unter Linux bekommt man durch die Tastaturwiederholung bei jeder Wiederholung "pressed, typed,released", solange man die Taste gedrückt hält. Unter Windows dagegen "pressed,typed" und ein released erst beim tatsächlichen Loslassen. Daher muß man als Workaround unter Linux die Tastaturwiederholung global (also zumindest auf Ebene der JVM) abschalten, um nicht falsche released-Events durch die Tastaturwiederholung zu bekommen.
 

EgonOlsen

Bekanntes Mitglied
0xdeadbeef hat gesagt.:
...Daher muß man als Workaround unter Linux die Tastaturwiederholung global (also zumindest auf Ebene der JVM) abschalten, um nicht falsche released-Events durch die Tastaturwiederholung zu bekommen.
Ja, das stimmt. Entweder "vergesse" ich, dies beim Beenden wieder zu korrigieren (kann sein, kann ich aber erst am Montag nachgucken) oder LWJGL spinnt hier irgendwie.
 

Oxygenic

Bekanntes Mitglied
0xdeadbeef hat gesagt.:
Daher muß man als Workaround unter Linux die Tastaturwiederholung global (also zumindest auf Ebene der JVM) abschalten, um nicht falsche released-Events durch die Tastaturwiederholung zu bekommen.

Das Problem besteht tatsächlich und ist IMHO ein JVM-Bug - aber wie schaltet man die Tastaturwiederholung unter Java aus?

Die Sch*** Benachrichtigen-Funktion funktioniert hier wohl auch nicht... :-(
 

EgonOlsen

Bekanntes Mitglied
So, eine neue Version ist fertig (evtl. zweimal laden...Webstart kapiert sonst manchmal nicht, dass was neues vorliegt), die jetzt auch auf dem Mac laufen sollte...zwar "nur" mit Software Rendering, aber immerhin. Das mit der Tastatur unter Linux habe ich geprüft. LWJGL verhindert während der Laufzeit des Programms die Tastenwiederholung und da das eine globale Geschichte ist, gilt das leider auch für alles im Hintergrund. Nach Beenden des Programms sollte es aber wieder korrekt funktionieren. Ich setze es jedenfalls nach bestem Wissen und Gewissen zurück...
 

Kerberus

Bekanntes Mitglied
Ja, es läuft unter MacOSX, aber die Performance ist nicht gerade überzeugend. Mit einer Auflösung von 800*600 benötigte das Programm >=70% der CPU-Leistung. Hatte so ca. 4 fps.
Mein Computer:
Apple G4 867MHz
384 MB SdRam
 

EgonOlsen

Bekanntes Mitglied
Kerberus hat gesagt.:
Ja, es läuft unter MacOSX, aber die Performance ist nicht gerade überzeugend. Mit einer Auflösung von 800*600 benötigte das Programm >=70% der CPU-Leistung. Hatte so ca. 4 fps.
Naja, 800*600 sind auch ein bisschen viel für eine knapp 900Mhz CPU mit lediglich SDRAM. Als Richtwert mag gelten, dass der Software-Modus in 640*480 ab etwa einem Athlon XP 2200+ vernünftig nutzbar ist. Wenn der LWJGL-Port für den Mac fertig ist, wird sich die Situation bessern... :wink:
 

Oxygenic

Bekanntes Mitglied
EgonOlsen hat gesagt.:
Das mit der Tastatur unter Linux habe ich geprüft. LWJGL verhindert während der Laufzeit des Programms die Tastenwiederholung und da das eine globale Geschichte ist, gilt das leider auch für alles im Hintergrund. Nach Beenden des Programms sollte es aber wieder korrekt funktionieren.

Nope, das Problem besteht nach wie vor. Wenn das Programm im HW-Mode gefahren wird, sind _hinterher_ alle Key-Repeats global deaktiviert. Aber wenn das von der LWJGL gesteuert wird, wundert es mich nicht wirklich, das es nicht funktioniert...
 

Kerberus

Bekanntes Mitglied
@EgonOlsen: Du weisst aber, dass du die MHz-Anzahl des Apple's mal 2 rechnen musst, damit mit du in etwa die CPU Leistung einer WindwosMaschine erhälst. Teste das Programm mal noch auf meinem G5 2*1.8GHz, 1.5GB RAM und natürlich 64B-Prozessoren. Schreibe später noch einmal, wie es lief.


[EDIT]
So, habe das Game ausprobiert. Bringe es schon auf 20fps bis 25fps! Nehme ich die zweit kleinste, dann habe ich 70fps, allerdings sehe ich dann nicht mehr viel, verglichen mit der Grösse des Bildschirms. Allerdings funktioniert die Steuerung nicht. In der 3D Ansicht schlägt das Drehen oftmals fehl. Auch das Schiessen funktioniert nur sporadisch und als ich den Robot dann zum Schiessen gebracht habe, wollte er nicht mehr damit aufhören.
 

EgonOlsen

Bekanntes Mitglied
@Oxygenic: Probier jetzt bitte mal...ich habe die Reihenfolge der ganzen destroy()s geändert. Vielleicht funktioniert es jetzt. Konnte es bei mir ein paarmal reproduzieren, nach der Umstellung der Reihenfolge nicht mehr.

@Kerberus: *2...naja, theoretisch hast du sicher recht. Aber zumindest was Java angeht, konnte ich das bisher nicht beobachten. Egal, läuft ja gut auf dem G5. Was die Steuerung angeht: Das sind ganz normale Mouse(Motion)Listener auf dem Frame. Ich habe in der aktuellen Version mal die Priorität des Game-Threads auf Minimum gesetzt. Bei Applets half das früher immer in solchen Fällen, aber eine Dualprozessor-Maschine wie deine sollte eigentlich genug Reserven haben, den Eventthread vernünftig zu behandeln... ???:L Naja, probier doch bitte einfach nochmal. Vielleicht ist es so besser...
 

Kerberus

Bekanntes Mitglied
Interessant ist auch, dass der Cursor verschwindet. Nur wenn ich dein Programm beende, habe ich wieder die Möglichkeit andere Programme zu starten etc.
Dass Java unter MacOSX langsam ist, stimmt schon. Dies liegt aber nicht an der Hardware sondern viel eher daran, dass Apple die VM selbst schreiben muss, wodurch sie vielleicht auf MacOSX optimiert ist, jedoch nicht auf Java :)
Werde das Game morgen noch einmal ausprobieren....
 

EgonOlsen

Bekanntes Mitglied
Kerberus hat gesagt.:
Interessant ist auch, dass der Cursor verschwindet. Nur wenn ich dein Programm beende, habe ich wieder die Möglichkeit andere Programme zu starten etc.
Das ist Absicht. Ich setze den Cursor auf ein leeres Bild und platziere ihn immer wieder in der Mitte des Fensters (mittels java.awt.Robot), um auch im Fenster-Modus vernünftige Delta-Werte für die Bewegung zu erhalten. Wenn du auf 2D zurück schaltest, ist er auch wieder da.
 

Oxygenic

Bekanntes Mitglied
EgonOlsen hat gesagt.:
@Oxygenic: Probier jetzt bitte mal...ich habe die Reihenfolge der ganzen destroy()s geändert. Vielleicht funktioniert es jetzt. Konnte es bei mir ein paarmal reproduzieren, nach der Umstellung der Reihenfolge nicht mehr.

Also auf einem System mit NVidia- bzw. Savage-Graka startet das Programm gar nicht erst, so dass ich es nicht testen kann. Ich probiere es heute abend noch mal auf der ATI-Kiste, auf der es bisher immer funktioniert hat.
 

EgonOlsen

Bekanntes Mitglied
Oxygenic hat gesagt.:
Meine Frage ist hier glatt übersehen worden!?
Öhh..jaaa...keine Ahnung... :wink: LWJGL macht das von sich aus. Nach einem Keyboard.create() ist das unter Linux zumindest für die VM (angeblich) so. Problem war, dass das nach dem destroy() auf einmal für alles galt. Aber das scheint ja jetzt ok zu sein. Danke nochmal fürs Testen.
 

EgonOlsen

Bekanntes Mitglied
Es hat sich einiges getan: Das Spiel enthält jetzt alle Roboter des Orginals mit ihren jeweiligen Eigenschaften (bis auf den Disruptor) und man kann Roboter per "Transfer" übernehmen. Dazu die rechte Maustaste gedrückt halten und in den Gegner reinrennen. Das Transfer-Zwischenspiel gibt es noch nicht, d.h. die Übernahme klappt immer. Ferner kann man Gegner jetzt auch kaputtrammen...aber die können das auch... :wink:
Sound gibt es in Ansätzen auch, momentan ausschließlich über die bei Java mitgelieferten Klassen. Zusätzlicher Support für OpenAL kommt später.

Nochmals die URL: http://www.jpct.net/para3d2/test.jnlp

P.S.: Nach dem Ableben einfach 'n' drücken und es geht weiter, 'L' wechselt den Level...alles wie gehabt.
 

DesertFox

Bekanntes Mitglied
Hey das Spiel ist echt gut, jetzt kannste dich ja an mehr Level wagen, oder wie gesagt, das mit dem übernehmen noch basteln, weil derzeit kann man mit etwas glück (v.A im 2. Level) einfach in die Gegner reinrennen, was doch relativ einfach ist
 
G

Guest

Gast
Oxygenic hat folgendes geschrieben::
wie schaltet man die Tastaturwiederholung unter Java aus?

:meld:
so gehts:
Code:
boolean key[1000]
boolean ignoretyped;

boolean isPressed(int key) {return keys[key];}

public void keyPressed(KeyEvent e) {
 ignoretyped=isPressed(e.getKeyCode());
 if(ignoretyped)return;
keys[e.getKeyCode()] = true;
...
}

public void keyTyped(KeyEvent e) {
  if (e.isConsumed()) return;
 if(ignoretyped)return;
...
}

Paradroid:
bei der Amiga Version habe die Schüsse so einen geilen Partikelschweif hinter sich hergezogen, die Partikel (damals einzelne Pixel) haben auch Schatten geworfen und prallten von der Wand ab (lange her...)
DAS wär doch ein nettes Feature.

Kann deins grad nur eingeschränkt spielen (alter Gericom Laptop, interne Grafik), habs auch schon mit jwgl gesehen. Freu mich schon aufs Übernahmematch :D
 

Hansdampf

Bekanntes Mitglied
sorry,
fu**** auto auslog.

der code oben ist natürlich nur pseudo :roll:
da fehlt auch noch
Code:
public void keyReleased(KeyEvent e) {
          keys[e.getKeyCode()] = false;

und das
if (e.isConsumed()) return;
gehört auch weg
 

EgonOlsen

Bekanntes Mitglied
Das Transfer-Subgame ist drin. Spielt sich in etwa wie das Orginal auf dem C64: Nachdem man mit gedrückter rechter Maustaste in einen Gegner gerammelt ist, wählt man mit den CRSR-Tasten seine Seite aus (Bestätigen mit Space/linker Maustaste) und dann muss man mit CRSR und Feuer (Space/Maus) seine "Energieteile" so setzen, dass in der Mitte mehr Felder in der eigenen Farbe sind als in der des Gegners. Gelingt das, übernimmt man den Gegner.

http://www.jpct.net/para3d2/test.jnlp
 
B

Beni

Gast
Jetzt müsste mir nur noch jemand erklären wie dieses Subgame funktioniert... wie wählt man die richtige Position, und wieso hat der Gegner immer doppelt so viele dieser komischen _|_ Dinger?
 

EgonOlsen

Bekanntes Mitglied
Du musst die Position wählen, die taktisch am günstigsten ist. Um das sicher zu erkennen, muss man es einige Male gespielt (und begriffen... :wink: ) haben. Die Anzahl der "Dinger" richtet sich ganz grob nach der Nummer des Gegners. Ein 999 Droide hat z.B. 15 davon. Wenn man ihn übernimmt, spielt man im nächsten Übernahmespiel auch mit 15 (oder z.B. mit 7 beim 329). Der 000, mit dem man beginnt, hat 4 und damit die wenigsten.
 

EgonOlsen

Bekanntes Mitglied
Es sind jetzt alle Level des C64-Orginals drin, ein Menü (Options geht aber noch nicht) und viele viele kleine Änderungen bzgl. der Spielbarkeit und etliche Bugfixes. Die Texturen sind auch geändert, aber ich bin einfach zu talentbefreit, als das sie wirklich gut wären.

URL wie immer: http://www.jpct.net/para3d2/test.jnlp

Und ein wenig spektakulärer Screenshot: http://www.jpct.net/img/proj/para3d/shot8.jpg

Ach ja: Es sollte jetzt nicht mehr nur unter Windows und Linux mit OpenGL laufen, sondern die Libs für OSX sind auch dabei. Aber ob das auch läuft, darüber habe ich leider bisher kein Feedback bekommen. Ist hier jemand, der das mal testen kann?
 

EgonOlsen

Bekanntes Mitglied
Das Spiel ist jetzt soweit komplett spielbar, d.h. alle Level sind weitgehend fertig, das Balancing scheint in etwa zu stimmen und eine Online-Highscore-Liste gibt es auch (gerade eben zurückgesetzt, man kann also noch mit wenig Aufwand einen guten Platz rausholen... :wink: ).

URL unverändert: http://www.jpct.net/paradroidz

Will mich dann mal an besseren Texturen versuchen...oje... ???:L
 

Hansdampf

Bekanntes Mitglied
Mich ham se auch nicht gefragt. Ich könnte platzen vor Wut :D
Aber was lässt man nicht alles für 6 Sekunden Ruhm über sich ergehen...
 

EgonOlsen

Bekanntes Mitglied
Nach längerer Zeit mal wieder ein Update: Es ist jetzt eine Art "Fog of War" drin. Damit wird vielleicht klarer, wieso welche Roboter wann aus dem Sichtfeld verschwinden. Vor allem für Leute, die das Orginal nicht kennen war das vorher wohl nicht so ganz deutlich. Ich hoffe, das ist jetzt besser verständlich. URL ist wie üblich: Paradroidz Homepage
 

EgonOlsen

Bekanntes Mitglied
Und mal wieder grabe ich diesen Thread aus, um ein größeres Update zu verkünden: Die Roboter haben jetzt vernünftige 3D-Modelle verpasst bekommen, d.h. es sind nicht mehr alles nur langweilige Kugeln. Und so sieht das aus:

newmodels.jpg
 
Status
Nicht offen für weitere Antworten.

Oben