Features Guide
Comprehensive documentation of all oxide-landscapingjob features.
Shift System
The shift system manages the player's work session from clock-in to clock-out.
State Machine
Each shift progresses through a series of states:
| State | Description |
|---|---|
idle | Not working, can clock in at an office |
clocked_in | On shift, van spawned, yards assigned |
driving_to_yard | Driving company van to an assigned yard |
mowing | Actively mowing a yard |
returning_to_office | All yards done, returning to clock out |
Clock In
- Approach a landscaping office NPC
- Open the context menu via target interaction ("Talk to Manager")
- View your progression stats and select "Clock In"
- A company van spawns at the office's vehicle spawn point
- Yards are assigned based on your level
Clock Out
- Return to the landscaping office after completing yards
- Open the context menu and select "Clock Out"
- Receive a shift summary with payment breakdown
- Net pay is deposited as cash
- Company van is despawned
Location Slots
Each office supports a maximum number of concurrent workers:
| Setting | Default | Description |
|---|---|---|
Config.MaxSlotsPerLocation | 3 | Max players per office |
If all slots are full, new players cannot clock in at that office.
Yard System
Yards are pre-defined areas with grass patches and obstacles that players must clear.
Assignment
When a player clocks in, yards are assigned from the global pool:
- Available yards are shuffled randomly
- The number assigned depends on the player's level (
maxYards) - Occupied yards (assigned to other workers) are excluded
- Each yard has a name, center coordinate, patches, and optional obstacles
Yard Tiers
Yards are classified by patch count:
| Tier | Patch Count | Pay Multiplier |
|---|---|---|
| Small | 1-50 | 1.0x |
| Medium | 51-149 | 1.5x |
| Large | 150+ | 2.0x |
Working a Yard
- Drive to the assigned yard (shown on map as a green blip)
- Enter the yard marker and press
[E]to start - A timer begins based on the yard's size
- Mow all grass patches and remove all obstacles
- Yard completes automatically when all work is done
Grass Patches
Grass patches are non-networked objects rendered locally on each client. When the mower drives over a patch:
- The patch fades out over 17 steps (~1 second)
- A burst particle effect plays
- The server records the patch as mowed
- Nearby players see the patch disappear via broadcast
Obstacles
Obstacles are objects scattered in yards that must be removed on foot:
- Detection: Third-eye target (
Config.Obstacles.useTarget = true) or proximity prompt - Removal: 5-second pickup animation
- Hazard: Driving the mower into an obstacle deals 350 engine damage
- Highlight: Hold
Hto outline remaining obstacles in yellow
Timer
Each yard has a time limit calculated from its size:
Time Limit = baseTime + (patchCount × timePerPatch)
| Setting | Default | Description |
|---|---|---|
Config.Timer.baseTime | 120 | Base seconds for any yard |
Config.Timer.timePerPatch | 5 | Extra seconds per grass patch |
Config.Timer.expiredPenalty | 0.85 | Pay multiplier when timer expires |
Exceeding the timer does not fail the yard but applies a 15% pay penalty.
Mower & Vehicle System
The job uses a dual-vehicle system: a company van for transport and a mower for cutting.
Company Van
| Setting | Default | Description |
|---|---|---|
Config.Rumpo.model | 'bison3' | Vehicle model |
Config.Rumpo.primaryColor | 255, 255, 255 | White body color |
Config.Rumpo.plate | 'LAWN' | License plate text |
The van spawns at the office when clocking in. The mower is cosmetically attached to its roof rack.
Mower
| Setting | Default | Description |
|---|---|---|
Config.Mower.model | 'mower' | Vehicle model |
Config.Mower.spawnOffsetBehind | 1.5 | Meters behind van to unload |
Unload / Load Cycle
- Unload: At a yard, exit the van and interact with the rear to unload the mower (4-second animation)
- Mow: Drive the mower over grass patches with blades lowered
- Load: After completing the yard, interact with the van to load the mower back (4-second animation)
- Drive: Continue to the next yard in the van
Blade Toggle
Press G to raise or lower the mower blades:
| Mode | Max Speed | Power | Description |
|---|---|---|---|
| Blades Down | 3.0 m/s (~11 km/h) | 0.3x | Slow mowing mode, cuts grass |
| Blades Up | 15.0 m/s (~54 km/h) | 1.0x | Normal driving mode |
Vehicle Damage
Both vehicles are monitored for health:
Company Van:
- Body damage below 950 health incurs a repair charge at clock-out
- Charge rate: $0.50 per health point lost
- Destruction (engine < 150): $100 fine, all yards cancelled, complaint added
Mower:
- Obstacle collision: 350 engine damage per hit
- Damage smoke effect plays when engine health is low
- Destruction: current yard cancelled, move to next yard
- Repair option available via "Open Hood" interaction (restores to 800 health)
Progression System
Players progress through 5 levels by completing yards.
Level Definitions
| Level | Title | Yards Required | Max Yards | Pay Multiplier | Mower Speed | Tip Chance | Tip Range |
|---|---|---|---|---|---|---|---|
| 1 | Trainee | 0 | 3 | 1.0x | 1.0x | 10% | $5-$15 |
| 2 | Groundskeeper | 12 | 4 | 1.1x | 1.1x | 15% | $5-$20 |
| 3 | Landscaper | 35 | 5 | 1.2x | 1.2x | 25% | $10-$30 |
| 4 | Senior Landscaper | 70 | 5 | 1.35x | 1.35x | 30% | $10-$40 |
| 5 | Foreman | 130 | 6 | 1.5x | 1.5x | 40% | $15-$50 |
Level-Up
When a player's total completed yards reaches the next level's threshold:
- Level is updated in the database
- Player is notified of the promotion
- Mower speed multiplier increases immediately
- More yards can be assigned per shift
Daily Streak
Working on consecutive days builds a daily streak:
| Setting | Default | Description |
|---|---|---|
Config.Payment.streakBonusPerDay | $10 | Bonus per streak day |
Config.Payment.maxStreakDays | 7 | Maximum streak bonus days |
The streak resets if a day is missed. Maximum streak bonus: $70 per yard.
Payment System
Payment is calculated per yard and paid as a lump sum at clock-out.
Per-Yard Calculation
Subtotal = (basePay + speedBonus) × tierMultiplier × levelMultiplier × timerMultiplier
Total = Subtotal + streakBonus + tip
| Component | Default | Description |
|---|---|---|
basePayPerYard | $75 | Base pay per completed yard |
speedBonusAmount | $30 | Bonus for finishing within 60% of allowed time |
tierMultiplier | 1.0x / 1.5x / 2.0x | Based on yard size (small/medium/large) |
levelMultiplier | 1.0x - 1.5x | Based on player level |
timerMultiplier | 1.0 or 0.85 | Penalty if timer expired |
streakBonus | $0 - $70 | Based on daily streak |
tip | $0 - $50 | Random chance based on level |
Shift Payout
At clock-out, all yard earnings are summed and deductions applied:
| Deduction | Rate | Description |
|---|---|---|
| Vehicle Damage | $0.50/hp | Body health below 950 threshold |
| Gas Fee | 5% | Percentage of gross pay |
| Taxes | 10% | San Andreas income tax |
Net Pay = Gross Pay - Vehicle Damage - Gas Fee - Taxes
Co-op Bonus
When working in a crew, each yard completed earns a 15% co-op bonus on top of the normal payment. Both crew members receive the full payment plus the bonus.
Crew System
Two players can work together as a crew for bonus pay and shared yards.
Forming a Crew
- Clock in at a landscaping office
- Open the context menu and select "Invite to Crew"
- The nearest eligible player within 10m receives a confirmation prompt
- If accepted, the partner joins the crew and shares the leader's yards and van
Requirements
- Leader must be clocked in
- Partner must not be clocked in or in another crew
- Partner must be within
Config.Crew.inviteRange(10m) - Invite expires after
Config.Crew.inviteTimeout(30 seconds)
Shared Resources
Both crew members:
- Share the same assigned yards
- Share the same company van
- Share the same mower
- Can both mow patches and remove obstacles
- Both receive payment for each yard
Crew Separation
| Scenario | Behavior |
|---|---|
| Partner clocks out | Leader continues solo, partner receives payout |
| Leader clocks out | Yards transfer to partner, leader receives payout |
| Partner dies/downed | Removed from crew, leader continues solo |
| Leader dies/downed | Yards transfer to partner, leader removed |
| Either disconnects | Yards transfer if possible, crew dissolved |
Complaint System
Complaints track unsafe or irresponsible behavior during shifts.
Triggers
| Action | Complaints Added |
|---|---|
| Vehicle destruction (van) | 1 |
| Death/downed on shift | 1 |
Consequences
| Setting | Default | Description |
|---|---|---|
Config.Complaints.maxComplaints | 3 | Complaints before timeout |
Config.Complaints.timeoutMinutes | 30 | Lockout duration in minutes |
When complaints reach the maximum, the player is temporarily suspended and cannot clock in.
Decay
Complaints decay with good work:
| Setting | Default | Description |
|---|---|---|
Config.Complaints.decayPerYard | 1 | Complaints removed per completed yard |
HUD Overlay
A minimal HUD overlay appears during active mowing.
Elements
- Timer: Countdown showing remaining time, color-coded by urgency
- Green: > 30 seconds remaining
- Yellow: 15-30 seconds remaining
- Red: < 15 seconds remaining
- Flashing: Timer expired (penalty active)
- Progress Bar: Shows patches and obstacles completed vs total
- Blade Hint: "Press G to raise/lower blades" toggle indicator
The overlay uses a Vue 3 NUI page with Tailwind CSS styling.
Waypoint System
Floating 3D markers appear above assigned yards to guide navigation.
Behavior
- Markers float above each assigned yard's center coordinate
- Display the yard name and distance in meters/kilometers
- Scale dynamically based on distance (larger when close, smaller when far)
- Toggle visibility by pressing
H
Settings
| Setting | Default | Description |
|---|---|---|
Config.Waypoints.enabled | true | Enable waypoint markers |
Config.Waypoints.heightOffset | 5.0 | Z offset above yard coords |
Config.Waypoints.scaleMin | 0.5 | Scale at far distance |
Config.Waypoints.scaleMax | 1.0 | Scale at near distance |
Config.Waypoints.scaleNearDist | 30.0 | Full scale within this range |
Config.Waypoints.scaleFarDist | 300.0 | Minimum scale beyond this range |
Audio & Particles
3D Positional Audio (xsound)
All sounds use xsound for 3D positional playback, audible to nearby players:
| Sound | File | Volume | Description |
|---|---|---|---|
| Blade toggle | lower_mechanical_whirr.ogg | 0.2 | One-shot when blades toggled |
| Mower engine | lawn_mower_engine_loop.ogg | 0.3 | Looped while blades are down |
| Engine failure | engine_fail.ogg | 0.4 | One-shot on mower destruction |
All sounds have a max audible distance of 30 meters.
Particle Effects
| Effect | Trigger | Description |
|---|---|---|
| Grass burst | Patch mowed | ent_dst_veg_shrub burst at mower position |
| Grass trail | Moving with blades down | ent_amb_wind_grass_dir looped behind mower |
| Damage smoke | Mower health low | ent_ray_heli_damage_smoke on mower body |
| Obstacle hit | Mower collides with obstacle | ent_dst_gen_contact_med_hard under mower |