TI-82/83/83+ 계산기용 Drugwars (2011)
(gist.github.com/mattmanning)- 1980년대 IBM PC용 BASIC 게임을 기반으로 한 거래 시뮬레이션 게임으로, TI-82·83·83+ 계산기에서 TI-BASIC으로 실행되는 버전
- 플레이어는 여섯 도시를 이동하며 마약을 사고팔고 빚을 갚으며 한 달간 최대 수익을 추구, 무작위 사건과 경찰 추격이 포함된 구조
- 커뮤니티는
.8xp파일 공유, TI CONNECT 전송, TI-Coder 변환 등 설치·실행 방법을 활발히 논의하며 다양한 수정 버전을 제작 - 코드 분석을 통해 변수 중복 사용으로 인한 버그와 무한 수익 루프 등 논리 오류가 발견되어, 여러 사용자가 이를 수정하고 TI-84 CE 호환 버전을 공개
- 이후 C/SDL 리메이크, Pico-8 및 C# 포팅, Z80 콘솔 이식 등으로 발전하며, 고전 계산기 게임 복원 프로젝트로 커뮤니티가 확장됨
TI-82/83/83+용 Drugwars 게임 개요
- TI-82, TI-83, TI-83+ 계산기에서 실행되는 Drugwars는 1980년대 IBM PC용 BASIC 게임을 기반으로 한 거래 시뮬레이션 게임
- 플레이어는 마약을 사고팔며 대부업자에게 진 빚을 갚고, 한 달 동안 가능한 많은 돈을 버는 것이 목표
- 게임은 TI-BASIC 언어로 작성되어 있으며,
Lbl,Goto,Menu,Disp명령어를 중심으로 구성
- 게임 시작 시 초기 자금, 부채, 인벤토리, 트렌치코트 용량 등의 변수 초기화가 이루어짐
- 예:
2000→Z(현금),5000→Y(부채),100→K(가용 공간) 등 - “ORIGINAL GAME FOR IBM BY JOHN E. DELL” 문구가 표시되어 원작 출처를 명시
- 예:
-
게임 진행 구조
- 플레이어는 브롱크스, 게토, 센트럴파크, 맨해튼, 코니아일랜드, 브루클린 등 여섯 도시를 이동하며 거래 수행
-
Menu("DRUGWAR!", "SEE PRICES", "BUY", "SELL", "JET", "SEE LOAN SHARK", "VISIT BANK")메뉴를 통해 행동 선택 - 각 약물(코카인, 헤로인, LSD, 대마초, 스피드, 루드)의 가격은 매일 무작위로 변동
-
이벤트 시스템
-
rand함수를 이용해 무작위 사건 발생- 경쟁 딜러의 덤핑 판매, 경찰 급습, 가격 폭등, 지하철 강도 피해 등
- 예: “YOU WERE MUGGED IN THE SUBWAY!” 발생 시 현금의 1/3 손실
- 일정 조건에서 무기 구매, 트렌치코트 업그레이드, 은행 거래, 대부업자 상환 가능
-
-
전투 및 경찰 추격
- 일정량 이상의 마약을 보유하면 경찰(
OFFICER HARDASS)이 추격 - 메뉴에서 RUN 또는 FIGHT 선택 가능
- 무기가 없으면 도망만 가능하며, 체력(
J)이 50 이상이면 사망 처리 - 경찰을 모두 처치하면 현금 보상 획득
- 일정량 이상의 마약을 보유하면 경찰(
-
게임 종료 및 점수 계산
- 31일이 지나면 게임 종료
- 점수는
(V+Z-Y)를 기반으로 계산 후 1~100 범위로 환산 - “YOUR SCORE (ON A SCALE OF 1 TO 100)” 메시지와 함께 결과 표시
커뮤니티 논의 및 개선 버전 공유
- TI-82/83/83+용 Drugwars 게임 설치 및 실행 방법에 대한 활발한 논의가 이어짐
- 계산기 내 BASIC 인터프리터(PRGM → New)를 통해 직접 코드를 입력하거나, TI-Coder를 이용해
.8xp파일로 변환 후 전송 가능 - 변환 시
≥를>=,→를->,θ를0으로 바꾸는 등의 수정 필요 - TI CONNECT나 TI-83용 USB 어댑터를 사용해 PC에서 계산기로 파일 전송 가능
- 계산기 내 BASIC 인터프리터(PRGM → New)를 통해 직접 코드를 입력하거나, TI-Coder를 이용해
-
gammalogic의 조언
- TI-83용 USB 어댑터를 구입해 PC에서 게임을 다운로드하거나, 소스 코드를 직접 입력하는 두 가지 방법 제시
- 일부 어댑터는 Windows XP용 드라이버를 사용하므로 최신 Windows에서는 호환성 문제가 있을 수 있음
- Linux나 Unix 기반의 자유 소프트웨어 드라이버 존재 가능성 언급
-
ileathan의 .8xp 파일 제공
- TI-Coder로 생성한
.8xp파일을 https://t7.vc/dl/DRUGWARS.8xp 링크로 공유 - TI CONNECT와 USB 어댑터를 이용해 계산기로 전송 가능
- TI-Coder로 생성한
-
darth-crunchus의 수정 및 개선
- TI-Coder 변환 시 부등호 기호 오류와 변수명 대소문자 문제를 지적
- Lbl 3, Lbl 4의 조건문을 BASIC 편집기에서 수정해야 정상 작동
- TI-84 Plus CE에서 완전 작동하도록 수정하며 무작위 이벤트(경찰견, 브라우니 등), 무기 가격, 트렌치코트 업그레이드, 저장공간 랜덤화 등을 복원
- 최종 코드 크기는 6310B, 이후 업데이트 버전에서는 11429B까지 확장
- DOS 원작에 가깝게 만들기 위해 rand( 함수의 시드(random seeding) 기능 추가
- 최신 버전의 소스는 https://pastebin.com/4dUuw0BR에 공개
-
TI-BASIC 입력 관련 논의
- alphanumeric 입력 처리에 대한 논의에서 TI-BASIC이 문자열을 가변 길이로 처리할 수 있음을 언급
- 변수에 문자를 입력하면 해당 문자의 값이 변수로 전달되는 방식으로 작동
-
호환성과 실행 문제
- TI-84 Plus CE 및 CE Python 모델에서도 수정 없이 실행 가능
- 일부 사용자는 구매/판매 시 입력 오류로 MirageOS로 되돌아가는 문제를 보고
-
추가 포팅 및 아이디어
- C# 콘솔 앱 버전으로 재작성하려는 계획 제시
- Pico-8 버전을 직접 작성했다는 사용자 등장
- Android나 PC용 이식에 대한 관심도 언급됨
코드 구조 및 버그 분석
-
tibbon의 TI-83 BASIC 변수 재사용 분석
- 변수 N이 두 가지 용도로 중복 사용됨
-
헤로인 재고량:
0→N,(N+G)→N,(N-G)→N -
위치 추적:
2→N(Bronx),1→N(기타 지역)
-
헤로인 재고량:
- 이로 인해 다음과 같은 논리적 버그 발생
- 이동 시 헤로인 수량이 변경됨 (Bronx로 이동 시 N=2 → 헤로인 2개 보유로 인식)
- 헤로인 거래 시 위치 값이 덮어써져 Bronx 판정이 잘못됨
- N=0 상태에서는 Bronx/비-Bronx 체크가 모두 실패해 은행·대부업자 접근 제한이 해제됨
- Bronx로 이동 시 자동으로 헤로인 2개가 생겨 무한 수익 루프 가능
- 재고 계산식
(T-M-N-O-P-Q-R)→K가 위치값을 사용해 저장공간 계산 오류 발생
- 변수 N이 두 가지 용도로 중복 사용됨
-
주요 악용 사례
- 무제한 은행/대부업자 접근: N=0 상태에서 지역 제한 우회
- 무한 헤로인 생성: Bronx 이동 시 자동 생성된 2개를 반복 판매
- 인벤토리 불일치: 위치값 덮어쓰기 때문에 트렌치코트 용량 초과 가능
원본 코드 출처 및 역사적 배경
-
gammalogic은 IBM BASIC 원본 코드 기반 여부를 질문했고, mattmanning은 “TI 버전은 IBM 게임을 기반으로 하지만, 다른 플랫폼으로 컴파일은 불가능하며 게임 규칙과 로직 참고용으로 적합”이라 언급
- 그는 인터넷에서 코드를 발견해 문자 포맷만 정리했다고 설명
- 원작자 John Dell은 TRS-80용 게임 Taipan에서 영감을 받아 Drugwars를 제작
- Taipan의 Apple II용 BASIC 코드는 taipangame.com/BASIC.txt에서 확인 가능
커뮤니티 확장 및 후속 활동
- 일부 사용자는 TI-84+에서 실행 오류를 보고했으나, 다른 사용자는 TI-83+ 및 TI-84+ 에뮬레이터에서 정상 실행 확인
-
::를 코드 첫 줄에 추가해야 MirageOS에서 인식된다는 팁 공유 - 직접 계산기에서
prgm -> new로 코드를 입력해도 실행 가능
-
- 사용자 DaSovietPotato가 TI-84 호환 버그를 수정한 버전을 별도 저장소에 공개
-
gammalogic은 C/SDL로 리메이크 후 Z80 기반 콘솔(마스터시스템, NES 등) 포팅 계획 공유
- 초기 C/SDL 데모에서는 NES 해상도 기반 인터페이스와 도시·약물 교체 기능 구현
- 향후 “Drugwars 2.0” 버전으로 확장 계획 언급
- 일부 사용자는 고등학교 시절 즐겼던 향수를 언급하며, TI-83용 케이블을 이용해 다시 설치하려는 시도 공유
- 커뮤니티는 코드 분석과 BASIC 학습을 통해 직접 포팅을 권장, TI-83 매뉴얼 참조를 추천
- 2024~2026년까지 지속적으로 댓글이 추가되며, TI-84 CE, Pico-8, C# 포팅 등 다양한 플랫폼 확장 시도가 이루어짐
- 일부 사용자는
.8xp파일 요청 및 공유를 이메일로 주고받음 - 커뮤니티 내에서 고전 계산기 게임 복원 및 개선 프로젝트로 발전 중임
- 일부 사용자는
Hacker News 의견들
-
TI-83 Basic이 내가 처음으로 완전히 익혔다고 느낀 프로그래밍 언어였음
대학 1학년 때는 TI-Basic으로 코드를 짜고 C++로 번역하곤 했음. 당시 Drugwars와 Bowling은 정말 인상적인 게임이었음
이후 z80 어셈블리를 발견했을 때는 마법 같았음. 아버지의 대학 연구실(2개의 T1 인터넷 회선이 있던 곳)에 가서 새로 나온 어셈블리 게임을 다운로드하던 기억이 남음. Bill Nagel의 Turbo Breakout, Snake, AShell, Penguins, 그리고 회색조 Mario는 충격적이었음. 하지만 가장 완성도 높고 반복 플레이성이 좋았던 건 TI-86용 Sqrxz와 ZTetris였다고 생각함.
한 번은 게임의 z80 어셈블리 소스를 인쇄해 한 뼘 두께로 들고 다니며 이해하려고 했음.
또, 무작위 16진수 코드를 입력해 실행시키는 게 이상하게도 재미있었음. 가끔 계산기가 벽돌이 되기도 했지만, 배터리를 빼면 다시 살아났음
TI 웹사이트 전쟁 기억하는 사람? TI Files(나중에 TI Philes)가 “ticalc.org보다 훨씬 멋지다”고 했지만, 결국 지금까지 남은 건 ticalc.org임- ticalc.org가 아직도 살아 있다는 게 놀라움. Joltima가 내가 어셈블리를 배우게 된 계기였음. TI-86에서 턴제 전투가 가능한 완전한 RPG라니, 시대를 앞서갔던 작품이었음
- Bill Nagel이라는 이름은 12살의 나에게 경외심을 줬음. TI Basic밖에 모르던 시절, 그가 어떻게 그런 게임을 만들었는지 이해할 수 없었음
- 나도 ticalc.org를 자주 확인하며 Zelda: Link’s Awakening 포트 데모 업데이트를 기다렸음
- 내 경우는 Andreas Ess의 PlaneJump가 계기였음. 그걸 통해 어셈블리와 데모씬(demoscene) 세계를 알게 되었고, 완전히 빠져들었음
-
이 게임은 내게 정말 큰 의미가 있음. 고등학교 때 완전히 중독되어 있었고, 그 경험이 내 인생에 남았음.
Drugwars는 내 열정 프로젝트 Farmhand의 직접적인 영감이 되었음
이렇게 다시 보게 되어 정말 기쁨- 모두가 TI 계산기에 이 게임과 Mario 클론을 깔았을 때, 나는 Palm에서 영감을 받아 만든 Space Trader를 했음
- Algebra 2 수업은 사실상 Drugwars와 Snake 수업이었음. 다행히 한 학년 앞서 있어서 재수강은 면했음
- 나도 이 게임을 너무 좋아해서 수학 공부 대신 했음. TI-83+의 다른 앱 덕분에 겨우 시험을 통과했음.
지금은 AI 시대가 와서 다들 작은 컴퓨터 없이는 아무것도 못 하게 된 걸 보니 묘한 정당화 느낌이 듦 - 게임에 중독된 게 오히려 좋은 일일 수도 있음 ;-)
-
내 “재미있는 사실”은 TI-83+ 매뉴얼을 읽으며 프로그래밍을 시작했다는 것임
9학년 내내 TI-BASIC과 그래프 함수를 이용해 Street Fighter 스틱 피겨 버전을 만들었음.
화면이 8줄밖에 안 보여서 나중엔 종이에 코드를 짜기도 했음.
두 명이 같은 계산기에서 플레이할 수 있는 구조를 GOTO와 LABEL로 구현한 게 지금 생각해도 신기함.
가장 좋아하는 최적화는 머리를 원 대신 육각형으로 바꾼 것 — 선 6개만 그리면 되니까 훨씬 빨랐음- 나도 7학년 생일 때 TI-86을 원했음. 프로그래밍이 가능했기 때문임.
9학년 때는 대수 문제를 단계별로 풀이해주는 프로그램을 만들었는데, 시험 중에 P1급 버그를 발견했음.
숙제에서는 완벽히 작동했는데 시험 문제에서만 깨졌음. 결국 시험보다 디버깅에 더 많은 시간을 썼음.
지금 생각하면 수학보다 엣지 케이스를 배우는 수업이었음 - 나도 TI-83+ 매뉴얼로 시작했음. 메뉴 기반 게임과 숙제 도우미를 만들다가 z80 어셈블리로 넘어갔음.
지금은 모바일 개발을 하고 있음. 주머니 속에 내가 만든 걸 넣고 다닐 수 있다는 게 늘 좋았음 - 나는 TI-84로 시작했음. 완벽한 “AI”가 있는 틱택토 게임을 만들었는데, “플레이어 수: 0”을 입력할 수도 있었음
관련 영상 - 내 경우는 TI-81에서 Scorched Earth 클론을 만들었음. 멀티플레이, 바람, 랜덤 지형 생성까지 구현했음.
2.4KB 전부와 모든 변수 슬롯을 다 써버렸음
- 나도 7학년 생일 때 TI-86을 원했음. 프로그래밍이 가능했기 때문임.
-
이 게임의 기원은 1984년 DOS에서 시작되었음
Drug Wars (video game) - Wikipedia- 이 버전의 ‘Ludes’를 보면 확실히 1984년 느낌임
- 이후에는 BBS 도어 게임으로 발전했음
관련 아카이브
-
1900년대 후반 9학년 때 친구가 있었는데, 그는 TI-82로 픽셀 아트 포르노를 만들 정도로 재능 있는 아티스트였음
각 장면을 두 프레임으로 반복시켜 놀라울 정도로 현실적인 움직임을 표현했음- “1900년대 후반”이라니, 그 표현이 너무 아픔
- 그게 어느 도시에서 일어난 일인지 첫 글자만이라도 궁금함
- 이런 걸 보면 청소년의 창의력은 놀라움. 농담이지만, 이런 이유로 펜과 물감도 금지해야 할지도 모름
-
이 게임은 HP 48 시리즈에서도 실행 가능함
HP 48용 Drugwars
RPN 만세- RPN 만세
-
내 첫 프로그래밍 경험은 TI-83에서였음.
수업 시간에 친구들에게 선택형 어드벤처 게임을 하게 했던 기억이 아직도 생생함 -
TI-83+에서 이 게임을 정말 자주 했음.
그 계산기 덕분에 프로그래밍을 배웠고, TI-BASIC으로 수학/과학용 계산 프로그램과 간단한 게임을 만들었음.
지금은 문법이 가물가물하지만, 당시엔 꽤 능숙했음- 나도 똑같은 시작이었음. 계산기에서 장난치다 프로그래밍의 개념을 이해하게 되었음
-
코드에서 “If Zù500” 같은 표현을 보고 왜 ù 문자가 쓰였는지 궁금했음
ChatGPT에 따르면 TI-BASIC에서 ≤의 바이트 값이 ANSI/Windows-1252에서 ù(0xF9)와 같다고 함. 즉, 인코딩 문제였음 -
와, 정말 추억 폭발임
9학년 때 과학 선생님이 내가 계산기로 뭘 하는지 물었을 때, 정학당할까 봐 게임을 재빨리 지웠던 기억이 있음
대신 Wing Commander Privateer 같은 게임을 만든다고 보여줘서 무사히 넘어갔음