Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Dec 11, 2018, 6:20:24 PM (6 years ago)
Author:
merholzl
Message:

RD merge

Location:
code/branches/Merge_HS18
Files:
10 edited
4 copied

Legend:

Unmodified
Added
Removed
  • code/branches/Merge_HS18

  • code/branches/Merge_HS18/data/levels/emptyLevel.oxw

    r11719 r12182  
    2929    <Light type=directional position="0,0,0" direction="0.253, 0.593, -0.765" diffuse="1.0, 0.9, 0.9, 1.0" specular="1.0, 0.9, 0.9, 1.0"/>
    3030    <SpawnPoint team=0 position="-200,0,0" lookat="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipescort />
     31    <Model position=“0,0,0“ mesh="finalenemy2.mesh" scale="3" />
    3132   
    3233  </Scene>
  • code/branches/Merge_HS18/data/levels/towerDefense.oxw

    r11052 r12182  
    2323  <TowerDefenseSelecter>
    2424    <camerapositions>
    25       <CameraPosition position="0,0,1300" lookat="0,0,0" absolute=true drag=true mouselook=true/>
     25      <CameraPosition position="-50,-1300,1000" lookat="-50,0,-400" absolute=true drag=true mouselook=true/>
    2626    </camerapositions>
    2727  </TowerDefenseSelecter>
     
    250250   explosionchunks        = 6
    251251
     252   health            = 100
     253   maxhealth         = 10000000000000
     254   initialhealth     = 100
     255
     256   shieldhealth        = 1000
     257   initialshieldhealth = 1000
     258   maxshieldhealth     = 10000000000000
     259   shieldabsorption    = 0.8
     260   shieldrechargerate = 1
     261   shieldrechargewaittime = 1
     262
     263   primaryThrust     = 100
     264   auxilaryThrust    = 30
     265   rotationThrust    = 80
     266
     267   lift = 1;
     268   stallSpeed = 220;
     269
     270   boostPower            = 15
     271   boostPowerRate        = 1
     272   boostRate             = 5
     273   boostCooldownDuration = 10
     274
     275   shakeFrequency = 15
     276   shakeAmplitude = 9
     277
     278   collisionType     = "dynamic"
     279   mass              = 100
     280   linearDamping     = 0.7
     281   angularDamping    = 0.9999999
     282
     283   explosionSound = "sounds/Explosion2.ogg"
     284  >
     285
     286    <engines>
     287      <Engine position=" 0, 0, 0"
     288        boostfactor    = 2
     289        speedfront     = 400
     290        speedback      =  50
     291        speedleftright =  50
     292        speedupdown    =  50       
     293        accelerationfront     = 500
     294        accelerationbrake     = 500
     295        accelerationback      =  125
     296        accelerationleftright =  125
     297        accelerationupdown    =  125
     298      />
     299    </engines>
     300    <attached>
     301      <Model position="0,0,0" yaw=180 pitch=0 roll=0 scale=10 mesh="finalenemy1.mesh" />
     302    </attached>
     303    <collisionShapes>
     304      <BoxCollisionShape position="0,0,0"      halfExtents="10, 3, 5" />
     305      <BoxCollisionShape position="13,-1.3,0"  halfExtents="3, 1, 2" />
     306      <BoxCollisionShape position="-13,-1.3,0" halfExtents="3, 1, 2" />
     307      <BoxCollisionShape position="0,0,7"      halfExtents="3, 2, 2" />
     308      <BoxCollisionShape position="0,0.1,-11"  halfExtents="2.2, 1.8, 6" />
     309      <BoxCollisionShape position="0,0.1,-19"  halfExtents="1.4, 1, 2" />
     310    </collisionShapes>
     311    </TowerDefenseEnemy>
     312</Template>
     313
     314<Template name=enemytowerdefense2>
     315  <TowerDefenseEnemy
     316   hudtemplate            = spaceshiphud
     317   camerapositiontemplate = spaceshipassffcameras
     318   spawnparticlesource    = "Orxonox/fairytwirl"
     319   spawnparticleduration  = 3
     320   explosionchunks        = 6
     321
     322   health            = 40
     323   maxhealth         = 10000000000000
     324   initialhealth     = 30
     325
     326   shieldhealth        = 0
     327   initialshieldhealth = 0
     328   maxshieldhealth     = 0
     329   shieldabsorption    = 0.8
     330   shieldrechargerate = 1
     331   shieldrechargewaittime = 1
     332
     333   primaryThrust     = 100
     334   auxilaryThrust    = 30
     335   rotationThrust    = 80
     336
     337   lift = 1;
     338   stallSpeed = 220;
     339
     340   boostPower            = 15
     341   boostPowerRate        = 1
     342   boostRate             = 5
     343   boostCooldownDuration = 10
     344
     345   shakeFrequency = 15
     346   shakeAmplitude = 9
     347
     348   collisionType     = "dynamic"
     349   mass              = 100
     350   linearDamping     = 0.7
     351   angularDamping    = 0.9999999
     352
     353   explosionSound = "sounds/Explosion2.ogg"
     354  >
     355
     356    <engines>
     357      <Engine position=" 0, 0, 0"
     358        boostfactor    = 2
     359        speedfront     = 100
     360        speedback      =  50
     361        speedleftright =  50
     362        speedupdown    =  50       
     363        accelerationfront     = 500
     364        accelerationbrake     = 500
     365        accelerationback      =  125
     366        accelerationleftright =  125
     367        accelerationupdown    =  125
     368      />
     369    </engines>
     370    <attached>
     371      <Model position="0,0,0" yaw=180 pitch=0 roll=0 scale=7.5 mesh="finalenemy2.mesh" />
     372    </attached>
     373    <collisionShapes>
     374      <BoxCollisionShape position="0,0,0"      halfExtents="10, 3, 5" />
     375      <BoxCollisionShape position="13,-1.3,0"  halfExtents="3, 1, 2" />
     376      <BoxCollisionShape position="-13,-1.3,0" halfExtents="3, 1, 2" />
     377      <BoxCollisionShape position="0,0,7"      halfExtents="3, 2, 2" />
     378      <BoxCollisionShape position="0,0.1,-11"  halfExtents="2.2, 1.8, 6" />
     379      <BoxCollisionShape position="0,0.1,-19"  halfExtents="1.4, 1, 2" />
     380    </collisionShapes>
     381    </TowerDefenseEnemy>
     382</Template>
     383
     384<Template name=enemytowerdefense3>
     385  <TowerDefenseEnemy
     386   hudtemplate            = spaceshiphud
     387   camerapositiontemplate = spaceshipassffcameras
     388   spawnparticlesource    = "Orxonox/fairytwirl"
     389   spawnparticleduration  = 3
     390   explosionchunks        = 6
     391
     392   health            = 50
     393   maxhealth         = 10000000000000
     394   initialhealth     = 50
     395
     396   shieldhealth        = 20
     397   initialshieldhealth = 20
     398   maxshieldhealth     = 10000000000000
     399   shieldabsorption    = 0.8
     400   shieldrechargerate = 1
     401   shieldrechargewaittime = 1
     402
     403   primaryThrust     = 100
     404   auxilaryThrust    = 30
     405   rotationThrust    = 80
     406
     407   lift = 1;
     408   stallSpeed = 220;
     409
     410   boostPower            = 15
     411   boostPowerRate        = 1
     412   boostRate             = 5
     413   boostCooldownDuration = 10
     414
     415   shakeFrequency = 15
     416   shakeAmplitude = 9
     417
     418   collisionType     = "dynamic"
     419   mass              = 100
     420   linearDamping     = 0.7
     421   angularDamping    = 0.9999999
     422
     423   explosionSound = "sounds/Explosion2.ogg"
     424  >
     425
     426    <engines>
     427      <Engine position=" 0, 0, 0"
     428        boostfactor    = 2
     429        speedfront     = 100
     430        speedback      =  50
     431        speedleftright =  50
     432        speedupdown    =  50       
     433        accelerationfront     = 500
     434        accelerationbrake     = 500
     435        accelerationback      =  125
     436        accelerationleftright =  125
     437        accelerationupdown    =  125
     438      />
     439    </engines>
     440    <attached>
     441      <Model position="0,0,0" yaw=180 pitch=0 roll=0 scale=19 mesh="finalenemy3.mesh" />
     442    </attached>
     443    <collisionShapes>
     444      <BoxCollisionShape position="0,0,0"      halfExtents="10, 3, 5" />
     445      <BoxCollisionShape position="13,-1.3,0"  halfExtents="3, 1, 2" />
     446      <BoxCollisionShape position="-13,-1.3,0" halfExtents="3, 1, 2" />
     447      <BoxCollisionShape position="0,0,7"      halfExtents="3, 2, 2" />
     448      <BoxCollisionShape position="0,0.1,-11"  halfExtents="2.2, 1.8, 6" />
     449      <BoxCollisionShape position="0,0.1,-19"  halfExtents="1.4, 1, 2" />
     450    </collisionShapes>
     451   </TowerDefenseEnemy>
     452</Template>
     453
     454<Template name=enemytowerdefense1*>
     455  <TowerDefenseEnemy
     456   hudtemplate            = spaceshiphud
     457   camerapositiontemplate = spaceshipassffcameras
     458   spawnparticlesource    = "Orxonox/fairytwirl"
     459   spawnparticleduration  = 3
     460   explosionchunks        = 6
     461
    252462   health            = 15
    253463   maxhealth         = 15
     
    307517</Template>
    308518
    309 <Template name=enemytowerdefense2>
     519<Template name=enemytowerdefense2*>
    310520  <TowerDefenseEnemy
    311521   hudtemplate            = spaceshiphud
     
    364574    </engines>
    365575    <attached>
    366       <Model position="0,0,0" yaw=0 pitch=0 roll=0 scale=2.5 mesh="JumpEnemy3.mesh" />
     576      <Model position="0,0,0" yaw=0 pitch=0 roll=0 scale=9 mesh="finalenemy4.mesh" />
    367577    </attached>
    368578    <collisionShapes>
     
    380590</Template>
    381591
    382 <Template name=enemytowerdefense3>
     592<Template name=enemytowerdefense3*>
    383593  <TowerDefenseEnemy
    384594   hudtemplate            = spaceshiphud
     
    437647    </engines>
    438648    <attached>
    439       <Model position="0,0,0" yaw=0 pitch=0 roll=0 scale=2.5 mesh="JumpEnemy4.mesh" />
     649      <Model position="0,0,0" yaw=0 pitch=0 roll=0 scale=2.5 mesh="JumpEnemy4.mesh" /> 
    440650    </attached>
    441651    <collisionShapes>
     
    452662  </TowerDefenseEnemy>
    453663</Template>
     664
     665<Template name=therangeviewer>
     666  <TowerDefenseRangeViewer>
     667      <attached>
     668        <Model yaw=0 pitch=0 roll=0 scale3D="1000,1000,10" mesh="cylinder.mesh" />
     669      </attached>
     670    </TowerDefenseRangeViewer>
     671</Template>
     672
    454673
    455674<Level plugins = "towerdefense" gametype = "TowerDefense">
     
    495714    tower4Cost=100
    496715    tower5Cost=100
    497     fields="F1F1F1R1I1I1I1I1O1F1F1F1F1F1F1F1
    498             F1F1F1I2F1F1F1F1F1F1F1F1F1F1F1F1
    499             F1F1F1I2F1F1F1F1F1F1F1F1F1F1F1F1
    500             F1F1F1I2F1F1F1F1F1F1F1Y1Y1Y1F1F1
    501             F1F1F1I2F1F1F1F1F1F1F1F1F1F1F1F1
    502             F1F1F1I2F1F1F1F1F1F1F1Y1Y1Y1F1F1
    503             F1F1F1R2I3I3I3I3L3F1F1F1F1F1F1F1
    504             F1F1F1F1F1F1F1F1I2F1F1F1F1F1F1F1
    505             F1F1F1F1F1F1F1F1I2F1F1F1F1F1F1F1
    506             X1I1I1I1R0F1F1F1I2F1F1F1F1F1F1F1
    507             F1F1F1F1I0F1F1F1I2F1F1F1F1F1F1F1
    508             F1F1F1F1I0F1F1F1I2F1F1F1F1F1F1F1
    509             F1F1F1F1L1I1I1I1L2F1F1F1F1F1F1F1
    510             F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1
    511             F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1
    512             F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1"
     716    fields="F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1
     717                F1F1F1R1I1I1I1I1I1I1I1I1I1I1R0F1
     718            F1F1F1I2F1F1F1Y1F1F1F1F1F1F1I0F1
     719            F1Y1F1I2F1F1F1F1F1F1F1F1Y1F1I0F1
     720            F1F1F1I2F1F1F1F1F1F1F1F1F1F1I0F1
     721            F1F1F1I2F1Y1F1F1F1F1F1L0I3I3R3F1
     722            F1F1F1I2F1F1F1F1F1F1F1I0F1F1F1F1
     723            F1F1F1R2I3I3I3I3L3F1F1I0F1F1Y1F1
     724            F1F1F1F1F1F1F1F1I2F1F1I0F1F1F1F1
     725            F1F1F1F1F1F1F1F1I2F1F1I0F1F1F1F1
     726            X1I1I1I1R0F1Y1F1I2F1F1I0F1F1F1F1
     727            F1F1F1F1I0F1F1F1I2F1F1L1I1I1R0F1
     728            F1F1F1F1I0F1F1F1I2F1F1F1F1F1I0F1
     729            F1F1F1F1L1I1I1I1L2F1F1F1F1Y1I0F1
     730            F1F1Y1F1F1F1F1F1F1F1F1F1F1F1I0F1
     731            F1F1F1F1F1F1F1F1F1Y1F1F1F1F1O0F1"
    513732    width=16
    514733    height=16
     
    520739    >
    521740      <camerapositions>
    522         <CameraPosition position="0,0,1400" lookat="0,0,0" absolute=true />
     741        <CameraPosition position="0,0,1500" lookat="0,0,0" absolute=true />
    523742      </camerapositions>   
    524743    </TowerDefenseCenterpoint>
  • code/branches/Merge_HS18/src/modules/towerdefense/CMakeLists.txt

    r10629 r12182  
    1010  TowerDefenseField.cc
    1111  TDCoordinate.cc
     12  TowerDefenseController.cc
     13  TowerDefenseRangeViewer.cc
    1214)
    1315
  • code/branches/Merge_HS18/src/modules/towerdefense/TowerDefense.cc

    r12180 r12182  
    7676#include "TowerDefenseCenterpoint.h"
    7777#include "worldentities/SpawnPoint.h"
    78 #include "controllers/WaypointController.h"
     78#include "worldentities/StaticEntity.h"
     79#include "TowerDefenseController.h" //muss ich noch in den richtigen Ordner verschieben
    7980#include "graphics/Model.h"
    8081#include "infos/PlayerInfo.h"
     
    8283#include "core/CoreIncludes.h"
    8384#include "Highscore.h"
     85#include "util/Output.h"
     86#include "TowerDefenseRangeViewer.h"
     87
    8488
    8589namespace orxonox
     
    9296
    9397        selecter = nullptr;
     98        rangeViewer = nullptr;
    9499        this->player_ = nullptr;
    95100        this->setHUDTemplate("TowerDefenseHUD");
     
    124129                selecter = new TowerDefenseSelecter(this->center_->getContext());               
    125130            }
     131            if(rangeViewer == nullptr){
     132                rangeViewer = new TowerDefenseRangeViewer(this->center_->getContext());
     133            }
    126134            selecter->addTemplate(center_->getSelecterTemplate());
     135            rangeViewer->addTemplate("therangeviewer");
     136            rangeViewer->setPosition(-10000,0,-500);
    127137            center_->attach(selecter);
     138            center_->attach(rangeViewer);
    128139        }
    129140        else // If no centerpoint was specified, an error is thrown and the level is exited.
     
    136147
    137148        createFields();
     149
    138150        TeamDeathmatch::start();
    139151
     
    157169            en1->addTemplate("enemytowerdefense1");
    158170            en1->setScale(3);
    159             en1->setHealth(en1->getHealth() + this->getWaveNumber()*4);
     171            en1->setHealth(en1->getHealth() + this->getWaveNumber()*1/3*0.5*(en1->getHealth()));
     172            en1->setShieldHealth(en1->getShieldHealth() + this->getWaveNumber()*1/3*0.5*(en1->getShieldHealth()));
    160173            break;
    161174
     
    163176            en1->addTemplate("enemytowerdefense2");
    164177            en1->setScale(2);
    165             en1->setHealth(en1->getHealth() + this->getWaveNumber()*4);
     178            en1->setHealth(en1->getHealth() + this->getWaveNumber()*1/3*0.3*(en1->getHealth()));
    166179            break;
    167180
     
    169182            en1->addTemplate("enemytowerdefense3");
    170183            en1->setScale(1);
    171             en1->setHealth(en1->getHealth() + this->getWaveNumber()*4);
     184            en1->setHealth(en1->getHealth() + this->getWaveNumber()*1/3*0.2*(en1->getHealth()));
     185            en1->setShieldHealth(en1->getShieldHealth() + this->getWaveNumber()*1/3*0.5*(en1->getShieldHealth()));
    172186            break;
    173187        }       
     
    175189        en1->setTeam(2);
    176190
    177         WaypointController* controller = (WaypointController*)(en1->getXMLController());
    178 
    179         if (controller != nullptr && waypoints_.size() > 1)
     191        //Jedem Enemy wird ein eigener Controller uebergeben
     192        TowerDefenseController* controller = new TowerDefenseController(this->center_->getContext());
     193        controller->setControllableEntity(en1);
     194        en1->setController(controller);
     195
     196        if (waypoints_.size() > 1)
    180197        {
    181198            en1->setPosition(waypoints_.at(0)->getPosition() + offset_);
     
    192209        }
    193210
    194         enemies_.push_back(en1);
     211        auto pair = std::make_pair(orxonox::WeakPtr<TowerDefenseEnemy>(en1), controller);
     212        enemies_.push_back(pair);
    195213    }
    196214
     
    280298        timeSinceLastSpawn_ += dt;
    281299
     300        if(selecter != nullptr && getField(selecter->selectedPos_)->canUpgrade() == true ){
     301            rangeViewer->setPosition(((selecter->selectedPos_->GetX())-8)*100, ((selecter->selectedPos_->GetY())-8)*100, 200);
     302        } else {
     303            rangeViewer->setPosition(-10000,0,-500);
     304        }
     305
    282306        //build/upgrade tower at selecter position
    283307        if (selecter != nullptr && selecter->buildTower_ == true)
     
    295319            }           
    296320        }
     321               
    297322       
    298         for (std::list<WeakPtr<TowerDefenseEnemy>>::iterator it = enemies_.begin(); it != enemies_.end(); )
    299         {
    300             if (*it == nullptr)
    301             {
    302                 // the enemy was destroyed by a tower - remove it from the list
    303                 enemies_.erase(it++);
    304                 addCredit(1);
     323        for (EnemyList::iterator it = enemies_.begin(); it != enemies_.end(); )
     324        {
     325            WeakPtr<TowerDefenseEnemy> enemy = it->first;
     326            TowerDefenseController* ctrl = it->second;
     327
     328            if (enemy == nullptr)
     329            {
     330
     331                // the enemy was destroyed by a tower - remove it from the list AND destroy the corresponding controler
     332                ctrl->destroy();
     333                it = enemies_.erase(it);
     334               
     335                int currentType = this->getWaveNumber() % 3 + 1;
     336                switch (currentType){ //Entscheidet, wie viele Credits vergeben werden sollen
     337                    case 1: //currently boss wave
     338                        addCredit(100);
     339                        if (this->getLifes() <= 90)
     340                        {
     341                            this->setLifes(this->getLifes() + 10);
     342                        }
     343                        break;
     344
     345                    case 2: //currently mass wave
     346                        addCredit(5);
     347                        break;
     348
     349                    case 3: //currently moderate wave
     350                        addCredit(10);
     351                        break;
     352                }
    305353            }
    306354            else
    307355            {
    308356                //if ships are at the end they get destroyed
    309                 Vector3 ship = (*it)->getRVWorldPosition();
     357                Vector3 ship = enemy->getRVWorldPosition();
    310358                float distance = ship.distance(endpoint_);
    311359                if(distance < 40)
    312360                {
    313                     (*it)->destroy();
    314                     enemies_.erase(it++);
     361                    enemy->getController()->destroy();
     362                    enemy->destroy();
     363
     364                    it = enemies_.erase(it);
    315365                    this->reduceLifes(1);
    316366                    if (this->getLifes() == 0)
     
    332382            timeSinceLastSpawn_ -= 1.0;
    333383            -- waveSize_;
    334             addTowerDefenseEnemy(this->getWaveNumber() % 3 + 1);
     384            addTowerDefenseEnemy(this->getWaveNumber() % 3 + 1); //Gegnertyp rotiert durch die 3 moeglichen, er beginnt bei Typ 2!!!
    335385        }
    336386        else if (timeUntilNextWave_ <= 0.0 && waveSize_ <= 0)
    337387        {
     388            int currentType = this->getWaveNumber() % 3 + 1;
    338389            //New wave
    339390            ++ waveNumber_;
     
    341392
    342393            timeUntilNextWave_ = waveNumber_+20.0f;
    343             waveSize_ = waveNumber_+5;
     394            // Entscheidung, wie gross die einzelnen waves sein sollen.
     395            switch (currentType){
     396                case 1: //currently boss wave
     397                    waveSize_ = waveNumber_+10;
     398                    break;
     399
     400                case 2: //currently mass wave
     401                    waveSize_ = (waveNumber_+10)/2;
     402                    break;
     403
     404                case 3: //currently moderate wave
     405                    waveSize_ = 1;
     406                    break;
     407            }
    344408        }
    345409
     
    353417        std::string fields = center_->getFields();
    354418        int pos = 0;
    355         for (int j = 15; j >= 0; --j)
    356         {
    357             for (int i = 0; i < 16; ++i)
     419        for (int j = 15; j >= 0; --j) //Vertical number of rows
     420        {
     421            for (int i = 0; i <= 15; ++i) //Horizontal number of rows
    358422            {
    359423                coord.Set(i,j);
     
    416480        }
    417481
     482        //Falls kein anliegender Weg gefunden wurde.
    418483        delete nextCoord;
    419484        return nullptr;
  • code/branches/Merge_HS18/src/modules/towerdefense/TowerDefense.h

    r11099 r12182  
    3232#include "TDCoordinate.h"
    3333#include "TowerDefenseSelecter.h"
     34#include "TowerDefenseController.h"
    3435#include "towerdefense/TowerDefensePrereqs.h"
    3536#include "gametypes/TeamDeathmatch.h"
     
    3738#include "util/Output.h"
    3839#include "TowerDefenseField.h"
     40#include "TowerDefenseRangeViewer.h"
    3941
    4042namespace orxonox
    4143{
     44    using EnemyList = std::list<std::pair<orxonox::WeakPtr<TowerDefenseEnemy>, TowerDefenseController*>>;
     45
    4246    /**
    4347    @brief
     
    7377        virtual TDCoordinate* getNextStreetCoord(TDCoordinate*);
    7478       
    75         TowerDefenseSelecter* selecter;       
     79        TowerDefenseSelecter* selecter;   
     80        TowerDefenseRangeViewer* rangeViewer;     
    7681
    7782    private:
     
    8691        int waveNumber_;
    8792        int lifes_;
    88         std::list<orxonox::WeakPtr<TowerDefenseEnemy>> enemies_;
     93        EnemyList enemies_;
    8994        TowerDefenseField* fields_[16][16];
    9095        std::vector<orxonox::WeakPtr<TowerDefenseField>> waypoints_;
  • code/branches/Merge_HS18/src/modules/towerdefense/TowerDefenseEnemy.cc

    r11099 r12182  
    2929    TowerDefenseEnemy::~TowerDefenseEnemy()
    3030    {
    31 
    3231    }
    3332
  • code/branches/Merge_HS18/src/modules/towerdefense/TowerDefenseField.cc

    r11071 r12182  
     1
    12/*
    23 *   ORXONOX - the hottest 3D action shooter ever to exist
     
    282283                }
    283284            }
     285           
    284286        }                           
    285287    }
  • code/branches/Merge_HS18/src/modules/towerdefense/TowerDefensePrereqs.h

    r10258 r12182  
    6868
    6969    class TowerDefenseTower;
    70 
     70    class TowerDefenseRangeViewer;
    7171    class TowerDefenseCenterpoint;
    7272    class TowerDefenseHUDController;
  • code/branches/Merge_HS18/src/modules/towerdefense/towerdefensereadme.txt

    r9271 r12182  
    1212Represents a Tower
    1313I'm not actually sure if you have to code C++ in order to have your result. I would suggest to simply create a new spaceship template or maybe better a
    14 new template for a pawn. (The tower don't need to be spaceships; pawn is just fine.)
     14new template for a pawn. (The towers don't need to be spaceships; pawn is just fine.)
    1515Example for a template: /data/levels/templates/assff.oxt && /data/levels/include/weaponSettingsAssff.oxi
    1616@ assff.oxt: you don't need an engine (or your towers could fly away :-) and probably no Cameras. (just try what happens if you leave them out.)
Note: See TracChangeset for help on using the changeset viewer.