This is not my first contact with the Persona series, because I tried “Persona 2: Eternal Punishment” on the PS1, but I didn’t really connect with it. The graphics were cool, for a PS1 game though.
Then this Christmas I remembered that one year ago we were really into Final Fantasy IX and I checked again to confirm that there’s nothing like it in the PS1: the previous entries in 2D didn’t work for us –playing with my sons, lots to read– and the ones starting with 3D on the PS1 look way worse than FF IX (e.g. the models on FF VIII are just LOL).
So, what about the PS2? I have to confess that I had never tried to emulate it, and turns out that –without being perfect– the emulation is pretty good in my modest PC!
I don’t really understand how the emulator can play for example Final Fantasy XII without breaking a sweat, and when I run anything remotely 3D native, it uses a lot of CPU and the fans are on all the time –so my PC doesn’t melt–. Same happens with anything running on the browser, including Canvas 2D.
But then we tried FF X and FF XII on the PS2 and, for different reasons, we didn’t connect. So, what about Persona 4? I recall a friend really enjoying Persona 5 on the PS4.
And I have fallen in love! The game is just plainly cool. It has a mix of social simulator and JRPG that is very a appealing –even if sometimes you would prefer to go and fight, but instead you have to go to school and care about social interactions to get your stats up–. The graphics are pretty good, and the voice acting is outstanding!
It is a long game and I’m not sure how far I’ll stay hooked, because I have other things to do in my free time and the game is not always OK to play with the boys around.
The story is complicated, as you may expect on a JRPG, and after enjoying watching Summer Time Rendering early this year –that quickly jumped to my top 5 anime series ever–, this “Persona 4” reminds me of the mood perfectly.
I’m about 13 hours in, and its depth is sometimes a bit overwhelming. Fortunately it includes some “quality of life” features that I would have loved in FF IX –for example: it has contextual help for all the items, so no more using items in combat to see what happens–.
The game has been OK so far, we will see when things get more challenging!
Yesterday I finally released Hyperdrive, with very good reception.
So far there are a few short YouTube videos with a bit of gameplay, which was expected: getting to understand the game and get further of the first boss requires some time. Hopefully later on we will see longer videos with people completing the game.
The YouTuber Xyphoe featured the game in his AMSTREAM last night, and it was very fun to watch and participate on the chat. Some takeaways:
People like the game, appreciating the technical part.
In general, they expect a regular shot’em up and the chain base power-up system is a bit confusing at first.
Once it clicked for Xyphoe, he got hooked.
When the weapon is not powerful enough –until level 3 or so–, is better to use “precision” by pressing fire when needed; later is OK to keep pressing fire and use a more “burst” approach.
When a life is lost, the weapon is downgraded; if the player doesn’t go back to “precision”, the game ends pretty quickly!
Xyphoe collected bombs, but he never remembered that he could use them to save tricky situations –probably because getting chains requires a lot of focus–.
In a way, this feels quite a lot like play-testing, although it is happening once the game is finished.
Other than that, I have fixed a small bug related to timing in the menu screen. I have three reports, including myself, of people playing the game on a real CPC not experiencing any issues –I’m assuming that CRTs can be quite permissive–, but the person reporting the issue explained it with a lot of detail and I agree that there was a problem (I was generating 304 lines instead of the expected 312 in a 50Hz output). Anyway, it is fixed now and version 1.0.1 is available to download.
I was commenting recently the idea of digital gardens, and a bit after that I realised how easy would be to have my own.
This site is already some markdown files on a directory, so I added a sub-directory and some templates to make Hugo render them pretty –with a table of contents, for example–, and that was it.
So you can go to the notes section, and see how it looks. Currently there are a couple of things over there:
So is not that different to what I had when I was using vim-wiki –although I ended not using that one–, with the main difference being that when I update this website, the notes are made public.
The core idea behind a digital garden is learning in public, but in my case I think it is going to be more like an easy and quick way of publishing some work in progress content –a bit like a personal wiki–, or for those things where a blog post is not really the best format.
A garden is something inbetween [sic] a personal blog and a wiki. It’s a collection of evolving notes, essays, and ideas that aren’t strictly organised by their publication date. They’re inherently exploratory – posts are linked through contextual associations. They aren’t refined or complete - posts can be published as half-finished thoughts that will grow and evolve over time. They’re less rigid, less performative, and less perfect than the personal “blogs” we’re used to encountering on the web.
I have read about this a few times already, and every single time I find it interesting and makes a lot of sense.
I have always had a personal website. I started around 1998, so for me is pretty much always. Recently I celebrated 20 years of usebox.net, in a way my last personal website. And it kind of felt like that already.
If a wiki is a self-editable website where anybody can contribute, a digital garden could be just a wiki where the owner is the only one editing it, perhaps? I don’t feel like the focus should be in the lack of publication date but in the fact that the content is a work in progress that may be finished at some point, or abandoned in current state.
I like the blog to dump ideas or comment on things that I find interesting, because that helps me to solidify my thoughts –like I’m doing right now–, but it is true that the blog posts eventually disappear to never be seen again –down deep the archive–. There are tags that can help to find content that is related, but there is no further refinement: things get published and are final.
Let’s look for example to my post on bank switching. I think it is a blog post in which the date when it was published is not important and instead refinement of the content would be better –that’s why I transcribed the content to CPC Wiki, so it doesn’t get lost–.
I was looking at mkdocs last night, because I like it and this was the perfect excuse to put something together, but I woke up today undecided. I already have this website, and it could work as well to keep my notes –call it work in progress or digital garden–, I just need to find a way to make that information accessible.
The Fediverse is Mastodon, Pleroma, Diaspora, Friendica, Hubzilla, Osada, and all their friends, federating. 👍
But what do we call all the silos, the ad-based family of Facebook, Twitter, Reddit, and friends? It’s the Adverse! A universe founded on ad serving. And a reminder that they offer plenty of adversity. All the adverse silos stand alone, like rocks, like islands, like Alcatraz. 👎
And what about Orkut, Google Wave, Google+ and other networks that have come and gone. This is the Necroverse.
Sometimes networks that seem alive today slide into the necroverse. Let’s hope we keep our network alive. Here’s to many happy years in the fediverse! 😁🥳
I have been on Mastodon since May, and it has worked for me. I still have my Twitter account, because I have a good number of followers and that is useful to promote my games –and also some friends that are still there and they are not really into Open Source philosophy and couldn’t care less about the Fediverse–, but I haven’t been very active. Funnily enough, my number of followers keeps growing now that I don’t post.
Why does Mastodon work for me? I’m building a small network of friends –well, not everybody is my friend; not yet–, which is the same I did on Twitter. It doesn’t matter how many followers I have or how many people I follow, I always end interacting –and caring– about a dozen or so people, and you can have that on the Fediverse, federating and without ads.
Hyperdrive is not completely finished, I still need to write some music, but the gameplay is complete and it is being tested by a couple of good friends. I tend to incrementally test my games, so there is not much work left for the testes, but they almost always find something. This game may not be the hardest to test, but it won’t be easy either.
There are also other things to do before the game is released. For example: preparing a dedicated website. I may try to make a teaser video –very difficult and not essential–, and write some blurb of text for the press.
I don’t plan to make a physical release, at least from the start, which should reduce the levels of stress associated to the whole process. The main change is that, in case a bug is found after release, is not that bad. Later on I may consider a Dandanator (or DES) release, not sure.
Despite all that, there is some pressure. This game is using cartridge as media, which is not very common in the Amstrad CPC world, so I may have some backslash because of that. Which is fine, because some people always complain –with good intentions–, not matter what you do. I guess at very least some Amstrad fans will ask for a disc version for the 128K models, and a cassette version for the 464, and basically any combination in between.
The music is not finished yet, but let’s look at some numbers:
11 months of development –I rewrote the engine 3 times until I got it where I wanted–. It moves at 25 FPS (most of the time, at least).
9 levels of weapon for the player, with different speed and sprite (some share sound effect).
The enemies have 2 different types of bullets, and one of the bosses have a custom one as well.
5 stages, with different enemies and end boss; that is 8.5K per stage, a bit over 42K in total.
17 different enemies (different sprites, and behaviour), which including the bosses is 30K of compiled, relocatable sprites.
Over 15K of background tiles and misc graphics.
16K for the music player, sound effects and songs (planned, I don’t think I’ll need more than that).
Over 26K of code, split in two 16K banks –with no bank switching support in the compiler, it was interesting to implement–.
Over 15K of RAM used for buffers, variables, etc.
The type of gameplay I like, trying to not let the technical part limiting the fun part; which is not easy aiming to get smooth and constant 25 FPS on the CPC!
It is using 12 banks of 16K of the 32 available on a cartridge (up to 512K), so it could be bigger! And all without loading times, and working in all CPC models (and the GX4000), independently of the amount of RAM they have. Sure, it won’t be as easy to load on a real machine without add-ons, but we are in 2022 and most aficionados have those anyway.
So I think it pays off. I wrote in a blog that I think cartridges are a cool media for the Amstrad CPC, and I decided to use it in this game. Could I have done the same with multi-load? Probably, but it would have been 128K models only, and it would have been quite different –likely with some limitations and compromising on some things–. All in theory, of course, because clearly that ship has sailed.
My plan is to allow a month for testing –so I can write the music as well–, and then have a release early December.
My younger son is pretty good with the mouse already, and he is getting better and better at reading, so I have been thinking that there are a lot of good old games that we could play together, and he could drive.
An obvious genre is point & click adventures –or as we called it back in the day graphical adventures–, as long as the interface is not too cumbersome (no SCUMM for now, the verbs are a bit too complicated for a 5 year old), and ideally it should have voices so I don’t have to read all the texts. So there are a few years of point & click games when they where still popular and the CD-ROM as media was perfect to add content like digitised voices (and some video, often looking awfully bad today).
My wife is playing Shadowrun Returns –the tactical RPG based on the table-top game–, and discussing how many games I have in my GoG library that I have never played, and that most of them were given for free at some point; we checked if there was any new free game.
Although we didn’t find any that I didn’t have already, we saw that the The Legend of Kyrandia games were less than £2 (each). I never played them back in the day, but I remember that they were big in the magazines of the time, with full walk-through of both. The graphics are good, of the time and style of Lands of Lore –in fact, the evil Scotia is mentioned in The Hand of Fate as a joke–, and after a quick search I found that the interface wasn’t too complicated and it had fully digitised voices. So we decided to give it a go.
We have been playing The Hand of Fate –which is the second on the series– for a few days, and we completed it yesterday. My son was thrilled, even if we needed a guide for a lot of the puzzles. This game is a showcase of most of the problems of the genre, and then some. But if you have some help when things get extra-obtuse, you can enjoy the cute graphics, the excellent synth-FM music and the nonsensical story.
The game has good humour –although one joke has aged so-so–, and the voice of Zanthia gives a great personality to the main character –even if sometimes, to show the urgency of the situation, it will interrupt the action to tell us that we should hurry up–.
The potions we need to make during the game are a good excuse for puzzles, and I liked the mechanic: find a page of your potions book, find some weird ingredients, make and use the potion to remove a blocker and advance on the story.
And then there is the story, which is not great. It doesn’t matter, because the important is the puzzles, but you spent two thirds of the game to get to a location to basically realise that it was all a waste of time. Then a character exposes the actual plot, and we do the last third of the game –and it didn’t surprise us who the baddie was–.
You definitely need guide to complete the game, and I guess it makes a lot of sense now that the magazines published those in-depth walk-through back in the day. Even with the guide, at one point we got to an unwinnable state, because we flushed our cauldron too soon and then we were short of one skeptic potion to complete the game (fortunately we had a recent save and we only lost 30 minutes of progress). And there is a “Towers of Hanoi” puzzle that it doesn’t matter if you have a guide, to not mention the final scene where we died around 20 times until we got it right –because you can die in this game, even if is more a joke than an actual mechanic–.
So I would say it is a hard game, but we had fun, and I can think of worse introductions to the genre. Besides, it is the first game we complete!
20 years ago I decided that I wanted a stable identity on the Internet. I had used free email accounts and web hosting for a few years but, specially the web hosting, was fragile and could change any time. Besides I had seen in my main email account at RocketMail that free services could change in ways we don’t like –RocketMail was acquired by Yahoo!–.
So it was time. I wanted to have a website that didn’t change, without ads, that depended solely on myself. I asked a couple of friends if they wanted to be part of it, I guess a bit in the tilde spirit.
They didn’t really care, and I can’t remember if they ever contributed any money to help with the costs, but this is how the website looked on the first day (in perfect Spanish!).
Later on some more friends had email on the server –for a while, at least–, and the services have been online since then. It all started with an hosted service in Arsys, then a small server in OVH –can’t remember if it was a VPS–, then a miniserver in Memset –just a VPS with Xen–, and today a droplet in Digital Ocean –just call it VPS already!–.
At some point there was even sub-domains, like the old blackshell.usebox.net, where I hosted my personal weblog in Spanish, but the main website had different uses over the years. At some point it was my business card for my freelance job, but at the end is just a redirection to my personal website; because that is what usebox.net is basically.
My infrastructure has grown a bit in 20 years, and the prices have gone down. Never has been this easy –and cheap– to have a personal server on the Internet, yet every time some business ask you for your email on the phone there is surprise because it isn’t an email address on one of the big providers.
Anyway, here we are and hopefully here we go for another 20!
I made a maintenance release of my ubox MSX libs back in April, which updated one dependency and the docs after I run some tests with the newest SDCC. It was the first release of 2022, because the project is mature and stable –although there’s interest to make changes–.
Since then, I made another round of dependency updates, with special interest in rasm, because this excellent assembler has changed the way it builds, and it required a bit of work to move to the latest version. So yesterday I thought I would make a release, to not keep those changes in the main branch without being “official”; and I found a small bug that needed fixing.
It was an interesting one. Some of the python tools that convert PNG images to different data formats used on the MSX was using a set, and looks like in the python version coming with my current Debian (3.9.2), the order of the elements have changed. Long story short, the sprite of the player character in Green –the demo game– was not green any more. It was easy to fix, and I decided to make some changes to the project website to look marginally better and give visibility to the fix.
And then I was checking some files randomly and I ended reading the TODO file, and without noticing I started implementing CAS support.
The CAS files are a representation of cassette data used by most emulators. You can load them on your emulator, or convert them to WAV –if not play them directly– and load them on the actual hardware. Most MSX aficionados will have more sophisticated ways of loading software, but if you don’t, the CAS files are the easiest –and cheapest– way of loading homebrew games.
The official take of the community is that “cartridges are best”, and I agree; but it is also true that by releasing my games in CAS format –as well as in ROM format–, more people had a chance to play them –including some extreme cases of models with 16K of RAM and two memory expansions so for example Uchūsen Gamma would load–.
Some time ago I released as OSS my mkcas tool, that I wrote to generate the CAS files of my games, and in the case of ubox MSX libs it was just matter of adding the tool to the build pipeline so the user could get the ROM file –just a cartridge image– and, optionally, a CAS version of the same code. Including a loading screen, of course.
The CAS file uses a multi-stage loader:
Firstly, a short BASIC program is loaded that will load and execute a binary loader.
Then the binary loader loads two blocks, using the BIOS functions and some fancy code to show multi-colour loading bars.
The first block is the compressed loading screen, that is decompressed and uploaded to the VDP, so there’s something nice to watch as we wait.
The second block is the ROM itself, compressed as well. It is uncompressed and setup like it was running from ROM, but in RAM.
The only tricky part is configuring the slots so we have ROM, RAM, RAM and RAM; and that’s why I made this optional, because it will not work in machines without enough memory.
To start with it requires more RAM than the cartridge, like 32K more –which is the size of the ROM–. There are also other limitations –like the compressed ROM being less than 24576 bytes–, but all in all I think having a CAS file as an extra is totally worth it (based, as I say, on my experience with my games).
I spent way too much time reviewing the code because I forgot that any MSX model with disk needs to boot pressing the shift key to disable the disk BIOS or the BIOS will use some memory that the loader needs, but it wasn’t too complicated at the end. I’m happy with the result!
I think I was reading about Oberon –the programming language, not the operating system– because a post on Hacker News, and I ended in the page of Niklaus Wirth.
Wirth was the chief designer of the programming languages: Euler (1965), PL360 (1966), ALGOL W (1966), Pascal (1970), Modula (1975), Modula-2 (1978), Oberon (1987), Oberon-2 (1991), and Oberon-07 (2007) –from the Wikipedia–, among other things.
That is truly remarkable. So I was looking around and I found that his website has PDFs describing the implementation of two compilers:
Compiler Construction, where Wirth builds a compiler for Oberon-0 (a subset of Oberon) for a RISC CPU –which is the type of simplification you usually find in books building a compiler, but this one at least is register based–.
The code is very readable, and is not because I had to write some Pascal back at University –and Oberon is a descendant of that language–. There are things missing, but is mostly refinement of error reporting and things like that. Everything that is important, is there.
For example, the code generation of the multiplication for Oberon-0:
PROCEDURE MulOp*(VAR x, y: Item); (* x := x * y *)
BEGIN
IF (x.mode = Const) & (y.mode = Const) THEN x.a := x.a * y.a
ELSIF (y.mode = Const) & (y.a = 2) THEN load(x); Put1(Lsl, x.r, x.r, 1)
ELSIF y.mode = Const THEN load(x); Put1(Mul, x.r, x.r, y.a)
ELSIF x.mode = Const THEN load(y); Put1(Mul, y.r, y.r, x.a); x.mode := Reg; x.r := y.r
ELSE load(x); load(y); Put0(Mul, RH-2, x.r, y.r); DEC(RH); x.r := RH-1
END
END MulOp;
It even shows constant folding –both operands are constants–. The resulting code may not be super-optimized, but it is a full example in an easy to understand size.
I skimmed through the “Compiler Construction” book during my holidays and is not too long. I’m looking forward to read it properly when I have some time.