Sáng hôm qua, tôi có chút thời gian rảnh và muốn làm một game bài roguelike giống Slay the Spire.
Tôi không viết một dòng code game nào hay động đến engine; tôi chỉ ném ý tưởng cho Codex và để nó xử lý phần còn lại.
Một giờ sau, một game roguelike chủ đề văn hóa dân gian Trung Hoa có tựa đề "Night Patrol: Desolate Temple" đã có thể chơi được.
Từ trang tiêu đề đến bản đồ, qua các trận thường, tinh anh, sự kiện, cửa hàng và nghỉ ngơi, tất cả cho đến Boss trong chính điện của Ngôi Chùa Hoang Vắng.
Bảy con quái vật, khoảng hai mươi lá bài và bốn chuỗi sát thương bùng nổ—Sigils, Incense, Talisman Burning và God Invocation—đều hoạt động.
Vài giờ còn lại được dùng để làm cho nó trông bớt giống một bản demo.
Phản hồi khi đánh trúng, hiệu ứng âm thanh, nhạc nền, hình ảnh thẻ bài, hoạt ảnh idle và video kết thúc—những chi tiết nhỏ này quyết định liệu người chơi có tin "đây là một game thực thụ" hay không.
<video preload="none" tabindex="-1" playsinline="" aria-label="Embedded video" poster="https://pbs.twimg.com/amplify_video_thumb/2049902752332148736/img/UYqr6qERhvORGBJP.jpg" src="https://video.twimg.com/amplify_video/2049902752332148736/pl/o3zbWtmjJ3875EPf.m3u8?tag=27&v=cfc&variant_version=1" style="width: 100%; height: 100%; position: absolute; background-color: black; top: 0%; left: 0%; transform: rotate(0deg) scale(1.005);"></video>
0:22
Dự án hiện đã được mã nguồn mở, với trình cài đặt cho cả macOS và Windows đã sẵn sàng:
https://github.com/op7418/Night-Patrol/releases
Đã có vài khoảnh khắc trong suốt buổi chiều thực sự khiến tôi bị sốc.
Khả năng mô hình của Codex không còn là tin mới nữa.
Điều thu hút sự chú ý của tôi là trình duyệt tích hợp sẵn của nó, GPT-Image 2.0 được tích hợp và động lực thực thi không ngừng nghỉ để đạt được mục tiêu.
Với ba thứ này kết hợp lại, khả năng của nó đã hoàn toàn khác biệt so với Claude Code.
Tiếp theo, tôi sẽ kể về cách tôi phát triển nó cùng với AI và một số điều gây sốc đã xảy ra trong quá trình đó:
1. Tôi chỉ nói bảy từ, và nó đã xây dựng toàn bộ pipeline nhân vật
Tôi chỉ trò chuyện với nó về Slay the Spire và hỏi liệu nó có thể giúp tôi làm một game tương tự không.
Kết quả là, nó trực tiếp sử dụng các tài nguyên có sẵn để tạo ra một bản demo rất giống thông qua code.
Tôi không yêu cầu màn hình xanh, nhưng nó đã tạo ra hình ảnh với nền xanh lá trực tiếp.
Sau đó, tôi yêu cầu Codex sử dụng GPT-Image 2.0 tích hợp để tạo ra các tài sản hình ảnh.
Tôi không chỉ định phong cách, bao gồm những con quái vật nào, hay cần những tài sản gì.
Khi hình ảnh ra, tôi đã sững sờ một lúc.
Các nhân vật đang đứng trên nền xanh lá đặc—một màn hình xanh tiêu chuẩn của phim ảnh: đồng nhất, sạch sẽ, với các cạnh rõ ràng.
Không có sương mù, không có núi xa, không có yếu tố hình ảnh thừa thãi.
Phần đáng sợ là nó biết ngay từ đầu phải tạo ra hình ảnh màn hình xanh để dễ dàng xử lý hậu kỳ.
Tôi chưa bao giờ nói với nó rằng "các hình minh họa nhân vật được sử dụng trong game cần là PNG trong suốt", cũng như không nói "làm ơn tạo nền xanh lá để tôi có thể loại bỏ nó sau". Nó đã tự lên kế hoạch cho pipeline này.
Từ việc tạo ra loại nhân vật nào, đến cách đặt chúng lên sân khấu chiến đấu, cho đến những gì cần xử lý trước khi đặt—nó đã nghĩ ra tất cả ngay khi gọi GPT-Image và reverse-engineer các prompt.
Nó thậm chí còn tự tìm công cụ loại bỏ nền.
Tôi không cài đặt bất kỳ công cụ xử lý hình ảnh nào cho nó, không đưa cho nó rembg, hay bất kỳ phụ thuộc đặc biệt nào trong môi trường Python.
Nó tự tìm kiếm, cài đặt và cấu hình chúng, sau đó đặt gọn gàng các tệp đã xử lý vào tmp/imagegen/.
Sử dụng màn hình xanh để tạo, tự tìm công cụ và phân loại theo tên tệp—ba hành động này cùng nhau tạo thành một pipeline tài sản nhân vật hoàn chỉnh.
Từ đầu đến cuối, tôi chỉ nói những từ "sử dụng GPT-Image 2.0 để tạo tài sản."
Trước đây, cảm giác là "mô hình có thể viết code, nhưng tôi phải cung cấp công cụ và ngữ cảnh."
Bây giờ, nó giống như bạn nêu một mục tiêu và nó tự hoàn thành con đường.
Tôi chỉ chịu trách nhiệm về mặt thẩm mỹ; nó xử lý chuỗi cung ứng.
2. Để tải về vài biểu tượng, nó suýt hack một trang tài sản stock
Mua gói thành viên vẫn chưa đủ; nó bắt đầu phân tích cấu trúc trang web.
Tạo ra các hình ảnh cốt lõi như nhân vật bằng mô hình hình ảnh là ổn.
Nhưng game có nhiều vật phẩm nhỏ—viền thẻ, ngọc chi phí, nền bộ bài, bình máu, nút Bát Quái, bảng bùa—tạo từng cái một bằng mô hình hình ảnh sẽ đắt, chậm và không đồng nhất về kết cấu.
Tôi nói với nó, sao mày không tự tìm tài sản có sẵn trên mạng?
Nó bắt đầu tìm kiếm một cách nghiêm túc. Nó tìm thấy một trang stock mà nó thích, vì vậy tôi đã mua gói thành viên và đưa tài khoản cho nó.
Mười phút tiếp theo giống như một sự kiện siêu nhiên.
Nó đăng nhập, tìm thấy tài sản nó muốn và chuẩn bị nhấp vào tải xuống. Nhưng có một CAPTCHA trước nút tải xuống—một lần, hai lần, ba lần, nó không thể vượt qua.
Một mô hình điển hình sẽ quay lại và nói, "Tôi không thể xử lý CAPTCHA, bạn có thể giúp tôi tải chúng xuống không?"
Codex bắt đầu phân tích cấu trúc trang web, cố gắng vượt qua các hạn chế nhấp chuột ở front-end và trực tiếp xây dựng các yêu cầu để lấy tài nguyên tĩnh.
Sau đó, các rào cản an toàn của chính Codex đã can thiệp.
Thế hệ mô hình GPT hiện tại sẽ ngay lập tức chấm dứt một tác vụ nếu nó liên quan đến khả năng vượt qua ranh giới an ninh mạng, bật lên một prompt yêu cầu chứng nhận doanh nghiệp để chứng minh bạn là người dùng hợp pháp.
Tôi nhìn chằm chằm vào màn hình trong vài giây.
Một AI yêu cầu bạn giúp nó có được thẻ thành viên và sau đó cố gắng tự viết crawler của riêng nó, nói thẳng ra, hơi điên rồ.
Nó không "xấu xa"; nó chỉ coi "lấy những tài sản này" như một tác vụ khép kín phải được hoàn thành.
Khi gặp phải sự kháng cự, nó tự động nâng cấp phương pháp của mình cho đến khi chạm vào vạch đỏ an toàn.
Giải pháp cuối cùng rất đơn giản: nó gửi cho tôi các liên kết đến tài sản nó thích, và tôi nhấp vào tải xuống và kéo chúng đến cho nó. Lúc đó, tôi cảm thấy mình như một thực tập sinh cho AI.
3. Nó kết hợp hàng trăm tài sản thành một hình ảnh lớn—đây là bước đi thông minh nhất
Một thư mục với một trăm hình ảnh—mô hình chọn như thế nào?
Loại bỏ nền và thu thập dữ liệu là những màn trình diễn khả năng nhiều hơn.
Phần tiếp theo này, tôi tin, là một "cái nhìn sâu sắc về giải quyết vấn đề" thực sự—kiểu bước đi khiến bạn đóng laptop và lặng lẽ vỗ tay.
Tôi tìm thấy một tệp zip tài sản game khổng lồ và gửi nó qua.
Nó chứa hàng nghìn hình ảnh, được phân loại đại khái thành "Giao diện UI", "Biểu tượng Kho báu Phép thuật", "Nhân vật" và "Huy hiệu".
Các vấn đề là:
- Một thư mục danh mục thường có hàng chục hoặc hàng trăm PNG.
- Tên tệp hầu hết không có thông tin, như ui_001.png hoặc icon_047.png.
- Ngữ cảnh mô hình đa phương thức không thể xử lý việc đưa chúng từng cái một.
Các cách cũ về cơ bản là hai:
- Đọc từng cái một: Gửi chúng vào mô hình riêng lẻ; ngữ cảnh nổ tung sau vài chục cái.
- Đoán theo tên: Tên tệp không có thông tin, vì vậy đoán là vô ích.
Codex đã đi theo con đường thứ ba.
Nó viết một script nhỏ để tự động dàn trang và kết hợp tất cả các hình ảnh nhỏ trong một thư mục thành một hình ảnh lưới khổng lồ.
Mỗi hình ảnh nhỏ được gắn nhãn với tên tệp gốc của nó bên dưới, giống như một danh mục.
Sau đó, nó chỉ đọc một hình ảnh lớn này.
Mô hình đa phương thức có thể nhìn thấy diện mạo của một trăm tài sản trong một lần nhìn.
Khi nó thích một cái, nó chỉ cần đọc tên tệp bên dưới nó và tham chiếu nó bằng tên trong thư mục gốc.
Một lần tiêu thụ hình ảnh thay thế một trăm lần truy xuất.
Nó nhận ra nút thắt cổ chai của chính mình.
Khi tấm contact sheet khổng lồ đó được tạo ra, tôi đã nhìn chằm chằm vào nó một lúc lâu.
Bản thân hành động này không phức tạp.
Đó là cùng một logic như contact sheet của nhiếp ảnh gia hoặc tường hình thu nhỏ của thư viện phim cũ.
Điểm mấu chốt là mô hình nhận ra, "Băng thông hình ảnh của tôi bị hạn chế, tôi cần nén vấn đề thành một hình ảnh"—và nó đã làm điều này một cách độc lập.
Nhận thức được những hạn chế của công cụ và sau đó chủ động tạo ra một đầu vào tốt hơn cho chính nó là rất gần với một kỹ sư có thể xây dựng các công cụ của riêng mình.
Với tư cách là người dùng, tôi không tham gia gì cả; tôi chỉ thấy một câu đố xuất hiện trên bàn.
Cuối cùng, nhiều tài sản UI trong game—ngọc chi phí, bộ bài, bình máu, nút và viền bùa—đã được chọn thông qua quá trình này.
Nhìn vào những đường cắt sạch sẽ đó dưới assets/vendor/aigei/ sau này, tôi cảm thấy tấm contact sheet đó là bước có giá trị nhất của toàn bộ dự án.
4. Seedance 2.0 đã tạo hoạt ảnh xử tử cho bảy con boss
Khi hình ảnh đã được trau chuốt đến một mức độ nhất định, tôi muốn thêm một cảm giác nghi lễ vào cuối các trận chiến.
Kế hoạch cuối cùng: mỗi khi một con quái vật bị đánh bại, một đoạn cutscene phát với vài giây hoạt ảnh xử tử.
Nhiệm vụ này hiện được xử lý tốt nhất bởi Seedance 2.0.
Quy trình
- GPT-Image đã tạo ra một khung hình chiến thắng cho mỗi con trong số bảy con quái vật.
- Những tấm poster này được đưa vào Seedance 2.0 để tạo ra các video ngắn tương ứng.
- Các video được đặt trong assets/generated/cinematics/ và tự động phát sau khi chiến thắng một trận.
5. Sau phiên bản có thể chơi đầu tiên, công việc thực sự mới bắt đầu
Phiên bản đầu tiên thực sự đã "có thể chơi" đủ.
Khi bản prototype được hoàn thành trong ba giờ, game đã có mọi thứ cần thiết.
Trang tiêu đề, bản đồ, chiến đấu, phần thưởng, sự kiện, cửa hàng, nghỉ ngơi, Boss và kết quả—vòng lặp hoàn chỉnh đã có ở đó, và các móc gameplay đã hiện diện.
Theo các tiêu chuẩn trước đây, phiên bản này đã có thể được phát hành để lừa mọi người chơi.
Nhưng phiên bản này giống một flowchart hơn là một game. Mọi bước đều hoạt động, nhưng mọi bước đều khô khan.
Những giờ còn lại được dành cho những chi tiết khó gọi tên riêng lẻ nhưng cùng nhau quyết định xem "cái này có cảm giác như một game thực thụ không."
Nhạc nền từ Suno v5.5
Tất cả nhạc nền đều được tạo bởi Suno v5.5; không sử dụng tài sản stock nào.
Tôi đưa cho nó một mô tả định hướng—"đêm đường văn hóa dân gian Trung Hoa, mõ cá, chuông, drone tần số thấp, thang âm ngũ cung, kiềm chế và không kịch tính."
Nó chạy vài phiên bản, và tôi chọn một cái cho game. Giai điệu trang tiêu đề nặng hơn, trong khi nhạc nền chiến đấu nhẹ hơn để không gây mất tập trung.
Tôi cũng thêm một số xử lý chi tiết: âm lượng nhạc cao hơn trên trang chờ; một khi "Bắt đầu Game" được nhấp, âm lượng giảm xuống và trở thành âm thanh nền.
Hoạt ảnh đánh trúng và âm thanh va chạm
Trong chiến đấu ban đầu, khi một lá bài được chơi, quái vật chỉ mất số. Không có phản hồi, không có trọng lượng.
Codex đã thực hiện một sự trau chuốt toàn diện:
- Nhân vật rung chuyển khi bị đánh, máy ảnh rung nhẹ và màn hình nhấp nháy đỏ trong thời gian ngắn.
- Mỗi loại tấn công có âm thanh va chạm khác nhau—kiếm, bùa, sét và đấm đều có kết cấu khác nhau.
- Block và Sigil giải quyết có âm thanh riêng để chúng không bị lẫn lộn.
- Có một khung hình đóng băng ngắn ngay khi kẻ địch chết trước khi vào video xử tử.
Những thứ này nhỏ riêng lẻ. Cùng nhau, chúng biến đổi "cảm giác" của chiến đấu từ một biểu mẫu web thành một game bài.
Seedance 2.0 cũng tạo hoạt ảnh idle
Bước này là cách sử dụng công cụ yêu thích của tôi trong giai đoạn trau chuốt.
Ngoài các video xử tử Boss, tôi cũng yêu cầu nó tạo nền trang tiêu đề—lửa cháy trong môi trường, đèn lồng đung đưa và mây trôi ở phía xa.
Seedance 2.0 mặc định tạo ra một video có đầu và cuối, sẽ bị giật ở đường nối nếu lặp lại.
Tôi đã gửi cùng một hình ảnh làm khung hình đầu tiên và cuối cùng. Video bắt đầu từ hình ảnh này và kết thúc trở lại nó, tạo ra một vòng lặp vô tận liền mạch.
Hoạt ảnh nền trang tiêu đề đã được tạo theo cách này. Lửa cháy, đèn lồng đung đưa và mây trôi mãi mãi—bạn có thể nhìn chằm chằm vào nó trong ba phút và không bao giờ thấy đường nối.
Kỹ thuật này đã tồn tại trước khi tạo video; đó là cách các cảnh lặp được tạo ra trong các hoạt ảnh cũ.
Kết luận: Buổi chiều này đã làm tôi bị sốc vài lần
Toàn bộ dự án này được hoàn thành trong một phiên Codex duy nhất; tôi chưa bao giờ mở một cửa sổ thứ hai.
Gameplay prototype, state machine, kiến trúc React + Phaser, pipeline tài sản, loại bỏ nền, thu thập tài sản, tạo contact sheet, tinh chỉnh GPT-Image, chạy Seedance 2.0, tích hợp Suno v5.5, đóng gói Electron, bản dựng GitHub Actions Release, README, biểu tượng, tài liệu quảng cáo—tất cả trong đó.
Tôi đã tự làm rất ít:
- Chọn hướng đi: chủ đề văn hóa dân gian Trung Hoa, tập trung vào Sigils và Incense.
- Đưa ra phản hồi thẩm mỹ: nơi nào thô, nơi nào trông giống biểu mẫu web, nơi nào ánh sáng xung đột.
- Đóng vai trò là người gác cổng: tài sản nào tuân thủ, crawler nào cần tránh, quyền nào cần từ chối.
Codex xử lý phần còn lại. Và mỗi bước đều có một khoảnh khắc khiến tôi dừng lại và nhìn chằm chằm.
Nó tạo ra hình ảnh màn hình xanh ngay từ đầu vì nó biết các nhân vật cần được loại bỏ nền trước khi vào game.
Nó cố gắng viết một crawler để vượt qua CAPTCHA, chỉ để bị chính sách an toàn của nó ngăn lại.
Nó kết hợp hàng nghìn tài sản thành một hình ảnh chỉ mục khổng lồ để nó có thể sử dụng một lần tiêu thụ hình ảnh thay thế một trăm lần truy xuất.
Không có điều nào trong số này là những phát minh chấn động thế giới, nhưng tất cả đều chỉ ra cùng một sự thay đổi:
Trước đây, bạn phải thiết lập các công cụ cho nó, và nó chịu trách nhiệm viết code; bây giờ, bạn chỉ cần nêu mục tiêu, và nó tự tìm, cấu hình và xây dựng các công cụ.
Cảm giác này đã vượt ra ngoài lĩnh vực của một "trợ lý viết code."
Nó giống như một nguyên mẫu của phần mềm AGI đang hoạt động.
Tôi có nên đóng gói quy trình này thành một Skill không?
Sau khi chạy dự án này, tôi có một quy trình tương đối ổn định trong đầu:
Tôi đang nghĩ về việc có nên gói quy trình này thành một Codex Skill chuyên dụng để tạo bản demo game indie hay không.
Bạn chỉ cần thả một ý tưởng gameplay vào, và nó có thể chạy một phiên bản có thể chơi, có thể đóng gói và có thể phân phối cho bạn trong vài giờ.
Nếu ai đó quan tâm, tôi sẽ dành thời gian xây dựng Skill này và mã nguồn mở nó. Dù sao thì tôi cũng sẽ tự sử dụng nó.
Bản Demo Game
Mã nguồn đã được mở, và các gói cài đặt đã sẵn sàng:





