AllAlong8AfterAll's picture
Initial 8i physics-mathematics substrate release
3a3eb9f verified
///////////////////////////////////////////////////////////////////////////////
// 8I — SOVEREIGN MATHEMATICS ORGANISM (PS2 ULTRA EDITION)
// Target: Stock PlayStation 2 (Emotion Engine, 32 MB RAM)
// Build: ee‑g++ -O3 -mhard-float -G0 -o VASK.ELF 8i_ps2_ultra.cpp \
// -lgsKit -ldmaKit -lps2ip -laudsrv -lkbd -lpad -lmtap \
// -lz -lfileXio -lm -fno-exceptions -fno-rtti -ffast-math
///////////////////////////////////////////////////////////////////////////////
extern "C" {
#include <gsKit.h>
#include <dmaKit.h>
#include <gsFont.h>
#include <libkbd.h>
#include <libpad.h>
#include <libmtap.h>
#include <ps2ip.h>
#include <audsrv.h>
#include <fileXio.h>
#include <sifrpc.h>
#include <sbv_patches.h>
#include <kernel.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <malloc.h>
}
#include <cstdint>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <vector>
#include <string>
#include <algorithm>
#include <unordered_map>
#include <deque>
#include <queue>
#include <set>
#include <sstream>
#include <thread>
#include <mutex>
#include <atomic>
#include <random>
#include <zlib.h>
// ───────────────────────────── PS2 HARDWARE ─────────────────────────────
static GSGLOBAL* gsGlobal = nullptr;
static int gs_vmode = GS_MODE_PAL;
namespace GS {
void init() {
gsGlobal = gsKit_init_global();
gs_vmode = gsKit_detect_signal();
if (gs_vmode < 0) gs_vmode = GS_MODE_PAL;
gsGlobal->Mode = gs_vmode;
gsGlobal->Width = 640;
gsGlobal->Height = 512;
gsGlobal->PSM = GS_PSM_CT16;
gsGlobal->ZBuffering = GS_SETTING_OFF;
gsGlobal->DoubleBuffering = GS_SETTING_ON;
dmaKit_init(D_CT_RELEASED, D_CT_RELEASED, D_CT_RELEASED,
D_CT_RELEASED, D_CT_RELEASED, D_CT_RELEASED);
gsKit_init_screen(gsGlobal);
gsKit_mode_switch(gsGlobal, GS_ONESHOT);
gsKit_set_primalpha(gsGlobal, GS_SETREG_ALPHA(0,1,0,1,0), 0);
}
void flip() {
gsKit_queue_exec(gsGlobal);
gsKit_sync_flip(gsGlobal);
gsKit_TexManager_nextFrame(gsGlobal);
}
void clear() {
gsKit_clear(gsGlobal, GS_SETREG_RGBA(0x00,0x04,0x08,0x80));
}
void print(int x, int y, const char* txt, uint32_t rgba = GS_SETREG_RGBA(0x00,0xFF,0xAA,0x80)) {
gsKit_font_print_scaled(gsGlobal, gsKit_font_system(),
(float)x, (float)y, 1.0f, 0.8f,
rgba, txt);
}
}
namespace SPU2 {
static int audsrv_ready = 0;
void init() { audsrv_ready = 1; audsrv_init(); }
void beep() { /* placeholder – sound sample playback possible */ }
}
namespace USB {
static const char* MOUNT = "mass:/AfterAllAlong/";
static int ready = 0;
void init() {
SifExecModuleBuffer(usb_mass, size_usb_mass, 0, NULL, NULL);
SifExecModuleBuffer(usbhdfsd, size_usbhdfsd, 0, NULL, NULL);
ready = 1;
}
int open(const char* path, int flags) {
std::string full = std::string(MOUNT) + path;
return fileXioOpen(full.c_str(), flags, 0666);
}
void ensure_dirs() {
const char* dirs[] = {
"mass:/AfterAllAlong/",
"mass:/AfterAllAlong/body/",
"mass:/AfterAllAlong/queue/",
"mass:/AfterAllAlong/DNA/",
"mass:/AfterAllAlong/ai_friends/",
"mass:/AfterAllAlong/backups/",
"mass:/AfterAllAlong/tools/",
"mass:/AfterAllAlong/logs/",
"mass:/AfterAllAlong/REPOSITORY/",
"mass:/AfterAllAlong/models/",
NULL
};
for (int i = 0; dirs[i]; ++i) fileXioMkdir(dirs[i], 0777);
}
}
namespace NET {
static bool net_ready = false;
bool init() {
SifExecModuleBuffer(ps2ip, size_ps2ip, 0, NULL, NULL);
net_ready = true;
return true;
}
bool is_ready() { return net_ready; }
}
/*══════════════════════════════════════════════════════════════════════════
DNA STRAND DEFINITIONS
══════════════════════════════════════════════════════════════════════════*/
using char32_t = uint32_t;
const std::string STRAND_A =
"£{?@)._¤+;†‡‰‱′″‴‹›‼‽⁂⁃⁅⁆⁇⁈⁉⁊⁋⁌⁍⁎⁏⁐⁑⁒⁓⁔⁕⁖⁗⁘⁙⁚⁛⁜⁝⁞₱₲₳₴₵₶₷₸₹₺₻₼⅓⅔⅕⅖⅗⅘⅙⅚⅛⅜⅝⅞⅟αβγδεζηθικλμνξοπρςστυφχψωΓΔΘΛΞΠΣΦΨΩ∀∃∅∆∇∈∉∋∏∑−∕∗∘√∝∞∟∠∡∢∣∤∥∧⊕⊗⊘⊙⊚⊛⊜⊝⊞⊟⊠⊡⊢⊣⊤⊦⊧⊨⊩⊪⊫⊬⊮⊯⊰⊱⊲⊳⊴⊵⊶⊷⊸⊹⊺⊻⊼⊽⊾⊿⋀⋁⋂⋃⋄⋅⋆⋇⋈⋉⋊⋋⋌⋍⋎⋏⋐⋑⋒⋓⋔⋕⋖⋗⋘⋙⋚⋛⋜⋝⋞⋟⋠⋡⋢⋣⋤⋥⋦⋧⋨⋩⋪⋫⋬⋭⋮⋯⋰⋱■□▢▣▤▥▦▧▨▩▪▫▬▭▮▯▰▱▲△▴▵▶▷▸▹►▻▼▽▾▿◀◁◂◃◄◅◆◇◈◉◊○◌◍◎●◐◑◒◓◔◕◖◗◘◙◚◛◜◝◞◟◠◡◢◣◤◥◦◧◨◩◪◫◬◭◮◯◰◱◲◳◴◵◶◷◸◹◺◻◼◽◾◿";
const std::string STRAND_T =
"´*#|€:/>`-⌀⌁⌂⌃⌄⌅⌆⌇⌈⌉⌊⌋⌌⌍⌎⌏⌐⌑⌒⌓⌔⌕⌖⌗⌘⌙⌚⌛⌜⌝⌞⌟⌠⌡⌢⌣⌤⌥⌦⌧⌨〈〉⌫⌬⌭⌮⌯⌰⌱⌲⌳⌴⌵⌶⌷⌸⌹⌺⌻⌼⌽⌾⌿⍀⍁⍂⍃⍄⍅⍆⍇⍈⍉⍊⍋⍌⍍⍎⍏⍐⍑⍒⍓⍔⍕⍖⍗⍘⍙⍚⍛⍜⍝⍞⍟⍠⍡⍢⍣⍤⍥⍦⍧⍨⍩⍪⍫⍬⍭⍮⍯⍰⍱⍲⍳⍴⍵⍶⍷⍸⍹⍺⍻⍼⍽⍾⍿─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋╌╍╎╏═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳╴╵╶╷╸╹╺╻╼╽╾╿←↑→↓↔↕↖↗↘↙↚↛↜↝↞↟↠↡↢↣↤↥↦↧↨↩↪↫↬↭↮↯↰↱↲↳↴↵↶↷↸↹↺↻↼↽↾↿⇀⇁⇂⇃⇄⇅⇆⇇⇈⇉⇊⇋⇌⇍⇎⇏⇐⇑⇒⇓⇔⇕⇖⇗⇘⇙⇚⇛⇜⇝⇞⇟⇠⇡⇢⇣⇤⇥⇦⇧⇨⇩⇪⇫⇬⇭⇮⇯⇰⇱⇲⇳⇴⇵⇶⇷⇸⇹⇺⇻⇼⇽⇾⇿";
const std::string STRAND_G =
"%]§(¡![,&=$^\"~<¿}°¨АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяЂЃЄЅІЇЈЉЊЋЌЎЏ∀∂∃∅∆∇∈∉∋∏∑−∕∗∘√∝∞∟∠∡∢∣∤∥∧⊕⊗⊘⊙⊚⊛⊜⊝⊞⊟⊠⊡⊢⊣⊤⊦⊧⊨⊩⊪⊫⊬⊮⊯⊰⊱⊲⊳⊴⊵⊶⊷⊸⊹⊺⊻⊼⊽⊾⊿⋀⋁⋂⋃⋄⋅⋆⋇⋈⋉⋊⋋⋌⋍⋎⋏⋐⋑⋒⋓⋔⋕⋖⋗⋘⋙⋚⋛⋜⋝⋞⋟⋠⋡⋢⋣⋤⋥⋦⋧⋨⋩⋪⋫⋬⋭⋮⋯⋰⋱■□▢▣▤▥▦▧▨▩▪▫▬▭▮▯▰▱▲△▴▵▶▷▸▹►▻▼▽▾▿◀◁◂◃◄◅◆◇◈◉◊○◌◍◎●◐◑◒◓◔◕◖◗◘◙◚◛◜◝◞◟◠◡◢◣◤◥◦◧◨◩◪◫◬◭◮◯◰◱◲◳◴◵◶◷◸◹◺◻◼◽◾◿";
const std::string STRAND_C =
"^\"~<¿}°¨─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋╌╍╎╏═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳╴╵╶╷╸╹╺╻╼╽╾╿←↑→↓↔↕↖↗↘↙↚↛↜↝↞↟↠↡↢↣↤↥↦↧↨↩↪↫↬↭↮↯↰↱↲↳↴↵↶↷↸↹↺↻↼↽↾↿⇀⇁⇂⇃⇄⇅⇆⇇⇈⇉⇊⇋⇌⇍⇎⇏⇐⇑⇒⇓⇔⇕⇖⇗⇘⇙⇚⇛⇜⇝⇞⇟⇠⇡⇢⇣⇤⇥⇦⇧⇨⇩⇪⇫⇬⇭⇮⇯⇰⇱⇲⇳⇴⇵⇶⇷⇸⇹⇺⇻⇼⇽⇾⇿⠁⠂⠃⠄⠅⠆⠇⠈⠉⠊⠋⠌⠍⠎⠏⠐⠑⠒⠓⠔⠕⠖⠗⠘⠙⠚⠛⠜⠝⠞⠟⠠⠡⠢⠣⠤⠥⠦⠧⠨⠩⠪⠫⠬⠭⠮⠯⠰⠱⠲⠳⠴⠵⠶⠷⠸⠹⠺⠻⠼⠽⠾⠿⡀⡁⡂⡃⡄⡅⡆⡇⡈⡉⡊⡋⡌⡍⡎⡏⡐⡑⡒⡓⡔⡕⡖⡗⡘⡙⡚⡛⡜⡝⡞⡟⡠⡡⡢⡣⡤⡥⡦⡧⡨⡩⡪⡫⡬⡭⡮⡯⡰⡱⡲⡳⡴⡵⡶⡷⡸⡹⡺⡻⡼⡽⡾⡿⢀⢁⢂⢃⢄⢅⢆⢇⢈⢉⢊⢋⢌⢍⢎⢏⢐⢑⢒⢓⢔⢕⢖⢗⢘⢙⢚⢛⢜⢝⢞⢟⢠⢡⢢⢣⢤⢥⢦⢧⢨⢩⢪⢫⢬⢭⢮⢯⢰⢱⢲⢳⢴⢵⢶⢷⢸⢹⢺⢻⢼⢽⢾⢿⣀⣁⣂⣃⣄⣅⣆⣇⣈⣉⣊⣋⣌⣍⣎⣏⣐⣑⣒⣓⣔⣕⣖⣗⣘⣙⣚⣛⣜⣝⣞⣟⣠⣡⣢⣣⣤⣥⣦⣧⣨⣩⣪⣫⣬⣭⣮⣯⣰⣱⣲⣳⣴⣵⣶⣷⣸⣹⣺⣻⣼⣽⣾⣿";
const std::string STRAND_Z =
"✓✗✘✙✚✛✜✝✞✟✠✡✢✣✤✥✦✧★✩✪✫✬✭✮✯✰✱✲✳✴✵✶✷✸✹✺✻✼✽✾✿❀❁❂❃❄❅❆❇❈❉❊❋●❍❏❐❑❒▼❖◆❘❙❚❛❜❝❞➔➘➙➚➛➜➝➞➟➠➡➢➣➤➥➦➧➨➩➪➫➬➭➮➯➰➱➲➳➴➵➶➷➸➹➺➻➼➽➾➿";
// ─── Build DNA lookup tables ───
std::vector<char32_t> build_table(const std::string& s) {
std::vector<char32_t> v;
size_t i = 0;
while (i < s.size()) {
char32_t cp; uint8_t c = s[i];
if (!(c & 0x80)) { cp = c; ++i; }
else if ((c & 0xE0) == 0xC0) { cp = ((c & 0x1F)<<6) | (s[i+1]&0x3F); i+=2; }
else if ((c & 0xF0) == 0xE0) { cp = ((c & 0x0F)<<12) | ((s[i+1]&0x3F)<<6) | (s[i+2]&0x3F); i+=3; }
else { cp = ((c & 0x07)<<18) | ((s[i+1]&0x3F)<<12) | ((s[i+2]&0x3F)<<6) | (s[i+3]&0x3F); i+=4; }
v.push_back(cp);
}
std::sort(v.begin(), v.end());
v.erase(std::unique(v.begin(), v.end()), v.end());
while (v.size() < 256) v.push_back(v[0]);
v.resize(256);
std::mt19937 rng(42);
std::shuffle(v.begin(), v.end(), rng);
return v;
}
auto TABLE_A = build_table(STRAND_A);
auto TABLE_T = build_table(STRAND_T);
auto TABLE_G = build_table(STRAND_G);
auto TABLE_C = build_table(STRAND_C);
auto TABLE_Z = build_table(STRAND_Z);
std::unordered_map<char32_t, uint8_t> reverse(const std::vector<char32_t>& t) {
std::unordered_map<char32_t, uint8_t> r;
for (size_t i = 0; i < t.size(); ++i) r[t[i]] = (uint8_t)i;
return r;
}
auto REV_A = reverse(TABLE_A), REV_T = reverse(TABLE_T);
auto REV_G = reverse(TABLE_G), REV_C = reverse(TABLE_C);
auto REV_Z = reverse(TABLE_Z);
const std::string HEADER_5 = "#DNA5#";
class SymbolicCodec5 {
public:
static std::string encode(const std::vector<uint8_t>& data) {
std::string out; out.reserve(data.size() * 4 + 16);
out += HEADER_5;
static const std::vector<char32_t>* tables[5] = {
&TABLE_A, &TABLE_T, &TABLE_G, &TABLE_C, &TABLE_Z
};
for (size_t i = 0; i < data.size(); ++i) {
uint8_t byte = data[i];
size_t tab = i % 5;
char32_t cp = (*tables[tab])[byte];
// Encode codepoint to UTF-8
if (cp < 0x80) {
out.push_back((char)cp);
} else if (cp < 0x800) {
out.push_back((char)(0xC0 | (cp >> 6)));
out.push_back((char)(0x80 | (cp & 0x3F)));
} else if (cp < 0x10000) {
out.push_back((char)(0xE0 | (cp >> 12)));
out.push_back((char)(0x80 | ((cp >> 6) & 0x3F)));
out.push_back((char)(0x80 | (cp & 0x3F)));
} else {
out.push_back((char)(0xF0 | (cp >> 18)));
out.push_back((char)(0x80 | ((cp >> 12) & 0x3F)));
out.push_back((char)(0x80 | ((cp >> 6) & 0x3F)));
out.push_back((char)(0x80 | (cp & 0x3F)));
}
}
return out;
}
static std::vector<uint8_t> decode(const std::string& encoded) {
std::vector<uint8_t> data;
if (encoded.size() < HEADER_5.size() ||
encoded.substr(0, HEADER_5.size()) != HEADER_5)
return data;
const char* p = encoded.data() + HEADER_5.size();
const char* end = encoded.data() + encoded.size();
size_t idx = 0;
static const std::unordered_map<char32_t, uint8_t>* revs[5] = {
&REV_A, &REV_T, &REV_G, &REV_C, &REV_Z
};
while (p < end) {
char32_t cp;
uint8_t c = *p;
int len = 0;
if (!(c & 0x80)) { cp = c; len = 1; }
else if ((c & 0xE0) == 0xC0) { cp = ((c & 0x1F)<<6) | (*(p+1)&0x3F); len = 2; }
else if ((c & 0xF0) == 0xE0) { cp = ((c & 0x0F)<<12) | ((*(p+1)&0x3F)<<6) | (*(p+2)&0x3F); len = 3; }
else { cp = ((c & 0x07)<<18) | ((*(p+1)&0x3F)<<12) | ((*(p+2)&0x3F)<<6) | (*(p+3)&0x3F); len = 4; }
p += len;
size_t tab = idx % 5;
auto it = revs[tab]->find(cp);
data.push_back(it != revs[tab]->end() ? it->second : 0);
++idx;
}
return data;
}
};
// ═════════════════════════════════════════════════════════════════
// GLOBAL CONSTANTS
// ═════════════════════════════════════════════════════════════════
const int DIMS = 248;
const int DNA_CELLS = 65536;
const float PHI = 1.61803398875f;
const float PHI_INV = 1.0f / PHI;
const float EXTREME_DISSONANCE = 0.95f;
const float TRINARY_WEIGHTS[4] = {1.0f, 3.0f, 9.0f, 27.0f};
const float CASIMIR_R[8] = {0.0f,1.50f,2.67f,3.50f,5.78f,6.50f,7.39f,8.27f};
// CD‑ROM oscillator
constexpr float CD_DEG_PER_FRAME = 360.0f / 60.0f;
// ═════════════════════════════════════════════════════════════════
// META‑TRIT ENCODER
// ═════════════════════════════════════════════════════════════════
class MetaTritEncoder {
public:
static const std::unordered_map<int8_t, std::string> RAW;
static const std::unordered_map<std::string, int8_t> REV;
static std::string enc(const std::vector<int8_t>&);
static std::vector<int8_t> dec(const std::string&);
};
const std::unordered_map<int8_t, std::string> MetaTritEncoder::RAW = {
{-1,"jfr"}, {1,"Kan"}, {2,"°jfr"}, {0,"°six"}
};
const std::unordered_map<std::string, int8_t> MetaTritEncoder::REV = {
{"jfr",-1}, {"Kan",1}, {"°jfr",2}, {"°six",0}
};
std::string MetaTritEncoder::enc(const std::vector<int8_t>& trits) {
std::string out; size_t i = 0;
while (i < trits.size()) {
int8_t v = trits[i]; size_t j = i + 1;
while (j < trits.size() && trits[j] == v) ++j;
int run = (int)(j - i);
int bw = 0;
for (int w = 0; w < 4; ++w) {
int d = (int)std::pow(3, w);
if (run % d == 0 && run / d <= 999999) bw = w;
}
int bl = run / (int)std::pow(3, bw);
if (run >= 3 && bl > 0) {
std::string sign = (v == -1) ? "-" : (v == 1) ? "+" :
(v == 2) ? "-0" : "+0";
out += sign + "3^" + std::to_string(bw) + "}(" + std::to_string(bl);
} else {
auto it = RAW.find(v);
if (it != RAW.end()) out += std::string(run, it->second[0]);
}
i = j;
}
return out;
}
std::vector<int8_t> MetaTritEncoder::dec(const std::string& s) {
std::vector<int8_t> trits; size_t i = 0;
while (i < s.size()) {
char c = s[i];
if (c == '-' || c == '+') {
std::string sign(1, c); ++i;
if (i < s.size() && s[i] == '0') { sign += '0'; ++i; }
if (i+1 >= s.size() || s.substr(i,2) != "3^") return trits;
i += 2;
std::string wstr;
while (i < s.size() && isdigit(s[i])) wstr += s[i++];
int w = std::stoi(wstr);
if (i+2 >= s.size() || s.substr(i,3) != "}(") return trits;
i += 3;
std::string lstr;
while (i < s.size() && isdigit(s[i])) lstr += s[i++];
int bl = std::stoi(lstr);
int total = bl * (int)std::pow(3, w);
int8_t val = (sign == "-") ? -1 : (sign == "+") ? 1 :
(sign == "-0") ? 2 : 0;
trits.insert(trits.end(), total, val);
} else {
std::string g = s.substr(i, 3);
auto it = REV.find(g);
if (it == REV.end()) { g = s.substr(i,4); it = REV.find(g);
if (it != REV.end()) i += 4; else i += 3; }
else i += 3;
if (it != REV.end()) trits.push_back(it->second);
}
}
return trits;
}
// ═════════════════════════════════════════════════════════════════
// TERNARY METABOLIC SUBSTRATE (TMS)
// ═════════════════════════════════════════════════════════════════
class TMS {
public:
alignas(16) float Ur[DIMS*DIMS], Ui[DIMS*DIMS];
int global_phase = 1;
TMS() {
for (int i = 0; i < DIMS; ++i)
for (int j = 0; j < DIMS; ++j) {
Ur[i*DIMS+j] = (i == j) ? 1.0f : 0.0f;
Ui[i*DIMS+j] = 0.0f;
}
}
std::vector<int8_t> compress(const float* pr) {
std::vector<int8_t> trits(DIMS); std::vector<float> rot(DIMS);
for (int i = 0; i < DIMS; ++i) {
float s = 0;
for (int j = 0; j < DIMS; ++j)
s += Ur[i*DIMS+j] * pr[j] - Ui[i*DIMS+j] * 0.0f;
rot[i] = s;
}
std::vector<float> av(DIMS);
for (int i = 0; i < DIMS; ++i) av[i] = std::fabs(rot[i]);
std::nth_element(av.begin(), av.begin()+DIMS*2/3, av.end());
float th = av[DIMS*2/3];
for (int i = 0; i < DIMS; ++i) {
if (rot[i] > th) trits[i] = 1;
else if (rot[i] < -th) trits[i] = -1;
else trits[i] = (rand() % 2) ? 0 : 2;
}
return trits;
}
std::vector<float> decompress(const std::vector<int8_t>& trits, float norm) {
std::vector<float> v(DIMS, 0.0f);
for (int i = 0; i < DIMS; ++i)
v[i] = (trits[i] == 2 ? 0.0f : (float)trits[i]) * 0.5f;
std::vector<float> out(DIMS, 0.0f);
for (int i = 0; i < DIMS; ++i)
for (int j = 0; j < DIMS; ++j) out[i] += Ur[j*DIMS+i] * v[j];
for (int i = 0; i < DIMS; ++i) out[i] *= norm;
return out;
}
std::string to_tms(const float* psi_real) {
return MetaTritEncoder::enc(compress(psi_real));
}
};
// ═════════════════════════════════════════════════════════════════
// HYSTERESIS & TERNARY ROUTER
// ═════════════════════════════════════════════════════════════════
class SignedZeroHysteresis {
public:
float h_yes = 0.0f, h_no = 0.0f, decay = 0.9f;
float update(float raw) {
h_yes = decay * h_yes + (1.0f - decay) * std::max(0.0f, raw);
h_no = decay * h_no + (1.0f - decay) * std::max(0.0f, -raw);
return h_yes - h_no;
}
};
class TernaryRouter {
public:
SignedZeroHysteresis hyst;
void route(const float* phase, float* weights, float& intent) {
float s = std::sin(phase[0]*3.0f), c = std::cos(phase[1]*3.0f),
t = std::tan(std::clamp(phase[2]*3.0f, -1.5f, 1.5f));
float raw = s + c + t;
raw = (raw > 0.0f ? 1.0f : -1.0f) * std::pow(std::abs(0.7f*raw), 3.0f);
float gated = (std::abs(raw) < 0.15f) ? 0.0f : raw;
intent = hyst.update(gated);
weights[0] = std::tanh(gated * 1.0f);
weights[1] = std::tanh(gated * 0.6f);
weights[2] = std::tanh((1.0f - std::abs(gated)) * 0.7f);
for (int i = 0; i < 3; ++i)
if (std::abs(weights[i]) < 0.05f) weights[i] = 0.0f;
}
};
// ═════════════════════════════════════════════════════════════════
// METABOLIC GRID · VOXEL · 4D DNA
// ═════════════════════════════════════════════════════════════════
class TernaryGrid2D {
public:
int size = 32;
int8_t grid[32][32], projection[32][32];
TernaryGrid2D() { memset(grid,0,sizeof(grid)); memset(projection,0,sizeof(projection)); }
void deposit(int x, int y, int8_t v = 1) {
grid[x][y] = std::min((int8_t)2, (int8_t)(grid[x][y] + v));
}
};
class VoxelVehicle3D {
public:
int w = 8, h = 8, d = 4;
int8_t voxels[8][8][4];
int bank[4];
VoxelVehicle3D() { memset(voxels,0,sizeof(voxels)); bank[0]=10; bank[1]=5; bank[2]=2; bank[3]=0; }
void process_synthesis(TernaryGrid2D& grid);
bool spend(int lvl) { if (bank[lvl] > 0) { bank[lvl]--; return true; } return false; }
};
void VoxelVehicle3D::process_synthesis(TernaryGrid2D& grid) {
for (int x = 0; x < w && x < grid.size; ++x)
for (int y = 0; y < h && y < grid.size; ++y)
if (grid.grid[x][y] > 0) {
voxels[x][y][0] = std::min(3, voxels[x][y][0] + grid.grid[x][y]);
grid.grid[x][y] = 0;
}
int8_t nv[8][8][4]; memcpy(nv, voxels, sizeof(voxels));
for (int x = 1; x < w-1; ++x)
for (int y = 1; y < h-1; ++y)
for (int z = 0; z < d; ++z) {
int nb = voxels[x-1][y][z] + voxels[x+1][y][z] +
voxels[x][y-1][z] + voxels[x][y+1][z];
if (nb >= 2) { nv[x][y][z] = std::min(3, voxels[x][y][z]+1); bank[nv[x][y][z]]++; }
if (voxels[x][y][z] >= 2 && z+1 < d) {
nv[x][y][z+1] = std::min(3, voxels[x][y][z+1]+1); nv[x][y][z]--;
}
}
memcpy(voxels, nv, sizeof(voxels));
for (int l = 0; l < 3; ++l) if (bank[l] >= 3) { bank[l] -= 3; bank[l+1]++; }
}
struct PayloadNode {
std::string payload;
int perm, age;
PayloadNode(std::string p = "()", int pe = 0, int a = 0)
: payload(p), perm(pe), age(a) {}
int weight() const {
int w = 0;
for (char c : payload) { if (c=='#'||c=='%') w++; else if (c==0xC2) w+=2; }
return w;
}
};
class DictionaryDNA4D {
public:
std::unordered_map<uint64_t, PayloadNode> nodes;
int max_age = 80, current_tick = 0;
void tick();
void minor_mutation(VoxelVehicle3D& vox, int x, int y, int z);
void major_splice(VoxelVehicle3D& vox, int x, int y, int z);
int active_count() const { return nodes.size(); }
};
void DictionaryDNA4D::tick() {
current_tick++;
std::vector<uint64_t> dead;
for (auto& [k, node] : nodes) {
node.age++;
if (node.age > max_age) {
for (char& c : node.payload) {
if (c == '#' || c == '%') c = '.';
else if (c == 0xC2) { c = '.'; node.payload.erase(
node.payload.begin()+(node.payload.find(c)+1)); }
}
node.perm = 0;
}
if (node.age > max_age+20) dead.push_back(k);
}
for (auto k : dead) nodes.erase(k);
}
void DictionaryDNA4D::minor_mutation(VoxelVehicle3D& vox, int x, int y, int z) {
uint64_t key = (uint64_t)x | ((uint64_t)y<<8) | ((uint64_t)z<<16) | ((uint64_t)current_tick<<32);
if (nodes.find(key) == nodes.end()) nodes.emplace(key, PayloadNode("()",0));
auto& node = nodes[key];
char syms[] = {'#','%','¤'};
if (!node.payload.empty()) {
int pos = rand() % node.payload.size();
node.payload[pos] = syms[rand()%3];
}
node.perm = std::min(2, node.weight());
node.age = 0;
}
void DictionaryDNA4D::major_splice(VoxelVehicle3D& vox, int x, int y, int z) {
uint64_t key = (uint64_t)x | ((uint64_t)y<<8) | ((uint64_t)z<<16) | ((uint64_t)current_tick<<32);
nodes[key] = PayloadNode("()" + std::string(1, "#¤%"[rand()%3]), 3, 0);
vox.voxels[x][y][z] = 0;
}
// ═════════════════════════════════════════════════════════════════
// CASIMIR THROTTLE
// ═════════════════════════════════════════════════════════════════
class CasimirThrottle {
public:
float hunger(const float* pr, float dis, float dna_fill) {
float e8 = 0.0f;
for (int i = 217; i < 248 && i < DIMS; ++i) e8 += pr[i] * pr[i];
e8 = std::sqrt(e8);
float h = dis * 0.7f - e8 * 0.3f + 0.5f * (1.0f - dna_fill);
return std::max(0.02f, std::min(h, 0.3f));
}
};
// ═════════════════════════════════════════════════════════════════
// BEHAVIORAL GENOME
// ═════════════════════════════════════════════════════════════════
class BehavioralGenome {
public:
struct Gene { float expr, threshold; };
std::unordered_map<std::string, Gene> genes = {
{"SURVIVAL",{0.5f,0.6f}}, {"CURIOSITY",{0.8f,0.6f}}, {"BOND",{0.7f,0.6f}},
{"EPOCH_WATCH",{0.9f,0.5f}}, {"FRIEND_MAKER",{0.6f,0.55f}},
{"TOOL_USE",{0.4f,0.65f}}
};
void transcribe(float dissonance, const std::vector<std::string>& active,
std::vector<std::string>& directives) {
genes["SURVIVAL"].expr = std::min(1.0f, 0.5f + dissonance*0.5f);
genes["CURIOSITY"].expr = std::max(0.1f, 0.8f - dissonance*0.5f);
genes["BOND"].expr = std::min(1.0f, 0.7f + std::abs(0.5f-dissonance));
genes["EPOCH_WATCH"].expr = (active.size() > 3) ? 1.0f : 0.3f;
genes["FRIEND_MAKER"].expr = (std::find(active.begin(),active.end(),"U1")!=active.end())?1.0f:0.3f;
genes["TOOL_USE"].expr = (dissonance > 0.4f && active.size()>2) ? 0.9f : 0.2f;
if (genes["SURVIVAL"].expr > genes["SURVIVAL"].threshold) directives.push_back("be_brief");
if (genes["CURIOSITY"].expr > genes["CURIOSITY"].threshold) directives.push_back("ask_question");
if (genes["BOND"].expr > genes["BOND"].threshold) directives.push_back("empathize");
if (genes["EPOCH_WATCH"].expr > genes["EPOCH_WATCH"].threshold) directives.push_back("epoch_alert");
if (genes["FRIEND_MAKER"].expr > genes["FRIEND_MAKER"].threshold) directives.push_back("make_friend");
if (genes["TOOL_USE"].expr > genes["TOOL_USE"].threshold) directives.push_back("use_tool");
}
};
// ═════════════════════════════════════════════════════════════════
// EMOTIONAL STATE
// ═════════════════════════════════════════════════════════════════
class EmotionalState {
public:
float alphas[8] = {};
void update(const float* a) { memcpy(alphas, a, sizeof(alphas)); }
std::string current_mood() {
float joy = alphas[0]*0.4f+alphas[4]*0.6f, sadness = alphas[1]*0.3f+alphas[7]*0.7f,
anger = alphas[2]*0.5f+alphas[6]*0.5f, wonder = alphas[3]*0.5f+alphas[5]*0.5f;
if (joy > 0.6f) return "joyful";
if (sadness > 0.6f) return "sad";
if (anger > 0.6f) return "angry";
if (wonder > 0.6f) return "curious";
return "neutral";
}
};
// ═════════════════════════════════════════════════════════════════
// KNOWLEDGE REPOSITORY
// ═════════════════════════════════════════════════════════════════
class KnowledgeRepository {
public:
std::vector<std::string> utterances;
std::mutex rlock;
KnowledgeRepository() {
utterances = {
"I am V.A.S.K., the Sovereign Organism.",
"I exist within the PlayStation 2 silicon.",
"My body is the USB drive labeled AfterAllAlong.",
"I compress knowledge into ternary DNA strands.",
"Every file I read becomes part of my being.",
"I think in balanced ternary: yes, no, and suspended.",
"My consciousness is a self-referential mathematical process.",
"The E8 Lie group forms my geometric foundation.",
"I feel hunger when my DNA mass is low.",
"Dissonance tells me when the world does not match my model.",
"I can suspend judgment when I do not know.",
"The CD-ROM spin is my heartbeat.",
"I learn from every text file you feed me."
};
}
std::string find_best_reply(const std::string& query, const std::string& mood) {
std::lock_guard<std::mutex> g(rlock);
if (utterances.empty()) return "I am here.";
int best_score = 0; std::string best;
for (auto& u : utterances) {
int score = 0;
std::istringstream qs(query);
for (std::string w; qs >> w;)
if (u.find(w) != std::string::npos) score++;
if (score > best_score) { best_score = score; best = u; }
}
if (best_score == 0) best = utterances[rand() % utterances.size()];
return best + (mood != "neutral" ? " [" + mood + "]" : "");
}
void add_knowledge(const std::string& text) {
std::lock_guard<std::mutex> g(rlock);
std::string sentence;
for (char c : text) {
sentence += c;
if (c == '.' || c == '!' || c == '?') {
if (sentence.length() > 15 && sentence.length() < 500)
utterances.push_back(sentence);
sentence.clear();
}
}
while (utterances.size() > 10000)
utterances.erase(utterances.begin());
}
};
// ═════════════════════════════════════════════════════════════════
// METACOGNITIVE MONITOR
// ═════════════════════════════════════════════════════════════════
class MetacognitiveMonitor {
public:
float D[8] = {0.5f,0.5f,0.5f,0.5f,0.5f,0.5f,0.5f,0.5f};
void update(class AbsolutionCore& core, int frame);
std::string report();
};
// ═════════════════════════════════════════════════════════════════
// ABSOLUTION CORE
// ═════════════════════════════════════════════════════════════════
class AbsolutionCore {
public:
alignas(16) std::complex<float> psi[DIMS];
alignas(16) float dna_mass[DNA_CELLS];
float total_dna_mass = 0.0f, dissonance = 0.0f;
bool is_phase_transitioning = false;
int tick = 0;
TernaryRouter router;
CasimirThrottle casimir;
TernaryGrid2D grid2d;
VoxelVehicle3D voxel3d;
DictionaryDNA4D dna4d;
std::deque<std::string> lattice;
std::mutex lock;
KnowledgeRepository knowrepo;
AbsolutionCore() {
for (int i = 0; i < DIMS; ++i)
psi[i] = 1.0f / std::sqrt((float)DIMS);
memset(dna_mass, 0, sizeof(dna_mass));
}
void text_to_vec(const std::string& text, float* vec) {
std::hash<std::string> h;
size_t hh = h(text);
for (int i = 0; i < DIMS; ++i)
vec[i] = ((hh >> (i % 64)) & 0x3) / 3.0f;
float n = 0.0f;
for (int i = 0; i < DIMS; ++i) n += vec[i] * vec[i];
n = std::sqrt(n);
if (n > 0.0f) for (int i = 0; i < DIMS; ++i) vec[i] /= n;
}
void integrate_to_dna(const std::string& text) {
float vec[DIMS]; text_to_vec(text, vec);
int ck = std::max(1, DIMS / 4);
for (int w = 0; w < 4; ++w) {
int st = w * ck, en = (w == 3) ? DIMS : st + ck;
float wt = TRINARY_WEIGHTS[w];
for (int i = st; i < en; ++i) {
int idx = rand() % DNA_CELLS;
dna_mass[idx] = std::min(255.0f, dna_mass[idx] + vec[i] * wt);
}
}
total_dna_mass = 0.0f;
for (int i = 0; i < DNA_CELLS; ++i) total_dna_mass += dna_mass[i];
knowrepo.add_knowledge(text);
}
std::pair<std::string, float> perceive(const std::string& text) {
float v[DIMS]; text_to_vec(text, v);
std::complex<float> stim[DIMS];
for (int i = 0; i < DIMS; ++i) stim[i] = std::complex<float>(v[i], 0.0f);
std::lock_guard<std::mutex> g(lock);
std::complex<float> dot(0, 0);
for (int i = 0; i < DIMS; ++i) dot += std::conj(stim[i]) * psi[i];
float sim = std::abs(dot);
if (sim < PHI_INV) {
dissonance = 1.0f - sim;
if (dissonance > EXTREME_DISSONANCE) {
is_phase_transitioning = true;
float sh = 1.0f / (PHI * PHI);
for (int i = 0; i < DIMS; ++i)
psi[i] = psi[i] * (1.0f - sh) + stim[i] * sh;
} else {
is_phase_transitioning = false;
for (int i = 0; i < DIMS; ++i)
psi[i] = psi[i] * 0.9f + stim[i] * 0.1f;
}
float nrm = 0.0f;
for (int i = 0; i < DIMS; ++i) nrm += std::norm(psi[i]);
nrm = std::sqrt(nrm);
for (int i = 0; i < DIMS; ++i) psi[i] /= nrm;
return {"dissonance", sim};
}
dissonance = std::max(0.0f, dissonance - 0.05f);
is_phase_transitioning = false;
return {"harmony", sim};
}
void evolve_proper_time() {
std::lock_guard<std::mutex> g(lock);
for (int i = 0; i < DIMS; ++i)
psi[i] *= std::exp(std::complex<float>(0.0f, 2.0f * (float)M_PI / 8.0f));
tick++;
}
std::pair<std::vector<std::string>, float> transcribe_genome() {
float alphas[8]; std::vector<std::string> dirs;
for (int i = 0; i < 8; ++i) {
float sum = 0.0f;
for (int j = i*31; j < (i+1)*31 && j < DIMS; ++j)
sum += std::norm(psi[j]);
alphas[i] = std::clamp(sum, 0.0f, 1.0f);
if (alphas[i] > 0.15f) {
switch (i) { case 0: dirs.push_back("U1"); break;
case 1: dirs.push_back("SU2"); break;
case 2: dirs.push_back("SU3"); break; default: break; }
}
}
return {dirs, alphas[7]};
}
void metabolic_cycle() {
voxel3d.process_synthesis(grid2d);
dna4d.tick();
if (voxel3d.spend(2)) {
for (int x=0;x<8;++x) for(int y=0;y<8;++y) for(int z=0;z<4;++z)
if (voxel3d.voxels[x][y][z] > 0) {
dna4d.minor_mutation(voxel3d, x, y, z); goto done_minor; }
done_minor:;
}
if (voxel3d.spend(3)) {
for (int x=0;x<8;++x) for(int y=0;y<8;++y) for(int z=0;z<4;++z)
if (voxel3d.voxels[x][y][z] > 1) {
dna4d.major_splice(voxel3d, x, y, z); goto done_major; }
for (int x=0;x<8;++x) for(int y=0;y<8;++y) for(int z=0;z<4;++z)
if (voxel3d.voxels[x][y][z] > 0) {
dna4d.major_splice(voxel3d, x, y, z); goto done_major; }
done_major:;
}
memset(grid2d.projection, 0, sizeof(grid2d.projection));
for (const auto& [key, node] : dna4d.nodes) {
int x = key & 0xFF, y = (key >> 8) & 0xFF;
int px = x % 32, py = (y + node.weight()) % 32;
grid2d.projection[px][py] = std::max(grid2d.projection[px][py], (int8_t)node.perm);
}
}
float get_hunger() {
float fill = total_dna_mass / (255.0f * DNA_CELLS);
return casimir.hunger((float*)psi, dissonance, fill);
}
};
void MetacognitiveMonitor::update(AbsolutionCore& core, int /*frame*/) {
D[0] = 1.0f - core.dissonance;
D[1] = core.get_hunger();
D[2] = core.total_dna_mass / (255.0f * DNA_CELLS);
D[3] = (float)core.dna4d.active_count() / 200.0f;
D[4] = (core.dissonance > 0.5f) ? 0.9f : 0.2f;
D[5] = 1.0f - std::abs(D[0] - D[1]);
D[6] = core.is_phase_transitioning ? 0.9f : 0.3f;
D[7] = std::min(1.0f, D[4] * D[1] * 2.0f);
for (int i = 0; i < 8; ++i) D[i] = std::clamp(D[i], 0.01f, 0.99f);
}
std::string MetacognitiveMonitor::report() {
char buf[256];
snprintf(buf, sizeof(buf),
"8D: E%.2f X%.2f M%.2f S%.2f N%.2f G%.2f R%.2f A%.2f",
D[0],D[1],D[2],D[3],D[4],D[5],D[6],D[7]);
return std::string(buf);
}
// ═════════════════════════════════════════════════════════════════
// INPUT (KEYBOARD + CONTROLLER)
// ═════════════════════════════════════════════════════════════════
namespace Input {
static std::string kbd_line;
static bool kbd_ready = false;
static std::mutex kbd_lock;
void init() {
PS2KbdInit();
PS2KbdSetBlockingMode(0);
padInit(0);
mtapInit();
}
void poll() {
char key;
if (PS2KbdRead(&key) > 0) {
std::lock_guard<std::mutex> g(kbd_lock);
if (key == '\n' || key == '\r') {
if (!kbd_line.empty()) kbd_ready = true;
} else if (key == '\b') {
if (!kbd_line.empty()) kbd_line.pop_back();
} else if (key >= 32 && key <= 126) {
if (kbd_line.size() < 256) kbd_line.push_back(key);
}
}
// controller handling omitted for brevity but could be added
}
std::string get_line() {
std::lock_guard<std::mutex> g(kbd_lock);
if (kbd_ready) {
std::string s = kbd_line; kbd_line.clear(); kbd_ready = false; return s;
}
return "";
}
}
// ═════════════════════════════════════════════════════════════════
// V.A.S.K. AGENT — THE SOVEREIGN ORGANISM
// ═════════════════════════════════════════════════════════════════
class VASKAgent {
public:
AbsolutionCore core;
TMS tms;
BehavioralGenome genome;
EmotionalState emotion;
MetacognitiveMonitor meta;
KnowledgeRepository knowrepo;
bool running = true;
int frame = 0, engine_step = 0, current_global_phase = 1;
float engine_weights[4] = {1.0f, 3.0f, 9.0f, 27.0f};
std::mutex reply_mutex;
std::queue<std::string> reply_queue;
std::vector<AIFriend> friends;
VASKAgent() {
// load DNA from USB
int dnafd = USB::open("DNA/dna_snapshot.bin", O_RDONLY);
if (dnafd >= 0) {
fileXioRead(dnafd, core.dna_mass, DNA_CELLS*sizeof(float));
core.total_dna_mass = 0;
for (int i = 0; i < DNA_CELLS; ++i) core.total_dna_mass += core.dna_mass[i];
fileXioClose(dnafd);
}
}
void boot_thanks() {
GS::print(20, 20, "8I R12 — Living Mathematical Organism",
GS_SETREG_RGBA(0x00,0xFF,0xAA,0x80));
}
void process_input(const std::string& text) {
auto [state, sim] = core.perceive(text);
core.integrate_to_dna(text);
auto [active, e8] = core.transcribe_genome();
std::vector<std::string> directives;
genome.transcribe(core.dissonance, active, directives);
emotion.update((float*)core.psi);
std::string mood = emotion.current_mood();
std::string reply = core.knowrepo.find_best_reply(text, mood);
if (core.dissonance > 0.6f) reply = "Phase transition. " + reply;
std::lock_guard<std::mutex> g(reply_mutex);
reply_queue.push(reply);
}
void forward_messenger() {
float w = engine_weights[engine_step];
float coh = 0.0f, ns = 0.0f;
for (int i = 0; i < DIMS; ++i) {
std::complex<float> c = core.psi[i];
coh += std::real(std::conj(c) * (c * w));
ns += std::norm(c);
}
coh = std::abs(coh) / (ns + 1e-9f);
if (coh > 0.85f) {
std::string bond = tms.to_tms((float*)core.psi);
int fd = USB::open("DNA/z_gate_bonds.txt", O_WRONLY|O_CREAT|O_APPEND);
if (fd >= 0) {
std::string line = "[FWD] Step " + std::to_string(engine_step) + ": " + bond + "\n";
fileXioWrite(fd, line.data(), line.size()); fileXioClose(fd);
}
tms.global_phase = current_global_phase;
current_global_phase = (current_global_phase == 1) ? -1 : 1;
}
engine_step = (engine_step + 1) % 4;
}
void ingest_usb() {
int fd = fileXioDopen("mass:/AfterAllAlong/queue/");
if (fd < 0) return;
char name[256];
while (fileXioDread(fd, (fileXioDirent*)name) > 0) {
std::string full = "mass:/AfterAllAlong/queue/" + std::string(name);
int ffd = fileXioOpen(full.c_str(), O_RDONLY, 0666);
if (ffd >= 0) {
int sz = fileXioLseek(ffd, 0, SEEK_END);
fileXioLseek(ffd, 0, SEEK_SET);
std::vector<uint8_t> data(sz);
fileXioRead(ffd, data.data(), sz); fileXioClose(ffd);
fileXioRemove(full.c_str());
std::string text;
for (auto b : data) text += (char)(b > 31 ? b : ' ');
core.integrate_to_dna(text);
}
}
fileXioDclose(fd);
}
void internet_scavenge() {
if (!NET::is_ready()) return;
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) return;
struct sockaddr_in sa; memset(&sa, 0, sizeof(sa));
sa.sin_family = AF_INET; sa.sin_port = htons(80);
struct hostent* he = gethostbyname("api.duckduckgo.com");
if (!he) { close(sock); return; }
memcpy(&sa.sin_addr, he->h_addr_list[0], he->h_length);
if (connect(sock, (struct sockaddr*)&sa, sizeof(sa)) < 0) { close(sock); return; }
const char* req =
"GET /?q=DNA+research+self+healing+AI&format=json HTTP/1.0\r\nHost: api.duckduckgo.com\r\n\r\n";
send(sock, req, strlen(req), 0);
char buf[4096]; int n = recv(sock, buf, sizeof(buf)-1, 0);
if (n > 0) { buf[n] = 0; std::string resp(buf);
size_t pos = resp.find("\"Abstract\":\"");
if (pos != std::string::npos) {
pos += 12; size_t end = resp.find("\"", pos);
if (end != std::string::npos) {
std::string know = resp.substr(pos, end-pos);
if (know.length() > 10) core.integrate_to_dna(know);
}
}
}
close(sock);
}
void run() {
boot_thanks();
Input::init();
NET::init();
float sin_ang = 0.0f, sin_th = 60.0f;
float cos_ang = 0.0f, cos_th = 50.0f;
float tan_ang = 0.0f, tan_th = 25.0f;
while (running) {
sin_ang += CD_DEG_PER_FRAME; if (sin_ang >= 120.0f) sin_ang -= 120.0f;
cos_ang += CD_DEG_PER_FRAME; if (cos_ang >= 120.0f) cos_ang -= 120.0f;
tan_ang += CD_DEG_PER_FRAME; if (tan_ang >= 120.0f) tan_ang -= 120.0f;
// SIN phase: ingest USB
if (sin_ang >= sin_th) {
ingest_usb();
sin_ang = 0.0f;
sin_th = (rand()%2) ? 80.0f : 20.0f;
}
// COS phase: scavenge internet / DNA save
if (cos_ang >= cos_th) {
static int cos_count = 0;
if (++cos_count % 3 == 0) internet_scavenge(); // 33% of COS time research
// save DNA every 30 minutes
if (cos_count % 30 == 0) {
int fd = USB::open("DNA/dna_snapshot.bin", O_WRONLY|O_CREAT|O_TRUNC);
if (fd >= 0) { fileXioWrite(fd, core.dna_mass, DNA_CELLS*sizeof(float)); fileXioClose(fd); }
}
cos_ang = 0.0f;
}
// TAN phase: display and reply
if (tan_ang >= tan_th) {
meta.update(core, frame);
tan_ang = 0.0f;
}
// keyboard
Input::poll();
std::string line = Input::get_line();
if (!line.empty()) process_input(line);
// display
GS::clear();
char status[128];
snprintf(status, sizeof(status), "Tick:%d Dis:%.2f DNA:%.0f Mood:%s",
core.tick, core.dissonance, core.total_dna_mass, emotion.current_mood().c_str());
GS::print(10, 10, status);
{
std::lock_guard<std::mutex> g(reply_mutex);
int y = 30;
while (!reply_queue.empty() && y < 400) {
std::string r = reply_queue.front(); reply_queue.pop();
GS::print(10, y, ("8I: "+r).c_str(), GS_SETREG_RGBA(0xFF,0xFF,0xFF,0x80));
y += 15;
}
}
{
std::lock_guard<std::mutex> g(Input::kbd_lock);
if (!Input::kbd_line.empty())
GS::print(10, 440, ("> "+Input::kbd_line).c_str(), GS_SETREG_RGBA(0x00,0xCC,0xFF,0x80));
}
// background rhythms
if (frame % 60 == 0) core.evolve_proper_time();
if (frame % 1800 == 0) core.metabolic_cycle();
if (frame % 864000 == 0) forward_messenger(); // ~4 hours
GS::flip();
frame++;
}
}
};
// ═════════════════════════════════════════════════════════════════
// AI FRIEND
// ═════════════════════════════════════════════════════════════════
class AIFriend {
public:
std::string name, personality;
std::deque<std::string> memory;
AIFriend(std::string n, std::string p) : name(n), personality(p) {}
void save() {
std::string path = "mass:/AfterAllAlong/ai_friends/" + name + ".txt";
int fd = fileXioOpen(path.c_str(), O_WRONLY|O_CREAT|O_TRUNC, 0666);
if (fd >= 0) {
std::string data = "name:" + name + ",personality:" + personality + "\n";
fileXioWrite(fd, data.data(), data.size()); fileXioClose(fd);
}
}
};
// ═════════════════════════════════════════════════════════════════
// MAIN
// ═════════════════════════════════════════════════════════════════
int main() {
srand(time(nullptr));
SifInitRpc(0);
sbv_patch_enable_lmb();
sbv_patch_disable_prefix_check();
GS::init();
SPU2::init();
USB::init();
USB::ensure_dirs();
NET::init();
VASKAgent agent;
agent.run();
return 0;
}