Changelog for fro/drm restructuring, following the Build 1.0.3 release. [There are quite a few missing logs. Mostly details regarding the Map Editor and Object Editor] 091112 - Converted Map to a Frame to allow children - Added console as Map::mChat, seperate from the system console. - WIDGET_FRAME type children will now fire ResizeChildren() when parent frame fires ResizeChildren() - Fixed url clicking (SDL_MOUSEBUTTONDOWN wasn't being passed, guiManager gave hasKeyFocus the event, not hasMouseFocus) - Fixed local actor only being able to move when the map or game::mMap::mChat is focused - Fixed #define issue for WIN32 (now being defined in core/Common.h until a fix can be found that doesn't involve windows.h global inclusion) - Fixed several bugs with map downloading Currently have tested: -Linked resource not found serverside (embedded php error code) -Linked resource references a file not found on the server - StaticObject now deletes cached resources it fails to load. - Key focus is passed to Map::mChat::mInput when Map::HasKeyFocus() 091113 - Removed Frame resizing fill color default (until we can find a faster alpha-blending rect renderer) - Added login dialog and welcome message reader - Added avatar favorites dialog - Starting adding command hooks to Map::mChat - Reimplemented and fixed input box history (pageup/pagedown accessible) - Added /music command (Might later add a winamp plugin to grab info directly from the app) - Added MessagePopup dialog May need to rewrite this, or write another version that is more like message boxes. 091114 - Added inventory dialog - Added encryption to dorra amount - Added a message to appear when player tries to use an inventory item (placeholder until they actually have a use) - Fixed the allowance of null activate timers. (Timers can now be used simply as a marker that exists only for X milliseconds) - Fixed issue where timer callback return values were ignored - Added right click menu to remote actors - Fixed various issues regarding mOrigin/mPosition for entities (Confusion regarding the purpose of the two) - Added beat command (accessible via character right click menu), with a 10 second interval between acceptible uses. - Fixed screenshot saving - Added alert message to gui, rendered in top left for predefined number of seconds (10sec) - Added shortcut editor, and shortcuts applied to function keys 1 through 8, with a 10 second interval between acceptible uses. - Added MessageManager to dispatch messages between classes. - Changed gui's event handler for SDL_MOUSEBUTTONUP back to hasKeyFocus (instead of hasMouseFocus) It was causing issues with scrollbars and such. Basically, need to find something to satisfy all situations. 091115-091125 - Changed multilines url clicking. Now single right click to open url in default browser. - Added server queue to IrcNet2 and the ability to go through the queue, connecting to each server in order (In case a connection fails) - Changed welcome response xml to set multiple servers, and a special section for starting map id. - Improved overall design of login process - Moved game console to GameManager instead of Map, so it can be accessed without a map, and doesn't lose backlogs. - Linked IrcNet2 into GameManager, and added IrcNet handler callbacks. - Changed MessagePopup class to use labels instead of multilines TODO: Make variation using multilines 091126 - Added widget focus stack to gui to solve the issue of multiple widgets demanding focus at once. - Changed default settings for system console, making it seem more like a SYSTEM console. 091128 - Implemented game-specific messages, and created compatibility with previous client versions. TODO: The code for this though is a complete mess, and thrown in LocalActor and IrcNetListeners. Requires reorganization. - Action buffer (de)compression should be moved to MovingEntity - avatarPropertiesToPacket and visaversa should be moved to MovingEntity, or create an Avatar class that handles serialization and maintains avatarProperties within it. - Changed beat command to only work when within a certain distance of the target (Currently set to 100 pixels from origin->origin) - Changed the way nick changes are displayed. Will now only announce the change when the affected player is within a certain distance. (Same as chat range) - Combined /me, /music, and beat into the 'act' message. Now takes various forms: act $message - /me command (also supporting act 0 $message. First is for backwards compatibility) act 1 $song - /music command act 2 $nick $item - beat command - Fixed a bug that caused various console commands to crash. (This bug also occured in previous versions) - Fixed issue where RemoteActor/LocalActor wouldn't sync to the current pose state after loading a new avatar. - Added in a semi-hacky parameter to Entity::ReadXml that lets it differentiate between online/offline loading mode. This way we can change resource directories and behavior. - Changed downloader to forcibly kill threads on Flush rather than wait. (So we don't hang on shutdown) Don't know if this is an appropriate solution. - Added right click menu to Input widget. - Added common operation functions to Input widget (Cut(), Copy(), Paste(), etc) - Added paste color operation to Input widget (both in right click menu and linked to ctrl+b) Will open a color picker dialog and request the user to create a color that will then be copied into the input at the cursor. - Renamed Widget::DemandKeyFocus() to Widget::SetKeyFocus() to lessen the confusion with Widget::DemandFocus(), since it's not necessarily a demand. 091204 - Added options dialog - Changed the way right clicking urls work. It will now open a dialog asking to either save to clipboard or open in browser. - Added ALT key combos to the Game Manager. Alt+o: Options Alt+r: Radar Alt+i: Inventory Alt+a: Avatars Alt+s: Shortcuts - Added game_config xml to save configuration settings seperate from the core engine. - Optimized Font renderer a bit. 091205 - Fixed bug in Options Dialog that blocked certain options from being changed (A bug which has existed for quite some, and no one reported it) - Fixed console timestamp settings being modified when the option was changed - Changed structure of game_config to include login information - Added cutoff filesize for the downloader (sendHttpGet). If a file stream is larger than the set size (currently 3MB) it will stop, delete the destination file, and return failure. - Fixed right click menus vanishing when clicked off. - Fixed issue with key focus screwing up player movement input - Fixed bug that would remove local actor from the map after a map change 091209 - Added DataPacket class to manage the structure of network packets. - Added Avatar class to manage avatar properties (Will make things easier as Avatars become more complex). - Fixed some bugs with the network - Moved loading avatar information to MovingEntity (Was currently a set of functions/variables cloned in both LocalActor & RemoteActor) - Fixed key focus issue when a map loads - Fixed issue with player moving while map was loading - Fixed bug in network state which caused it to switch from connecting->disconnected->connected 091214 - Added scrolling (arrow keys) to the Object Editor to make large object editing easier - Added background color editing to OE. Use oe_background \cRGB to change the background. - Added grid toggle to Object Editor (F3) and Map Editor (g) - Added delete key support to inputs - Fixed bug that allowed any avatar dimensions for MNGs. 091216 - Fixed bug with scrollbars not readjusting after being initialized with zero height. - Added application flags to boot up map editor and object editor, without starting up game manager. Flags are: -oe or -me - Added object collision rects display to ME - Added byte caps per each download in the downloader. Use DownloadManager::SetByteCap(int) to set the cap before ::QueueDownload. But the cap must be reset afterward if this is a temporary change. (Reason it's not a parameter in QueueDownload is due to the deep levels of class functions between resman->LoadImg and downloader->QueueDownload. It's too excessive to add a parameter at each level) - Gave player avatars a unique (lower) maximum filesize to avoid the spam of MB-level avatars. (Capped at 200 KB) - Switched frame change checks from Image::Render() to their own timer (for images with multiple frames) - Added a render optimization system that only called a full Render() when something changed. However, while useful for gui applications, the introduction of animated images maxes out the FPS anyway. The only true way of fixing this is to redraw & update only the rects that have been modified however this is incredibly more complicated and not in the domain of my patience. - Improved the NextServer system when trying to connect - Improved detection of failures while connecting and loading a map - Fixed bug where it wouldn't detect a disconnection Currently only displays a "You've been disconnected" message. Maybe attempt reconnect cycles? - Fixed several other bugs in the network connection state handling - Fixed bug with players having a blank avatar locally when theirs didn't load on initial LocalActor startup. - Fixed a bug with stripping \cRGB at the end of a string - Blocked local file LocalActor avatars from being saved to game config - Added private messaging - Added emote system. - Adjusted readFormattedNumber() to return the center of a tile rather than the topleft for tx inputs. - Added userlist (alt+u) - Fixed issue with joining online maps with no channel ID (There's still other bugs though). Overall, the connection procedure still needs to be improved upon, simplified, handle all errors, etc. - Fixed bug with bad reporting on how many map resources we actually have - Added delay range to map objects (delay="low-high") however, when cloning this range is ignored and it instead just uses whatever the original uses. So that needs to be fixed. 091218 - Improved handling of channel kicks, bans, bad server responses, etc. - Fixed issue where the map would be displayed even if we didn't join the channel properly - Fixed bug that caused names to remain in the userlist when we leave channels - Combined inventory xml into a general purpose player data xml file. - Added -nologin application flag to bypass the forced login and load a default map (from online resource, but played locally) - Added player level hud that has no purpose besides to confuse people. - Added nickname storage to IrcNet - Fixed bug in IrcNet where our channel wouldn't be deleted when we were kicked. 091220 - Fixed bug with using \cRGB in widget hover text - Fixed bug where single frame MNGs wouldn't display - Fixed Show Player Names option - Fixed bug that allowed people to set their max FPS below 5, which was not a very smart thing to do, but happened regardless. - Moved spawn & map dimension properties to - Added console command 'server addr:port' to manually connect to a server, and bypass login. - Added new jumping system (currently using the tab key, will change later) - Added map gravity affector to jumping, Map::SetGravity(uShort). Default gravity is 1, higher jumping if higher values. - Improved structure to save full image file names instead of the id + extension - Changed the way entity layers are defined. Will now be defined in the entity xml itself, and not the map The idea is that there aren't any entities that would need to exist on different layers. And if the case would ever occur, two different entity XMLs can be created (However, hopefully it won't be necessary). - Added oe_layer <0, 1, or 2> command to OE to set the default layer for the object. - Added spawn point edit mode to ME. (s key to toggle) - Added map dimensions calculation to ME. Will output a width/height big enough to contain all entities on the map. 091221 - Fixed a bug with avatars. When one stopped moving, the frame would continue to play till the end, even if !LoopStand - Added SceneActor class and the associated to map entities and . However, no editor supports this type, so they must be manually created. - Fixed yet another bug with looping stand frames for avatars (Wouldn't loop _move_#) - Added Avatar Viewer (alt+v) - Fixed bug where 0 interval timers would create an infinite loop. - Added Open File dialog (Although it's currently only an input widget) - Fixed invalid pointer bug when two avatars used the same image (via avatar1 = avatarb copy operator) - Added hud buttons for the alt+letter dialogs. Toggles between two hud modes via topleft symbol. 091222 - Fixed several bugs in the Image class regarding animation - Fixed a bug regarding MNG animation. Now uses Loop Sit/Stand for MNGs too. - Fixed jump syncing between clients by holding the outbound movement buffer until we land, and sending our landing point along with it (In theory, this should also fix the issues with local client having a solid where remote clients do not, and auto-correcting for that conflict) - Added LocalActor::mLoadingAvatar serialization to NetSendState if the LocalActor::mAvatar is null - Added one minute timeout timer to connecting and awaiting verification net states. Once it times out, it will attempt to disconnect (if waiting for verification) and connect to the next server in the list. NOTE: UNTESTED! 091223 - Added a multiline mode to MessagePopup for longer messages - Added and to post-login xml reader. - Fixed bug where the correct avatar wouldn't be sent on first map join 091227 - Implemented MessageData, allowing MessageManager to use a more informative messaging system. (ie: attaches keys to values, rather than simply having numerical indexes and trying to match up index->value in listeners) 091229 - Added position memorization to system console and GameManager's chat console (Each saved to their own config) - Fixed bug that caused maps to still load even if a layout Actor had no unique resource to clone from. - Changed Multiline(&Console)::AddAdvMessage to AddFormattedMessage 091230 - Added item trading. By doing this, I installed 5 new net packets (each with a 'tr' prefix), three related classes, and additional controls to the inventory and remote player menu. - Fixed a bug with Labels not returning the right value for Width() when MaxWidth() is 0. - Changed Actor::Emote() where it'll pop the chat bubble before displaying an emote. - Fixed issue where jumping map entities wouldn't queue a resort as their Y positions changed. (Actor::Move() now flags a resort) - Added option to disable trade requests, and moved Accept Private Messages option to network tab - Implemented warp destination objects and warp destination points (At least, reading. But not setting) - Added destination point parameter to GameManager::JoinOnlineMap() 091231 - Implemented message ENTITY_MOVE in Actor::ProcessMovement() (Actually only sent by Actor classes. Should it be ACTOR_MOVE?) - Implemented message ENTITY_SAY in BubbleManager::CreateBubble() - Implemented message ENTITY_CREATE in EntityManager::DispatchEntityCreateMessage() Must be called alongside AddEntity to avoid a conflict with loading entities in the background during a new map load. (Scripts of the old map would be sent the event and believe the entities to exist on the displayed map) 100101 - Fixed bug where ENTITY_MOVE wasn't sent if we jumped into a solid and stopped short. 100104 - Added TextObject entity (However, it only exists in and doesn't have a unique ref) - Added /stamp command to write text directly to the map (Deletes itself after 5 minutes) - Added colorizing to Avatar Creator - Added grid snapping option to Map Editor (toggled with 'n') 100105 - Added adjustable surface flags to Screen - Set game window to be static sized, while other apps get a resizeable gui. - Changed map resource versioning from using version numbers to md5 hashes of the files. If an entity lacks an md5 hash property, it will assume the cached version is always correct. - Added create_actor command to console so that we can easily output SceneActor xml without the need of a full blown editor (Main importance is that it does an md5 hash on the image file) - Added ITEM_USE messenger event when someone clicks use item in the inventory - Fixed bug with remote player nick changing - Added me_addscript and me_removescript . It'll add the script names to the .res, and make sure it exists on disk, but won't actually load the script. - Added Actor placement in the Map Editor - Fixed calculation errors in Entity::CollidesWith() - Fixed ambiguity issues as to whether entity collision rects are relative to origin or top left image position. 100107 - Fixed bug in file->string loading (Screwed up when dealing with newlines) - Implemented LuaManager, EventsLib, and SystemLib - Fixed bug in loading/saving script resources in Map Editor - Added offline map test mode. Console command: test_map id. Will load from editor/maps/, editor/entities/, etc. Made to work with the output from the Map Editor. - Fixed bug that caused Object Editor to save full editor/entity/ path to saved entities resource filenames - Added oe_warp to Object Editor. Send oe_warp without parameters to erase properties. 100108 - Added Timers library to lua. (Timers.Add, .Remove, and .RemoveAll) - Fixed bug with single framed MNG avatars being considered invalid. 100109 - Improved lua error reporting - Added Entity library to lua 100110 - Fixed Dorra saving/loading - Fixed negative Dorra amount in inventory - Added Player library to lua - Added Entity::SetFlag & Entity::GetFlag. Flags are arbitrary keys associated with values, can be used to maintain information on a per-entity basis. Might add entity flag persistency between maps. - Added LocalActor::LoadFlags/SaveFlags to save Entity flags to file in order to maintain persistency. - Fixed bug in XmlFile::SetText() (Wouldn't add a text node to an element if it didn't already exist). - Added encryption to entity flags - Fixed bug where the inventory listing would reverse order every reload - Added Actor library to lua. Not yet sure if this should be combined with Entity or not. - Fixed Entity::SetLayer so that it actually works - Changed lua userdata to use the lua Registry for storage. This way we have full access to all lua objects, including tables and functions, rather than simply numbers, strings, and cptrs. 100111 - Added Convo library to lua - Fixed an issue with bad pointers in SDL_Frame::key when using Image conversion routines - Can now read in directions from xml, or lua, by using either keypad numbers (7 = SOUTHEAST, etc) or string representation ("se" = SOUTHEAST) - Fixed a bug with Actor direction updating (Avatar wouldn't update at the right time when the direction updated) - Added Actor::IgnoreSolids - Fixed Actor::MoveTo. Doesn't use pathfinding or anything yet, but it does set the destination and try to move to it dumbly. (Ie: Walks into walls if there are any in their path). This will still follow the 9 direction rules, and they won't move in obscure angles. 100112 - Redesigned the Hud to contain all links in three sub menus - Added Report A Bug feature (Opens link to sybolt.com/tracker report page) - Added Camera library to lua - Fixed bug with MNG frame selection. Actor::_recalculateDirection() was at fault, and decided to break everything with SetDirection() 100113 - Added console command map_info to toggle extra map data (collision, origins, destinations, etc) - Invalid md5 values in entity xml (such as md5="1") will now force the game to redownload resources even if they exist already. This is not a bug, but a feature for testing maps when it becomes an annoyance to re-hash the file every time. (However, for RELEASE versions, there needs to be a hash!) - Added the ability to disable player input. Also accessible by lua with Player.IsLocked() and Player.Lock(1 | 0) - Added PLAYER_ACTION messenger event, sent out when the player hits enter while the map has our input focus and the chat input is empty. - Added depth rendering to StaticObjects. Will sink actors into the objects when they traverse over them. - Added a testing Weapon class to mess around with. 100114 - Terra Day! - Added TerrainTest class and -terra app option to boot it up. Currently used as my tool to figure out how to do terrain painting properly, and without any errors. 100115 - Attack Day! - Added ATTACK action to Actors. Do not SetAction(ATTACK) directly though, call Actor::Attack(cooldown). Also do not use GetAction(ATTACK), but use IsAttacking(). (GetAction can still return ATTACK, even though the attack has ended. The action will not change until the actor moves). Attack is added to the action buffer as 'aXX.' where XX is a number indicating attack cooldown (Actors buffer will not continue processing until the cooldown has been completed) - Added support for _attack_2, _attack_4, etc to both PNG and MNG avatars. (PNG will have rows 9 through 12 (after 4 sit frames)) Will play when the actor attacks, and will pause at the last frame until the actor moves again. (Currently there is no option to loop, and I doubt that I'll make one) - Added ENTITY_ATTACK event ( only fired by Actor::Attack() ) Contains "entity" (userdata) and "cooldown" (int) - Added ENTITY_ENDATTACK event. Fired after ENTITY_ATTACK when the cooldown time is reached. Contains "entity" (userdata) - Added the ability to skip attack animation and cooloff within a single call for Attack(). This is done by calling Actor::SkipAttack() from within an event listener on ENTITY_ATTACK. From within lua, call Actor.SkipAttack() This is benefitial for when we use the attack key to talk to friendly NPCs, and make it not look like we're trying to hit them. - Added to lua: Actor.SkipAttack() (useable only in ENTITY_ATTACK listeners) Actor.GetProp() Additions: "canattack" - returns 1 if we're capable of attacking (Not in a cooldown stage, or similar constraint). 0 otherwise. "attacking" - returns 1 if we're currently in an attack (waiting for cooldown). 1 in between ENTITY_ATTACK and ENTITY_ENDATTACK events. 0 otherwise. Actor.Attack(actor, cooldown) - Force the actor to attack, and wait cooldown milliseconds before being able to do anything. ENTITY_ENDATTACK event will be fired after that amount of milliseconds. - Disabled PLAYER_ACTION due to conflict with the chat input. Will later decide whether to keep this, or just rely on ENTITY_ATTACK - Rebuilt the map loading system. Now uses a seperate class for map loading (WorldLoader) linked to GameManager. There is also no more background map loading, and when the map goes to load, you will be removed from your current map and the new map will load in. This opens up the ability to have some sort of cool loading event happening (map crumbling, or something), fixes several issues with scripting, and removes headaches. 100116 - Avatar Day! - Added an overload to LoadAvatar in RemoteActor to restrict them to only http:// and avy:// avatars. Disallowing attempts at accessing local files. - (UNTESTED) Added support for avy:// composite avatars in Avatar class. Final Url Format: avy://Base.HeadId.HeadHex.BodyId.BodyHex.HairId.HairHex Example: avy://adult.default.FF0000.default.00FFCC.afro.666666 - Fixed a bug with SDL_CopySurface (wouldn't copy properly if src wasn't 32 BPP. Now creates a 32bit copy before proceeding) - Sped up SDL_CopySurface when dealing with copying full images - Implemented Avatar Modifiers. Currently support MOD_MINI, MOD_GIANT, MOD_SMASH - Fixed memory leak in Avatar class - Added "mod" to Actor.GetProp and Actor.SetProp. Returns and sets the avatar modifier. Values are relative to the avatar mod enum. MOD_NONE = 0, MOD_TARANDFEATHER = 1 (not working yet), MOD_MINI = 2, MOD_GIANT = 3, MOD_SMASH = 4, and more to come later on. - Implemented "mod" message for avatar modifier notifications over the network - Implemented modifier data in avatar (de)serialization - Added ENTITY_DESTROY event message, triggered when an entity is deleted from the map (Does not ever fire for LocalActor) - Improved greyscale colorization - Fixed a bug that caused images created through ResourceManager::NewImage not to state SDL_Image::LOADED 100117 - Added PAL Lessons button to login screen (not yet useable) - Added the ability to load maps in offline mode, but still use online resources - Fixed bug with downloader deleting local files we didn't want it to - Improved how drm live-downloads images we don't already have. - Added Achievements system. Added to lua: Player.EarnAchievement and Player.GetAchievement - Added My Achievements dialog 100120 - Added unique handles to timers - Change Timers.Add() in lua to return the handle - Added Timers.RemoveHandle(handle) in lua - Changed the structure of lua timer callbacks. Now in the form: function callback(handle, interval, userdata) - Added unique handles to event listeners - Added Events.UnregisterHandle(handle) in lua - Changed Events.Register to accept optional userdata as a third parameter, and to return a handle to the new timer - Changed the structure of event listener callbacks. Now in the form: function callback(handle, eventId, datatable, userdata) - Added Entity.Remove(entity) and Entity.RemoveAllMatching("id") to support deletion of entities from the map - Changed Player.SetCash to Player.AddCash(amt), where it'll add (or subtract if amt < 0) from our dorra 100122 - Forced a minute delay between /join attempts (It's basically masking a bug involving rapid joinings that crash the client) This delay is ignored if we just tried to /join a map but it failed. - Disabled /join while already loading a map - Added the beta Avatar Creator to the hud - Fixed bug with remote actors not loading a default avatar - Fixed bug that caused a crash when remote actors with no avatar parted the channel - Fixed double ENTITY_CREATE messages being sent when remote actors join - Added user login credentials to map config request urls (Now we can restrict access to certain users) - Fixed bug with jumping while sitting - Added custom error messages for map load errors. (Defineable serverside if msg is the only thing returned from master.php) 100123 - Added LocalActor::Warp(). It should be able to properly use the editor dir when warping from editor dir maps, and cache otherwise. - Implemented Player.Warp() in lua - Disabled chatbox completely when loading a map 100125 - Fixed crashing bug when someone talks right before leaving the channel - Added position and rotation data to stamp packet, to make sure these values are the same across all clients. - Added optional md5 hash check to DownloadManager. If a hash is provided, will do the download failure callback with errorCode DEC_BADHASH when the resulting file's hash doesn't match the one provided in QueueDownload. - Fixed bug that had active="0" lua scripts to load in memory, instead of active="1" - Fixed a bug that caused blank strings to be dropped in DataPacket decryption, and thus causing fatal crashes. (explode() was written to ignore them) Added an option to explode() to toggle the addition of blank filler strings in the result - Fixed bug with confirming a trade when you never sent an item (would give the other user a blank named item with a random amount and cost) - Added Game library to lua (only consisting of Game.Print() currently) 100127 - Added privmsg button to trade dialog - Added GAIN_ITEM and LOSE_ITEM messenger events - Added default settings generation if savegame doesn't exist. - Fixed static link to http://localhost in MyAchievements ----- RELEASED AS 1.1.0 BETA (TO DEVELOPERS) ----- 100128 - Added \cRGB support to stamps 100201 - Increased socket read buffers to 1024*10 bytes in an attempt to better handle higher amounts of players. 100205 - Added OpenUrl support to entities. If their NAME starts with http://, will open that url when right clicked. - Fixed infinite-avatar loading bug when avy:// url has a file not found or other issue - Moved saved avatar and general user settings to savegame file - Add to Favorites button in AC now also sets your current avatar as the creation 100206 - Reduced amount of times NM response is sent. Will now only send to the channel once per every 3 seconds. This should account for splits while remaining low-bandwith. - Added an additional check for users who aren't registered on the map. If someone sends valid data and aren't on our map, the client will attempt to get a NM response from them. - Increased item description length to 200 characters - Added coloring to stamps, by using \cRGB. However, it only works if \cRGB prefixes the message (There's a bug with rendering text to a newly created blank surface) - Implemented warp properties for objects - Added overload to Player.Warp() in lua. Can either be .Warp("world", x, y) or .Warp("world", "objectname") or just .Warp("world") - Changed lua Entity.NewTextObject() to entity_ptr Entity.NewTextObject(text, x, y, size, layer<1>, rotation<0.0>) 100211 - Improved detection of malformed sup/nm messages (Malformed sup message could cause a crash to an entire channel) - Changed EarnAchievement() to return the current number of points in an achievement, or 0 if an error occured - Included several built in achievements and using /game/Achievements.h to maintain all related code (Checks, timers, etc). - Added system that allows the Helios AI to give achievements - Added getPreviousFileMatchingPattern() and fixed the back buttons in the AC - Set title color to a light grey for achievements that are visible, but not yet earned. 100212 - Wrote a MiniMenu class however haven't implemented it yet (Don't know exactly how to do so efficiently). - Fixed bug with right clicking map entities that would cause a crash - Moved /assets/achievements/ to /cache/achievements/ ----- PUBLIC RELEASE AS 1.1.0 BETA ----- 100215 - {Report:0000018} Moved game_config to assets/game.cfg, config to assets/system.cfg, playersave to assets/player.save, avatars to avatars.xml, shortcuts to shortcuts.xml. All of these may need to be moved/adjusted again, I want to centralize a folder for people to copy files over for updates. (Or, a folder that'll be ignored while updating) - {Report:0000017} Fixed inbound stamp messages not being read properly - {Report:0000013} Fixed game config settings not being saved/loaded properly after a default savegame file was created. (Specific xml elements weren't created, and thus always returned zeros) - {Report:0000014} Fixed F8 crash and shortcuts not working as they were supposed to - Reduced shortcut use delay to 5 seconds instead of 10 - {Report:0000015} MAY have added a fix regarding focus problems with dialogs are closed, and the window is Alt+Tabbed to, however the problem seems to be Vista related and I am unable to reproduce at this time. 100219 - {Request: Morthm} Added /commands and /emotes 100222 - Fixed rendering of caption buttons - Moved system console toggle from Esc to Home key - Changed Esc key to open the quick menu (generic menu to return to login, quit, or other constantly used options) - Added steam:// url support (However, only copying to clipboard works, unless end users figure out a way to shell execute steam urls) 100226 - Added frame limit to avatars (set to 50 frames max) to prevent overflow crashes - Disabled GIF avatar support temporarily. This is to prevent the chance of crashing a channel, since there is currently a fatal bug in the GIF loader. GIF format is still acceptable for map objects, however. Just nothing that requires the Avatar class to render. - Moved nick settings to player.save, and moved player.save back to the main directory - Changed the deleteSource property in SDL_Image and ResourceManager to deleteSourceIfInvalid, to only delete invalid downloaded images. - Fixed a bug where invalid achievement icons would remain in the folder and never attempt to re-download - Added an automated reply when someone tries to privmsg you and you have private messages blocked. - Added channel-wide message when an achievement is earned, detailing who earned what achievement. - Changed the way the offline map tester reads the .xml files. Will want all elements to be inside rather than toplevel. - Map Editor now outputs full .xml's (But still without the section, still will use .res files). 100227 - Added /ghost and /normalize commands for avy mods. (Normalize to return the avatar to the default state) - Fixed a bug where NetSendAvyMod() would crash the client if not on a channel - Added support for Winamp in /music. Type /music without anything after it to attempt to find Winamp - Added ActionEffect entity class to display comic-effects for attacks/actions (Work in progress). Currently set to display a MISS effect whenever the attack key is used. - Added details regarding target (x,y) and objectName to map config request from master.php. This way we can further control warping. - player.save file will now be written to every time it's modified, to further prevent data loss during a crash. 100301 - Added persistant flags to maps, saved to player.save - Added Game.SetMapFlag("flag", "value") and Game.GetMapFlag("flag") to Lua to access said persistant map flags - Added System.GenerateFilename("key") to lua to generate a cache filename from the specified key, that won't collide with any other cache files unless they too called .GenerateFilename() with the same key from a lua script. - Removed the match check for internal ID and file ID for entities. Internal IDs can now be different, possibly allowing subfolders for entity storage but still having a different internal-use ID for maps. But.. not yet tested. 100305 - Removed MD5 hashing of user passwords to/from master/login. This is to make things work alongside our newer login system, as it requires serverside SHA1 with some special salts. - Removed MD5 hashing from the Object Editor - Added support for sub directory entities in OE - Improved grid rendering in ME/OE to use a cached image rather than drawing rects directly. A LOT less cpu intensive. - Fixed OnUnload() lua functions of the previous map being called after a new map is already being loaded. - Added emoticon icon that appears when earning an achievement - Decided to trash the "Unique Entity" management system, and to restructure maps slightly in a more organized fashion. - Temporarily removed ME & OE & offline map running in order to clean up the system - Old Method for spawning entities: - During map load, each entity in would get one unique instance loaded into memory - Each entity load after that will make a direct copy of that first entity loaded into memory Problem: Waste of memory, overcomplicated things - New Method: - Each entity load will read the settings in the map xml and build itself accordingly Derp, why didn't I do this before? Mainly had to do with the way the map editor kept track of things, but that was dumb. - Removed Entity.Clone(entity); from lua. Entity.Add("classname") is the method of choice - Overall, adopted more of an "entity factory" way of doing things, creating individual instances from templates. This method has been used in a lot of games, and although I attempt to try something different, I still resulted in the old technique (Why try to be unique anymore?). - Added section to the map xml for script resources, and to contain all global properties (rather than having loose elements flying around). 100315 - Removed exit(0); from MNG_UINT_PLTE size % 3 check failure (Not very nice for a production release). 100320 - Removed Entity.SkipAttack(), Entity.Attack(), and "canattack", "attacking" properties from Entity.GetProp - Removed any internal attack related matters. Including _attack_ frames for avatars. - Removed Weapon class - Removed Radar, Avatar Viewer, Shortcuts, and Remote Player Menu interfaces. - Removed player level data 100321 - Added Map lua library - Removed LuaManager class - Removed loading and xml parsing routines from Map and all inherited classes - Removed ReadXml/WriteXml routines from Entity and all inherited classes - Removed lessons button from LoginDialog class - Removed Entity.Add() from lua - Fixed options not saving in options dialog 100324 - Added Map.NewBasic(), Map.SetSpawn(), Map.SetSize(), Map.SetColor() to Lua - Renamed CollectionMap to BasicMap to make it slightly more descriptive - Fixed several bugs with WorldLoader 100326 - Increased screen size to 800x600 due to popular demand - Removed server manual connection command. - Rewrote EntityManager to only utilize one list of entities, and to use a more abstract method when dealing with entity layers. Will sort entities based on y position AND layer, which can now be any number. - Removed EntityManager::AddEntity overloading and put ENTITY_CREATE message dispatch into the original AddEntity function. - Added a Die() overload to Map in order to gracefully cleanup certain content before the next map. A major issue during map testing was that images (and their associated properties) would not reload from disk as specified, and instead simply clone the internally cached data. By forcing lua scripts and entities to be erased from the old map before a new map is constructed, we also clear up all leftover resources. - Removed all references to /lua/MapLib from GameManager - Fixed bug where userlist wouldn't clear names when changing maps 100327 - Added game mode toggle (toggle between chat and action) - Added WASD movement (arrow keys still useable), changed jump to space bar, shift keys now toggle speed, ctrl no longer needs a direction held down to sit, and tab key toggles between action (movement) and chat modes. - Re-enabled arrow key support for the chat's console (to move the cursor around). - Added Player.IsInChatMode() in lua, returns true if the game is currently in chat mode, false if in action mode. (This'll be good when we bind via lua certain keys for ingame events) - Added general purpose Entity::GetImage() to return the Image the entity is using to render. Should usually be overriden depending on entity type - Added mCanClick to Entity - Added ability to right click the local player to access the avatar favorites dialog - Added "clickable" boolean to Entity.SetProp/GetProp - Converted various properties in Entity.GetProp/SetProp to boolean, where appropriate. (ie: "shadow") - Added "Clickable = true/false" to Entity.Create() table - Added shorthand Entity::IsVisibleInCamera() - Changed listening distance (for displaying nick changes, join/parts, chat messages, etc) from using a constant distance of 300 to using Entity::IsVisibleInCamera() - Added bad image file check in MyAchievements - Replaced dropdown menu at the top with a static, limited version. - Merged game.cfg into player.save 100328a - Added dispatch of ENTITY_CMD[entity, message] when local or remote actors say something prefixed with slash (/) These messages will not be displayed in the chatbox, and rely on scripts to handle them. - Added another overload to Player.Warp in lua: Player.Warp(x, y); to jump coordinates on current map. Shorthand of Entity.SetPosition(Player.GetEntity(), x, y); 100328b (After SVN commit to revision 10) - Removed /core/widgets/FilePicker.* - Removed /core/widgets/WidgetImage.* 100331a - Removed all references to the WidgetImage system and replaced with a cleaner more basic method. - Removed gui.xml access and hardcoded styling for all widgets - Removed dynamic icon loading in MyAchievements and replaced with two basic icons, one for achieved and one for unachieved. 100331b (After SVN commit to revision 11) - Added error checking to ResourceManager::ImageFromSurface - Removed links to DownloadManager and active image download states from Image & SDL_Image - Modified Avatar class to handle downloading and to do cleanup of cache files internally. 100402 - Fix buildDirectoryTree() to build full trees. Ie: a/b/c/d/e when b/c/d/e all don't exist. - Added online map support to the new WorldLoader - Completely phased out XML reliance in map loading - Fixed bug that caused the players action buffer not to send out when they jump to chat state - Fixed avy:// links not being sent to remote players - Fixed mouse down and inactive offset calculations in Widget::CalculateImageOffset() - Implemented import and edit of avy:// urls from Avatar Favorites to Avatar Creator. Now can easily edit existing avy:// formatted avatars in AvyFavs without having to add a new one from scratch. - Removed "feature" due to popular demand, where the AvyFavs window would close after an avatar was selected to wear - Fixed caption button rendering - HACK: "Fixed" SmallSelect widget background rendering, with a rather distasteful hack. - Increased the amount of time avatars.xml is saved (Will now be saved whenever any kind of change is made to the avyfavs) - Added YesNoPopup class to core/widgets/ - Added System.YesNo() routine - Added callback function to System.Alert and System.MessageDialog - Fixed bug that allowed player movement while a widget demands focus 100403 - Added Game.NetSendToChannel("id", "message") and Game.NetSendToNick("nick", "id", "message") to lua Will allow script writers to send custom data over the network, and can be watched with an Events.Register("NET_LUA", ...) id + message length should be no longer than ~200 characters. And of course, this cannot be used heavily over an irc network that throttles channels after too much chatter. Third party servers are required if heavy data transfer is necessary. It is not possible to override an existing network message, as "lua" is the REAL header of this packet (while id is the first member) This data can only be recieved by those in the same world as the sender. This does not work between worlds. NET_LUA [string] id [userdata] entity - The player that sent the message [string] message - Added Image::IsPixelTransparent() - Fixed bug with the pixel-level testing for map entity interaction not working for colorkey based images. - Fixed Entity.FindById()/FindByName() throwing an error when an entity isn't found (should've returned nil) - Changed the following lua functions to return booleans rather than integers: Actor.CanMove(), Actor.LoadAvatar(), Actor.IsLocked(), Camera.IsRectVisible(), Camera.IsEntityVisible(), Events.UnregisterHandle(), Timers.RemoveHandle(), - Removed the following lua functions: Actor.NewSceneActor(), - Changed Actor.GetAchievement() to return nil if supplied achievement name is not found - Moved Game.SetMapFlag/GetMapFlag to Map.SetFlag/GetFlag 100404 - Removed Actor.GetProp/SetProp, and streamlined everything into Entity.GetProp/SetProp. Can now handle actor and player properties using internal C++ class inheritance. - Entity.GetProp/SetProp will no longer throw an error if property is invalid, but instead give an error - Added Player.SetProp("prop", value) and value = Player.GetProp("prop") simply as shorthand to Entity.SetProp(Player.GetActor(), "prop", value) etc. - Added /wtf emote 100410 - Removed Report A Bug button from the hud - Fixed writing of default player.save - Changed the way the console reads in the image base parameter. Will use subdirectories to skin all widgets. - Added a basic RemotePlayerMenu substitute built off the ESC menu structure. Temporary until the real one is made (Because people would complain if they can't beat/trade). 100414 (After SVN commit to revision 18) - Moved player.save and avatars.xml to ./profile/ subdirectory. Plan on using this to store any consistant settings/configs/data written by the scripting engine because files can be erased or overwritten in ./cache/ - (NOT DONE) Added Afk Mode to players - Afk mode will display an icon over the head of the player who's currently afk. - Afk mode will be activated when the window has been ignored for 5 minutes. Note: Due to limitations in SDL, cannot poll events outside the window without getting involved with WinAPI. So instead, afk is more like afw, and will watch multiple things to determine afk state. (Basically, if any SDL events come in, they're not afk) - Trade requests will auto deny when afk - Changed Actor.LoadAvatar() to only work for local files in the map working dir - Added Map::GetWorkingDir() to return the directory our resources must come from. "cache/" if online mode, "dev/" if edit mode - Changed Entity.Create() to only allow access to files where Map::GetWorkingDir() is the root So for example, Image = "entities/bob.png" will load "cache/entities/bob.png" if in online mode - Removed ActionEffect entity class (But kept in SVN for possible re-install later) - Fixed the custom mouse pointer not disappearing when the pointer was outside the SDL window - Added mandatory inclusion of cache/scripts/main.lua (And all resources it requires) to maps, after the Build() call of the primary lua file in order to inject common code regardless if the mapper wants it or not. 100416 - Added /facepalm and updated /troll - Added Map.GetWorkingDir() to lua - Fixed Map::mWorkingDir adjustment for test_map to properly work out of the dev/ directory - Added various bits of the user blocking system. However, requires a system for saving addresses to a lookup table, and an overall more robust method of blocking people. It will currently work, but can be circumvented if a blocked player just /join's the channel again - Added background image to the login screen - Added check for illegal 'sup' packets (mimicked from someone who wasn't the original creator to initialize a presence of themselves on the map, even without a valid client) 100423 - Added scrollbar visibility flag to Multiline widget. Can choose to always hide the scroller. - Added info multiline to login screen, to output server connecting information - Login Screen will now remain visible until we actually go to the map loading state. Meaning, it will remain open while we're being verified by the server. - Fixed private message button in trade window. Will now display the privmsg console at the top right. - Added "entity" userdata to NET_LUA messenger event to point to the player that triggered the event - Added "reqAvy" net message to request a privmsg of avatar information from a specific nick. - Fixed bug where avatars would not reload after unblocking a player. - Added an additional cXXXX.YYYY. to the player movement buffer in order to fix position sync issues even more. (Although, it unfortunately makes the movement strings longer than one would like). - Added a message to tell people to /join something if the world fails to load 100423 (After SVN commit to revision 20) - Removed Game.NetSendToNick() in lua and replaced it with Game.NetSendToPlayer(entity, "id", "message") to avoid ambiguity in what it can actually do. (ie: Only works for players currently on the map) - Added 5 second wait timer to avatar changing in the favorites, and removed the Die() command when an avy is selected. - Removed Fashion Addict achievement (Wouldn't work with the above limitations in place) (At this point, there is confirmation that it works on a fresh install of Windows 7 32bit without either compatibility mode enabled, or security warnings, as seen with the previous release) 100428 - Fixed memory leak warning in SmallSelect widget - Added server pinging with a 4 minute interval. If a response is not retrieved in that time, the client will know it's disconnected (An attempt to avoid the bug where it seemed we've been connected for hours, when we aren't). - Added additional state to IrcNet, VERIFYING, to be activated while we're being verified as a valid client by the server - Added IrcNet::mRealServerAddress to store the address of the actual server we are connected to, after being bounced. (Common occurance on large IRC server networks) 100502 - Removed previous pinging system temporarily. Causing some weird bugs. 100507 - Removed renderCallback & eventCallback from Widget base (Unused) - Removed uLong ms parameter from Widget::Render() (Unused) - Added nick change nag message when someone joins a channel with a fro_* nick - Removed a hack when parsing XmlFile's from const char* (Not necessarily fixed though) - Fixed default avatar not loading when the profile does not yet exist. (SVN Commit to revision 21) ----- PUBLIC RELEASE AS 1.2.0 ----- 100509 - Fixed 'ern' network message not being handled properly, and causing a crash - Added logs/error.log reporting of warnings, fatals, and throws (Will append to the log). - Added a marker file to detect when the client shuts down prematurely - Fixed error occurances when reading profile save. - Fixed /wtf command to display the right emote (SVN Commit to revision 24) 100514 - Started development of the seperate Updater tool, and the UpdatePackager dev tool 100522 - Fixed a bug where /save command would not create saved/ directory if it did not exist, thus failing. - Added copying of out.log to crashlog_TIMESTAMP.log when the marker is present at startup (indicating a previous client crash) - Fixed a crash that occured when someone used an avatar with defined dimensions larger than the avatars image itself. - Finally fixed the icon not being displayed in the titlebar and alt+tab (It had to be a 16bit bmp with a colorkey to work. 32bit wouldn't render the colorkey properly in Windows). - Added routine to the startup that will replace updater.exe with updater_update.exe if it exists (To do an update of the updater when necessary) (SVN Commit to revision 26) 100523 - Added handling of mandatory update alerts from the login reply - Fixed bug where irc channel chatter would bleed through as a private message to clients 100524 - (Reintegrating older concepts into newer code!) - Added Collision Blob support to entities. Basically will allow them to read in collision rects from a seperate binary file, rather than an array in lua. - Added makecol console command to construct collision blob files from black & white images. (More than 10% white pixels on a tile of the 16x16 grid indicates that it is blocked) However, makecol is not as optimized as it could be, and uses a sort of scanline-like method when creating the collision rects, which does horribly when there are a lot of vertical rects. 100525 - Fixed bug in Image::IsTransparentPixel() with RLE accelerated surfaces crashing when calling SDL_GetPixel due to not being locked first. (Surfaces that require locking, but are not locked, will have a null SDL_Surface::pixels member) - Fixed bug where empty crashlogs would be saved. ----- PUBLIC RELEASE AS 1.2.1 ----- 100526 - Fixed image leak in createCollisionBlob() - Increased _isTileWhiteEnough() from 10% to 25% white to be required for a true return - Fixed crash in Timers::RemoveByHandle() that occured when there were any null timers in the list 100527 - Added Entity.SetImage() and Entity.SetAvatar() to map lua that work the same way as the entity table. (That is, SetImage can either take a string or a table, as Image = in the table can. And SetAvatar takes the sub-table Avatar = { ... }, used by Entity.Create()) - Added Game.Version() to lua - Added Entity.Explode() to lua - Changed .GetProp/.SetProp "noclip" to a boolean in lua - Added automatic saving to disk when an item is gained or lost in the inventory to help prevent item loss - Added &lm=WORLD_ID to login request to ask the server to return us to the last accessed map - Fixed Getting Resources loading screen message. Will now display completed resources / total resources - Fixed bug that would cause crashing when loading entities with animated images. Caused by using an offset index (negative index) for lua_next() in _parseEntityImage(). Due to values being pushed onto the stack when lua_next() is called, it lost track of the table. An absolute index was necessary. - Fixed Player.Warp() lua routine. Originally would destroy the lua script mid-run, which is a big no-no. Now sets a one-time timer to run asap. - Improved map memorization by memorizing when joining the map, rather than leaving. However this also means the join coordinates are saved, and not the parting coordinates. - Reduced /join wait to 10 seconds - Added System.Encrypt() and System.Decrypt() to lua (untested) - Renamed Class to ID in entity definition table, to remain consistant with the rest of the code - Fixed "ghost replay" bug where a player would appear elsewhere on the map while joining, walk, then teleport back to their proper location. (Caused by LocalActor::mLastSavedPosition not being cleared when syncing to the new map, and then sent with the first action buffer) 100528 - Added /pedo emote ----- PUBLIC RELEASE AS 1.2.2 ----- 100603 - Moved NET_ONCHANNEL message to receiving the JOIN irc message, instead of End of /NAMES - Attempted to write support for /names CHANNEL irc command, however Rizon blocks user listing of all channels unless we are occupying them. :( /names still exists, however it will show the LIST command raw results instead, which will list channel modes, topic, and total users in it, in a messy fashion. 100606 - Fixed player locking - Added Camera.StopsAtEdge() and Camera.SetEdgeStop() to lua - Fixed player movement locking (would carry onto the next map load) - Fixed Treasure Hunter achievement to not count multiples of the same item 100608 - Added shell of Lunem Party dialog and added hud button - Renamed Inventory to Backpack (Pointlessness, woo!) - Renamed command test_map to just test 100610 - Fixed bug that imposed the same avatar filesize limits given to players to map actors also. Map actors now have no limit either avatar dimensions or download filesize. - Created Combatant class and used it as a second base class for Actors. Combatant contains rpg-like elements, including stats, species, experience points handling, and level information. It will be used heavily by Lua for combat purposes. - Removed SceneActor class. Will just use pure Actor for map actors. - Changed entity Type values for Lua. Actor is now 1000, StaticObject is now 2000 - Fixed bug where Map.GetWorkingDir() would not work until a map was created in lua Build() (This made dofile() impossible to do prior to calling Build()) 100612 - IrcNet2.cpp:62 mChannelId = getWord(line, 4) changed to mChannelId = getWord(line, 3).substr(1); Don't understand how it worked before with the JOIN message format. 100613 - Asset added: assets/button/refresh.png - Added DownloadManager::CountMatchingUserData() - Added messenger event to IrcNet2: NET_CHANNEL_COUNT{"channel", "count"} to handle /LIST responses - Added WorldsViewer (currently accessible via /worlds command). Will send a request to the master for a list of worlds, and after displaying the list, will request a user count for each world from the irc server. TODO: Make worlds clickable and let the player warp right there from the list instead of /join Also, the user count feature will most likely not work on larger IRC networks such as Rizon, as they love to give LOL TOO HEAVY OF A LOAD, TRY AGAIN LATER messags. - Added case insensitivity to Entity.GetProp/SetProp, Player.GetProp/SetProp - Moved Combatant implementation to Actor as overloaded functions to remove a lazy hack. 100614 - Changed trade item amount request and incinerate amount request to default to 1 instead of all the items you own of that type - Fixed issue where EntityManager would only accept a single byte as an entity type number, which contradicted our current system of starting actors at index 1000 100616 - Added Actor.GetSkill() and Actor.SetSkill() to Lua - Actor::TakeDamage() will now do nothing if m_iMaxHealth < 1 - Added zheight to Actor SetProp to allow entities to arbitrarily fall from various heights (Will be used for the dueling system) - Added ScreenText widget to display colored & animated text on the screen. Will be used for dueling-related stuff. (Skill callouts and whatnot) 100617 - Improved how the map camera determines "visibility bounds", as in, how it determines what edges to stop on. Will now use an abstract rect as our bounds, so this allows Lua to change this rect whenever it sees fit. HOWEVER, it no longer centers maps that are smaller than 800x600 so the rect should be positioned with some negative offset from the map object we want centered. Ex: Entire map (say, a small home) is 500x320. Position camera with: Camera.SetBounds(ROOM_X - (SCREEN_WIDTH-500)/2, ROOM_Y - (SCREEN_HEIGHT-320)/2, SCREEN_WIDTH, SCREEN_HEIGHT) So if the top left corner of the room is (0,0), the minimum top left bound of the camera should be (-150,-140) - Added Camera.SetBounds(x,y,w,h) and Camera.GetBounds() to Lua - Removed Map.SetSize() from Lua. For a replacement, use Camera.SetBounds(0,0,MAP_WIDTH,MAP_HEIGHT) instead 100618 - Added Entity.ClearFlag() to Lua to fix the issue of not being able to delete flags once created (Which causes unnecessary bulk in player.save file) - Added ENTITY_LAND{entity} event triggered after an entity has landed from a jump/fall - Added Actor.Fall() to Lua to create a custom fall at a certain height and speed - Changed the way SetCameraOffset() works. The offset will only apply when rendering, and does not affect the actual camera position. This change was made to better support the ShakeCamera() effect in camera_utils.lua - Made an adjustment to the setting for always displaying player names on the map, in order to fix a possible bug. - Removed convo pointer from all functions in Convo Lua library, since we can only access one at a time anyway, storing pointers was redundant. - Changed Convo.New() to only one parameter (title), and it will return a boolean. False if a convo already exists, true if it created a new one. - Removed DemandFocus() call from ConvoDialog. - Fixed a bug that caused a crash when the map was changed while a convo dialog was up - Asset Added: assets/action.png 100620 - Removed _updateDarkOverlay() from GuiManager - Removed multiple unnecessary instances of Screen::Instance() and replaced it with an Image* parameter to routines in GuiManager - added _renderCursorTipText() to GuiManager to clean things up. (TODO: Wrapping this) - Added the ability to change the gui cursor - Changed how the "clickable" nature of entities works. Now an integer, defining a maximum distance between the player and the entity for it to be considered clickable. If set to 0, the entity will not be clickable. For Lua, entity table and GetProp are using the same "Clickable" IDs, however their data type has been changed to int - Added a check in Map::Process() to determine if the entity under the mouse is clickable, and if so, changes the cursor. TODO: This could be a total CPU hog if there's a lot of entities and isn't as optimized as it should be. This should be handled the same way widget mouse focused is handled. - Changed ENTITY_CLICK event to only fire when we're in clickable range of an entity. This removes the need to GetDistance() check from within Lua - Added two special entity layer sections: 0->500 & 5000->5500. Entities on these layers are positioned relative to screen coordinates and NOT relative to map coordinates. There are two sections so that the 0->500 layer entities can be placed under the normal map entities, giving it a static-background appearance. - Added cursor map & real positions to /pos command - Added Game.ToggleChat(bool) to Lua to toggle visibility of the chatbox 100621 - Added Game.SetScreenText() to Lua to manipulate the ScreenText widget - Renamed "speed" to "movespeed" for SetProp/GetProp of actor that affects actual entity walk speed. This collided with the new "speed" for combatant stats. 100622 - Fixed the bug of sending mouse click events to the map even when the event took place on another widget 100625 - Changed encryption scheme for network messages. Channel ID will no longer be one of the several keys used for encrypting data as it interfered with the design of the multi-channel automated manager (Helios). This means that backwards compatibility with 1.2.2 is officially broken. Thank Server for mandatory auto updates! - Changed first parameter in sup/nm network messages to relay the channel ID of the sender, instead of client version. Client version is unused and unnecessary, however since the messages are sent through privmsg, we need assurances that they are coming from a client on our current channel. This is also mainly for the multi-channel Helios to operate properly. - MessageManager messages can now use wildcards * ? in the message ID to hook. Ex: NET_* would run the callback for all messages fired by IrcNet, while * would run the callback for all messages fired ever. - Fixed parsing of user hostnames in IrcNet. Would keep random bits of the real name section ----- PUBLIC RELEASE AS 1.2.3 ----- 100628 - Added DamageIcon entity with Entity.NewDamageIcon() for Lua NOTE: Might want to attach it to Entity.Create() instead... 100629 - Removed species information from combatants and replaced with base stats, accessible via the same method of current stats. (GetProp/SetProp) - Added Duel mode to Game Modes, and lua functions Game.GetMode()/.SetMode() to change the mode - Added GAME_MODE{int:mode} event triggered during GameManager::ToggleGameMode() - Added checks to make sure players don't click map entities while in a duel - Added Actor.Rise() to lua, to rise the z height of the actor by a defined velocity until zheight is 1000 (Will be used for rising-off-map sorts of things) 100701 - Changed ActorStats to a Widget (was an Entity) so that it can be used for the party dialog Game.NewStatsBar(actor, x, y) will return a widget pointer Game.RemoveStatsBar(ptr) To remove the widget created by NewStatsBar 100702 - Rewrote wrapping method for fonts. Will now properly word wrap messages (hooray!) - Fixed handling of \cRGB for wrapped font rendering - Removed \\c escape behavior, as it's never used and slows down the word wrapping routine that gets called more often than it should. - Removed unique routine for message wrapping in Multilines and set it to use the fonts own wrap routine - Added native support for \n line breaking in font multiline rendering - Removed AddFormattedMessage() from Console and Multiline. \n is supported in AddMessage() due to the above - Rewrote URL detection in Multilines. Will now realize the url is being accessed no matter what line is clicked - Added hintbox informing the user that urls are right-clickable whenever a url is hovered. A lot of people seemed to have a problem with understanding that concept. - Added password mask mode for the Input widget. In password mask mode, the letters will be replaced by symbols, and right click, highlight, or cursor repositioning will not work. - Fixed a bug where joining an irc server with a nickname too long would create issues where the internal knowledge of what our nick is, is different than the servers version. tl;dr: Would fail to join channels. - Fixed the same above bug, but also for the /nick command and the nick change method in the options window. 100703 - Fixed case sensitive issue on channel names 100706 - Added generic RightClickMenu widget (that's a little hacky, but works nonetheless) to give us the ability to quickly implement right click menus into various widgets. - Added option to align text buttons either center or to the left - Fixed a bug with rendering text buttons - Removed InputMenu custom menu from the input widget and replaced with the generic menu - Fixed bug that would prevent inputting text in the login screen after a button was pressed - Removed dark overlay for focus demanding widgets 100714 - Fixed bug that allowed the AvatarFavorites dialog to close without closing the child AvatarEdit - Added reference AvatarCreator to AvatarFavorites, so that it can be closed when AF is closed - Fixed bug with centering label widgets - Added Game::ShowInfoBar to display a top bar with defined text for a certain interval, and will trigger a messenger event when closed (INFOBAR{text}) - Fixed bug with colored text in label widgets causing a miscalculation in dimensions - Added Game.IsStatsBarDecreasing(statbarptr) to Lua (Commit to Revision 40) 100715 - Rewrote DataPacket class to not use specific indexes for ReadString/ReadInt (Can now internally optimize packet length by not using string representations of numbers) - Added ReadChar/WriteChar to DataPacket and implemented where possible to further prepare for optimization - Fixed extra whitespace bug in chat bubbles (caused after word wrapping was added) - Successful login will now change the IrcNet RealName value sent to the irc server on connect to the login username - Improved handling of the /whois response. Now sends NET_WHOIS and NET_WHOIS2 (sometimes) messages to be picked up, and prints things cleanly in a readable manner - Updated SDL to 1.2.14 (from 1.2.11). Noteable relevant fixes between versions: - Windows Screensaver can now activate while the window is still up - MIGHT have fixed some audio bugs - Faster I/O for image loading - Fixed crash when a video driver reports higher than 32 bpp video modes. - Improved mouse input responsiveness - Increased accuracy of alpha blending routines. - Added IsAlphaBlending() and UseAlphaBlending() to Image class. Used to access the (much) slower alpha blending routine and bypass SDL's normal (lazy) alpha blending method. NOT to be used for images that render every frame. Mainly used together with NewImage() in order to draw on a blank, alpha channeled canvas. 100716 - Fixed a bug in Multiline where it wouldn't detect an end of line \cRGB while splitting lines - Cleaned up join/part messages a bit - Added optional image icon to GameManager::ShowInfoBar() as a fourth parameter (Same for Lua too) - Removed cost parameter from inventory items (WAS going to replace with level, but it'd make things a bit messy when trying to stack common items, so we'll just use the old method of renaming shit) - Removed filename parameter from achievements. If we want to use custom icons in the future, the filenames will be based off the achievement names. - Made it easier to get the "Need A Spam Blocker" achievement (now 5 messages in 2 seconds, instead of 10) - Fixed "Fashion Addict" achievement FOLLOWING IS UNTESTED: - Added the same RGBA->RGBA blit override support that's in Image to Font - Added Font::GetTextRect() since it seems to be needed quite often - Removed Entity.NewTextObject() from lua - Rewrote TextObject entity to support font changing, and word wrapping - Added Entity.SetText() and Entity.SetFont() routines to manipulate TextObject entities in Lua - Added Game.GetCursorPosition() to Lua - Fixed bug that allowed people to use \n in their nickname - Fixed bug that allowed nicknames containing only \cRGB codes if they use /nick command - Fixed bug that let people insert \n commands into outgoing messages (/me, /music, say, etc) 100717 - Replaced the old chat bubbles with a ChatBubble map entity (that exists one layer above the speaking entity) - Fixed bug that would allow multiple InfoBars to show up - Fixed placement issue with InfoBar icons - Fixed bug that allowed achievements to be earned while not on a map (And thus, crashing the client) - Added Map.GetID() to Lua. Will also work before Map.NewBasic() 100720 - Added the hiding of hud and common windows from the gui when duel mode is activated 100724 - Added right click callbacks to Multiline and Button widgets - Worked on Inventory a bit, implementing the right click menu and the left click swapping, while still using a multiline. Still a work in progress. 100726 - Added disk save/load to LunemParty - Added Lunem entity class to do a unique method for avatar downloading, and disk IO for party/storage access 100728 - Added party slot management functions to Player lua lib - Added management routines to LunemParty (add, remove, etc) - Added Entity.Add(pEnt, iX, iY) to lua to add entities to the map based on their pointer, instead of a table. This is to be used to add Lunem from our party to the map during a duel - Changed Entity.Create to where, if no coordinates are specified, the entity will NOT be added to the map. But the scripter must use Entity.Add() or Player.AddLunemToParty() with the returned pointer, else there will be a memory leak. - Added a boolean to Entity base to stop the EntityManager from deleting it (When we want it managed elsewhere, such as the party, or game manager) 100729 - Added GameManager::ToggleHud and Game.ToggleHud to Lua - Hud elements (including open dialogs) now close when the map changes - Improved party member disk io - Shrunk /troll emote image (assets/emoticons/13.png) to be about the same size as the others - Added unique download system for Lunem images - Fixed bug where Actor::SwapAvatar() would try to swap even when the loading avatar was still loaded 100731 - Added /datass emote (assets/emoticons/16.png) - Added /rage emote (assets/emoticons/17.png) - Fixed a bug that caused a crash while right clicking multilines - Disabled right clicking urls from a multiline when Multiline::onRightSingleClickCallback is set - Fixed display issue with messages going through the "act" net message (beat, /me, /music) - Reduced number of party members (lunem) down to four (from five) - Redesigned party dialog 100802 - Fixed bug that allowed negative health for actors - Added Player.UseItemOnPartyMember() to Lua - Added DUEL_USE_ITEM and USE_ITEM (with slot) events. DUEL_USE_ITEM not working yet. - Added the framework for selecting party members to use a particular item on - Changed ActorStats bar animating to use a timer instead of calculated during render - Changed the way GiveItem() works in lua. Now uses a table. - Replaced HasItem() with GetItem() in lua, that returns the item table of the specified ID if we own it, or nil - Added "use type" to item properties, to specify various use flags. (Duel useable, use on party member, field only, etc) Use types have yet to be defined. - Removed trading (wrapped in #ifdef TRADE_ENABLED) until the item system is fully rewritten (Commit to Revision 42) 100805 - Added LoadFlags/SaveFlags to Entity class for saving/loading flags from a binary FILE stream - Added the loading/saving of flags to the lunem party file 100806 - Added two slots to combatant types (now a total of five) Lua accessible by GetProp/SetProp "type0", "type1", ... "type4" 100807 - Patched a bug in updater.exe dealing with running the client under Windows 7 (ShellExecute doesn't like ./ prefix). Same bug has been patched in the main client for when running the updater. - Added "border" to Entity.GetProp/SetProp (boolean). If true, will render a red box around the entity - Added editor mode bool to Map class to change some behavior (such as no ENTITY_CLICK event if enabled) - Added Map.IsEditorMode() and Map.SetEditorMode(bool) to Lua - Added Game.GetCursorMapPosition() to Lua 100808 - Fixed bug in FontManager where \n would double space lines - Fixed bug that would create a beep/window flash when the client received a slash command from another user - Resized avagen avatars from 32x64 to 40x80 (allows better hairstyles and accessories) (Commit to Revision 43) 100819 - Removed automated animation behavior from Image class. Will now be handled on an individual basis in Actor, StaticObject, or whatever else may require animation properties. (For the upcoming renderer optimizer to work) - Added Actor::StopAnimation(), Actor::PlayAnimation(), and associated animation timers. - Fixed "You must wait 0 seconds" bug for avy change, /join cooldown, etc. - Moved mJumpHeight back to Actor class - Changed Actor::GetBoundingRect(). Will now resize itself when the actor jumps - Added display of what exactly happened when the avatar failed to load (Actor & LocalActor ::AvatarError) 100820 - GameManager::ToggleGameMode() will now set the players speed back to walk if they were running ----- PUBLIC RELEASE AS 1.3.0 ----- 100828 - Fixed bug that caused a crash when MNGs with duplicate frame key values were unloaded - Fixed bug in DownloadManager where multiple downloads of the same URL would result in falsly reported failures (A download assumed the file was done and tried to access it while another thread worked on filling it with content still) - Fixed bug in ExplodingEntity class. Problems caused by a timer that didn't need to be there. ----- PUBLIC RELEASE AS 1.3.1 ----- (Merged into trunk) 100824 - Added routines in Entity/Actor classes to accomodate for screen->AddRect() method - Added timer in ChatBubble entity, instead of calling a SetPosition() during a render 100828 - Fixed bug in ExplodingEntity AGAIN, AGAIN dealing with the timer. - Renamed entity class type in Entity.GetProp from "Type" attribute to "CType" to avoid conflict with the combatant types (Commit to revision 47) 100829 - Changed max stamp length and stamp render sizes - Fixed rendering issue with stamps (wouldn't use anti-aliasing while rotating). Also positioning issue. - FINALLY "fixed" the alt+tab bug. Actually a bug in SDL where the KMOD_ALT modifier would remain attached to the keys. http://bugzilla.libsdl.org/show_bug.cgi?id=659 Patched in the GuiManager heartbeat with a SDL_SetModState(KMOD_NONE) call when the window regains key focus - Fixed bug where certain frame widgets wouldn't be moveable, even though the property was set. (It did an mSizeable check where it shouldn't have, and some were not sizeable, but moveable) - Changed max content length of a single chat message (and general console input) (Now about 256chars) - Fixed bug where players duel choices still showed up while the duel ended with it still up (Commit to revision 48) 100831 - Replaced RemotePlayerMenu with a RightClickMenu widget (./interface/RemotePlayerMenu.h/cpp obsolete) - Changed XML format of WorldsViewer. - Removed IRC server usercount query from WorldsViewer. Most servers refuse to respond. usercount will now be sent from the master server, based on user information provided by constant user check-ins from the client. 100902 - Added constant check-in with the master server. Will send information from our client and return an xml file every 15 minutes or so, allowing the server to keep better track of users and provide whatever sort of information (Such as private message alerts, news alerts, item drops, etc). - Removed "Back To Login" from the ESC menu. (Commit to revision 49) 100903 - Scrollbar widget will no longer render the scroll icon if GetMax() < 1 (Buttons are still drawn though, but meh) - Added Widget::mCanSortChildren. If set to false, MoveToTop()/MoveToBottom() and related have no effect. - Added Avatar::mError string to hold the last error generated by the class. - Added detection and blocking of JPG images in the Avatar class, along with a more verbose alert that we have used a bad format, in LocalActor::AvatarError() 100909 - Chatbox will now toggle to button mode, and can be brought back up during duel mode (Commit to revision 51) 101007 - Fixed bug where other avatars wouldn't animate when we join until they move. - Removed beat and trade buttons from remote player RCM 101014 - Fixed an infinite loop bug in MNG loader. Caused by mngs lacking an MEND chunk - Fixed temporary file caching in the downloader, for player avatars - Fixed input focus issue when a right click menu was closed - Fixed bug where emotes would be displayed behind the chat bubble. Now deletes any active bubble. (Commit to revision 52) 101015 - Added some NULL child Add/Remove checks in Widget class - Added alpha version of the Backpack, a complete renovation of the inventory system that includes icon based item list, sortability, inherit properties to items, easily manageable item code, using unique indexes for items that will sync up item information with the master, and will eventually upload/download backpack contents from the master. - Removed inventory and party buttons from the hud until the backpack is close enough to a release stage. (Commit to revision 54) 101016 - Added FlagRender() to Multiline, Input classes. (Input unfinished) - Renamed global Screen* screen to g_screen - Fixed bug in Entity::ClearActiveChatBubble(). Didn't properly dereference mActiveChatBubble - Reskinned the Backpack, and added animation properties - Added Dorra display to the backpack 101017 - Added LocalActor::mCanChangeAvatar and "AvyLocked" for SetProp/GetProp in Lua to query it. When enabled, players cannot use an avatar from their favorites list. Resets on map change to false. - Added timer to stop emote spam. 1 second delay between when emotes. - Renamed /normalize to /normal - Adjusted FlagRender() in places, and added testing code to output chosen rectangles to update in Screen class for later testing and implementation of the optimized renderer (Outputs only in debug mode). - Removed TimeProfiler usage from all files - Changed backpack empty slot to index 0 instead of -1 - Added GuiManager::GetPreviousMouseX() and ::GetPreviousMouseY() - Temporarily disabled GameManager::ShowInfoBar() until I can figure out a solution for the collision with the backpack dropdown 101021 - Fixed a major bug in net listeners for 'sup' and 'nm' messages. Messages considered 'illegal' would try to access a member of a null pointer when printing the warning to the console, causing random crashing of entire channels when someone joins or leaves. (Brought to my attention by BD) - Fixed bug with the "You must wait XXX seconds" message giving a bad timeleft count when you activate it too often. - Added ItemsDatabaseManager class and associated items.lua database 101030 - Rewrote areRectsInteresecting() to a proper working test, rather than the crap it was before. Doing so fixed several things, mainly isInCamera entity tests. - Removed the ItemsDatabaseManager for now, will deal with at a later date. - Removed depth rendering from actors since it's a cpu hog, and is never used. 101113 - Added Widget::RemoveAll() to purge all children - Rewrote WorldsViewer to use WidgetList for world storage Also working towards another complete redesign (Commit to revision 55) 101202 - Removed Backpack.h/cpp and WorldsViewer.h/cpp, until they're finished - Fixed bug in Login screen that didn't re-display the login buttons after an error message was returned 101205 - Stripped out the following source files and all related routines: Inventory.h/cpp MyAchievements.h/cpp Achievements.h/cpp PlayerActionMenu.h/cpp MiniMenu.h/cpp TerrainTest.h/cpp ActorStats.h/cpp ItemTrade.h/cpp ScreenText.h/cpp Combatant.h/cpp Lunem.h/cpp This means the following general features have been removed: - Lunem parties and combat - Item management and trading - Achievements - RPG statistics All of which were previously removed from the game (or under construction), and the source files were simply dead weight in the application. - Added link to Options Dialog back to HUD - Re-enabled Game::ShowInfoBar() as the new backpack is currently gone (Commit to revision 57) ----- PUBLIC RELEASE AS 1.4.0 ----- 101214 - Added FlashWindow() winapi call to GuiManager::ThinkInSeconds() to attempt to fix notifications in Windows 7 - Fixed bug in saving avatars from AvatarCreator. If saved/ directory did not exist, it would not generate the avatar. 101215 - Replaced titlebar "--------" toggling with native window flashing 101216 - Added MAP_KEYDOWN, MAP_KEYUP, MAP_MOUSEDOWN, MAP_MOUSEUP events that could be hookable by lua. Each one comes with an "id" parameter that can be used to identify what button/key. - Rewrote Map::GetNextEntityUnderMouse() and Lua's pEnt2 = Map.GetNextEntityUnderMouse(pEnt, bMustBeClickable, bPlayersOnly) 101217 - Added to lua: ptr = System.NewRightClickMenu() System.AddToRightClickMenu(ptr, "text", "callback", userdata) Game.OpenPrivateChat("nickname") "blocked" property to RemoteActor's SetProp/GetProp (boolean) 101218 - Added FlagRender() call to Widget deconstructor, Scroller, Input, and ColorPicker - Set ColorPicker input to readonly due to laziness when trying to hook to FlagRender() - Added to lua: bool = Map.IsRectBlocked(x,y,w,h) - Added MAP_MOUSEMOVE event for listeners (Parameters: x, y) 101224 - Changed values of LAYER_USER and LAYER_SKY to seperate them out and allow abstract layers between LAYER_GROUND/LAYER_USER, etc. - Renamed login wallpaper to assets/login.jpg (instead of assets/tetrius.jpg) (Could not commit as main server was under construction) ----- PUBLIC RELEASE AS 1.4.1 ----- 101231 - Added "center" bool to lua Get/SetProp for Text object entities along with internal centering property in TextObject entity - Rewrote Entity.SetText(...) to .SetText(ent, "text", r, g, b, maxWidth<0>) (for TextObject entities only) and added coloring support to TextObject::SetText() - Changed button callback activator to mouse up. 110103 - Made various adjustments related to the rendering optimizer - Added core/RectManager. Used to generate lists of rectangles that need to be redrawn by collecting a dirty list of rectangles and optimizing in such a way that none overlap 110105 - Fixed bug where the client would continue to check into sybolt without being on an irc server - Fixed bug with login dialog not saving credentials when "Remember" is set 110118 - Did VERY slight optimization to GuiManager's main loop - Made Widget::IsVisible() recursively check parent visibility 110126 - Realized the man I'm in love with is straight 110320 - Made extensive progress on the optimized renderer 110321 - Made extensive changes across the engine in an attempt to reorganize. Including moving mChat/mHud out of GameManager, adjusting function calls within Widgets, and more. Is a work in progress. - Added HintBalloon widget and implemented in GuiManager - Additional progress to the optimized renderer (Commit to r68. Note: r68 is not meant to be compiled!) 110322 - Moved chatbox command hooking and callbacks to their own file: ChatCommands.h/cpp - Removed BasicMap and added all functionality to Map. - GameManager::ShowInfoBar now makes the bar a child of Map, rather than GameMan - Moved mChat and mHud to Map class - Split netSend* functions into IrcNetSenders.h/cpp - Relocated IrcNetListeners/IrcNetSenders to ./net subdir - Changed app attention flashing to just being on/off, instead of flashing states at 1 second intervals (less annoying, but still apparent that something requires user attention) - Cleaned up data types in Multiline - Added Multiline::SetSelected to force a redraw when the selected line is changed - Removed showinchat parameter from Entity.Say() in Lua - Added Entity::Say() and removed redundant code that mimiced the behavior - Fixed GuiManager::GetUserAttention() trying to flash window state when the window has focus - Redesigned CheckLoadingAvatar() in Actor. Now processes on its own timer, and doesn't get called during the render phase. - Removed Entity::SetFlag/GetFlag/LoadFlags/SaveFlags and associated Lua Entity.SetFlag/GetFlag/ClearFlag. The flag system will only be maintained at a Map-level. - Calculated Entity shadow into AddPositionRectForUpdate(), but it's a really lazy calculation and not very accurate. - Removed Emote management from Actor and gave the functionality to ChatBubble (Emotes are not animated yet, though) (Commit to r69) 110324 - Fixed highlight + mouse drag in input boxes. Will now continue to scroll text properly when the user drags the cursor outside the input box. - Added SDL_VIDEOEXPOSE handling to GuiManager() to trigger a FlagRender() for the entire screen 110325 - Added an additional exclusion parameter to GuiManager::_sendToGlobalEventHandlers(), but frankly, it's just a hack to prevent a globally listening widget from getting SDL_MOUSEMOTION in GuiManager::_distributeEvent() if they have/had mouse focus. - Fixed bug where a widget would be sent the same SDL_MOUSEMOTION event twice if it happened within the widget - Added StaticObject::ToHorizontalAnimation() - Removed avatar loading icon from actors (Will be handled via lua instead) - Added messenger events ENTITY_LOADAVATAR{entity, file, replaced}, ENTITY_SWAPAVATAR{entity}, ENTITY_BADAVATAR{entity, id} to let Lua do whatever it wants when an avatar change is triggered - Removed actor name rendering temporarily until a new method is found that works well with the new renderer - Removed some unused options from the OptionsDialog, sans voice chat, of course. - Moved NetSend* routines out of LocalActor and into IrcNetSenders - Disabled rendering of GuiManager::mAlert, until it gets replaced by a Label or something - Added slide animation to ChatBubble (also applied to text messages, as well as emotes) - Added complete skip of the render pass in GuiManager when there's no dirty rects to update. - Added "LoadingAvatar" boolean to Entity.GetProp() for Actors (to see if there's a background avy loading) - Added check in Entity::SetPosition() as to whether the new position was different than the current before telling the renderer to redraw it's rect. Additionally, EntityManager will no longer QueueResort() if the y position doesn't change. 110403 - Added WorldViewer dialog class - Children of Frame widgets will only be drawn within that parent frames clip (bounds) - Fixed bug in Input widget where SetActive(true) would set mReadOnly to true. - Fixed minor bug in DownloadManager. While processing through downloader callbacks, if we tried to queue up another download, a crash could occur when a previously completed download wasn't cleaned up properly in the list. Although technically a bad idea to queue up downloads from within callbacks of completed downloads, it is a scenario that could happen, and suprisingly hasn't happened until now. - Implemented WorldViewer on connect, and when map loading fails - Removed resize calculations from Checkbox::Render() and put into Checkbox::SetCaption() - Removed Image::SetClip() and replaced with a real clip stack, accessed via Image::PushClip()/PopClip(). Clips popped onto the stack will be the intersection of the new clip and the clip at the stack top. - Temporarily removed caret flashing for Input class until a timer is added for it (since it won't update on its own) (Commit to r75) 110405 - Added Screen::IsRectDrawable() and implemented in Multiline 110407 - Removed connections.cfg references and hardcoded the urls temporarily until I finally decide how to deal with things. 110414 - Temporarily removed explosion effect when entities leave a map, until I decide to make it work with the new renderer - Added default background image to WidgetList - Properly hooked the app input focus event from SDL using the event queue, rather than checking SDL_GetAppState(). - Fixed issue with the title flashing. FlashWindow() + constant SDL_WM_SetCaption() = bad - Removed unused properties from GuiManager - Fixed bug where Label::SetCaption would not redraw the old position before the new one (That is, if the text is now shorter) - Changed RightClickMenu behavior to allow NULL callbacks for options. Items with NULL callbacks will not close the menu when clicked, and will not be highlighted when hovered over. - Removed coloring from Button captions and used clipping around buttons for rendering 110416 - Changed dimensions of the collision rectangle for Actors, to avoid certain errors in calculations (no longer is 16x16) - Added "Recommended World" to WorldViewer. The first item the server sends will be displayed as the recommendation - Made a change to how widgets get mouse focus. A widget can only get mouse focus if it's within the rect of that widgets parent. This means that if a parent doesn't contain children within its rect, and a widget is hanging out of the parents rect, it won't be able to receive events on the outer part. - Added an override for WorldViewer's close button. If the game doesn't have a map loaded, the WorldViewer will not allow itself to be closed - Added confirmation popup for when the user tries to delete an avatar from AvatarFavorites - Redesigned several interface buttons - Increased ChatBubble display velocity for longer messages - Fixed screenshot saving. GuiManager will now store a pending Screenshot request to be handled the next process loop directly after a full screen redraw, so that we don't save a partially-updated surface to disk - WorldViewer filter will now also search world descriptions for a matching pattern (This way people can stick their name or something into the description for friends to search for, and have a decent world name) - Added debugmap console command to see collision/bounding information for map entities 110417 - Added ResourceManager::ReloadFromDisk() - Added SDL_Colorize() to SDL_Misc.cpp/h and implemented in Image::ColorizeGreyscale - Added GuiManager::ColorizeGui to reload a list of assets and recolor them, in order to create an interface that can change colors on the fly - Removed internal highlight colors from Multiline/Input and replaced with GuiManager's mBaseColor - Added System.SetGuiColor(r,g,b) to Lua - Fixed camera shaking (offset) calculations not forcing a camera redraw - Added color invert to Frame titles and selected lines in Multiline when gui->mBaseColor is considered dark Need to add when highlighting lines in Input, however it's a lot more difficult... - Fixed Cut/Copy menu items for Input right click. (When the input lost focus, it SetSelection(0,0) on itself) - Added animations to password input boxes - Fixed bug that would cause an overload to RectManager if a lot of entities moved while the window was minimized (Since the rectangles were purged only on GuiManager::Render()). Solved by skipping Screen::AddRect() if minimized - Fixed rect not updating if calling Entity::SetVisible(false), or Entity::SetLayer(), or Entity::SetShadow() ----- PUBLIC RELEASE AS 1.5.0 ----- 110419 - Fixed bug in lua Map.SetColor() would not trigger a redraw of the map - Fixed Actor.LoadAvatar forcing 8 parameters minimum, instead of 7 - Entity.Exists() in lua returns a 1 or 0, NOT boolean true/false. Should be reversed - No GetProp for zheight - Get/SetProp movespeed to just speed 110424 - Fixed bug where buttons could be clicked while !IsActive() 110425 - Fixed recursive mkdir() bug where it would fail on occasion when trying to make multiple layered directories (Commit to r79) 110427 - Added Actor::SetAvatarModifier() wrapper and fixed redraw issues when someone used an avatar modifier - Updated merger.c to wait for fro process to terminate itself (before forcing it to), to update files. - Fixed fro.exe reporting invalid version number in Windows - Removed XML formatting from login data. Is now plaintext key/value pairs. - Added cache/manifest.res hash checking to login. If the local manifest doesn't match remote, will start up AutoUpdater - Improved error handling in AutoUpdater a bit - Added uploader system to the server. Will only require the client to be zipped up and uploaded through the browser, and it will extract, hash, and generate everything necessary for an update. (No longer have to screw around with getting updateBuilder to work properly) 110429 - DownloadManager will now automatically delete any downloaded files that do not pass the hash check 110504 - Fixed issue where NICK messages weren't correctly tokenized for certain IRCd's (such as InspIRCd) (Commit to r80) 110505 - Stripped color codes from multiple network messages - Fixed a few bugs in the auto updater - Rewrote DownloadManager to do a better job at reporting connection errors - Removed global byte cap from DownloadManager, and made it per-download settable 110506 - Added NET_DOWNLOAD_SUCCESS/NET_DOWNLOAD_FAILURE messenger events to DownloadManager when downloads finish - Added NET_DOWNLOAD_QUEUED messenger event to DownloadManager::QueueDownload() - Added CREATE_FRAME/DESTROY_FRAME messenger events to Frame::Frame() and Frame::~Frame() respectively. Will be used to detect when avatar favorites, editor, options, etc open/close - Removed the piece of crap SoundManager, because it doesn't work when the window has no focus and audio alerts is the whole point of it atm. Will be replaced by a real sound engine when appropriate. - Commented out audio settings tab in OptionsDialog, since it no longer has any use. - Added custom event sending to CheckIn, to allow the server to tell lua to do whatever, at whatever time. (Commit to r81) 110506 - Added minimum dimensions of an avatar to be 20x20 (Only implemented in AvatarEdit) - Moved AvatarEdit to its own source files. Idk why it's been merged so long with AvatarFavorites - Rewrote AvatarFavorites to utilize AvatarManager.lua (Without folder and sorting support for now) 110507 - Added Entity.GetOrigin/SetOrigin to Lua - Phased out the XmlFile class wrapper - Removed global config, and game->mPlayerData - Implemented KeyValueMap as game->mUserSettings, saved to profile/settings - Added persistant map flag and user flag saving - Added Player.SetFlag/Player.GetFlag to lua to maintain cross-world flags for our player - No longer rely on the user to do Map.NewBasic() in lua Build(). The map will automatically instance itself, since there is no expectation to overload the map with other options in the future. 110519 - Fixed repeat calls to mapLib_CloseLuaState() while using an invalid pointer for the lua_State - Fixed map camera rect not being forcefully updated via lua Map.SetColor() (It felt like there was no reason to update, since the camera never moved) - Added Map.SetGravity()/GetGravity() to lua 110520 - Added incomplete code for drawing actor names to the map. But.. it's gross. And I don't like it. 110526 - Made some adjustments to AvatarManager.lua. Now maintains version numbers to prevent having to wipe avatar lists again - Fixed Remember option in the login ----- PUBLIC RELEASE AS 1.5.1 -----