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.

Show posts Menu

Messages - PhoenixII54

Aww, i think there are some basic Lua notions you need to understand :

1. when you define functions using
Code ( lua) Select
function <id>, the content of the parenthesis is the declaration of variable(s) that you want to be passed on call
so doing
Code ( lua) Select
function map:on_started(movement:start(traveller_2))
is not correct and is likely to generate odd behaviour if not triggering an error.

2. in line :
Code ( lua) Select
you forgot the parenthesis around the list content, since you wnt to call the set_path function. (which may be why you got the error message in the first place)

3. finally, your movement will never be started since your function call is misplaced (see 1.).

That's all for now, try fixing your script from all points above, and let me know if it is OK.
Hello everybody,

Lately, I have been watching a series called "Boss Keys", made by Mark Brown (channel) , who intended to analyze all Zelda games, and building a progression graphics from critical path.
As a challenge, and pushed by the Gitter chat people, I decided to train myself on the Solarus team's first game: Zelda Mystery of Solarus DX.

And... what you are about to see is the result of my analyzis work: a full graph of every dungeon, including the secret one.

Download it here, while it's hot!

Feel free to make any remark and/or suggestion, i'll be glad to answer/enhance it all.

Yup, there is a way to fix it, too.

Hint : Find an official iPhone iFeather provider...
Your problem is that :
1. you are trying to call a reference of movement, but it doesn't exist anymore (when the on_started function finishes, everything defined with local in it is destroyed -or restored to it's previous value if it was already declared outside)
2. you are redeclaring the start() function, which works, because lua allows it, but in your case, would just anihilate it's normal behavior, and as such,  never trigger the movement to actually start.

To fix it, you must place your movement:start inside the on_started function, and remove the function keyword (as well as the associated end keyword)
He's talking about this snippet of code:

Code ( lua) Select
local movement = sol.movement.create("path")


Either this a copy-paste error, or you did forget the function decleration, but in any case, if i executed it, i would get this error message (not in this exact format, but whatever) :
Error : unexpected symbol "end" at line 13:1
The problem is that the engine expects NPC to have 4 sprite directions, and i suppose you only put 2 in your animation. To fix this, you must duplicate some of its directions to have all 4 required, in case you want to add more to the path.

Another thing to precise is that your movement might not loop as you scripted it.Use movement:set_loop() to define whever you want it to loop or not.

Also, you can use timers to enhance your moves, like, walk to point A, wait, turn left, wait, go to point B, wait, etc. I suppose it is not in your priorities yet, but it will definetely add live to your NPC.


Another solution is to compile the sources directly, and on Linux it much easy thanks to command line

Explanations how to do it are here (explanations are for v1.5.X).

Hope it helps !
QuoteCould you provide examples of where it's particularly hazardous? I could probably put in some rocks or something to block it off
in maps Plain of Andor/af21 and Plain of Andor/ae21, Plain of Andor/ah21, : the border between shallow and deep water (especially the swallow side), is the best example of it (just walk north there and you'll be continuously be drown until game over)
Plain of Andor/ah20, same idea with the right side of the river
UPDATE : in latest commit, tree stomp/cabin behind merchand of map Ogbam/af26 is partially traversable

on the other topic
QuoteOne thing I'm debating over is reshaping the river separating the Plain from the rest of the overworld. I did my best to try and replicate how it looked in the original game, but I'm not sure I like how it looks and can potentially interfere with moving between screens. So my thought is to simply make it nice and straight across with few curves whatsoever, but if it stays the way it is then it's no skin off my nose. Anybody who plays it, can you give me your thoughts on it?
Reference map:

one thing to be aware of is that you could fall in the deep water right after a transition if you make a diagonal near the map border (EDIT (2:36 PM french time): aaand, i just got stuck and drowned), so you whould avoiding it when possible, either by making it straight or by adding some obstacles
Anyway, it's general shape looks okay to me.

EDIT² Not related, but : i think the Octos are broken/not finished (commit 74fcf05805bf16facff805d5b6ec82ae43858062):

Error: In timer callback: enemies/octorok.lua:57: attempt to call method 'go' (a nil value)
stack traceback:
[C]: in function 'go'
enemies/octorok.lua:57: in function <enemies/octorok.lua:49>
Ok, just got the latest commit, testing right now, and i can confirm dialogs now work (tested with waterfall sign)

But :
Error: Cannot find quest file 'maps/ae24.dat'
Fatal: Failed to load map data file 'maps/ae24.dat'

In map Forest of Ogbam/af26
Error: No such dialog: '' when interacting with any shop item, the left one having no sprite displayed

In map Forest of Ogbam/ag28 : western telestransporter is not set to map Forest of Ogbam/af28
In map Forest of Ogbam/ah29 : the witch has no interaction (yet)

(maybe not a bug) In map Plain of Andor/aj24 : the thirsty woman repeats the same dialog even after accepting her quest
Dying after entering/leaving indoors/under_ag32, sends back to 01. Shrine of Earth/ca07 with the following message :
Error: The savegame refers to a non-existing map: 'Forest of Ogbam/ag32'

In map Vision Henge/visionhenge6
Fatal: Missing previous surface for scrolling when trying to go south

and i think that's all for now unless i missed something.

PS : i slightly modified hud script to display current map in the console, to help debugging
see my post above, i will update it with new errors ;)
Hello, i am playtesting your demo.
Some remark : the github repo is not recognized as a valid quest by the editor, had to manually make a "data" folder for it to work.

Anyway, here are the errors i found so far :

  • NPC/signs that refer to dialogs that do not exist (yet) and trigger errors (by the way, you should never use spaces in dialog ids)
Error: No such dialog: 'sign.river source'
Error: No such dialog: 'moblin_inn.lady'
Error: No such dialog: 'moblin_inn.traveler'
Error: No such dialog: 'moblin_inn.patron'
Error: No such dialog: 'moblin_inn.innkeeper'
Error: No such dialog: 'sign.moblin inn'
Error: No such dialog: 'sign.forest of ogbam'

  • the exit teletansporter of map 01. Shrine of Earth/ca07 is inaccessible

(to be edited)
Development / Re: Solarus Engine Roadmap?
April 04, 2018, 09:29:54 PM
Broken items are indeed part of the joke, and for Zelda's repetitive tasks, you can just skip them after doing the first full loop, unless you ant to read all the variants of the letters she receives.

Concerning the 4 jumping Arm... err attorney-like guys, there might be something you missed near them... And remember, things are not always as they seem <leaves discretely before spoiler police comes>
For your MIDI files, you can try using OpenMP. Just open your file, then fix instruments if needed, and export it as IT file, with instruments integration.
Hope it will help.

For SPC files, i don't know of another solution other than the one you used, sorry.
Edit : After some thoughts, you can do it with SPC files too : once you have your converted IT files, you can modify them in OpenMPT and fix sustained keypresses.
Development / Re: Mourir après avoir ouvert un coffre
January 15, 2018, 10:42:45 PM
Bonsoir !

Déjà il y a une erreur concernant ton timer : tu dois placer le code a délayer dans le troisieme arguent sous forme d'une fonction sans nom comme suit:

Code ( lua) Select
sol.timer.start(map, 1000, function() --définition d'un callback appelé a la fin du timer
end) --fin du callback du timer

Car sinon tout ce qui est en dessous de l'appel du timer est executé directement.
De plus, utiliser [map] comme argument est faux, les crochets sont ici en trop.
Pour le reste, çà me semble correct.