Thread Rating:
  • 2 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Steiner (STM1993 Version 3.00 beta)
#30
AI Update from Nave after receiving feedback from SomeoneElse. Minor update, but important if you like to have more than 1 STM running around in the game.
Quote:<Nave_> the one thing was a memory issiue
<Nave_> where I accidently copied the instances of self and target every frame instead of using a pointer
<Nave_> and the other one was, that the Phase was globaly, so every stm in the same game would always be in the same phase
<Nave_> so now it works properly

Copy the following code below and replace the text in 930.as using a text editor such as Notepad++.
Code:
array<int> PHASE(400,0);

int ego(){

    int k = target.num;
    int dist = 400;
    for (int i = 0; i < 400; ++i){
        if (loadTarget(i) >= 0 && target.team != self.team && xyz_Distance() < dist && movesTorwards(target, self) && target.x_velocity != 0 && sameZ()){
            k = i;
        }
    }
    loadTarget(k);

    if(PHASE[self.num] == 0 && self.mp < 100 && !(self.frame >= 240 && self.frame <= 278)){
        PHASE[self.num] = 1;
    }

    if(PHASE[self.num] == 1 && (self.mp > 500-self.hp || self.mp > 200)){
        PHASE[self.num] = 0;
    }

    if(PHASE[self.num] == 0){
        if(target.y > self.y+10 && distance() < 60 && facesTorwards(self, target) && target.type == 0){
            A();
        }
        if(self.mp > 150 && distance() < 40 && target.type == 0){
            if(abs(target.z-self.z) > 50){
                DuJ();
                if(target.z < self.z){
                    up();
                }
                else{
                    down();
                }
                return 1;
            }
            else if(abs(target.z-self.z) < 20){
                DdA();
            }
        }
        if(movesTorwards(target, self) && abs(target.x_velocity) > 6 && distance() < 140 && sameZ()) {
            if(self.mp > self.hp/3){
                dashTo();
            }
            else if(self.y == 0){
                if(target.x < self.x){
                    right();
                }
                if(target.x > self.x){
                    left();
                }
                J();
            }
        }
    
        if(self.mp > 300 && distance() < 200 && sameZ() && self.frame == 312 && target.type == 0){
            if(distance() > 100){
                hadouken();
            }
            else{
                J();
            }
        }
    
        if(self.mp > 50 && distance() >= 150 && distance() < 1000 && sameZ() && (!facesTorwards(target, self) || (distance() > 500 && self.mp > 350)) && target.type == 0){
            if(self.frame >= 240 && self.frame <= 278){
                if(!self.facing){
                    left();
                    return 1;
                }
                else{
                    right();
                    return 1;
                }
            }    
            else if(self.mp > 250){
                hadouken();
            }
        }    
    
        return 0;
    }
    else if(PHASE[self.num] == 1){
        if(self.y == 0 && self.mp > 50 && movesTorwards(target, self) && abs(target.x_velocity) > 0 && distance() < 100 && sameZ()) {
            evade();
        }
        if(target.type == 0 && self.state == 2 && movesTorwards(target, self) && abs(target.x_velocity) > 0 && distance() < 200 && sameZ()) {
            J();
        }
        if(target.type == 0 && self.y > 0 && movesTorwards(self, target) && distance() < 200 && sameZ()) {
            A();
        }
        if(target.x < self.x){
            if(self.x + 200 > (mode==1?stage_bound:bg_width) || distance() > 500){
                left(1, 0);
            }
            else{
                right();
            }
        }
        if(target.x > self.x){
            if(self.x - 200 < 0 || distance() > 500){
                right(1, 0);
            }
            else{
                left();
            }
        }
        if(target.z > bg_zwidth1+(bg_zwidth2-bg_zwidth1)/4*3){
            up();
        }
        else if(target.z < bg_zwidth1+(bg_zwidth2-bg_zwidth1)/4){
            down();
        }
        else {
            if(target.z > self.z && abs(target.z-self.z) < 40){
                up();
            }
            if(target.z < self.z && abs(target.z-self.z) < 40){
                down();
            }
        }
        
        return 1;
    }

    return 0;
}

void evade(){
    if(self.x < bg_width/4){
        DrJ();
    }
    else if(self.x > bg_width/4*3){
        DlJ();
    }
    else {
        dashAway();
    }
}
    
bool sameZ(){
    return abs(target.z-self.z) <= 12;
}

int distance(){
    return abs(target.x-self.x);
}

int xyz_Distance(){
    return abs(target.x-self.x) + abs(target.y-self.y) + abs(target.z-self.z);
}

void hadouken(){
    if (target.x > self.x){
        DrA();
    }
    else {
        DlA();
    }
}

void dashTo(){
    if (target.x > self.x){
        DrJ();
    }
    else {
        DlJ();
    }
}

void dashAway(){
    if (target.x < self.x){
        DrJ();
    }
    else {
        DlJ();
    }
}


bool movesTorwards(const Info @o1, const Info @o2){
    return ((o1.x_velocity > 0 && o1.x-o2.x < 0) || (o1.x_velocity < 0 && o1.x - o2.x > 0));
}

bool facesTorwards(const Info @o1, const Info @o2){
    return (o2.x > o1.x && !o1.facing) || (o2.x < o1.x && o1.facing);
}
[Image: uMSShyX.png]
~Spy_The_Man1993~
Steiner v3.00 (outdated), Challenge Stage v1.51
Luigi's Easier Data-Editor, A-Man's Sprite Mirrorer
Working on the LF2 Rebalance mod.
Avatar styled by: prince_freeza
Reply
Thanks given by:


Messages In This Thread
Steiner (STM1993 Version 3.00 beta) - by STM1993 - 03-10-2015, 09:01 AM
RE: [Work in Progress] STM1993 - by A-Man - 03-10-2015, 09:24 AM
RE: [Work in Progress] STM1993 - by Gespenst - 03-10-2015, 03:18 PM
RE: [Work in Progress] STM1993 - by Ariel - 03-10-2015, 03:21 PM
RE: [Work in Progress] STM1993 - by A-Man - 03-10-2015, 03:35 PM
RE: [Work in Progress] STM1993 - by STM1993 - 03-11-2015, 06:07 AM
RE: [Work in Progress] STM1993 - by Ariel - 03-11-2015, 06:58 AM
RE: [Work in Progress] STM1993 - by STM1993 - 03-15-2015, 10:58 AM
RE: [Work in Progress] STM1993 - by Lauli - 03-16-2015, 03:21 PM
RE: [Work in Progress] STM1993 - by STM1993 - 03-16-2015, 05:29 PM
RE: [Work in Progress] STM1993 - by Lauli - 03-16-2015, 06:00 PM
RE: [Work in Progress] STM1993 - by YinYin - 03-16-2015, 05:51 PM
RE: [Work in Progress] STM1993 - by STM1993 - 03-17-2015, 08:35 AM
RE: STM1993 (Version 1.00) - by STM1993 - 03-31-2015, 09:15 PM
RE: STM1993 (Version 1.00) - by Marko - 03-31-2015, 10:20 PM
RE: STM1993 (Version 1.00) - by YinYin - 03-31-2015, 10:52 PM
RE: STM1993 (Version 1.05) - by STM1993 - 04-01-2015, 05:20 AM
RE: STM1993 (Version 1.07) - by STM1993 - 04-03-2015, 03:18 PM
RE: [Final] STM1993 (Version 1.07) - by Ariyan - 04-03-2015, 03:30 PM
RE: [Complete] STM1993 (Version 2.52) - by YinYin - 04-18-2015, 11:46 AM
RE: [Complete] STM1993 (Version 2.52) - by Gad - 04-18-2015, 04:19 PM
RE: [Complete] STM1993 (Version 2.52) - by YinYin - 04-18-2015, 05:10 PM
RE: [Complete] STM1993 (Version 2.52) - by Gad - 04-18-2015, 05:20 PM
RE: [Complete] STM1993 (Version 2.53) - by STM1993 - 04-20-2015, 12:06 PM
RE: [Complete] STM1993 (Version 2.54) - by Deep - 04-30-2015, 12:17 PM
RE: [Updating] Steiner to 2.99 - by STM1993 - 01-18-2016, 05:17 PM
RE: Steiner (STM1993 Version 2.99) - by STM1993 - 01-21-2016, 06:54 PM
RE: Steiner (STM1993 Version 2.99) - by A-Man - 01-21-2016, 07:14 PM
RE: Steiner (STM1993 Version 2.99) - by STM1993 - 01-22-2016, 03:10 AM
RE: Steiner (STM1993 Version 2.99) - by Bamboori - 01-22-2016, 03:21 AM
RE: Steiner (STM1993 Version 2.99) - by A-Man - 01-22-2016, 10:50 AM
RE: Steiner (STM1993 Version 2.99) - by STM1993 - 01-22-2016, 01:06 PM
RE: Steiner (STM1993 Version 2.99) - by STM1993 - 09-08-2016, 04:06 PM
RE: Steiner (STM1993 Version 2.99) - by Kaizen - 05-05-2022, 02:57 AM
RE: Steiner (STM1993 Version 2.99) - by Nyamaiku - 05-05-2022, 04:21 AM



Users browsing this thread: 1 Guest(s)