Sunday, August 31, 2014

Authenticating to a LaCie 2big NAS

If you have a network-attached storage device from LaCie (such as their 2big series), you probably know about the user rights assignment available for its exposed shares. They work in a very non-intuitive way, and it took me quite a bit of digging through the documentation to figure it out.

Suppose we have a LaCie 2big that exposes a share configured to be only accessible by the "bob" user account, which like all LaCie user entries has a password. (That's an account set up on the LaCie device. I'm assuming that you haven't joined the NAS to your domain, because then everything would be easy and you wouldn't need my help.) Now, Bob is at his workstation and he would like to access his NAS stuff. He goes to the LaCie share, enters his LaCie password, and... access denied.

Even if you use the DEVICE\USER format in the username field, the LaCie will reject all authentication attempts. For some reason, it really really wants you to set your workstation-side account name and password to match exactly those on the LaCie. So, if Bob's account name on his workstation is actually Robert, he's going to have to create another workstation account for use in authenticating with the LaCie. That new account will have to use the same password as is used for the LaCie-side account. And that new account is what must be sent to the NAS for authentication.

This is, to be honest, a really strange way of doing authentication. But this is how the LaCie NAS devices work, at least the 2big, and it's how you must do it. Long story short: update the account on the NAS to have the same username and password as the one on the workstation.

Saturday, August 30, 2014

End of Support for Classic Game Maker?

I installed (and when I say "installed", I mean "copy-pasted the appropriate directories in Program Files from a computer that already has it") Game Maker 7 and 8 on my new school-issued laptop and immediately noticed a problem. When I went to enter my license key, the web form fails to load. From what I can tell, they have removed that service from their web site. So, I am now unable to apply my Pro license key to these installations of Game Maker.

I filed a support ticket, but since I did have to select "Classic Game Maker" for the version field, I don't imagine they're giving me a lot of priority. It's been three days now, and it hasn't even been assigned to any technician.

Time to hack around and copy over possibly-related files in an attempt to make it recognize my license!

Thursday, August 28, 2014

Abiathar Confidential: Not Fully a Placebo

People on PCKF have noticed that Abiathar's "High Speed Mode" menu option tends to not do a lot to improve speed. I sense suspicions growing that its purpose is simply to invoke the placebo effect.

This is more true than one might think.

Originally, when it was added (before full release), rendering was different. High Speed Mode suppressed extra re-renders, thereby improving performance. As rendering has been optimized, the HSM branch was actually removed because I didn't want to maintain two versions of stuff and that stuff was pretty good anyway. So, yes, its main purpose has vanished.

It also disables the undo feature. If you decompile the program, you'll notice that Response.FastMode is almost never actually checked when the core extension pushes items onto the undo stack. So, most of the time, it just saves some memory.

But there is a fairly important case where HSM actually does something: the row/column adjusters. Since the level's size has to be changed for these, the original level instance has to be thrown out. In preparation for performing the row/column adjustment, unknown infoplane items in the level are zeroed and copied into a temporary storage space, which is soon used to fix all the links. If I just shoved a reference to the old level into the undo task, you would lose most of your infoplane values when you undid an adjustment operation. This is probably not desirable. So, the adjusters make a deep copy of the level, which actually takes a bit of time. Since this would just get thrown away in HSM, the adjusters actually check to see if it is enabled, and if so, skip the cloning operation.

Finally, High Speed Mode suppresses most of the translucent selection rectangles. Their sizes and position are still calculated, but the blend operation doesn't have to be done because HSM marks that plane invisible. (Fun fact: before I added an override, enabling High Speed Mode would make the find tool totally useless because its effects were made invisible.)

So, there you have it. For normal tile-by-tile operations, Abiathar's High Speed Mode doesn't do anything. But in those special cases (and especially in that one), it does have a positive effect.

Wednesday, August 27, 2014

Robotics - Pre-Season Meeting

That's right, ladies and gentlemen! The season for FTC high-school robotics is almost upon us! The season will be officially kicked off on September 6 (?), at which point the rules and parameters for this year will be published.

Today, we had a meeting for all those people interested in robotics. A surprisingly high quantity of new people showed up, including some people in my class who were not in robotics last year. I believe the team allocation plan for this year is to have an experienced team and a newbie team. That way, there won't be a sense of competition between them, so the newbies can easily ask for help from the experienced ones. There will of course be a few veterans on the newbie team to give them some direction.

Tuesday, August 26, 2014

Reading the Active Directory on a Windows Domain Client

I like to poke around in what probably isn't my business, so naturally I want to browse the domain's Active Directory. This can be done fairly easily from a domain client.

First, you'll need administrative rights on the local computer. That has its own post.

Then, you'll need to install the extension pack that contains Remote Server Administration snap-ins for the Microsoft Management Console. Here's the pack for Windows 7, which might also work for 8.

Once that's installed, you'll need to go to "Turn Windows features on or off" in the Programs and Features and actually enable those snap-ins you just installed. It'll be called something like "Remote Server Administration Tools" with lots of sub-options: check it all or just pick out the things you care about. I recommend the following:

  • Feature Administration Tools
    • Group Policy Management Tools
  • Role Administration Tools
    • AD DS and AD LDS Tools
    • DHCP Server Tools
  • Server Manager


Then, once that finishes setting up, open the Microsoft Management Console by running "mmc". Add the "Active Directory Users and Computers" snap-in using the appropriate option under File. (You could also add the other Active Directory stuff for bonus configuration viewage.) After you snap that in, you'll see a list of domains whose Active Directories you can browse. Expand one to produce a list of categories, each of which contains a bunch of fascinating stuff.

You'll be able to look through it all, but not modify anything unless you're also a domain admin.

Monday, August 25, 2014

Collection Performance in .NET

I had to do a mock lab report for Chemistry class (it didn't have to be about chemistry, just use the normal scientific method and report style), so I quickly threw together a paper/experiment analyzing the performance of a few collections in .NET. It's obviously nothing shocking, but could possibly serve as a nice reference for combining the scientific method with computer science.

Download paper (PDF)

Sunday, August 24, 2014

Using Windows Group Policy on a Non-Domain Computer

Today I learned that you can use a perfectly functional copy of Group Policy on any Windows computer (NT or later, of course), even if it's not a domain server or on a domain at all. I haven't tested to see what happens if you try to use it to override settings that are controlled by the real Group Policy server, but that is a science experiment for tomorrow.

Anyway, if you want access to all those fun settings on any computer, do this:
  1. Acquire administrative access
  2. Use the Run dialog box to launch mmc (Microsoft Management Console)
  3. Press Ctrl+M to manage snap-ins
  4. On the left, choose Group Policy Object and click Add
  5. Click Finish to close Select Group Policy Object
  6. Click OK to close Add or Remove Snap-ins
  7. Expand Local Computer Policy and its subfolders to discover settings
There are all kinds of fascinating settings there. To modify policies, double-click them; to add entries (e.g. deployed printers), use the appropriate choice under the Action menu.

When you close MMC, you can save your view state so you can go back to where you were later. MMC also accepts all the snap-ins found in the Administrative Tools folder, so you can shove them all into one window/instance if you want.

Saturday, August 23, 2014

YouTube Suggestion: Series Awareness

I know YouTube employees are paid to change things, and I know how bothersome it can be when they needlessly reinvent things like the producer's "backstage", so I have an idea for a feature that I think would be actually welcome.

I like to create (and watch) series of videos in an episodic manner that are intended to be viewed in a certain order. I would like an easy way for people to notice "hey, this video is part of a larger series" and possibly start watching the series from the beginning in order to better understand what's going on. I can sort of do this with playlists, but from my experience those playlists are never presented to the viewer unless they specifically search for it.

When viewers go to their subscriptions page and see a whole bunch of videos (sorted newest to oldest) that they don't have time to watch right now, they might use the Watch Later feature to shove a bunch of videos into a private playlist for later viewing. Of course, if you do that from newest to oldest (the order in which you see the videos when scrolling down the page), the series videos are in the exact opposite order that a logical person would watch them in.

So, I would like YouTube to automatically reorder videos in people's playlists (with their permission, of course) to make sure that they will be watched in such an order that no video in a playlist is watched before another video in the playlist that is before it in its series. For this to work, video creators would have to create series declarations and assign each video to at most one series, but this is basically playlists anyway, with more management. (And yes, I know about the "show" system. It's only accessible to people with lots more subscribers than I.)

Also, it would be really nice if there was a way to "dump" a playlist into another playlist, thereby combining them.

Friday, August 22, 2014

"What is DHCP?" for the Non-Technical

When you take your laptop to a place and connect to a WiFi network (or plug a network cable into your desktop), I imagine you expect it to simply connect to the network and let you browse the Internet and communicate with other computers there.

As is the case with all things computerized, it's not quite so simple.

Before I start explaining what DHCP is exactly, I have to explain some introductory networking concepts. Here are some words you should know:

  • MAC address: the ID of your computer's network card. This is usually a physical, burned-in setting that was determined at the time of manufacturing. (Some network cards let you change it.) This address is used to participate in any kind of network communication. Please note that it has absolutely nothing to do with Mac OS or Apple at all. (It stands for Media Access Control.)
  • IP address: the ID of your computer, as seen by other computers on the network. IP stands for Internet Protocol, which is just one of many communication types in which you can participate. IP addresses must be translated to MAC addresses for determining where data needs to flow because physical network machines can use different protocols as well (ICMP for example), which don't use IP addresses at all.
  • Router: a (usually) physical device that determines where data needs to go next in order to get to its destination. All modern routers are Internet Protocol (IP) devices, so identification with them uses IP addresses.
  • Routing: the process by which data is sent on its way to the intended receiver, usually by mapping various types of network addresses to physical plug-in ports.
  • Protocol: a previously agreed-upon system of and format for electronic communications.
  • Switch: a (usually) physical device that is like a router, but uses MAC addresses for identification. More different types of information can flow across switches because they don't care about anything besides what physical device you want to send data to. (Routers will only pass along IP data.)
  • Packet: a segment of information sent across the network. A packet (unless some hacking is in progress) always contains the MAC address of its sender and the MAC address of the next device to receive it. Keep in mind that the sending computer does not typically know the MAC address of the destination computer, only where the packet needs to go in order to get routed to continue on its journey. A packet may contain higher-level information, like the destination IP address.
  • Host: a computer on a network.
OK, that's out of the way. Now, DHCP stands for Dynamic Host Configuration Protocol. It helps you get connected to the network by automatically assigning your IP address. Why is this important?

The Internet and most network operations are based on Internet Protocol. To talk to your router (which is very important if you want to be able to talk to any web sites on the external Internet), you need to have an IP for it to use in routing. You also need to know the IP address of the router itself. It is possible (and was frequently done before DHCP was invented) to enter these settings manually. Of course, if you happen to set your computer's IP address to one that's in use by another, horrible things happen, namely nobody being able to use the network. Also, if you enter an IP that is not in the right network group (the subnet), all the computers are confused and most routers will null your packets.

If you just connected to a wireless network, you probably have absolutely no idea what the router's IP is, or even what range of IP addresses you should pick from. Fortunately, DHCP is here to automatically detect these settings for you. When you connect, your computer will broadcast a message (to everyone, because it has no idea who it needs to talk to) and wait for a reply from somebody claiming to be a DHCP server.

The DHCP server is listening for these broadcasts. When it hears one, it looks in its settings (which are configured once by the network administrator) to find what IP addresses it can assign. It then picks one that isn't in use and sends it to the IP-less computer that sent the broadcast. If the broadcaster accepts it, the DHCP server maps that IP address to that MAC address and (sometimes) informs the router that it has a new routable client. Presto, the client has been given a usable IP and the network administrator only had to enter the complicated network settings once; DHCP takes care of disseminating them.

Using its snazzy new IP address, the computer can start talking to the router (also known as default gateway) to send IP packets out of the network to the Internet. And that, ladies and gentlemen, is the Dynamic Host Configuration Protocol.

Footnote: DHCP can also help automatically inform clients of other interesting places on the network, like the domain controller, the DNS suffix, the mail exchange server, IRC servers, or pretty much anything. It's like a tour guide!

Thursday, August 21, 2014

Overriding Group Policy on a Windows Domain

This requires already having local administrative access on the machine. To get that, see my very detailed post on that.

So you have local admin access on your Windows domain machine, but Group Policy settings are still getting in your way. Fortunately, since you're now on the nice side of Raymond Chen's airtight hatchway, you own the machine and can do something about this.

The Group Policy cache is located in parts of the registry that anybody can read but only administrators can modify. See these keys:

  • HKLM\SOFTWARE\Policies (actually Local Security Policy)
  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies
  • HKCU\Software\Microsoft\Windows\CurrentVersion\Policies
Entries under there (you might have to look through some subfolders) are set in the Group Policy or Local Security Policy dialogs. Since you probably don't have access to the domain server, you'll have to make your changes here to override Group Policy.

Simply find entries whose names obviously correspond to annoying restrictions, then set them to something (usually zero) that disables them. You can find explanations of the more cryptic keys in this TechNet article and the articles it links to.

Once you finish making changes, reboot the computer or at least re-login to make sure you're using the newest settings. Oh, and I should mention that it would be a good idea to back up the registry keys before doing something like this.

Tuesday, August 19, 2014

Notepad Lucida Console U+012D Rendering Bug

I just noticed while doing Chinese homework that Notepad using the Lucida Console monospace font does not render U+012D (Latin Small Letter I With Breve) correctly. The font renders that letter (an lowercase I with a Chinese third-tone mark) very thin and not at all the same width as other characters.

In default font:
ǐ

In Lucida Console (as determined by browser):
ǐ

In Lucida Console in context:
Random markǐngs, yay!

It actually seems to render correctly-ish in Chrome, for some reason taking the character from Courier New, but here's a screenshot of Notepad to show you what I mean:
See the "I" in the top line

Monday, August 18, 2014

A Specific and Detailed Guide to Gaining Local Admin Access on a Windows Domain Computer

Note: Please use this guide only for legal/ethical purposes (e.g. system recovery). The "hack" tag is to attract search results away from damaging and dangerous procedures. This guide is easy, safe, and reversible.

So, let's say you're using a computer (probably a laptop) hooked up to a domain on which you do not have administrative rights, but you want to be a local administrator to install programs and whatnot. I have written this guide that walks you specifically through every step of doing so.

I am assuming you have these:
  • A different computer on which you have local admin
  • A USB flash drive of decent size, formatted FAT32
  • Access to a USB port on the computer
  • A contract that won't be violated when you do this
  • Ability to boot from an alternate device
On a computer on which you are already an admin, go to Pen Drive Linux's web page for the USB installer. Press the big "Download UUI" button near the bottom of the page. Run the resulting application and accept the UAC prompt. Press "I Agree" after not reading the license terms. In the application, do this:
  1. Select "Ubuntu" from the Step 1 list.
  2. Check the "Download Link" box and press "Yes".
  3. Wait for the download to finish.
  4. Click Step 2's Browse button and choose the downloaded ISO.
  5. Select your USB flash drive from the Step 3 list.
    • If it doesn't appear, check "Show all Drives" and press "Yes".
  6. Check the box to format the drive if you have a lot of junk on it.
  7. Set the Step 4 slider to 0 MB.
  8. Press Create.
Once the process finishes, eject the USB drive and use it to boot up the computer on which you wish to gain local admin. (If it doesn't boot into Ubuntu, you need to check BIOS settings. Unfortunately, there are many BIOSes, so I cannot document the process of changing the boot order settings.) Once it loads, choose your language and press the button to just try Ubuntu, not install it.

Disclaimer: I am not good at operating Linux and this may not be the most efficient way of accomplishing the task. It works, though.

Press the Activities text in the upper-left and choose Files (near the bottom of the resulting bar). Choose the hard drive name of the normal Windows installation and navigate to Windows\System32. (Navigation is very similar to that in Windows Explorer.) Find sethc.exe in the list, this is the program that is run when you press Shift five times (the ever-annoying StickyKeys). Rename it, for example to sethc_.exe. Find cmd.exe in the list, right-click it, and choose Copy To. Put it in the containing directory, Windows. Move up to find that copy we just made and rename it to sethc.exe by right-clicking it and choosing Rename. Right-click that and choose Move To, selecting the System32 directory.

You have just replaced the StickyKeys handler with the Command Prompt. This program will be run with administrative privileges at the logon screen.

Shut down Ubuntu using the power icon in the upper-right corner. Remove your flash drive and boot back into Windows. Press the Shift key five times to produce the Command Prompt. There, type the following command to reset the Administrator account's password (use whatever you like for the bold parameter):

net user Administrator wow_suchpassword /ACTIVE:YES

Close the Command Prompt and login using that local account. You will have to know your computer's name, which can be found in the convenient help link "How do I log on to another domain?". If your computer's name was Fleex255, you would use "Fleex255\Administrator" as the username. Enter the password you set in the previous step.

Once you're into that account, you own the machine! To elevate your normal user account, follow these steps:
  1. Open Control Panel in Category view.
  2. Choose Administrative Tools.
  3. Choose Computer Management.
  4. On the left in the resulting window, choose Local Users and Groups.
  5. Enter the Groups folder.
  6. Open the Administrators entry.
  7. Click Add in the resulting dialog.
  8. Enter your domain username and click OK.
  9. Enter your domain username and password in the resulting box.
  10. Click OK to close Administrators Properties.
  11. Log off of the Administrator account.
  12. Log into your normal domain account as usual.
Congratulations! You are now a full-power administrator of your realm, your local computer. Eventually, you should probably change the Administrator password to something better and use your new admin powers to restore that back-up copy of sethc.exe we made. (Or just go into Linux again if you don't want to jump through the hoops of NTFS ACLs.)

Disclaimer: This is not guaranteed to work forever. In fact, it's not even guaranteed to work now. I am not responsible for the consequences if you use this, don't use this, or use it incorrectly.

Sunday, August 17, 2014

FMod - Drag Copy

School has officially started, so I've been busy with things that are more important than Abiathar development. I did today, however, manage to fix something that has been subtly bothering a few people for a long time. Apparently, The Omegamatic forces you to hold down the left mouse button while moving to the second corner of the rectangle to select for a copy operation, which I personally think is extraordinarily inconvenient. People of course have gotten used to it, so Abiathar now supports that for copying as well. The documented and recommended option is going to remain the usual "click one corner, click the other", but people are free to use whichever style they want. (It's nice for everyone to get what they want.)

Saturday, August 16, 2014

FMod - Optimized Default Graphics

Today I did some optimizations on Abiathar instead of adding features! These ones focused on cutting down executable size (which was over 6MB) and improving load time for projects using default graphics.

The solution to both of these was to use exported images for default graphics instead of bundling the huge EGA resources. This produced a huge speedup in project creation, even faster than loading bitmaps from disk (due to it being from memory). Though bitmaps (*.bmp) were easy to manage and quick to partition, they are huge, at least as large as those EGA resources. The fix for that was to save them in GIF format, which has a limited palette (fine for my 16 colors) and compresses heavily. Fortunately, .NET made it easy for me to make this transition by allowing the "New Bitmap(Stream)" call to load GIFs just like BMPs.

Abiathar is now only 3.6MB.

Wednesday, August 13, 2014

FMod - Complicated Patching

Today, I started in earnest to add level song assigning to Abiathar. This is actually a pretty complicated thing. First, I had to add audio chunk settings to the profiles configuration structure. Then, default audio resources had to get added to the assembly and saved to disk after Sound Setup is complete. After that, I went on the KeenWiki to get all the patches involved in changing the music, which are quite extensive. Every one of those commands got an entry in PatchGenerator. My job was made even more difficult by the KeenWiki not having the commands to patch in the audio header and dictionary, which I had to find by running KeenWave on the default sound libraries it bundles. The KeenWiki was also missing the address for an important directive for Keen 6, which I actually located myself with a hex editor.

The "Write Patches" menu has been coded to write the audio patches, but I have not yet started on the music management dialogs.

Tuesday, August 12, 2014

FMod - Sound Setup

I finished the FMod (FleexCore) class for the audio files today after some intense debugging. Previously, it was able to save without crashing, but some (and only some) of the AdLib sounds in the game were messed up. All the PC speaker sounds and IMF music were fine; it was just the AdLib ones that caused trouble. After tearing through ModdingWiki documentation and screenfuls of hexadecimal, I discovered that my code had two major bugs. I was loading the octave ID in the wrong order and totally forgetting to write it back. The result: a shifted note sequence at an essentially random octave offset. That was fixed easily after it was identified, and I moved on to actual GUI for this feature.

The first order of business is to associate the sound files with the dependency file. Since I don't want to tack that on to the New Project Wizard, it goes into the Edit menu. Actually, I'm planning on having two different screens relating to audio: one for managing sound chunks (and adding tracks) and the other for assigning music to levels (possibly eventually with the ability to assign in-game level names). Since you'll have to link audio resources before using either, I'll just throw up the Sound Setup dialog on first use of either. I designed and coded that dialog today, but I still need to make a place in the local config file for the audio files.

Monday, August 11, 2014

FMod - Full Audio Library

Though Abiathar will almost certainly not have a built-in sound editor, I wanted to have the appropriate classes in FleexCore just in case somebody else wants to do something like that. Today, I wrote all those classes and their IO methods in the GalaxyAudio class. Unlike GalaxyGraphics, it delegates the chunk loading and saving to the individual sound classes (PcSpeakerSound, AdlibSound, ImfSound) for ease of writing to individual files. I also did a lot of reading and research on the patching involved in adding songs, and it seems to not be terribly difficult.

Sunday, August 10, 2014

FMod - Audio Time

I did a little research on the file formats and patching involved in Keen Galaxy audio and determined that I could probably do something with it. I'm not going to include an actual audio editor - I know absolutely nothing about such things - but I can handle all the extraction and recompilation. One thing Gridlock wanted me to add was a way to map levels to music tracks in such a way that the mappings do not get shifted down whenever one adds a new track. This is something Abiathar can easily handle, and once I figure out how to move around all the data in the audio files, it will be attempted.

I tried to make a little subroutine to play a PC Speaker sound, but Console.Beep, even with its frequency controls, is not sounding at all like the game. I did some research on NAudio and general .NET sound production, but it is so insanely complicated even to make a simple sine wave that I'll abandon any playing of sound.

FMod - Middle Mouse Drag

A person on the Keen:Modding IRC channel suggested that I add a feature from the "Mindbelt" Vorticons editor: drag the level view around using the middle mouse button. That sounds very useful for people who have a middle mouse button, so I mapped one of my extra pen actions to it for testing purposes. It wasn't terribly difficult to implement, but it definitely would have been easier if scrolling the opposite direction extremely quickly had been acceptable. This change will appear in the next major update.

Friday, August 8, 2014

FMod - Minor Crash Bug

Just a few minutes ago, I discovered a tiny little crash bug in Abiathar's New Project Wizard. It was a null reference error caused by the first page's resetter not actually clearing which tabs are visited. Come to think of it, that also probably caused some other subtle issues. Anyway, it's all fixed now.

Thursday, August 7, 2014

Let's Play Bio Menace

Since I'm making a somewhat big deal out of the fact that Abiathar supports Bio Menace, I figured I should probably play or at least know things about the game. And what better way to play a game than in a let's-play? I recorded a full playthrough with commentary on Bio Menace 1 today and will be uploading one episode a day, with an average length of 12-14 minutes.

Watch the first episode or start the playlist!

Wednesday, August 6, 2014

FMod - v2.1

I did some work on Abiathar today, here are the results:

  • Infoplane Override is now an option under Edit instead of a tab in the New Project Wizard. This was done to reduce the length of the NPW and make it less confusing for new users.
  • There's a new dialog under Edit: Color Mappings. It allows you to, well, remap the EGA colors to use a different palette in the editor. It even applies to bitmaps.
  • Colors have been tweaked very slightly to appear exactly as they do in-game. (Wikipedia's article on the EGA palette, which I had used to write Abiathar's loader, had incorrect values.)
  • Bio Menace templates have been added to the New Project Wizard.
These changes were released as v2.1, including yesterday's Level Inspector tweaks.

Tuesday, August 5, 2014

FMod - Level Inspector Tweaks

It seems the modding tutorial on KeenWiki had incorrect limits for the number of animated tiles that can appear on the screen at once. It also led me to believe that the limit was for the number of distinct animated tiles that can be onscreen at once, which does not seem to be the case at all. So, I modified the Level Inspector in Abiathar to be better attuned to the state of reality. This change will be included in the next update.

Monday, August 4, 2014

FMod - v2.0.1

Wiivn, one of the Abiathar icon artists, reported a crash bug in v2.0. It occurred when moving to the EGA Layout tab using the Keen 6 template. This was because Keen 6 has more than 2048 background tiles, which I had incorrectly assumed to be the upper limit and therefore used as the maximum for a numeric up-down control. The maximum of that and the related number box has been increased to 65535, fixing the problem. It was published as version 2.0.1.

Also, MoffD (the other icon artist) discovered that it is possible to run Abiathar on Linux using Mono. Unfortunately, since Mono is an incomplete implementation of the .NET Framework, some methods are still missing, causing some strange behavior and warning messages while running Abiathar. It does work, though, and can handle all the features and file IO correctly.

Sunday, August 3, 2014

FMod - v2.0!

Abiathar v2.0 has been released to the community on the forums and in the auto-updater! The following is my release post on PCKF describing the update:

First, there's an entirely new way of starting a project! It's called the New Project Wizard, and it is intended to replace the Dependency Collector. (You can bring the DC back in the config file, ShowAdvancedMenuOptions/LegacyDepsCollector.) As I said, it's a wizard, so it steps you through every part of creating a project and offers a lot more features than the old DC.

The features introduced by the New Project Wizard are amazing. Abiathar now supports Bio Menace: choose to input settings manually, select "TED5 MapTemp/MapHead" for the level format, open the GFXINFOE file that comes with Bio Menace, and run the wizard as usual. You should also be able to open other TED5-created games with that or the other TED5 option (MapTemp/MapTHead).

The NPW also permits you to use tile sheet bitmaps as your graphics source. It supports ModKeen and KeenGraph bitmaps (plus KG grouting), automatically detecting what type it was given. You can also take advantage of Infoplane Override to show a different set of tiles in the infoplane layer than in the foreground layer for the same IDs.

Then, even after you're done with the NPW, you can always come back to it to modify your project setup later, using "Project Settings" under Edit. Also, if you get inexplicable errors in the NPW, you can use its new error reporter to send me a report of the issue so I can help tell you what's wrong.

You know the level maps on KeenWiki? You no longer need a separate tool to make them - just use Abiathar's new "Export Image" option under View. The config file lets you do things like clip the outer 2-tile border, use a custom zoom level, or automatically choose a filename based on level properties instead of specifying one every time.

MoffD and wiivn were very kind and made some icons for Abiathar! There are three of them; they appear in various places.

The Row and Column Adjusters have been extended with the ability to update links only if the foreground tile property makes it appropriate. This is not the default, though, because it takes a little longer to complete and doesn't work if the foreground tile changes in-game (such as on the Keen 5 world map). If you don't want to update links for some reason, there's also an option for that. Press Space while using those tools to choose your link update policy.

The Level Inspector has been made more efficient, and given better detection routines (as has the inspection mode of the Tile Property Modifier). It also has a better report GUI, which allows you to scroll through the list, sort it, or save the list to disk.

Performance has been improved, especially while using the Tile Tweaker. Some miscellaneous improvements all over the place speed up other tasks as well.

The Tile Instance Locator (find tool) now allows placing tiles, and updates when you pick a tile from the tile palette.

Translucent colors are now rendered as the normal color with 50% opacity, as opposed to not showing up at all. This works best when loading from EGA resources.

The Reload Graphics command now uses Shift+Enter as a hotkey, and works a lot better. The crashing has been eliminated and the level no longer vanishes while the reload is in progress. (It does still show the "Abiathar" splash screen while reloading on Linux, though, due to a missing API method.) Speaking of keybind changes, the undo command is now simply Z, as opposed to Ctrl+Z. Tile Instance Locator and Tile Instance Remapper have been given shortcuts.

Code cleanliness has been improved, increasing stability and making it easier for me to maintain it and add more features!

A rare level corruption bug involving Dreams levels with embedded tileinfo has been fixed.

Using Assimilate Infoplane no longer disables the infoplane-only palette, and the strangeness with right-clicking in the combined tileset has been removed.

Finally, the plane controls have changed. As you will see quite clearly, the plane state labels give a more obvious visual indication of how active they are. The business with function keys to set plane state is no longer default; the TED5 style is in. You can still use the menu options or the labels to change the state, or switch to the old behavior in the config file. Tilesets can be called with the spacebar and switched between with 1 through 3 while in palette mode, and remember their Y offset. If you don't want to press Space to access them, use Simultaneous Tileset mode or use the appropriate key in the 7-9 range.

Happy modding,
Fleexy

Saturday, August 2, 2014

FMod - Pre-Release Cleanup

I'm on track to release Abiathar v2.0 tomorrow! Today, I just did some minor clean-ups and tests of various obscure subsystems. The following things were changed:

  • The hotkey for Reload Graphics changed from Enter to Shift+Enter to prevent people who press Enter unnecessarily from accidentally triggering a CPU-intensive process.
  • The Graphics Source tab's default in the New Project Wizard is now to use the original game's graphics.
  • Saving in the Templates dialog now refreshes the templates list in the New Project Wizard.
  • Menu separators were added to the File menu.
Now, I just need to proofread the help file again, convert it to a nice PDF, and write up the release post!

Friday, August 1, 2014

FMod - Less Obtrusive Graphics Reload

Gridlock on IRC today requested that the Reload Graphics function receive two adjustments, both of which turned out to be somewhat tricky. First, he wanted it to preserve the plane states and position in the level, which is very understandable. I ended up adding an "after reload" flag to InitializeGraphics that suppresses the, well, initialization of the plane states and selected tiles. The reloading function itself now saves the X and Y offsets inside the level view state and restores them after the InitializeGraphics call.

Then, he noted that, while reloading, the "Abiathar" logo/image appears instead of the level, which makes it hard to compare different versions of graphics because it's interrupted by a big splash screen. I did a whole lot of messing around and eventually settled on using the Windows API to send a "stop repainting" message to the form before doing the reload. For some reason, the level would simply vanish while the graphics reloaded, which was strange because I couldn't find a call that re-rendered anything. So, the issue is now solved, and even falls back on the old behavior if that API call is unavailable (i.e. it's running on Linux).

In other news, I have placed a moratorium on new features until the v2.0 update, and the documentation update has been completed. After a little more testing and feedback, Abiathar v2.0 will be released on August 3.