Some rather severe bugs were reported to me today concerning Abiathar. First, the Flood Filler was reported as causing crashes when filling large areas, but it actually showed the bug whenever a fill hit the left edge of the level. That caused it to try to store a negative value in a UShort (due to the way it remembers where it's been), which obviously resulted in an overflow. This was easily fixed by changing the order of checks before trying to fill a tile.
Second and more importantly, Dreams levels were exhibiting an interesting problem: a few tiles at the end of the level would get set to zero upon saving. It turns out there was a bug in the FleexCore2 saving code that caused an off-by-two value to be written as the compressed length. That cut off the description of the last RLEW run of tiles for each plane, resulting a slightly truncated level, typically only affecting the "edge of map" markers.
Not reported but extremely critical was the complete deletion of level 0 upon loading a Galaxy set! The adjustments I had made to FleexCore2 to accommodate Tharify's lack of level 0 (and remain compatible with the old InstantCarma that placed the first level header at offset zero) had caused legitimate levels to be detected as garbage and removed. This was fixed with a quickness.
While I was at it, I also fixed the UI glitch of the updates-available window appearing behind the splash "loading" screen. These changes were released as v2.4.1.
Various technical articles, IT-related tutorials, software information, and development journals
Monday, March 16, 2015
Sunday, March 15, 2015
Windows 10 Updates Differently
Windows Update works in Windows 10 (or "Windows Technical Preview" as it calls/called itself internally), and you can get a few updates designed for it. However, there's a significantly different way that Windows 10 receives the big changes.
Windows 10 will actually redownload and reinstall itself if left unattended for half an hour or so. You can't trigger the acquisition or installation of a new build with Windows Update; you have to let it use its own special channel. (Of course, you could download the new ISO from the Windows Insider web site if you want to control exactly when it happens.)
Windows 10 will actually redownload and reinstall itself if left unattended for half an hour or so. You can't trigger the acquisition or installation of a new build with Windows Update; you have to let it use its own special channel. (Of course, you could download the new ISO from the Windows Insider web site if you want to control exactly when it happens.)
Saturday, March 14, 2015
Keen Day 2015
Yesterday, I made some major updates to Tharify in addition to writing the AbiatharOS build script. The /levelsonly switch has been added; this is necessary for games that have Vorticons-style levels but other-style graphics. It causes only level files to be generated; the user must supply the graphics and create the ADEPS manually. That ADEPS's filename must then be supplied when detharifying even if /conf is used to load the settings from a configuration file.
Last night as I was falling asleep, I had a great idea for a simple yet immensely useful Abiathar feature, which I implemented this morning. I call this feature "mini-palettes." It adds a small repository of 10 tiles for each plane that can be accessed by pressing Alt+Up or Alt+Down. Doing so produces a little floating panel above the current plane's selected tile image, with a 3x3 grid plus one. The extra tile, slot 0, is automatically set to the previously selected tile when a tool (e.g. the Tile Tweaker) changes the selected tile. (I call it the history tile.) Each of the tiles in the mini-palette has a number assigned to it, arranged like the keys on the numeric keypad (as opposed to the number keys on a phone).
The mini-palette pop-up has two modes, storing (Alt+Up) and retrieving (Alt+Down). In storing mode, mini-palette tiles can be clicked to replace them with the main selected tile or right-clicked to replace them with the history tile. In retrieving mode, tiles can be clicked to make them the main selected tile.
While the pop-up is showing, the Left and Right arrow keys show the mini-palette for the plane to the left or right, as appropriate. Up and Down switch modes, updating the text appropriately. This feature addition was bundled with v2.4.
I released Abiathar v2.4, AbiatharOS, and Tharify on the PCKF at different times throughout the day. There have also been some interesting releases by other people, which I will check out more thoroughly tomorrow. And, I expect another release or two when it's day over in Australia/NZ. An exciting Keen Day indeed!
Last night as I was falling asleep, I had a great idea for a simple yet immensely useful Abiathar feature, which I implemented this morning. I call this feature "mini-palettes." It adds a small repository of 10 tiles for each plane that can be accessed by pressing Alt+Up or Alt+Down. Doing so produces a little floating panel above the current plane's selected tile image, with a 3x3 grid plus one. The extra tile, slot 0, is automatically set to the previously selected tile when a tool (e.g. the Tile Tweaker) changes the selected tile. (I call it the history tile.) Each of the tiles in the mini-palette has a number assigned to it, arranged like the keys on the numeric keypad (as opposed to the number keys on a phone).
The mini-palette pop-up has two modes, storing (Alt+Up) and retrieving (Alt+Down). In storing mode, mini-palette tiles can be clicked to replace them with the main selected tile or right-clicked to replace them with the history tile. In retrieving mode, tiles can be clicked to make them the main selected tile.
While the pop-up is showing, the Left and Right arrow keys show the mini-palette for the plane to the left or right, as appropriate. Up and Down switch modes, updating the text appropriately. This feature addition was bundled with v2.4.
I released Abiathar v2.4, AbiatharOS, and Tharify on the PCKF at different times throughout the day. There have also been some interesting releases by other people, which I will check out more thoroughly tomorrow. And, I expect another release or two when it's day over in Australia/NZ. An exciting Keen Day indeed!
Friday, March 13, 2015
FMod - Automated OS Build
Since the legality of redistributing Windows PE and the Windows ADK is questionable (despite it being free for anyone to download), I decided to spend a bit of time today and create a PE build script for AbiatharOS. That way, anybody can download Windows PE from Microsoft as they like, then run my script to put the ADK on autopilot, and out pops an ISO file and a WIM file.
This turned out to not be so hard. I just made a batch file alongside folder called "patch" that contains all the files to be replaced or added. The batch script does the following:
This turned out to not be so hard. I just made a batch file alongside folder called "patch" that contains all the files to be replaced or added. The batch script does the following:
- Sets up a PE build environment (copype)
- Mounts the resulting WIM image (dism)
- Adds the WMI and NetFX WinPE packages (dism)
- Adds ImageX to the image for AbiatharOS installation (copy)
- Sets the NTFS owner of WinPE's System32 directory to Administrators (takeown)
- Grants the user the rights to modify the WinPE system files (icacls)
- Adds/replaces the appropriate files from the patch directory (xcopy)
- Unmounts the WIM image (dism)
- Burns the WIM and other resources into an ISO (oscdimg)
- Moves the WIM file out of the PE build environment (move)
- Removes the PE build environment (rmdir)
I should test it on other computers before release, but it works perfectly on mine. All I have to do is release a ZIP containing compile.bat and the patch directory; all the real assembly happens on consumer machines.
Thursday, March 12, 2015
Tharify - Essentially Done
Today during a study hall, I hammered out the rest of Tharify: the command-line interface and the detharification routine. With the command interface in place, I actually got to test the tharification that I finished writing yesterday. It worked almost perfectly, except for these fairly apparent bugs:
- I had forgotten to actually add the converted GalaxyLevel to the GalaxyLevels collection. This resulted in a blank GameMaps and a crash when opening with Abiathar.
- FleexCore2's Vorticons level loader was completely broken. (I had ported it, more or less, from the original FleexCore, but apparently never tested.) At first, loading any file resulted in a zero-by-zero level because I never set the seek needle back to the start of the stream after decompressing. After fixing that, I found that the plane size was miscalculated, resulting in all sprites being shifted over.
- The adjustments I made a while ago to the GalaxyLevels loader (allowing a level's header to start at zero in the GameMaps) caused the " FLEEXY " signature to be interpreted as a level header when there is no level 0.
- The Keen sprite/icon rendered as a blank tile because of an off-by-one error in the sprite to infoplane tileset conversion code.
I fixed all of them fairly easily, except the third. I added some special cases to the Galaxy levels loader to heuristically detect whether there is a real level at offset zero when the map header file has a zero value for the first entry.
| Keen 1, tharified, and opened in Abiathar |
The first background tile renders as the first actual tile because Abiathar always renders the first foreground tile as fully transparent. When tile zero is actually present, the background tile representation of it shows through. The second background tile says "not a link" and is used to suppress absolute-to-relative link correction.
When running the first Tharify command, the /outconf switch can be used to save the configuration to a small file for easy detharifying or retharifying. The presence of the /conf switch in either mode (/thar or /vort) causes the operation parameters to be loaded from the file rather that sought on the command line.
I'll do some more testing, of course, but Tharify is pretty much ready for this Keen Day. (Two days away!)
Wednesday, March 11, 2015
Tharify
Keen Day 2015 is coming up with a quickness, and I don't have anything particularly groundbreaking coming up. However, I do have two fun little things related to Abiathar that might be interesting to a few people, one of which is AbiatharOS.
The other is Tharify. My plan for Tharify is to create a conversion process from Vorticons to Galaxy and back so that Abiathar can be used for Vorticons editing. This probably won't be particularly useful - Mindbelt is a great Vorticons editor and has the advantage of actually being designed for that engine/style - but it's a fun small project for me. (To be honest, I'm really doing it to see if I can.) I've only had two coding sessions on it so far, but it's about halfway done already.
Currently, it can convert the Vorticons EGA resources into KeenGraph-style tile sheet bitmaps. The Vorticons tiles become the foreground plane; sprites are squished into infoplane icons. The background only has two tiles: a blank black square and a "not a link" text. That special tile signals the Galaxy-to-Vorticons level converter to not perform link adjustment on it. (Vorticons uses relative coordinates for switch links; Galaxy uses absolute.)
I'm still working on the command-line argument processing. Once there's a working implementation of that, I can actually test all this code I've been blindly writing.
The other is Tharify. My plan for Tharify is to create a conversion process from Vorticons to Galaxy and back so that Abiathar can be used for Vorticons editing. This probably won't be particularly useful - Mindbelt is a great Vorticons editor and has the advantage of actually being designed for that engine/style - but it's a fun small project for me. (To be honest, I'm really doing it to see if I can.) I've only had two coding sessions on it so far, but it's about halfway done already.
Currently, it can convert the Vorticons EGA resources into KeenGraph-style tile sheet bitmaps. The Vorticons tiles become the foreground plane; sprites are squished into infoplane icons. The background only has two tiles: a blank black square and a "not a link" text. That special tile signals the Galaxy-to-Vorticons level converter to not perform link adjustment on it. (Vorticons uses relative coordinates for switch links; Galaxy uses absolute.)
I'm still working on the command-line argument processing. Once there's a working implementation of that, I can actually test all this code I've been blindly writing.
Tuesday, March 10, 2015
Calling VoIP Phones on the LAN with Ekiga
I was recently assigned the task of getting a Windows computer to connect to a phone over the network so that the audio received from the phone can be included in a livestream broadcast.
I looked around in the documentation for the phone system that's already on the network, but my organization doesn't seem to have bought a desktop client for our SIP system. After a good deal of research and scratching my head, I discovered Ekiga.
Ekiga is an open-source SIP/VoIP client that works on all manner of platforms. More importantly, it supports dialing by IP address rather than the strange SIP address thing that I still don't understand. Simply prefix the phone's IP with "sip:" in the call destination field and go! The phone will ring and establish a full connection after a person answers.
I looked around in the documentation for the phone system that's already on the network, but my organization doesn't seem to have bought a desktop client for our SIP system. After a good deal of research and scratching my head, I discovered Ekiga.
Ekiga is an open-source SIP/VoIP client that works on all manner of platforms. More importantly, it supports dialing by IP address rather than the strange SIP address thing that I still don't understand. Simply prefix the phone's IP with "sip:" in the call destination field and go! The phone will ring and establish a full connection after a person answers.
Subscribe to:
Posts (Atom)