Thanks MenTaLguY! I've been making some tools to help me do level design in ruby for the uzebox (http://belogic.com/uzebox/) and this looks like just the thing!
On Sat, Jul 25, 2009 at 12:58 AM, Devyn Cairns<[email protected]> wrote: > WOW! That's pretty cool. It should probably be easier to put into > Shoes than SDL, that's my experience. But.... WOW! > > On Fri, Jul 24, 2009 at 4:44 PM, MenTaLguY<[email protected]> wrote: >> I sent this to ruby-talk, but it might also be of latent interest to >> Shoes adventurers. Essentially, Retrograph is the visual equivalent of >> the bloopsaphone (minus a nice API -- it's all authentic 80s graph paper >> and hex numbers at the moment). >> >> retrograph isn't especially useful with Shoes yet (the only currently >> supported display is via Ruby/SDL), but I'm hopeful that we can work out >> some allowances from Shoes so it can render to a Shoes window too. I >> also have a somewhat nicer API in the works. >> >> == What is Retrograph? == >> >> Retrograph is a Ruby library which emulates the video >> display unit from a hypothetical late-80s 8-bit game >> console. It is similar in capability to the Sega Master >> System's VDP, with some additional features and direct >> support for text modes. >> >> Retrograph doesn't do its own screen output but rather >> works with other libraries. Currently, it supports >> Ruby/SDL, but other output targets are planned for the >> future. >> >> == Where can I get it? == >> >> Retrograph is available via RubyGems, or via Rubyforge >> downloads: >> >> http://rubyforge.org/frs/?group_id=8410 >> >> Cursory documentation is available on the >> corresponding github wiki: >> >> http://wiki.github.com/mental/retrograph >> >> == Feature Overview == >> >> * 256x244 pixel display >> * 16k VRAM >> * 64 colors total >> * max 31 simultaneous colors (16 background, 15 sprite) >> * 40x25 and 32x28 text modes >> * 32x32 tile background, 8x8 pixel tiles >> * 64 8x8 sprites, max 8 per scanline >> >> == Usage == >> >> Retrograph's simulated Video Display Unit (or VDU) is >> represented by an instance of the Retrograph::VDU class. >> You can interact with the VDU by writing byte strings >> into its memory using Retrograph::VDU#write, which takes >> a start address (in the VDU's 16-bit address space) and >> a string to write. The method Retrograph::VDU#write_byte >> is also provided for writing individual bytes. >> >> (See the wiki for a map of memory locations.) >> >> To render a frame of video with SDL, use >> Retrograph::VDU#render_frame_sdl, which returns an >> SDL::Surface containing the VDU output. The returned >> surface remains valid until the next call to >> Retrograph::VDU#render_frame_sdl on the same VDU instance. >> >> Scanline-based effects are possible if you provide a block >> to Retrograph::VDU#render_frame_sdl. Ordinarily, rendering >> will not begin until the block completes, but within the >> block you can call Retrograph::VDU#wait_scanlines to render >> a given number of scanlines before continuing. This allows >> you to make changes to the VDU state part-way through >> rendering a frame. >> >> For example, if we wanted palette entry 0 to be blue within >> the top half of the display and red within the bottom half >> of the display, we could write: >> >> require 'retrograph/sdl' >> >> vdu = Retrograph::VDU.new >> >> vdu.write_byte(0x7f00, 0x03) >> output = vdu.render_frame_sdl do >> vdu.wait_scanlines(Retrograph::DISPLAY_HEIGHT/2) >> vdu.write_byte(0x7f00, 0x30) >> end >> >> (For display, is still necessary at this point to copy the >> output surface to the screen.) >> >> Love, >> -mental >> >> >> > > > > -- > ~devyn >
