Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 9 additions & 7 deletions src/game/core/ridge/content/bridgeStage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,9 @@ function resolveBridgeInteractables(
kind: spot.kind,
distance,
prompt: catalog.lines[plan.prompt] ?? plan.prompt,
conversationId: plan.conversationId
conversationId: plan.conversationId,
progress: spot.progress,
actorId: 'actorId' in spot ? spot.actorId : undefined
});
}

Expand All @@ -133,41 +135,41 @@ function interactPlansForBeat(beat: RidgeWorldState['beat']): BridgeInteractPlan
{
spotId: 'cicka',
conversationId: 'bridge.cicka.first_meet',
prompt: 'bridge.cicka.first_meet.01'
prompt: 'bridge.cicka.first_meet.prompt'
},
{
spotId: 'draftsperson',
conversationId: 'bridge.draftsperson.missing_span',
prompt: 'bridge.draftsperson.missing_span.03'
prompt: 'bridge.draftsperson.missing_span.prompt'
}
];
case 'needs_toy_car':
return [
{
spotId: 'cicka',
conversationId: 'bridge.cicka.parallel_play',
prompt: 'bridge.cicka.parallel_play.01'
prompt: 'bridge.cicka.parallel_play.prompt'
},
{
spotId: 'draftsperson',
conversationId: 'bridge.draftsperson.missing_span',
prompt: 'bridge.draftsperson.missing_span.03'
prompt: 'bridge.draftsperson.missing_span.prompt'
}
];
case 'toy_car_shared':
return [
{
spotId: 'draftsperson',
conversationId: 'bridge.draftsperson.toy_car_test',
prompt: 'bridge.draftsperson.toy_car_test.01'
prompt: 'bridge.draftsperson.toy_car_test.prompt'
}
];
case 'bridge_complete':
return [
{
spotId: 'concert-exit',
conversationId: 'bridge.exit.opened_crossing',
prompt: 'bridge.exit.opened_crossing.01'
prompt: 'bridge.exit.opened_crossing.prompt'
}
];
default:
Expand Down
18 changes: 9 additions & 9 deletions src/game/core/ridge/content/concertStage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ function resolveConcertInteractables(
plans.push({
spotId: 'crowd',
conversationId: 'concert.crowd.delay_barks',
prompt: 'concert.crowd.delay_barks.01'
prompt: 'concert.crowd.delay_barks.prompt'
});
plans.push({
spotId: 'guitarist',
Expand All @@ -116,21 +116,21 @@ function resolveConcertInteractables(
: 'concert.guitarist.injury',
prompt:
state.beat === 'concert_practiced'
? 'concert.performance.auto_success.01'
? 'concert.performance.auto_success.prompt'
: state.flags.has('met_guitarist')
? 'concert.guitarist.practice_riff.01'
: 'concert.guitarist.injury.01'
? 'concert.guitarist.practice_riff.prompt'
: 'concert.guitarist.injury.prompt'
});
plans.push({
spotId: 'cicka-nook',
conversationId: 'concert.cicka.band_resting_spot',
prompt: 'concert.cicka.band_resting_spot.01'
prompt: 'concert.cicka.band_resting_spot.prompt'
});
if (state.beat === 'concert_practiced') {
plans.push({
spotId: 'stage',
conversationId: 'concert.performance.auto_success',
prompt: 'concert.performance.auto_success.01'
prompt: 'concert.performance.auto_success.prompt'
});
}
}
Expand All @@ -139,17 +139,17 @@ function resolveConcertInteractables(
plans.push({
spotId: 'guitarist',
conversationId: 'concert.guitarist.guitar_handoff',
prompt: 'concert.guitarist.guitar_handoff.01'
prompt: 'concert.guitarist.guitar_handoff.prompt'
});
plans.push({
spotId: 'cicka-nook',
conversationId: 'concert.cicka.band_resting_spot',
prompt: 'concert.cicka.band_resting_spot.03'
prompt: 'concert.cicka.band_resting_spot.prompt'
});
plans.push({
spotId: 'dance-exit',
conversationId: 'concert.exit.dance_transition',
prompt: 'concert.exit.dance_transition.01'
prompt: 'concert.exit.dance_transition.prompt'
});
}

Expand Down
22 changes: 9 additions & 13 deletions src/game/core/ridge/content/danceStage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -157,56 +157,52 @@ function resolveDanceInteractables(
plans.push({
spotId: 'traveler',
conversationId: 'dance.traveler.relay_wayfinding',
prompt: 'dance.traveler.relay_wayfinding.01'
prompt: 'dance.traveler.relay_wayfinding.prompt'
});
plans.push({
spotId: 'steward',
conversationId: 'dance.locals.triangulated_read',
prompt: 'dance.locals.triangulated_read.01'
prompt: 'dance.locals.triangulated_read.prompt'
});
plans.push({
spotId: 'teacher',
conversationId: 'dance.driver.one_step_practice',
prompt: state.flags.has(FLAG_DRIVER)
? 'dance.driver.one_step_practice.done.01'
: 'dance.driver.one_step_practice.01'
prompt: 'dance.driver.one_step_practice.prompt'
});
plans.push({
spotId: 'operations',
conversationId: 'dance.operations_helper.handoff_check',
prompt: state.flags.has(FLAG_OPS)
? 'dance.operations_helper.handoff_check.done.01'
: 'dance.operations_helper.handoff_check.01'
prompt: 'dance.operations_helper.handoff_check.prompt'
});
plans.push({
spotId: 'driver',
conversationId: bothReady(state)
? 'dance.driver.folded_song_request'
: 'dance.driver.shuttle_delay',
prompt: bothReady(state)
? 'dance.driver.folded_song_request.01'
: 'dance.driver.shuttle_delay.01'
? 'dance.driver.folded_song_request.prompt'
: 'dance.driver.shuttle_delay.prompt'
});
plans.push({
spotId: 'cicka',
conversationId: 'dance.cicka.resting_spot',
prompt: 'dance.cicka.resting_spot.01'
prompt: 'dance.cicka.resting_spot.prompt'
});
}

if (state.beat === 'dance_ready' || bothReady(state)) {
plans.push({
spotId: 'gate',
conversationId: 'dance.setup_clearance',
prompt: 'dance.setup_clearance.01'
prompt: 'dance.setup_clearance.prompt'
});
}

if (state.beat === 'dance_cleared') {
plans.push({
spotId: 'shuttle',
conversationId: 'dance.shuttle.last_daylight_ride',
prompt: 'dance.shuttle.last_daylight_ride.01'
prompt: 'dance.shuttle.last_daylight_ride.prompt'
});
plans.push({
spotId: 'cicka',
Expand Down
4 changes: 3 additions & 1 deletion src/game/core/ridge/content/dialogueHelpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,9 @@ export function collectNearbyFromPlans(
kind: spot.kind,
distance,
prompt: resolvePrompt(plan.prompt),
conversationId: plan.conversationId
conversationId: plan.conversationId,
progress: spot.progress,
actorId: spot.actorId
});
}
return result;
Expand Down
6 changes: 3 additions & 3 deletions src/game/core/ridge/content/relayStage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,17 +79,17 @@ function resolveRelayInteractables(
{
spotId: 'arrival',
conversationId: 'relay.overlook.inspect',
prompt: 'relay.overlook.inspect.01'
prompt: 'relay.overlook.inspect.prompt'
},
{
spotId: 'cicka',
conversationId: 'relay.sit_and_play.prompt',
prompt: 'relay.sit_and_play.prompt.01'
prompt: 'relay.sit_and_play.prompt.prompt'
},
{
spotId: 'sit',
conversationId: 'relay.sit_and_play.prompt',
prompt: 'relay.sit_and_play.prompt.01'
prompt: 'relay.sit_and_play.prompt.prompt'
}
];

Expand Down
7 changes: 6 additions & 1 deletion src/game/core/ridge/content/testBridgeCatalog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,25 @@ export const TEST_BRIDGE_DIALOGUE_CATALOG: BridgeDialogueCatalog = {
bridgeDraftsperson: 'Bridge Draftsperson'
},
lines: {
'bridge.cicka.first_meet.01': 'Sit near Cicka',
'bridge.cicka.first_meet.prompt': 'Pet Cicka',
'bridge.cicka.first_meet.01': 'You sit near Cicka resting in the cornfield.',
'bridge.cicka.first_meet.02': 'Small chirp.',
'bridge.cicka.first_meet.03': 'Cicka bats the tiny car back into place.',
'bridge.draftsperson.missing_span.prompt': 'Talk to Draftsperson',
'bridge.draftsperson.missing_span.01': 'Missing span worry.',
'bridge.draftsperson.missing_span.02': 'Toy car missing.',
'bridge.draftsperson.missing_span.03': 'Look for the tiny test car',
'bridge.cicka.parallel_play.prompt': 'Play with Cicka',
'bridge.cicka.parallel_play.01': 'Sit with Cicka',
'bridge.cicka.parallel_play.02': 'Roll the car back gently',
'bridge.cicka.parallel_play.03': 'Quiet purr.',
'bridge.cicka.parallel_play.04': 'Cicka leaves the tiny car beside you.',
'bridge.draftsperson.toy_car_test.prompt': 'Test Blueprint',
'bridge.draftsperson.toy_car_test.01': 'Set the tiny car on the drawing',
'bridge.draftsperson.toy_car_test.02': 'Courage line.',
'bridge.draftsperson.toy_car_test.03': 'The toy car rolls across the new span.',
'bridge.draftsperson.toy_car_test.04': 'That line holds.',
'bridge.exit.opened_crossing.prompt': 'Cross Bridge',
'bridge.exit.opened_crossing.01': 'Cross the finished bridge',
'bridge.exit.opened_crossing.02': 'Thank you.',
'bridge.exit.opened_crossing.03': 'The page turns toward evening music.'
Expand Down
18 changes: 18 additions & 0 deletions src/game/core/ridge/content/testRouteCatalog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,26 +12,33 @@ export const TEST_ROUTE_DIALOGUE_CATALOG: RidgeRouteDialogueCatalog = {
crowd: 'Crowd'
},
lines: {
'concert.crowd.delay_barks.prompt': 'Listen to Crowd',
'concert.crowd.delay_barks.01': 'Concert is late again.',
'concert.crowd.delay_barks.02': 'Someone said the guitarist wiped out.',
'concert.crowd.delay_barks.03': 'Maybe check behind the stage props.',
'concert.guitarist.injury.prompt': 'Talk to Guitarist',
'concert.guitarist.injury.01': 'I tried a one-leg skateboard solo.',
'concert.guitarist.injury.02': 'Wrist says no. Pride says louder no.',
'concert.guitarist.injury.03': 'Learn the phrase with me',
'concert.guitarist.practice_riff.prompt': 'Practice Riff',
'concert.guitarist.practice_riff.01': 'Practice the forgiving riff',
'concert.guitarist.practice_riff.02': 'You find the phrase without failing.',
'concert.guitarist.practice_riff.03': 'That is enough courage for a street.',
'concert.performance.auto_success.prompt': 'Play Concert',
'concert.performance.auto_success.01': 'Start the concert',
'concert.performance.auto_success.02': 'The phrase lands. Soft. True.',
'concert.performance.auto_success.03': 'Alright, move—show happened.',
'concert.performance.auto_success.04': 'Take the guitar. Carry the comfort.',
'concert.guitarist.guitar_handoff.prompt': 'Take Guitar',
'concert.guitarist.guitar_handoff.01': 'Keep it for the road ahead.',
'concert.guitarist.guitar_handoff.02': 'Play it when quiet needs company.',
'concert.guitarist.guitar_handoff.03': 'The guitar rests against your side.',
'concert.cicka.band_resting_spot.prompt': 'Pet Cicka',
'concert.cicka.band_resting_spot.01': 'Sit near hidden Cicka',
'concert.cicka.band_resting_spot.02': 'mrrp.',
'concert.cicka.band_resting_spot.03': 'Cicka loafs with the band',
'concert.cicka.band_resting_spot.04': 'purr.',
'concert.exit.dance_transition.prompt': 'Head Downhill',
'concert.exit.dance_transition.01': 'Follow the opened crossing',
'concert.exit.dance_transition.02': 'Festival setup waits downhill.',
'concert.exit.dance_transition.03': 'The page warms toward afternoon.'
Expand All @@ -48,40 +55,49 @@ export const TEST_ROUTE_DIALOGUE_CATALOG: RidgeRouteDialogueCatalog = {
festivalSteward: 'Festival Steward'
},
lines: {
'dance.traveler.relay_wayfinding.prompt': 'Talk to Traveler',
'dance.traveler.relay_wayfinding.01': 'Relay is up the hill shuttle.',
'dance.traveler.relay_wayfinding.02': 'Last daylight ride, after setup clears.',
'dance.traveler.relay_wayfinding.03': 'Help Operations, then the Dance Teacher.',
'dance.driver.shuttle_delay.prompt': 'Talk to Driver',
'dance.driver.shuttle_delay.01': 'Cannot leave until the steward opens the gate.',
'dance.driver.shuttle_delay.02': 'Clipboard says ready. Feet say otherwise.',
'dance.driver.shuttle_delay.03': 'He keeps rereading the same line.',
'dance.driver.shuttle_delay.choice.help': 'One step. Privately. Maybe the Dance Teacher…',
'dance.driver.shuttle_delay.choice.help_hint': 'Find the Dance Teacher (skirt pose).',
'dance.driver.shuttle_delay.choice.wait': 'You give him space and ask around.',
'dance.operations_helper.handoff_check.prompt': 'Help Operations',
'dance.operations_helper.handoff_check.01': 'Help check the operations handoff',
'dance.operations_helper.handoff_check.02': 'If the lantern line fails, I fail.',
'dance.operations_helper.handoff_check.03': 'You check the crates with her.',
'dance.operations_helper.handoff_check.done.01': 'Handoff done — find the Dance Teacher next',
'dance.operations_helper.handoff_check.done.02': 'She can almost leave the plaza alone.',
'dance.locals.triangulated_read.prompt': 'Check Steward',
'dance.locals.triangulated_read.01': 'Road opens after setup clears at the gate.',
'dance.locals.triangulated_read.02': 'She waits on one perfect lantern. He waits on anything except asking.',
'dance.locals.triangulated_read.03': 'Help Operations, then ask me for one private step.',
'dance.driver.one_step_practice.prompt': 'Practice Dance Step',
'dance.driver.one_step_practice.01': 'Practice one private dance step',
'dance.driver.one_step_practice.02': 'He learns exactly one shared rhythm.',
'dance.driver.one_step_practice.03': 'Okay. I can offer that much later.',
'dance.driver.one_step_practice.done.01': 'Step learned — clear the service gate next',
'dance.driver.one_step_practice.done.02': 'Dignity intact. Clear the gate next.',
'dance.driver.folded_song_request.prompt': 'Hand Song Request',
'dance.driver.folded_song_request.01': 'Help fold a tiny song request',
'dance.driver.folded_song_request.02': 'No confession. Just one dance later.',
'dance.driver.folded_song_request.03': 'She reads it. Soft nod. No spotlight.',
'dance.driver.folded_song_request.04': 'Now clear the service gate on the right.',
'dance.setup_clearance.prompt': 'Open Service Gate',
'dance.setup_clearance.01': 'Clear the service gate for the shuttle',
'dance.setup_clearance.02': 'Secure the lantern line.',
'dance.setup_clearance.03': 'Tape the service-lane clear.',
'dance.setup_clearance.04': 'Gate open. Last daylight window.',
'dance.setup_clearance.05': 'Shuttle sign flips. Board the van to the right.',
'dance.shuttle.last_daylight_ride.prompt': 'Board Shuttle',
'dance.shuttle.last_daylight_ride.01': 'All aboard the last ride.',
'dance.shuttle.last_daylight_ride.02': 'The hill lifts into sunset paper.',
'dance.shuttle.last_daylight_ride.03': 'Relay waits quiet above.',
'dance.cicka.resting_spot.prompt': 'Pet Cicka',
'dance.cicka.resting_spot.01': 'Cicka loafs on the operations table',
'dance.cicka.resting_spot.02': 'Cicka settles by the cleared gate',
'dance.cicka.resting_spot.03': 'mrrp.'
Expand All @@ -94,8 +110,10 @@ export const TEST_ROUTE_DIALOGUE_CATALOG: RidgeRouteDialogueCatalog = {
dedication: 'Dedication'
},
lines: {
'relay.overlook.inspect.prompt': 'Inspect Overlook',
'relay.overlook.inspect.01': 'Look out over the finished route',
'relay.overlook.inspect.02': 'The pages below still hold their changes.',
'relay.sit_and_play.prompt.prompt': 'Sit & Play Guitar',
'relay.sit_and_play.prompt.01': 'Sit and play beside Cicka',
'relay.sit_and_play.prompt.02': 'You settle. The guitar finds the concert phrase.',
'relay.sit_and_play.prompt.03': 'The overlook softens.',
Expand Down
1 change: 1 addition & 0 deletions src/game/core/ridge/observe.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ export function observeRidgeWorld(
speaker: line.speaker,
speakerId: line.speakerId,
text: line.text,
emotion: line.emotion,
lineId: line.id,
lineIndex: state.conversation.lineIndex,
lineCount: state.conversation.lines.length,
Expand Down
11 changes: 2 additions & 9 deletions src/game/core/ridge/session.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,10 @@ import type {
RidgeStageRegistry,
RidgeWorldState
} from './types';
import { RIDGE_GUITAR_ITEM, RIDGE_INITIAL_BEAT } from './types';
import { RIDGE_GUITAR_ITEM, RIDGE_INITIAL_BEAT, ridgeNextArea } from './types';

const DEFAULT_STEP = 0.05;

const NEXT_AREA: Record<RidgeAreaId, RidgeAreaId | null> = {
bridge: 'concert',
concert: 'danceFestival',
danceFestival: 'relay',
relay: null
};

export interface RidgeSessionOptions {
/** Preferred: full multi-area registry for Compact Area Transitions. */
stages?: RidgeStageRegistry;
Expand Down Expand Up @@ -247,7 +240,7 @@ export class RidgeConsoleSession {
}

private handleSkip(): RidgeCommandResult {
const next = NEXT_AREA[this.state.areaId];
const next = ridgeNextArea(this.state.areaId);
if (!next) {
return this.fail('Already at Relay. Use: warp bridge|concert|dance|relay');
}
Expand Down
Loading
Loading