Menu

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.

Show posts Menu

Messages - Scavenger

#181
Oh! I wasn't expecting to win! I'll have something prepared in a day or so! Thankyou everyone, for voting for me :3 And congratulations to everyone else who entered, too. x3
#182
Critics' Lounge / Re: Spriting a Seal
Thu 25/02/2016 09:56:03
OK, fixed the ones I'm capable of doing:

[imgzoom]https://dl.dropboxusercontent.com/u/50882197/art/GameStuff/Harper_Seals_02.PNG[/imgzoom]

But I still have no idea how to visualize the back view.
#183
Critics' Lounge / Re: Spriting a Seal
Thu 25/02/2016 07:00:38
He transforms, yeah. I wanted to keep his hair between forms,but he definitely turns into an actual seal.
#184
General Discussion / Re: Ketchup Rush
Wed 24/02/2016 22:03:56
I dunno, using gross caricatures of fat people as your enemy (whose sole goal is to mindlessly persue and devour a living hamburger??) just feels a bit off to me. It certainly doesn't make me want to play it.

Like, it feels kind of boring and insulting? Like "fat people go crazy for food", haa haa haa,  I've certainly heard that a million times. (roll)
#185
Critics' Lounge / Spriting a Seal
Wed 24/02/2016 21:05:15
I'm trying to sprite a seal-version of a character (he's a selkie, turning into a seal is his thing), but I'm having some trouble making the front, back, and the back-right sprite look right. I'm most pleased with the side view, it looks most like the chunky weird-not-quite seal I was going for. I'm just not entirely sure how to do the other views and have them read right. Especially the back view - every attempt I've done just looks like a mess.

[imgzoom]https://dl.dropboxusercontent.com/u/50882197/art/GameStuff/Harper_Seal_Sprites.PNG[/imgzoom]

Does anyone have any tips? Thank you in advance!
#186
Unfortunately, you have to make it in a font editor.

AGS, I believe, doesn't even generate a font, it just draws the normal font at (X+1,Y), (X-1,Y),(X,Y+1) and (X,Y-1) underneath in the outline colour.

And I guess you could do that too, if you make the GUI Control a button instead of a label:

Code: AGS

int text_color = 15;
int outline_color = 16;

DynamicSprite *textlabel;

function UpdateLabel (String text, int font)
{
    int w = GetTextWidth (text, font);
    int h = GetTextHeight(text, font, w);
    DynamicSprite *outline;
    DynamicSprite *textemp;
    if (textlabel) textlabel.Delete ();
    textemp = DynamicSprite.Create (w+2,h+2);
    textlabel = DynamicSprite.Create (w+2,h+2);
    outline = DynamicSprite.Create (w+2,h+2);
    DrawingSurface *surf = textemp.GetDrawingSurface ();
    surf.DrawingColor = textcolor;
    surf.DrawStringWrapped(1, 1, w+1, font, eAlignCentre /*or whatever*/, text);
    surf.Release ();
    surf = outline.GetDrawingSurface ();
    surf.Clear (outline_color);
    surf.Release ();
    outline.CopyTransparencyMask (textemp);
    surf = textlabel.GetDrawingSurface ();
    surf.DrawImage (0,1 ,outline.Graphic);
    surf.DrawImage (1,0 ,outline.Graphic);
    surf.DrawImage (0,-1,outline.Graphic);
    surf.DrawImage (-1,0,outline.Graphic);
    surf.DrawImage (0,0,textemp.Graphic);
    surf.Release ();
    btnWhateverTheButtonIs.NormalGraphic = textlabel.Graphic;
    outline.Delete ();
    textemp.Delete ();
}
#187
You can change the colour of the outline with:

Code: AGS
game.text_shadow_color = x;


but that changes ALL outline colours. If you just want your label to have a specific outline colour, make a new label with an outline font, set the colour there, and overlay it over the top of the real label.
#188
I'm using 3.2.1 at the moment, so I can't use dialog_options_rep_exec yet.

The method you supplied works, but when I enable "run game loops while dialog options are visible" in the settings, it immediately turns the translucent background off. It seems that dialog_options_render doesn't run every loop, only when the player moves over a different dialog option. I'll have to either not run game loops while the dialog is up, or think of a different way.

It does work perfectly when game loops aren't running at the same time, though!
#189
I'm trying to create a dialog GUI for my game, and as part of my interface I have a semitransparent black box* that underlays most GUIs. It's done with:

Code: AGS
Translucence.CreateOverlay (50, dialog_bg.Graphic, 128, 1, info.X, info.Y);


and I can remove it with:

Code: AGS
Translucence.DeleteOverlay (50);


I need the overlay up when the dialog options are being shown, and to be deleted when the dialog options go away, but I'm not sure how to check whether the dialog options are being shown or not. If it helps, I'm using Austauber's CustomDialogGUI module, so using the custom dialog rendering functions is no problem. Is there any way to do this, or am I stuck with putting the code to turn it off in the dialog code itself?

*Using 8-bit mode, so I can't use the standard translucency functions.
#190
Alternatively, if you want to do it from the editor, make a new boolean Property for InventoryItems called "IsKey", and set it to true for each key in your game. Then, you can go:

Code: AGS

if (player.ActiveInventory.GetProperty ("IsKey")) Display ("Say what");


Regardless of the amount of different keys your game has.
#191
Line 350 has this typo:

Code: AGS
  StartCutscene(eSkipESCOnly);' //extraneous apostrophe


Could you remove it, clear out the &709 and try to do the auto-number lines again?
#192
Khris: This works perfectly! The skybox is scrolling just like it should. Thankyou!
#193
Okay, so, I have no gauge on whether a woman is attractive or not, but my friend does. I asked her, what an attractive villain would be, and she drew this:



And using her design, I sprited this:
[imgzoom]https://dl.dropboxusercontent.com/u/50882197/art/drosera.gif[/imgzoom]
She's based off of the Sundew, so she's definitely an attractive plant-person.
#194
I'm trying to draw a skybox correctly based off of the player's angle, but I don't think I'm doing it right, and I couldn't find anything on google to show me how to draw it properly. I have to start with a direction vector, and I think you're supposed to use atan2 on that to get the radians, but...

Currently I have:

Code: C++

        double playerrad = atan2 (dirY,dirX);
	if (!sbBm) engine->AbortGame ("Raycast_Render: No valid skybox sprite.");
	if (skybox > 0)
	{
		int xoffset = (int)(playerrad*320.0);
		BITMAP *virtsc = engine->GetVirtualScreen ();
		engine->SetVirtualScreen (screen);
		xoffset = abs(xoffset % w);
		if (xoffset > 0)
		{
			engine->BlitBitmap (xoffset-320,1,sbBm,false);
		}
		engine->BlitBitmap (xoffset,1,sbBm,false);
		engine->SetVirtualScreen (virtsc);
	}


But it only works for half of the angles, the other half makes the skybox move in reverse, and it looks terrible. How are you supposed to do it correctly? Math with angles has always been my weakpoint.
#195
Well, you did use "standard attractive Disney Princesses as evil villains" as the header image, and you didn't mention different body types or anything at all that would clarify that you wanted a nonstandard attractive female villain. So, it really wasn't clear that breaking out of the standard paradigm was what you wanted. It really did look like you just wanted the standard. So you can't really blame Cat for that! And we have plenty of "attractive" female villains... they're just usually there to seduce the hero with their sexual wiles. :\

I wouldn't pull the "you're offended" card, though. It's more "I'm tired of this cliché." than offense. And it seems like women can only be attractive, like that's always the main thrust behind designing them. They can be other things, badass, evil, or funny, but they have to be SEXY badass, SEXY evil, or SEXY funny, and the emphasis always has to be on the SEXY. It gets really tiresome.

If you really wanted people to think about how women were designed, and to break out from that, why don't you state it in your opening post instead of focusing on "make em beauties"? x3
#196
Thanks Snarky! I tried out your suggestion and it works perfectly! It looks incredibly pretty and using a multiply layer really helps to maintain the luminosity of the colours! That's way better than what I had before!

On a different note, though, is there anyone who can speak Hawai'ian, Samoan or another of the Polynesian language family on these forums? I need some help translating some names, I can't seem to find the right words myself.
#197
Quote from: Jack Lucy on Sun 24/01/2016 23:47:44
Yeah, it's not like the US was able to invade Iraq and Afghanistan again because of 9/11 and some equally fake "yellow cake" which was trumpeted far and wide by the media. It's not like military spending skyrocketed after 9/11, growing the industry by trillions each year. It's not like 9/11 has been used to invoke a permanent state of emergency in the us, and to revoke habeus corpus, directly opposing the US constitution.

Are you serious?

Yeah, I'm serious.

The government didn't need to orchestrate their own tragedy, they only needed to capitalize on one. Seizing on an opportunity doesn't necessarily mean that they created that opportunity*. You want to believe that someone is to blame, I know, it was a huge tragedy, but there's nothing to be gained from trying to grasp at straws. All the 9/11 truther shit I've ever read showed a huge lack of understanding of basic physics, metallurgy, chemistry, and history. I won't try to debunk that side of it, because it's already been done.

But seriously, the amount of people involved in an operation this big would be staggering, and the government would never be able to keep it quiet. Conspiracy theories rely on the enemy being simultaneously The Smartest, Most Flawless Beings Who Can Hide Everything From Everyone, and also stupid enough to do these elaborate plans that the average Truther can see through because they're so smart.

Nope, if history has taught us anything, it's that shit be messing up all over the place, and then people try to take advantage of it.

I mean, what's more likely:
- The Government/Illuminati/Federal Reserve/Rothschilds/Jews/Aliens are these superbeings who come up with a plan to demolish the WTC buildings using Death Rays/Disintegration Beams/Synchronised Explosives/The Hand of God while covering it up with Advanced Holograms of a Plane/A Real Plane but Empty/Also a Plane But Just Obvious Misdirection, thus ensuring that people will be skeptical of a plane's ability to take out the World Trade Center, and forgetting that if they pretended the Terrorists had Death Rays/Disintegration Beams/The Ability to Plant Explosives/The Hand of God they could more easily strike fear into the hearts of Americans.

- A Plane crashed into the World Trade Center and the architects/engineers made a mistake, and didn't expect a massive aeroplane to actually hit it. You know, like architects can do, being human and not having their math right.



*Well, except by decades of imperialist action stirring tensions in the middle east. You could say that America created that.
#198
I wonder why people fixate on 9/11 and mind controlling flourides in the water for reasons why the government is being bad to them.

Like, there are plenty of things that are wrong that you could be thinking about that don't involve expensive impossible death rays. Like, lack of proper water sanitation leading to dangerously high levels of lead in the water in Michigan. That kind of thing is real, you can see it, it's provable, and the reason is pretty clear: Negligence and trying to steal resources away from poor people (they didn't put proper water purification in to save $1200 a year, from what I've heard)

But no, we gotta have people trying to work out exactly what massive death ray the government used on a wealthy american business center. It was a tragedy, but the government doesn't stand to gain anything from doing it. Like, if they wanted to test out a death ray, they have places they can do that that wouldn't make Americans hate them. I mean, my god, motive is kind of important.

#199
EDIT: I just did a quick hack so I didn't have to delete or initalize more than once. It's a dirty hack, and it means I can only use it for my game, but eh, I can reprogram later.

Hey, I'm having quite a complex issue that I'm not sure I can solve. I'm trying to make it so that my plugin saves its state and restores it along with the regular save game, and I can make it load the state, whatever it is, just once. Trying to load a save game twice during the same process crashes the engine (with error code 0xC0000005, which I believe is array out of bounds), and the reasons why mystify me. Why would it allow you to load the game once, but not twice? What is it about the second time that makes the engine freak out?

I'm not sure how much use pasting code will be, there is a whole lot of it, but here is the save/load code I'm using, and the variables I'm saving:

Code: C++

  bool raycastOn;
  bool heightmapOn;
  double posX = 22.0, posY = 11.5; //x and y start position
  double dirX = -1.0, dirY = 0.0; //initial direction vector
  double planeX = 0.0, planeY = 0.77; //the 2d raycaster version of camera plane
  double moveSpeed = (1.0/60.0) * 3.0; //the constant value is in squares/second
  double rotSpeed =  (1.0/60.0) * 2.0; //the constant value is in radians/second
  unsigned char **worldMap;
  unsigned char **lightMap;
  int **ceilingMap;
  int **floorMap;
  int **heightMap;
  int mapWidth;
  int mapHeight;
  int textureSlot;
  struct Sprite
  {
 	double x;
	double y;
	int texture;
	unsigned char alpha;
	int blendmode;
	double uDivW;
        double uDivH;
	double vMove;
	double hMove;
	char objectinteract;
	int view;
	int frame;
	int angle;
  };
  #define numSprites 256
  Sprite sprite[numSprites] = {};

  
  #define texWidth 64
  #define texHeight 64
  unsigned char **texture;

  long sWidth=0,sHeight=0;

  struct wallType
  {
	int texture[4];
	int solid[4];
	int ignorelighting[4];
	int alpha[4];
	int blendtype[4];
	int mask[4];
	unsigned char hotspotinteract;
  };

  wallType wallData[256]={};

 unsigned char **transcolorbuffer;
 unsigned char **transalphabuffer;
 double **transzbuffer;
 bool *transslicedrawn;
 int *transwallblendmode;
 double **ZBuffer;
 double *distTable;
 short *interactionmap;
 int skybox=0;



Code: C++

	if (event == AGSE_SAVEGAME)
	{
		for (int i = 0; i < MAX_OVERLAYS; ++i)
			{
				engine->FWrite(&overlay[i].sprite, sizeof(int), data);
				engine->FWrite(&overlay[i].spritemask, sizeof(int), data);
				engine->FWrite(&overlay[i].x, sizeof(int), data);
				engine->FWrite(&overlay[i].y, sizeof(int), data);
				engine->FWrite(&overlay[i].level, sizeof(int), data);
				engine->FWrite(&overlay[i].trans, sizeof(int), data);
				engine->FWrite(&overlay[i].blendtype, sizeof(int), data);
				engine->FWrite(&overlay[i].enabled, sizeof(bool), data);
			}
		engine->FWrite(&clutslot, sizeof(int), data);
		engine->FWrite(&drawreflections, sizeof(int), data);
		for (int j = 0; j < 256; ++j)
			{
				engine->FWrite(&cycle_remap[j], sizeof(unsigned char), data);
			}
		for (int j = 0; j < 256; ++j)
			{
				engine->FWrite(&objectivepal[j].r, sizeof(unsigned char), data);
				engine->FWrite(&objectivepal[j].b, sizeof(unsigned char), data);
				engine->FWrite(&objectivepal[j].g, sizeof(unsigned char), data);
			}
		for (int j = 0; j < 256; ++j)
			{
				engine->FWrite(&sprite[j].x, sizeof(double), data);
				engine->FWrite(&sprite[j].y, sizeof(double), data);
				engine->FWrite(&sprite[j].texture, sizeof(int), data);
				engine->FWrite(&sprite[j].alpha, sizeof(unsigned char), data);
				engine->FWrite(&sprite[j].uDivW, sizeof(double), data);
				engine->FWrite(&sprite[j].uDivH, sizeof(double), data);
				engine->FWrite(&sprite[j].vMove, sizeof(double), data);
				engine->FWrite(&sprite[j].hMove, sizeof(double), data);
				engine->FWrite(&sprite[j].objectinteract, sizeof(char), data);
				engine->FWrite(&sprite[j].view, sizeof(int), data);
				engine->FWrite(&sprite[j].frame, sizeof(int), data);
				engine->FWrite(&sprite[j].angle, sizeof(int), data);
			}
		for (int j = 0; j < 256; ++j)
			{
				for (int k = 0; k < 4;++k)
					{
						engine->FWrite(&wallData[j].texture[k], sizeof(int), data);
						engine->FWrite(&wallData[j].solid[k], sizeof(int), data);
						engine->FWrite(&wallData[j].ignorelighting[k], sizeof(int), data);
						engine->FWrite(&wallData[j].alpha[k], sizeof(int), data);
						engine->FWrite(&wallData[j].blendtype[k], sizeof(int), data);
						engine->FWrite(&wallData[j].mask[k], sizeof(int), data);
					}
				engine->FWrite(&wallData[j].hotspotinteract, sizeof(char), data);
			}
		engine->FWrite(&raycastOn, sizeof(bool), data);
		engine->FWrite(&heightmapOn, sizeof(bool), data);
		engine->FWrite(&posX, sizeof(double), data);
		engine->FWrite(&posY, sizeof(double), data);
		engine->FWrite(&dirX, sizeof(double), data);
		engine->FWrite(&dirY, sizeof(double), data);
		engine->FWrite(&planeX, sizeof(double), data);
		engine->FWrite(&planeY, sizeof(double), data);
		engine->FWrite(&moveSpeed, sizeof(double), data);
		engine->FWrite(&rotSpeed, sizeof(double), data);
		engine->FWrite(&sWidth, sizeof(long), data);
		engine->FWrite(&sHeight, sizeof(long), data);
		engine->FWrite(&mapWidth, sizeof(int), data);
		engine->FWrite(&mapHeight, sizeof(int), data);
		if (raycastOn) //If the raycaster is active, we have additional data to save.
		{
			for (int i = 0; i < mapWidth;++i)
				for (int j = 0;j < mapHeight;++j)
				{
					engine->FWrite(&worldMap [i][j], sizeof(unsigned char), data);
					engine->FWrite(&lightMap [i][j], sizeof(unsigned char), data);
					engine->FWrite(&ceilingMap [i][j], sizeof(int), data);
					engine->FWrite(&floorMap [i][j], sizeof(int), data);
					engine->FWrite(&heightMap [i][j], sizeof(int), data);
				}
		}
		engine->FWrite(extureSlot, sizeof(int), data);
		engine->FWrite(&skybox, sizeof(int), data);
	}
	if (event == AGSE_RESTOREGAME)
	{


		for (int i = 0; i < MAX_OVERLAYS; ++i)
			{
				engine->FRead(&overlay[i].sprite, sizeof(int), data);
				engine->FRead(&overlay[i].spritemask, sizeof(int), data);
				engine->FRead(&overlay[i].x, sizeof(int), data);
				engine->FRead(&overlay[i].y, sizeof(int), data);
				engine->FRead(&overlay[i].level, sizeof(int), data);
				engine->FRead(&overlay[i].trans, sizeof(int), data);
				engine->FRead(&overlay[i].blendtype, sizeof(int), data);
				engine->FRead(&overlay[i].enabled, sizeof(bool), data);
			}
		engine->FRead(&clutslot, sizeof(int), data);
		engine->FRead(&drawreflections, sizeof(int), data);
		for (int j = 0; j < 256; ++j)
			{
				engine->FRead(&cycle_remap[j], sizeof(unsigned char), data);
			}
		for (int j = 0; j < 256; ++j) //Save Objective Palette, for palette mixing.
			{
				engine->FRead(&objectivepal[j].r, sizeof(unsigned char), data);
				engine->FRead(&objectivepal[j].b, sizeof(unsigned char), data);
				engine->FRead(&objectivepal[j].g, sizeof(unsigned char), data);
			}
		for (int j = 0; j < 256; ++j) //Save Raycaster Sprite struct, 256 instances.
			{
				engine->FRead(&sprite[j].x, sizeof(double), data);
				engine->FRead(&sprite[j].y, sizeof(double), data);
				engine->FRead(&sprite[j].texture, sizeof(int), data);
				engine->FRead(&sprite[j].alpha, sizeof(unsigned char), data);
				engine->FRead(&sprite[j].uDivW, sizeof(double), data);
				engine->FRead(&sprite[j].uDivH, sizeof(double), data);
				engine->FRead(&sprite[j].vMove, sizeof(double), data);
				engine->FRead(&sprite[j].hMove, sizeof(double), data);
				engine->FRead(&sprite[j].objectinteract, sizeof(char), data);
				engine->FRead(&sprite[j].view, sizeof(int), data);
				engine->FRead(&sprite[j].frame, sizeof(int), data);
				engine->FRead(&sprite[j].angle, sizeof(int), data);
			}
		for (int j = 0; j < 256; ++j) //Save Raycaster wall type data.
			{
				for (int k = 0; k < 4;++k)
					{
						engine->FRead(&wallData[j].texture[k], sizeof(int), data);
						engine->FRead(&wallData[j].solid[k], sizeof(int), data);
						engine->FRead(&wallData[j].ignorelighting[k], sizeof(int), data);
						engine->FRead(&wallData[j].alpha[k], sizeof(int), data);
						engine->FRead(&wallData[j].blendtype[k], sizeof(int), data);
						engine->FRead(&wallData[j].mask[k], sizeof(int), data);
					}
				engine->FRead(&wallData[j].hotspotinteract, sizeof(char), data);
			}
		//Delete worldmap data if it exists.
		if (worldMap)
			{
				for (int j = 0;j < mapHeight;++j)
				{
					delete [] worldMap [j];
					delete [] lightMap [j];
					delete [] ceilingMap [j];
					delete [] floorMap [j];
					delete [] heightMap [j];
				}
				delete [] worldMap;
				delete [] lightMap;
				delete [] ceilingMap;
				delete [] floorMap;
				delete [] heightMap;
			}
		if (transcolorbuffer) //delete the buffers and dynamic arrays before loading new ones.
		{
			for (int x=0;x<sWidth;x++)
			{
				delete [] transcolorbuffer[x];
				delete [] transalphabuffer[x];
				delete [] transzbuffer[x];
				delete [] ZBuffer[x];
			}
		}
		engine->FRead(&raycastOn, sizeof(bool), data);
		engine->FRead(&heightmapOn, sizeof(bool), data);
		engine->FRead(&posX, sizeof(double), data);
		engine->FRead(&posY, sizeof(double), data);
		engine->FRead(&dirX, sizeof(double), data);
		engine->FRead(&dirY, sizeof(double), data);
		engine->FRead(&planeX, sizeof(double), data);
		engine->FRead(&planeY, sizeof(double), data);
		engine->FRead(&moveSpeed, sizeof(double), data);
		engine->FRead(&rotSpeed, sizeof(double), data);
		engine->FRead(&sWidth, sizeof(long), data);
		engine->FRead(&sHeight, sizeof(long), data);
		engine->FRead(&mapWidth, sizeof(int), data);
		engine->FRead(&mapHeight, sizeof(int), data);
		if (raycastOn) //If the raycaster is currently running, we have additional data to load.
			{
				worldMap = new unsigned char*[mapWidth];
				lightMap = new unsigned char*[mapWidth];
				ceilingMap = new int*[mapWidth];
				floorMap = new int*[mapWidth];	
				heightMap = new int*[mapWidth];
				for (int i = 0; i < mapWidth;++i)
					{
						worldMap[i] = new unsigned char[mapHeight];
						lightMap[i] = new unsigned char[mapHeight];
						floorMap[i] = new int[mapHeight];
						ceilingMap[i] = new int[mapHeight];
						heightMap[i] = new int[mapHeight];
						for (int j = 0;j < mapHeight;++j)
						{
							engine->FRead(&worldMap [i][j], sizeof(unsigned char), data);
							engine->FRead(&lightMap [i][j], sizeof(unsigned char), data);
							engine->FRead(&ceilingMap [i][j], sizeof(int), data);
							engine->FRead(&floorMap [i][j], sizeof(int), data);
							engine->FRead(&heightMap [i][j], sizeof(int), data);
						}
					}
				engine->FRead(extureSlot, sizeof(int), data);
				engine->FRead(&skybox, sizeof(int), data);
				//Reinitialize all the buffers and stuff.
				if (textureSlot) MakeTextures (textureSlot);
				delete [] transcolorbuffer;
				transcolorbuffer = new unsigned char*[sWidth];
				delete [] transalphabuffer;
				transalphabuffer = new unsigned char*[sWidth];
				delete [] transslicedrawn;
				transslicedrawn = new bool[sWidth];
				delete [] transzbuffer;
				transzbuffer = new double*[sWidth];
				delete [] transwallblendmode;
				transwallblendmode = new int [mapWidth];
				delete [] ZBuffer;
				ZBuffer = new double*[sWidth];
				delete [] distTable;
				distTable = new double[sHeight+(sHeight>>1)];
				delete [] interactionmap;
				interactionmap = new short[sWidth*sHeight];
				for (int y=0;y<sHeight+(sHeight>>1);y++)
				{
					distTable [y] = sHeight / (2.0 * y - sHeight);
				}
				for (int x=0;x<sWidth;x++)
				{
					transcolorbuffer[x] = new unsigned char [sHeight*(mapWidth)]();
					transalphabuffer[x] = new unsigned char [sHeight*(mapWidth)]();
					transzbuffer[x] = new double [sHeight*(mapWidth)]();
					ZBuffer[x] = new double [sHeight];
					transslicedrawn [x] = false;
				}
			}
		LoadCLUT (clutslot);
	}


I can supply anything else that's needed, but I'm getting a little confused with why it's doing it. It's kind of disheartening, as it works perfectly the first time. If it had just crashed the first time, I'd know I was doing something majorly wrong. But these kinds of bugs are really out of my league at the moment. See, the error messages that AGS kicks out when the plugin crashes doesn't really help me, as I don't know what line in my code corresponds to what offset in the error message. Is there any way I can check it at all?
#200
I'm doing some palette magic, and I want to have a day/night cycle. What's the best way to simulate sunset/night by changing RGB values? I know that, at night, blue light is affected the least and red light is affected the most, and I want the player to be able to see what they're doing (so I can't just blanket darken everything until it's pitch black).

What would be the best way to simulate the reddish hues of sunset, the blue caste of night, and a pinkish hue in the morning? I can interpolate between them, but I don't know what kinda formula I should be using on the colour channels.
SMF spam blocked by CleanTalk