text:
When the city sends Tom Clancy his property tax bill, finance officials might want to tuck in a thank-you note.
The multimillionaire novelist's supersized digs at the Ritz-Carlton Residences along the Inner Harbor have by far the highest tax payment of any home in Baltimore this year — almost $350,000. That's more than all the payments from homeowners in some entire city neighborhoods.
Property taxes on the 10 homes with the biggest bills, and the 10 commercial properties at the top of the heap, come to an eye-popping $20.7 million, according to a Baltimore Sun analysis. And city officials, forever trying to expand Baltimore's tax base, say they're very glad for the big payers.
"Imagine if they weren't here," said M.J. "Jay" Brodie, president of the Baltimore Development Corp., the city's economic development arm.
Clancy and his wife, Alexandra, own 17,000 square feet at the Ritz-Carlton — originally six separate penthouse condos bought in 2009 and 2010. Eight typical single-family houses could squeeze into that space, which includes its own movie theater.
To put their Ritz taxes into perspective: The collective payments of everyone who owns property in Dickeyville, the village on the western edge of the city, amount to $7,400 less than the Clancys' tab.
Office towers, hotels and an upscale apartment complex round out of the rest of the properties with the highest tax bills, most in and near downtown. The top homes are largely around the Inner Harbor, and four are at the Ritz-Carlton.
Most of Baltimore's property tax revenue, of course, flows from less high-flying sources. Nearly half the tax bills on city properties are less than $1,800 a year. About two-thirds of all the taxes come from homes, with the rest from commercial property, including apartments.
The Sun analyzed all 237,000 city property tax records. Baltimore officials said they couldn't provide the level of detail required for an in-depth look at who pays what, so The Sun built its own database, copying records from a city website using an automated process called "data scraping."
What almost all the top properties have in common — besides high values — is a lack of tax breaks. None of the fancy new buildings in Harbor East, which are among the city's most valuable properties, cracked the top 10 commercial taxpayers because breaks abound in that part of the city.
The Legg Mason skyscraper, for instance, would have the biggest tax bill of any property in the city if owner H&S Properties Development Corp. paid the full tab. But the company is getting a 90 percent discount thanks to development incentives.
This year's tax bill on that building comes to $468,000, just a fraction of the $4.2 million paid by the owners of T. Rowe Price's downtown headquarters at 100 E. Pratt St. — the biggest single bill citywide.
As a whole, the city's top taxpayers aren't eager to chat about their distinction. Many, Clancy included, did not respond to messages.
Entrepreneur David Oros and wife Marla declined to be interviewed about the $93,000 bill — third-highest among city homes — on their completely rebuilt 1920s North Baltimore house, which sits on more than five acres.
Contractor James W. Ancel Sr., ranked seventh courtesy of the $45,000 tax bill on his HarborView condo, could not be reached at home or work.
One homeowner on the list said he knew his bill was big but didn't realize it was one of the biggest — and he didn't want to talk about it. Officials with a commercial property owner in the top 10 worried that anything they said could be used against them if they appealed the property assessment, something commercial owners frequently do.
Others were intrigued.
Scott E. Dorsey, a trustee for the family trust that owns the most expansive of the Pier Homes in the Inner Harbor, had a quick response when told it has the second-biggest tax bill in the city: "Really! Who's No. 1?" (Given a chance to guess, he got it on the first try.)
Many of the Pier Homes townhouses were built — as their name suggests — on piers in the Inner Harbor. Leroy Merritt, who was born in Dundalk and amassed his fortune developing commercial real estate and building a chain of athletic clubs, bought the two adjoining homes at the end of the north pier in 2007 and turned them into a single residence.
The 9,000-square-foot property has a four-car garage, six bedrooms, seven full bathrooms and three more half-baths. There are a home theater, sauna and elevator. The rooftop deck stretches 75 feet. Nearly everywhere you look, there's water — and views of other top city properties.
Merritt bought the homes in an unfinished condition for $6.1 million and spent millions more building the interior himself. It was his primary residence until his death in 2010, though he owned others, including a house on the Magothy River in Anne Arundel County.
"He liked being on the water, and being on the water in the Inner Harbor was a lot more convenient than being on the water on the Magothy," said Dorsey, chairman and CEO of Merritt's real estate company, Woodlawn-based Merritt Properties LLC.
Now the home is on the market for $8.5 million. That's more than twice its assessed value for tax purposes, but Dorsey says he and fellow trustee Robb Merritt can wait for a buyer who takes their view of its long-term value.
And they believe the property tax tab on the Merritt house — $95,000 this year — isn't going to stop potential buyers in their tracks. Typical purchasers must account for taxes when determining how much house they can really afford, they said. The well-heeled? Not so much.
"You say, 'OK, the taxes are the taxes,' and you pay it," Dorsey said. "People who can afford to live in places like that — like Mr. Merritt and Mr. Clancy — they're not pinching pennies."
Robb Merritt, Leroy Merritt's son and president of the real estate company, added with a laugh: "You notice Scott and I aren't living here."
J. Michael Martin, chief investment officer at Financial Advantage Inc. in Columbia, said the type of tax his high-net-worth clients gripe about is income tax. "I really never hear them complain about the property tax," he said, and that includes the families he advises in Baltimore.
"Don't forget, it's deductible from an IRS point of view," Martin said. For people in higher income-tax brackets, that can cut the true cost of the property tax almost in half, he said.
Kirby Fowler, president of the Downtown Partnership of Baltimore, an advocacy group, wasn't surprised to hear where the city's top properties are clustered. The partnership says downtown — defined as encompassing a one-mile radius from Pratt and Light streets — accounts for 4 percent of the city's land mass yet generates 13.5 percent of all property taxes. Eight of the top 10 residential properties and all but one of the top commercial buildings fall within that footprint.
City Councilman William H. Cole IV, whose district includes most of the top homes and commercial properties, said he sees it as an encouraging sign "that we have high-profile, high-wealth individuals who are willing to invest in the city."
"On the residential side, a lot of the highest units are units that have been built in roughly the last decade or less," Cole said. "That's an indication we obviously have new construction that is obviously helping our tax base significantly. It also indicates that while property taxes remain a huge issue to our growth and development, for some it simply is not a deterrent. Location means a lot."
Dan Melia, Mid-Atlantic regional vice president at REIT Management & Research LLC, doesn't have a bone to pick about either the city's highest-in-the-state property tax rate or the $1.2 million bill on the Candler Building, which his company manages.
He thinks it makes sense that the 540,000-square-foot office building on Market Place in the Inner Harbor area — packed full of tenants such as Johns Hopkins — has one of the city's top tax bills.
"Naturally I'd love to see lower taxes, but you start lowering taxes, you start taking away from services in the city," Melia said. "Everyone has an obligation. If you're going to work in the city, you should pay your fair share."
What gives him pause is that some other buildings have had their taxes dramatically lowered by various breaks. The Candler Building, which has none, isn't far from Harbor East and its major buildings with tax discounts.
"I think sometimes they do a disservice to the city, unless they're drawing [businesses] from outside," Melia said of tax breaks. "If you have a gas station across the street from my gas station, and you get a tax incentive on your gas and you get to charge $2.50 a gallon while I have to charge $3, where's everybody going to go?"
H&S Properties, the developer of Harbor East, did not respond to a request for comment. But the BDC, which recommends tax-deal packages to elected officials, has long argued that tax subsidies for some are worth the cost.
Brodie, after hearing a rundown of the commercial properties with the biggest bills, said "almost all of those were done with some form of city assistance." The Renaissance Baltimore Harborplace Hotel (No. 3 on the top 10) was built on a city-owned urban renewal site, he said. So was the top-ranked 100 E. Pratt.
The fourth-place Hyatt Regency Baltimore is actually owned by the city — the Hyatt leases the site and pays the taxes. And No. 2 on the list is the Hilton Baltimore, the Convention Center hotel owned by a nonprofit created by the city.
The Hilton is one of the rare top properties with a subsidy related to property taxes. The Baltimore Hotel Corp. paid the full $4 million due this year, but that money didn't flow to the city's general fund — and neither will payments for years to come — because it's earmarked to pay off the revenue bonds issued to build the hotel.
Brodie looks at the rest of the top payers and sees in them Harbor East's future — eventually. The tax breaks all have an expiration date.
"As they end and convert to full taxes, you'll see some major additional addresses on your list," he predicted.
Most owners of the top properties paid quickly enough last summer to get the city's early-bird discount, which at half a percent added up to numbers impressive by themselves. The Clancys' discount topped $1,600. For 100 E. Pratt St., the savings were nearly $20,000.
But the Oros family waited so long to pay for the tax year that ends June 30 that they've been hit with penalties — also substantial.
David Oros, the dot-com entrepreneur who is now running a Baltimore hedge fund, declined to be interviewed but said in an email that the payment delay was related to an assessment appeal last year. He said the bill was recently paid. The city had no record of that as of Friday afternoon, but finance officials say it can take a few days for payments to be processed and show up in their system.
Interest and penalties come to about $4,600 — more than twice the typical city homeowner's total bill.
About this series
Taxing Baltimore is a series of occasional articles examining Baltimore's highest-in-the-state property tax rate.
To report the series, The Sun requested information from the city showing the net tax bill and any tax credits for every property in the city. Baltimore's Finance Department said it couldn't provide that level of detail because the information was essentially trapped inside an aging mainframe computer.
Using an automated process called "data scraping," The Sun instead created its own database of all 237,000 city property tax records by copying the information, one record at a time, from the individual tax records publicly available on the city's website.
The first articles, published last month, detailed how the Homestead Property Tax Credit has morphed into a massive subsidy fueling widespread inequality among homeowners — a problem made worse by errors in billing and inadequate government oversight.
When the city sends Tom Clancy his property tax bill, finance officials might want to tuck in a thank-you note.


text:
Ashton Kutcher Movie 'jOBS' to Be Released in April
Open Road Films has announced that it is the distributor for the Ashton Kutcher-led film jOBS, and that the movie will receive a full release in April of this year, reports Deadline.
Directed by Joshua Michael Stern, written by Matthew Whitely, shot by Oscar- winning cinematographer Russell Carpenter and produced by Mark Hulme, jOBS details the major moments and defining characters that influenced Steve Jobs on a daily basis from 1971 through 2000. jOBS plunges into the depths of his character, creating an intense dialogue-driven story that is as much a sweeping epic as it is an immensely personal portrait of Steve Jobs' life. The filmmakers were granted unprecedented access during shooting to the historic garage in Palo Alto, that served as the birthplace to Apple Inc. jOBS stars Ashton Kutcher, Dermot Mulroney, Josh Gad, Lukas Haas, J.K. Simmons and Matthew Modine. Inferno Entertainment is handling international sales on jOBS.
The film will premier at the Sundance Film Festival in Utah later this month.

subset: commoncrawl


text:
- Top quality stainless steel heavy duty scissors, icetempered for a long lasting cut. Made in Germany (Solingen)
- Suitable for cutting multiple layers of fabrics
- Ergonomically shaped grip in unbreakable plastic with soft rubber inserts, providing a comfortable non-slip hold for either hand
- Special grinding for an excellent sharp edge and precision cut
- double-serration for the perfect cut of aramid fibers (Kevlar, Twaron) (see detailed picture under Downloads). These shears are also very suitable for the cutting of fibreglass materials.
- total length 25 cm - cutting length 12 cm


text:
HID Global's OMNIKEY® 5427CK Reader combines a modern design with a small footprint and functions in virtually any PC environment, opening new market opportunities for system integrators. Independent of operating system, the reader includes CCID and Keyboard Wedge Interface and it is commonly used for secure print authentication applications and access control systems as well as PC login using existing employees' credentials.
The reader also supports low and high frequency technologies within a single device to provide organizations with a seamless migration path and enabling mixed credential technology environments.
Additionally, the reader includes an integrated, easy-to-use web based management tool that enables intuitive, browser-based configuration independent from the operating system.
- Security - Enhanced system security supporting low and high frequency credentials including HID Prox ®, Indala Prox, MIFARE® Classic, MIFARE DESFire® EV1, iCLASS®, and iCLASS SE.
- Ease of use - Straightforward utilization of existing access control credentials for PC login in both CCID and Key Wedge operation modes.
- CCID Support - Eliminates the need to install drivers on standard operating systems.
- Keyboard Wedge support - Retrieves data from a card and presents the information directly to any application by emulating keyboard strokes.
- Flexibility - Numerous accessories and mounting options are available.


text:
4 x 5 inches (10.2 x 12.7 cm), 8 x 10 inches (20.3 x 25.4 cm)
Print Of Female Nude Painting – The Lady With The White Hat – Sensual Naked Woman Drawing Picture Nudity Art Artist Andreev
$11.99 – $18.99
An authentic print of an original female nude oil painting titled 'The Lady With The White Hat'. The print is created by me Vesselin Andreev, the artist of the original female nude oil painting.
– I created the print using original inks on a high quality matte photo paper. This means that it is a solid, very durable print with deep color saturation and water and UV resistant properties.
– Because of the relief linen surface and the matte finish of the paper, the print looks like the original painting (I created the original erotic female painting on a watercolor paper also having a relief surface and a matte finish).
– I will sign and date the print at the back and will send it to you with a Certificate of Authenticity, also hand-signed and dated by me.
– I will carefully pack your print and will ship it flat, sandwiched between thick cardboard so that it will not be rolled or creased.
– The copyright watermark does not appear on the actual print.
Thank you for your interest in my art and don't forget to see my other works!
Copyright © Vesselin Andreev. All rights reserved. Rights do not transfer with the sale. No reproduction without permission from the artist. All models are 18 years of age or older. Erotic female art.
There are no reviews yet.


text:
DOHA (REUTERS) - Twelve people were killed, including two children, and about 30 wounded when a gas tank exploded at a Turkish restaurant in the Qatari capital off Doha on Thursday, authorities in the Gulf Arab state reported.
A security source told Reuters the blast at the Istanbul restaurant was accidental. Another security source at the scene said two Asian children were among the dead.
Major General Saad bin Jassim al-Khalifi, Qatar's head of public security, said Arabs, Asians and one Qatari were among the dead and wounded.
Preliminary investigations suggested that a gas tank exploded, setting off a fire and causing part of the building to collapse, he told a news conference. But investigations were continuing to discover what caused the gas tank to explode.
"It was a very big blast," he said. "It blew away cars and the shrapnel scattered 50 or 100 meters away." Chunks of masonry, metal debris and shattered glass lay outside the restaurant in a northwestern district of the city.
Cars apparently crumpled by the explosion stood nearby.
The incident was the deadliest in Qatar since May 2012, when at least 19 foreign nationals, including 13 children, were killed by a fire in an upscale shopping mall.
A member of Qatar's ruling family was among five people sentenced to prison by a court last year for negligence over the fire. The blaze was caused by faulty wiring in Doha's Villagio Mall and quickly spread to a nursery, the court found.
The gas- and oil-rich Gulf Arab state, with an estimated national population of at least 200,000, has one of the highest standards of living in the world. The bulk of the two million population of Qatar are foreigners.
The area around the Istanbul restaurant is on the outskirts of the capital near Landmark mall, a well-known shopping complex usually busy area with families.
"I was eating in a restaurant close by and suddenly heard a big (blast) and everything around me exploded," Abdul-Rahman Abdul-Kareem, an Indian driver who was eating in a restaurant nearby, told Reuters at Hamad hospital.
"I have too much damage now, my legs are broken and my head is open."


text:
Fifteen years before indie games gained traction, the buzzword for amateur game design, and PC games in general, was Shareware.
In the early '90s, PCs were the realm of the tinkerer and the white-collar professional. Thanks to the crash of '84, they were also the only major outlet for North American game design. The problem was, PCs were built for business rather than leisure. After a decade of hacking and add-ons, the hardware reached a level where a bedroom programmer could attempt the fast-paced action of arcade and console games. Add in a growing network of dial-up boards, and you have distribution. Creativity exploded, giving rise to games like Commander Keen, Jill of the Jungle, and Doom.
In the mid-'90s, the Internet hit the mainstream. All of those bulletin boards dried up, as did their ratio-based uploading, so there was no distribution. At the same time, 3D cards began to hit. File sizes went up, coding got more complicated, and development got more expensive. As PCs became a household appliance, competition for the glitziest showpiece went bananas. For about a decade, the bedroom developers all but vanished.
Then in the mid-2000s, thanks to the growth of social networking and the advance of boxed game design kits like Mark Overmars' Game Maker, a new generation of bedroom developers appeared, to fill in the creative void that some felt in the mainstream industry. In early 2013, the indie scene is again one of the most vibrant regions of the development community.
That gap need not have occurred. In 1991 a company called Recreational Software Designs released its own game creation system for DOS. RSD's Game-Maker supported VGA graphics, four-way scrolling, Sound Blaster music and effects, full-screen animations, large maps, and fully animated characters and monsters. Its editing tools were powerful and intuitive, allowing quick turnaround of sprites and background tiles, and easy assembly into full games.
Game-Maker had its glitches and its limitations, but a skilled designer could put out games comparable with the high-profile shareware of the time. Some games, such as Jeremy LaMar's Blinky series, became cult hits. Some users, like Liight programmer Roland Ludlam and Bionic Commando associate producer James W. Morris, found their careers in game design. Still others, such as Seiklus author cly5m, graduated to become superstars of the modern indie scene.
Unfortunately RSD ceased development just before the Web became established, and right on the verge of a radical reinvention of the software. RSD never built an online presence, and aside from a few scattered users Game-Maker failed to make much of an impression on the Web – leaving a void, eventually for Mark Overmars to fill.
We caught up with lead programmer G. Andrew Stone to talk about Game-Maker and the place that it holds in indie game history.
It's good to reestablish contact! So what sort of resources do you still have around from the RSD era?
I've got it all, I'd say. A three-inch stack of letters. Source code, media, you name it!
I was thinking about the attitude in your magazine ads, and how strongly they focused on loading up and tweaking others' work. They almost suggest more of a creative collective than discrete authorship. It's an interesting attitude.
Well, at home we would show, suggest, and work on each other's games quite a bit. I mean for example there are techniques to make something look good in a 20x20 block. For example, grass. Is it one flat green color? I remember showing my mom how to speckle other colors around to make grass look like grass instead of a boring flat green field. It actually made the process more fun and the games a lot better. And of course, we realized that it would be pretty hard for a ten to twelve-year-old to do it all himself so there were practical considerations.
And growing up we were always doing projects together. Not just software or programming, everything. Totally random stuff!
I like this whole collaborative arrangement. I can envision sort of Game-Maker clubs springing up to meet on weekends, where everyone pitches ideas and shares insights – I guess not all that different from the demoscene, over in Europe.
Yes, I'll betcha that Game-Maker was used by lots of groups of friends; but of course, of all of those only a few manage to learn to work together to the point where they can come up with something!
I think that it was shared around a lot. I'm guessing that the sort of person who would buy Game-Maker is more likely to have the ability to pirate it then the average game consumer.since
In fact in '94 I was hanging out on a C programming IRC room and someone offered me a hacked copy – totally unsolicited. He had no idea I wrote it. I never really minded at the time; however in retrospect I'm realizing that if some of those people actually bought it then, the financial situation might have ended up slightly differently (as we were right on the edge of making money), which would have totally changed my personal history.
So how did this whole Game-Maker project get started?
I had done quite a bit of programming which I am going to skip – for example I wrote my school's entire scheduling and grade storage system, a countries-of-the-world quiz game (in Eighth grade, I think before Carmen existed), and a vector-style graphics editor to enter maps for the previous – and start here:
In about tenth grade I got quite excited in front of the school computer, so a friend came over and asked, "What?" I said something like, "Do you see that little red dot on the upper left corner of the screen? I put that there!!" He was unimpressed. So I said, "But you don't understand, I'm putting that dot there absolutely as fast as it is possible to do so!!" I was using optimized direct write Assembly language (REP STOSB), and so one dot was actually an important edge case whereas a whole line was easy. As I'm sure you know he still looked at me like I was nuts. And he said, "So what?"
Additionally, my brother and I were fascinated with maze calculation algorithms, coming from playing NetHack – we could imagine how to do the entire game; it's just a big database and logic engine, except for the maze calculation – and were having a bit of competition making them. I think my dad even joined in with one or two cave-like algorithms. My brother "won" with a 3D representation that he literally disappeared for about 72 hours in my dad's office to complete. it was freaking amazing since there were no 3D games at that time. In fact he did not use 3D vector math to calculate it, but sort of a complex logic engine that followed probable line of sight.
But if I could not one-up that I could certainly expand in a different direction in playability. And you couldn't bring a game into the school computer science room, but what if I wrote it? Then we would have a good excuse for playing it. So that dot became a maze solving game. This game was inspired by the Piers Anthony Proton/Phaze series. Players start at opposite ends of the maze and try to make it to each other's starting point.
Graphically it was 320x200 8-bit (like Game-Maker). It split the screen in half, putting two players' top-down views of the maze side-by-side on the screen. In fact, although Game-Maker was one player at a time, I had always been more fascinated with what we now call P2P games. I think this stems from one night when I was literally up all night playing an RPC, and suddenly at about 4am I had this really weird sensation where I just completely divorced myself from the game's surface interface and suddenly felt every key I typed was just meaninglessly changing bits and bytes deep in the computer. And so I felt, what was the point? If I want those bits to be a different configuration, why not just go in there and change them directly?
Anyway, one player typed madly on ASDWX, the other on JKLIM, to control a character through a much bigger block based maze with a view of about a 5x5 squares of almost Game-Maker sized blocks. In the Proton/Phaze books the floor lights up after you go through, which is sort of a great leveler because if you go the wrong way at first, your opponent could follow your tracks down the wrong path. Whereas if he makes it straight through to your path, as soon as you find his path it's a straight shot for you to his end. Clever, I thought!
But I had a little quirk, which is that I put the maze in a natural setting with rock walls and grass. Every time someone trod over the grass, it would droop and get a little more brown until after about ten times there was a clearly defined brown path (that's why I knew how to draw good grass!). At first I knew this and no-one else did, so I'd win all the races, but I kept dropping hints and later people noticed and it got really fun!
To make all these subtle grass changes, I needed a block editor. So, BLOCEDIT was born.
And I remember having a conversation with my parents, something along the lines of "You know, I could add this and that alongside BLOCEDIT, and you'd be able to make your own games without programming... maybe no summer job this year?"
I suppose it's becoming clear where the name "Recreational Software Designs" comes from. Did the company exist before Game-Maker?
We incorporated for Game-Maker. I came up with the name. Just made it up.
So you've built up a set of tools, and you've got this concept for marketing them. How did you go about financing the project, producing the inventory, and promoting everything?
Enter my father; I was the titular CEO, but really I was flat out coding like a maniac. He did 90% of the day-to-day business stuff and kept the books. And it was his money, so really whoever holds the purse strings is really the CEO. He trusted me totally – I could write checks and all (in fact, as CEO I had the final signature) but you know, I never did that for anything expensive (without discussion) because I guess that's just the way I am.
But I did help out on stuff like images for the box, user manual (after all I was the only one who really knew how it worked), and so forth. Also, I was sixteen to twenty. I mean, it's hard to be taken seriously at that age when trying to book advertising and so forth.
How many ads did you print? I was wondering what sort of spread you had, and for how long.
There were three ads, all done at the same time by the same guy to save money. There was a 1/3 page which I'm sure I have at least one copy of, as it is in a frame hanging over my desk. But I think I can find a better copy in a magazine or the laminated original. And I seem to remember a black-and-white 1/4 to 1/6 page with almost the content in the black-and-white box in the full page.
Do you remember which outlets? The ones I saw were in VideoGames & Computer Entertainment. I've also heard of ads in various PC magazines.
I'd say six or so gaming magazines for at least six months in each (at a time). But multiple iterations for the most successful ones (you saved money if you bought multiples). In retrospect we should have tried some DIY magazines... but remember a lot of people back then did not even own a computer.
We also had a booth at the CES, maybe in '94, in Chicago. That was a pretty awesome experience! I think we still use our sign as a Ping-Pong ball stop...
What sort of response did you get at the CES? How large was your booth?
We had a free-standing "sub-booth" inside a larger person's space (sub-letting space is very typical). I forget who did the subletting, probably one of our magazine contacts, but I remember that there was a flight simulator and joystick maker there as well.
I take it that direct orders formed the bulk of your business?
Yes. Direct through KD software in the US, indirect in UK and Korea. For indirect orders, the markup is prohibitive unless you are selling thousands of units through each distributor.
I wasn't aware of the Korean version. Do you recall what it was called, or who distributed it?
Well, I mean the name is in Korean probably. The whole thing was translated. They had this awesome method where they would literally go into the .EXE and hack the strings into Korean. I didn't have to do anything. You may find a lot there; we got some royalties from them and our feeling (and unfortunately you know the stereotype still persists today, but I work closely with a major Korean TEM today and nothing could be further from the truth) was that there basically were no copyrights there, so if we were getting anything at all Game-Maker was probably selling 10x as much.
So you sold the game directly and ran a BBS. Both of those were outsourced, to KD Software and GameLynk respectively. How did you work out those arrangements? KD Software was local, right?
Yes, Sheldon [from KD Software] was about an hour away. Not sure how we hooked up with him. My father made the initial contact. As far as I remember, Mark [from GameLynk] was one of the first people to contact us with a professional-looking game, and in his letter he sort of said "Check out this game, and check out my BBS." After that, my father's negotiating skills made it inevitable.
In retrospect I should have either hosted it myself or had a friend host. (I had a few with BBSes.) That way I could have been involved in the community. I did a lot of BBSing at that time, and in fact wrote a quick "never-ending-story" application for a BBS, but the standard in-house rule was local numbers only.
I probably could have called Mark's BBS more often, but as you might have noticed I was generally so flat-out busy coding features that I did not even consider asking for long distance "permission" to that one BBS!
How did you settle on the price point (about US$89)? I notice that the software got cheaper over the years.
Oh, we priced it above most video games because it was not a game that you play then throw away, but not significantly higher because we needed to hit a price range. We reduced the price as the commercial video games got better and better (and 3D).
You mention that Ollie was into 3D coding. I remember that late in Game-Maker's life your brother was excited about a 3D add-on. Did that plan ever go anywhere?
Nope! But yes, remember everyone was wowed by Wolfenstein and later Doom. Platformers were dead, and would remain so for ten years. The question on every buyer's lips was, "Does it do 3D?"
One thing to remember was that over just those few short years the capability of the hardware dramatically improved, both in RAM and in speed. Solid 3D was not feasible when Game-Maker first came out, but completely workable later. (Remember Wolfenstein did not have solid floors or ceilings; Doom did, so things really were moving quickly.)
I mean, there was tremendous pressure for more and more features, due to the possibility that a professional firm might pick it up and you'd actually make some real money -- because every kid has their favorite game with certain features that they want to copy, and because every game has that "special" custom 5%.
As you noticed I didn't talk directly to my users that much... not only was I quite busy, but also too many conversations just devolved into a laundry list of all the features it would be great to have. And you know fifteen-year-olds are not that subtle -- quite a few were not nice about it just very demanding. You know, they get the key dev for Game-Maker on the phone and they are both scared and desperate to communicate their needs...
But at this point I've learned in my life that for every product (yes especially Apple's) you can point to another product and say that one does X and yours does not! Or does Y better! But somehow those other products don't do it all better, or yours would not be around... but when I was nineteen it was pretty depressing to hear all of GM's shortcomings from its users.
Which leads to another question. I know that the last official release was 3.0, but did you make any further progress with the code? What features, if any, were you thinking of changing or implementing?
Yes there is a "Game-Maker Pro" sitting on my drive. I forget what is in it now, but honestly I know I did not get far with it.
Tons of great stuff was planned. For example, many [users] mention the song format issue. Yes, that was an eleventh hour addition because it was easy to add. The plan was to create a song format with an editor like the Integrator where each node was a repeating clip and the lines indicated transitions that could be hooked to game events. This idea sort of deconstructs the linear format of a song, allowing endless variations, and meant that the single song could (for example) seamlessly switch to become more "creepy" or something when your character's health was low.
There was a tension between making the engine more sophisticated and catering to the twelve to sixteen-year-old current market. Hence the name, "Pro". We had also been contacted by some (small) game dev houses who would say something like, "This and that are cool, but you have to fix X, Y, Z before we can really use it." That was driving more sophisticated ideas. I think one house may have used it for quick prototyping.
So GM Pro, in some fantasy land, may have been sold to kids with game license restrictions and real dev houses for a lot more without them. I think that that time period was sort of the end of the DIY gamers for awhile – everyone was enamored of 3D games and other complex gaming, which seemed quite out of reach (aka boring) to DIYers, due to lack of standardized libraries. For example, Game-Maker itself had to individually program a dozen or more sound and graphics cards. There were no standard drivers back then, so we had to basically write our own drivers for everything! That was quite a boring chore, after the first couple.
But I was growing more sophisticated as a coder (the Integrator, with its "graph" diagram, was the last tool written) so that graph was where it was all going. In music, as I previously discussed, and in character and monster animation.
With respect to characters and monsters, Prince of Persia really opened my eyes as to what smoothness of animation should be possible. So I set myself to figuring out how it could be done.
My idea was that the edges of the graph would be animations. So if you are in a particular "node", only some animations are available. If the user hits the "up" key (vector direction 0,-10, let's say), the system would look at each possible animation and pick the one that gets closest to 0,-10). Or, you could assign a particular key ("J") to a particular edge (to jump for example).
Monsters are exactly the same as characters, but no keys assignable. The system knows that the monster wants to move to position (X, Y), so would pick the animation that gets closest, and maybe "cheat" a pixel or two, or stop the animation early (abortable flag), to hit it exactly.
What sort of song format are you talking about? Was this a tracker format, with embedded sound samples?
Yes, with respect to format I probably would have let you stitch together .MOD clips (since I had the format document). Supporting the Sound Blaster music format was a last minute thing; it was clear that the music editor would not be ready and we had this free code supplied by Creative – so we used it! My brother did that work, and he is entirely responsible for the monster editor. I did the rest.
Oh. So you had been working on the sound editor for quite a while, then?
No, I got waylaid by video driver and XFERPLAY [game engine] problems. The music was going to be completely dropped, but then my brother pulled this free code up and made it work!
That explains the odd formats it supported. Aside from the Sound Blaster code, you say that your brother Ollie coded Monster Maker. How deeply was he involved with Game-Maker? Did he design any games?
Those contributions are what I remember; we only pulled him in for a summer or two...
So, just trying to digest what you're saying. You're saying that for GM Pro, you were working on a new character tool and a new monster tool, that were based on the same node-and-path format as Integrator. And that for any given animation state, you could set a tree of potential transitions into other animation states. Is that right?
Yes, except for the "working" part -- I don't remember well, but I doubt you'd find much in there except for extremely rough skeleton code. I'm more saying that this was the top of the wish list.
So, both direct activation of an animation by button press and also desired geometry. So the up button could be assigned to merely change the desired character's position to a few pixels upwards. And the system might automatically translate this to climbing up a ladder, jumping, or doing a ledge pull-up (if you were hanging from a ledge – not sure if you ever played the original Prince of Persia, but you could hang from a ledge – it was an "extreme running" game before extreme running/parkour was invented).
So what got in the way? I know you were heading off to college. I think your dad said you were looking into ATM coding.
ATM as in Asynchronous Transfer Mode – it's a telecom protocol that carries both voice and data traffic.
Had you already been doing data transfer coding at that time?
Nope! I went in there cold. That was supposedly a high performance embedded job, but believe me I have never had to do as highly performance sensitive code as I did with Game-Maker. I mean, I was chasing the electron beam down the screen changing the pixels just behind it to provide zero-flicker animation.
What part of Game-Maker would you say was the hardest to realize, either technically or conceptually?
The XFERPLAY [game] engine. First off, it really was pushing the limits of available RAM at the time. Within XFERPLAY, [the hardest to realize was] the character monster interaction (especially solid monsters used as platforms), and the fast moving character's interaction with solid walls. The character used to get "stuck" in the walls. I finally just limited the top speed, an unfortunate compromise that I later noticed all other platformers doing. But man it was pretty fun to have the Nebula [character] drop like a rock!
Also the "replay" was tricky, because I would remember what keys the user typed and play them back, but the granularity (based on the system clock) was a little slow – which meant that the replayed keys might come in at slightly different times, which every once in a while would cause the replay to miss a jump (or something) that was successful in the real play. I eventually hit upon the idea that even though the key was pressed at a particular moment, I should not actually "accept" it until a very well-defined moment within the run loop of the program, so the replay could accept it at that exact same moment. This is actually a pretty fundamental software practice, crossing multiple disciplines.
Finally, the four-way scrolling. That was really pushing the limits of the hardware. Basically, the hardware was too primitive at the time to support buffered pages. A lot of games would put a lot of junk (status graphics, etc.) around the edges to significantly limit what really needed to be redrawn. I did not want to do that (ultimately a mistake because users thought that all that junk looked more professional – after all it looked more like professionally released games – even though it was a lot simpler), so I literally moved the video card's start address in RAM around, leaving the background for the most part untouched. This was tricky because the actual video memory was 65536 bytes (after which it would wrap back around to 0 on most, but not all, cards) but the screen showed 64000 bytes. Also, each card handled wrapping (or not) differently, using their own special-purpose registers, including one which would simply freeze until the power was reset.
So this turned into a real slog, and is the source of the monster/character flickering issues.
But the technology was moving so fast that by the time version 3.0 came out, full-screen double-buffered redraws were possible at a reasonable (but still slower) frame rate, so I finally did throw in a double-buffered implementation (to reduce the number of product returns). And as time went on, that implementation ended up being what everyone used.
So you're saying the collision issues were a factor of available RAM, and that's partially a result of your decision to write to the full screen during four-way scrolling?
No, collision and scrolling were two separate issues. And the full-screen four-way scrolling issue was not the available RAM; it was that the CPU did not have enough speed to copy the entire screen contents every frame. Well, okay. Extra RAM on the video card could be used to solve this issue also...
Would a DOS extender, like DOS4GW, have helped things?
Yes, absolutely.
Why were you so intent on drawing to the full screen? A matter of principle?
I suppose. I just felt that the full screen greatly increased the game quality. I guess I just hated staring at the action through a fifteen-inch monitor already when playing video games. I mean, try it in real life. Get a big piece of cardboard, cut a fifteen-inch square in it, and then walk around your house with it held at arm's length for a day. In fact, I have always been right on the bleeding edge of multi-monitor tech.
I'll also tell you why I chose not to continue with it after college, as that question seems to be a big theme in some of your questions.
Yes, that is one of the big questions. How did the situation wind down, and why?
I guess there were multiple competing forces that simultaneously acted to encourage my decision.
First of all, Windows 95 was extremely successful. So all DOS based tools were clearly dead and so the Game-Maker tools would need a complete GUI rewrite. However, simultaneously early Windows 95 had horrible graphics performance. The "DirectX" stuff was not out yet... so its not like the OS was providing a high-performance graphics framework all ready to go. There would still be a bunch of ripping and hacking and tricking out the OS -- nasty coding.
Secondly, the 3D game Doom came out in 1993 (but took time to gain steam) and so platform-type games basically died out starting in 1995 for over a decade. Everybody wanted Game-Maker to make Doom. Doom was a technology tour-de-force; really well-optimized code, etc. I mean in 1995 a Doom quality engine would have been worth a fortune to professional game development houses -- so while the end user wanted 3D (and so would not purchase a platformer game maker) they were not going to get it. And of course adding 3D to Game-Maker would require adding a whole suite of tools.
Third, I think the DIYers were trending away from the PC, and we felt that because fewer adults used Game-Maker as time went on. The PC was transitioning from a hacker platform to an appliance. When I started college in '91 I was almost the only person in my dorm with a computer, by '95 it was practically required for incoming freshmen. I think if you could find the data, you'd also see the the average number of developers building a commercial game increased dramatically during this time. So in 1991 you could look at a game and say "I could do that". But by 1995 there was no way.
Finally, the telecom boom was on & I had an offer with a salary (that recognized my Game-Maker experience) from a startup in that field. And you know, telecom pays the biggest salaries, game development (at least back then) paid the lowest. This was important as since I was just leaving college I did not want to lean on my parents anymore. And Game-Maker did not make much money; a couple thousand bucks. But as everyone does when you have a company, we threw all reasonable expenses into RSD. You know, computers we would probably have bought anyway (and back then a computer was -- I'm guessing here -- about $8,000 in today's dollars; it was $4,000 back then). So with all that stuff, Game-Maker did not make much money; a couple thousand bucks I think.
Of course, I did not recognize that the advent of the web would allow me to have essentially free advertising and encourage far-flung communities. If I had realized that the entire ad budget could be cut out, it would have made probably a salary's worth of difference in our bottom line.
So ignoring the pending Internet explosion, to continue with Game-Maker would have required some massive changes.
Absolutely. Even with the internet explosion massive changes were required. But at least with the internet community we could have saved a huge amount of advertising dollars.
And the work had to be done without using the toolkits (like DirectX) that we knew were being created. So all the work that was done would sort of end up being transitional; thrown away when the toolkits finally matured. Basically the OS itself was in transition so it would have been like building a house on unstable ground.
It sounds like Game-Maker had already changed a lot. It started as a specific top-down maze game, and then you tweaked it to allow adventure platformers, like your game Nebula.
In fact, making something like Metroid was sort of the bar I set myself for version 1.0. Which is why I added the secret passage features, and gravity, early on.
In retrospect the Metroid influence is pretty clear, actually, but Nebula takes on very much its own identity.
Yes I've never been interested in making direct copies, and really can't understand all the copying that goes on by people on the web. I mean isn't the point to do something new, if you wanted to copy it why not just use the original?
How much did you find yourself adapting the tools for other genres? Did any other specific games influence the direction you took?
NetHack has been a constant influence, but not a particular influence for Game-Maker, in the sense that Game-Maker and NetHack-like had not converged. But I think you can see that GM could form the basis for a good graphical NetHack (which I think has always been a bit of a "holy grail" in the OSS gaming community). Of course you'd have to add a module with RPG elements; inventory system, object database, etc. But these are added modules, not rewrites of the existing Game-Maker.
So you'd like to open up the boundaries a bit? Game-Maker has some of that, but it's more geared toward games like Zelda. By contrast, NetHack almost feels like chaos theory in action.
Yes, a good game lets the player himself be (or at least feel) creative! That is what fundamentally bugs me about many games. The fact that there was only one possible solution, where IRL there are many. Don't have a key for the goddamn door? Chop it down with an ax! Burn it! Remove the hinges. Forget about it and do something else! This is where NetHack remains an amazing game. But actually under the covers it is not so impressive. Its just a gigantic list of "if" statements – the authors spent hours thinking of everything, instead of devising independent systems that could interact in ways not anticipated by the designers.
I've seen users bend Game-Maker in all kinds of strange shapes that weren't mentioned on the box. It always surprises me how flexible the software is, considering its simplicity.
Yes I think the mark of a well designed piece of software is that the interacting features create emergent behavior (additional features) that were not anticipated by the writer of the software. I think that lot of modern programs deliberately try to avoid this because it means that the user goes down untested paths. But if the features are developed well, they will work.
You refer to an added RPG module. Did you ever have plans for, say, various genre-friendly add-ons or expansions? A scrolling shooter module? One for brawlers?
Absolutely that was the plan, and the Integrator can connect them all up. First on the list would be a scene-by-scene module – that is, King's Quest style where all the action sits on one screen and made of an image, not blocks. Just like for the blocks the user would designate solid areas, gravity areas, etc., but in this case it would be done by drawing lines and filled polygons of effect. And an in-game action could overlay a new "effect" map onto the scene (to open doors, activate a trap door, etc.).
Next was the same thing, but a long, thin image for vertical or horizontal scrolling shooters (or fight-type game -- Galaga or Double Dragon), and additional "monster" stuff, to help them appear at the correct time, etc. But Double Dragon-style fighting AI would essentially always be out of GM's reach, as that would require custom coding.
I was going to make a menu maker where you could apply full-screen animations triggered on keystrokes to traverse the same kind of Integrator graph. To replace the front "Play game" menu, and for all kinds of other in-game choices, like Myst and Dragon's Lair. Also, storefronts where you spend stuff to buy power ups, inventory screens, all that kind of stuff. And to lay the groundwork for strategy games. Like the "Risk" style (Civilization for example), where you spend half your time optimizing your cities by picking stuff from menus.
One thing that we did discover with Game-Maker is that it was quite good at implementing 99% of platformer games, but it's often that missing 1% that really makes the game good. I mean, that 1% of custom programming is often a pivotal plot point. For example, a bomb defusing game needs a countdown timer. A platformer needs special "boss" characters. So we were envisioning in GM Pro to let people write add-on game-specific sections. Nothing was actually done, but you know its actually really easy to do; I was already dynamically loading custom software depending on what video card was detected. So all I had to do was provide a "hook" in my code that would essentially NOT do the default behavior and instead call a custom "monster" (or whatever) plug-in.
So this did not raise the bar on the minimum sophistication of our customer, but it certainly massively raised the bar on the maximum sophistication... which is exactly what GM Pro was all about.
That sounds perfect. I'm surprised things were on the verge of becoming so flexible. How far along did these plans come?
Not far, conceptual mostly. I am mostly talking about work that I would have done after college if we had chosen to continue Game-Maker.
When you say that users could write their own custom plugins, do you mean coding them from scratch? Or did you have a sort of internal scripting in mind? Or some other scheme?
Written in C, using all the Game-Maker libraries. For example, you would not have to physically animate your monster motion, just call a function to tell use where you wanted it to go. Today I would use a scripting language like Python but back then there was just not enough CPU or memory.
Was this in response to the requests you heard from professional firms?
Both professional requests and for that last 5% of game customization. Look, its the ultimate get-out-of-jail-free card. "Stop whining that the feature doesn't exist and learn enough programming to make it yourself!"
Have you thought about what to do with the source code? Do you have any plans to add to it or port it to other platforms? Otherwise, have you considered releasing the code?
Yeah, you know I should have OSSed a long time ago as I am a proponent of open source. At first there was the possibility that I might jump back into it. And later the fear that whatever startup company I worked for at the time would try to claim it. But upon mature reflection I think that is impossible.
And you know, with some interest I may also jump in again! Certainly I have lots of ideas some of which still have not been implemented AFAIK.
It is fascinating to me that after delving for 15 years into 3D twitch games (never my favorite) the culture has circled back around to casual gaming and ironically simultaneously suffered a dramatic decrease in computing hardware (on the mobile platforms), actually possibly making Game-Maker relevant again with very few changes.
I realize what a broad question this is, but what of lasting significance do you feel you learned from the whole Game-Maker experience -- the coding, the planning, the business?
First of all, it gave me a great skill, speed, and correctness at software development that has been extremely valuable through the years. I can't emphasize the last, correctness, enough. When I joined a company, I got a project to do. After some time, that project was done and I went on to other stuff. Rinse and repeat. Sure there were some bugs, but I fixed them and kept moving to new projects. I did not fear the empty page, or the huge project. Simultaneously I noticed other people still working on their original project, essentially "stuck" there. They drowned in their own bugs... and I'm sure it reflected in their review, salary etc.
Game-Maker got me a job in a startup in '95 when all other grads had to take jobs in big companies. And certainly I can't complain about working for startups during the telecom boom! Companies that I have worked for (and these were all less than 50 people) have been acquired for a cumulative amount totaling approximately a half billion dollars.
On the other hand, this skill made me quite frustrated in college; I had to listen to the criticism of grad students and even professors who literally had less actual coding experience than I did (but for the professors of course that was never their thing anyway; they were computer science researchers not coders). Since I was frustrated, I hopped into the industry thinking that it would be pretty easy to get a few years experience and then do my own startup, etc. But in fact that is not so; venture capitalists are actually extremely conservative and certainly can't look at someone and determine their coding skill or quality of idea (in fact your billion dollar idea just seems strange and foreign to a VC). So in retrospect (and this would be my advice to any young hot-shit coder graduating out there now), I probably should have entered a Ph.D. program and then gotten the backing of a professor to do a startup. It makes a good combination of energy and respectability that VC's would really like.
With respect to the planning and the business side, all I can do is give an example. A few years ago I decided to learn hardware engineering, for the fun of it. I stumbled on the Arduino platform (an open source microcontroller) and now I have a "hobby" business that sells LED driver circuit boards. I've sold 100+ boards to people all over the world. Most people who learn the Arduino build up a breadboard, move a few motors, and stop once they get something basically working. I think my Game-Maker experience allowed me (and made me want) to take that next step.
EJR Tairne is a freelance writer and editor, sometime game theorist, and general grump. He has written lots of stuff for the Gamasutra family of publications. Most if it is pretty grumpy. You can read more grumpy things on his grumpy blog, that he updates whenever he feels like it.


text:
Prototypes in The Machinery
Most game engines have some way of creating reusable entities — i.e., template entities that can be placed multiple times in different levels. Sometimes, these templates are called prefabs.
An important part of any template or prefab system is that if you make changes to a prefab, those changes are automatically reflected to all placed instances of that prefab. Prefab systems let you start building levels with placeholder entities and then later update the template with the real graphics.
Advanced prefab systems can support mixing and matching templates in various ways. For example, maybe you can create an "advanced enemy" template which is identical to the "basic enemy" template, except it is tinted red and has 50 % more hitpoints. Changes made to the basic enemy would automatically carry over to the advanced enemy and its instances. For example, if you changed the hit points of the basic enemy to 100, all the instances of the advanced enemy would get 150 hitpoints.
Or, you might be able to create a house template with windows and doors and then, in one placed house instance, swap the default wooden door for a brass one. If you later changed the windows of the template, this instance would get the new windows but keep its brass door.
In The Machinery, we call our templates prototypes and in this blog post, I'll describe how our prototype system works and try to explain why we made the choices we did.
The trouble with templates
Designing a template system can be difficult because it requires you to manage your data at a higher level of abstraction. The user needs a way to edit, not just the data itself, but also the rules for how that data relates to other data.
There are no fixed rules for how this should work. A template system can be anything you can dream up. The Slide Master concept in Powerpoint/Keynote and the reusable page layouts and text styles in InDesign are simple template systems, while the class or prototype hierarchy in object-oriented languages can be seen as an advanced template system.
When you design a template system for a game engine, you have a bit of a dilemma.
On the one hand, you want the template system to be as powerful as possible. "Powerful", in this context, means that the users can express complicated data relationships and use that to automate as much of the workflow as possible.
On the other hand, you want a simple and easy-to-use UI.
There is an inherent conflict between these two goals. The more powerful the abstractions are, the harder it is to create a UI for them (other than a basic text editor).
Let's see how this plays out in a few examples, and then we'll look at the path we took in The Machinery.
1. Source code
The most powerful way of expressing data relationships is with code I.e. the "configuration file" is just a program, written in some general-purpose programming language, that you "run" in order to generate the data for the project.
Since the "configuration file" in this case is a program, written in a Turing-complete programming language, it can automate anything that is possible to automate.
Creating the "advanced enemy" template could look something like this (in pseudocode):
advanced_enemy = basic_enemy
advanced_enemy.hitpoints *= 1.5
advanced_enemy.meshes.torso.tint = rgb(255,0,0)
But the automation could go much further than this. We could write a function that placed lamp posts along a road. We could procedurally generate stairs based on the step width, step height, etc. Since it's general purpose code, anything is possible.
As you can see, this approach is super powerful. The drawback is that since the data is code, only programmers will be able to edit it. And even for programmers, writing code is not the most natural way to edit visual things, such as meshes and levels.
For some applications, this can still make sense. For example, the Premake build system (which we use to build The Machinery) uses regular Lua programs as its configuration files. In this case, the lack of a UI is not a big deal, since only programmers are interested in build systems (in fact, even programmers are not that fond of them).
A way of making the data-is-code approach accessible to more users would be to use a visual scripting language, instead of a textual one, but this comes with its own set of compromises. To programmers, visual scripting tends to be more tedious than just writing code. To non-programmers, visual scripting is more complicated and less visual than a regular GUI. While it makes sense for advanced tasks, such as gameplay scripting or rendering, it's typically not something they would want to use for the majority of their data, such as building levels.
Another drawback of this approach is that if your data is a program written in a general-purpose, Turing-complete language, you can run into things like the halting problem. I.e., you can't reason about the data in any way without first running the code that generates it. This can be problematic if it takes long for the program to run. Or, if the program has a bug and never completes — now you have no data at all, just an empty scene, until the error is fixed.
But again, there are ways of making this approach work. For example, you could argue that Houdini is essentially a visual scripting language that you "run" in order to generate your scenes, just more high-level than your typical visual scripting language. Note that the immediate visual feedback that Houdini gives when you edit the graph is key to making it usable.
2. Markup language
The next step in expressive power below code is a "markup language", such as CSS or HTML. Markup languages are parsed, not run, and can express complicated relationships, without being Turing-complete.
A markup language implementation of the example above might look something like this:
advanced_enemy : basic_enemy {
.hitpoints = calc(base.hitpoints * 1.5)
.meshes.torso.tint = (255, 0, 0)
I'm making up both the syntax and the object model here.
Markup languages come in many shapes with varying degrees of expressive power. For example, in the
code above, I'm assuming that (similar to CSS) the language can calculate expressions such as
base.hitpoints * 1.5. In a more basic language, this might not be possible, and we would instead
have to set the hitpoints as a hard number:
advanced_enemy : basic_enemy {
.hitpoints = 45,
.meshes.torso.tint = (255, 0, 0),
In this case, the hitpoints wouldn't automatically scale if we change the hitpoints of the
basic_enemy — they would remain at 45 until we explicitly changed them to something else.
Markup languages have the advantage of being more limited and contained than full programming languages. This makes it easier to create some kind of UI/editor for them and since we don't "run" the data, we don't have to worry about "bugs" or infinite loops.
But beware, markup languages are often subject to feature creep — as time goes on, the developers add more and more useful "features" to the language until it approaches the complexity of a general-purpose programming language — just a shitty and haphazardly designed one. I'm looking at you CMAKE!
This is the code/data cycle that I've tweeted about before.
What kind of UI can we create for our markup language? Again it depends on the expressiveness. The more expressive the language is, the harder it is to create a sensible UI. Here's an attempt:
Yay, we've made a UI… but actually, it is really just a glorified text editor. To use this UI, the
user still has to know that he needs to enter the magic incantation
base.hitpoints * 1.5 in the
textbox. Not very user friendly and doesn't seem like a nice way to work, even if autocomplete,
syntax highlighting, and drag-and-drop could lessen the burden somewhat.
If you want a markup language to work with a UI, I think you have to carefully design it with that in mind. Otherwise, the text editor will end up being the default (as happened with both HTML and CSS).
An example of the markup language approach is the Universal Scene Descriptor format (USD). USD allows resources to be reused and remixed in lots of powerful ways. But it is hard to imagine what a UI editor for it would look like — it's predominantly a format geared for text-editors. Nothing inherently wrong with that — but it's not what we wanted for The Machinery.
3. "User-friendly" UI
Finally, let us imagine what a user-friendly UI might look like:
There are no magic text incantations. The hitpoints are set with a regular slider. The tint color is set with a regular color picker (sorry for my limited ability to draw one).
We have the nice UI that we want, but no way of expressing something like "50 % more hitpoints". Also, the relationship between the advanced enemy and the basic enemy is unclear. We can't easily see how the one affects the other.
This approach doesn't look like it gives us enough expressive power.
In my opinion, making templates work in a graphical UI, and not just a text editor, depends on finding a good "cut": A more limited set of features — less than what code or a markup language could do, but still powerful enough to handle most of the users' needs — that we can put together a sensible UI for.
Prototypes in The Machinery
We had three main goals with the prototype system in The Machinery:
The Prototype System should be a general feature of our Data Model. I.e., it should work for all the data managed in the application, not just entities.
When working with Prototypes and Instances, you should generally be using the same UI as when working with regular objects. I.e., you should not have to drop into a text editor, a visual scripting language, or any other complicated thing.
It should be as feature-rich as possible without compromising on the other goals.
Since our template system works on any object, we don't use the word Prefab, instead, we call our templates Prototypes and the places where they are used Instances.
The Machinery Data Model
Our Data Model is based on Objects with Properties. Objects have property Keys that can be assigned Values. Each object has a Type and the type of the object determines which properties it has:
In addition to basic scalar property types (numbers, strings, booleans, binary blobs) we also support Subobjects, References, and Sets.
A Subobject is an object that is an object that is owned by another object. For example, the Transform Component object type has a Position subobject of type Vector3. The Position subobject has three float properties (X, Y, Z).
A Reference is a link to an object that is not owned by us. As an example, the Animation State Machine stores references to Animation Clips to play. These are references, not subobjects, because we might want to use the same animation clip in different places. An object can only have one owner, but there can be multiple references to the object.
In The Machinery, objects are referenced by their unique IDs, so a reference always points to a specific object. (Another option is to reference objects by name — this allows a reference to point to different objects depending on what "namespace" we are currently in. This looser binding has both advantages and disadvantages — more about that later.)
Sets allow us to build hierarchies of objects. For example, an Entity in The Machinery has a set of Child Entities, as well as a set of Components.
Note that we've made the conscious decision to only support unordered collection types (sets). The reason is that operations on sets (Add/Remove) are easy to merge whereas array operations (Reorder) are more complicated. If you want a user sorted set, you have to add an explicit Sort Order property.
At the top of the object hierarchy sits the Asset Root. This object represents the "file system" of the project. The Asset Root has a set of Asset subobjects — the individual resources that make up the project.
Implementation of the Prototype System
Prototypes are implemented with a Prototype reference and an Override bitmask. Any object in our data model can specify another object as its Prototype. The object will inherit all the properties of the Prototype unless a property is specifically overridden. The overridden bitmask keeps track of which properties have been overridden.
Sets are treated a bit differently when it comes to overrides. Instead of overriding the entire set, the instance specifies a set of objects to add to and remove from the parent set. The set of the instance is the prototype set with those modifications applied.
When it comes to subobjects, the instance has a third option. Instead of Adding or Removing the subobject, the instance can choose to Instantiate the parent's subobject. What this means is that the instance creates its own subobject that uses the parent's subobject as its prototype. By doing this, the Instance can override, not only the properties of the Prototype, but also the properties of any of its subobjects, or its subobjects' subobjects.
Prototypes can be chained. A prototype may have its own prototype object, and that object may in turn have another prototype. Properties are inherited through the entire chain of prototypes.
Note that prototypes are not "special objects" in any way. Any object can act as a prototype to any other object of the same type. Because of this, we don't really make a distinction between "Entities" and "Prefabs" in The Machinery. Any entity can be used as a prefab.
Now that we know how prototypes are implemented, let's see how they work in the UI.
Property editor
Our main UI for editing objects is the Property Editor. The Property Editor shows the properties of an object and lets the user edit them:
The UI for the property editor is automatically generated, based on the properties of the Object Type. But note that it can still be completely customized, by providing callbacks for specific types or properties. For example, in the screenshot above, the color editor uses a custom UI.
This is what the UI for an object with a prototype looks like:
Properties that are inherited from the prototype are grayed out. If we edit those properties, they become white — indicating that they have been overridden in the instance. Right-clicking an overridden value brings up a context menu with two options:
Reset: Remove the overridden value and reset the property to the inherited value from the prototype.
Propagate to Prototype: Make the value we have set for this instance the default value of the prototype. I.e., all instances of the prototype will get this value (unless they have overridden the property).
Since the Property Editor UI is auto-generated, any object type in the application, even user-created types, automatically get the prototype workflow.
If you make a custom UI that draws its own control instead of using one of our standard controls, you have to do a little bit more work. You have to check if the inherited data is overridden or not and if it is, draw a grayed-out version of your control.
Note though, that even if you forget, or don't bother to do this, your control will still work, you just won't get any visual indication of whether the data is inherited or overridden.
Tree view
For hierarchical object structures, things become a little bit more complicated, because, in addition to overridden properties, we also have to handle Added, Removed, and Instantiated subobjects.
Hierarchical objects are typically edited in our Tree View, for example here is the Tree View for an entity:
Just as with the Property View, the Tree View is a generic editor that can display any object as a tree, so once we have a good prototype workflow, it will work for any object.
(Side note: for historical reasons, we actually have two separate tree views, the Entity Tree View and the Generic Tree View — we might merge them at some point.)
We use colors to indicate the "prototype relationship" of an object in the Tree View:
|A locally added object.
|A locally added prototype instance.
|A subobject inherited from the prototype.
|A subobject that has been instantiated for local modifications.
|A subobject that has been removed from this instance.
Again, a context menu can be used to perform operations on the inherited subobjects:
- Overriding (instantiating) a subobject to make local modifications.
- Removing an override (instantiation)
- Propagating changes from a subobject back to the prototype.
- Removing a subobject from this particular instance
One thing to note here is that the inherited subobjects (the grayed out ones) cannot be selected or expanded in the tree. To select one of those objects and edit its properties you have to first override/instantiate it.
The reason for this is somewhat complicated, but it is important to understand: Unless you have overridden an inherited subobject, it doesn't have any separate identity in our Data Model. The only thing that exists is the subobject of the prototype (which our instance has inherited). But we don't want to edit that object, because that would change the prototype. We just want to change the value of this instance.
Since the subobject of the instance doesn't exist until it has been Instantiated, there is nothing in the Data Model that we can select and edit. Thus, we must force the user to instantiate the subobject before editing it.
A consequence of this is that if you want to edit the property of some subobject deep in an instance's hierarchy, you must first "drill down" and instantiate all the subobjects above it in the hierarchy. This "drilling down" can be a bit tedious as shown in this gif:
Graph editor
Another one of our generic editor views is our Graph Editor. It is used both for visual scripting of entities and for setting up rendering jobs. We also have a, similar but distinct, State Graph Editor that is used by the Animation State Machine.
Prototypes in the graph editor work in a similar way as in the tree views. Nodes that are inherited from a prototype graph are shown grayed out and if you want to edit those nodes, you can right-click them to instantiate/override them.
When we resolve connections in the graph, we automatically take overrides into account, so if you have overridden a node in the graph, any connection to that node is redirected to your override node.
Conclusions and future directions
I think it's hard to fully grasp all the consequences of a complicated prototyping system like the one that we are using in The Machinery before you have actually implemented it and tried working with it. Now that we have logged some time with it, I think that it overall works really well.
We have a pretty powerful system — supporting arbitrary levels of fully hierarchical prototypes for any object type — that still has a pretty sensible and easy-to-use UI with no need to hand-edit text files.
You can do some pretty mind-bending things with this system, such as adding an entity as a child of itself. Note: to prevent infinite recursion in this case, we only spawn the child entities that are explicitly instantiated.
We don't support complicated dependency expressions, such as
hitpoints = prototype.hitpoints * 1.5, but I think it is worth sacrificing that to have a simpler UI. In our case, if you change the
hitpoints of the basic enemy and want the advanced enemy to still have 50 % more, you just have to
go in and edit that manually.
I think there is still some room for improvement though.
Getting rid of the need to "drill down"
I find it pretty annoying that you have to "drill down" when you want to override the property of a subobject deep in the hierarchy. This can be especially annoying when you don't know exactly where in the hierarchy the subobject that you want to get at resides. You have to speculatively override objects to try to find it and then remove those overrides if you don't need them.
I think there are two steps needed to fix this. First, inherited objects should be expandable in the tree. This should not have to be too much work, although it requires some refactoring of the tree code. This way, the user could easily drill down and find the object she was looking for. If she then overrides that object, we would override the whole "chain" of objects back to the prototype instance.
The second step would be to allow the user to actually select and edit the inherited objects in the tree without explicitly instancing them first. To do this we would have to put the Property Editor in some kind of special mode where as soon as the user edited any property on the object, we would "lazily" instantiate it. I'm not sure if this is worth doing, it sounds kind of complicated.
But who knows, sometimes when I see a problem like this where I don't have a good solution, I just sort of let it sit in the back of my mind for a while. Then, one day, a solution pops up. If I can't find an elegant solution right away, and it's not super important, I'd rather wait than try to force the issue.
Edit prototype in-place
Another workflow thing that I think would be nice to have is some kind of edit-in-place functionality for the prototype. It's a bit annoying right now that if you are working on a level that has, say, hundreds of lamp posts in it and you want to do some quick touch-up of the lamp post prototype, you have to context switch and open a new editor window with the prototype in it and then switch back to editing the level.
It would be kind of nice if you could just edit the lamppost prototype "in-place". I.e., you would something like that, and it would put the actual prototype unit there instead of the instance. You select one of the lamp post instances in the level, right-click it and select Edit as Prototype or could then edit it in the context of the scene and have the changes immediately reflected to all the other lamp posts.
However, I'm not 100 % sure this is worth doing. Modal workflows can be tricky for users and I don't see a super elegant way of implementing it. Maybe if we fix the "drill down" problem above, it's easy enough to just edit the instance and then Propagate the changes to the prototype instead of having a separate "edit-prototype-in-place" workflow. I'm going to let this one sit in the back of my head too and see what pops out.
The final issue that I keep coming back to in my thoughts is the reference-by-ID vs reference-by-name problem, which I've written about before.
The "looser coupling" that you get with a reference-by-name scheme can sometimes be useful. For example, you can refer to whatever the "head" object of the character currently is rather than to a specific "head" object. So even if you "swap heads", references will still work. Of course, the looser coupling has drawbacks too. You must make up names for everything, references can break more easily, and resolving reference paths can be expensive, so it's not a clear win for either camp.
Either way, we're pretty locked-in to using reference-by-ID as the default option in The Machinery now and it's not likely to change.
The main way reference-by-ID trips us up is in combination with the prototype system. Suppose we have a prototype entity where some subobject refers to the head (by its ID). Now, if we create an instance of that prototype and override the head to replace it, the reference will break, because the new, overridden head will have a different ID and the reference will still point to the old ID (the head from the prototype). To fix this, we would have to find all the objects that referenced the head, override them too, and then repoint the references to the new head. Painful.
This created big problems when we first implemented prototypes for the Graph Editor. Whenever the user would override a node, the new, overridden node would get a different ID, which means all the connections to that node would break. Connections identify nodes by ID and since the new node had a new ID, the connections would no longer point to it.
However, we found a good fix for this. We made it so that when we resolve connections for the graph, we take overridden/instantiated nodes into account. If a connection refers to a node that has been overridden in the current graph, we automatically "redirect" it so that it points to the overridden node instead. With this fix, connections no longer break when nodes are instantiated. The connection still refers to the prototype's node in the data model, but the way we interpret/resolve that reference in the instance has changed.
I'm now thinking that we could maybe use the same approach for all our references, and most of the problems we have with reference-by-ID would go away.
For example, if we want to replace the head from a prototype, we would override the "head" object in the instance and then modify it to give the character a new head. References in the instance would refer to the old head in the prototype, but when we resolved those references in the context of the instance, we would get the new head, since that new head overrides the old head for this instance.
This still requires a bit of thinking on my part to figure out exactly what it means to resolve a reference in a context and how to do it efficiently (the graph system enumerates all nodes and creates a lookup hash table, which isn't practical for the general case). But it seems very promising to me. If it works out, it could give us the best of both worlds — solid references that can handle replaced objects.
I hope this post gave you some interesting thoughts and ideas on how to implement prototypes in your own system. I think this is still an open issue with lots of room for new ideas.


text:
DAYTONA BEACH, Fla. — Daytona International Speedway just completed one project and is about to start another.
NASCAR's most famous track finished installation of revamped cross-over gates Wednesday, a day before drivers and teams took to the high-banked oval to begin preparations for Saturday night's 400-mile race.
The gates were reinforced following a frightening wreck in February that injured nearly 30 spectators. Daytona and Talladega added cables at the crossover gates, which allow fans to move between the grandstands and the infield before and after races. The tracks also installed supplemental tethers between the gate frame and support posts.
"I felt before that it was safe place," track president Joie Chitwood III said. "We've been around 55 years and, yes, things happen. But we've done a really good job of giving fans a safe and fun environment. You never stop doing that."
One of the eight gates at Daytona collapsed when rookie Kyle Larson crashed on the final lap of the Nationwide Series race a day before the Daytona 500.
Larson's car went airborne, slammed into the fence and spewed debris into the stands. Larson was unharmed, but dozens of fans were taken to hospitals for treatment, including one who was hit by a tire.
Daytona spent hours repairing the fence before the 500. After the race, the track hired a structural engineering firm to review the fence and propose improvements. NASCAR also was involved in the process.
The next Daytona project is considerably bigger and way more expensive.
The 2 1/2-mile speedway is overhauling the frontstretch to enhance the "fan experience."
International Speedway Corp., which owns Daytona and 12 other NASCAR tracks, estimates the redesign with cost between $375 million and $400 million.
The three-year project, scheduled to be completed by January 2016, begins Friday. And it won't have a traditional groundbreaking ceremony.
Chitwood came up with a creative and competitive campaign for the event, called "Daytona Rising."
He is pitting current and former NASCAR drivers and a crew chief in a driving skills test, a competition on Caterpillar front-end loaders that will give the winning team the honor of breaking ground on the redesign.
NASCAR drivers Jeff Burton and Ryan Newman are paired on one team. Fellow drivers Greg Biffle and 2011 Daytona 500 winner Trevor Bayne comprise another team. And three-time NASCAR champion Darrell Waltrip and former crew chief Larry McReynolds form the final team.
The teams have to maneuver an obstacle course while carrying items including tires and sand. The event will be treated like real NASCAR races, complete with driver introductions, the national anthem and a Victory Lane celebration that includes champagne and trophies.
"I have a lot of input when it comes to doing fun and crazy things," Chitwood said. "Maybe it's because I was a stunt man. We thought if we're going to do this groundbreaking, we need something more than just shovels and a picture. Let's Daytona-style this thing. ... I'm kind of proud of it. This fits NASCAR. This fits Daytona. Let's not just do a photo with gold-platted shovels. This just feels like NASCAR.
"We're only going to do this one time in my lifetime, so we want to make sure we get it right."
The redevelopment will give Daytona's aging grandstands a modern look and feel. It will include expanded entrances and a series of escalators and elevators to transport fans to three different concourse levels, each featuring spacious and strategically-placed social "neighborhoods" along the nearly mile-long frontstretch. Those 11 neighborhoods, each measuring the size of a football field, will allow fans to meet and socialize during events without ever missing any on-track action.
The project also includes the removal of backstretch grandstands while wider and more comfortable seating will be installed throughout the frontstretch. When the project is complete, Daytona will have reduced its capacity by 46,000 seats to 101,000.
Reducing capacity has become a trend in NASCAR.
International Speedway Corp. announced Wednesday that it will continue decreasing seating capacity at its racetracks to create more ticket demand.
ISC will target seating that doesn't include sightlines to pit road and the opportunity for fans to take advantage of prerace events and track amenities.
"There is simply too many seats in inventory at several facilities in our portfolio," ISC President John Saunders said during a conference call to announce ISC's second-quarter earnings. "The seats that we have today don't necessarily offer or project the best experience for our fans. ... An engaged customer, one who understands the sport and has a good at-track experience, is more likely to return."
DAYTONA BEACH, Fla. — Daytona International Speedway just completed one project and is about to start another.


text:
Baglee History, Family Crest & Coats of Arms
The history of the Baglee family goes back to the ancient Anglo-Saxon culture of Britain. It is derived from the family living in Cheshire, where they were held estates at Baggiley. The family name was originally derived from the name of this manorial seat. The word baggiley in ancient Saxon means high ground. These place names are generally thought to derive from an Old English personal name Bacga and the Old English word leah, meaning a clearing in the woods.
Early Origins of the Baglee family
The surname Baglee was first found in Shropshire at Bagley, a small rural village in the parish of Hordley. The earliest record of the place name was found in c.1090 when it was listed as Bageleia. [1]
Bagley-Wood is a hamlet in the hundred of Hormer, in Berkshire. "A monastery was founded here by Cissa, viceroy of Centwine, ninth king of Wessex; which was removed to Abingdon in 680, that town and its appendages having been assigned to it by Ceadwalla. " [2]
While the surname probably originated in Shropshire, we must look to Cheshire to find the earliest records. The family was Lords of the Manor of Baggiley and held a family seat there from ancient times. Baguley Hall near Manchester was built in the 14th century by Sir William de Baguley, or possibly by one of his sons. It may have replaced an 11th or 12th century structure. "[Baguley in Cheshire] was at an early period the property of the Baguleys, whose heiress brought it to the Leghs; the latter sold it." [2]
Early History of the Baglee family
This web page shows only a small excerpt of our Baglee research. Another 164 words (12 lines of text) covering the years 1260, 1327, 1382, 1379, 1220, 1674, 1654 and 1654 are included under the topic Early Baglee History in all our PDF Extended History products and printed products wherever possible.
Baglee Spelling Variations
Until quite recently, the English language has lacked a definite system of spelling rules. Consequently, Anglo-Saxon surnames are characterized by a multitude of spelling variations. Changes in Anglo-Saxon names were influenced by the evolution of the English language, as it incorporated elements of French, Latin, and other languages. Although Medieval scribes and church officials recorded names as they sounded, so it is common to find one person referred to by several different spellings of his surname, even the most literate people varied the spelling of their own names. Variations of the name Baglee include Bagley, Baggeley, Baggiley, Baggaley, Bageley, Baggelay, Bagly and many more.
Early Notables of the Baglee family (pre 1700)
Distinguished members of the family include Alexander Baguley, B.A., rector of the church of St. Michael, Aughton, Lancashire in 1674, but was "very soon deprived for simony [(buying or selling of something spiritual)]." [3]
Humphrey Baggerley (fl. 1654), was a Royalist...
Migration of the Baglee family to Ireland
Some of the Baglee family moved to Ireland, but this topic is not covered in this excerpt.
Searching for a better life, many English families migrated to British colonies. Unfortunately, the majority of them traveled under extremely harsh conditions: overcrowding on the ships caused the majority of the immigrants to arrive diseased, famished, and destitute from the long journey across the ocean. For those families that arrived safely, modest prosperity was attainable, and many went on to make invaluable contributions to the development of the cultures of the new colonies. Research into the origins of individual families in North America revealed records of the immigration of a number of people bearing the name Baglee or a variant listed above:
Baglee Settlers in United States in the 17th Century


text:
Gateway Bali Logo Design by Glypt Design Studio. Inspiration comes from the beautiful Bali's gate.
Welcome to Glypt Design Studio
Glypt is a Thailand based creative agency that serves clients worldwide with affordable high quality design. We offer a full range of services from state of the art digital design to classic hand drawn illustration. With a commitment to achieving creative excellence Glypt is enthusiastic about achieving its client's goals whether it is designing letterheads or a complete company re-brand. Providing state of the art design services such as 360 Virtual Tours that are a clear cut above the rest, Glypt continues to research and develop new and innovative services.


text:
March 14, 2022
Emily Chun
April 03, 2020
Claire Dennis
June 22, 2018
Elemental Green
October 27, 2017
Falon Mihalic, Houzz
July 07, 2017
Erich Lawson, Northern California Compactors, Inc.
March 17, 2017
Heather Benjamin
July 01, 2016
Nora Knox
April 18, 2016
Julia Pergolini
September 03, 2014
Lydia Corser
When shopping for furniture with the planet and your health in mind, weigh your priorities. Are you chemically sensitive? If so, among other concerns, you'll need to find furniture with fewer bonding... Read more
September 04, 2009
Tom Ash
Studies by public agencies across the country show home landscapes waste as much as 50 percent of the water used outside. In addition, residential application of pesticides per acre is typically 20... Read more