mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-01-19 18:14:44 +00:00
Initial implementation of server-side bots that: - Spawn as real Player entities with full equipment - Move and broadcast position updates (10 tick/sec) - Take damage and die with backpack drops - Respawn after death - Combat system with accuracy model (adjustment vs recoil) Includes project documentation in bot-docs/ and Claude agent helpers. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
415 lines
14 KiB
Markdown
415 lines
14 KiB
Markdown
# PlanetSide Bot Behavior & Game Feel
|
||
|
||
## Vision System
|
||
|
||
**Field of View**: 60 degrees horizontal and vertical
|
||
- Adjustable variable, expected final range: 60-90 degrees
|
||
- Bots cannot see beyond this cone - must turn to acquire targets
|
||
- Creates realistic "blind spots" and flanking opportunities for players
|
||
|
||
### Spotting Mechanics
|
||
|
||
**Full Spot**: Clear visual on target, can identify and engage
|
||
- Time to acquire scales with distance:
|
||
- Close range: Very fast (nearly instant)
|
||
- Long range: Takes longer to confirm target
|
||
|
||
**Partial Spot**: Know something is there but can't fully engage
|
||
- Target went behind cover (saw them go there)
|
||
- See tracers coming from a direction (investigate)
|
||
- Heard gunfire/explosions from location
|
||
- **Behavior**: Move towards OR around to get better angle
|
||
|
||
---
|
||
|
||
## Core Decision Logic
|
||
|
||
```
|
||
SPOTTED TARGET?
|
||
├── Partial spot?
|
||
│ └── Move towards target OR move around target (reposition for better view)
|
||
├── Full spot?
|
||
│ └── ATTACK or COMPLETE OBJECTIVE
|
||
│ (enter vehicle, unlock door, hack terminal, etc.)
|
||
└── Cannot proceed?
|
||
└── REQUEST HELP (V-menu)
|
||
└── State what you need (VNG, VNH, etc.)
|
||
```
|
||
|
||
---
|
||
|
||
## V-Menu Communication System
|
||
|
||
Bots use the in-game quick voice system to communicate, creating authentic battlefield chatter.
|
||
|
||
### Voice Commands Used
|
||
|
||
**Requests & Responses**
|
||
| Command | Meaning | Use Case |
|
||
|---------|---------|----------|
|
||
| VVV | "HELP!" | General distress, need assistance |
|
||
| VNG | "Need Gunner" | Vehicle waiting for gunner before proceeding |
|
||
| VNH | "Need Hacker" | Door locked, can't proceed, need hacker |
|
||
| VVY | "Yes" | Acknowledging help request, on my way |
|
||
| VVB | Taunt (variant B) | Vengeance kill, celebration |
|
||
| VVZ | Taunt (variant Z) | Vengeance kill, celebration |
|
||
|
||
**Warnings (Intel Sharing)**
|
||
| Command | Meaning | Use Case |
|
||
|---------|---------|----------|
|
||
| VWA | "Warning: Aircraft!" | Enemy air incoming, triggers AA MAX spawns |
|
||
| VWV | "Warning: Vehicles!" | Enemy armor incoming, triggers AV MAX spawns |
|
||
| VWT | "Warning: Troops!" | Enemy infantry push, triggers AI MAX spawns |
|
||
|
||
### Help Request Flow
|
||
1. Bot encounters obstacle it cannot handle alone
|
||
2. Bot broadcasts appropriate V-menu request
|
||
3. Capable bots in range evaluate:
|
||
- Can I help with this? (Do I have the cert/ability?)
|
||
- Can I path to them? (Pull `/loc` of requester, check route)
|
||
4. If yes to both:
|
||
- Respond with `VVY`
|
||
- Begin movement to assist
|
||
5. **Result**: Organic teamwork feel, tactical advantage, immersion
|
||
|
||
---
|
||
|
||
## Bot Classes
|
||
|
||
PlanetSide 1 has no rigid classes, but bots need defined roles for sanity. Each class is a **pre-built loadout** with associated behavior logic.
|
||
|
||
### Class Definitions
|
||
|
||
| Class | Role | Key Abilities | Notes |
|
||
|-------|------|---------------|-------|
|
||
| **Driver** | Vehicle operation | Drive/pilot vehicles | Low priority on VNG (see below) |
|
||
| **Support** | Heal & Repair | Medical applicator, BANK/Nano repair | LOVES gunning (can heal vehicle) |
|
||
| **Hacker** | Infiltration & Capture | REK, door unlocking, base/tower/vehicle hacking | Critical for objective play |
|
||
| **AV** | Anti-Vehicle | Decimator, Lancer, Phoenix, Striker? | Tank hunters |
|
||
| **MAX** | Heavy Exosuit | Faction MAX suits (AI/AV/AA variants) | Walking tanks |
|
||
| **Vet** | Versatile Veteran | HA + AV + Basic Hacking + Basic Support | Jack of all trades |
|
||
| **Ace** | Empire Leader | Best at everything + Command authority | ONE per empire, special role |
|
||
|
||
### Vet Class Details
|
||
- Can do *most* things but slower/weaker than specialists
|
||
- Won't get stuck at locked doors (can hack, just slower)
|
||
- Won't panic at incoming tank (has AV, can fight back)
|
||
- Field-flexible, self-sufficient
|
||
- Good baseline "competent soldier" behavior
|
||
|
||
### Ace Class Details
|
||
- One per empire (TR Ace, NC Ace, VS Ace)
|
||
- **Last bot to logout** as real players join
|
||
- Uses **Command Chat** (CR3+ channel) for tactical orders
|
||
- Makes strategic decisions for bot team:
|
||
- Where to attack
|
||
- Where to defend
|
||
- Force distribution
|
||
- **CRITICAL**: Defers to real players
|
||
- Won't overstep human commanders
|
||
- Offers advice if no player is commanding
|
||
- Lets players make the calls when they want to
|
||
|
||
### MAX Class Details
|
||
**Situational Loadout Switching** based on intel:
|
||
- **Indoors** (last death location or teammate intel): AI MAX
|
||
- **VWV received** (Warning: Vehicles): AV MAX
|
||
- **VWA received** (Warning: Aircraft): AA MAX
|
||
- **VWT received** (Warning: Troops) + outdoors: Context-dependent
|
||
|
||
This creates reactive, intelligent heavy support that adapts to battlefield needs.
|
||
|
||
### Driver & Gunner Dynamics
|
||
- **Anyone** can be a gunner - it's not role-restricted
|
||
- **Drivers** respond to VNG but low priority (they want to drive)
|
||
- **Support** actively seeks gunner seats - can heal vehicle while gunning
|
||
- **Drivers** can also heal their own vehicle but teamwork = faster repairs
|
||
- Vehicles wait for gunner before proceeding (VNG call) for effectiveness
|
||
|
||
---
|
||
|
||
## Attitude & Vengeance System
|
||
|
||
Gives Vet+ bots personality and memorable behavior.
|
||
|
||
### Attitude Stat
|
||
- Internal emotional state of the bot
|
||
- Affects decision-making and aggression
|
||
|
||
### Vengeance Mechanic
|
||
1. **Death Memory**: Vet remembers where they died and who killed them
|
||
2. **Revenge Decision**: Based on attitude, may decide to hunt killer
|
||
3. **Constraints**:
|
||
- Must be reasonable range (same base spawn area)
|
||
- No cross-continent adventures
|
||
4. **On Successful Revenge**:
|
||
- Taunt victim (VVB or VVZ)
|
||
- Attitude decreases (calms down)
|
||
5. **On Repeated Death (no revenge)**:
|
||
- Attitude increases ("rage" building)
|
||
- **Rage Effects**:
|
||
- Increased accuracy
|
||
- Increased aggression
|
||
6. **Rage Reset Conditions**:
|
||
- Achieve vengeance
|
||
- Get a 3-kill streak
|
||
- Participate in base capture
|
||
|
||
---
|
||
|
||
## Movement Patterns
|
||
|
||
Movement varies by experience level and empire. Critical for not looking like a bot.
|
||
|
||
### By Experience Level
|
||
|
||
**New Players / Basic Bots**
|
||
- Run mostly straight at target
|
||
- Held strafe to maintain firing angle (not ADAD, just constant drift)
|
||
- Minimal evasion, focused on keeping crosshairs on target
|
||
|
||
**Vets & Aces**
|
||
- Heavy ADAD strafing (left-right-left-right)
|
||
- Combined with crouch spam during firefights
|
||
- Much harder to hit, more "tryhard" movement
|
||
|
||
### Empire-Specific Movement
|
||
- **NC**: Benefits from closing distance (shotguns) - more aggressive advance
|
||
- **TR/VS**: TBD - circle back when adding faction identity
|
||
|
||
### What NOT To Do
|
||
- **Almost no jumping** - PS players don't bunny hop
|
||
- Exception: MAXes might jump to dodge AV rockets (ADVANCED - maybe skip for v1)
|
||
- Robotic pathing, perfect angles, inhuman reaction times
|
||
|
||
### Tuning Note
|
||
> "I don't know what [bot movement] would feel like yet, we've never had bots before. I will help dial this in with many many play tests."
|
||
|
||
Movement feel will require extensive playtesting iteration.
|
||
|
||
---
|
||
|
||
## Retreat & Self-Preservation
|
||
|
||
### When Bots Retreat
|
||
|
||
| Class | Retreat Trigger |
|
||
|-------|-----------------|
|
||
| **Vets** | Low HP |
|
||
| **Drivers** | Low vehicle HP (save the vehicle!) |
|
||
| **Everyone** | Out of ammo (not just reloading - actually empty) |
|
||
|
||
### Order Context Matters
|
||
|
||
**If orders = DEFEND:**
|
||
- Stay at position no matter what (unless need supplies)
|
||
- Quick runs to spawn room / nearest terminal for ammo/resupply
|
||
- Return immediately to defensive position
|
||
|
||
**If orders = ATTACK:**
|
||
- More flexible retreat for self-preservation
|
||
- Regroup and push again
|
||
|
||
### What Retreat Looks Like
|
||
- Not a panicked sprint
|
||
- Backing away while facing threat when possible
|
||
- Finding cover, then breaking line of sight
|
||
|
||
---
|
||
|
||
## Combat & Accuracy System
|
||
|
||
Bot shooting should feel natural, not robotic. Two opposing forces create a "sweet spot" in sustained fire.
|
||
|
||
### Target Recognition Time
|
||
|
||
Before engaging, bots must **recognize** their target. Time to recognize scales with distance:
|
||
|
||
| Distance | Recognition Time | Notes |
|
||
|----------|-----------------|-------|
|
||
| **Close** (< 15m) | Near instant | Light them up immediately |
|
||
| **Medium** (15-50m) | 0.3-0.8 sec | Brief pause, then engage |
|
||
| **Far** (50m+) | 1-2 sec | Takes time to confirm target |
|
||
| **Obscured** | Investigate | Move to get better angle (defer to navmesh) |
|
||
|
||
### Accuracy System (Two Forces)
|
||
|
||
**Force 1: Adjustment (Accuracy improves)**
|
||
- First shots are inaccurate (bot is "dialing in" aim)
|
||
- Accuracy increases with each shot as bot finds the target
|
||
- Close targets = higher base accuracy, faster adjustment
|
||
- Far targets = lower base accuracy, slower adjustment
|
||
|
||
**Force 2: Recoil (Spread worsens)**
|
||
- Each shot adds recoil
|
||
- Recoil accumulates, making spread worse over time
|
||
- Creates "diminishing returns" on sustained fire
|
||
|
||
### The Sweet Spot
|
||
|
||
```
|
||
Accuracy over time during sustained fire:
|
||
|
||
↑ Accuracy
|
||
│ ╭──────╮
|
||
│ ╱ ╲
|
||
│ ╱ ╲
|
||
│ ╱ ╲ ← recoil takes over
|
||
│ ╱
|
||
│╱ ← adjusting aim
|
||
└────────────────────────→ Time/Shots
|
||
First Middle Late
|
||
shots shots shots
|
||
(miss) (HIT!) (spray)
|
||
```
|
||
|
||
**Result by distance:**
|
||
- **Close range**: High base accuracy + fast adjustment = nearly all shots hit
|
||
- **Medium range**: Sweet spot matters - middle of burst is most dangerous
|
||
- **Long range**: May only land a few hits early (lucky) or middle (adjusted)
|
||
|
||
### Class Modifiers (Future)
|
||
|
||
| Class | Accuracy Modifier | Notes |
|
||
|-------|------------------|-------|
|
||
| Basic/Newbie | 1.0x (baseline) | Average accuracy |
|
||
| Vet | 1.3x accuracy, 0.8x recoil | Much better aim |
|
||
| Ace | 1.5x accuracy, 0.7x recoil | Best of the best |
|
||
| Support | 0.9x accuracy | Focused on healing |
|
||
| MAX | 0.8x accuracy, 1.2x recoil | Big guns, more spray |
|
||
|
||
### Practical Implications
|
||
|
||
1. **Players should win fair fights** - bots aren't aimbots
|
||
2. **Getting close is dangerous** - bots don't miss at point blank
|
||
3. **Distance = safety** - but not immunity (lucky shots happen)
|
||
4. **Burst fire beats spray** - short controlled bursts reset recoil
|
||
5. **Flanking works** - recognition time gives advantage
|
||
|
||
---
|
||
|
||
## The Chaos Factor
|
||
|
||
> "Spam? Spam. Be it bullets, grenades, the voice menus it's all about the chaotic spam. It's a war unlike the world has ever recreated."
|
||
|
||
### What Makes PS Fights Feel Like PS
|
||
- **Bullet spam**: Walls of tracers, suppressive fire is real
|
||
- **Grenade spam**: Explosions everywhere
|
||
- **Voice spam**: V-menu callouts constantly firing
|
||
- **Scale**: Hundreds of participants, not 32v32
|
||
|
||
### Bot Contribution to Chaos
|
||
- Bots should ADD to the chaos, not feel sterile
|
||
- Coordinated V-menu chatter (see calibration below)
|
||
- Miss shots (don't be laser accurate)
|
||
- React to nearby explosions/deaths
|
||
- Fire at enemies even when hit chance is low (suppression)
|
||
|
||
---
|
||
|
||
## Damage Reaction
|
||
|
||
How bots respond to taking damage depends on context.
|
||
|
||
### In Combat (Already Engaged)
|
||
- **Direct bullet hit from new direction**: May turn toward new threat OR smart-switch targets
|
||
- **Explosions/grenades**: Ignore direction (damage comes from everywhere) - stay on current target
|
||
- **Decision**: Stick with current target vs switch based on threat assessment
|
||
|
||
### Out of Combat (Doing Task)
|
||
Example: Repairing a vehicle, then gets shot
|
||
|
||
1. **PANIC** - immediate state change
|
||
2. **Run to cover** - most likely the vehicle they were repairing
|
||
3. **Swap to weapon** while running
|
||
- Drivers: Have sidearm ready (fast)
|
||
- Support: Must swap from repair tool (slower, panicked weapon swap animation)
|
||
4. **Engage threat** once in cover with weapon out
|
||
|
||
### Key Feel
|
||
- The "panic run while swapping weapons" is authentic PS behavior
|
||
- Not a clean tactical response - messy, human reaction
|
||
- Repair slot = weapon slot means class differences in response time
|
||
|
||
---
|
||
|
||
## V-Menu Calibration
|
||
|
||
Balancing authentic chatter vs annoying spam.
|
||
|
||
### Always Fire (Functional)
|
||
| Type | When | Purpose |
|
||
|------|------|---------|
|
||
| **Needs** (VNG, VNH, VVV) | When actually needed | Gameplay function |
|
||
| **Warnings** (VWA, VWV, VWT) | When threat spotted | Intel sharing |
|
||
| **Acknowledgment** (VVY) | When responding to request | Coordination |
|
||
|
||
### Rare/Conditional
|
||
| Type | When | Frequency |
|
||
|------|------|-----------|
|
||
| **Taunts** (VVB, VVZ) | Vengeance kills, domination | Low |
|
||
| **Celebrations** (VVF, VVE) | Exceptional events only | Very controlled |
|
||
|
||
### Celebration Events
|
||
Triggers for VVF ("Fantastic!") and VVE ("Excellent!"):
|
||
- Pesky vehicle destroyed
|
||
- Killed someone with 10+ kill streak
|
||
- Base capture
|
||
|
||
### Coordinated Celebration System
|
||
**Problem**: 50 bots all saying "VVE!" at once = annoying
|
||
**Solution**: Backend coordination
|
||
|
||
```
|
||
EVENT: Base captured
|
||
|
||
1. RNG determines responder count (1-6 bots)
|
||
2. Eligible bots (alive, in range) "claim" slots via backend
|
||
3. Each responder gets RNG delay timer
|
||
4. Staggered, natural response
|
||
|
||
EXAMPLE TIMELINE:
|
||
0.01s - Bot 1: "VVE" (Excellent!)
|
||
0.30s - Bot 2: "VVF" (Fantastic!)
|
||
1.20s - Bot 3: "VVF"
|
||
1.30s - Bot 4 (Vet): "VVB VVF" ("You can't beat me." + "Outstanding!")
|
||
```
|
||
|
||
### Vet/Ace Flavor
|
||
- Vets and Aces can do **combo callouts** (taunt + celebration)
|
||
- Adds personality, shows experience
|
||
- E.g., "You can't beat me." followed by "Outstanding!"
|
||
|
||
---
|
||
|
||
## Open Questions / Needs Expansion
|
||
|
||
### Resolved
|
||
- [x] "Partial spot" vs full spot - distance + time based, also tracers/intel
|
||
- [x] Driver class VNG response - low priority, anyone can gun
|
||
- [x] MAX variants - switches based on intel (VWA/VWV/VWT, indoor/outdoor)
|
||
- [x] Movement patterns - ADAD for vets, straight-run for newbies
|
||
- [x] Retreat behavior - HP, ammo, vehicle HP triggers
|
||
|
||
### Deferred (Future Phases)
|
||
- [ ] **FACTION TACTICS**: TR vs NC vs VS combat style differences (post-v1)
|
||
- [ ] **MAX jumping to dodge AV**: Advanced behavior, maybe skip
|
||
|
||
### Resolved (Round 2)
|
||
- [x] **REACTION TO DAMAGE**: Context-dependent (see Damage Reaction section)
|
||
- [x] **V-menu calibration**: Coordinated celebration system (see V-menu section)
|
||
|
||
---
|
||
|
||
## Implementation Notes
|
||
|
||
### Server Integration Questions
|
||
- Can bots trigger V-menu voice commands through server?
|
||
- Is Command Chat accessible for bot messages?
|
||
- Is CR (Command Rank) system implemented in emulator?
|
||
|
||
### Technical Considerations
|
||
- `/loc` command - server-side coordinate access for pathfinding
|
||
- Death tracking - need to log killer + location per bot
|
||
- Attitude persistence - per-session or reset on logout?
|