Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Spy

Frischling

  • »Spy« ist der Autor dieses Themas
  • Private Nachricht senden

1

23.06.2008, 20:41

[Engine-Vorstellung] PeakEngine - Programmierer gesucht

Hallo Spieleprogrammierer,
ich möchte hier die Spieleengine "PeakEngine" vorstellen. Die Projektseite: http://peakengine.sf.net. PeakEngine ist eine Entitybasierte GameEngine die sich besonders für Multiplayerspiele eignet da dass Component-Entity System der Engine auf Netzwerkspiele ausgerichtet ist. Um eins klar zu stellen: Hier wird eine vollständige Spieleengine entwickelt und nicht eine Grafikengine oder eine Physikengine -> Mit der Engine lässt sich ein Spiel ohne irgendwelche anderen Bibliotheken programmieren. Die Engine wird über Lua-Skripte und INI-Files gesteuert. Es ist allerdings geplant die INI-Files durch XML-Dateien zu ersetzen. Ich habe hier eine Liste mit den Features der Engine zusammengestellt ( Die Liste soll auch die Funktionsweise der Engine erklären):

Entity:
- Entities (dt. Objekte) stellen den Kern der Engine dar.
- Interface zwischen Grafk,Sound und Physik
- Sprich: Ein Entity hat eine Grafik/Sound und eine Physik Komponente
- In der Praxis sieht das so aus: Wenn sich die Physik Komponente um 10 Einheiten nach rechts verschiebt muss sich die Grafikkomponente auch um 10 Einheiten nach rechts verschieben.
- Die Engine sendet von alleine an alle Clients die Positionen der Entities und kümmert sich darum , dass die Physik richtig funktioniert
- mit sogenannten "EntityVariablen" können noch zusätliche Informationen über das Netzwerk verteilt werden -> Die Engine wird den Wert der EntityVariable auf allen Clients verfügbar machen. Der User muss also nur einstellen , dass z.B. die EntityVariable "hp"=Lebenspunkte erstellt wird und das Spiel kann von jedem PC aus auf den Wert der Variable zugreifen.

Map:
- Szenenmanagement findet über Maps statt
- Eine Map definiert statische Objekte und Einstiegspunkte für dynmaische Objekte wie die Spielfigur
- Terrains wurden schon implementiert und getestet
- Eine Map wird derzeit über eine INI-Files definiert, das soll ich aber änderen , da ein Map-Editor mit Map-Format entstehen soll

Render:
- Die Engine benützt entweder Irrlicht ODER Horde3D
=> Platformunabhängig ( Mac OS X, Linux und natürlich Windows)
- Durch die Grafikengines werden DirectX 9(2x),DirectX 8(1x) und OpenGL(2x) unterstüzt
- Die meisten Features der Engine wurden bereits zugänglich gemacht, aber die TODO-Liste im Grafik-Bereich ist noch lange

Physik:
- Für Physikberechunungen greift die Engine auf Open Dynamics Engine(ODE) zurück.
- ODE ist äusserst perfomant , aber wir ziehen es in Betracht auch noch Bullet in das Projekt mit einzubeziehen.
- Bodies und Geoms sind natürlich implementiert
- Ansatz von Joints wurden auch übernohmen , aber noch nicht getestet

Netzwerk:
- Enet wird hier verwendet
- Broadcasting ist implementiert
- Netzwerkspiele sind möglich und die Engine ist 100% Netzwerkfähig.
- ( Wir haben die Netzwerkfähigkeit schon in vielen unsrer Testspiele getestet)

Ich hoffe euch gefällt das Konzept der Engine. Wir stellen keine zu grossen Herausforderungen an neue Mitglieder. Sie sollten nur C++ meisterhaft beherrschen und von Spieleprogrammierung ein bischen Ahnung haben. Wenn ihr interessiert seid dann kontaktiert mich in ICQ:
482-063-577

Ich werde dann dem jeweiligen Anwerber weiter erklären wie die Engine funktioniert. Man sollte allerdings SVN haben und es bedienen können.

Mit Freundlichen Grüssen,
Christian R. alias Spy

EDIT: Ich erwähnte im 2. Punkt bereits die TODO-Liste sei noch lange hier ist sie:(auf Englisch)
TODO:
========== Milestone 1 ============ (0.0.1)

========== Milestone 2 ============ (0.0.2)
- Menus
- Simple test game
- Proper levels
- Sound
- Better graphics?
- LODSceneNode (LOD, Animations, loaded from file)
- Documentation
- Particle system emitters/affectors
- GLSL support
- Optimize Game
- Character physics
- Map format
- Cutscene support (pre rendered / realtime rendered?)
- Online playing (server publishing?)
- Networking security (Currently the engine can be crashed remotely?)
- Scripted HUD?
- Reworked entity variables
- XML
- Lights, Shadows
- Loading screen + resource management

========== Milestone 3 ============ (0.1.0)
- RTT
- 3D-GUI
- Editor
- First Person Shooter test
- Racing game test!
- Saving/Restoring
- File transfer
- Chat system
- Automatic update?
- Encryption
- Compression
- ClipMapping?
- Unicode?
- Dedicated server?

More:
- Server relocation?

Optional:
- ID generator (to prevent overflows)

BUGS:
- Engine crashes when broken ini files are used
- List boxes only react on double clicks?

(Milestone 1 wurde bereits erreicht)
MfG Spy
Mein GE-Projekt

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

23.06.2008, 21:05

Hi.

Da hast du/ihr euch aber etwas vorgenommen. ;)

Sieht interessant aus. Mal abwarten, was draus wird. :)

btw:

Zitat

Mit der Engine lässt sich ein Spiel ohne irgendwelche anderen Bibliotheken programmieren.

Das würde ich vlt. anderst formulieren. Zuerst könnte man denken, dass die Engine das alles selber macht. Aber in anbetracht, dass ihr sowieso Irrlicht, ODE u.ä. verwendet, würde ich das ev. anderst ausformulieren.

Achja.

Zitat

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    void SettingsManager::setInt(std::string name, int value)
    {
        setString(name, toString(value));
    }
    void SettingsManager::setVector2D(std::string name, Vector2D value)
    {
        setString(name, toString(value));
    }
    void SettingsManager::setVector2DI(std::string name, Vector2DI value)
    {
        setString(name, toString(value));
    }
    void SettingsManager::setVector3D(std::string name, Vector3D value)
    {
        setString(name, toString(value));
    }


Also im Source gibt es sicher auch noch optimierungsbedarf.. ;)

Spy

Frischling

  • »Spy« ist der Autor dieses Themas
  • Private Nachricht senden

3

23.06.2008, 21:08

@drakon:
Hast du vielleicht Interesse an der Engine mitzumachen?

Zitat


Also im Source gibt es sicher auch noch optimierungsbedarf..

Die Engine läuft relativ schnell.

Zitat


Da hast du/ihr euch aber etwas vorgenommen.

Eindeutig wir und die Features sind ja nicht die Features die die Engine haben soll sondern Features die , die Engine schon hat. Man könnte mit der Engine druchaus schon ein ordentliches Spiel programmieren. Für die Wartung und die Weiterentwicklung bestimmter Komponenten der Engine in einem angemessenen Zeitraum brauchen wir allerdings mehre Teammitglieder. Ausserdem sind wir gerade dabei einen Testshooter mit der Engine zu programmieren.

Könntest du mich bitte schnell aufklären , was an dem gepasten Code optimiert werden soll?
MfG Spy
Mein GE-Projekt

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

23.06.2008, 21:09

Zitat von »"Spy"«

@drakon:
Hast du vielleicht Interesse an der Engine mitzumachen?


Ne, sorry. Dafür habe ich zu wenig Zeit. Vor allem könnte es schwer werden mit einem Dev-Treff.. 8)

Aber Danke für das Angebot. :)

Spy

Frischling

  • »Spy« ist der Autor dieses Themas
  • Private Nachricht senden

5

23.06.2008, 21:14

Dev-Treff ist aber momentan nicht geplannt , da international zur Zeit angeworben wird. :-)
MfG Spy
Mein GE-Projekt

6

23.06.2008, 21:16

Nja hab den Rest nicht angeguckt, aber allein bei deinem Beispiel da werden min. 2 Kopien zu viel erstellt ... und das Pro Funktion! Davon mal abgesehen, dass man der übersichtlichkeithalber einfach mal dieses set sonstwas zeug als template machen könnte, und sich der Rest ergibt:

C-/C++-Quelltext

1
2
3
template<typename source_type>
void SettgsinManager::set_value(std::string const& name, source_type const& value)
{ setString(name, toString(value)); }
...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Spy

Frischling

  • »Spy« ist der Autor dieses Themas
  • Private Nachricht senden

7

23.06.2008, 21:23

Ehm, ich möchte dich daran erinnern , dass dieses Topic nicht dazu gedacht ist an kleinen Code Schnippseln rumzufummeln. Ich will lieber deine Meinung über das Konzept der Engine haben. Es ist wohl völlig selbstverständlich das der Code noch optimiert wird, aber vieles wird sowieso vom Compiler übernohmen und zum Debuggen ist der Aufruf von "setString" in der eignen Klasse einfach um einiges hilfreicher.
MfG Spy
Mein GE-Projekt

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

8

23.06.2008, 21:24

Zitat von »"Deviloper"«

...


Exakt das habe ich gemeint. ;)

EDIT:
Ok, war nur ein kleines Beispiel, dass mir beim überfliegen von ein paar Source Dateien aufgefallen ist. Dann werden wir jetzt nicht über die Nachteile deiner Version reden. :)

Jedoch ist das schon wichtig auch für Leute, die wirklich bei euch mitmachen wollen, dass die ungefähr wissen, was für Leute gesucht werden. (Niveau Mässig), was man am Code eigentlich relativ schnell erkennt.

Spy

Frischling

  • »Spy« ist der Autor dieses Themas
  • Private Nachricht senden

9

23.06.2008, 21:27

Der Code stammt nicht von mir , aber das was hier gemacht wird erfordert nicht sonderlich viele Optimierung , weil es in keiner hardwarelastigen Situtation aufgerufen wird und ich möchte nochmal daran erinneren , dass der Thread nicht "Projektvorstellung um auf Nichtigkeiten rumzuhacken heist". Wenn euch langweilig ist , dann progrrammiert ein Spiel ;-) (und zwar mit der PeakEngine).
MfG Spy
Mein GE-Projekt

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

10

23.06.2008, 21:31

Zitat von »"Spy"«

Der Code stammt nicht von mir , aber das was hier gemacht wird erfordert nicht sonderlich viele Optimierung , weil es in keiner hardwarelastigen Situtation aufgerufen wird ...


Es geht ja nicht um die Optimierung im Sinne von Geschwindigkeitsraubend, sondern eher um Stil und Anwendung der gegebenen Mittel.

Aber Egal. Über das Konzpt kann ich im Moment nur sagen, dass es interessant ist und ich gespannt bin, wenn es bereits ein wenig grösser ist. Schöne Wünsche haben alle, aber diese Umzusetzen ist etwas anderes. :)

Werbeanzeige