When I started the AGAE (due to Dimon's
idea of testing my own skills) I read Seth's development texts, looked
into source files - everything seemed easy enough. But then I stumbled
upon some game engine and dinkedit tricks…
So I made some notes for myself, and hope it may be helpful to other people starting on this thorny path. This text doesn't pretend to be a kind of tutorial. It is exactly what is in the title: impressions of a person who tries to make a DMod. Later on I added some modifications to it and now it is a kind of a DMod writer's online log, about the undocumented or just strange behaviour of Dink engine - or about my own errors not so easy to solve. If you think it immodest - well, don't read it further. If you know the source of a problem or think I'm wrong - please mail me. I hope it may be helpful to the beginners, and maybe someone would mail a hint to me. Don't flame me if you don't like this text. |
1.
Don't be keen on screenlocks. The game engine bug #1: if you try to escape
the locked screen and move along the screen edge - you just walk through
any hardness and then, when the monster dies and the screen unlocks, you
are somewhere you shouldn't be, and can't get back. So the screenlocks
are for the
screens with completely open edges, otherwise
you shouldn't let Dink (and monsters!) touch screen edge.
2.
Don't ever use compile.exe from original dink - it's extremely buggy. Use
windinkedit tools instead (I don't say it's bugless, but there are much
less bugs).
3.
A couple of times I had the nasty glitch: you just crash on one particular screen, almost every time. Later I learned
that too many sprites were on the screen. So if the limit was exceeded
(by screen match feature usually) it crashed.
4.
The graphics: don't forget applying dink palette when using ffcreate, lest
your sprites will look very strange.
5.
When using show_bmp procedure dink palette is necessary. And the problem
with DirectX may arise if your bmp size is not exactly 640x480. The game
just crashes with some videocards (not the one I have).
6.
The compare_magic procedure just doesn't work like compare_weapon. Lost
30 min to discover that. Had to do it other way.
7.
If your script generates a sprite, but you don't see it (it is there, it
works but doesn't show) - it means the sequence is pushed out of memory
cache. The debugger gives "bad pix in sequence" message. Just use preload
sequence.
8.
If you make burnable tree unburnable, bear in mind that fireball takes
off its hardness, so the script must restore it (in the hit procedure).
I just draw one more pine-tree, darker one. So it doesn't burn because
only 1st frame tree in the sequence can burn. Thank God there is the Sprite
Replacer!
9.
Don't add monsters with the screen match mode on - they will keep appearing
from the adjacent screens' edges.
10.
If a sprite must be on more than one screen - let it be 2, not more screens,
or it may be partly lost. Or use WinDinkEdit to check and/or correct it.
11. The
good idea is checking all your map midscreen hardness and tile connections
with WinDinkEdit.
12. (NEW) There is a known bug in dink: if Dink kills an enemy and it is followed by a cutscene (e.g. in SOB, story 4, when he kils a witch in the jail) and there happens level up, you never see the cutscene and Dink remains frozen.
Solution: Don't give experience points for such enemies using sp_exp(), use &exp += 200 in the cutscene script.