Although I know I tested the memset16()
presented earlier, one instruction miraculously disappeared when
posting it here. There should have been an `mov r12, r1'
in the initializing of the registers for the stmia. I have no idea where it
disappeared to, but with this fix the routine should run properly.
I've been having a number of this sort of errors lately, actually. I've also
recently found out that the shared-tileset in the current distribution is
broken because of a single character that handles it in
grit_prep_map. This:
// in grit_prep.cpp, grit_prep_map
if(gr->img_flags & GRIT_IMG_SHARED)
rdxDib= grit_tile_reduce(&mapRec, tileDib, flags, NULL);
else
rdxDib= grit_tile_reduce(&mapRec, tileDib, flags, gr->shared->dib);
should have been this:
// in grit_prep.cpp, grit_prep_map
if(~gr->img_flags & GRIT_IMG_SHARED)
rdxDib= grit_tile_reduce(&mapRec, tileDib, flags, NULL);
else
rdxDib= grit_tile_reduce(&mapRec, tileDib, flags, gr->shared->dib);
The missing ~ means that the the code did exactly the
wrong thing. And again, during testing I had it right (cue Twilight-zone theme).
I've uploaded some newer tonc files today, mostly for devkitArm r21 compatibility. Because the linkscript for multiboot got b0rken somehow, I had to change all the demos to default to cart-builds. I intended to change to cart-boot later anyway, but not being able to build the demos properly with the latest devkit kinda forces me to do it now. I've also had to change the tier-3 makefiles because it used `-fno-expections' in the CXXFLAGS. This should of course have been `-fno-exceptions' (thanks muff).
There have also been a few changes in the text parts: build-specs are set to cart-boot there too now, and I fixed some broken links. I've also fixed a slew of spelling and grammar issues that Patater sent in. These part of the text shouldn't be gibberish anymore – just unintelligible :P.
One major and some smaller changes to usenti. The major one is that
there is now a font exporter that can convert bitmaps to TTE-usable
fonts. I'm not sure if it's final yet, but any later changes should
be small. The text-tool has been altered to facilitate creation of fonts
by adding an opaque mode, an align-to-grid option and proper clipboard
support (so you should be able to just copy an ASCII table into it, at
which point the font is practically made already).
Also, there are separate pasting modes: one that matches the colors to
the current palette (potentially mixing up the colors) and a
direct-pixel paste, regardless of colors. Thanks, gauauu, for finally
making me do this. Secondly, Kawa's been badgering me (politely)
about editing colors in raw hex rather than via RGB triplets. This can
be found, for various bad reasons, under the Palette menu under
‘Advanced color edit’.
Both of these items have … interesting side effects. Through
the former, you can replace colors of a given palette-entry by
copy-all, swap and paste. The color-edit accepts multiple colors
separated by white-space and, later on, by commas as well, meaning that
accidentally it's now possible to take previously exported palettes
and add them again. Yes, it's
feep, but
it's interesting, somewhat hidden and cheap feep, so that's alright. I'm
thinking about adding something similar for the image itself as well
(plus raw image imports), but only when I'm bored enough.
To show off the font exporter and the TTE system itself, there is a
little demo of what it can do here.
I'm still pondering over what it should and should not be able to do, but
most of the things shown in the demo would be in the final version
as well.
Oh, RE: that wordpress bug. A v2.3.1 has been released now with the fix. Interesting factoid: the error (#5088) was classified as “highestomgbbq”.
I've been making a lot of changes to tonclib – mostly
adding, but also some removals. The most important changes are:
-
A more unified interface for the base drawing routines. Whereas I
used to have something like
bm8_foo(...), I now have
bmp8_foo(..., void *dstBase, u32 dstPitch) for
everything. Although the extra parameters make the routines a little
slower, it makes it easier to switch video-modes.
-
A few color routines like blending/fading, convert to rgbscale
(like grayscale, but for any color vector) and a few color adjustments.
-
I'm trying to include (well, annex, really) some of libgba's
functionality. In terms of shared functionality, the libgba names can
be used by including tonc_libgba.h. This is definitely not a
finished item yet.
-
Tonc's Text Engine. I already had some basic routines for
text on different video types, but this is a good deal better. Instead
of having separate
foo_puts() routines, TTE uses function
pointers for placing glyphs on screen. This means there can be a single
interface for all modes, and customizable writers. Already provides are
glyph renderers for 8/16bit bitmaps and 4bit tiles, using a 1bpp bitpacked
font. In principle, the renderers can handle any sized fixed and
variable-width fonts (within reason: 128x128 fonts would be impractical,
for example). There are also hooks for the stdio functions
(printf, yay!) and some simple commands for positioning, color and font
changes. Example of use:
// Set-up 4bpp tile rendering bg 0 using cbb=0 and sbb=31.
// The default options set implicitly here are: verdana 9 font, yellow for
// text color
tte_init_chr4_dflt(0, BG_CBB(0)|BG_SBB(31));
// Init stdio hooks
tte_init_con();
// Print something at position (10,10)
iprintf("\\{P:10,10}'Ello world!, %d", 1337);
Aside from the initializer, using TTE is basically independent of what
you're writing with or on. Of course, all this stuff does have a fair
amount of per-character overhead (about 150 cycles, I believe). It shouldn't be too hard to port TTE to NDS; I am planning to do this at some point.
There are more smaller changes here and there, but those are of lesser consequence.
tonclib 1.3 linky.
Small fix for grit. The function that handles the extensions didn't add the
extension-period as it should if no extension was given in the -o
option. ‘-ofoo’ would result in things like foos
and foosh.
This is a one-line fix, by the way. In /libgrit/pathfun.cpp, function
path_repl_ext(), replace this:
if(pext)
strcpy(pext, ext);
else
strcat(str, ext);
by this
if(pext)
strcpy(pext, ext);
else
{
strcat(str, ".");
strcat(str, ext);
}
This is not really a critical update. As long as there's an extension-period inside
the -o option, or if there was no -o to start with, it should work
fine as is.
The quantizer for true-color to paletted wasn't properly prepared for the BGR order that big-endian systems use. This has been fixed. As this has no effect on little-endian systems (such as the binaries that you can find here), only the source archive has been updated.
Git is now fully at 0.7. Or, rather, grit is at 0.7. As mentioned before, a name-change was in order and this has now taken place.
Other than that, there is little difference. Dovoto pointed to a bug in the tileset directory code which made me finally deal with the way directories were being handled. Unless told otherwise, the output goes into the current working directory. This is how it should be anyway. Non-binary changes are: updated documentation (for grit itself too) and a modified Makefile because it was out of date with the code itself (thanks Richard).
What's not been added are palette reduction and a more general tileset reducer. I have functions that can do these things (inside cldib), but applying them in the grit code base is … icky. There are so many potential problems with options here that I prefer to wait and add them later. Or maybe make separate tools for them.
I've also added the new Wingrit exporter to Usenti, which is now at v1.7.7.
Guess this'll be it then. Like the last Tonc, this is beta, which is my way of saying “lots of nice, new stuff, but might not be completely ready yet”.
So what's new? Well ...
-
The transparency options (-pT, -gT) should be sorted out now. I've tried to make them work intelligently when the options and bitdepths don't really match well.
- It's now also possible to convert multiple bitmaps in one single call of git. Be careful which options you use here, though, as they're still pretty much considered separate runs internally. For instance specifying the output file and not using -fa would overwrite the file. Obvious, yes, but still something to be aware of.
-
Also added are logging functions (option -Wnumber). If you see your files converted incorrectly, try using -W3 and see what comes up.
-
And finally, something pretty cool: the use of an external tileset. With the -fx option, you can use an external bitmap containing an already reduced tileset. This is useful if you want to guarantee the order of the tiles. New tiles will be added and saved to this bitmap as well, so you could run it over multiple bitmaps and build up a shared tileset. It's still a little experimental, but seems to work well enough. For now, stick to 8bpp BMP or PNG (preferably pre-tiled or start with an empty bitmap). I hope to add meta-tiling options later.
Wingit has also been updated a little: transparency options are now included in the GUI, as it the external tileset option. However, the documentation hasn't been updated for these yet. That's one of the todo items.
The git downloads can be found here. Once again, this is still beta. On the outside it looks alright, but internally it's still a bit of a mess now. It's also quite possible that there are still some lose pointers dangling about; if you see it crash, please tell me.
It's been brought to my attention that the name ‘git’ was already taken by that pinko, commie tree-huggering bunch from Linux. So, a name change is in order. Shame; I really liked the name.
Anyway, unless someone can give me a nice and descriptive acronym (sorry, Dave, but ‘dmit’, as much as I like it, fails on the second criterion), the new name be ‘grit’.
And now for something moderately different: I've added the readme's of most projects to the projects page. This should be especially useful for git, as the distribution that comes with devkitPro leaves it out >_>.
Dammit, just missed releasing this before the end of the day. Oh well.
Anyway, I'm releasing tonc 1.3β officially now. Yes, it's still a
beta, but I think I've got rid of all of the loose ends now. Or at
least most of them
The changes with the last beta version are relatively few. The text
remains mostly the same, except for regbg.htm and asm.htm. It's in the
code where you'll find the most changes. I've removed the leading
underscores from the zero-#defines (and there was much rejoicing),
updated some graphics and ‘finished’ the bigmap
demo. Also, tonclib is now fully doxygenated. Manual in CHM inside.
The Doxygen configuration file is included, so if the CHM doesn't work
for you, you can always generate the documentation yourself.
I'm close to another tonc release. It's not quite ready, but here
are a few Work-in-Progress versions.
Many things have changed. Tonclib has gone through a rigorous overhaul,
the demo hierarchy has been altered, with new and better makefiles. Most
demos have been altered (mostly just using text), the
‘basic’ demos are now completely self-contained, and I've
added a couple of new ones as well. Take particular note of the
updated DMA and mode7_ex demos, and the new bigmap demo.
The text has undergone a few changes as well. Much of the set-up
chapter has been moved to the back, and reg-tables have been
prettified. The mode7-2 chapter has been enhanced and (drumroll)
there's now an assembly chapter! A big assembly chapter.
The numbering system now has chapter numbers, and each section,
equation, etc, is now prefixed with it.
You might have noticed that there's now a PDF file as well. I've merged
all the chapters with some perl-fu, and printed to PDF with
cutePDF. The solution is not
optimal yet (some bad page breaks here and there), but the result
looks very nice indeed. If anyone's interested in helping me
get rid of the page-break problem, I have 1.4MB html file if anyone's
interested playing with that. I'll probably release the scripts I used
for various items as well someday.
In other news, git 0.6 didn't quite do the NDS transparency bit
correctly. In fact, it completely did it wrong. I'd release the fix
soon, if it weren't for the fact that it will probably be released
as part of the new devkitPro before that.