adventuring / adventuring/ChaosFight
Large Source Files Exceed 200 Line Target
- 主要言語
- Assembly
- スター
- 1
- フォーク
- 0
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
## 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
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
評価
この issue はまだ評価されていません。