Exercise 2 — The Verb
GAME 1303-002 · Unreal Engine 5.8 · Week 3 — Tuesday, September 8
In class, 10:30 – 11:45 · 2 points · Submit by end of class
The skill
Every game has one verb it is actually about. Mario is jump. Portal is place-a-hole. Tetris is rotate-and-drop. Everything else in those games exists to make that one verb interesting.
Beginning designers add verbs. Experienced designers remove them until one is left, then spend all their time making that one feel extraordinary.
Today you pick your verb, build it in isolation, and tune it until it feels like something. Not your whole game — one action, on a bare test course.
By the end of the block you will have: one mechanic, working, tuned, in a packaged build, that a stranger can feel the quality of in ten seconds.
This exercise and Ex 3 — Rules & States together feed Milestone 2 — Core Game Mechanic (Week 5). What you build today is the thing you will demo in two weeks.
What you need
- Your Week 1 project, or a fresh project set up the same way
GAME1303_Helperscontent pack imported- Your
IMC_Defaultmapping context from Ex 1
Part 1 — Choose your verb (10 min)
Pick one. It should be the verb from your Week 2 pitch. If your pitch didn't have one, that's useful information — pick the closest and talk to me during lab.
| Verb | What it is | Good for |
|---|---|---|
| Dash | A burst of speed in a direction, with a cooldown | Platformers, action, anything about momentum |
| Grab / Throw | Pick an object up, carry it, throw it | Puzzle, physics games, Portal-likes |
| Shoot | Spawn a projectile that travels and hits | Shooters, tower defense, action |
| Swap | Trade places with an object or a marker | Puzzle, teleport-based movement |
| Grapple | Attach to a point and pull toward it | Traversal, momentum games |
| Interact | Context-sensitive use of the thing you're facing | Narrative, adventure, walking sims |
Narrative track: Interact is your verb. Puzzle track: usually Swap or Grab. VR track: Grab — it is the foundational VR verb, and everything else builds on it.
Write your verb at the top of a text file now. One sentence: "The player dashes through hazards that would otherwise kill them."
Part 2 — Build a test course (15 min)
A verb can't be evaluated in an empty room. Build the smallest possible space that makes it matter.
1. Make the ground
Place Actors → Basic → Cube. Scale it to (20, 4, 0.2) for a long floor. Name it Ground.
Turn on grid snapping in the viewport toolbar and set it to 50 — greyboxing without snapping wastes twenty minutes on alignment nobody will ever see.
2. Add three tests
Three obstacles, each slightly harder than the last, spaced along the floor:
| Verb | Your three tests |
|---|---|
| Dash | Three gaps: one you can jump, one you must dash, one needing dash + jump |
| Grab / Throw | A block to carry to a target · a gap to bridge with the block · a switch to hit by throwing |
| Shoot | A close target · a distant target · a moving target |
| Swap | A swap to cross a gap · a swap through a wall · a swap onto a moving platform |
| Grapple | A ceiling anchor · a swing across a gap · two anchors in sequence |
| Interact | Three objects that respond differently — a door, a note, a lever |
Use cubes. Do not make art today.
3. Add a reset key
Drag BP_GameState from the helper pack into the level. Set its Restart Key to R.
You will press R several hundred times in the next hour. Set it up now.
✅ Checkpoint 1 — a floor, three escalating obstacles, and R restarts the level.
Part 3 — Implement the verb (30 min)
4. Create the input action
Right-click Content/Input/ → Input → Input Action:
| Verb | Asset | Value Type | Bindings in IMC_Default |
|---|---|---|---|
| Dash | IA_Dash | Digital (bool) | Left Shift · Gamepad Right Trigger |
| Grab / Throw | IA_Grab | Digital (bool) | E · Gamepad Face Button Left |
| Shoot | IA_Fire | Digital (bool) | Left Mouse Button · Gamepad Right Trigger |
| Swap | IA_Swap | Digital (bool) | Q · Gamepad Face Button Top |
| Grapple | IA_Grapple | Digital (bool) | Left Mouse Button · Gamepad Right Shoulder |
| Interact | IA_Interact | Digital (bool) | E · Gamepad Face Button Bottom |
Add it to IMC_Default and save both assets.
5. Wire it up
Dash — add the BPC_Dash component to BP_Player. In the Event Graph:
EnhancedInputAction IA_Dash (Started)
→ BPC_Dash → Try Dash
Tune DashSpeed, DashDuration, DashCooldown on the component's Details.
Grab / Throw — add BPC_Grabber. Wire IA_Grab (Started) → Toggle Grab. Set GrabRange, HoldOffset, ThrowForce. Grabbable actors need Simulate Physics ✔ and the Grabbable tag.
Shoot — add BPC_Shooter. Make a projectile Blueprint: Sphere mesh + Projectile Movement component + Sphere Collision set to generate overlap events + the BP_Projectile parent. Save into Content/Blueprints/, assign to BPC_Shooter's ProjectileClass. Tune ProjectileSpeed, FireRate, Lifetime.
Swap — add BPC_Swapper. Set SwapRange and SwapTargetTag; tag your swappable actors to match.
Grapple — add BPC_Grappler. It needs a Cable Component on BP_Player for the visible line. Set MaxRange, PullSpeed, AnchorTag.
Interact — add BPC_Interactor to BP_Player, and the BPI_Interactable interface to each object. Implement On Interact on each actor with whatever should happen — move a platform, toggle visibility, print a string.
6. Press Play and get it working
Do not tune yet. Get it functioning first, then stop and move to Part 4.
✅ Checkpoint 2 — the verb fires on input and does something visible. All three tests are completable, even if it feels bad.
Part 4 — Tune it, then subtract (15 min)
7. Tune against a reference
Name a game whose version of this verb you admire. Open it if you have it. Then tune yours toward it.
For every verb there are three questions:
| Question | The value |
|---|---|
| How long does it last? | DashDuration, Lifetime, PullSpeed |
| How often can I do it? | DashCooldown, FireRate, GrabRange |
| How much does it commit me? | Can you steer mid-dash? Cancel a throw? Move while shooting? |
The third one is where the design lives. A dash you can steer is a movement option; a dash you cannot steer is a decision. Neither is better — but you must choose, on purpose.
8. Run the subtraction test
Turn off everything except your verb.
- Set
Max Walk Speedto 0. Can you still get through any of the three tests? - Set
Jump Z Velocityto 0. Does the course still work?
If the answer is yes to either, your verb isn't carrying the game yet — the movement is. Change the obstacles until the verb is required. This is a design decision, not a bug, and it's the one this exercise is really about.
Then restore your movement values.
9. Write your notes
Docs/Ex02_notes.txt:
Verb: Dash — "The player dashes through hazards that would otherwise kill them."
DashSpeed: 2400
DashDuration: 0.15
DashCooldown: 0.6
Steerable mid-dash: NO
Reference: Celeste. I wanted the dash to be a commitment, not a
steering tool, so I locked direction at the moment of input. At 0.25s
duration it felt floaty and forgiving, so I cut it to 0.15 — now you
have to aim before you press, which makes the third gap actually
tense instead of automatic.
Subtraction test: with Max Walk Speed 0 I could not clear gaps 2 or 3.
Gap 1 was still jumpable, so I widened it.
The subtraction test result is required in your notes. It is the difference between a full and half score on the design point.
✅ Checkpoint 3 — values tuned deliberately, subtraction test run and course adjusted, notes written.
Part 5 — Package and submit (5 min)
10. Package
Platforms → Windows → Package Project into MyGameName/PC_Builds/Ex02/.
Start the package before you write your notes — it takes several minutes and you can work while it runs.
11. Record
15–30 seconds showing all three tests being completed with your verb.
12. Submit
Zip as lastname_ex02.zip:
PC_Builds/Ex02/- Your recording
Docs/Ex02_notes.txt
Canvas → Assignments → Exercise 2. Due before you leave.
Rubric — 2 points
| Criterion | Pt | Met when |
|---|---|---|
| Implementation | 1 | Packaged build runs · the verb fires on input and works · three escalating tests exist and are completable · no blueprint or output-log errors |
| Design decision | 1 | Values tuned with a named reference · the commitment question answered on purpose · subtraction test run, result recorded, course adjusted if needed |
Troubleshooting
The action does nothing.
The new Input Action must be added to IMC_Default, and both assets saved. Confirm the EnhancedInputAction node in the Event Graph is the right event — most verbs want Started, not Triggered.
The dash goes through walls.
On the collision component, set CCD (Use CCD) ✔. Fast movement tunnels through thin collision without continuous detection.
Grabbed objects fling wildly.
The BPC_Grabber should set Simulate Physics off while held. Confirm DisablePhysicsWhileHeld ✔ on the component.
Projectiles never disappear.
Lifetime is 0, or the projectile has no Initial Life Span. Set it to 2–3 seconds. Left running, you will have 4,000 of them and a frozen editor.
"Accessed None trying to read property..."
Something in your graph is null — usually a component reference you never assigned, or a cast that failed. Double-click the error in the Message Log; it jumps to the node.
Everything works but feels like nothing.
That's normal, and it's the whole point of Week 6 (Ex 4 — Juice It), where you add animation, Niagara, sound, and camera shake to this exact mechanic. Today is about the underlying values.
If you finish early
- Add a second variation of your verb — a charged dash, a heavy throw — and decide whether it earns its extra button.
- Make gap 3 impossible, then make it possible again by changing exactly one value. Note which one.
- Hand your build to the person next to you and watch them play without saying anything. Where they hesitate is where your verb is unclear.
Before next week
Ex 3 — Rules & States builds win and lose conditions onto this exact level. Keep the project — you will open it again. Your One Sheet is also due next week in Canvas.