Personally I think that the Lite version should be what is primarily developed for. We could have it though so people could download different "implementations" for the Lite/Pro versions of certain things; this assumes that a call to a function to draw something like a text box could be written with the same number of arguments and produce a same result (albeit some of the resources might be different and possibly other scripts needed).
I am a little unsure of how the data structures work but meh; a lot of it seems to be with things relating to text. The shadow blending can be handled by a multiple image shadow sprite with Link's drawing of the shadow draw differently the sub-image depending on a variable.
Also, I was working on the movement code and trying to make it similar. I found that because Game Maker treats key statuses as boolean and numerical value, you can do logic and operational properties better. Looking at Goodnight's code, he takes advantage of this in some places, but not in all. Here is the current code I was working on (for Link's step event):
var hold_u, hold_d, hold_l, hold_r, move_count, move_step;
hold_u = keyboard_check(vk_up);
hold_d = keyboard_check(vk_down);
hold_l = keyboard_check(vk_left);
hold_r = keyboard_check(vk_right);
if (hold_u == 1 && hold_d == 1){
hold_u = 0; hold_d = 0;
}
if (hold_l == 1 && hold_r == 1){
hold_l = 0; hold_r = 0;
}
switch (hold_u + hold_d + hold_l + hold_r){
case 2: move_step = sqrt(2); break;
case 1: move_step = 1; break;
case 0: move_step = 0; break;
}
move_count = move_speed;
if (move_step != 0){
while (move_count >= 1){
if (place_free(x + hold_r - hold_l,y)){
x += hold_r - hold_l;
}
else if (hold_u + hold_d == 0){
}
if (place_free(x,y + hold_d - hold_u)){
y += hold_d - hold_u;
}
else if (hold_l + hold_r == 0){
}
move_count -= move_step;
}
}
A key to the concept I mentioned above only works with prioritized movement effectively. Because pressing up and down cancels them out, the only possible values that pressing all directional keys can attain is either 0, 1, or 2.
What the code needs to finish though is the corner cutting. I do not think that you need a for-loop for it per-say. I am still trying to figure out that - it comes down to if you bounding boxes aren't overlapping but will be if you move then you stop (if you run smack into it), if your bounding boxes do overlap and you move then it will determine your position in relation to the colliding objects bounding box and yours (you hit it off-smack).
If you are going down, for example, if you hit it perfectly you run in place. If you hit it off-perfectly, the code checks to see if you are pressing left or right (if you are on the left of the colliding object, pressing left will make you still go correctly, but if you go right you stop - just like in the Minish Cap). If you are just pressing down though and you are off-perfectly, the code adjusts your move_step value and should just move you in a left or right direction by one each step.