KAZIK/tools/generators/make_presentation_text.py
Игорь Федосеев 24d66ddf0e feat: add startup briefing and entry music
Sequence studio, texture AI disclosure and MASM code comparison before arrival. Show a typed hall briefing after admission.

Start the jukebox at 50% user volume on hall entry. Apply positional gain before playback to avoid a full-volume startup burst.
2026-11-02 01:04:11 +03:00

69 lines
3.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Compile Russian presentation copy to CP1251 byte declarations for MASM."""
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
TEXT = {
'presNext': 'ENTER / SPACE: ДАЛЬШЕ ESC: ПРОПУСТИТЬ',
'presAIHeader': 'ОБ ИСПОЛЬЗОВАНИИ AI',
'presAITag': 'TRANSPARENCY NOTICE / 01',
'presAIBody': 'В игре есть материалы, созданные\n'
'с помощью искусственного интеллекта.\n\n'
'При создании части текстур игры\n'
'использовались технологии\n'
'искусственного интеллекта.\n\n'
'Также используются сторонние ресурсы.\n'
'Их авторы и лицензии сохранены.',
'presAIFooter': 'СОЗДАНО С AI. СОБРАНО ВРУЧНУ.',
'presCodeHeader': 'А ВЫ ЗНАЛИ?',
'presCodeSub': 'ИГРОВОЙ ДВИЖОК НАПИСАН НА MASM32',
'presCodeLeft': 'C++ / ПРИМЕР',
'presCodeRight': 'MASM / КОД ЭТОЙ ИГРЫ',
'presCodeCaption': 'ОДНА ЗАДАЧА — ДВА ЯЗЫКА.',
'presCodeNote': 'Рендер, управление и игры — x86 ASM.\n'
'C++ слева показан только для сравнения.',
'presCpp0': '// Clear the framebuffer',
'presCpp1': 'void clearFrame() {',
'presCpp2': ' for (int i = 0;',
'presCpp3': ' i < 640 * 480; ++i) {',
'presCpp4': ' screenBuffer[i] = 0x050809;',
'presCpp5': ' }',
'presCpp6': '}',
'presAsm0': '; startup_sequence.inc',
'presAsm1': 'lea edi, screenBuffer',
'presAsm2': 'mov eax, 00050809h',
'presAsm3': 'mov ecx, SCREEN_SIZE',
'presAsm4': 'rep stosd',
'presAsm5': '; 640 * 480 pixels',
'presAsm6': '; Native x86 / Win32',
'welcomeHeader': 'ASSEMBLER CASINO',
'welcomeTag': 'LOCAL SESSION / SYSTEM BRIEFING',
'welcomeBody': '> ВЕРСИЯ 4.0 / WINDOWS x86\n\n'
'Добро пожаловать в Assembler Casino.\n'
'Казино с собственным 2.5D-движком\n'
'на ассемблере MASM32.\n\n'
'Внутри: карточные игры, автоматы,\n'
'боулинг, бильярд, секреты и поход в Ад.\n\n'
'WASD — движение. Мышь — осмотр.\n'
'E — взаимодействие. ESC — пауза.\n'
'Прогресс сохраняется в вашем профиле.',
'welcomeTypeHint': 'ENTER: ПОКАЗАТЬ ТЕКСТ ЦЕЛИКОМ',
'welcomeDoneHint': 'ENTER / ESC: ЗАКРЫТЬ И НАЧАТЬ ИГРУ',
'welcomeButton': 'ВОЙТИ В ИГРУ',
}
TEXT = {name:text.replace('\u2014','-') for name,text in TEXT.items()}
def main():
lines = ['; Generated by tools/generators/make_presentation_text.py. CP1251 bytes.', '.data']
for name, text in TEXT.items():
data = text.encode('cp1251') + b'\0'
for offset in range(0,len(data),32):
prefix = f'{name} db ' if offset == 0 else ' db '
lines.append(prefix + ','.join(map(str, data[offset:offset+32])))
lines.append(f'{name}End label byte')
lines.append('.code')
(ROOT/'src_graphics/presentation_text.inc').write_bytes(('\n'.join(lines)+'\n').encode('ascii'))
if __name__ == '__main__':
main()