You mentioned using ZZT-OOP in scrolls: you can do that, to some extend, but it may be the reason why your scrolls don't work.
Let's say we want to make a scroll with title 'example' that displays a blue screen with the text 'Play Testflag!'
@example (text displayed in the top beam of the blue screen)
Play (line 1)
Testflag! (line 2.
A blue screen requires at least two lines of text. If you use one line, the text will be displayed in the bottom of the screen.
Here's the code you'd expect in an object:
An object starts to run as the screen begins - you #end it before it runs the rest of the code. To active it, the player needs to :touch it. After it displays the blue screen, it disappears using #die.
A scroll begins as you run into it, it opens for an instance and then it disappears. Using #end, :touch and #die is not only useless, it makes your scroll disappear without displaying a thing.
As a rule, a scroll can do anything in one instance, after which it disappears. It can #shoot, #put, #send, #set, #clear, #give and #take. It can even send itself :messages, as long as they require one instance to work. After the blue window is closed, the scroll will always disappear.
I hope I'm not confusing you by making this too complicated. Here's a small example of what a scroll can do
Let me give you some health.
#give health 20
For more ZZT-OOP references, feel free to ask questions/look at other people's work in the editor. Good luck with your game!