+ Reply to Thread
Page 1 of 2 12 LastLast
Results 1 to 10 of 14

Thread: Holo/EGP Chess

  1. #1
    Wire Amateur killman's Avatar
    Join Date
    May 2008
    Posts
    46

    Default Holo/EGP Chess

    This is my first released E2, so I chose to do something that had already been done, but make it much better. NOTE:I did make this completely on my own though, with no copied code from anyone.
    Video

    Pictures


    If you want more, ask.
    Description
    This is simply E2 chess.
    Here's a list of the features
    • Fully functional tracing and movement of pieces
    • Chat commands
    • Castling
    • Pawn promotion
    • Win detection
    • Scaling with any board
    • Easy click and e-press controls
    • Low op usage
    • Has a sideboard to show "killed" pieces
    • Shows who's turn it is

    It does not have en passant(No one uses it anyways) or check(I figured it was not needed and would make the code alot less efficient).

    Chat Commands
    "!white:"(Player) Sets the player to play as white
    "!black:"(Player) Sets the player to play as black
    "!reset" Resets the board
    "!info" Says a bunch of info in chat about how to play the game

    Controls
    E Select a piece
    Left-Click If pressing a green or red square, move to there; If pressing a blue square unselect

    Instructions
    Simply spawn an EGP board and the chip. Wirelink the board to the chip, set players, and then play.

    And finially the code.
    This code comes in two flavors, EGP1 and EGP2.
    It was designed for EGP2, but as that was not released at time of production, I made an EGP1 version that plays the same, but lacks some visuals.

    EGP2 Version
    Code:
    @name Chess Control
    @inputs Egp:wirelink
    @outputs 
    @persist LastTurn LastPlayer:entity Draw Scale:vector Turn RookL RookR Pieces:array Board:array Players:array Moved:array PieceNumber PieceColor VecCode PieceType
    interval(100)
    runOnChat(1)
    if(first()){
        Draw = 1
        Turn = 1
    	}
    if (clk("Create2")){
    for (L = 0, 15){
        PieceNumber =  L + 35
        I = 63 - L
        
        if (I == 60){
        I = 59}
        elseif (I ==59){
    I = 60}
        
        Pieces[I,number] = PieceNumber
        PieceType = PieceNumber % 17
        PieceColor = (PieceNumber - PieceType) / 17
        
        X = I % 8
        Y = (I - X) / 8
        X = 7 - X  
          
        Rotated = -((vec(X,Y,0) + vec(-3.5,-3.5,0)) * Scale):rotate(Egp:entity():angles() + ang(0,90,0))
        holoCreate(PieceNumber,Egp:entity():pos() + vec(0,0,Scale:x()/3.2) + Rotated,Scale:setZ(Scale:x())/23.75,Egp:entity():angles())
        holoParent(PieceNumber,Egp:entity())
    	holoColor(PieceNumber,vec(75,75,75))
        
        if (PieceType > 8){
            holoModel(PieceNumber,"tetra")
        }
        
        elseif (PieceType == 1 | PieceType == 8){
            holoModel(PieceNumber,"cube")
        }
    
        elseif (PieceType == 2 | PieceType == 7){
            holoModel(PieceNumber,"icosphere")
        }
        
        elseif (PieceType == 3 | PieceType == 6){
            holoModel(PieceNumber,"cone")
        }
        
        elseif (PieceType == 4){
        holoModel(PieceNumber,"cylinder")
        holoCreate(PieceNumber  + 40,holoEntity(PieceNumber):pos() + vec(0,0,Scale:x()/2),Scale:setZ(Scale:x())/23.75,Egp:entity():angles())
    	holoModel(PieceNumber + 40,"torus")
        holoParent(PieceNumber + 40,holoEntity(PieceNumber))
        holoColor(PieceNumber + 40,vec(75,75,75))
        }
        
        elseif (PieceType == 5){
        holoModel(PieceNumber,"cylinder")
        holoCreate(PieceNumber  + 40,holoEntity(PieceNumber):pos() + vec(0,0,Scale:x()/2),Scale:setZ(Scale:x())/23.75,Egp:entity():angles())
        holoModel(PieceNumber + 40,"sphere")
        holoParent(PieceNumber + 40,holoEntity(PieceNumber))
        holoColor(PieceNumber + 40,vec(75,75,75))
    }}}
        
    
    if (Egp:entity()){
    if (Draw){
    
    for (I =0,63){X = I % 8
       Y = (I - X) * 8
        X *= 64
        if ((X % 128) == (Y % 128)){
        Egp:egpBox(I,vec2(X,Y),vec2(64,64))}
        
            else {
            Egp:egpBox(I,vec2(X,Y),vec2(64,64))
    		Egp:egpColor(I,vec(0,0,0))
        }
    }
    
    Scale = (Egp:entity():boxSize())/8
    
    holoCreate(0,Egp:entity():pos() + vec(0,0,Scale:x() * 3),Scale:setZ(Scale:x())/23.75,Egp:entity():angles())
    holoParent(0,Egp:entity())
    
    Rotated = -(vec(0,5,0) * Scale):rotate(Egp:entity():angles())
    holoCreate(100,Egp:entity():pos() + Rotated,Scale/23.75 * vec(8,2,0),Egp:entity():angles())
    holoParent(100,Egp:entity())
    holoModel(100,"plane")
    
    Rotated = -(vec(0,5,0) * Scale):rotate(Egp:entity():angles() + ang(0,180,0))
    holoCreate(99,Egp:entity():pos() + Rotated,Scale/23.75 * vec(8,2,0),Egp:entity():angles())
    holoParent(99,Egp:entity())
    holoModel(99,"plane")
    
    
    for (I =0,15){
        PieceNumber = I + 18
        
        Pieces[I,number] = PieceNumber
        PieceType = PieceNumber % 17
        PieceColor = (PieceNumber - PieceType) / 17
    
        X = I % 8
        Y = (I - X) / 8
        X = 7 - X
        
        Rotated = -((vec(X,Y,0) + vec(-3.5,-3.5,0)) * Scale):rotate(Egp:entity():angles() + ang(0,90,0))
        holoCreate(PieceNumber,Egp:entity():pos() + vec(0,0,Scale:x()/3.2) + Rotated,Scale:setZ(Scale:x())/23.75,Egp:entity():angles())
        holoParent(PieceNumber,Egp:entity())
    	holoColor(PieceNumber,vec(255,255,255))
    
        if (PieceType > 8){
        holoModel(PieceNumber,"tetra")
        }
        
        elseif (PieceType == 1 | PieceType == 8){
        holoModel(PieceNumber,"cube")
        }
    
        elseif (PieceType == 2 | PieceType == 7){
        holoModel(PieceNumber,"icosphere")
        }
        
        elseif (PieceType == 3 | PieceType == 6){
        holoModel(PieceNumber,"cone")
        }
        
        elseif (PieceType == 4){
        holoModel(PieceNumber,"cylinder")
        holoCreate(PieceNumber  + 40,holoEntity(PieceNumber):pos() + vec(0,0,Scale:x()/2),Scale:setZ(Scale:x())/23.75,Egp:entity():angles())
        holoModel(PieceNumber + 40,"torus")
        holoParent(PieceNumber + 40,holoEntity(PieceNumber))
        holoColor(PieceNumber + 40,vec(255,255,255))
        }
        
        elseif (PieceType == 5){
        holoModel(PieceNumber,"cylinder")
        holoCreate(PieceNumber  + 40,holoEntity(PieceNumber):pos() + vec(0,0,Scale:x()/2),Scale:setZ(Scale:x())/23.75,Egp:entity():angles())
        holoModel(PieceNumber + 40,"sphere")
        holoParent(PieceNumber + 40,holoEntity(PieceNumber))
        holoColor(PieceNumber + 40,vec(255,255,255))
    }}
            
        timer("Create2",10000)
        Draw = 0
        
        
        
        } 
    
    
    
    
    if ((Players[Turn,entity]):keyUse() & !Board[VecCode,number]){
        Mouse = floor(Egp:egpToMouse(Players[Turn,entity])/64)
        VecCode = Mouse:y() * 8 + Mouse:x()
        PieceNumber = Pieces[VecCode,number]
        if (PieceNumber){
        PieceMoved = Moved[PieceNumber,number]
        PieceType = PieceNumber % 17
        PieceColor = (PieceNumber - PieceType) / 17    
        
    	if (Turn == PieceColor){
       
        Egp:egpColor(VecCode,vec(0,0,255))
        Board[VecCode,number] = 1
    
        if ((PieceType == 1) | (PieceType == 8) | (PieceType == 5) | (PieceMoved == 2) | (PieceMoved == 3)){     
        Trace = VecCode + 8
    	while (Trace <= 63){
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3
        break}
        else{
        break}
        Trace += 8
    	}
    
    	Trace = VecCode - 8
        while (Trace >= 0){
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3
        break}
        else{
        break}
        Trace -= 8
    	}
    
        Trace = VecCode + 1
        while (Mouse:x() < (Trace % 8)){
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3
        break}
        else{
        break}
        Trace += 1
    }
    
        Trace = VecCode - 1
        while (Mouse:x() > (Trace % 8)){
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3
        break}
        else{
        break}
        Trace -= 1
    }
    }
    
        if ((PieceType == 3) | (PieceType == 6) | (PieceType == 5) | (PieceMoved == 2)| (PieceMoved == 5)){    
        
        Trace = VecCode + 9
        while ((Mouse:x() < (Trace % 8)) & (Trace <= 63)){
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3
        break}
        else{
        break}
        Trace += 9
    }
    
        Trace = VecCode + 7
        while ((Mouse:x() > (Trace % 8)) & (Trace <= 63)){
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3
        break}
        else{
        break}
        Trace += 7
    }
    
        Trace = VecCode - 9
        while ((Mouse:x() > (Trace % 8)) & (Trace >= 0)){
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3
        break}
        else{
        break}
        Trace -= 9
    }
    
        Trace = VecCode - 7
        while ((Mouse:x() < (Trace % 8)) & (Trace <= 63)){
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3
        break}
        else{
        break}
        Trace -= 7
    }
    }
    
        elseif ((PieceType == 2) | (PieceType == 7)| (PieceMoved == 4)){
        
        
        Trace = VecCode + 17
        if ((Mouse:x() < (Trace % 8)) & (Trace <= 63)){
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3}}
        
        Trace = VecCode + 15
        if ((Mouse:x() > (Trace % 8)) & (Trace <= 63)){
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3}}        
    
        Trace = VecCode - 17
        if ((Mouse:x() > (Trace % 8)) & (Trace >= 0)){
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3}}
        
        Trace = VecCode - 15
        if ((Mouse:x() < (Trace % 8)) & (Trace >= 0)){
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3}}       
    
        Trace = VecCode + 10
        if ((Mouse:x() < (Trace % 8)) & (Trace <= 63)){
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3}}
        
        Trace = VecCode + 6
        if ((Mouse:x() > (Trace % 8)) & (Trace <= 63)){
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3}}        
    
        Trace = VecCode - 10
        if ((Mouse:x() > (Trace % 8)) & (Trace >= 0)){
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3}}
        
        Trace = VecCode - 6
        if ((Mouse:x() < (Trace % 8)) & (Trace >= 0)){
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3}}               
            }
        elseif (PieceType == 4){
            
        Trace = VecCode + 8
        if (Trace <= 63){
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3}}
        
        Trace = VecCode - 8
        if (Trace >= 0){
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3}}        
    
        Trace = VecCode + 1
        if (Mouse:x() < (Trace % 8)){
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3}}
        
        Trace = VecCode - 1
        if (Mouse:x() > (Trace % 8)){
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3}} 
        
        Trace = VecCode - 9
        if ((Mouse:x() > (Trace % 8)) & (Trace >= 0)){
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3}}
        
        Trace = VecCode - 7
        if ((Mouse:x() < (Trace % 8)) & (Trace >= 0)){
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3}}  
        
        Trace = VecCode + 9
        if ((Mouse:x() < (Trace % 8)) & (Trace <= 63)){
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3}}
        
        Trace = VecCode + 7
        if ((Mouse:x() > (Trace % 8)) & (Trace <= 63)){
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3}}  
        
        if (!Moved[PieceNumber,number]){
            
        RookL = Pieces[VecCode + 4,number]
        if (!Moved[RookL,number] & ((RookL % 17 == 1) | (RookL % 17 == 8)) ){
        if((!Pieces[VecCode + 1,number]) & (!Pieces[VecCode + 2,number]) & (!Pieces[VecCode + 3,number])){
        Egp:egpColor(VecCode + 2,vec(120,32,240))
        Board[VecCode + 2,number] = 4}}
    
        RookR = Pieces[VecCode - 3,number]
        if (!Moved[RookL,number] & ((RookL % 17 == 1) | (RookL % 17 == 8)) ){
        if((!Pieces[VecCode - 1,number]) & (!Pieces[VecCode - 2,number])){
        Egp:egpColor(VecCode - 2,vec(120,32,240))
        Board[VecCode - 2,number] = 5}}}
             
           
            }  
        else {
        
        Trace = VecCode +  8 * (3 +  -2 * PieceColor )
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}
            
        Trace = VecCode + 9 * (3 +  -2 * PieceColor )
        if (Mouse:y() == (floor(Trace/8) + (-3 +  2 * PieceColor ))){
        if ((floor(Pieces[Trace,number]/17) != PieceColor) & (Pieces[Trace,number] != 0)){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3}}
        
        Trace = VecCode + 7* (3 +  -2 * PieceColor )
        if (Mouse:y() == (floor(Trace/8) + (-3 +  2 * PieceColor ))){    
        if ((floor(Pieces[Trace,number]/17) != PieceColor) & (Pieces[Trace,number] != 0)){
        Egp:egpColor(Trace,vec(255,0,0))
        Board[Trace,number] = 3}}
        
        if (!Moved[PieceNumber,number]){
        Trace = VecCode +  16 * (3 +  -2 * PieceColor )
        if (Pieces[Trace,number] == 0){
        Egp:egpColor(Trace,vec(0,255,0))
        Board[Trace,number] = 2}}
                
    }
        
    
    	}
    }}
    if ((Players[Turn,entity]):keyAttack1()){
        
    	if (Turn == PieceColor){
    	
        Mouse = floor(Egp:egpToMouse(Players[Turn,entity])/64)
        NewVecCode = Mouse:y() * 8 + Mouse:x()
        if (Board[NewVecCode,number]){
        if (Board[NewVecCode,number] == 2){
            X =  7 - Mouse:x()
            Y =  Mouse:y()
            Rotated = -((vec(X,Y,0) + vec(-3.5,-3.5,0)) * Scale):rotate(Egp:entity():angles() + ang(0,90,0))
            holoPos(PieceNumber,Egp:entity():pos() + vec(0,0,Scale:x()/3.2) + Rotated)
            Pieces[VecCode,number] = 0
            Pieces[NewVecCode,number] = PieceNumber
            if (!Moved[PieceNumber,number]){
            Moved[PieceNumber,number] = 1 }
        
            if ((Moved[PieceNumber,number] == 1) & ((PieceType > 8) & (Mouse:y() == (7 * (2 - PieceColor))))){
            LastPlayer = Players[Turn,entity]
            LastTurn = Turn
            concmd("say [Chess]" + LastPlayer:name() + ", your pawn has reached the other side of the board.")
            timer("Turn3",1000)
            Turn = 3
            holoColor(0,vec(255,0,0))}
    
            else{
            if (Turn == 1){
            holoColor(0,vec(0,0,0))
            Turn = 2} 
            elseif(Turn == 2){
            holoColor(0,vec(255,255,255))
            Turn = 1}} 
    	}
        
        elseif (Board[NewVecCode,number] == 3){
            X =  7 - Mouse:x()
            Y =  Mouse:y()
            Rotated = -((vec(X,Y,0) + vec(-3.5,-3.5,0)) * Scale):rotate(Egp:entity():angles() + ang(0,90,0))
            holoPos(PieceNumber,Egp:entity():pos() + vec(0,0,Scale:x()/3.2) + Rotated)             
            
            Killed = Pieces[NewVecCode,number]
            KilledType = (Killed % 17) - 1
                
            KilledX = KilledType % 8
            KilledY = (KilledType - KilledX) / 8
            Rotated = -((vec(1.75,5.25,0) + -vec(KilledX/2,KilledY/2,0))* Scale):rotate(Egp:entity():angles() + ang(0,180 * (3 - PieceColor),0))
            holoPos(Killed,Egp:entity():pos() + vec(0,0,Scale:x()/8) + Rotated)
            holoScale(Killed,Scale:setZ(Scale:x())/47.5)
     
            if ((KilledType == 3) | (KilledType == 4)){
            holoScale(Killed + 40,Scale:setZ(Scale:x())/47.5)  
            holoPos(Killed + 40 ,holoEntity(Killed):pos() + vec(0,0,Scale:x()/4))}
    		
    		elseif(Moved[Killed,number] > 1){
            holoModel(Killed,"tetra")
            if(Moved[Killed,number] == 2){
            holoDelete(Killed + 40)}}
                    
            Pieces[VecCode,number] = 0
            if (KilledType == 3){
            concmd("say [Chess]" + Players[Turn,entity]:name()+ " beat " + Players[3 - Turn,entity]:name())
            Turn = 0
            holoColor(0,vec(255,0,0))}
            Pieces[NewVecCode,number] = PieceNumber
            if (!Moved[PieceNumber,number]){
            Moved[PieceNumber,number] = 1 }
            
            if ((Moved[PieceNumber,number] == 1) & ((PieceType > 8) & (Mouse:y() == (7 * (2 - PieceColor))))){
            LastPlayer = Players[Turn,entity]
            LastTurn = Turn
            concmd("say [Chess]" + LastPlayer:name() + ", your pawn has reached the other side of the board.")
            timer("Turn3",1000)
            Turn = 3
            holoColor(0,vec(255,0,0))}
            
            else{
            if (Turn == 1){
            holoColor(0,vec(0,0,0))
            Turn = 2} 
            elseif(Turn == 2){
            holoColor(0,vec(255,255,255))
            Turn = 1}}  
    		}
    
        elseif (Board[NewVecCode,number] == 4){
            X =  7 - Mouse:x()
            Y =  Mouse:y()
            Rotated = -((vec(X,Y,0) + vec(-3.5,-3.5,0)) * Scale):rotate(Egp:entity():angles() + ang(0,90,0))
            holoPos(PieceNumber,Egp:entity():pos() + vec(0,0,Scale:x()/3.2) + Rotated)     
            Pieces[VecCode,number] = 0
            Pieces[NewVecCode,number] = PieceNumber
            Moved[PieceNumber,number] = 1
    
            Rotated = -((vec(X + 1,Y,0) + vec(-3.5,-3.5,0)) * Scale):rotate(Egp:entity():angles() + ang(0,90,0))
            holoPos(RookL,Egp:entity():pos() + vec(0,0,Scale:x()/3.2) + Rotated)     
            Pieces[NewVecCode + 2,number] = 0
            Pieces[NewVecCode - 1,number] = RookL
            Moved[RookL,number] = 1
                    
            if (Turn == 1){
            holoColor(0,vec(0,0,0))
            Turn = 2} 
            else{
            holoColor(0,vec(255,255,255))
            Turn = 1} 
        }
    
        elseif (Board[NewVecCode,number] == 5){
            X =  7 - Mouse:x()
            Y =  Mouse:y()
            Rotated = -((vec(X,Y,0) + vec(-3.5,-3.5,0)) * Scale):rotate(Egp:entity():angles() + ang(0,90,0))
            holoPos(PieceNumber,Egp:entity():pos() + vec(0,0,Scale:x()/3.2) + Rotated)     
            Pieces[VecCode,number] = 0
            Pieces[NewVecCode,number] = PieceNumber
            Moved[PieceNumber,number] = 1
    
            Rotated = -((vec(X - 1,Y,0) + vec(-3.5,-3.5,0)) * Scale):rotate(Egp:entity():angles() + ang(0,90,0))
            holoPos(RookR,Egp:entity():pos() + vec(0,0,Scale:x()/3.2) + Rotated)     
            Pieces[NewVecCode - 1,number] = 0
            Pieces[NewVecCode + 1,number] = RookR
            Moved[RookR,number] = 1
                    
            if (Turn == 1){
            holoColor(0,vec(0,0,0))
            Turn = 2} 
            else{
            holoColor(0,vec(255,255,255))
            Turn = 1} 
        }
        
            
            
    		for (I = 0,63){
    		
    		X = I % 8
    		Y = (I - X) * 8
    		X *= 64
    		if ((X % 128) == (Y % 128)){
    		Egp:egpColor(I,vec(255,255,255))}
        
            else {
    		Egp:egpColor(I,vec(0,0,0))}
    		}
    		Board:clear()
        
            
    }}
    }
    
    Egp:egpDraw()
    }
            
            
    
    
    if (chatClk(owner())){
        Said = lastSaid():explode(":")
        
        if (Said[1,string] == "!white"){
        hideChat(1)
        Players[1,entity] = findPlayerByName(Said[2,string])
        if (Players[1,entity]){
        timer("!white",1000)}}
        
        elseif (Said[1,string] == "!black"){
        hideChat(1)
        Players[2,entity] = findPlayerByName(Said[2,string])
        if (Players[2,entity]){
        timer("!black",1000)}}
        
        elseif (Said[1,string] == "!info"){
        hideChat(1)
        timer("!info",1000)}
        
        elseif (Said[1,string] == "!reset"){
        hideChat(1)
        timer("!reset",1000)
        
        Pieces:clear()
        Board:clear()
        
        for (I =0,15){
        PieceNumber = I + 18
        Pieces[I,number] = PieceNumber
    
        X = I % 8
        Y = (I - X) / 8
        X = 7 - X
        
        Rotated = -((vec(X,Y,0) + vec(-3.5,-3.5,0)) * Scale):rotate(Egp:entity():angles() + ang(0,90,0))
        holoPos(PieceNumber,Egp:entity():pos() + vec(0,0,Scale:x()/3.2) + Rotated)
        holoScale(PieceNumber,Scale:setZ(Scale:x())/23.75)
        
        if (((PieceNumber % 17) == 4) | ((PieceNumber % 17) == 5)){
        holoScale(PieceNumber + 40,Scale:setZ(Scale:x())/23.75)  
        holoPos(PieceNumber + 40 ,Egp:entity():pos() + vec(0,0,Scale:x()/1.25) + Rotated)}
        }
        
        for (L = 0, 15){
        PieceNumber =  L + 35
        I = 63 - L
        
        if (I == 60){
        I = 59}
        elseif (I ==59){
        I = 60}
        
        Pieces[I,number] = PieceNumber
        
        X = I % 8
        Y = (I - X) / 8
        X = 7 - X  
          
        Rotated = -((vec(X,Y,0) + vec(-3.5,-3.5,0)) * Scale):rotate(Egp:entity():angles() + ang(0,90,0))
        holoPos(PieceNumber,Egp:entity():pos() + vec(0,0,Scale:x()/3.2) + Rotated)
        holoScale(PieceNumber,Scale:setZ(Scale:x())/23.75)
        
        if (((PieceNumber % 17) == 4) | ((PieceNumber % 17) == 5)){
        holoScale(PieceNumber + 40,Scale:setZ(Scale:x())/23.75)  
        holoPos(PieceNumber + 40 ,Egp:entity():pos() + vec(0,0,Scale:x()/1.25) + Rotated)}
        }
        
        for (I = 0,63){
    
        X = I % 8
        Y = (I - X) * 8
        X *= 64
        if ((X % 128) == (Y % 128)){
        Egp:egpColor(I,vec(255,255,255))}
        
            else {
        Egp:egpColor(I,vec(0,0,0))}
        }
        
        Moved:clear()
    	   holoColor(0,vec(255,255,255))
        Turn = 1
        
        
        }}   
        
        if (clk("!reset")){
            concmd("say [Chess]Board has been reset.")}
                   
        elseif (clk("!white")){
        concmd("say [Chess]" + Players[1,entity]:name() + " is now white.")}
     
        elseif (clk("!black")){
        concmd("say [Chess]" + Players[2,entity]:name() + " is now black.")}
    
        elseif (clk("!info")){
        concmd("say [Chess]Welcome to Lalaland's chess game. Every statement following a '[Chess]' is from the chess game.")
        timer("!info2",1000)
        }
    
        elseif (clk("!info2")){
        concmd("say [Chess]The box in the middle shows who's turn it is. Press e to select a piece. Left click to move to a square.")
        timer("!info3",1000)
        }    
    
        elseif (clk("!info3")){
        concmd("say [Chess]Left click on a selected piece to unselect. Remember, this game supports castling  and promotion.")
        timer("!info4",1000)
        }    
    
        elseif (clk("!info4")){
        concmd("say [Chess]This game does not support check or en passant. It will notify players of a win however.")
        timer("!info5",1000)
        }    
    
        elseif (clk("!info5")){
        concmd("say [Chess]If you have any questions or want a feature added ask me.")
        }
     
        elseif (clk("Turn3")){
        concmd("say [Chess]Now please choose what piece to promote your pawn to with !knight,!queen, !bishop, or !rook.")
        }   
        
        
        if(Turn == 3){
            
        if (chatClk(LastPlayer)){
        SaidS = lastSaid()
        
        if (SaidS == "!queen"){
        hideChat(1)
        Moved[PieceNumber,number] = 2
        holoModel(PieceNumber,"cylinder")
        holoCreate(PieceNumber  + 40,holoEntity(PieceNumber):pos() + vec(0,0,Scale:x()/2),Scale:setZ(Scale:x())/23.75,Egp:entity():angles())
        holoModel(PieceNumber + 40,"sphere")
        holoParent(PieceNumber + 40,holoEntity(PieceNumber))
        holoColor(PieceNumber + 40,vec(75,75,75) + (2 + -PieceColor) * vec(180,180,180))
     
        
        if (LastTurn == 1){
        holoColor(0,vec(0,0,0))
        Turn = 2} 
        elseif(LastTurn == 2){
        holoColor(0,vec(255,255,255))
        Turn = 1}}
    
        if (SaidS == "!rook"){
        hideChat(1)
        Moved[PieceNumber,number] = 3
        holoModel(PieceNumber,"cube")
        
        if (LastTurn == 1){
        holoColor(0,vec(0,0,0))
        Turn = 2} 
        elseif(LastTurn == 2){
        holoColor(0,vec(255,255,255))
        Turn = 1}}
        
        if (SaidS == "!knight"){
        hideChat(1)
        Moved[PieceNumber,number] = 4
        holoModel(PieceNumber,"icosphere")
       
        if (LastTurn == 1){
        holoColor(0,vec(0,0,0))
        Turn = 2} 
        elseif(LastTurn == 2){
        holoColor(0,vec(255,255,255))
        Turn = 1}}
    
        if (SaidS == "!bishop"){
        hideChat(1)
        Moved[PieceNumber,number] = 5
        holoModel(PieceNumber,"cone")
       
        if (LastTurn == 1){
        holoColor(0,vec(0,0,0))
        Turn = 2} 
        elseif(LastTurn == 2){
        holoColor(0,vec(255,255,255))
        Turn = 1}}
    
           
    
    
    }}
    EGP1 version
    Code:
    @name Chess Control
    @inputs Egp:wirelink
    @outputs 
    @persist LastTurn LastPlayer:entity Draw Scale:vector Turn RookL RookR Pieces:array Board:array Players:array Moved:array PieceNumber PieceColor VecCode PieceType
    interval(100)
    runOnChat(1)
    if(first()){
        Draw = 1
        Turn = 1
    	}
    if (clk("Create2")){
    for (L = 0, 15){
        PieceNumber =  L + 35
        I = 63 - L
        
        if (I == 60){
        I = 59}
        elseif (I ==59){
    I = 60}
        
        Pieces[I,number] = PieceNumber
        PieceType = PieceNumber % 17
        PieceColor = (PieceNumber - PieceType) / 17
        
        X = I % 8
        Y = (I - X) / 8
        X = 7 - X  
          
        Rotated = -((vec(X,Y,0) + vec(-3.5,-3.5,0)) * Scale):rotate(Egp:entity():angles() + ang(0,90,0))
        holoCreate(PieceNumber,Egp:entity():pos() + vec(0,0,Scale:x()/3.2) + Rotated,Scale:setZ(Scale:x())/23.75,Egp:entity():angles())
        holoParent(PieceNumber,Egp:entity())
    	holoColor(PieceNumber,vec(75,75,75))
        
        if (PieceType > 8){
            holoModel(PieceNumber,"tetra")
        }
        
        elseif (PieceType == 1 | PieceType == 8){
            holoModel(PieceNumber,"cube")
        }
    
        elseif (PieceType == 2 | PieceType == 7){
            holoModel(PieceNumber,"icosphere")
        }
        
        elseif (PieceType == 3 | PieceType == 6){
            holoModel(PieceNumber,"cone")
        }
        
        elseif (PieceType == 4){
        holoModel(PieceNumber,"cylinder")
        holoCreate(PieceNumber  + 40,holoEntity(PieceNumber):pos() + vec(0,0,Scale:x()/2),Scale:setZ(Scale:x())/23.75,Egp:entity():angles())
        holoModel(PieceNumber + 40,"torus")
        holoParent(PieceNumber + 40,holoEntity(PieceNumber))
        holoColor(PieceNumber + 40,vec(75,75,75))
        }
        
        elseif (PieceType == 5){
        holoModel(PieceNumber,"cylinder")
        holoCreate(PieceNumber  + 40,holoEntity(PieceNumber):pos() + vec(0,0,Scale:x()/2),Scale:setZ(Scale:x())/23.75,Egp:entity():angles())
        holoModel(PieceNumber + 40,"sphere")
        holoParent(PieceNumber + 40,holoEntity(PieceNumber))
        holoColor(PieceNumber + 40,vec(75,75,75))
    }}}
        
    
    if (Egp:entity()){
    if (Draw){
    I = 0
    ElementNumber = 1
    while (ElementNumber <= 33){X = I % 8
       Y = (I - X) * 8
        X *= 64
        if ((X % 128) == (Y % 128)){
        Egp:egpBox(ElementNumber,vec2(X,Y),vec2(64,64),vec4(255,255,255,255))
    ElementNumber++}
    I++
        }
    #Egp:egpBox(34,vec2(-1,-1),vec2(64,64),vec(0,255,0),255)
    
    
    
    
    Scale = (Egp:entity():boxSize())/8
    
    holoCreate(0,Egp:entity():pos() + vec(0,0,Scale:x() * 3),Scale:setZ(Scale:x())/23.75,Egp:entity():angles())
    holoParent(0,Egp:entity())
    
    Rotated = -(vec(0,5,0) * Scale):rotate(Egp:entity():angles())
    holoCreate(100,Egp:entity():pos() + Rotated,Scale/23.75 * vec(8,2,0),Egp:entity():angles())
    holoParent(100,Egp:entity())
    holoModel(100,"plane")
    
    Rotated = -(vec(0,5,0) * Scale):rotate(Egp:entity():angles() + ang(0,180,0))
    holoCreate(99,Egp:entity():pos() + Rotated,Scale/23.75 * vec(8,2,0),Egp:entity():angles())
    holoParent(99,Egp:entity())
    holoModel(99,"plane")
    
    
    
    for (I =0,15){
        PieceNumber = I + 18
        
        Pieces[I,number] = PieceNumber
        PieceType = PieceNumber % 17
        PieceColor = (PieceNumber - PieceType) / 17
    
        X = I % 8
        Y = (I - X) / 8
        X = 7 - X
        
        Rotated = -((vec(X,Y,0) + vec(-3.5,-3.5,0)) * Scale):rotate(Egp:entity():angles() + ang(0,90,0))
        holoCreate(PieceNumber,Egp:entity():pos() + vec(0,0,Scale:x()/3.2) + Rotated,Scale:setZ(Scale:x())/23.75,Egp:entity():angles())
        holoParent(PieceNumber,Egp:entity())
    holoColor(PieceNumber,vec(255,255,255))
    
        if (PieceType > 8){
        holoModel(PieceNumber,"tetra")
        }
        
        elseif (PieceType == 1 | PieceType == 8){
        holoModel(PieceNumber,"cube")
        }
    
        elseif (PieceType == 2 | PieceType == 7){
        holoModel(PieceNumber,"icosphere")
        }
        
        elseif (PieceType == 3 | PieceType == 6){
        holoModel(PieceNumber,"cone")
        }
        
        elseif (PieceType == 4){
        holoModel(PieceNumber,"cylinder")
        holoCreate(PieceNumber  + 40,holoEntity(PieceNumber):pos() + vec(0,0,Scale:x()/2),Scale:setZ(Scale:x())/23.75,Egp:entity():angles())
        holoModel(PieceNumber + 40,"torus")
        holoParent(PieceNumber + 40,holoEntity(PieceNumber))
        holoColor(PieceNumber + 40,vec(255,255,255))
        }
        
        elseif (PieceType == 5){
        holoModel(PieceNumber,"cylinder")
        holoCreate(PieceNumber  + 40,holoEntity(PieceNumber):pos() + vec(0,0,Scale:x()/2),Scale:setZ(Scale:x())/23.75,Egp:entity():angles())
        holoModel(PieceNumber + 40,"sphere")
        holoParent(PieceNumber + 40,holoEntity(PieceNumber))
        holoColor(PieceNumber + 40,vec(255,255,255))
    }}
            
        timer("Create2",15000)
        Draw = 0
        
        
        
        } 
    
    
    
    
    if ((Players[Turn,entity]):keyUse() & !Board[VecCode,number]){
        Mouse2 = Egp:entity():toLocal(Players[Turn,entity]:aimPos()) / Scale
        Mouse = floor(vec2(Mouse2:y(),Mouse2:x()) + vec2(4,4))
        VecCode = Mouse:y() * 8 + Mouse:x()
        PieceNumber = Pieces[VecCode,number]
        if (PieceNumber){
        PieceMoved = Moved[PieceNumber,number]
        PieceType = PieceNumber % 17
        PieceColor = (PieceNumber - PieceType) / 17    
        
    	if (Turn == PieceColor){    
    
        Egp:egpBox(34,vec2(Mouse:x(),Mouse:y()) * 64,vec2(64,64),vec(0,255,0),255)
        #Egp:egpPos(34,Mouse:x() * 64,Mouse:y() * 64)
    
        Board[VecCode,number] = 1
    
        if ((PieceType == 1) | (PieceType == 8) | (PieceType == 5) | (PieceMoved == 2) | (PieceMoved == 3)){    
        Trace = VecCode + 8
    	while (Trace <= 63){
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Board[Trace,number] = 3
        break}
        else{
        break}
        Trace += 8
    	}
    
    	Trace = VecCode - 8
        while (Trace >= 0){
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Board[Trace,number] = 3
        break}
        else{
        break}
        Trace -= 8
    	}
    
        Trace = VecCode + 1
        while (Mouse:x() < (Trace % 8)){
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Board[Trace,number] = 3
        break}
        else{
        break}
        Trace += 1
    }
    
        Trace = VecCode - 1
        while (Mouse:x() > (Trace % 8)){
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Board[Trace,number] = 3
        break}
        else{
        break}
        Trace -= 1
    }
    }
    
        if ((PieceType == 3) | (PieceType == 6) | (PieceType == 5) | (PieceMoved == 2)| (PieceMoved == 5)){    
        
        Trace = VecCode + 9
        while ((Mouse:x() < (Trace % 8)) & (Trace <= 63)){
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Board[Trace,number] = 3
        break}
        else{
        break}
        Trace += 9
    }
    
        Trace = VecCode + 7
        while ((Mouse:x() > (Trace % 8)) & (Trace <= 63)){
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Board[Trace,number] = 3
        break}
        else{
        break}
        Trace += 7
    }
    
        Trace = VecCode - 9
        while ((Mouse:x() > (Trace % 8)) & (Trace >= 0)){
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Board[Trace,number] = 3
        break}
        else{
        break}
        Trace -= 9
    }
    
        Trace = VecCode - 7
        while ((Mouse:x() < (Trace % 8)) & (Trace <= 63)){
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Board[Trace,number] = 3
        break}
        else{
        break}
        Trace -= 7
    }
    }
    
        elseif ((PieceType == 2) | (PieceType == 7)| (PieceMoved == 4)){
        
        
        Trace = VecCode + 17
        if ((Mouse:x() < (Trace % 8)) & (Trace <= 63)){
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Board[Trace,number] = 3}}
        
        Trace = VecCode + 15
        if ((Mouse:x() > (Trace % 8)) & (Trace <= 63)){
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Board[Trace,number] = 3}}        
    
        Trace = VecCode - 17
        if ((Mouse:x() > (Trace % 8)) & (Trace >= 0)){
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Board[Trace,number] = 3}}
        
        Trace = VecCode - 15
        if ((Mouse:x() < (Trace % 8)) & (Trace >= 0)){
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Board[Trace,number] = 3}}       
    
        Trace = VecCode + 10
        if ((Mouse:x() < (Trace % 8)) & (Trace <= 63)){
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Board[Trace,number] = 3}}
        
        Trace = VecCode + 6
        if ((Mouse:x() > (Trace % 8)) & (Trace <= 63)){
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Board[Trace,number] = 3}}        
    
        Trace = VecCode - 10
        if ((Mouse:x() > (Trace % 8)) & (Trace >= 0)){
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Board[Trace,number] = 3}}
        
        Trace = VecCode - 6
        if ((Mouse:x() < (Trace % 8)) & (Trace >= 0)){
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Board[Trace,number] = 3}}               
            }
        elseif (PieceType == 4){
            
        Trace = VecCode + 8
        if (Trace <= 63){
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Board[Trace,number] = 3}}
        
        Trace = VecCode - 8
        if (Trace >= 0){
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Board[Trace,number] = 3}}        
    
        Trace = VecCode + 1
        if (Mouse:x() < (Trace % 8)){
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Board[Trace,number] = 3}}
        
        Trace = VecCode - 1
        if (Mouse:x() > (Trace % 8)){
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Board[Trace,number] = 3}} 
        
        Trace = VecCode - 9
        if ((Mouse:x() > (Trace % 8)) & (Trace >= 0)){
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Board[Trace,number] = 3}}
        
        Trace = VecCode - 7
        if ((Mouse:x() < (Trace % 8)) & (Trace >= 0)){
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Board[Trace,number] = 3}}  
        
        Trace = VecCode + 9
        if ((Mouse:x() < (Trace % 8)) & (Trace <= 63)){
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Board[Trace,number] = 3}}
        
        Trace = VecCode + 7
        if ((Mouse:x() > (Trace % 8)) & (Trace <= 63)){
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
        elseif (floor(Pieces[Trace,number]/17) != PieceColor ){
        Board[Trace,number] = 3}}  
        
        if (!Moved[PieceNumber,number]){
            
        RookL = Pieces[VecCode + 4,number]
        if (!Moved[RookL,number] & ((RookL % 17 == 1) | (RookL % 17 == 8)) ){
        if((!Pieces[VecCode + 1,number]) & (!Pieces[VecCode + 2,number]) & (!Pieces[VecCode + 3,number])){
        Board[VecCode + 2,number] = 4}}
    
        RookR = Pieces[VecCode - 3,number]
        if (!Moved[RookL,number] & ((RookL % 17 == 1) | (RookL % 17 == 8)) ){
        if((!Pieces[VecCode - 1,number]) & (!Pieces[VecCode - 2,number])){
        Board[VecCode - 2,number] = 5}}}
             
           
            }  
        else {
        
        Trace = VecCode +  8 * (3 +  -2 * PieceColor )
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}
            
        Trace = VecCode + 9 * (3 +  -2 * PieceColor )
        if (Mouse:y() == (floor(Trace/8) + (-3 +  2 * PieceColor ))){
        if ((floor(Pieces[Trace,number]/17) != PieceColor) & (Pieces[Trace,number] != 0)){
        Board[Trace,number] = 3}}
        
        Trace = VecCode + 7* (3 +  -2 * PieceColor )
        if (Mouse:y() == (floor(Trace/8) + (-3 +  2 * PieceColor ))){    
        if ((floor(Pieces[Trace,number]/17) != PieceColor) & (Pieces[Trace,number] != 0)){
        Board[Trace,number] = 3}}
        
        if (!PieceMoved){
        Trace = VecCode +  16 * (3 +  -2 * PieceColor )
        if (Pieces[Trace,number] == 0){
        Board[Trace,number] = 2}}
                
    }
        
    
    	}
    }}
    if ((Players[Turn,entity]):keyAttack1()){
        
    	if (Turn == PieceColor){
    
     #   Egp:egpPos(34,-1,-1)
    
    
    	   Mouse2 =  (Egp:entity():toLocal(Players[Turn,entity]:aimPos())/(Scale))
        Mouse = floor(vec2(Mouse2:y(),Mouse2:x()) + vec2(4,4))
        NewVecCode = Mouse:y() * 8 + Mouse:x()
        if (Board[NewVecCode,number]){
            Egp:egpRemove(34)
        if (Board[NewVecCode,number] == 2){
            X =  7 - Mouse:x()
            Y =  Mouse:y()
            Rotated = -((vec(X,Y,0) + vec(-3.5,-3.5,0)) * Scale):rotate(Egp:entity():angles() + ang(0,90,0))
            holoPos(PieceNumber,Egp:entity():pos() + vec(0,0,Scale:x()/3.2) + Rotated)
            Pieces[VecCode,number] = 0
            Pieces[NewVecCode,number] = PieceNumber
            if (!Moved[PieceNumber,number]){
            Moved[PieceNumber,number] = 1 }
        
            if ((PieceType > 8) & (Mouse:y() == (7 * (2 - PieceColor)))){
            LastPlayer = Players[Turn,entity]
            LastTurn = Turn
            concmd("say [Chess]" + LastPlayer:name() + ", your pawn has reached the other side of the board.")
            timer("Turn3",1000)
            Turn = 3
            holoColor(0,vec(255,0,0))}
    
            else{
            if (Turn == 1){
            holoColor(0,vec(0,0,0))
            Turn = 2} 
            elseif(Turn == 2){
            holoColor(0,vec(255,255,255))
            Turn = 1}} 
    	}
        
        elseif (Board[NewVecCode,number] == 3){
            X =  7 - Mouse:x()
            Y =  Mouse:y()
            Rotated = -((vec(X,Y,0) + vec(-3.5,-3.5,0)) * Scale):rotate(Egp:entity():angles() + ang(0,90,0))
            holoPos(PieceNumber,Egp:entity():pos() + vec(0,0,Scale:x()/3.2) + Rotated)     
            
          
            Killed = Pieces[NewVecCode,number]
            KilledType = (Killed % 17) - 1
                
            KilledX = KilledType % 8
            KilledY = (KilledType - KilledX) / 8
            Rotated = -((vec(1.75,5.25,0) + -vec(KilledX/2,KilledY/2,0))* Scale):rotate(Egp:entity():angles() + ang(0,180 * (3 - PieceColor),0))
            holoPos(Killed,Egp:entity():pos() + vec(0,0,Scale:x()/8) + Rotated)
            holoScale(Killed,Scale:setZ(Scale:x())/47.5)
      
            if ((KilledType == 3) | (KilledType == 4)){
            holoScale(Killed + 40,Scale:setZ(Scale:x())/47.5)  
            holoPos(Killed + 40 ,holoEntity(Killed):pos() + vec(0,0,Scale:x()/4))}
           
            elseif(Moved[Killed,number] > 1){
            holoModel(Killed,"tetra")
            if(Moved[Killed,number] == 2){
            holoDelete(Killed + 40)}}
    
            Pieces[VecCode,number] = 0
            if (KilledType == 3){
            concmd("say [Chess]" + Players[Turn,entity]:name()+ " beat " + Players[3 - Turn,entity]:name())
            Turn = 0
            holoColor(0,vec(255,0,0))}
            Pieces[NewVecCode,number] = PieceNumber
            if (!Moved[PieceNumber,number]){
            Moved[PieceNumber,number] = 1 }
            
            if ((PieceType > 8) & (Mouse:y() == (7 * (2 - PieceColor)))){
            LastPlayer = Players[Turn,entity]
            LastTurn = Turn
            concmd("say [Chess]" + LastPlayer:name() + ", your pawn has reached the other side of the board.")
            timer("Turn3",1000)
            Turn = 3
            holoColor(0,vec(255,0,0))}
            
            else{
            if (Turn == 1){
            holoColor(0,vec(0,0,0))
            Turn = 2} 
            elseif(Turn == 2){
            holoColor(0,vec(255,255,255))
            Turn = 1}} 
       
        }
        
        elseif (Board[NewVecCode,number] == 4){
            X =  7 - Mouse:x()
            Y =  Mouse:y()
            Rotated = -((vec(X,Y,0) + vec(-3.5,-3.5,0)) * Scale):rotate(Egp:entity():angles() + ang(0,90,0))
            holoPos(PieceNumber,Egp:entity():pos() + vec(0,0,Scale:x()/3.2) + Rotated)     
            Pieces[VecCode,number] = 0
            Pieces[NewVecCode,number] = PieceNumber
            Moved[PieceNumber,number] = 1
    
            Rotated = -((vec(X + 1,Y,0) + vec(-3.5,-3.5,0)) * Scale):rotate(Egp:entity():angles() + ang(0,90,0))
            holoPos(RookL,Egp:entity():pos() + vec(0,0,Scale:x()/3.2) + Rotated)     
            Pieces[NewVecCode + 2,number] = 0
            Pieces[NewVecCode - 1,number] = RookL
            Moved[RookL,number] = 1
           
            if (Turn == 1){
            holoColor(0,vec(0,0,0))
            Turn = 2} 
            else{
            holoColor(0,vec(255,255,255))
            Turn = 1}          
        }
    
        elseif (Board[NewVecCode,number] == 5){
            X =  7 - Mouse:x()
            Y =  Mouse:y()
            Rotated = -((vec(X,Y,0) + vec(-3.5,-3.5,0)) * Scale):rotate(Egp:entity():angles() + ang(0,90,0))
            holoPos(PieceNumber,Egp:entity():pos() + vec(0,0,Scale:x()/3.2) + Rotated)     
            Pieces[VecCode,number] = 0
            Pieces[NewVecCode,number] = PieceNumber
            Moved[PieceNumber,number] = 1
    
            Rotated = -((vec(X - 1,Y,0) + vec(-3.5,-3.5,0)) * Scale):rotate(Egp:entity():angles() + ang(0,90,0))
            holoPos(RookR,Egp:entity():pos() + vec(0,0,Scale:x()/3.2) + Rotated)     
            Pieces[NewVecCode - 1,number] = 0
            Pieces[NewVecCode + 1,number] = RookR
            Moved[RookR,number] = 1
            
            if (Turn == 1){
            holoColor(0,vec(0,0,0))
            Turn = 2} 
            else{
            holoColor(0,vec(255,255,255))
            Turn = 1}         
        }
        
            
            
    		
    		Board:clear()
    
            
    }}
    }
    
    Egp:egpDraw()
    }
            
            
    
    
    if (chatClk(owner())){
        Said = lastSaid():explode(":")
        
        if (Said[1,string] == "!white"){
        hideChat(1)
        Players[1,entity] = findPlayerByName(Said[2,string])
        if (Players[1,entity]){
        timer("!white",1000)}}
        
        elseif (Said[1,string] == "!black"){
        hideChat(1)
        Players[2,entity] = findPlayerByName(Said[2,string])
        if (Players[2,entity]){
        timer("!black",1000)}}
        
        elseif (Said[1,string] == "!info"){
        hideChat(1)
        timer("!info",1000)}
        
        elseif (Said[1,string] == "!reset"){
        hideChat(1)
        timer("!reset",1000)
            
        
        Pieces:clear()
        Board:clear()
        
        for (I =0,15){
        PieceNumber = I + 18
        Pieces[I,number] = PieceNumber
    
        X = I % 8
        Y = (I - X) / 8
        X = 7 - X
        
        Rotated = -((vec(X,Y,0) + vec(-3.5,-3.5,0)) * Scale):rotate(Egp:entity():angles() + ang(0,90,0))
        holoPos(PieceNumber,Egp:entity():pos() + vec(0,0,Scale:x()/3.2) + Rotated)
        holoScale(PieceNumber,Scale:setZ(Scale:x())/23.75)
        
        if (((PieceNumber % 17) == 4) | ((PieceNumber % 17) == 5)){
        holoScale(PieceNumber + 40,Scale:setZ(Scale:x())/23.75)  
        holoPos(PieceNumber + 40 ,Egp:entity():pos() + vec(0,0,Scale:x()/1.25) + Rotated)}
        
        if(Moved[PieceNumber,number] > 1){
            holoModel(PieceNumber,"tetra")
        if(Moved[PieceNumber,number] == 2){
    holoDelete(PieceNumber + 40)}}
        
        }
        
        for (L = 0, 15){
        PieceNumber =  L + 35
        I = 63 - L
        
        if (I == 60){
        I = 59}
        elseif (I ==59){
        I = 60}
        
        Pieces[I,number] = PieceNumber
        
        X = I % 8
        Y = (I - X) / 8
        X = 7 - X  
          
        Rotated = -((vec(X,Y,0) + vec(-3.5,-3.5,0)) * Scale):rotate(Egp:entity():angles() + ang(0,90,0))
        holoPos(PieceNumber,Egp:entity():pos() + vec(0,0,Scale:x()/3.2) + Rotated)
        holoScale(PieceNumber,Scale:setZ(Scale:x())/23.75)
        
        if (((PieceNumber % 17) == 4) | ((PieceNumber % 17) == 5)){
        holoScale(PieceNumber + 40,Scale:setZ(Scale:x())/23.75)  
        holoPos(PieceNumber + 40 ,Egp:entity():pos() + vec(0,0,Scale:x()/1.25) + Rotated)}
        
        if(Moved[PieceNumber,number] > 1){
        holoModel(PieceNumber,"tetra")
        if(Moved[PieceNumber,number] == 2){
        holoDelete(PieceNumber + 40)}}
    
        }
        
        Moved:clear()
        Egp:egpRemove(34) 
        holoColor(0,vec(255,255,255))
        Turn = 1
        
    
        }}
        
        if (clk("!reset")){
            concmd("say [Chess]Board has been reset.")}
                   
        elseif (clk("!white")){
        concmd("say [Chess]" + Players[1,entity]:name() + " is now white.")}
     
        elseif (clk("!black")){
        concmd("say [Chess]" + Players[2,entity]:name() + " is now black.")}
    
        elseif (clk("!info")){
        concmd("say [Chess]Welcome to Lalaland's chess game. Every statement following a '[Chess]' is from the chess game.")
        timer("!info2",1000)
        }
    
        elseif (clk("!info2")){
        concmd("say [Chess]The box in the middle shows who's turn it is. Press e to select a piece. Left click to move to a square.")
        timer("!info3",1000)
        }    
    
        elseif (clk("!info3")){
        concmd("say [Chess]Left click on a selected piece to unselect. Remember, this game supports castling and promotion.")
        timer("!info4",1000)
        }    
    
        elseif (clk("!info4")){
        concmd("say [Chess]This game does not support check  or en passant. It will notify players of a win however.")
        timer("!info5",1000)
        }    
    
        elseif (clk("!info5")){
        concmd("say [Chess]If you have any questions or want a feature added ask me.")
        }
    
        elseif (clk("Turn3")){
        concmd("say [Chess]Now please choose what piece to promote your pawn to with !knight,!queen, !bishop, or !rook.")
        }   
        
        
        if(Turn == 3){
            
        if (chatClk(LastPlayer)){
        SaidS = lastSaid()
        
        if (SaidS == "!queen"){
        hideChat(1)
        Moved[PieceNumber,number] = 2
        holoModel(PieceNumber,"cylinder")
        holoCreate(PieceNumber  + 40,holoEntity(PieceNumber):pos() + vec(0,0,Scale:x()/2),Scale:setZ(Scale:x())/23.75,Egp:entity():angles())
        holoModel(PieceNumber + 40,"sphere")
        holoParent(PieceNumber + 40,holoEntity(PieceNumber))
        holoColor(PieceNumber + 40,vec(75,75,75) + (2 + -PieceColor) * vec(180,180,180))
     
        
        if (LastTurn == 1){
        holoColor(0,vec(0,0,0))
        Turn = 2} 
        elseif(LastTurn == 2){
        holoColor(0,vec(255,255,255))
        Turn = 1}}
    
        if (SaidS == "!rook"){
        hideChat(1)
        Moved[PieceNumber,number] = 3
        holoModel(PieceNumber,"cube")
        
        if (LastTurn == 1){
        holoColor(0,vec(0,0,0))
        Turn = 2} 
        elseif(LastTurn == 2){
        holoColor(0,vec(255,255,255))
        Turn = 1}}
        
        if (SaidS == "!knight"){
        hideChat(1)
        Moved[PieceNumber,number] = 4
        holoModel(PieceNumber,"icosphere")
       
        if (LastTurn == 1){
        holoColor(0,vec(0,0,0))
        Turn = 2} 
        elseif(LastTurn == 2){
        holoColor(0,vec(255,255,255))
        Turn = 1}}
    
        if (SaidS == "!bishop"){
        hideChat(1)
        Moved[PieceNumber,number] = 5
        holoModel(PieceNumber,"cone")
       
        if (LastTurn == 1){
        holoColor(0,vec(0,0,0))
        Turn = 2} 
        elseif(LastTurn == 2){
        holoColor(0,vec(255,255,255))
        Turn = 1}}
    
           
    
    
    }}
    Finishing Comments
    As this is my first release I realize I probably have alot of mistakes in my code(esp in the pawn promotion code). I tried to keep it organized, but by the time I got to turning pawns into queens I just sort of gave up. If you have any suggestions or critiques please say them.

    As for what you do with this code, I do not care. Feel free to take this and edit it any way you want, you do not have to mention me in your credits.
    Last edited by killman; 03-16-2010 at 11:22 PM.

  2. #2
    goluch
    Guest goluch's Avatar

    Default Re: Holo/EGP Chess

    NICE! Good job.
    Here have a none existant cookie: [?]

  3. #3
    Wire Sofaking ShadowBrain's Avatar
    Join Date
    Oct 2008
    Location
    Where you live.
    Posts
    910

    Default Re: Holo/EGP Chess

    Lol, why do you say "!" as "I" in the video?
    I maek 3D mdoels adn paly veido gaems!

  4. #4
    Wiremod Helper Donkie's Avatar
    Join Date
    May 2008
    Location
    Sweden
    Posts
    1,660

    Default Re: Holo/EGP Chess

    It were kinda annoying that you couldent stand still in the movie, keep going for/back. I also lol'd at the end, "Oh yeah, this is the last.... Wait nvm"

    Anyways, Very nice job.
    Get out. Seriously, do it.

  5. #5
    Wire Amateur killman's Avatar
    Join Date
    May 2008
    Posts
    46

    Default Re: Holo/EGP Chess

    I made that video when I was very tired, so do not expect any quality from it.

  6. #6
    Wiremod Helper Lyinginbedmon's Avatar
    Join Date
    Mar 2009
    Location
    England
    Posts
    2,659

    Default Re: Holo/EGP Chess

    You could probably do with updating to HQ models in a few places, it would make the pieces look much nicer. Other than that though this is a really nice contraption, well done

    The Olympus Technologies drones, totally not SkyNet in Gmod form.
    Cronus: The Ultimate Drone, definitely SkyNet in Gmod form.
    The gBrain Project, the drone controls system that thinks it's better than you

  7. #7
    Wire Amateur killman's Avatar
    Join Date
    May 2008
    Posts
    46

    Default Re: Holo/EGP Chess

    The problem With HQ models is that it makes the regular ones look even uglier.
    And the HQ models have different lighting so they do not match with the regular ones.

  8. #8
    Wire Sofaking jacoby6000's Avatar
    Join Date
    Feb 2008
    Location
    behind you when you aren't looking
    Posts
    792

    Default Re: Holo/EGP Chess

    Remove the move helper, or make it optional, a lot of the time, people make mistakes because they don't have things like that, it basically reduces the need for taking into consideration the whole board.
    Other than that. Glad you relesed it! sorry I bailed in the middle of the game, the night before you relesed >.<
    Quote Originally Posted by Garrysmod View Post
    Warning: You're trying to render in the wrong place. This doesn't play nice with multi-core rendering, so we're not going to let you draw here.
    I'm not stupid!
    In [his] experience that was a sentence never to be uttered except to prove its own inaccuracy
    --Orson Scott Card

  9. #9
    Bug Buster TomyLobo's Avatar
    Join Date
    Feb 2009
    Posts
    2,796

    Default Re: Holo/EGP Chess

    Quote Originally Posted by jacoby6000 View Post
    Remove the move helper, [...] people make mistakes because they don't have [...] that
    for beginners, you might be right.
    advanced players take into consideration not only the whole board but also several turns in advance.

    nice contraption, btw
    "It's easy to win forgiveness for being wrong; being right is what gets you into real trouble." - Bjarne Stroustrup

    L&#237;fi&#240; l&#230;&#240;ist l&#250;mskt &#225;fram

  10. #10
    Wire Sofaking Unsmart's Avatar
    Join Date
    Dec 2008
    Location
    Belgium OR BANland
    Posts
    1,965

    Default Re: Holo/EGP Chess

    Seriously epic! Also, good use of EGP and holos
    New server IP: 89.238.160.17:27018
    Hologram contraptions 1 Holo contraptions 2 EGP stuff Holo minigun Holo javelin rocket launcher
    Unsmart: I doubt the intelligence of some people.
    Drunkie: Nobody could have said that any better than Unsmart.

    Unsmart: Solece, I totally did your mom yesterday
    Solece: Who hasnt

    Divran: there are more retarded people than there are clever people in this world

+ Reply to Thread
Page 1 of 2 12 LastLast

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
proceed-collector
proceed-collector
proceed-collector
proceed-collector
linguistic-parrots
linguistic-parrots
linguistic-parrots
linguistic-parrots