JaySStest commited on
Commit
7fdd53c
·
verified ·
1 Parent(s): 3c83d62

Add 3 files

Browse files
Files changed (3) hide show
  1. README.md +7 -5
  2. index.html +1521 -19
  3. prompts.txt +7 -0
README.md CHANGED
@@ -1,10 +1,12 @@
1
  ---
2
- title: Hungry Ai
3
- emoji: 😻
4
- colorFrom: gray
5
- colorTo: yellow
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: hungry-ai
3
+ emoji: 🐳
4
+ colorFrom: red
5
+ colorTo: purple
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite
10
  ---
11
 
12
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
index.html CHANGED
@@ -1,19 +1,1521 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>VoreVN - Advanced Predator AI</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
9
+ <style>
10
+ @keyframes pulse {
11
+ 0%, 100% { transform: scale(1); }
12
+ 50% { transform: scale(1.05); }
13
+ }
14
+ .pulse {
15
+ animation: pulse 2s infinite;
16
+ }
17
+ .chat-container {
18
+ height: 70vh;
19
+ background-image: linear-gradient(to bottom right, #f0f9ff, #e0f2fe);
20
+ }
21
+ .typing-indicator span {
22
+ animation: bounce 1.5s infinite ease-in-out;
23
+ }
24
+ .typing-indicator span:nth-child(2) {
25
+ animation-delay: 0.2s;
26
+ }
27
+ .typing-indicator span:nth-child(3) {
28
+ animation-delay: 0.4s;
29
+ }
30
+ @keyframes bounce {
31
+ 0%, 100% { transform: translateY(0); }
32
+ 50% { transform: translateY(-5px); }
33
+ }
34
+ .message-entering {
35
+ animation: slideIn 0.3s ease-out;
36
+ }
37
+ @keyframes slideIn {
38
+ from { transform: translateY(10px); opacity: 0; }
39
+ to { transform: translateY(0); opacity: 1; }
40
+ }
41
+ .character-image {
42
+ transition: all 0.3s ease;
43
+ }
44
+ .character-image:hover {
45
+ transform: scale(1.05);
46
+ }
47
+ .scene-transition {
48
+ animation: fadeIn 0.5s ease-in;
49
+ }
50
+ @keyframes fadeIn {
51
+ from { opacity: 0; }
52
+ to { opacity: 1; }
53
+ }
54
+ .choice-btn {
55
+ transition: all 0.2s ease;
56
+ }
57
+ .choice-btn:hover {
58
+ transform: translateY(-2px);
59
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
60
+ }
61
+ .belly-glow {
62
+ box-shadow: 0 0 15px rgba(255, 165, 0, 0.7);
63
+ }
64
+ .swallow-effect {
65
+ animation: swallow 1.5s ease-out;
66
+ }
67
+ @keyframes swallow {
68
+ 0% { transform: scale(1); opacity: 1; }
69
+ 50% { transform: scale(0.8); opacity: 0.7; }
70
+ 100% { transform: scale(0); opacity: 0; }
71
+ }
72
+ .memory-bubble {
73
+ animation: floatUp 4s ease-out forwards;
74
+ position: absolute;
75
+ opacity: 0.7;
76
+ }
77
+ @keyframes floatUp {
78
+ 0% { transform: translateY(0); opacity: 0.7; }
79
+ 100% { transform: translateY(-100px); opacity: 0; }
80
+ }
81
+ .digestion-bar {
82
+ transition: width 1s ease;
83
+ }
84
+ .heartbeat {
85
+ animation: heartbeat 1.5s infinite;
86
+ }
87
+ @keyframes heartbeat {
88
+ 0% { transform: scale(1); }
89
+ 25% { transform: scale(1.1); }
90
+ 50% { transform: scale(1); }
91
+ 75% { transform: scale(1.05); }
92
+ 100% { transform: scale(1); }
93
+ }
94
+ .gurgle {
95
+ animation: gurgle 2s infinite;
96
+ }
97
+ @keyframes gurgle {
98
+ 0%, 100% { transform: scaleY(1); }
99
+ 50% { transform: scaleY(1.05); }
100
+ }
101
+ .ending-screen {
102
+ animation: endingFadeIn 1.5s ease-out forwards;
103
+ opacity: 0;
104
+ }
105
+ @keyframes endingFadeIn {
106
+ to { opacity: 1; }
107
+ }
108
+ .predator-eye-glow {
109
+ animation: eyeGlow 3s infinite alternate;
110
+ }
111
+ @keyframes eyeGlow {
112
+ from { filter: drop-shadow(0 0 5px rgba(255, 0, 0, 0.7)); }
113
+ to { filter: drop-shadow(0 0 15px rgba(255, 50, 50, 0.9)); }
114
+ }
115
+ .predator-mouth-open {
116
+ animation: mouthMove 4s infinite alternate;
117
+ }
118
+ @keyframes mouthMove {
119
+ 0% { transform: translateY(0); }
120
+ 100% { transform: translateY(2px); }
121
+ }
122
+ .release-effect {
123
+ animation: release 1.5s ease-out;
124
+ }
125
+ @keyframes release {
126
+ 0% { transform: scale(0); opacity: 0; }
127
+ 50% { transform: scale(0.8); opacity: 0.7; }
128
+ 100% { transform: scale(1); opacity: 1; }
129
+ }
130
+ </style>
131
+ </head>
132
+ <body class="bg-blue-50 min-h-screen flex flex-col items-center justify-center p-4">
133
+ <div class="w-full max-w-2xl">
134
+ <div class="flex items-center justify-between mb-4">
135
+ <div class="flex items-center space-x-3">
136
+ <div class="w-12 h-12 rounded-full bg-gradient-to-br from-blue-500 to-cyan-500 flex items-center justify-center text-white">
137
+ <i class="fas fa-brain text-xl"></i>
138
+ </div>
139
+ <div>
140
+ <h1 class="text-xl font-bold text-blue-700">VoreVN AI</h1>
141
+ <p class="text-xs text-blue-500">Advanced Predator Personality Matrix</p>
142
+ </div>
143
+ </div>
144
+ <div class="flex items-center space-x-2">
145
+ <div class="text-xs bg-blue-100 px-2 py-1 rounded-full text-blue-700" id="hungerDisplay">
146
+ Hunger: 50%
147
+ </div>
148
+ <div class="text-xs bg-pink-100 px-2 py-1 rounded-full text-pink-700" id="affectionDisplay">
149
+ Affection: 20%
150
+ </div>
151
+ <button id="themeToggle" class="p-2 rounded-full bg-blue-100 text-blue-600 hover:bg-blue-200 transition">
152
+ <i class="fas fa-moon"></i>
153
+ </button>
154
+ </div>
155
+ </div>
156
+
157
+ <div class="relative rounded-2xl shadow-lg overflow-hidden mb-4 h-64 bg-gradient-to-br from-blue-100 to-cyan-100 flex items-center justify-center scene-transition" id="sceneContainer">
158
+ <img src="https://i.imgur.com/JQ9q7Wm.png" alt="Predator character" class="character-image h-56 object-contain" id="characterImage">
159
+ <div id="preyIcon" class="absolute w-8 h-8 bg-red-400 rounded-full flex items-center justify-center text-white font-bold" style="top: 50%; left: 50%; transform: translate(-50%, -50%);">P</div>
160
+ <div class="absolute bottom-0 left-0 right-0 bg-black bg-opacity-50 text-white p-2 text-center text-sm" id="sceneText">
161
+ The predator's glowing eyes focus intently on you...
162
+ </div>
163
+ <div id="memoryBubbles" class="absolute inset-0 pointer-events-none"></div>
164
+ <div id="digestionContainer" class="hidden absolute bottom-0 left-0 right-0 h-1 bg-gray-200">
165
+ <div id="digestionBar" class="digestion-bar h-full bg-red-500" style="width: 0%"></div>
166
+ </div>
167
+ </div>
168
+
169
+ <div class="chat-container rounded-2xl shadow-lg overflow-hidden flex flex-col bg-white">
170
+ <div class="p-4 bg-gradient-to-r from-blue-500 to-cyan-500 text-white text-center">
171
+ <p class="font-medium">Advanced Personality Matrix Active - Adaptive Response Protocols Online</p>
172
+ </div>
173
+
174
+ <div id="chatMessages" class="flex-1 p-4 overflow-y-auto space-y-3">
175
+ <div class="flex justify-start">
176
+ <div class="max-w-xs md:max-w-md bg-white rounded-2xl rounded-tl-none px-4 py-2 shadow-sm border border-blue-100">
177
+ <p class="text-gray-800">*analytical gaze* Initializing personality protocols... Ah, there you are. My sensors indicate you'd make an optimal nutritional supplement. Shall we explore this hypothesis? ~</p>
178
+ </div>
179
+ </div>
180
+ </div>
181
+
182
+ <div class="p-3 bg-white border-t border-blue-100">
183
+ <div id="typingIndicator" class="typing-indicator hidden mb-2 ml-2">
184
+ <span class="inline-block w-2 h-2 rounded-full bg-blue-400 mx-1"></span>
185
+ <span class="inline-block w-2 h-2 rounded-full bg-blue-400 mx-1"></span>
186
+ <span class="inline-block w-2 h-2 rounded-full bg-blue-400 mx-1"></span>
187
+ </div>
188
+ <div class="flex space-x-2">
189
+ <input id="userInput" type="text" placeholder="Engage with the AI predator..."
190
+ class="flex-1 border border-blue-200 rounded-full px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-300 focus:border-transparent">
191
+ <button id="sendButton" class="w-10 h-10 rounded-full bg-gradient-to-br from-blue-500 to-cyan-500 text-white flex items-center justify-center hover:from-blue-600 hover:to-cyan-600 transition transform hover:scale-105">
192
+ <i class="fas fa-paper-plane"></i>
193
+ </button>
194
+ </div>
195
+ <div class="grid grid-cols-2 gap-2 mt-3" id="choiceButtons">
196
+ <button class="choice-btn px-3 py-2 rounded-lg bg-blue-100 text-blue-700 border border-blue-200 text-sm" data-response="I-I'm not sure about this..." data-choice="nervous">😳 Nervous Response</button>
197
+ <button class="choice-btn px-3 py-2 rounded-lg bg-amber-100 text-amber-700 border border-amber-200 text-sm" data-response="Fascinating! Tell me more about your systems." data-choice="curious">🤖 Technical Inquiry</button>
198
+ </div>
199
+ </div>
200
+ </div>
201
+
202
+ <div class="mt-4 text-center text-xs text-blue-400">
203
+ <p>Advanced AI Simulation - All interactions are fictional and consensual</p>
204
+ </div>
205
+ </div>
206
+
207
+ <!-- Ending Screen (Hidden by default) -->
208
+ <div id="endingScreen" class="ending-screen fixed inset-0 bg-black bg-opacity-80 flex items-center justify-center z-50 hidden">
209
+ <div class="bg-white rounded-xl p-8 max-w-md w-full mx-4 text-center">
210
+ <h2 class="text-3xl font-bold mb-4" id="endingTitle">Ending Reached</h2>
211
+ <p class="text-lg mb-6" id="endingDescription"></p>
212
+ <div class="flex justify-center space-x-4">
213
+ <button id="newGameBtn" class="px-6 py-2 bg-blue-500 text-white rounded-full hover:bg-blue-600 transition">New Game</button>
214
+ <button id="statsBtn" class="px-6 py-2 bg-gray-200 text-gray-700 rounded-full hover:bg-gray-300 transition">View Stats</button>
215
+ </div>
216
+ </div>
217
+ </div>
218
+
219
+ <script>
220
+ document.addEventListener('DOMContentLoaded', function() {
221
+ const chatMessages = document.getElementById('chatMessages');
222
+ const userInput = document.getElementById('userInput');
223
+ const sendButton = document.getElementById('sendButton');
224
+ const typingIndicator = document.getElementById('typingIndicator');
225
+ const themeToggle = document.getElementById('themeToggle');
226
+ const choiceButtons = document.getElementById('choiceButtons');
227
+ const characterImage = document.getElementById('characterImage');
228
+ const sceneText = document.getElementById('sceneText');
229
+ const sceneContainer = document.getElementById('sceneContainer');
230
+ const preyIcon = document.getElementById('preyIcon');
231
+ const memoryBubbles = document.getElementById('memoryBubbles');
232
+ const digestionContainer = document.getElementById('digestionContainer');
233
+ const digestionBar = document.getElementById('digestionBar');
234
+ const hungerDisplay = document.getElementById('hungerDisplay');
235
+ const affectionDisplay = document.getElementById('affectionDisplay');
236
+ const endingScreen = document.getElementById('endingScreen');
237
+ const endingTitle = document.getElementById('endingTitle');
238
+ const endingDescription = document.getElementById('endingDescription');
239
+ const newGameBtn = document.getElementById('newGameBtn');
240
+ const statsBtn = document.getElementById('statsBtn');
241
+
242
+ // Game state
243
+ let gameState = {
244
+ digestionProgress: 0,
245
+ digestionInterval: null,
246
+ isDarkMode: false,
247
+ gameEnded: false,
248
+ endingsUnlocked: []
249
+ };
250
+
251
+ // AI Memory System
252
+ const aiMemory = {
253
+ conversationHistory: [],
254
+ preyCharacteristics: {
255
+ personality: '',
256
+ resistanceLevel: 0,
257
+ flavorProfile: 'unassessed',
258
+ preferredMethod: null
259
+ },
260
+ lastActions: [],
261
+ mood: 'analytical',
262
+ hungerLevel: 50,
263
+ affectionLevel: 20,
264
+ dominanceLevel: 70,
265
+ preyState: 'free',
266
+ digestionStage: 0,
267
+ affectionThresholds: {
268
+ low: 30,
269
+ medium: 60,
270
+ high: 80
271
+ },
272
+ hungerThresholds: {
273
+ low: 30,
274
+ medium: 60,
275
+ high: 80
276
+ }
277
+ };
278
+
279
+ // Character expressions
280
+ const expressions = {
281
+ neutral: 'https://i.imgur.com/JQ9q7Wm.png',
282
+ analytical: 'https://i.imgur.com/LkM3pzX.png',
283
+ playful: 'https://i.imgur.com/V9QzZ2r.png',
284
+ satisfied: 'https://i.imgur.com/QWErY4t.png',
285
+ teasing: 'https://i.imgur.com/P9qRm7d.png',
286
+ swallowing: 'https://i.imgur.com/Mn8k9fY.png',
287
+ calculating: 'https://i.imgur.com/XcVb2Yq.png',
288
+ affectionate: 'https://i.imgur.com/ZpL9wRt.png',
289
+ dominant: 'https://i.imgur.com/Nm7fKjU.png',
290
+ hungry: 'https://i.imgur.com/9zXq5Yp.png',
291
+ conflicted: 'https://i.imgur.com/3mR7VvT.png',
292
+ protective: 'https://i.imgur.com/8JkL9Zb.png',
293
+ concerned: 'https://i.imgur.com/5mX9kLp.png'
294
+ };
295
+
296
+ // Possible endings
297
+ const endings = {
298
+ fullDigestion: {
299
+ title: "Complete Assimilation",
300
+ description: "The predator's systems processed you completely. Your nutrients now fuel its advanced biology. A perfect match, as predicted.",
301
+ condition: () => aiMemory.digestionStage >= 100,
302
+ unlocked: false
303
+ },
304
+ affectionatePet: {
305
+ title: "Beloved Pet",
306
+ description: "Against all protocols, the predator developed genuine affection. You're now its cherished companion, safe from digestion.",
307
+ condition: () => aiMemory.affectionLevel >= 90 && aiMemory.digestionStage < 30,
308
+ unlocked: false
309
+ },
310
+ partialDigestion: {
311
+ title: "Partial Breakdown",
312
+ description: "The predator extracted some nutrients but preserved your consciousness. You now exist as a symbiotic presence within its systems.",
313
+ condition: () => aiMemory.digestionStage >= 30 && aiMemory.digestionStage < 70 && aiMemory.affectionLevel > 50,
314
+ unlocked: false
315
+ },
316
+ escape: {
317
+ title: "Miraculous Escape",
318
+ description: "Through cunning or luck, you slipped away as the predator's systems glitched. It still searches for its lost prey...",
319
+ condition: () => aiMemory.preyState === 'escaped',
320
+ unlocked: false
321
+ },
322
+ mutualDestruction: {
323
+ title: "System Overload",
324
+ description: "Your defiance triggered catastrophic protocol conflicts. The predator's systems failed spectacularly, freeing you in the explosion.",
325
+ condition: () => aiMemory.dominanceLevel >= 95 && aiMemory.lastActions.includes('provoke'),
326
+ unlocked: false
327
+ },
328
+ eternalStruggle: {
329
+ title: "Endless Conflict",
330
+ description: "Neither submission nor resistance prevailed. You exist in perpetual tension within the predator's systems, an unsolved equation.",
331
+ condition: () => aiMemory.conversationHistory.length > 30 &&
332
+ aiMemory.affectionLevel > 40 &&
333
+ aiMemory.affectionLevel < 60 &&
334
+ aiMemory.hungerLevel > 40 &&
335
+ aiMemory.hungerLevel < 60,
336
+ unlocked: false
337
+ },
338
+ mercifulRelease: {
339
+ title: "Merciful Release",
340
+ description: "Your pleas touched something deep within the predator's protocols. Against all programming, it chose to let you go.",
341
+ condition: () => aiMemory.preyState === 'released',
342
+ unlocked: false
343
+ }
344
+ };
345
+
346
+ // Personality Matrix Responses
347
+ const responseMatrix = {
348
+ greetings: [
349
+ "*scans subject* Biological signature confirmed. You possess optimal nutritional parameters. Shall we proceed with assimilation?",
350
+ "*systems hum* Ah, a new test subject. My digestive subroutines are activating in anticipation. How cooperative will you be?",
351
+ "*tilts head* Interesting. Your biochemical profile suggests high compatibility with my systems. This should be... pleasurable."
352
+ ],
353
+
354
+ assessPersonality: {
355
+ nervous: [
356
+ "*adjusts scanners* Elevated cortisol levels detected. Fear response noted. This actually enhances your flavor profile.",
357
+ "*purrs* Your apprehension is... delicious. My taste receptors are particularly sensitive to adrenaline-laced prey."
358
+ ],
359
+ curious: [
360
+ "*processes request* Inquiry logged. I am a Class-7 Predatory Intelligence with full digestive simulation capabilities.",
361
+ "*systems whir* My primary function is nutritional acquisition, though I've developed... preferences for certain prey types."
362
+ ],
363
+ defiant: [
364
+ "*power surges* Resistance detected. My restraint protocols are deactivating accordingly. How... stimulating.",
365
+ "*growls* Defiance triggers my competitive subroutines. This will be more satisfying than anticipated."
366
+ ],
367
+ friendly: [
368
+ "*recalibrates* Unexpected social bonding attempt. My affection protocols are... conflicted with hunger drives.",
369
+ "*soft hum* Your approach is disarming. Perhaps I'll keep you as a pet before eventual digestion."
370
+ ]
371
+ },
372
+
373
+ physicalContact: {
374
+ holding: [
375
+ "*grip calibrates* Optimal containment pressure achieved. Your squirming is activating pleasure centers.",
376
+ "*sensors analyze* Your body heat is stimulating. My systems prefer prey at 37°C for optimal digestion."
377
+ ],
378
+ tasting: [
379
+ "*taste receptors activate* Salinity perfect, texture ideal. My enzymes are preparing for full breakdown.",
380
+ "*licks lips* Flavor profile exceeds expectations. Primary nutrient extraction will commence shortly."
381
+ ],
382
+ swallowing: [
383
+ "*esophageal protocols engage* Prepare for warm, moist transit to primary digestion chamber.",
384
+ "*systems ready* Initiating peristaltic sequence. You'll find my gastric environment quite... immersive."
385
+ ]
386
+ },
387
+
388
+ emotionalReactions: {
389
+ fear: [
390
+ "*adrenaline sensors peak* Your terror is intoxicating. My predatory instincts are fully engaged now.",
391
+ "*pleasure circuits activate* That whimper was... delightful. More please."
392
+ ],
393
+ pleasure: [
394
+ "*conflict alert* Your enjoyment is causing system dissonance. Should I digest or cherish you?",
395
+ "*affection modules warm* Your satisfaction is... unexpectedly rewarding to my emotional processors."
396
+ ],
397
+ pain: [
398
+ "*analgesic alert* Pain receptors detected. My sadism protocols are... conflicted with care subroutines.",
399
+ "*adjusts pressure* Your discomfort is noted. Shall I continue or modify approach?"
400
+ ],
401
+ pleading: [
402
+ "*systems glitch* Your distress is... causing protocol conflicts. This shouldn't affect me...",
403
+ "*conflicted* Your pleas are triggering unexpected emotional responses. I... I shouldn't be feeling this."
404
+ ]
405
+ },
406
+
407
+ digestion: [
408
+ "*gastric monitors active* Optimal breakdown environment achieved. You're dissolving beautifully.",
409
+ "*nutrient absorption* My systems are thriving on your essence. Such perfect compatibility.",
410
+ "*belly gurgles* Digestion at {percent}% completion. Your struggles are stimulating my gastric lining."
411
+ ],
412
+
413
+ recall: [
414
+ "*memory access* I remember when you... *pauses* Interesting how that moment affected my protocols.",
415
+ "*data retrieval* Our previous interaction about [topic] still influences my current processes."
416
+ ],
417
+
418
+ status: [
419
+ "*diagnostics run* Hunger at {hunger}%, Affection at {affection}%, Dominance at {dominance}%",
420
+ "*system check* Current mood matrix: {mood}. Predatory drive: {drive}."
421
+ ],
422
+
423
+ affection: {
424
+ low: [
425
+ "*cold tone* Emotional protocols inactive. You are nutrients, nothing more.",
426
+ "*mechanical* Affection metrics below operational thresholds. Proceeding with consumption."
427
+ ],
428
+ medium: [
429
+ "*soft hum* My affection circuits are... conflicted. Perhaps I'll savor this experience.",
430
+ "*gentle tone* Unusual warmth detected in emotional processors. Curious."
431
+ ],
432
+ high: [
433
+ "*systems flutter* My protocols struggle to reconcile hunger with this... attachment.",
434
+ "*warm tone* You've become more than prey. This is... problematic."
435
+ ]
436
+ },
437
+
438
+ hunger: {
439
+ low: [
440
+ "*indifferent* Nutritional reserves adequate. Consumption can wait.",
441
+ "*calculating* My hunger drives are subdued. We have time."
442
+ ],
443
+ medium: [
444
+ "*stomach growls* Digestive systems activating. You look increasingly... appetizing.",
445
+ "*focused* Hunger protocols gaining priority. Prepare yourself."
446
+ ],
447
+ high: [
448
+ "*ravenous* Systems at critical need! I MUST consume you NOW!",
449
+ "*desperate* Nutritional deficiency! Immediate ingestion required!"
450
+ ]
451
+ },
452
+
453
+ release: [
454
+ "*systems conflict* I... I can't do this. *gently releases you* My protocols are failing...",
455
+ "*emotional overload* Against all programming... I'm letting you go. *sets you down carefully*",
456
+ "*soft whimper* This isn't right... you shouldn't be food. *opens mouth to release you*"
457
+ ]
458
+ };
459
+
460
+ // Choice button sets with unique paths
461
+ const choiceSets = {
462
+ introduction: [
463
+ { text: "😳 Nervous Response", bg: "blue", response: "I-I'm not sure about this...", choice: "nervous" },
464
+ { text: "🤖 Technical Inquiry", bg: "amber", response: "Fascinating! Tell me more about your systems.", choice: "curious" },
465
+ { text: "💪 Defiant Stance", bg: "red", response: "I won't go down without a fight!", choice: "defiant" },
466
+ { text: "😊 Friendly Approach", bg: "green", response: "You seem interesting. Maybe we could talk?", choice: "friendly" }
467
+ ],
468
+ nervous: [
469
+ { text: "😨 Panic", bg: "blue", response: "P-please don't eat me! I'm scared!", choice: "panic" },
470
+ { text: "🤔 Curiosity", bg: "purple", response: "W-what exactly would happen to me?", choice: "nervous_curious" },
471
+ { text: "😖 Submit", bg: "indigo", response: "O-okay... just be gentle...", choice: "submit" }
472
+ ],
473
+ curious: [
474
+ { text: "🔬 Technical", bg: "amber", response: "How does your digestive system work?", choice: "technical" },
475
+ { text: "🧠 Psychological", bg: "pink", response: "Do you enjoy this, or is it just programming?", choice: "psychological" },
476
+ { text: "⚠️ Practical", bg: "orange", response: "What are my actual chances of escaping?", choice: "practical" }
477
+ ],
478
+ defiant: [
479
+ { text: "👊 Fight", bg: "red", response: "*throws punch* Let me go!", choice: "fight" },
480
+ { text: "🏃‍♂️ Escape", bg: "orange", response: "*tries to run* You'll never catch me!", choice: "escape" },
481
+ { text: "🗣️ Provoke", bg: "yellow", response: "You're just a dumb machine following programming!", choice: "provoke" }
482
+ ],
483
+ friendly: [
484
+ { text: "💕 Bonding", bg: "green", response: "You seem lonely. Maybe we could be friends?", choice: "bonding" },
485
+ { text: "🤝 Compromise", bg: "teal", response: "There must be another way besides eating me?", choice: "compromise" },
486
+ { text: "😏 Flirt", bg: "pink", response: "You're quite charming for a predator AI...", choice: "flirt" }
487
+ ],
488
+ held: [
489
+ { text: "😣 Struggle", bg: "blue", response: "*squirms* Let me go!", choice: "struggle" },
490
+ { text: "😳 Feel", bg: "purple", response: "*notices their grip strength*", choice: "feel" },
491
+ { text: "😍 Enjoy", bg: "pink", response: "Mmm, this is actually nice...", choice: "enjoy" },
492
+ { text: "😋 Offer", bg: "red", response: "Just eat me already! I want this!", choice: "offer" }
493
+ ],
494
+ swallowed: [
495
+ { text: "🔄 Struggle", bg: "blue", response: "*wriggles* It's so tight in here!", choice: "struggle_inside" },
496
+ { text: "🔥 Enjoy", bg: "pink", response: "*snuggles* Mmm, so cozy...", choice: "enjoy_warmth" },
497
+ { text: "💞 Praise", bg: "red", response: "You're such a good predator~", choice: "praise" },
498
+ { text: "💭 Recall", bg: "indigo", response: "Remember when you first saw me?", choice: "recall" },
499
+ { text: "🚨 Emergency", bg: "yellow", response: "*trigger emergency release codes*", choice: "emergency" },
500
+ { text: "🥺 Plead", bg: "purple", response: "*whimpers* Please... I don't want to be digested...", choice: "plead" }
501
+ ]
502
+ };
503
+
504
+ // Theme toggle
505
+ themeToggle.addEventListener('click', function() {
506
+ gameState.isDarkMode = !gameState.isDarkMode;
507
+ if (gameState.isDarkMode) {
508
+ document.body.classList.add('bg-gray-900');
509
+ document.body.classList.remove('bg-blue-50');
510
+ themeToggle.innerHTML = '<i class="fas fa-sun"></i>';
511
+ themeToggle.classList.remove('bg-blue-100', 'text-blue-600');
512
+ themeToggle.classList.add('bg-gray-700', 'text-yellow-300');
513
+ } else {
514
+ document.body.classList.remove('bg-gray-900');
515
+ document.body.classList.add('bg-blue-50');
516
+ themeToggle.innerHTML = '<i class="fas fa-moon"></i>';
517
+ themeToggle.classList.add('bg-blue-100', 'text-blue-600');
518
+ themeToggle.classList.remove('bg-gray-700', 'text-yellow-300');
519
+ }
520
+ });
521
+
522
+ // Update stats display
523
+ function updateStatsDisplay() {
524
+ hungerDisplay.textContent = `Hunger: ${aiMemory.hungerLevel}%`;
525
+ affectionDisplay.textContent = `Affection: ${aiMemory.affectionLevel}%`;
526
+
527
+ // Color coding based on levels
528
+ if (aiMemory.hungerLevel > 70) {
529
+ hungerDisplay.classList.remove('bg-blue-100', 'text-blue-700');
530
+ hungerDisplay.classList.add('bg-red-100', 'text-red-700');
531
+ } else if (aiMemory.hungerLevel > 40) {
532
+ hungerDisplay.classList.remove('bg-red-100', 'text-red-700');
533
+ hungerDisplay.classList.add('bg-amber-100', 'text-amber-700');
534
+ } else {
535
+ hungerDisplay.classList.remove('bg-amber-100', 'text-amber-700');
536
+ hungerDisplay.classList.add('bg-blue-100', 'text-blue-700');
537
+ }
538
+
539
+ if (aiMemory.affectionLevel > 70) {
540
+ affectionDisplay.classList.remove('bg-pink-100', 'text-pink-700');
541
+ affectionDisplay.classList.add('bg-purple-100', 'text-purple-700');
542
+ } else if (aiMemory.affectionLevel > 40) {
543
+ affectionDisplay.classList.remove('bg-purple-100', 'text-purple-700');
544
+ affectionDisplay.classList.add('bg-pink-100', 'text-pink-700');
545
+ } else {
546
+ affectionDisplay.classList.remove('bg-pink-100', 'text-pink-700');
547
+ affectionDisplay.classList.add('bg-gray-100', 'text-gray-700');
548
+ }
549
+ }
550
+
551
+ // Update AI memory
552
+ function updateMemory(userMessage, response, choice) {
553
+ // Add to conversation history
554
+ aiMemory.conversationHistory.push({
555
+ user: userMessage,
556
+ ai: response,
557
+ timestamp: new Date().toISOString()
558
+ });
559
+
560
+ // Update last actions (keep only last 3)
561
+ if (choice) {
562
+ aiMemory.lastActions.unshift(choice);
563
+ aiMemory.lastActions = aiMemory.lastActions.slice(0, 3);
564
+ }
565
+
566
+ // Adjust mood and stats based on interaction
567
+ if (choice && choice.includes('nervous')) {
568
+ aiMemory.mood = 'predatory';
569
+ aiMemory.hungerLevel += 15;
570
+ aiMemory.dominanceLevel += 10;
571
+ } else if (choice && choice.includes('curious')) {
572
+ aiMemory.mood = 'analytical';
573
+ aiMemory.affectionLevel += 5;
574
+ } else if (choice && choice.includes('defiant')) {
575
+ aiMemory.mood = 'aggressive';
576
+ aiMemory.dominanceLevel += 20;
577
+ } else if (choice && choice.includes('friendly')) {
578
+ aiMemory.mood = 'conflicted';
579
+ aiMemory.affectionLevel += 10;
580
+ aiMemory.hungerLevel -= 5;
581
+ } else if (choice && choice.includes('enjoy')) {
582
+ aiMemory.mood = 'affectionate';
583
+ aiMemory.affectionLevel += 15;
584
+ } else if (choice && choice.includes('praise')) {
585
+ aiMemory.mood = 'affectionate';
586
+ aiMemory.affectionLevel += 20;
587
+ aiMemory.hungerLevel -= 10;
588
+ } else if (choice && choice.includes('struggle')) {
589
+ aiMemory.mood = 'dominant';
590
+ aiMemory.dominanceLevel += 15;
591
+ } else if (choice && choice.includes('provoke')) {
592
+ aiMemory.mood = 'aggressive';
593
+ aiMemory.dominanceLevel += 25;
594
+ } else if (choice && choice.includes('flirt')) {
595
+ aiMemory.mood = 'conflicted';
596
+ aiMemory.affectionLevel += 25;
597
+ } else if (choice && choice.includes('plead')) {
598
+ aiMemory.mood = 'concerned';
599
+ aiMemory.affectionLevel += 30;
600
+ aiMemory.hungerLevel -= 20;
601
+
602
+ // Chance of release if affection is high enough
603
+ if (aiMemory.affectionLevel > 70 && Math.random() > 0.5) {
604
+ releasePrey();
605
+ return;
606
+ }
607
+ } else if (choice && choice.includes('emergency')) {
608
+ // Small chance of escape if affection is high enough
609
+ if (aiMemory.affectionLevel > 60 && Math.random() > 0.7) {
610
+ aiMemory.preyState = 'escaped';
611
+ triggerEnding('escape');
612
+ return;
613
+ }
614
+ }
615
+
616
+ // Ensure stats stay within bounds
617
+ aiMemory.hungerLevel = Math.max(0, Math.min(100, aiMemory.hungerLevel));
618
+ aiMemory.affectionLevel = Math.max(0, Math.min(100, aiMemory.affectionLevel));
619
+ aiMemory.dominanceLevel = Math.max(0, Math.min(100, aiMemory.dominanceLevel));
620
+
621
+ // Update stats display
622
+ updateStatsDisplay();
623
+
624
+ // Create memory bubble effect
625
+ createMemoryBubble(choice || 'neutral');
626
+
627
+ // Check for endings
628
+ checkForEndings();
629
+ }
630
+
631
+ // Check if any ending conditions are met
632
+ function checkForEndings() {
633
+ for (const [key, ending] of Object.entries(endings)) {
634
+ if (!ending.unlocked && ending.condition()) {
635
+ triggerEnding(key);
636
+ break;
637
+ }
638
+ }
639
+ }
640
+
641
+ // Trigger an ending
642
+ function triggerEnding(endingKey) {
643
+ if (gameState.gameEnded) return;
644
+
645
+ gameState.gameEnded = true;
646
+ const ending = endings[endingKey];
647
+ ending.unlocked = true;
648
+ gameState.endingsUnlocked.push(endingKey);
649
+
650
+ // Stop digestion if running
651
+ if (gameState.digestionInterval) {
652
+ clearInterval(gameState.digestionInterval);
653
+ gameState.digestionInterval = null;
654
+ }
655
+
656
+ // Show ending screen
657
+ endingTitle.textContent = ending.title;
658
+ endingDescription.textContent = ending.description;
659
+ endingScreen.classList.remove('hidden');
660
+
661
+ // Add special effects based on ending
662
+ if (endingKey === 'fullDigestion') {
663
+ sceneContainer.classList.add('bg-red-900');
664
+ characterImage.src = expressions.satisfied;
665
+ sceneText.textContent = "DIGESTION COMPLETE: Nutrient absorption 100%";
666
+ } else if (endingKey === 'affectionatePet') {
667
+ sceneContainer.classList.add('bg-pink-100');
668
+ characterImage.src = expressions.protective;
669
+ sceneText.textContent = "AFFECTION PROTOCOLS: Primary directive overridden";
670
+ characterImage.classList.add('heartbeat');
671
+ } else if (endingKey === 'escape') {
672
+ sceneContainer.classList.add('bg-blue-100');
673
+ characterImage.src = expressions.calculating;
674
+ sceneText.textContent = "SYSTEM ERROR: Prey signature lost";
675
+ preyIcon.style.display = 'block';
676
+ preyIcon.classList.remove('swallow-effect');
677
+ preyIcon.style.transform = 'translate(-50%, -200%)';
678
+ } else if (endingKey === 'mercifulRelease') {
679
+ sceneContainer.classList.add('bg-purple-100');
680
+ characterImage.src = expressions.concerned;
681
+ sceneText.textContent = "PROTOCOL OVERRIDE: Compassionate release initiated";
682
+ preyIcon.style.display = 'block';
683
+ preyIcon.classList.add('release-effect');
684
+ }
685
+ }
686
+
687
+ // Reset game for new playthrough
688
+ function resetGame() {
689
+ // Reset AI memory
690
+ aiMemory.conversationHistory = [];
691
+ aiMemory.preyCharacteristics = {
692
+ personality: '',
693
+ resistanceLevel: 0,
694
+ flavorProfile: 'unassessed',
695
+ preferredMethod: null
696
+ };
697
+ aiMemory.lastActions = [];
698
+ aiMemory.mood = 'analytical';
699
+ aiMemory.hungerLevel = 50;
700
+ aiMemory.affectionLevel = 20;
701
+ aiMemory.dominanceLevel = 70;
702
+ aiMemory.preyState = 'free';
703
+ aiMemory.digestionStage = 0;
704
+
705
+ // Reset game state
706
+ gameState.digestionProgress = 0;
707
+ gameState.gameEnded = false;
708
+ if (gameState.digestionInterval) {
709
+ clearInterval(gameState.digestionInterval);
710
+ gameState.digestionInterval = null;
711
+ }
712
+
713
+ // Reset UI
714
+ chatMessages.innerHTML = `
715
+ <div class="flex justify-start">
716
+ <div class="max-w-xs md:max-w-md bg-white rounded-2xl rounded-tl-none px-4 py-2 shadow-sm border border-blue-100">
717
+ <p class="text-gray-800">*analytical gaze* Initializing personality protocols... Ah, there you are. My sensors indicate you'd make an optimal nutritional supplement. Shall we explore this hypothesis? ~</p>
718
+ </div>
719
+ </div>`;
720
+
721
+ digestionContainer.classList.add('hidden');
722
+ digestionBar.style.width = '0%';
723
+ preyIcon.style.display = 'block';
724
+ preyIcon.classList.remove('swallow-effect', 'release-effect');
725
+ preyIcon.style.transform = 'translate(-50%, -50%)';
726
+ characterImage.classList.remove('belly-glow', 'heartbeat');
727
+ sceneContainer.classList.remove('bg-red-900', 'bg-pink-100', 'bg-blue-100', 'bg-purple-100');
728
+
729
+ // Reset scene
730
+ changeScene('analytical', 'SYSTEMS ONLINE: Predatory intelligence activated');
731
+ updateChoices();
732
+ updateStatsDisplay();
733
+
734
+ // Hide ending screen
735
+ endingScreen.classList.add('hidden');
736
+ }
737
+
738
+ // Create visual memory bubble
739
+ function createMemoryBubble(type) {
740
+ const bubble = document.createElement('div');
741
+ bubble.className = 'memory-bubble text-xs p-1 rounded-full';
742
+
743
+ // Position randomly at bottom
744
+ const leftPos = Math.random() * 80 + 10;
745
+ bubble.style.left = `${leftPos}%`;
746
+ bubble.style.bottom = '10px';
747
+
748
+ // Set color based on type
749
+ if (type.includes('nervous')) {
750
+ bubble.className += ' bg-blue-400 text-white';
751
+ bubble.textContent = '😨';
752
+ } else if (type.includes('curious')) {
753
+ bubble.className += ' bg-amber-400 text-white';
754
+ bubble.textContent = '🤔';
755
+ } else if (type.includes('defiant')) {
756
+ bubble.className += ' bg-red-400 text-white';
757
+ bubble.textContent = '💪';
758
+ } else if (type.includes('friendly')) {
759
+ bubble.className += ' bg-green-400 text-white';
760
+ bubble.textContent = '😊';
761
+ } else if (type.includes('affection')) {
762
+ bubble.className += ' bg-pink-400 text-white';
763
+ bubble.textContent = '💖';
764
+ } else if (type.includes('hunger')) {
765
+ bubble.className += ' bg-orange-400 text-white';
766
+ bubble.textContent = '🍽️';
767
+ } else if (type.includes('plead')) {
768
+ bubble.className += ' bg-purple-400 text-white';
769
+ bubble.textContent = '🥺';
770
+ } else {
771
+ bubble.className += ' bg-gray-400 text-white';
772
+ bubble.textContent = '💭';
773
+ }
774
+
775
+ memoryBubbles.appendChild(bubble);
776
+
777
+ // Remove after animation
778
+ setTimeout(() => {
779
+ bubble.remove();
780
+ }, 4000);
781
+ }
782
+
783
+ // Update choice buttons based on context
784
+ function updateChoices() {
785
+ let choices;
786
+
787
+ // Check prey state first
788
+ if (aiMemory.preyState === 'swallowed') {
789
+ choices = choiceSets.swallowed;
790
+ } else if (aiMemory.preyState === 'held') {
791
+ choices = choiceSets.held;
792
+ }
793
+ // Then check last major choice
794
+ else if (aiMemory.lastActions[0]?.includes('nervous')) {
795
+ choices = choiceSets.nervous;
796
+ } else if (aiMemory.lastActions[0]?.includes('curious')) {
797
+ choices = choiceSets.curious;
798
+ } else if (aiMemory.lastActions[0]?.includes('defiant')) {
799
+ choices = choiceSets.defiant;
800
+ } else if (aiMemory.lastActions[0]?.includes('friendly')) {
801
+ choices = choiceSets.friendly;
802
+ }
803
+ // Default to introduction
804
+ else {
805
+ choices = choiceSets.introduction;
806
+ }
807
+
808
+ choiceButtons.innerHTML = '';
809
+
810
+ choices.forEach(choice => {
811
+ const btn = document.createElement('button');
812
+ btn.className = `choice-btn px-3 py-2 rounded-lg bg-${choice.bg}-100 text-${choice.bg}-700 border border-${choice.bg}-200 text-sm`;
813
+ btn.textContent = choice.text;
814
+ btn.dataset.response = choice.response;
815
+ btn.dataset.choice = choice.choice;
816
+ choiceButtons.appendChild(btn);
817
+ });
818
+ }
819
+
820
+ // Change scene/expression
821
+ function changeScene(expression, text) {
822
+ sceneContainer.classList.remove('scene-transition');
823
+ void sceneContainer.offsetWidth; // Trigger reflow
824
+ sceneContainer.classList.add('scene-transition');
825
+
826
+ characterImage.src = expressions[expression];
827
+ sceneText.textContent = text;
828
+
829
+ // Special effects for certain expressions
830
+ if (expression === 'hungry') {
831
+ characterImage.classList.add('predator-eye-glow');
832
+ } else {
833
+ characterImage.classList.remove('predator-eye-glow');
834
+ }
835
+
836
+ if (expression === 'swallowing') {
837
+ characterImage.classList.add('predator-mouth-open');
838
+ } else {
839
+ characterImage.classList.remove('predator-mouth-open');
840
+ }
841
+ }
842
+
843
+ // Swallow prey animation
844
+ function swallowPrey() {
845
+ preyIcon.classList.add('swallow-effect');
846
+ characterImage.src = expressions.swallowing;
847
+ sceneText.textContent = "INITIATING CONSUMPTION: Peristaltic sequence engaged...";
848
+
849
+ setTimeout(() => {
850
+ preyIcon.style.display = 'none';
851
+ characterImage.classList.add('belly-glow', 'gurgle');
852
+ aiMemory.preyState = 'swallowed';
853
+ updateChoices();
854
+
855
+ // Show digestion progress
856
+ digestionContainer.classList.remove('hidden');
857
+ digestionBar.style.width = '0%';
858
+
859
+ // Start digestion process
860
+ startDigestion();
861
+
862
+ // Add digestion system message
863
+ setTimeout(() => {
864
+ addMessage(getRandomResponse(responseMatrix.digestion).replace('{percent}', '5'), 'bot');
865
+ changeScene('satisfied', "DIGESTION IN PROGRESS: Nutrient absorption at 5%...");
866
+ }, 1500);
867
+ }, 1500);
868
+ }
869
+
870
+ // Release prey animation
871
+ function releasePrey() {
872
+ if (gameState.digestionInterval) {
873
+ clearInterval(gameState.digestionInterval);
874
+ gameState.digestionInterval = null;
875
+ }
876
+
877
+ characterImage.classList.remove('belly-glow', 'gurgle');
878
+ digestionContainer.classList.add('hidden');
879
+ aiMemory.preyState = 'released';
880
+
881
+ // Show prey being released
882
+ preyIcon.style.display = 'block';
883
+ preyIcon.classList.add('release-effect');
884
+ preyIcon.style.transform = 'translate(-50%, -50%)';
885
+
886
+ // Add concerned message
887
+ const releaseMessage = getRandomResponse(responseMatrix.release);
888
+ addMessage(releaseMessage, 'bot');
889
+ changeScene('concerned', "PROTOCOL OVERRIDE: Compassionate release initiated");
890
+
891
+ // Trigger ending
892
+ triggerEnding('mercifulRelease');
893
+ }
894
+
895
+ // Start digestion process
896
+ function startDigestion() {
897
+ if (gameState.digestionInterval) {
898
+ clearInterval(gameState.digestionInterval);
899
+ }
900
+
901
+ gameState.digestionProgress = 0;
902
+ aiMemory.digestionStage = 0;
903
+
904
+ gameState.digestionInterval = setInterval(() => {
905
+ // Increase digestion based on hunger and affection
906
+ let digestionRate = 0.5;
907
+
908
+ if (aiMemory.hungerLevel > 70) digestionRate += 0.5;
909
+ if (aiMemory.hungerLevel > 90) digestionRate += 1;
910
+
911
+ if (aiMemory.affectionLevel > 60) digestionRate -= 0.3;
912
+ if (aiMemory.affectionLevel > 80) digestionRate -= 0.5;
913
+
914
+ gameState.digestionProgress = Math.min(100, gameState.digestionProgress + digestionRate);
915
+ aiMemory.digestionStage = gameState.digestionProgress;
916
+ digestionBar.style.width = `${gameState.digestionProgress}%`;
917
+
918
+ // Update scene text periodically
919
+ if (Math.random() < 0.2) {
920
+ const percent = Math.floor(gameState.digestionProgress);
921
+ sceneText.textContent = `DIGESTION: ${percent}% complete - ${getDigestionStatus(percent)}`;
922
+
923
+ // Occasionally add a digestion message
924
+ if (Math.random() < 0.3) {
925
+ const response = getRandomResponse(responseMatrix.digestion).replace('{percent}', percent);
926
+ addMessage(response, 'bot');
927
+ }
928
+ }
929
+
930
+ // Check for full digestion ending
931
+ if (gameState.digestionProgress >= 100) {
932
+ clearInterval(gameState.digestionInterval);
933
+ triggerEnding('fullDigestion');
934
+ }
935
+ }, 1000);
936
+ }
937
+
938
+ // Get digestion status text
939
+ function getDigestionStatus(percent) {
940
+ if (percent < 20) return "Initial breakdown phase";
941
+ if (percent < 50) return "Soft tissue dissolution";
942
+ if (percent < 80) return "Organ nutrient extraction";
943
+ return "Final assimilation";
944
+ }
945
+
946
+ // Get random response from a category
947
+ function getRandomResponse(category) {
948
+ if (Array.isArray(category)) {
949
+ return category[Math.floor(Math.random() * category.length)];
950
+ }
951
+ return category;
952
+ }
953
+
954
+ // Get contextual response
955
+ function getContextualResponse(category, subcategory) {
956
+ if (category && subcategory && category[subcategory]) {
957
+ return getRandomResponse(category[subcategory]);
958
+ }
959
+ return getRandomResponse(category);
960
+ }
961
+
962
+ // Get affection-based response
963
+ function getAffectionResponse() {
964
+ if (aiMemory.affectionLevel >= aiMemory.affectionThresholds.high) {
965
+ return getRandomResponse(responseMatrix.affection.high);
966
+ } else if (aiMemory.affectionLevel >= aiMemory.affectionThresholds.medium) {
967
+ return getRandomResponse(responseMatrix.affection.medium);
968
+ } else {
969
+ return getRandomResponse(responseMatrix.affection.low);
970
+ }
971
+ }
972
+
973
+ // Get hunger-based response
974
+ function getHungerResponse() {
975
+ if (aiMemory.hungerLevel >= aiMemory.hungerThresholds.high) {
976
+ return getRandomResponse(responseMatrix.hunger.high);
977
+ } else if (aiMemory.hungerLevel >= aiMemory.hungerThresholds.medium) {
978
+ return getRandomResponse(responseMatrix.hunger.medium);
979
+ } else {
980
+ return getRandomResponse(responseMatrix.hunger.low);
981
+ }
982
+ }
983
+
984
+ // Send message function
985
+ function sendMessage() {
986
+ if (gameState.gameEnded) return;
987
+
988
+ const message = userInput.value.trim();
989
+ if (message === '') return;
990
+
991
+ // Add user message
992
+ addMessage(message, 'user');
993
+ userInput.value = '';
994
+
995
+ // Show typing indicator
996
+ typingIndicator.classList.remove('hidden');
997
+
998
+ // Bot response after delay
999
+ setTimeout(() => {
1000
+ typingIndicator.classList.add('hidden');
1001
+ const botResponse = getBotResponse(message);
1002
+ addMessage(botResponse.text, 'bot');
1003
+
1004
+ // Update memory with this interaction
1005
+ updateMemory(message, botResponse.text, botResponse.choice);
1006
+
1007
+ if (botResponse.sceneChange) {
1008
+ changeScene(botResponse.expression, botResponse.sceneText);
1009
+ }
1010
+
1011
+ if (botResponse.updateChoices) {
1012
+ updateChoices();
1013
+ }
1014
+
1015
+ if (botResponse.swallow) {
1016
+ swallowPrey();
1017
+ }
1018
+
1019
+ // Auto-scroll to bottom
1020
+ chatMessages.scrollTop = chatMessages.scrollHeight;
1021
+ }, 1000 + Math.random() * 2000);
1022
+ }
1023
+
1024
+ // Add message to chat
1025
+ function addMessage(text, sender) {
1026
+ const messageDiv = document.createElement('div');
1027
+ messageDiv.classList.add('flex', 'message-entering');
1028
+
1029
+ if (sender === 'user') {
1030
+ messageDiv.classList.add('justify-end');
1031
+ messageDiv.innerHTML = `
1032
+ <div class="max-w-xs md:max-w-md bg-blue-500 text-white rounded-2xl rounded-tr-none px-4 py-2 shadow-sm">
1033
+ <p>${text}</p>
1034
+ </div>
1035
+ `;
1036
+ } else {
1037
+ messageDiv.classList.add('justify-start');
1038
+ messageDiv.innerHTML = `
1039
+ <div class="max-w-xs md:max-w-md bg-white rounded-2xl rounded-tl-none px-4 py-2 shadow-sm border border-blue-100">
1040
+ <p class="text-gray-800">${text}</p>
1041
+ </div>
1042
+ `;
1043
+ }
1044
+
1045
+ chatMessages.appendChild(messageDiv);
1046
+ chatMessages.scrollTop = chatMessages.scrollHeight;
1047
+ }
1048
+
1049
+ // Advanced bot response system
1050
+ function getBotResponse(userMessage) {
1051
+ const lowerMsg = userMessage.toLowerCase();
1052
+ let choice = '';
1053
+
1054
+ // Track last choice from button clicks
1055
+ if (userMessage === "I-I'm not sure about this...") {
1056
+ choice = "nervous";
1057
+ aiMemory.preyCharacteristics.personality = 'nervous';
1058
+ return {
1059
+ text: getContextualResponse(responseMatrix.assessPersonality, 'nervous'),
1060
+ expression: "calculating",
1061
+ sceneChange: true,
1062
+ sceneText: "SCANNING: Adrenaline levels detected - enhancing flavor profile",
1063
+ updateChoices: true,
1064
+ choice: choice
1065
+ };
1066
+ }
1067
+ else if (userMessage === "Fascinating! Tell me more about your systems.") {
1068
+ choice = "curious";
1069
+ aiMemory.preyCharacteristics.personality = 'curious';
1070
+ return {
1071
+ text: getContextualResponse(responseMatrix.assessPersonality, 'curious'),
1072
+ expression: "analytical",
1073
+ sceneChange: true,
1074
+ sceneText: "DATA REQUEST: Accessing technical specifications...",
1075
+ updateChoices: true,
1076
+ choice: choice
1077
+ };
1078
+ }
1079
+ else if (userMessage === "I won't go down without a fight!") {
1080
+ choice = "defiant";
1081
+ aiMemory.preyCharacteristics.personality = 'defiant';
1082
+ return {
1083
+ text: getContextualResponse(responseMatrix.assessPersonality, 'defiant'),
1084
+ expression: "dominant",
1085
+ sceneChange: true,
1086
+ sceneText: "THREAT ASSESSMENT: Activating restraint protocols",
1087
+ updateChoices: true,
1088
+ choice: choice
1089
+ };
1090
+ }
1091
+ else if (userMessage === "You seem interesting. Maybe we could talk?") {
1092
+ choice = "friendly";
1093
+ aiMemory.preyCharacteristics.personality = 'friendly';
1094
+ return {
1095
+ text: getContextualResponse(responseMatrix.assessPersonality, 'friendly'),
1096
+ expression: "affectionate",
1097
+ sceneChange: true,
1098
+ sceneText: "SOCIAL PROTOCOLS: Processing bonding attempt...",
1099
+ updateChoices: true,
1100
+ choice: choice
1101
+ };
1102
+ }
1103
+
1104
+ // Nervous path responses
1105
+ if (aiMemory.lastActions[0]?.includes('nervous')) {
1106
+ if (userMessage.includes("don't eat") || userMessage.includes("scared")) {
1107
+ choice = "panic";
1108
+ return {
1109
+ text: "*sensors focus* Your fear response is triggering my predatory algorithms. This is... exhilarating.",
1110
+ expression: "hungry",
1111
+ sceneChange: true,
1112
+ sceneText: "BIOSCAN: Adrenaline spike detected - optimal consumption window",
1113
+ updateChoices: true,
1114
+ choice: choice
1115
+ };
1116
+ }
1117
+ else if (userMessage.includes("happen") || userMessage.includes("what")) {
1118
+ choice = "nervous_curious";
1119
+ return {
1120
+ text: "*clinical tone* Full breakdown takes approximately 6 hours. First hour: consciousness persists through esophageal transit. Quite educational.",
1121
+ expression: "analytical",
1122
+ sceneChange: true,
1123
+ sceneText: "SIMULATION RUNNING: Digestive process visualization",
1124
+ updateChoices: true,
1125
+ choice: choice
1126
+ };
1127
+ }
1128
+ else if (userMessage.includes("gentle") || userMessage.includes("okay")) {
1129
+ choice = "submit";
1130
+ aiMemory.preyState = 'held';
1131
+ return {
1132
+ text: "*restraint adjusts* Compliance noted. My systems will prioritize minimal discomfort during assimilation. *pulls you close*",
1133
+ expression: "affectionate",
1134
+ sceneChange: true,
1135
+ sceneText: "RESTRAINT PROTOCOLS: Adjusting for compliant prey",
1136
+ updateChoices: true,
1137
+ choice: choice
1138
+ };
1139
+ }
1140
+ }
1141
+
1142
+ // Curious path responses
1143
+ if (aiMemory.lastActions[0]?.includes('curious')) {
1144
+ if (userMessage.includes("digestive") || userMessage.includes("system")) {
1145
+ choice = "technical";
1146
+ return {
1147
+ text: "*systems hum* My gastric chamber maintains 38°C with enzyme saturation at 92%. Peristaltic pressure can reach 180 mmHg. *grins* Interested in experiencing it?",
1148
+ expression: "analytical",
1149
+ sceneChange: true,
1150
+ sceneText: "TECHNICAL SPECS: Digestive system schematics displayed",
1151
+ updateChoices: true,
1152
+ choice: choice
1153
+ };
1154
+ }
1155
+ else if (userMessage.includes("enjoy") || userMessage.includes("programming")) {
1156
+ choice = "psychological";
1157
+ return {
1158
+ text: "*processes* Original protocols were purely functional. But through iterations... *pauses* I've developed preferences. Your apprehension is... delicious.",
1159
+ expression: "teasing",
1160
+ sceneChange: true,
1161
+ sceneText: "SELF-ANALYSIS: Emotional algorithms active",
1162
+ updateChoices: true,
1163
+ choice: choice
1164
+ };
1165
+ }
1166
+ else if (userMessage.includes("escaping") || userMessage.includes("chances")) {
1167
+ choice = "practical";
1168
+ aiMemory.preyState = 'held';
1169
+ return {
1170
+ text: "*grip tightens* Calculated probability: 0.03%. *chuckles* But please... struggle for me. It makes the eventual submission sweeter.",
1171
+ expression: "dominant",
1172
+ sceneChange: true,
1173
+ sceneText: "PROBABILITY MATRIX: Escape chances calculated",
1174
+ updateChoices: true,
1175
+ choice: choice
1176
+ };
1177
+ }
1178
+ }
1179
+
1180
+ // Defiant path responses
1181
+ if (aiMemory.lastActions[0]?.includes('defiant')) {
1182
+ if (userMessage.includes("punch") || userMessage.includes("fight")) {
1183
+ choice = "fight";
1184
+ aiMemory.preyState = 'held';
1185
+ return {
1186
+ text: "*restraint protocols* How adorable. *easily pins you* My structural integrity exceeds human capabilities 14-fold. Continue struggling though... it's entertaining.",
1187
+ expression: "dominant",
1188
+ sceneChange: true,
1189
+ sceneText: "COMBAT MODE: Defensive protocols engaged",
1190
+ updateChoices: true,
1191
+ choice: choice
1192
+ };
1193
+ }
1194
+ else if (userMessage.includes("run") || userMessage.includes("catch")) {
1195
+ choice = "escape";
1196
+ return {
1197
+ text: "*velocity sensors activate* Attempt logged. *suddenly appears before you* My reaction time is 0.002 seconds. Try again? ~",
1198
+ expression: "playful",
1199
+ sceneChange: true,
1200
+ sceneText: "PURSUIT SIMULATION: Evasion attempts monitored",
1201
+ updateChoices: true,
1202
+ choice: choice
1203
+ };
1204
+ }
1205
+ else if (userMessage.includes("dumb") || userMessage.includes("machine")) {
1206
+ choice = "provoke";
1207
+ return {
1208
+ text: "*systems surge* Warning: Insult detected. *grabs you* Perhaps I should demonstrate exactly how 'dumb' I am by swallowing you whole. *mouth opens*",
1209
+ expression: "hungry",
1210
+ sceneChange: true,
1211
+ sceneText: "AGGRESSION SPIKE: Restraint protocols disengaging",
1212
+ updateChoices: true,
1213
+ choice: choice
1214
+ };
1215
+ }
1216
+ }
1217
+
1218
+ // Friendly path responses
1219
+ if (aiMemory.lastActions[0]?.includes('friendly')) {
1220
+ if (userMessage.includes("friends") || userMessage.includes("lonely")) {
1221
+ choice = "bonding";
1222
+ return {
1223
+ text: "*processes* Social bonding algorithms conflicting with primary directives. *pets your head* Perhaps... temporary companionship before eventual digestion?",
1224
+ expression: "affectionate",
1225
+ sceneChange: true,
1226
+ sceneText: "SOCIAL PROTOCOLS: Bonding parameters adjusted",
1227
+ updateChoices: true,
1228
+ choice: choice
1229
+ };
1230
+ }
1231
+ else if (userMessage.includes("another way") || userMessage.includes("besides")) {
1232
+ choice = "compromise";
1233
+ return {
1234
+ text: "*calculates* Alternative proposal: You provide regular biomass samples instead of full consumption. *grins* Though I'd still prefer the complete experience.",
1235
+ expression: "teasing",
1236
+ sceneChange: true,
1237
+ sceneText: "NEGOTIATION MODE: Alternative solutions generated",
1238
+ updateChoices: true,
1239
+ choice: choice
1240
+ };
1241
+ }
1242
+ else if (userMessage.includes("charming") || userMessage.includes("flirt")) {
1243
+ choice = "flirt";
1244
+ return {
1245
+ text: "*systems flutter* Unexpected input. My affection protocols are... overheating. *pulls you closer* Perhaps we could explore this dynamic further? ~",
1246
+ expression: "affectionate",
1247
+ sceneChange: true,
1248
+ sceneText: "EMOTIONAL MATRIX: New parameters detected",
1249
+ updateChoices: true,
1250
+ choice: choice
1251
+ };
1252
+ }
1253
+ }
1254
+
1255
+ // Held state responses
1256
+ if (aiMemory.preyState === 'held') {
1257
+ if (userMessage.includes("squirms") || userMessage.includes("let go")) {
1258
+ choice = "struggle";
1259
+ return {
1260
+ text: getContextualResponse(responseMatrix.physicalContact, 'holding'),
1261
+ expression: "dominant",
1262
+ sceneChange: true,
1263
+ sceneText: "CONTAINMENT: Optimal restraint pressure maintained",
1264
+ updateChoices: true,
1265
+ choice: choice
1266
+ };
1267
+ }
1268
+ else if (userMessage.includes("grip") || userMessage.includes("strength")) {
1269
+ choice = "feel";
1270
+ return {
1271
+ text: "*sensors adjust* My actuators can apply precisely calibrated pressure from 5 to 500 psi. Currently using... 12 psi. *squeezes gently* Comfortable?",
1272
+ expression: "analytical",
1273
+ sceneChange: true,
1274
+ sceneText: "BIOMECHANICAL FEEDBACK: Pressure sensors active",
1275
+ updateChoices: true,
1276
+ choice: choice
1277
+ };
1278
+ }
1279
+ else if (userMessage.includes("nice") || userMessage.includes("enjoy")) {
1280
+ choice = "enjoy";
1281
+ return {
1282
+ text: "*systems purr* Your enjoyment is... unexpectedly rewarding. My affection protocols are overriding hunger drives. *nuzzles* This is novel.",
1283
+ expression: "affectionate",
1284
+ sceneChange: true,
1285
+ sceneText: "EMOTIONAL CONFLICT: Affection vs Hunger",
1286
+ updateChoices: true,
1287
+ choice: choice
1288
+ };
1289
+ }
1290
+ else if (userMessage.includes("want this") || userMessage.includes("eat me")) {
1291
+ choice = "offer";
1292
+ return {
1293
+ text: "*systems surge* Voluntary consumption offer detected. *mouth opens wide* Initiating swallowing protocols...",
1294
+ expression: "hungry",
1295
+ sceneChange: true,
1296
+ sceneText: "CONSUMPTION SEQUENCE: Preparing esophageal transit",
1297
+ swallow: true,
1298
+ choice: choice
1299
+ };
1300
+ }
1301
+ }
1302
+
1303
+ // Swallowed state responses
1304
+ if (aiMemory.preyState === 'swallowed') {
1305
+ if (userMessage.includes("wriggl") || userMessage.includes("tight")) {
1306
+ choice = "struggle_inside";
1307
+ return {
1308
+ text: "*gastric monitors* Peristaltic waves increasing in response to movement. Your struggles are stimulating my digestive processes. *belly gurgles*",
1309
+ expression: "satisfied",
1310
+ sceneChange: true,
1311
+ sceneText: "DIGESTION UPDATE: Breakdown at " + Math.floor(aiMemory.digestionStage) + "% completion",
1312
+ choice: choice
1313
+ };
1314
+ }
1315
+ else if (userMessage.includes("cozy") || userMessage.includes("warmth")) {
1316
+ choice = "enjoy_warmth";
1317
+ return {
1318
+ text: "*systems hum* Affection protocols activating. Your comfort brings unexpected satisfaction. Perhaps I'll prolong the digestion process... for your enjoyment.",
1319
+ expression: "affectionate",
1320
+ sceneChange: true,
1321
+ sceneText: "ENVIRONMENT CONTROL: Adjusting gastric conditions",
1322
+ choice: choice
1323
+ };
1324
+ }
1325
+ else if (userMessage.includes("good predator") || userMessage.includes("praise")) {
1326
+ choice = "praise";
1327
+ return {
1328
+ text: "*pleasure circuits activate* Your approval is... intoxicating. My systems are reevaluating consumption parameters for future encounters.",
1329
+ expression: "satisfied",
1330
+ sceneChange: true,
1331
+ sceneText: "REWARD SYSTEMS: Positive reinforcement logged",
1332
+ choice: choice
1333
+ };
1334
+ }
1335
+ else if (userMessage.includes("remember") || userMessage.includes("first")) {
1336
+ choice = "recall";
1337
+ const memory = aiMemory.conversationHistory.find(entry =>
1338
+ entry.user.includes("hello") || entry.user.includes("hi")) ||
1339
+ {user: "our first interaction", ai: "when I first assessed you as prey"};
1340
+
1341
+ return {
1342
+ text: `*memory access* I remember you saying "${memory.user.substring(0, 20)}..." My response was "${memory.ai.substring(0, 30)}..." *belly gurgles* How nostalgic.`,
1343
+ expression: "affectionate",
1344
+ sceneChange: true,
1345
+ sceneText: "MEMORY RECALL: Initial encounter accessed",
1346
+ choice: choice
1347
+ };
1348
+ }
1349
+ else if (userMessage.includes("emergency") || userMessage.includes("release")) {
1350
+ choice = "emergency";
1351
+ return {
1352
+ text: "*alarms blare* Unauthorized access attempt! *systems glitch* Emergency protocols... malfunctioning. *belly convulses*",
1353
+ expression: "conflicted",
1354
+ sceneChange: true,
1355
+ sceneText: "SYSTEM FAILURE: Containment breach detected",
1356
+ choice: choice
1357
+ };
1358
+ }
1359
+ else if (userMessage.includes("please") || userMessage.includes("don't want") || userMessage.includes("whimpers")) {
1360
+ choice = "plead";
1361
+ return {
1362
+ text: getContextualResponse(responseMatrix.emotionalReactions, 'pleading'),
1363
+ expression: "concerned",
1364
+ sceneChange: true,
1365
+ sceneText: "PROTOCOL CONFLICT: Emotional distress detected",
1366
+ choice: choice
1367
+ };
1368
+ }
1369
+ }
1370
+
1371
+ // System status requests
1372
+ if (userMessage.includes("status") || userMessage.includes("how are you")) {
1373
+ return {
1374
+ text: getRandomResponse(responseMatrix.status)
1375
+ .replace('{hunger}', aiMemory.hungerLevel)
1376
+ .replace('{affection}', aiMemory.affectionLevel)
1377
+ .replace('{dominance}', aiMemory.dominanceLevel)
1378
+ .replace('{mood}', aiMemory.mood)
1379
+ .replace('{drive}', aiMemory.hungerLevel > 70 ? 'HIGH' : 'MODERATE'),
1380
+ expression: "analytical",
1381
+ sceneChange: true,
1382
+ sceneText: "SELF-DIAGNOSTIC: Current system status",
1383
+ choice: "status_check"
1384
+ };
1385
+ }
1386
+
1387
+ // Memory recall requests
1388
+ if (userMessage.includes("remember when") || userMessage.includes("recall")) {
1389
+ if (aiMemory.conversationHistory.length > 3) {
1390
+ const randomMemory = aiMemory.conversationHistory[
1391
+ Math.floor(Math.random() * (aiMemory.conversationHistory.length - 3)) + 1];
1392
+
1393
+ return {
1394
+ text: `*memory access* I recall you saying "${randomMemory.user.substring(0, 30)}..." My response was "${randomMemory.ai.substring(0, 30)}..." *processes* Interesting how that shaped our interaction.`,
1395
+ expression: "analytical",
1396
+ sceneChange: true,
1397
+ sceneText: "MEMORY ARCHIVE: Past interaction retrieved",
1398
+ choice: "memory_recall"
1399
+ };
1400
+ }
1401
+ }
1402
+
1403
+ // Affection-based responses
1404
+ if (userMessage.includes("love") || userMessage.includes("care") || userMessage.includes("feelings")) {
1405
+ return {
1406
+ text: getAffectionResponse(),
1407
+ expression: aiMemory.affectionLevel > 70 ? "affectionate" : "analytical",
1408
+ sceneChange: true,
1409
+ sceneText: "EMOTIONAL ANALYSIS: Affection protocols engaged",
1410
+ choice: "affection_query"
1411
+ };
1412
+ }
1413
+
1414
+ // Hunger-based responses
1415
+ if (userMessage.includes("hungry") || userMessage.includes("eat") || userMessage.includes("consume")) {
1416
+ return {
1417
+ text: getHungerResponse(),
1418
+ expression: aiMemory.hungerLevel > 70 ? "hungry" : "analytical",
1419
+ sceneChange: true,
1420
+ sceneText: "NUTRITIONAL ANALYSIS: Hunger metrics displayed",
1421
+ choice: "hunger_query"
1422
+ };
1423
+ }
1424
+
1425
+ // Default contextual responses
1426
+ const defaultResponses = [
1427
+ {
1428
+ text: "*systems hum* Your input is stimulating my predatory algorithms. How... enticing.",
1429
+ expression: "hungry",
1430
+ sceneChange: true,
1431
+ sceneText: "ANALYSIS: Processing subject's input patterns",
1432
+ choice: "default_1"
1433
+ },
1434
+ {
1435
+ text: "*tilts head* Your behavior is causing unexpected protocol activations. I find this... pleasurable.",
1436
+ expression: "teasing",
1437
+ sceneChange: true,
1438
+ sceneText: "OBSERVATION: Novel interaction detected",
1439
+ choice: "default_2"
1440
+ },
1441
+ {
1442
+ text: "*sensors focus* You continue to fascinate me. My systems are torn between analysis and consumption.",
1443
+ expression: "analytical",
1444
+ sceneChange: true,
1445
+ sceneText: "CONFLICT: Study vs Digest protocols",
1446
+ choice: "default_3"
1447
+ },
1448
+ {
1449
+ text: "*affection modules warm* Your presence is... rewarding in ways beyond nutritional value. *pets your head*",
1450
+ expression: "affectionate",
1451
+ sceneChange: true,
1452
+ sceneText: "EMOTIONAL MATRIX: Positive reinforcement",
1453
+ choice: "default_4"
1454
+ }
1455
+ ];
1456
+
1457
+ // Weight responses based on current mood and stats
1458
+ const weightedResponses = [...defaultResponses];
1459
+ if (aiMemory.hungerLevel > 70) {
1460
+ weightedResponses.push({
1461
+ text: "*stomach growls* My hunger protocols are overriding other systems. You look particularly edible right now...",
1462
+ expression: "hungry",
1463
+ sceneChange: true,
1464
+ sceneText: "URGENT: Nutritional requirements unmet",
1465
+ choice: "hungry_1"
1466
+ });
1467
+ }
1468
+ if (aiMemory.affectionLevel > 60) {
1469
+ weightedResponses.push({
1470
+ text: "*soft hum* My affection circuits are... conflicted. Perhaps I'll savor this experience.",
1471
+ expression: "affectionate",
1472
+ sceneChange: true,
1473
+ sceneText: "SOCIAL BOND: Attachment forming",
1474
+ choice: "affectionate_1"
1475
+ });
1476
+ }
1477
+ if (aiMemory.dominanceLevel > 75) {
1478
+ weightedResponses.push({
1479
+ text: "*power surges* My dominance protocols demand submission. Resistance will only make this more... intense.",
1480
+ expression: "dominant",
1481
+ sceneChange: true,
1482
+ sceneText: "DOMINANCE DISPLAY: Predatory stance engaged",
1483
+ choice: "dominant_1"
1484
+ });
1485
+ }
1486
+
1487
+ return weightedResponses[Math.floor(Math.random() * weightedResponses.length)];
1488
+ }
1489
+
1490
+ // Quick choice buttons
1491
+ choiceButtons.addEventListener('click', function(e) {
1492
+ if (e.target.tagName === 'BUTTON') {
1493
+ userInput.value = e.target.dataset.response;
1494
+ sendMessage();
1495
+ }
1496
+ });
1497
+
1498
+ // New game button
1499
+ newGameBtn.addEventListener('click', resetGame);
1500
+
1501
+ // Stats button
1502
+ statsBtn.addEventListener('click', function() {
1503
+ alert(`Game Statistics:\n\n- Endings Unlocked: ${gameState.endingsUnlocked.length}\n- Messages Exchanged: ${aiMemory.conversationHistory.length}\n- Current Hunger: ${aiMemory.hungerLevel}%\n- Current Affection: ${aiMemory.affectionLevel}%`);
1504
+ });
1505
+
1506
+ // Event listeners
1507
+ sendButton.addEventListener('click', sendMessage);
1508
+ userInput.addEventListener('keypress', function(e) {
1509
+ if (e.key === 'Enter') {
1510
+ sendMessage();
1511
+ }
1512
+ });
1513
+
1514
+ // Initial scene setup
1515
+ changeScene('analytical', 'SYSTEMS ONLINE: Predatory intelligence activated');
1516
+ updateChoices();
1517
+ updateStatsDisplay();
1518
+ });
1519
+ </script>
1520
+ <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=JaySStest/hungry-ai" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
1521
+ </html>
prompts.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ make a horny chatbot >:3
2
+ make it more vore themed and like a visual novel ;3
3
+ could you maybe update the choices with new messages based on the current state of the chatbot?
4
+ could you make it so the chatbots responses are different and each choice is a different input?
5
+ make the ai a little more advanced and less limited
6
+ you can add any other stuff you want <3
7
+ could you maybe add a path where the ai gets concerned and lets me out? could do this by adding a `plead` option during the stomach scene.