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}}
}}
Bookmarks