Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - WillLem

Pages: [1] 2 3 ... 178
OK, so now that I've had a few days break from working on SuperLemmix, I've realised that there is actually a very easy fix to the SI/Classic Mode conundrum that was previously eluding me, most likely due to learning burnout.

Basically, I want Classic Mode to always display RR, and I was attempting to implement this via the Config perameter checkboxes, which was a very messy way to do it, both for the UI and in the code itself.

The correct way to do it, of course, is to simply add "and not GameParams.ClassicMode" wherever there is an "if GameParams.SpawnInterval" statement.

This has now been done, and it's tested and working, so I'm that much happier to re-implement the option :)

Steps to reproduce:

1) Go to Config menu and hit "Activate Classic Mode" (relevant checkboxes will be disabled)
2) Click Apply, OK
3) Exit the Config menu
4) Re-enter the Config menu

The checkboxes are enabled again.

SuperLemmix / [SLX] Rewind button / hotkey
« on: March 19, 2023, 09:38:16 PM »
I'm currently in the process of adding a Rewind button to the panel. Progress has been slow but significant, and it will likely need extensive bug-testing as it's not only a brand new feature but one which calls upon and interacts with existing features (that weren't purpose-built) for its functionality. So, I feel it warrants its own topic.

Hotkey support will also be provided, of course.

Unsure yet whether to allow this in Classic Mode. Currently leaning towards yes, since the aim is for it to feel much more like a real-time control than a "player-assist" kind of feature, and I think that more people will use Classic Mode if they know that there is a way to undo mistakes, albeit a relatively elementary one. Maybe this decision can be made after we've had a chance to test it out a bit.

Here's what we have so far:

:tal-silver: Partly-functional Rewind button which performs a repeated -3 Framestep. Currently, it's a little bit glitchy, but it works.

:tal-gold: Rewind uses backwards Frameskips to function, so Replay-After-Skip mode is cancelled when Classic Mode is active.

:tal-gold: Hotkey support is added.

:tal-gold: Find out how to fine-adjust the frequency of the skips (and therefore, effectively, the Rewind speed). I think that calling the PrevCallTime value within TimeForRewind fixes this, but more testing is required to make sure this is the case. As it is, the IdealFrameTimeMSRewind value can be set to any value, and it will change the frequency of the skips. 22ms seems to be something of a sweet spot, but if people think it's too fast/slow, it can be fine-tweaked.

Still need to do:

:tal-bronze: Sometimes, you have to press the button twice to stop Rewind mode once it's active. Not sure why this is, but it needs sorting out.

:tal-bronze: Stop panel display from glitching out (the lem counts and timer currently flicker occasionally whilst the Rewind mode is active).

Non-Lemmings Projects / Re: Retro Game Clones
« on: March 16, 2023, 06:43:15 AM »

So, I already made a Tetris clone a while back written in Python and very loosely following a tutorial which I ended up not liking very much.

The project is finished and playable, but unfortunately I'm having problems with trying to get it to build as an executable file. There are also many bugs in the game which I haven't yet ironed out, and a few features (each tetrimino block having its own colour, hold feature, t-spin physics and sliding rotation physics) that I haven't quite managed to get right, although I have made a start.

If I can at least figure out how to make the .exe (followed a tutorial but it didn't work), I'll upload what I have so far.

Ideally, though, I'd like to see if I can find a better tutorial and start from scratch. I find Python/PyCharm/PyGame very unintuitive and fiddly to work with. Things like not getting an executable straight from the Build/Debug process just seems a bit rubbish tbh. But, I keep hearing that Python is meant to be one of the best languages to learn, so, I guess I'll persevere with it.

EDIT: Here's the .exe (which doesn't work for me, maybe it will work for you?) and the Python file, which will run if you have Python installed on your PC.

Non-Lemmings Projects / Re: Retro Game Clones
« on: March 16, 2023, 06:11:48 AM »
Space Invaders

This one I'm creating using Scratch, a fun online platform which teaches some of the fundamentals of game-making by presenting the code in handy blocks, and allowing plenty of real-time testing of the features being implemented.

Despite its seemingly elementary interface, from what I've seen so far Scratch is actually a remarkably capable development platform. I'm about halway through the Space Invaders clone so far, and following this excellent tutorial. If I can get it working, I'll look at making a second version using my own sprites.

Non-Lemmings Projects / Re: Retro Game Clones
« on: March 16, 2023, 06:06:39 AM »

I've written this one in Delphi; It's my first project to be completely made from scratch!

I followed this tutorial, which is actually for Lazarus (although both use Pascal as their base language, so almost all of it is identical).

The tutorial was excellent; the presenter makes numerous mistakes throughout the video, but rather than editing these out, he takes the time to explain the mistakes and of course correct them as he goes along. I found this to be a valuable learning experience, and have added a few shortcuts to my Delphi toolbox (such as Ctrl+Shift+C to auto-create procedure code from the declaration).

Anyways, enjoy Pong! It's controlled using the mouse.

Non-Lemmings Projects / Retro Game Clones
« on: March 16, 2023, 06:06:04 AM »
So, I've been advised to start with a smaller project to build up some more beginner-level experience.

At first I was reluctant to follow this advice, because a) I'm impatient, and b) I have a slightly naive/narcissistic/idealistic (you decide) belief that I can do anything I want to as long as I put my mind to it.

Whilst I certainly am tenacious enough to learn most things, I have to admit that I have my limits, and sometimes it is good to take things back to basics, build up a bit of experience and confidence, and then move forward from there.

Anyway, with all of that said, I've decided I'm going to make clones of 3 of my favourite retro games! Namely:

Space Invaders

As I finish them, I'll upload them here in this topic. I'll also regularly post progress updates to track where I'm up to.

Quote from: Simon
I want to post an enumerated list. Instead of 1), 2), 3) as you did, I write 102), 101), 100), 99). Nobody bats an eye because these numbers are very useful.

RR looks like this to me:

1, 2, 3, 4, 5, 6, 7, 8, 9 ... 99, with the lowest number meaning "lems come out slowly" and the highest number meaning "lems come out quickly." This makes sense, works as I need it to in-game, and no further information is required.

SI, on the other hand, looks like this:

107, 106, 105, 104 ... 4, with the highest number meaning "lems come out slowly" and the lowest number meaning "lems come out quickly." OK so far, I guess, but now I need more information ... why is the lowest number 4? Why does it stop at 4 and not go all the way to 1? Why does it start at 107? These are questions that, as a player, I am bound to ask whether I've seen a Lemmings game before or not.

So, maybe I take the time to find out that it's the number of pixels between lemmings. OK, I understand it a bit more now but... is the game really going to expect me to know about pixel distance between lemmings? As a casual player, that's a bit of a red flag!

1 - 99 is intuitive and simple; I can see that, when the number is higher, the lems come out faster. A scale going from 107 - 4 makes far less intuitive sense to me personally, even when I know what it means. I don't care about the exact pixel distance between the lems, I only care how it translates to what's actually happening on screen, and I can find out by playing the game what sort of figures are useful.

Quote from: Simon
New keyboards will be produced. Instead of the "1" key, they have a "102" key. If we don't want the two extra digits when we type, we can erase them afterwards every time. I'll buy this keyboard, I think that keyboard is as useful as the ones we have. 102 is a natural figure to type often; after all, most people start counting from here.

Heh, good way of illustrating your point :crylaugh: But, I don't actually agree that RR presents this sort of problem. "Low is slow, high is fast" is all the player needs to know, and wherever exact figures come into play, "RR75" means just as much as "SI28" if what you're seeing on screen is the same result.

Quote from: Simon
you make a symbol for fast and a symbol for slow, then you don't have to swap them

Yes, great idea. UP and DOWN arrows could work, or maybe a single right-facing arrow for "slow" and 3 stacked right-facing arrows for "fast"; I'll see about making a split button with the number displayed in the centre. That way, continuing to support both RR and SI should be easy enough even without graphic-swapping. That solves the third issue.

If the votes remain as they are, I'll likely keep the option and not try to crowbar it into Classic Mode. That way, I can forget about it, those who want to use it can do so, and the Config menu is kept relatively clean and tidy.

Currently, I'm leaning much more towards not including the option. There are 3 main reasons for this:

1) I'm currently attempting to add it into the Config menu such that it's {unchecked and unavailable} when in Classic Mode. This is easy to achieve in itself, however it may lead some users who prefer the SI display to not hit the "Activate Classic Mode" button, and instead individually check all of the Classic Mode options that are displayed in the config.

The problem with this is that those users will not actually be in Classic Mode, since the mode actually implements a number of other features which affect gameplay (assign-whilst-paused, min/max RR jumping, savestates and replay behaviour, etc) but which don't warrant having their own checkbox. NOTE: This is explained in a "hint" when hovering over the "Activate Classic Mode" button, so these additional features are not completely "hidden" from the user.

It's my guess that those who want to use Classic Mode will prefer the RR display. So, as a compromise, activating Classic Mode will {uncheck} the "Activate Spawn Interval Display" checkbox, but keep the option {available} for re-checking. This is so that those who prefer SI don't have to resort to the above workaround. It's a wonky solution to the problem, though, and I'm now that bit less happy with the formerly cleaner Config menu.

So, when re-implementing the option I have to choose between 'keep the config menu clean' and 'always display RR in Classic Mode'; it's not really feasible to do both. Meanwhile, my own preference of not including the option at all satisfies both of these conditions.

2) I still haven't really seen a compelling argument as to why offering both RR and SI as hatch-speed-displays is worth it. OK, the votes have been somewhat in favour of keeping the option, but there have also been a couple of "don't mind" votes, and of course there are my own feelings on it.

3) I'm currently designing a new panel which will ideally have the button graphics drawn directly onto it; retaining support for displaying SI in this scenario will become even more problematic, since the individual -/+ graphics will (again, ideally) no longer exist to be swapped.

SuperLemmix / Re: [SLX] Include graphic sound cues from WinLemm
« on: March 15, 2023, 12:25:13 AM »
Yeah, this is something I can look at adding, for sure.

I'd need some help with it, code-wise. Although the changes I've made to SLX so far might make it look like I'm capable enough of doing pretty much anything, a lot of it has only involved tweaking existing code (or adding old removed code back in). Writing in brand new features is still a little bit beyond me.

I am enjoying learning, though! Plus, the more features I successfully implement, the more I'll want to continue adding in other stuff that people want, so... watch this space :)


Thinking about this some more, what do people think of the idea of having more picture/animation-based sound cues (rather than words), in order to further optimise the accessibility potential? Here's an example:

It's merely easier to learn one scale than several

I've learned RR. Sure, I could learn SI as well, then I guess I'd have more ways of understanding what is essentially the same thing.

I guess the question I should be asking really is how does SI translate to what's seen on-screen in a way that RR specifically does not? Maybe this will help me to see why it's more useful, because at the moment it just looks and feels like an equally useful way of enumerating the RR effect, not a more useful one.

Yes, after explanation, it's understandable in either scale, but it's immediately obvious in SI even before explanation


The gut reaction is that I like this widget better than displaying 103 − SI and better than 107 − 2 × SI. This feels sufficiently far removed from the precise numbers, yeah.

If I knew how to code the slider, I'd probably do it! At the moment it's nothing more than a mockup graphic.

Depends on how fine-grained that widget will react to mouse clicks. Will it inflict pixel-precise clicking on top of learning another scale?

I suppose this depends entirely on how many pixels the graphic can be. If, say, 40px high with 33 of those being value-assignable, then each pixel would increase the RR by 3.

Consider ditching variable spawn interval altogether. That will cut all annoying RR fidgeting and give you panel space to boost. An instant fix for all your problems!

Heh! Tempting for sure, but doing this would break many levels in L1 and OhNo!, requiring lowered lem counts and/or raised time limits to fix the levels. Yes, SLX is not interested in content preservation, but the OG levels are an exception since they're bundled with the app and a lot of what I'm doing with SLX is aimed at making those levels relevant again.

Besides, I've always liked the variable RR feature and it's definitely something I would want to include anyway, even if building a brand new Lemmings clone from scratch (I'd almost certainly do it as a slider).

Finding a way to make it fit only 1 button space is a tempting prospect, though. Perhaps the existing split-button code could come in handy here, and the number could be displayed in the centre...

Re-fixed in 500e6efe8 using the same code from the NL fix.

Thanks for the explanation namida, helps to know exactly what was going wrong there.

In fairness to Dullstar, his fix has helped me to learn a lot, so it's all good :thumbsup:

OK... so, it turns out that this fix actually broke "Don't Pause After Backskip" behaviour somehow. So:

1) Go to the Config menu and uncheck "Pause After Backskip"
2) Play a level and perform a backwards framestep. It pauses, and we get the previous bug (i.e. the semitransparent graphic is overlayed again and again with each subsequent skip)

Placing the same line of code outside the block (so, on its own but still within the GoToSaveState procedure) achieves the following:

1) Pause/Don't Pause After Backskip checkbox works again
2) However, the pause button doesn't get highlighted at all with either option (it will still highlight when just pressing the pause button itself)

SuperLemmix / Re: [SUG] Improvements to Skill Panel
« on: March 12, 2023, 12:45:52 AM »
Working notes.

The new panel code will have to look something like this:

New function "ScaleFactor"

If window/screen <= 450, ScaleFactor = 1
If window/screen <= 900, ScaleFactor = 2
If window/screen <= 1350, ScaleFactor = 3

For ScaleFactor = 1, use panel450.png
For ScaleFactor = 2, use panel900.png
For ScaleFactor = 3, use panel1350.png

(each panel graphic will have the icons pre-drawn onto the graphic itself rather than overlayed; there will be an unused blank button graphic in gfx/panel to help users with designing their own buttons)

procedure DrawPanel;

Step 1: Lay down the panel.png
Step 2: Draw the correct skill icons
Step 3: Make clickable areas
Step 4: Assign functions to the clickable areas
Step 5: Draw the minimap
Step 6: (use existing Minimap code for functionality)

(All code for drawing the panel will be multiplied by the ScaleFactor)


(To further add to the confusion, I'm looking at getting RR/SI onto one button; if this proves too difficult/not worth it, then it will remain as 2 buttons)

Then, there will need to be code to multiply the (correct) panel if the screen is a certain size; not sure exactly how to do that yet but there probably is a magic formula for the purpose, maybe even in the existing code :)

SuperLemmix / Re: [SUG] Improvements to Skill Panel
« on: March 11, 2023, 11:35:58 PM »
OK, after a lot of thought about this, I've decided that the panel will be drawn to 450 x 40, doubling to 900 x 80, tripling to 1350 x 120, and quadrupling to 1800 x 160.

It will feature:

<<< :lemming: -/+ RR :lemming: 14 Skills :lemming: Paws, Rewind, FF, Restart, Nuke :lemming: Squiggle (hidden CPM button!) :lemming: Minimap :lemming: >>>

Instead of going off in-game resolution settings, the biggest possible panel will always be chosen based on the user's screen/window size, to allow for more dynamic resizing of the game window regardless of level resolution.

Rather than a "Panel Zoom" dropdown, I'll replace this with a "Window Size" dropdown to allow users to snap their window to the recommended settings for each panel (dynamic resizing will remain effective, of course).

OK, now to get cracking on it...

Pages: [1] 2 3 ... 178