спірітус маргіналіс – Telegram
спірітус маргіналіс
206 subscribers
9.93K photos
3.52K videos
43 files
4.14K links
створив @Pyroarsonist канал, а він йому як раз
канал з музикою - https://news.1rj.ru/str/joinchat/AAAAAE69RH3vkdDapMT3Lw
Download Telegram
🇺🇦✙ДБМ✙🇺🇦
😁4
🤷‍♀1
продовжуючи тему psp подєлок...
так вийшло, що в мене дома є 3 psp (!!) і вирішив зробити дівчині, як частину подарунків проект - гру на psp (?!?!)
для погромістів та ентузіастів, код можна знайти тут: https://github.com/Pyroarsonist/lena_psp_happy_birthday_2025

я дуже вибачаюсь за термінологію, не знаю як в вашому ГЕЙдеві виражатись, отже маємо що маємо

гра досить проста: є пару екранів з описами-інструкціями та екрани, де відбувається сам ігровий процес
ідея в тому, що в інструкціях вказаний деякий текст (в реальному житті це загадка - фізичне місце подарунків), а щоб отримати ці інструкції - треба пройти рівень
рівень дуже простий - дівчинка на екрані має "догнати" подарунок і треба нажати правильну кнопку.
не зважаючи на легкість, я цей проєкт робив коло 2 місяців з перервами

точкою входу можна вважати портал
https://pspdev.github.io/
я використував докер версію (https://pspdev.github.io/installation/docker.html), тобто засетапив докер контейнер з файловим біндом на мою репу з кодом
🔥6
спірітус маргіналіс
продовжуючи тему psp подєлок... так вийшло, що в мене дома є 3 psp (!!) і вирішив зробити дівчині, як частину подарунків проект - гру на psp (?!?!) для погромістів та ентузіастів, код можна знайти тут: https://github.com/Pyroarsonist/lena_psp_happy_birthday_2025…
Базовий проєкт на psp складається із основної точки входу коду на плюсах чи с (тобто main.c або main.cpp, я писав на с++), та файліка CMakeLists.txt
через докер чи sdk (який ставиться на вашу ос напряму) можна сбілдити оригінальний cmake та Makefile та зробити білд. я не зміг собі поставити sdk, оскільки маю arm процесор, отже варіант тільки через докер. Це проблема, оскільки неможливо користуватись дебаг тулзами як psplinkusb, та і увесь ci проходить через докер контейнер.

на виході отримаємо EBOOT.PBP, який з ассетами кидаємо на psp через usb.
так, кожен раз, кожен чендж, треба робити операції: білд через psp-cmake та make, а потім копіювання на psp через usb-режим. Логи пишуться в файлік на psp, отже їх треба дивитись теж через маунтед диск. інше рішення доступне тільки якщо б була нативна платформа, де була б сдк, але нажаль тут все працює через докер. так можна було б логи вивести на екран поверх гри, але це повна дурка і гра з гемороєм, набагато легше (для такого маленького проєкту) над цим не паритись.

в CMakeLists.txt можна вказати ліби, які проєкт буде використовувати, різні кастомні команди (в мене це копіювання ассетів), налаштування тайтлу, іконок гри і т.д.
спірітус маргіналіс
Базовий проєкт на psp складається із основної точки входу коду на плюсах чи с (тобто main.c або main.cpp, я писав на с++), та файліка CMakeLists.txt через докер чи sdk (який ставиться на вашу ос напряму) можна сбілдити оригінальний cmake та Makefile та зробити…
переходячи до самого коду...
можна використовувати стандартні ліби psp, а можна використовувати SDL2 лібу
(https://pspdev.github.io/basic_programs.html)
можливо ще щось є, але я не розбирався, цього вже і так достатньо, щоб щось зробити

перші 2 проблеми, з якими я стикнувся, це те, що незрозуміло, як розбити код по різним файлам, щоб пспшний смейк їх зібрав, а якщо і розбивати, то треба ще й створювати хедери (дякую, плюси), а також те, що локально IDE не розуміє звідки беруться ліби (вони локально не скачані, а храняться на стороні sdk в докері)
так що на першу проблему я благополучно забив, а для другої знайшов і викачав соурс код ліб з докеру та переклав на локалку.

умовно код можна поділити на 3 частини: ініціалізація ассетів та створення базових структур для гри, геймстейт лупа, яка поділена на 3 іфа - 3 екрани та звільнення памʼяті.

аудіо ділиться на жирні треки, які я знайшов в mp3 та маленькі sfx в wav
прикол в тому, що один трек був "ісковєркан" та був легко кажучи спотвореним, ніби заторможеним, під час гри, хоча сам по собі файл нормальний. я довго дебажив, думав це гра лагає та починає тротлити, але виявилось, що аудіо-файл мав не таку герцовку, під яку був запущений аудіодевайс (не 44100 гц).
це ультра срань, але маємо, що маємо, пофіксилось дуже легко.

картинки (спрайти) треба було обробити, щоб вони були маленького розміру (я брав 64x64), оскільки саме ігрове поле це 480х272, а також прибрати бекграунд, щоб можна було комбінувати з іншими картинками (зеленка). Ігрові спрайти накладаються на інші через бленд мод, а також під час створення текстур треба спарсити їх розмір.

нарешті, шрифт був сугубо латиниця, оскільки кирилиця чи універсальний попросту ламав гру

всі ассети, а також системні структури, як SDL_Window та SDL_Renderer ініціалізуються на початку і звільняються в кінці точки входу.

Ігрова лупа починається з першого екрану з текстом, для якого треба нажати X. Далі ми керуємо дівчинкою, яка намагається догнати подарунковий бокс. Для кожного іфа в геймлупі я робив окремі лістенери для контролів псп (окремо стік, кнопки вверх, вліво, вправо, вниз, квадрат, хрестик і так далі.)
Кстаті, в SDL є контроли для L3 та R3 і я довго не міг зрозуміти, як їх нажати) але на psp немає кнопки на стіку, тому пофіг.

Стік та кнопки змінюють координати дівчинки, а під кінець ігролупи текстура перемальовується та робиться ділей до наступної лупи. В ключовому моменті геймстейт міняється, а отже і міняється іфчик в ігролупі та сам поточний екран.

під кінець проекту дуже сильно почало вибісувати як по дефільному працює система поінтерів на плюсах, що чомусь інколи не міняється памʼять переданого поінтера. також, на початку я використував ші для генерації коду, але в кінці він був безсилий щось зробити толкове, я вже навіть не кажу про вайб кодинг, тут скоріше він виконував функцію огляду документації.
👍1
😁2
😭2
Передивлююсь Dark, зайшов почитати про скрижаль
https://uk.wikipedia.org/wiki/%D0%A1%D0%BC%D0%B0%D1%80%D0%B0%D0%B3%D0%B4%D0%BE%D0%B2%D0%B0_%D1%81%D0%BA%D1%80%D0%B8%D0%B6%D0%B0%D0%BB%D1%8C
А вона СМАРАГДОВА
😁2