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.

GameMorgenstern64–ThreeSadPandas
EventFRC Rapid 257 Team Battle
DateSeptember 4, 2026
VariantChess960, starting position 257
Time control10+5 Rapid; White berserked to 5+0
RatingsMorgenstern64 1967; ThreeSadPandas 1458?
Rating gap509 points
EngineStockfish 18, five million nodes per search
SeriesThe 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.

Replay not loading? Open the game on Lichess.

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-0

Please locate your pieces

Chess960 position 257 begins with this back rank:

Squareabcdefgh
PieceRookBishopKnightKnightKingQueenBishopRook

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.

MomentEvaluationWhat changed
1…e5+0.23Balanced start from position 257
3…Nd6+0.49Both black knights are developed
4…f6?!+1.234…exd4 was the clean central response
5…Nd4??+4.34Four minutes and forty-two seconds produce a hanging knight
6…b6?!+4.68Black delays the needed …c6 break
9…gxf6+4.92White has an extra knight and a broken black center
10…c5!+4.83Best move; the bishop must decide
11.Bxf6?!+3.89White gives Black a small practical opening
11…Be5?+5.64Black misses the active 11…Qh6
12…Bxh8+5.77Black has lost a rook for White’s bishop
16…Ne5+5.44The black pieces create attacking shapes
17…Nxf3+?!+7.55The forcing sacrifice trades away too much
20…Qxf1++10.93Best available: the queen collects a rook before disappearing
21…Bf7Mate in 8White can begin the forced finish with 22.d6
22.Bh3?+10.58White misses immediate mate but remains overwhelmingly winning
22…Rd8??Mate in 922…d6 was the engine’s best resistance
23…a5Mate in 4The attack is now short and forced
26.Qf6Mate in 2White coordinates queen and passed pawn
28.d6+Mate in 2The pawn drives the king to f8
29.O-O-O!Mate in 1Castling develops the mating rook
30.Rf1#CheckmateThe 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-chess 1.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; and
  • scripts/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.