| 리버스 엔지니어링 : | |
|---|---|
| 마무리 : | |
| 위치 독립 : |
더 자세한 진행률 및 크라우드 펀딩에 대한 정보는 홈페이지를 확인하십시오!
이 프로젝트는 Zun Soft (현재 Team Shanghai Alice )의 첫 5 개의 Touhou Project 게임의 소스 코드를 완벽하게 재구성하는 것을 목표로합니다.
문제의 원래 게임은 다음과 같습니다.
우리는 바이너리 만 가지고 있기 때문에 Zun이 변수와 함수를 어떻게 지정했는지 알 수 없으며 원래 코드가 둘러싸인 의견을 알 수 없습니다. 따라서 완벽 함 은 Rec98 저장소의 코드에서 편집 된 이진이 Zun의 원래 빌드와 구별 할 수 없으므로 원래 코드가 이렇게 보일 수 없다는 것을 반증 할 수 없다는 것을 의미합니다. 이 속성은 길을 따라 모든 git 커밋에 대해 유지됩니다.
보존 각도와 그 결과 게임의 역학에 대한 깊은 통찰력 외에도 코드는 모든 유형의 모드 또는 커뮤니티가 개발 한 PC-98 플랫폼에 대한 기초 역할을 할 수 있습니다. 이것이 또한 REC98이 순수한 대결을 통해 읽기 쉽고 이해할 수있는 코드를 평가하는 이유이기도합니다.
Pytouhou 스타일의 블랙 박스 재 구현과 달리 PC-98 게임에 대해 전체 디 컴파일을 통한 moddability를 달성하는 것이 몇 가지가 있습니다.
크라우드 펀딩이 지속적인 지원을 제공 한 이후로 진보는 꾸준히되었습니다. 2022 년 8 월에 완전히 완료된 TH01의 해석은 나머지 게임은 시간 문제 일뿐입니다.
수년에 걸쳐,이 프로젝트는 원래 컴파일러와 PC-98 하드웨어에 대한 깊은 이해로이 컴파일 자체가 상당히 기계적이되었습니다. 이 프로젝트가 지원하고 흥미로운 작업을 수행하기에 가치가 유지되도록하기 위해 그 초점은 Zun의 원래 코드에 대한 세심한 문서화 및 검토로 더 많이 전환되었습니다. 프로젝트 블로그는 모든 결과를보다 일반적으로 읽을 수있는 방식으로 자세히 설명하고 소스 코드 재구성 자체가 이러한 게임에 대한 기본 깊은 연구의 부산물로 전환하여 주요 매력이되었습니다.
이 프로젝트는 꽤 실용적으로 시작했습니다. 이 게임의 정적 영어 패치를 개발하는 동안 5 개의 게임에서 사용되는 두 가지 주요 라이브러리를 식별하고 소스 코드도 찾았습니다. 이들은 다음과 같습니다.
ZUNSP.COM ( ZUN.COM -4 를 통해 액세스 가능)은 Promisence Soft 's SPRITE16.COM 의 브랜드화 된 버전으로, 16 색 PC-98 EGC 디스플레이 드라이버, 버전 0.04로 샘플 게임 StormySpace 와 함께 번들되었습니다. Mas 예를 들어 TH05에서는 OP.EXE 의 모든 코드의 74%, MAIN.EXE 의 모든 코드의 40%에 달합니다. 그것은 이미 우리가 처리 할 필요가없는 많은 코드입니다. 게임 전체에서 공유되는 나머지 코드를 식별하면 워크로드가 더 수용 가능한 금액으로 더 줄어 듭니다.
Dosbox-X와 Neko Project II의 디버그 에디션을 사용하면 게임을 실행할 수있는 오픈 소스 PC-9821 에뮬레이터가 있습니다. 이들은 PC-98 개발 및 실제 하드웨어에 대한 가끔 테스트에 관한 오래된 책과 함께 대부분의 하드웨어 관련 질문에 대답하는 데 도움이되었습니다.
zunsoft.com , op.exe , reiiden.exe , fuuin.exeongchk.comzuninit.com , zun_res.com , zunsoft.comop.exe , main.exe , maine.exeongchk.comzuninit.comzunsoft.comzunsp.com [-4], res_yume.com [-5]), op.exe , main.exe , mainl.exeongchk.comzuninit.com [-i], res_huma.com [-s], memchk.com [-m]), op.exe , main.exe , maine.exeongchk.comzuninit.com [-i], res_kso.com [-s], gjinit.com [-g], memchk.com [-m]), op.exe , main.exe , maine.exe교차 파일은 이전 게임에서 해당 버전과 동일합니다. ongchk.com은 Kaja의 PMD 사운드 드라이버의 일부이므로 분해 할 필요가 없습니다. zun.com의 비트 완벽한 재건을 허용하기 위해 이진을 유지하면됩니다.
이 프로젝트에는 원래 PC-98 릴리스의 자산 데이터가 포함되어 있지 않습니다. 컴파일 된 실행 파일을 실행하려면 여전히 기존 게임 사본이 필요합니다.
▶ master : Zun의 원래 코드, 모드 나 버그 픽스가없는 (여기 있습니다!)
debloated : 읽고 수정하기 쉬운 Zun 코드의 Rearchitected 버전을 읽고 수정하고 PC-98 바이너리를 더 작고 빠른 구축합니다. 팽창과 지뢰 만 제거합니다. Zun의 원래 코드의 모든 버그와 기발함이 제자리에 남아 있습니다. 포트는 해당 지점에서 시작해야하며 원래 바이너리와 유사성을 신경 쓰지 않는 모드의 권장 기반이기도합니다.
anniversary : debloated 버그를 추가로 수정하여 PC-98 플랫폼에서 더 매끄럽고 깜박 거리는 게임 플레이 경험을 달성하면서 여전히 기발한 상태를 유지합니다. 모드 및 포트 용 더 나은 시작 포트 일 수 있습니다.
BossRush
th03_no_gdc_frequency_check : GDC 클록이 5MHz로 설정된 상태에서 TH03을 실행할 수 있습니다. 원래 게임은 2.5MHz를 시행하지만 실제 하드웨어에서도 기능적으로 요구하지 않습니다.
xJeePx : Xjeepx의 2014 영어 번역 패치의 코드 변경.
th01_critical_fixes : TH01에서 두 가지 중요한 버그를 수정합니다.
th01_end_pic_optimize : TH01의 컷씬에서 원래 런타임의 50%로 이미지 블리팅 속도를 높이십시오. 주로 단일 ASM 명령어를 쓰지 않고 터보 C ++ 4.0J에서 최적의 EGC 구동 블리팅 코드에 가까워지는 방법의 예가됩니다. EGC는이 작업에 가장 적합한 도구가 아닙니다.
th01_orb_debug : TH01의 디버그 모드에서 다음 정보를 표시합니다.
th01_sariel_fixes : 원래 코드의 명확한 논리 오류로 인한 TH01 Sariel Fight에서 3 개의 스프라이트 결함을 수정합니다.
th03_real_hitbox : TH03의 충돌 비트 맵을 두 PlayFields에 렌더링합니다. 매우 재생할 수 없습니다.
TH04 Stage 5 Yuuka No-Ems Crash에 대한 수정 :
th04_noems_crash_fix : TH04 MAIN.EXE 의 자체 부과 메모리 한계를 올바른 금액으로 증가시킵니다.mem_assign_all : 모든 TH02-TH05 실행 파이브에서 자체 부과 메모리 한계를 제거하여 모딩 중에 발생할 수있는 다른 잠재적 인 메모리 충돌을 추가로 수정합니다.TH04 Kurumi Divide 오류 충돌의 해결 방법 :
th04_0_ring_ignoreth04_0_ring_as_single_bulletth04_0_ring_as_cap_bulletsth04_0_ring_as_gameoverTH04 Stage 4 Marisa Divide 오류 충돌의 해결 방법 :
th04_marisa4_crash_stillth04_marisa4_crash_moveth04_marisa4_crash_warp community_choice_fixes : 게임 플레이 또는 비주얼에 영향을 미치지 않는 모든 "명백한"버그 픽스의 조합 브랜치 :
th01_critical_fixesth03_no_gdc_frequency_checkth04_noems_crash_fix 또한 Community 투표로 선택된 TH04의 Divide Error 버그에 대한 다음 해결 방법 :
th04_0_ring_as_single_bullet (폴링 결과)th04_marisa4_crash_still (폴링 결과) Borland Turbo C ++ 4.0j
이것은 원래 사용 된 컴파일러 인 Zun 이므로이 코드를 Zun의 원래 코드에 비슷한 실행 파일로 결정적으로 컴파일 할 수있는 유일한 것입니다. Borland 는 32 비트 Wind
Rec98은 또한 터보 C ++ 4.0J를 사용하여 하드 코드 스프라이트 컨버터와 같은 빌드 파이프 라인에 사용자 정의 도구를 구축합니다. 이들은 빌드 프로세스의 일부로 기본적으로 실행해야하므로 16 비트 DOS 프로그램으로 컴파일하는 것이 비생산적으로 보일 수 있으며 64 비트 운영 체제에서 모방해야합니다. 그러나 이것은 여전히 몇 가지 이유로 의미가 있습니다.
따라서 기본 C ++ 컴파일러에 일반적으로 상당히 무거운 의존성을 추가하는 것은 의미가 없습니다.
Borland Turbo Assembler (TASM), 버전 5.0 이상, 32 비트 Windows ( TASM32.EXE )
REC98에는 아직 컴파일되지 않은 게임 코드뿐만 아니라 PC-98 Touhou의 타사 라이브러리 및 Zun의 자체 손으로 작성되지 않는 어셈블리 코드에 대한 어셈블러가 필요합니다. 고맙게도 Borland의 32 비트 어셈블러는 16 비트 코드에 사용될 수 있으며 64 비트 및 32 비트 창 모두에서 기본적으로 실행되며 16 비트 TASM.EXE 및 TASMX.EXE 도구를 능가합니다.
측면 이점으로, 기본 32 비트 Windows 도구를 사용하면 ASM 부품이 DOS 8.3 컨벤션을 준수 할 필요가없는 긴 파일 이름을 자유롭게 사용할 수 있습니다.
MS-DOS 플레이어 (번들)
64 비트 운영 체제에서 코드베이스를 구축 할 때 자동으로 사용되는 Windows 콘솔 서브 시스템에서 DOS 명령 줄 도구를 실행하기위한 경량 에뮬레이터. 분쇄 된 특성에도 불구하고 Neko Project 21/W의 동적 리콜러보다는 X86 코어 해석을 사용하기 때문에 여전히 DOSBOX보다 눈에 띄게 느리게 실행되지만 완벽한 콘솔 통합은 그 이상을 보완합니다.
번들 빌드는 구체적으로 REC98을 구축하기 위해 최적화되어 있으며, FPU, 페이징 또는 사이클 계산이없는 386만을 모방하는 감소 된 x86 코어를 실행합니다. Takeda Toshiya의 업스트림 빌드와 비교할 때이 빌드는 완전한 재건을 위해 REC98 빌드 프로세스를 ≈60%, 가장 큰 번역 장치 및 최대 이진을 컴파일하고 연결하는 데 ≈80%, 중간 크기의 번역 장치 및 바이너리의 경우 ≈70%의 속도를 높입니다. 또한 2024 년 6 월 현재 업스트림 빌드에서 사용할 수없는 빌드 시스템의 맥락에서 Turbo C ++ 4.0J를 실행하는 데 필요한 버그 픽스가 포함되어 있습니다.
라이센스 및 구축 정보는 bin/README.md 참조하십시오.
TUP , Windows (번들)
최소한의 재건을 보장하는 데 사용되는 제정신, 병렬 빌드 시스템. 코드 주입 및 컴파일러의 파일을 연결하여 종속성을 완벽하게 추적하여 SyScall을 열기 위해 모든 #include d 파일을 자동으로 빌드 종속성 그래프에 자동으로 추가 할 수 있습니다. 이로 인해이 중요한 기능이 부족한 대부분 make 보다 우수하므로 상상할 수있는 거의 모든 프로그래밍 언어에 본질적으로 적합하지 않습니다. 특정 컴파일러에 대한 추상화가 없으면 TUP는이 프로젝트에 필요한 고대 Borland 도구와 완벽하게 맞습니다.
번들 64 비트 Wind
라이센스 및 구축 정보는 bin/README.md 참조하십시오.
지원되는 빌드 플랫폼에서 build.bat 실행하십시오. 실행중인 운영 체제에 관계없이 옳은 일을합니다. Windows PATH 에서 필요한 도구를 찾을 수없는 경우 프로세스가 오류로 중단됩니다.
최종 실행 파일은 binth0? , 원본과 같은 이름을 사용합니다. 이를 실행하려면 각 게임의 원래 자산이 동일한 디렉토리에 필요합니다.
64 비트 X86에서 빌드 프로세스는 최소 병렬 재건을 위해 TUP를 사용하지만 모든 DOS 기반 빌드 도구가 모방됩니다. 32 비트 x86에서 빌드 프로세스는 항상 전체 코드베이스를 빌드하는 순차적 배치 파일로 돌아가지만 모든 빌드 도구는 기본 성능으로 실행됩니다.
1 단계 : 정기적으로 테스트, 최상의 지원 보장.
Tier 2 : 지원하기 쉽지만 정기적으로 테스트되지는 않았습니다. 빌드 프로세스의 중요한 버그는 무료로 고정됩니다.
3 단계 : 작동해야하지만 유지해야 할 부담. 빌드 관련 버그에 대한 수정에는 자금이 필요하지만 버그 픽스 PR도 허용 될 수 있습니다.
Tier 4 : 명시 적으로 지원되지 않고 심각한 땜질없이 불가능합니다. 전용 자금 또는 포크가 필요할 경우 PR은 허용되지 않을 것입니다.
Loader error (0000): Unrecognized Error
알려진 두 가지 원인 :
%WINDIR%System32autoexec.nt : 편집하여 NTVDM DPMI 드라이버를 상단 메모리가 아닌 기존 메모리에로드하도록 구성하십시오.
REM Install DPMI support
- LH %SystemRoot%system32dosx
+ %SystemRoot%system32dosx그 편집 후 재부팅이 필요합니다.
(원천)
PowerShell 또는 Bash 대신 일반 cmd.exe 쉘을 구축하십시오.
CONTRIBUTING.md 참조하십시오.