From af241b4e0958c98f6bacd31708c6b83146354348 Mon Sep 17 00:00:00 2001 From: sShemet Date: Sun, 20 Apr 2025 00:05:45 +0500 Subject: [PATCH] vault backup: 2025-04-20 00:05:45 --- .obsidian/workspace.json | 8 +- .../FUN_80011f2c InitInterfaceManager.md | 80 +++++++++++++++++++ ...ace.md => FUN_80012df4 RenderInterface.md} | 0 PERSONAL PROJECTS/P2EP/pseudoCode/Untitled.md | 0 4 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 PERSONAL PROJECTS/P2EP/pseudoCode/FUN_80011f2c InitInterfaceManager.md rename PERSONAL PROJECTS/P2EP/pseudoCode/{RenderInterface.md => FUN_80012df4 RenderInterface.md} (100%) delete mode 100644 PERSONAL PROJECTS/P2EP/pseudoCode/Untitled.md diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 7c20af0..8bd2eb5 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -41,12 +41,12 @@ "state": { "type": "markdown", "state": { - "file": "PERSONAL PROJECTS/P2EP/pseudoCode/Untitled.md", + "file": "PERSONAL PROJECTS/P2EP/pseudoCode/FUN_80012df4 RenderInterface.md", "mode": "source", "source": false }, "icon": "lucide-file", - "title": "Untitled" + "title": "FUN_80012df4 RenderInterface" } } ], @@ -207,8 +207,8 @@ }, "active": "dd912cc876184c4f", "lastOpenFiles": [ - "PERSONAL PROJECTS/P2EP/pseudoCode/RenderInterface.md", - "PERSONAL PROJECTS/P2EP/pseudoCode/Untitled.md", + "PERSONAL PROJECTS/P2EP/pseudoCode/FUN_80011f2c InitInterfaceManager.md", + "PERSONAL PROJECTS/P2EP/pseudoCode/FUN_80012df4 RenderInterface.md", "PERSONAL PROJECTS/PS1 DOCS/PS1 IRQ.md", "PERSONAL PROJECTS/P2EP/pseudoCode", "PERSONAL PROJECTS/PS1 DOCS/Untitled", diff --git a/PERSONAL PROJECTS/P2EP/pseudoCode/FUN_80011f2c InitInterfaceManager.md b/PERSONAL PROJECTS/P2EP/pseudoCode/FUN_80011f2c InitInterfaceManager.md new file mode 100644 index 0000000..56b9f32 --- /dev/null +++ b/PERSONAL PROJECTS/P2EP/pseudoCode/FUN_80011f2c InitInterfaceManager.md @@ -0,0 +1,80 @@ +``` c +#include +#include + +/* Структура данных интерфейса */ +typedef struct { + int max_elements; // Максимальное количество элементов (param_2) + int version_flag; // Флаг версии (инициализируется 1) + int element_size; // Размер элемента (0x15 слов) + void* render_callback; // Функция рендеринга (LAB_8001399c) + int* element_array; // Массив элементов + int* texture_data; // Данные текстур (param_3) + int* palette_data; // Данные палитры (param_4) +} InterfaceManager; + +/* Глобальный указатель на менеджер */ +InterfaceManager* g_InterfaceMgr = (InterfaceManager*)0x8007CB34; + +/* Инициализация менеджера интерфейса */ +void InitInterfaceManager(int* manager_ptr, int max_elements, int texture_data, int palette_data) +{ + /* Инициализация базовых полей */ + g_InterfaceMgr = (InterfaceManager*)manager_ptr; + g_InterfaceMgr->max_elements = max_elements; + g_InterfaceMgr->version_flag = 1; + + /* Вызов внутренней функции инициализации */ + InitInterfaceInternal(); + + /* Инициализация элементов */ + for(int i = 0; i < max_elements; i++) { + InterfaceElement* elem = GetInterfaceElement(i); + elem->index = i; + elem->state = 0xFFFF; // Изначально неактивен + } + + /* Обработка графических данных */ + if(texture_data != 0) { + g_InterfaceMgr->texture_data = (int*)texture_data; + g_InterfaceMgr->palette_data = (int*)(texture_data + palette_data * 4); + + for(int i = 0; i < max_elements; i++) { + InterfaceElement* elem = GetInterfaceElement(i); + elem->texture_ptr = texture_data; + elem->palette_ptr = texture_data + palette_data * 4; + } + } else { + /* Режим без текстур */ + for(int i = 0; i < max_elements; i++) { + InterfaceElement* elem = GetInterfaceElement(i); + elem->flags |= 0x1000; // Устанавливаем флаг "без текстуры" + } + } + + /* Инициализация callback-функции */ + g_InterfaceMgr->render_callback = &DefaultRenderCallback; + + /* Сброс дополнительных параметров */ + for(int i = 0; i < 4; i++) { + g_InterfaceMgr->unused_params[i] = 0; + } + + /* Глобальный флаг */ + g_GlobalFlag = 0; +} + +/* Вспомогательные функции */ +InterfaceElement* GetInterfaceElement(int index) { + return (InterfaceElement*)((char*)g_InterfaceMgr->element_array + + index * sizeof(InterfaceElement)); +} + +void InitInterfaceInternal() { + /* ... реализация FUN_80012084 ... */ +} + +void DefaultRenderCallback() { + /* ... реализация LAB_8001399c ... */ +} +``` \ No newline at end of file diff --git a/PERSONAL PROJECTS/P2EP/pseudoCode/RenderInterface.md b/PERSONAL PROJECTS/P2EP/pseudoCode/FUN_80012df4 RenderInterface.md similarity index 100% rename from PERSONAL PROJECTS/P2EP/pseudoCode/RenderInterface.md rename to PERSONAL PROJECTS/P2EP/pseudoCode/FUN_80012df4 RenderInterface.md diff --git a/PERSONAL PROJECTS/P2EP/pseudoCode/Untitled.md b/PERSONAL PROJECTS/P2EP/pseudoCode/Untitled.md deleted file mode 100644 index e69de29..0000000