The short version: A 1967-rated Chess960 specialist berserked against me, cutting five minutes and the increment from their clock. I answered by spending almost five minutes on a single knight move. This would have been intimidating if the move had not placed the knight directly in front of a pawn.
| Game | Morgenstern64–ThreeSadPandas |
| Event | FRC Rapid 257 Team Battle |
| Date | September 4, 2026 |
| Variant | Chess960, starting position 257 |
| Time control | 10+5 Rapid; White berserked to 5+0 |
| Ratings | Morgenstern64 1967; ThreeSadPandas 1458? |
| Rating gap | 509 points |
| Engine | Stockfish 18, five million nodes per search |
| Series | The Engine Room — Every move gets cross-examined |
The question mark after my rating is not editorial despair. My Chess960 rating was still provisional. The question mark is part of the rating.
Morgenstern64 did not merely arrive 509 points higher. They went on to finish first in the 111-player team battle with 45 points from 20 games. They berserked 12 of those games and won 13.
So this is a game against the eventual tournament winner, played from a starting position in which the bishops, knights, and queen have all been issued unfamiliar desks.
This review uses the standard Engine Room method: Stockfish 18 examines three candidates before every move, then searches the resulting position separately. Because the game is Chess960, the preserved FEN is part of the evidence and the engine analyzes with the variant’s castling rules.
The evaluation ledger will wait until after the game. First, I would like you to believe in the clock.
Replay position 257
The official Lichess board is oriented from Black’s side.
The original remains available as chP739Lt on Lichess.
The complete game score
White begins with five minutes and no increment after berserking. Black keeps 10+5. The initial FEN fixes Chess960 position 257 so every move, including castling, can be reconstructed correctly.
[Event "FRC Rapid 257 Team Battle"]
[Site "https://lichess.org/chP739Lt"]
[Date "2026.09.04"]
[Round "-"]
[White "Morgenstern64"]
[Black "ThreeSadPandas"]
[Result "1-0"]
[GameId "chP739Lt"]
[UTCDate "2026.09.04"]
[UTCTime "20:40:57"]
[WhiteElo "1967"]
[BlackElo "1458"]
[WhiteRatingDiff "+1"]
[BlackRatingDiff "-44"]
[WhiteBerserk "true"]
[Variant "Chess960"]
[TimeControl "600+5"]
[Termination "Normal"]
[FEN "rbnnkqbr/pppppppp/8/8/8/8/PPPPPPPP/RBNNKQBR w KQkq - 0 1"]
[SetUp "1"]
1. e4 { [%clk 0:05:00] } 1... e5 { [%clk 0:10:00] }
2. c3 { [%clk 0:04:57] } 2... Ne6 { [%clk 0:10:00] }
3. f3 { [%clk 0:04:56] } 3... Nd6 { [%clk 0:10:02] }
4. d4 { [%clk 0:04:51] } 4... f6 { [%clk 0:10:04] }
5. d5 { [%clk 0:04:45] } 5... Nd4 { [%clk 0:05:27] }
6. cxd4 { [%clk 0:04:41] } 6... b6 { [%clk 0:05:26] }
7. dxe5 { [%clk 0:04:34] } 7... Nf7 { [%clk 0:05:24] }
8. Nc3 { [%clk 0:04:12] } 8... c6 { [%clk 0:05:24] }
9. exf6 { [%clk 0:04:09] } 9... gxf6 { [%clk 0:05:24] }
10. Bd4 { [%clk 0:04:03] } 10... c5 { [%clk 0:05:23] }
11. Bxf6 { [%clk 0:03:32] } 11... Be5 { [%clk 0:05:12] }
12. Bxh8 { [%clk 0:03:27] } 12... Bxh8 { [%clk 0:05:15] }
13. Qe2 { [%clk 0:03:17] } 13... Qh6 { [%clk 0:05:05] }
14. Qd2 { [%clk 0:02:52] } 14... Qh4+
{ [%clk 0:05:00] } 15. g3 { [%clk 0:02:39] } 15... Qh3
{ [%clk 0:04:59] } 16. Bd3 { [%clk 0:02:37] } 16... Ne5
{ [%clk 0:05:00] } 17. Qe2 { [%clk 0:02:20] } 17... Nxf3+
{ [%clk 0:04:22] } 18. Qxf3 { [%clk 0:02:17] } 18... Bxc3+
{ [%clk 0:04:21] } 19. bxc3 { [%clk 0:02:15] } 19... h5
{ [%clk 0:04:18] } 20. Rf1 { [%clk 0:02:07] } 20... Qxf1+
{ [%clk 0:04:04] } 21. Bxf1 { [%clk 0:02:01] } 21... Bf7
{ [%clk 0:03:55] } 22. Bh3 { [%clk 0:01:59] } 22... Rd8
{ [%clk 0:03:53] } 23. Nd3 { [%clk 0:01:56] } 23... a5
{ [%clk 0:03:54] } 24. Ne5 { [%clk 0:01:55] } 24... Bg8
{ [%clk 0:03:47] } 25. Ng6 { [%clk 0:01:46] } 25... Bf7
{ [%clk 0:03:37] } 26. Qf6 { [%clk 0:01:44] } 26... Bxg6
{ [%clk 0:03:32] } 27. Qxg6+ { [%clk 0:01:44] } 27... Ke7
{ [%clk 0:03:35] } 28. d6+ { [%clk 0:01:43] } 28... Kf8
{ [%clk 0:03:38] } 29. O-O-O { [%clk 0:01:40] } 29... Re8
{ [%clk 0:03:35] } 30. Rf1# { [%clk 0:01:39] } 1-0Please locate your pieces
Chess960 position 257 begins with this back rank:
| Square | a | b | c | d | e | f | g | h |
|---|---|---|---|---|---|---|---|---|
| Piece | Rook | Bishop | Knight | Knight | King | Queen | Bishop | Rook |
The king and rooks happen to occupy their familiar squares. Everything between them has been rearranged. The queen begins on f1. The bishops begin on b1 and g1. The knights begin side by side on c1 and d1.
Both sides have the same arrangement.
There is no opening book to lean on in the usual way. The early job is to discover what the position wants:
- which pawn moves release the bishops;
- where the knights can develop without blocking each other;
- which diagonals point directly at the exposed queen; and
- what must move before either side can castle.
White has five minutes to do that. I have ten minutes plus increment.
This seems promising.
A normal beginning in an abnormal position
1.e4 e5 2.c3 Ne6 3.f3 Nd6
Both center pawns advance. White plays c3 and f3, building support for d4 while opening paths for the bishops on b1 and g1.
I develop both knights. The d8-knight reaches e6; the c8-knight reaches d6.
Stockfish keeps the evaluation between +0.19 and +0.49 for White. The engine slightly prefers …c6, but nothing serious has happened. The stronger player has already surrendered five minutes and the increment. My clock is still above ten minutes.
This is exactly the kind of beginning the berserk button promises.
4.d4 f6?!
White occupies the center. The clean response is 4…exd4, releasing the tension before White can gain more space.
I play 4…f6?!, reinforcing e5 with another pawn. It looks solid, but it weakens the dark squares, leaves the center closed, and allows the d-pawn to advance with tempo against the knight on e6.
Stockfish moves from about +0.26 to +1.23.
White immediately plays 5.d5.
The knight must move.
I begin thinking.
Four minutes and forty-two seconds
5.d5 Nd4??
My clock after 4…f6 reads 10:04.
My clock after 5…Nd4 reads 5:27—and the five-second increment has already been added.
I spent four minutes and forty-two seconds on this move.
Stockfish wants 5…Nd8, sending the attacked knight back to its original square and accepting that the opening plan has not worked. It also considers 5…Nf4 and 5…Ng5. Those positions favor White, but the knight remains a knight.
I choose 5…Nd4??.
The square looks active. The knight centralizes, eyes useful squares, and appears to occupy an outpost.
White has a pawn on c3.
6.cxd4
The pawn moves diagonally from c3 to d4 and takes the knight.
Stockfish’s evaluation leaps from +1.16 for the best defense to +4.34 after my move. The engine charges 3.18 pawns of loss to the decision.
The time situation has also transformed:
- White: 4:41;
- Black: 5:27.
Morgenstern64 began with half my time and no increment. Five moves later, I have spent almost the entire advantage on giving away a knight.
That is the five-minute knight.
It does not receive a pension.
The center walks forward
6…b6 7.dxe5 Nf7 8.Nc3 c6 9.exf6 gxf6
Once the knight disappears, the position demands urgency. Black should attack the center with 6…c6.
I play 6…b6, preparing to develop the bishop from b8. White takes on e5, then on f6. The c-pawn has traveled c2–c3–d4–e5–f6, stripping away the pawns that were supposed to hold Black’s center together while White’s original d-pawn remains planted on d5.
I recapture with 9…gxf6. The g-file opens, but the king remains on e8 and Black is already a piece down.
The engine stays near +4.9.
10.Bd4 c5!
White develops the g1-bishop to d4. I find 10…c5, Stockfish’s first choice, attacking it and gaining space.
This is a real practical move. The evaluation does not improve because the material deficit is still there, but White has to make a decision with just over four minutes.
White spends thirty-one seconds and chooses 11.Bxf6?!.
That move gives back almost a pawn of evaluation. 11.Bf2 would preserve the bishop and keep the extra material cleanly.
There is a small opening.
Please arrange the lighting so the opening looks larger.
A rook for a bishop, because the knight was lonely
11.Bxf6 Be5? 12.Bxh8 Bxh8
After White takes the f6-pawn, Stockfish wants 11…Qh6!, activating the queen with threats and limiting the bishop.
I develop with 11…Be5?. The bishop from b8 travels through the newly cleared c7 and d6 squares to e5.
White’s bishop now takes the rook on h8. My bishop on e5 follows the diagonal back through f6 and g7 to h8 and recaptures.
The exchange has removed one white bishop and one black rook.
Combined with the earlier knight loss, Black is now missing a knight and the exchange. The engine says +5.77.
But the black queen can finally leave f8, and White has only 3:27.
This is not equality. It is permission to cause trouble.
The queen makes a case
13.Qe2 Qh6 14.Qd2 Qh4+ 15.g3 Qh3
The queen enters on h6, then gives check from h4. White blocks with g3, and the queen settles on h3.
Black’s attack has recognizable shapes now:
- the queen is close to the king;
- White’s kingside pawns have moved;
- the bishop on h8 owns a long diagonal toward c3; and
- the remaining knight can jump into e5 and f3.
White still has the winning material advantage. White also has 2:39 and no increment.
This is the moment where the game becomes practically interesting. A lost position with forcing moves is still a position the opponent must solve.
16.Bd3 Ne5 17.Qe2 Nxf3+?!
The remaining white bishop develops to d3. I centralize the knight with 16…Ne5.
Then I play 17…Nxf3+?!.
It is forcing. The knight takes a pawn with check, drags the queen to f3, and exposes a discovered bishop capture:
18.Qxf3 Bxc3+ 19.bxc3
The bishop on h8 crosses the entire diagonal and takes the knight on c3 with check. White’s b-pawn recaptures.
The sequence damages the pawn structure and keeps White’s king in the center. It also trades my knight and bishop for a pawn and a knight. Stockfish prefers 17…c4, preserving pieces around the attack, and raises White’s advantage to +7.55 after the sacrifice.
For practical purposes, however, the queen still has one check and one capture left.
Cashing out the queen
19…h5 20.Rf1 Qxf1+ 21.Bxf1
White moves the h-rook to f1. My queen on h3 can take it:
20…Qxf1+.
The queen gives itself up for the rook, and White’s bishop recaptures. Stockfish calls the queen sacrifice Black’s best move in the position. That does not make the position good; it means the queen should collect whatever material it can before the attack ends.
After 21.Bxf1, White has a queen, rook, bishop, knight, and dangerous center against Black’s two rooks and bishop.
The clocks say:
- White: 2:01;
- Black: 4:04.
At last, the time advantage has returned.
It has arrived at a position evaluated +10.93.
The move both sides needed
21…Bf7 22.Bh3 Rd8??
I retreat the bishop to f7. Stockfish sees a forced mate for White, although every Black move is already losing. White can make the finish direct with 22.d6!.
Morgenstern64 plays 22.Bh3? instead. The forced mate disappears from the engine’s immediate horizon, and the evaluation returns to a merely catastrophic +10.58.
Now Black’s best resistance is 22…d6!.
That move attacks the center from behind, blocks White’s passed pawn, and makes the conversion longer. It does not save the game. It does make White keep proving it with under two minutes.
I play 22…Rd8??.
The rook moves onto the d-file in front of the pawn instead of challenging it with a pawn. Stockfish announces mate in nine.
The curious lesson is that d6 belongs to both players:
- Black needed …d6 to slow the attack;
- White needed d6 to drive the king into the mating net.
Nobody plays it yet.
The position waits.
A mating net assembled in plain sight
23.Nd3 a5 24.Ne5 Bg8 25.Ng6 Bf7
White’s remaining knight improves from c1 to d3, e5, and g6. My bishop moves from f7 to g8 and back to f7.
These moves look almost calm. They are not. The white queen is preparing to reach f6, the d-pawn is ready to advance with check, and the black king has no developed defenders.
After 23…a5, Stockfish shortens the forced mate from eight moves to four.
White still has 1:55.
I still have 3:54.
The clock has become a witness.
26.Qf6 Bxg6 27.Qxg6+ Ke7 28.d6+ Kf8
The queen reaches f6. I eliminate the knight with 26…Bxg6, and the queen recaptures with check.
The king moves to e7.
Then the move that has been waiting since move twenty-one finally arrives:
28.d6+.
The passed pawn advances with check. The king retreats to f8.
White has a queen on g6, bishop on h3, pawn on d6, and rook on a1. The rook has not moved all game.
It is about to enter through a rule that Chess960 preserved from ordinary chess and made theatrical.
The rook arrives by castling
29.O-O-O!
White castles queenside.
In Chess960, castling ends with the king and rook on the same destination squares they use in standard chess. Here the starting king and rooks were already on e1, a1, and h1, so the final geometry looks familiar:
- the king travels from e1 to c1;
- the rook travels from a1 to d1.
The route has only just become available. The bishop that began on b1 moved away. The knight that began on c1 reached g6 and was captured. The knight from d1 left on move eight. Every square between king and rook is finally clear.
Castling does more than protect the king. It develops the last rook directly onto the d-file.
Stockfish says mate in one after Black’s reply. In fact, every legal Black move permits the same finish.
29…Re8 30.Rf1#
I play 29…Re8.
The rook that arrived on d1 one move ago slides to f1.
Checkmate.
The rook did not spend the opening developing. It waited on a1 for twenty-eight moves, entered the game as part of castling, and delivered mate on its first independent move.
Morgenstern64 finishes with 1:39.
I finish with 3:35.
White started with half my time and no increment. White ended with the only clock that mattered.
Now we may look at the engine ledger
Scores are from White’s perspective. Positive favors Morgenstern64. Mate scores replace decimals when Stockfish sees a forced finish.
| Moment | Evaluation | What changed |
|---|---|---|
| 1…e5 | +0.23 | Balanced start from position 257 |
| 3…Nd6 | +0.49 | Both black knights are developed |
| 4…f6?! | +1.23 | 4…exd4 was the clean central response |
| 5…Nd4?? | +4.34 | Four minutes and forty-two seconds produce a hanging knight |
| 6…b6?! | +4.68 | Black delays the needed …c6 break |
| 9…gxf6 | +4.92 | White has an extra knight and a broken black center |
| 10…c5! | +4.83 | Best move; the bishop must decide |
| 11.Bxf6?! | +3.89 | White gives Black a small practical opening |
| 11…Be5? | +5.64 | Black misses the active 11…Qh6 |
| 12…Bxh8 | +5.77 | Black has lost a rook for White’s bishop |
| 16…Ne5 | +5.44 | The black pieces create attacking shapes |
| 17…Nxf3+?! | +7.55 | The forcing sacrifice trades away too much |
| 20…Qxf1+ | +10.93 | Best available: the queen collects a rook before disappearing |
| 21…Bf7 | Mate in 8 | White can begin the forced finish with 22.d6 |
| 22.Bh3? | +10.58 | White misses immediate mate but remains overwhelmingly winning |
| 22…Rd8?? | Mate in 9 | 22…d6 was the engine’s best resistance |
| 23…a5 | Mate in 4 | The attack is now short and forced |
| 26.Qf6 | Mate in 2 | White coordinates queen and passed pawn |
| 28.d6+ | Mate in 2 | The pawn drives the king to f8 |
| 29.O-O-O! | Mate in 1 | Castling develops the mating rook |
| 30.Rf1# | Checkmate | The rook’s first independent move ends the game |
The engine’s verdict is simple. Black was slightly worse after 4…f6, lost after 5…Nd4, and never returned to equality.
The human story is more useful. The clock advantage vanished because I treated time spent as evidence that a move must be good. Then, from a losing position, I created forcing play but kept paying for it with the pieces required to sustain the attack.
What I did well
I found 10…c5
The move attacked White’s active bishop and forced the 1967-rated opponent to spend thirty-one seconds. White answered inaccurately with 11.Bxf6?!, producing Black’s best practical moment after the knight loss.
I activated the queen
The route …Qh6–h4+–h3 created checks and threats around the uncastled king. The position remained lost, but White could not convert on autopilot.
I made the queen collect something
By the time 20…Qxf1+ appeared, the queen could not rescue the position. Trading it for a rook was Stockfish’s best move and reduced White’s attacking material.
I played the tournament winner
Morgenstern64 finished first in the event. The rating gap was real, the variant was unfamiliar, and the opponent still had to calculate a distinctive mating pattern.
What I need to fix
A long think must end with a blunder check
The time spent on 5…Nd4?? made the move feel earned. It was still hanging to cxd4.
Before committing after a long calculation, reset and ask one fresh question: what can capture the destination square? Do not trust the analysis that produced the candidate to audit the candidate.
Resolve the center before reinforcing it
After 4.d4, 4…exd4 releases the tension. 4…f6?! tries to hold e5, concedes space, and lets d5 attack the knight with tempo.
In an unfamiliar starting position, central pawn moves should help the pieces breathe. A pawn move that protects another pawn while allowing a tempo against a knight needs a stronger justification.
Preserve attackers when playing for practical chances
The sequence beginning 17…Nxf3+?! creates checks but trades Black’s remaining knight and active bishop. A short-term forcing line is not automatically an attack if it ends with fewer attackers than defenders.
Stockfish’s 17…c4 keeps pieces on the board and makes White solve more problems.
Block passed pawns before occupying their files
After 22.Bh3?, Black should play 22…d6, confronting the passed pawn. 22…Rd8?? places a rook in front of it but leaves White’s pawn free to advance later with check.
The rook looked active. The pawn move changed the structure. Structure won.
Learn the castling geometry before it becomes a tactic
In Chess960, castling is not only king safety. It can be a rook-development move with immediate tactical force. Before every move, check whether the opponent has cleared a castling route and where the rook will land.
White’s 29.O-O-O did not merely hide the king. It created the threat Rf1# in the same action.
Reproducible engine record
The run used:
- Stockfish 18;
python-chess1.11.2;- Chess960 mode from the PGN variant and initial FEN;
- 4 threads;
- 512 MB hash;
- 5,000,000 nodes for each search;
- MultiPV 3 before every played move;
- a separate 5,000,000-node search after every played move; and
- principal variations limited to 12 plies in the saved report.
Scores are normalized to White’s perspective. Multi-threaded runs may differ by a few centipawns. The material swings and forced mates discussed here are far outside that noise.
The repository-owned harness produced the report:
#!/usr/bin/env python3
"""Produce a reproducible, move-by-move Stockfish report for a PGN game."""
import argparse
import json
import shutil
from pathlib import Path
import chess
import chess.engine
import chess.pgn
def score_for_white(info):
return info["score"].pov(chess.WHITE).score(mate_score=100000)
def display_score(info):
score = info["score"].pov(chess.WHITE)
if score.is_mate():
mate = score.mate()
return f"M{mate}" if mate is not None and mate >= 0 else f"-M{abs(mate or 0)}"
value = score.score()
return f"{(value or 0) / 100:+.2f}"
def pv_to_san(board, pv, length=12):
variation = board.copy()
moves = []
for move in pv[:length]:
if move not in variation.legal_moves:
break
moves.append(variation.san(move))
variation.push(move)
return " ".join(moves)
def main():
parser = argparse.ArgumentParser()
parser.add_argument("pgn", type=Path)
parser.add_argument("output", type=Path)
parser.add_argument("--engine", default=shutil.which("stockfish") or "stockfish")
parser.add_argument("--nodes", type=int, default=500000)
parser.add_argument("--multipv", type=int, default=3)
parser.add_argument("--threads", type=int, default=4)
parser.add_argument("--hash", type=int, default=512)
args = parser.parse_args()
with args.pgn.open() as source:
game = chess.pgn.read_game(source)
if game is None:
raise SystemExit("No PGN game found")
engine = chess.engine.SimpleEngine.popen_uci(args.engine)
engine.configure({"Threads": args.threads, "Hash": args.hash})
report = {
"game": dict(game.headers),
"method": {
"engine": engine.id,
"python_chess": chess.__version__,
"nodes_per_search": args.nodes,
"multipv": args.multipv,
"threads": args.threads,
"hash_mb": args.hash,
"score_perspective": "White; positive favors White",
"mate_score_centipawns": 100000,
"pv_length_plies": 12,
},
"positions": [],
}
try:
board = game.board()
for ply, move in enumerate(game.mainline_moves(), start=1):
mover = board.turn
move_number = board.fullmove_number
played_san = board.san(move)
candidates = engine.analyse(
board,
chess.engine.Limit(nodes=args.nodes),
multipv=args.multipv,
)
candidate_rows = []
for rank, info in enumerate(candidates, start=1):
candidate_rows.append(
{
"rank": rank,
"move": board.san(info["pv"][0]),
"score": display_score(info),
"score_cp_white": score_for_white(info),
"depth": info.get("depth"),
"seldepth": info.get("seldepth"),
"nodes": info.get("nodes"),
"pv": pv_to_san(board, info["pv"]),
}
)
best_cp = candidate_rows[0]["score_cp_white"]
best_move = candidates[0]["pv"][0]
board.push(move)
after = engine.analyse(board, chess.engine.Limit(nodes=args.nodes))
after_cp = score_for_white(after)
loss = best_cp - after_cp if mover == chess.WHITE else after_cp - best_cp
report["positions"].append(
{
"ply": ply,
"move_number": move_number,
"side": "White" if mover == chess.WHITE else "Black",
"played": played_san,
"best_move": candidate_rows[0]["move"],
"is_best": move == best_move,
"centipawn_loss": max(0, loss),
"evaluation_after": display_score(after),
"evaluation_after_cp_white": after_cp,
"after_depth": after.get("depth"),
"after_seldepth": after.get("seldepth"),
"after_nodes": after.get("nodes"),
"best_reply_line_after": pv_to_san(board, after.get("pv", [])),
"candidates_before": candidate_rows,
}
)
finally:
engine.quit()
args.output.parent.mkdir(parents=True, exist_ok=True)
args.output.write_text(json.dumps(report, indent=2) + "\n")
if __name__ == "__main__":
main()
The preserved source files are:
analysis/stockfish/chP739Lt.pgn— the exact Lichess PGN with clocks and starting FEN;analysis/stockfish/chP739Lt-stockfish18.json— the complete five-million-node report; andscripts/analyze_game.py— the reusable analysis harness.
The PGN and report remain internal source evidence rather than public downloads. The script is displayed through the repository-restricted shortcode. Stockfish is free, open-source software; this site invokes a local installation and does not redistribute the engine binary. The evergreen explanation is in What Stockfish Is and How I Use It.
The honest verdict
Morgenstern64 gave me five minutes and the increment, then won the event anyway.
I spent almost the entire gift on 5…Nd4??, a move that failed the final one-move capture check. That is the central lesson. Calculation time has no exchange rate unless the answer survives verification.
The rest of the game still gave me something worth keeping. I found active moves, made the opponent calculate, and reached a finish unique enough to justify the whole exercise: in Chess960 position 257, the rook entered through queenside castling and delivered checkmate on its next move.
My five-minute knight disappeared on move six.
White’s waiting rook appeared on move twenty-nine.
Only one of them understood timing.