Jump to content
Awoo.

[FANGAME] Chapter Zero: The Angel Island Saga


Blacklightning

Recommended Posts

Quote

I've had aspirations of making games someday, but I feel like I've been going out of practice after one too many burnouts.

Well I got there eventually, past me =V

Yvnlq0T.png

Quote

The world is a chaotic, terrifying place, rife with all manner of monsters, warlords and hostile architecture. Even for the mighty Pachacamac clan, just the act of survival is a day to day struggle, and everybody seems to know that they can't keep it up forever. In pursuit of a safe home, a lone spearwoman named Ichima happens apon the Special Stage - and with it, a means of realizing their dreams of safety and peace...

3e9KNGt.gif

OxWyEYS.gif

TRJuxNq.gif

Ee1EuIF.gif

SFGHQ page

Windows 64 bit mirror

Windows 32 bit mirror

Linux 64 bit mirror

Linux 32 bit mirror

OSX mirror

 

Well, here we are. SAGE 2022 has come and gone, and I no longer have a reason to keep this a secret or surprise to anyone. Yes, I've been working on a fangame for some time now, practically teaching myself as I go, merging two of my biggest childhood inspirations - Sonic the Hedgehog, and Wonder Boy in Monster World. The end result so far is not quite the game I wanted to make yet, but moreso a demonstration of what I've taught myself so far: a little playground of tiny stages for the mechanics I've built thus far, and a small taste of the lore to come for those who master them enough to beat the listed par times.

I guess for the time being this thread will mostly exist as a dev log, or a place to post stories and lessons I've learnt while making this, or hell, just a place for feedback from those of you who actually played it. Yes, you're more than welcome to tear it apart and tell me what I could do better - it always feels bad at first, but feedback is always valuable, and I've always felt that if you love something you should want it to be the best possible version of itself. o3ob

  • Thumbs Up 1
Link to comment
Share on other sites

Hi everyone! I just got done with the v1.3 update! Barring some huge, critical bugfix or an idea of how to fix the invulnerability bug, this should be the final update for Chapter Zero, as it's now more or less the game I wish I had time to make for SAGE. Links in the OP have been updated, hopefully see you guys sometime next year when I have news or releases on Chapter One!

Quote

CHANGELOG FOR VERSION 1.3:

- Aspects of platforming are affected by refresh rate, which made levels unbeatable for players with higher refresh rates. Attempted to calibrate the player character's jump height - among many other vertical momentum boosts from multiple actors - on startup. The speedrun timer SHOULD hopefully also be more consistent between refresh rates, as it also ran faster on higher ones. If issues somehow still persist, setting your refresh rate to 60hz will always be more stable.

- Level scripting system completely overhauled. As a result, the frame lag in Sign of Evil no longer occurs. This SHOULD also fix a potential soft lock in Gaia's Tantrum, where the door outside would sometimes fail to open if both targets were struck on the same frame by alternating Gaia's Wrath and Thunder Arrow in that order.

- Inputs for special moves have been altered, from Monster World III style (hold button + press direction) to Super Smash Bros style (hold direction + press button), because many players complained the former didn't feel very responsive.

- Camera system reworked to create less jerky, motion-sickness-inspiring swings between certain scripted camera movements. This also allowed for a few scripted cameras that were truly stationary (rather than just so far offscreen there was nowhere left to scroll, ala It's No Use), which levels such as Gaia's Wrath really needed. Also turned off pixel rounding, because it created a less bad but still very irritating jittering when the camera was following the player closely.

- Captive Light was sometimes failing to damage things that were visibly within its blast radius. Came to figure out the hitbox was centred incorrectly and have since corrected it.

- Music used to have awkward pauses between transitions and loops. I've since completely changed the way the game handles looping music to eradicate these. Unfocusing the window sometimes caused loop points in the music to desync in the testing environment, but I haven't been able to replicate this in NW.js - let me know if this still happens.

- In Gaia's Tantrum, players were completely ignoring the prompt that teaches them Gaia's Wrath and opting to complete the level spear only. I've placed a beam just underneath the dropthru platform at the start that bounces the player upwards to rectify this, making the bottom target only obtainable through Gaia's Wrath now.

- Just Wait a Minute used to have WAY too many tutorial prompts for button presses, making it not entirely clear that the player is expected to cast Captive Light backwards to cross the big chasm in the middle of the level. The prompts have now been simplified down to at *most* two at a time, and now become visible only exactly when they are needed.

- The mana check for Wrath of Gaia previously read Captive Light's mana instead. This could either make Wrath of Gaia unusable if Captive Light was empty even if Gaia still had uses left, or give the player literally infinite uses of Wrath of Gaia as long as they still had mana for Captive Light. Honestly baffled that not a single person caught this, myself included, but it's fixed now.

- Previously the knockback of an attack on any given enemy was based on their defined maximum movement speed, which meant Golems would barely move while d'Artbord was sent flying an entire quarter of the arena's length with every hit. I've since found a workaround for this that allows me to define an exact amount of knockback per enemy type without inhibiting their normal behaviour.

- If the player died (observed in Suitable Opponent, not sure if other stages were effected) and re-entered from the main menu, the timer would be immediately active before the starting countdown finished. Fixed.

- Suitable Opponent is now only accessible when the player has accumulated the other 13 par times. Said pars are now more generous to compensate - the dev times, of course, have only tightened, but beating those isn't acknowledged by the game anyway and only exist for bragging rights.

- Baron d'Artbord has been completely reworked. Some people told me he was too easy before - all I'll say in advance is be careful what you wish for.

KNOWN ISSUES:
- Moving platforms sometimes cause very strange behaviour where the player slowly sinks through it instead of standing on top of it. This is easiest to replicate on fast moving platforms, such as the elevator in Maugham Pit, and by entering their collision from unusual angles besides directly on top of them. Still looking for the exact cause for this, but I think in future it will probably be easier for me just to use slower moving platforms.

- Enemies sometimes become completely invulnerable after being hit. Suspect this might have something to do with the sheer hitbox spam of Gaia's Wrath, but I still haven't found a way to replicate it consistently. It's somewhat rarer now, but I would still appreciate ANY assistance in finding a consistent setup for this, because this bug has been a pain in the ass for literally every release so far.

 

Link to comment
Share on other sites

  • The title was changed to [FANGAME] Chapter Zero: A Dream Remembered
  • 5 months later...

Wow, this certainly was a thread I made, huh.

So my intention was to update this thread semi-regularly with milestones, or to speak on the minutae of the game dev that went into making this as I'm making it. But long story short, a lot of the work I did after v1.3 took so long, I genuinely didn't have sharable milestones for a while! With the upcoming existential dread hype of SAGE23 coming up, though, no better time to start than the present!

UuRIO2D.gif

So to start with, the work I've been doing on the main city of Nohpeten! I've been trying to work without stressing or burning out like I did on Chapter Zero, so I'd been working on this tileset at a rate of like 1-4 tiles a day based on how they would fit into the boundaries I had already designed. Funnily enough, I got a lot of my ideas from of all things, loading the original map in Garry's Mod and taking a tour through it, taking screenshots of landmarks and such and trying to envision how they would work in 2D, which is easier to say for some buildings than others, especially that central pyramid. There is an INSANE amount of detail to pack into a 16x16 tile too, quite unlike the basic, recolourable square blocks I made for Chapter Zero because I genuinely only had two months to put most of the game besides the basic underlying engine together.

So, why "Nohpeten" you might ask?

Well for a start, it turns out nobody in a single instance of Sonic media has ever actually given the Mystic Ruins an actual name for when the place was at the height of its power, and that's just crazy to me. Seriously, not even the comics? And I'm definitely not going to name the place "Mystic Ruins" when the place isn't uhh, even ruined yet. So after a little googling, I decided on a name that's reminiscent of Nojpetén, which if I'm not mistaken is the final Mayan city to be captured by the Spanish. On a side note, the work I had done up to this point already made me envious of the work that went into designing Sonic Adventure's world and backstory, even if a lot of it will only be seen at a glance - the fact that I can just google this shit in present day is a blessing, and a luxury that Sonic Team likely wouldn't have had in the day. And sure, they could have settled for using textbooks as references. It wouldn't have been unheard of (Doom did it, for example), but these crazy motherfuckers visited ruins in person for their inspirations and textures. Who DOES that???

Anyhow, it's not a huge secret that this influenced Sonic Team's naming convention for the Knuckles Clan. Tikal and Pachacamac, after all, are named verbatim after Mayan and Incan ruins respectively of the same name. And honestly, naming conventions are some of my favourite things about creative processes, even if as demonstrated above I prefer to put just a little extra distance between the source and my own work. The main character of Chapter Zero by the way, Ichima, is named after the Ichma, which was the culture that inhabited the IRL city of Pachacamac back when it was new - a little factoid I haven't had a chance to speak of yet, because Ichima is barely if ever actually referred to by name in the first chapter. While I'm on the subject of characters...

vUnmZ5m.gif

Now introducing my second playable character, Ishta! Named after the Izta people (who inhabited Nojpetén before the end), they will be the main (and for the most part only) playable character in the upcoming Chapter One. Compared to Ichima, he's obviously more of a speedy, close ranged brawler sort, and benefits a lot more from chaining special attacks together than Ichima's projectile-focused specials are. At least, that's the theory anyway - there's still a little pain state coding I've yet to do before I can test it and make sure combos, well, combo properly! A playable character is a LOT of work, and I would argue between the sprite sheeting, data entry and programming, this took up the bulk of my time since the last update. Thank fucking god I could still reuse huge swaths of Ichima's code, or I wouldn't even have a chance of making SAGE23 this year.

Still a lot of work yet to do, though! Hopefully though, with a lot of the hard, finicky and otherwise really boring code stuff out of the way, I should be able to start making prettier updates on the regular. And hopefully more than just these two little things at a time, lmao.

W89ShkL.png

Until next time!

Link to comment
Share on other sites

  • The title was changed to [FANGAME] Chapter Zero: The Angel Island Saga

So, SAGE has come and gone and most of the hype has died off. Guess I should probably talk about how that went amidst post-SAGE QoL improvements.

Truth be told I started out kinda disappointed in myself - a lot of the work between SAGE22 and 23 was mostly background framework and mechanical work, and some of that even ended up having to go to waste because my dialogue system was a complete mess. In terms of content that was actually available to play, I only really had a single level and a cutscene to show for it. I had hoped to at least have the game's main city playable enough for a little tour of the locales and its characters, but as it happens, that cutscene was an absolute nightmare to animate and program without any real experience of doing so in-engine.

recording-2023-07-27-at-10-49-48-gif.228

Let's talk about the level first. In my original plans, this was going to be the actual start of the game, and design-wise it still kinda reflects that, leaving the first chapter a completely optional side adventure to glimpse little nuggets of backstory that lead towards the game's core narrative. That does mean that in terms of design, it kinda has the unenviable task of taking the good hour or so of Chapter Zero's difficulty curve and teaching style so far and condensing it all into a single stage, while at the same time acting as the climax of A Dream Remembered without being obnoxiously difficult for new players. That, honestly, was the easy part.

I had the song picked for this level long, LONG in advance, for the simple reason that I wanted elements of the stage and its background synced to it. I already had basic ideas of how to accomplish this about a year ago when I redid the way music looping works, but I was not prepared at all for just how precise some timings had to be or how time consuming it would be to find them. Many of the timestamps in the earlier parts of the song were found completely by hand in Audacity, which is kind of an unintuitive process that it doesn't natively support because everything audio in Construct 2 runs on decimals that you need to run a Nyquist prompt to find. But that pales in comparison to the rhythmic pulsing shown in the gif above, which had to be calculated to nine fucking decimal points in order to avoid desyncing over time. And even then I'm not convinced it still wouldn't, though I doubt anyone will willingly stay there more than like two minutes to find out.

QU70mRh.gif

And then there's this god damned cutscene.

I went into it expecting I'd be done in a few days, tops. But seemingly simple tasks kept just... for lack of better description, refusing to be solved. Things kept moving in ways I didn't plan or design for, sequences kept refusing to move and soft locking entirely, and I remember being stuck on one single movement for days all by itself for reasons that basically amounted to "I used the wait command so badly that the cutscene forgot which part of the sequence it was in and refused to budge from that spot". And the worst part was because this cutscene also heavily used timestamps as cues for motions and camera cuts, I had to rewatch nearly the entire fucking thing from scratch every time I needed to test the tiniest change to it, and I ended up getting really sick of this song because of it. Honestly, I don't know how Scratchin' Melodii puts up with it, this shit was driving me absolutely crazy by the time SAGE's due date crept up.

And because a lot of it was a hard-coded mess, I didn't even get to keep a framework that I could use later like I did with the musical syncing, which still means I'll need to come up with another entirely new system the next time I have to do this. Honestly, huge mistake on my part and in retrospect my biggest regret of the demo, beyond just the simple lack of actual content I had to show.

So in terms of the actual reception it got at SAGE? There wasn't a whole lot. There were much, MUCH bigger fish on show this year, and many of them even had aspirations of commercial releases in an actual market, a kind of momentum no doubt spurred on by Pizza Tower's debut all the way back in SAGE 2019. Much of the attention I got was from people experiencing the first episode, A Dream Remembered, for the first time, and although there wasn't much of it, there wasn't a single person who really had anything bad to say about it, which was in its own way a huge turnaround from the embarrassing mess it was back in its original showing - a state so bad that the programming didn't even account for differences in refresh rate, and a memory leak in one level so bad that it became practically unplayable if you lingered for more than two minutes.

Originally, that's where the story would have ended - a small but hopeful showing that would motivate the quality of life improvements I am making right now in preparation of beginning Chapter One in earnest. But on a whim a few days ago, I happened to search up my own game on youtube out of simple curiousity, and happened to spot a familiar figure on one particular thumbnail.

This video made me so happy in ways that words really cannot express. And not just in the praise they had for my work, but also in a few angles of improvement and expansion that I honestly had not even considered. And of course, being a convenient thing to show to my game-illiterate parents as an indication of just how far I've come. I'm not really shaking from the attention anymore, but seeing this has been such a boost of morale for me, and I feel like that's been showing in my work too - at current time I'm mostly throwing together the saving and loading systems needed for this game to function on anything beyond a stage by stage basis, so with any luck I'll start being able to actually design maps and enemies around it accordingly pretty soon.

 

Anyway ahahahahaaha it turns out the links broke since I last posted, so I've gone ahead and fixed them. Seems as good a time as any to point out the game has its personal Discord channel now, linked within the game itself! I update a lot more frequently there, but hopefully I'll get over my fear of bots soon enough that I'll start linking it in webpages eventually, ahahaha

  • Promotion 1
Link to comment
Share on other sites

Hey, at least you're getting some recognition, however much it may be.

Congrats! Tho it's amazing the math needed to be calculated for a gif. 9 Decimal points? How precise does something need to be to work that well?

Link to comment
Share on other sites

22 minutes ago, CrownSlayer’s Shadow said:

Hey, at least you're getting some recognition, however much it may be.

Congrats! Tho it's amazing the math needed to be calculated for a gif. 9 Decimal points? How precise does something need to be to work that well?

Well it wasn't for a gif so much as it was for the timing between every "pulse" in the beat in the game's actual engine. My first attempt involved measuring the time between two beats by hand with the Audacity script earlier, which gives a figure accurate to 5 decimal digits, and that stayed fine for maaaaaaybe 30 seconds before the desync became noticable. A BPM tapper suggests it's somewhere in the realm of 145 BPM, but even that wasn't enough to work with - it meant finding how many beats are in a second with 145 / 60 (2.6666 recurring), and then dividing 1 by that figure to find the exact delay between each beat as a decimal (0.4137931034482759, as far as the MS calculator can dictate). Potentially might have been excessive, but it was what actually got the job done when everything else didn't.

Videogame math sucks, man. I wish I'd known how important algebra would be in coding growing up. =3=

Link to comment
Share on other sites

1 hour ago, Blacklightning said:

Videogame math sucks, man. I wish I'd known how important algebra would be in coding growing up. =3=

Well, math is a lot easier to do now that it was in the past.

Doesn't make it less of a pain, however...

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

You must read and accept our Terms of Use and Privacy Policy to continue using this website. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.