Sprite & Screen techniques & EU Games
- Posted by Ralf Nieuwenhuijsen <nieuwen at XS4ALL.NL> Dec 14, 1997
- 799 views
Finally the list-serv is awake again from its winter sleep. Good Morning all. 8-) A few things, 1) I think Packard's new game looks great, another proof that the game art itself makes more difference than the graphics engine itself. And I can't wait to see it. 2) Some of you would like to make their own game, and get stuck on all kinds of problems. They could use of the many engines available, but which ?, well here's my list: (With the new ModeX as the winner) Mode 19-Library by Hollow Horse SoftWare: Well, is your game only mode19, and you hate ModeX this is your choice for now. It's fast, very fast. But it doesn't offer any sprite managing, controlling, and you need to understand the basics of virtual screens & sprites. Maybe some1 can write a nice tutorial on this, maybe you could buy Michael Packard's Oidzone + game reference book. It should be good enough to help you through the way you use their graphics engine. But I really dunno, I haven't seen the book. I said if you hate ModeX, read below why... My NextGFX, don't mess with this, its just for those who also want to write a graphics engine, to play around with the stuff I already have. Not to be used yet. (really only for those interested to see my code done) The virtual screen library of Jiri, well it contains the basic of virtual screens, and has a very nifty feature, that is most polygram and basic drawing routines are also available for the virtual screen, this should be handy to some out their. His routines are very very fast for a high-level language programmed drawing routines. Only ASM code programmed with the same algorithm will beat its speed. (like the built-in routines prolly, but they only work on the real screen) It does not do any (real) sprite en screen managing. IE compared to other engines, but I don't think this was his goal anyway. Not for sprites and general game programming, but you do need to use this engine if you want to use the basic graphics routines on the virtual screens. Mode19 specific. My old GFX routines (Irv's FTP, not the EU homepage), well it isn't totally tested and doesn't use EMemCopy, and it doesn't support ModeX. But it's speed should not be underestimated, although it is complete optimized for a P60, on slower machines the routines will be slower than other engines available. On the faster systems it still has its place, as it comes to speed. Especially because most engines don't use EMemCopy to its full extend (command lists). This prolly changes with EU2 because it supports poke4 which will make a *big* difference (I think) with the graphics engines that use EMemCopy. (when those engines are update to use Poke4 off course) One real benefit of this engine is its flexibility and that it does sprite managing, only the collision detection isn't available. It will work with any video mode, (except ModeX), and its has a very high-end interface. It handles all the sprite stuff, wait retrace, all the scrolling, and screen cutting for difference type of virtual screens of difference sizes. (I'm not sure, But I believe the mode19 lib by Hollow Horse software also supports scrolling, but I'm not sure). It manages your sprites movement (in degrees or by setting an x-step and y-step) and sprites moving (in a certain direction with a certain speed), animation (different states of a sprite, with their own animation method and frames), etc. It uses compressed sprites which are relatively fast on fast machines, but relatively slow on slow machines compared to other engines. (So if you game won't run on slow machines anyway, this could be the right choice) Their is only 1 downside, I provided no documentation, and I am not intended to do this. Well if you ask me, I could tell you basic part you need to know. The ModeX lib by Pete Eberlein (the new one) is just one-word: the BEST, it uses the concept of command lists, which give you an overhead of about nothing, it has everything in ASM, it has a nice interface(after you get the hang of it), and it manages palettes, finally, something all graphics engines lack. It supports custom sizes virtual screens (only my old, and very slow compared to this GFX also supports this). You can use the standard libraries provided by Euphoria for many graphic things, because pixel and getpixel are redefined. And its command interface with methods is GREAT. Because it's ModeX you have the fastest scrolling ever also! Producing a game with this engine is the best choice for you all, from beginner to experienced programmer. His routines are general enough to lack the support of sprite managing. Simple because you could also use his routines for a windows GUI, or a font system. (Or a text editor, eh.. David Cuny). To those of you who don't know what ModeX is, well it's a hacked mode 19 actually. So you can have 320*200 resolution, but also any resolution upto 400*600. Even 320*240 which has pixels of a perfect square, something very interesting for rotation actually. The is very nice for those who think SVGA is too slow, and 320*200 is too ugly. 400 by 300 is a very good resolution for games. Every pixel is a square just like with 320*240, but it is a better compromise between speed and quality. Maybe his next project is an high-end layer for game programming. (I have some great ideas, ask me!) Just one suggestion to make this more complete: For ModeX no (fast) line and polygon routines are available, not for the planed virtual screens as for the real screen. Maybe you can with the help of Jiri add this feature to you library, Pete. So it's really a generic ModeX library. It simply destroys all engines here. (Thanx 8-) 3) Their still isn't any MODULE player available for Euphoria, nor Midi (yak). I did found a completely ASM module player. I suppose this could easily be Euphorianised using Pete's ASM.E. It should be very fast player (100% ASM), although it doesn't use the algorithm of ?? , that is suppose to be very fast. You can find it when searching for SWMP, because I kind of deleted the ASM code of my HD. (It has predone libs for C and Pascal) I attached the asm.doc file describing how you could use it in any language using inline ASM. (or Pete's ASM.E) 4) What could make a world of difference is .LIB support, to those who dare to try to make this, I've attached a file describing the structure of a .LIB file. It seems it's just machine code, where we have to poke a few values in as arguments and maybe set a few registers or something. Please machine level people, have a look at this, it should be that hard. 5) When can we expect a beta, Robert ? Their are so many bugs in the Alpha release, maybe an Euphoria 2 Alpha 2 would be nice, so we at least could work with pointers. And you can concentrate on other not so important bugs. (Important is the constant bug reported and the routine pointers, I'm already addicted to them) 6) I'm sorry this one is so long 8-( 7) I hope every1 will have a nice Christmas holiday. Ralf. begin 666 Asm.doc M;&4@4&QA>65R(%8Q+C0 at (" @(" H8RD at ,3DY-"PQ.3DU(&)Y($QO<F0@17AC MQ,3$Q,3$Q,3$Q,3$Q,3$Q,39#0H-"@T*#0H@(" @(" @(%5324Y'(%1(12!3 M5TU0($12259%4E,@5TE42"!455)"3R!!4U-%34),15(-"B @(" @(" @Q,3$ MQ,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q T*(" @ M(" @(" H;W(@86YY(&]T:&5R(&QA;F=U86=E(&%L;&]W:6YG(&EN;&EN92!A M<VT@:6YS=')U8W1I;VYS*0T*#0H-"B @(" @(" @($9I<G-T('EO=2!H879E M(" @(" @("!&:6QE<R!Y;W4@;F5E9"!I;B!A;GD@8V%S92!A<F4Z#0H-"B @ M(" @(" @("!30BY$4E8 at (" @(" @.B!3;W5N9$)L87-T97(@9')I=F5R(" @ M(" @6R R,BXR(&M(>B!M;VYO(" @("!=#0H@(" @(" @(" @4T)0+D125B @ M(" @(#H@4V]U;F1";&%S=&5R(%!R;R!D<FEV97(@(%L@,C$N-R!K2'H@<W1E M<F5O(" @70T*(" @(" @(" @($=54RY$4E8@(" @(" Z($=R879I<R!5;'1R M85-O=6YD(&1R:79E<B!;(#0T+C$@:TAZ("MS=&5R96\K(%T-"B @(" @(" @ M("!-3T103$%9+DQ)0B @.B!405--(&QI8G)A<GD@=&AA="!H;VQD<R!A;&P@ M9')I=F5R<PT*(" @(" @(" @($U/1%!,05DN24Y#(" Z(&EN8VQU9&4@9FEL M92!F;W(@36]D4&QA>2Y,:6(-"@T*(" @(" @(" @5&AE(')E<W0@87)E(&5X M86UP;&4@9FEL97,L('=H:6-H(&-A;B!B92!I;7!O<G1A;G0@=&\-"B @(" @ M(" @=6YD97)S=&%N9"!T:&EN9W,@8F5T=&5R+@T*#0H-"B @(" @(" @($EN M9"!T:&5N(&QO860@;VYE#0H@(" @(" @(&]F('1H92!D<FEV97)S(&EN=&\@ M4D%-("AM=7-T(&)E(&$@<&%R86=R87!H(&%D9')E<W,I+B!3;R!Y;W4-"B @ M(" @(" @<&5R:&%P<R!W:6QL(&)E(&%S:VEN9R!A="!P<F]G<F%M('-T87)T M('=H:6-H(&1R:79E<B!T;R!L;V%D+@T*(" @(" @("!!9G1E<B!H879I;F<@ M=F5R#0H@(" @(" @(&)Y(&1O:6YG(&9A<B!C86QL<R!T;R!I=',@9FER<W0@ M861D<F5S<R H9')I=F5R7W-E9VUE;G0Z,# P,"DN#0H-"B @(" @(" @($YO M;G0@,C%H+ T*(" @(" @("!S=6)F=6YC=&EO;B T.&@N(%1H97)E9F]R92!Y M;W4@:&%V92!T;R!A9&IU<W0@>6]U<B!O=VX@;65M;W)Y#0H@(" @(" @(&-O M;&]C(&UE;2!F;W(@=&AE#0H@(" @(" @('-O=6YD9FEL97,A#0H-"B @(" @ M(" @($-O;G9E;G1I;VX@:7,@=&AA="!T:&4@<F5G:7-T97(@0E@@8V]N=&%I M;G,@=&AE('-U8F9U;F-T:6]N#0H@(" @(" @(&YU;6)E<BP@861D:71I;VYA M;"!P87)A;65T97)S(&%R92!P;&%C960@:6X@05@L0U@L1%@@971C+@T*(" @ M(" @("!4:&4@9F]L;&]W:6YG('-U8F9U;F-T:6]N<R!A<F4@879A:6QA8FQE M(" @(" @0E@],"P@0U@L1%@]8V]N9FEG=7)A=&EO;@T*LR @(" @(" @(" @ M;F0@1%@N#0JS(" @(" @(" @("!#;VYF:6=U<F%T:6]N(&9O<B M4V]U;F1" M;&%S=&5R.B @(" @($-,/4E242!.54U"15(L($-(/3$-"K,@(" @(" @(" @ M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @1%@]0D%3 M12!!1$1215-3#0JS(" @(" @(" @(" @(" @(" @(" @(" @(" @(" M4V]U M#0JS(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @ M(" @(" @($18/4)!4T4@041$4D534PT*LR @(" @(" @(" @(" @(" @(" @ M(" @(" @(" @+4=R879I<R!5;'1R85-O=6YD.B!#3#U'1C$@25)1+"!#2#U- M241)($E240T*LR @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @ M(" @(" @(" @(" @("!$6#U"05-%($%$1%)%4U,-"K,@(" @(" @("T^(%)E M='5R;G,@05@]9')I=F5R('9E<G-I;VX@:68@<W5C8V5S<V9U;"P@96QS92 P M+ at T*LR @(" @("!.;W1E.B!)9B!T:&4@9')I=F5R('=A<R!I;FET:6%L:7IE M9"!C;W)R96-T;'DL(&ET($A!4R!43R!"12!#3$]3140-"K,@(" @(" @(" @ M(" @870@<')O9W)A;2!E;F0@=7-I;F<@<W5B9G5N8W1I;VX@(S$N#0K #0K: MQ,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$#0JS(" @(" @($)8 M/3$-"K,@(" @(" @(" @($-L;W-E(&1R:79E<BP@<W1O<"!P;&%Y:6YG+"!P M=70@<V]U;F1C87)D(&EN(&$@<V%F92!S=&%T92P-"K,@(" @(" @(" @(')E M<W1O<F4@86QL(&EN=&5R<G5P="!V96-T;W)S(&5T8RX-"L -"MK$Q$Q/040@ M34]$54Q%Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$ MQ,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,0-"K,@(" @(" @0E@],BP@1%,Z M1%@]9FEL96YA;64-"K,@(" @(" @(" @(%-T;W @86YY('-O=6YD(&]U='!U M"K,@(" @(" @(" @(&AA<R!T;R!E;F0@=VET:"!A('IE<F\@8GET92X@1&]E M<R!N;W0@<W1A<G0@<&QA>6EN9R!T:&4@<V]N9RX-"K,@(" @(" @+3X@4F5T M9G5L+"!E;'-E('IE<F\N#0K #0H,#0K:Q,135$%25"!-3T153$7$Q,3$Q,3$ MQ,3$Q,3$Q,3$Q,3$#0JS(" @(" @($)8/3,-"K,@(" @(" @(" @(%-T87)T M('!L87EI;F<@<')E=FEO=7-L>2!L;V%D960@<V]N9RX-"L -"MK$Q%-43U @ M34]$54Q%Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$ MQ,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,0-"K,@(" @(" @0E@]- T*LR @ M(" @(" @(" @4W1O<"!A;GD@<V]U;F0@;W5T<'5T(&%T(&]N8V4N#0K #0K: MQ,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$#0JS(" @(" @($)8 M/34L($%,/79O;'5M90T*LR @(" @(" @(" @0VAA;F=E(&UA:6YV;VQU;64N M(%9A;&ED('9A;'5E<R!A<F4@8F5T=V5E;B P("AL;W=E<W0I(&%N9 T*LR @ M(" @(" @(" @-C0@*&QO=61E<W0I+@T*P T*VL3$4U1!5%53Q,3$Q,3$Q,3$ MQ,3$Q,3$Q,3$Q,3$Q,3$Q T*LR @(" @("!"6#TV#0JS(" @(" @(" @("!' M970@9')I=F5R)W,@<&QA>6EN9R!S=&%T=7,-"K,@(" @(" @("T^(%)E='5R M"L -"MK$Q$=%5"!03U-)5$E/3L3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$ MQ,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,0-"K,@(" @ M(" @0E@]-RP@04P], T*LR @(" @(" @(" @1V5T('!L87EI;F<@<&]S:71I M;VX@*'1O('-Y;F-R;VYI>F4@9W)A<&AI8R!E9F9E8W1S*2X-"K,@(" @(" @ M("T^(%)E='5R;G,@04@]4&%T=&5R;DYU;6)E<BP@04P]3&EN94YU;6)E<B H M05@],"!I9B!N;W0@<&QA>6EN9RDN#0K #0K:Q,13150@4$]3251)3T[$Q,3$ MQ,3$Q,3$Q,3$Q,3$Q,3$#0JS(" @(" @($)8/3<L($%,/#XP#0JS(" @(" @ M(" @("!3970@<&QA>6EN9R!P;W-I=&EO;BX@5F%L=64@:6X@04P@:7,@861D M960@=&\@8W5R<F5N="!P;&%Y97)S#0JS(" @(" @(" @("!P871T97)N('!O M<VET:6]N+B!9;W4@8V%N;F]T('-T97 @8F5L;W<@9FER<W0@86YD('!A<W0@ M;&%S= T*LR @(" @(" @(" @<&%T=&5R;BX@4F5A<V]N86)L92!V86QU97,@ M87)E(#$@;W(@+3$@*#!&1F@I+@T*P T*VL3$4$5!2U/$Q,3$Q,3$Q,3$Q,3$ MQ,3$Q,3$Q,3$Q,3$Q T*LR @(" @("!"6#TX+"!%4SI$23UP96%K(&)U9F9E M<@T*LR @(" @(" @(" @0V]P>2!T:&4@=F]L=6UE('-E='1I;F=S(&]F(&5A M8V@@8VAA;FYE;"!T;R!P96%K(&)U9F9E<BP@=VAI8V@-"K,@(" @(" @(" @ M(&AA<R!T;R!H;VQD(&$@;6%X:6UU;2!O9B X(&)Y=&5S+B!4:&4@;G5M8F5R M(&]F(&-H86YN96QS(&ES#0JS(" @(" @(" @("!K;F]W;B!A9G1E<B!S=6-C M97-S9G5L(&QO860@;V8@;6]D=6QE9FEL92 H<W5B9G5N8W1I;VX@(S(I+@T* MQ,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q T*#0H-"B @(" @ M(" @($%L;"!R96=I<W1E<G,@=VEL;"!C;VYT86EN('1H92!S86UE('9A;'5E M(&%F=&5R(&$@<W5B9G5N8W1I;VX-"B @(" @(" @8V%L;"P@97AC97!T($%8 M"B @(" @(" @>F5R;R!I9B!T:&4@8V%L;"!W87,@<W5C8V5S<V9U;"X-"@T* M(" @(" @(" @57-I;F<@=&AI<R!C;VYV96YT:6]N<R!Y;W4@8V%N(&QI;FL@ M=&AE(&1R:79E<G,@:6X@86YY#0H@(" @(" @('!R;V=R86UM:6YG(&QA;F=U M86=E+"!T:&%T('-U<'!O<G1S(&EN;&EN92!A<W-E;6)L>0T*(" @(" @("!I M;G-T<G5C=&EO;G,N#0H-"B @(" @(" @(%1!4TT@=7-E<G,@8V%N(&AA=F4@ M=&AI;F=S(&$@;&ET=&QE(&)I="!E87-I97(L(&EF('5S:6YG('1H90T*(" @ M(" @("!L:6)R87)Y($U/1%!,05DN3$E"+B!9;W4@:G5S="!H879E('1O(&%D M9"!T:&4@<W1A=&5M96YT#0H-"B @(" @(" @(" @($E.0TQ51$4@34]$4$Q! M62Y)3D,-"@T*(" @(" @(" @:6YT;R!Y;W5R(&%S;2!S;W5R8V4@86YD('1H M92!D<FEV97)S('!L=7,@82!F=6QL>2!A=71O;6%T:6,-"B @(" @(" @:&%R M;R!N97<@<')O8W,-"B @(" @(" @8V%L;&5D#0H-"B @(" @(" @(" @($UO M9%]$<FEV97(@(" @(" Z(&=E;F5R86P@9F%R(&-A;&P@861D<F5S<R!T;R!D M<FEV97)S#0H@(" @(" @(" @("!-;V1?16YD7U-E9R @(" @.B!F87(@<')O M8R!T:&%T(')E='5R;G,@;&%S="!S96=M96YT(&EN(&%X#0H-"B @(" @(" @ M=2!D;R!N;W0@:&%V92!T;PT*(" @(" @("!L;V%D(&1R:79E<G,@:6YT;R!M M(" @(" @(&]N;'D@=&AE(&9I<G-T(&9U;F-T:6]N(&ES(&%L=&5R960@<VQI M9VAT;'D@8V]N=&%I;FEN9R!N;W<@=&AE#0H@(" @(" @(&]P=&EO;B!T;R!C MQ,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q T*LR @(" @("!"6#TP+"!!6#US;W5N M9&1E=FEC92 H0U@L1%@]8V]N9FEG=7)A=&EO;BD-"K,@(" @(" @(" @($EN M6#TP(&$@9&5T96-T:6]N#0JS(" @(" @(" @("!W:6QL(&1E8VED92!W:&EC M="X-"K,@(" @(" @(" @(%1H:7,@<VAO=6QD('=O<FL@:6X@;6]S="!C87-E M<RX@0G5T('EO=2!H879E('1H92!O<'!O<G1U;FET>2!T;PT*LR @(" @(" @ M(" @8GEP87-S('1H92!D971E8W1I;VXL(&%N9"!M86YU86QL>2!S96QE8W0@ M86YD('-E='5P('1H92!D<FEV97(N#0JS(" @(" @(" @("!);B!T:&ES(&-A M<V4-"K,@(" @(" @(" @(" @($%8/3$@<W1A;F1S(&9O<B!3;W5N9$)L87-T M97(@9')I=F5R#0JS(" @(" @(" @(" @("!!6#TR(" @(B @(" @(B @4V]U M;F1";&%S=&5R(%!R;R!D<FEV97(-"K,@(" @(" @(" @(" @($%8/3,@(" B M(" @(" B("!'<F%V:7,@56QT<F%3;W5N9"!D<FEV97(-"K,@(" @(" @(" @ M=6ER960@8GD@=&AE(&-O;6UO;@T*LR @(" @(" @(" @9G5N8W1I;VX@(S N M#0JS(" @(" @(" M/B!2971U<FYS($%8/61R:79E<B!V97)S:6]N(&EF('-U M8V-E<W-F=6QL+"!E;'-E('IE<F\N#0K #0H@(" @(" @("!4:&4@<V5C;VYD M05@@=&AE#0H@(" @(" @(&QA<W0@<V5G;65N="!A9&1R97-S(&]F('1H92!P M;&%Y97(@=&\@=VAI8V@@>6]U(&-A;B!A9&IU<W0@=&AE#0H@(" @(" @(&UA M:71I86QI<V%T:6]N#0H@(" @(" @(&-O<&EE<R!T:&4@<V5L96-T960@9')I M=F5R('1O('1H92!L;W=E<W0@<&]S<VEB;&4@;65M;W)Y#0H@(" @(" @(&QO M#0JS(" @(" @(" M/B!2971U<FYS($%8/61R:79E<B!E;F0@<V5G;65N=" H M=6YU<V5D*0T*LR @(" @($YO=&4Z($]N;'D@8V%L;"!T:&ES('!R;V,@869T M97(@:6YI=&EA;&ES871I;VXA#0K #0H@(" @(" @("!4:&5R92!I<R!A;'-O M=&AE#0H@(" @(" @('5S92!O9B!T:&ES(&QI8G)A<GDN($ET(&ES(&-O9&5D M(&EN('9E<GDL('9E<GD@96%S>2!A<W-E;6)L97(N#0H@(" @(" @($]F(&-O M('=O=6QD;B=T#0H@(" @(" @(&UA:V4@=&AE('-O=7)C92!M;W)E(')E861A M8FQE+@T*#0H-"B @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @ J(" @(" @(" @(" @("!,;W)D($5X8V5S<R!I;B!*=6YE("<Y-0T*&@T* ` end