Quote from: GildedSpaceHydra on Yesterday at 21:56:30Additionally, every time the tint changes, it seems to stack (like maybe the previous DynamicSprite isn't being removed before the new tint is added: the more time advances, the darker the screen gets).
QuoteYou must make a copy of original background when you enter the room and save it in a DynamicSprite variable for using in drawing, because next time you call "DynamicSprite.CreateFromBackground" it will return a already modified background.
// new module header
#define MINUTES_PER_MINUTE 1 // in-game time is 10 times faster
enum TimeOfDay {
eTODMorning = 0, eTODMidday = 1, eTODEvening = 2, eTODNight = 3
};
import void TimePasses(int minutes);
import int _minutes; //= 600;
// new module script
// game starts at 10:00 on day 1
int _minutes = 600;
export _minutes;
int _day = 1;
TimeOfDay _timeOfDay = eTODMorning;
export _timeOfDay;
// background tint stuff
DynamicSprite* bgSprite;
DrawingSurface *bgSurface;
void UpdateScreen() {
// tint screen, update label, etc.
// display time on label
int hours = _minutes / 60;
int minutes = _minutes % 60;
lblTime.Text = String.Format("%02d:%02d", hours, minutes);
Display("Displaying time on label.");
// display TimeOfDay
if (_timeOfDay == eTODMorning) {
//TimeOfDay = eTODMorning;
lblTimeOfDay.Text = String.Format("Day %d: Morning", _day);
//Tint characters & objects
SetAmbientTint(64, 64, 0, 50, 75);
//Tint room background
bgSprite = DynamicSprite.CreateFromBackground(GetBackgroundFrame());
bgSprite.Tint(64, 64, 0, 50, 75);
bgSurface = Room.GetDrawingSurfaceForBackground();
bgSurface.DrawImage(0, 0, bgSprite.Graphic);
bgSurface.Release();
bgSprite.Delete();
}
else if (_timeOfDay == eTODMidday) {
//TimeOfDay = eTODMidday;
lblTimeOfDay.Text = String.Format("Day %d: Mid-Day", _day);
//Tint characters & objects
SetAmbientTint(0, 0, 0, 0, 100);
//Tint room background
bgSprite = DynamicSprite.CreateFromBackground(GetBackgroundFrame());
bgSprite.Tint(0, 0, 0, 0, 100);
bgSurface = Room.GetDrawingSurfaceForBackground();
bgSurface.DrawImage(0, 0, bgSprite.Graphic);
bgSurface.Release();
bgSprite.Delete();
}
else if (_timeOfDay == eTODEvening) {
//TimeOfDay = eTODEvening;
lblTimeOfDay.Text = String.Format("Day %d: Evening", _day);
//Tint characters & objects
SetAmbientTint(0, 0, 128, 50, 75);
//Tint room background
bgSprite = DynamicSprite.CreateFromBackground(GetBackgroundFrame());
bgSprite.Tint(0, 0, 128, 50, 75);
bgSurface = Room.GetDrawingSurfaceForBackground();
bgSurface.DrawImage(0, 0, bgSprite.Graphic);
bgSurface.Release();
bgSprite.Delete();
}
else {
//TimeOfDay = eTODNight;
lblTimeOfDay.Text = String.Format("Day %d: Night", _day);
//Tint characters & objects
SetAmbientTint(0, 0, 128, 75, 50);
//Tint room background
bgSprite = DynamicSprite.CreateFromBackground(GetBackgroundFrame());
bgSprite.Tint(0, 0, 128, 75, 50);
// Now copy it back to the background
bgSurface = Room.GetDrawingSurfaceForBackground();
bgSurface.DrawImage(0, 0, bgSprite.Graphic);
// Clean up
bgSurface.Release();
bgSprite.Delete();
}
}
void TimePasses(int minutes) {
Display("Time passes.");
_minutes += minutes;
// if end of day was reached
if (_minutes >= 1440) {
_minutes -= 1440;
_day++;
}
UpdateScreen();
TimeOfDay now = ((_minutes + 240) / 360) % 4;
if (now != _timeOfDay) {
_timeOfDay = now;
UpdateScreen();
}
}
function game_start() {
//UpdateScreen();
}
int _frames;
function repeatedly_execute() {
//Display("Repeatedly exceute.");
if (lblTime.Text == "") {
UpdateScreen();
}
// increase by one
_frames++;
//Display("Frame increased.");
// if a minute of IRL time has passed
if (_frames >= GetGameSpeed() * 60) {
_frames -= GetGameSpeed() * 60;
TimePasses(MINUTES_PER_MINUTE); // advance game time
}
}
By continuing to use this site you agree to the use of cookies. Please visit this page to see exactly how we use these.
Page created in 0.068 seconds with 12 queries.