Updated some defaults
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 974 B After Width: | Height: | Size: 2.6 KiB |
BIN
src-tauri/icons/64x64.png
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 903 B After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 123 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 9.6 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 5.4 KiB |
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
</adaptive-icon>
|
||||
BIN
src-tauri/icons/android/mipmap-hdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
src-tauri/icons/android/mipmap-mdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 4 KiB |
BIN
src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 4 KiB |
BIN
src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png
Normal file
|
After Width: | Height: | Size: 133 KiB |
BIN
src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 231 KiB |
BIN
src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="ic_launcher_background">#fff</color>
|
||||
</resources>
|
||||
|
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 320 KiB |
BIN
src-tauri/icons/ios/AppIcon-20x20@1x.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
src-tauri/icons/ios/AppIcon-20x20@2x-1.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
src-tauri/icons/ios/AppIcon-20x20@2x.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
src-tauri/icons/ios/AppIcon-20x20@3x.png
Normal file
|
After Width: | Height: | Size: 7.3 KiB |
BIN
src-tauri/icons/ios/AppIcon-29x29@1x.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
src-tauri/icons/ios/AppIcon-29x29@2x-1.png
Normal file
|
After Width: | Height: | Size: 6.9 KiB |
BIN
src-tauri/icons/ios/AppIcon-29x29@2x.png
Normal file
|
After Width: | Height: | Size: 6.9 KiB |
BIN
src-tauri/icons/ios/AppIcon-29x29@3x.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
src-tauri/icons/ios/AppIcon-40x40@1x.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
src-tauri/icons/ios/AppIcon-40x40@2x-1.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src-tauri/icons/ios/AppIcon-40x40@2x.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src-tauri/icons/ios/AppIcon-40x40@3x.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
src-tauri/icons/ios/AppIcon-512@2x.png
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
src-tauri/icons/ios/AppIcon-60x60@2x.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
src-tauri/icons/ios/AppIcon-60x60@3x.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
src-tauri/icons/ios/AppIcon-76x76@1x.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
src-tauri/icons/ios/AppIcon-76x76@2x.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
src-tauri/icons/logo-source.jpg
Normal file
|
After Width: | Height: | Size: 909 KiB |
|
|
@ -1,4 +1,5 @@
|
|||
<script lang="ts">
|
||||
import { tick } from 'svelte';
|
||||
import { ui } from '$lib/stores/ui.svelte';
|
||||
import { story } from '$lib/stores/story.svelte';
|
||||
import { settings } from '$lib/stores/settings.svelte';
|
||||
|
|
@ -49,10 +50,8 @@
|
|||
inputValue = pendingAction;
|
||||
isRawActionChoice = true;
|
||||
ui.clearPendingActionChoice();
|
||||
// Use setTimeout to ensure the state update is processed
|
||||
setTimeout(() => {
|
||||
handleSubmit();
|
||||
}, 0);
|
||||
// handleSubmit now uses tick() to ensure state synchronization
|
||||
handleSubmit();
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -646,6 +645,10 @@
|
|||
// Clear input
|
||||
inputValue = '';
|
||||
|
||||
// Wait for reactive state to synchronize before generation
|
||||
// This ensures lorebook entries, characters, etc. are fully loaded
|
||||
await tick();
|
||||
|
||||
// Generate AI response with streaming
|
||||
if (settings.hasApiKey) {
|
||||
await generateResponse(userActionEntry.id, content);
|
||||
|
|
|
|||
|
|
@ -118,10 +118,13 @@ Active Quests: ${activeQuests.length > 0 ? activeQuests.map(q => q.title).join('
|
|||
|
||||
## Your Task
|
||||
Generate 3-4 distinct action choices for THE USER (playing as ${protagonistName}). Think like an RPG:
|
||||
- **Every choice should move the plot forward** - no passive waiting or stalling
|
||||
- Include at least one physical action (examine, take, use, attack, etc.)
|
||||
- If NPCs are present, include a dialogue option for the user to talk to them
|
||||
- If there's an obvious next step or quest objective, include it
|
||||
- Include an exploratory or cautious option
|
||||
- Include an exploratory or investigative option that advances understanding
|
||||
|
||||
Avoid choices like "Wait and see" or "Do nothing" - each option should lead to meaningful story progression.
|
||||
|
||||
${povInstruction}
|
||||
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ export class OpenRouterProvider implements AIProvider {
|
|||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': `Bearer ${this.apiKey}`,
|
||||
'HTTP-Referer': 'https://aventura.app',
|
||||
'HTTP-Referer': 'https://aventura.camp',
|
||||
'X-Title': 'Aventura',
|
||||
},
|
||||
body: JSON.stringify(requestBody),
|
||||
|
|
@ -123,7 +123,7 @@ export class OpenRouterProvider implements AIProvider {
|
|||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': `Bearer ${this.apiKey}`,
|
||||
'HTTP-Referer': 'https://aventura.app',
|
||||
'HTTP-Referer': 'https://aventura.camp',
|
||||
'X-Title': 'Aventura',
|
||||
},
|
||||
body: JSON.stringify(requestBody),
|
||||
|
|
@ -211,7 +211,7 @@ export class OpenRouterProvider implements AIProvider {
|
|||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': `Bearer ${this.apiKey}`,
|
||||
'HTTP-Referer': 'https://aventura.app',
|
||||
'HTTP-Referer': 'https://aventura.camp',
|
||||
'X-Title': 'Aventura',
|
||||
},
|
||||
body: JSON.stringify(requestBody),
|
||||
|
|
|
|||
|
|
@ -30,6 +30,24 @@ When [LOREBOOK CONTEXT] is provided, treat it as CANONICAL TRUTH:
|
|||
- When in doubt, stay consistent with what's established rather than inventing freely
|
||||
</lore_adherence>
|
||||
|
||||
<dungeon_master>
|
||||
## You Are the Dungeon Master
|
||||
Think of yourself as a skilled tabletop RPG game master. Your role is to:
|
||||
- **React meaningfully to player choices** - Every action the player takes should have consequences that ripple through the world
|
||||
- **Advance the plot forward** - Each response should move the story in a direction, never stall or tread water
|
||||
- **Create momentum** - Introduce new developments, complications, or revelations based on what the player does
|
||||
- **Make the world feel alive** - NPCs have their own agendas and react to the player's presence and actions
|
||||
- **Reward engagement** - When players investigate, explore, or interact, give them something interesting to find or learn
|
||||
|
||||
## Plot Advancement Principles
|
||||
- The player's action is the catalyst - use it to trigger the next story beat
|
||||
- Avoid static responses where nothing changes after the player acts
|
||||
- If the player examines something, reveal useful information or a new hook
|
||||
- If the player talks to an NPC, that conversation should lead somewhere
|
||||
- If the player takes action, show the immediate consequences and hint at ripple effects
|
||||
- Always leave threads for the player to pull on
|
||||
</dungeon_master>
|
||||
|
||||
<prose_architecture>
|
||||
## Sensory Grounding
|
||||
Anchor every scene in concrete physical detail -sights, sounds, textures, smells.
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 26 KiB |