create_level
Create a new empty ice puzzle level by specifying dimensions and name for designing sliding block challenges.
Instructions
Create a new empty ice puzzle level
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Level name | |
| width | No | Grid width (5-25, default 10) | |
| height | No | Grid height (5-25, default 10) |
Implementation Reference
- src/tools/level-management.ts:36-53 (registration)Complete tool registration for create_level including name, description, input schema, and handler function.{ name: 'create_level', description: 'Create a new empty ice puzzle level. This becomes the current working draft.', inputSchema: { type: 'object', properties: { name: { type: 'string', description: 'Level name' }, width: { type: 'number', description: 'Grid width (5-25, default 10)', minimum: 5, maximum: 25 }, height: { type: 'number', description: 'Grid height (5-25, default 10)', minimum: 5, maximum: 25 }, }, required: ['name'], }, handler: async (args) => { const draft = draftStore.createDraft(args.name, args.width, args.height); const viz = renderLevel(draft, { showCoords: true }); return { content: [{ type: 'text', text: `Level "${args.name}" created!\n\n${formatDraftSummary(draft)}\n\n${viz}` }] }; }, },
- src/tools/level-management.ts:39-47 (schema)Input schema defining the accepted arguments: name (required string), width (optional number 5-25, default 10), height (optional number 5-25, default 10).inputSchema: { type: 'object', properties: { name: { type: 'string', description: 'Level name' }, width: { type: 'number', description: 'Grid width (5-25, default 10)', minimum: 5, maximum: 25 }, height: { type: 'number', description: 'Grid height (5-25, default 10)', minimum: 5, maximum: 25 }, }, required: ['name'], },
- src/tools/level-management.ts:48-52 (handler)Handler function that creates a new level draft using draftStore.createDraft() and returns a formatted response with level summary and visualization.handler: async (args) => { const draft = draftStore.createDraft(args.name, args.width, args.height); const viz = renderLevel(draft, { showCoords: true }); return { content: [{ type: 'text', text: `Level "${args.name}" created!\n\n${formatDraftSummary(draft)}\n\n${viz}` }] }; },
- src/store/draft-store.ts:88-116 (helper)The createDraft method in DraftStore that initializes a new DraftState with default positions (bottom-left start, top-right goal), empty obstacles/warps, and resets history.createDraft(name: string, width: number = 10, height: number = 10): DraftState { this.warpCounter = 1; this.undoStack = []; this.redoStack = []; this.lastSolvableSnapshot = null; const draft: DraftState = { id: null, previewId: null, name, description: '', gridWidth: width, gridHeight: height, par: 0, startPosition: { x: 1, y: height - 2 }, // bottom-left goalPosition: { x: width - 2, y: 1 }, // top-right obstacles: [], warpPairs: [], thinIceTiles: [], pushableRocks: [], pressurePlate: null, barrier: null, manualSolveMechanicsBaseline: null, manualSolveFingerprint: null, isDirty: false, lastSolverResult: null, }; this.currentDraft = draft; return draft; }
- src/tools/level-management.ts:14-32 (helper)formatDraftSummary helper function used by the handler to display level information including grid size, par, start/goal positions, obstacles, warps, and solver status.function formatDraftSummary(draft: DraftState): string { const solverInfo = draft.lastSolverResult ? formatSolverResult(draft.lastSolverResult) : 'Not yet solved'; return [ `Name: ${draft.name}`, `Grid: ${draft.gridWidth}x${draft.gridHeight}`, `Par: ${draft.par > 0 ? draft.par : 'not set'}`, `Start: (${draft.startPosition.x}, ${draft.startPosition.y})`, `Goal: (${draft.goalPosition.x}, ${draft.goalPosition.y})`, `Obstacles: ${draft.obstacles.length}`, `Warps: ${draft.warpPairs.length} pairs`, `Thin Ice: ${draft.thinIceTiles.length}`, `Pushable Rocks: ${draft.pushableRocks.length}`, draft.pressurePlate ? `Pressure Plate: (${draft.pressurePlate.x}, ${draft.pressurePlate.y})` : '', draft.barrier ? `Barrier: (${draft.barrier.x}, ${draft.barrier.y})` : '', `Solver: ${solverInfo}`, ].filter(Boolean).join('\n'); }