5 tháng 3, 2026 · Mikhail Vasiliev
Nexus Devlog: bản mẫu của engine
Một tháng rưỡi trước tôi đã đăng lên trang web kế hoạch của studio - về engine Nexus: nó là gì và chúng tôi sẽ làm những dự án nào trên đó, cho tới cả các game chiến thuật và phần tiếp theo của series Ai Cập. Ở đó cũng có một lộ trình. Engine khá phức tạp, và để giảm rủi ro, tôi muốn dựng nó từng bước một. Nhưng người chơi trong phần bình luận nói thẳng: dựng được một thứ như vậy là chuyện bất khả. Vì thế tôi quyết định bắt đầu bằng một bản mẫu - để cho thấy rằng một engine như thế vẫn dựng được. Đó là thứ tôi sẽ trình bày.

Đây là diện mạo của engine lúc này. Nhìn bề ngoài thì nó là một ứng dụng console khá thô sơ. Nhưng nó cho thấy rõ điều cốt yếu - rằng các cơ chế khác nhau đều chạy trên cùng một engine vạn năng.
Hiện giờ trên đó đang chạy bốn mô phỏng. Cái đầu tiên là Stone Age, game đầu tay của studio, từ năm 2013. Ba cái còn lại làm theo dự án của người khác. Tôi không định sao chép hay phát hành chúng, chúng ở đây chỉ để cho thấy rằng những cơ chế chơi hoàn toàn khác nhau vẫn có thể chạy trên cùng một engine.
Stone Age
Stone Age được tái dựng trọn vẹn trên engine. Vẫn những chỉ số đó, các năm và lượt, dân số, các vùng đất. Bạn cử thợ vào rừng, họ kiếm thức ăn, dân số tăng lên, các công nghệ xuất hiện - bạn nghiên cứu chúng, mở ra các công trình và cây tiến hóa, từ vượn người phương Nam tới người khéo léo rồi xa hơn nữa. Sự kiện, đoạn kết - mọi thứ từ bản gốc đều có ở đây.

Slay the Spire
Tiếp theo là Slay the Spire, một roguelike thẻ bài rất hay, chắc hẳn có người đã chơi qua. Trên engine chỉ có phần đấu: người chơi có bài, năng lượng và máu, còn kẻ địch có ý định của riêng nó. Strike (Đánh) thì đánh, Defend (Phòng thủ) thì tạo khiên. Bạn tiêu năng lượng, kết thúc lượt, cứ thế thay phiên nhau cho tới khi có người thắng.

GURPS
Mô phỏng thứ ba là GURPS, một hệ thống nhập vai trên bàn, khá phức tạp. Từ nó tôi chỉ lấy một module duy nhất, bộ tạo hệ sao. Điều thú vị là bản thân module này hoàn toàn không phải một trò chơi, mà là một bộ tạo sinh phức tạp. Nó dựng nên một hệ với một ngôi sao và cả đống thuộc tính: mười quỹ đạo, trên đó là các thế giới khác nhau. Cái đầu tiên, nhỏ và đầy đá, giống Sao Thủy - với khối lượng riêng của nó, áp suất khí quyển và mọi thứ khác. Tổng cộng mô phỏng này có hơn sáu nghìn dữ kiện. Đây là một bài kiểm tra tải tốt: thấy được engine gánh nổi bao nhiêu dữ liệu.

Oregon Trail
Cái thứ tư là Oregon Trail, một tác phẩm kinh điển năm 1971 và là một trong những game máy tính đời đầu nhất. Đó là hành trình của những người di cư băng qua nước Mỹ bằng xe ngựa: trước khi lên đường bạn mua vật tư - bò kéo, thức ăn, đạn, quần áo - rồi sau đó đi săn, chia khẩu phần và xử lý các sự kiện. Vừa rồi chúng tôi bị tấn công. Và cứ thế cho tới hết chặng đường.

Cả bốn game đều chạy trên cùng một engine, và chẳng game nào phải viết một dòng code nào.
Chỉnh sửa ngay khi đang chạy
Nhưng engine không chỉ chạy những game này - bạn có thể thay đổi chúng ngay khi đang chạy, không cần đụng tới code. Lấy Slay the Spire làm ví dụ.

Tôi sẽ đổi sát thương của lá Strike (Đánh), đặt thành 100:
/set Strike.CalcDamage Value 100Thuộc tính thay đổi ngay lập tức ở cả hai lá bài đó, vì chúng cùng chung một lớp.

Mà cũng có thể thêm hẳn một lá bài hoàn toàn mới, Fireball (Cầu lửa):
/add Fireball Is DirectDamage
/set Fireball.CostEnergy Value 2
/add Fireball Has CalcDamage
/set Fireball.CalcDamage Value 20
/add Fireball Has ApplyDamage
/add Fireball.ExecutionEffects Has CostEnergy
/add Fireball.ExecutionEffects Has CalcDamage
/add Fireball.ExecutionEffects Has ApplyDamageTrước đó nó chưa hề có, mà giờ đã nằm trong game - nó nằm trên tay, được chơi ra, gây 20 sát thương rồi đi vào chồng bài bỏ, như mọi lá bài bình thường:

Cũng có thể đổi cả chính các luật chơi, chỉ bằng một lệnh. Tôi sẽ bỏ cái luật khiến những lá bài đã chơi đi vào chồng bài bỏ.
/remove PlayCard Has MovePlayedCardGiờ chúng ở lại trên tay. Tôi chơi Defend (Phòng thủ): khiên được cộng lên, năng lượng bị tiêu đi, nhưng lá bài vẫn còn đó.
![Sau khi đổi luật: Defend (Phòng thủ) đã được chơi - năng lượng 0/3, khiên 5 - nhưng mọi lá bài đã chơi vẫn nằm trên tay, được đánh dấu [X]](/_next/image?url=%2Fvblog1_slayrule.jpg&w=3840&q=75)
Ở một game thông thường, viết bằng một ngôn ngữ lập trình, để làm chuyện này bạn sẽ phải lục vào code và build lại cả dự án. Ở đây thì không cần.
Theo cùng cách đó, có thể thêm vào game cả những thứ trước đây hoàn toàn không có. Chẳng hạn vàng - tôi sẽ tạo ra nó và mô tả cách nó được tiêu:
/set Player.Gold Value 100
/add CostGold Output Owner.Gold
/add CostGold Math.Subtract.Apply trueXuất hiện một thuộc tính mà mới lúc nãy còn chưa có - vàng, và ngay lập tức là cả một trăm.

Có vàng rồi thì cũng có thể làm ra một hành động mới - Bribe (Hối lộ). Nó tiêu vàng chứ không tiêu năng lượng:
/add Bribe Is DirectDamage
/set Bribe.CostEnergy Value 0
/set Bribe.CostGold Value 30
/add Bribe Has CalcDamage
/set Bribe.CalcDamage Value 15
/add Bribe Has ApplyDamage
/add Bribe Has CostGold
/add Bribe.ExecutionEffects Has CostGold
/add Bribe.ExecutionEffects Has CalcDamage
/add Bribe.ExecutionEffects Has ApplyDamage
/create Bribe Player.HandBribe (Hối lộ) tốn ba mươi vàng và gây mười lăm sát thương - và lập tức hoạt động.

Có thể nhìn vào và tưởng đây là cheat, và rằng gõ những lệnh như vậy thì bất tiện. Nhưng đây không phải cheat. Đây là việc chỉnh sửa các dữ kiện logic và dữ liệu mà cả trò chơi dựa vào - các đối tượng, thuộc tính và cơ chế của nó. Về bản chất đây chính là cái ngôn ngữ mà trò chơi được viết ra.
Học cái ngôn ngữ này thì không bắt buộc. Bạn có thể nhờ AI dịch một câu nói bình thường thành các lệnh mà Nexus hiểu được. Ví dụ:
give 999 goldDịch ra thì đơn giản chỉ là «Thêm cho tôi 999 vàng».

AI suy nghĩ, tìm ra lệnh cần dùng rồi thực thi, và thế là chúng ta có 999 vàng.
Cũng có thể nói cách khác, «vàng 100» - vẫn được. «Biến tôi thành thần» - AI cho bạn sự bất tử. Kết thúc lượt, đánh, hồi máu - tất cả đều có thể làm bằng lời, engine hiểu được. Và chẳng có thứ nào trong đó được lập trình sẵn cả, mọi thứ đều thật sự vận hành.
Dự định
Tôi muốn làm các lệnh đơn giản hơn. Hiện giờ, để tạo ra chính lá Fireball (Cầu lửa) đó cần khoảng tám lệnh, mà tôi nghĩ sẽ rút xuống còn ba bốn lệnh. Còn trong video tới tôi sẽ cố cho thấy một thứ trực quan hơn - bản 2D render.
Chi tiết hơn về engine và các dự định thì xem ở mục Nexus.
Lưu ý: Stone Age là game của studio. Slay the Spire, GURPS và Oregon Trail thuộc về các chủ sở hữu của chúng và chỉ được trình bày như một bản trình diễn engine - những bản dựng này không được phát hành ở bất cứ đâu.
