9.4 KiB
9.4 KiB
TODO
- Convert static arrays in much of the renderer structs to Vec since at high res they can potentially overflow the stack
- Archvile attacks and chase
- Archvile raise the dead
- Pain elemental attacks and die
- Doom 2 boss brain thing
- Can't target it, probably because it's not visible? There's that thing in front?
- Wad mobj flags a different to in-game info flags...
- Statusbar doomguy face god-mode
- Implement UMAPINFO support https://doomwiki.org/wiki/UMAPINFO
FUNCTIONALITY
- [-] Menu screens (partial. Other functionality required before completion)
- [-] Intermissions and finale (intermission has no animated text. Finale needs cast for Doom II, and bunny for Doom)
- Screen wipe
- HUD (Done except for multiplayer chat)
- Automap
- Status bar
- Demo playback
- Save/load game
- Sound:
- Verify positional sound
- Verify distance and cutoff
- Check the volumes (had to divide midi track vol in half)
- Add the pitch shift
- Maybe use the
usefulness
field.. - OPL2 emulation (a lot of work here)
BUGS
- Aim/shoot tries to hit low enemy even if portal blocks view
- Doom 2 M13
thread '<unnamed>' panicked at 'called
Result::unwrap()on an
Errvalue: "Parameter 'size' is invalid"', sound/sdl2/src/lib.rs:344:74
- M30
thread 'main' panicked at 'attempt to divide by zero', /home/luke/Projects/room4doom/intermission/doom/src/lib.rs:257:40
- panicked at 'attempt to add with overflow', render-soft/src/segs.rs:477:18 --
yl = (self.topfrac + HEIGHTUNIT) as i32 + 1;
- e2m8
thread 'main' panicked at 'index out of bounds: the len is 0 but the index is 0', render/software/src/things.rs:401:21
- Revenant rockets head off in wrong direction
- Don't pickup armour shards if have max armour
- Total kills: doesn't count for player if they shoot a barrel and that barrel kills a demon.
- [-] Demons shouldn't open locked doors (Actual Doom isue)
- angle_to_screen has an impact on sizing and scale
- Fix the types in texture module
- The fix for players stuck in doors is causing floaty blood
IMPROVEMENTS
- Statusbar doomguy face attacked-from-angle
- Make responders use ticcmds to ensure they are generic
- Analyse the game further to allow more use of
unwrap_unchecked()
where we know for sure the data is initialised and valid. - The Thinker data access methods really should return
Option<T>
- Thinkers: For inner data get, add a compile-time cfg opt to panic, or return Option.
- Need to reset sector sound targets if player dies
- refactor the stair-builder loop to use lines iter. It currently needs two mutable accesses to data in a loop
- let target = unsafe { (*target).object_mut().mobj() };// make a shortcut for this
- Make skulls attempt to scale inanimate objects. This is related to objects taking the full Z-axis . It's (currently) not possible to "step" on top of another object
- Step over things if higher
- Where aiming/shooting at an object the shooter should be a point while target + radius is considered
Graphics
- Graphics options config in config file
- Add a true software renderer using the OG fixed-point style of DOOM
- OpenGL renderer
- Vulkan renderer
BOOM stuff to consider
- Lump name
SWITCHES
, extend the switch list - Lump name
ANIMATED
, extend the animated texture list - Lump name
TRANMAP
for transparency? - New linedef flag, bit 9, PassThru, that allows one push to activate several functions simultaneously.
- Generalized linedef types added in range 2F80H - 7FFFH
- Generalized sector types using bits 5-11 of the sector type field
PARTIAL-COMPLETE
- [-] Really need swept-volume collisions (done half-arsed)
- [-] P_KillMobj (target/source stuff)
- [-] P_UpdateSpecials (todo: level timer)
DONE
- Shade screen with red palettes for increased damage (not the "took damage" flash)
- Player sprite isn't rendered with 'static' if player is invisible
- Chaingun guy doesn't do burst-fire (shoots, but not sustained) (remove invalid state set)
- Monsters don't activate when player is real close (related to angle fix?)
- Colours seem off for darker areas? (was incorrect float conversion on zlight table creation)
- Re-implement warp
- Player can get stuck in doors if the close on the edge of bounds the thinker list fucnction for the door sector runs it doesn't see it
- Shadow-pinkies (use p_random instead of rewriting framebuffer)
- Sprites colourmap/light selection (spectors)
- Average the lines in a sector for sound origins (determined by center of sector AABB)
- Don't shoot sky
- Explosions shouldn't hit above or below (sight check)
- E1M5 Candelebra not on ground?
- Lift sounds for E5M3 don't stop
- Shots from demons don't push the player
- Sight angle incorrect for any mobj not 90-270 degrees:
if !all_around {
let angle = point_to_angle_2(xy, self.xy).rad() - self.angle.rad();
if angle.abs() > PI && self.xy.distance(xy) > MELEERANGE {
continue;
}
}
changed to:
if !all_around {
let xy = point_to_angle_2(xy, self.xy).unit(); // Using a unit vector to remove world
let v1 = self.angle.unit(); // Get a unit from mobj angle
let angle = v1.angle_between(xy).abs(); // then use glam to get angle between (it's +/- for .abs())
if angle > FRAC_PI_2 && self.xy.distance(xy) > MELEERANGE {
continue;
}
}
- Reduce use of
*player
and unsafe - Sector sound origin for specials
- iterate sector lines to find max bounding box for sector and set sound_origin
- INFLOAT, floatok, skulls
- EV_DoDonut (E2M2)
- EV_StopPlat - requires tracking some active platforms.
- Some buttons no-longer change? (Shouldn't have been if else-if)
- P_RecursiveSound - use flood through sectors. P_NoiseAlert
- Sector sound targets - done with P_RecursiveSound
- Recheck planes (seems correct now)
- Make powerups count down
- Load sprites
- fixed-colourmap (special effects like rad suit, invuln, player-hit)
- Sound state machine on new thread
- Move "extra light" arg up the call chain to lightmap selection functions
- P_TouchSpecialThing
- Shooting
- Shooting special items/lines
- Thing collisions
- EV_Teleport (todo: telefrag stuff)
- Sound distances (SDL helpers?)
- sound-server using rx/tx channels
- track the playing sound sources and the channels they are on
- Music:
- Convert MUS to MIDI
- Play using basic SDL2 + fluidsynth
- Play using GUS via SDL2 + timidity (
DMXGUS
lump)
- A method to find all SubSectors in a radius This is required for explosion type stuff
- FIXED: Needed to pass actual endpoint Vec2 for check: Thing collisions are basic, they need "drift" off the center of a thing
- FIXED: incorrect mover. E5M1 second "eye" to shoot doesn't react
- Sprite rotations
- FIXED: Sprite sorting: impl Ord on VisSprite for rust iiter sorting
- Sprite clipping (issues with planes, doors)
- FIXED: Teleport telefrag killing entire sector not just spawn point: Radius check
- Implement P_DamageMobj
- Doom 2 M4 chopper window bottom plane is not done?
- E1M4 round room, floor strip inside of door steps isn't getting a visplane? + Same as D2M4. Both checked in Slade. Fixed by ignoring missing texture to ensure visplane is built.
- Fixed: needed to null-check :-| Doom 2 teleports cause segfault
- P_PlayerInSpecialSector
- FIXED: Fix Doom II map 4. There seems to be something causing a thinker list invalid ref?
- FIXED: Get the occasional crash from thinker slots running out before level start?
- Implement EV_BuildStairs
- Implement texture read and prep for use
- FIXED: they work I guess: E3M4 crushers
- Doom2 M9 lift textures
- upper of some textures are screwed
- door in spawn area (behind) is drawn incorrectly
- map 24 Doom 2, texture to right of open area is bad
- map 1 SIGIL, texture in front is borked
- e1m1 right lift upper texture not drawn
- e1m9 corner lifts aren't cutting bottom of texture?
- e3m4 crushers textures aren't culling correctly?
- e3m4, player can't fit. The proper setup of line back/front sectors affects this and now SubSectorMinMax needs work.
- animated textures (flattranslation, texturetranslation)
- EV_DoLockedDoor
- Skybox
- FIXED: Increased limits. Large sigil levels have rendering issues
- doom2 m8 LowerAndChange, not implemented yet
- Spans borked in E4M3 after first teleport (look at pad)
- render_bsp_node is way too grabby. It's pulling subsectors that arn't actually in view
- head-bob causes textures to jitter
- seg render topfrac doesn't seem quite right? Some texture render starts are offset up by one pixel?
- Load textures
- FIXED: some tme ago: Lump cache isn't actually being fully used, use it!
Game and doom-lib are now separate crates with these criteria: "game" controls input and ticcmd, rendering, and menu display "game" will also check state and show appropriate screens (like demo, intermission, menus) "doom-lib" is pure gamestate things like level control, map objects, thinkers etc.
Adjust the lines like this:
ev_build_stairs(line.clone(), StairKind::Turbo16, level);
line.special = 0;
Find a better way to do let level = unsafe { &mut *thing.level };