The Wyvern engine lets you create your own custom artwork, and use it in areas you create. This is a powerful feature, but your artwork must comply with various restrictions. If your artwork is non-compliant, it will either fail to appear, or we'll remove it from the game.
Wyvern artwork consists of images in GIF format. You can create your own artwork and add it into the game. You can use any tool you like to create the images, as long as the final result meets the requirements for Wyvern artwork.
Wyvern images must meet the following requirements:
The image cannot contain any copyrighted material or be copyrighted itself. Do not take random images off the internet and put them in the game unless you are absolutely sure the images aren't copyrighted. Cabochon will remove any copyrighted material immediately.
The image cannot contain any objectionable material. Cabochon reserves the right to decide what constitutes objectional material. Pornography is included in our definition of objectionable, for purposes of the game.
The pixel dimensions of the image must be even multiples of 32. Valid image sizes include 32x32, 64x32, 32x64, 64x64, 96x32, and so on. A 32x32 image (or piece of an image) is often referred to in the documentation as a tile.
Each image should be indexed and have at most 256 colors. Each image can have its own custom palette.
Historical Note: we originally imposed a global game palette of 236 colors, the "Wyvern Palette", on the artwork, under the assumption that some people would have 256-color video cards. In practice, it didn't work very well, for a variety of reasons. However, we didn't lift the restriction right away so some of the Wyvern artwork still uses the original 236-color palette (or a subset of it).
The image must be in standard 72dpi resolution suitable for display on a monitor. This is the default in most drawing programs.
Objects can have multiple animation frames, but the animation is not intended to be smooth - the bandwidth requirements would be too high, and we're avoiding client-side animation for the forseeable future. The game enforces a hard limit on how fast the animations can occur (2-3 per second, depending on server load).
Objects can have multiple "views", one per direction. The views are chosen automatically when setDirection() is called on the object. You can provide up to 8 directions: N, S, E, W, NE, NW, SE, SW. Most directional objects have at least four directions supplied.
Objects should cast shadows; the light should be coming from behind the viewer and to the left, so the shadow extends behind the object and to the right. Objects that are laying on the ground like a rug won't cast much shadow, if any.
The game perspective is a carpenter's projection: the front face is flush with the screen. This is usually true for buildings and monsters, but need not necessarily be true for walls or other scenery.
Monsters facing south should be facing "towards" the viewer; monsters facing north should be facing "away" from the viewer.
In addition, we recommend (but don't require) the following artistic guidelines:
Shadows are drawn using alternating black pixels in a checker pattern. There's no rule that they have to fall on even or odd pixels - do whatever looks best for the image.
Monsters should have at least 2 views (left and right), and ideally they should have a total of 4 views. We recognize that this isn't always easy to do, so it's not a requirement. Monsters that never turn, of course, only need one view.
The game artwork shouldn't be "to scale". Human-sized figures should be 32x32 pixels, buildings should be up to 64x64, and really large structures like castles, cities and coliseums can be larger, with a practical limit of perhaps 160x128, or 5x4 tiles.
Small items like rings or amulets should definitely not be drawn to scale. They should be large enough to be instantly recognizable even when running the game on a hi-res monitor.
The artwork should have a relatively consistent style, at least within a given area. While items are not to scale, they should be as realistic as the limits of 32x32 pixel tiles and 256 colors allow. So remember that objects cast shadows, have uneven lighting (unless they're flat and facing the light exactly), and have textures to them. Including all these aspects in your images will help make the more realisitic.
We haven't done any testing with really large images yet. At some point it should be possible to draw an entire room as one image, and let the players wander around it, but we just haven't done it yet. The game temporarily has hardcoded limits on image size until we work this out.
Certain kinds of objects (for example, roads and walls) require more than one image to be created. This should be documented in the class that implements the object.
The naming convention used by the game engine requires the base name to be followed by a ".", followed by the direction, if any, followed by the animation frame, if any. Animation frames are numbered from 1. Examples:
wizard.E.gif, wizard.W.gif, wizard.N.gif, wizard.S.gif — the four directions for a non-animated wizard character.
fancy_ring.1.gif, fancy_ring.2.gif - frames for an animated ring with a total of 2 animation frames.
A dragon with 8 directions and 2 animation frames would have a total of 16 images:
If you don't supply all the directions, the game engine will pick the closest available direction when you call setDirection() on the object.
If you're submitting artwork to the game, for Wiz Experience, you'll need to submit "stub" archetypes for each piece of artwork. An archetype is an XML file that describes the object that's going to use your image. The stubs are easy; just do this:
Create a text file with the same name as the image, except it ends in ".arch" instead of ".gif". You can use Notepad to create the file.
Type the following text into the file, making the substitutions listed below:
<arch class="wyvern.lib.classes.weapons.Sword"> <image path="contrib/wizname/my_picture"/> </arch>
Change wizname to your wizard name.
Change the class to one of the classes in the table below.
Change my_picture to the name of the image file, without the extension.
Here are the classes to use, depending on what kind of picture it is:
Object Type | Class To Use |
---|---|
Arrow | wyvern.lib.classes.weapons.Arrow |
Axe | wyvern.lib.classes.weapons.Axe |
Blowgun | wyvern.lib.classes.weapons.Blowgun |
Bolt | wyvern.lib.classes.weapons.Bolt |
Bow | wyvern.lib.classes.weapons.Bow |
Club | wyvern.lib.classes.weapons.Club |
Crossbow | wyvern.lib.classes.weapons.Crossbow |
Flail | wyvern.lib.classes.weapons.Flail |
Gun | wyvern.lib.classes.weapons.Gun |
Hammer | wyvern.lib.classes.weapons.Hammer |
Knife | wyvern.lib.classes.weapons.Knife |
Pole Arm (e.g. halberd) | wyvern.lib.classes.weapons.Polearm |
Sling | wyvern.lib.classes.weapons.Sling |
Spear, Javelin, Lance | wyvern.lib.classes.weapons.Spear |
Staff | wyvern.lib.classes.weapons.Staff |
(straight) Sword | wyvern.lib.classes.weapons.Sword |
Curved swords and all other blades | wyvern.lib.classes.weapons.Blade |
Whip | wyvern.lib.classes.weapons.Whip |
Not sure - hand-to-hand | wyvern.lib.classes.weapons.MeleeWeapon |
Not sure - fired weapon | wyvern.lib.classes.weapons.RangeWeapon |
Not sure - thrown weapon | wyvern.lib.classes.weapons.HurledWeapon |
Body armor, robes | wyvern.lib.classes.armor.BodyArmor |
Shield | wyvern.lib.classes.armor.Shield |
Helmets and other headgear | wyvern.lib.classes.armor.Helmet |
Cloak | wyvern.lib.classes.armor.Cloak |
Gloves, gauntlets | wyvern.lib.classes.armor.Gloves |
Boots and other footwear | wyvern.lib.classes.armor.Boots |
Bracers | wyvern.lib.classes.armor.Bracers |
Amulet | wyvern.lib.classes.armor.Amulet |
Ring | wyvern.lib.classes.armor.Ring |
Girdle, belt | wyvern.lib.classes.armor.Girdle |
Girdle | wyvern.lib.classes.armor.Girdle |
Spell effect | wyvern.lib.classes.magic.Spell |
Scroll | wyvern.lib.classes.magic.Scroll |
Wand | wyvern.lib.classes.magic.Wand |
Rod | wyvern.lib.classes.magic.Rod |
Book, Spellbook | wyvern.lib.classes.magic.Book |
Scroll | wyvern.lib.classes.magic.Scroll |
Gem | use <arch path="objects/treasure/gemstone"> |
Monster | wyvern.kernel.monsters.MonsterImpl |
Player | wyvern.kernel.monsters.PlayerImpl |
Buildings | wyvern.lib.classes.Structure |
Light source | wyvern.lib.classes.Lamp |
Keys | wyvern.lib.classes.Key |
Corpses | wyvern.lib.classes.Corpse |
bags, knapsacks, backpacks, pouches | wyvern.lib.classes.BasicBag |
chests | wyvern.lib.classes.Chest |
ships | wyvern.lib.classes.Ship |
other vehicles | wyvern.lib.classes.Vehicle |
terrain types | wyvern.lib.classes.Terrain |
signs | wyvern.lib.classes.construct.Sign |
pushable rocks, barrels, etc. | wyvern.lib.classes.construct.Boulder |
switches you can step on | wyvern.lib.classes.construct.ButtonSwitch |
doors | wyvern.lib.classes.construct.Door |
walls | wyvern.lib.classes.construct.Wall |
levers | wyvern.lib.classes.construct.Lever |
staircases | wyvern.lib.classes.construct.Stair |
Fixed, immovable objects (trees, plants, tables) | StaticObject |
unspecified object that you can pick up | DynamicObject |
Note: you don't need to create more than one archetype for a monster. E.g. for an elf with four views, you'd just create one archetype for it, like this:
<arch class="wyvern.kernel.monsters.MonsterImpl"> <image path="contrib/frobmeister/bad_elf"/> </arch>
There are plenty of icon editors available, but we recommend using sophisticated product such as The Gimp or Adobe Photoshop. The Gimp is 100% free, very powerful, and works on most platforms, including Windows and Linux.