Giter Site home page Giter Site logo

lixd's People

Contributors

alexmyczko avatar cybershadow avatar geoo89 avatar lucki avatar mailaender avatar simonn avatar szpak avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lixd's Issues

Option menu, offer hardware fullscreen

Version 0.2.19

Ramond can play with hardware fullscreen. The game didn't run on his laptop otherwise, neither in windowed mode nor in software fullscreen (= a window the size of the screen without a title bar). The command-line switch lix --hardfull=1600x900 accesses hardware fullscreen right now, where the resolution can be arbitrary.

This should get a nice user option, so Ramond doesn't have to run the game with command-line arguments all the time.

Load user state, framestep back -> unnecessary replay arrows

Version 0.1.28.
This bug is also in C++ Lix 2016-01-09.

How to repro: Load a user savestate from the very future, with lots of assignments in that savestate/replay, while having no effects in the EffectManager recorded. Then framestep back continuously.

Observed: Replay arrows are shown during the on-the-fly forward recalculation.

Expected: These arrows should not be shown during framestepping back. They should only be visible while going forward.

Water misanimated after entering level

Enter a level with water. We start at update 45, because it's singleplayer: Spawn 1 second = 15 frames after start, and we always spawn at 60.

In the first visible frame, the water is animated like it should be for frame 0, not 45. In the next frame, it jumps to how it should look for frame 46.

Empty screen space on small maps, how to fill

Play a small non-torus level. It will center horizontally on the screen, and be vertically aligned at the bottom, right over the skill icons.

Expected instead: Centered vertically too, expected by both namida and Ramond.

Small maps could be auto-zoomed to fill the space. That brings an inconsistency with it, how default zoom is chosen. What should default zoom be, anyway?

Tumbler triggers assert (false) near end of collision()

Version 0.1.26.
Unknown circumstances, this bug is elusive right now. It should be investigated once replays can be loaded from disk.

Effect of the bug: The assert in lix.skill.tumbler is triggered:

final Collision collision()
{
    [...]
    // No collisions found at this pixel.
    if (isSolid(0, 1))
        assert (false, "copy more from tumbler.cpp:213, v2015-09-02.");

mouse leaves/cannot leave window

Run the game -w for windowed mode. While no freeze direction is called in hardware.mouse, move the mouse around very fast. The OS cursor will be shown outside the window occasionally. Holding RMB to freeze directions prevents this.

Expected: Cursor should be prevented from leaving even without freezing directions.

Framestepping, 2nd function of buttons: execute continuously

Left-click a framestepping button or press its primary hotkey. It performs its function. Keep the key/button held. The button will perform continuously after a little while.

Right-click a framestepping button or press its secondary hotkey. It will perform once, and any further activation requires a fresh press. Holding is not enough.

Expected: Only the fast-forward button should behave like the second paragraph above. The framestepping buttons should behave like the first paragraph, no matter which of their two functions is activated.

replay browser, slow performance on indirection

Version 0.1.30.

Enter the replay browser, navigate to a directory with many replays. The browser lists all replays, and labels them with the level name.

This is done by indirection: open replay file -> read level filename -> open this level as another file -> print name of level. This might be a little slow.

Maybe beef up the replay code to handle level names, in case the level is included. In most cases, the level is included. In most cases, it's wanted to play the included level rather than the pointed-to level.

Misaligned image/physics for dark piece

0.2.11

Clam gave this feedback, and I have reproduced this:

This staircase piece appears too high, though it's correct for physics purposes. Physics-wise, they connect at the bottom.
Level: Insane/Leaky Building Syndrome
Dark stairs misplaced

Faster start in singleplayer, implement game clock in panel

Ramond: hm is it intended there is a 2 second delay before "ying ying ying"?
Simon: 2 second delay is: First spawn is at 60 updates. C++ lix starts singleplayer at 30 updates
Ramond: and no time counter :(
Simon: D lix doesn't speed up the start, but should. Time counter is important for debugging.

font size guessing

I've done something for it, test if it's good on most resolutions. You can test arbitrary windowed resolutions: bin/lix --resol=800x600

Very tall resolutions (higher y/x quotient) will generate too small font sizes, but such resolutions probably won't be used.

Original bug: geoo has a widescreen and the fonts were way too small. The relative font size seemed OK, but both font sizes were small.

Runner doesn't run immediately if assigned to walker

Version 0.1.22.
Assign runner to a walker (not to a worker). The lix will not start running immediately. It will run once activity has changed away from walker and then back to walker/runner.

Expected instead: Walker starts running immediately after the assignment.

no ogg support -> bad log message

To reproduce: Compile A5 without ogg support (libvorbis missing during A5 ./configure). Link Lix against this. Load/play ogg samples from existing ogg files.

Experienced: The log message is "file not found", even though the ogg files are present.

Expected instead: I should stat the files to see if they're present, and give the correct message. If they exist, the game should say that Lix was compiled without ogg support.

Mimic level directory structure in the replay tree

For now, this seems to be the most sensible structure. Implement ASAP.

When that is done, I should ask level authors to check their replays with the D port. It's important to get more feedback on the D port in general. By providing the most wanted features for level/replay handling, I would like to encourage level authors to test and give feedback.

no-overwrite terrain drawing not yet implemented

Right now (August 2015), it aborts the game with assertion failure in the method stub. In the near future, it will only write to the log file.

Eventually, no-overwrite drawing should be implemented, even if it's costly.

Explosions are replay arrows at (0,0)

Version 0.1.30

Assign exploder or imploder. A replay arrow flashes up for one hardware frame (not update), i.e., for 1/60 of a second.

Expected instead: No arrow, but the normal explosion. Possibly with flying pixels. ❤️

GUI text too low on widescreen/square resolution

Version: 0.1.28

Run the game at resolution 960x480, or 960x600. The text on GUI buttons will be correctly sized, and seems reasonably well positioned.

Run the game at 2x or 3x the latter resolution above, i.e., 1920x1200, or 2280x1800. The text will still be correctly sized, but be displayed a little bit too low.

Run the game at 1000x1000. The text is very low, not centered on the buttons.

Floater assignment cancels queued builders

Version 0.2.10.
Assign builder to a non-floatable lix. Queue several more builders. Hover over her, the panel should claim > 12 bricks left to build. Assign floater to her. The panel claims <= 12 bricks left to build, and the queued builders are returned to the player's skill reserves.

Expected: Assigning permanent skills doesn't cancel queued builders.

RMB in center scrolls slowly without mouse movement

Set the mouse speed to 20 or 30, I repro'd this with both. Enter a torus level. Move the mouse, then stop moving the mouse. Hold RMB without moving the mouse. The map scrolls slowly in a direction dependent on the most recent mouse movement.

Expected: The map RMB-scrolls only when RMB is held and the mouse is moved simultaneously.

Blocker not released on walker assignment

Version 0.1.16.
Assign blocker to a lix. Then assign walker.

Observed: Blocker remains blocker.
Expected: Blocker becomes walker again after the blocker-to-walker animation.

UTF8 keyboard input: wanted Korean letters, got ASCII

Reported by namida, version 1015-08-24 on Windows.

During the test, typing UTF8 characters did not work - although I had Korean IME activated, it still took normal ASCII input. (eg. if I pushed the F key, it typed F, whereas if it was taking this input correctly, it should instead type ㄹ).

Framestepping, improve performance on large steps

Version: 0.1.29

How to repro: Framestep backwards. The game will use the close-by saved states to recalculate. At some time, there will not be a nice close-by state. The game will load an old state, recalculate, and save finer-grained, more close-by, states, along the way. This takes some time, and produces a visible pause on my 9-year-old laptop.

Problem: Many of these states will be tossed right during the very same long recalculation. If we save every 10 frames a state that, with hope, is close-by, we don't have to save this 25 times when recalculating from the 250-frame-old step. Only the last two 10-frame-old states will end up in the state mangager.

Possible solution: In the updating logic, keep info about what state ultimately to end up at. Pass that to the savestate manager along with the current update proposal.

Framestepping is important! ❗ Bad performance is a bug! 💤 Mediocre performance is a subtle bug! 🐌 We want the cutting edge in backwards interactive rodent simulation! ⚡⚡⚡

Basher/miner cut through steel

Assign a basher or miner where it has earth to work through. Have it hit steel during the normal work.
Expected: Worker is cancelled, steel portion of the swing is not removed, earth portion of the swing is removed.

Observed instead: The worker doesn't have a check to cancel on steel, and cuts through it happily. The steel is removed, like earth, from the drawn image. The earth-only portions are removed properly from the physics mask. In the steel portion of a swing, neither earth nor steel is removed from the physics mask: Other lix walk across the now-transparent steel.

Ideas for fix: Either use Allegro 5.1 blenders for drawing the land, or re-draw the steel back onto the land (snapshot the steel at beginning of level, possibly slow).

game ignores large animated tiles

On my 9-year-old graphics card, the game can't load very large graphics as video bitmaps: amanda/tar.W.png and amanda/occult/hatch_tentacle.H.png were both over 4,096 pixels wide. Currently, I skip over them and let the level have a missing-image error. See the log file if you get missing-image errors despite having the image.

4,096 is a reasonable max image size to expect. I should not expect the user to have a graphics card that can handle more than this. I should do something to make larger images load properly.

Debian 6, delayed sound

On Debian 6, without pulseaudio installed, with ALSA installed, each sound playback is delayed by about 0.5 seconds. When it finally starts, the sound plays back well.

Workaround: Compile Allegro 5 yourself, and edit the source so that it uses OpenAL or OSS instead of Alsa. The sound is still delayed by 0.1 seconds or so with OpenAL.

basher always leaves relics

Bash through a perfectly rectangular block. The last swing will always leave relics (unless the last swing's relic-leaving portion doesn't intersect with the solid block any more).

Expected: Don't leave relics on the last swing, if nothing more to bash is ahead anymore.

Also examine how far the swing goes. Maybe it's going further than in C++ Lix. This may well be desired, but affects the relic-leaving code assumptions.

Emptied skill not re-selected after framestep back

Version: 0.1.30

Assign the last skill of a certain type, such that the panel button goes from 1 to 0 skills, thereby deactivating. Framestep back, to get to a position before using the last skill. The button remains de-selected. Clicks on lixes don't assign the skill.

Expected instead: Re-select the skill once it gets replenished while framestepping back. (Unless other skills were selected in the meantime.)

Levels not orderd

The file listing sould parse the _order.X.txt file for the current directory.
The dir listing should parse it too, to order subdirectories.

Options not saved on empty username

Empty username should not be possible. The game should ask on startup and not allow an empty name.

Empty name doesn't save options right now. I am unsure if this is to be changed, or allowing the empty username is to be changed.

Store physics mask, possibly draw-dark image, per tile

Idea to speed up level rendering:

Each terrain tile has its physics mask computed at load-from-disk time. To render a level, the tile isn't fetched from VRAM into RAM anymore. Instead, the physics mask is generated from the tiles' physics masks, and the level image is generated from the VRAM bitmaps.

Look into dark tiles. Can we render the level image with blending from a white copy? Can we render the level image with blending from the original tile? (Probably yes and yes -- very promising.)

Climber hitting head fails assertion

Haven't tested whether it's universal. Will either upload full test case (Second Testing Level + replay) or fix within upcoming days.

core.exception.AssertError@src/lix/lixxie.d(216): Assertion failure
----------------
??:? _d_assert [0x66e927]
??:? void lix.lixxie.__assert(int) [0x647003]
src/lix/lixxie.d:216 const(basics.matrix.XY function()) lix.lixxie.Lixxie.getFuseXY [0x64550f]
src/lix/lixxie.d:229 void lix.lixxie.Lixxie.addEncountersFromHere() [0x64562a]
src/lix/lixxie.d:254 @property int lix.lixxie.Lixxie.ey(const(int)) [0x645838]
src/lix/lixxie.d:278 void lix.lixxie.Lixxie.moveDown(int) [0x6459b9]
src/lix/lixxie.d:285 void lix.lixxie.Lixxie.moveUp(const(int)) [0x645a27]
src/lix/skill/ascender.d:39 void lix.skill.ascender.Ascender.onBecome() [0x647b14]
src/lix/lixxie.d:612 void lix.lixxie.Lixxie.become!(false).become(const(lix.enums.Ac)) [0x646f90]
src/lix/skill/climber.d:126 bool lix.skill.climber.Climber.ascendHoistableLedge() [0x64b144]
src/lix/skill/climber.d:106 void lix.skill.climber.Climber.perform() [0x64b085]
src/lix/perform.d:20 void lix.perform.performUseGadgets(lix.lixxie.Lixxie) [0x6470e4]

Game doesn't save new checkmarks

Version 0.2.25. Corollary of issue #43.

Old checkmarks (e.g. imported via user file from C++ Lix) are displayed properly. The game doesn't generate new checkmarks on winning. It should generate new ones.

Framestepping back, unshown solid part of cube

Version 0.1.36.

How to repro:

  1. Have two walkers close to each other.
  2. Assign cuber to one, basher to the other one.
  3. The basher will bash, but the cube will completely fill the gap.
  4. The basher will walk through the cube and continue bashing, or stop bashing and turn. Both is OK.
  5. Continue for 3 seconds, then framestep back.
  6. Eventually, the bottom 4 pixels of (the still-solid part of the cube) will vanish, but remain solid (confirmable by lookup map dump).

Expected instead: The cube should be shown as solid completely, because it is solid completely.

Alternate repro: Perform steps 1-4, then restart the level and press turbo-fast-forward. This makes the cube look as described in 6, even though it is solid, as explained in expected-instead.

Speculation: When we draw after each update, physics and graphics match. When we don't draw after each update (framestepping back + recalculation, or turbo-fast-forward), the bug manifests.

New builder bricks overwrite old terrain

Version 0.1.9. Assign a builder close to a wall, facing the wall. They will build bricks overlapping existing terrain.

Expected: Only the portion of the brick that does not overlap terrain is drawn. The expectation matches what's happening in terms of physics, but not in visuals.

I don't believe this can be fixed with blenders, without changing the target bitmap. I should look into Allegro 5.1 at some time, which doesn't build on my old home machine, and use its shaders. Alternatively, I should cache the land whenever necessary, and blit the cached land to the land, to remove overlapping bricks.

Mouse not captured on re-entry

Reported by ccx, version 1015-08-24, on Windows.

In windowed mode, the mouse is okay, but it fails to retain mouse capture once I switched out to another window via Alt+Tab. And I kind of have to always do that at the start because for some reason, when launched lixd insists on positioning the window off to the lower-right corner of the screen instead of centering it like one would expect. And since it starts off with working mouse capture, I can't move the window without using Alt+Tab first to switch out first (which turns off the mouse capture, allowing mouse to reach the title bar of the window to drag).

In C++ Lix when I do this sort of thing, as soon as I switch focus back to the Lix window, mouse capture will work correctly again.

In D Lix, it seems to permanently lose mouse capture, so the system mouse cursor (ie. the arrow) remains visible at all times after the switch out, and mouse is no longer confined to the window when the window has focus. The system-mouse-cursor remains visible actually also happens if I Alt+Tab in fullscreen mode.

Tumbler: Frame doesn't advance correctly

Version: 0.1.23
Fling a lix, e.g., by batter, or by (not pushed to master yet) flingploder, to make her a tumbler.

Expected: Choice of displayed tumbler frame is as in C++ Lix, mostly depending on angle of flight.
Observed: Tumbler alternates between the first 2 frames only.

Panel lix counter, assert fail on Lix near panel

  • Dig to the bottom of the screen.
  • Hover over the lix near the edge of the screen.
  • Move the mouse slowly onto the panel, staying over the lix the entire time.

Game terminates with assert fail: _targetDescLixxie exists, but _targetDescNumber == 0.

File listings: scrollbar instead of "more..." button

In Nepster's words:

Enlarging the preview is only one possibility to improve screen usage.

If you have too much space that needs filling, then I would suggest adding a scroll-bar in the level/replay list for fast movement within the list. Not as lovely as larger previews, but much more useful. ;-)

Land lacks recent physics changes after framestepping back

Version 0.1.8. Definition: Land is the bitmap holding the visual representation of the terrain. It's not queried for physics (lix walking across terrain, builder hitting their head), that's what the lookup map is for.

How to repro: Build several longer staircases. Click and hold the button to framestep back. The builders will move backwards. At some time during continued holding of the button, a rather old savestate is loaded for framestepping. More recent bridges are shown for a frame, then disappear. The lookup map is correct though: The invisible bridges are solid.

Speculation: When doing lots of intermediate savestating happens before the land is rendered during Game.draw(), the savestates don't save the correctly updated land. Savestates save land during calc(), but land is only rendered during draw().

Level background, nonblack is white in game

Version 0.1.29
Have a level with a black background. It renders as black correctly in preview and Game.draw().

Have a level with a non-black background, e.g. one of Clam's Flingsane levels using the beach set. It renders correcty as blue in preview. It renders with a white background instead in the game.

Expected: Same color, blue, in game and preview.

Torus seam visible in background

The level background (not the terrain) should indicate where a torus seam is. E.g., by colored bars.

This has not been in C++ Lix, but was an immediate reaction by IchoTolot. People should not be confused when the same portion of the level is drawn more than once.

Map drawing: Target area too large

D Lix 0.1.7
The map rectangle should be drawn exactly where the panel is not. Apparently, the drawn map image is larger sometimes. This can be checked with the empty corner in the panel: The panel doesn't draw to a rectangular area right now. If the map image is drawn too large, the panel doesn't overwrite all of the extraneous map parts.

Observed in map:
Let's go Spelunking (Clam's adaption with the goldmine terrain) at resolution 1280x1024, zoom level x2 (click zoom button button once). This map has both torus directions. Not repro'd at zoom levels x1 or x4.

Builder -> Exploder: outsideWorld is null

Version 0.1.25
Assign builder to a lix. Assign exploder before she is finished.

Expected: Normal explosion, possibly returning builders.
Observed: Assertion failure, outsideWorld is null.

Should introduce a separate function in class Lix to become Exploder. That function should take a pointer to set outsideWorld. Class Ploder should then call that function instead of calling Lix.become directly.

Crash in al_get_joystick_state, Windows

Reports by several people: Nepster's crash, reported on LF.net: Lix version 0.2.11, Windows cross-build, crashed after (skipping ahead, then framestepping back).

Clam's crash:

Lix version:  0.1.40 (Windows cross-build too)
    64.37 Access Violation
    64.37 0x6CB5A6B0 in al_convert_bitmap_data
0x7716DFA1 in RtlpUnWaitCriticalSection
0x6CB5E8E7 in al_get_joystick_state
0x6CB5EB3E in al_get_joystick_state
0x6CB05ED8 in al_lock_bitmap_region

SimonN: okay, how do you watch this replay to make it crash? Immediately hit turbo and never disable turbo?
Clam: yes; you may have to move the cursor around as well

Facts: I never call al_get_joystick_state from the Lix code in either version. I wasn't able to repro the crash on Linux.

Even though Clam had a debugging version, there was no informative entry in the logfile. The output quoted above was everything.

Speculations: Most likely, al_lock_bitmap_region checks al_get_joystick_state for whatever obscure reason. Examine the A5.0 source. -- Otherwise, ABI mismatch? I have no clue. Maybe try with more modern versions of A5.0 or A5.1?

Maybe try to repro the crash with Ichotolot?

Option dialog: revert all to default

A button that reverts all options back to their defaults.

This is good to have at least for hotkeys. Probably useful for everything, or only for the current options tab, or to give the choice.

The current workaround is to create the new user, then delete everything in their user file.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.