adventuring / adventuring/ChaosFight

Large Source Files Exceed 200 Line Target

Abierto
#17 5 comentarios 0 reacciones 0 asignados Ver en GitHub
enhancement
Lenguaje dominante
Assembly
Estrellas
1
Forks
0
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

## Problem
Several source files exceed the 200-line target size for maintainability.

## Current State
**Critical (>400 lines):**
1. **Source/Data/Playfields.bas** (605 lines) - Playfield color definitions
2. **Source/Routines/CharacterSelect.bas** (602 lines) - Character selection screen
3. **Source/Routines/LevelData.bas** (595 lines) - Arena definitions (16 arenas)
4. **Source/Routines/PlayerInput.bas** (584 lines) - Player input handling
5. **Source/Routines/CharacterControls.bas** (535 lines) - Character-specific controls

**High Priority (300-400 lines):**
6. **Source/Routines/MissileSystem.bas** (490 lines) - Missile management
7. **Source/Routines/MissileCollision.bas** (396 lines) - Missile collision detection
8. **Source/Routines/PlayerPhysics.bas** (427 lines) - Physics system
9. **Source/Routines/PlayerRendering.bas** (422 lines) - Sprite rendering
10. **Source/Routines/SpriteLoader.bas** (399 lines) - Sprite loading
11. **Source/Routines/FallDamage.bas** (359 lines) - Fall damage system

## Refactoring Strategies

### 1. Source/Data/Playfields.bas (605 lines)
**Split Strategy:**
- **Keep**: `Playfields.bas` (~100 lines for includes/structure)
- **Create**: `PlayfieldsArenas.bas` (~500 lines)
- All 16 arena color definitions
- Each arena definition is ~30-35 lines

**New Structure:**
- `Playfields.bas`: Main playfield color system, includes/exports shared colors
- `PlayfieldsArenas.bas`: All 16 arena color definitions

### 2. Source/Routines/LevelData.bas (595 lines)
**Split Strategy:**
- **Keep**: `LevelData.bas` (~50 lines for structure/index)
- **Create**: `LevelDataArenas.bas` (~540 lines)
- All 16 arena playfield data
- Each arena: ~34 lines (playfield + colors + return)

**Alternative**: Split into 4 files (4 arenas each, ~135 lines per file):
- `LevelDataArenas1-4.bas`, `LevelDataArenas5-8.bas`, `LevelDataArenas9-12.bas`, `LevelDataArenas13-16.bas`

### 3. Source/Routines/CharacterSelect.bas (602 lines)
**Split Strategy:**
- **Keep**: `CharacterSelect.bas` (~150 lines for main loop/orchestration)
- **Create**: `CharacterSelectInput.bas` (~250 lines) - All input handling routines, player selection logic
- **Create**: `CharacterSelectRendering.bas` (~200 lines) - Screen rendering, character preview display, border drawing

### 4. Source/Routines/PlayerInput.bas (584 lines)
**Split Strategy:**
- **Keep**: `PlayerInput.bas` (~150 lines for main dispatcher)
- **Create**: `PlayerInput2Player.bas` (~200 lines) - 2-player mode input (Players 1-2)
- **Create**: `PlayerInput4Player.bas` (~230 lines) - 4-player mode input (Quadtari multiplexing, Players 3-4)

### 5. Source/Routines/CharacterControls.bas (535 lines)
**Split Strategy:**
- **Keep**: `CharacterControls.bas` (~100 lines for dispatcher)
- **Create**: `CharacterControlsMelee.bas` (~200 lines) - Melee-focused characters (Bernie, KnightGuy, etc.)
- **Create**: `CharacterControlsRanged.bas` (~150 lines) - Ranged attack characters
- **Create**: `CharacterControlsSpecial.bas` (~85 lines) - Special movement characters (Frooty, RoboTito, etc.)

### 6. Source/Routines/MissileSystem.bas (490 lines)
**Split Strategy:**
- **Keep**: `MissileSystem.bas` (~150 lines for main routines)
- **Create**: `MissileSystemSpawn.bas` (~100 lines) - SpawnMissile routine, missile initialization
- **Create**: `MissileSystemUpdate.bas` (~180 lines) - UpdateOneMissile routine, gravity/friction/bounce logic
- **Create**: `MissileSystemRender.bas` (~60 lines) - RenderAllMissiles routine, sprite positioning

### 7. Source/Routines/MissileCollision.bas (396 lines)
**Split Strategy:**
- **Keep**: `MissileCollision.bas` (~100 lines for dispatcher)
- **Create**: `MissileCollisionVisible.bas` (~180 lines) - CheckVisibleMissileCollision, AABB collision with players
- **Create**: `MissileCollisionAOE.bas` (~115 lines) - CheckAOECollision, Bernie special case (both directions), AOE player checks

### 8. Source/Routines/PlayerPhysics.bas (427 lines)
**Split Strategy:**
- **Keep**: `PlayerPhysics.bas` (~150 lines for main coordination)
- **Create**: `PlayerPhysicsGravity.bas` (~120 lines) - Gravity application, character-specific gravity (Harpy)
- **Create**: `PlayerPhysicsCollisions.bas` (~160 lines) - CheckBoundaryCollisions, CheckAllPlayerCollisions (6 pairs), separation logic

### 9. Source/Routines/PlayerRendering.bas (422 lines)
**Split Strategy:**
- **Keep**: `PlayerRendering.bas` (~150 lines for main coordination)
- **Create**: `PlayerRenderingSprites.bas` (~150 lines) - SetPlayerSprites, sprite positioning, 4-player multiplexing
- **Create**: `PlayerRenderingColors.bas` (~120 lines) - Player color setting, hurt flashing logic, guard flashing integration

### 10. Source/Routines/SpriteLoader.bas (399 lines)
**Split Strategy:**
- **Keep**: `SpriteLoader.bas` (~150 lines for main routines)
- **Create**: `SpriteLoaderSprites.bas` (~150 lines) - LoadCharacterSprite, sprite data loading
- **Create**: `SpriteLoaderColors.bas` (~100 lines) - LoadCharacterColors, color table lookups, player index colors

### 11. Source/Routines/FallDamage.bas (359 lines)
**Split Strategy:**
- **Keep**: `FallDamage.bas` (~150 lines for main routines)
- **Create**: `FallDamageCalculation.bas` (~110 lines) - CheckFallDamage, damage calculation formulas, weight-based thresholds
- **Create**: `FallDamageEffects.bas` (~100 lines) - ApplyFallDamage, Harpy dive attack logic, knockback application

## Implementation Order

### Phase 1: Data Files (Lowest Risk)
1. **LevelData.bas** → Split into arena data file
2. **Playfields.bas** → Split into arena colors file

### Phase 2: Collision/Physics (Medium Risk)
3. **MissileCollision.bas** → Split visible/AOE collision
4. **PlayerPhysics.bas** → Split gravity/collisions
5. **MissileSystem.bas** → Split spawn/update/render

### Phase 3: Rendering (Medium Risk)
6. **PlayerRendering.bas** → Split sprites/colors
7. **SpriteLoader.bas** → Split sprites/colors

### Phase 4: Input/Controls (Higher Risk)
8. **PlayerInput.bas** → Split 2-player/4-player
9. **CharacterControls.bas** → Split by character type
10. **CharacterSelect.bas** → Split input/rendering

### Phase 5: Special Systems (Lower Risk)
11. **FallDamage.bas** → Split calculation/effects

## Testing Strategy

For each refactoring:
1. **Verify compilation** - Ensure project builds
2. **Runtime testing** - Test affected game features
3. **Regression testing** - Ensure no functionality broken
4. **Code review** - Verify logical organization

## Benefits

- **Maintainability**: Smaller files easier to understand/modify
- **Single Responsibility**: Each file has clear purpose
- **Reduced complexity**: Less code per file = less cognitive load
- **Easier debugging**: Issues localized to smaller modules
- **Better organization**: Related functionality grouped logically

## Notes

- Maintain backward compatibility - no API changes
- Use `gosub` calls between split files (batariBASIC supports cross-file calls)
- Keep related functionality together when splitting
- Consider bank switching constraints if applicable
- Document split points clearly with comments

## Priority
Low - Technical debt cleanup, doesn't affect functionality but improves maintainability

## Target
All source files should be < 200 lines each

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.