Nhật ký ván đấu thôi tường thuật mọi thứ
Một lần gieo xúc xắc từng in ra năm dòng, hai trong số đó gọi tên cùng một ô. Giờ dòng tin đọc như lời bình luận chứ không phải biên bản — và không có gì bị xoá để làm được điều đó.
Nói đơn giản
Bảng bên cạnh bàn cờ ghi lại đúng từng việc mà trò chơi làm. Một lượt gieo bình thường tạo ra năm dòng riêng biệt — đã gieo, đã đi, đã dừng ở đâu, đã kết thúc lượt, và thường thêm một dòng nữa — trong đó hai dòng gọi tên cùng một ô. Nhân lên với bốn người chơi và ba mươi vòng, dòng tin trở thành bức tường mà bạn thôi đọc; thật tiếc, vì hai ba dòng thật sự quan trọng nằm đâu đó trong ấy.
Bây giờ một lượt gieo và mọi hệ quả của nó gộp thành một dòng. Dừng ở một ô, kết thúc lượt, thông báo một khoản nợ trước khi trả, từ chối mua trước khi phiên đấu giá mở — không điều nào còn được đọc lên nữa, vì bàn cờ hoặc dòng kế tiếp đã nói rồi. Một chuỗi lần xây trên cùng một ô gộp lại thành một dòng, phiên đấu giá không ai tranh thôi xướng cùng một số tiền hai lần, và ở chế độ Tốc độ, đồng hồ đếm ngược thế chấp chỉ lên tiếng khi còn hai vòng để xoay xở.
Tin nhắn trò chuyện của bạn cũng không còn bị đẩy khỏi màn hình. Trước đây bảng chỉ giữ một cửa sổ lịch sử cho tất cả, nên một bàn cờ sôi động có thể lặng lẽ hất đi điều ai đó vừa gõ. Giờ hoạt động và trò chuyện được giữ riêng, và bao nhiêu xúc xắc cũng không chôn vùi được một tin nhắn do người thật viết.
Cho người thích chi tiết kỹ thuật
Lọc ngay từ nguồn chưa bao giờ là lựa chọn. Phát lại một ván nghĩa là gấp toàn bộ nhật ký sự kiện trở lại thành một trạng thái, và đó chính là cách hoạt động của việc tải lại trang, chế độ khán giả, khung xem lại và bộ dựng clip. Bỏ một sự kiện để dòng tin đẹp hơn là làm hỏng tất cả những thứ đó. Vì vậy nhật ký vẫn nguyên vẹn, còn việc rút gọn chỉ thuộc về khâu hiển thị, trong một bộ dựng dùng chung cho bàn cờ trực tiếp, chế độ khán giả, phần xem lại, các clip và cả bản ngoại tuyến.
Việc mỗi sự kiện tác động thế nào tới dòng tin là một câu lệnh switch bao trùm mọi loại sự kiện của bộ máy, nghĩa là một loại sự kiện mới sẽ không biên dịch được cho tới khi có người quyết định nó phải được đọc ra sao:
// lib/game/feedDigest.ts — an exhaustive switch over every engine event
case 'dice_rolled':
return 'move'; // the roll opens a line
case 'moved':
case 'passed_start':
case 'jail_attempt_failed':
return 'absorb'; // …and what it caused folds into that line
case 'landed': // names the cell 'moved' just named
case 'turn_ended': // the board already shows whose turn it is (14% of events)
case 'payment_due': // the intent; 'debt_paid' is the settlement, with the amount
case 'buy_declined': // always followed by 'auction_started', which says it better
case 'auction_passed':// carries no information, and outnumbers real bids 2:1
return 'hidden';Hai lỗi lộ ra mà không bài kiểm thử nào tìm được, vì cả hai đều liên quan tới việc kết quả đọc lên nghe thế nào chứ không phải nó chứa gì. Phiên đấu giá không có người tranh lại xướng cùng một con số hai lần — "P1 trả 2600k", rồi "P1 thắng với 2600k" — nên lượt trả giá chốt phiên giờ bị nuốt đi, và chỉ mình nó, để một cuộc tranh giá thật vẫn đọc lên như một cuộc đua. Còn một sự kiện nằm giữa lượt gieo lại khiến mọi dòng di chuyển kết thúc sớm, cho đến khi bộ dựng được dạy cách bước qua nó.
