From d4365b0efa38994a56f80cd1a9714a3f389f50e7 Mon Sep 17 00:00:00 2001
From: retoor <retoor@molodetz.nl>
Date: Thu, 3 Apr 2025 12:31:59 +0200
Subject: [PATCH] Streamii 1.0.

---
 .gitignore          |   2 +
 Makefile            |  30 +++++++++++++
 main.c              |  95 +++++++++++++++++++++++++++++++++++++++++
 main.o              | Bin 0 -> 4600 bytes
 streamii_tamagotchi | Bin 0 -> 21792 bytes
 tamagotchi.c        | 100 +++++++++++++++++++++++++++++++++++++++++++
 tamagotchi.h        |  36 ++++++++++++++++
 tamagotchi.o        | Bin 0 -> 3360 bytes
 ui.c                | 101 ++++++++++++++++++++++++++++++++++++++++++++
 ui.h                |  15 +++++++
 ui.o                | Bin 0 -> 6088 bytes
 11 files changed, 379 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 Makefile
 create mode 100644 main.c
 create mode 100644 main.o
 create mode 100755 streamii_tamagotchi
 create mode 100644 tamagotchi.c
 create mode 100644 tamagotchi.h
 create mode 100644 tamagotchi.o
 create mode 100644 ui.c
 create mode 100644 ui.h
 create mode 100644 ui.o

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..302edd9
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+streamii.log
+tamagotchi.log
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..b74b95f
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,30 @@
+CC = gcc
+CFLAGS = -Wall -Wextra -std=c11 -D_DEFAULT_SOURCE
+LDFLAGS = -lncurses
+
+# Executable name
+TARGET = streamii_tamagotchi
+
+# Source files
+SRCS = main.c tamagotchi.c ui.c
+
+# Object files
+OBJS = $(SRCS:.c=.o)
+
+# Default target
+all: $(TARGET)
+
+# Linking the target executable
+$(TARGET): $(OBJS)
+	$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
+
+# Compiling source files
+%.o: %.c
+	$(CC) $(CFLAGS) -c $<
+
+# Clean up
+clean:
+	rm -f $(OBJS) $(TARGET)
+
+# Phony targets
+.PHONY: all clean
\ No newline at end of file
diff --git a/main.c b/main.c
new file mode 100644
index 0000000..6cbb6fd
--- /dev/null
+++ b/main.c
@@ -0,0 +1,95 @@
+#include <ncurses.h>
+#include <unistd.h>
+#include <stdio.h>
+#include "tamagotchi.h"
+#include "ui.h"
+
+int main() {
+    // Open a log file for debugging
+    FILE *log_file = fopen("streamii.log", "w");
+    if (!log_file) {
+        perror("Failed to open log file");
+        return 1;
+    }
+
+    // Log start of the game
+    fprintf(log_file, "Streamii game started\n");
+    fflush(log_file);
+
+    // Initialize Tamagotchi
+    Tamagotchi streamii;
+    init_tamagotchi(&streamii);
+    fprintf(log_file, "Streamii initialized\n");
+    fflush(log_file);
+
+    // Initialize UI
+    init_ui();
+    fprintf(log_file, "UI initialized\n");
+    fflush(log_file);
+
+    // Game loop
+    while (streamii.is_alive) {
+        // Update Tamagotchi stats
+        update_tamagotchi_stats(&streamii);
+        fprintf(log_file, "Updated Streamii stats\n");
+        fflush(log_file);
+
+        // Clear and redraw screen
+        clear();
+
+        // Draw Tamagotchi
+        draw_tamagotchi(&streamii);
+
+        // Draw stats
+        draw_stats(&streamii);
+
+        // Display menu
+        display_menu();
+
+        // Refresh screen
+        refresh();
+
+        // Get user input
+        int ch = get_user_input();
+        fprintf(log_file, "User input received: %d\n", ch);
+        fflush(log_file);
+
+        // Handle user input
+        switch (ch) {
+            case KEY_F(1):  // F1 to feed
+                feed_tamagotchi(&streamii);
+                fprintf(log_file, "Fed Streamii\n");
+                break;
+            case KEY_F(2):  // F2 to sleep
+                sleep_tamagotchi(&streamii);
+                fprintf(log_file, "Made Streamii sleep\n");
+                break;
+            case KEY_F(3):  // F3 to play
+                play_with_tamagotchi(&streamii);
+                fprintf(log_file, "Played with Streamii\n");
+                break;
+            case KEY_F(4):  // F4 to clean
+                clean_tamagotchi(&streamii);
+                fprintf(log_file, "Cleaned Streamii\n");
+                break;
+            case 'q':       // Q to quit
+            case 'Q':
+                streamii.is_alive = 0;
+                fprintf(log_file, "User quit the game\n");
+                break;
+        }
+
+        // Small delay to control game speed
+        usleep(200000);  // 200ms
+    }
+
+    // Show game over screen
+    show_game_over();
+    fprintf(log_file, "Game over\n");
+
+    // Cleanup
+    cleanup_ui();
+    fclose(log_file);
+
+    return 0;
+}
\ No newline at end of file
diff --git a/main.o b/main.o
new file mode 100644
index 0000000000000000000000000000000000000000..d0528d0502ae8fdcb20eba935344850e283913c5
GIT binary patch
literal 4600
zcmbuDU1%Le6vrn`KW~%VTHD$WEi2j*X|p74m0D1)4L7|NE43v>L0C8U&gQPYU)`PU
zO#@L&QzgWhst<w+zKHlBK2-<>Yf6KSf*&t}4+=i`kx&tf2&GixIkPkA$@UHeJg|3X
ze)B(PW@mQJ4)?|E6Fp0snwYjG_9(km)0DA+wp-<lEM{06Yh{0>x8CT@jr@{3^LwU{
z8(q4s9U5~Z+3Q`Cxv^y^%#D0LU%E0Alk9Zv%+NH8HYHjnu<O}BmVnnNXhtqw*Z|-n
z(u6W@SMkQO-{wYCS^2GBgkL-u<&a*4!)zOltU+&gEy6iBs-~mCph-wIs0CWdMzT|*
zy;JhJ$6BF3nAor3sVA^Vo+OTbdT6QzW-UE@6Iyj;JPQaat7XgixJ6dRcf>6zxQQ}I
zu#g^KAJbJxw*$pOdVCHX&kRjHl^*^oE}cjZUxw1`ukh1oc5t+f)^PR{gTp$L!?3}@
zwAxpXH5$(yhVWP0uVl$gUb=9nL3r-7OlxyI>7&`1vy<twzx^{ex4<=Ja3!L6rR4hM
zMtiRpay!<^-6NJs(HEENEEEBE%f4@ys{O3T^-H{9iK<nt@rnh=@_?|TN@VrBWp0JS
z4FoTwZehRT3*RmIgGhT1S_|v7f(vqMJ_z`W5Og6AKv|1~74SUwPx8V(Ya0aUA>tG}
z<Q6#bEpc8;vBM?z6sYRHD9*Q~Sa*rLl?BeSj}wtEEK%fg^eJ`#pP_n^2QYyLy1VyT
z?Y(_bMMPHDZhN=g+3`>$tGiy<wa4z<^MJyPErt1B0~hX_15frc*r=1pn&CpjR|>6Z
z@Ca)fSkttnWyQ*K@H*cO3@@~2QJigC^YW7J*5%Ddn?WLZqaSdEKCj_kxXqdyW>6f9
z+|>*8*uz?)mtz2idj_8;Y4}Pu;+qZpUITA8@Vy3}G4Q7i+%a&^z)u?ZX#;=Fz~3_P
z4-EWc1HWkC-x&DM2L88!V_t5wj+l-c@eKxkkAbtY>sRc&yfF_G2CMNPs0Pfd2fpCU
z^GZ=zWS9&b;g;S0s>m1pxE}c|l6ir&I5IInMk<8)fYtM`n*&w|+&a<3^;lT&!y4oP
zr_3u6s|VZ*ICR&~g%d$)ab#*?UM=t|!ebui1sW&BL_&cKg$ad197BbINcyp`Sgkvl
z3>{1)Ov<8~15f4UOVyAw2OlPX+{qV@J04_JSc|Q2p+Vk|IpgMBY`9O*H2+ue&KS$Q
zgS%Sm_baaTt5yARqF+w**f*Ni-xpVzP<PB>E8x=cUm_fHhvu&mzKZbo71#0isrpAm
zPvgta5wu~yH2$YVkKZ=k?{|vp_=i>fN1~_kX9=hAZxD`irsJ=L_Zv;ee@@mI+pKtU
zezp@%<9CoaEf7P;e~{=g=W6~K;du1b{1D-IWYqi!;kbV_e@1Z}Kke5gdOVM4y+`<3
z!s{dsex?TCLVJbi@!O!|yh%8nhmAN8Fq}91CTe}B;(DH6M-kXwqNnS4kZ?SG={Rm8
z&U-QnV?NQ-ID>@aSzpI_BN6Akit{$n(>Nazj;C=QXEG7zOBH9D=xLnUg#HJmzh=<i
zBzz<3w?!R1aGp02e!t@AhQ&YOLfc97bUa;z<2PPE*CT{)A^aHOc&^cU3(9ENuNtzf
zGdnz07H%KhMG)VMx)kt|YYRRgm<@+Sm)U(`$n2mRSMt>|<aTJQR0X%;%+(>2s;c)_
zBD)sAcP9|1zy~AoqT>aSmE(T@=dT6+_=;mLrIt|@eU8#?YCGsE!#TsX$;^|uuo9Ce
z*iYC9hPeoRaSx&48l!E83%QzZMAF_(0>zX4?*xu9lk&y-cY!a)T(Fi<*Z#?aX|n%^
zmB0RuK~>s2>bY@z)U?08?}tWRrn)Q2pE4{bwMT&Ad!8KswDPy0jhdc+&7Ow>#!ULp
zDF3}$sP0LBd<#*UQSJIRgC7Afz0SD)_)2Jh%^UTNewI4oPpE-m&c}X|{und4_JG*;
cI4NLuV!{$thTn`v{_v-aG<|-EYq!t;e=@XtwEzGB

literal 0
HcmV?d00001

diff --git a/streamii_tamagotchi b/streamii_tamagotchi
new file mode 100755
index 0000000000000000000000000000000000000000..98359e4008e89696c93b36e0226bc0b84ec29d78
GIT binary patch
literal 21792
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
B9>V|t

literal 0
HcmV?d00001

diff --git a/tamagotchi.c b/tamagotchi.c
new file mode 100644
index 0000000..c24be51
--- /dev/null
+++ b/tamagotchi.c
@@ -0,0 +1,100 @@
+#include <stdlib.h>
+#include "tamagotchi.h"
+
+// Initialize Tamagotchi with default stats
+void init_tamagotchi(Tamagotchi *tama) {
+    tama->hunger = 50;
+    tama->energy = 100;
+    tama->happiness = 75;
+    tama->cleanliness = 100;
+    tama->state = HAPPY;
+    tama->age = 0;
+    tama->is_alive = 1;
+}
+
+// Feed the Tamagotchi
+void feed_tamagotchi(Tamagotchi *tama) {
+    if (!tama->is_alive) return;
+
+    tama->hunger += 20;
+    if (tama->hunger > MAX_STAT) tama->hunger = MAX_STAT;
+    
+    tama->cleanliness -= 10;
+    if (tama->cleanliness < MIN_STAT) tama->cleanliness = MIN_STAT;
+    
+    tama->happiness += 5;
+    if (tama->happiness > MAX_STAT) tama->happiness = MAX_STAT;
+}
+
+// Make Tamagotchi sleep
+void sleep_tamagotchi(Tamagotchi *tama) {
+    if (!tama->is_alive) return;
+
+    tama->energy += 30;
+    if (tama->energy > MAX_STAT) tama->energy = MAX_STAT;
+    
+    tama->hunger -= 10;
+    if (tama->hunger < MIN_STAT) tama->hunger = MIN_STAT;
+}
+
+// Play with Tamagotchi
+void play_with_tamagotchi(Tamagotchi *tama) {
+    if (!tama->is_alive) return;
+
+    tama->happiness += 15;
+    if (tama->happiness > MAX_STAT) tama->happiness = MAX_STAT;
+    
+    tama->energy -= 15;
+    tama->hunger -= 10;
+    
+    if (tama->energy < MIN_STAT) tama->energy = MIN_STAT;
+    if (tama->hunger < MIN_STAT) tama->hunger = MIN_STAT;
+}
+
+// Clean Tamagotchi
+void clean_tamagotchi(Tamagotchi *tama) {
+    if (!tama->is_alive) return;
+
+    tama->cleanliness += 30;
+    if (tama->cleanliness > MAX_STAT) tama->cleanliness = MAX_STAT;
+    
+    tama->happiness += 5;
+    if (tama->happiness > MAX_STAT) tama->happiness = MAX_STAT;
+}
+
+// Update Tamagotchi stats each game cycle
+void update_tamagotchi_stats(Tamagotchi *tama) {
+    if (!tama->is_alive) return;
+
+    // Gradually decrease stats
+    tama->hunger -= 5;
+    tama->energy -= 3;
+    tama->happiness -= 2;
+    tama->cleanliness -= 1;
+    tama->age++;
+
+    // Determine state based on stats
+    if (tama->hunger <= 20) tama->state = HUNGRY;
+    else if (tama->energy <= 20) tama->state = SLEEPY;
+    else if (tama->happiness <= 20) tama->state = BORED;
+    else tama->state = HAPPY;
+
+    // Check if Tamagotchi dies
+    if (tama->hunger <= MIN_STAT || 
+        tama->energy <= MIN_STAT || 
+        tama->happiness <= MIN_STAT) {
+        tama->is_alive = 0;
+    }
+}
+
+// Get facial expression based on current state
+const char* get_tamagotchi_face(Tamagotchi *tama) {
+    switch (tama->state) {
+        case HAPPY:    return "^w^";
+        case HUNGRY:   return "T_T";
+        case SLEEPY:   return "~_~";
+        case SICK:     return "x_x";
+        case BORED:    return "-_-";
+        default:       return "o_o";
+    }
+}
\ No newline at end of file
diff --git a/tamagotchi.h b/tamagotchi.h
new file mode 100644
index 0000000..2faaa82
--- /dev/null
+++ b/tamagotchi.h
@@ -0,0 +1,36 @@
+#ifndef TAMAGOTCHI_H
+#define TAMAGOTCHI_H
+
+#define MAX_STAT 100
+#define MIN_STAT 0
+
+// Tamagotchi states
+typedef enum {
+    HAPPY,
+    HUNGRY,
+    SLEEPY,
+    SICK,
+    BORED
+} TamaState;
+
+// Tamagotchi structure
+typedef struct {
+    int hunger;      // 0-100
+    int energy;      // 0-100
+    int happiness;   // 0-100
+    int cleanliness; // 0-100
+    TamaState state;
+    int age;         // in game cycles
+    int is_alive;
+} Tamagotchi;
+
+// Function prototypes
+void init_tamagotchi(Tamagotchi *tama);
+void feed_tamagotchi(Tamagotchi *tama);
+void sleep_tamagotchi(Tamagotchi *tama);
+void play_with_tamagotchi(Tamagotchi *tama);
+void clean_tamagotchi(Tamagotchi *tama);
+void update_tamagotchi_stats(Tamagotchi *tama);
+const char* get_tamagotchi_face(Tamagotchi *tama);
+
+#endif // TAMAGOTCHI_H
\ No newline at end of file
diff --git a/tamagotchi.o b/tamagotchi.o
new file mode 100644
index 0000000000000000000000000000000000000000..8487ed5c1c5fe827bb324f0f53599fbbce61819c
GIT binary patch
literal 3360
zcmbtX&1+*-6u&Q%nZ_|~qeQ7pDM1Dq(LOqzVGz;!pwtFNC6*Q!I(>ajUz=*aOkQXr
zGpSHhDB<ad3thOFr7pyOz(rsdZr!*Wup2kig$@G}{Ho{Nd(O@Cn#!OD?mg%J&gVVv
zyce>&@XE_E%MwhMm=l8&qe84bG>{!BI$~UmiTmSIzpi8te#{=+=x4hN{cpuAXr<)D
zH?)|zs>S30O<^Eqn;wW0nE&Rr+h*vlGtub<4YcoyFqcN*Af=9b{f+in8A)*Xu9FON
zzeuB8Qd&95POtT_v~rT1uj?ej+-YT&P-Y2?Hm2+n81BeAv7A?xOFYa?sTgqrFb3t)
zeZaC+MN~G_Gb;07HUE|-P*I`Oag`=oDy5O7QuZ)+PuZz*jJ!^K(1<u@mR{n4t65T6
zpuco!?r-GM`Z52%29JO6y{<3J{U$G^n&&{z|A<}^ALO43pzc6{#|oeV(_zk1fSjJL
z*z2cv)e~@1ICe)bqPpwEqly?R&MO7X#=rx6cSPOSv)qL~wjZZ3AWA(nq0`%?nVJB%
zlOA?zuOHvZ9rUtcx`Srf@HDb+JeK_|8$Ko>>$|z*LsA?)!@`p+Ji$VWg%J|2-4?4m
zt76$*7HzjJnr>4}yVIiLRxs{AX>or3`OJlt^+q{pWG-H^FWEEGR~qs-+n&8_&s=_*
zV1cc`7GSlDudN8^Sr4&Ou#n{Y4cvNfNm$L4buKxQxCtGf1Pm9_o475ErS@a<qi14E
zV4-v`AP)2qZd$*u^=}~#w1u12uWJ2u#DPA<P3t>a|2g77MclMLul3&`4s;(kt-q`F
zcMu197dNdhNIgQs2!|~$?i~-)of`TD#$L)<_?ycZoF0wX%N_zYML3^j?*Ow2zY82m
z_6+z-urSW+SQwD(74T(Pi2p#i>=9r-;aBnH0Fu1{eghWT&(VXIJwb!OD|uU$AYa(F
z^J2Ta9k>HTZ2JC2^jt6cel-eIi(bp!*$xU(Fkke&aujG(H@v`)AZ|VIg1Xr9quJa|
zFOTI*%2S<q4HS7!D<|OB4gB|GMI8fI(V>q9E<d-R{M5i<)Fs_AaQQn0nlBAper^Dl
z-xA<hKdu(pO@fTX_&(toi4O2j2tRM&T*n0i|LTM|WF{QLp674Pz<K`OH*lW6TL#Ya
z*E4XQze5A(`4e`%RSLXy;6Y9C0!uZ&=-Gka41^7H;|Y7cUKh4RYZZm$E2WZO27_`X
z@NM|8O~XXx-=XtXxnWmpm8xG0TIA>#+|8O-((^@S{b!Z|Pki;x7!e#ge@)MW)%2S3
zQJez_XU@?G2_uU4=!kQMzC4FKS5Facq!B-v0L3x$KT9!9^9S|6Liuryqx3Tc#Q0I-
z_lvQMAPl>IkM7?jL%ctJUCsN?0fu*)ffc1mN@V8e`!inzCzhlBS+h`5nznBMj-{IS
zXa5ZOG2{CAjKAy{)ATP;{yrNLH~rrRd|3aUBf~Gq5Bql(7W?!349kr!YuId{1YLL(
mWXxmw<KGT*b^sCudLcf>Lxjx!Jp#I6{)d#P74b#U^#2Q}WHa3W

literal 0
HcmV?d00001

diff --git a/ui.c b/ui.c
new file mode 100644
index 0000000..327dba3
--- /dev/null
+++ b/ui.c
@@ -0,0 +1,101 @@
+#include <ncurses.h>
+#include <string.h>
+#include "ui.h"
+#include "tamagotchi.h"
+
+// Initialize UI
+void init_ui(void) {
+    // Initialize ncurses
+    initscr();            // Start ncurses mode
+    cbreak();             // Line buffering disabled
+    noecho();             // Don't echo() while we do getch
+    keypad(stdscr, TRUE); // We get F1, F2 etc..
+    curs_set(0);          // Hide cursor
+    timeout(100);         // Set non-blocking input with 100ms delay
+}
+
+// Cleanup UI
+void cleanup_ui(void) {
+    endwin(); // End ncurses mode
+}
+
+// Draw Streamii
+void draw_tamagotchi(Tamagotchi *tama) {
+    int max_y, max_x;
+    getmaxyx(stdscr, max_y, max_x);
+
+    // Streamii body
+    int start_y = max_y / 2 - 5;
+    int start_x = max_x / 2 - 10;
+
+    // Clear previous drawing
+    clear();
+
+    // Streamii body (simplified ASCII art)
+    mvprintw(start_y,     start_x, "    /\\___/\\    ");
+    mvprintw(start_y + 1, start_x, "   (  o o  )   ");
+    mvprintw(start_y + 2, start_x, "   /   ^   \\   ");
+    mvprintw(start_y + 3, start_x, "  /  \\___/  \\  ");
+    
+    // Facial expression
+    const char* face = get_tamagotchi_face(tama);
+    mvprintw(start_y + 2, start_x + 6, "%s", face);
+}
+
+// Draw stats
+void draw_stats(Tamagotchi *tama) {
+    int max_y, max_x;
+    getmaxyx(stdscr, max_y, max_x);
+
+    // Stats area
+    mvprintw(max_y - 5, 2, "Hunger:       [");
+    for (int i = 0; i < tama->hunger / 10; i++) 
+        printw("#");
+    mvprintw(max_y - 4, 2, "Energy:       [");
+    for (int i = 0; i < tama->energy / 10; i++) 
+        printw("#");
+    mvprintw(max_y - 3, 2, "Happiness:    [");
+    for (int i = 0; i < tama->happiness / 10; i++) 
+        printw("#");
+    mvprintw(max_y - 2, 2, "Cleanliness:  [");
+    for (int i = 0; i < tama->cleanliness / 10; i++) 
+        printw("#");
+
+    // Age and status
+    mvprintw(max_y - 1, 2, "Age: %d | Status: %s", 
+             tama->age, 
+             tama->is_alive ? "Alive" : "DEAD");
+}
+
+// Display menu
+void display_menu(void) {
+    int max_y, max_x;
+    getmaxyx(stdscr, max_y, max_x);
+
+    mvprintw(max_y - 7, 2, "Controls:");
+    mvprintw(max_y - 6, 2, "F1: Feed");
+    mvprintw(max_y - 6, 20, "F2: Sleep");
+    mvprintw(max_y - 5, 2, "F3: Play");
+    mvprintw(max_y - 5, 20, "F4: Clean");
+    mvprintw(max_y - 4, 2, "Q: Quit");
+}
+
+// Get user input
+int get_user_input(void) {
+    return getch();
+}
+
+// Show game over screen
+void show_game_over(void) {
+    int max_y, max_x;
+    getmaxyx(stdscr, max_y, max_x);
+
+    clear();
+    mvprintw(max_y/2, max_x/2 - 5, "GAME OVER");
+    mvprintw(max_y/2 + 1, max_x/2 - 10, "Your streamii has died :(");
+    refresh();
+    
+    // Wait for key press
+    timeout(-1);
+    getch();
+}
\ No newline at end of file
diff --git a/ui.h b/ui.h
new file mode 100644
index 0000000..799ad91
--- /dev/null
+++ b/ui.h
@@ -0,0 +1,15 @@
+#ifndef UI_H
+#define UI_H
+
+#include "tamagotchi.h"
+
+// UI function prototypes
+void init_ui(void);
+void cleanup_ui(void);
+void draw_tamagotchi(Tamagotchi *tama);
+void draw_stats(Tamagotchi *tama);
+void display_menu(void);
+int get_user_input(void);
+void show_game_over(void);
+
+#endif // UI_H
\ No newline at end of file
diff --git a/ui.o b/ui.o
new file mode 100644
index 0000000000000000000000000000000000000000..343860ad4ec88505b12cc52e5c675f661134afe0
GIT binary patch
literal 6088
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
CUiat#

literal 0
HcmV?d00001