Demo Screen:http://www.youtube.com/watch?v=3Pgd-T_Cdyo&feature=youtu.be
_____________________________________________________________________________________________________________________________________
- Create a empty bmp, same size like your scene bmp.
- Fill it completely with color "white"
- The areas, where the actor stands in the shadow, you can paint on your lightmap in a darker gray
- If the actor for example stands in front of a fire-place, you can paint this area in the lightmap red (Easiest way to use 2 layers, Photoshop, .NET Paint etc.)
_____________________________________________________________________________________________________________________________________
Embed the dll and call the function "GetRGB" in Game_loop.script.
Example:external "C:\LMDLL.dll" int GetRGB(string fName, int x, int y, int buflen, string buf);
// infinite loop of game_loop.script
while(true)
{
//Don't call func every pixel movement
if ( (actor.X % 5 == 0) || (actor.Y % 5 == 0) )
{
//Call the dll function and receive the lightmap-color values (RGB) at actors coordinates
GetRGB ("C:\LM.bmp", actor.X,actor.Y, str.Capacity,str);
//Split the result value in an array (RGB-values, I did not know how to send the 3 int values back from DLL, so I used a string)
arr = str.Split(";");
//Change actors color corresponding to lightmap
actor.AlphaColor = MakeRGBA(ToInt(arr[0]),ToInt(arr[1]),ToInt(arr[2]),255);
}
You can use gradients (black to white or lightgray) in lightmap, while the actor is walking in scene his color and brightness is changing :-)
P.S: Array and string I declared in base.inc
arr = new Array();
str = new String(100);
---------------------------------------------------------------------------------------------------------------
Because I have no webspace I can't put a link to the dll and example bmp.
If somebody likes to have the dll I'll send it to you via email
SOURCE OF DLL
=============
library LMDLL;
uses
Windows, SysUtils, Dialogs, Graphics, Classes;
{$R *.res}
function GetRGB(fName: string; x, y: integer; buflen: integer; buf: PChar): integer; stdcall;
var
aBmp: TBitmap;
iColor: Longint;
r,g,b: integer;
begin
try
aBmp := TBitmap.Create;
aBmp.LoadFromFile(fName);
iColor := ColorToRGB(aBmp.Canvas.Pixels[x,y]);
finally
aBmp.Free;
end;
r := GetRValue(iColor);
b := GetBValue(iColor);
g := GetGValue(iColor);
StrLCopy(buf, PChar(IntToStr(r) + ';' + IntToStr(g) + ';' + IntToStr(b)), buflen);
result := 0;
end;
exports GetRGB;
begin
end.