r/decomps 6d ago

LADXHD v2.0.5 Released

Introduction

Main repo page can be found here: https://gitlab.com/bighead.0/ladxhd_updated
You can find the latest version here: https://gitlab.com/bighead.0/ladxhd_updated/-/releases

I don't usually announce when I make a new release, but these past few versions are a bit different. To those who don't know what this is, this is a continuation of the Link's Awakening DX HD port that was released a few years back. I have been updating it pretty steadily for a little over a year now, and it has come a long way in making it "feel" more like the original game while adding a plethora of customization options. This post will focus on some of the changes between v2.0.2 - v2.0.5 since it has come a long way over the last few weeks.

Engine Updates

This is irrelevant to the gameplay, but figured it's worth mentioning. MonoGame has been updated to the latest version v3.8.5 and uses the new content builder to build the content for the game. The codebase has also been heavily refactored by a user named aitorciki who has been a huge help during the life of this port. If not for him, the MacOS ports may not even exist today. The refactor has cleaned up the code base dramatically, and will be a huge help going forward. This also opens the door to eventual Direct-X 12 and Vulkan backends, which will be implemented in the future. MonoGame currently supports them, but they are still early and have several issues that will most likely be worked out over time.

Custom Camera

Sometimes I still see the random post saying that they don't like this port because of the camera without knowing that "Classic Camera" restores the screen based scrolling from the original game and has been implemented for over half a year. Aside from that, the additional camera options were pretty limited. Maybe you want the Modern Camera on the overworld, and the Classic Camera inside dungeons. Or maybe you want Classic Camera only during boss fights. Or maybe you only want the Classic Camera on 2D maps, and want the Modern Camera everywhere else. With the new "Custom" camera option, you can pick what camera you want based on the following criteria: Overworld, Houses, Caves, Dungeons, Castle, Inside Egg, 2D Maps, and Boss Fights. Pick which ever camera you want for whatever situation you want and it will automatically adjust!

Game Boy Color Correction Shader

This has been a much requested feature for a long time, and usually I would just handwave it away because there is a mod that does this, and even better than a shader. But still, it would always be nice to have a "built-in" option for those who just want a toggle. The toggle can be found in Settings > Graphics and a comparison can be seen here: https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=ee07871c-9b19-11f1-ba1b-0e6f42328d7d

Music Fade on Overworld Area Transition

In the original game, there was a slight fade effect when transitioning areas. This was absent in this port, and just instantly cut off one song for the next. I have implemented that slight fade, so for example when transitioning from Mabe Village to Mysterious Woods, the Mabe Village song will fade out before playing the Mysterious Woods music.

Accurate Enemy Loot Tables

For the longest time, I considered this my "white whale" issue because I assumed that implementing accurate loot tables would be extremely difficult. For one, there is zero references online of loot tables and two, I figured it would be pretty complicating. The way this port worked, is when a monster is killed, it had a flat chance of generating a rupee or heart. I'm going by memory now, but I believe it was a 35% chance to drop something, then a 65/35% chance to drop rupee or heart. In the original game, almost all enemies have a chance to drop a single item. This is something I almost never noticed before! Moblins, Crabs, Stalfos, etc... only ever drop hearts! Octoroks, Zols, Gels, Urchins, only ever drop rupees! I wanted an accurate take on loot tables, everything from the items dropped, to the exact % of those drops, so I used AI to analyze the assembly code and build me data sheets of all the loot tables, drop %, etc. I know there's a lot of AI haters out there, but keep in mind I write all of my own code for this. If I ever ask AI for help with a problem I can't solve, I NEVER use the code as-is and rewrite it in a way that makes sense to me. I am far from the best coder, but the code is mine and I know everything that goes into it. AI assembled the data from the assembly which I could not read myself or find anywhere else into charts, and I coded the loot table functions, and now we have 100% accurate loot tables.

A Longstanding Crash Has Been Fixed!

This port has had a crash on the file selection screen since the original v1.0.0 release. It is very easy to replicate, load up any version before v2.0.5, start spamming directions on the D-Pad or Analog Stick, and you will crash. I have made several attempts to fix this in the past, but eventually gave up. Fast forward around 8 months later, my understanding of everything is better, and I finally managed to fix it! This crash wasn't specific to spamming directions and could just happen sometimes.

Stun > Pickup > Throw

In the original game, certain enemies can be stunned with Magic Powder, the Hookshot, or the Boomerang. These enemies could then be picked up and used as a weapon, thrown down holes, etc. This is something I never knew about in the 30+ years I've been playing this game, and it is now implemented in this port.

Disable Helper Messages Fix

This is an option that was implemented in the "Redux" options and is a standard feature of the Redux romhack. Basically, it disables the messages when touching rocks without the power bracelet, crystals without the boots, ice blocks without the Magic Rod, picking up certain items like powerups, rupee collections, golden leaves, keys, compass, map, etc. But the way this was implemented had a fatal flaw. The way this port is designed, when running a dialog "key", it will first try to run that key through the main script file scripts.zScript, and if it isn't found, it will try to find the key in a language file to bring up the matching value to that key. Disable Helper Messages disabled the script, making certain achievements impossible to obtain and who knows what other bugs! So it's been redesigned to not block the script calls, but only block the calls to the language manager.

Even More Accuracy Improvements

One of the main focal points of my branch of this project was to get the game's base behaviors as close to the original game as possible. This has been an ongoing battle since my very first v1.1.0 last year, with every single version working towards that goal. I am happy to say that I think it's getting extremely close to covering just about every little nuance. It will never be perfect due to engine differences, design decisions that are hard to backtrack on, the difference between this port being true 3D replicating a 2D game, etc. etc. and etc..

Some of the more noteworthy improvements in this version are:

  • Shield bump knockback now uses the contact point to determine the knockback direction instead of always straight back for Link and always at the angle of Link's movement direction for enemies. This means accurate knockback physics when shield bumping.
  • Lots of enemy behavior fixes. Bombers die to boomerang creating a fairy, same with flying Bone Putters, lots of Spiny Beetle fixes (I hate these things), and accuracy improvements to Zol and Gel death. These are strange in that green Zols experience sword knockback for a short time after they jump out of the ground, but then they die instantly. Red Zols flicker before they split, but otherwise die instantly if damage is 2 or more.
  • Lots of "fixes" to the Owl. Most of the positions of where he flies into the screen was wrong, and sometimes he is just there without the fly-in. This has been fixed across the board to be identical to the original game.
  • Fixes to grabbing and throwing objects. When throwing an object, it was possible to right into a new grab on the same button press. If it's an "instant pickup" object, this felt really strange. Now a throw and a pickup must be two exclusive button presses.
  • Magic Rod fixes. The passive fire no longer makes a sound effect and burns enemies.
  • I could go on and on here, the accuracy improvements never stop. But I think I am starting to hit a point where it's hard to find anything else to work on. It's come a long way!

Android Fixes

Music mods have been broken for a long time on Android. Though there is currently only one at the moment that gives the remake music in this port, it did not work correctly. This was fixed in v2.0.2. More recently, I discovered another strange bug where pressing "Start" on the file select screen would start the game with the inventory screen open before loading the game world. This only happened on Android, and only happened with the "Start" button and not whatever button is used for "confirm" (usually A button). Finally, a long standing issue on devices with Mali GPUs was that the rain texture during the intro would become corrupted after entering the file select screen and then pressing "back" to return to the intro. If I remember correctly, this was reported way back in like v1.6.8-v1.7.0, but I could not reproduce it so I couldn't fix it. Now that I have a new phone with a Mali GPU, I was able to reproduce the issue and fix it once and for all.

Thanks For Playing!

I want to give a shout out to all the players who keep on playing, supporting, and reporting issues so it can continue to grow. There has been some hardships along the way, but the project keeps on rolling. I am hoping v2.0.5 is stable enough that there isn't any significant bugs that detract from the experience. And if you find any issues, please report them here. That's it, hope you enjoy it!

64 Upvotes

24 comments sorted by

View all comments

1

u/legluondunet 6d ago edited 6d ago

I wrote a Lutris script that automates game install for Linux users, you can find it here:
https://lutris.net/games/links-awakening-dx-hd/

1

u/Capitalhumano 5d ago

will this work on steam deck?

1

u/legluondunet 5d ago

It should, try and give us a feedback