Jump to content

Multiplatform Madness

Josh

2,639 views

So after a lot of learning and mistakes, I finally have Leadwerks Engine 3 running on OSX Snow Leapord, Lion, and iOS. Rather than write out a detailed blog, I'll just throw a lot of random thoughts your way:

 

-OpenGLES2 is a nice blend of OpenGL 2 and OpenGL 3.3. I'm really surprised my OpenGL 3 shaders translate easily into OpenGLES2 shader code, with only a few changes. In fact, the iOS renderer looks exactly like the deferred OpenGL 3 renderer, except for shadows and some post-effects. The games I have seen running on the iPhone are severely underpowered compared to what they could look like. This little device has quite a lot of power, and you can be sure I will find the way to max out the visuals.

 

blogentry-1-0-43150900-1309310617_thumb.png

 

-iOS uses it's own texture compression format. :) This sucks, because it means either you are using uncompressed textures for cross-platform compatibility, or you have to have separate textures for your iOS build. The OpenGL spec really should have a defined compressed format, but I guess there was some patent issue with DXTC compression, or something like that.

 

-Lua and my other cross-platform libraries seem to work just fine with iOS, which is fantastic. :o I really had no idea when I started this project whether it would really work like I hoped or not, but everything looks good.

 

-The iOS port was probably the hardest one, due to the use of Objective-C. Android should be pretty easy after this. The PS3 is another platform I am really interested in, and my guess is LE3 could be ported to PS3 in a few days or less.

 

-OSX Lion has some very appealing characteristics related to Leadwerks Engine 3. I'm under NDA and can't say exactly what they are, but it's very good for Mac and graphics. BTW, the gestures they are adding to OSX Lion are really fantastic, and reason enough to get the upgrade.

 

blogentry-1-0-36860000-1309311417_thumb.jpg

 

There's still a ton of work to do before I have an actual product ready to release, but the plan is working and we're on track for a fantastic 3D development system for a wide variety of platforms.



17 Comments


Recommended Comments

Looking good Josh. I'm excited to get my hands on this.

 

"The games I have seen running on the iPhone are severely underpowered compared to what they could look like. This little device has quite a lot of power, and you can be sure I will find the way to max out the visuals."

 

Are you sure this isn't because games are much more than visuals? If visuals use up all of your computing power you won't have any gameplay interactions.

Share this comment


Link to comment

No, it's largely because most of the people developing iOS games are one man "teams". They are mostly programmer art. A good example of what the device is capable of would be the Infinity Blade demo made by Epic Games. That runs amazingly well on the hardware with great visuals, shaders and a high polycount. It's running via the UDK which is significantly more bloated than LE3 will be. I'm expecting good things here. :blink:

Share this comment


Link to comment

Your progress is really impressive Josh! Glad to see things are working out so well. The multi-platform nature of LE3 is going to make the engine so much more attractive to potential buyers.

Share this comment


Link to comment

Looks great, shame there is no way of getting the Leadwerks love on WP7, im currently writing games for that platform.

Share this comment


Link to comment

We'll find a way to drain that suckers battery in minutes, just you wait :blink:

 

Unity iPhone has a lot of dead weight attached too, it will be nice to work on some of the the parked mobile projects we had.

 

I don't see having an extra texture conversion step for iOS as a problem at all. DDS is an n stage process so running a different tool for iOS seems like 6 of 1 and half a dozen of the other.

Share this comment


Link to comment

Which would be great for the ipad ... 200 sidescroller a la "manhattanProject" in the first year :blink: -

i wonder which gametypes we might develop on the iThing next xear. :blink:

 

Anyways - dont want to rain on your parade but there is an still an issue, in the tracker, i need to know more about ...

Share this comment


Link to comment

Looks great, shame there is no way of getting the Leadwerks love on WP7, im currently writing games for that platform.

It all depends on whether they allow C++ code on Windows Phone 7. Requiring C# only is suicide for their platform. Both Apple and Google realized already programmers don't want an "easy" programming language if it means they have to rewrite their whole program for one platform.

Share this comment


Link to comment
Guest Red Ocktober

Posted

great progress report... thanks... looking forward to 3...

 

--Mike

Share this comment


Link to comment

Requiring C# only is suicide for their platform. Both Apple and Google realized already programmers don't want an "easy" programming language if it means they have to rewrite their whole program for one platform.

 

I don't think you give MS enough credit. By providing .NET and XNA as open source frameworks people make ports so that we can write code once and have it work on many different platforms. MS was brilliant in this respect because .NET will rule the world some day and we'll all bow down to it I'm sure :blink:

 

https://github.com/mono/MonoGame

 

Now imagine the person who bases their game engine around this. Basically everything put playstation, which I'd be shocked if they haven't or don't get that going soon.

Share this comment


Link to comment

I think rather that Fortran will rule the world, because it's faster than .NET, and works on all platforms, while .NET works only on Windows and Linux, but not on AIX, zOS, PS3, Android, BlackBerry, MacIntosh, Amiga, iOS, BSD, etc....

Share this comment


Link to comment

It will be nice to have easy access to a variety of scene stats for rendering and memory usage, profiling on these devices can be important.

Share this comment


Link to comment

will the graphics be rendering in the background to the memory when you take a call. I know that iOS now multi tasks which means the game is still running in the background in a sorta hibernated state. Also, the engine is requiring Objective-C for the iOS, will our apps require to learn Objective-C, or can we still use C++ and the engine sorta converts it for us.

Share this comment


Link to comment

I don't think iOS even allows you to render in an inactive app and eat up the battery.

 

On OSX and iOS, I'm using an Objective C entry point that calls the C++ main() function. So you can just write your program in plain C++ and not worry about Objective C, except for the default setup code just to make it work. There will be a "Project Wizard"-like dialog in the editor that will create the starting project for you, so you never have to touch any Objective-C yourself. Of course, a pure Lua app bypasses all of that altogether.

Share this comment


Link to comment
It will be nice to have easy access to a variety of scene stats for rendering and memory usage, profiling on these devices can be important.

 

It isn't just 'nice' to have these features. It is an absolute must these days.

Share this comment


Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Blog Entries

    • By tipforeveryone in tipforeveryone's Blog 5
      II. Implement advanced actions
      Previous tutorial guided you to create your own FPS Character Controller with basic actions: Move, Look.
      This tutorial will help you add some advanced actions like Jump, Run, Crouch, and Lean
      *Note: Below steps will use code from previous tutorial (CharacterController.lua)
      1. Jump / Run / Crouch
      Firstly, build obtacle with space under it to test crouching, the space height shoud be at least 120cm (leadwerks editor will show you this height in other viewports) You can not crouch and pass space under 120cm, this was hardcoded


      Next, modify the code.
      Add new variables under --Character movement variables comment. Note that putting script variables at the top of script will allow you to modify character stat easier and faster than finding variables deep inside script's functions
      --Character movement variables Script.playerSpeed = 2 --higer = faster Script.playerRunSpeedMultipier = 2 --if this variable < 1, you can make slower movement Script.playerJumpForce = 7 --This defines how high you can jump Add new funtion to smooth movement of character components function Script:SmoothPosition(position,entity,rate) local smoothX = Math:Curve(position.x,entity:GetPosition().x,rate) local smoothY = Math:Curve(position.y,entity:GetPosition().y,rate) local smoothZ = Math:Curve(position.z,entity:GetPosition().z,rate) entity:SetPosition(smoothX,smoothY,smoothZ) end Replace code in Character_Movement() function by this code function Script:Character_Movement() local playerSpeed, playerJumpForce, playerCrouch --Press Space bar to Jump if window:KeyHit(Key.Space) then playerJumpForce = self.playerJumpForce else playerJumpForce = 0 end --Hold Ctrl key to Crouch if window:KeyDown(Key.ControlKey) then playerCrouch = true else if self.playerHeadBlocked then playerCrouch = true else playerCrouch = false end end --Hold Shift key + AWSD to Run if window:KeyDown(Key.Shift) then playerSpeed = self.playerSpeed * self.playerRunSpeedMultipier else playerSpeed = self.playerSpeed end local playerMove = ((window:KeyDown(Key.W) and 1 or 0) - (window:KeyDown(Key.S) and 1 or 0)) * playerSpeed local playerStrafe = ((window:KeyDown(Key.D)and 1 or 0) - (window:KeyDown(Key.A) and 1 or 0)) * playerSpeed --Using local playerSpeed varialbe instead of self.playerSpeed in the old code local playerTurn = self.playerNeck:GetRotation(true).y self.playerBase:SetInput(playerTurn,playerMove,playerStrafe,playerJumpForce,playerCrouch) end Replace code in Bind_Character_Components_Together() function too function Script:Bind_Character_Components_Together() --Must use this reposition process because playerBase is not playerNeck's parent, they are indipendent. local basePos = self.playerBase:GetPosition(true) local height if window:KeyDown(Key.ControlKey) then height = basePos.y + (self.playerHeight - self.neckLength) / 2 --You can adjust this variable to get desired crouch height for playerNeck (and playerEyes too) else if self.playerHeadBlocked then height = basePos.y + (self.playerHeight - self.neckLength) / 2 else height = basePos.y + self.playerHeight - self.neckLength end end self:SmoothPosition(Vec3(basePos.x,height,basePos.z),self.playerNeck,10) end Add a new function to script, this will keep player crouching if something block above character when release Ctrl key, prevent from being pushed around by obtacle when standing. function Script:Check_Head_Block() --We can use a raycast to check if something block character head when crouching local pickInfo = PickInfo() local point1 = self.playerNeck:GetPosition(true) local point2 = self.playerBase:GetPosition(true) + Vec3(0,self.playerHeight,0) if world:Pick(point1,point2,pickInfo,0.3,true) then self.playerHeadBlocked = true else self.playerHeadBlocked = false end end Update Script:UpdateWorld() function with new Check_Head_Block() function function Script:UpdateWorld() self:Bind_Character_Components_Together() self:Check_Head_Block() self:Character_Look() self:Character_Movement() end Now, you can crouch under obtacle, release Ctrl Key and you are still crouching. Continue moving for auto standing. 2. Leaning
      In Character_Movement() function, add this code after Crouching code
      --Hold Q/E to lean Left/Right local leanDistance = 0.025 --leanDistance should be < 0.025 or camera will pass through wall when you get too close if window:KeyDown(Key.Q) then self.playerEyes:Move(-leanDistance,-0.01,0) end if window:KeyDown(Key.E) then self.playerEyes:Move(leanDistance,-0.01,0) end And add this line at the bottom of Bind_Character_Components_Together() function self:SmoothPosition(Vec3(0,self.neckLength,0),self.playerEyes,10) You can lean now, so smooth. Final script file was attached to this entry. You can apply it to a pivot point (PlayerControl).
      CharacterController.lua
    • By 💎Yue💎 in The shock absorbers 2
      Coming to the end of my prototype of a 3d game, and with background music by Hanz Zimmer ( Time ). I saw my progress in many aspects, always something to learn, always something to improve, I didn't intend to make a game, that has never been the goal. 
      Rather, the effort and dedication immeasurably, was to improve on something learned. And here I was with the powerful leadwerks engine, where his greatest power lay in making everything very easy.  
      About the project
      The prototype is very simple, a third person character goes through a stage, an orbital camera that follows him with many interesting things when scripting.  A character who runs, walks, ducks, jumps, and suffers damage when he falls from different heights. 
      The interesting thing about all this is that just like when you're little and learn to write, repetition is key to learning to program, understand concepts and improve.  So as I've always said, you learn to program by programming, although I sincerely think that lua script is not programming, but the experts say it is, so I go into that elitism of those of us who think we are programmers. 
      The final part of the project consists of creating a death animation, this will be activated when the player falls from a high part and separates the legs (that is very cruel). 
      But that feeling of improvement is the same that I feel when in the mornings when I have a coffee I solve a riddle of the newspaper, but I don't know when I'm going to stop, it turns out and it happens that technology advances very fast and this continues and continues without stopping. Starting with LE 5, and the only thing that can happen is that I die or that my old computer doesn't work anymore. 
      Translated with www.DeepL.com/Translator





    • By 💎Yue💎 in The shock absorbers 1
      It's interesting that when you become an expert on something, you're not sparing any effort to see how something works, but rather you're focusing on creating something. And so everything becomes easier.
      At this point of learning there is a glimpse of a low idea of creating a game, but the secret of all this is to keep it simple and to be very clear that a game is a game, and not an exact simulation of the real world. For example anyone who has a low idea of the red planet, will understand no matter the colors of the scene that is a terrain of Mars, even if it is not very real what is transmitted, a game, that's just it.
      At this point I already have an astronaut character who runs from one place to another on a very large 4096 x 4046 terrain that would surely take a long walk. My previous prototype projects involve a vehicle, but I didn't get the best implementation prospect in that time and I always found performance problems in my machine, something that isn't happening with the character controller for a third person player. 
      As always, I think I'm a scavenger looking for game resources, that's where this community exposes links to websites with interesting hd textures, and one or another model searched on the net, but what I've greatly improved is learning to write code, I have a better workflow, writing Lua code focused on the paradigm of object programming.



      Something interesting is the system of putting rocks, all very nice from the point of implementing them. And it works very well with the character controller if you put collision in cube form.
      I've been thinking about implementing a car system, I think it would be necessary in such a large terrain, but I think it's not the time, my previous experience, involves deterioration in performance and something I think is the physics of the car with respect to the terrain and rocks that in the previous project involve deterioration in the fps. Although if you implement a car would have an option would be to remove the rocks, but I prefer not to have a car and if you have rocks. 
       
       
       
       
×
×
  • Create New...