1 điểm bởi GN⁺ 2026-03-22 | 1 bình luận | Chia sẻ qua WhatsApp
  • Một trò chơi mô phỏng giao dịch dựa trên game BASIC cho IBM PC thập niên 1980, với phiên bản chạy bằng TI-BASIC trên máy tính TI-82·83·83+
  • Người chơi di chuyển qua sáu khu vực để mua bán ma túy, trả nợ và tối đa hóa lợi nhuận trong một tháng, với các sự kiện ngẫu nhiên và những màn bị cảnh sát truy đuổi
  • Cộng đồng thảo luận sôi nổi về cách cài đặt và chạy game như chia sẻ tệp .8xp, truyền bằng TI CONNECT, chuyển đổi bằng TI-Coder, đồng thời tạo ra nhiều bản chỉnh sửa khác nhau
  • Qua phân tích mã nguồn, người ta phát hiện các lỗi logic như bug do tái sử dụng biến và vòng lặp lợi nhuận vô hạn; nhiều người dùng đã sửa chúng và công bố bản tương thích TI-84 CE
  • Về sau dự án tiếp tục phát triển thành bản làm lại bằng C/SDL, bản port Pico-8 và C#, bản chuyển sang máy chơi game Z80, qua đó mở rộng cộng đồng thành một dự án phục dựng game máy tính cầm tay cổ điển

Tổng quan về game Drugwars cho TI-82/83/83+

  • Drugwars chạy trên máy tính TI-82, TI-83, TI-83+ là một trò chơi mô phỏng giao dịch dựa trên game BASIC cho IBM PC từ thập niên 1980
    • Người chơi mua bán ma túy để trả khoản nợ với chủ nợ cho vay nặng lãi, với mục tiêu kiếm được nhiều tiền nhất có thể trong một tháng
    • Game được viết bằng ngôn ngữ TI-BASIC, xây dựng chủ yếu quanh các lệnh Lbl, Goto, Menu, Disp
  • Khi bắt đầu, game sẽ khởi tạo biến cho vốn ban đầu, nợ, kho đồ, dung lượng áo trench coat, v.v.
    • Ví dụ: 2000→Z (tiền mặt), 5000→Y (nợ), 100→K (không gian khả dụng)
    • Câu “ORIGINAL GAME FOR IBM BY JOHN E. DELL” được hiển thị để ghi rõ nguồn gốc tác phẩm gốc
  • Cấu trúc tiến trình game

    • Người chơi thực hiện giao dịch khi di chuyển giữa sáu khu vực gồm Bronx, Ghetto, Central Park, Manhattan, Coney Island, Brooklyn
    • Hành động được chọn qua menu Menu("DRUGWAR!", "SEE PRICES", "BUY", "SELL", "JET", "SEE LOAN SHARK", "VISIT BANK")
    • Giá của từng loại hàng (cocaine, heroin, LSD, marijuana, speed, ludes) thay đổi ngẫu nhiên mỗi ngày
  • Hệ thống sự kiện

    • Các sự kiện ngẫu nhiên được tạo bằng hàm rand
      • Chẳng hạn như đối thủ xả hàng giá rẻ, cảnh sát đột kích, giá tăng vọt, bị cướp trên tàu điện ngầm
      • Ví dụ: khi xuất hiện “YOU WERE MUGGED IN THE SUBWAY!”, người chơi mất 1/3 số tiền mặt
    • Trong một số điều kiện nhất định, có thể mua vũ khí, nâng cấp trench coat, giao dịch ngân hàng, trả nợ cho chủ nợ
  • Chiến đấu và cảnh sát truy đuổi

    • Khi sở hữu quá một lượng ma túy nhất định, người chơi sẽ bị cảnh sát (OFFICER HARDASS) truy đuổi
    • Trong menu có thể chọn RUN hoặc FIGHT
    • Nếu không có vũ khí thì chỉ có thể bỏ chạy; khi thể lực (J) từ 50 trở lên thì sẽ bị xử chết
    • Nếu hạ được toàn bộ cảnh sát, người chơi nhận thưởng bằng tiền mặt
  • Kết thúc game và tính điểm

    • Sau 31 ngày, game kết thúc
    • Điểm được tính dựa trên (V+Z-Y) rồi quy đổi về thang từ 1 đến 100
    • Kết quả được hiển thị kèm thông báo “YOUR SCORE (ON A SCALE OF 1 TO 100)”

Thảo luận cộng đồng và chia sẻ các phiên bản cải tiến

  • Có nhiều thảo luận sôi nổi về cách cài đặt và chạy Drugwars trên TI-82/83/83+
    • Có thể nhập trực tiếp mã qua trình thông dịch BASIC trên máy tính (PRGM → New), hoặc dùng TI-Coder để chuyển sang tệp .8xp rồi truyền sang máy
    • Khi chuyển đổi cần sửa như đổi thành >=, thành ->, θ thành 0
    • Có thể dùng TI CONNECT hoặc bộ chuyển USB cho TI-83 để truyền tệp từ PC sang máy tính
  • Lời khuyên từ gammalogic

    • Đưa ra hai cách: mua bộ chuyển USB cho TI-83 để tải game từ PC, hoặc tự nhập mã nguồn thủ công
    • Một số bộ chuyển dùng driver cho Windows XP, nên có thể gặp vấn đề tương thích trên các bản Windows mới hơn
    • Cũng đề cập khả năng tồn tại driver phần mềm tự do cho Linux hoặc Unix
  • ileathan cung cấp tệp .8xp

    • Chia sẻ tệp .8xp tạo bằng TI-Coder tại liên kết https://t7.vc/dl/DRUGWARS.8xp
    • Có thể truyền sang máy tính bằng TI CONNECT và bộ chuyển USB
  • darth-crunchus chỉnh sửa và cải tiến

    • Chỉ ra lỗi ký hiệu bất đẳng thức khi chuyển bằng TI-Coder và vấn đề chữ hoa/chữ thường của tên biến
    • Cần sửa các câu điều kiện ở Lbl 3, Lbl 4 trong trình soạn thảo BASIC thì game mới hoạt động đúng
    • Chỉnh để chạy hoàn chỉnh trên TI-84 Plus CE, đồng thời khôi phục các sự kiện ngẫu nhiên (chó nghiệp vụ, brownies, v.v.), giá vũ khí, nâng cấp trench coat, ngẫu nhiên hóa dung lượng chứa
    • Kích thước mã cuối cùng là 6310B, và ở bản cập nhật sau đã mở rộng đến 11429B
    • Để gần hơn với bản DOS gốc, đã thêm chức năng seed cho rand( (random seeding)
    • Mã nguồn bản mới nhất được công bố tại https://pastebin.com/4dUuw0BR
  • Thảo luận về nhập liệu trong TI-BASIC

    • Trong thảo luận về xử lý nhập alphanumeric, có nhắc rằng TI-BASIC có thể xử lý chuỗi với độ dài biến thiên
    • Khi nhập ký tự vào biến, giá trị của ký tự đó sẽ được truyền vào biến tương ứng
  • Tương thích và vấn đề khi chạy

    • Game cũng chạy được mà không cần chỉnh sửa trên TI-84 Plus CE và các mẫu CE Python
    • Một số người dùng báo lỗi nhập khi mua/bán khiến chương trình quay về MirageOS
  • Các bản port và ý tưởng bổ sung

    • Có kế hoạch viết lại dưới dạng ứng dụng console C#
    • Có người dùng cho biết đã tự viết phiên bản Pico-8
    • Sự quan tâm tới việc port sang Android hoặc PC cũng được nhắc đến

Phân tích cấu trúc mã và lỗi

  • Phân tích việc tái sử dụng biến trong TI-83 BASIC của tibbon

    • Biến N bị dùng trùng cho hai mục đích khác nhau
      1. Số lượng heroin tồn kho: 0→N, (N+G)→N, (N-G)→N
      2. Theo dõi vị trí: 2→N (Bronx), 1→N (khu vực khác)
    • Điều này gây ra các lỗi logic sau
      • Khi di chuyển, số lượng heroin bị thay đổi (chuyển đến Bronx thì N=2 → bị hiểu là đang có 2 gói heroin)
      • Khi giao dịch heroin, giá trị vị trí bị ghi đè nên việc xác định Bronx trở nên sai lệch
      • Khi N=0, cả kiểm tra Bronx và không phải Bronx đều thất bại, khiến giới hạn truy cập ngân hàng/chủ nợ bị vô hiệu hóa
      • Khi đến Bronx, tự động xuất hiện 2 gói heroin, tạo điều kiện cho vòng lặp lợi nhuận vô hạn
      • Công thức tính tồn kho (T-M-N-O-P-Q-R)→K dùng nhầm giá trị vị trí, gây sai lệch tính toán không gian chứa
  • Các kiểu khai thác chính

    1. Truy cập ngân hàng/chủ nợ không giới hạn: vượt qua giới hạn khu vực khi N=0
    2. Sinh heroin vô hạn: liên tục bán 2 gói tự sinh mỗi lần tới Bronx
    3. Lệch tồn kho: do giá trị vị trí bị ghi đè nên có thể vượt quá sức chứa của trench coat

Nguồn gốc mã gốc và bối cảnh lịch sử

  • gammalogic đặt câu hỏi liệu đây có dựa trên mã IBM BASIC gốc hay không, và mattmanning trả lời rằng “bản TI dựa trên game IBM, nhưng không thể biên dịch sang nền tảng khác; phù hợp để tham khảo luật chơi và logic”
    • Anh cho biết đã tìm thấy mã trên Internet và chỉ sắp xếp lại định dạng ký tự
  • Tác giả bản gốc John Dell đã tạo Drugwars với cảm hứng từ game Taipan trên TRS-80

Mở rộng cộng đồng và các hoạt động tiếp nối

  • Một số người dùng báo lỗi khi chạy trên TI-84+, nhưng người khác xác nhận game chạy bình thường trên TI-83+ và trình giả lập TI-84+
    • Có mẹo chia sẻ rằng cần thêm :: vào dòng đầu của mã để MirageOS nhận diện
    • Cũng có thể chạy bằng cách tự nhập mã trên máy tính qua prgm -> new
  • Người dùng DaSovietPotato đã công bố một phiên bản sửa lỗi tương thích TI-84 trong kho riêng
  • gammalogic chia sẻ kế hoạch làm lại bằng C/SDL rồi port sang các máy console dùng Z80 (Master System, NES, v.v.)
    • Bản demo C/SDL ban đầu đã triển khai giao diện dựa trên độ phân giải NES cùng chức năng thay đổi thành phố và mặt hàng
    • Về sau còn nhắc tới kế hoạch mở rộng thành phiên bản “Drugwars 2.0”
  • Một số người dùng nhắc lại ký ức thời trung học với game này và chia sẻ nỗ lực cài lại bằng cáp cho TI-83
    • Cộng đồng khuyến khích tự port thông qua phân tích mã và học BASIC, đồng thời khuyên tham khảo tài liệu hướng dẫn TI-83
  • Từ 2024 đến 2026 vẫn liên tục có thêm bình luận, với nhiều nỗ lực mở rộng sang TI-84 CE, Pico-8, C# và các nền tảng khác
    • Một số người dùng còn trao đổi yêu cầu/chia sẻ tệp .8xp qua email
    • Dự án đang dần phát triển thành một hoạt động phục dựng và cải tiến game máy tính cầm tay cổ điển trong cộng đồng

1 bình luận

 
GN⁺ 2026-03-22
Ý kiến trên Hacker News
  • TI-83 Basic là ngôn ngữ lập trình đầu tiên mà tôi cảm thấy mình đã thật sự thành thạo
    Năm nhất đại học, tôi thường viết mã bằng TI-Basic rồi dịch sang C++. Hồi đó Drugwars và Bowling là những trò chơi thực sự gây ấn tượng mạnh
    Sau này khi phát hiện ra hợp ngữ z80, nó giống như phép thuật vậy. Tôi vẫn nhớ đã đến phòng nghiên cứu ở trường đại học của bố tôi (nơi có 2 đường truyền Internet T1) để tải về những game hợp ngữ mới ra. Turbo Breakout, Snake, AShell, Penguins của Bill Nagel, và Mario thang độ xám đều gây choáng ngợp. Nhưng tôi nghĩ những game hoàn thiện nhất và có khả năng chơi đi chơi lại tốt nhất là Sqrxz và ZTetris cho TI-86.
    Có lần tôi còn in mã nguồn hợp ngữ z80 của một trò chơi ra, dày cả gang tay, rồi mang theo người để cố hiểu nó.
    Ngoài ra, việc nhập các mã hex ngẫu nhiên rồi chạy chúng lại kỳ lạ thay rất vui. Thỉnh thoảng máy tính bị brick, nhưng tháo pin ra thì nó sống lại
    Có ai còn nhớ cuộc chiến giữa các website TI không? TI Files (sau này là TI Philes) từng nói rằng “ngầu hơn ticalc.org rất nhiều”, nhưng rốt cuộc thứ còn tồn tại đến giờ lại là ticalc.org

    • Thật đáng kinh ngạc là ticalc.org vẫn còn sống. Joltima là lý do khiến tôi học hợp ngữ. Một game RPG hoàn chỉnh với chiến đấu theo lượt trên TI-86, đúng là đi trước thời đại
    • Cái tên Bill Nagel từng khiến tôi lúc 12 tuổi cảm thấy kính nể. Khi đó tôi chỉ biết TI Basic, nên hoàn toàn không hiểu ông ấy đã làm ra những trò như vậy bằng cách nào
    • Tôi cũng hay vào ticalc.org để chờ các bản cập nhật demo của bản port Zelda: Link’s Awakening
    • Với tôi thì bước ngoặt là PlaneJump của Andreas Ess. Nhờ nó mà tôi biết đến thế giới hợp ngữ và demoscene, rồi bị cuốn hẳn vào đó
  • Trò này thực sự có ý nghĩa rất lớn với tôi. Hồi trung học tôi đã nghiện nó hoàn toàn, và trải nghiệm đó còn theo tôi đến tận bây giờ.
    Drugwars là nguồn cảm hứng trực tiếp cho dự án đam mê của tôi là Farmhand
    Thật vui khi lại được thấy nó ở đây

    • Khi ai cũng cài trò này và các bản nhái Mario lên máy tính TI, thì tôi lại chơi Space Trader lấy cảm hứng từ Palm
    • Giờ Đại số 2 về cơ bản chính là giờ Drugwars và Snake. May mà tôi học vượt trước một năm nên không phải học lại
    • Tôi cũng mê trò này đến mức chơi thay vì học toán. Nhờ các ứng dụng khác trên TI-83+ mà tôi mới qua được kỳ thi.
      Giờ bước vào thời đại AI, thấy ai cũng không làm gì nổi nếu thiếu một chiếc máy tính nhỏ, tôi lại có cảm giác như mình được minh oan phần nào
    • Nghiện game đôi khi lại là chuyện tốt ;-)
  • “Fun fact” của tôi là tôi bắt đầu lập trình bằng cách đọc sách hướng dẫn của TI-83+
    Suốt năm lớp 9, tôi dùng TI-BASIC và các hàm đồ thị để làm một phiên bản Street Fighter người que.
    Màn hình chỉ hiện được 8 dòng nên về sau tôi còn phải viết mã ra giấy.
    Giờ nghĩ lại vẫn thấy lạ là tôi đã dùng GOTO và LABEL để làm cơ chế cho hai người chơi trên cùng một máy tính.
    Tối ưu hóa tôi thích nhất là đổi cái đầu từ hình tròn thành lục giác — vì chỉ cần vẽ 6 đoạn thẳng nên chạy nhanh hơn nhiều

    • Tôi cũng từng muốn có một chiếc TI-86 vào dịp sinh nhật năm lớp 7, vì nó có thể lập trình được.
      Đến lớp 9, tôi làm một chương trình giải từng bước các bài đại số, rồi phát hiện ra một bug mức P1 ngay trong lúc thi.
      Nó chạy hoàn hảo với bài tập về nhà nhưng lại hỏng đúng ở đề thi. Cuối cùng tôi còn tốn nhiều thời gian debug hơn làm bài.
      Nghĩ lại thì đó giống một tiết học về edge case hơn là về toán
    • Tôi cũng bắt đầu với sách hướng dẫn TI-83+. Từ các game chạy bằng menu và công cụ hỗ trợ bài tập, tôi chuyển sang hợp ngữ z80.
      Giờ tôi làm phát triển di động. Tôi luôn thích cảm giác có thể mang thứ mình tự làm ra trong túi
    • Tôi bắt đầu với TI-84. Tôi từng làm một game cờ caro với “AI” hoàn hảo, nhưng cũng cho phép nhập “số người chơi: 0”
      Video liên quan
    • Trường hợp của tôi là trên TI-81, tôi làm một bản nhái Scorched Earth. Có cả multiplayer, gió, và tạo địa hình ngẫu nhiên.
      Tôi dùng hết sạch 2.4KB và toàn bộ các slot biến
  • Nguồn gốc của trò này bắt đầu từ DOS năm 1984
    Drug Wars (video game) - Wikipedia

    • Nhìn bản ‘Ludes’ này là thấy đúng chất năm 1984
    • Sau đó nó còn phát triển thành một BBS door game
      Kho lưu trữ liên quan
  • Hồi lớp 9 vào cuối thế kỷ 20, tôi có một người bạn là nghệ sĩ cực kỳ có năng khiếu, đến mức làm cả pixel art khiêu dâm trên TI-82
    Cậu ấy cho mỗi cảnh lặp giữa hai khung hình để tạo chuyển động chân thực đến đáng kinh ngạc

    • “Cuối thế kỷ 20” nghe đau thật đấy
    • Tôi chỉ muốn biết nó xảy ra ở thành phố nào thôi, ít nhất là chữ cái đầu tiên
    • Những chuyện như thế này cho thấy sức sáng tạo của tuổi teen thật đáng kinh ngạc. Nói đùa thôi, nhưng biết đâu vì vậy mà bút và màu vẽ cũng nên bị cấm
  • Trò này cũng chạy được trên dòng HP 48
    Drugwars cho HP 48
    RPN muôn năm

    • RPN muôn năm
  • Trải nghiệm lập trình đầu tiên của tôi là trên TI-83.
    Tôi vẫn còn nhớ rất rõ chuyện đã cho bạn bè chơi một game phiêu lưu lựa chọn nhánh trong giờ học

  • Tôi đã chơi trò này rất nhiều trên TI-83+.
    Chính chiếc máy tính đó khiến tôi học lập trình, và tôi đã dùng TI-BASIC để làm các chương trình tính toán cho toán/lý-hóa cùng vài game đơn giản.
    Bây giờ tôi không còn nhớ rõ cú pháp nữa, nhưng hồi đó thì khá thành thạo

    • Tôi cũng khởi đầu y như vậy. Mò mẫm nghịch ngợm trên máy tính bỏ túi rồi dần hiểu được các khái niệm lập trình
  • Tôi thấy trong mã có những biểu thức như “If Zù500” và thắc mắc tại sao lại dùng ký tự ù
    Theo ChatGPT, trong TI-BASIC, giá trị byte của ≤ trùng với ù(0xF9) trong ANSI/Windows-1252. Tức là vấn đề về mã hóa

  • Wow, đúng là bùng nổ hoài niệm
    Tôi nhớ hồi lớp 9, khi thầy giáo khoa học hỏi tôi đang làm gì với chiếc máy tính, tôi đã vội xóa game đi vì sợ bị đình chỉ học
    Thay vào đó tôi cho thầy xem một thứ giống như đang làm game kiểu Wing Commander Privateer, nên cuối cùng vẫn thoát nạn