spacebatz's Introduction
A fast-paced, top-down, co-op 2D game featuring: * Robots * Mining * Crafting * Shooting/Fighting * Exploring * Space travel * Quests Unfortunately we no longer have the time to work on this. So here it is, unfinished but with a lot of ideas and some fancy code (subtile hint: the networking code!). Copyright (c) 2011, 2012, 2013: - Tobias Fleig ([email protected]) - Michael Haas ([email protected]) - Johannes Kattinger ([email protected]) - Timo von Wysocki ([email protected]) - Patrick Epting ([email protected]) ALL RIGHTS RESERVED Licensed under the Apache License, Version 2.0 (the "License"); you may not use this files except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
spacebatz's People
spacebatz's Issues
ERROR! Net Packet overflow
Nach ca. 5 min rumfahren und rumschießen kommen folgende Fehlermeldungen in endlosschleife:
ERROR: CNET: Paket output overflow!!!
ERROR: NET: Paket output overflow!!!
Das Spiel verhält sich aber normal, alle Funktionen gehen weiterhin.
ConcurrentHashMap
Die Liste der Entities wir zur Zeit in einer ConcurrentHashmap gespeichert. Entities werden einfach aus der Liste gelöscht wenn sie sterben. Teilweise werden Entities gelöschr wärend durch die HashMap iteriert wird.
Es muss untersucht werden ob das zu Problemen führen kann, bevor später unerklärliche Sachen passieren.
Ausserdem sollte man eventuell über einen einheitlichen Löschmechanismus nachdenken.
z.B. wird bei Entities, die entfernt werden sollen eine Flag gesetzt, und der Entitymanager löscht jeden Gametick alle Entities die diese Flag haben.
Kommandokommunikation umstellen
Die Kommandos in Server- und Client- Message-Sender und -Interpreter mit dem neuen System übermitteln.
Es fehlen noch Kommandos, die mit der Spielinitialisierung zu tun haben. Die werden portiert sobald der neue pre-Mainloop fertig ist.
Spielstart auf neues Netzwerksystem umstellen, altes ganz löschen
Ansonsten dürfte alles gemacht sein
Positionssynchronisierung
Die Positions- und Bewegungssynchronisierung die das alte Netzwerksystem gemacht auf das neue Netzwerksystem übertragen werden.
Nullpointer in UDPConnection
java.lang.NullPointerException
at de._13ducks.spacebatz.server.network.UDPConnection.sendData(UDPConnection.java:302)
at de._13ducks.spacebatz.server.network.UDPConnection.send(UDPConnection.java:122)
at de._13ducks.spacebatz.server.gamelogic.MainLoop$1.run(MainLoop.java:62)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
java.lang.NullPointerException
Tritt nach ca. 5 min Spielzeit einfach so sporadisch auf. Nicht direkt reproduzierbar, trat jedoch schon etwa 10 mal auf.
Farbiger Text
Ich will farbigen Text rendern können.
Dazu muss man nur die Buchstaben-Tilemaps von Schwarz auf weiß ändern, und dann das normale einfärben verwenden.
Das ist was schönes für zwischendurch (aka ich brauche das schnell) :)
Gegnerverhalten implementieren
Die Gegnerverhalten die in Spacebatz.txt dokumentiert sind implementieren.
Netzwerksystem: Lerp manuell anpassbar machen
Der Lerp sollte per Konsolenbefehl eingestellt werden können.
Man muss das testen, eventuell kann man um Ruckler zu vermeiden den Lerp danach nicht in einem Schlag anpassen sonder innerhalb von X Sekunden verschieben
Stillstehende Gegner werden nicht synchronisiert
Gegner, die sich nicht bewegen, sind auf dem Clients nicht sichtbar.
Mehrspielermodus
Der lokale Mehrspielermodus geht nicht und der normale Mehrspielermodus wurde noch nicht getestet, seit der Umstellung auf das neue System.
Grafikengine refaktorisieren
Die Grafikengine mus refaktorisiert werden, so dass nicht der ganze GUI-Code in einer Klasse steht.
Der Char hat Eigenschaften die das Schießen beeinflussen.
Globales Inventar für Materialien/Zutaten für jeden Spieler
Cooldowns für Skills einbauen.
Wrapper-Klasse für STC und CTS-Command (FixedSizeSTCCommand und FixedSizeCTSCommand)
Wrapper-Klassen die sich um die größe kümmern bei Commands mit statischer Größe.
Rucksack für Waffen für jeden Spieler
Netzwerksystem: Metriken
Das neue Netzwerksystem soll zukünftig selber die Ping-Messungen machen und den NetGraph mit Inhalten füllen. Die Informationen über das alte System sind nicht mehr so interessant.
ACK/Repeat auch für CTS
Nullpointer bein Anziehen von Items
java.lang.NullPointerException
at de._13ducks.spacebatz.shared.network.messages.STC.STC_EQUIP_ITEM.execute(STC_EQUIP_ITEM.java:30)
at de._13ducks.spacebatz.client.network.STCPacket.runCommand(STCPacket.java:49)
at de._13ducks.spacebatz.shared.network.NetPacket.internalCompute(NetPacket.java:134)
at de._13ducks.spacebatz.shared.network.NetPacket.compute(NetPacket.java:95)
at de._13ducks.spacebatz.client.network.ClientNetwork2.inTick(ClientNetwork2.java:426)
at de._13ducks.spacebatz.client.graphics.Engine.start(Engine.java:173)
at de._13ducks.spacebatz.shared.network.messages.STC.STC_START_ENGINE$1.run(STC_START_ENGINE.java:28)
at java.lang.Thread.run(Thread.java:722)
Befehlsnummern auf seriöse Werte setzen
Interne wie ACK auf >= 0x80 ändern
MapGen: Map-Viewer basteln
Meine Damen und Herren, die Arbeit am Level-Generator wurden offiziell aufgenommen!
Schritt 1: Ein gescheites Map-Anzeigeprogramm, das unabhängig vom Spiel läuft.
Netzwerksystem: Flusskontrolle
Das Netzwerksystem muss bei Bedarf deutlich mehr Daten schicken können. Dazu müssen mit unter mehr als ein Paket pro Tick rausgehauen werden.
Neue Mobs einbauen
Die neuen Mobs, die Timo hochgeladen hat, einbauen.
Client-To-Server Kommunikation auf Network2 umstellen
Itemattribute als IDs codieren, so dass nur noch die IDs zum Client gesendet werden müssen.
Map-Übertragung
Das Level zu Serialisieren und Deserialisieren dauert zu lange und braucht wegen der Größe zu lange zum Komprimieren/Dekomprimieren. Wenn man das Level selber externalisiert sollte man da viel Zeit sparen können.
Da man das Spiel zum Testen schnell starten sollte ist das relativ wichtig.
Client hängt kurz wenn sehr viele Gegner getötet werden.
Netzwerkverkehr auf neues Netzwerksystem umstellen
Das neue Netzwerksystem funktioniert, jetzt müssen alle Kommandos darauf übertragen werden.
Weiter brauchen wir einen pre-Mainloop der Netzwerkpackete empfängt solange die Engine auf dem Client nicht gestartet ist.
ZufallsItemGenerator umschreiben
Hüte können gerade einen Schadensbonus geben und selber Schaden haben, der aber sinnlos ist da Hüte keine waffen sind.
Gegnerfähigkeiten
Gegner sollen Fähigkeiten benutzen.
Normale & Custom-Commands verzögert ausführen (Lerp)
Einheitenverhalten ändert Richtung zu oft
Derzeit ändern alle sich bewegenden Einheiten bei jedem Tick ihre Richtung, weil sie und das Ziel sich in der Regel bewegen und der Vektor dazwischen dann eben jedes mal anders ist.
Dadurch werden unnötig viele Infos übers Netzwerk übertragen.
Das Verhalten jeder einzelnen Einheit muss nicht bei jeden Tick neu berechnet werden.
Bitte massiv reduzieren.
Das alte Netzwerksystem fand das schon nicht gut, das neue zickt damit etwas mehr rum, da noch keine Flusskontrolle da ist.
Dieses Issue blockt die Fertigstellung von #18
Gegner spawnen in einer Wand.
Neuer Bewegungsmodus: Verfolgung
Entities, die in diesem Bewegungsmodus sind verfolgen eine ZielEntity indem sie Luftlinie darauf zulaufen.
Netzwerksystem: Nachrichtengröße
128 Byte sind zu wenig.
Soll ich eine Utility-Klasse schreiben die größere Arrays splittet und wieder zusammenfügt?
Oder wird das noch im Netzwerkmodul implementiert (wäre schöner) ?
Netzwerk: Client abschießen wenn er mit der Packetverarbeitung nicht mehr nachkommt.
MapGen: Perlin-Noise bestimmt Berge/Freiflächen
Möglichkeit einbauen, Signale zum Senden an das Netzwerksystem zu geben
Wegfindung implementieren
Serverseitig eine Wegfindung implementieren.
Die Wegfindung darf pro Tick nur begrenzt Rechenzeit verwenden.
Die Wegfindung bekommt Anforderungen, die sie berechnet. Wenn eine Anforderung fertig ist schickt sie das Ergebnis an den Anforderer zurück.
Es gibt verschiedene waffen, die den Char verbessern *und* schießen können
Server-Tickrate senken?
Das sei hiermit mal zur Debatte gestellt. Ich hab schon oft drüber nachgedacht, ich denke wir können die Server-Tickrate zumindest mal auf etwa 30 runter setzen, wenn nicht noch tiefer.
Nicht, dass wir Lastprobleme hätten, aber mir fällt nix ein, was so schnelle Reaktionszeiten wirklich brauchen würde...
Automatisches Verteilen von Loot an alle Spieler
Loot wird an alle Spieler verteilt die am Kampf beteiligt (d.h. in der Nähe) sind. Wenn ein Spieler keinen Platz hat wird das Loot auf den Boden geworfen.
Items effizient komprimieren statt Serialisieren.
Möglicher Pfusch im FastFindGrid
Ich halte das FastFindGrid nach wie vor für dubios. Gründe:
- Ist SECTORSIZE = 1 wirklich eine vernünftige default-Einstellung?
- Kann es sein, dass getEntitiesInArea() überhaupt nicht funktionieren, wenn SECTORSIZE nicht 1 ist? Irgendwie vermiss ich da ne Umrechnung von angegebenen Koordinaten in Sektoren.
- Man sieht deutlich, dass die Klasse mal "EntityMap" hieß. Tipp: Javadoc
- calulcateEnitiyPositions geht jedes Mal alle Einheiten durch. Das ist heute noch ok, irgendwann (bald) sollte das aber mal anders geregelt werden, Entities sollen Bewegungs/Positionsänderungen direkt da selber anmelden oder so.
Aber warte damit noch, ich pfusch grad wegen Bewegunssystem an Entity rum, nicht dass es da Konflikte gibt...
Items verbessern die Werte des Chars
Skilltree
Fähigkeiten sollen durch einben kiltree erworben werden.
MapGen: Polygonnetz mit Zufall, Lloyd-Relaxation und Voronoi
- Punkte zufällig verteilen:
- Voronoi-Diagramm bauen
- Lloyd-Relaxation drauf werfen, um zu hässliche Formen zu vermeiden.
- If (noch zu eckig goto 2)
Netzwerk: Nachrichtengrößenbestimmung
Kann das Netzwerk sich bitte selber um die Nachrichtengrößen kümmern? Es sollte vor jeder Nachricht, die verschickt wird, deren Größe verschicken, diese beim Empfänger dann auslesen und der NetCommand.execute() als Parameter übergeben.
PropertyList fliegt raus.
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.