Tutorial - Wie mache ich eine eigene (simple) Mod

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Tutorial - Wie mache ich eine eigene (simple) Mod

      Hi,
      hier ein kleines Tutorial, in dem ich euch erkläre, wie man simple Mods macht.

      1. Benötigte Programme
      Für alle Betriebssysteme:
      - downloadet und unzippt bam 0.2.0 (Compiler)
      - downloadet und unzippt die teeworlds-source
      Für Windows:
      - downloadet und installiert VisualC/C++ Express (coding)
      - downloadet und installiert Phyton 2.x (kompilieren)
      Für Mac OS X:
      - downloadet und installiert Xcode
      - downloadet libsdl und verschiebt SDL.framework in euren Xcode-Ordner nach /Library/Frameworks

      2. Coding
      Öffnet die Source. Öffnet: src/game/server/entities/character.cpp
      Unbegrenzt Munition:
      Findet und löscht:
      Spoiler anzeigen
      if(weapons[active_weapon].ammo > 0) // -1 == unlimited
      weapons[active_weapon].ammo--;

      Jetzt habt ihr unendlich Munition, weil das Spiel nach Schüssen keine Munition mehr löscht. Ihr könnt aber auch bei dem Punkt Startwaffen unendlich Munition einstellen, indem ihr bei
      Spoiler anzeigen
      weapons[WEAPON_###].ammo = x;

      das x durch -1 erstetzt.

      Schnelleres Schießen:
      Findet:
      Spoiler anzeigen
      if(!reload_timer)
      reload_timer = data->weapons.id[active_weapon].firedelay * server_tickspeed() / 1000;
      }

      Und ersetzt es durch:
      Spoiler anzeigen
      if(!reload_timer)
      reload_timer = data->weapons.id[active_weapon].firedelay * server_tickspeed() / 2000;
      }

      Nun schießt ihr zweimal so schnell wie vorher, weil ihr eine Millisekunde durch eine halbe ersetzt.

      Startwaffen:
      Findet:
      Spoiler anzeigen
      game.world.insert_entity(this);
      alive = true;
      player->force_balanced = false;

      game.controller->on_character_spawn(this);

      Fügt am Ende hinzu:
      Spoiler anzeigen
      weapons[WEAPON_###].got = true; //Waffe bei Spawn: ja=true; nein = false
      weapons[WEAPON_###].ammo = x; //Munition der Waffe

      Ersetzt ### durch HAMMER, GUN, SHOTGUN, GRENADE oder RIFLE.
      Ersetzt x durch die Munition, die man beim Start haben soll

      Wenn ihr Ninja haben wollt, müsst ihr das hier einfügen:
      Spoiler anzeigen
      ninja.activationtick = ;
      weapons[WEAPON_NINJA].got = true;

      Ersetzt mit der Zeit in Millisekunden, die ihr Ninja am Anfang haben wollt.

      Leben & Schild:
      Findet:
      Spoiler anzeigen
      game.world.insert_entity(this);
      alive = true;
      player->force_balanced = false;

      game.controller->on_character_spawn(this);

      Und fügt am Ende hinzu:
      Spoiler anzeigen
      health = 5;
      ammo = 3;

      Nun startet ihr mit 5 Leben und 3 Schild.

      Waffen Damge:
      Sucht in character.cpp nach:
      Spoiler anzeigen
      case WEAPON_GUN:
      {
      PROJECTILE *proj = new PROJECTILE(WEAPON_GUN,
      player->client_id,
      projectile_startpos,
      direction,
      (int)(server_tickspeed()*tuning.gun_lifetime),
      1, 0, 0, -1, WEAPON_GUN);

      Die erste Zahl (1) ist der Schaden, den die Gun pro Treffer macht. Für die amderen Waffen müsst ihr nur ein bisschen runterscrollen :D.
      Für Laser öffnet: src/game/server/entities/laser.cpp.
      Findet diese Zeile:
      Spoiler anzeigen
      hit->take_damage(vec2(0,0), tuning.laser_damage, owner, WEAPON_RIFLE);

      Und ersetzt tuning.laser_damage durch den Schaden, den die Lasergun pro Treffer machen soll. Dies bewirkt nämlich, dass der Schaden nicht mehr aus den server-config (tune laser_damage) kommt, sondern direkt aus dem Code.

      Chat Kommandos:
      Öffnet: src/game/server/hooks.cpp
      Sucht:
      Spoiler anzeigen
      if(config.sv_spamprotection && p->last_chat+time_freq() > time_get())
      return;

      p->last_chat = time_get();

      Und fügt am Ende hinzu:
      Spoiler anzeigen
      if (!str_comp_nocase(msg->message, "/info"))
      {
      game.send_chat_target(client_id, "Test Mod!");
      game.send_chat_target(client_id, "Made by me.");
      }
      else

      Wenn der Spieler /info sagt, steht in seinem Chat:
      ***Test Mod!
      ***Made by me.

      Modnamen ändern:
      Öffnet: src/game/server/gamemodes
      Hier seht ihr ctf, dm, tdm und mod als .cpp und .hpp. Als Beispiel zeige ich euch, wie man aus dem Gametype "MOD" den Gametype "TESTMOD" macht. Öffnet mod.cpp und mod.hpp.
      Sucht in beiden Dateien dies:
      Spoiler anzeigen
      GAMECONTROLLER_MOD

      Ersetzt es durch:
      Spoiler anzeigen
      GAMECONTROLLER_TESTMOD

      Öffnet: src/game/server/hooks.cpp
      Sucht nach:
      Spoiler anzeigen
      game.controller = new GAMECONTROLLER_MOD;

      Erstetzt es durch:
      Spoiler anzeigen
      game.controller = new GAMECONTROLLER_TESTMOD;

      Dies ist eine optionale Einstellung, die der Übersichtlichkeit dient.

      Sucht nun in src/game/server/gamemodes/mod.cpp dies:
      Spoiler anzeigen
      gametype = "MOD";

      Und Erstetzt es durch
      Spoiler anzeigen
      gametype = "TESTMOD";

      Damit wird in der Gametype-Anzeige ingame anstatt "MOD" "TESTMOD" angezeigt.

      Öffnet: src/game/server/hooks.cpp
      Sucht:
      Spoiler anzeigen
      if(strcmp(config.sv_gametype, "mod") == 0)

      Erstetzt es durch:
      Spoiler anzeigen
      if(strcmp(config.sv_gametype, "testmod") == 0)

      Um den Gametype "TESTMOD" in den Serverconfig aufzurufen muss man jetzt nicht mehr "sv_gametype mod", sondern "sv_gametype testmod" angeben.

      3. Kompilieren:
      Erste bam Benutzung auf Windows:
      Gebt in cmd (start>run>cmd) ein:
      cd location/of/bam
      make_win32_msvc.bat

      Erste bam Benutzung auf Mac/Linux:
      Gebt im Terminal (Programme/Dienstprogramme/Terminal) ein:
      cd /Users/deinname/Desktop/bam
      ./make_unix.sh

      Kompilieren von Teeworlds auf Windows:
      Öffnet die Microsoft Visual Studio Kommandozeile.
      Schreibt:
      cd /Users/deinname/Desktop/teeworlds-mod/ (Wenn der Ordner mit der Teeworlds-src teeworlds-mod heißt, und auf dem Desktop ist. Also: hier Pfad angeben)
      ../bam/src/bam release (für das ganze Teeworlds)

      ../bam/src/bam server_release (für die Server von Teeworlds)

      ../bam/src/bam client_release (für den Client von Teeworlds)

      Kompilieren von Teeworlds auf dem Mac:
      Öffnet Terminal.
      Schreibt:
      cd /Users/deinname/Desktop/teeworlds-mod/ (Wenn der Ordner mit der Teeworlds-src teeworlds-mod heißt, und auf dem Desktop ist. Also: hier Pfad angeben)
      ../bam/src/bam release (für das ganze Teeworlds)

      ../bam/src/bam server_release (für die Server von Teeworlds)

      ../bam/src/bam client_release (für den Client von Teeworlds)

      Wenn dann viele Fehlermelungen zum Thema osxlaunch oder SDL.framework kommen, müsst ihr folgendes tun:
      Sucht dies in default.bam:
      Spoiler anzeigen
      settings.cc.flags:Add("-mmacosx-version-min=10.4",
      "-isysroot /Developer/SDKs/MacOSX10.4u.sdk")

      settings.link.flags:Add("-mmacosx-version-min=10.4",
      "-isysroot /Developer/SDKs/MacOSX10.4u.sdk")


      Und ersetzt es durch:
      Spoiler anzeigen
      settings.cc.flags:Add("-mmacosx-version-min=10.4",
      "-isysroot /Developer/SDKs/MacOSX10.6.sdk")

      settings.link.flags:Add("-mmacosx-version-min=10.4",
      "-isysroot /Developer/SDKs/MacOSX10.6.sdk")


      Danke für die Hilfe bei der Übersetzung aus dem Englischen an Tomboss.

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von sha-256 ()