# [Spielvorstellung] Block Shifter



## tdc (6. Jan 2012)

Hi,
ich möchte euch mein aktuelles Projekt vorstellen: ein Spiel namens "Block Shifter".

Das Spielprinzip sieht folgendermaßen aus: Man spielt aus der Ego-Perspektive und muss zu einem Ziel kommen. Dafür muss man verschiedene Hindernisse überwinden und Rätsel lösen, indem man Blöcke verschiebt. Die Blöcke haben verschiedene Farben und dadurch auch verschiedene Eigenschaften.

Die ursprüngliche Idee stammt von diesem Video: Link
Eigentlich wollte ich das schon damals umsetzen, als ich das Video gesehen habe, aber mir fehlten noch die nötigen Fähigkeiten im 3D-Bereich. Inzwischen gibt es auch Konkurrenz: Q.U.B.E.
(die mir grafisch ziemlich weit vorraus ist, die benutzen aber auch UDK)

Leider sind noch nicht alle Bugs behoben und es fehlt noch ein wenig (vor allem Maps), aber es ist bereits spielbar. Es ist auch nur eine sehr sehr kurze Demo, da es nur eine kurze Map gibt. Ich wollte aber schon heute eine kurze Demo veröffentlichen, da auch heute Q.U.B.E. veröffentlicht wird. 

Was haltet ihr von meinem Spiel?
Wie gesagt, das Spiel ist noch lange nicht fertig und ich habe schon einige Sachen geplant, aber Verbesserungsvorschläge sind immer willkommen.

Download-Link: Demo


----------



## truesoul (6. Jan 2012)

Ich drück mal den "Gefällt mir" Button 
Ich mag solch Spiele, und mit den Blöcken und deren Eigenschaften find ich toll. 
Weiter so.


----------



## Skanky (7. Jan 2012)

Ich finde die Idee auch cool.

Was mir aufgefallen ist:
- das man ab und an aus dem Level fliegt und dann fällt (was aber gut ist, das du die Figur abfängst und wieder auf Start setzt) 
- die Steuerung bedarf meiner Meinung nach noch ein wenig an fein Tuning

Ansonsten TOP! weiter so


----------



## Fab1 (7. Jan 2012)

Irgendwie will das Programm bei mir nicht, muss man irgendwas beachten? Es öffnet sich zwar ein Fenster, aber anschließend bekommt es keine Rückmeldung.


----------



## tdc (7. Jan 2012)

truesoul hat gesagt.:


> Ich drück mal den "Gefällt mir" Button
> Ich mag solch Spiele, und mit den Blöcken und deren Eigenschaften find ich toll.
> Weiter so.


Danke. 



Skanky hat gesagt.:


> Ich finde die Idee auch cool.
> 
> Was mir aufgefallen ist:
> - das man ab und an aus dem Level fliegt und dann fällt (was aber gut ist, das du die Figur abfängst und wieder auf Start setzt)
> ...


Dass man aus dem Level rausfliegt liegt an meiner schlechten Kollisionserkennung in Kombination mit schlechter Performance.  Ich hoffe mal, dass es besser wird, wenn ich die Performance verbessere, ansonsten muss ich mich noch ein drittes Mal mit der Kollisionserkennung befassen. (Kollisionserkennung ist bei mir sozusagen das Hass-Thema, aber es gehört leider dazu)

Was genau sollte ich an der Steuerung verbessern? Meinst du, dass nicht immer der anvisierte Block verschoben wird, sondern dass das Ziel leicht verschoben ist? (<- daran muss ich nochmal arbeiten, aber bisher habe ich den Fehler noch nicht gefunden) Oder die Steuerung der Zielfigur?



Fab1 hat gesagt.:


> Irgendwie will das Programm bei mir nicht, muss man irgendwas beachten? Es öffnet sich zwar ein Fenster, aber anschließend bekommt es keine Rückmeldung.



Welches Betriebssystem hast du und wie versuchst du, das Spiel zu starten? Ansonsten versuche doch mal, die start.bat, bzw. die start.sh über die Konsole zu starten und eine eventuelle Fehlermeldung hier zu posten. Ich weiß, dass das starten noch nicht ganz optimal ist, allerdings wollte ich gestern "noch schnell" die aktuelle Version hochladen und deshalb habe ich auf die schnelle keine bessere Lösung gefunden.



Ansonsten: Wie bereits gesagt, es ist eine sehr sehr kurze Demo, ich werde aber weiter an dem Spiel arbeiten und es ausbauen.


----------



## gman (7. Jan 2012)

Hi,

unter Ubuntu 11.10/64bit bekomme ich folgende Fehlermeldung beim Starten mit start.sh:


```
:~/Programme/Block Shifter$ sh start.sh 
org.lwjgl.LWJGLException: Could not choose GLX13 config
	at org.lwjgl.opengl.LinuxDisplayPeerInfo.initDefaultPeerInfo(Native Method)
	at org.lwjgl.opengl.LinuxDisplayPeerInfo.<init>(LinuxDisplayPeerInfo.java:52)
	at org.lwjgl.opengl.LinuxDisplay.createPeerInfo(LinuxDisplay.java:717)
	at org.lwjgl.opengl.Display.create(Display.java:855)
	at org.lwjgl.opengl.Display.create(Display.java:785)
	at game.Game.init(Game.java:123)
	at game.LevelLoader.loadLevel(LevelLoader.java:16)
	at gui.MainMenu.update(MainMenu.java:354)
	at gui.MainMenu.start(MainMenu.java:97)
	at game.Start.main(Start.java:12)
```

Mir ist auch aufgefallen das ein Fehler auftritt wenn man die Auflösung ändert und dan
auf Accept klickt:


```
:~/Programme/Block Shifter$ sh start.sh 
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 >= 1
	at java.util.Vector.elementAt(Vector.java:427)
	at gui.MainMenu.update(MainMenu.java:384)
	at gui.MainMenu.start(MainMenu.java:97)
	at game.Start.main(Start.java:12)
```

Wenn das Spiel bei mir laufen würde, fänd ich es glaub ich auch toll ;-)


----------



## tdc (7. Jan 2012)

Ja, das mit der Auflösung ist mir schon aufgefallen und habe ich schon geändert: Link

Die Zeile, in der die erste Fehlermeldung auftritt, lautete:

```
Display.create(new PixelFormat(0, 24, 1).withSamples(4));
```
Dort habe ich jetzt mal den Stencil-Bit rausgenommen und ich denke ich ändere später die Optionen dahingehend, dass man mehr Einstellungsmöglichkeiten hat, denn ich denke es liegt daran, dass deine Grafikkarte irgendetwas nicht unterstützt oder zu schlecht ist. (probiere nochmal die aktuelle Version)

Edit: @gman: Welche Grafikkarte hast du?


----------



## gman (7. Jan 2012)

> Welche Grafikkarte hast du?



Die vom Core i7.


----------



## Helgon (7. Jan 2012)

Ich bin ins erste Loch gefallen und nicht mehr rausgekommen  Da mim blauen Block.
Außerdem kann man durch Wände schauen, nichts desto trotz sehr geil


----------



## tdc (7. Jan 2012)

gman hat gesagt.:


> Die vom Core i7.


Ähm... Core i7 ist doch ein Prozessor?
Egal, ich wollte letztendlich darauf hinaus, dass du evtl. eine ATI-Grafikkarte hast, die von Ubuntu nur schlecht unterstützt werden. Aber keine Ahnung woran genau es liegen könnte.



Helgon hat gesagt.:


> Ich bin ins erste Loch gefallen und nicht mehr rausgekommen  Da mim blauen Block.
> Außerdem kann man durch Wände schauen, nichts desto trotz sehr geil


Danke. 
Im Loch mit dem Blauen Block ist in der Ecke auch ein weißer Block. Da einfach draufstellen, nach unten schauen, klicken und schon ist man wieder draußen. Im Notfall kann man auch "R" drücken um wieder zum Startpunkt zu gelangen.
Das "durch die Wände schauen" kommt durch Backface-Culling. Ich könnte das auch ausschalten, dann wäre das Spiel allerdings noch langsamer als ohnehin schon.
(demnächst kann ich mal eine Version hochladen bei der das sehr unperformante Blöcke-Verschieben in einen seperaten Thread ausgelagert ist, wodurch man nahezu konstant 50 FPS bekommen sollte)


----------



## gman (7. Jan 2012)

Hi,

mit "die vom Core i7" meinte ich die integrierte Grafik -> "HD Graphics 3000".
Oder kurz und einfach: Eine Intel-Grafikkarte.


----------



## Helgon (7. Jan 2012)

Achja und beim starten kackt das programm entweder erst ab und ich bekomm das "fenster schliesen" ding von windows und dann aufeinmal poppt das spiel richtig auf, oder meine java se binary crasht und dann wars das.


i5 2500k
295 gtx II
w7 64x

edit: ich dachte das wär eben nurn doofer zufall, aber nachm starten (bis es abkackt oder dann doch mal angeht) schiest meine cpu auf 100% auslastung und das bei 3.5-4ghz ???:L


----------



## tdc (7. Jan 2012)

Helgon hat gesagt.:


> Achja und beim starten kackt das programm entweder erst ab und ich bekomm das "fenster schliesen" ding von windows und dann aufeinmal poppt das spiel richtig auf, oder meine java se binary crasht und dann wars das.
> 
> 
> i5 2500k
> ...



Und davor hat es funktioniert? Merkwürdig.
Dass die Auslastung sehr sehr hoch ist, weiß ich. Ich versuche zurzeit das zu ändern.

Edit: Allein im Demolevel befinden sich zurzeit 5920 Objekte. Mit so vielen Objekten habe ich noch nie etwas gemacht und ich bin mir nicht ganz sicher, wie ich das noch performanter gestalten könnte.


----------



## Helgon (7. Jan 2012)

Habs bisher nur 2x anbekommen von 10 versuchen. 

Aber jedes mal erstmal "Keine Rückmeldung" im Fenster vom Spiel und entweder es geht dann irgendwann an oder "Programm schliesen"


----------



## Helgon (7. Jan 2012)

Habs mal wieder anbekommen - Yipi

Und btw, ich hab fast durchgehend 60FPS aber was wirklich stört ist der weise Stein, ich stehe drauf drücke und der wächst einfach durch mich durch, passiert 8 von 10 Versuchen und schon nur auf den Blauen Stein zu hüpfen ist derbe frustrierend :/

Edit: oder ich drücke auf den weißen und nix passiert

Edit: Yipii ich hab die Demo durchgespielt


----------



## Maxim6394 (7. Jan 2012)

wie hast du das mit der physik geregelt, dass man springen kann und auch runterfällt?


----------



## tdc (7. Jan 2012)

*Aktuelle Version:* Download
Es sollte jetzt um einiges Performanter sein. Jetzt erweitere ich erstmal das Spiel selbst ein wenig. Außerdem wird es wahrscheinlich erstmal etwas dauern, bis ich wieder etwas hochlade, denn am Montag fängt für mich die Schule wieder an.



Maxim6394 hat gesagt.:


> wie hast du das mit der physik geregelt, dass man springen kann und auch runterfällt?


Ich habe es von meinem vorigen Spiel kopiert. 
Naja, jedes mal vor der Kollisionserkennung wird "mainplayer.checkGravity(delta);" aufgerufen:

```
public void checkGravity(int delta)
	{
		camera.gravity(delta); //wird an die Camera weitergegeben (ist eigentlich egal, wo genau es berechnet wird)
		if(camera.isTooDeep()) //prüft ob der Spieler schon zu tief ist
		{
			reset();
		}
		setY(camera.getY()-getHeight()); //errechnet aus der Cameraposition die Spielerposition
	}
```


```
public void gravity(int delta)
	{
		float falldistance = 0;
		if(!bottom) //Prüfen ob der Spieler mit dem Boden kollidiert
		{
			falltime = 0; //Fallzeit wird auf 0 gesetzt
			if(!newjump)  //irgendwie ergibt das für mich keinen Sinn...
			{                      //Ja, ich habe keine Ahnung
				jumpspeed = 0;  //du kannst ja mal den Code kopieren und ihn ausprobieren
			}                             //ist wohl schon zu lange her
		}                                     //Hauptsache, es funktioniert
		else
		{
			falltime += delta;
			falldistance = 0.5f * gconst * (falltime * falltime) * delta / 5;
		}
		newjump = false;
		setY(getY()-falldistance+jumpspeed * delta / 5);
		if(jumpspeed != 0)
		{
			jumpspeed -= delta * 0.00001;
			if(!top)
			{
				jumpspeed = 0;
			}
		}
		rotation(0,0); //aktualisiert die rotierte Position
	}
```


----------



## Kr0e (8. Jan 2012)

Ansich ne nette Idee, aber total verbuggt leider...


----------



## tdc (8. Jan 2012)

Kr0e hat gesagt.:


> Ansich ne nette Idee, aber total verbuggt leider...



Was genau ist denn verbuggt?
Das mit dem Zielen habe ich jetzt wohl gelöst und werde ich dann mit der nächsten Version hochladen.
Wegen der Kollisionserkennung muss ich wohl nochmal schauen. Aber gibt es sonst noch Bugs?


----------



## Kr0e (8. Jan 2012)

Hm, ne außer der Kollisionerkennung ist mir nichts aufgefallen, außer vlt die extrem lange Ladezeit. initialisierst du da iwas großes ? Aber die Kollisionserkennung und vorallem die Kollisionsbehanldung ist echt merkwürdig... Hm. Außerdem kan nich durch Wände schauen, wenn ich genau vor der Wand stehe...


----------



## Helgon (8. Jan 2012)

Vllt sollteste dir mal Minecraft angucken (ist doch nur ne .jar das Spiel, oder?)

Also wenns da mit über ner Mio Cubes geht, vllt kriegste paar Ideen (bezüglich Performance)


----------



## tdc (8. Jan 2012)

Kr0e hat gesagt.:


> Hm, ne außer der Kollisionerkennung ist mir nichts aufgefallen, außer vlt die extrem lange Ladezeit. initialisierst du da iwas großes ? Aber die Kollisionserkennung und vorallem die Kollisionsbehanldung ist echt merkwürdig... Hm. Außerdem kan nich durch Wände schauen, wenn ich genau vor der Wand stehe...



Also ich habe es jetzt mal auf meinem leistungstechnisch eher mittelmäßigen Laptop getestet und da gibt es am Anfang wirklich eine sehr lange Ladezeit. Das muss aber irgendwie mit dem Laden von LWJGL zusammenhängen, denn beim Menü initialisiere ich kaum was.

Wie viele FPS bekommst du eigentlich?
auf meinem Laptop sind es nämlich gerade mal 20 (auf dem Linux-PC sind es konstant 50) und da ist die Kollisionserkennung wirklich sehr schlecht und man landet leicht mal außerhalb des Levels. Eigentlich dürfte das nicht passieren, allerdings wird das irgendwie durch die Positions-Korrektur verursacht. Diese Positions-Korrektur ist dafür gedacht, dass sie den Spieler verschiebt wenn er von einem Block weggeschoben wird.

Das "durch Wände sehen" ist, wie oben schon beschrieben, gewollt, denn das ist das Backface-Culling wodurch das Rendern ein wenig beschleunigt wird. (okay, es liegt auch daran, dass die Kamera leicht vor dem Spieler ist und dadurch wenn man gegen einen Block läuft im Block drin ist)



Helgon hat gesagt.:


> Vllt sollteste dir mal Minecraft angucken (ist doch nur ne .jar das Spiel, oder?)
> 
> Also wenns da mit über ner Mio Cubes geht, vllt kriegste paar Ideen (bezüglich Performance)



Minecraft selbst ist nicht Open-Source. Es hat zwar eine .jar, die man auch mithilfe eines "Decompilers" lesen könnte aber dann ist der Code ziemlich unleserlich und ich glaube auch kaum, dass er mir groß weiterhelfen würde.

Natürlich gibt es andere Open-Source Minecraft Klone, die ich mir mal ansehen könnte, aber ich glaube das mir das nicht allzu sehr weiterhelfen würde... (ich schau trotzdem mal kurz  )


----------



## BlockShifter (8. Jan 2012)

Der Start dauert bei mir auch sehr lang und ingame hab ich nur 12-13 fps.
Dadurch fällt man beim Springen teils schon einfach durch den Boden oder wird, wenn man vor eine Wand läuft/springt, auf das Level gesetzt. 
Nette Aussicht: http://img835.imageshack.us/img835/7696/blkshift.jpg


----------



## Fu3L (9. Jan 2012)

Mhh, bei mir wills auch net starten. LWJGL öffnet das Fenster samt Titel, aber es bleibt schwarz und nix tut sich, bis Windoof sagt keine Rückmeldung.

Windows 7 64 bit
Intel Core i7 (erste generation)
ATI Radeon HD 4650
JRE 7

@Minecraft:
Die Modder müssten eigentlich irgendeine menschen-lesbare Variante des Minecraft Sources vorliegen haben.. Ich weiß nur nicht, ob die öffentlich verfügbar ist, da die meisten ja doch von Risugamis Modloader abhängen.


----------



## puelo (15. Jan 2012)

Kannst dir ja auch mal das hier angucken:

Let's Play Q.U.B.E. #01 [720p / Blind] - Noch ein Blöckchenspiel? - YouTube

Habs selber schon gespielt. War sehr nett.


----------



## tdc (15. Jan 2012)

Q.U.B.E. kenne ich schon, habe ich auch oben verlinkt. (und zombey kenne ich erst Recht)

Ich versuche jetzt das komplette Spiel nochmal in JME neu zu schreiben, da mir einiges noch nicht so richtig gefällt.
(Ja, ausnahmsweise war ich mal nicht vollkommen beratungsresistent  )


----------



## irgendjemand (15. Jan 2012)

hab mir mal die trailer zu C.U.B.E. und dem sehr verwanten spiel EDGE angesehen ...
an sich sehr geniale indie-games ... werd ich mir vielleicht demnächst bei steam kaufen ...

wer nun von wem geklaut hat *das video was du in deinem ersten post gelinkt hast* lässt sich nicht sagen ...

aber das du das ganze auf basis java *und wie ich gelesen habe sogar ME* nachbauen willst finde ich eine gute sache ... vielleicht wird es nicht so perfekt wie cube ... aber alleine der gedanke sowas mit java ... hmm naja gut ... siehe minecraft ... hätte auch keiner gedacht ...


----------



## tdc (15. Jan 2012)

Wer redet hier von klauen?
Von denen habe ich die Idee nicht geklaut, sondern, wie im Anfangspost schon beschrieben von dem "The Room"-Video.  (Erst als ich schon sehr weit war, bin ich auf Q.U.B.E. gestoßen)

Naja. Wie auch immer. Ich benutze ab jetzt evtl. JMonkeyEngine, da ich alleine mit LWJGL wohl nicht mehr weiter komme. Hoffentlich wird das Spiel dann einigermaßen spielbar sein. Mal sehen...


----------



## irgendjemand (15. Jan 2012)

nein ... ich rede doch nicht davon das DU die idee geklaut hättest ... sondern die von qube xD


----------

