adventuring / adventuring/ChaosFight

Large Source Files Exceed 200 Line Target

Offen
#17 5 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
enhancement
Vorherrschende Sprache
Assembly
Sterne
1
Forks
0
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

## 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

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.