void setup_objects() redeclared Oo

Weis einer was das bedeutet? Ich hab keinen blassen Schimmer, das einzige was mir in den Kopf geschossen ist, dass ich irgendwas (script datei oder im script irgendwelche Befehle) doppelt haben könnte, dem ist aber nicht so...

Hier mal das Script... ^^ Sorry, isn bisschen lange *g*

Falls wer was weis, bitte melden :)

Code:
void setup_objects()
{

    ///////
    //void Tuerefrontopen
    ///////

    $func_mover_1.time(10);
    $func_mover_1.accelTime(1);
    $func_mover_1.decelTime(1);

    $func_mover_1.time(.2);

    $func_mover_1.time(10);
    $func_mover_1.accelTime(1);
    $func_mover_1.decelTime(1);
        
    $tuere1.time(2);
    $tuere2.time(2);
    $tuere3.time(2);
    $tuere4.time(2);

    
    ////////
    //void machine
    ////////
    
    //Tür links öffnet sich
    $door_rotatorL.time(1);
    $doorL.time(1);
    
    //capsulecarrierbaseL fährt nach oben
    $capsulecarrierbaseL.time(3);    
    $capsulecarrierbaseL.decelTime(0.75);

    //arm_rotator fährt zur linken Kapsel
    $arm_rotator.time(1);

    //arm fährt aus
    $arm.time(1);
    $arm_grabber.time(1);

    //Tür rechts geht auf
    $door_rotatorR.time(1);
    $doorR.time(1);
    
    //arm wird wieder eingefahren
    $arm_grabber.time(1);    
    $arm.time(1);
    
    //capsulecarrierbaseR fährt nach oben
    $capsulecarrierbaseR.time(3);
    $capsulecarrierbaseL.decelTime(0.75);    

    //capsulecarrierbaseL fährt wieder runter
    $capsulecarrierbaseL.time(3);
    $capsulecarrierbaseL.accelTime(0.75);
    
    //arm schwenkt wieder zurück zum capsuleRotator
    $arm_rotator.time(1);    
    
    //puller fährt aus        
    $puller.time(0.5);

    //grabberL + R fahren umgreifen die capsuleL
    $grabberL.time(1);
    $grabberR.time(1);

    //puller fährt zurück
    $puller.time(0.5);
    
    //capsuleRotator schwenkt nach unten um capsuleL zu loch zu führen
    $capsuleRotator.time(0.5);

    //Tür links schließt sich
    $door_rotatorL.time(1);
    $doorL.time(1);

    //arm_rotator schwenkt zu capsuleR
    $arm_rotator.time(1);

    //capsuleL geht ins Loch
    $capsuleL.time(1);
    
       //capsuleRotator geht zurück in ausgangsposition
    $capsuleRotator.time(0.5);

    //capsuleL wird wieder richtig rum rotiert
    $capsuleL.time(0.1);

    //capsuleL fliegt nach unten um unsichtbar zu bleiben beim Rückflug
    $capsuleL.time(0.1);

    //capsule springt zur ausgangposition zurück
    $capsuleL.time(0.8);

    //arm fährt aus
    $arm.time(1);
    $arm_grabber.time(1);

     //grabberL + R öffnen sich wieder
    $grabberL.time(1);
    $grabberR.time(1);

    //arm wird wieder eingefahren
    $grabberL.time(1);
    $grabberR.time(1);

    //arm wird wieder eingefahren
    $arm_grabber.time(1);
    $arm.time(1);
    
    //arm schwenkt wieder zurück zum capsuleRotator
    $arm_rotator.time(1);

    //capsulecarrierbaseR fährt wieder runter
    $capsulecarrierbaseR.time(3);
    $capsulecarrierbaseR.accelTime(0.75);    
    
    //puller fährt aus
    $puller.time(0.5);
    
    //capsuleRotator schwenkt capsuleR zu Loch
    $capsuleRotator.time(0.5);
    
    //capsuleR geht ins Loch
    $capsuleR.time(1);
    
    //grabberL + R öffnen sich wieder
    $grabberL.time(1);
    $grabberR.time(1);
    
    //capsuleRotator geht zurück in ausgangsposition
    $capsuleRotator.time(0.5);

    //Tür rechts schließt sich
    $door_rotatorR.time(1);
    $doorR.time(1);
    
    //capsuleL wird wieder richtig rum rotiert    
    $capsuleR.time(0.1);

    //capsuleL fliegt nach unten um unsichtbar zu bleiben beim Rückflug
    $capsuleR.time(0.1);
    
    //capsule springt zur ausgangposition zurück    
    $capsuleR.time(0.8);

    ////////
    //void broke_door
    ////////
    
    $broke_door.time(3.2);
    $broke_door.decelTime(0.7);

    $broke_door.time(1.5);
    
    ///////
    //void lightsregistrationroom
    ///////

    $light_left_rotator.time(1.25);
    $light_left_rotator.accelTime(0.1);
    $light_left_rotator.decelTime(0.75);
    $light_left.time(1.5);
    $light_left.decelTime(1);
      
    $light_right_rotator.time(1.25);
    $light_right_rotator.accelTime(0.1);
    $light_right_rotator.decelTime(0.75);
    $light_right.time(1.5);
    $light_right.decelTime(1);

    $visionmover.time(5);
    $visionmover.accelTime(2);
    $visionmover.decelTime(2);
    
    ///////
    //void cyberdemon_appear
    /////// 

    $cyber_mover_1.time(8);
    $cyber_mover_1.decelTime(3);

}


    /////////////////////////////
    //Sachen für void cyberdemon_appear() werden versteckt
    /////////////////////////////


void hidehellstuff()

{
    $monster_boss_cyberdemon_1.hide();
    $func_static_720.hide();
    $func_static_719.hide();
    $func_static_718.hide();
}


    /////////////////////////////
    //Kapsel die durch den Anfangsraum fährt mit dem Zombie
    /////////////////////////////


void tuerefrontopen()
{
  while(true)
   {
           
           
     $tuere1.move(90, 41);   //Türflügel 1 und 2 gehen auf
     $tuere2.move(270, 41);  
  
     sys.wait(1);
     
     $func_mover_1.move(360, 1240);

     sys.wait(1);

     $tuere1.move(270, 41);  //Türflügel 1 und 2 gehen zu
     $tuere2.move(90, 41);  

     sys.wait(6);
  
     $tuere3.move(270, 41);  //Türflügel 3 und 4 gehen auf
     $tuere4.move(90, 41);   
     
     sys.wait(2);
     
     $tuere3.move(90, 41);  //Türflügel 3 und 4 gehen zu
     $tuere4.move(270, 41);

     sys.waitFor($tuere4);

     //Bringe Zelle zur Ausgangsposition
     
     
     $func_mover_1.move(270, 352);
     
     sys.waitFor($func_mover_1);
     
     $func_mover_1.move(180, 1240);
     
     sys.waitFor($func_mover_1);
     
     $func_mover_1.move(90, 352);
          
     sys.wait(2);

   }

}

    ///////////////////////////
    //Maschine mit den zwei Kapseln die erst von rot auf blau umgefärbt werden
    ///////////////////////////



void machine()

{

while(true)
        
        {
        
        //Tür links öffnet sich


    $door_rotatorL.rotateOnce(' 90 0 0 ');                             
    $doorL.move(180,2);
    
    sys.waitFor($doorL);
    
    $capsuleL.bind($capsulecarrierbaseL);
    
        //capsulecarrierbaseL fährt nach oben

    $capsulecarrierbaseL.move(UP, 332);                            
            
        //arm_rotator fährt zur linken Kapsel

    $arm_rotator.rotateOnce(' 0 -90 0 ');

    sys.waitFor($capsulecarrierbaseL);
    
    //Kapsel wird umgefärbt

        thread crossFadeEnt($light_L, ' 1 0 0 ', ' 0 0 1 ', 2);  
        thread crossFadeEnt($light_capsuleL, ' 1 0 0 ', ' .0 0 1 ', 2);

        sys.waitFor($light_L);

        //arm fährt aus

    $arm.move(360, 27);
    $arm_grabber.move(360, 27);
    
    //Tür rechts geht auf


    $door_rotatorR.rotateOnce(' -90 0 0 ');                             
    $doorR.move(360,2);
    
    sys.waitFor($arm_grabber);    
        
        //capsuleL wird abgebunden von capsulecarrierbaseL und an den arm_grabber
        //gebunden.


    $capsuleL.unbind();
    $capsuleL.bind($arm_grabber);

        //arm wird wieder eingefahren

    $arm_grabber.move(180, 27);
    $arm.move(180, 27);

        //capsuleR wird an capsulecarrierbaseR gebunden

        $capsuleR.bind($capsulecarrierbaseR);
        
        //capsulecarrierbaseR fährt nach oben

        $capsulecarrierbaseR.move(UP, 332);
    
        sys.waitFor($arm);

        //capsulecarrierbaseL fährt wieder runter

        $capsulecarrierbaseL.move(DOWN, 332);
        
           //light_L färbt zurück in rot

        thread crossFadeEnt($light_L, ' 0 0 1 ', ' 1 0 0 ', 2);  
        
        //arm schwenkt wieder zurück zum capsuleRotator

        $arm_rotator.rotateOnce(' 0 90 0 ');

    sys.waitFor($arm_rotator);

        //puller fährt aus

    $puller.move(90, 16);
    
    sys.waitFor($puller);
    
        //capsuleL wird abgebunden von arm_grabber und an den capsuleRotator
        //gebunden.

    $capsuleL.unbind();
    $capsuleL.bind($capsuleRotator);
    
    //grabberL + R fahren umgreifen die capsuleL

    $grabberL.rotateOnce('0 -90 0');
    $grabberR.rotateOnce('0 90 0');
    
        sys.waitFor($grabberL);
    
    //puller fährt zurück

    $puller.move(270, 16);
    
    //capsuleRotator schwenkt nach unten um capsuleL zu loch zu führen

        $capsuleRotator.rotateOnce('0 0 -90');
    
    sys.waitFor($puller);
    sys.waitFor($capsuleRotator);
       
        //Tür links schließt sich

    $door_rotatorL.rotateOnce(' -90 0 0 ');                             
    $doorL.move(360,2);
    
        //arm_rotator schwenkt zu capsuleR

        $arm_rotator.rotateOnce('0 90 0');
        
        //capsuleR färbt um in blau


        thread crossFadeEnt($light_R, ' 1 0 0 ', ' 0 0 1 ', 2);  
        thread crossFadeEnt($light_capsuleR, ' 1 0 0 ', ' 0 0 1 ', 2); 
        
        //capsuleL wird vom capsuleRotator abgebunden


        $capsuleL.unbind();
        
        //capsuleL geht ins Loch

        $capsuleL.move(270, 100);

        sys.waitFor($arm_rotator);
        
           //capsuleRotator geht zurück in ausgangsposition

        $capsuleRotator.rotateOnce('0 0 90');
        
        sys.waitFor($capsuleL);
        
        //capsuleL wird wieder richtig rum rotiert

        $capsuleL.rotateOnce('90 90 0');
        
        //capsuleL fliegt nach unten um unsichtbar zu bleiben beim Rückflug

        $capsuleL.move(DOWN, 332);
        
        sys.waitFor($capsuleL);
        
        //capsule springt zur ausgangposition zurück

        $capsuleL.moveToPos('1408 1808 -555');
        
        //arm fährt aus


    $arm.move(180, 27);
    $arm_grabber.move(180, 27);      
        
        sys.waitFor($arm);

        
        //capsuleR wird abgebunden von capsulecarrierbaseR und an den arm_grabber
        //gebunden.

    $capsuleR.unbind();
    $capsuleR.bind($arm_grabber);         
        
        sys.waitFor($capsuleR);
        
        //grabberL + R öffnen sich wieder

    $grabberL.rotateOnce('0 90 0');
    $grabberR.rotateOnce('0 -90 0');
    
        //arm wird wieder eingefahren

    $arm_grabber.move(360, 27);
    $arm.move(360, 27);
    
    sys.waitFor($arm);
    
        //arm schwenkt wieder zurück zum capsuleRotator

        $arm_rotator.rotateOnce(' 0 -90 0 ');
        
        sys.waitFor($arm_rotator);
        
           //light_R färbt zurück in rot

        thread crossFadeEnt($light_R, ' 0 0 1 ', ' 1 0 0 ', 2);  
    
    //capsulecarrierbaseR fährt wieder runter

        $capsulecarrierbaseR.move(DOWN, 332);
        
        //puller fährt aus

    $puller.move(90, 16);
    
    sys.waitFor($puller);
    
        //capsuleR wird abgebunden von arm_grabber und an den capsuleRotator
        //gebunden.


    $capsuleR.unbind();
    $capsuleR.bind($capsuleRotator);
    
    //grabberL + R fahren umgreifen die capsuleR

    $grabberL.rotateOnce('0 -90 0');
    $grabberR.rotateOnce('0 90 0');
    
    sys.waitFor($grabberL);
    
    //puller fährt zurück

    $puller.move(270, 16);    
    
    //capsuleRotator schwenkt capsuleR zu Loch

    $capsuleRotator.rotateOnce('0 0 -90');
    
    sys.waitFor($capsuleRotator);
    
        //capsuleR wird vom capsuleRotator abgebunden

        $capsuleR.unbind();
        
        //capsuleR geht ins Loch

        $capsuleR.move(270, 100);

        sys.waitFor($capsuleR);
        
        //grabberL + R öffnen sich wieder

    $grabberL.rotateOnce('0 90 0');
    $grabberR.rotateOnce('0 -90 0');

           //capsuleRotator geht zurück in ausgangsposition

        $capsuleRotator.rotateOnce('0 0 90');
        
        //Tür rechts schließt sich

    $door_rotatorR.rotateOnce(' 90 0 0 ');                             
    $doorR.move(180,2);
        
        sys.waitFor($capsuleR);
        
        //capsuleL wird wieder richtig rum rotiert

        $capsuleR.rotateOnce('90 90 0');
        
        //capsuleL fliegt nach unten um unsichtbar zu bleiben beim Rückflug

        $capsuleR.move(DOWN, 332);
        
        sys.waitFor($capsuleR);
        
        //capsule springt zur ausgangposition zurück

        $capsuleR.moveToPos('1664 1808 -556');
        
        sys.waitFor($capsuleR);
        
        //capsuleL + R werden zurück in rot umgefärbt


        $light_capsuleL.setColor ( 1, 0, 0 ); 
        $light_capsuleR.setColor ( 1, 0, 0 );
    
        }


}

    //////////////////////
    //Die Tür die ständig auf und zu geht, aber nicht passierbar ist
    //////////////////////


void broke_door()

{
     while(true)
     {

     sys.trigger($speaker_14);
     $broke_door.move(90, 24);

     sys.waitFor($broke_door);
     sys.wait(2);
     
     sys.trigger($speaker_15);
     $broke_door.move(270, 24);

     sys.waitFor($broke_door);
     sys.wait(3);

     }
}

    /////////////////////////////
    //Die Lichter die in der Registration lobby angeschalten werden und die 2 Schwenklichter
    /////////////////////////////


void lightsregistrationroom()

{
    sys.wait(2);


    sys.trigger($speaker_24);

    sys.waitFor($speaker_24);

    sys.wait(1.5);

    sys.trigger($light_601);
    sys.trigger($speaker_22);

    sys.wait(0.75);

    sys.trigger($light_600);
    sys.trigger($speaker_23);

    sys.wait(0.5);

    $light_left_rotator.rotateOnce(' 0 35 0 ');
    $light_left.rotateOnce(' 0 0 -85 ');
    
    sys.wait(0.5);

    $light_right_rotator.rotateOnce(' 0 -35 0 ');
    $light_right.rotateOnce(' 0 0 85 ');

}

    /////////////////////////////
    //Szene in der der Cyberdemon gespawnt wird
    /////////////////////////////


void cyberdemon_appear()

{
     $light_571.fadeInLight(0.75);
     sys.trigger($speaker_20);
     sys.trigger($func_emitter_52);
     $monster_boss_cyberdemon_1.show();
     $func_static_720.show();
     $func_static_719.show();
     $cyber_mover_1.move(UP, 288);
     sys.wait(1.5);
     sys.trigger($speaker_21);

     sys.waitFor($cyber_mover_1);

     $monster_boss_cyberdemon_1.unbind();
     $func_static_718.show();
     sys.trigger($func_remove_6);

}



void main()

{

    setup_objects();

}
 

MacX

Light Guard
Das ist interessant. Die Funktion setup_objects gibt es im base/script-Ordner zwar häufiger, allerdings liegt die immer in einem namespace, was genau dieses Problem verhindern sollte. Entweder hast du wirklich noch irgendwo eine Skriptdatei die eine gleichnamige Funktion deklariert oder es kommt vielleicht sogar durch irgendeine andere Mod (falls du irgendwelche geladen hast).

Lösung: Funktionsnamen ändern oder einen namespace drumherum packen.

Also so:
Code:
namespace nameDeinerMap {

    void setup_objects()
    {
        // Funktionsinhalt
    }

    //... weitere Funktionen 

    void main()
    {
        setup_objects();
    }
}

Falls die main-Funktion nicht aufgerufen wird, musst du zu einem Worldspawn in deiner Map noch folgendes hinzufügen:

Code:
key: call
value: nameDeinerMap::main

Edit: Eventuell fügt der Radiant das beim Kompilieren auch selbst hinzu, aber darauf würde ich mich jetzt nicht verlassen. Jedenfalls enthalten alle .map-Dateien von Doom 3 am Anfang solch einen Aufruf.

Prinzipiell würde ich auch empfehlen, alle eigenen Skripte in den base/script-Ordner zu tun. Am besten noch mit Unterordner der nach der eigenen Mod benannt ist.
 
Last edited:
Hrm, also ich hab das mal ausprobiert MacX, hat nicht funktioniert. Ich hab alle Mods mal aus dem Doom3 Ordner genommen, hab die Map umbenannt, hab das mit dem Namespace eingefügt, hat nix funktioniert. Das Problem erscheint aber nur dann, wenn ich das Script DIESER map (bei keiner anderen obwohl ich da genauso gearbeitet habe) in die Doom_main.script einfüge... Finde das ein bisschen suspekt ^^

Hier mal ein Auszug aus dieser kleinen Konsole die beim Start des Spiels aufgeht und der Startvorgang abgebrochen wird.

Code:
--------- Initializing Game ----------
gamename: baseDOOM-1
gamedate: Jan 16 2007
Initializing event system
...473 event definitions
Initializing class hierarchy
...142 classes, 191092 bytes for event callbacks
Initializing scripts
--------- Game Map Shutdown ----------
--------------------------------------
********************
ERROR: Error: file script\projectforever.script, line 12: setup_objects redeclared


********************
Error during initialization
Shutting down OpenGL subsystem
...wglMakeCurrent( NULL, NULL ): success
...deleting GL context: success
...releasing DC: success
...destroying window
...shutting down QGL
...unloading OpenGL DLL
 

MacX

Light Guard
Wie genau sieht Zeile 12 von projectforever.script denn aus? Entspricht das dem Skript von oben?
Hast du das Skript vielleicht einmal im script und einmal im maps-Ordner?

Oder hast du es vielleichts aus Versehen zweimal in doom_main.script inkludiert?
 
Last edited:
Jap, das ist das script was ich oben im Code habe, hatte darüber nur noch ein paar Kommentare um mir Sachen zu vermerken. Ich hab das jetzt wieder so geändert wie ichs früher hatte und es funktioniert wieder... Komisch eigentlich, mir fiel gestern dann noch auf dass das nicht nur das Level war, sondern auch alle anderen Levels in denen ein Script vorhanden ist. Ich hab die Scripts wieder zurück in den maps Ordner gepackt und den Scripts Ordner gelöscht, danach ging wieder alles... Im doom_main.script wars auch nur einmal, vielleicht tüftel ich da die Tage nochmal etwas dran rum, mal schauen, aber vielen Dank für die Hilfe MacX :)
 

Kiran Müller

Commander Keen
Mal so ne frage Leute, warum macht ihr euch immer die Arbeit die doommain datei zu ändern?

Einfach einen Ordner mit den Scripten erstellen, dann im Ornder mit der map eine gleichnamige .script datei erstellen und dann per #include arbeiten! Dann bleiben die Files vom Orginal unberührt und man muss da nicht noch son namespace drumfummeln! Oft benutzte Scriptfiles Included man dann in einer Datei...^^


Was mir gerade in dem Script auffällt, du deklarierst sachen doppelt im setup!

PHP:
//Tür links öffnet sich
    $door_rotatorL.time(1);
    $doorL.time(1);
Ist das selbe wie:

PHP:
//Tür links schließt sich
    $door_rotatorL.time(1);
    $doorL.time(1);
Das bringt nur unnötigen code ;-)

Genau wie in den ersten Zeilen:
PHP:
$func_mover_1.time(10);
    $func_mover_1.accelTime(1);
    $func_mover_1.decelTime(1);

    $func_mover_1.time(.2);

    $func_mover_1.time(10);
    $func_mover_1.accelTime(1);
    $func_mover_1.decelTime(1);
2mal $func_mover_1? Wozu?

PHP:
sys.trigger($speaker_24);
    sys.waitFor($speaker_24);
waitFor nach nem Trigger bringt garnix, völlig unnötig ;-) Der Triggert den und KANN nicht darauf warten, da das Event mit dem Triggern bereits gefinished ist ;-)
 

MacX

Light Guard
So wie du es beschreibst, kann man es natürlich auch machen. Wenn die Skripte im Maps Ordner sind, kann man schon effizienter arbeiten, da man bei Änderungen am Skript nicht immer den Radianten bzw. Doom 3 neustarten muss. Ich persönlich würde diese aber in den dafür vorgesehenen Ordner (base/script) tun. Änderungen am doom_main.script sind nicht unbedingt notwendig, vorausgesetzt, man passt da ein paar Zeilen im SDK an.
 
Top