@silkweaver/build 1.3.0 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/build.js CHANGED
@@ -277,7 +277,9 @@ async function generate_entry_code(project_folder, proj, asset_mode, engine_path
277
277
  ${var_name}.room_width = ${rm_data.width ?? 640}
278
278
  ${var_name}.room_height = ${rm_data.height ?? 480}
279
279
  ${var_name}.room_speed = ${rm_data.room_speed ?? 60}
280
- ${var_name}.room_persistent = ${rm_data.persistent ?? false}
280
+ ${var_name}.room_persistent = ${rm_data.persistent ?? false}${room_physics[room_name]
281
+ ? `\n${var_name}.physics_world = true\n${var_name}.physics_gravity_x = ${room_physics[room_name].gx}\n${var_name}.physics_gravity_y = ${room_physics[room_name].gy}`
282
+ : ''}
281
283
  ${var_name}.background_show_color = ${rm_data.bg_show_color ?? true}
282
284
  ${var_name}.background_solid_color = ${hex_to_bgr(rm_data.bg_color ?? '#000000')}${rm_data.creation_code && rm_data.creation_code.trim()
283
285
  ? `\n${var_name}.creation_code = () => {\n${rm_data.creation_code}\n}`
@@ -410,6 +412,14 @@ async function _load_sprite(name: string, meta_url: string, img_base: string): P
410
412
  spr.mask_right = (meta.mask_x || 0) + meta.mask_w
411
413
  spr.mask_bottom = (meta.mask_y || 0) + meta.mask_h
412
414
  }
415
+ // Scale mode (how the sprite fills a scaled area) + 9-slice border insets (sprite editor).
416
+ if (meta.scale_mode === 'tile' || meta.scale_mode === 'nineslice' || meta.scale_mode === 'stretch') {
417
+ spr.scale_mode = meta.scale_mode
418
+ }
419
+ spr.slice_left = meta.slice_left || 0
420
+ spr.slice_top = meta.slice_top || 0
421
+ spr.slice_right = meta.slice_right || 0
422
+ spr.slice_bottom = meta.slice_bottom || 0
413
423
 
414
424
  // Load all frames specified in meta.json
415
425
  const frames = meta.frames || []
@@ -526,6 +536,9 @@ export default async function init(canvas: HTMLCanvasElement): Promise<void> {
526
536
  // Set up rooms
527
537
  ${room_setups.join('\n')}
528
538
 
539
+ // Register rooms by name (room_goto('rm_x') / room_get('rm_x') / room_exists('rm_x'))
540
+ ${room_names.map(n => `room_register_name('${n}', _room_${n})`).join('\n ')}
541
+
529
542
  // Link room order
530
543
  ${room_var_names.map((v, i) => {
531
544
  const prev = room_var_names[i - 1];
@@ -538,7 +551,9 @@ export default async function init(canvas: HTMLCanvasElement): Promise<void> {
538
551
 
539
552
  const start = ${start_var}
540
553
  if (!start) { console.error('[Game] No rooms defined.'); return }
541
- ${room_physics[start_room] ? ` physics_world_create(${room_physics[start_room].gx}, ${room_physics[start_room].gy})\n` : ''} game_loop.start(start)
554
+ // The physics world is (re)created per-room in room.build_for_entry() from the room's
555
+ // physics_world/gravity fields — so it's fresh on every entry AND every restart.
556
+ game_loop.start(start)
542
557
  }
543
558
  `;
544
559
  return entry_code;
package/dist/templates.js CHANGED
@@ -51,6 +51,7 @@ const TEMPLATE_REGISTRY = [
51
51
  { id: 'empty', label: 'Empty', description: 'A blank project with a single empty room.' },
52
52
  { id: 'platformer', label: 'Platformer', description: 'A/D to move, Space to jump — gravity, solid platforms, parent-based collision.' },
53
53
  { id: 'topdown', label: 'Top-down', description: 'WASD movement with parent-based wall collision (place_meeting + a _col parent).' },
54
+ { id: 'physics_ball', label: 'Physics Ball', description: 'Bounce a ball on a mouse paddle for score — matter.js physics (circle/box bodies, restitution, instance_nearest).' },
54
55
  ];
55
56
  /** Absolute path to the bundled templates directory (sibling of dist/). */
56
57
  function templates_dir() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@silkweaver/build",
3
- "version": "1.3.0",
3
+ "version": "1.3.2",
4
4
  "description": "Silkweaver toolchain — compiles a project folder into a runnable game (HTML5 / desktop executable). Usable from a CLI or the IDE.",
5
5
  "type": "commonjs",
6
6
  "license": "GPL-3.0",