Page 24 of 38

Re: Lyon

Posted: Mon Jul 23, 2012 9:23 pm
by Saxxon
Commodore wrote:It is still the legendarily buggy Link's Adventure.
Very cool. Lyon now reproduces this bug exactly. I also managed, on the same board, to lock up both ZZT and Lyon in the exact same function! Reproducing this bug causes others to surface in interesting ways.

I never expected the built-in monsters to be so buggy.

I can't seem to reproduce your darkness bug.

Re: Lyon

Posted: Mon Jul 23, 2012 10:37 pm
by Commodore
Try running around in this room.

Re: Lyon

Posted: Mon Jul 23, 2012 10:53 pm
by Saxxon
Strange.. yeah I can definitely see it now. Even stranger, in all the other worlds with conveyors and dark rooms, I wasn't able to make this happen.

Re: Lyon

Posted: Mon Jul 23, 2012 11:32 pm
by Saxxon
Try this build, should fix all the issues you mentioned. The darkness bug was caused by the code I put in so that conveyors fully surrounded by objects would operate fine (I will probably fix this and break it so it works like ZZT)

Re: Lyon

Posted: Tue Jul 24, 2012 12:27 am
by Commodore
System.IndexOutOfRangeException
at Roton.VideoGDI.CancelUpdate(Int32 X, Int32 Y)
at Roton.Environment.BoardFade()
at Roton.Environment.ExecuteMain()
at Roton.Environment.ExecuteMain()
at Roton.Environment.Execute()
at Lyon.GameForm.Tick()

tried to load a szzt save file with a zzt window open

Re: Lyon

Posted: Tue Jul 24, 2012 1:54 am
by Saxxon
Commodore wrote:System.IndexOutOfRangeException
at Roton.VideoGDI.CancelUpdate(Int32 X, Int32 Y)
at Roton.Environment.BoardFade()
at Roton.Environment.ExecuteMain()
at Roton.Environment.ExecuteMain()
at Roton.Environment.Execute()
at Lyon.GameForm.Tick()

tried to load a szzt save file with a zzt window open
Got that szzt save file?

Re: Lyon

Posted: Tue Jul 24, 2012 2:52 am
by Commodore
well I just figured out that it happens only when you press r to restore a game from a title screen.

also embarrassed about my choice of save name.

Re: Lyon

Posted: Tue Jul 24, 2012 3:34 am
by Saxxon
Ohhh yeah. Lyon does NOT like it when you change game engines that way. The game window is coded so that everything is set up on initialization. I need to make it so that it opens up a new window if the engine is different.

Re: Lyon

Posted: Tue Jul 24, 2012 5:29 am
by Saxxon
Here's a release that fixes the restore bug. If you change worlds or restore a game within a game window, it will check to make sure that the world types are the same. If they are not, it will open a new window.

Now, go forth and break things!

Next to implement: proper conveyor behavior (buggy when fully surrounded by pushable stat items such as bombs, etc)

Re: Lyon

Posted: Wed Jul 25, 2012 6:17 am
by Commodore
System.NullReferenceException
at Roton.File.SaveRLE(ZZTBinaryWriter Target, Tile[] Tiles, Library Library)
at Roton.File.SaveZZTBoard(ZZTBinaryWriter Target, Board B, Library Library)
at Roton.File.SaveZZT(ZZTBinaryWriter Target, Environment Source)
at Roton.File.Save(Stream TargetStream, Environment Source)
at Lyon.MainForm.FileSave(Environment E)
at Lyon.MainForm.SaveGameHandler(Environment E)
at Roton.Environment.ActPlayer(Int32 Index)
at Roton.Environment.Act(Int32 Index)
at Roton.Environment.PerformBoardCycle()
at Roton.Environment.ExecuteMain()
at Roton.Environment.Execute()
at Lyon.GameForm.Tick()

Opposite problem. tried to save over a szzt save file (same as above) while in a zzt game.

Re: Lyon

Posted: Wed Jul 25, 2012 6:25 am
by Saxxon
The RLE generator crashed there- this would typically be as a result of a corrupted board. Do you have the world this happened on? The type of world wouldn't matter for this kind of error.

Edit: I may have identified one possible cause- when loading boards, if it is determined that the board is corrupted on load, the tiles array is actually left null. There wasn't a provision for this when saving the boards back. There will be a safeguard for the next time. But I would still like to see this in action, just to be sure it is fixed.

Edit 2: Conveyors now work exactly as in ZZT. If you surround a conveyor with bombs, it is possible to remove the player object from the game by lighting them a certain way, making it impossible to quit or do anything else!

Edit 3: I have improved the handling of corrupted boards, they will now be replaced with a blank board (but the board's title will still remain how it is in the file.)

New build coming in a few minutes.

Re: Lyon

Posted: Wed Jul 25, 2012 7:52 am
by Saxxon
Bugs mentioned above were fixed. I also found one where having a ZZT window maximized while closing it to switch to another window could potentially cause a crash.

Next objective: implement Messenger as it is in ZZT. Currently, it is not part of the thing-list, and is processed separately. However, in order for bugs such as the border illusion trick in ZEOL-7 to work properly, it needs to be in the thing-list. Technical reason: a messenger is created on the target board which executes exactly once, which is what causes that board's border on the screen.

More time-consuming objective: fix #zap and #restore bugs. They have been present since the OOP rewrite and I just haven't gotten around to fixing them.

Re: Lyon

Posted: Wed Jul 25, 2012 11:02 pm
by Saxxon
Making some progress on the zap/restore bug. I've implemented each of the commands correctly but the search routine needs some tweaking- it's zapping more than it should.

Re: Lyon

Posted: Thu Jul 26, 2012 1:56 am
by Commodore
I just looked at the VB (i am very rusty) and saw how zap jumps through the send and sendeval routines. Hairy stuff! I hope thats based on the disassembly, it seems like a roundabout way to do a search and replace routine. Maybe I've just been swimming around in machine language for too long...

Re: Lyon

Posted: Thu Jul 26, 2012 4:29 am
by Saxxon
Commodore wrote:I just looked at the VB (i am very rusty) and saw how zap jumps through the send and sendeval routines. Hairy stuff! I hope thats based on the disassembly, it seems like a roundabout way to do a search and replace routine. Maybe I've just been swimming around in machine language for too long...
Yeah it's nasty. I don't like all the ByRef stuff. I'd rather pass it all via a structure. But it should replicate exactly what I see in assembly. After it's all done, I would refactor it into something that makes sense.

SendEval searches for a label that matches the string, and target as well if applicable.