Compare commits
120 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 79d6e71fff | |||
| fb394d23c9 | |||
| 1951bcad11 | |||
| 9a874fc83b | |||
| 1acdd3f38d | |||
| a2b11371cf | |||
| b4b76ed6e8 | |||
| 6f4eb9c1fc | |||
| 47f7ffb169 | |||
| 70f2642e6d | |||
| 1a42f24a68 | |||
| ac0f03c725 | |||
| 1804c8a171 | |||
| d83056c614 | |||
| ba2a6fe914 | |||
| 364cf36183 | |||
| 7f6af6dd00 | |||
| fdfb84170f | |||
| 2088ccdcc6 | |||
| 7556c3fe8d | |||
| decde1b7d5 | |||
| c8545c712d | |||
| 76786203a0 | |||
| bc94eff176 | |||
| 44cd0857e0 | |||
| f8521d644c | |||
| eb2702eb19 | |||
| bfb4903998 | |||
| f3abab7a13 | |||
| 54031e3520 | |||
| 8b9d26a02c | |||
| 3d5277a395 | |||
| 2555157bd7 | |||
| 461eaedecf | |||
| 1891c9e49e | |||
| 829a895464 | |||
| 8bc259b25a | |||
| ec333efe66 | |||
| 3b432e6580 | |||
| 886ec8ab1d | |||
| bc5982b286 | |||
| 75a4a1b3b9 | |||
| f3f0bfcd9a | |||
| c959e0e3a0 | |||
| 8b896912b2 | |||
| 3d0057220d | |||
| 0c75f56cb5 | |||
| 0ceaa75862 | |||
| 087b8d346d | |||
| aca1f5200b | |||
| 3b638f4715 | |||
| 9a5adcbcc5 | |||
| d0be5ea2d1 | |||
| 07e00fff09 | |||
| b4e0ca7eca | |||
| b8173b205b | |||
| 57d623d6bc | |||
| 64ab08973c | |||
| 94a7a38cdd | |||
| 76165e4345 | |||
| 767a1f6af8 | |||
| 20ca024100 | |||
| 3c3857c1b2 | |||
| 523342fed9 | |||
| 217ca58b1a | |||
| ec6565bf71 | |||
| cd7f06f3a1 | |||
| 8886873ed5 | |||
| a41e696b69 | |||
| 4b7cbd88bb | |||
| 789cbbc593 | |||
| 1dd87c0707 | |||
| 330044e10f | |||
| f8c5207d5c | |||
| 2caaa29124 | |||
| cdc4d07394 | |||
| 1023cde1be | |||
| a3aeed4b7c | |||
| 3b0354da54 | |||
| 622ccd22bc | |||
| 1441134aea | |||
| 0500dce7aa | |||
| 9f0dfc4e24 | |||
| aa66dd41c1 | |||
| 69fb5f3cc1 | |||
| d6b2e97777 | |||
| 98c90e6075 | |||
| f795c86a38 | |||
| c1c5774406 | |||
| 0139da4764 | |||
| ec911979fb | |||
| e51749dbc6 | |||
| 9ceb21c04f | |||
| 76a91b4736 | |||
| df744338f1 | |||
| 8803fc3806 | |||
| c26a4774a1 | |||
| 20538af4c6 | |||
| 73f222fcb7 | |||
| 67681e0f37 | |||
| 5210448ac9 | |||
| 983f42814f | |||
| 89302a2ee3 | |||
| 832f77de80 | |||
| 656144d182 | |||
| 4f926ddebf | |||
| 624039e00d | |||
| 430fcbe026 | |||
| 8e25d388fa | |||
| 3c7df0e989 | |||
| 4d0a5ca5bd | |||
| 06e9a10c98 | |||
| 836debdc0b | |||
| 1e8829ba22 | |||
| 2b1311042f | |||
| 0d69af667d | |||
| 93fed0b984 | |||
| c8838aa450 | |||
| 896a61ed0d | |||
| c7a7e604f1 |
21
.clang-format
Normal file
21
.clang-format
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
BasedOnStyle: Google
|
||||||
|
IndentWidth: 4
|
||||||
|
IndentAccessModifiers: true
|
||||||
|
ColumnLimit: 0 # Sin límite de longitud de línea
|
||||||
|
BreakBeforeBraces: Attach # Llaves en la misma línea
|
||||||
|
AllowShortIfStatementsOnASingleLine: true
|
||||||
|
AllowShortBlocksOnASingleLine: true
|
||||||
|
AllowShortFunctionsOnASingleLine: All
|
||||||
|
AlignOperands: DontAlign
|
||||||
|
AlignAfterOpenBracket: DontAlign
|
||||||
|
BinPackArguments: false
|
||||||
|
BinPackParameters: false
|
||||||
|
ContinuationIndentWidth: 4
|
||||||
|
ConstructorInitializerIndentWidth: 4
|
||||||
|
IndentWrappedFunctionNames: false
|
||||||
|
Cpp11BracedListStyle: true
|
||||||
|
BreakConstructorInitializers: BeforeColon
|
||||||
|
AllowAllConstructorInitializersOnNextLine: false
|
||||||
|
PackConstructorInitializers: Never
|
||||||
|
AllowAllArgumentsOnNextLine: false
|
||||||
|
AllowAllParametersOfDeclarationOnNextLine: false
|
||||||
104
.clang-tidy
Normal file
104
.clang-tidy
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
Checks:
|
||||||
|
# Estrategia: Habilitar checks uno por uno, aplicar fix, compilar, commit
|
||||||
|
# ✅ Check 1: readability-uppercase-literal-suffix (1.0f → 1.0F)
|
||||||
|
# ✅ Check 2: readability-math-missing-parentheses (claridad en ops matemáticas)
|
||||||
|
# ✅ Check 3: readability-identifier-naming (DESHABILITADO temporalmente - cascada de cambios)
|
||||||
|
# ✅ Check 4: readability-const-return-type (código ya cumple)
|
||||||
|
# ✅ Check 5: readability-else-after-return (código ya cumple)
|
||||||
|
# ✅ Check 6: readability-simplify-boolean-expr (código ya cumple)
|
||||||
|
# ✅ Check 7: readability-* (225 fixes aplicados)
|
||||||
|
- readability-*
|
||||||
|
- -readability-identifier-naming # Excluido (cascada de cambios)
|
||||||
|
- -readability-identifier-length # Excluido (nombres cortos son OK)
|
||||||
|
- -readability-magic-numbers # Excluido (muchos falsos positivos)
|
||||||
|
- -readability-convert-member-functions-to-static # Excluido (rompe encapsulación)
|
||||||
|
- -readability-use-anyofallof # Excluido (C++20 ranges - no todos los compiladores)
|
||||||
|
- -readability-function-cognitive-complexity # Excluido (complejidad ciclomática aceptable)
|
||||||
|
- -clang-analyzer-security.insecureAPI.rand # Excluido (rand() es suficiente para juegos)
|
||||||
|
# ✅ Check 8: modernize-* (215 fixes aplicados)
|
||||||
|
- modernize-*
|
||||||
|
- -modernize-use-trailing-return-type # Excluido (estilo controversial)
|
||||||
|
- -modernize-avoid-c-arrays # Excluido (arrays C son OK en algunos contextos)
|
||||||
|
# ✅ Check 9: performance-* (91 fixes aplicados)
|
||||||
|
- performance-*
|
||||||
|
- -performance-enum-size # Excluido (tamaño de enum no crítico)
|
||||||
|
# ✅ Check 10: bugprone-* (0 fixes - todos eran falsos positivos)
|
||||||
|
- bugprone-*
|
||||||
|
- -bugprone-easily-swappable-parameters # Excluido (muchos falsos positivos)
|
||||||
|
- -bugprone-narrowing-conversions # Excluido (conversiones intencionales)
|
||||||
|
- -bugprone-integer-division # Excluido (divisiones enteras OK en contexto)
|
||||||
|
- -bugprone-branch-clone # Excluido (fall-through en switch es intencional)
|
||||||
|
- -bugprone-switch-missing-default-case # Excluido (no todos los switches necesitan default)
|
||||||
|
- -bugprone-implicit-widening-of-multiplication-result # Excluido (valores pequeños, sin overflow)
|
||||||
|
- -bugprone-exception-escape # Excluido (excepciones en main terminan el programa - OK)
|
||||||
|
# ✅ Check 11: llvm-include-order (validar orden de includes - 0 errores)
|
||||||
|
- llvm-include-order
|
||||||
|
# ⏸️ Check 12: misc-include-cleaner (DESHABILITADO temporalmente - requiere refactorización masiva de includes)
|
||||||
|
- -misc-include-cleaner
|
||||||
|
|
||||||
|
WarningsAsErrors: '*'
|
||||||
|
# No usar HeaderFilterRegex - usamos .clang-tidy local en source/core/audio/ para excluir
|
||||||
|
FormatStyle: file
|
||||||
|
|
||||||
|
CheckOptions:
|
||||||
|
# Variables locales en snake_case
|
||||||
|
- { key: readability-identifier-naming.VariableCase, value: lower_case }
|
||||||
|
|
||||||
|
# Miembros privados en snake_case con sufijo _
|
||||||
|
- { key: readability-identifier-naming.PrivateMemberCase, value: lower_case }
|
||||||
|
- { key: readability-identifier-naming.PrivateMemberSuffix, value: _ }
|
||||||
|
|
||||||
|
# Miembros protegidos en snake_case con sufijo _
|
||||||
|
- { key: readability-identifier-naming.ProtectedMemberCase, value: lower_case }
|
||||||
|
- { key: readability-identifier-naming.ProtectedMemberSuffix, value: _ }
|
||||||
|
|
||||||
|
# Miembros públicos en snake_case (sin sufijo)
|
||||||
|
- { key: readability-identifier-naming.PublicMemberCase, value: lower_case }
|
||||||
|
|
||||||
|
# Namespaces en CamelCase
|
||||||
|
- { key: readability-identifier-naming.NamespaceCase, value: CamelCase }
|
||||||
|
|
||||||
|
# Variables estáticas privadas como miembros privados
|
||||||
|
- { key: readability-identifier-naming.StaticVariableCase, value: lower_case }
|
||||||
|
- { key: readability-identifier-naming.StaticVariableSuffix, value: _ }
|
||||||
|
|
||||||
|
# Constantes estáticas sin sufijo
|
||||||
|
- { key: readability-identifier-naming.StaticConstantCase, value: UPPER_CASE }
|
||||||
|
|
||||||
|
# Constantes globales en UPPER_CASE
|
||||||
|
- { key: readability-identifier-naming.GlobalConstantCase, value: UPPER_CASE }
|
||||||
|
|
||||||
|
# Variables constexpr globales en UPPER_CASE
|
||||||
|
- { key: readability-identifier-naming.ConstexprVariableCase, value: UPPER_CASE }
|
||||||
|
|
||||||
|
# Constantes locales en UPPER_CASE
|
||||||
|
- { key: readability-identifier-naming.LocalConstantCase, value: UPPER_CASE }
|
||||||
|
|
||||||
|
# Constexpr miembros en UPPER_CASE (sin sufijo)
|
||||||
|
- { key: readability-identifier-naming.ConstexprMemberCase, value: UPPER_CASE }
|
||||||
|
|
||||||
|
# Constexpr miembros privados/protegidos con sufijo _
|
||||||
|
- { key: readability-identifier-naming.ConstexprMethodCase, value: UPPER_CASE }
|
||||||
|
|
||||||
|
# Clases, structs y enums en CamelCase
|
||||||
|
- { key: readability-identifier-naming.ClassCase, value: CamelCase }
|
||||||
|
- { key: readability-identifier-naming.StructCase, value: CamelCase }
|
||||||
|
- { key: readability-identifier-naming.EnumCase, value: CamelCase }
|
||||||
|
|
||||||
|
# Valores de enums en UPPER_CASE
|
||||||
|
- { key: readability-identifier-naming.EnumConstantCase, value: UPPER_CASE }
|
||||||
|
|
||||||
|
# Métodos en camelBack (sin sufijos)
|
||||||
|
- { key: readability-identifier-naming.MethodCase, value: camelBack }
|
||||||
|
- { key: readability-identifier-naming.PrivateMethodCase, value: camelBack }
|
||||||
|
- { key: readability-identifier-naming.ProtectedMethodCase, value: camelBack }
|
||||||
|
- { key: readability-identifier-naming.PublicMethodCase, value: camelBack }
|
||||||
|
|
||||||
|
# Funciones en camelBack
|
||||||
|
- { key: readability-identifier-naming.FunctionCase, value: camelBack }
|
||||||
|
|
||||||
|
# Parámetros en lower_case
|
||||||
|
- { key: readability-identifier-naming.ParameterCase, value: lower_case }
|
||||||
|
|
||||||
|
# misc-include-cleaner: Ignorar SDL (genera falsos positivos)
|
||||||
|
- { key: misc-include-cleaner.IgnoreHeaders, value: 'SDL3/.*' }
|
||||||
19
.claude/settings.local.json
Normal file
19
.claude/settings.local.json
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"permissions": {
|
||||||
|
"allow": [
|
||||||
|
"Bash(dir \"C:\\mingw\\gitea\\orni_attack\\release\\dll\")",
|
||||||
|
"Bash(make:*)",
|
||||||
|
"Bash(echo:*)",
|
||||||
|
"Bash(objdump:*)",
|
||||||
|
"Bash(unzip:*)",
|
||||||
|
"Bash(\"/Volumes/diskito/diskito.app/Contents/MacOS/diskito\")",
|
||||||
|
"Bash(pkill:*)",
|
||||||
|
"Bash(hdiutil detach:*)",
|
||||||
|
"Bash(cat:*)",
|
||||||
|
"Bash(hdiutil mount:*)",
|
||||||
|
"Bash(open \"/Volumes/Orni Attack/Orni Attack.app\")"
|
||||||
|
],
|
||||||
|
"deny": [],
|
||||||
|
"ask": []
|
||||||
|
}
|
||||||
|
}
|
||||||
102
.gitignore
vendored
Normal file
102
.gitignore
vendored
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
# IDEs and Editors
|
||||||
|
.vscode/*
|
||||||
|
.idea/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
|
|
||||||
|
# Build directories
|
||||||
|
build/
|
||||||
|
bin/
|
||||||
|
out/
|
||||||
|
cmake-build-*/
|
||||||
|
|
||||||
|
# Executables
|
||||||
|
orni
|
||||||
|
asteroids
|
||||||
|
*.exe
|
||||||
|
*.out
|
||||||
|
*.app
|
||||||
|
tools/pack_resources/pack_resources
|
||||||
|
tools/pack_resources/pack_resources.exe
|
||||||
|
|
||||||
|
# Releases
|
||||||
|
*.zip
|
||||||
|
*.tar.gz
|
||||||
|
*.dmg
|
||||||
|
|
||||||
|
# Generated resources
|
||||||
|
resources.pack
|
||||||
|
|
||||||
|
# Compiled Object files
|
||||||
|
*.o
|
||||||
|
*.obj
|
||||||
|
*.ko
|
||||||
|
*.elf
|
||||||
|
|
||||||
|
# Precompiled Headers
|
||||||
|
*.gch
|
||||||
|
*.pch
|
||||||
|
|
||||||
|
# Compiled Dynamic libraries
|
||||||
|
*.so
|
||||||
|
*.so.*
|
||||||
|
*.dylib
|
||||||
|
*.dll
|
||||||
|
|
||||||
|
# Compiled Static libraries
|
||||||
|
*.a
|
||||||
|
*.lib
|
||||||
|
*.la
|
||||||
|
*.lo
|
||||||
|
|
||||||
|
# CMake
|
||||||
|
CMakeCache.txt
|
||||||
|
CMakeFiles/
|
||||||
|
CMakeScripts/
|
||||||
|
cmake_install.cmake
|
||||||
|
install_manifest.txt
|
||||||
|
compile_commands.json
|
||||||
|
CTestTestfile.cmake
|
||||||
|
_deps/
|
||||||
|
|
||||||
|
# Debug files
|
||||||
|
*.dSYM/
|
||||||
|
*.su
|
||||||
|
*.idb
|
||||||
|
*.pdb
|
||||||
|
*.ilk
|
||||||
|
|
||||||
|
# Core dumps
|
||||||
|
# core
|
||||||
|
# core.*
|
||||||
|
# *.core
|
||||||
|
|
||||||
|
# macOS
|
||||||
|
.DS_Store
|
||||||
|
.AppleDouble
|
||||||
|
.LSOverride
|
||||||
|
._*
|
||||||
|
|
||||||
|
# Windows
|
||||||
|
Thumbs.db
|
||||||
|
Thumbs.db:encryptable
|
||||||
|
ehthumbs.db
|
||||||
|
ehthumbs_vista.db
|
||||||
|
*.stackdump
|
||||||
|
[Dd]esktop.ini
|
||||||
|
|
||||||
|
# Linux
|
||||||
|
*~
|
||||||
|
.directory
|
||||||
|
.fuse_hidden*
|
||||||
|
.Trash-*
|
||||||
|
.nfs*
|
||||||
|
|
||||||
|
# Temporary files
|
||||||
|
*.tmp
|
||||||
|
*.temp
|
||||||
|
*.log
|
||||||
|
*.bak
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
BIN
Asteroids.ico
BIN
Asteroids.ico
Binary file not shown.
|
Before Width: | Height: | Size: 2.2 KiB |
179
CMakeLists.txt
Normal file
179
CMakeLists.txt
Normal file
@@ -0,0 +1,179 @@
|
|||||||
|
# CMakeLists.txt
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.10)
|
||||||
|
project(orni VERSION 0.7.2)
|
||||||
|
|
||||||
|
# Info del proyecto
|
||||||
|
set(PROJECT_LONG_NAME "Orni Attack")
|
||||||
|
set(PROJECT_COPYRIGHT_ORIGINAL "© 1999 Visente i Sergi")
|
||||||
|
set(PROJECT_COPYRIGHT_PORT "© 2025 JailDesigner")
|
||||||
|
set(PROJECT_COPYRIGHT "${PROJECT_COPYRIGHT_ORIGINAL}, ${PROJECT_COPYRIGHT_PORT}")
|
||||||
|
|
||||||
|
# Establecer estándar de C++
|
||||||
|
set(CMAKE_CXX_STANDARD 20)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED True)
|
||||||
|
|
||||||
|
# Exportar comandos de compilación para herramientas de análisis
|
||||||
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
|
||||||
|
# --- GENERACIÓN DE VERSIÓN AUTOMÁTICA ---
|
||||||
|
find_package(Git QUIET)
|
||||||
|
if(GIT_FOUND)
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${GIT_EXECUTABLE} rev-parse --short=7 HEAD
|
||||||
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||||
|
OUTPUT_VARIABLE GIT_HASH
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
ERROR_QUIET
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
set(GIT_HASH "unknown")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Configurar archivo de versión
|
||||||
|
configure_file(${CMAKE_SOURCE_DIR}/source/project.h.in ${CMAKE_BINARY_DIR}/project.h @ONLY)
|
||||||
|
|
||||||
|
# --- LISTA DE FUENTES (AUTO-DESCUBRIMIENTO) ---
|
||||||
|
# Buscar automáticamente todos los archivos .cpp en core/, game/ y main.cpp
|
||||||
|
file(GLOB_RECURSE CORE_SOURCES "${CMAKE_SOURCE_DIR}/source/core/*.cpp")
|
||||||
|
file(GLOB_RECURSE GAME_SOURCES "${CMAKE_SOURCE_DIR}/source/game/*.cpp")
|
||||||
|
set(APP_SOURCES
|
||||||
|
${CORE_SOURCES}
|
||||||
|
${GAME_SOURCES}
|
||||||
|
source/main.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
# Excluir archivos legacy (código Pascal de referencia)
|
||||||
|
list(FILTER APP_SOURCES EXCLUDE REGEX ".*/legacy/.*")
|
||||||
|
|
||||||
|
# Log de archivos encontrados (útil para debug)
|
||||||
|
list(LENGTH APP_SOURCES APP_SOURCES_COUNT)
|
||||||
|
message(STATUS "Archivos .cpp encontrados: ${APP_SOURCES_COUNT}")
|
||||||
|
|
||||||
|
# Configuración de SDL3
|
||||||
|
find_package(SDL3 REQUIRED CONFIG REQUIRED COMPONENTS SDL3)
|
||||||
|
message(STATUS "SDL3 encontrado: ${SDL3_INCLUDE_DIRS}")
|
||||||
|
|
||||||
|
# --- AÑADIR EJECUTABLE ---
|
||||||
|
add_executable(${PROJECT_NAME} ${APP_SOURCES})
|
||||||
|
|
||||||
|
# --- DIRECTORIOS DE INCLUSIÓN ---
|
||||||
|
target_include_directories(${PROJECT_NAME} PUBLIC
|
||||||
|
"${CMAKE_SOURCE_DIR}/source"
|
||||||
|
"${CMAKE_BINARY_DIR}"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Enlazar las librerías SDL3
|
||||||
|
target_link_libraries(${PROJECT_NAME} PRIVATE SDL3::SDL3)
|
||||||
|
|
||||||
|
# --- CONFIGURACIÓN PLATAFORMAS Y COMPILADOR ---
|
||||||
|
# Configuración de flags de compilación
|
||||||
|
target_compile_options(${PROJECT_NAME} PRIVATE -Wall)
|
||||||
|
target_compile_options(${PROJECT_NAME} PRIVATE $<$<CONFIG:RELEASE>:-O2 -ffunction-sections -fdata-sections>)
|
||||||
|
|
||||||
|
# Definir _DEBUG en modo Debug y RELEASE_BUILD en modo Release
|
||||||
|
target_compile_definitions(${PROJECT_NAME} PRIVATE $<$<CONFIG:DEBUG>:_DEBUG>)
|
||||||
|
target_compile_definitions(${PROJECT_NAME} PRIVATE $<$<CONFIG:RELEASE>:RELEASE_BUILD>)
|
||||||
|
|
||||||
|
# Definir MACOS_BUNDLE si es un bundle de macOS
|
||||||
|
if(APPLE AND MACOSX_BUNDLE)
|
||||||
|
target_compile_definitions(${PROJECT_NAME} PRIVATE MACOS_BUNDLE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Configuración específica para cada plataforma
|
||||||
|
if(WIN32)
|
||||||
|
target_compile_definitions(${PROJECT_NAME} PRIVATE WINDOWS_BUILD)
|
||||||
|
target_link_libraries(${PROJECT_NAME} PRIVATE mingw32)
|
||||||
|
# Static linking for libgcc and libstdc++ (avoid DLL dependencies for distribution)
|
||||||
|
target_link_options(${PROJECT_NAME} PRIVATE
|
||||||
|
-static-libgcc
|
||||||
|
-static-libstdc++
|
||||||
|
-static
|
||||||
|
)
|
||||||
|
# Añadir icono en Windows (se configurará desde el Makefile con windres)
|
||||||
|
elseif(APPLE)
|
||||||
|
target_compile_definitions(${PROJECT_NAME} PRIVATE MACOS_BUILD)
|
||||||
|
target_compile_options(${PROJECT_NAME} PRIVATE -Wno-deprecated)
|
||||||
|
set(CMAKE_OSX_ARCHITECTURES "arm64")
|
||||||
|
elseif(UNIX AND NOT APPLE)
|
||||||
|
target_compile_definitions(${PROJECT_NAME} PRIVATE LINUX_BUILD)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Especificar la ubicación del ejecutable
|
||||||
|
set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR})
|
||||||
|
|
||||||
|
# --- STATIC ANALYSIS TARGETS ---
|
||||||
|
# Buscar herramientas de análisis estático
|
||||||
|
find_program(CLANG_FORMAT_EXE NAMES clang-format)
|
||||||
|
find_program(CLANG_TIDY_EXE NAMES clang-tidy)
|
||||||
|
|
||||||
|
# Recopilar todos los archivos fuente para formateo
|
||||||
|
file(GLOB_RECURSE ALL_SOURCE_FILES
|
||||||
|
"${CMAKE_SOURCE_DIR}/source/*.cpp"
|
||||||
|
"${CMAKE_SOURCE_DIR}/source/*.hpp"
|
||||||
|
)
|
||||||
|
# Excluir directorios con checks deshabilitados
|
||||||
|
list(FILTER ALL_SOURCE_FILES EXCLUDE REGEX ".*/audio/.*")
|
||||||
|
list(FILTER ALL_SOURCE_FILES EXCLUDE REGEX ".*/legacy/.*")
|
||||||
|
|
||||||
|
# Targets de clang-format
|
||||||
|
if(CLANG_FORMAT_EXE)
|
||||||
|
add_custom_target(format
|
||||||
|
COMMAND ${CLANG_FORMAT_EXE}
|
||||||
|
-i
|
||||||
|
${ALL_SOURCE_FILES}
|
||||||
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||||
|
COMMENT "Running clang-format..."
|
||||||
|
)
|
||||||
|
|
||||||
|
add_custom_target(format-check
|
||||||
|
COMMAND ${CLANG_FORMAT_EXE}
|
||||||
|
--dry-run
|
||||||
|
--Werror
|
||||||
|
${ALL_SOURCE_FILES}
|
||||||
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||||
|
COMMENT "Checking clang-format..."
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
message(STATUS "clang-format no encontrado - targets 'format' y 'format-check' no disponibles")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Targets de clang-tidy
|
||||||
|
if(CLANG_TIDY_EXE)
|
||||||
|
# En macOS, obtener la ruta del SDK para que clang-tidy encuentre los headers del sistema
|
||||||
|
set(CLANG_TIDY_EXTRA_ARGS "")
|
||||||
|
if(APPLE)
|
||||||
|
execute_process(
|
||||||
|
COMMAND xcrun --show-sdk-path
|
||||||
|
OUTPUT_VARIABLE MACOS_SDK_PATH
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
if(MACOS_SDK_PATH)
|
||||||
|
set(CLANG_TIDY_EXTRA_ARGS "--extra-arg=-isysroot${MACOS_SDK_PATH}")
|
||||||
|
message(STATUS "clang-tidy usará SDK de macOS: ${MACOS_SDK_PATH}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_custom_target(tidy
|
||||||
|
COMMAND ${CLANG_TIDY_EXE}
|
||||||
|
-p ${CMAKE_BINARY_DIR}
|
||||||
|
${CLANG_TIDY_EXTRA_ARGS}
|
||||||
|
--fix
|
||||||
|
--fix-errors
|
||||||
|
${ALL_SOURCE_FILES}
|
||||||
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||||
|
COMMENT "Running clang-tidy with auto-fix..."
|
||||||
|
)
|
||||||
|
|
||||||
|
add_custom_target(tidy-check
|
||||||
|
COMMAND ${CLANG_TIDY_EXE}
|
||||||
|
-p ${CMAKE_BINARY_DIR}
|
||||||
|
${CLANG_TIDY_EXTRA_ARGS}
|
||||||
|
--warnings-as-errors='*'
|
||||||
|
${ALL_SOURCE_FILES}
|
||||||
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||||
|
COMMENT "Checking clang-tidy..."
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
message(STATUS "clang-tidy no encontrado - targets 'tidy' y 'tidy-check' no disponibles")
|
||||||
|
endif()
|
||||||
275
KEYBOARD.PAS
275
KEYBOARD.PAS
@@ -1,275 +0,0 @@
|
|||||||
{
|
|
||||||
-----------------------------------------------------
|
|
||||||
File: Keyboard.Pas
|
|
||||||
By: Ronny Wester, ronny@rat.se
|
|
||||||
|
|
||||||
Unit to check up/down status of individual key flags.
|
|
||||||
Written from code I got off rec.games.programmer.
|
|
||||||
Sorry, I lost the name of the poster.
|
|
||||||
As most of this code is scancode-dependent some keys
|
|
||||||
may not be where they "should" on your keyboard.
|
|
||||||
-----------------------------------------------------
|
|
||||||
}
|
|
||||||
unit Keyboard;
|
|
||||||
|
|
||||||
|
|
||||||
interface
|
|
||||||
|
|
||||||
uses Dos;
|
|
||||||
|
|
||||||
|
|
||||||
const
|
|
||||||
|
|
||||||
keySysReq = $54;
|
|
||||||
keyCapsLock = $3A;
|
|
||||||
keyNumLock = $45;
|
|
||||||
keyScrollLock = $46;
|
|
||||||
keyLeftCtrl = $1D;
|
|
||||||
keyLeftAlt = $38;
|
|
||||||
keyLeftShift = $2A;
|
|
||||||
keyRightCtrl = $9D;
|
|
||||||
keyAltGr = $B8;
|
|
||||||
keyRightShift = $36;
|
|
||||||
keyEsc = $01;
|
|
||||||
keyBackspace = $0E;
|
|
||||||
keyEnter = $1C;
|
|
||||||
keySpace = $39;
|
|
||||||
keyTab = $0F;
|
|
||||||
keyF1 = $3B;
|
|
||||||
keyF2 = $3C;
|
|
||||||
keyF3 = $3D;
|
|
||||||
keyF4 = $3E;
|
|
||||||
keyF5 = $3F;
|
|
||||||
keyF6 = $40;
|
|
||||||
keyF7 = $41;
|
|
||||||
keyF8 = $42;
|
|
||||||
keyF9 = $43;
|
|
||||||
keyF10 = $44;
|
|
||||||
keyF11 = $57;
|
|
||||||
keyF12 = $58;
|
|
||||||
keyA = $1E;
|
|
||||||
keyB = $30;
|
|
||||||
keyC = $2E;
|
|
||||||
keyD = $20;
|
|
||||||
keyE = $12;
|
|
||||||
keyF = $21;
|
|
||||||
keyG = $22;
|
|
||||||
keyH = $23;
|
|
||||||
keyI = $17;
|
|
||||||
keyJ = $24;
|
|
||||||
keyK = $25;
|
|
||||||
keyL = $26;
|
|
||||||
keyM = $32;
|
|
||||||
keyN = $31;
|
|
||||||
keyO = $18;
|
|
||||||
keyP = $19;
|
|
||||||
keyQ = $10;
|
|
||||||
keyR = $13;
|
|
||||||
keyS = $1F;
|
|
||||||
keyT = $14;
|
|
||||||
keyU = $16;
|
|
||||||
keyV = $2F;
|
|
||||||
keyW = $11;
|
|
||||||
keyX = $2D;
|
|
||||||
keyY = $15;
|
|
||||||
keyZ = $2C;
|
|
||||||
key1 = $02;
|
|
||||||
key2 = $03;
|
|
||||||
key3 = $04;
|
|
||||||
key4 = $05;
|
|
||||||
key5 = $06;
|
|
||||||
key6 = $07;
|
|
||||||
key7 = $08;
|
|
||||||
key8 = $09;
|
|
||||||
key9 = $0A;
|
|
||||||
key0 = $0B;
|
|
||||||
keyMinus = $0C;
|
|
||||||
keyEqual = $0D;
|
|
||||||
keyLBracket = $1A;
|
|
||||||
keyRBracket = $1B;
|
|
||||||
keySemicolon = $27;
|
|
||||||
keyTick = $28;
|
|
||||||
keyApostrophe = $29;
|
|
||||||
keyBackslash = $2B;
|
|
||||||
keyComma = $33;
|
|
||||||
keyPeriod = $34;
|
|
||||||
keySlash = $35;
|
|
||||||
keyInsert = $D2;
|
|
||||||
keyDelete = $D3;
|
|
||||||
keyHome = $C7;
|
|
||||||
keyEnd = $CF;
|
|
||||||
keyPageUp = $C9;
|
|
||||||
keyArrowLeft = $CB;
|
|
||||||
keyArrowRight = $CD;
|
|
||||||
keyArrowUp = $C8;
|
|
||||||
keyArrowDown = $D0;
|
|
||||||
keyKeypad0 = $52;
|
|
||||||
keyKeypad1 = $4F;
|
|
||||||
keyKeypad2 = $50;
|
|
||||||
keyKeypad3 = $51;
|
|
||||||
keyKeypad4 = $4B;
|
|
||||||
keyKeypad5 = $4C;
|
|
||||||
keyKeypad6 = $4D;
|
|
||||||
keyKeypad7 = $47;
|
|
||||||
keyKeypad8 = $48;
|
|
||||||
keyKeypad9 = $49;
|
|
||||||
keyKeypadComma = $53;
|
|
||||||
keyKeypadStar = $37;
|
|
||||||
keyKeypadMinus = $4A;
|
|
||||||
keyKeypadPlus = $4E;
|
|
||||||
keyKeypadEnter = $9C;
|
|
||||||
keyCtrlPrtScr = $B7;
|
|
||||||
keyShiftPrtScr = $B7;
|
|
||||||
keyKeypadSlash = $B5;
|
|
||||||
keyNames : array [0..255] of PChar =
|
|
||||||
( { $00 } nil, 'Esc', '1', '2', '3', '4', '5', '6',
|
|
||||||
{ $08 } '7', '8', '9', '0', '+', 'Apostrophe', 'Backspace', 'Tab',
|
|
||||||
{ $10 } 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I',
|
|
||||||
{ $18 } 'O', 'P', '<27>', '?', 'Enter', 'Left Ctrl', 'A', 'S',
|
|
||||||
{ $20 } 'D', 'F', 'G', 'H', 'J', 'K', 'L', '™',
|
|
||||||
{ $28 } 'Ž', '''', 'Left shift', '<', 'Z', 'X', 'C', 'V',
|
|
||||||
{ $30 } 'B', 'N', 'M', ',', '.', '-', 'Right shift', '* (pad)',
|
|
||||||
{ $38 } 'Alt', 'Space', 'Caps Lock', 'F1', 'F2', 'F3', 'F4', 'F5',
|
|
||||||
{ $40 } 'F6', 'F7', 'F8', 'F9', 'F10', 'Num Lock', 'Scroll Lock', '7 (pad)',
|
|
||||||
{ $48 } '8 (pad)', '9 (pad)', '- (pad)', '4 (pad)', '5 (pad)', '6 (pad)', '+ (pad)', '1 (pad)',
|
|
||||||
{ $50 } '2 (pad)', '3 (pad)', '0 (pad)', ', (pad)', 'SysRq', nil, nil, 'F11', 'F12',
|
|
||||||
{ $59 } nil, nil, nil, nil, nil, nil, nil,
|
|
||||||
{ $60 } nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
|
|
||||||
{ $70 } nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
|
|
||||||
{ $80 } nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
|
|
||||||
{ $90 } nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 'Enter (pad)', 'Right Ctrl', nil, nil,
|
|
||||||
{ $A0 } nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
|
|
||||||
{ $B0 } nil, nil, nil, nil, nil, '/ (pad)', nil, 'PrtScr', 'Alt Gr', nil, nil, nil, nil, nil, nil, nil,
|
|
||||||
{ $C0 } nil, nil, nil, nil, nil, nil, nil, 'Home',
|
|
||||||
{ $C8 } 'Up arrow', 'Page Up', nil, 'Left arrow', nil, 'Right arrow', nil, 'End',
|
|
||||||
{ $D0 } 'Down arrow', nil, 'Insert', 'Delete', nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
|
|
||||||
{ $E0 } nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
|
|
||||||
{ $F0 } nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
procedure InstalarKb;
|
|
||||||
procedure DesinstalarKb;
|
|
||||||
function TeclaPuls( b : byte ) : Boolean;
|
|
||||||
function QTeclaPuls : Boolean;
|
|
||||||
function AgarrarTecla : Byte;
|
|
||||||
procedure BorrarKb;
|
|
||||||
procedure EscriuKb;
|
|
||||||
|
|
||||||
|
|
||||||
implementation
|
|
||||||
|
|
||||||
|
|
||||||
var
|
|
||||||
|
|
||||||
uOldInt9 : Pointer; { saves location of old OldInt9 vector }
|
|
||||||
uKeys : array [0..255] of Boolean; { array that holds key values }
|
|
||||||
e0Flag : Byte;
|
|
||||||
uExitProc : Pointer;
|
|
||||||
|
|
||||||
|
|
||||||
{$F+}
|
|
||||||
procedure NewInt9; interrupt; assembler;
|
|
||||||
asm
|
|
||||||
cli
|
|
||||||
in al, $60 { get scan code from keyboard port }
|
|
||||||
cmp al, $E0 { al = $E0 key ? }
|
|
||||||
jne @@SetScanCode
|
|
||||||
mov [e0Flag], 128
|
|
||||||
mov al, 20h { Send 'generic' EOI to PIC }
|
|
||||||
out 20h, al
|
|
||||||
jmp @@exit
|
|
||||||
@@SetScanCode:
|
|
||||||
mov bl, al { Save scancode in BL }
|
|
||||||
and bl, 01111111b
|
|
||||||
add bl, [e0Flag]
|
|
||||||
xor bh, bh
|
|
||||||
and al, 10000000b { keep break bit, if set }
|
|
||||||
xor al, 10000000b { flip bit, 1 means pressed, 0 no }
|
|
||||||
rol al, 1 { move breakbit to bit 0 }
|
|
||||||
mov [offset uKeys + bx], al
|
|
||||||
mov [e0Flag], 0
|
|
||||||
mov al, 20h { send EOI to PIC }
|
|
||||||
out 20h, al
|
|
||||||
@@exit:
|
|
||||||
sti
|
|
||||||
end;
|
|
||||||
{$F-}
|
|
||||||
|
|
||||||
|
|
||||||
procedure InstalarKb;
|
|
||||||
begin
|
|
||||||
GetIntVec( $09, uOldInt9); { save old location of INT 09 handler }
|
|
||||||
SetIntVec( $09, Addr( NewInt9)); { point to new routine }
|
|
||||||
FillChar( uKeys, SizeOf( uKeys), 0); { clear the keys array }
|
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
procedure DesinstalarKb;
|
|
||||||
begin
|
|
||||||
SetIntVec( $09, uOldInt9); { point back to original routine }
|
|
||||||
uOldInt9 := nil;
|
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
function TeclaPuls( b : byte ) : Boolean;
|
|
||||||
begin
|
|
||||||
TeclaPuls := uKeys[b];
|
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
function QTeclaPuls : Boolean;
|
|
||||||
var b : Integer;
|
|
||||||
begin
|
|
||||||
QTeclaPuls := True;
|
|
||||||
for b := 0 to 255 do
|
|
||||||
if uKeys[b] and (keyNames[b] <> nil) then
|
|
||||||
Exit;
|
|
||||||
QTeclaPuls := False;
|
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
function AgarrarTecla : Byte;
|
|
||||||
var b : Integer;
|
|
||||||
begin
|
|
||||||
AgarrarTecla := 0;
|
|
||||||
for b := 1 to 255 do
|
|
||||||
if uKeys[b] and (keyNames[b] <> nil) then
|
|
||||||
begin
|
|
||||||
AgarrarTecla := b;
|
|
||||||
Exit;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
procedure BorrarKb;
|
|
||||||
begin
|
|
||||||
FillChar( uKeys, SizeOf( uKeys), 0); { clear the keys array }
|
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
{$F+}
|
|
||||||
procedure CleanUp;
|
|
||||||
begin
|
|
||||||
ExitProc := uExitProc;
|
|
||||||
if uOldInt9 <> nil then
|
|
||||||
DesinstalarKb;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure EscriuKb;
|
|
||||||
var b:byte;
|
|
||||||
begin
|
|
||||||
for b := 0 to 255 do
|
|
||||||
if uKeys[b] and (keyNames[b] <> nil) then
|
|
||||||
write(keyNames[b],' | ');
|
|
||||||
writeln;
|
|
||||||
end;
|
|
||||||
|
|
||||||
{$F-}
|
|
||||||
|
|
||||||
|
|
||||||
begin
|
|
||||||
uExitProc := ExitProc;
|
|
||||||
ExitProc := @CleanUp;
|
|
||||||
uOldInt9 := nil;
|
|
||||||
end.
|
|
||||||
380
Makefile
Normal file
380
Makefile
Normal file
@@ -0,0 +1,380 @@
|
|||||||
|
# ==============================================================================
|
||||||
|
# DIRECTORIES
|
||||||
|
# ==============================================================================
|
||||||
|
DIR_ROOT := $(dir $(abspath $(MAKEFILE_LIST)))
|
||||||
|
DIR_SOURCES := $(addprefix $(DIR_ROOT), source/)
|
||||||
|
DIR_BIN := $(DIR_ROOT)
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# TARGET NAMES
|
||||||
|
# ==============================================================================
|
||||||
|
ifeq ($(OS),Windows_NT)
|
||||||
|
TARGET_NAME := $(shell powershell -Command "(Select-String -Path 'CMakeLists.txt' -Pattern 'project\s*\x28(\w+)').Matches.Groups[1].Value")
|
||||||
|
LONG_NAME := $(shell powershell -Command "(Select-String -Path 'CMakeLists.txt' -Pattern 'PROJECT_LONG_NAME\s+\x22(.+?)\x22').Matches.Groups[1].Value")
|
||||||
|
else
|
||||||
|
TARGET_NAME := $(shell awk '/^project/ {gsub(/[)(]/, " "); print $$2}' CMakeLists.txt)
|
||||||
|
LONG_NAME := $(shell grep 'PROJECT_LONG_NAME' CMakeLists.txt | sed 's/.*"\(.*\)".*/\1/')
|
||||||
|
endif
|
||||||
|
|
||||||
|
TARGET_FILE := $(DIR_BIN)$(TARGET_NAME)
|
||||||
|
RELEASE_FOLDER := $(TARGET_NAME)_release
|
||||||
|
RELEASE_FILE := $(RELEASE_FOLDER)/$(TARGET_NAME)
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# VERSION
|
||||||
|
# ==============================================================================
|
||||||
|
ifeq ($(OS),Windows_NT)
|
||||||
|
VERSION := v$(shell powershell -Command "(Select-String -Path 'CMakeLists.txt' -Pattern 'project.*VERSION\s+([0-9.]+)').Matches.Groups[1].Value")
|
||||||
|
else
|
||||||
|
VERSION := v$(shell grep "^project" CMakeLists.txt | tr -cd 0-9.)
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Release file names (depend on VERSION, so must come after)
|
||||||
|
ifeq ($(OS),Windows_NT)
|
||||||
|
RAW_VERSION := $(shell powershell -Command "\"$(VERSION)\" -replace '^v', ''")
|
||||||
|
else
|
||||||
|
RAW_VERSION := $(shell echo $(VERSION) | sed 's/^v//')
|
||||||
|
endif
|
||||||
|
WINDOWS_RELEASE := $(TARGET_NAME)-$(VERSION)-windows-x64.zip
|
||||||
|
MACOS_ARM_RELEASE := $(TARGET_NAME)-$(VERSION)-macos-arm64.dmg
|
||||||
|
MACOS_INTEL_RELEASE := $(TARGET_NAME)-$(VERSION)-macos-x64.dmg
|
||||||
|
LINUX_RELEASE := $(TARGET_NAME)-$(VERSION)-linux-x64.tar.gz
|
||||||
|
RPI_RELEASE := $(TARGET_NAME)-$(VERSION)-rpi-arm64.tar.gz
|
||||||
|
APP_NAME := $(LONG_NAME)
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# SOURCE FILES
|
||||||
|
# ==============================================================================
|
||||||
|
# Note: Source files are now auto-discovered by CMake using GLOB_RECURSE
|
||||||
|
# No need to maintain this list manually anymore!
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# PLATFORM-SPECIFIC UTILITIES
|
||||||
|
# ==============================================================================
|
||||||
|
# Use Unix commands always (MinGW Make uses bash even on Windows)
|
||||||
|
RMFILE := rm -f
|
||||||
|
RMDIR := rm -rf
|
||||||
|
MKDIR := mkdir -p
|
||||||
|
|
||||||
|
ifeq ($(OS),Windows_NT)
|
||||||
|
# Windows-specific: Force cmd.exe shell for PowerShell commands
|
||||||
|
SHELL := cmd.exe
|
||||||
|
else
|
||||||
|
# Unix-specific
|
||||||
|
UNAME_S := $(shell uname -s)
|
||||||
|
endif
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# PACKING TOOL
|
||||||
|
# ==============================================================================
|
||||||
|
PACK_TOOL := tools/pack_resources/pack_resources
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# DEFAULT GOAL
|
||||||
|
# ==============================================================================
|
||||||
|
.DEFAULT_GOAL := all
|
||||||
|
|
||||||
|
.PHONY: pack_tool resources.pack
|
||||||
|
|
||||||
|
pack_tool:
|
||||||
|
@make -C tools/pack_resources
|
||||||
|
|
||||||
|
resources.pack: pack_tool
|
||||||
|
@echo "Creating resources.pack..."
|
||||||
|
@./$(PACK_TOOL) data resources.pack
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# TARGETS
|
||||||
|
# ==============================================================================
|
||||||
|
.PHONY: all clean debug help backup
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# BUILD TARGETS (delegate to CMake)
|
||||||
|
# ==============================================================================
|
||||||
|
|
||||||
|
# Default target: build with CMake + resources
|
||||||
|
all: resources.pack $(TARGET_FILE)
|
||||||
|
|
||||||
|
$(TARGET_FILE):
|
||||||
|
@cmake -B build -DCMAKE_BUILD_TYPE=Release
|
||||||
|
@cmake --build build
|
||||||
|
@echo "Build successful: $(TARGET_FILE)"
|
||||||
|
|
||||||
|
# Debug build
|
||||||
|
debug: resources.pack
|
||||||
|
@cmake -B build -DCMAKE_BUILD_TYPE=Debug
|
||||||
|
@cmake --build build
|
||||||
|
@echo "Debug build successful: $(TARGET_FILE)"
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# RELEASE PACKAGING TARGETS
|
||||||
|
# ==============================================================================
|
||||||
|
|
||||||
|
# macOS Release (Apple Silicon)
|
||||||
|
.PHONY: macos_release
|
||||||
|
macos_release: pack_tool resources.pack
|
||||||
|
@echo "Creating macOS release - Version: $(VERSION)"
|
||||||
|
|
||||||
|
# Check/install create-dmg
|
||||||
|
@command -v create-dmg >/dev/null || (echo "Installing create-dmg..." && brew install create-dmg)
|
||||||
|
|
||||||
|
# Clean previous releases
|
||||||
|
@$(RMDIR) "$(RELEASE_FOLDER)" 2>/dev/null || true
|
||||||
|
@$(RMDIR) Frameworks 2>/dev/null || true
|
||||||
|
@$(RMFILE) "$(MACOS_ARM_RELEASE)" 2>/dev/null || true
|
||||||
|
|
||||||
|
# Create .app structure
|
||||||
|
@$(MKDIR) "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Frameworks"
|
||||||
|
@$(MKDIR) "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/MacOS"
|
||||||
|
@$(MKDIR) "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Resources"
|
||||||
|
@$(MKDIR) Frameworks
|
||||||
|
|
||||||
|
# Copy resources.pack to Resources
|
||||||
|
@cp resources.pack "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Resources/"
|
||||||
|
@ditto release/frameworks/SDL3.xcframework/macos-arm64_x86_64/SDL3.framework "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Frameworks/SDL3.framework"
|
||||||
|
@ditto release/frameworks/SDL3.xcframework/macos-arm64_x86_64/SDL3.framework Frameworks/SDL3.framework
|
||||||
|
|
||||||
|
# Recreate framework symlinks (may be broken)
|
||||||
|
@cd Frameworks/SDL3.framework && rm -f SDL3 Headers Resources && \
|
||||||
|
ln -s Versions/Current/SDL3 SDL3 && \
|
||||||
|
ln -s Versions/Current/Headers Headers && \
|
||||||
|
ln -s Versions/Current/Resources Resources
|
||||||
|
@cd Frameworks/SDL3.framework/Versions && rm -f Current && ln -s A Current
|
||||||
|
@cd "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Frameworks/SDL3.framework" && rm -f SDL3 Headers Resources && \
|
||||||
|
ln -s Versions/Current/SDL3 SDL3 && \
|
||||||
|
ln -s Versions/Current/Headers Headers && \
|
||||||
|
ln -s Versions/Current/Resources Resources
|
||||||
|
@cd "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Frameworks/SDL3.framework/Versions" && rm -f Current && ln -s A Current
|
||||||
|
|
||||||
|
@cp release/icon.icns "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Resources/"
|
||||||
|
@cp release/Info.plist "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/"
|
||||||
|
@cp LICENSE "$(RELEASE_FOLDER)/" 2>/dev/null || echo "Warning: LICENSE not found"
|
||||||
|
@cp README.md "$(RELEASE_FOLDER)/" 2>/dev/null || echo "Warning: README.md not found"
|
||||||
|
|
||||||
|
# Update Info.plist version and names
|
||||||
|
@echo "Updating Info.plist with version $(RAW_VERSION) and names..."
|
||||||
|
@sed -i '' '/<key>CFBundleShortVersionString<\/key>/{n;s|<string>.*</string>|<string>$(RAW_VERSION)</string>|;}' \
|
||||||
|
"$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Info.plist"
|
||||||
|
@sed -i '' '/<key>CFBundleVersion<\/key>/{n;s|<string>.*</string>|<string>$(RAW_VERSION)</string>|;}' \
|
||||||
|
"$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Info.plist"
|
||||||
|
@sed -i '' '/<key>CFBundleExecutable<\/key>/{n;s|<string>.*</string>|<string>$(TARGET_NAME)</string>|;}' \
|
||||||
|
"$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Info.plist"
|
||||||
|
@sed -i '' '/<key>CFBundleName<\/key>/{n;s|<string>.*</string>|<string>$(APP_NAME)</string>|;}' \
|
||||||
|
"$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Info.plist"
|
||||||
|
@sed -i '' '/<key>CFBundleDisplayName<\/key>/{n;s|<string>.*</string>|<string>$(APP_NAME)</string>|;}' \
|
||||||
|
"$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Info.plist"
|
||||||
|
|
||||||
|
# Compile for Apple Silicon using CMake
|
||||||
|
@cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES=arm64
|
||||||
|
@cmake --build build
|
||||||
|
@cp $(TARGET_FILE) "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/MacOS/$(TARGET_NAME)"
|
||||||
|
|
||||||
|
# Code sign
|
||||||
|
@codesign --deep --force --sign - --timestamp=none "$(RELEASE_FOLDER)/$(APP_NAME).app" || echo "Warning: Code signing failed"
|
||||||
|
|
||||||
|
# Create DMG
|
||||||
|
@echo "Creating DMG for Apple Silicon..."
|
||||||
|
@create-dmg \
|
||||||
|
--volname "$(APP_NAME)" \
|
||||||
|
--window-pos 200 120 \
|
||||||
|
--window-size 720 300 \
|
||||||
|
--icon-size 96 \
|
||||||
|
--text-size 12 \
|
||||||
|
--icon "$(APP_NAME).app" 278 102 \
|
||||||
|
--icon "LICENSE" 441 102 \
|
||||||
|
--icon "README.md" 604 102 \
|
||||||
|
--app-drop-link 115 102 \
|
||||||
|
--hide-extension "$(APP_NAME).app" \
|
||||||
|
"$(MACOS_ARM_RELEASE)" \
|
||||||
|
"$(RELEASE_FOLDER)" || true
|
||||||
|
@echo "✓ macOS release created: $(MACOS_ARM_RELEASE)"
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
@$(RMDIR) Frameworks
|
||||||
|
@$(RMDIR) "$(RELEASE_FOLDER)"
|
||||||
|
|
||||||
|
# Linux Release
|
||||||
|
.PHONY: linux_release
|
||||||
|
linux_release: pack_tool resources.pack
|
||||||
|
@echo "Creating Linux release - Version: $(VERSION)"
|
||||||
|
@echo "Note: SDL3 must be installed on the target system (libsdl3-dev)"
|
||||||
|
|
||||||
|
# Clean previous
|
||||||
|
@$(RMDIR) "$(RELEASE_FOLDER)"
|
||||||
|
@$(RMFILE) "$(LINUX_RELEASE)"
|
||||||
|
|
||||||
|
# Create folder
|
||||||
|
@$(MKDIR) "$(RELEASE_FOLDER)"
|
||||||
|
|
||||||
|
# Copy resources
|
||||||
|
@cp resources.pack "$(RELEASE_FOLDER)/"
|
||||||
|
@cp LICENSE "$(RELEASE_FOLDER)/" 2>/dev/null || echo "Warning: LICENSE not found"
|
||||||
|
@cp README.md "$(RELEASE_FOLDER)/" 2>/dev/null || echo "Warning: README.md not found"
|
||||||
|
|
||||||
|
# Compile with CMake
|
||||||
|
@cmake -B build -DCMAKE_BUILD_TYPE=Release
|
||||||
|
@cmake --build build
|
||||||
|
@cp $(TARGET_FILE) "$(RELEASE_FILE)"
|
||||||
|
@strip -s -R .comment -R .gnu.version "$(RELEASE_FILE)" --strip-unneeded || strip "$(RELEASE_FILE)"
|
||||||
|
|
||||||
|
# Package
|
||||||
|
@tar -czf "$(LINUX_RELEASE)" -C "$(RELEASE_FOLDER)" .
|
||||||
|
@echo "✓ Linux release created: $(LINUX_RELEASE)"
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
@$(RMDIR) "$(RELEASE_FOLDER)"
|
||||||
|
|
||||||
|
# Windows Release (requires MinGW on Windows or cross-compiler on Linux)
|
||||||
|
.PHONY: windows_release
|
||||||
|
windows_release: pack_tool resources.pack
|
||||||
|
@echo off
|
||||||
|
@echo Creating Windows release - Version: $(VERSION)
|
||||||
|
@powershell if (Test-Path "$(RELEASE_FOLDER)") {Remove-Item "$(RELEASE_FOLDER)" -Recurse -Force}
|
||||||
|
@powershell if (Test-Path "$(WINDOWS_RELEASE)") {Remove-Item "$(WINDOWS_RELEASE)"}
|
||||||
|
@powershell if (-not (Test-Path "$(RELEASE_FOLDER)")) {New-Item "$(RELEASE_FOLDER)" -ItemType Directory}
|
||||||
|
@powershell Copy-Item -Path "resources.pack" -Destination "$(RELEASE_FOLDER)"
|
||||||
|
@powershell Copy-Item "release\dll\SDL3.dll" -Destination "$(RELEASE_FOLDER)"
|
||||||
|
@powershell Copy-Item "release\dll\libwinpthread-1.dll" -Destination "$(RELEASE_FOLDER)"
|
||||||
|
@powershell if (Test-Path "LICENSE") {Copy-Item "LICENSE" -Destination "$(RELEASE_FOLDER)"}
|
||||||
|
@powershell if (Test-Path "README.md") {Copy-Item "README.md" -Destination "$(RELEASE_FOLDER)"}
|
||||||
|
@windres release/$(TARGET_NAME).rc -O coff -o release/$(TARGET_NAME).res 2>nul || echo Warning: windres failed
|
||||||
|
@cmake -B build -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release
|
||||||
|
@cmake --build build
|
||||||
|
@powershell if (Test-Path "$(TARGET_FILE).exe") {Copy-Item "$(TARGET_FILE).exe" -Destination "$(RELEASE_FILE).exe"} else {Copy-Item "$(TARGET_FILE)" -Destination "$(RELEASE_FILE).exe"}
|
||||||
|
@strip "$(RELEASE_FILE).exe" 2>nul || echo Warning: strip not available
|
||||||
|
@powershell Compress-Archive -Path "$(RELEASE_FOLDER)\*" -DestinationPath "$(WINDOWS_RELEASE)" -Force
|
||||||
|
@echo Release created: $(WINDOWS_RELEASE)
|
||||||
|
@powershell if (Test-Path "$(RELEASE_FOLDER)") {Remove-Item "$(RELEASE_FOLDER)" -Recurse -Force}
|
||||||
|
|
||||||
|
# Raspberry Pi Release (cross-compilation from Linux/macOS)
|
||||||
|
.PHONY: rpi_release
|
||||||
|
rpi_release:
|
||||||
|
@echo "Creating Raspberry Pi ARM64 release - Version: $(VERSION)"
|
||||||
|
@echo "Note: Requires aarch64-linux-gnu-g++ cross-compiler"
|
||||||
|
|
||||||
|
# Check for cross-compiler
|
||||||
|
@command -v aarch64-linux-gnu-g++ >/dev/null || (echo "Error: aarch64-linux-gnu-g++ not found" && exit 1)
|
||||||
|
|
||||||
|
# Clean previous
|
||||||
|
@$(RMDIR) "$(RELEASE_FOLDER)"
|
||||||
|
@$(RMFILE) "$(RPI_RELEASE)"
|
||||||
|
|
||||||
|
# Create folder
|
||||||
|
@$(MKDIR) "$(RELEASE_FOLDER)"
|
||||||
|
|
||||||
|
# Copy resources
|
||||||
|
@cp resources.pack "$(RELEASE_FOLDER)/"
|
||||||
|
@cp LICENSE "$(RELEASE_FOLDER)/" 2>/dev/null || echo "Warning: LICENSE not found"
|
||||||
|
@cp README.md "$(RELEASE_FOLDER)/" 2>/dev/null || echo "Warning: README.md not found"
|
||||||
|
|
||||||
|
# Note: Cross-compilation with CMake is complex, would need toolchain file
|
||||||
|
@echo "Warning: RPI cross-compilation requires manual setup with CMake toolchain file"
|
||||||
|
@echo "Falling back to direct g++ compilation..."
|
||||||
|
@aarch64-linux-gnu-g++ -std=c++20 -Wall -O2 -DLINUX_BUILD -DRPI_BUILD \
|
||||||
|
-Isource -Ibuild \
|
||||||
|
$$(find source/core source/game -name "*.cpp") source/main.cpp \
|
||||||
|
-lSDL3 -o "$(RELEASE_FILE)" || echo "Error: Compilation failed"
|
||||||
|
@aarch64-linux-gnu-strip -s -R .comment -R .gnu.version "$(RELEASE_FILE)" --strip-unneeded || true
|
||||||
|
|
||||||
|
# Package
|
||||||
|
@tar -czf "$(RPI_RELEASE)" -C "$(RELEASE_FOLDER)" .
|
||||||
|
@echo "✓ Raspberry Pi release created: $(RPI_RELEASE)"
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
@$(RMDIR) "$(RELEASE_FOLDER)"
|
||||||
|
|
||||||
|
# Windows Cross-compilation (from Linux/macOS)
|
||||||
|
.PHONY: windows_cross
|
||||||
|
windows_cross:
|
||||||
|
@echo "Cross-compiling for Windows from $(UNAME_S) - Version: $(VERSION)"
|
||||||
|
|
||||||
|
# Check for cross-compiler
|
||||||
|
@command -v x86_64-w64-mingw32-g++ >/dev/null || (echo "Error: x86_64-w64-mingw32-g++ not found" && exit 1)
|
||||||
|
|
||||||
|
# Clean previous
|
||||||
|
@$(RMDIR) "$(RELEASE_FOLDER)"
|
||||||
|
@$(RMFILE) "$(WINDOWS_RELEASE)"
|
||||||
|
|
||||||
|
# Create folder
|
||||||
|
@$(MKDIR) "$(RELEASE_FOLDER)"
|
||||||
|
|
||||||
|
# Copy resources
|
||||||
|
@cp resources.pack "$(RELEASE_FOLDER)/"
|
||||||
|
@cp release/dll/SDL3.dll release/dll/libwinpthread-1.dll "$(RELEASE_FOLDER)/"
|
||||||
|
@cp LICENSE "$(RELEASE_FOLDER)/" 2>/dev/null || echo "Warning: LICENSE not found"
|
||||||
|
@cp README.md "$(RELEASE_FOLDER)/" 2>/dev/null || echo "Warning: README.md not found"
|
||||||
|
|
||||||
|
# Compile resource file
|
||||||
|
@x86_64-w64-mingw32-windres release/$(TARGET_NAME).rc -O coff -o release/$(TARGET_NAME).res 2>/dev/null || echo "Warning: windres failed"
|
||||||
|
|
||||||
|
# Cross-compile
|
||||||
|
@echo "Compiling with MinGW cross-compiler..."
|
||||||
|
@x86_64-w64-mingw32-g++ -std=c++20 -Wall -O2 -DWINDOWS_BUILD -DRELEASE_BUILD \
|
||||||
|
-static-libstdc++ -static-libgcc -Wl,-subsystem,windows \
|
||||||
|
-Isource -Ibuild \
|
||||||
|
$$(find source/core source/game -name "*.cpp") source/main.cpp \
|
||||||
|
release/$(TARGET_NAME).res \
|
||||||
|
-lmingw32 -lSDL3 -o "$(RELEASE_FILE).exe" || echo "Error: Compilation failed"
|
||||||
|
@x86_64-w64-mingw32-strip "$(RELEASE_FILE).exe" || true
|
||||||
|
|
||||||
|
# Package
|
||||||
|
@cd "$(RELEASE_FOLDER)" && zip -r ../$(WINDOWS_RELEASE) *
|
||||||
|
@echo "✓ Windows cross-compiled release created: $(WINDOWS_RELEASE)"
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
@$(RMDIR) "$(RELEASE_FOLDER)"
|
||||||
|
|
||||||
|
# Clean build artifacts
|
||||||
|
clean:
|
||||||
|
ifeq ($(OS),Windows_NT)
|
||||||
|
@if exist $(call FixPath,$(TARGET_FILE).exe) $(RMFILE) $(call FixPath,$(TARGET_FILE).exe)
|
||||||
|
@if exist $(call FixPath,$(TARGET_FILE)_debug.exe) $(RMFILE) $(call FixPath,$(TARGET_FILE)_debug.exe)
|
||||||
|
@if exist build $(RMDIR) build
|
||||||
|
@if exist $(RELEASE_FOLDER) $(RMDIR) $(RELEASE_FOLDER)
|
||||||
|
else
|
||||||
|
@$(RMFILE) $(TARGET_FILE) $(TARGET_FILE)_debug
|
||||||
|
@$(RMDIR) build $(RELEASE_FOLDER)
|
||||||
|
@$(RMFILE) *.dmg *.zip *.tar.gz 2>/dev/null || true
|
||||||
|
@$(RMFILE) resources.pack 2>/dev/null || true
|
||||||
|
@make -C tools/pack_resources clean 2>/dev/null || true
|
||||||
|
endif
|
||||||
|
@echo "Clean complete"
|
||||||
|
|
||||||
|
# Backup to remote server
|
||||||
|
backup:
|
||||||
|
@echo "Backing up project to maverick:/home/sergio/git-backup/orni..."
|
||||||
|
rsync -a --delete \
|
||||||
|
--exclude='build/' \
|
||||||
|
--exclude='*.o' \
|
||||||
|
--exclude='*.exe' \
|
||||||
|
--exclude='orni' \
|
||||||
|
--exclude='orni_debug' \
|
||||||
|
--exclude='*_release/' \
|
||||||
|
$(DIR_ROOT) maverick:/home/sergio/git-backup/orni/
|
||||||
|
@echo "Backup completed successfully"
|
||||||
|
|
||||||
|
# Help target
|
||||||
|
help:
|
||||||
|
@echo "Available targets:"
|
||||||
|
@echo ""
|
||||||
|
@echo "Build:"
|
||||||
|
@echo " all - Build the game (default, delegates to CMake)"
|
||||||
|
@echo " debug - Build with debug symbols"
|
||||||
|
@echo " clean - Remove build artifacts and release packages"
|
||||||
|
@echo ""
|
||||||
|
@echo "Release Packaging:"
|
||||||
|
@echo " macos_release - Create macOS .app bundle + .dmg (Apple Silicon)"
|
||||||
|
@echo " linux_release - Create Linux .tar.gz"
|
||||||
|
@echo " windows_release - Create Windows .zip (requires MinGW on Windows)"
|
||||||
|
@echo " windows_cross - Cross-compile Windows from Linux/macOS (requires MinGW)"
|
||||||
|
@echo " rpi_release - Cross-compile for Raspberry Pi ARM64"
|
||||||
|
@echo ""
|
||||||
|
@echo "Other:"
|
||||||
|
@echo " backup - Backup project to remote server"
|
||||||
|
@echo " help - Show this help message"
|
||||||
|
@echo ""
|
||||||
|
@echo "Current configuration:"
|
||||||
|
@echo " Project: $(LONG_NAME)"
|
||||||
|
@echo " Target: $(TARGET_NAME)"
|
||||||
|
@echo " Version: $(VERSION)"
|
||||||
|
@echo " Platform: $(UNAME_S)"
|
||||||
77
README.md
77
README.md
@@ -1,20 +1,71 @@
|
|||||||
# Asteroids
|
<div align="center">
|
||||||
|
<img src="https://php.sustancia.synology.me/images/orni_attack/orni_attack_1.png" width="600" alt="Orni Attack">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
# Orni Attack
|
||||||
|
|
||||||
Destrueix als cosinus mesisinus que ens ataquen montats en ORNIs!
|
Destrueix als cosinus mesisinus que ens ataquen montats en ORNIs!
|
||||||
<img width="752" src="https://user-images.githubusercontent.com/110221325/184473983-a07c8594-f87c-4e6a-b723-b0a0f8d08e85.png">
|
|
||||||
|
---
|
||||||
|
|
||||||
## Controls
|
## Controls
|
||||||
* `cursor amunt` accelerar
|
|
||||||
* `cursor avall` frenar
|
|
||||||
* `cursor dreta` rotar en el sentit de les agulles del rellotge
|
|
||||||
* `cursor esquerra`rotar en l'altre sentit
|
|
||||||
* `espai` disparar
|
|
||||||
* `esc` eixir
|
|
||||||
|
|
||||||
Nomes tens una bala a l'hora. Crec que els teus dispars encara no fan pupa als ORNIs. Pero si ells te toquen sí que rebentes.
|
El joc permet l'ús del teclat per a controlar la nau i la finestra. Les tecles són les següents:
|
||||||
|
|
||||||
## Com jugar hui en dia
|
| Tecla | Acció |
|
||||||
|
|-------|-------|
|
||||||
|
| **↑** | Accelerar la nau |
|
||||||
|
| **↓** | Frenar |
|
||||||
|
| **←** | Rotar a l'esquerra |
|
||||||
|
| **→** | Rotar a la dreta |
|
||||||
|
| **Espai** | Disparar |
|
||||||
|
| **ESC** | Eixir del joc |
|
||||||
|
| **F1** | Disminuir la mida de la finestra |
|
||||||
|
| **F2** | Augmentar la mida de la finestra |
|
||||||
|
| **F3** | Alternar pantalla completa |
|
||||||
|
|
||||||
Amb DosBox. Augmenta cicles, uns 30000 en el meu macbook.
|
---
|
||||||
|
|
||||||
## Com compilar hui en dia
|
## Compilació i execució
|
||||||
|
|
||||||
Turbo Pascal 7 desde DosBox. No m'ha fet falta activar res.
|
### Compilar el joc
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make # Compilar
|
||||||
|
make debug # Compilació en mode debug
|
||||||
|
make clean # Netejar fitxers compilats
|
||||||
|
./orni # Executar
|
||||||
|
```
|
||||||
|
|
||||||
|
### Crear versions release
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make macos_release # macOS .app bundle + .dmg (Apple Silicon)
|
||||||
|
make linux_release # Linux .tar.gz
|
||||||
|
make windows_release # Windows .zip (requereix MinGW a Windows)
|
||||||
|
make windows_cross # Cross-compilació Windows des de Linux/macOS
|
||||||
|
make rpi_release # Raspberry Pi ARM64 cross-compilació
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Requisits
|
||||||
|
|
||||||
|
- **C++20** compatible compiler
|
||||||
|
- **SDL3** library
|
||||||
|
- **CMake** 3.15 o superior
|
||||||
|
|
||||||
|
### Plataformes suportades
|
||||||
|
|
||||||
|
- macOS (Apple Silicon i Intel)
|
||||||
|
- Linux (x86_64)
|
||||||
|
- Windows (MinGW)
|
||||||
|
- Raspberry Pi (ARM64)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Història
|
||||||
|
|
||||||
|
Joc original creat en **Turbo Pascal 7 per a DOS** (1999), ara migrat a **C++20 amb SDL3**. Aquest port modern preserva la jugabilitat i l'estètica de l'original mentre aprofita les capacitats dels sistemes actuals.
|
||||||
|
|
||||||
|
**Versió actual**: BETA 3.0
|
||||||
|
|||||||
2134
data/gamecontrollerdb.txt
Normal file
2134
data/gamecontrollerdb.txt
Normal file
File diff suppressed because it is too large
Load Diff
BIN
data/music/game.ogg
Normal file
BIN
data/music/game.ogg
Normal file
Binary file not shown.
BIN
data/music/title.ogg
Normal file
BIN
data/music/title.ogg
Normal file
Binary file not shown.
23
data/shapes/bullet.shp
Normal file
23
data/shapes/bullet.shp
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# bullet.shp - Projectil (petit pentàgon)
|
||||||
|
# © 1999 Visente i Sergi (versió Pascal)
|
||||||
|
# © 2025 Port a C++20 amb SDL3
|
||||||
|
|
||||||
|
name: bullet
|
||||||
|
scale: 1.0
|
||||||
|
center: 0, 0
|
||||||
|
|
||||||
|
# Cercle (octàgon regular radi=3)
|
||||||
|
# 8 punts equidistants (45° entre ells) per aproximar un cercle
|
||||||
|
# Començant a angle=-90° (amunt), rotant sentit horari
|
||||||
|
#
|
||||||
|
# Conversió polar→cartesià (radi=3, SDL: Y creix cap avall):
|
||||||
|
# angle=-90°: (0.00, -3.00)
|
||||||
|
# angle=-45°: (2.12, -2.12)
|
||||||
|
# angle=0°: (3.00, 0.00)
|
||||||
|
# angle=45°: (2.12, 2.12)
|
||||||
|
# angle=90°: (0.00, 3.00)
|
||||||
|
# angle=135°: (-2.12, 2.12)
|
||||||
|
# angle=180°: (-3.00, 0.00)
|
||||||
|
# angle=225°: (-2.12, -2.12)
|
||||||
|
|
||||||
|
polyline: 0,-3 2.12,-2.12 3,0 2.12,2.12 0,3 -2.12,2.12 -3,0 -2.12,-2.12 0,-3
|
||||||
21
data/shapes/enemy_pentagon.shp
Normal file
21
data/shapes/enemy_pentagon.shp
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# enemy_pentagon.shp - ORNI enemic (pentàgon regular)
|
||||||
|
# © 1999 Visente i Sergi (versió Pascal)
|
||||||
|
# © 2025 Port a C++20 amb SDL3
|
||||||
|
|
||||||
|
name: enemy_pentagon
|
||||||
|
scale: 1.0
|
||||||
|
center: 0, 0
|
||||||
|
|
||||||
|
# Pentàgon regular radi=20
|
||||||
|
# 5 punts equidistants al voltant d'un cercle (72° entre ells)
|
||||||
|
# Començant a angle=-90° (amunt), rotant sentit antihorari
|
||||||
|
#
|
||||||
|
# Angles: -90°, -18°, 54°, 126°, 198°
|
||||||
|
# Conversió polar→cartesià (SDL: Y creix cap avall):
|
||||||
|
# angle=-90°: (0.00, -20.00)
|
||||||
|
# angle=-18°: (19.02, -6.18)
|
||||||
|
# angle=54°: (11.76, 16.18)
|
||||||
|
# angle=126°: (-11.76, 16.18)
|
||||||
|
# angle=198°: (-19.02, -6.18)
|
||||||
|
|
||||||
|
polyline: 0,-20 19.02,-6.18 11.76,16.18 -11.76,16.18 -19.02,-6.18 0,-20
|
||||||
30
data/shapes/enemy_pinwheel.shp
Normal file
30
data/shapes/enemy_pinwheel.shp
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# enemy_pinwheel.shp - ORNI enemic (molinillo de 4 triangles)
|
||||||
|
# © 2025 Port a C++20 amb SDL3
|
||||||
|
|
||||||
|
name: enemy_pinwheel
|
||||||
|
scale: 1.0
|
||||||
|
center: 0, 0
|
||||||
|
|
||||||
|
# Molinillo: 4 triangles, un en cada quadrant
|
||||||
|
# Cada triangle comparteix el centre (0,0) i té:
|
||||||
|
# - Un vèrtex en un eix (±20, 0) o (0, ±20)
|
||||||
|
# - Un vèrtex en la diagonal del quadrant (±14.14, ±14.14)
|
||||||
|
# - El tercer vèrtex al centre (0,0)
|
||||||
|
#
|
||||||
|
# Geometria:
|
||||||
|
# Triangle 1 (quadrant superior-dret): centre → eix dret → diagonal
|
||||||
|
# Triangle 2 (quadrant superior-esq): centre → eix superior → diagonal
|
||||||
|
# Triangle 3 (quadrant inferior-esq): centre → eix esquerre → diagonal
|
||||||
|
# Triangle 4 (quadrant inferior-dret): centre → eix inferior → diagonal
|
||||||
|
|
||||||
|
# Triangle 1: quadrant superior-dret
|
||||||
|
polyline: 0,0 20,0 14.14,-14.14 0,0
|
||||||
|
|
||||||
|
# Triangle 2: quadrant superior-esquerre
|
||||||
|
polyline: 0,0 0,-20 -14.14,-14.14 0,0
|
||||||
|
|
||||||
|
# Triangle 3: quadrant inferior-esquerre
|
||||||
|
polyline: 0,0 -20,0 -14.14,14.14 0,0
|
||||||
|
|
||||||
|
# Triangle 4: quadrant inferior-dret
|
||||||
|
polyline: 0,0 0,20 14.14,14.14 0,0
|
||||||
19
data/shapes/enemy_square.shp
Normal file
19
data/shapes/enemy_square.shp
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# enemy_square.shp - ORNI enemic (quadrat regular)
|
||||||
|
# © 2025 Port a C++20 amb SDL3
|
||||||
|
|
||||||
|
name: enemy_square
|
||||||
|
scale: 1.0
|
||||||
|
center: 0, 0
|
||||||
|
|
||||||
|
# Quadrat regular radi=20 (circumscrit)
|
||||||
|
# 4 punts equidistants al voltant d'un cercle (90° entre ells)
|
||||||
|
# Començant a angle=-90° (amunt), rotant sentit horari
|
||||||
|
#
|
||||||
|
# Angles: -90°, 0°, 90°, 180°
|
||||||
|
# Conversió polar→cartesià (SDL: Y creix cap avall):
|
||||||
|
# angle=-90°: (0.00, -20.00)
|
||||||
|
# angle=0°: (20.00, 0.00)
|
||||||
|
# angle=90°: (0.00, 20.00)
|
||||||
|
# angle=180°: (-20.00, 0.00)
|
||||||
|
|
||||||
|
polyline: 0,-20 20,0 0,20 -20,0 0,-20
|
||||||
10
data/shapes/font/char_0.shp
Normal file
10
data/shapes/font/char_0.shp
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# char_0.shp - Dígito 0
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
# Rectángulo cerrado (polyline continua, NO 6 líneas separadas)
|
||||||
|
|
||||||
|
name: char_0
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Rectángulo cerrado
|
||||||
|
polyline: 2,10 18,10 18,30 2,30 2,10
|
||||||
10
data/shapes/font/char_1.shp
Normal file
10
data/shapes/font/char_1.shp
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# char_1.shp - Dígito 1
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
# Línea vertical simple centrada
|
||||||
|
|
||||||
|
name: char_1
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Línea vertical central
|
||||||
|
line: 10,10 10,30
|
||||||
10
data/shapes/font/char_2.shp
Normal file
10
data/shapes/font/char_2.shp
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# char_2.shp - Dígito 2
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
# Forma de "2" con curva simulada (polyline continua)
|
||||||
|
|
||||||
|
name: char_2
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Trazo continuo en forma de S achatada
|
||||||
|
polyline: 2,10 18,10 18,20 2,20 2,30 18,30
|
||||||
11
data/shapes/font/char_3.shp
Normal file
11
data/shapes/font/char_3.shp
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# char_3.shp - Dígito 3
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
# Forma de "3" con dos curvas (polylines)
|
||||||
|
|
||||||
|
name: char_3
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Trazo continuo (barra superior + lateral derecho + barra media + lateral derecho + barra inferior)
|
||||||
|
polyline: 2,10 18,10 18,20 8,20
|
||||||
|
polyline: 8,20 18,20 18,30 2,30
|
||||||
12
data/shapes/font/char_4.shp
Normal file
12
data/shapes/font/char_4.shp
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# char_4.shp - Dígito 4
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
# Forma de "4" con líneas continuas
|
||||||
|
|
||||||
|
name: char_4
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Trazo principal (vertical izquierda + horizontal + vertical derecha superior)
|
||||||
|
polyline: 2,10 2,20 18,20
|
||||||
|
# Vertical derecha completa (cruza la horizontal)
|
||||||
|
line: 18,10 18,30
|
||||||
10
data/shapes/font/char_5.shp
Normal file
10
data/shapes/font/char_5.shp
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# char_5.shp - Dígito 5
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
# Forma de "5" con curva (polyline continua)
|
||||||
|
|
||||||
|
name: char_5
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Trazo continuo en forma de S invertida
|
||||||
|
polyline: 18,10 2,10 2,20 18,20 18,30 2,30
|
||||||
10
data/shapes/font/char_6.shp
Normal file
10
data/shapes/font/char_6.shp
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# char_6.shp - Dígito 6
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
# Forma de "6" con espiral (polyline continua)
|
||||||
|
|
||||||
|
name: char_6
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Trazo continuo: barra superior + lateral izquierdo + barra media + lateral derecho inferior + barra inferior + cierre
|
||||||
|
polyline: 18,10 2,10 2,30 18,30 18,20 2,20
|
||||||
10
data/shapes/font/char_7.shp
Normal file
10
data/shapes/font/char_7.shp
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# char_7.shp - Dígito 7
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
# Línea horizontal superior + diagonal hacia abajo-derecha
|
||||||
|
|
||||||
|
name: char_7
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Barra superior + diagonal
|
||||||
|
polyline: 2,10 18,10 18,30
|
||||||
12
data/shapes/font/char_8.shp
Normal file
12
data/shapes/font/char_8.shp
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# char_8.shp - Dígito 8
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
# Dos rectángulos apilados (polylines continuas)
|
||||||
|
|
||||||
|
name: char_8
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Rectángulo superior
|
||||||
|
polyline: 2,10 18,10 18,20 2,20 2,10
|
||||||
|
# Rectángulo inferior (comparte borde con el superior)
|
||||||
|
polyline: 2,20 18,20 18,30 2,30 2,20
|
||||||
10
data/shapes/font/char_9.shp
Normal file
10
data/shapes/font/char_9.shp
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# char_9.shp - Dígito 9
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
# Forma de "9" con espiral (polyline continua)
|
||||||
|
|
||||||
|
name: char_9
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Trazo continuo: lateral derecho completo + barra superior + lateral izquierdo superior + barra media
|
||||||
|
polyline: 18,30 18,10 2,10 2,20 18,20
|
||||||
11
data/shapes/font/char_A.shp
Normal file
11
data/shapes/font/char_A.shp
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# char_A.shp - Letra A
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_A
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Forma triangular (dos diagonales hacia arriba)
|
||||||
|
polyline: 2,30 10,10 18,30
|
||||||
|
# Barra horizontal media
|
||||||
|
line: 5,22 15,22
|
||||||
11
data/shapes/font/char_B.shp
Normal file
11
data/shapes/font/char_B.shp
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# char_B.shp - Letra B
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_B
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Rectángulo superior
|
||||||
|
polyline: 2,10 14,10 14,20 2,20 2,10
|
||||||
|
# Rectángulo inferior (más ancho)
|
||||||
|
polyline: 2,20 16,20 16,30 2,30 2,20
|
||||||
9
data/shapes/font/char_C.shp
Normal file
9
data/shapes/font/char_C.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# char_C.shp - Letra C
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_C
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Curva simulada (semicírculo abierto a la derecha)
|
||||||
|
polyline: 18,12 14,10 6,10 2,14 2,26 6,30 14,30 18,28
|
||||||
9
data/shapes/font/char_D.shp
Normal file
9
data/shapes/font/char_D.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# char_D.shp - Letra D
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_D
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Vertical izquierda + curva derecha simulada
|
||||||
|
polyline: 2,10 14,10 18,14 18,26 14,30 2,30 2,10
|
||||||
10
data/shapes/font/char_E.shp
Normal file
10
data/shapes/font/char_E.shp
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# char_E.shp - Letra E
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_E
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Forma de E (vertical izquierda + 3 horizontales)
|
||||||
|
polyline: 18,10 2,10 2,30 18,30
|
||||||
|
line: 2,20 14,20
|
||||||
10
data/shapes/font/char_F.shp
Normal file
10
data/shapes/font/char_F.shp
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# char_F.shp - Letra F
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_F
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Vertical izquierda + barra superior + barra media
|
||||||
|
polyline: 2,30 2,10 18,10
|
||||||
|
line: 2,20 14,20
|
||||||
9
data/shapes/font/char_G.shp
Normal file
9
data/shapes/font/char_G.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# char_G.shp - Letra G
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_G
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Como C pero con barra horizontal hacia adentro
|
||||||
|
polyline: 18,12 14,10 6,10 2,14 2,26 6,30 14,30 18,28 18,20 12,20
|
||||||
13
data/shapes/font/char_H.shp
Normal file
13
data/shapes/font/char_H.shp
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# char_H.shp - Letra H
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_H
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Vertical izquierda
|
||||||
|
line: 2,10 2,30
|
||||||
|
# Vertical derecha
|
||||||
|
line: 18,10 18,30
|
||||||
|
# Barra media
|
||||||
|
line: 2,20 18,20
|
||||||
9
data/shapes/font/char_I.shp
Normal file
9
data/shapes/font/char_I.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# char_I.shp - Letra I
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_I
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Línea vertical central
|
||||||
|
line: 10,10 10,30
|
||||||
9
data/shapes/font/char_J.shp
Normal file
9
data/shapes/font/char_J.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# char_J.shp - Letra J
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_J
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Vertical derecha con curva abajo-izquierda
|
||||||
|
polyline: 18,10 18,26 14,30 6,30 2,26
|
||||||
13
data/shapes/font/char_K.shp
Normal file
13
data/shapes/font/char_K.shp
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# char_K.shp - Letra K
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_K
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Vertical izquierda
|
||||||
|
line: 2,10 2,30
|
||||||
|
# Diagonal superior
|
||||||
|
line: 18,10 2,20
|
||||||
|
# Diagonal inferior
|
||||||
|
line: 2,20 18,30
|
||||||
9
data/shapes/font/char_L.shp
Normal file
9
data/shapes/font/char_L.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# char_L.shp - Letra L
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_L
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Forma de L (vertical izquierda + horizontal abajo)
|
||||||
|
polyline: 2,10 2,30 18,30
|
||||||
9
data/shapes/font/char_M.shp
Normal file
9
data/shapes/font/char_M.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# char_M.shp - Letra M
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_M
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Forma de M con pico en el medio
|
||||||
|
polyline: 2,30 2,10 10,20 18,10 18,30
|
||||||
9
data/shapes/font/char_N.shp
Normal file
9
data/shapes/font/char_N.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# char_N.shp - Letra N
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_N
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Vertical izquierda + diagonal + vertical derecha
|
||||||
|
polyline: 2,30 2,10 18,30 18,10
|
||||||
9
data/shapes/font/char_O.shp
Normal file
9
data/shapes/font/char_O.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# char_O.shp - Letra O
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_O
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Rectángulo cerrado
|
||||||
|
polyline: 2,10 18,10 18,30 2,30 2,10
|
||||||
11
data/shapes/font/char_P.shp
Normal file
11
data/shapes/font/char_P.shp
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# char_P.shp - Letra P
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_P
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Vertical izquierda completa
|
||||||
|
line: 2,10 2,30
|
||||||
|
# Rectángulo superior cerrado
|
||||||
|
polyline: 2,10 14,10 14,20 2,20
|
||||||
11
data/shapes/font/char_Q.shp
Normal file
11
data/shapes/font/char_Q.shp
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# char_Q.shp - Letra Q
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_Q
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Rectángulo cerrado (como O)
|
||||||
|
polyline: 2,10 18,10 18,30 2,30 2,10
|
||||||
|
# Diagonal inferior derecha (cola de la Q)
|
||||||
|
line: 12,24 18,30
|
||||||
13
data/shapes/font/char_R.shp
Normal file
13
data/shapes/font/char_R.shp
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# char_R.shp - Letra R
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_R
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Vertical izquierda completa
|
||||||
|
line: 2,10 2,30
|
||||||
|
# Rectángulo superior cerrado
|
||||||
|
polyline: 2,10 14,10 14,20 2,20
|
||||||
|
# Diagonal inferior derecha
|
||||||
|
line: 8,20 18,30
|
||||||
9
data/shapes/font/char_S.shp
Normal file
9
data/shapes/font/char_S.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# char_S.shp - Letra S
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_S
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Forma de S con curvas simuladas
|
||||||
|
polyline: 18,12 14,10 6,10 2,14 2,18 6,20 14,20 18,22 18,26 14,30 6,30 2,28
|
||||||
11
data/shapes/font/char_T.shp
Normal file
11
data/shapes/font/char_T.shp
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# char_T.shp - Letra T
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_T
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Barra horizontal superior
|
||||||
|
line: 2,10 18,10
|
||||||
|
# Línea vertical central
|
||||||
|
line: 10,10 10,30
|
||||||
9
data/shapes/font/char_U.shp
Normal file
9
data/shapes/font/char_U.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# char_U.shp - Letra U
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_U
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Forma de U (dos verticales + curva abajo)
|
||||||
|
polyline: 2,10 2,26 6,30 14,30 18,26 18,10
|
||||||
9
data/shapes/font/char_V.shp
Normal file
9
data/shapes/font/char_V.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# char_V.shp - Letra V
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_V
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Forma de V (dos diagonales hacia abajo)
|
||||||
|
polyline: 2,10 10,30 18,10
|
||||||
9
data/shapes/font/char_W.shp
Normal file
9
data/shapes/font/char_W.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# char_W.shp - Letra W
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_W
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Forma de W (doble V)
|
||||||
|
polyline: 2,10 5,30 10,20 15,30 18,10
|
||||||
11
data/shapes/font/char_X.shp
Normal file
11
data/shapes/font/char_X.shp
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# char_X.shp - Letra X
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_X
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Diagonal \
|
||||||
|
line: 2,10 18,30
|
||||||
|
# Diagonal /
|
||||||
|
line: 18,10 2,30
|
||||||
12
data/shapes/font/char_Y.shp
Normal file
12
data/shapes/font/char_Y.shp
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# char_Y.shp - Letra Y
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_Y
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Dos diagonales superiores que se juntan
|
||||||
|
polyline: 2,10 10,20
|
||||||
|
polyline: 18,10 10,20
|
||||||
|
# Línea vertical inferior
|
||||||
|
line: 10,20 10,30
|
||||||
9
data/shapes/font/char_Z.shp
Normal file
9
data/shapes/font/char_Z.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# char_Z.shp - Letra Z
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_Z
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Barra superior + diagonal + barra inferior
|
||||||
|
polyline: 2,10 18,10 2,30 18,30
|
||||||
11
data/shapes/font/char_colon.shp
Normal file
11
data/shapes/font/char_colon.shp
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# char_colon.shp - Símbolo : (dos puntos)
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_colon
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Punto superior
|
||||||
|
polyline: 8,14 12,14 12,17 8,17 8,14
|
||||||
|
# Punto inferior
|
||||||
|
polyline: 8,23 12,23 12,26 8,26 8,23
|
||||||
9
data/shapes/font/char_comma.shp
Normal file
9
data/shapes/font/char_comma.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# char_comma.shp - Símbolo , (coma)
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_comma
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Dot + tail hacia abajo-izquierda
|
||||||
|
polyline: 10,28 10,32 8,34
|
||||||
12
data/shapes/font/char_copyright.shp
Normal file
12
data/shapes/font/char_copyright.shp
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# char_copyright.shp - Símbolo © (copyright)
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_copyright
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Círculo exterior (aproximado con 12 puntos)
|
||||||
|
polyline: 10,8 13,9 15,11 17,14 18,17 18,23 17,26 15,29 13,31 10,32 7,31 5,29 3,26 2,23 2,17 3,14 5,11 7,9 10,8
|
||||||
|
|
||||||
|
# Letra C interior
|
||||||
|
polyline: 13,16 9,14 7,16 6,20 7,24 9,26 13,24
|
||||||
9
data/shapes/font/char_dot.shp
Normal file
9
data/shapes/font/char_dot.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# char_dot.shp - Símbolo . (punto)
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_dot
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Cuadrado pequeño centrado abajo
|
||||||
|
polyline: 8,28 12,28 12,32 8,32 8,28
|
||||||
11
data/shapes/font/char_exclamation.shp
Normal file
11
data/shapes/font/char_exclamation.shp
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# char_exclamation.shp - Símbolo ! (exclamación)
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_exclamation
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Línea vertical superior
|
||||||
|
line: 10,10 10,24
|
||||||
|
# Dot inferior
|
||||||
|
polyline: 8,28 12,28 12,32 8,32 8,28
|
||||||
9
data/shapes/font/char_minus.shp
Normal file
9
data/shapes/font/char_minus.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# char_minus.shp - Símbolo - (menos/guión)
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_minus
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Línea horizontal en el centro
|
||||||
|
line: 4,20 16,20
|
||||||
11
data/shapes/font/char_question.shp
Normal file
11
data/shapes/font/char_question.shp
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# char_question.shp - Símbolo ? (interrogación)
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
|
||||||
|
name: char_question
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# Curva superior + trazo hacia abajo
|
||||||
|
polyline: 2,12 10,10 18,12 18,18 10,20 10,24
|
||||||
|
# Dot inferior
|
||||||
|
polyline: 8,28 12,28 12,32 8,32 8,28
|
||||||
9
data/shapes/font/char_space.shp
Normal file
9
data/shapes/font/char_space.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# char_space.shp - Espacio (vacío)
|
||||||
|
# Dimensiones: 20×40 (blocky display)
|
||||||
|
# Sin geometría (espacio vacío intencional)
|
||||||
|
|
||||||
|
name: char_space
|
||||||
|
scale: 1.0
|
||||||
|
center: 10, 20
|
||||||
|
|
||||||
|
# No hay polylines ni lines (vacío intencionado)
|
||||||
10
data/shapes/logo/letra_a.shp
Normal file
10
data/shapes/logo/letra_a.shp
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# letra_a.shp
|
||||||
|
# Generado automáticamente desde jailgames.svg
|
||||||
|
# Dimensiones: 71.43 x 100.00 px
|
||||||
|
|
||||||
|
name: letra_a
|
||||||
|
scale: 1.0
|
||||||
|
center: 35.71, 50.00
|
||||||
|
|
||||||
|
polyline: 28.57,71.43 28.57,100.00 0.00,100.00 0.00,14.29 14.29,14.29 14.29,0.00 57.14,0.00 57.14,14.29 71.43,14.29 71.43,100.00 42.86,100.00 42.86,71.43 28.57,71.43
|
||||||
|
polyline: 28.57,14.29 28.57,57.14 42.86,57.14 42.86,14.29 28.57,14.29
|
||||||
9
data/shapes/logo/letra_e.shp
Normal file
9
data/shapes/logo/letra_e.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# letra_e.shp
|
||||||
|
# Generado automáticamente desde jailgames.svg
|
||||||
|
# Dimensiones: 71.43 x 100.00 px
|
||||||
|
|
||||||
|
name: letra_e
|
||||||
|
scale: 1.0
|
||||||
|
center: 35.71, 50.00
|
||||||
|
|
||||||
|
polyline: 57.14,28.57 57.14,42.86 28.57,42.86 28.57,85.71 71.43,85.71 71.43,100.00 0.00,100.00 0.00,0.00 71.43,0.00 71.43,14.29 28.57,14.29 28.57,28.57 57.14,28.57
|
||||||
9
data/shapes/logo/letra_g.shp
Normal file
9
data/shapes/logo/letra_g.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# letra_g.shp
|
||||||
|
# Generado automáticamente desde jailgames.svg
|
||||||
|
# Dimensiones: 71.43 x 100.00 px
|
||||||
|
|
||||||
|
name: letra_g
|
||||||
|
scale: 1.0
|
||||||
|
center: 35.71, 50.00
|
||||||
|
|
||||||
|
polyline: 14.29,0.00 57.14,0.00 57.14,14.29 28.57,14.29 28.57,85.71 42.86,85.71 42.86,42.86 71.43,42.86 71.43,100.00 14.29,100.00 14.29,85.71 0.00,85.71 0.00,14.29 14.29,14.29 14.29,0.00
|
||||||
9
data/shapes/logo/letra_i.shp
Normal file
9
data/shapes/logo/letra_i.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# letra_i.shp
|
||||||
|
# Generado automáticamente desde jailgames.svg
|
||||||
|
# Dimensiones: 28.57 x 100.00 px
|
||||||
|
|
||||||
|
name: letra_i
|
||||||
|
scale: 1.0
|
||||||
|
center: 14.29, 50.00
|
||||||
|
|
||||||
|
polyline: 0.00,0.00 28.57,0.00 28.57,100.00 0.00,100.00 0.00,0.00
|
||||||
9
data/shapes/logo/letra_j.shp
Normal file
9
data/shapes/logo/letra_j.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# letra_j.shp
|
||||||
|
# Generado automáticamente desde jailgames.svg
|
||||||
|
# Dimensiones: 57.14 x 100.00 px
|
||||||
|
|
||||||
|
name: letra_j
|
||||||
|
scale: 1.0
|
||||||
|
center: 28.57, 50.00
|
||||||
|
|
||||||
|
polyline: 0.00,100.00 0.00,85.71 28.57,85.71 28.57,0.00 57.14,0.00 57.14,85.71 42.86,85.71 42.86,100.00 0.00,100.00
|
||||||
9
data/shapes/logo/letra_l.shp
Normal file
9
data/shapes/logo/letra_l.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# letra_l.shp
|
||||||
|
# Generado automáticamente desde jailgames.svg
|
||||||
|
# Dimensiones: 57.14 x 100.00 px
|
||||||
|
|
||||||
|
name: letra_l
|
||||||
|
scale: 1.0
|
||||||
|
center: 28.57, 50.00
|
||||||
|
|
||||||
|
polyline: 0.00,0.00 28.57,0.00 28.57,85.71 57.14,85.71 57.14,100.00 0.00,100.00 0.00,0.00
|
||||||
9
data/shapes/logo/letra_m.shp
Normal file
9
data/shapes/logo/letra_m.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# letra_m.shp
|
||||||
|
# Generado automáticamente desde jailgames.svg
|
||||||
|
# Dimensiones: 100.00 x 100.00 px
|
||||||
|
|
||||||
|
name: letra_m
|
||||||
|
scale: 1.0
|
||||||
|
center: 50.00, 50.00
|
||||||
|
|
||||||
|
polyline: 71.43,57.14 57.14,57.14 57.14,71.43 42.86,71.43 42.86,57.14 28.57,57.14 28.57,100.00 0.00,100.00 0.00,0.00 14.29,0.00 14.29,14.29 28.57,14.29 28.57,28.57 42.86,28.57 42.86,42.86 57.14,42.86 57.14,28.57 71.43,28.57 71.43,14.29 85.71,14.29 85.71,0.00 100.00,0.00 100.00,100.00 71.43,100.00 71.43,57.14
|
||||||
9
data/shapes/logo/letra_s.shp
Normal file
9
data/shapes/logo/letra_s.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# letra_s.shp
|
||||||
|
# Generado automáticamente desde jailgames.svg
|
||||||
|
# Dimensiones: 57.14 x 100.00 px
|
||||||
|
|
||||||
|
name: letra_s
|
||||||
|
scale: 1.0
|
||||||
|
center: 28.57, 50.00
|
||||||
|
|
||||||
|
polyline: 0.00,85.71 28.57,85.71 28.57,57.14 14.29,57.14 14.29,42.86 0.00,42.86 0.00,14.29 14.29,14.29 14.29,0.00 57.14,0.00 57.14,14.29 28.57,14.29 28.57,42.86 42.86,42.86 42.86,57.14 57.14,57.14 57.14,85.71 42.86,85.71 42.86,100.00 0.00,100.00 0.00,85.71
|
||||||
24
data/shapes/ship.shp
Normal file
24
data/shapes/ship.shp
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# ship.shp - Nau del jugador 1 (triangle amb base còncava - punta de fletxa)
|
||||||
|
# © 1999 Visente i Sergi (versió Pascal)
|
||||||
|
# © 2025 Port a C++20 amb SDL3
|
||||||
|
|
||||||
|
name: ship
|
||||||
|
scale: 1.0
|
||||||
|
center: 0, 0
|
||||||
|
|
||||||
|
# Triangle amb base còncava tipus "punta de fletxa"
|
||||||
|
# Punts originals (polar):
|
||||||
|
# p1: r=12, angle=270° (3π/2) → punta amunt
|
||||||
|
# p2: r=12, angle=45° (π/4) → base dreta-darrere
|
||||||
|
# p3: r=12, angle=135° (3π/4) → base esquerra-darrere
|
||||||
|
#
|
||||||
|
# MODIFICACIÓ: afegit p4 al mig de la base, desplaçat cap al centre
|
||||||
|
# p4: (0, 4) → punt central de la base, cap endins
|
||||||
|
#
|
||||||
|
# Conversió polar→cartesià (angle-90° perquè origen visual és amunt):
|
||||||
|
# p1: (0, -12) → punta
|
||||||
|
# p2: (8.49, 8.49) → base dreta
|
||||||
|
# p4: (0, 4) → base centre (cap endins)
|
||||||
|
# p3: (-8.49, 8.49) → base esquerra
|
||||||
|
|
||||||
|
polyline: 0,-12 8.49,8.49 0,4 -8.49,8.49 0,-12
|
||||||
30
data/shapes/ship2.shp
Normal file
30
data/shapes/ship2.shp
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# ship2.shp - Nau del jugador 2 (triangle amb circulito central)
|
||||||
|
# © 1999 Visente i Sergi (versió Pascal)
|
||||||
|
# © 2025 Port a C++20 amb SDL3
|
||||||
|
|
||||||
|
name: ship2
|
||||||
|
scale: 1.0
|
||||||
|
center: 0, 0
|
||||||
|
|
||||||
|
# Triangle amb base còncava tipus "punta de fletxa"
|
||||||
|
# (Mateix que ship.shp)
|
||||||
|
# Punts originals (polar):
|
||||||
|
# p1: r=12, angle=270° (3π/2) → punta amunt
|
||||||
|
# p2: r=12, angle=45° (π/4) → base dreta-darrere
|
||||||
|
# p3: r=12, angle=135° (3π/4) → base esquerra-darrere
|
||||||
|
#
|
||||||
|
# MODIFICACIÓ: afegit p4 al mig de la base, desplaçat cap al centre
|
||||||
|
# p4: (0, 4) → punt central de la base, cap endins
|
||||||
|
#
|
||||||
|
# Conversió polar→cartesià (angle-90° perquè origen visual és amunt):
|
||||||
|
# p1: (0, -12) → punta
|
||||||
|
# p2: (8.49, 8.49) → base dreta
|
||||||
|
# p4: (0, 4) → base centre (cap endins)
|
||||||
|
# p3: (-8.49, 8.49) → base esquerra
|
||||||
|
|
||||||
|
#polyline: 0,-12 8.49,8.49 0,4 -8.49,8.49 0,-12
|
||||||
|
polyline: 0,-12 8.49,8.49 -8.49,8.49 0,-12
|
||||||
|
|
||||||
|
# Circulito central (octàgon r=2.5)
|
||||||
|
# Distintiu visual del jugador 2
|
||||||
|
polyline: 0,-2.5 1.77,-1.77 2.5,0 1.77,1.77 0,2.5 -1.77,1.77 -2.5,0 -1.77,-1.77 0,-2.5
|
||||||
28
data/shapes/ship2_perspective.shp
Normal file
28
data/shapes/ship2_perspective.shp
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
# ship2_perspective.shp - Nave P2 con perspectiva pre-calculada
|
||||||
|
# Posición optimizada: "4 del reloj" (Abajo-Derecha)
|
||||||
|
# Dirección: Volando hacia el fondo (centro pantalla)
|
||||||
|
|
||||||
|
name: ship2_perspective
|
||||||
|
scale: 1.0
|
||||||
|
center: 0, 0
|
||||||
|
|
||||||
|
# TRANSFORMACIÓN APLICADA:
|
||||||
|
# 1. Rotación -45° (apuntando al centro desde abajo-dcha)
|
||||||
|
# 2. Proyección de perspectiva:
|
||||||
|
# - Punta (p1): Reducida al 60% (simula lejanía)
|
||||||
|
# - Base (p2, p3): Aumentada al 110% (simula cercanía)
|
||||||
|
# 3. Flip horizontal (simétrica a ship_starfield.shp)
|
||||||
|
#
|
||||||
|
# Nuevos Punts (aprox):
|
||||||
|
# p1 (Punta): (-4, -4) -> Lejos, pequeña y apuntando arriba-izq
|
||||||
|
# p2 (Ala Izq): (-3, 11) -> Cerca, lado interior
|
||||||
|
# p4 (Base Cnt): (3, 5) -> Centro base
|
||||||
|
# p3 (Ala Dcha): (11, 2) -> Cerca, lado exterior (más grande)
|
||||||
|
|
||||||
|
#polyline: -4,-4 -3,11 3,5 11,2 -4,-4
|
||||||
|
polyline: -4,-4 -3,11 11,2 -4,-4
|
||||||
|
|
||||||
|
# Circulito central (octàgon r=2.5)
|
||||||
|
# Distintiu visual del jugador 2
|
||||||
|
# Sin perspectiva (está en el centro de la nave)
|
||||||
|
polyline: 0,-2.5 1.77,-1.77 2.5,0 1.77,1.77 0,2.5 -1.77,1.77 -2.5,0 -1.77,-1.77 0,-2.5
|
||||||
27
data/shapes/ship3.shp
Normal file
27
data/shapes/ship3.shp
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
# ship2.shp - Nau del jugador 2 (interceptor amb ales)
|
||||||
|
# © 2025 Orni Attack - Jugador 2
|
||||||
|
|
||||||
|
name: ship2
|
||||||
|
scale: 1.0
|
||||||
|
center: 0, 0
|
||||||
|
|
||||||
|
# Interceptor amb ales laterals
|
||||||
|
# Disseny més ample i agressiu que P1
|
||||||
|
#
|
||||||
|
# Geometria:
|
||||||
|
# - Punta més curta i ampla
|
||||||
|
# - Ales laterals pronunciades
|
||||||
|
# - Base més ampla per estabilitat visual
|
||||||
|
#
|
||||||
|
# Punts (cartesianes, Y negatiu = amunt):
|
||||||
|
# p1: (0, -10) → punta (més curta que P1)
|
||||||
|
# p2: (4, -6) → transició ala dreta
|
||||||
|
# p3: (10, 2) → punta ala dreta (més ampla)
|
||||||
|
# p4: (6, 8) → base ala dreta
|
||||||
|
# p5: (0, 6) → base centre (menys còncava)
|
||||||
|
# p6: (-6, 8) → base ala esquerra
|
||||||
|
# p7: (-10, 2) → punta ala esquerra
|
||||||
|
# p8: (-4, -6) → transició ala esquerra
|
||||||
|
# p1: (0, -10) → tanca
|
||||||
|
|
||||||
|
polyline: 0,-10 4,-6 10,2 6,8 0,6 -6,8 -10,2 -4,-6 0,-10
|
||||||
21
data/shapes/ship_perspective.shp
Normal file
21
data/shapes/ship_perspective.shp
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# ship_perspective.shp - Nave con perspectiva pre-calculada
|
||||||
|
# Posición optimizada: "8 del reloj" (Abajo-Izquierda)
|
||||||
|
# Dirección: Volando hacia el fondo (centro pantalla)
|
||||||
|
|
||||||
|
name: ship_perspective
|
||||||
|
scale: 1.0
|
||||||
|
center: 0, 0
|
||||||
|
|
||||||
|
# TRANSFORMACIÓN APLICADA:
|
||||||
|
# 1. Rotación +45° (apuntando al centro desde abajo-izq)
|
||||||
|
# 2. Proyección de perspectiva:
|
||||||
|
# - Punta (p1): Reducida al 60% (simula lejanía)
|
||||||
|
# - Base (p2, p3): Aumentada al 110% (simula cercanía)
|
||||||
|
#
|
||||||
|
# Nuevos Puntos (aprox):
|
||||||
|
# p1 (Punta): (4, -4) -> Lejos, pequeña y apuntando arriba-dcha
|
||||||
|
# p2 (Ala Dcha): (3, 11) -> Cerca, lado interior
|
||||||
|
# p4 (Base Cnt): (-3, 5) -> Centro base
|
||||||
|
# p3 (Ala Izq): (-11, 2) -> Cerca, lado exterior (más grande)
|
||||||
|
|
||||||
|
polyline: 4,-4 3,11 -3,5 -11,2 4,-4
|
||||||
19
data/shapes/star.shp
Normal file
19
data/shapes/star.shp
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# star.shp - Estrella per a starfield
|
||||||
|
# © 2025 Orni Attack
|
||||||
|
|
||||||
|
name: star
|
||||||
|
scale: 1.0
|
||||||
|
center: 0, 0
|
||||||
|
|
||||||
|
# Estrella de 4 puntes (diamant/creu)
|
||||||
|
# Petita i simple per a l'efecte starfield
|
||||||
|
#
|
||||||
|
# Punts:
|
||||||
|
# angle=0°: (0, -3) Dalt
|
||||||
|
# angle=90°: (3, 0) Dreta
|
||||||
|
# angle=180°: (0, 3) Baix
|
||||||
|
# angle=270°: (-3, 0) Esquerra
|
||||||
|
#
|
||||||
|
# Forma de diamant amb línies de centre a puntes
|
||||||
|
|
||||||
|
polyline: 0,-3 3,0 0,3 -3,0 0,-3
|
||||||
10
data/shapes/title/letra_a.shp
Normal file
10
data/shapes/title/letra_a.shp
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# letra_a.shp
|
||||||
|
# Generado automáticamente desde jailgames.svg
|
||||||
|
# Dimensiones: 137.50 x 100.00 px
|
||||||
|
|
||||||
|
name: letra_a
|
||||||
|
scale: 1.0
|
||||||
|
center: 68.75, 50.00
|
||||||
|
|
||||||
|
polyline: 0.00,100.00 0.00,75.00 37.50,0.00 100.00,0.00 137.50,75.00 137.50,100.00 100.00,100.00 100.00,87.50 37.50,87.50 37.50,100.00 0.00,100.00
|
||||||
|
polyline: 62.50,25.00 50.00,50.00 50.00,62.50 87.50,62.50 87.50,50.00 75.00,25.00 62.50,25.00
|
||||||
9
data/shapes/title/letra_c.shp
Normal file
9
data/shapes/title/letra_c.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# letra_c.shp
|
||||||
|
# Generado automáticamente desde jailgames.svg
|
||||||
|
# Dimensiones: 137.50 x 100.00 px
|
||||||
|
|
||||||
|
name: letra_c
|
||||||
|
scale: 1.0
|
||||||
|
center: 68.75, 50.00
|
||||||
|
|
||||||
|
polyline: 12.50,100.00 0.00,87.50 0.00,12.50 12.50,0.00 125.00,0.00 137.50,12.50 137.50,37.50 100.00,37.50 100.00,25.00 37.50,25.00 37.50,75.00 100.00,75.00 100.00,62.50 137.50,62.50 137.50,87.50 125.00,100.00 12.50,100.00
|
||||||
10
data/shapes/title/letra_exclamacion.shp
Normal file
10
data/shapes/title/letra_exclamacion.shp
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# letra_exclamacion.shp
|
||||||
|
# Generado automáticamente desde jailgames.svg
|
||||||
|
# Dimensiones: 37.51 x 100.00 px
|
||||||
|
|
||||||
|
name: letra_exclamacion
|
||||||
|
scale: 1.0
|
||||||
|
center: 18.75, 50.00
|
||||||
|
|
||||||
|
polyline: 0.00,62.50 0.00,0.00 37.51,0.00 37.51,62.50 0.00,62.50
|
||||||
|
polyline: 0.00,100.00 0.00,75.00 37.51,75.00 37.51,100.00 0.00,100.00
|
||||||
9
data/shapes/title/letra_i.shp
Normal file
9
data/shapes/title/letra_i.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# letra_i.shp
|
||||||
|
# Generado automáticamente desde jailgames.svg
|
||||||
|
# Dimensiones: 37.50 x 100.00 px
|
||||||
|
|
||||||
|
name: letra_i
|
||||||
|
scale: 1.0
|
||||||
|
center: 18.75, 50.00
|
||||||
|
|
||||||
|
polyline: 0.00,0.00 37.50,0.00 37.50,100.00 0.00,100.00 0.00,0.00
|
||||||
9
data/shapes/title/letra_k.shp
Normal file
9
data/shapes/title/letra_k.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# letra_k.shp
|
||||||
|
# Generado automáticamente desde jailgames.svg
|
||||||
|
# Dimensiones: 137.50 x 100.00 px
|
||||||
|
|
||||||
|
name: letra_k
|
||||||
|
scale: 1.0
|
||||||
|
center: 68.75, 50.00
|
||||||
|
|
||||||
|
polyline: 0.00,100.00 0.00,0.00 37.50,0.00 37.50,37.50 50.00,37.50 100.00,0.00 137.50,0.00 137.50,25.00 87.06,50.00 137.50,75.00 137.50,100.00 100.00,100.00 50.00,62.50 37.50,62.50 37.50,100.00 0.00,100.00
|
||||||
9
data/shapes/title/letra_n.shp
Normal file
9
data/shapes/title/letra_n.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# letra_n.shp
|
||||||
|
# Generado automáticamente desde jailgames.svg
|
||||||
|
# Dimensiones: 137.50 x 100.00 px
|
||||||
|
|
||||||
|
name: letra_n
|
||||||
|
scale: 1.0
|
||||||
|
center: 68.75, 50.00
|
||||||
|
|
||||||
|
polyline: 0.00,100.00 0.00,0.00 50.00,0.00 100.00,50.00 100.00,0.00 137.50,0.00 137.50,100.00 87.50,100.00 37.50,50.00 37.50,100.00 0.00,100.00
|
||||||
10
data/shapes/title/letra_o.shp
Normal file
10
data/shapes/title/letra_o.shp
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# letra_o.shp
|
||||||
|
# Generado automáticamente desde jailgames.svg
|
||||||
|
# Dimensiones: 137.50 x 100.00 px
|
||||||
|
|
||||||
|
name: letra_o
|
||||||
|
scale: 1.0
|
||||||
|
center: 68.75, 50.00
|
||||||
|
|
||||||
|
polyline: 12.50,100.00 0.00,87.50 0.00,12.50 12.50,0.00 125.00,0.00 137.50,12.50 137.50,87.50 125.00,100.00 12.50,100.00
|
||||||
|
polyline: 100.00,25.00 37.50,25.00 37.50,75.00 100.00,75.00 100.00,25.00
|
||||||
10
data/shapes/title/letra_r.shp
Normal file
10
data/shapes/title/letra_r.shp
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# letra_r.shp
|
||||||
|
# Generado automáticamente desde jailgames.svg
|
||||||
|
# Dimensiones: 137.50 x 100.00 px
|
||||||
|
|
||||||
|
name: letra_r
|
||||||
|
scale: 1.0
|
||||||
|
center: 68.75, 50.00
|
||||||
|
|
||||||
|
polyline: 0.00,100.00 0.00,0.00 125.00,0.00 137.50,12.50 137.50,62.50 125.00,62.50 137.50,75.00 137.50,100.00 100.00,100.00 100.00,75.00 37.50,75.00 37.50,100.00 0.00,100.00
|
||||||
|
polyline: 37.50,50.00 100.00,50.00 100.00,25.00 37.50,25.00 37.50,50.00
|
||||||
9
data/shapes/title/letra_t.shp
Normal file
9
data/shapes/title/letra_t.shp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# letra_t.shp
|
||||||
|
# Generado automáticamente desde jailgames.svg
|
||||||
|
# Dimensiones: 137.50 x 100.00 px
|
||||||
|
|
||||||
|
name: letra_t
|
||||||
|
scale: 1.0
|
||||||
|
center: 68.75, 50.00
|
||||||
|
|
||||||
|
polyline: 0.00,25.00 0.00,0.00 137.50,0.00 137.50,25.00 87.50,25.00 87.50,100.00 50.00,100.00 50.00,25.00 0.00,25.00
|
||||||
BIN
data/sounds/effects/continue.wav
Normal file
BIN
data/sounds/effects/continue.wav
Normal file
Binary file not shown.
BIN
data/sounds/effects/explosion.wav
Normal file
BIN
data/sounds/effects/explosion.wav
Normal file
Binary file not shown.
BIN
data/sounds/effects/explosion2.wav
Normal file
BIN
data/sounds/effects/explosion2.wav
Normal file
Binary file not shown.
BIN
data/sounds/effects/init_hud.wav
Normal file
BIN
data/sounds/effects/init_hud.wav
Normal file
Binary file not shown.
BIN
data/sounds/effects/laser_shoot.wav
Normal file
BIN
data/sounds/effects/laser_shoot.wav
Normal file
Binary file not shown.
BIN
data/sounds/effects/logo.wav
Normal file
BIN
data/sounds/effects/logo.wav
Normal file
Binary file not shown.
BIN
data/sounds/effects/start.wav
Normal file
BIN
data/sounds/effects/start.wav
Normal file
Binary file not shown.
BIN
data/sounds/voices/good_job_commander.wav
Normal file
BIN
data/sounds/voices/good_job_commander.wav
Normal file
Binary file not shown.
168
data/stages/stages.yaml
Normal file
168
data/stages/stages.yaml
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
# stages.yaml - Configuració de les 10 etapes d'Orni Attack
|
||||||
|
# © 2025 Orni Attack
|
||||||
|
|
||||||
|
metadata:
|
||||||
|
version: "1.0"
|
||||||
|
total_stages: 10
|
||||||
|
description: "Progressive difficulty curve from novice to expert"
|
||||||
|
|
||||||
|
stages:
|
||||||
|
# STAGE 1: Tutorial - Only pentagons, slow speed
|
||||||
|
- stage_id: 1
|
||||||
|
total_enemies: 5
|
||||||
|
spawn_config:
|
||||||
|
mode: "progressive"
|
||||||
|
initial_delay: 2.0
|
||||||
|
spawn_interval: 3.0
|
||||||
|
enemy_distribution:
|
||||||
|
pentagon: 100
|
||||||
|
quadrat: 0
|
||||||
|
molinillo: 0
|
||||||
|
difficulty_multipliers:
|
||||||
|
speed_multiplier: 0.7
|
||||||
|
rotation_multiplier: 0.8
|
||||||
|
tracking_strength: 0.0
|
||||||
|
|
||||||
|
# STAGE 2: Introduction to tracking enemies
|
||||||
|
- stage_id: 2
|
||||||
|
total_enemies: 7
|
||||||
|
spawn_config:
|
||||||
|
mode: "progressive"
|
||||||
|
initial_delay: 1.5
|
||||||
|
spawn_interval: 2.5
|
||||||
|
enemy_distribution:
|
||||||
|
pentagon: 70
|
||||||
|
quadrat: 30
|
||||||
|
molinillo: 0
|
||||||
|
difficulty_multipliers:
|
||||||
|
speed_multiplier: 0.85
|
||||||
|
rotation_multiplier: 0.9
|
||||||
|
tracking_strength: 0.3
|
||||||
|
|
||||||
|
# STAGE 3: All enemy types, normal speed
|
||||||
|
- stage_id: 3
|
||||||
|
total_enemies: 10
|
||||||
|
spawn_config:
|
||||||
|
mode: "progressive"
|
||||||
|
initial_delay: 1.0
|
||||||
|
spawn_interval: 2.0
|
||||||
|
enemy_distribution:
|
||||||
|
pentagon: 50
|
||||||
|
quadrat: 30
|
||||||
|
molinillo: 20
|
||||||
|
difficulty_multipliers:
|
||||||
|
speed_multiplier: 1.0
|
||||||
|
rotation_multiplier: 1.0
|
||||||
|
tracking_strength: 0.5
|
||||||
|
|
||||||
|
# STAGE 4: Increased count, faster enemies
|
||||||
|
- stage_id: 4
|
||||||
|
total_enemies: 12
|
||||||
|
spawn_config:
|
||||||
|
mode: "progressive"
|
||||||
|
initial_delay: 0.8
|
||||||
|
spawn_interval: 1.8
|
||||||
|
enemy_distribution:
|
||||||
|
pentagon: 40
|
||||||
|
quadrat: 35
|
||||||
|
molinillo: 25
|
||||||
|
difficulty_multipliers:
|
||||||
|
speed_multiplier: 1.1
|
||||||
|
rotation_multiplier: 1.15
|
||||||
|
tracking_strength: 0.6
|
||||||
|
|
||||||
|
# STAGE 5: Maximum count reached
|
||||||
|
- stage_id: 5
|
||||||
|
total_enemies: 15
|
||||||
|
spawn_config:
|
||||||
|
mode: "progressive"
|
||||||
|
initial_delay: 0.5
|
||||||
|
spawn_interval: 1.5
|
||||||
|
enemy_distribution:
|
||||||
|
pentagon: 35
|
||||||
|
quadrat: 35
|
||||||
|
molinillo: 30
|
||||||
|
difficulty_multipliers:
|
||||||
|
speed_multiplier: 1.2
|
||||||
|
rotation_multiplier: 1.25
|
||||||
|
tracking_strength: 0.7
|
||||||
|
|
||||||
|
# STAGE 6: Molinillo becomes dominant
|
||||||
|
- stage_id: 6
|
||||||
|
total_enemies: 15
|
||||||
|
spawn_config:
|
||||||
|
mode: "progressive"
|
||||||
|
initial_delay: 0.3
|
||||||
|
spawn_interval: 1.3
|
||||||
|
enemy_distribution:
|
||||||
|
pentagon: 30
|
||||||
|
quadrat: 30
|
||||||
|
molinillo: 40
|
||||||
|
difficulty_multipliers:
|
||||||
|
speed_multiplier: 1.3
|
||||||
|
rotation_multiplier: 1.4
|
||||||
|
tracking_strength: 0.8
|
||||||
|
|
||||||
|
# STAGE 7: High intensity, fast spawns
|
||||||
|
- stage_id: 7
|
||||||
|
total_enemies: 15
|
||||||
|
spawn_config:
|
||||||
|
mode: "progressive"
|
||||||
|
initial_delay: 0.2
|
||||||
|
spawn_interval: 1.0
|
||||||
|
enemy_distribution:
|
||||||
|
pentagon: 25
|
||||||
|
quadrat: 30
|
||||||
|
molinillo: 45
|
||||||
|
difficulty_multipliers:
|
||||||
|
speed_multiplier: 1.4
|
||||||
|
rotation_multiplier: 1.5
|
||||||
|
tracking_strength: 0.9
|
||||||
|
|
||||||
|
# STAGE 8: Expert level, 50% molinillos
|
||||||
|
- stage_id: 8
|
||||||
|
total_enemies: 15
|
||||||
|
spawn_config:
|
||||||
|
mode: "progressive"
|
||||||
|
initial_delay: 0.1
|
||||||
|
spawn_interval: 0.8
|
||||||
|
enemy_distribution:
|
||||||
|
pentagon: 20
|
||||||
|
quadrat: 30
|
||||||
|
molinillo: 50
|
||||||
|
difficulty_multipliers:
|
||||||
|
speed_multiplier: 1.5
|
||||||
|
rotation_multiplier: 1.6
|
||||||
|
tracking_strength: 1.0
|
||||||
|
|
||||||
|
# STAGE 9: Near-maximum difficulty
|
||||||
|
- stage_id: 9
|
||||||
|
total_enemies: 15
|
||||||
|
spawn_config:
|
||||||
|
mode: "progressive"
|
||||||
|
initial_delay: 0.0
|
||||||
|
spawn_interval: 0.6
|
||||||
|
enemy_distribution:
|
||||||
|
pentagon: 15
|
||||||
|
quadrat: 25
|
||||||
|
molinillo: 60
|
||||||
|
difficulty_multipliers:
|
||||||
|
speed_multiplier: 1.6
|
||||||
|
rotation_multiplier: 1.7
|
||||||
|
tracking_strength: 1.1
|
||||||
|
|
||||||
|
# STAGE 10: Final challenge, 70% molinillos
|
||||||
|
- stage_id: 10
|
||||||
|
total_enemies: 15
|
||||||
|
spawn_config:
|
||||||
|
mode: "progressive"
|
||||||
|
initial_delay: 0.0
|
||||||
|
spawn_interval: 0.5
|
||||||
|
enemy_distribution:
|
||||||
|
pentagon: 10
|
||||||
|
quadrat: 20
|
||||||
|
molinillo: 70
|
||||||
|
difficulty_multipliers:
|
||||||
|
speed_multiplier: 1.8
|
||||||
|
rotation_multiplier: 2.0
|
||||||
|
tracking_strength: 1.2
|
||||||
42
release/Info.plist
Normal file
42
release/Info.plist
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>en</string>
|
||||||
|
<key>CFBundleDisplayName</key>
|
||||||
|
<string>Orni Attack</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>orni</string>
|
||||||
|
<key>CFBundleIconFile</key>
|
||||||
|
<string>icon</string>
|
||||||
|
<key>CFBundleIconName</key>
|
||||||
|
<string>icon</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>org.jailgames.orni</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>Orni Attack</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>APPL</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>0.1</string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>0.1</string>
|
||||||
|
<key>CSResourcesFileMapped</key>
|
||||||
|
<true/>
|
||||||
|
<key>LSMinimumSystemVersion</key>
|
||||||
|
<string>10.15</string>
|
||||||
|
<key>NSHighResolutionCapable</key>
|
||||||
|
<true/>
|
||||||
|
<key>NSHumanReadableCopyright</key>
|
||||||
|
<string>© 1999 Visente i Sergi, 2025 Port</string>
|
||||||
|
<key>NSPrincipalClass</key>
|
||||||
|
<string>NSApplication</string>
|
||||||
|
<key>SUPublicDSAKeyFile</key>
|
||||||
|
<string>dsa_pub.pem</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
BIN
release/dll/SDL3.dll
Normal file
BIN
release/dll/SDL3.dll
Normal file
Binary file not shown.
BIN
release/dll/libwinpthread-1.dll
Normal file
BIN
release/dll/libwinpthread-1.dll
Normal file
Binary file not shown.
100
release/frameworks/SDL3.xcframework/Info.plist
Normal file
100
release/frameworks/SDL3.xcframework/Info.plist
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>AvailableLibraries</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>BinaryPath</key>
|
||||||
|
<string>SDL3.framework/Versions/A/SDL3</string>
|
||||||
|
<key>DebugSymbolsPath</key>
|
||||||
|
<string>dSYMs</string>
|
||||||
|
<key>LibraryIdentifier</key>
|
||||||
|
<string>macos-arm64_x86_64</string>
|
||||||
|
<key>LibraryPath</key>
|
||||||
|
<string>SDL3.framework</string>
|
||||||
|
<key>SupportedArchitectures</key>
|
||||||
|
<array>
|
||||||
|
<string>arm64</string>
|
||||||
|
<string>x86_64</string>
|
||||||
|
</array>
|
||||||
|
<key>SupportedPlatform</key>
|
||||||
|
<string>macos</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>BinaryPath</key>
|
||||||
|
<string>SDL3.framework/SDL3</string>
|
||||||
|
<key>DebugSymbolsPath</key>
|
||||||
|
<string>dSYMs</string>
|
||||||
|
<key>LibraryIdentifier</key>
|
||||||
|
<string>tvos-arm64_x86_64-simulator</string>
|
||||||
|
<key>LibraryPath</key>
|
||||||
|
<string>SDL3.framework</string>
|
||||||
|
<key>SupportedArchitectures</key>
|
||||||
|
<array>
|
||||||
|
<string>arm64</string>
|
||||||
|
<string>x86_64</string>
|
||||||
|
</array>
|
||||||
|
<key>SupportedPlatform</key>
|
||||||
|
<string>tvos</string>
|
||||||
|
<key>SupportedPlatformVariant</key>
|
||||||
|
<string>simulator</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>BinaryPath</key>
|
||||||
|
<string>SDL3.framework/SDL3</string>
|
||||||
|
<key>DebugSymbolsPath</key>
|
||||||
|
<string>dSYMs</string>
|
||||||
|
<key>LibraryIdentifier</key>
|
||||||
|
<string>tvos-arm64</string>
|
||||||
|
<key>LibraryPath</key>
|
||||||
|
<string>SDL3.framework</string>
|
||||||
|
<key>SupportedArchitectures</key>
|
||||||
|
<array>
|
||||||
|
<string>arm64</string>
|
||||||
|
</array>
|
||||||
|
<key>SupportedPlatform</key>
|
||||||
|
<string>tvos</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>BinaryPath</key>
|
||||||
|
<string>SDL3.framework/SDL3</string>
|
||||||
|
<key>DebugSymbolsPath</key>
|
||||||
|
<string>dSYMs</string>
|
||||||
|
<key>LibraryIdentifier</key>
|
||||||
|
<string>ios-arm64</string>
|
||||||
|
<key>LibraryPath</key>
|
||||||
|
<string>SDL3.framework</string>
|
||||||
|
<key>SupportedArchitectures</key>
|
||||||
|
<array>
|
||||||
|
<string>arm64</string>
|
||||||
|
</array>
|
||||||
|
<key>SupportedPlatform</key>
|
||||||
|
<string>ios</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>BinaryPath</key>
|
||||||
|
<string>SDL3.framework/SDL3</string>
|
||||||
|
<key>DebugSymbolsPath</key>
|
||||||
|
<string>dSYMs</string>
|
||||||
|
<key>LibraryIdentifier</key>
|
||||||
|
<string>ios-arm64_x86_64-simulator</string>
|
||||||
|
<key>LibraryPath</key>
|
||||||
|
<string>SDL3.framework</string>
|
||||||
|
<key>SupportedArchitectures</key>
|
||||||
|
<array>
|
||||||
|
<string>arm64</string>
|
||||||
|
<string>x86_64</string>
|
||||||
|
</array>
|
||||||
|
<key>SupportedPlatform</key>
|
||||||
|
<string>ios</string>
|
||||||
|
<key>SupportedPlatformVariant</key>
|
||||||
|
<string>simulator</string>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>XFWK</string>
|
||||||
|
<key>XCFrameworkFormatVersion</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
@@ -0,0 +1,106 @@
|
|||||||
|
# SDL3 CMake configuration file:
|
||||||
|
# This file is meant to be placed in Resources/CMake of a SDL3 framework
|
||||||
|
|
||||||
|
# INTERFACE_LINK_OPTIONS needs CMake 3.12
|
||||||
|
cmake_minimum_required(VERSION 3.12)
|
||||||
|
|
||||||
|
include(FeatureSummary)
|
||||||
|
set_package_properties(SDL3 PROPERTIES
|
||||||
|
URL "https://www.libsdl.org/"
|
||||||
|
DESCRIPTION "low level access to audio, keyboard, mouse, joystick, and graphics hardware"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Copied from `configure_package_config_file`
|
||||||
|
macro(set_and_check _var _file)
|
||||||
|
set(${_var} "${_file}")
|
||||||
|
if(NOT EXISTS "${_file}")
|
||||||
|
message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !")
|
||||||
|
endif()
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
# Copied from `configure_package_config_file`
|
||||||
|
macro(check_required_components _NAME)
|
||||||
|
foreach(comp ${${_NAME}_FIND_COMPONENTS})
|
||||||
|
if(NOT ${_NAME}_${comp}_FOUND)
|
||||||
|
if(${_NAME}_FIND_REQUIRED_${comp})
|
||||||
|
set(${_NAME}_FOUND FALSE)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
set(SDL3_FOUND TRUE)
|
||||||
|
|
||||||
|
# Compute the installation prefix relative to this file.
|
||||||
|
set(_sdl3_framework_path "${CMAKE_CURRENT_LIST_DIR}") # > /SDL3.framework/Resources/CMake/
|
||||||
|
get_filename_component(_sdl3_framework_path "${_sdl3_framework_path}" REALPATH) # > /SDL3.framework/Versions/Current/Resources/CMake
|
||||||
|
get_filename_component(_sdl3_framework_path "${_sdl3_framework_path}" REALPATH) # > /SDL3.framework/Versions/A/Resources/CMake/
|
||||||
|
get_filename_component(_sdl3_framework_path "${_sdl3_framework_path}" PATH) # > /SDL3.framework/Versions/A/Resources/
|
||||||
|
get_filename_component(_sdl3_framework_path "${_sdl3_framework_path}" PATH) # > /SDL3.framework/Versions/A/
|
||||||
|
get_filename_component(_sdl3_framework_path "${_sdl3_framework_path}" PATH) # > /SDL3.framework/Versions/
|
||||||
|
get_filename_component(_sdl3_framework_path "${_sdl3_framework_path}" PATH) # > /SDL3.framework/
|
||||||
|
get_filename_component(_sdl3_framework_parent_path "${_sdl3_framework_path}" PATH) # > /
|
||||||
|
|
||||||
|
|
||||||
|
# All targets are created, even when some might not be requested though COMPONENTS.
|
||||||
|
# This is done for compatibility with CMake generated SDL3-target.cmake files.
|
||||||
|
|
||||||
|
if(NOT TARGET SDL3::Headers)
|
||||||
|
add_library(SDL3::Headers INTERFACE IMPORTED)
|
||||||
|
set_target_properties(SDL3::Headers
|
||||||
|
PROPERTIES
|
||||||
|
INTERFACE_COMPILE_OPTIONS "SHELL:-F \"${_sdl3_framework_parent_path}\""
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
set(SDL3_Headers_FOUND TRUE)
|
||||||
|
|
||||||
|
if(NOT TARGET SDL3::SDL3-shared)
|
||||||
|
add_library(SDL3::SDL3-shared SHARED IMPORTED)
|
||||||
|
set_target_properties(SDL3::SDL3-shared
|
||||||
|
PROPERTIES
|
||||||
|
FRAMEWORK "TRUE"
|
||||||
|
IMPORTED_LOCATION "${_sdl3_framework_path}/SDL3"
|
||||||
|
INTERFACE_LINK_LIBRARIES "SDL3::Headers"
|
||||||
|
COMPATIBLE_INTERFACE_BOOL "SDL3_SHARED"
|
||||||
|
INTERFACE_SDL3_SHARED "ON"
|
||||||
|
COMPATIBLE_INTERFACE_STRING "SDL_VERSION"
|
||||||
|
INTERFACE_SDL_VERSION "SDL3"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
set(SDL3_SDL3-shared_FOUND TRUE)
|
||||||
|
|
||||||
|
set(SDL3_SDL3-static FALSE)
|
||||||
|
|
||||||
|
set(SDL3_SDL3_test FALSE)
|
||||||
|
|
||||||
|
unset(_sdl3_framework_parent_path)
|
||||||
|
unset(_sdl3_framework_path)
|
||||||
|
|
||||||
|
if(SDL3_SDL3-shared_FOUND)
|
||||||
|
set(SDL3_SDL3_FOUND TRUE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
function(_sdl_create_target_alias_compat NEW_TARGET TARGET)
|
||||||
|
if(CMAKE_VERSION VERSION_LESS "3.18")
|
||||||
|
# Aliasing local targets is not supported on CMake < 3.18, so make it global.
|
||||||
|
add_library(${NEW_TARGET} INTERFACE IMPORTED)
|
||||||
|
set_target_properties(${NEW_TARGET} PROPERTIES INTERFACE_LINK_LIBRARIES "${TARGET}")
|
||||||
|
else()
|
||||||
|
add_library(${NEW_TARGET} ALIAS ${TARGET})
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# Make sure SDL3::SDL3 always exists
|
||||||
|
if(NOT TARGET SDL3::SDL3)
|
||||||
|
if(TARGET SDL3::SDL3-shared)
|
||||||
|
_sdl_create_target_alias_compat(SDL3::SDL3 SDL3::SDL3-shared)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
check_required_components(SDL3)
|
||||||
|
|
||||||
|
set(SDL3_LIBRARIES SDL3::SDL3)
|
||||||
|
set(SDL3_STATIC_LIBRARIES SDL3::SDL3-static)
|
||||||
|
set(SDL3_STATIC_PRIVATE_LIBS)
|
||||||
|
|
||||||
|
set(SDL3TEST_LIBRARY SDL3::SDL3_test)
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
# based on the files generated by CMake's write_basic_package_version_file
|
||||||
|
|
||||||
|
# SDL CMake version configuration file:
|
||||||
|
# This file is meant to be placed in Resources/CMake of a SDL3 framework
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.12)
|
||||||
|
|
||||||
|
if(NOT EXISTS "${CMAKE_CURRENT_LIST_DIR}/../../Headers/SDL_version.h")
|
||||||
|
message(AUTHOR_WARNING "Could not find SDL_version.h. This script is meant to be placed in the Resources/CMake directory of SDL2.framework")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
file(READ "${CMAKE_CURRENT_LIST_DIR}/../../Headers/SDL_version.h" _sdl_version_h)
|
||||||
|
string(REGEX MATCH "#define[ \t]+SDL_MAJOR_VERSION[ \t]+([0-9]+)" _sdl_major_re "${_sdl_version_h}")
|
||||||
|
set(_sdl_major "${CMAKE_MATCH_1}")
|
||||||
|
string(REGEX MATCH "#define[ \t]+SDL_MINOR_VERSION[ \t]+([0-9]+)" _sdl_minor_re "${_sdl_version_h}")
|
||||||
|
set(_sdl_minor "${CMAKE_MATCH_1}")
|
||||||
|
string(REGEX MATCH "#define[ \t]+SDL_MICRO_VERSION[ \t]+([0-9]+)" _sdl_micro_re "${_sdl_version_h}")
|
||||||
|
set(_sdl_micro "${CMAKE_MATCH_1}")
|
||||||
|
if(_sdl_major_re AND _sdl_minor_re AND _sdl_micro_re)
|
||||||
|
set(PACKAGE_VERSION "${_sdl_major}.${_sdl_minor}.${_sdl_micro}")
|
||||||
|
else()
|
||||||
|
message(AUTHOR_WARNING "Could not extract version from SDL_version.h.")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
unset(_sdl_major_re)
|
||||||
|
unset(_sdl_major)
|
||||||
|
unset(_sdl_minor_re)
|
||||||
|
unset(_sdl_minor)
|
||||||
|
unset(_sdl_micro_re)
|
||||||
|
unset(_sdl_micro)
|
||||||
|
|
||||||
|
if(PACKAGE_FIND_VERSION_RANGE)
|
||||||
|
# Package version must be in the requested version range
|
||||||
|
if ((PACKAGE_FIND_VERSION_RANGE_MIN STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MIN)
|
||||||
|
OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_GREATER PACKAGE_FIND_VERSION_MAX)
|
||||||
|
OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_GREATER_EQUAL PACKAGE_FIND_VERSION_MAX)))
|
||||||
|
set(PACKAGE_VERSION_COMPATIBLE FALSE)
|
||||||
|
else()
|
||||||
|
set(PACKAGE_VERSION_COMPATIBLE TRUE)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
|
||||||
|
set(PACKAGE_VERSION_COMPATIBLE FALSE)
|
||||||
|
else()
|
||||||
|
set(PACKAGE_VERSION_COMPATIBLE TRUE)
|
||||||
|
if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
|
||||||
|
set(PACKAGE_VERSION_EXACT TRUE)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# The SDL3.xcframework only contains 64-bit archives
|
||||||
|
if(NOT "${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
|
||||||
|
set(PACKAGE_VERSION_UNSUITABLE TRUE)
|
||||||
|
endif()
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Main include header for the SDL library, version 3.2.26
|
||||||
|
*
|
||||||
|
* It is almost always best to include just this one header instead of
|
||||||
|
* picking out individual headers included here. There are exceptions to
|
||||||
|
* this rule--SDL_main.h is special and not included here--but usually
|
||||||
|
* letting SDL.h include the kitchen sink for you is the correct approach.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_h_
|
||||||
|
#define SDL_h_
|
||||||
|
|
||||||
|
#include <SDL3/SDL_stdinc.h>
|
||||||
|
#include <SDL3/SDL_assert.h>
|
||||||
|
#include <SDL3/SDL_asyncio.h>
|
||||||
|
#include <SDL3/SDL_atomic.h>
|
||||||
|
#include <SDL3/SDL_audio.h>
|
||||||
|
#include <SDL3/SDL_bits.h>
|
||||||
|
#include <SDL3/SDL_blendmode.h>
|
||||||
|
#include <SDL3/SDL_camera.h>
|
||||||
|
#include <SDL3/SDL_clipboard.h>
|
||||||
|
#include <SDL3/SDL_cpuinfo.h>
|
||||||
|
#include <SDL3/SDL_dialog.h>
|
||||||
|
#include <SDL3/SDL_endian.h>
|
||||||
|
#include <SDL3/SDL_error.h>
|
||||||
|
#include <SDL3/SDL_events.h>
|
||||||
|
#include <SDL3/SDL_filesystem.h>
|
||||||
|
#include <SDL3/SDL_gamepad.h>
|
||||||
|
#include <SDL3/SDL_gpu.h>
|
||||||
|
#include <SDL3/SDL_guid.h>
|
||||||
|
#include <SDL3/SDL_haptic.h>
|
||||||
|
#include <SDL3/SDL_hidapi.h>
|
||||||
|
#include <SDL3/SDL_hints.h>
|
||||||
|
#include <SDL3/SDL_init.h>
|
||||||
|
#include <SDL3/SDL_iostream.h>
|
||||||
|
#include <SDL3/SDL_joystick.h>
|
||||||
|
#include <SDL3/SDL_keyboard.h>
|
||||||
|
#include <SDL3/SDL_keycode.h>
|
||||||
|
#include <SDL3/SDL_loadso.h>
|
||||||
|
#include <SDL3/SDL_locale.h>
|
||||||
|
#include <SDL3/SDL_log.h>
|
||||||
|
#include <SDL3/SDL_messagebox.h>
|
||||||
|
#include <SDL3/SDL_metal.h>
|
||||||
|
#include <SDL3/SDL_misc.h>
|
||||||
|
#include <SDL3/SDL_mouse.h>
|
||||||
|
#include <SDL3/SDL_mutex.h>
|
||||||
|
#include <SDL3/SDL_pen.h>
|
||||||
|
#include <SDL3/SDL_pixels.h>
|
||||||
|
#include <SDL3/SDL_platform.h>
|
||||||
|
#include <SDL3/SDL_power.h>
|
||||||
|
#include <SDL3/SDL_process.h>
|
||||||
|
#include <SDL3/SDL_properties.h>
|
||||||
|
#include <SDL3/SDL_rect.h>
|
||||||
|
#include <SDL3/SDL_render.h>
|
||||||
|
#include <SDL3/SDL_scancode.h>
|
||||||
|
#include <SDL3/SDL_sensor.h>
|
||||||
|
#include <SDL3/SDL_storage.h>
|
||||||
|
#include <SDL3/SDL_surface.h>
|
||||||
|
#include <SDL3/SDL_system.h>
|
||||||
|
#include <SDL3/SDL_thread.h>
|
||||||
|
#include <SDL3/SDL_time.h>
|
||||||
|
#include <SDL3/SDL_timer.h>
|
||||||
|
#include <SDL3/SDL_tray.h>
|
||||||
|
#include <SDL3/SDL_touch.h>
|
||||||
|
#include <SDL3/SDL_version.h>
|
||||||
|
#include <SDL3/SDL_video.h>
|
||||||
|
#include <SDL3/SDL_oldnames.h>
|
||||||
|
|
||||||
|
#endif /* SDL_h_ */
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user