Request features for a retro 2d lib.

BlitzMax Forums/BlitzMax Programming/Request features for a retro 2d lib.

AntonyWells(Posted 2006) [#1]
I'm writing a retro 2d library akin to Blitz2ds but with added features like 8bit mode, pallets and to the bone pixel access, just wondering what features would you find cool in such a package? Or is this a dead market with the advent of BlitzMax's 3d/2d Library?

It's being wrote in C++ and max so it doesn't have to be something thats only possible in bmax.


Bremer(Posted 2006) [#2]
I'm thinking it might be a waste of your time. Most people want hardware accellerated graphics, even for 2D looking stuff. And since its probably going to be difficult to purchase a new pc these days which doesn't support at least some form of 3D hardware accelleration, it won't be long until most people playing games will be able to also use that.


AntonyWells(Posted 2006) [#3]
Dunno really because I just did a test.

The following is my lib's source



Local Dis:TDisplay =TDisplay.Create(320,240,8,True)
Local Pal:TPalette = TPalette.Create()
For Local j#=0 Until 255
	Pal.SetColor(j,(j/255)*63,(j/255)*63,(j/255)*63)
Next
TPalette.SetActive( Pal )

Local lx#,ly#
lx=160
ly = 120
Local tc= 20,fps
Local frames,lfram
Repeat
Screen.Lock()
lx=lx+4
If lx>320
lx=0
ly:+4
EndIf

	For Local x=0 Until 320
	For Local y=0 Until 240
		Local xd#,yd#
		xd = x-lx
		yd = y-ly
		Local mag# = Sqr(xd*Xd+Yd*Yd)
		mag = 255-mag
		If mag<0 mag=0
		If mag>255 mag=255
		Screen.DrawPalPixel( x,y,mag )		
	Next
	Next
	
Screen.Unlock()
frames:+1
If MilliSecs()>lfram+1000
	lfram=MilliSecs()
	tc:-1
'	If tc<0
	fps=frames
		Print "Fps:"+fps
		tc=50
'	EndIf
	
	frames=0
EndIf

	

Forever

Repeat
Forever
End





And the following is an identical program using max2d instead of my lib.

Graphics 320,240,0
Local lx,ly
Local frames,lf,fps
Repeat
Cls
	For Local x=0 Until 320
	For Local y=0 Until 240
		Local xd,yd
		xd = x-lx
		yd = y-yd
		Local mag# = Sqr(xd*Xd+Yd*Yd)
		mag = 255-mag
		If mag<0 mag=0
		If mag>255 mag=255
		SetColor mag,mag,mag
		DrawRect x,y,1,1
	Next
	Next
	If MilliSecs()>lf
		lf = MilliSecs()+1000
		fps=frames
		frames=0
		Print "Fps:"+fps
	EndIf
	frames:+1
	
Flip
Forever


My program runs at 34 fps. Max2D runs at 4fps. That's with dx. Let me just try with gl..11fps.

So it's nearly10x faster than dx, and 3x faster than GL.

And that's using the slowest method of the library to do 2d. I'm adding even faster methods.

So with that in mind, is it really a waste of time? People love to code things like raycasters, real time raytracers and the like, none of which are possible in a reasonable time with 3d 2d graphics. IMO of course.


degac(Posted 2006) [#4]
bad example: in your programi I see a 'lock' function, while in the bmax prog the graphic is rendered directly on the screen via drawrect.
I think you are 'lock'ing the texture-screen (or something like it) to draw on it for faster drawing...so you should apply the same logic with bmax...
Of course I can be wrong...
byez


Dreamora(Posted 2006) [#5]
no you are right.
A screensize TPixmap with writepixel would be worlds faster then 320x240*2 = 153600 Polygons (would call it an idiotic idea to fake pixel by using polygons?!)


AntonyWells(Posted 2006) [#6]
A screenSize Tpixmap would be slower than a mother humper, you'd need to upload to gl the entire buffer each frame.
Feel free to prove me wrong.


bad example: in your programi I see a 'lock' function, while in the bmax prog the graphic is rendered directly on the screen via drawrect.
I think you are 'lock'ing the texture-screen (or something like it) to draw on it for faster drawing...so you should apply the same logic with bmax...
Of course I can be wrong...
byez



Actually it's a perfect example when the whole point is to showcase it's advantages over regular max2d.

There is no parallel functionality in Max that can emulate what this lib can do, the best approximation is setcolor/drawrect.

I swear to christ people just like to argue.


tonyg(Posted 2006) [#7]
This is a bit quicker...
Graphics 320,240
Local lx,ly
Local frames,lf,fps
mypixmap:TPixmap=CreatePixmap(320,240,PF_RGBA8888)
Repeat
Cls
	For Local x=0 Until 320
	For Local y=0 Until 240
		Local xd,yd
		xd = x-lx
		yd = y-yd
		Local mag = Sqr(xd*Xd+Yd*Yd)
		mag = 255-mag
		If mag<0 mag=0
		If mag>255 mag=255
'		SetColor mag,mag,mag
        argb=$ff Shl 24 | mag Shl 16 | mag Shl 8 | mag Shl 0
		WritePixel mypixmap,x,y,argb
	Next
	Next
'       drawpixmap mypixmap,0,0
	DrawImage LoadImage(mypixmap),0,0
	If MilliSecs()>lf
		lf = MilliSecs()+1000
		fps=frames
		frames=0
		Print "Fps:"+fps
	EndIf
	frames:+1
	
Flip
Forever

Drawpixmap is slightly quicker than the drawimage version.


AntonyWells(Posted 2006) [#8]
Only 6 fps faster than drawrect for me on average.

Uploading data is big chunks is always going to be slow. The only way you can circumvent this is to devide your fake screen buffer up into smaller chunks. But even that goes out of the window when you edit the whole thing per frame as in this example. It'll still be the same amount of data going through the pipe.

In Blitz2Dish(so going to get sued for that name). you actually can write directly to memory bitmaps as well at blistering speeds. Like pixmaps but without the overhead of texture creation etc as it just blits directly onto the screen buffer.


Dreamora(Posted 2006) [#9]
Get it up to 20 fps with TPixmap. Can't say how fast your lib would be on my system (1,5 Ghz P-M)

But in the end: 3D hardware does normally not need screen sized images or bufferlocks as they normally are mostly static and change on small parts ... Clonk for example shows how this can be done using pixel modification AND GPU power ... not CPU burnover.

But hey ... we could use a pixelshader if you want per pixel modification AND hardware speed ;-) Would that be more what you want? ;-) (then we have several hundred FPS + 1024x768 pictures ... ;-) )


Such a library btw would be something I would be interested.
An extended library to Max2D with imagebuffers (as Indiepaths render 2 texture) + pixelshader for high speed effects and pixel modification.

I'm not interested in supporting 200mhz systems with vodoo anyway ... most today have GF4 MX or FX5200 or an intel extreme 2+ ... thats enough to run BM ... the small 5% part with no 3D chip at all ... hmm sorry but no minimalistic 3d card -> no game playing ...


PS: As a little sidenode: There is the free GDI module ... so the question would be why one would by a library if there is a free GDI graphics driver that might achieve the same thing ... (I just assume that you sell it ... you haven't shown much interest in free additions for the community so far ...)


AntonyWells(Posted 2006) [#10]
Yes you could in theory use pixel shaders for per pixel 2d effects. I've used glsl many times for just such a thing, but is it realistically something most people here have the knowledge to do? I'd say a big fat no going on the lack of cool looking demos.

But that said, pixel shaders can't replicate routines that require access to main memory. Only modern vertex shader3.0 can read textures, let alone main memory.
There's fundemental difference in approach. Shaders are in out by design. A streaming protocol almost. Where as cpu based 2d is entirely up to the coder to design. It can read main memory, it can access arrays. and most importantly you can write to main memory for feedback.

It's not like the ps3 where you can send vram to and from the cpu easy as you like with shaders. If it were then well, i'd be happy and there'd be no need to blitz2dish.


tonyg(Posted 2006) [#11]
You asked how quick pixmap would be so I answered.
You could, if you wanted, go to the DX/GL level and render to texture as per IndiePath's modules.
However, if you're saying you have your specialised, customised, C++/Bmax hybrid retro 2D code running quicker than a system written for 2D in 3D then... well done.
Would I be interested in it? If there was some commitment of support, demos and docs then I'd look at it again.
BTW Is this new project taking time from the game you're writing with 'the other guys' or holding up the examples/docs for your MaxAVi and BlitzNet Optica lib :)


AntonyWells(Posted 2006) [#12]
Well atm they're working on a collision problem. Damien is handling most of the physics side due to hs experience with Ode so atm I'm left with little to do. I've practically wrapped all of Ogre into a oop package with two physic solutions so I think it's fair to say share I'm not slouching..just waiting for them to catch up :)

Hey here's a good way to determine which is the superior 2d engine, a Raytracer I wrote. It will need a linepick and tform function though unfortunately but ogremax has them so maybe i can jack into them.
(b3d code, will need serious coverting)
;Infini.
;
Global res=45

Graphics3D res+5,res+5,32,3
SetBuffer BackBuffer()


test=CreateCube()

;test=LoadMesh("tmedia\jeep1.3ds")
If Not test End
;FitMesh test,-3,-1,-3,6,1,6
other=CreateCube()
FitMesh other,-20,-1,-20,40,20,40
FlipMesh other
newPrim(other,2)
newPrim(test,2)
;EntityPickMode

vcam=CreateCamera()
PositionEntity vcam,3,10,-5
PointEntity vcam,test
UpdateNormals other
UpdateNormals test
TurnEntity test,0,0,-45


newLight(10,8,4,0,0,512)
newLight(-10,8,4,255,255,100)

newLight(0,3.5,-6,412,412,412)






Repeat


Cls
;RenderWorld
  PositionEntity test,0,10+Cos(aa)*4,0
aa=aa+20

TurnEntity vcam,MouseYSpeed(),-MouseXSpeed(),0,True
RotateEntity vcam,EntityPitch(vcam),EntityYaw(vcam),0
MoveMouse 20,20
FlushMouse

;PointEntity vcam,test
;FlushMouse

If KeyDown(17)
MoveEntity vcam,0,0,2
EndIf

If KeyDown(31)
MoveEntity vcam,0,0,-2
EndIf

If KeyDown(30)
MoveEntity vcam,1,0,0
EndIf
If KeyDown(32)
MoveEntity vcam,-1,0,0
EndIf
TurnEntity test,0,5,0
rayTrace(vcam,res,res)
;Flip
;Else
;RayTrace(vcam,64,64)
;EndIf

Flip False
Until KeyDown(1)
SaveBuffer(BackBuffer(),"RayTrace.bmp")
WaitKey
End


;End
Type prim
Field id
End Type
Type light
Field x,y,z
Field r#,g#,b#
End Type
Function DotProd#(vecA#[3], vecB#[3])
   Return(vecA[0]*vecB[0] +vecA[1]*vecB[1] +vecA[2]*vecB[2]);
End Function

Function vecNormalize#(vec#[3])
   mag# = Sqr(vec[0]*vec[0] +vec[1]*vec[1] +vec[2]*vec[2]);

   ;// don't divide by zero
   If (mag=0)
      vec[0] = 0.0;f;
      vec[1] = 0.0;f;
      vec[2] = 0.0;f;
      Return(0.0);
   EndIf

   vec[0] =vec[0]/mag;
   vec[1] =vec[1]/mag;
   vec[2] =vec[2]/mag;

   Return(mag);
End Function
Function rayTrace(cam,xRes=160,yRes=160,pixelRes=1)
fov#=5;in units
xScan#=fov/XRes;/fov;/fov*2
yScan#=fov/yRes;/fov;/fov*2
;Stop
Local vecA#[3],vecB#[3]
xo#=-2.5
yo#=2.5
cx#=EntityX(cam)
cy#=EntityY(cam)
cz#=EntityZ(cam)
LockBuffer 
While x<xRes
x=x+pixelRes
xo=xo+xScan
While y<yRes
y=y+pixelRes
yo=yo-yScan
TFormVector xo*20,yo*20,100,cam,0
totr=0
totg=0
totb=0
vx#=TFormedX()
vy#=TFormedY()
vz#=TFormedZ()
hit=LinePick(cx,cy,cz,TFormedX(),TFormedY(),TFormedZ(),0.2)
If hit

px#=PickedX()
py#=PickedY()
pz#=PickedZ()
nx#=PickedNX()
ny#=PickedNY()
nz#=PickedNZ()
Veca[0]=PickedNX()
veca[1]=PickedNY()
veca[2]=PickedNZ()
HideEntity hit

For l.light =Each light
dx#=l\x-px
dy#=l\y-py
dz#=l\z-pz
vecB[0]=dx
VecB[1]=dy
Vecb[2]=dz
vecNormalize(vecb)
dot#=dotProd(veca,vecb)
If dot>0
hit2=LinePick(px,py,pz,dx,dy,dz,0.2)
If hit2
Else
totr=totR+Float(l\r*dot);*hit2
totg=totG+Float(l\g*dot);*hit2
totb=totB+Float(l\b*dot);*hit2
EndIf
EndIf

Next
ShowEntity hit

totr=totr/3.
totg=totg/3.
totb=totb/3.

If veca[0]<>0 ox#=-vx Else ox=vx
If veca[1]<>0 oy#=-vy Else oy=vy
If veca[2]<>0 oz#=-vz Else oz=vz

If totr>255 totr=255
If totg>255 totg=255
If totb>255 totb=255
rgb=totb Or (totg Shl 8) Or (totr Shl 16)

WritePixelFast x,y,rgb

EndIf
Wend
y=0
yo=2.5
Wend
UnlockBuffer
End Function

Function newLight(x,y,z,r=128,g=128,b=128)
l.light=New light
l\x=x
l\y=y
l\z=z
l\r=r
l\g=g
l\b=b
End Function

Function newPrim(ent,mode)
p.prim=New prim
p\id=ent
EntityPickMode ent,mode,True

End Function





SillyPutty(Posted 2006) [#13]

Would I be interested in it? If there was some commitment of support, demos and docs then I'd look at it again.
BTW Is this new project taking time from the game you're writing with 'the other guys' or holding up the examples/docs for your MaxAVi and BlitzNet Optica lib



About to ask the same.


AntonyWells(Posted 2006) [#14]
I released a demo for maxavi, and the blitznet optica demo is sitting on my hd. I have no ftp space anymore.


Damien Sturdy(Posted 2006) [#15]
Damien is handling most of the physics side due to hs experience with Ode so atm I'm left with little to do. I've practically wrapped all of Ogre into a oop package with two physic solutions so I think it's fair to say share I'm not slouching..just waiting for them to catch up :)



Vector3. 'Nuff said.


AdrianT(Posted 2006) [#16]
hey ant we need to work on offusion some more and get the art pipeline working correctly ;P talk about that after I sort the usual morning chores and dog stuff.


AntonyWells(Posted 2006) [#17]
Vector3. 'Nuff said.

Don't even go there. :)


hey ant we need to work on offusion some more and get the art pipeline working correctly ;P talk about that after I sort the usual morning chores and dog stuff.



Yeah let's talk about it on yahoo. No ammo for the masses :)


tonyg(Posted 2006) [#18]
Hey here's a good way to determine which is the superior 2d engine, a Raytracer I wrote

Hey, here's another way. Release a working demo of the lib with full docs so potential buyers can check for themselves and demonstrate a proven track-record of supporting your products.
I realise this post was to ask whether people though it viable to produce a traditional 2D system but the first person that responded you poo-poo'd and, since then, you're trying to pressgang FPS comparisons.
P.S. I saw a MaxAvi demo and it looked impressive but gave no suggestion of its features. I can't find them listed anywhere else either.


Bremer(Posted 2006) [#19]
[on topic]
Using your Bmax example, I am getting 4-5fps as well, but using tonyg's example with pixmaps, I am getting 58-59fps. So I would say that its quite an improvement. You might be able to use a pointer to the pixmap and do some direct memory writing, haven't tested myself.

Even though there is a handful of people interested in making their own raytracers and such, I am still not sure that it would be a good return on investment making something for such a small market potential. Not that I have actually examined what potential market there might be for what you are looking to make, but from what I have experienced while using blitz and coding, there just doesn't seem to be that many out there wanting to make that kind of stuff anymore.

[off topic]
If you want to sell something online, you might want to consider securing online storage space first, then market the product. That way, its available for people to download right away. Just one of those small things that will make a good impression on people considering to buy something.


Chris C(Posted 2006) [#20]
the main feature I'm interested in is open source

@zaweran - lets face it he cant be serious about supporting his products, I have a few gig space for less than £60 a year...


Bremer(Posted 2006) [#21]
@Chris C, thats what I mean, he should start by setting himself up correctly, with a proper host, plenty of space and bandwidth. I am not paying much for my space either, and its probably more important than most people think it is.

If he doesn't have the money, then he should partner up with someone who does, but given the series of previous efforts, I could see why someone might be hesitant, which is why extra effort is needed to win people over.

[sorry about the offtopic bits, but it kinda ties in with things somehow, I think]


AntonyWells(Posted 2006) [#22]
I can't afford web hosting. I can barely afford food :) That's why i'm trying to sell products..gotta make money to make money kinda thing.


Dreamora(Posted 2006) [#23]
Then make 1 good product and sell it.
You created 2 products in the last few weeks ...
This raises one very bad point (that was mentioned here and in other threads): It does not make us, your potential costumers, believe that you plan to support those libs as no one has enough time to fully support 3 modules at the same time.
I already mentioned that in a different thread: We don't have much problem with "buy as is", but then you have to set the price tag according: 15$ - 20$ thats it. I and quite some other here don't pay more for it, simply because we are hobbyists (otherwise we would not use products like Blitz or Dark Basic at all) and hobbyists don't spend 50-100$ just for a module that adds some functionality.
And the ones that use those languages "professionally" and would be willing to pay more, won't buy modules from you until you proofed that the past is the past and that you are going to support your actual products for at least 6 months actively. (or would normally not buy any module until it has shown that it was more than a one shot, not just from you)



PS: I have 1,5GB of space, free traffic. 60$ a year including a .net domain. So price should definitely not beeing a problem. With 1000 visitors a day, my space would even be sponsored by my host ...


SillyPutty(Posted 2006) [#24]
couldnt have said it better than Dreamora.


Bremer(Posted 2006) [#25]
If you seriously struggling financially, then perhaps you should be focusing on something else, like getting a job, if you don't have one, or getting a better paid one if you do.

First priority should be to take care of yourself and the basic needs, then everything else comes thereafter.

I think that if you would just settle for one really useful product, write up some easy to follow and extensive docs for it. Set up a stable and easy to use website with downloadable working demos of the product and screenshots of its usage. Then stick with that one product for at least half a year and do your best to provide the best support for it possible, then a good deal of people would be willing to give you a chance and actually buy the product and provide you with constructive feedback that can be used to further develop and enhance the product.

If that turns out well, then you could be looking at developing and additional product while supporting the first one, and people would be more willing to consider buying it, provided they need it, because they would have had a good experience with the first product, and they could see, that the author didn't just ditch it once the initial excitement was gone.

I'm in no way an expert in any of this. I have had two application for sale for a while now, and have had about 30 customers total. I have done my best to support the products and have been available to answer any questions that might arise, and have been changing and enhancing the applications along the way based on customers feedback.

It have been a pleasure to work on the applications and there have been a good feeling of accomplisment that came along with people actually feeling that the applications were good enough, where they would want to buy them based on the available demo and documentation.

I hope that you take this to heart, it have all been with good intent, even though it might have been questioning your motivation and such, but I am sure you are becoming quite thickskinned by now, which is sometimes needed in forums like this.

I wish you all the best in your endavor, as I think that you have the talent, just haven't found the right way to utilize it profitably, yet.


AntonyWells(Posted 2006) [#26]
Yeah I don't really disagree with anything you're saying,
I just get disheartened if a product doesn't sell ten copies a day. I've never actually had a product that sold ten a day (Few have I'd imagine, it's hard work realising something that's actually worth money to people) and tend to lose focus and move onto the next big thing that's giong to make me a millioiare. I'm a lot like del boy..always looking for the next big deal so this next time year...:)

For me now, the game I'm doing is the priority. I see it making us a good chunk of money if we can get past the initial problems we're having.(Usual early days sceneraio. physics not acting the way they should, scene loader playing up. bugs without a proven solution)
So yeah I agree with what you say, I need to focus more, just don't realisticly see one product sustatining me for six months.
Though a big reason for me starting so many projects is boredom. :) I used to release all my stuff for free..working on projects but even since vivid, which sold 20 copies in a month that bug got under my skin. it's such a wonderful feeling seeing the sales numbers going up..seeing the dollers signs rise. And now I'm a junkie..I crave the next sale. I'm just not approaching it in the right way.


SillyPutty(Posted 2006) [#27]
So if your game is priority, what about the products you are selling now ? And the customers who have already bought them ?

You cannot serve 2 masters.

The more I hear you trying to explain, the less confident I am in wanting to spend money on your products. Which is a shame, because if you had spent more time and effort into releasing a more complete product, I would have bought it.

If you had to really concentrate on your network module say, I am sure you would sell a lot of copies.


AntonyWells(Posted 2006) [#28]
I'm not trying to explain my out of anything, I'm just stating the facts as they are in response to people's post. How people interpret is not something I can control.

But that said, Net Optica will serve as the networking hub for the game (At least that's the plan at the mo) so it is ensured updates and streamlining.

MaxAvi on the other hand is less likely to receive big updates. But it still has the advantage of being the only module of it's kind for max.(That I've seen, I searched before writing it)


ImaginaryHuman(Posted 2006) [#29]
I think there are *some* benefits to doing 2D graphics the old-fashioned way with the CPU directly onto a visible screen, in that you can ignore having to do matrix and trigonometry stuff and just optimize for drawing sequences of memory. Very simplified and not having to take much into account, can give it a good head start over a software driven OpenGL implementation. For example on my iBook with only software OpenGL, you definitely can't do anywhere near as much in 2D as you could with old school techniques.

However you can't really compete with the ease and flexibility and sheer fill rates of graphics cards. Even my mid-ish range card does 1 billion texels a second. Also you will have a problem integrating custom 2d graphics routines into BlitzMax since the display is either OpenGL or DirectX, you might not be able to draw directly into the graphics buffer. I would say definitely not with OpenGL, which counts out Mac/Linux.

I think you can DO certain cool things in the old-school way much better than you can with GL/DX, in that you can easily read the buffer on a per-pixel basis and do all kinds of things with that in realtime. Nowadays you have to have shaders etc.

I can't think of too much reason anymore, though, why there would be benefit to doing 2d in software rather than using hardware acceleration - except to allow you to draw stuff to pixmaps for later uploading.


N(Posted 2006) [#30]
Your code formatting is scary. I tried to read it to get an idea of what you were doing, but gave up.


AntonyWells(Posted 2006) [#31]
Just messy demos. Here's an example of actual module code


Type TPivot
	Method New()
		children = CreateList()
	End Method
	Function Create:TPivot(Parent:TPivot=Null)
		
		Local out:Tpivot = New tPIVot
		If parent = Null
			out.node = CreateSceneNode( GenerateName("Node").tocstring() )
		Else
			out.node = NodeAddChild( parent.node,GenerateName("Node").tocstring() )
			out.parent = parent
			parent.addChild( out )
		EndIf
		Return out
	
	End Function
	

	
	
	Method CreateMeshData:TMeshData( mesh:String )
		
		Local out:TMeshData = New TMeshData.Create( Self,mesh )
		Return out
		
	End Method
	
	
	Method AddChild(in:TPivot)
		children.addlast( in )
	End Method
		
	Method CreateChild:TPivot()
		
		Local out:Tpivot = New tpivot
		out.node = NodeAddChild( node,GEnerateName("Node").tocstring() )
		Return out
		
	End Method
	
	Method SetQuat(quat:Byte Ptr)
		NodeSetQuat( node,quat )
	End Method
	
	Method SetQuatDirect( quat:OQuaternion )
		
		NodeQuatDirect( node,quat.w,quat.x,quat.y,quat.z )
	
	End Method
	
	Method SetQuatCoords( w#,x#,y#,z# )
	
		NodeQuatDirect( node,w,x,y,z )
	
	End Method
	
	Method GetQuat:Byte Ptr()
		
		Return NodeQuatWorld( node )
				
	End Method
	
	' Might want to re-write this Ant- i've done it without adding stuff from the DLL.
	Method Move(x:Float,y:Float,z:Float)
	
			self.TformPoint(x,y,z) 
			self.position(self.tformedx(),self.tformedy(),self.tformedz())
	
	End Method
	
	Method X:Float()
		Return NodeX( node )
	End Method
	
	Method Y:Float()
		Return NodeY( node )
	End Method
	
	Method Z:Float()
		Return Nodez( node )
	End Method
	
	Method Position(x:Float,y:Float,z:Float)
	
		PositionNode( node,x,y,z )
		
	End Method
	
	Method GetPitch:Float()
		
		NodeRotation( node )
		Return RotationPitch()
		
	End Method
	
	Method GetYaw:Float()
		
		NodeRotation( Node )
		Return RotationYaw()
		
	End Method
	
	Method GetRoll:Float()
	
		NodeRotation( Node )
		Return rotationroll()
	
	End Method
	
	Method TFormPoint(x:Float,y:Float,z:Float)
		
		TFormNode( x , y , z , node )
		tx = tformx()
		ty = tformy()
		tz = tformz()
		
	End Method
	
	'Just a cheap kludge till I do it in c++.
	Method TFormVector(x:Float,y:Float,z:Float)
	
		Local ox#,oy#,oz#
		ox = nodex( node )
		oy = nodey( node )
		oz = nodez( node )
		Position(0,0,0)
		TFormNode( x,y,z,node )
		Position(ox,oy,oz)
		tx=tformx()
		ty=tformy()
		tz=tformz()
	
	End Method
	
	Method TFormedX:Float()
	
		Return tx
	
	End Method
	
	Method TFormedY:Float()
	
		Return ty
		
	End Method
	
	Method TFormedZ:Float()
		
		Return tz
		
		
	End Method
				
	Method LookAt( x:Float,y:Float,z:Float,GlobalSpace = False )
		
		If globalspace
		'	NodeLookAtWorld( node,x,y,z )
		Else
			NodeLookAtLocal( node,x,y,z )
		EndIf
	
	End Method
	
	Method Pitch( Inc:Float )
		NodePitch( Node,inc )
	End Method
	
	Method Yaw( Inc:Float )
		NodeYaw( Node,inc )
	End Method
	
	Method Roll( Inc:Float )
		NodeRoll( Node,inc )
	End Method
	
	Method Rotate( nPitch:Float,nYaw:Float,nRoll:Float )
		
		NodeRotateLocal( Node,nyaw,npitch,nroll )
	
	End Method
	
	Method Turn( nPitch:Float,nYaw:Float,nRoll:Float )
	
	End Method
	
	Method Scale(x:Float,y:Float,z:Float)
	
		NodeScale( node,x,y,z )
	
	End Method
	
	Field Node:Byte Ptr
	Field tx:Float
	Field ty:Float
	Field tz:Float
	Field parent:TPivot
	Field Children:TList
End Type




From the soon to be loved Aurora Engine.

How would you format the demos? Aside from the obvious.

Angel I would agree or disagree but frankly i'm too tired to debate the subject anymore tonight :)


N(Posted 2006) [#32]
How would you format the demos? Aside from the obvious.


Something like
' Short description of what the following does
some( code( that( does( something( eeeeevil ) ) ) ) )

Rem

Long description where neccessary

EndRem


Of course, you would describe this pattern before the example was provided so the viewer would understand how to read the comments.


Kanati(Posted 2006) [#33]
I'm not interested in anything... ANYTHING... until I get some docs on the module I already purchased. I gave ya a chance and I'm losing faith that I should have done so.


AntonyWells(Posted 2006) [#34]
Fair enough Kanati. You'll have docs before the day's out. Good enough? :)

Noel, I never really comment code. I used to all the time but I just grew out of it. The only time I comment code these days is when I'm using VC# because it has such a great doc system. BBDOCS eat your heart out.


N(Posted 2006) [#35]
Most of my code is lacking comments since, frankly, even after several months of development I still know what everything does. I can go back to all my code and understand it.

Of course, my code is littered with the occasional comment or two in the case that I have something unusual going on.


AntonyWells(Posted 2006) [#36]
Docs are up Kanati.

Same here, E, I don't need comments myself so I have little reason to comment the code. Suppose I need to change that if I intend to sell my libs.


Robert Cummings(Posted 2006) [#37]
if it's a dll, it's a waste of my time because cross platform couldn't be more important now.


AntonyWells(Posted 2006) [#38]
It would have been a dll but I've decided against pursuring it so it's a moot point now.

I'm thinking of doing a kick ass 2d lib build on top of max2d with glsl powered fx, per pixel lighting , bump mapping, the works.

But that will have to wait until Aurora Ships. Another windows only platform but a great engine on one platform is better than no engine on all platforms.


tonyg(Posted 2006) [#39]

I'm thinking of doing a kick ass 2d lib build on top of max2d with glsl powered fx, per pixel lighting , bump mapping, the works.


Now that I *would* be interested in.
BLitzMax Turbo 2D or BlitzMaxMax.


H&K(Posted 2006) [#40]
@Aurora

Why did you find the need to fake the FPS results?
With just changing three lines most of us got the fps in Max2d to double/treble in gl from what you had.
Your liB is 256 colors.
Why didnt you post just that fact, and say a speed increase of 30%

I would be interested in a 2d accelerated Lib, (Accelerated for 2d cards, NOT 3d cards). Which is why I had searched this thread. And Yet again I find you doing doubious things.