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.
69 lines
3.6 KiB
Python
69 lines
3.6 KiB
Python
"""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()
|