1. Sprites
- Posted by DHarte at AOL.COM Jul 11, 1998
- 547 views
How do you put sprites on the screen in SVGA modes without destroying the background (with color 0 being transparent)? The only way that I could figure out was to check the color of each pixel in the image, and write the nonzero pixels to the screen. This works, but is much too slow. Thanks in advance. Abraham Harte
2. Re: Sprites
- Posted by Ralf Nieuwenhuijsen <nieuwen at XS4ALL.NL> Jul 12, 1998
- 509 views
>How do you put sprites on the screen in SVGA modes without destroying the >background (with color 0 being transparent)? The only way that I could figure >out was to check the color of each pixel in the image, and write the nonzero >pixels to the screen. This works, but is much too slow. >Thanks in advance. Split the sprite up in pieces of horizontal lines and store the complete offset of every set of those lines. The use pixel to display every set. If you want to poke () and do the bank-switches yourself, you're better off replacing the {x,y} position wiht a fixed calculated position, an offset to add to the begin offset in memory. This is the theory behind the compiled sprites in my GFX. Here I remade a simplified version of those routines: function make_cs (sequence pic, index trans_color) sequence ret index pos, prev ret = {} for index = 1 to length(pic) do prev = 0 pos = find (trans_color, pic[index]) while pos do ret = append(ret, {{prev, index}, pic[index][1..pos-1] if not length(ret[length(ret)][2]) then ret = ret[1..length(ret)-1] end if prev = pos pos = find (trans_color, pic[index][pos+1..length(pic[index])] end while if length(pic[index]) then ret = append (ret, {{prev, index},pic[index]}) end if return ret end function procedure display_cs (sequence cs, sequence pos) sequence item for index = 1 to length(cs) do item = cs[index] pixel (cs[1]+pos, cs[2]) end for end procedure See, the best optimization trick in games and most other stuff is to see when we calculate something or make a decision.. always ask youself : Can this calculation, decision or part of this decision be made fewer times ? Like calculating an offset, you only need to do this when a position changes, _not_ everytime you want to draw a sprite, etc. Ralf Nieuwenhuijsen nieuwen at xs4all.nl
3. Re: Sprites
- Posted by Lewis Townsend <keroltarr at HOTMAIL.COM> Jul 13, 1998
- 533 views
Ralf said: >Split the sprite up in pieces of horizontal lines and store the complete >offset of every set of those lines. The use pixel to display every set. If >you want to poke () and do the bank-switches yourself, you're better off >replacing the {x,y} position wiht a fixed calculated position, an offset to >add to the begin offset in memory. > >This is the theory behind the compiled sprites in my GFX. >Here I remade a simplified version of those routines: <SNIPPED STUFF> >Ralf Nieuwenhuijsen >nieuwen at xs4all.nl That's not at all the way I do it and my way seems pretty fast: Somebody (I can't remember whom) posted to the recent users contribution page a certain "bitmap.e" which does stuff like extract a bitmap from a larger bitmap given UL and LR points and insert a smaller bitmap into a larger one. Once you cut a peice (bm) out of the background the same size as your sprite do something like this temp = (sprite = 0) temp = bm * temp temp = temp + sprite temp now contains the sprite with the background showing through where the sprite is zero. you can now INSERT temp into the background where you extracted bm from. Or at least show it that way on the screen. I'm sure Ralf's way is good but this seems much simpler to me Will whoever made "bitmap.e" please explain this better and take credit for this cool set of routines. Sincerely, Lewis Townsend |\ ____ _ _ _ _ __ | \ | __/ || / | // || / __ \ | \ ||_ || //|| // || ||__\| | \ | _| || // || // || \___ \ | |\ \ ||__ ||// ||// || |\__|| | | \ \|___\ |_/ |_/ || \____/ | | \ \ _____ _______ | | \ \ | __ \ | _ _ | | | \ \ ||__|| |/ | | \| | | \ \ | __ / | | | |______\ \ || \\ | | |___________\ || || |_| Keroltarr at hotmail.com ______________________________________________________ Get Your Private, Free Email at http://www.hotmail.com
4. Re: Sprites
- Posted by Ralf Nieuwenhuijsen <nieuwen at XS4ALL.NL> Jul 14, 1998
- 533 views
>That's not at all the way I do it and my way seems pretty fast: Well, if you want it simple and fast (also for non-pentiums I mean, multi-sequence multiplications as you do.. are slow) you might want to consider, the technique used by Jiri.. Its still in the archive. Which method is faster depends on the type of sprite. An image with a lot of see-though holes in it, will be faster with his method. An image like a bal or with a few holes in it, will be faster with my method. And you were talking about easy to implent.. I included the routines in the mail.. how easy can it get ? (Yes, I too, can be objective at times.. even with Jiri's code However, Ememcopy, a nice machine code routine that uses the command list technique can also do the SVGA nowadays. Its updated, and it does the banking for ya.. I assume) However be warned mixing it together with euphoria pixel () routines, cuz they seem to expect the bank to be reset to zero. If you just want to get a higher resolution that the lacking 320*200, try the ModeX routines of Pete. They are also updated now. And you can tweak the resolution to 500*400 if i'm not mistaking. BTW Unreal runs almost as fast in the weird resolution of 538 * 382 (or something near this) I havent figured out why yet, but any resolution higher cuz notibly slower. Maybe some1 knows how to tweak into that video mode ? Maybe it got something todo with MMX though. (the video mode was 16-bpp btw) Any one know about this ? Ralf
5. Sprites
- Posted by Eduardo Uemura Okada <cool at MII.NUTECNET.COM.BR> Sep 21, 1997
- 528 views
- Last edited Sep 22, 1997
Hi to all, I need some help to solve problems with my sprites library. In my demo, the sprite moves in the screen, but he appears to '"blink", may it be result of something about refresh rate ? The file is attached in UUEncode format. If someone could help me, I'll like. Thank you Eduardo Uemura Okada e-mail: cool at mii.nutecnet.com.br