10.03.2019 - Round 1 results of our "A Love Letter For FreeBASIC" game dev competition have been published. Please be sure to check the results thread: http://games.freebasic.net/forum/index.php?topic=629.0. Don't forget that the competition is continuing with a round 2, lasting till 29th of April, 300 USD first prize. Stay tuned!

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Pritchard

Pages: 1 [2] 3 4 ... 11
16
Programming / Re: FreeBASIC Easing Library
« on: January 26, 2013, 05:13:00 AM »
Update (01/26/2013):  Length and Callback demos
Be sure to check out Github for the latest demos!

Code: [Select]
#include "Easing.bas"
using pritchard.animation

screenres 640, 480, 32

var shortEase = type<Easing>( @Easing.in_bounce, 1.5 )
var mediumEase =  type<Easing>( @Easing.in_bounce, 3 )
var longEase =  type<Easing>( @Easing.in_bounce, 5 )

while( longEase.IsComplete = 0 )

screenlock()
cls()

circle( shortEase.Y * 640, 100 ), 20
circle( mediumEase.Y * 640, 200 ), 20
circle( longEase.Y * 640, 300 ), 20
screenunlock()

sleep 16, 1

var y = shortEase.time_step( 1 / 60 )
y = mediumEase.time_step( 1 / 60 )
y = longEase.time_step( 1 / 60 )

wend

Callbacks:

Code: [Select]
#include "Easing.bas"
using pritchard.animation

screenres 640, 480, 32

type Entity
dim as integer x, y
dim as integer ease_x, ease_y
dim as integer x_direction, y_direction
dim as integer ease_index

dim as EasingFunction walk_steps(0 to 3) = _
{ _
@Easing.linear, _
@Easing.in_elastic, _
@Easing.out_bounce, _
@Easing.in_out_exponential _
}

dim as Easing walk
end type

sub handle_step( byref ease as Easing, byval user_data as any ptr )

dim as Entity ptr player = cast( Entity ptr, user_data )

player->ease_x = ease.Y * player->x_direction * 300
player->ease_y = ease.Y * player->y_direction * 300

end sub

sub next_step( byref ease as Easing, byval user_data as any ptr )

dim as Entity ptr player = cast( Entity ptr, user_data )

player->x += player->ease_x
player->y += player->ease_y

player->ease_x = 0
player->ease_y = 0

player->ease_index += 1
if( player->ease_index > ubound(player->walk_steps) ) then player->ease_index = 0

player->walk.easing_function = player->walk_steps( player->ease_index )

select case player->ease_index
case 0:
player->x_direction = 1
player->y_direction = 0
case 1:
player->x_direction = 0
player->y_direction = 1
case 2:
player->x_direction = -1
player->y_direction = 0
case 3:
player->x_direction = 0
player->y_direction = -1
end select

player->walk.t = 0

end sub

dim as Entity player
player.x = 145
player.y = 65
player.walk.user_data = @player
player.walk.easing_function = player.walk_steps(0)
player.x_direction = 1
player.walk.step_callback = @handle_step
player.walk.completed_callback = @next_step

while( multikey(&h01) = 0 )

screenlock()
cls()
line ( player.x + player.ease_x, player.y + player.ease_y ) - step (40, 50), rgb(255, 255, 255), bf
screenunlock()

sleep 16, 1
var y = player.walk.time_step( 1 / 60 )

wend

17
Programming / FreeBASIC Easing Library
« on: January 26, 2013, 03:20:11 AM »
https://github.com/Pritchard/FB-Easing

From README.md:

Quote
This library for the FreeBASIC Compiler implements the easing methods found here: http://easings.net/

It was created by Alexander Pritchard as part of his efforts to improve the functionality of the FreeBASIC Compiler.

Main source:  https://github.com/Pritchard/FB-Easing/blob/master/Easing.bas
Interactive Demo:  https://github.com/Pritchard/FB-Easing/blob/master/EntityDemo.bas
Demo:  https://github.com/Pritchard/FB-Easing/blob/master/Demo.bas

Be sure to check out the entire repository.  There are additional demos and utility functions.

Easings provide a shorthand method for delegating the task of smoothly transitioning objects or values.  They are especially useful in visual effects and animations, where they are used to simulate common accelerations or other visual effects.

Note (01/26/2013):  This library was made between the hours of 12 AM and 4 AM tonight.  Your feedback is thus greatly appreciated.

18
Programming / Easings/Tweens - Sequencing them using callbacks
« on: January 24, 2013, 12:22:58 PM »
Quote
This is a repost from freebasic.net.  I think I may start posting stuff like this first from now on.  Let me know if you guys want a more advanced easing/tweening example.  I've done some pretty interesting animation scripting using methods such as these.


The code presented demonstrates the following:

1)  A basic easing system powered by callbacks.
This means that only a single line of code is required to change an easing from say, linear to exponential.

2)  The use of completion callbacks to begin another easing.
This makes it easy to sequence or "script" easings, one after another.

3)  Linear, exponential and logarithmic easings.

Code: [Select]
namespace pritchard.animation

type EasingReference as Easing
type EasingRunning as function( byval t as double ) as double
type EasingCompleted as sub( byref easing as EasingReference )

type Easing
dim as double x
dim as integer is_complete
dim as EasingRunning running
dim as EasingCompleted completed

declare function time_step( byval t as double ) as double

declare constructor()
declare constructor( byval running_callback as EasingRunning, byval completed_callback as EasingCompleted )
declare constructor( byval running_callback as EasingRunning )

declare static function linear( byval t as double ) as double
declare static function exponential( byval t as double ) as double
declare static function logarithmic( byval t as double ) as double
end type

constructor Easing( byval running_callback as EasingRunning, byval completed_callback as EasingCompleted )
running = running_callback
completed = completed_callback
end constructor

constructor Easing( byval running_callback as EasingRunning )
running = running_callback
end constructor

function Easing.time_step( byval t as double ) as double

dim as double y

x += t
if( x >= 1 ) then
x = 1
end if

y = running(x)

if( x = 1 ) then
is_complete = -1
if( completed <> 0 ) then completed( this )
end if

return y

end function

function Easing.linear( byval t as double ) as double
return t
end function

function Easing.exponential( byval t as double ) as double
return t * t
end function

function Easing.logarithmic( byval t as double ) as double
return (log((t * 10) + 1) / log(10)) / (log(11) / log(10))
end function

end namespace

using pritchard.animation

declare sub demo_easing( byval running_callback as EasingRunning, byval completed_callback as EasingCompleted )
declare sub linear_completed( byref easing as Easing )
declare sub exponential_completed( byref easing as Easing )
declare sub logarithmic_completed( byref easing as Easing )

sub main()

screenres 640, 240, 32

print "Linear easing"
demo_easing( @Easing.linear, @linear_completed )

print "Program complete."
sleep

end sub
main()

sub demo_easing( byval running_callback as EasingRunning, byval completed_callback as EasingCompleted )

dim as double x
var ease = type<Easing>( running_callback, completed_callback )

do

screenlock()
line ( x, 120 ) - ( x + 1, 160 ), rgb(255, 255, 255), bf
screenunlock()

sleep 16, 1

x = ease.time_step( 1 / 120 ) * 640

loop while ease.is_complete = 0

end sub

sub linear_completed( byref ease as Easing )
print "Linear easing completed."
sleep 1500
cls

print "Exponential easing"
demo_easing( @Easing.exponential, @exponential_completed )
end sub

sub exponential_completed( byref ease as Easing )
print "Exponential easing completed."
sleep 1500
cls

print "'Logarithmic' easing"
demo_easing( @Easing.logarithmic, @logarithmic_completed )
end sub

sub logarithmic_completed( byref ease as Easing )
print "Logarithmic easing completed."
sleep 1500
cls
end sub

Easing functions are of the form f(x) = y, where 0 <= x <= 1.  Easings only move in the positive direction for the purpose of this demo and are marked as complete once x >= 1.

19
Landeel, what a creative looking entry.

20
"One thing i have realised making this is that all games should come with a level editor!"

While level editors are awesome, it takes some amount of architectural genius to make a very complex game with a level editor.  "The Witness" ala Jonathan Blow seems to have a really high-tech editor, but I can't imagine that he prototyped/designed the game using it.

Source:  Me.  I've spent more time making editors for games than I have games.

Of course, if the level editor and game both run on the same engine, that can simplify things.

21
I'm excited to see the number of entries already in progress.  I'm glad the theme caught some traction :)

22
If needed, prioritize writing an entry for the competition over writing a tutorial.  I'm sure Lachie would agree that an article can wait and that this competition is our main event.

... Not saying the next issue couldn't use a tutorial, but we can always use more games.

23
I think you could make a game about seasons and nukes.

... Just sayin.

24
Game Dev / Old Game "Design"
« on: May 05, 2012, 09:02:08 PM »
I may start dumping some of the old work I recently recovered from archives.  For anyone who's interested, here's a "design document" I wrote while experimenting with different ways to describe game rules and mechanics.  Anyone care to decrypt exactly what I was describing, here?

Features:

- A mathematical approach to describing the rules of game mechanics

- Entity.Property notation

- Entity[Array size] notation

- Notation for valid values of described object properties

- Notation attempts to answer queries in a pseudo-mathematical way, allowing direct translation to code.

Conclusion:  I never made this game, so I can't say it was very effective...  But I thought I'd share.

Code: [Select]
Edge:

Start.X
(<= 0 =>)
Start.Y
(<= 0 =>)
End.X
(<= 0 =>)
End.Y
(<= 0 =>)

Floor (Edge):

Width
(|End.X - Start.X|)
(> 0)
Height
(= 0)

Wall (Edge):

Width
(|End.X - Start.X|)
(> 0)
Height
(|End.Y - Start.Y|)
(> 0)

Hill:

Rise (Edge)
Start.Y
(= 0)
Fall (Edge)
Start.X
(= Rise.End.X)
Start.Y
(= Rise.End.Y)
End.X
(> Rise.End.X)
End.Y
(= 0)
Peak
X
(= Rise.End.X)
(= Fall.Start.X)
Y
(= Rise.End.Y)
(= Fall.Start.Y)

Surface:

(Assume All Objects are On or Above a 'Surface')
Edge.Length
(> 0)
Edge.Count
(>= 1)
Edge[Edge.Count] (Edge)
(Edge[N].Start.Y = Edge[N].End.Y  = 0)
(Edge.Length = |Edge[N].Start.X - Edge[N].End.X|)
(Edge[N].Start.X = Edge[N-1].End.X)

Jump:

Rise.Speed
(>= 0)
Fall.Speed
(>= 0)
Height
(>= 0 <= Max Height)
Retain.Time
(>= 0 <= Retain.Max Time)

Jump Time:

(QUERYLIST)
What amount of 'Time' passes -ascending and descending- -to and from- 'Jump.Height'?
What is the 'Total Time' of a 'Jump'?

(QUERY)  What amount of 'Time' passes -ascending and descending- -to and from- 'Jump.Height'?
Jump.Rise.Time
(Jump.Height / Jump.Rise.Speed)
Jump.Fall.Time
(Jump.Height / Jump.Fall.Speed)

(QUERY)  What is the 'Total Time' of a 'Jump'?
Jump.Total Time
(Jump.Rise.Time + Jump.Fall.Time + Jump.Retain.Time)

Body (Wall):

Jump (Jump)
(References to 'Jump' should imply a 'Body')

Jump Width on a Surface; Max Jump Width:

(QUERYLIST)
What is the 'Total Width' of a 'Jump'?
When executing 'Jump', what is the 'Local Width' between 'Body' and 'Floor'?
What are the Min & Max Thresholds for a 'Jump' to Clear a 'Floor'?

Surface.Speed
(<= 0 >=)

(QUERY)  What is the 'Total Width' of a 'Jump'?
Jump.Total Width
(Jump.Total Time * Surface Speed)

(QUERY)  When executing 'Jump', what is the 'Local Width' between 'Body' and 'Floor'?
Jump.Floor.Local Width
((Body.End.X - Floor.Start.X) - Jump.Total Width)
Jump.Floor.Local Time
(Jump.Local Width / Surface.Speed)

(QUERY)  What are the Min & Max Thresholds for a 'Jump' to Clear a 'Floor'?
Jump.Floor.Unreachable
(Jump.Floor.Local Width > 0)
Jump.Floor.Unclearable
(Jump.Floor.Local Width <= 0)
(Jump.Floor.Local Width > -(Floor.Length + Body.Width))

Floor Difficulty Thresholds:

(QUERYLIST)
How much non-'Floor' 'Width' and 'Time' exists between 'Jump's?
Adjusting for 'Body', how would the above query be re-calculated?
What measurement would we use to judge the 'Difficulty' of a 'Floor' 'Jump'?

(QUERY)  How much non-'Floor' 'Width' and 'Time' exists between 'Jump's?
Jump.Floor.Empty Width
(Floor[n].End.X - Floor[n+1].Start.X)
Jump.Floor.Empty Time
(Jump.Floor.Free Width * Jump.Floor.Free Time)

(QUERY)  Adjusting for 'Body', how would the above query be re-calculated?
Jump.Floor.Safe Width
(Jump.Floor.Empty Width - (Body.End.X - Floor[n].End.X))
Jump.Floor.Safe Time
(Jump.Floor.Safe Width * Surface.Speed)

(QUERY)  What measurement would we use to judge the 'Difficulty' of a 'Floor' 'Jump'?
Jump.Empty.Difficulty
(>= 0 <= 1)
(1 - ((Jump.Floor.Safe Time - Floor.Timing.Hardest) / (Floor.Timing.Easiest - Floor.Timing.Hardest)))
Jump.Floor.Difficulty
(>= 0 <= 1)
((Floor.Width + Body.Width) / Jump.Total Width)

Clearing Walls; Jump.Height per Jump.Width:

(QUERYLIST)
What is the 'Ratio' between 'Jump.Width' and 'Jump.Height'?
What 'Wall' conditions are always 'Unclearable'?
When executing 'Jump' State n until 'Body.n.X' = 'Wall.n.X', what is the 'Local Height' of a 'Wall'?
What are the Min & Max Thresholds for a 'Jump' to Clear a 'Wall'?

(QUERY)  What is the 'Ratio' between 'Jump.Width' and 'Jump.Height'?
Jump.Rise per Run
(Jump.Rise.Speed / Surface.Speed)
Jump.Fall per Run
(Jump.Fall.Speed / Surface.Speed)
Jump.Run per Rise
(Surface.Speed / Jump.Rise.Speed)
Jump.Run per Fall
(Surface.Speed / Jump.Fall.Speed)

(QUERY)  What 'Wall' conditions are always 'Unclearable'?
Jump.Wall.Too High
(Wall.Height > Jump.Max Height)
Jump.Wall.Too Long
(Wall.Width > (Jump.Total Width - Body.Width))

(QUERY)  When executing 'Jump' State n until 'Body.n.X' = 'Wall.n.X', what is the 'Local Height' of a 'Wall'?
Jump.Wall.Rise.Local Height
(Wall.Height - ((Body.End.X - Wall.Start.X) * Jump.Rise per Run))
Jump.Wall.Retain.Local Height
(Wall.Height - Jump.Height)
Jump.Wall.Fall.Local Height
(Wall.Height - (Jump.Height - ((Body.Start.X - Wall.End.X) * Jump.Fall per Run)))

(QUERY)  What are the Min & Max Thresholds for a 'Jump' to Clear a 'Wall'?
Jump.Wall.Unreachable
(Jump.Wall.Rise.Local Height > 0)
Jump.Wall.Unclearable
(Jump.Wall.Retain.Local Height > 0)
(Jump.Wall.Fall.Local Height > 0)

Wall Difficulty Thresholds:

(QUERYLIST)
What is the minimum 'Width' accumulated during 'Jump.Fall' after clearing a 'Wall'?
What is the minimum 'Empty Width' needed for a 'Wall' 'Jump.Rise' to be 'Safe'?
What measurements would we use to judge the difficulty of a 'Wall' 'Jump'?

(QUERY)  What is the minimum 'Width' accumulated during 'Jump.Fall' after clearing a 'Wall'?
Jump.Wall.Fall.Width
(Jump.Run per Fall * Wall.Height)

(QUERY)  What is the minimum 'Empty Width' needed for a 'Wall' 'Jump.Rise' to be 'Safe'?
Jump.Wall.Empty.Safe Width
(Body.Width + Jump.Wall.Fall.Width + (Wall.Height * Jump.Run per Rise))
Jump.Wall.Empty.Safe Time
(Jump.Wall.Empty.Safe Width / Surface.Speed)

(QUERY)  What measurements would we use to judge the difficulty of a 'Wall' 'Jump'?
Jump.Wall.Difficulty.Empty
(>= 0 <= 1)
(1 - ((Jump.Wall.Safe Time - Wall.Timing.Hardest) / (Wall.Timing.Easiest - Wall.Timing.Hardest)))
Jump.Wall.Difficulty.Width
(>= 0 <= 1)
((Wall.Width + Body.Width) / Jump.Total Width)
Jump.Wall.Difficulty.Height
(>= 0 <= 1)
(Wall.Height / Jump.Max Height)

Clearing Hills; Hill Slope & Jump Slope:

(QUERYLIST)
What is 'Hill.Width'?
What is the 'Ratio' between 'Hill.Height' and 'Hill.Width'?
What 'Hill' conditions are always 'Unclearable'?
What 'Hill' conditions are always 'Clearable'?
When executing 'Jump' State n until 'Body.n.X' = 'Hill.n.X', what is the 'Local Height' of 'Hill'?
What are the Min & Max Thresholds for a 'Jump' to Clear a 'Hill'?

(QUERY)  What is 'Hill.Width'?
Hill.Rise.Width
(Hill.Rise.Start.X >= Hill.Peak.X)
(|Hill.Rise.Start.X - Hill.Peak.X|)
(Hill.Rise.Start.X <  Hill.Peak.X)
(= 1)
Hill.Fall.Width
(Hill.Peak.X >= Hill.Fall.End.X)
(|Hill.Peak.X - Hill.Fall.End.X|)
(Hill.Peak.X <  Hill.Fall.End.X)
(= 1)
Hill.Width
(Hill.Rise.Width + Hill.Fall.Width)

(QUERY)  What is the 'Ratio' between 'Hill.Height' and 'Hill.Width'?
Hill.Rise per Run
(Hill.Peak.Y / Hill.Rise.Width)
Hill.Fall per Run
(Hill.Peak.Y / Hill.Fall.Width)
Hill.Run per Rise
(Hill.Rise.Width / Hill.Peak.Y)
Hill.Run per Fall
(Hill.Fall.Width / Hill.Peak.Y)

(QUERY)  What 'Hill' conditions are always 'Unclearable'?
Jump.Hill.Too High
(Hill.Peak  > Jump.Max Height )
Jump.Hill.Too Long
(Hill.Width > Jump.Total Width)

(QUERY)  What 'Hill' conditions are always 'Clearable'?
Jump.Hill.Rise.Clearable
(Hill.Run per Rise > Jump.Run per Rise)
((Jump.Rise.Time * Jump.Rise.Speed) >= Hill.Peak.Y)
((Jump.Rise.Time * Surface.Speed) + Body.Width >= Hill.Peak.X)
Jump.Hill.Retain.Clearable
(Jump.Height >= Hill.Peak.Y)
((Jump.Retain.Time * Surface.Speed) >= Hill.Width)
Jump.Hill.Fall.Clearable
(Hill.Rise per Run > Jump.Rise per Run)
(Jump.Height >= Hill.Peak.Y)
(Body.Start.X > Hill.Peak.X)

(QUERY)  When executing 'Jump' State n until 'Body.n.X' = 'Hill.n.X', what is the 'Local Height' of 'Hill'?
(Just a side note - The jump state is executed until X axis collision, which is how the height comparison works ;)
Jump.Hill.Rise.Local Height
(Hill.Peak.Y - ((Body.End.X - Hill.Peak.X) * Jump.Rise per Run))
Jump.Hill.Fall.Local Height
(Body.Start.X > Hill.Peak.X)
(Hill.Peak.Y - (Jump.Height - ((Body.Start.X - Hill.Peak.X) * Jump.Fall per Run)))
Jump.Hill.Land.Local Width
(Hill.Peak.X > Hill.Fall.End.X)
((Body.Start.X + (Jump.Height * Jump.Run per Rise)) - Hill.Fall.End.X)

(QUERY)  What are the Min & Max Thresholds for a 'Jump' to Clear a 'Hill'?
Jump.Unreachable
(Jump.Hill.Rise.Local Height > 0)
Jump.Unclearable
(Jump.Hill.Fall.Local Height > 0)
(Jump.Hill.Fall.Local Width  > 0)

Hill Difficulty Levels:

(QUERYLIST)
What is the minimum 'Width' accumulated during 'Jump.Fall' after clearing a 'Hill'?
What is the minimum 'Empty Width' required for a 'Hill' 'Jump.Rise' to be 'Safe'?
What measurements would we use to judge the difficulty of a 'Hill' 'Jump'?

(QUERY)  What is the minimum 'Width' accumulated during 'Jump.Fall' after clearing a 'Hill'?
Jump.Hill.Fall.Safe Width
(Hill.Peak.X <= Hill.Fall.End.X)
(Jump.Run per Fall * Hill.Peak.Y)
(Hill.Peak.X >  Hill.Fall.End.X)
(Hill.Run per Fall >= Jump.Run per Fall)
(0)
(Hill.Run per Fall <  Jump.Run per Fall)
((Hill.Peak.Y * Jump.Run per Fall) - Hill.Fall.Width)
Jump.Hill.Fall.Safe Time
(Jump.Hill.Fall.Safe Width / Surface.Speed)

(QUERY)  What is the minimum 'Empty Width' required for a 'Hill' 'Jump.Rise' to be 'Safe'?
Jump.Hill.Rise.Safe Width
(Hill.Peak.X >= Hill.Rise.Start.X)
(Body.Width + Jump.Hill.Fall.Safe Width + (Hill.Peak.Y * Jump.Run per Rise))
(Hill.Peak.X <  Hill.Rise.Start.X)
(Hill.Rise per Run <= Jump.Rise per Run)
(Jump.Hill.Fall.Safe Width + Body.Width)
(Hill.Rise per Run >  Jump.Rise per Run)
((Jump.Hill.Fall.Safe Width + Body.Width) + ((Hill.Peak.Y * Jump.Run per Rise) - Hill.Rise.Width))
Jump.Hill.Rise.Safe Time
(Jump.Hill.Rise.Safe Time / Surface.Speed)

(QUERY)  What measurements would we use to judge the difficulty of a 'Hill' 'Jump'?
Jump.Hill.Difficulty.Rise
(>= 0 <= 1)
(1 - ((Jump.Hill.Rise.Safe Time - Hill.Rise.Timing.Hardest) / (Hill.Rise.Timing.Easiest - Hill.Rise.Timing.Hardest)))
Jump.Hill.Difficulty.Fall
(>= 0 <= 1)
(1 - ((Jump.Hill.Fall.Safe Time - Hill.Fall.Timing.Hardest) / (Hill.Fall.Timing.Easiest - Hill.Fall.Timing.Hardest)))
Jump.Hill.Difficulty.Peak
(>= 0 <= 1)
(Hill.Peak.Y / Jump.Max Height)

25
Work In Progress / Re: Relativity Engine/Relativity (Rescue The Colors)
« on: February 05, 2012, 10:35:46 PM »
Whatever happened to this?

26
Competitions / Re: Rescue The Colors Competition Community Poll
« on: February 04, 2012, 09:11:58 PM »
Congratulations to all the contestants for their entries!  I know how difficult it is to tug along and actually "get it done"*.

It's nice to see my name turn up in the credits of a game.  It's been a while :)

* Interestingly enough, my current employers are very result-oriented.  Maybe I'll be a game developer some day, after all!

27
Good luck, guys!   :D

28
General Discussion / Why I'm Not Impressed with CryEngine
« on: April 02, 2010, 08:37:47 AM »
Crysis has become notorious for two things - being impossible to run on a mediocre PC, and having some of the most beautiful environments ever seen in a video game.  The developers have announced a sequel, Crysis 2, which will utilize their new game engine, CryEngine 3.  Press releases are yet again praising the game's environments.  It seems to them, CryEngine 3 makes things about as real they can get.  I disagree.  Strongly.

Impressive or Not? (I think not.)  CryEngine 3 GDC Showcase Image:  http://en.wikipedia.org/wiki/File:Cryengine3_screenshot.png

You might think I'm crazy.  But what I think is that CryEngine 3 is nothing more than an advanced texture renderer and lighting system.  Careful analysis of the scenery and lighting reveals that there's not much to be impressed about, especially in terms of "realism".

A truly natural landscape can not be modeled as a smooth surface; it would have protrusions and indentations.  The lack of surface protrusions from rocks, and the lack of indentation due to prolonged water flow, sticks out like a sore thumb as blatantly unrealistic.  This "natural environment" is just a smooth surface with pretty textures mapped onto it, and not in a technologically remarkable manner, either.  For example, analysis of "transitional" textures (ex - points between rock and dirt) reveals that environments in CryEngine 3 transition by texture blending, which is the standard, non-impressive way to distinct one environmental feature from another.  It's also completely unrealistic.  In real life, you're either a rock or dirt, not a blended transition between the two.

The lighting isn't impressive, either.  CryEngine 3 employs the most highly abused trick to pseudo-realistic lighting:  Over-light and glow or under-light and blacken to hide details.  Or do both and trick us into seeing more dynamic, "natural" lighting than actually exists.  If you were to remove high and low luminosities and pay attention only to the "average" light range, you'd see a low detail environment with flat lighting layered over it.  Further exemplifying CryEngine 3's lack of realism, follow the lighting from the river to the mound on the left.  You can actually the polygonal form of the environment.  Once again, we reveal an environment that is nothing more than a smooth surface with pretty texture mapping - oh, and some glowing.


So I don't know too much about the physics of Crysis or dynamics which may reveal themselves during live play, but we know certain things don't change no matter what state a game's in.  None of those things, which will hang over the game's head all through its play, impress me at this point.

Thank you,
Pritchard

29
General Discussion / Re: Understanding Games series
« on: December 18, 2008, 08:12:10 AM »
It's only educational when you play through and analyze.  I think it's pretty basic but very neat.  Only took a glimpse at it really, but an analytical one lol.

30
General Discussion / Understanding Games series
« on: December 17, 2008, 02:14:17 PM »
You can probably tell that I've been doing research lately...  Anyways, you might want to check out the Understanding Games series found here -

http://www.kongregate.com/accounts/pixelate

Pages: 1 [2] 3 4 ... 11