Menu

Show posts

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

Show posts Menu

Topics - IsmAvatar

#1
Announcements / Major Security Bug "ShellShock"
September 25, 2014, 04:33:12 PM
If you haven't heard the news, another security vulnerability probably worse than Heartbleed has been discovered in Bash.
With it, an attacker can craft a very simple http response and have your server run arbitrary code.

As soon as we heard the news, we immediately tested it and updated bash to the latest patched version, just to be sure.

We do not believe our server was vulnerable to these types of attacks, as our apache does not seem to interact with Bash in that way. Our bash was indeed vulnerable, but again, nothing seemed to use it, so no harm there.

Other sites may still be vulnerable. An attack could publish database information, files, and other requests from users. This means that an attacker could gain access to passwords, credit card information, and public keys, even if the server isn't storing them - just from the fact that they are sent over the net to the server at some point.

Standard security precautions are recommended. Change your passwords regularly. Be careful where you enter your credit card information, and frequently monitor your account transactions and statements.
#2
General ENIGMA / LateralGM endorsement
December 17, 2013, 04:17:16 PM
As of today, I'm officially endorsing Robert B Colton as the maintainer of LateralGM. My hope is that this will allow speedier development availability to the public due to less administrative overhead from having to go through me.

I'm aware this is a controversial move, but I have made it clear that I am unable to continue maintaining LateralGM due to a lack of time and a refocus of priorities. As a result, with me being the sole maintainer of LGM, it has stagnated and has been unable to compete with the products that it is intended to compete with, while Robert's fork has advanced a whole slew of new features with the future in mind.

Personally, I'm not a fan of Robert's software development methodology, and he has a lot to learn, but his commitment to the product is ineffable and, with me no longer available, I see no other way.



That said, my methodology and intentions with the product are explained in a few places, but I will restate them here in hopes that maybe Robert will listen and lead LateralGM to a solid future and not turn it into vaporware or such.

* First and foremost, LateralGM was created as a tool for dealing with the Game Maker file format. A vast majority of the users of LateralGM look to it as a way to open their GM files, especially their corrupted files. As such, this is the core of our product and it is never to stop functioning. Likewise, if LGM corrupts files, this is a critical failure.

* Secondly and finally, LateralGM has succeeded by learning from the mistakes of other products. This was the driving force behind LateralGM becoming a full-fledged IDE and not just a file-format tool - to deal with the shortcomings of Game Maker.

The reason it succeeded was because I saw where other products failed - such as G-Java and G-Creator. In my opinion, the reason they failed was because they focused on features and not core functionality. They had some fantastic and admirable features that looked very futuristic and fancy, some of which would be awesome to add to LateralGM, but without a solid foundation/core, it was just feature vaporware. As such, LateralGM learned 2 things. First, develop a solid core, and make sure it never breaks. Second, Features are second-class citizens, releases are first:

So declare the set of features you would like to see in a release, and then be ready to declare feature freeze - a time in development when you will introduce no new features into a release and will instead focus on fixing ALL the known bugs before that release. This is extremely difficult, because features are fun and leftover bugs are a pain, but it's also extremely necessary. Leaving bugs behind is what GameMaker does, not LateralGM. That said, some bugs aren't worth fixing, but they are rare.

A release is not "I've made a bunch of features guys, here, have a release so you can check them out." - that's what a prototype is for, and that's what Feature Freeze beta is for. You've made a bunch of neat features, congratulations, now fix all the leftover bugs and THEN you can declare a release.


Are there improvements to this method? Sure. But we don't have the manpower for it. From being in the workplace, I've learned a few things about software development methodologies and releases that more manpower affords you. We can't just truck through releases like they do - we need to buckle down and focus on what we said would be in the current release, or else officially bump it with good reason and update your roadmap.


I miss working on LateralGM and working with you guys. It was a lot of fun. I wish I still had the time to work on it. Maybe some day I will find some time - believe me, I've been thinking hard on ways to factor it in. If and when that happens, I can't say if I'll continue development in my own fork from the old code (where I left off) or if I pick up Robert's code and try to deal with our differences. But one thing's for sure - at this point in time, there's only 1 thing about LateralGM that I care about and that concerns me, and that's the list of open bugs. Those bugs need to be fixed, and if they're not and we keep releasing features, we are headed down the same path as G-Creator.
#3
Proposals / Manual, the Button
May 13, 2013, 09:05:51 PM
I'm starting this topic to discuss viable solutions for the ever-looming non-functional Manual/Help button in LateralGM.

Obviously, the problem is that LateralGM doesn't ship with a manual, so there's not much to open. This could be a temporary thing - maybe some day we'll have a manual to ship with. It could be a permanent thing - the concept of a flat-file manual may be obsolete. Obviously, people still want a button to link to help, although it may not necessarily have to be the traditional Official LGM Manual.pdf/chm.

I think there's a general agreement that an official LGM manual.pdf/chm (offline file) will not be happening anytime soon. It would require a significant community effort to pull it off, and frankly, it's not high priority compared to some of the better uses a community effort could be put towards.

One very attractive option is to somehow link it to the Wiki. I really like this idea, but it does disadvantage our users who work offline. Realize that "working offline" isn't a dinosaur concept - when you take your laptop on a trip, it's not unlikely that you will have long times of being offline, and if you can't figure out the exact specifics of function X, you can't make any progress on a significant aspect of your game.
The other question about this is how will it be displayed? In the default browser? In our own little browser window? (Probably the prior - just launch the default web browser) A lot of the wiki follows a fairly standard convention, making it parsable so that we could potentially present it in whatever way we want (for reference, see EnigmaBot on the IRC, ask him to "!get show_message" or whatever function and he actually fetches and parses the description from the wiki)

Another attractive option is to allow the user to launch their own manual. Many users download a copy of the official GM manual and bring it with them. This comes in a few different flavors (html, cfm, pdf). Plus, some day there may be a similar option for an LGM manual. This is a nice modular idea, but difficult to implement because of all the different possible ways a manual can be represented. Do we just give the user an arbitrary textbox for "execute this command" that gets executed when they click the Manual button?

Of course, you're probably thinking "Couldn't we do both? Wiki for online users, launch for offline". Or some variation of that. Of course, then we'd need to flesh out the details for BOTH options, AND figure out how to decide which one to execute. To give you an idea, when we do the wiki option as the default, we launch firefox (or whatever browser) and it's out of our hands. Firefox launches, goes "oh, gee, I don't have internet. Here, have a nice NO INTERNET page" and that's the end of it - LateralGM doesn't know whether it worked or not. To fix this, we could do a network connection test - send a network ping or something to the wiki, and if that doesn't work, use the offline version.

So yeah, just a couple ideas I wanted to throw out there and see what you guys think. It'd be great if you could come up with some mock-up designs of any UI adjustments (e.g. Settings Panel) that would need to be done to make it a reality. Or maybe just a description of how exactly you'd want it to work.

Opening this to the Public Forum.
#6
Announcements / https (Browser security)
May 03, 2013, 10:26:28 PM
Basically, the announcement is that I've renewed our self-signed certificate and enabled SSL on this site, meaning that you can now use https for security while browsing and logging into the enigma website, forums, etc.

However, that's hardly in english, so I'm going to dumb it down into something you guys can actually understand and read, and in the process I'm going to show my ignorance of the technologies and probably explain something slightly incorrectly. Feel free to correct me, but I think I will get the gist of it, so...

Http is a great way to send and receive plain text, and maybe even some binary data like images and files. But it's not exactly secure. If you log in over http, the following happens:
You generate some packets with your username and password, and send them in the general direction of the server. This information is pretty much plain text. Along the route, it will go through your network, to your router. Then, your router sends it off to your ISP, and it bounces around the internet before it gets to the server ISP, the server's router, and then the server. At any point along that line, a number of computers can easily "sniff" those packets and see what's in them. Anybody on your network can (connected to your router). Your router can, but they're never set up to, because it's useless information for them to keep storing packets. Your ISP can. After that, it bounces around the internet, where not many people really care about it. Then it gets to our server's ISP, router, and server, where nobody's going to sniff it because we pay good money for that server, so it's going to be secure.

There is encryption, and there's a fairly standard way of doing that, and that's called HTTPS, courtesy of SSL. When you use https, your packets are encrypted at your computer. People can still sniff it, but they can't see what's inside. Eventually it gets to the server, and the server knows how to decrypt the packet because it more or less told your computer how to encrypt it (also, the server sends you back encrypted data, which only you can decrypt, so that's nice. Makes loading a page use a tiny bit more cpu, but hey, encryption ftw).
This is done through the magic of certificates and signing and keys and other stuff I won't bore you with. But the certificate is important to explain because it is "self signed". When the server is telling you how to encrypt it, you want to make sure you have the right server, and that our server isn't just someone pretending to be our server.

We provide a certificate, and your browser needs to trust it, because nobody else can provide our exact certificate, but they can provide their own certificate and pretend like its ours. To prevent this from happening, we can ask some other company will sign our certificate - preferably a company that is known to do good signing. Your browser has a list of a bunch of well-known ones already written in. Which means that if our certificate is signed by a company that your browser knows, it will automatically trust our certificate - there's virtually no chance that you're being phished.

However, we haven't asked some other company to sign our certificate (yet), because it costs money, and some of them (like digicert, probably the best-known one) cost hundreds of dollars. We're not paying that. So we've self-signed our certificate until we can find a cheap signer (we're looking into it and we'll make a decision very soon).

So, if you want to use our website/forums securely, you need to navigate your browser to https://enigma-dev.org at which point your browser should hopefully yell at you and say "This certificate is self-signed! Are you sure you trust this website?!" and you need to decide if you trust it's us, or if you think it's a phisher. Since we just set this up, it's unlikely that anybody phished it that quickly, so I'd say it's fairly safe to trust it. In firefox, this is done by "I understand the risks - Add an exception".

The alternative is to continue sending your password to the server as plaintext. If someone's going to phish, it'll be even easier to steal your password that way, rather than all the hastle of setting up a certificate and stuff like that. So frankly, there's no reason not to trust our certificate - even if it is phishing, because what's the difference?

At any rate, NOTE, if we get our certificate signed by someone else, we'll probably need to replace our certificate. Your browser will automatically recognize that one, so you won't need to take any steps, but the old certificate won't be valid. So you could just wait until then, rather than taking the extra steps to trust our self-signed (possibly temporary) certificate - and we'd understand. It's your choice. Our self-signed certificate is provided for those who want that extra layer of security, especially in their own network (even in the meantime).

I've mainly done this for myself, since I'm on a network with a bunch of people who are network programmers and use packet sniffers on a daily basis.

Anyways, there you go. Now you can use our website through https.
Please make sure you see the Lock icon next to the URL (in firefox at least. Or whatever it is on other browsers) before submitting your password.

Enjoy
-IsmAvatar
#7
Announcements / Thanksgiving Holiday Updates
November 26, 2012, 03:18:53 AM
Most of you probably haven't noticed this yet, because most of you don't bother to use the Tracker since it was quite broken - but Josh and I have put a little elbow grease into a new bug tracker idea to replace the old Bugspray system that broke after the last SMF update. We're happy to present it to you as a little Thanksgiving present. You can view it by clicking the Tracker link up top, as usual.

The new tracker utilizes the Github Issues system, and all old tickets will hopefully be migrated soon as well.

But wait, does this mean you'll need a github account to report a bug? And why do we bother to emulate it here, rather than just having a redirect?
No, that's where it gets clever! We've hooked up your forum/enigma-dev accounts to this system, so as long as you are logged in here, you can post or comment on issues without needing a github account. Technically, our old friend EnigmaBot posts on your behalf, but we try to keep that as transparent as possible so it doesn't look like every issue/comment was posted by EnigmaBot! One little quirk of this system is that posted issues created through the bot will have a [u###] in the title. This is just to help EnigmaBot to link your enigma-dev account.

If you do have a Github account, you may click on the link to Github and post/comment that way, if you'd prefer, or you can use our system and let EnigmaBot post on your behalf. When viewing issues here, anything posted by a github user will have their username italicized, and will link to their github profile; enigma-dev users will appear non-italicized, and will link to their enigma-dev profile. In the future, we may invest in linking accounts — ie, your ENIGMA account will keep track of the name of your GitHub account if you can prove your ownership thereof. In the meantime, you'll just have to put up with some issues and comments being from GitHub while others are from the forums.

Josh writes:

On a separate note, I cleaned up the forums a bit. You'll find the avatars section in your profile offers a default set of avatars again. If you don't have an avatar set, I encourage you to pick one as it makes skimming the forum and identifying people easier. Do not be surprised if I start assigning octocat to people.

Now, on to parser progress.
The "basics" are "working." This includes correct lexing around comments, macros, etc, which means that anything that works in C++ works in ENIGMA. However, I want far more than that, and so I've begun a specification page for features of EDL beyond those of GML. You can find the page on the wiki here.

Moreover, I am going to be maintaining an information page regarding adding export languages to ENIGMA. That page can be found here.

If there is anything you would like to see in ENIGMA which is not covered on that Wiki page, post about it here. I am in the process of adding some of my bullet points from the proposals board.

Hope those of you who had Thanksgiving celebrations enjoyed yourselves.
#8
Announcements / Email server fixed
April 05, 2012, 01:34:32 AM
Our resident webadmin, sirmxe, has finally gotten his personal matters together long enough to log into server, uninstall and then reinstall the exim mail service, and then log back out (hopefully).

That said, the mail server works now, and some of you may or may not have suddenly got a few emails from it that it still had on queue.
#10
Just wanted to let you all in on a little update since we have moved to Git.

Rusky and RetroX have been infinitely helpful in getting us all up-to-speed in how-to-git, as well as getting the git in a semi-desirable state. That said, though, our git professionals seem to have been stretched to their capacities, so our developers are having a little bit of trouble figuring out how to install/build the latest ENIGMA rev from scratch. We're basically just waiting on our Git pros to update this page for us: http://enigma-dev.org/docs/Wiki/Install:Git ... Namely, lgm16b4.jar and enigma.jar were (intentionally) omitted from the repository, which makes it very difficult to run, because not just any version of those jars will work.

In the meantime, progress has been largely disjointed. For instance, Josh and I have been tweaking JoshEdit (which has its own git that we do know how to work). Josh also continues work on his new One Parser To Rule Them All. I've been catching up on other items on my Todo list, and will probably be working on some much needed upgrades to LGM's Room Editor soon. I've also figured out how to get EGit working in Eclipse, so I've been switching all my projects over that already use git. The IRC Bot has gotten several very nice updates to make understanding git revisions easier and such. There's been some slightly renewed interest in JEIE, so I might poke at that a little bit (at this point, the core is all there, it just needs a UI). TGMG has reported that 90% of the 64digits examples compile (with a blank function template for all currently unimplemented functions - primarily intended to test the compiler/parser), so that's always nice.

So that's why ENIGMA progress seems to have slowed to a crawl and no new builds are being made available - because we don't know how. But a lot of the side-branches are being filled in, so I expect that once we do figure out how, progress will explode. Until then, if you're looking for progress, look at the border projects, like JoshEdit and EnigmaBot and such.

For those of you trying to just do a standard install for using ENIGMA, you should be able to follow the normal Install page, which will give you one of the most recent builds we could get our hands on, with automatic updates disabled (which will probably be the norm from now on)
#11
Proposals / Advanced Code-Based Object Editor
November 30, 2011, 10:04:52 PM
One of the popular proposed changes for LGM has been to get rid of DND for the more advanced users, and replace it with a quick-and-easy code editor. I'm a big fan of this myself, and while designing the Object Editor, I consciously added an extra area of code for dealing with said 'advanced mode' once a design was fleshed out.

The reason it hasn't happened yet is primarily just that - a design has yet to be fleshed out. Hence the purpose of this topic. I'd like to summon the community forth to discuss and design the new Advanced Object Editor.

So open up your MS/Kolour Paints, your GIMPs, and your InkScapes, and put forth some ideas. Include multiple images to demonstrate any non-obvious content that hides (e.g. if you are going to keep the DND panel, but just hide it until they press a button, indicate how it would look with and without the button pressed, and how that would interact with the code editor).



Currently, as a reminder to you guys of a somewhat hidden feature, if you double-click in the ActionsList (the third panel, between Events and DND Pane), a Piece of Code DND action will be added, and the editor for that is shown. This is nice, but it would be nicer if this could be entirely built in for advanced users.

My first thought was to just replace the DND pane and Actions List, but the Properties and Events panes (1st and 2nd panes, respectively) restrict horizontal space.

Idea 1: Combine the Properties and Events pane? (tabs maybe?)

Idea 2: Combine the properties and events into a Toolbar? This could be too cluttered.

Idea 3: Events could use a combo dropdown box, although that might be a step down from what it is now.

Idea 4: Have buttons to show/hide the properties/events. Properties could even potentially be made into an additional dialog box.

Just throwing some ideas out there to get you started.
#12
Announcements / New LGM Backend Map/List
November 20, 2011, 07:54:58 PM
As of LateralGM r549 and ENIGMA r944 (and later), a new LGM backend system has been put in place. The prior system made heavy use of hard-coded lists for each resource type, which was not modular - meaning that it was causing difficulties for adding new resource types (like Overworlds and Definitions et al). The new system completely modularized this so that everything is put in a map, and may either be a non-instantiable resource (like Game Info) or instantiable (like Sprites). The former system didn't include non-instantiable resources in the map, so this is somewhat new territory.

That said, since this is somewhat new territory, we are proceeding with CAUTION. Although I have tested this pretty thoroughly, it's still hard to anticipate all the potential problems this could cause. Please back up your important games before using the new revisions. Please keep an eye open for any resources behaving strangely - including Game Settings, Game Information, and Enigma Settings. One hypothetical example of behavior that would be considered strange: "I press new game, and look at my Game Settings, and it's set this one way. I press new game again, and look at Game Settings, and now the settings are completely different." So keep an eye out for anything like that that might happen.


Also, this warning applies to the next several revisions as well:
1) Oftentimes revisions will update unrelated stuff, so any existing bugs will not necessarily be corrected.
2) Work is going to continue in this modularization in order to bring us new resource types (like Overworlds and Definitions) based on this new backend (which now allows us to do this). Some of the bugs I may have introduced may be hidden, but will be brought forward and made more visible with these new changes.



On the other hand, it's entirely possible (and likely) that this change was so smooth that it caused no new bugs or issues.

Either way (TL;DR version):
1) It's always good practice to back up your games, ESPECIALLY when using LateralGM/ENIGMA.
2) LateralGM is becoming more and more modular, which means that we're really starting to open the doors for new resource kinds.
3) If you notice a bug or strange behavior, as always, report it.
#13
Announcements / Back from a little downtime.
September 18, 2011, 12:49:52 AM
We experienced a little downtime recently where most pages displayed either an SMF Database error or the header displayed funky like it didn't load fully. This mostly only affected enigma-related or database-dependent pages, as other pages hosed on the server worked fine.

The prior problem was caused by a database corruption which may be related to the latter problem.
The latter problem was someone wrote the header in a non-html5 compliant way.

We've repaired the database and made the header compliant, so this issue should be fully resolved.

We apologize for any confusion caused during this time, but we're glad to announce that we're back up and going strong.

Special thanks to sirmxe for figuring this out and fixing it.
#14
This topic is mostly for RetroX, but other people are always welcome to contribute.

Currently Enigma's plugin to LateralGM, affectionally named The Plugin (written in Java by yours truly) has a WORKDIR variable which resolves to LGM's WORKDIR, which resolves to LGM's jar directory. The question is, why do we need the jar directory?

LGM uses WORKDIR for the following:

  • Finding Plugins
  • Finding DND Libraries (lib/lgl files)
  • For some reason, to populate gmlkeywords.properties from a file outside the jar, if one exists (probably for external override)

ENIGMA uses LGM's workdir for the following:

  • To populate Enigma's WORKDIR (EnigmaRunner.WORKDIR = LGM.WORKDIR, more or less).
  • To ensure that EnigmaUpdater knows that the program needs a restart when LGM is updated. (this could be replaced with a direct jar lookup)
  • For some reason, it calls `make` to build enigma, and then locates enigma dll, in this directory. Not sure why. Will try to replace with ENIGMA's workdir now.

ENIGMA uses its workdir for the following:

  • Not yet, but it should be used to call `make` to build enigma, and then locate the enigma dll, in this directory (see a couple lines up).
  • Finding the "Compilers" directory
  • Finding available API systems in "ENIGMAsystem/SHELL/"
  • Provide a directory for ENIGMA's dll to run system commands in (via callback), e.g. Exec()
  • Provide a directory for Subversion's Working Copy
  • Finding "settings.ey" - a temporary thing that Josh and I set up for the EnigmaSettings pane.
  • A directory to quicksave/quickload "definitions.h" (Can pretty much be scrapped, especially once the new file format is available)

Point is, the plugin does need to know ENIGMA's directory somehow, and in a cross-platform fashion. The simplest thing I could think up and implement at the time was "hmm, everything can just go in one program directory, so I'll just look at LGM.jar's directory". For some other directories that I can work with, consult Java.
Here is a listing of directories and other things that I can get using Java's "System.getProperty()" method, if it helps any, but please only use these directories in a cross-platform manner. For instance, do not assume that settings can be stored in `$user.home$/.lgm/` because that's a unix-only manner, and does not reflect for Windows (and probably doesn't for Mac either). Also, avoid trying to get the current Operating System as much as inhumanly possible - there will be a system that you did not account for.


java.class.path    Java class path
java.library.path    List of paths to search when loading libraries
java.io.tmpdir    Default temp file path
java.compiler    Name of JIT compiler to use
java.ext.dirs    Path of extension directory or directories
file.separator    File separator ("/" on UNIX) (not necessary, because new File(directory, child) handles this for us)
path.separator    Path separator (":" on UNIX)
user.name    User's account name
user.home    User's home directory
user.dir    User's current working directory
#16
Announcements / Judgement Day Update
May 21, 2011, 06:34:19 PM
The time is currently 14:30 EST, GMT -5 for myself and Josh, giving us another 3.5 hours to finish up enigma before fire and brimstone hits. Unfortunately we've lost TGMG, as it's currently 19:30 over there, presumably he ascended, which means that we'll have to make due without the Android port, since he was never able to get OpenGLES to work.
Josh is currently working on something about macros while he waits for the religious folks to fly into the sky giving him a much needed chance to loot and orgy until he gets struck by some act of god or October 21st, when God pulls the plug completely. I'm of course atoning for my sins and spending my last couple of hours with my family. I'm happy with the state of LGM right now, and think ENIGMA should be able to continue over the next several months without continuing improvements to it.
#17
While we're designing the new EGM file format, there are quite a few new things that we can do that GM doesn't directly allow.

For starters, I'd like to ask your opinions on whether resources should be allowed in other folders where they're not designed to be. In essence, this would be leaving organization completely up to the user - you can clump a bunch of different resource types together in one group - like having a sprite in the same folder as an object.

This could be a nice organizational feature -- or it could be a total disaster. Also interesting, I don't think I've ever seen it suggested for GM.

As for how this effects the format - it would mean that each resource would need to identify its resource type. This would slightly increase filesize. It would also make it a little trickier to read it in - but not much.
Another interesting note - technically GM's file format allows this - there's just no IDEs that can do it.

Alternatively, we can keep it the way GM has it, and force resources to be segregated into their own folders.
#18
Announcements / Wiki down (and back up)
April 27, 2011, 04:05:38 AM
At some time between 2011-04-23@02:18 (when I last saw it working) and 2011-04-25@19:14 (when someone reported the problem), a fatal database corruption took the life of our wiki. We have submitted a ticket with our host to fix it, which may mean performing a rollback to an older backup. We'll let you know how it all goes, and hopefully we can have it back and running without too much work lost.

Thank you for bearing with us in the meantime.
#19
Third Party / GM8.1 format changes
April 24, 2011, 04:49:21 AM
Herein I'll try to maintain a full listing of changes between GM8.0 (800) and GM8.1 (810).

This information can kind of be gleaned by carefully reading the GM Release notes, and dumping the irrelevant junk.
http://store.yoyogames.com/downloads/gm4win/release-notes.html

Note that, at this time, none of the changes in 810 affect the filesize. They have finally learned to recycle bytes. Also note that almost all of the changes are completely backwards compatible, meaning that if you change the version identifier back to 800, it will load in GM8.0, although some minor fields may have incorrect values (e.g. Font Range Min usually changed to 255).

8.1.X (oldest)
Version identifier appearing after magic number changed from 800 to 810.
Font "Range Min" bytes now shared with Charset (default 0). First 2 bytes (little endian) still indicate Range Min. Next byte indicates charset identifier. Final byte reserved (0).

8.1.69
Font "Range Min" and Charset bytes now merged with Anti-Aliasing (AA) selection (default 3). Final byte after the charset identifier now indicates the AA. 0 for Off, other values are 1, 2, and 3. Still uncertain what the different values of anti-aliasing mean.
Game Settings "Uninitialized variables" bytes now shared with "Throw an error when arguments aren't initialised correctly." (I abbreviate it as "Mismatched Arguments" or "Parameter Checking". Default On or 1). First byte is a bit-share, where Uninitialized Variables occupies &0x01, and Mismatched Arguments occupies &0x02.

8.1.71-91
No known changes.

LGM is at this point.

8.1.106
May have changed all strings, especially script code, to unicode support. Unconfirmed.

8.1.107-108
No known format changes. Introduces new functions ansi_char(?), get_function_address(?), string_byte_length(?), string_byte_at(?).

8.1.109-123
No known changes.

8.1.125
May have changed the saved room settings format. Unconfirmed.

8.1.126-135
No known changes.
#21
Proposals / LGM Find/Replace - Design Ideas
April 05, 2011, 08:56:55 PM
I'm looking to implement a somewhat competent Find/Replace feature into LGM. I'd like some input on what options you think would be good, how to lay it out, etc.

Fields:
* There will be a text field for Find
** There will be an option for regex (anybody think wildcard would be necessary?)
* There will be a text field for Replace
** This will accept regex backreferences if the Find is a regex.
* There will be separate buttons for Find, Replace Once, and Replace All.
* There will be options for search scope:
** The current script
** Another open script
** 1 All scripts
** 2 Resource names
** 3 All DND Action Arguments
** Any combination of 1, 2, and 3. (gui suggestions on how to present these options appreciated)

Functionality:
Upon pressing Ctrl+F anywhere in LGM, this dialog will appear. If it was pressed from within a script, it will be scoped for that script by default. Otherwise, it will be a global search (some combination of 1, 2, and 3 - suggestions for a default scope appreciated)
Initially, the Search textfield will have focus, and will be populated with the contents of the [clipboard | current cursor selection]. Pressing the tab key will switch focus to the Replace textfield immediately.
Pressing enter while the search textfield is in focus, and no input was given to the replace textfield, will only perform a Find.
Pressing enter with the replace textfield in focus and with text will perform a Replace Once. Holding down a certain (as of yet undetermined) key will perform a Replace All.

Ideas:
Some sort of tree structure for displaying results of performing search on global scope. Maybe even flatten single-child parent nodes (e.g. only one sprite was found, so display Sprites/spr_name, compared to Sprites/ \n \t spr_name. This example use branch/leaf, but the same would be applied to branch/branch as well).
Although it might be difficult to implement, a way to undo a full find/replace, in case it turns out badly.

Concerns:
How would focus traversal work for options? Right now it goes: Find Text > Replace Text > Find Button > Replace Once > Replace All

Global Searching should also take into account Room Creation and Instance Creation Codes.



If anybody wants to draw up the way they think it should be laid out, that'd be awesome.
#22
Function Peer Review / move_towards_point
January 07, 2011, 09:05:11 PM
Code (C++) Select
void motion_set(double newdir, double newspd) {
  enigma::object_planar* const inst = ((enigma::object_planar*)enigma::instance_event_iterator->inst);
  inst->direction.rval.d = newdir;
  inst->speed.rval.d = newspd;
  inst->hspeed.rval.d = newspd * cos(newdir);
  inst->vspeed.rval.d = newspd * sin(newdir);
}

inline void move_towards_point(double x, double y, double spd) {
  motion_set(point_direction(
    ((enigma::object_planar*)enigma::instance_event_iterator->inst)->x,
    ((enigma::object_planar*)enigma::instance_event_iterator->inst)->y,
    x,y),spd);
}


motion_set was borrowed from action_move. It's just used as a convenience method to set both speed and direction efficiently. There have been some concerns over radians vs. degrees, and I haven't looked into them fully, but oddly enough action_move seemed to work...
#23
Announcements / Collisions update
December 19, 2010, 12:21:43 AM
Since these forums have been dreadfully quiet (although the IRC has been jumping), I figured I'd give an update on some of the changes that I've been working on for ENIGMA.

Of course, you could just read the revision logs between r550 and now (r574) and the LateralGM revision logs (r462 to r473), but this gives you an in-depth overview and the technical stuff you need to know without getting into the technical stuff that the revision logs need to say.

As I'm the main developer (and currently only developer) of LateralGM, I'll start with that.

First, I rearranged the sound frame a little as it was badly in need of a makeover. I think you'll approve
http://img9.imageshack.us/i/soundframe.png/

Next, I added a Sprite Load-From-Strip button and corresponding dialog. You won't need a screenshot of that because it looks just like GM. I'm still working out a little kink where the preview insists on being massive for large images, rather than obeying/using the scroll panel.

Also, many of you will be happy to know that you can now override the GM preferences (e.g. which sprite editor to use, and other settings inside preferences.properties *inside the jar*) using Java Preferences. Although there isn't a GUI for it yet, I'll explain how you can do it by hand in footnote 1. This means that you don't need to keep going inside the jar and fixing preferences.properties every time we include a new LGM jar with enigma.

After that, I realized that I'm apparently the only person in the world who knows Java, and am the only one working on LGM, at which point I slit my wrists.


After I got back from the hospital, I started work on Enigma, since other people are actually working on that too, even though I despise C++ (and now I'm re-learning why).

Most of my work on Enigma has centered around the collision system. Most of you have probably already seen my bbox collision functions which you could copy-paste into the Definitions, along with a hacked-together is_solid function since Enigma didn't support solid. Well, that code isn't there anymore, because it's now part of Enigma, so it wouldn't be a good idea to define the functions twice. Not to mention, the enigma versions are much better. Here's what I did:
1> I implemented solid. Much to the surprise of Josh, I actually edited something deep within Josh's code. Now, if the Object has "[X] solid" checked in LateralGM, ENIGMA will also realize that it's solid.
2> I added better Makefile API support for Collision APIs and such. This was just preliminary stuff to make sure that 3 would work.
3> I added a BBox Collision API which provided my collision functions, which now make use of the implementation of 'solid', as well as Mith's 'notme' implementation.
4> I modularized my Collision API, breaking it into essentially 3 tiers, which will make it much easier for other implementations (e.g. Polygon collisions) to extend upon it. Please see footnote 2 for an explanation of the tiers.
5> I've been working on polygon masking of the sprites, which will allow r9k to work on polygon collisions. For the most part it works great, but for some reason I've gotten it to get stuck in an infinite loop and then consume all of the JVM's memory and error out on certain kinds of sprites. I'm hoping to have that fixed next, and then r9k can have his polygon mask points.

Josh and I have also done a major overhaul of the wiki. Some other users helped out in little areas here and there, and we very much appreciate that. If you haven't seen it recently, go check it out by clicking the wiki link up top, orifyou'retoofuckinglazyyoumightfindthelinkinhere...



Footnote 1: How to override LGM Preferences defined in preferences.properties.
Ensure that no instances of LGM are currently running (e.g. Close LGM). Now determine which settings you wish to override and what value you would like to override it with. If you aren't completely sure, open LGM.jar like a zip file (e.g. with a half-decent archive manager), and browse to org/lateralgm/main/preferences.properties and open it. Each property will be a `name: value` pair, and #comments have a hash sign (#) before them to explain what each setting is and how to format your values.

Once you know your property name and value, the next step is to inject that into Java Preferences. You can either do this by using Java, or bypass Java and just inject into wherever it stores those preferences.

Java way:
Code (Java) Select
import java.util.prefs.Preferences;
public class Inject { public static void main() {
  Preferences.userRoot().node("/org/lateralgm").put("NEWKEY","My New Value"); System.out.println("Done.");
}}

and change NEWKEY with the property name, and My New Value with the new property value. Name the file "Inject.java". Compile and run it. If all goes well, the only thing you should see output is "Done." (if you run from command line). LGM should pick it up on next run.

Bypass way, Ubuntu/Linux edition:
> gedit ~/.java/.userPrefs/org/lateralgm/prefs.xml &
Note that .java and .userPrefs are hidden directories, so you won't see them by default in the file browser. The file should look like this:
Code (XML) Select
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE map SYSTEM "http://java.sun.com/dtd/preferences.dtd">
<map MAP_XML_VERSION="1.0">
  <entry key="KEY1" value="value1"/>
  <entry key="KEY2" value="value2"/>
  ...
</map>

So it will be a simple matter of adding a new line before the </map>, which reads as follows:
  <entry key="NEWKEY" value="My New Value"/>
Change NEWKEY with the property name, and My New Value with the new property value. Save the file, and close it. LGM should pick it up on next run.

Bypass way, Windows Edition:
Since I don't use Windows, I don't know the specifics of how this works, but you should be able to figure it out. The starting point would be to open the Registry Editor, and locate:
HKCU\Software\Javasoft\Prefs\org\lateralgm
and presumably you'd just add your Key/Value pair.

Bypass way, Mac Edition:
Browse to ~/Library/Preferences/org/lateralgm and figure it out from there. The Linux method might provide some insights.

If anybody can provide more information for these methods, by all means, go ahead.




Footnote 2: One Tier to rule them all, One Tier to find them, One Tier to bring them all and in the darkness bind them.
The collision system is broken into 3 crucial tiers.

The lowest level tier is utility functions, which provide basic shape collision functions, like bbox-bbox, bbox-line (which delegates to rect-line), bbox-point, and rect-line. These functions are appropriately named according to their shapes, and as such are implementation independent.

The middle tier is defined by interface functions - function names and arguments which every API implementation must implement in their own way. These are the collide_inst_* functions, which will return the first instance colliding (however that instances collision is determined in this implementation) with a certain shape or another instance.

The highest level tier is abstract GML functions, like collision_line, place_free, and position_meeting. These functions delegate to the interface functions, which allows them to be implementation independent.
#24
Function Peer Review / action_move
November 03, 2010, 03:44:10 PM
I'm trying to write up the action_move function, since it doesn't really have a direct GML equivalent, due to the direction argument being multiple-choice which then gets randomly selected.
I'm also working on an educated assumption here, trying to recall from when I still had access to GM, how it behaved.

Assumption 1: It will randomly select one of the depressed directional buttons, but will not select a between value (so the resulting direction will always be a multiple of 45).
Assumption 2: The directional string directly corresponds with the directions in the dirs array. (I've done a bit of testing, so I think it is correct)

Code (C++) Select
void action_move(const char dir[9], int argspeed) {
int dirs[9] = {  225, 270, 315, 180, -1, 0, 135, 90, 45 };
int chosendirs[9];
int choices = 0;
for (int i = 0; i < 9; i++)
  if (dir[i] == '1') chosendirs[choices++] = dirs[i];
if (choices == 0) return;
choices = int(random(choices)); //choices is now chosen

//We use rval.d for efficiency, so hspeed/vspeed aren't set twice.
const double newdir =
((enigma::object_planar*)enigma::instance_event_iterator->inst)->direction.rval.d = chosendirs[choices];
if (argument_relative)
  argspeed += ((enigma::object_planar*)enigma::instance_event_iterator->inst)->speed;
const double newspd =
((enigma::object_planar*)enigma::instance_event_iterator->inst)->speed.rval.d = chosendirs[choices] == -1 ? 0 : argspeed;
((enigma::object_planar*)enigma::instance_event_iterator->inst)->hspeed.rval.d = newspd * cos(newdir);
((enigma::object_planar*)enigma::instance_event_iterator->inst)->vspeed.rval.d = newspd * sin(newdir);
}


Note 1: The first argument should always be an array of characters of size 9. Longer strings are fine, but only the first 9 characters will be examined. Shorter strings may cause this to look at memory beyond the string.
Note 2: This code makes use of the random(x) function.

Note 3: A few minor optimizations can be made around random.
3a: To avoid the use of random when there's only 1 choice. Replace:
choices = int(random(choices)); //choices is now chosen
With
Code (C++) Select

if (choices == 1) choices = 0;
else choices = int(random(choices)); //choices is now chosen

3b: Replace random with randomInt if it's more efficient (and if it exists).
3c: Replace random with integrated choose() function once it's implemented, if it's more efficient.
#25
Function Peer Review / Networking on GitHub
September 21, 2010, 05:27:41 PM
I've uploaded my networking files to:
http://github.com/IsmAvatar/EnigmaNet

MIT license, so they can easily be relicensed to GPL.
Please feel free to contribute.

At this time, they are written in C only.
They are largely functional, but some aspects need a bit of improvement, or at least a thorough going-over - in particular, mplay_send and mplay_receive.

They are currently named mplay_ until we get a better name for them. They do not use DirectPlay (which GM uses) and we do not aim to create a reproduction of the mplay_ functionality.

They work standalone, but I'm sure they could be plugged into Enigma as well.