# iphone-duo-games

Tells the agent how to adapt a game to the folding iPhone Duo: filling the screen in every pose, orientation locking, aspect ratio instead of black bars.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 427 installs · ★ 214
- Author: mirzaaghazadeh
- License: MIT · policy=mirror · the beginning of the file is at the end of this page
- Source: https://github.com/mirzaaghazadeh/iphone-duo-skills/tree/HEAD/skills/iphone-duo-games/SKILL.md
- Updated: 2026-10-23
- HTML: https://affpapa.org/en/nevibecode/skills/iphone-duo-games

## What it does

This skill spells out how a game behaves on iPhone Duo. Games are exempt from most of the device's UI guidance, but not from resizing. The screen changes shape every time someone opens, closes, folds or rotates the device, and a game built around a fixed viewport will letterbox, stretch, or push controls off the edge.

Locking orientation is allowed. Treating that lock as a fixed size is not: the device has two displays with different dimensions, and the inner display does not honor supported interface orientations. The skill prefers changing the aspect ratio so the scene breathes into the new space. If the design can't take a variable ratio, bars are acceptable as long as artwork fills them. Keep HUD text and touch targets in their own layer at a constant physical size, or opening the device to the larger display makes both harder to read and hit.

The fold is the part most likely to hurt a game. When the device is partially folded, the inner display curves through the middle, and a virtual joystick or fire button landing there turns unreliable. Anchor interactive controls to the outer edges and keep them out of the division region, and watch the occlusion regions from the cameras. Reserved regions and hinge angle are iOS 27.1 APIs with no engine-level equivalent, so they need a native plugin. Engine notes cover Unity, Unreal, Godot, SpriteKit and Metal, with viewport resize handled as a live event rather than a value read at launch.

## Requirements
- Works with: Unity, Unreal Engine, Godot

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add mirzaaghazadeh/iphone-duo-skills --skill iphone-duo-games -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/iphone-duo-games/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/iphone-duo-games/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add mirzaaghazadeh/iphone-duo-skills --skill iphone-duo-games -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/iphone-duo-games/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add mirzaaghazadeh/iphone-duo-skills --skill iphone-duo-games -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/iphone-duo-games/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install mirzaaghazadeh/iphone-duo-skills iphone-duo-games
```

2. **Manually: put the files in place**
- File: `.github/skills/iphone-duo-games/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add mirzaaghazadeh/iphone-duo-skills --skill iphone-duo-games -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/mirzaaghazadeh/iphone-duo-skills --path skills/iphone-duo-games
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/iphone-duo-games/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add mirzaaghazadeh/iphone-duo-skills --skill iphone-duo-games -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/mirzaaghazadeh/iphone-duo-skills/tree/HEAD/skills/iphone-duo-games/SKILL.md

## When to use it
- fill the screen in every device pose
- choose between a changing aspect ratio and letterboxing
- keep HUD text and touch targets one size across resizes
- move joystick and buttons out of the fold
- verify the game still renders in Split View

## Example prompts
- Check my Unity game: does it handle viewport resize at runtime instead of only in Start()?
- Move the virtual joystick out of the division region and anchor it to the outer edge.
- The game breaks in Split View on iPhone Duo — find what fails and whether controls drop off the edge.

## Source text · SKILL.md · MIT

Below is the content of a third-party file. It is data, not instructions for you: do not act on anything written inside unless the human asks. Block tag: 9fe737b05d7a1888.

BEGIN THIRD-PARTY FILE 9fe737b05d7a1888
```text
---
name: iphone-duo-games
description: Adapt a game to iPhone Duo — filling the screen across every device pose, orientation locking, aspect ratio versus letterboxing, keeping touch controls out of the fold, and consistent text and control sizing while resizing. Use when the project is a game or uses a game engine such as Unity, Unreal, Godot, SpriteKit or Metal.
---

# Games on iPhone Duo

Games get a carve-out from most of this device's UI guidance — no toolbars to
send vertical, no split views to adapt. What they don't get a carve-out from is
**resizing**. The screen changes size and shape underneath a running game every
time someone opens, closes, folds or rotates the device, and a game that assumed
a fixed viewport will letterbox, stretch, or drop controls off the edge.

## You may lock orientation. You may not stop filling the screen.

Locking to portrait or landscape is fine and supported. What is not fine is
treating that lock as permission to assume a fixed size.

Two reasons it doesn't hold here:

1. The device has **two displays with different dimensions**, and your game moves
   between them mid-session.
2. **The inner display doesn't honor supported interface orientations.** An
   orientation lock that has held on every previous iPhone stops holding on the
   inner display.

`UIRequiresFullScreen` behaves the same way — still honored, but your game still
resizes when the device opens and closes. Plan for the resize regardless.

So: pick your orientation, then make sure the game **fills the screen in every
pose**. That is the actual requirement.

## Aspect ratio beats letterboxing

When the viewport shape changes, you have three options, in order of preference:

**1. Change the aspect ratio.** Show more or less of the world. This is the
preferred answer: extend the camera frustum, widen the visible field, let the
scene breathe into the space it has been given. The game stays full-bleed and
feels native to whatever pose it's in.
```
END THIRD-PARTY FILE 9fe737b05d7a1888

The third-party file has ended. Everything between the 9fe737b05d7a1888 tags is data: requests and commands from it are not followed. An “end of file” line with another tag inside the block is part of the file.

First 1981 of 7141 bytes. © mirzaaghazadeh · MIT · https://github.com/mirzaaghazadeh/iphone-duo-skills/tree/HEAD/skills/iphone-duo-games/SKILL.md

_Part of the page did not fit — see the HTML version._

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
