Giter Club home page Giter Club logo

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

Contributors

tfg13 avatar nikithase avatar 2ndcalc avatar invaderzim411 avatar timo77 avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

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.

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) :)

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

Mehrspielermodus

Der lokale Mehrspielermodus geht nicht und der normale Mehrspielermodus wurde noch nicht getestet, seit der Umstellung auf das neue System.

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.

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)

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.

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.

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.

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

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) ?

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.

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...

Möglicher Pfusch im FastFindGrid

Ich halte das FastFindGrid nach wie vor für dubios. Gründe:

  1. Ist SECTORSIZE = 1 wirklich eine vernünftige default-Einstellung?
  2. Kann es sein, dass getEntitiesInArea() überhaupt nicht funktionieren, wenn SECTORSIZE nicht 1 ist? Irgendwie vermiss ich da ne Umrechnung von angegebenen Koordinaten in Sektoren.
  3. Man sieht deutlich, dass die Klasse mal "EntityMap" hieß. Tipp: Javadoc
  4. 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...

Skilltree

Fähigkeiten sollen durch einben kiltree erworben werden.

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.