Seite 4 von 10 ErsteErste 12345678 ... LetzteLetzte
Ergebnis 46 bis 60 von 136

Thema: fliegende Artillerie :)

  1. #46
    the cosmos rocks Avatar von Caesium
    Registriert seit
    08.12.03
    Ort
    Faerûn
    Beiträge
    9.104
    Das heißt also, wer deine CvGameCoreDLL dereinst nutzt, der wird nicht mehr die alte Bombardierung haben, sondern nurmehr die neue? Oder willst du für einige Einheiten die alte Variante beibehalten?
    Caesium Mod v2.4 (für Civ4 WL v2.13)

  2. #47
    Registrierter Benutzer
    Registriert seit
    29.01.03
    Beiträge
    4.909
    Also das hier ist ja der erste test um zu sehen wie weit es geht mit den Bombardieren. Es sieht ja sehr gut aus. Wie ich es in der ersten Betaversion handhabe weiß ich noch nicht genau. Jedoch würde es unter umständen dazu kommen, dass beide Missionstypen zur verfügung stehen, da beide Missionstypen (meine Bombardierung, die Originalbombardierung) fast identische voraussetung für das Vorhandensein besitzen. In diesem Falle ist die Schlüsselfähigkeit der Einheit das vorhandensein einer BombardRate > 0 in der XML Datei, damit meine Bombardierfunktion zur Auswahl steht. Die Originalbombardierfunktion benötigt ebenfalls eine BombardRate > 0 und zusätzlich das vorhandensein einer feindlichen Stadt in einem direckten Nachbarfeld. Also unter umständen kann man dann beide Bombardierfunktionen auswählen, was ich ja in der Endversion vermeiden möchte.

  3. #48
    Ein Platz an der Sonne Avatar von Commander Bello
    Registriert seit
    05.06.05
    Ort
    Nähe Koblenz
    Beiträge
    6.209
    Zitat Zitat von Netbandit
    [...]
    Alternativ könnte man schreiben, dass eine Einheit nur dann bombardieren kann wenn das Bombardierungsziel neutral ist (also eine Geländemodernisierung auf neutralen Boden) oder wenn das Bombardierungsziel feindlich ist und mit dem Besitzer des Feldes auf dem die Artillerie steht verfeindet ist.
    Was hälst du davon?
    Das halte ich für ziemlich gut.

    Ich möchte diesen Thread nicht zu sehr sprengen und mit anderen Dingen "vollmüllen", daher gehe ich an dieser Stelle nicht weiter auf dem Bomber-Exploit ein, denke aber, daß eine Routine wie oben das Problem zuverlässig lösen würde.


  4. #49
    Registrierter Benutzer
    Registriert seit
    29.01.03
    Beiträge
    4.909
    Ach quatsch, hier kannst du reinschreiben was du magst und auch alles zumüllen Das hier ist ja ein Brainstorming-Thread, der später eh irgendwie in der Versenkung verschwinden wird. Sobald der Mod Alphareife erlangt hat werde ich zwei neue Thread mit einem sinnvolleren Namen erstellen: Einen wo man über den Mod, seine Versionen und das Balancing reden und informieren kann und einen wo zu jeder Version erklärt ist, welche Veränderungen an den Orginalcodes durchgeführt wurde (also für die Mod Programmierer).

  5. #50
    Registrierter Benutzer
    Registriert seit
    29.01.03
    Beiträge
    4.909
    Eine Bombardierungseinheit soll normalerweise (wie bei Civ3) nicht in der Lage sein das Ziel völlig zu zerstören. Wenn man davon ausgeht, dass eine Civ3 Einheit als Standart Veteran war (4 Hitpoints) ist also die Standart-Maximalbeschädigung einer Civ3 Einheit durch Bombardierung 75%. Es sei denn die Bombardierungseinheit verfügt über die Fähigkeit "Tötliche Bombardierung". Um die Routine zuende zu schreiben, welche ermittelt ob ein Feld bombardiert werden kann, benötige ich eine Abfrage der maximalen Beschädigung die einer Einheit durch Bombardierung zugefügt werden kann. Um später diesen Wert aus der Einheiten XML Datei zu lesen und solche Sonderbehandlungen wie "tötliche Bombardierung" einzubauen, schreibe ich nun eine eigene Funktion zum ermitteln des maximalen Bombenschadens.

    Hierzu füge ich in der Datei CvUnit.cpp ab die Funktion getMaxBombardDamage ein. Derzeit liefert die Funktion immer einen Wert von 75 zurück, später kann hier eine weitere Auswertung der Einheitenfähigkeiten folgen.

    PHP-Code:
    //! Gibt zurück, wie hoch die Maximalbeschädigung durch die Bombardierung sein darf
    int CvUnit::getMaxBombardDamage(void) const
    {
        return 
    75;  // Derzeit fest auf 75% Beschädigung!

    Natürlich muss auch diese Funktion in der Header Datei bekannt gemacht werden. Dazu füge ich in der Datei CvUnit.h in der Klasse CvUnit:: folgende Zeile ein:

    PHP-Code:
        int getMaxBombardDamage(void) const;  //! Ermittelt den Maximalschaden den die Einheit durch Bombardierung zufügen kann 
    Geändert von Netbandit (07. Juni 2006 um 21:05 Uhr)

  6. #51
    Registrierter Benutzer
    Registriert seit
    29.01.03
    Beiträge
    4.909
    Ich suche übrigends einen guten Namen für den Mod. Er soll darauf verweisen, dass der Mod etwas mit der Bombardierfähigkeit der Einheiten zu tun hat, aber nicht auf eine spezielle Einheitengattung festgelegt sein (z.B. Artillerie oder Landeinheiten). Außerdem soll er eingänig sein und möglichst deutsch. Jedoch wäre es ideal, wenn er im englischsprachigen Raum, zumindest vom Sinn her verstanden werden kann.

    Ich denke da an den Namen "Bombenkrieg Mod". Der Name ist eindeutig, eingänig und ein Enländer sollte aufgrund der ihm bekannten Worte "Bomb" und "Blitzkrieg" wissen was gemeint ist oder?

    Aber natürlich bin ich auch anderen Vorschlägen gegenüber offen.

  7. #52
    sehr stylisch Avatar von Polly
    Registriert seit
    11.08.02
    Ort
    Kall
    Beiträge
    14.715
    Bomb-Mod

  8. #53
    Registrierter Benutzer
    Registriert seit
    29.01.03
    Beiträge
    4.909
    Zitat Zitat von Polly
    Bomb-Mod
    ist ja englisch und englisch ist uncool

    Ich mag es nicht, allem englische Namen zu verpassen... das führt dazu, dass wir deutsche Artikelbezeichnungen und Firmentitel irgendwann nicht mehr als Werbewirksam betrachten und nur noch englische Bezeichnungen verwenden, was allerdings unsere Kultur weiter verfremden dürfte

  9. #54
    Registrierter Benutzer
    Registriert seit
    29.01.03
    Beiträge
    4.909
    EDIT:
    Ich habe noch eine Änderung vorgenommen, wodurch es auch möglich ist Straßen und Schienen zu bombardieren.


    Es wird!

    Ich habe nun die Funktion fertig gestellt, welche ermittelt ob ein bestimmtes Feld bombardiert werden kann/darf. Kann ein feld bombardiert werden erscheint ein grüner Kasten um dieses Feld. Wann ein Feld bombardiert werden darf, sollte klar sein. Eigene Modernisierungen dürfen bombardiert werden, feindliche ebenso.

    So sieht die Funktion canBombardAt in der Datei CvUnit.cpp nun aus:

    PHP-Code:
    //! Kann das ausgewählte Feld überhaupt bombardiert werden? Das beantwortet diese Funktion!
    //! pPlot = Das feld auf dem die Einheit steht
    //! iX, iY = Das Zielfeld der Bombardierung

    bool CvUnit::canBombardAt(const CvPlotpPlotint iXint iY) const
    {

        
    CvUnitpTargetUnit;    // eine evntuelle Zieleinheit
        
    CLLNode<IDInfo>* pUnitNode// ein Referenzknotenpunkt für die Einheitenliste
        
    CvCitypTargetCity;    // eine evntuelle Zielstadt
        
    CvPlotpTargetPlot;    // Das Zielfeld

        
    if (!canBombard()) //Kann die Einheit nicht bombardieren?
        
    {
            return 
    false;   // Dann wird nicht bombardiert!
        
    }

        
    pTargetPlot GC.getMapINLINE().plotINLINE(iXiY); // Ermittelt das Zielfeld

        
    if ((pPlot->getX_INLINE() == pTargetPlot->getX_INLINE()) && (pPlot->getY_INLINE() == pTargetPlot->getY_INLINE()))
        
    // Ist das Zielfeld das Abschußfeld?
        
    {
            return 
    false// Dann wird NATÜRLICH NICHT bombardiert!
        
    }

        if (
    plotDistance(pPlot->getX_INLINE(), pPlot->getY_INLINE(), pTargetPlot->getX_INLINE(), pTargetPlot->getY_INLINE()) > BombardRange())
        
    // Ist die Entfernung zwischen Abschußfeld und Zielfeld größer als die Bombadierreichweite?
        
    {
            return 
    false;   // Dann wird nicht bombardiert!
        
    }

    // Städte sind das primäre Ziel, daher wird zuerst die Stadt abgefragt

        
    pTargetCity pTargetPlot->getPlotCity();       // Holt eine eventuelle Stadt die auf dem Feld steht

        
    if (pTargetCity != NULL// Ist dort eine Stadt?
        
    {

            if (
    canUnitBombardTeam(pTargetCity->getTeam()))   // Kann die Stadt als Ziel bombardiert werden?
            
    {
                return 
    true;    // Dann wird bombardiert!
            
    }
            else
            {
                return 
    false;   // Dann wird nicht bombardiert!
            
    }

        }
        else
        {

    // Einheiten sind das sekundäre Ziel

            
    pUnitNode pTargetPlot->headUnitNode(); // hole die erste Einheit der Liste aller Einheiten auf dem Zielfeld

            
    while (pUnitNode != NULL)   // gehe die Schleife so lange durch, bis es keine weitere Einheit mehr gibt
            
    {
                
    pTargetUnit = ::getUnit(pUnitNode->m_data); // hole die Einheit als Objekt
                
    pUnitNode pTargetPlot->nextUnitNode(pUnitNode);   // hole die nächste Einheit der Liste aller Einheiten auf dem Zielfeld

                
    if (canUnitBombardTeam(pTargetUnit->getTeam())) // Darf der Besitzer der Einheit bombardiert werden?
                
    {
                    if (
    pTargetUnit->canDefend() && (pTargetUnit->getDamage() < getMaxBombardDamage())) // Kann sich die Einheit verteidigen und ist sie nicht zu schwer Beschädigt?
                    
    {
                        return 
    true;    // Dann darf ruhig bombardiert werden :vik: !
                    
    }
                }
            }

    // Straßen und Eisenbahnen sind das nächste Ziel

            
    if (pTargetPlot->isRoute()) // Gibt es eine Straße?
            
    {
                if (!(
    pTargetPlot->getImprovementType() == NO_IMPROVEMENT))    // Gibt es eine Modernisierung auf dem Zielfeld?
                
    {

                    if (
    GC.getImprovementInfo(pTargetPlot->getImprovementType()).isPermanent()) // Ist diese unzerstörbar (permanent) ?
                    
    {
                        return 
    false;   // Dann ist eine Bombardierung nicht möglich.
                    
    }

                    if (
    GC.getImprovementInfo(pTargetPlot->getImprovementType()).getAirBombDefense() == -1// Kann die Modernisierung nicht durch Bombardierung zerstört werden?
                    
    {
                        return 
    false;   // Dann ist eine Bombardierung nicht möglich.
                    
    }

                }

                if (!(
    pTargetPlot->isOwned())) // Gehört das Zielfeld niemanden?
                
    {
                    return 
    true;    // Dann darf bombardiert werden!
                
    }

                if (
    pTargetPlot->getTeam() == getTeam())  // Ist es unser eigenes Feld?
                
    {
                    return 
    true;    // Dann darf bombardiert werden!
                
    }

                if (
    canUnitBombardTeam(pTargetPlot->getTeam())) // Darf der Besitzer des Feldes bombardiert werden?
                
    {
                    return 
    true// Dann darf bombardiert werden!
                
    }

                return 
    false// In allen anderen Fällen ist keine Bombardierung möglich.
            
    }

    // Geländemodernisierungen sind das letzte mögliche Ziel

            
    if (!(pTargetPlot->getImprovementType() == NO_IMPROVEMENT))    // Gibt es eine Modernisierung auf dem Zielfeld?
            
    {
                if (!(
    GC.getImprovementInfo(pTargetPlot->getImprovementType()).isPermanent())) // Ist diese generell zerstörbar (nicht permanent) ?
                
    {

                    if (!(
    GC.getImprovementInfo(pTargetPlot->getImprovementType()).getAirBombDefense() == -1)) // Kann die Modernisierung durch Bombardierung zerstört werden?
                    
    {

                        if (!(
    pTargetPlot->isOwned())) // Gehört das Zielfeld niemanden?
                        
    {
                            return 
    true;    // Dann darf bombardiert werden!
                        
    }

                        if (
    pTargetPlot->getTeam() == getTeam())  // Ist es unser eigenes Feld?
                        
    {
                            return 
    true;    // Dann darf bombardiert werden!
                        
    }

                        if (
    canUnitBombardTeam(pTargetPlot->getTeam())) // Darf der Besitzer des Feldes bombardiert werden?
                        
    {
                            return 
    true// Dann darf bombardiert werden!
                        
    }
                    }
                }
            }
        }

        return 
    false;   // Ansonnsten kann nicht bombardiert werden!


    Ihr wird als Parameter das Abschußfeld übergeben vom Typ CvPlot* sowie die X und Y Koordinate vim Zielfeld, vom Typ int. Darf bombardiert werden gibt es ein true, wenn nicht gibt es ein false zurück.
    Geändert von Netbandit (08. Juni 2006 um 00:08 Uhr)

  10. #55
    Registrierter Benutzer
    Registriert seit
    29.01.03
    Beiträge
    4.909
    Folgende Frage ist für die Bombardierroutine noch interessant:

    Wenn eine Stadt getroffen wird, wird entweder die beste verteidigende Einheit getroffen oder ein Gebäude oder eine Bevölkerungseinheit. Wie sollen die Chancen aufgeteilt sein? Alle gleich (33%) oder soll die Chance größer sein, dass eine Einheit oder so getroffen wird...

  11. #56
    Ein Platz an der Sonne Avatar von Commander Bello
    Registriert seit
    05.06.05
    Ort
    Nähe Koblenz
    Beiträge
    6.209
    Zitat Zitat von Netbandit
    Folgende Frage ist für die Bombardierroutine noch interessant:

    Wenn eine Stadt getroffen wird, wird entweder die beste verteidigende Einheit getroffen oder ein Gebäude oder eine Bevölkerungseinheit. Wie sollen die Chancen aufgeteilt sein? Alle gleich (33%) oder soll die Chance größer sein, dass eine Einheit oder so getroffen wird...
    Falls es möglich sein sollte, würde ich dafür plädieren, daß zuerst Schutzbauten (Mauern, Burgen, Bunker) getroffen werden.
    Danach mit 75% Kampfeinheiten (Kampfwert > 0), mit 25% nicht schützende Gebäude (die Prozentzahlen sind aus dem hohlen Hut gezaubert).
    Die Zivilbevölkerung würde ich unbeschadet lassen, obwohl sie in der Realität auch Verluste erleiden wird. Begründung: würde sonst bei Einbau ins Standardspiel zu Irrungen und Wirrungen in Bezug auf die Widerstandsdauer führen. Weiterhin denke ich an den Caesium-Mod mit den Partisanen, wo man sich ansonsten durch geschicktes Bombardieren um die Partisanen drücken könnte.


  12. #57
    Registrierter Benutzer
    Registriert seit
    29.01.03
    Beiträge
    4.909
    Ich habe mir heute folgendes System ausgedacht. Zuerst wird ermittelt ob überhaupt etwas getroffen wird (unabhänig davon was getroffen wird). Ist das der Fall wird geguckt ob ne Stadt auf dem Feld ist. Wenn ja, dann wird in jedem Falle der Stadtverteidigungsbonus verringert und mit folgender Wahrscheinlichkeit getroffen:

    33% Gebäude (beliebig)
    33% Bevölkerung
    34% Einheiten

    Wenn die Bevölkerung nur noch 1 ist dann entfällt die Bevölkerung als Ziel. Dann würde es so aussehen:
    49% Gebäude (beliebig)
    51% Einheiten

    Sind auch keine Gebäude mehr da würde es so aussehen:

    100% Einheiten

    Ist gar nichts da, wird auch nichts getroffen.

    Sollte ein Bunker gebaut sein, würde dies die Bevölkerung und die Einheiten schützen. In diesem Falle würde es z.B. so aussehen:

    10% Bevölkerung
    10% Einheiten
    33% Gebäude (beliebig)
    47% gar nichts

    Natürlich kann der Bunker auch zerstört werden, wodurch der Bonus verfällt. Aber warum beliebige Gebäude? Ganz einfach: würden vorranig Schutzgebäude getroffen werden, dann würde dies die Artillerie extrem mächtig machen. Sie soll sich ja in das vorhandene Game gut einpassen und im jetzigen Zustand gibt es gar keine Waffe die so massiv und schädigend bombardieren kann. Wenn man eine große Stadt angreift wird es also schwer die Einheiten zu treffen oder bestimmte Gebäude, man muss eventuell sehr lange bombardieren damit die Stadt sturmreif ist. Das gibt dem Verteidiger die Chance Verstärkung heran zu holen und einen Offensivschlag gegen die Artillerie zu führen. Der Bunker als Gebäude wird nun extrem wichtig denn er schützt nicht nur die eigenen Einheiten sondern erhöht auch die Chance, dass es zu kompletten Fehltreffern kommt. Wenn man nun das Caesium-Mod hat ist der Bunker fast schon ein Garant für guten Widerstand, selbst bei massiver Bombardierung.

    Unter umständen ist es vielleicht sogar Sinnvoll mehrere Gebäude mit der Wirkung eines Bunkers auszustatten. Z.B. könnte eine Küstenfestung bei Seebombardierung den gleichen Effekt haben oder auch eine Stadtmauer in der Antike. Dann würde es Sinn machen in der XML Datei der Einheiten zu hinterlegen, welche Gebäude diesen Effekt besitzten. Z.B. hätte dann die Stadtmauer bei einem Katapult diesen schützenden Effekt, wogegen eine moderne Artillerie schon einen Bunker benötigt.

    Außerdem würde soetwas auch Spielraum für spätere Verbesserungen des Bombenmods geben. Sobald man gut bombardieren kann und die KI damit ebenfalls gut umgeht würde ich für moderne Einheiten eine sonderform der Bombardierung einbauen: Präzisionsschlag. Dieser würde vorranig Einheiten und militärisch relevante Gebäude treffen und nur noch sehr selten die Bevölkerung. Natürlich kann man später auch ncoh hineinprogrammieren, dass andere Zivilisationen es nicht gerne sehen wenn bei einer Bombardierung viel Zivilbevölkerung drauf geht... die Möglichkeiten sind nahezu unendlich.

    Doch bevor ich hier komplett ins schwelgen komme, würde ich mich ersteinmal auf das wesendliche konzentrieren. Jedoch versuche ich natürlich meine Funktionen und Routinen so aufzubauen, dass spätere Erweiterungen und Verbesserungen kein Problem darstellen dürften. Ich hätte dann auch ncihts dagegen, wenn dieser Mod in verschiedenen Variationen verwendet und weiterentwickelt wird.

  13. #58
    Registrierter Benutzer
    Registriert seit
    29.01.03
    Beiträge
    4.909
    Oh ja, ich werde verrückt! Ich sitze hier seit Stunden und versuche einen Weg zu finden um die Blickrichtung einer Einheit zu ändern. Solange die Einheit auf ein Nebenfeld bombardiert macht sie das von selbst. Bombardiert sie jedoch ein Feld weiter weg bleibt ihre aktuelle Richtung bestehen. Da hat Firaxis in der Animationsroutine aber extrem gefuscht!!! Leider ist diese Routine vom Code her nicht zugänglich... ich werde noch verrückt

  14. #59
    Ein Platz an der Sonne Avatar von Commander Bello
    Registriert seit
    05.06.05
    Ort
    Nähe Koblenz
    Beiträge
    6.209
    Deine Überlegungen klingen sehr gut, obwohl mich irgendetwas daran noch stört. Das kann ich aber im Moment nicht greifen, daher muß ich es erstmal sacken lassen.

    Werde später noch mal darauf zurückkommen....


  15. #60
    Registrierter Benutzer
    Registriert seit
    29.01.03
    Beiträge
    4.909
    Zitat Zitat von Commander Bello
    Deine Überlegungen klingen sehr gut, obwohl mich irgendetwas daran noch stört. Das kann ich aber im Moment nicht greifen, daher muß ich es erstmal sacken lassen.

    Werde später noch mal darauf zurückkommen....
    Naja derzeit hänge ich noch an der optischen Darstellung einer Bombardierung. Jedoch habe ich gestern noch gute Fortschritte gemacht um die Bombardierung korrekt anzuzeigen, mal sehen ob ich das heute dann zum Abschluß bringen kann.

    Danach fange ich an die Schadensermittlung zu programmieren. Wobei sich Details wie Treffedchancen und "Schutzgebäude" später ohne Probleme anpassen lassen. Nur das Grundkonzept ist dann schon etwas schwieriger umarbeiten

Seite 4 von 10 ErsteErste 12345678 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •