Suche Mitentwickler für 2.5D (isometrisches) Moba

  • Suche

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Andy.

    Suche Mitentwickler für 2.5D (isometrisches) Moba

    Hallo, Ich hoffe ich habe die richtige Kategorie erwischt :) Ich würde gern ein eigenes MOBA game schreiben. Mir geht es mit diesem Projekt in erster Linie darum an Erfahrung in der Spieleentwicklung zu gewinnen. Aus diesem Grund möchte ich das spiel mit der von mir geschriebenen Java Engine schreiben und nicht auf eine fertige wie Unity, Unreal etc. zurückgreifen. Wie bereits geschrieben, ist es ein "Hobby" Projekt weswegen ich keine Vergütung etc. an die Mitentwickler auszahlen kann, sollten später einnahmen erzieht werden, werden diese natürlich nach Abzug der Betriebskosten etc. auf alle Entwickler aufgeteilt.

    Details zu dem Spiel

    Wie bereits geschrieben würde ich gern ein 2D MOBA mit einer isometrischen Ansicht entwickeln. Die Engine selbst unterstützt nur 2D Grafiken, allerdings ist es für isometrische spiele oft üblich, dass 3D Modelle erstellt werden und anschließend in der isometrischen Ansicht gerendert werden. Hier ein kleines Beispiel eines Brunnens imgur.com/a/kMBbtvh . Was das Gameplay betrifft soll es Spielern möglich sein in 1v1, 3v3 und 5v5 gegeneinander zu spielen. Dabei kann eine Auswahl in diversen Helden getroffen werden, die alle eigene Fähigkeiten etc. haben. Eben ein Typischen Moba.

    Derzeit sind praktisch viele Funktionen wie Bewegung Steuerung, Kampf System, Klassen System, Highliten von Objekten im Target (was später für die Helden benötigt wird) des Spieles vorhanden. Dabei ist die Engine eine große Hilfe, welche nach folgendem Schema arbeitet. Es können diverse Scenen angelegt werden, in diesem Scenen befinden sich Layer worin sich die GameElemente befinden. Die GameElemente können durch GameBehavior's erweitert werden. Es ist möglich durch erben von der GameBehavior Klasse, eigene Klassen zu erstellen und somit eine sehr große Individualität herzustellen. Größtenteils werden 3D Modelle und Grafiken für die Helden und Spielwelt benötigt.

    Was wird gesucht ?

    Derzeit suche ich nach 3D Artisten und Grafikern, sowie einem Soundartist für Effekte. Das Programmieren würde ich dabei übernehmen.

    Wenn jemand Interesse hat an dem Spiel mitzuwirken, würde ich mich sehr über eine Nachricht freuen.

    *Topic verschoben*
    Former Raider of the WoW guild's Memento Morri (Orginal guild on eu-frostmane Classic - Cata) TG Gaming (mop - bfa) and macht DRUCK

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Hier mal ein kleines Beispiel, wie sich friendly und hostile Tower verhalten. streamable.com/x7sny .Alle Elemente bis auf die Texture des Towers werden dabei dynamisch bei Spielbeginn erstellt
    Former Raider of the WoW guild's Memento Morri (Orginal guild on eu-frostmane Classic - Cata) TG Gaming (mop - bfa) and macht DRUCK
    Heute habe ich das Spell System in das spiel eingebunden. Dabei gibt es eine abstrakte klasse "Spell" welche als Grundlage für alle spells dient. Die Spells werden durch ein GameBehavior dem jeweiligem game Element zugeordnet und verwaltet. Aktuell habe ich ein Spell fertig gestellt, welcher alle GameObjekte attackt die sich in dem cone befinden. Es werden dabei auch bewusst freundliche GameElemente mit geringerem Schaden angegriffen. Dies soll dafür sorgen, AOE spells mit bedacht einzusetzen, da man damit auch Freundliche Spieler, Türme und Minions töten kann. Wie das genau funktioniert könnt ihr in diesem Clip sehen streamable.com/6xj5j

    Die klasse des "Cleave" spells schaut so aus:

    C-Quellcode

    1. package spells;
    2. import java.awt.Color;
    3. import java.awt.Graphics;
    4. import java.awt.Graphics2D;
    5. import java.awt.Paint;
    6. import java.awt.RadialGradientPaint;
    7. import java.awt.geom.GeneralPath;
    8. import java.awt.geom.Point2D;
    9. import Genesis.GameElement;
    10. import Genesis.Behaviors.SceneMovementController;
    11. import behaviors.Spell;
    12. import behaviors.SpellbookBehavior;
    13. import behaviors.StatsBehavior;
    14. public class SpellCleave extends Spell {
    15. private GameElement Element;
    16. private int Range;
    17. private int ConeWidth;
    18. private float ConeStartPoint;
    19. private float ConeEndPoint;
    20. private float ConeCenterPoint;
    21. private Color VisualColor;
    22. private Color VisualColor2;
    23. private Color VisualColor3;
    24. public SpellCleave() {
    25. this.setName("Cleave");
    26. this.setCooldown(1);
    27. this.setValue(100);
    28. this.Range = 250;
    29. this.ConeWidth = 30;
    30. this.setLevel(1);
    31. this.setValue(30);
    32. this.setFriendlyFireValue(5);
    33. this.VisualColor = Color.GREEN;
    34. this.VisualColor2 = new Color(this.VisualColor.getRed(), this.VisualColor.getGreen(), this.VisualColor.getBlue(), 100);
    35. this.VisualColor3 = new Color(this.VisualColor.getRed(), this.VisualColor.getGreen(), this.VisualColor.getBlue(), 30);
    36. }
    37. public float getDistance(int x, int y) {
    38. int diffX = x - this.Element.getCenterLocation().getX();
    39. int diffY = y - this.Element.getCenterLocation().getY();
    40. return (float) Math.sqrt((diffX * diffX) + (diffY * diffY));
    41. }
    42. @Override
    43. public void OnInit() {
    44. // TODO Auto-generated method stub
    45. super.OnInit();
    46. this.Element = this.getParent().getParent();
    47. }
    48. @Override
    49. public void OnUpdate() {
    50. // TODO Auto-generated method stub
    51. super.OnUpdate();
    52. }
    53. @Override
    54. public void OnKeyDown() {
    55. // TODO Auto-generated method stub
    56. super.OnKeyDown();
    57. if(!this.isOnCooldown()) {
    58. this.setEnabled(true);
    59. }
    60. else {
    61. System.out.println(this.getRemainingCooldown());
    62. }
    63. }
    64. @Override
    65. public void OnKeyUp() {
    66. // TODO Auto-generated method stub
    67. super.OnKeyUp();
    68. if(this.isEnabled()) {
    69. for(GameElement e : this.getParent().getObjectLayer().getElements())
    70. {
    71. int eleX = e.getCenterLocation().getX();
    72. int eleY = e.getCenterLocation().getY();
    73. int objX = this.Element.getCenterLocation().getX();
    74. int objY = this.Element.getCenterLocation().getY();
    75. float angle = (float) Math.atan2(eleY - objY, eleX - objX);
    76. if(angle > this.ConeStartPoint && angle < this.ConeEndPoint) {
    77. if(this.getDistance(eleX, eleY) < this.Range) {
    78. this.PerformSpell(e);
    79. }
    80. }
    81. }
    82. SceneMovementController mc = (SceneMovementController) this.Element.getBehaviorOfType(Genesis.Behaviors.SceneMovementController.class.getName());
    83. if(mc != null)
    84. {
    85. mc.clearDestination();
    86. }
    87. this.Element.setRotation(Math.toDegrees(this.ConeCenterPoint));
    88. this.setLastUsage(System.currentTimeMillis() / 1000);
    89. this.setEnabled(false);
    90. }
    91. }
    92. @Override
    93. public void BevoreRender(Graphics g) {
    94. // TODO Auto-generated method stub
    95. super.BevoreRender(g);
    96. if(this.isEnabled())
    97. {
    98. int destX = this.getParent().getInput().getMouseX();
    99. int destY = this.getParent().getInput().getMouseY();
    100. int objX = this.Element.getCenterLocation().getX();
    101. int objY = this.Element.getCenterLocation().getY();
    102. float angle = (float) Math.atan2(destY - objY, destX - objX);
    103. float angle2 = (float) Math.toRadians(Math.toDegrees(angle) - this.ConeWidth);
    104. float angle3 = (float) Math.toRadians(Math.toDegrees(angle) + this.ConeWidth);
    105. float x = (float) (objX + Range * Math.cos(angle));
    106. float y = (float) (objY + Range * Math.sin(angle));
    107. float x1 = (float) (objX + Range * Math.cos(angle2));
    108. float y1 = (float) (objY + Range * Math.sin(angle2));
    109. float x2 = (float) (objX + Range * Math.cos(angle3));
    110. float y2 = (float) (objY + Range * Math.sin(angle3));
    111. Graphics2D g2d = (Graphics2D) g;
    112. GeneralPath path = new GeneralPath();
    113. path.moveTo(this.Element.getCenterLocation().getX(), this.Element.getCenterLocation().getY());
    114. path.lineTo(x1, y1);
    115. path.curveTo(x1, y1, x, y, x2, y2);
    116. path.closePath();
    117. Point2D point = new Point2D.Float(this.Element.getCenterLocation().getX(), this.Element.getCenterLocation().getY());
    118. float[] dist = {0.0f, 1.0f};
    119. Color[] colors = {this.VisualColor3, this.VisualColor2};
    120. RadialGradientPaint paint = new RadialGradientPaint(point, this.Range, dist, colors);
    121. Paint oldPaint = g2d.getPaint();
    122. g2d.setPaint(paint);
    123. g2d.fill(path);
    124. g2d.setPaint(oldPaint);
    125. g2d.setColor(this.VisualColor);
    126. g2d.drawLine(this.Element.getCenterLocation().getX(), this.Element.getCenterLocation().getY(), (int)x1, (int) y1);
    127. g2d.drawLine(this.Element.getCenterLocation().getX(), this.Element.getCenterLocation().getY(), (int)x2, (int) y2);
    128. this.ConeStartPoint = angle2;
    129. this.ConeEndPoint = angle3;
    130. this.ConeCenterPoint = angle;
    131. }
    132. }
    133. @Override
    134. public void AfterRender(Graphics g) {
    135. // TODO Auto-generated method stub
    136. super.AfterRender(g);
    137. }
    138. @Override
    139. public String getName() {
    140. // TODO Auto-generated method stub
    141. return super.getName();
    142. }
    143. @Override
    144. public void setName(String name) {
    145. // TODO Auto-generated method stub
    146. super.setName(name);
    147. }
    148. @Override
    149. public int getLevel() {
    150. // TODO Auto-generated method stub
    151. return super.getLevel();
    152. }
    153. @Override
    154. public void setLevel(int level) {
    155. // TODO Auto-generated method stub
    156. super.setLevel(level);
    157. }
    158. @Override
    159. public int getValue() {
    160. // TODO Auto-generated method stub
    161. return super.getValue();
    162. }
    163. @Override
    164. public void setValue(int value) {
    165. // TODO Auto-generated method stub
    166. super.setValue(value);
    167. }
    168. @Override
    169. public void PerformSpell(GameElement target) {
    170. // TODO Auto-generated method stub
    171. super.PerformSpell(target);
    172. StatsBehavior stats = (StatsBehavior) target.getBehaviorOfType(behaviors.StatsBehavior.class.getName());
    173. if(stats != null)
    174. {
    175. if(target.getTag().equals(this.Element.getTag()))
    176. {
    177. stats.removeHealth(this.getFriendlyFireValue() * this.getLevel());
    178. }
    179. else
    180. {
    181. stats.removeHealth(this.getValue() * this.getLevel());
    182. }
    183. }
    184. }
    185. }
    Former Raider of the WoW guild's Memento Morri (Orginal guild on eu-frostmane Classic - Cata) TG Gaming (mop - bfa) and macht DRUCK