/
chnik
/
StratCore
Обзор
Документация
Войти
/
chnik
/
StratCore
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
1
CI/CD
Аналитика
Безопасность
master
engine/entity.asm
150 строк
5 KB
chnik
create: entity.asm, gui.asm, input.asm, macros.inc, sound.asm, types.inc, win64_entry.asm
15 май 2026, 16:00
Верифицирован
15 май 2026, 16:00
75001cf
Код
Авторство
О чём код?
; ============================================================ ; StratCore Engine - entity.asm ; Entity initialization and building template copy. ; ============================================================ %include "engine/macros.inc" %include "engine/types.inc" %include "game/buildings.inc" section .data default_faction_name db 0xD0,0xA4,0xD1,0x80,0xD0,0xB0,0xD0,0xBA,0xD1,0x86,0xD0,0xB8,0xD1,0x8F,0x20,0xD0,0x9F,0xD0,0xBE,0xD1,0x81,0xD0,0xBB,0xD0,0xB5,0xD0,0xB4,0xD0,0xBD,0xD1,0x8F,0xD1,0x8F,0x20,0xD0,0x92,0xD0,0xBE,0xD0,0xB9,0xD0,0xBD,0xD0,0xB0,0 ai_faction_name db 0xD0,0x98,0xD0,0x98,0x2D,0xD0,0xBA,0xD0,0xBE,0xD0,0xBD,0xD0,0xBA,0xD1,0x83,0xD1,0x80,0xD0,0xB5,0xD0,0xBD,0xD1,0x82,0 %define STRATCORE_EMIT_BUILDING_DATA 1 %include "game/buildings.inc" %undef STRATCORE_EMIT_BUILDING_DATA section .text global entity_init global entities_init_all global buildings_init_from_templates global str_copy_null ; ============================================================ ; entity_init(rdi = Entity*) ; ============================================================ entity_init: push rbx mov rbx, rdi mov rdi, rbx mov rcx, Entity_size xor eax, eax rep stosb mov byte [rbx + Entity.active], 1 lea rdi, [rbx + Entity.name] lea rsi, [rel default_faction_name] call str_copy_null mov qword [rbx + Entity.resources + FactionResources.population], 250 mov qword [rbx + Entity.resources + FactionResources.workers], 0 mov qword [rbx + Entity.resources + FactionResources.unemployed], 190 mov qword [rbx + Entity.resources + FactionResources.soldiers], 50 mov qword [rbx + Entity.resources + FactionResources.bureaucrats], 10 mov qword [rbx + Entity.resources + FactionResources.social_slum], 75 mov qword [rbx + Entity.resources + FactionResources.social_worker], 110 mov qword [rbx + Entity.resources + FactionResources.social_military], 40 mov qword [rbx + Entity.resources + FactionResources.social_elite], 25 mov qword [rbx + Entity.resources + FactionResources.food], 120000 mov qword [rbx + Entity.resources + FactionResources.water], 60000 mov qword [rbx + Entity.resources + FactionResources.ammo], 15000 mov qword [rbx + Entity.resources + FactionResources.energy], 5000 mov qword [rbx + Entity.resources + FactionResources.territory], 5000 mov qword [rbx + Entity.resources + FactionResources.used_space], 0 mov qword [rbx + Entity.resources + FactionResources.loyalty], 65 mov qword [rbx + Entity.resources + FactionResources.labor_days], 128 mov qword [rbx + Entity.resources + FactionResources.need_food_pp], 35 mov qword [rbx + Entity.resources + FactionResources.need_water_pp], 13 mov qword [rbx + Entity.resources + FactionResources.need_ammo_pp], 1 mov qword [rbx + Entity.resources + FactionResources.needs_sat], 100 mov qword [rbx + Entity.resources + FactionResources.life_level], 0 mov rdi, rbx call buildings_init_from_templates ; Starter building: ID 5, mushroom bed. lea rax, [rbx + Entity.buildings + (5 - 1) * Building_size] mov qword [rax + Building.active_count], 1 mov rdx, [rax + Building.size] add [rbx + Entity.resources + FactionResources.used_space], rdx pop rbx ret ; ============================================================ ; entities_init_all(rdi = SimState*) ; ============================================================ entities_init_all: push rbx mov rbx, rdi mov rdi, rbx mov rcx, SimState_size xor eax, eax rep stosb lea rdi, [rbx + SimState.entities] call entity_init mov byte [rbx + SimState.entities + Entity.is_ai], 0 lea rdi, [rbx + SimState.entities + Entity_size] call entity_init mov byte [rbx + SimState.entities + Entity_size + Entity.is_ai], 1 lea rdi, [rbx + SimState.entities + Entity_size + Entity.name] lea rsi, [rel ai_faction_name] call str_copy_null mov byte [rbx + SimState.running], 1 mov dword [rbx + SimState.ui_mode], UI_MODE_ROOT mov dword [rbx + SimState.build_payment_mode], PAY_MODE_AMMO pop rbx ret ; ============================================================ ; buildings_init_from_templates(rdi = Entity*) ; Copies all xlsx-derived templates into the active entity state. ; ============================================================ buildings_init_from_templates: push rbx push rsi push rdi push rcx push r8 mov rbx, rdi lea rdi, [rbx + Entity.buildings] lea rsi, [rel building_templates] mov r8, [rel building_template_count] .copy_loop: test r8, r8 jz .done mov rcx, Building_size rep movsb dec r8 jmp .copy_loop .done: pop r8 pop rcx pop rdi pop rsi pop rbx ret ; ============================================================ ; str_copy_null(rdi = dst, rsi = src) ; ============================================================ str_copy_null: .copy: mov al, [rsi] mov [rdi], al inc rsi inc rdi test al, al jnz .copy ret