- Learn
- Build a Game
- Chess
- 6 New Game, Side and Flip
6 New Game, Side and Flip
By the end of this chapter, a row of buttons sits under the Board. New Game asks which Side you’ll play and how strong the other Side should be. Flip turns the Board around.
The game as it is at the end of this chapter. Click the game to play.
If your game and this chapter part ways, here is the chapter’s finished project. Open it and compare, or start Chapter 7 from it.
To open it, start Myth Engine, choose File › Open Project... and pick the downloaded file.
6.1 The Idea
Play your game from Chapter 5 to its end, a Checkmate or a Draw. The words under the Board say how it went, and the Board stops answering. Now what? The only way to play again is to close the game and press Play once more. And White always sits at the bottom, nearest you.
This chapter puts a row of buttons under the Board. Two of them come now. New Game opens a panel that asks two questions: which Side will you play, and how strong should the other Side be? That second one is the Strength, and it runs from Gentle, the kindest, up to Expert. Flip turns the Board around, so Black sits at the bottom.
Turning the Board is the chapter’s one hard idea. Picture it as walking round the table and sitting down in the other chair. The Pieces don’t move. You do. In your game, the Position table stays exactly as it is, and a1 is still a1. Only the drawing changes. Every Piece, Square, mark and label moves to where its Square is drawn now.
The panel has a small job of its own. Your choices should still be there next time, even after the game is closed. Myth Engine keeps a few words for that on your computer, each under a name of its own. They’re called Persistent Values.
One promise for later: the Strength does nothing yet. You’ll choose it in this chapter, and Chapter 7’s Computer will play at it.
6.2 The Plan
Here’s how the pieces work together, in a chain of messages. Read each line from left to right, once now for the shape, and again after the panel works.
- A button is pressed -> the Logic on its Object variant answers.
- Flip is pressed -> Report Flip sends flipPressed -> Flip Board turns isFlipped over and sends boardFlipped.
- The Board turns -> Place On Board moves each Piece, Square, Move Mark and label, and Show Label shows only the labels on the edge.
- New Game is pressed -> Report New Game sends newGamePressed -> New Game opens the panel.
- A Side or a Strength is pressed -> Report Side or Report Strength sends sideChosen or strengthChosen -> New Game notes it and sends newGameChoiceChanged -> Show Option turns the chosen one green.
- Play is pressed -> New Game saves the choices and restarts the game. Cancel closes the panel.
You’ll teach the Board to turn first, and see it turn when the Flip button arrives. The panel comes last.
6.3 Set Up
Nothing new goes into the game’s settings in this chapter. The Set up card is all placements, and most belong to the panel, which you’ll build in the last part. Make its Objects first, then come back here to place them.
One line is about the Status Line, which moves up to make room for the buttons. It’s under CHANGE THESE PLACEMENTS, and the page’s passage on the Set up card shows how. Change its Screen Offset (px) Y to 105.
6.4 What the Game Rules Remember Now
Board State gets four more fields.
What the Game Rules remember about the game besides the Position table. sideToMove: the Side whose Turn it is (White moves first). selected: the Square of the selected Piece (empty when none is selected). lastFrom and lastTo: the two Squares of the last Move (empty before the first Move). checkSquare: the Square of the King in Check (empty when the Side to move is not in Check). enPassantSquare: the Square a Pawn has just passed over with a two-Square Move, where an enemy Pawn may take it en passant on the very next Move (empty otherwise). promotionSquare: while the Promotion choice is open, the Square the selected Pawn will be promoted on (empty otherwise). playerSide: the Side the Player plays (White unless chosen otherwise), so the end of the game can say who won. fiftyMoveCount: the Moves made since the last Capture or Pawn Move, both Sides counted, for the fifty-move rule. isFlipped: whether the Board is drawn turned over, Black at the bottom (false: White at the bottom, a1 at the bottom-left). strength: the Strength the Computer plays at (Gentle, Casual, Club, Strong, or Expert; Casual unless chosen otherwise). chosenSide and chosenStrength: while the New Game panel is open, the Side and the Strength it shows as chosen.
isFlipped says how the Board is drawn. The card starts it at false, which is No. That’s White at the bottom, the way it’s always been. strength is the Strength the next Computer will play at, Casual to start. The last two, chosenSide and chosenStrength, are the panel’s own notes. While it’s open, they hold what you’ve picked so far. Nothing is final until you press Play.
6.5 Turning the Board Around
Now the Board learns to turn. You won’t see it yet, because nothing presses Flip until the next part. Keep going.
6.5.1 Square Position
Square Position is Chapter 1’s Function that answers where a Square’s middle is. Now it answers for a turned Board too.
Answers where the center of a Square is in the world, in meters, for the Board as it is drawn. square: the Square's name (a1 to h8). isFlipped: whether the Board is drawn turned over (Black at the bottom). squareMeters: how wide one Square is. boardLeft and boardBottom: where the Board's bottom-left corner is in the world. It returns x and y: the Square's center.
- Name
file- Value
0
- Name
rank- Value
0
- Name
x- Value
0
- Name
y- Value
0
- Variable
file- Value
data('Position', square, 'file')
- Variable
rank- Value
data('Position', square, 'rank')
isFlipped == true- Variable
file- Value
9 - file
- Variable
rank- Value
9 - rank
- Variable
x- Value
boardLeft + (file - 0.5) * squareMeters
- Variable
y- Value
boardBottom + (rank - 0.5) * squareMeters
- x
x- y
y
Add the Parameter isFlipped with the + on the Start block, a Boolean that starts at false. Yours sits at the bottom of the list. That’s fine.
The new If is steps 7 to 9, between reading the Rank and working out x. It goes in the middle of the line. Step 10 is the one that works out x. Add the If apart from the line, then join it after step 6 with the round handles. Its Then gets steps 8 and 9, with Add Inside Then.
Steps 10 and 11 stay on the line from Start, after the If, with Return behind them. They belong outside its Then. So x and y are worked out on every Board, turned or not.
How does turning work, in numbers? Files and Ranks run from 1 to 8. Turned over, the first becomes the last, so 1 becomes 8 and 8 becomes 1. Taking each one from 9 does exactly that. On a turned Board, h8 is drawn in the bottom-left corner, where a1 used to be.
6.5.2 Lay Out The Board
Lay Out The Board makes everything at the start, the plain way round. It gets two small changes.
Makes the Objects that show each Square of the Board when the Scene starts: for every row of the Position table (one Square, a1 to h8), a Piece Object, a Square and a Move Mark are made on that Square (Square Position), and each is given the Square's name (its Square Info); a Square in the left or right column also gets a Rank Label, and one in the bottom or top row a File Label (turned over, the h-File is on the left and Rank 8 at the bottom). Then it says "boardLaidOut". pieceObject, squareObject, moveMarkObject: the Objects made on each Square; rankLabelObject, fileLabelObject: the labels. squareMeters: how wide one Square is.
Any Objectself.layOutTheBoardData- Name
boardBottom- Value
0
- Name
boardLeft- Value
0
- Variable
boardLeft- Value
self.transform.position.x - 4 * @self.squareMeters
- Variable
boardBottom- Value
self.transform.position.y - 4 * @self.squareMeters
dataCount('Position')times- Component Value
self.layOutTheBoardData.squareName- Value
dataRow('Position', local.index)
- Action Name
spot- square
self.layOutTheBoardData.squareName- isFlipped
No- squareMeters
@self.squareMeters- boardLeft
boardLeft- boardBottom
boardBottom
- Object to Create
@self.pieceObject- X
spot.x- Y
spot.y- Created As
piece
- Variable
piece.name- Value
self.layOutTheBoardData.squareName
- Object to Create
@self.squareObject- X
spot.x- Y
spot.y- Created As
square
- Variable
square.name- Value
self.layOutTheBoardData.squareName
- Object to Create
@self.moveMarkObject- X
spot.x- Y
spot.y- Created As
moveMark
- Variable
moveMark.name- Value
self.layOutTheBoardData.squareName
data('Position', self.layOutTheBoardData.squareName, 'file') == 1 || data('Position', self.layOutTheBoardData.squareName, 'file') == 8comparedata('Position', self.layOutTheBoardData.squareName, 'file') == 1- Object to Create
@self.rankLabelObject- X
spot.x- Y
spot.y- Created As
rankLabel
- Variable
rankLabel.name- Value
self.layOutTheBoardData.squareName
data('Position', self.layOutTheBoardData.squareName, 'rank') == 1 || data('Position', self.layOutTheBoardData.squareName, 'rank') == 8comparedata('Position', self.layOutTheBoardData.squareName, 'rank') == 1- Object to Create
@self.fileLabelObject- X
spot.x- Y
spot.y- Created As
fileLabel
- Variable
fileLabel.name- Value
self.layOutTheBoardData.squareName
- Custom Event
boardLaidOut
First, its call to Square Position has a new box now, isFlipped. Leave it on No. The Board is always laid out with White at the bottom, and it’s turned afterward, if it needs to be.
Second, the labels. A turned Board puts its Rank numbers down the h-File and its File letters along Rank 8. So the labels go on both edges now. Each of the two Ifs gets one more test, joined with ||. It reads the same column as the first test, and asks for 8 instead of 1. Type each condition whole, as the card spells it. Half of the labels will always be hidden. Show Label decides which half.
6.5.3 Show Label
Writes the Rank number or the File letter of the Square this label stands on (its Square Info), read from the Position table: shows names the column (rank, or fileLetter). It writes it in a color that stands out on that Square: labelOnLight on a light Square, labelOnDark on a dark one (a Square is dark when its File and Rank add up to an even number, as a1). It shows only while its Square is drawn on the edge of the Board where labels go, the left column or the bottom row, whichever way round the Board is drawn (Flip Board, on the Game Rules, its Other, sends "boardFlipped"). edge: the Position table's column that counts from that edge, file for a Rank Label (the left column) and rank for a File Label (the bottom row).
Any Objectself.squareInfoText / UI- Name
squareShade- Value
0
- Name
rank- Value
0
- Name
file- Value
0
- Component Value
self.text.text- Value
data('Position', self.squareInfo.name, @self.shows)
- Variable
file- Value
data('Position', self.squareInfo.name, 'file')
- Variable
rank- Value
data('Position', self.squareInfo.name, 'rank')
- Variable
squareShade- Value
(file + rank) % 2
squareShade == 1- Component Value
self.text.color- Value
@self.labelOnLight
- Component Value
self.text.color- Value
@self.labelOnDark
- Name
edgeLine- Value
0
- Variable
edgeLine- Value
data('Position', self.squareInfo.name, @self.edge)
other.boardState.isFlipped == true- Variable
edgeLine- Value
9 - edgeLine
edgeLine == 1- Visible
Yes
- Visible
No
Show Label reads the Game Rules as Other, the Object that sends boardFlipped. It also gets a Text Shared Variable, edge, a Constant starting at file. Why file? A Rank Label stands in the a-File, where file is 1. So its edge is file, the name of the Position column it counts by. The File Label will set its own edge to rank.
The new Event hears boardFlipped. It reads how far its Square is from that edge, as edgeLine. On a turned Board it takes that from 9, as Square Position does. Is edgeLine 1? Then the label is on the edge where labels go, and it shows. Otherwise Set Visible hides it. Its Visible goes false.
6.5.4 Place On Board
Every Piece, Square, Move Mark and label needs to move when the Board turns. One Logic Component does it for all of them.
Keeps this Object on its Square (Square Info) when the Board is turned over: when the Game Rules say "boardFlipped" (they are its Other), it moves to where its Square is now drawn (Square Position). The Piece, the Square, and the Move Mark of each Square all use it. squareMeters: how wide one Square is (3.75 m: the Board art is 30 m across). boardLeft and boardBottom: where the Board's bottom-left corner is in the world (0 and 4.375 m: the game window is 140 px taller than the Board, for the status line and the buttons under it).
Any Objectself.squareInfo- Type
Boolean- Name
isFlipped- Value
false
- Variable
isFlipped- Value
other.boardState.isFlipped
- Action Name
mySquare- square
self.squareInfo.name- isFlipped
isFlipped- squareMeters
@self.squareMeters- boardLeft
@self.boardLeft- boardBottom
@self.boardBottom
- X
mySquare.x- Y
mySquare.y
Place On Board hears boardFlipped. It reads isFlipped from the Game Rules, asks Square Position where its own Square is drawn now, and goes there with Set Position.
Its Shared Variables are three constant Numbers. squareMeters is 3.75, as everywhere else. boardLeft and boardBottom are the Board’s bottom-left corner in the world. Why is boardBottom 4.375 and not 0? The game window is taller than the Board, and the extra strip at the bottom holds the Status Line and the buttons. Lay Out The Board works its corner out from the Board itself. Place On Board can’t reach the Board. So its corner is typed in, and if you ever move the Board, change these two numbers with it.
Now attach it to the five Objects that stand on a Square. Each card below is the whole Object, and its one new line, Place On Board, is green.
X 3.4765, Y 3.476510Carved Walnut PiecesX 3.4765, Y 3.4765Square InfoX 3.75, Y 3.755Square HighlightX 3.75, Y 3.75Square InfoX 3.75, Y 3.757Move MarksX 3.75, Y 3.75Square InfoX 0.375, Y 0.37511Extra Bold#503A2BX -1.575, Y 1.388Square InfoX 0.375, Y 0.375a1Extra Bold#503A2BRightX 1.575, Y -1.388Square InfofileLetterrankThe File Label sets two Shared Variables of Show Label now. Its shows is fileLetter, as before. Its new edge is rank. Both are Text Values on its Shared Variables card, so type them bare.
6.5.5 Flip Board
Flip Board lives on the Game Rules, where it turns isFlipped over and tells everyone about it.
Turns the Board over for viewing when the Player presses Flip ("flipPressed"), or back again. Only the way the Board is drawn changes (Board State's isFlipped): the position, the Turn, and the Player's Side stay as they are. Then it tells everyone "boardFlipped", so every Piece, Square, Move Mark, and label shows itself the new way round. When the Board has been laid out ("boardLaidOut"), it tells everyone "boardFlipped" too, so everything is shown the way round the Board is drawn.
Any Objectself.boardStateself.boardState.isFlipped == true- Component Value
self.boardState.isFlipped- Value
false
- Component Value
self.boardState.isFlipped- Value
true
- Custom Event
boardFlipped
- Custom Event
boardFlipped
When flipPressed arrives, Flip Board turns isFlipped over, like a coin. Then it sends boardFlipped to everyone, and every Piece, Square and label on the Board hears it at once.
The second Event is quieter. When the Board has been laid out, Flip Board sends boardFlipped too. That’s how everything lands in the right place at the start, and the labels on the far edges hide.
Attach Flip Board to the Game Rules now. The Game Rules’ own card comes at the end of the chapter, once New Game is there too.
Run the game. It looks exactly as it did. That’s right. The Board is laid out, then every Object is placed again, on the same spot, and the new labels on the right and the top hide at once. Nothing else has happened yet, because nothing sends flipPressed.
6.7 The New Game Panel
The last part is the panel. Like the Promotion choice, it’s a set of Screen UI Objects that show and hide together, over the Backdrop.
6.7.1 New Game Option
Each button on the panel stands for something.
What one button of the New Game panel stands for. option: a Side (a row of the Sides table: White or Black) or a Strength (Gentle, Casual, Club, Strong, or Expert).
New Game Option has one Text field, option, empty to start. On the White button it will say White, and on the Strong button, Strong.
6.7.2 Show Option
The chosen Side and the chosen Strength turn green. The others stay tan.
Marks this option of the New Game panel when it is the Side or the Strength chosen, whenever the choice changes (the Game Rules send "newGameChoiceChanged" and are its Other). chosenColor: the color of a chosen option. plainColor: the color of the others.
Any Objectself.newGameOption- Type
Text- Name
myOption
- Variable
myOption- Value
self.newGameOption.option
myOption == other.boardState.chosenSide || myOption == other.boardState.chosenStrength- Value
@self.chosenColor
- Value
@self.plainColor
Show Option hears newGameChoiceChanged from the Game Rules, and copies its own option into myOption. Then it asks one question with two tests. Is it the chosen Side, or the chosen Strength? Either one will do. So || joins the tests.
The answer picks a color with Change Sprite Tint Property. Its Property list starts on Color. Leave it there. Its Value reads @self.chosenColor, a sage green, or @self.plainColor, the same tan as every button. Both are constant Color Shared Variables. Its Other is the Game Rules, which sends newGameChoiceChanged.
6.7.4 The Panel’s Objects
Now the five Objects. All five are Screen UI Objects in the UI Group New Game.
Window / UICenterUIX 600, Y 420TextNew Game30Square Highlight#EFE6CFX 600, Y 420New game26Semibold#503A2BCenterX 0, Y 170The New Game Panel is the cream card, 600 pixels wide and 420 high, with New game written near its top. Nobody presses it, so its Element Type is Text.
Window / UICenterUIX 460, Y 26TextNew GameReplace the current game?17Semibold#503A2BCenterThe Replace Question is one line of words and nothing else: Replace the current game? It shows only when you have a game going.
Window / UICenterUIX 300, Y 22TextNew GameStrength14Extra Bold#503A2BCenterThe Panel Label is a small heading over a row of buttons. Its own words are Strength. Its first placement writes Play as over them, the way a Tool Button’s placement does.
Window / UICenterUIX 104, Y 44New Game31Square Highlight#E2D5B4X 104, Y 44{option}16Semibold#503A2BCenterNew Game OptionThe Option Button is one Side or one Strength. Its Text {option} shows its own New Game Option, so the White button says White. Give it a New Game Option, and the Logic Component Show Option.
Window / UICenterUIX 140, Y 44New Game31Square Highlight#E2D5B4X 140, Y 44Play18Semibold#503A2BCenterThe Panel Button is a little wider, for Cancel and Play. Its own word is Play. The Cancel button will write Cancel over it.
Look at the Sprites’ Scene Depth Draw Order: 30 for the panel, 31 for the buttons. The buttons sit on the card. The Replace Question and the Panel Label have no Sprite, only words, so their placements get a Z-Index instead.
Now make their variants. Side Option and Strength Option both start from Option Button. Their Logic differs, so a press says which kind of choice was made.
The last two start from Panel Button. Close New Game Button adds Close New Game, and Play Button adds Report Play. The base keeps their shape.
6.7.5 New Game
Now the Game Rules answer the panel. New Game is the longest card in the chapter, with five Events. Take them one at a time.
Starts every game with the Side and the Strength the Player chose last, and lets the Player start a new game. When the game begins (Game Start, before the first Turn), it takes the choices saved on this device (Persistent Values; the first time, Board State's own playerSide and strength) and turns the Board over for a Player who plays Black. When the Player presses New Game ("newGamePressed"), it opens the New Game panel, a menu that holds the game while it is open, showing the current choices as chosen and asking "Replace the current game?" when a game is in progress and has Moves. Each Side or Strength pressed ("sideChosen", "strengthChosen"; the button is its Other) becomes the chosen one. Play ("playPressed") saves the choices and restarts the game, which starts again from the beginning with them.
Any Objectself.boardState- Action Name
savedSide- Key
"playerSide"- Default
self.boardState.playerSide
- Action Name
savedStrength- Key
"strength"- Default
self.boardState.strength
- Component Value
self.boardState.playerSide- Value
savedSide.value
- Component Value
self.boardState.strength- Value
savedStrength.value
self.boardState.playerSide == "Black"- Component Value
self.boardState.isFlipped- Value
true
- Component Value
self.boardState.chosenSide- Value
self.boardState.playerSide
- Component Value
self.boardState.chosenStrength- Value
self.boardState.strength
- Menu Element
New Game Panel
- Menu Element
New Game Panel
- Action Name
isOver- Game State
Game Over
self.boardState.lastFrom != "" && isOver.value == false- Element
Replace Question
- Element
Replace Question- Visible
No
- Custom Event
newGameChoiceChanged
- Component Value
self.boardState.chosenSide- Value
other.newGameOption.option
- Custom Event
newGameChoiceChanged
- Component Value
self.boardState.chosenStrength- Value
other.newGameOption.option
- Custom Event
newGameChoiceChanged
- Action Name
persistentWriteResult- Key
"playerSide"- Value
self.boardState.chosenSide
- Action Name
persistentWriteResult2- Key
"strength"- Value
self.boardState.chosenStrength
When the Game Starts runs once, before anything else in the game, even before the Board is laid out. It reads the two choices you made last time, with Load Persistent Value. Each one’s Key is the name the value is kept under, 'playerSide' or 'strength', in quote marks. Its Default is what to use when nothing is kept yet, the very first time: Board State’s own White and Casual. Steps 3 and 4 copy the answers into Board State, read as savedSide.value and savedStrength.value. Last, a Player who plays Black gets the Board turned before it’s even laid out.
On New Game Pressed opens the panel. First the panel’s notes, chosenSide and chosenStrength, take the real choices, so those are marked when it opens. Control Menu opens the panel. Its Operation starts on Show, so leave it, and every piece in the UI Group New Game opens with it. Set Menu Pause State holds the game still while it’s open. Its Pause the World starts on Yes. The hold lasts only while the panel is open, so closing it lets the game go on.
Then a question. Is there a game worth asking about? Step 5, Check Game State, asks whether the game is at Game Over, Chapter 5’s last Game State, and names its answer isOver. Step 6 says yes when the game has a last Move, and isOver is false. Only then does Set UI Element Visibility show Replace the current game?. Its Visible starts on Yes, so leave it. Otherwise it hides it, with Visible on No. Last, newGameChoiceChanged goes out, and every Option Button marks itself green or tan.
On Side Chosen and On Strength Chosen are short. Each copies the pressed button’s option into the panel’s notes, and sends newGameChoiceChanged again. The green moves.
On Play Pressed keeps the choices for good, each under its Key, with Save Persistent Value. Type their Action Names as the card has them, persistentWriteResult and persistentWriteResult2. Nothing reads them. Then Restart Game starts the whole game over. When the Game Starts runs again, and finds your new choices waiting.
Board StateSelect and MoveSelect and Move DataChoose PromotionChoose Promotion DataAttach New Game to the Game Rules, beside Flip Board.
Now go back to the Set up card and place the panel’s pieces, each hidden. The Panel Backdrop from Chapter 4 is placed once more. Its line with UI Interaction > Group = New Game puts this placement in the panel’s group, with Edit Object Locally, and its Z-Index of 29 keeps it under the panel. Each Side Option or Strength Option gets its option in its placement’s Values. The Close New Game Button’s Text becomes Cancel, and Play Button keeps Play. The Replace Question and both Panel Labels have a Z-Index of 32, so their words sit in front of the card.
The panel’s colors come from its Object cards. New Game Panel’s Tint is cream, #EFE6CF. Option Button and Panel Button take the tan of Tool Button, #E2D5B4. Their variants keep those colors. There’s no Tint to set on each placement now.
Run the game. Play e2 to e4, and press New Game.
The game dims, and a cream panel opens over the middle of the Board. Replace the current game? sits under its title. White and Casual are already green. Press Black, and the green jumps across to it, off White. Press Strong. Then Play.
The game starts again from the beginning, with Black at the bottom. White still moves first. You play both Sides for now, so move a White Pawn, from the top.
Watch for each of these.
- Press Flip. Black is at the bottom, with 1 at the top of the left column and h at the left end of the bottom row. Press Flip again, and White is back.
- Flip the Board, then click a Piece. Its dots land where its Moves are, on the turned Board.
- In a new game, press New Game before you move anything. No question shows. White and Casual are green.
- Play e2 to e4, then press New Game. Replace the current game? shows under the title, because now there’s a game to lose. Press Cancel, and your Pawn is still on e4.
- Press New Game, then Black, then Play. The game starts over from the beginning, with Black’s Pieces at the bottom, nearest you. Press New Game again. Black is green, and no question shows.
- Close the game window, and press Play in the editor again. Black is still at the bottom. Your choice was kept.
The Board turns now, and nothing on it moved. Flip Board turns one Yes/No over. Place On Board moves every Object to where its Square is drawn, and Show Label hides the labels that are off the edge. Each button’s variant adds the Logic that answers a press. New Game opens the panel, notes each choice, and keeps the two that matter for next time.
Underneath, there are two ways to see a game. One is what’s true: Position, the Board State, whose Turn it is. The other is how it’s drawn. Flip changes only the drawing, so it can never change the game.
6.8 If It Didn’t Work
This chapter has many small pieces, and a few of them only show when you press something. Watch what the game does, and think it through.
A block drawn in red, with a number on the Errors bar? Open the bar. It names the block and what it misses. Compare that one block with its card, including the quote marks around every text.
Flip does nothing at all? Perhaps its placement still picks Tool Button instead of Flip Button. Or Report Flip’s step has no arrow into it. Join it to its Mode.
The Board turns, but the Pieces stay where they were? Place On Board may not be attached to the Piece. Or Flip Board’s boardFlipped is spelled differently, so Place On Board never hears it.
Every Piece and Square piles up in one spot as the game starts? Look at Square Position’s steps 10 and 11. Do they still have arrows into them, after the If on the line from Start? If not, join step 10 after the If with the round handles. The Function works out x and y again, then returns them.
Labels show on all four edges? Look at Show Label’s new Event, and its If, edgeLine == 1. Perhaps the File Label’s edge is still file, when it should be rank, bare.
The panel opens, but nothing turns green? Show Option may be missing from the Option Button. Or a placement’s option is empty, so that button stands for nothing at all.
The panel won’t close? Cancel’s placement needs Close New Game Button as its Object. That variant adds Close New Game, whose Menu Element names the New Game Panel.
The panel opens white, not cream? Its Object’s Tint is still white. Give New Game Panel #EFE6CF, and Option Button and Panel Button #E2D5B4.
Each of these is one small fix. Make it, run the game again, and you’re back with the chapter. The catch-up download in the Goal is this chapter’s game, finished, if you’d like to compare.
A new button can share Tool Button’s shape. Its variant carries the Logic that gives your new button a job. Then place it. What button would your game have? Perhaps one that turns the Board after every Move, so two people at one computer each play from their own side. Or a Swap button, that starts a new game with the Sides changed. The row has room. What goes in it is up to you.
Still stuck? Search the manual, or ask in the Myth Engine Discord (opens a new tab).
Your game can begin again now, from either side of the table. In Chapter 7, the other Side starts to think for itself.
