ZOSU’s Mobile Multiplayer Arcade Template – Readme

This for the remixable world submitted for Meta Horizon World on Desktop Editor, September 2025

README


Table of Contents:

Section 1 – Overview
Section 2 – Game Mode Selection and Main Configuration
Section 3 – Primary Script Overview
Section 4 – Full Script/Prop Layout:


Section 1 – Overview

This is modular mobile multiplayer touch-screen / focused interaction template that can be easily modified and scaled-up. This template has 3 multiplayer arcade game modes built in that can be adjusted modularly for side-scroll-top-down shooter, arcade busting, and interactive block game modes. The settings can be changed to manage which game mode is active and due to modularity unused game modes can be removed. The initial configuration has 3 player multiplayer setup with scalable multiplayer quickly by simply copying the active player object group and adjusting health and scoring positions for new players. The code-base is designed with many settings/props that can be adjusted, and 3D models and other entities can easily be swapped out or modified. Wherever possible easily identifiable visual selection of objects have been used as the design choice to make it easier for someone to modify the game elements.
Features List:
a) Swap between 3 main mobile-arcade game modes easily (unused modes can also be deleted easily)
b) Focused Interaction mobile-touch control system dialed in for multi-device usability
c) Fully configured for multiplayer, quickly add players by copying player object groups
d) Directional shooting system with scoring that is easily changeable
e) Player health and collision system
f) Fixed world border for static-screen-style play is enabled and is easily changeable
g) Dynamic focused interaction calibration system (in beta) is included as a bonus
h) Local camera controls
i) Extensive debug console logs available
j) Easily adjustable player movement controls
h) World objects are easily identifiable to be swapped out by someone using the template
() General

  • high score is tracked by persistent variable
  • unused Game Modes are recommended to be deleted once a preferred game template mode is selected
  • work around scripts in place to have triggers and visual objects follow certain objects
  • player health is setup to reset active current score when all life bars losr
    () Focused Interaction Touch Controls:
  • setup with generous boundaries so icons will be in correct locations across multiple devices
  • beta calibration mode let’s user dynamically change focused interaction regions and icon placement at start but more work is needed to dial in the user setup experience

Section 2 – Game Mode Selection and Main Configuration

Instructions
1) Shooter Game:

  • Pre-configured at launch
  • Z position is set at -3.4786
    2) Asteroid Game Setup:
  • disable visible/collidable on Shooter Game
  • enable visible/collidable on Asteroid Game
  • move Shooter Game to Z position 500
  • move Asteroid Game to Z position 13.7
  • in each player’s HUDLocal Script:
  • – enable useRotationMode
  • – enable useForwardMovementMode
    3) Block Kin Game Setup
  • disable visible/collidable on other Games
  • enable visible/collidable on Block Kin
  • move Asteroid Game to position -500
  • move Block Kin Game from Z 100 to Z position -1.62
  • in each player’s HUDLocal Script
  • – disable useRotationMode
  • – disable useForwardMovementMode
  • enable ObjectB collider in each player’s PLAYER
  • disable visible on each player’s Health Bars parent
  • disable visible HUD Global object SHOOT and NOVA
  • in each players “Player Visual Object”
  • – disable visible, all but “blockkin…”
  • in each player’s PlayerControllerLocal
    — set managedPlayerObject2, from HealthBars to blank
  • set each player’s Current Score+children from white to black
  • set each player’s Health Bar to not visible
  • set each player’s ForceXY entity target from PLAYER to blank
  • set each player’s bullets to none
    4) Starting Point: Endless Runner Waypoint Game
  • change global Player Settings to 1 Player
  • disable local camera on PlayerLocalPntrollers
  • In Endless Runner Game, on Waypoints object:
  • – enableWaypointSystem
  • – enableWaypointCamera
  • – enableLocalCamera
    5) Calibration Beta (tested for 1 person)
  • on HUDLocal enable calibrationmodebetatest
    6) Multiplayer Scaling (pre-configured 3 players)
  • copy “Local Objects – Copy per player”, 1 per player
  • increase Player Settings to desired number of players
  • per player move position of: PLAYER, Current Score, and Health Bars
    7) General Setup Notes:
  • reverse setup changes to return to original Shooter Game setup
  • player collision needed for directional bullet configuration
  • “bullet” model can be changed under “bullet trigger”
  • change visual player under “Player Visual Object”

Section 3 – Primary Script Overview

1) HUDLocal – full review
showOnlyMovementControls-placeholder for UI adjustments
hideUnecessaryUI-placeholder for UI adjustments
enableFocusedInteraction – controls if Focused Interaction will be on at Start
useHoldInsteadOfTap – disables the hold-down functionality and only allows tapping for directional arrows
holdThresholdMS – optional condition to dial in hold timing
holdResponseDelayMs – optional condition to dial in hold timing
maxHoldActionsPerSecond – controls how long a button can be held down at once
enableDirectObjectControl – enables PLAYER movement controls
selectedObject – this is the PLAYER object, which needs to be a collision enabled
leftRightMovementAmount – controls how much the player moves left or right with forward direction mode
upDownMovementAmount – controls how much player moves up or down with arrows pressed
rotAmtDeg – controls how much rotation the left and right arrow will do per press on “useRotationMode”
useRotationMode – left and right arrows will turn the player instead of moving the player
useForwardMovementMode – up and down will move the player forward relative to their direction
RegionX settings – controls Focused Interaction Spacing
enableRapidTapInHoldMode – allows for quick tapping on buttons with Hold mode enabled
rapidTapThresholdMS – controls amount of rapid tapping reaction
Debug settings – enables relative debug logs
cal settings – custom configuration of beta dynamic calibration system, it essentially allows the user to adjust a plane at start and then the child object arrows replace the global UI, with the focused interaction changing dynamically based on the ratio of the shown calibration plane

1.1) Focused Interaction Settings in HUDLocal:
Screen Coordinate System-use normalized screen coordinates (0-1):

sX: 0 = left edge, 1 = right edge of screen
sY: 0 = top edge, 1 = bottom edge of screen
Region Variables and Their Effects
SHTingRegionX (default: 0.42)
What it controls: The vertical dividing line that separates shooting regions from movement regions
Effect:
Values closer to 0 = shooting regions take up more of the left side
Values closer to 1 = shooting regions get smaller, movement regions get larger
At 0.42, any touch with sX < 0.42 triggers SHT1 (top half) or SHT2 (bottom half) leftButtonRegionX (default: 0.7) What it controls: The left boundary for the LEFT movement button region Effect: Lower values = LEFT region starts further left, making it wider Higher values = LEFT region starts further right, making it narrower Must be between SHTingRegionX and rightButtonRegionX rightButtonRegionX (default: 0.7) What it controls: The left boundary for the RIGHT movement button region Effect: Lower values = RIGHT region starts further left, making it wider Higher values = RIGHT region starts further right, making it narrower Any touch with sX > this value = RIGHT button
upButtonRegionY (default: 0.35)
What it controls: The bottom boundary of the UP movement button region
Effect:
Lower values = UP region extends further down, making it taller
Higher values = UP region gets shorter, pushed toward top of screen
Any touch with sY < this value (in the movement area) = UP button downButtonRegionY (default: 0.65) What it controls: The top boundary of the DOWN movement button region Effect: Lower values = DOWN region starts higher up, making it taller Higher values = DOWN region gets pushed toward bottom, making it shorter Any touch with sY > this value (in the movement area) = DOWN button

2) PlayerControllerLocal
enableLocalCamera-enables the mobile game camera at Start (disable if using for example the Waypoint Runner Mode)
spawnPosition-not applicable other than we want the avatar to not be falling through space forever
cameraPosition-location of the mobile Local Camera (fixed game camera)
cameraRotationX-set as 90 degrees to look straight down
cameraRotationY-additional camera setting for rotation
cameraRotationZ-additional camera setting for rotation
enablePositionFreeze-placeholder controls for additional avatar controls
jumpObject-used to manage jumping object in the bonus waypoint runner framework
jump settings-used to manage jumping object in bonus waypoint runner framework
enablePlayerObjectManagement-enables the next 6 objects in the settings to be turned on and off if the player is active
managedColliderObject-control collider on and off on an object if enablePlayerObjectManagement is enabled
managedParticleObject-play on loopa particle if enablePlayerObjectManagement is enabled
enablePlayerNameDisplay-controls if the next object (text Gizmo) will display the active local player’s name
Debug settings – enable relative debug logs

3) ShootingMechanicsLocal – summary:
-Select relative bullet and score UI objects by placing desired visual object in the current “bullet” or HUD object location.

  • The Shoot2Vi and Shoot2ViCal will toggle the Shoot2 button based on the CDNSeconds cooldown (how often the button press will cause the Shoot2 event).
    -The selectedObject is the player.
    -The TargetPoints control the points for tagged object contact with bullets.

Section 4 – Full Script/Prop Layout:

Meta Horizon Worlds Scripts Documentation

Script Summary Overview (Alphabetical)

  1. AnimationStarter.ts – Automatically starts animations with retry logic and timing controls
  2. BlockImpact.ts – Trigger-based scoring system with particle effects and neon texture randomization
  3. BulletTargetGame.ts – Collision detection and scoring for bullet-target interactions
  4. DeviceVisibilityManager.ts – Controls entity visibility based on player device type (VR/Desktop/Mobile)
  5. ForceXZ.ts – Monitors and resets object rotation to prevent unwanted X/Z axis rotation
  6. HideAtStart.ts – Automatically hides objects at world start with show/hide control methods
  7. HUDLocal.ts – Local player HUD with touch controls, movement, calibration, and focused interaction
  8. HUDManager.ts – Manages player local HUDs using a pool system for multiplayer environments
  9. ParticleSnow.ts – Triggers particle and sound effects when objects become invisible with toggle functionality
  10. PlayerControllerLocal.ts – Handles player positioning, camera management, freezing, and jump simulation
  11. PlayerControllerManager.ts – Manages player controller assignment, shooting scripts, and waypoints using pool patterns
  12. PlayerEventTriggerBase.ts – Base class for components that fire events on player/entity trigger interactions
  13. PlayerHealth.ts – Health system with deterioration modes, collision damage, and visibility-based reset
  14. PlayerTracker.ts – Tracks player movement and position with rotation matching capabilities
  15. PlayParticleEffects.ts – Plays multiple particle effects with configurable delay timing
  16. ShooterManager.ts – Server-side score management with persistent high score tracking
  17. ShooterManagerLocal.ts – Local display component for shooting game UI and score display
  18. Shooting.ts – Bullet shooting system with collision detection, movement, and scoring
  19. TriggerTracker.ts – Makes trigger objects follow other entities with configurable offsets
  20. Waypoints.ts – Player-based waypoint movement system with camera control and local management

Detailed Properties Documentation (Alphabetical)

AnimationStarter.ts

Summary: Automatically starts animations with retry logic and timing controls

Properties:

  • initialDelay: Number = 1000 – Initial delay before first animation attempt in milliseconds
  • retryInterval: Number = 500 – Time between retry attempts in milliseconds
  • maxRetryTime: Number = 5000 – Maximum total time to retry before giving up
  • enableAutoStart: Boolean = true – Enable automatic animation starting
  • showDebugMessages: Boolean = true – Enable console debug output

BlockImpact.ts

Summary: Trigger-based scoring system with particle effects and neon texture randomization

Properties:

  • scoreText: Entity – TextGizmo to display and update score
  • scoreIncrease: Number = 5 – Points to add per hit (ignored if random scoring enabled)
  • enableRandomScoring: Boolean = false – Use random score values instead of fixed
  • minScore: Number = 1 – Minimum random score value
  • maxScore: Number = 10 – Maximum random score value
  • particleEffect1: Entity – First particle effect to play on impact
  • particleEffect2: Entity – Second particle effect to play on impact
  • particleEffect3: Entity – Third particle effect to play on impact
  • soundEffect: Entity – Audio effect to play on impact
  • reactivationTime: Number = 5.0 – Seconds until trigger reactivates after hit
  • enableNeonTexture: Boolean = false – Apply random neon texture on respawn
  • neonTextureTarget: Entity – MeshEntity to apply neon texture to
  • neonIntensity: Number = 8.0 – Brightness multiplier for neon effect (1-20)
  • showDebugMessages: Boolean = false – Enable console debug logging

BulletTargetGame.ts

Summary: Collision detection and scoring for bullet-target interactions

Properties:

  • zOffsetOnHit: Number = 100 – Distance to move bullet in Z direction after hit
  • targetDisableTime: Number = 20 – Seconds targets stay invisible after being hit
  • normalTargetPoints: Number = 1 – Points awarded for hitting normal targets
  • specialTargetPoints: Number = 5 – Points awarded for hitting special targets
  • scoreText: Entity – Text gizmo for displaying current score
  • highScoreText: Entity – Text gizmo for displaying high score
  • hitSFX: Entity – Sound effect when bullet hits normal target
  • specialHitSFX: Entity – Sound effect when hitting special target
  • hitVFX: Entity – Particle effect on normal target hit
  • specialHitVFX: Entity – Particle effect on special target hit
  • showDebugMessages: Boolean = false – Enable console debug output

DeviceVisibilityManager.ts

Summary: Controls entity visibility based on player device type (VR/Desktop/Mobile)

Properties:

  • showOnVR: Boolean = false – Make entity visible to VR players
  • showOnDesktop: Boolean = false – Make entity visible to Desktop players
  • showOnMobile: Boolean = false – Make entity visible to Mobile players

ForceXZ.ts

Summary: Monitors and resets object rotation to prevent unwanted X/Z axis rotation

Properties:

  • targetEntity: Entity – Entity to monitor and reset rotation for
  • showDebugMessages: Boolean = true – Enable console debug logging
  • checkInterval: Number = 100 – Check frequency in milliseconds (1/10th second)
  • xRotationThreshold: Number = 0.1 – Allowed X rotation deviation in degrees (pitch/nodding)
  • zRotationThreshold: Number = 0.1 – Allowed Z rotation deviation in degrees (roll/tilting)

HideAtStart.ts

Summary: Automatically hides objects at world start with show/hide control methods

Properties:

  • target: Entity – Object to hide (uses attached entity if not specified)
  • disableCollision: Boolean = true – Also disable collision when hiding
  • showDebug: Boolean = false – Enable console debug output

HUDLocal.ts

Summary: Local player HUD with touch controls, movement, calibration, and focused interaction

Properties:

  • gameStatusText: Entity – Text gizmo for displaying game status information
  • vfx: Entity – Visual effects entity for UI feedback
  • showOnlyMovementControls: Boolean = true – Show only movement-related UI elements
  • hideUnnecessaryUI: Boolean = true – Hide non-essential UI elements
  • enableFocusedInteraction: Boolean = true – Enable focused interaction mode for touch controls
  • useHoldInsteadOfTap: Boolean = false – Use hold-and-drag instead of tap controls
  • holdThresholdMs: Number = 200 – Milliseconds to hold before registering as hold
  • holdResponseDelayMs: Number = 50 – Delay between hold actions in milliseconds
  • maxHoldActionsPerSecond: Number = 10 – Maximum hold actions per second rate limit
  • enableDirectObjectControl: Boolean = true – Enable direct object movement control
  • selectedObject: Entity – Object to control with touch input
  • leftRightMovementAmount: Number = 0.5 – Distance to move left/right per input
  • upDownMovementAmount: Number = 0.5 – Distance to move up/down per input
  • rotAmtDeg: Number = 15 – Degrees to rotate per rotation input
  • useRotationMode: Boolean = false – Left/right inputs rotate instead of move
  • useForwardMovementMode: Boolean = false – Up/down moves forward/backward relative to object
  • SHTingRegionX: Number = 0.42 – Screen X coordinate for shooting region boundary
  • leftButtonRegionX: Number = 0.7 – Screen X coordinate for left button region
  • rightButtonRegionX: Number = 0.7 – Screen X coordinate for right button region
  • upButtonRegionY: Number = 0.35 – Screen Y coordinate for up button region
  • downButtonRegionY: Number = 0.65 – Screen Y coordinate for down button region
  • enableRapidTapInHoldMode: Boolean = true – Allow rapid tapping in hold mode
  • rapidTapThresholdMs: Number = 100 – Milliseconds threshold for rapid tap detection
  • showTouchDebugMessages: Boolean = true – Enable touch input debug logging
  • showMovementDebug: Boolean = true – Enable movement debug logging
  • showHoldDebug: Boolean = false – Enable hold gesture debug logging
  • enableWorldBoundaries: Boolean = true – Enable world boundary enforcement
  • worldBoundaryPlusX: Number = 3 – Positive X boundary limit
  • worldBoundaryMinusX: Number = -3 – Negative X boundary limit
  • worldBoundaryPlusZ: Number = 1.3 – Positive Z boundary limit
  • worldBoundaryMinusZ: Number = -1.3 – Negative Z boundary limit
  • shootingScript: Entity – Reference to shooting script for communication
  • calibrationmodebetatest: Boolean = false – Enable screen calibration system
  • calPlane: Entity – Calibration plane entity for screen adjustment
  • calStepSize: Number = 20 – Units to adjust calibration plane per input
  • calMinPlaneX: Number = 100 – Minimum X dimension for calibration plane
  • calMinPlaneZ: Number = 100 – Minimum Z dimension for calibration plane
  • calUpRegionCenter: Entity – Center point for up region during calibration
  • calDownRegionCenter: Entity – Center point for down region during calibration
  • calLeftRegionCenter: Entity – Center point for left region during calibration
  • calRightRegionCenter: Entity – Center point for right region during calibration
  • calSht1RegionCenter: Entity – Center point for shooting region 1 during calibration
  • calSht2RegionCenter: Entity – Center point for shooting region 2 during calibration
  • calUpArrowObject: Entity – Arrow object to position at up region center
  • calDownArrowObject: Entity – Arrow object to position at down region center
  • calLeftArrowObject: Entity – Arrow object to position at left region center
  • calRightArrowObject: Entity – Arrow object to position at right region center
  • calSht1Object: Entity – Object to position at shooting region 1 center
  • calSht2Object: Entity – Object to position at shooting region 2 center
  • calCompleteHideObject: Entity – Object to hide when calibration is completed
  • calText1-5: Entity – Text gizmos for calibration instructions and feedback

HUDManager.ts

Summary: Manages player local HUDs using a pool system for multiplayer environments

Properties:

  • static propsDefinition = {} – No configurable properties; manages HUD assignment automatically

ParticleSnow.ts

Summary: Triggers particle and sound effects when objects become invisible with toggle functionality

Properties:

  • targetObject: Entity – Target object to monitor for invisibility (optional – uses attached entity if not set)
  • particleEffect: Entity – ParticleGizmo to trigger when object becomes invisible
  • soundEffect: Entity – AudioGizmo to play when object becomes invisible
  • enableObjectToggle: Boolean = false – Enable functionality to show/hide another object with timer
  • toggleObject: Entity – Object to show when target becomes invisible
  • toggleDurationSeconds: Number = 15 – Duration in seconds to keep toggle object visible
  • checkFrequencyMs: Number = 50 – How often to check visibility in milliseconds (recommended: 50ms)
  • showDebugMessages: Boolean = false – Enable console debug logging for troubleshooting

PlayerControllerLocal.ts

Summary: Handles player positioning, camera management, freezing, and jump simulation

Properties:

  • enableLocalCamera: Boolean = true – Toggle to enable/disable local camera control
  • spawnPosition: Vec3 = (0,0,0) – Initial spawn position for the player
  • cameraPosition: Vec3 = (1,1,-3) – Static camera position in world coordinates
  • cameraRotationX: Number = 0 – Camera X rotation in degrees
  • cameraRotationY: Number = 0 – Camera Y rotation in degrees
  • cameraRotationZ: Number = 0 – Camera Z rotation in degrees
  • freezePlayerPosition: Vec3 = (0,0,0) – Position to lock player at when freezing enabled
  • enablePositionFreeze: Boolean = true – Whether to freeze player at specified position
  • jumpObject: Entity – Object to animate with jump simulation when triggered
  • enableJumpSimulation: Boolean = false – Enable jump animation system
  • jumpHeight: Number = 2.0 – Local Y height to jump to in world units
  • jumpUpSpeed: Number = 5.0 – Speed going up in units per second
  • jumpDownSpeed: Number = 8.0 – Speed falling down in units per second
  • jumpUpdateInterval: Number = 0.016 – Update frequency for smooth jump animation
  • jumpResetToZero: Boolean = true – Whether to reset to Y=0 or original Y position
  • jumpFollowParent: Boolean = true – Keep jump object following parent position
  • enablePlayerObjectManagement: Boolean = false – Toggle for player object visibility management
  • managedPlayerObject: Entity – Player object to manage visibility/collision/position
  • managedPlayerObject2: Entity – Second player object to manage
  • scoreTextGizmo1: Entity – First score text display gizmo
  • scoreTextGizmo2: Entity – Second score text display gizmo
  • resetScoreText1: String = "Score: 0" – Default text for first score gizmo
  • resetScoreText2: String = "Lives: 0" – Default text for second score gizmo
  • managedColliderObject: Entity – Object to enable/disable collider based on player activity
  • managedParticleObject: Entity – Particle effect to control based on player activity
  • enablePlayerNameDisplay: Boolean = false – Show active local player’s name
  • playerNameTextGizmo: Entity – Text gizmo to display the player’s name
  • showDebugMessages: Boolean = true – Enable console debug output
  • showPlayerManagementDebug: Boolean = false – Enable detailed player management debug logs

PlayerControllerManager.ts

Summary: Manages player controller assignment, shooting scripts, and waypoints using pool patterns

Properties:

  • No configurable properties – manages assignment pools automatically

PlayerEventTriggerBase.ts

Summary: Base class for components that fire events on player/entity trigger interactions

Properties:

  • No configurable properties – abstract base class providing trigger event functionality

PlayerHealth.ts

Summary: Health system with deterioration modes, collision damage, and visibility-based reset

Properties:

  • green1-green5: Entity – Health bar block entities showing healthy state
  • red1-red5: Entity – Health bar block entities showing damaged state
  • playerDeathObject: Entity – Object to hide when player dies
  • minDeteriorationTime: Number = 30 – Minimum deterioration time in seconds (random mode)
  • maxDeteriorationTime: Number = 120 – Maximum deterioration time in seconds (random mode)
  • useControlledMode: Boolean = false – Switch between random and trigger-controlled damage
  • damageCollisionTag: String = "trigger" – Tag name for objects that cause damage in controlled mode
  • lifeDisplayText: Entity – Text gizmo to display life count
  • damageSound: Entity – Audio effect when taking damage
  • deathSound: Entity – Audio effect when all health is lost
  • changeTextOnDeath: Boolean = false – Change text display to “0” when dead
  • objectDisableTime: Number = 45 – Seconds to disable collision objects after hit
  • collisionEffect: Entity – Particle/audio effect to play on collision
  • invincibilityTime: Number = 5 – Seconds of invincibility after taking damage
  • visibilityResetObject: Entity – Object to monitor for visibility-based health reset
  • enableVisibilityReset: Boolean = false – Enable automatic health reset when monitored object becomes invisible
  • visibilityCheckInterval: Number = 2 – How often to check visibility in seconds
  • showDebug: Boolean = false – Enable debug console logging

PlayerTracker.ts

Summary: Tracks player movement and position with rotation matching capabilities

Properties:

  • playerVisible: Entity – Entity to move based on player core position
  • playerCore: Entity – Entity to track position from
  • updateIntervalMs: Number = 100 – Update frequency in milliseconds
  • showDebugMessages: Boolean = true – Enable console debug output
  • enableTracking: Boolean = true – Enable/disable position tracking
  • trackingDistance: Number = 1000 – Maximum tracking distance before stopping
  • smoothingFactor: Number = 1.0 – Position smoothing (0.0-1.0, 1.0 = no smoothing)
  • matchYRotation: Boolean = false – Enable Y-axis rotation matching
  • rotationSmoothingFactor: Number = 1.0 – Rotation smoothing factor (0.0-1.0)

PlayParticleEffects.ts

Summary: Plays multiple particle effects with configurable delay timing

Properties:

  • particle1: Entity – First particle effect entity to play
  • particle2: Entity – Second particle effect entity to play
  • particle3: Entity – Third particle effect entity to play
  • delay: Number = 6 – Delay in seconds before playing all particle effects

ShooterManager.ts

Summary: Server-side score management with persistent high score tracking

Properties:

  • currentScoreText: Entity – Text gizmo displaying current score
  • playerHighScoreText: Entity – Text gizmo displaying player’s high score
  • shootingComponent: Entity – Reference to the shooting component entity for communication
  • showDebugMessages: Boolean = true – Enable console debug output for troubleshooting

ShooterManagerLocal.ts

Summary: Local display component for shooting game UI and score display

Properties:

  • serverScript: Entity – Reference to server-side ShooterManager script entity
  • playerHighScoreText: Entity – Local text gizmo for displaying high score
  • showDebugMessages: Boolean = true – Enable console debug output

Shooting.ts

Summary: Bullet shooting system with collision detection, movement, and scoring

Properties:

  • currentScoreText: Entity – Text gizmo for displaying current score
  • Shoot1SFX: Entity – Audio effect for standard shooting
  • hitTargetSFX: Entity – Audio effect when bullet hits target
  • Shoot2Tri: Entity – Trigger entity for special shot 2
  • Shoot2Sfx: Entity – Audio effect for special shot 2
  • Shoot2Pfx: Entity – Particle effect for special shot 2
  • Shoot2Vi: Entity – Visual indicator for special shot 2 availability
  • Shoot2ViCal: Entity – Visual indicator for special shot 2 calibration
  • Shoot2CDNSeconds: Number = 10 – Cooldown time for special shot 2 in seconds
  • selectedObject: Entity – Object to use as shooting reference point
  • bulletEntity1-5: Entity – Five bullet entities for shooting rotation
  • BLTSpeed: Number = 8 – Bullet movement speed in units per second
  • BLTSpawnOffset: Number = 5 – Distance to spawn bullet from selected object
  • enableBLTPhysics: Boolean = false – Enable physics simulation for bullets
  • enableChildMovement: Boolean = true – Enable movement for child entities of bullets
  • zeroTargetPoints: Number = 0 – Points awarded for zero-point targets
  • normalTargetPoints: Number = 1 – Points awarded for normal targets
  • specialTargetPoints: Number = 5 – Points awarded for special targets
  • mediumTargetPoints: Number = 10 – Points awarded for medium targets
  • highTargetPoints: Number = 20 – Points awarded for high-value targets
  • zOffsetOnHit: Number = 50 – Z-axis distance to move bullet after hit
  • targetDisableTime: Number = 15 – Seconds to disable targets after being hit
  • postShotCooldown: Number = 500 – Cooldown in milliseconds between shots
  • shooterManager: Entity – Reference to ShooterManager for score communication
  • showSHTingDebug: Boolean = true – Enable shooting system debug output
  • showScoringDebug: Boolean = true – Enable scoring system debug output

TriggerTracker.ts

Summary: Makes trigger objects follow other entities with configurable offsets

Properties:

  • triggerToFollow: Entity – Trigger gizmo entity that will follow the target
  • objectToTrack: Entity – Entity to track position from
  • xOffset: Number = 0 – X-axis offset from tracked object position
  • zOffset: Number = 0 – Z-axis offset from tracked object position
  • updateIntervalMs: Number = 100 – Update frequency in milliseconds
  • showDebugMessages: Boolean = true – Enable console debug output
  • enableTracking: Boolean = true – Enable/disable position tracking
  • trackingDistance: Number = 1000 – Maximum tracking distance
  • smoothingFactor: Number = 1.0 – Position smoothing factor (0.0-1.0)

Waypoints.ts

Summary: Player-based waypoint movement system with camera control and local management

Properties:

  • enableWaypointSystem: Boolean = false – Master toggle for waypoint system
  • enableWaypointCamera: Boolean = false – Enable waypoint-based camera control
  • enableLocalCamera: Boolean = true – Enable local static camera
  • wpWaypointParent: Entity – Parent entity containing waypoint children
  • wpTargetObject: Entity – Object to move along waypoint path
  • wpCameraOffsetObject: Entity – Object to use for camera offset calculations
  • wpMovementSpeed: Number = 5 – Movement speed in units per second
  • wpUpdateInterval: Number = 0.016 – Update frequency for smooth movement
  • wpSmoothTurning: Boolean = true – Enable smooth rotation between waypoints
  • wpTurnSpeed: Number = 2.0 – Rotation speed for smooth turning
  • wpIgnoreYPosition: Boolean = false – Keep original Y position during movement
  • wpLoopPath: Boolean = true – Loop back to first waypoint when reaching end
  • wpArrivalThreshold: Number = 0.3 – Distance threshold for reaching waypoints
  • wpUsePositionSmoothing: Boolean = true – Enable position smoothing
  • wpPositionSmoothingFactor: Number = 0.8 – Position smoothing strength (0.0-1.0)
  • wpMinimumMovementThreshold: Number = 0.01 – Minimum movement distance per frame
  • wpUseSubFrameInterpolation: Boolean = false – Enable sub-frame interpolation
  • wpSubFrameSteps: Number = 2 – Number of sub-frame steps for interpolation
  • wpCameraFollowSpeed: Number = 5.0 – Camera follow speed
  • wpCameraRotationSpeed: Number = 3.0 – Camera rotation speed
  • wpCameraPositionOffset: Vec3 = (0,2,-5) – Camera offset from target
  • wpCameraLookAhead: Number = 2.0 – Distance to look ahead for camera
  • wpCameraUpdateFrequency: Number = 0.016 – Camera update frequency
  • wpFollowTargetRotation: Boolean = true – Camera follows target rotation
  • wpCameraTurnMode: String = "smooth" – Camera turning mode (smooth/timed)
  • wpCameraTurnTime: Number = 1.0 – Time for camera turns in timed mode
  • wpCameraTurnSmoothness: Number = 2.0 – Camera turn smoothness factor
  • wpCameraRotationX/Y/Z: Number = 0 – Camera rotation offsets
  • localCameraPosition: Vec3 = (1,1,-3) – Static local camera position
  • localCameraRotationX/Y/Z: Number = 0 – Static local camera rotation
  • wpEnablePlayerManagement: Boolean = true – Enable player management integration
  • wpDisablePlayerMovement: Boolean = true – Disable player movement during waypoints
  • wpFreezePlayerPosition: Boolean = true – Freeze player at specified position
  • wpPlayerFreezePosition: Vec3 = (0,0,0) – Position to freeze player at
  • wpAutoStartOnEnabled: Boolean = true – Auto-start waypoints when player assigned
  • wpStartDelay: Number = 0.5 – Delay before starting waypoint movement
  • showDebugMessages: Boolean = true – Enable general debug output
  • showCameraDebugMessages: Boolean = false – Enable camera-specific debug output
  • showPlayerManagementDebug: Boolean = false – Enable player management debug output