Saturday, March 28, 2020
Something A Little different....The First Of The Romans
I'm not doing this alone, thank God, but as part of a team of painters in order to accomplish this massive task.
I've always wanted to do an Early Imperial army, but have never actually got round to it, one of those situations common to just about every wargamer, we all have "those projects" I guess, so having the opportunity to paint one for someone else will hopefully get it out of my system.
Early Imperials have always been the "classic" Romans for me, Square Scutem, Lorica Segmentata, I suspect my like of them goes back to a bunch of Timpo figures I had when I was a youngster.
The Warlord figures have been around for while, go together fairly easily, choices of sword-arm or pilum, a few different head choices. The ones in the pictures are a mixture of the basic set and the set sold as "veterans" - these give you a few extra choices - different heads and helmets, and battered shields. All the veterans have the additional magnia sword- arm armour a few legionaires adopted for the Dacian wars. Fortunately these are indeed for the Dacian campaigns so they will fit right in.
There are a few extra metal command figures mixed in- manufacturer unknown.
Anyway, I'm enjoying doing these, which is probably just as well, seeing as there are a few to paint! It makes for a good diversion from the WWII projects which I'm also doing for myself.
So thats a few Romans, Next up, I'll be showing some rather lovely Dacian tribesmen to oppose them
Grubby Old Grenzers
Free Counter
Monday, March 23, 2020
1005, Stargunner!
I would like to thank everyone who donated to my Extra Life campaign as well as those of you who watched the live streams that I did. I raised $1500 for the Children's Hospital of Philadephia thanks to all of you. I got an email from Extra Life saying that I was in the top 30 earners for the hospital, which is great! I plan on doing it again next year, but I will be doing the two days in one weekend. I had fun playing the games, but I got a little frustrated towards the end of the second weekend. Sinistar is an extremely difficult game but I love it so much, for some reason.
Thank you all so much for watching, listening, and donating. I hope that all my American friends have a wonderful Thanksgiving.
Please donate to my Extra Life campaign!
Sean's Extra Life page
Andrew's Extra Life page
Rick's Extra Life page
Bryce's Extra Life page
Marc's Extra Life page
Stargunner on Random Terrain
Alex Leavens interview by Dan Gutman, Video Game Players magazine 11/83
Stargunner on Atari Protos
Video Game Update newsletter February 1983
Arcade Express newsletter January 3 1983
Arcade USA Atari Remote Control Joysticks
Friday, March 20, 2020
Reader Experience With 404S
There are many days when I don't feel like working on my project. I use this feeling to "productively procrastinate" on things that I've been wanting to do but haven't done yet. Earlier this week I decided to tackle two related problems:
- I want to know which pages are reachable from the home page. I can then review the ones that aren't reachable and consider adding them if they're finished.
- I want to make suggestions on the 404 page, but only to pages that are reachable from the home page. There are a whole bunch of random pages I have that aren't finished or useful, and I don't want to use those for suggestions.
To implement this, I parsed each page and found the links using a regular expression pattern and some quick-and-dirty code:
RE_anchor = re.compile(r'<a[^>]* href="([^"#]+)[^"]*"') def url_links_to(relativeurl, html_contents): "Return the set of relative links from this page" site = "https://www.redblobgames.com" urls = [] for url in RE_anchor.findall(html_contents): if url.find("mailto:") == 0: continue url = urllib.parse.urljoin(site + relativeurl, url) if not url.startswith(site): continue url = url.replace(site, "") if not (url.endswith(".html") or url.endswith("/")): continue if url.endswith("/index.html"): url = url.replace("/index.html", "/") if url == "/": url = "/index.html" if url in urls: continue urls.append(url) return urls
I then used depth first search to find all the pages reachable from the home page:
# link_map[url] = urls_links_to(url, contents of page) def all_reachable_pages(link_map): "Return a list of all pages reachable from the home page" frontier = ["/index.html"] reached = set(frontier) while frontier: url = frontier.pop() if url not in link_map: print("WARNING: possible 404", url) continue for child in link_map[url]: if child not in reached: frontier.append(child) reached.add(child) return reached
For part 1, I made a list of the reachable pages and I plan to review it periodically.
For part 2, I want help readers who encounter a 404 on my site. I looked through the 404 server logs to see what I might be able to help with. I found lots of bogus requests such as wpAdmin and other admin URLs (people trying to break into my server), and also lots of what seemed to be buggy crawlers. But I also found many URLs that seem to come from real humans. These seem to be either from copy/paste or forums automatically linkifying URLs:
- https://www.redblobgames.com/grids/hexagons/).
- https://www.redblobgames.com/pathfinding/a-star/introduction.html%C2%A0%E2%80%A6
- https://www.redblobgames.com/articles/visibility/)and
- https://www.redblobgames.com/grids/hexagons/,
- https://www.redblobgames.com/pathfinding/a-star/implementation.html%5D
- https://www.redblobgames.com/pathfinding/tower-defense/}(http://www.redblobgames.com/pathfinding/tower-defense/)
The last one looks like a Markdown typo. There are also some that look like escaping/quoting errors:
- https://www.redblobgames.com/grids/hexagons/%23map-storage
- https://www.redblobgames.com/pathfinding/a-star/implementation.html1003Introduction%20to%20the%20A*%20Algorithm
- https://www.redblobgames.com/grids/hexagons/"
All of these seem to have an unwanted suffix. I decided to implement a suggestion on the 404 page. I looked for a prefix of the non-matching URL that matched a valid URL. I picked the longest match:
const request = window.location.pathname; let bestUrl = ""; for (let url of urlsReachableFromHomePage) { if (url.length > bestUrl.length && request.slice(0, url.length) == url) { bestUrl = url; } }
You can try it out by clicking on the broken links above.
This was a relatively low priority project but so satisfying.
Thursday, March 19, 2020
Testing Esoteric Lists: Gunny & Madrak2
Last night I was able to get an astounding two games in and as I was heading to my FLGS I decided I didn't want to just run the popular pairing of Madrak1 and Borka2, mainly because I've played a ton of Madrak1 already and while Borka2 is fairly new for me I have had a few rounds with him already. I just wanted to try some lists that were of my own design that I thought were interesting and possibly strong.
So in I went with a "pairing" to put down into whoever I was playing against: Gunnbjorn and Madrak2.
I'll tackle each list and the match up in turn.
Gunny
Trollblood - Gunny Goes North
Theme: Storm of the North
2 / 2 Free Cards 75 / 75 Army
Captain Gunnbjorn - WB: +28
- Trollkin Runebearer - PC: 0
- Dozer & Smigg - PC: 18 (Battlegroup Points Used: 18)
- Dire Troll Bomber - PC: 19 (Battlegroup Points Used: 10)
- Dire Troll Mauler - PC: 15
Hearthgut Hooch Hauler - PC: 18
Bog Trog Mist Speaker - PC: 4
Valka Curseborn, Chieftain of the North - PC: 0
Krielstone Bearer & Stone Scribes - Leader & 5 Grunts: 9
- Stone Scribe Elder - PC: 3
Northkin Raiders - Leader & 9 Grunts: 15
Swamp Gobber Bellows Crew - Leader & 1 Grunt: 2
I was really excited about this list since it seems like it can clear a lot of infantry off the board or shoot a heavy off the table. I've been dying to find a way to make the module of Hauler + Raiders work, and I feel giving them Snipe via Gunny or Grim2 is the way to really make them shine.
I put this pair up vs. my friend Brian who was coming back to playing Khador after 8 months of playing Circle and a lot of other games. He had Butcher3 with Jacks Galore and a Zerkova 2 list with lots of Greylords and a smattering of Doom Reavers. I really wanted to try Gunny and on discussion of the matchup it was clear that Zerkova 2 would get shot down pretty hard on the approach before she could really do any damage, plus most of my army is going to be Cold Immune, meaning he had to drop Butcher. Madrak is probably the better Butcher3 drop, but I wanted to see how Gunny would match up.
Brian's list from memory was roughly:
Butcher 3
-Wardog
-Berserker
-Berserker
-Ruin
-Grolar
Forgeseer
-Behemoth
Forgeseer
Eliminators
Eliminators
Mechanics
Brian won the roll off and elected to go first. Scenario was Outlast.
After running his army into position up the field on turn 1, I replied by feating early to avoid the Behemoth clearing out swathes of my Raiders and running to be just out of Brian's threat ranges.
Thanks to Dozer's animus I was able to get lucky drifts/boosts onto one member of each unit of Eliminators and take their gang bonus off the table. Still I was being a bit too timid by staying out of his threat ranges and I had blocked up my Hooch Hauler behind my Raiders making the order of activation awkward on this and the following turns.
On Brian's second turn he simply positions to threaten the entire zone and moves Butcher on to the central flag on his side. He moves Ruin into some rough ground for cover and positions both Argus centrally to threaten as well.
Madrak2
Trollblood - Madrak2 Toughallo
Theme: Band of Heroes
3 / 3 Free Cards 74 / 75 Army
Madrak Ironhide, World Ender - WB: +28
- Trollkin Runebearer - PC: 0
- Dire Troll Mauler - PC: 15 (Battlegroup Points Used: 15)
- Dire Troll Bomber - PC: 19 (Battlegroup Points Used: 13)
Fell Caller Hero - PC: 0
Fell Caller Hero - PC: 0
Eilish Garrity, the Occultist - PC: 5
Krielstone Bearer & Stone Scribes - Leader & 5 Grunts: 9
- Stone Scribe Elder - PC: 3
Trollkin Long Riders - Leader & 4 Grunts: 20
Trollkin Long Riders - Leader & 4 Grunts: 20
Kriel Warriors - Leader & 9 Grunts: 11
I was/am really excited about this Madrak2 list. My initial thoughts with the caster is to pretend I'm a MK2 Cryx player and jam in 2x Fennblades + 2x Kriel Warriors + solos and run screaming at my opponent.
Then I got to thinking about how while other warlocks can deliver units like the Long Riders, a unit I absolutely adore, no one really makes them hit any harder and while they're very strong, they're not going to just blow up a heavy without any buffs. Plus the problem with a 40+ dude infantry swarm with Madrak2 is it lacks basically any relevant guns and it's not very hard for enemy shooting to continually clear off my infantry. Once the Fennblades have been hit, the Kriel Warriors will get out paced and likely shot up pretty hard. This would turn things into a game of "Who won to go first".
With the Long Riders I should still be able to chew through enemy models and also withstand enough shooting to do serious damage once the lines meet. Initially the list had two units of Kriel Warriors to back up the Long Riders, but I decided the list was susceptible to control and I threw Ellish in. With the extra points I upgraded my Earthborn to a Bomber to get some ranged presence which I really found to be helpful.
I played this list into Sean, someone who I've met but haven't played against. He dropped Skarre1 Dark Host into me:
Skarre1
-Scarlock
-Inflictor
-Stalker
-Stalker
Wraith Engine
Bane Riders
Bane Knights
Min Bane Warriors + CA
Darragh
Necrotech
Tartarus
Scenario was Standoff and Sean won the roll to go first.
This game ended up being a bit of a back and forth with some key positioning elements due to equivalent threat ranges on our Cav and my spacing models out properly to avoid a Stalker being able to kill multiple Long Riders without issue.
I won the game in the end, but part of that could have been due to the fact that Sean had deployed Darragh with the infantry units on the flank opposite the Bane Riders, so we shared a threat range rather than him having an advantage. He also apparently didn't know that Long Riders could slam models, and so I was able to eliminate all of his Bane Riders in exchange for sacrificing only one of my Long Riders. It should be noted that Blood Fury'd Bull Rush slams, when knocking the slam target into another model or terrain is very strong. Still Sean was very careful to only feed me feated on Bane Knights for my feat turn, and spaced appropriately with his other units in reserve to prevent me from getting too far ahead on attrition. I suspect if we played again this game would be much tougher and far more favored to the player who wins the roll to go first based on how each of our lists were designed.
I know I could play this list in Storm of the North to get extra speed on my units, but I think having Band of Heroes for the extra 2" and Takedown/RFP is absolutely crucial in the meta ATM. Right now Trolls are balanced in that we can either speed up our Long Riders or we can buff their damage, but we can't do both. I do think the unit has a lot of untapped potential, and since I own two units of them now, I want to experiment a lot with them.
Conclusions
After both games I am more optimistic about Madrak2's list than I am about Gunny. I am not sure how I feel about leading with my Cav up front, but I do know that making Long Riders weapon masters makes it so that they can easily kill any heavy on the charge with the usual amount that can get into one via positioning rather than not. They also are fairly well positioned to be able to handle infantry due to Bull Rush.
As for Gunny, I think he just needs more testing. It may well be that what I have is sufficient, but man does it ever feel like having just more units to be able to throw into zones is the way to go. Melee also just feels much stronger than guns at being able to do what is necessary: Jam up and piece trade, so as to allow Trolls the ability to play the Attrition game we're supposed to be very good at. Guns still have a lot of value, but it's more about being able to snipe out a key model in a zone or scalpel out an important support solo or CA/WA/etc.
Still, I really want to find a way to make the Hauler + Raider package work well, it just seems like it should be so good on paper. I believe Grim2 is the next place to look with them, but I'm having trouble rounding out a SotN list that I like that includes that module.
Model For The Good Store
This business is one of constant brainstorming for the successful. For most stores, which I will maintain are not very good (fight me), the answer to all questions is often doing the thing you're doing now, but better. More inventory, better trained staff, better events, an improvement process and an upgraded look. Most stores don't need a cafe to be relevant.
They should know by looking around where they could spend the time or money. You could expand and upgrade for quite some time, really, but most stores struggle on a daily basis and never get the chance. It's the curse of under capitalization in a low barrier to entry market. Often it's not even about money.
Visit enough stores and there are simple improvements that just take elbow grease. For many it's as simple as picking up the trash you can see when you look in the window, or re-arranging the product on the damn shelves. Basic retail. Problems I saw throughout Pennsylvania and New York this month. One or two of those stores ran a super tight operation on what you could tell was a low budget operation. One was scrappy and organized and had family and part time staff stocking shelves on a Sunday. That made me happy.
The idea we need to diversify into some new business model is compelling, mostly because successful business owners look for trouble. We want new problems to solve, not the same old problems. I preach how a Unique Value Proposition, over time, eventually becomes only a Useful Value Proposition and then No Value Proposition.
The next thing is a real struggle. But I'm also thinking now that running a really, really good retail model that focuses on serving the community can be Unique. I'm loathe to say this, really, because most of my peers think very highly of themselves. Most store owners think their stores are much better than they actually are. This is often because we don't know how to measure. We don't know how to look at our stores with clear eyes. Most store owners often don't get outside of their local bubble (why I like to visit stores). We also can't even decide what good is.
Get a dozen game store owners together (if you can decide what that means) and they'll argue, Clintonesque style, about the meaning of the word good. Good for one is the most profitable, while other owners will argue that stores aesthetic hold it back from that desired profitability. Some will claim they only meant to serve a small market when they made their polarizing choices. Good to you may just mean a steady paycheck.
The debate about Wizards of the Coast Premium stores elucidated much of this. Other people, not even store owners, are telling you what they believe is good, with rewards attached. Store owners hate this. Try to help one of these store owners with their problems and they will quickly produce reasons for why they do a thing badly. Alright, alright. Maybe you need a cafe after all. I should mention Premium rewards a type of existing store and there are plenty of good stores that don't meet that criteria. It doesn't make them less good. All Premium stores should be good (a debate in itself), but not all good stores are Premium.
This leads up to my visit with Millennium Games in Rochester New York this week. It's an example of doing the standard model, for a long time, really, really, well. It's notable to me because it's a large store that clearly engages in best practices and a constant improvement process, rather than some unique, large store model. Also, when I say standard model, I'm talking about a basket of game retail best practices, since baseline game stores, as I've postulated, kind of suck.
Millennium is unique as a large store because most large stores appear to have teleported from the past, their inventory, and unique practices, not particularly replicable intact. Other stores appear to have been built from whole cloth with buckets full of money. Millennium is a best practices store, only much, much bigger. As I can't time travel and I don't have buckets of money, this is compelling as a model.
As you walk in, it looks brand new, because they have a process and budget for constant improvement. The retail space is vast and the game space comfortable. There are about 100 photos on my Facebook author page (please subscribe). If I sound like I'm heaping on praise, it's because it's a model for the future, unlike other big stores which are great, but mostly as interesting anomalies. Millennium got there by doing the thing, year after year, only better each time. It's the same thing I do at a smaller scale, and you might be doing. That gives me hope both for myself and for retailers in this trade.
Suck Less |
Burned Out Of Warmaster Dwarves
I'd like to finish the basing on the Dwarves as well as their artillery before the end of the year but I'm burnt out on them for now. I headed back to the Void Spinners (third times the charm) and finish 2 of them. I hope to finish the third, touch-up the black highlights and de-gloss them this weekend.
This is what I managed to get done last week before Fall In! I finished the skin and hair on the dwarves, and got them on bases along with the ballast. The decals didn't end up working out, they printed poorly and I found myself touching them up far too much. I scrapped the idea and painted simple patterns on the shields to differentiate the Warriors. I'll got back and match the shield pattens on the banners as well.
The general still is a work-in-progress, I'm converting him up along with an unreleased musician. I did manage to get some good decal prints for him and the Anvil, they'll be the only two in the army.
Monday, March 16, 2020
Ep 30: Talking History Is Live!
This episode is being released on December 7th, 2017. On this date, 76 years ago, naval aviators of the Imperial Japanese Navy attacked United States forces stationed in Hawaii. This led to the US's involvement in the second world war. Please join me in a moment of silence in remembrance of those who died during the war, as well as those who survived the war and have since passed.
Sunday, March 15, 2020
Beat The Price Increase
(from prior post)