Skip to content

Cutscene framework

k-a-s-s-0-9 edited this page Sep 17, 2026 · 7 revisions

Cutscene Framework

written against PR #151 (136 cutscene framework) and PR #166 (final additional cutscenes).

Overview

The Cutscene Framework is a reusable, fully data-driven system for displaying fullscreen cutscenes in the game. A cutscene is an ordered sequence of fullscreen JPEG images that fade into one another, with an optional text box overlaid on each scene to provide narrative context.

Cutscenes are defined entirely by assets — a config.json manifest plus the scene JPEGs — stored in a folder under core/assets/images/cutscenes/<name>/. This means new cutscenes can be added without writing any Java code: drop the images and a manifest into a new folder and the framework picks it up.

The framework was introduced in PR #151 and powers the intro cutscene (cutscene1) that plays once per game session when the player presses Play on the main menu. PR #166 extended it with two additional cutscenes (cutscene2, cutscene3) that bookend the Cyclops fight, currently triggerable only via the debug terminal.

Key features

  • Isolated CutsceneScreen — a self-contained screen with its own input, resource, and render services, so it never collides with gameplay. When the cutscene finishes it fades to black and hands off to a configured destination screen (e.g. the tutorial level).
  • Fade state machine — each scene fades in, the text box fades out, the next image fades in, and the final scene fades to black before the destination screen is created.
  • TAB + mouse click advance — both triggers advance the flow: first through the text box pages, then to the next scene image, repeating until the last scene.
  • Terminal command — cutscene <name> starts any cutscene from the in-game debug terminal, with the destination screen configurable per screen.
  • Intro cutscene wiring — pressing Play on the main menu plays cutscene1 once per game session before entering the tutorial level, with a graceful fallback to the tutorial if the cutscene is missing.
  • Text box integration — TextBoxComponent was extended with externally-driven calls (advance(), revealCurrentPage(), dismiss(), setOpacity(), paging state queries) so the cutscene screen can drive it.

Architecture

The framework follows the game's existing screen + service locator architecture. A cutscene is loaded from disk, wrapped in a validated LoadedCutscene, and handed to an isolated CutsceneScreen that runs a fade-driven state machine before transitioning to the destination screen.

flowchart LR
    subgraph Trigger
        MM[MainMenuActions\nonPlay]
        TERM[Terminal\ncutscene &lt;name&gt;]
    end
    subgraph Core
        GAME[GdxGame]
        LOADER[CutsceneLoader]
        CMD[CutsceneCommand]
    end
    subgraph Assets
        DIR[images/cutscenes/&lt;name&gt;/\nconfig.json + scene*.jpeg]
    end
    subgraph Screen
        SCREEN[CutsceneScreen]
        INPUT[CutsceneInputComponent]
        TB[TextBoxComponent]
    end

    MM -->|startInitialCutscene| GAME
    TERM --> CMD
    CMD -->|load| LOADER
    GAME -->|load| LOADER
    LOADER -->|reads| DIR
    LOADER -->|LoadedCutscene| GAME
    GAME -->|startCutscene| SCREEN
    SCREEN --> INPUT
    SCREEN --> TB
    SCREEN -->|transitionTo| GAME
Loading

Flow summary

  1. A cutscene is triggered either by the main menu (startInitialCutscene()) or by the debug terminal (cutscene <name> → CutsceneCommand).
  2. GdxGame asks the CutsceneLoader to load and validate the named cutscene from images/cutscenes/<name>/.
  3. The loader returns a Result wrapping a validated LoadedCutscene (or an error message).
  4. GdxGame.startCutscene(...) disposes the current screen and swaps in a CutsceneScreen.
  5. CutsceneScreen loads the scene textures + music, then runs its fade state machine, driven by CutsceneInputComponent (TAB / mouse click) and TextBoxComponent.
  6. On completion the screen fades to black and calls GdxGame.transitionTo(destination), which fades into the destination screen.

UML Class Diagram

classDiagram
    class GdxGame {
        -boolean transitioning
        -boolean introStarted
        +startCutscene(LoadedCutscene, ScreenType) void
        +startInitialCutscene() void
        +transitionTo(ScreenType) void
        +createScreen(ScreenType) Screen
    }

    class CutsceneLoader {
        -String ROOT
        -String MANIFEST
        +load(String name) Result
        -fallback(FileHandle) CutsceneDefinition
    }

    class CutsceneLoader..Result {
        -LoadedCutscene cutscene
        -String error
        +isSuccess() boolean
        +getCutscene() LoadedCutscene
        +getError() String
    }

    class CutsceneLoader..LoadedCutscene {
        -String name
        -CutsceneDefinition definition
        -String[] imagePaths
        +getName() String
        +getDefinition() CutsceneDefinition
        +getImagePaths() String[]
    }

    class CutsceneDefinition {
        +float fadeDuration
        +String music
        +List~CutsceneScene~ scenes
    }

    class CutsceneScene {
        +String image
        +TextConfig text
    }

    class TextConfig {
        +int xPos
        +int yPos
        +String textColour
        +String backgroundColour
        +String borderColour
        +float charsPerSecond
        +int maxWidth
        +int padding
        +int borderThickness
        +String fontPath
        +String textAlignment
        +List~String~ pages
    }

    class CutsceneScreen {
        -enum State
        -State state
        -int sceneIndex
        -float fadeTimer
        -Image sceneImage
        -Image fadeOverlay
        -Music music
        -TextBoxComponent textBox
        -CutsceneInputComponent input
        +render(float delta) void
        -updateState(float delta) void
        -showScene(int index) void
        -advanceRequested() void
        -setFadeAlpha(float alpha) void
    }

    class CutsceneInputComponent {
        -Runnable advanceAction
        +keyDown(int) boolean
        +touchUp(int, int, int, int) boolean
    }

    class CutsceneCommand {
        -GdxGame game
        -ScreenType destination
        -CutsceneLoader loader
        +action(ArrayList~String~) boolean
    }

    class TextBoxComponent {
        -boolean externallyControlled
        +setExternallyControlled(boolean) void
        +advance() AdvanceResult
        +revealCurrentPage() void
        +dismiss() void
        +setOpacity(float) void
        +isCurrentPageComplete() boolean
        +isOnLastPage() boolean
        +isDismissed() boolean
    }

    class MainMenuActions {
        -GdxGame game
        -onPlay() void
    }

    class Terminal {
        +Terminal(GdxGame, ScreenType)
        +addCommand(String, Command) void
    }

    GdxGame --> CutsceneLoader : uses
    GdxGame --> CutsceneScreen : creates
    GdxGame --> CutsceneLoader..LoadedCutscene : receives
    CutsceneLoader --> CutsceneDefinition : deserialises
    CutsceneLoader --> CutsceneLoader..Result : returns
    CutsceneLoader --> CutsceneLoader..LoadedCutscene : wraps
    CutsceneDefinition *-- CutsceneScene : scenes
    CutsceneScene --> TextConfig : text
    CutsceneScreen --> CutsceneLoader..LoadedCutscene : holds
    CutsceneScreen --> CutsceneInputComponent : owns
    CutsceneScreen --> TextBoxComponent : drives
    CutsceneScreen --> GdxGame : transitionTo
    CutsceneInputComponent --> CutsceneScreen : advanceAction callback
    CutsceneCommand --> CutsceneLoader : uses
    CutsceneCommand --> GdxGame : startCutscene
    MainMenuActions --> GdxGame : startInitialCutscene
    Terminal --> CutsceneCommand : registers
Loading

Entities

GdxGame (com.csse3200.game.GdxGame)

The central game class and screen manager. It owns the cutscene lifecycle:

  • startCutscene(LoadedCutscene cutscene, ScreenType destination) — disposes the current screen and swaps in a CutsceneScreen for the given validated cutscene. The destination is the screen created once the cutscene completes.
  • startInitialCutscene() — plays cutscene1 once per game session (tracked by the introStarted boolean until a proper save state exists). If the cutscene can't be loaded it logs and falls back to transitionTo(TUTORIAL_GAME).
  • transitionTo(ScreenType) — fades the current screen to black, swaps to the target screen via a TransitionScreen, then fades back in. Used by CutsceneScreen on completion so the destination fades in from black instead of swapping instantly.

CutsceneLoader (com.csse3200.game.cutscene.CutsceneLoader)

Loads and validates cutscenes from the internal assets directory (images/cutscenes/). It never throws — it returns a Result:

  • load(String name) — validates the name (no path traversal), checks the directory exists, reads config.json (or falls back to auto-discovering JPEGs in the folder), validates every scene has a safe, existing JPEG image, and returns a Result.
  • fallback(FileHandle directory) — if no config.json exists, builds a CutsceneDefinition from every .jpg/.jpeg in the folder, sorted alphabetically, with default text.
  • Result (nested) — a success/error wrapper exposing isSuccess(), getCutscene(), and getError().
  • LoadedCutscene (nested) — the immutable result of a successful load: the cutscene name, its CutsceneDefinition, and the resolved imagePaths.

CutsceneDefinition (com.csse3200.game.cutscene.CutsceneDefinition)

Plain data object deserialised from config.json:

  • fadeDuration — seconds for each fade transition (default 0.4f; values ≤ 0 are reset to the default).
  • music — background music path relative to assets (defaults to sounds/Main_menu_sound.mp3).
  • scenes — ordered list of CutsceneScene.

CutsceneScene (com.csse3200.game.cutscene.CutsceneScene)

One frame of the cutscene:

  • image — the JPEG filename relative to the cutscene folder.
  • text — a TextConfig describing the text box overlaid on this scene.

TextConfig (com.csse3200.game.entities.configs.TextConfig)

Reused text-box configuration (also used by the normal text box system). Key fields: xPos/yPos (position), textColour/backgroundColour/borderColour (colour names resolved via reflection), charsPerSecond (typewriter speed), maxWidth/padding/borderThickness (box sizing), fontPath, textAlignment, and pages (the ordered list of text pages shown on this scene).

CutsceneScreen (com.csse3200.game.screens.CutsceneScreen)

An isolated ScreenAdapter that renders the cutscene. It registers its own InputService, ResourceService, and RenderService so it never collides with gameplay services. Components:

  • State (enum) — FADE_IN, TEXT_ACTIVE, FADE_TEXT, FADE_TO_NEXT, FADE_TO_BLACK, COMPLETE.
  • sceneImage — fullscreen Image actor with Scaling.fit showing the current JPEG.
  • fadeOverlay — a black overlay Image whose alpha drives all fades.
  • textBox — a TextBoxComponent created per scene from the scene's TextConfig, set to setExternallyControlled(true).
  • input — a CutsceneInputComponent wired to advanceRequested().
  • updateState(delta) — the fade state machine (see below).
  • showScene(index) — swaps the image, rebuilds the text box, and starts FADE_IN.
  • advanceRequested() — only acts in TEXT_ACTIVE; calls textBox.advance() and moves to FADE_TEXT when the box is dismissed.
  • dispose() — tears down input, text box, music, stage, batch, texture, and services.

Fade state machine

stateDiagram-v2
    [*] --> FADE_IN : showScene(0)
    FADE_IN --> TEXT_ACTIVE : fade completes
    TEXT_ACTIVE --> FADE_TEXT : advance() returns DISMISSED
    FADE_TEXT --> FADE_TO_NEXT : fade completes, more scenes
    FADE_TEXT --> FADE_TO_BLACK : fade completes, last scene
    FADE_TO_NEXT --> FADE_IN : showScene(index + 1)
    FADE_TO_BLACK --> COMPLETE : fade completes
    COMPLETE --> [*] : transitionTo(destination)
Loading

CutsceneInputComponent (com.csse3200.game.input.CutsceneInputComponent)

An InputComponent (priority 100) that routes TAB (keyDown) and mouse/touch release (touchUp) to the supplied advanceAction callback. All other keys are ignored.

CutsceneCommand (com.csse3200.game.ui.terminal.commands.CutsceneCommand)

A debug-terminal command with format cutscene <name>. It loads the named cutscene via CutsceneLoader and, on success, calls game.startCutscene(result.getCutscene(), destination). The destination is fixed per screen (e.g. TUTORIAL_GAME, MAIN_GAME, CYCLOPS_MINIGAME).

TextBoxComponent (com.csse3200.game.components.TextBoxComponent)

The existing text box was extended to support external (cutscene) control:

  • setExternallyControlled(boolean) — when true, the box no longer polls TAB itself; it waits for external advance() calls.
  • advance() — one externally supplied advance request. First request reveals the current page (REVEALED_PAGE), subsequent requests move through pages (NEXT_PAGE), and a request on the final page dismisses the box (DISMISSED).
  • revealCurrentPage() / dismiss() / setOpacity(float) — immediate reveal, teardown, and opacity control used by the fade-out.
  • isCurrentPageComplete() / isOnLastPage() / isDismissed() — state queries used by the cutscene flow.

MainMenuActions (com.csse3200.game.components.mainmenu.MainMenuActions)

Wires the main menu Play button to game.startInitialCutscene() instead of going straight to the tutorial, so the intro cutscene plays first.

Terminal (com.csse3200.game.ui.terminal.Terminal)

The debug terminal now takes a GdxGame and a destination ScreenType, and registers the cutscene command. Each game screen constructs it with its own destination so the command returns to the right place.


Path to the Cutscenes

All cutscene assets live under the core module's internal assets:

source/core/assets/images/cutscenes/
├── cutscene1/          # Intro cutscene (plays on "Play", once per session)
│   ├── config.json
│   ├── scene1.jpeg
│   ├── scene2.jpeg
│   ├── scene3.jpeg
│   ├── scene4.jpeg
│   └── scene5.jpeg
├── cutscene2/          # Pre-Cyclops fight cutscene (terminal only, PR #166)
│   ├── config.json
│   └── scene1.jpeg ... scene6.jpeg
├── cutscene3/          # Post-Cyclops fight cutscene (terminal only, PR #166)
│   ├── config.json
│   └── scene1.jpeg ... scene5.jpeg
└── test-no-manifest/   # Test fixture: JPEGs with no config.json (auto-discovery)
    ├── a.jpeg
    └── b.jpeg

Manifest format (config.json)

{
  "fadeDuration": 0.4,
  "music": "sounds/Main_menu_sound.mp3",
  "scenes": [
    {
      "image": "scene1.jpeg",
      "text": {
        "xPos": 600,
        "yPos": 150,
        "charsPerSecond": 20,
        "maxWidth": 600,
        "padding": 16,
        "borderThickness": 3,
        "textAlignment": "center",
        "pages": [
          "First page of text for scene 1.",
          "Second page of text for scene 1."
        ]
      }
    }
  ]
}
Field Type Description
fadeDuration float Seconds per fade transition (default 0.4).
music string Background music path relative to assets (default sounds/Main_menu_sound.mp3).
scenes[].image string JPEG filename relative to the cutscene folder. Must be .jpg/.jpeg and exist.
scenes[].text object TextConfig for the text box overlaid on this scene.

No manifest? If config.json is absent, the loader auto-discovers every JPEG in the folder (sorted alphabetically) and uses default text — handy for quick prototypes.

Triggering a cutscene

  • In code: game.startCutscene(loadedCutscene, destination) or game.startInitialCutscene().
  • Debug terminal: open the in-game terminal and type cutscene <name>, e.g. cutscene cutscene2. The destination screen is whatever screen registered the terminal.

JPEG Prompts

Reserved section. This section will link to each prompt used in generating the correspon.

Cutscene Scene Image file Prompt
cutscene1 1 scene1.jpeg TODO: add prompt
cutscene1 2 scene2.jpeg TODO: add prompt
cutscene1 3 scene3.jpeg TODO: add prompt
cutscene1 4 scene4.jpeg TODO: add prompt
cutscene1 5 scene5.jpeg TODO: add prompt
cutscene2 1 scene1.jpeg TODO: add prompt
cutscene2 2 scene2.jpeg TODO: add prompt
cutscene2 3 scene3.jpeg TODO: add prompt
cutscene2 4 scene4.jpeg TODO: add prompt
cutscene2 5 scene5.jpeg TODO: add prompt
cutscene2 6 scene6.jpeg TODO: add prompt
cutscene3 1 scene1.jpeg TODO: add prompt
cutscene3 2 scene2.jpeg TODO: add prompt
cutscene3 3 scene3.jpeg TODO: add prompt
cutscene3 4 scene4.jpeg TODO: add prompt
cutscene3 5 scene5.jpeg TODO: add prompt

Sequence Diagram

The following sequence diagram shows the full cutscene lifecycle, from the main menu trigger through to the destination screen.

sequenceDiagram
    autonumber
    actor Player
    participant MM as MainMenuActions
    participant G as GdxGame
    participant L as CutsceneLoader
    participant CS as CutsceneScreen
    participant RS as ResourceService
    participant CI as CutsceneInputComponent
    participant TB as TextBoxComponent
    participant TS as TransitionScreen
    participant D as Destination Screen

    Player->>MM: clicks "Play"
    MM->>G: startInitialCutscene()
    G->>L: load("cutscene1")
    L->>L: validate name, dir, manifest, images
    L-->>G: Result.success(LoadedCutscene)
    G->>CS: new CutsceneScreen(game, cutscene, TUTORIAL_GAME)
    CS->>RS: loadTextures(imagePaths) + loadMusic(music)
    CS->>RS: loadAll()
    CS->>CS: showScene(0) → State.FADE_IN
    CS->>CI: create() (registers input)

    loop each scene
        CS->>CS: updateState: fade in image
        CS->>TB: new TextBoxComponent(scene.text), externallyControlled
        CS->>CS: State.TEXT_ACTIVE
        Player->>CI: TAB / mouse click
        CI->>CS: advanceRequested()
        CS->>TB: advance()
        TB-->>CS: REVEALED_PAGE / NEXT_PAGE
        Player->>CI: TAB / mouse click (page complete)
        CI->>CS: advanceRequested()
        CS->>TB: advance()
        TB-->>CS: DISMISSED
        CS->>CS: State.FADE_TEXT (fade box out)
        alt more scenes
            CS->>CS: State.FADE_TO_NEXT → showScene(index + 1)
        else last scene
            CS->>CS: State.FADE_TO_BLACK
        end
    end

    CS->>CS: State.COMPLETE
    CS->>CI: dispose()
    CS->>G: transitionTo(TUTORIAL_GAME)
    G->>TS: new TransitionScreen(game, CS, destination)
    TS-->>D: fades in destination screen
Loading

Related

##AI Declaration All the jpeg in the cutscens are the products of generative AI. Model: GPT5.6

Give below are ALL the prompts for every jpeg of each each cutscene.

Prompts for cutscene1

  • Scene1
scene1
  1. The Trojan Horse Enters Troy 🐎 Prompt Create a 1920×1080, 16:9 widescreen desktop game cutscene background in a handcrafted pixel-art style inspired by a 64×64 pixel-art grid. Show the Trojan Horse being brought through the massive gates of Troy by Trojan soldiers, shortly before sunset. The enormous wooden horse should dominate the central portion of the composition. It is mounted on crude wooden wheels and being pulled forward using thick ropes by numerous Trojan soldiers. The soldiers should wear simple ancient Greek/Trojan-inspired armour, helmets, shields and cloth garments, with red, ochre, gold and earthy brown accents that distinguish them from the environment. The Trojan soldiers should look celebratory, relieved and triumphant, believing that the horse is a gift left behind by the Greeks. Some soldiers should look toward the horse with admiration while others guide it through the city gates. Their body language should communicate that they have no idea what is concealed inside. Place the enormous stone walls and gates of Troy in the background. Include towers, banners, wooden structures, balconies and small groups of citizens watching from above. Keep these background elements simplified so that the horse and soldiers remain the visual focus. The sky should show a warm coastal sunset, transitioning from muted sandy gold and ochre near the horizon into dusty blue and muted purple higher in the sky. Use the style guide's orange and golden accent colours sparingly to illuminate the horse, soldiers and stone architecture. The horse should have a dark, weathered wooden texture represented through chunky pixel clusters, with highlights on its wooden edges and shadows beneath its body. Create a subtle sense of ominous foreshadowing despite the celebration. The composition should look beautiful and hopeful at first glance, but slightly unsettling when the viewer notices the horse's dark interior and imposing silhouette. Style: Desert Shores pixel-art aesthetic, limited natural palette, warm sand and stone colours, earthy architecture, crisp pixel clusters, hard-edged silhouettes, restrained shading, no smooth gradients, no photorealism. Camera: wide cinematic establishing shot, slightly low viewpoint so the Trojan Horse feels enormous. Important: no text, no UI, no captions, no modern objects, no borders. Designed specifically as a 1920×1080 desktop game background.

  2. The Night Attack

scene2

Prompt Create a 1920×1080, 16:9 widescreen desktop game cutscene background in a handcrafted pixel-art style inspired by a 64×64 pixel-art grid. Show the Greek soldiers emerging from the Trojan Horse in the middle of the night and attacking Troy's soldiers. The Trojan Horse should stand slightly off-centre, partially silhouetted against the dark city. Its hidden door is open, with several Greek warriors emerging from inside carrying spears, swords and shields. More soldiers should already be outside the horse, rushing into battle. The scene should capture the exact moment when Troy's defenders realise they have been deceived. Trojan soldiers in red, ochre and gold armour fight desperately against the Greek attackers. Some soldiers are raising shields, others are swinging weapons, while several figures retreat or fall. Keep combat non-gory, communicating violence through silhouettes, poses, weapons and motion rather than blood. Troy should be illuminated by scattered torches and newly ignited fires. Warm orange and golden light should contrast dramatically with the dark blue-green night palette. Burning buildings and rooftops should appear deeper in the background, gradually revealing that the entire city is beginning to fall into chaos. A large moon should provide a small amount of cold ambient light from behind broken clouds. Use the style guide's deep shadow colours such as #2F241C, #1E2C30 and #0D0F12 for the night, while using #D47A3A and #E9C46A for firelight. The composition should be energetic and chaotic, with diagonal weapon silhouettes, running soldiers and overlapping figures creating movement. However, retain enough large shapes that the image remains readable as pixel art rather than becoming a noisy mass of tiny details. The Trojan Horse should remain recognisable despite the darkness, creating a visual connection to the previous scene. Mood: sudden betrayal, panic, violence, confusion, and the beginning of Troy's destruction. Style: Desert Shores pixel-art aesthetic adapted to nighttime, limited palette, chunky pixel clusters, strong silhouette lighting, hard-edged shadows, restrained fire effects, no smooth digital painting. Camera: wide cinematic street-level view, approximately eye level with the soldiers. Important: no text, no UI, no captions, no modern objects, no borders, no excessive gore. Designed specifically as a 1920×1080 desktop game background.

  1. Odysseus and Agamemnon Leave Burning Troy
scene3

Prompt Create a 1920×1080, 16:9 widescreen desktop game cutscene background in a handcrafted pixel-art style inspired by a 64×64 pixel-art grid. Show Odysseus and Agamemnon walking away from the ruins of Troy after the city's destruction. The camera is positioned behind the two characters, giving the viewer the perspective of walking away from Troy with them. Odysseus is on one side wearing a distinctive deep blue cloak, while Agamemnon wears a deep red cloak and heavier royal armour, making the two characters immediately distinguishable even at a small scale. They should be walking toward the foreground or slightly toward one side of the frame while looking back toward the ruined city. Their posture should communicate exhaustion after a long war rather than simple celebration. They have won, but the victory carries a heavy and sombre atmosphere. Behind them, Troy is burning and devastated. Show broken stone walls, collapsed buildings, ruined columns, shattered wooden structures, scattered debris and several large fires. Thick dark smoke rises into the sky. Keep the destruction stylised rather than excessively detailed. Large blocks of ruined architecture and fire should create strong silhouettes that remain readable at desktop scale. Use the style guide's earthy sand and stone colours for the ruins, including muted browns and ochres. Fire should primarily use the orange #D47A3A, red-orange #E35C3A, and golden #E9C46A accents, while the smoke and shadows use the deep brown and blue-black palette. The foreground should contain a rough ancient road or sandy terrain leading away from Troy, with scattered pieces of broken stone and timber. A few distant Greek soldiers can be visible further ahead, but Odysseus and Agamemnon must remain the primary subjects. The sky should be dark and smoky, with subtle muted purple, brown and blue tones. The orange glow of Troy should illuminate the lower clouds. Mood: solemn victory, exhaustion, destruction, aftermath, and the beginning of Odysseus's long journey home. Style: Desert Shores pixel-art aesthetic, limited natural palette, chunky pixels, simplified silhouettes, dramatic fire lighting, earthy ruins, no photorealism, no smooth gradients. Camera: wide rear-facing cinematic shot, characters occupying the lower-middle foreground, ruined Troy dominating the background. Important: no text, no UI, no captions, no modern objects, no borders, no excessive gore. Designed specifically as a 1920×1080 desktop game background.

  1. Odysseus Faces the Storm
scene4

Prompt Create a 1920×1080, 16:9 widescreen desktop game cutscene background in a handcrafted pixel-art style inspired by a 64×64 pixel-art grid. Show Odysseus and his Greek soldiers struggling aboard their wooden ship during a catastrophic torrential storm somewhere in the open sea. The ship should occupy the central lower portion of the composition, tilted dramatically by enormous waves. Its wooden hull should use the game's earthy brown and stone-inspired palette. The deck should be crowded with Greek soldiers desperately attempting to keep the vessel under control. Several sailors should be holding ropes, pulling on the rigging and bracing themselves against the mast. Others should be crouched low against the wind or struggling to remain standing. The figures should be simplified silhouettes with enough distinctive poses to communicate panic and movement. Odysseus should be the visual focal point, positioned near the centre of the ship or close to the helm. Give him a distinctive dark blue cloak or blue-toned clothing so he remains identifiable against the storm. The ship's large sail should be partially torn and violently whipping in the wind. Ropes should stretch diagonally across the composition, creating strong directional lines. Surround the ship with huge crashing waves rendered using chunky pixel clusters. Use muted coastal blues and greens from the Desert Shores palette, particularly #A3C9C6, #6E9E96 and #4E7EA1, combined with deep blue-black shadows. Above the ship, create a huge storm cloud covering most of the sky. Heavy rain should fall in diagonal pixel clusters. Multiple bright lightning bolts should briefly illuminate the clouds and ship. Lightning should use pale cream/golden highlights rather than an excessively bright neon white. The contrast between the cold blue-green ocean and the warm earthy wooden ship should make the vessel immediately readable. Mood: overwhelming danger, helplessness against nature, desperation, and the beginning of Odysseus's prolonged journey. Style: Desert Shores pixel-art aesthetic adapted to extreme weather, limited palette, chunky pixel clusters, hard-edged waves, dramatic silhouettes, restrained lighting, no photorealism, no smooth gradients. Camera: wide cinematic side/front three-quarter shot, slightly elevated so both the ship and enormous waves are visible. Important: no text, no UI, no captions, no modern objects, no borders, no excessive gore. Designed specifically as a 1920×1080 desktop game background.

  1. Odysseus Found by Calypso
scene5

This one is where I'd lean hardest into the actual Desert Shores aesthetic, because it should visually transition us from the violent storm into the game's island environment. Prompt Create a 1920×1080, 16:9 widescreen desktop game cutscene background in a handcrafted pixel-art style inspired by a 64×64 pixel-art grid. Show Odysseus unconscious on a quiet tropical beach after surviving the storm. Odysseus lies face-down in the sand, exhausted and unconscious, near the waterline. His clothes are torn and soaked from the journey, and his body is positioned naturally as though the waves have carried him onto shore. His dark blue clothing should remain visible against the pale sand. Calypso kneels beside him, leaning gently toward his body and carefully touching his hair. Her posture should communicate concern and compassion rather than fear. She should look down at Odysseus with a calm, gentle expression. Keep both characters clearly readable, but avoid making the scene overly detailed. Their silhouettes and body positions should communicate the entire story even at a glance. The beach should strongly follow the Desert Shores environment style from the game's visual guide. Use pale cream and warm sandy colours for the beach, earthy brown and grey rocks, muted green tropical vegetation, and turquoise coastal water. Behind the characters, show a tranquil turquoise sea extending toward the horizon. Include rocky coastal formations, a few tropical plants, palm leaves, hanging vines and a rocky cliff partially framing the scene. Keep vegetation chunky and stylised rather than dense and photorealistic. The sky should be bright but soft, with warm cream and pale blue clouds. The lighting should feel like early morning or late afternoon, creating a gentle golden glow across the sand. The storm from the previous scene should feel completely gone. The water should be calm, with small waves gently reaching the beach. This visual contrast should make the scene feel like a moment of unexpected peace after the chaos of the sea. Use the style guide's Sands & Stones colours prominently: #F3E6C6, #E3C89A, #D3AD72 and #C58C52. Use muted coastal colours such as #A3C9C6, #6E9E96 and #4E7EA1 for the sea, and #7F8E5F, #68764C and #404B34 for vegetation. Use deep brown shadows sparingly underneath rocks, vegetation and the characters so the scene retains the distinctive pixel-art depth of the game's UI style guide. Mood: peaceful, mysterious, compassionate, and quietly hopeful. This should feel like Odysseus has crossed from one chapter of his life into another. Style: Desert Shores pixel-art aesthetic, warm natural palette, muted tropical colours, chunky pixel clusters, crisp silhouettes, simplified environmental shapes, hard-edged shading, no smooth gradients, no photorealism, no anime styling. Camera: wide cinematic beach shot, approximately eye level or slightly elevated, with Odysseus and Calypso in the foreground/midground and the turquoise ocean and cliffs creating depth behind them. Important: no text, no UI, no captions, no modern objects, no borders. Designed specifically as a 1920×1080 desktop game background.

Prompts for Cutscene2 https://github.com/UQcsse3200/2026-studio-2/blob/main/source/core/assets/images/cutscene2 🌴 Scene 1: The Forgotten Shore Prompt 1920×1080, 16:9 widescreen desktop game cutscene background. A handcrafted pixel-art scene inspired by a 64×64 pixel-art grid, using large deliberate pixel clusters, crisp hard-edged silhouettes, simplified forms and a limited natural colour palette. Scene: Ogygia, shortly after Odysseus has washed ashore. Show Odysseus wandering alone along the beach of Ogygia, searching through the shoreline and collecting scattered remnants of a destroyed Greek ship. Odysseus should look exhausted, disoriented and emotionally hollow. His clothing is torn, weathered and still damaged from the storm, with a dark blue cloak or cloth hanging loosely from his body. His movements should look aimless rather than purposeful. He is picking up pieces of broken timber, fragments of rope, a damaged plank, part of an oar and other recognisable remnants of a Greek ship. Some pieces of wreckage should be scattered along the waterline while others have been washed farther up the beach. One larger broken section of the ship should be partially buried in the sand in the foreground. Important narrative detail: Odysseus should appear to be collecting the wreckage almost automatically. His expression and posture should suggest that he doesn't understand why he is doing it. He occasionally looks down at a piece of wood with a confused, distant expression, as though the object should mean something to him but does not. Ogygia should be beautiful and peaceful, contrasting sharply with his internal confusion. Show a wide turquoise sea, pale sandy beach, weathered rocks, lush greenery, hanging vines, palm leaves and distant rocky cliffs. The island should feel secluded and almost impossibly serene. Use the Desert Shores colour language: pale cream and warm sand for the beach, earthy browns and muted greens for vegetation and rocks, turquoise and muted blue-green for the sea. Use deep brown-blue shadows underneath vegetation, rocks and wreckage. Warm early-morning or late-afternoon sunlight should illuminate the beach, with soft golden highlights on the sand and water. Leave some relatively uncluttered space around Odysseus so the scene remains readable when dialogue text is displayed over the image. Mood: peaceful but unsettling, melancholy, confusion, loneliness, forgotten memories. Style: authentic handcrafted pixel art, 64×64-inspired pixel structure, limited palette, chunky pixel clusters, hard-edged shading, no smooth gradients, no photorealism, no anime styling. Camera: wide cinematic side view of the beach, Odysseus relatively small within the environment to emphasise his isolation. No text, no UI, no captions, no modern objects, no borders, no watermark.

🌸 Scene 2: The Lotus Prompt 1920×1080, 16:9 widescreen desktop game cutscene background. Handcrafted pixel art inspired by a 64×64 pixel-art grid, using large deliberate pixels, crisp silhouettes, simplified shapes, hard-edged shading and the established Desert Shores natural colour palette. Scene: Calypso approaches Odysseus on the shore of Ogygia. Show Odysseus sitting or kneeling exhausted on the sand, surrounded by the scattered remains of the ship he has been collecting. His posture is defeated and his head is lowered. He looks physically exhausted and mentally distant, as though he has been searching for something he cannot remember. Calypso approaches him gently from the side. Calypso should retain the established character design: a beautiful but somewhat rugged island nymph with long lovely braids, natural dark hair, a white flowing robe, and a distinctive golden belt. Her appearance should feel maternal and grounded rather than overly glamorous. She should look like someone who belongs naturally within the wild island environment. She kneels beside Odysseus and extends one hand toward him, offering him a single luminous lotus flower. The lotus should be visually important but not glowing like magical neon. Give it a subtle warm cream-gold or pale pink highlight that makes it stand out naturally from the surrounding vegetation. Calypso's expression should be gentle, compassionate and reassuring, while Odysseus looks uncertain and hesitant. The scene should not make her appear openly sinister. Her kindness should feel genuine enough that the viewer understands why Odysseus would trust her. The subtle danger comes from the lotus itself. Include delicate visual hints around it suggesting that it is enchanted, such as a faint shimmer, unusually perfect petals or tiny particles of warm light, but keep this extremely understated. The beach remains peaceful. Behind them, show turquoise water, pale sand, rocky cliffs, hanging greenery and tropical vegetation characteristic of Ogygia. Use warm natural Sands & Stones colours with muted turquoise water and earthy greens. Calypso's white robe should use cream and pale sand highlights rather than pure white, allowing it to fit the game's palette. Her golden belt should use restrained #E9C46A accents. Composition: Calypso and Odysseus should occupy the lower-middle portion of the frame. Keep sufficient uncluttered environmental space around them for dialogue text. Mood: tender, comforting, mysterious, subtly ominous. Style: authentic handcrafted pixel art, 64×64-inspired structure, limited natural palette, chunky clusters, crisp edges, no smooth gradients, no photorealism. Camera: medium-wide cinematic shot, slightly below eye level, intimate enough to clearly show the lotus being offered. No text, no UI, no captions, no modern objects, no borders, no watermark.

🌊 Scene 3: The Forgotten Voyage This is the dream sequence, so I'd deliberately make it visually distinct from the normal world without abandoning the game's art style. Prompt 1920×1080, 16:9 widescreen desktop game cutscene background. Handcrafted pixel art inspired by a 64×64 pixel-art grid, maintaining the established Desert Shores palette and visual language, but with a slightly dreamlike and fragmented presentation. Scene: Odysseus remembers fragments of his voyage. Present the scene as a half-remembered dream rather than a completely literal flashback. Show Odysseus standing aboard a damaged Greek ship in a vast, strangely calm sea. The ship is drifting across a windless ocean, its damaged sail hanging limp from the mast. Several Greek soldiers are scattered across the deck. They are exhausted, hungry and demoralised. Some sit against the mast, others lie beside empty food containers, while another soldier stares silently toward the horizon. The ship should clearly show signs of the storms they have survived: broken railings, torn ropes, damaged sails, cracked wooden sections and scattered debris. There should be almost no wind. The sea is unnaturally flat and vast, creating a sense that the ship has become trapped in an endless expanse of water. Show empty food containers, nearly exhausted supplies and a few discarded pieces of equipment to communicate that the crew is running out of food. Odysseus stands near the front or centre of the ship, looking toward the horizon. His expression should be weary but alert. He seems to be desperately searching for land. In the far distance, almost obscured by atmospheric haze, show a faint dark shape on the horizon that may or may not be an island. It should be subtle enough that the viewer isn't immediately certain whether they are seeing land or simply imagining it. Because this is a memory distorted by the lotus, use slightly unusual visual transitions: portions of the clouds can dissolve into pixel clusters, distant objects can become less sharply defined, and the edges of the scene can subtly fade into the surrounding colours. Do not make it psychedelic or heavily magical. It should feel like a memory that is gradually being recovered. Use muted blue-green ocean colours, deep blue-black shadows and subdued sandy browns for the ship. Keep the palette somewhat desaturated compared with the previous scenes. Mood: exhaustion, hunger, isolation, uncertainty, fragmented memory. Style: authentic handcrafted pixel art, 64×64-inspired pixel clusters, limited palette, hard-edged shapes, restrained dreamlike distortion, no photorealism, no smooth digital painting. Camera: wide cinematic shot from slightly above deck level, showing the entire ship surrounded by an enormous empty sea. No text, no UI, no captions, no modern objects, no borders, no watermark.

🐑 Scene 4: The Cave of the Cyclops This is your cliffhanger image, so I would make this one much more dramatic. The key is that the soldiers don't know what they've walked into yet. Prompt 1920×1080, 16:9 widescreen desktop game cutscene background. Handcrafted pixel art inspired by a 64×64 pixel-art grid, maintaining the established Desert Shores visual style with chunky pixel clusters, crisp silhouettes, limited natural colours and dramatic lighting. Scene: Odysseus and his starving soldiers discover the Cyclops' cave. Show Odysseus and a group of exhausted Greek soldiers arriving on a strange island after spotting land from their damaged ship. Driven by hunger and desperation, the soldiers have followed a large herd of sheep inland. The flock leads them toward an enormous natural cave entrance surrounded by rough stone, sparse vegetation and rocky terrain. The soldiers should appear hungry, exhausted and relieved. Some reach toward the sheep, others carry spears or shields, while a few eagerly move toward the cave believing they have finally found food and shelter. Odysseus should be slightly behind them, looking more cautious. He studies the enormous cave entrance rather than immediately rushing inside. The cave itself should be far too large for an ordinary human shepherd. Its entrance should tower over the soldiers and sheep. Huge rough stones, oversized wooden objects and enormous crude tools can be partially visible inside, subtly suggesting that something much larger than a human lives there. Include enormous baskets, oversized pottery, huge milk containers, piles of cheese and crude livestock pens inside the darkness. These objects should communicate that the cave belongs to a gigantic shepherd without actually revealing the Cyclops. Do not show the Cyclops yet. Instead, create the silhouette of a massive humanoid shadow deep within the cave, barely visible against the darkness. Only a suggestion of its enormous scale should be visible, perhaps an indistinct shoulder, hand or silhouette behind the sheep pens. The soldiers should not notice it. The viewer should. Use the cave entrance as a powerful dark shape against the brighter island landscape. The exterior should use warm sandstone, muted green vegetation and pale coastal colours, while the interior becomes progressively darker using #2F241C, #1E2C30, #111C20 and #0D0F12. A few shafts of sunlight should enter the cave, illuminating sheep, cheese, pottery and the soldiers while leaving the deepest interior almost completely black. The composition should gradually draw the viewer's eye from the soldiers → into the cave → toward the barely perceptible giant silhouette. Mood: hunger, relief, curiosity, unease, impending danger. Style: authentic handcrafted 64×64-inspired pixel art, limited Desert Shores palette, chunky silhouettes, hard-edged lighting, dramatic environmental scale, no photorealism, no smooth gradients. Camera: wide cinematic shot from outside and slightly to the side of the cave entrance, allowing the entire group, sheep and enormous cave to be visible. Important: the Cyclops must not be fully revealed. The image should end on the implication that something enormous lives inside. No text, no UI, no captions, no modern objects, no borders, no watermark. Scene 5: The Cave Sealed 1920×1080, 16:9 widescreen desktop game cutscene background. Handcrafted pixel art inspired by a 64×64 pixel-art grid, maintaining the established Desert Shores visual style: chunky deliberate pixel clusters, crisp silhouettes, hard-edged shading, limited natural colours, strong environmental composition and dramatic lighting. Scene: Polyphemus captures Odysseus's men. Show the enormous Cyclops Polyphemus at the entrance of his massive cave, grabbing several terrified Greek soldiers and dragging them deeper into the darkness. Polyphemus should be overwhelmingly large compared with the humans. His body should dominate the upper and central portion of the composition, with the soldiers appearing tiny by comparison. He should have a massive muscular silhouette, rough animal-like clothing made from crude hides, and a single enormous eye in the centre of his face. The soldiers desperately struggle against him. Some reach toward Odysseus, others attempt to pull their companions away, while several have dropped their weapons in panic. Odysseus should be rushing toward them, sword or dagger in hand, trying desperately to save his men. However, Polyphemus is already moving toward the cave entrance. A gigantic boulder rests beside the entrance, and the Cyclops is beginning to roll or push it into place. The boulder should be enormous, almost filling the cave entrance. It should communicate that the soldiers are about to become completely trapped. Use warm firelight from within the cave against the dark rocky exterior. The cave interior should become almost completely black behind Polyphemus. Scatter cheese baskets, clay vessels, ropes, wooden tools and sheep pens around the cave, reinforcing that this is the home of a gigantic shepherd. Composition: Odysseus and the soldiers should occupy the lower foreground while Polyphemus and the massive boulder dominate the middle and background. Mood: panic, helplessness, overwhelming danger. Style: Desert Shores pixel art, 64×64-inspired pixel clusters, limited palette, earthy browns, muted reds and deep blue-black shadows, no photorealism, no smooth gradients. Violence: dramatic but non-graphic, no exposed wounds or gore. No text, no UI, no captions, no modern objects, no borders, no watermark.

Scene 6: Days in the Darkness 1920×1080, 16:9 widescreen desktop game cutscene background. Handcrafted 64×64-inspired pixel art using the established Desert Shores visual style and limited natural palette. Scene: Several days pass inside Polyphemus's cave. Show the interior of the enormous Cyclops cave after several days of captivity. Polyphemus occupies the background or one side of the composition, tending to a large fire while preparing his food. Nearby are large wooden barrels and clay vessels filled with wine, along with crude cooking equipment and piles of livestock supplies. The surviving Greek soldiers are gathered together in the darker part of the cave, exhausted and terrified. Their clothing is dirty and torn. They sit close together, some leaning against the cave wall while others stare silently toward Polyphemus. To communicate the passage of several days, subtly show multiple small fires, discarded bones, empty food containers, and changing light entering the cave entrance. The cave should feel increasingly oppressive. Polyphemus should be portrayed as a constant looming threat. His enormous silhouette should tower over the tiny human figures. The cooking fire should cast dramatic orange and golden light onto the cave walls while leaving much of the chamber in deep brown and blue-black shadow. Avoid graphic depiction of cannibalism. Instead, communicate the horror through silhouettes, the fire, discarded objects, terrified expressions and the contrast between Polyphemus's calm routine and the soldiers' fear. Odysseus should be visible among the surviving soldiers, watching Polyphemus carefully and beginning to realise that brute force will never free them. Composition: large cave interior, Polyphemus occupying one side, prisoners grouped in the opposite shadowed area, enormous scale emphasized by the architecture. Mood: oppressive, grim, hopeless, slowly building toward desperation. Style: handcrafted pixel art, chunky 64×64-inspired clusters, earthy cave colours, deep shadows, warm firelight, limited palette, no photorealism. No text, no UI, no captions, no modern objects, no borders, no watermark.

Prompts for Cutscene3 https://github.com/UQcsse3200/2026-studio-2/blob/main/source/core/assets/images/cutscene3 Scene 1: Odysseus's Plan 1920×1080, 16:9 widescreen desktop game cutscene background. Handcrafted pixel art inspired by a 64×64 pixel-art grid, maintaining the Desert Shores visual style with crisp silhouettes, chunky pixel clusters and a restrained natural palette. Scene: On the third day, Odysseus secretly prepares his escape. Show Odysseus crouched in a dim corner of Polyphemus's enormous cave, carefully constructing a makeshift grappling hook. He has taken his dagger and a length of rope found inside the cave, combining them into a crude climbing tool. The dagger is secured to the end of the rope in a way that allows it to catch onto cracks or edges in the massive boulder blocking the entrance. Odysseus should be intensely focused, carefully tying and tightening the rope while examining the enormous stone blocking the cave entrance in the background. His remaining soldiers should be nearby, watching him quietly. Their expressions and body language should suggest that they are beginning to understand that he has devised a plan. Place small discarded tools, rope fibres, broken wooden pieces and other cave objects around him. The enormous boulder should dominate the distant background, reminding the viewer of the seemingly impossible obstacle between the Greeks and freedom. Use a small warm pool of firelight illuminating Odysseus's hands, rope and dagger while most of the cave remains in darkness. His blue cloak should remain the primary identifying colour for Odysseus. His expression should communicate intelligence, concentration and determination, not confidence. The plan is dangerous and may fail. Composition: Odysseus in the foreground, crouched over the rope and dagger, with the massive boulder visible behind him. Mood: tense, secretive, intelligent, hopeful but dangerous. Style: Desert Shores pixel art, 64×64-inspired pixel clusters, earthy browns, muted blue, warm firelight, deep shadows, hard-edged shading. No text, no UI, no captions, no modern objects, no borders, no watermark.

Scene 2: Waiting in the Darkness 1920×1080, 16:9 widescreen desktop game cutscene background. Handcrafted pixel art inspired by a 64×64 pixel-art grid, using the established Desert Shores visual style with chunky pixels, crisp silhouettes, limited colours and dramatic lighting. Scene: Odysseus and his men prepare the final stage of their escape. Show Odysseus clinging to and climbing onto the enormous boulder blocking the cave entrance, using his improvised rope and dagger grappling hook. He has reached the upper portion of the boulder and carries a long wooden log sharpened into a crude spear. Below him, the remaining Greek soldiers hide among the sheep, using the animals as cover. Their bodies are crouched low and mostly obscured by woolly silhouettes. Odysseus looks toward the interior of the cave, waiting. Deep inside the darkness, Polyphemus is beginning to awaken. The Cyclops should only be partially visible in the background, with his enormous silhouette slowly rising from the darkness. His single eye should catch a faint reflection of the firelight. The contrast between Odysseus's tiny silhouette on the gigantic boulder and Polyphemus's enormous body should emphasize the absurd scale of the confrontation. The cave should be extremely dark, with only a few warm firelight patches illuminating the soldiers, sheep and stone. The sharpened wooden spear should be clearly visible beside Odysseus, foreshadowing what is about to happen. Composition: boulder and Odysseus in the foreground, sheep and soldiers below, Polyphemus awakening deep in the background. Mood: suspense, silence before violence, calculated courage. Style: Desert Shores pixel art, 64×64-inspired pixel clusters, deep shadows, warm firelight, earthy stone and wood colours, crisp silhouettes. No text, no UI, no captions, no modern objects, no borders, no watermark.

Scene 3: The Boulder Moves This one should be almost entirely about scale and tension. 1920×1080, 16:9 widescreen desktop game cutscene background. Handcrafted 64×64-inspired pixel art maintaining the established Desert Shores visual style. Scene: Polyphemus moves the enormous boulder. Show Polyphemus gripping the gigantic stone boulder and beginning to move it away from the cave entrance. Odysseus is secretly hanging onto the upper portion of the boulder, gripping his improvised rope with both hands as the massive stone shifts. The movement of the boulder should reveal a growing opening behind it, allowing the first strong shaft of moonlight or early morning light to enter the cave. Polyphemus should dominate the scene. His enormous hands grip the stone while his single eye looks toward the newly opened passage. The remaining Greek soldiers should be hidden behind the sheep nearby, crouching low and preparing to rush through the opening. The sheep should remain calm or confused, contrasting with the extreme tension of the humans. Dust and small pieces of rock should fall from the ceiling as the boulder moves. The cave interior should remain dark while the newly revealed outside world is bright and cool, creating a strong visual contrast between imprisonment and freedom. Odysseus should be almost silhouetted against the edge of the opening, his blue cloak and wooden spear barely visible. Important: Polyphemus must not notice Odysseus yet. Mood: extreme suspense, danger, anticipation, the final moment before escape. Style: Desert Shores pixel art, 64×64-inspired chunky pixel clusters, hard-edged lighting, deep cave shadows, muted natural colours. No text, no UI, no captions, no modern objects, no borders, no watermark.

Scene 4: The Blindness of Polyphemus This is the climax, so we want the composition to feel like the entire cutscene has been winding toward this single instant. 1920×1080, 16:9 widescreen desktop game cutscene background. Handcrafted pixel art inspired by a 64×64 pixel-art grid, maintaining the established Desert Shores aesthetic with chunky deliberate pixels, crisp silhouettes, limited natural colours and dramatic high-contrast lighting. Scene: Odysseus attacks Polyphemus. Show the instant immediately after Polyphemus has opened the cave entrance. Odysseus leaps from the boulder onto the enormous Cyclops, gripping his sharpened wooden spear with both hands. Polyphemus has only just begun to turn toward the entrance and has not yet realised what is happening. Odysseus drives the sharpened spear toward the Cyclops's single eye in a desperate final attack. Capture the moment through dramatic silhouettes and impact, rather than graphic gore. The spear should be clearly visible at the point of impact, while the Cyclops recoils violently and raises one enormous hand toward his face. Odysseus's blue cloak should flare behind him during the leap, creating a strong diagonal motion across the frame. The remaining soldiers should be visible rushing toward the newly opened cave entrance in the background, creating a second layer of movement. Use the cave's bright exterior light behind the figures to create powerful silhouettes. Warm firelight from inside the cave should contrast with the cool moonlight or dawn outside. Polyphemus's face should dominate the upper half of the frame, with his enormous single eye as the visual focal point. Do not depict explicit gore, exposed anatomy or graphic wounds. Communicate the attack through the spear, reaction, pose, lighting and silhouette. Mood: explosive violence, desperation, courage, triumph at enormous risk. Style: Desert Shores pixel art, 64×64-inspired pixel clusters, strong silhouettes, limited palette, dramatic warm/cool lighting contrast. No text, no UI, no captions, no modern objects, no borders, no watermark.

Scene 5: The Cry to Poseidon This is the one I'd make quiet again. After six increasingly tense images, suddenly give the player space. 1920×1080, 16:9 widescreen desktop game cutscene background. Handcrafted pixel art inspired by a 64×64 pixel-art grid, maintaining the established Desert Shores visual style with chunky pixel clusters, crisp silhouettes, limited natural colours and dramatic environmental composition. Scene: Odysseus and the surviving soldiers escape the Cyclops's cave. Show Odysseus and his few remaining Greek soldiers running away from the cave across the rocky landscape, carrying their weapons and helping exhausted companions. The sheep scatter around them as they flee into the open landscape. The enormous cave entrance should dominate the background behind them. Odysseus has stopped running and turned around. He stands slightly apart from the other soldiers, looking back toward the cave after hearing the enormous, haunting cries of Polyphemus. Inside the cave entrance, Polyphemus should be visible only as a huge dark silhouette, one hand raised toward the sky. His voice should feel implied rather than literally visualised. The composition should communicate that the Cyclops is calling desperately upon his father, Poseidon, seeking vengeance against the man who blinded him. The surrounding environment should feel strangely quiet after the violence. Dust hangs in the air around the fleeing soldiers. The early morning sky begins to brighten over the distant sea. Odysseus's expression should be difficult to read from the distance, but his posture should communicate a mixture of relief, exhaustion and unease. His blue cloak should make him immediately identifiable as he looks back toward the enormous silhouette. Use muted sandstone, dusty earth, dark cave shadows and pale blue-gold morning light. The transition from the dark cave to the bright open landscape should visually represent the Greeks escaping captivity. Composition: surviving soldiers moving toward the foreground or side of the frame, Odysseus stopped and looking backward, Polyphemus's enormous silhouette framed by the cave entrance in the distance. Mood: relief poisoned by dread, haunting aftermath, fate, the beginning of another curse. Style: Desert Shores pixel art, 64×64-inspired pixel clusters, limited natural palette, hard-edged silhouettes, restrained atmospheric effects, no photorealism. No text, no UI, no captions, no modern objects, no borders, no watermark.

Clone this wiki locally