Tech Book Face Off: CoffeeScript Vs. Simplifying JavaScript

I really like this setup for a Tech Book Face Off because it's implicitly asking the question of what can be done to improve the quagmire that is the JavaScript language. Should we try to simplify things and pare down what we use in the language to make it more manageable, or should we ditch it and switch to a language with better syntax that transpiles into JavaScript? For the latter option, I picked one of the few books on the CoffeeScript language, aptly named CoffeeScript: Accelerated JavaScript Development by Trevor Burnham. Then, for sticking with JavaScript, I went with a recently published book by Joe Morgan titled Simplifying JavaScript: Writing Modern JavaScript with ES5, ES6, and Beyond. It should be interesting to see what can be done to make JavaScript more palatable.

CoffeeScript front coverVS.Simplifying JavaScript front cover

CoffeeScript


This book was written a few years ago now, in early 2015, but CoffeeScript is still alive and kicking, especially for Ruby on Rails developers as the default front-end language of choice. CoffeeScript is integrated into Rails' asset pipeline, so it gets automatically transpiled to JavaScript and minified as part of the production release process. If you're already comfortable with JavaScript, and even more so if you know Ruby, then CoffeeScript is a breeze to learn.

The ease with which this language can be picked up is exemplified by the book, since it's one of the shortest books I've ever read on a programming language. Over half of the book has more to do with examples, applications, and other stuff tangential to CoffeeScript, rather than the language proper. The book itself is just short of 100 pages while the content on syntax and usage of the language is condensed into the first half of the book.

As all books like this do, the first chapter starts out with how to install the language and configure the environment. It's pretty straightforward stuff. Then, we get into all of the syntax changes that CoffeeScript brings to JavaScript, which essentially defines the language since all of the features are the same as JavaScript's. Chapter 2 shows how function and variable declarations are different, and much shorter. Chapter 3 demonstrates some nice syntactical sugar for arrays in the form of ranges, and iteration can be done more flexibly with for comprehensions. Chapter 4 gets into the syntax features for defining classes and doing inheritance concisely.

Most of the syntax will look quite familiar to Rubyists, including class instance variables denoted with an '@' prefix, the string interpolation notation, unless conditionals, and array ranges. Here's an example from the book showing a number of the syntax features:

class Tribble
constructor: -> # class constructor definition
@isAlive = true # instance variable definition
Tribble.count += 1 # class variable access

breed: -> new Tribble if @isAlive
die: ->
return unless @isAlive
Tribble.count -= 1
@isAlive = false

@count: 0 # class variable (property)
@makeTrouble: -> console.log ('Trouble!' for i in [1..@count]).join(' ')
This code would be about twice as many lines in JavaScript, so the compression is pretty great and the code is much cleaner and easier to understand. Burnham proclaims these virtues of CoffeeScript early on in the book:
Shorter code is easier to read, easier to write, and, perhaps most critically, easier to change. Gigantic heaps of code tend to lumber along, as any significant modifications require a Herculean effort. But bite-sized pieces of code can be revamped in a few swift keystrokes, encouraging a more agile, iterative development style.
Maybe that's stated a bit more strongly than is warranted, but it's still hard to argue with the improved simplicity and cleanliness of CoffeeScript making developers' lives more pleasant.

The last three chapters of the book delve into different frameworks and packages in the JavaScript universe that can be used with CoffeeScript, and the vehicle for exploring these things is a (heavily) stripped  down version of the Trello app. Chapter 5 goes through how to create the front-end portion of the app with jQuery and Backbone.js. Chapter 6 adds a backend server for the app with Node and Express. Chapter 7 explores how to test the app with Intern. All of the code for the front-end, backend, and tests is written in CoffeeScript, and the transpiling is setup to be managed with Grunt. It's nice to see multiple different examples of how to use CoffeeScript anywhere that JavaScript would normally be used, just to get an idea of how to transition to CoffeeScript in multiple ways.

Throughout the book, Burnham presents everything in a straightforward, no-frills manner. Everything is clear and logical, and his concise descriptions are part of the reason the book is so short. He assumes you already know JavaScript—which is much appreciated—and he doesn't go into extended explanations of JavaScripts features. It's just the facts on how CoffeeScript is different and what the syntax is for the features it compresses. It's awfully hard for me not to recommend this book simply because it's so short and to the point. It only took a few hours to read through, and now I know a better way to code JavaScript. There's not much more I can ask of a programming language book.

Simplifying JavaScript


Every language has those more advanced books that assume you already know the language and instead of covering the basics and syntax, it provides advice on how to write idiomatically in the language. I've read these books for C++, Ruby, and JavaScript and found them to be surprisingly enjoyable to read. That was not the case with this book, but before I get too far into criticisms, I should summarize what this book does well.

Simplifying JavaScript is organized into ten chapters with each chapter broken into a set of tips that total 51 tips in all. These tips each explain one new feature of the JavaScript language from the new ES5, ES6, and ES2017 specifications. Some features, like the spread operator take multiple tips to fully cover. Then, the last chapter covers some features of the JavaScript development environment, like npm, that are not part of the language and have been around a bit longer than these newer specifications.

Most of the new features significantly improve and simplify the language, and they include things like:
  • new variable declaration keywords const and let
  • string template literals, which look much like Ruby's string interpolation
  • the spread operator ... for converting arrays to lists and converting lists of parameters to arrays
  • the Map object
  • the Set object
  • new loop iterators such as map(), filter(), and reduce()
  • default parameters
  • object destructuring
  • unnamed arrow functions
  • partially applied functions and currying
  • classes
  • promises and async/await
The arrow functions, spread operator, loop iterators, and destructuring go a long way in making modern JavaScript much more pleasant to program in. All of these features—and likely more in the newest language specs—make CoffeeScript nearly irrelevant, and likely not worth the effort of going through the step of compiling to JavaScript. The language has really matured in the last few years!

Morgan does a nice job introducing and justifying the new features at times:
We spend so much time thinking and teaching complex concepts, but something as simple as variable declaration will affect your life and the lives of other developers in a much more significant way.
This is so true. The code we're reading and writing every day has hundreds of variable declarations and usages, and being able to indicate intent in those declarations makes code much cleaner and more understandable. Getting better at the fundamentals of the language and having these new declarations available so that the most common code is clear and purposeful will more significantly improve code than all of the complicated, esoteric features that only get used once in a blue moon.

These exciting new features and simple explanations were the good parts, so why did I end up not liking this book much? Mostly, it was because of how long-winded the explanations were. Each tip dragged on for what felt like twice as long as it needed to, and the book could have easily been half as long. CoffeeScript showed how to present language features in a clear, concise way. This book took the opposite approach. Then, to make matters worse, it was written in the second person with the author always referring directly to the reader with you this and you that. Normally I don't mind a few references to you, the reader, every now and then, but this was constant so it became constantly aggravating.

Beyond the writing style, some of the justifications for various features didn't hold much water. For example, when trying to rationalize the new variable declarations, Morgan presented an example of code where the variables are declared at the top, and then there are a hundred lines of code before those variables are used again. Then he says, "Ignore the fact that a block of code shouldn't be 100 lines long; you have a large amount of code where lots of changes are occurring." I don't know about you, but I wouldn't declare a variable and then not use it for a hundred lines. I would declare it right before use. He shouldn't have to contrive a bad example like that to justify the new const and let declarations. The improved ability to relate intent in the code should be reason enough.

In another example for why one must be careful when testing for truthy values in a conditional, he shows some code that would fail because a value of 0 is falsey:
const sections = ['shipping'];

function displayShipping(sections) {
if (sections.indexOf('shipping')) {
return true;
} else {
return false;
}
}
Ignoring the fact that I just cringe at code like this that returns a boolean value that should be computed directly instead of selected through an if statement, (don't worry, he corrects that later) there is much more wrong with this code than just the fact that an index of 0 will incorrectly hit the else branch. In fact, that is the only case that hits the else branch. Whenever 'shipping' is missing from sections, indexOf() will return -1, which is truthy! This code is just totally broken, even for an example that's supposed to show a certain kind of bug, which it does almost by accident.

Other explanations were somewhat lacking in clarity. Late in the book, when things start to get complicated with promises, the explanations seem to get much more brief and gloss over how promises actually work mechanically and how the code executes. After having things explained in excruciating detail and in overly simplistic terms, I was surprised at how little explanation was given for promises. A step-by-step walk through of how the code runs when a promise executes would have been quite helpful in understanding that feature better. I figured it out, but through no fault of the book.

Overall, it was a disappointing read, and didn't at all live up to my expectations built up from similar books. The tone of the book was meant more for a beginner while the content was geared toward an intermediate to expert programmer. While learning about the new features of JavaScript was great, and there are plenty of new features to get excited about, there must be a better way to learn about them. At least it was a quick read, and refreshing my memory will be easy by skimming the titles of the tips. I wouldn't recommend Simplifying JavaScript to anyone looking to come up to speed on modern JavaScript. There are better options out there.

Shattered Apollo (XCOM Files)

PFC Tom Shaw, March 1st
They told us we were the first humans to kill a creature from outer space. They told us we were heroes. They told us we were the best humanity has to offer to fight off this invasion. I'm going to be honest with you here and tell you, I don't really think any of that is true. These guys knew the aliens were coming. They must have known for a while. The XCOM project had been dormant for years before they came and picked us up and told us we were chosen to protect humanity. It's possible no one had seen or fought an alien before us, but then how did they know what to expect? How did they know when to expect it? We certainly weren't heroes. Most of us were just dumb kids who knew how to shoot. Yeah, we were trained to kill each other, but not one among us had been trained to repel alien invaders with death rays. Hell, I don't even really know what plasma is and I've been covered in the stuff.

You're here to talk about that night, right? I relive that night a lot in my nightmares. It's difficult to talk about for a lot of reasons, but as the squad leader of the first human beings to engage and defeat an alien threat - well I'm getting used to being asked about it. Well, here goes.

We were flown from the Cheyenne Mountain complex to Vancouver late on the night of March 1st. Aliens had touched down at a shipping warehouse and were in the process of abducting any humans unfortunate enough to be out that late. None of this junk sounded real to me, by the way. Here I was leading this team and I wasn't even convinced we were going to be fighting what they said we'd be fighting. I'd never seen an alien or a UFO. This was the stuff of TV shows and silly documentaries on conspiracy theories. How could this crap be real? It felt like a dream flying out to Vancouver that night. It felt like a dream until our boots hit the ground.

The Landing Zone
We dropped down on the street outside the parking lot of the warehouse. The lot itself was fenced in with a stone wall creating a bit of a fortress for these aliens to hide in. We could hear some damn strange noises coming from beyond that wall. That's when most of us knew that this was really happening. You can be dropped into a foreign country where you don't speak a word of the local language, but you know those sounds coming from the other side of the wall are human voices speaking human words that you just don't understand. This was not like that. No, sir. I can't even begin to describe these sounds to you. They were like nothing I'd ever heard on Earth. This was really happening.

First Contact
Grace was the first to lay eyes on an alien - Private Grace Russell, my fellow American that night. As she took up a position against the wall and moved forward to the entrance of the lot, she spotted three little greys working on one of their abduction pods. I guess they store humans inside these things for transportation. The science team understood more about that than I ever did, but we just called them abduction pods. Anyway, these aliens saw Grace and took up defensive positions behind the pod and some nearby cars. My Brazilian brother, Julio "Burrito" Brito, took up a position across from Russell at the entrance to the lot.


The Great Kobayashi Grenade
I couldn't see a damn thing from where I was pressed up against the wall, but the next thing I know I'm hearing the bizarre sizzling sounds of these plasma pistols firing on my team. Russell and Brito open fire, but they're basically exchanging rounds with the aliens shooting their green ooze back at us. That's when Shinji Kobayashi - no one even knew this dude until that night. This guy really kept to himself at the base. He barely spoke a word of English to anyone. He was definitely a loner. So this guy, Kobayashi, decided to sneak up along the outside of the wall and toss a grenade over the top on to the aliens' positions. The crack of his anti-personnel grenade marked a stop to the plasma pistols sizzling shots, but Russell could see two were wounded, but none were killed. Burrito and I slipped into the parking lot in this short window of opportunity.

Man, the first time I saw a grey - hunkered down behind that abduction pod, staring down at the shrapnel out of its body - I just fired on the thing. I ended its life. That thing didn't even see me sweep in from around the corner. Yeah, as far as anyone can tell me, I'm the first guy on Earth to take one down. I barely even got a good look at the thing before putting a hail of bullets into its small grey body. There was a certain exhilaration among the team knowing that our simple ballistic weapons had defeated these technologically superior beings with futuristic, space rayguns. Sadly this small moment of victory was diminished by the sounds of heavy plasma fire coming from further down the street.

Kobayashi Comes Under Fire
Private Kobayashi's bold maneuver had left him alone and exposed. He was pinned against the wall farther up the road and barely holding back four greys who were trying to gain a strategic position behind our squad. Knowing this, Burrito rushed across the parking lot toward the warehouse hoping to end our conflict inside the compound swiftly. The aliens were wounded and distracted by the loss of one of their own. They didn't even see him get in close and mow down a second alien hiding behind a car in shock. Grace had only reported three aliens in the lot, so I felt confident that Private Brito and I could pincer the last one on our own. I sent Russell, Rojas and Marin to backup Kobayashi on the street. You know, I think about this moment often and wonder if splitting up the squad had been a mistake. That might have been where things went truly wrong for me and Marin, but if I hadn't sent them, then Kobayashi would probably have died in the streets of Vancouver that night.

Burrito Gets the Drop on This Alien
As Julio and I pushed forward in the parking lot searching for that final alien, Russell, Rojas and Marin made their way up the street toward Private Kobayashi. We heard Marin nscream out in pain from our position and it still sends chills down my spine. Julio and I thought she was dead. As far as we understood, no one had ever been hit by these death-rays so we expected the worst. Rojas came over the radio, though, saying she'd been hit but she was still alive. She even managed to take one of the aliens down before falling back behind a car to rest. Adriana Marin was tough.

As far as I understand, while the aliens were distracted by Private Marin, Kobayashi was able to take up a new position across the street - rushing away from the wall where he had been pinned down. From there he was able to take down an alien firing on Marin and Rojas with ease. Although Marin was hurt, it sounded to us like the firefight on the street was turning in our favor. We could hear the aliens shrieking their horrible sounds and scattering back to defensive positions further down the lot. Private Brito and I obviously wanted to pin the aliens down, but before we could rejoin Kobayashi we had to take care of our immediate enemy. We found the final alien of the initial squad hiding behind a yellow car. I took some shots that missed, which to this day still haunt me. That damn yellow car is one of the last things I remember that night. After that, things go dark.

Just Before Things Go Dark
The alien that Julio and I were tracking was leading us into an ambush. Julio told me later while I was in the med-bay that three aliens popped out of the warehouse itself right on top of my position. One of them fired several shots into my left side, nearly covering me in that burning green plasma. I went down hard and Julio thought I was dead right then and there. I don't have any memory of this, you know? The last thing I can remember is missing that damn bastard who led me into the trap. I guess after I fell, Brito rushed up taking shots on my attacker and killing it. He said I was bleeding out right there in the lot. He reported over the radio that if they couldn't get me on the skyranger soon, and rush me to medical attention I was a goner.

Kobayashi Coming in Hot
Now, from what I understand, once Burrito reported I'd been shot down, Kobayashi took charge of the team on his side of the wall. To this day, I never heard the guy speak, but if you hear Grace tell it, without Kobayashi's leadership I wouldn't be here today. She makes it sound like Shinji single-handedly killed the rest of the aliens in some kind of maddened rage, which makes Julio laugh every time we bring it up. All he would tell me is that Shinji led his sub-squad around the northern end of the wall and closed in behind the ambush in a pincer attack with Brito. Together, their counter-ambush wiped out the rest of the greys on site and we were able to be extracted soon afterward.

That's really all their is to tell. The six of us took out ten greys. Marin was wounded, and I was rendered unconscious. Technically, I was leading the mission and I got the first kill so some people think I'm a hero. Personally, I know it could have gone better. I'm still kicking myself for walking into that trap like a goddamn puppet on a string. It was my leadership that got Marin hurt, too. Kobayashi was the real hero that night as far as I'm concerned and I don't think I'm alone in that regard.


  • From an interview with Tom Shaw, US Special Forces, Leader on Operation Shattered Apollo



XCOM Report - March 1, 2015 - "Shattered Apollo" 

PFC Tom Shaw (USA) - Squad Leader
  • Confirmed Kills: 1 (Sectoid)
  • Condition:  Gravely Wounded
  • Earned Promotion 

PFC Grace Russell (USA) 

  • Confirmed Kills: 1 (Sectoid)
  • Earned Promotion 

PFC Roman Rojas (Guatemala)
  • Confirmed Kill: 2 (Sectoid)
  • Earned Promotion 

PFC Adriana Marin (Moldova)
  • Confirmed Kill: 1 (Sectoid)
  • Condition:  Minor Wounds
  • Earned Promotion 

PFC Shinji Kobayashi (Japan)
  • Confirmed Kill: 3 (Sectoid)
  • Earned Promotion 

PFC Julio Brito (Brazil)
  • Confirmed Kill: 2 (Sectoid)
  • Earned Promotion 

Monday, March 23, 2020

Solarus 1.6 Is Out, Progress On Ocean's Heart


Some of you might remember previous coverage of Solarus, the Free Software Zelda-like ARPG engine that comes with its own complete game creation suite and a pretty impressive palette of Zelda fan games already available under its wing. As of last December, version 1.6 has been released, and while the changes under the hood are too many to number (check the full announcement and changelog here), it is worth highlighting the package now includes a more varied amount of libre tilesets, meaning developers now have available a wider choice of default non-proprietary graphics to use on their own creations. While the community is still very much focused around Zelda fan-games and their respective copyrighted graphics, this is an important first step to attract more developers and spark future libre game projects.


The Ocean's Heart tileset, now part of the Solarus package.

One such project is Ocean's Heart, the brainchild of Solarus community member Max Mraz. The game follows a gameplay structure similar to classic Zelda games transported to a Viking age-inspired setting. It features an entirely original story and a beautiful pixelated tileset, which Max was kind enough to license under a Creative Commons license for integration with the Solarus suite. Upon completion it will become the first true libre Solarus-made ARPG in code and assets, which makes for very exciting news.



Stay tuned for further developments on this, and be sure to check the Solarus website for news on their upcoming game projects, along with complete instructions and tutorials on how to create your own game using the development tools.

Code License: GPLv3
Assets License: Mixed  (most sprite packages copyrighted by Nintendo, original Solarus assets under CC-BY-SA)

Thursday, March 19, 2020

Kriegsspiel: Big Trouble In Little Lardas

Two weeks ago, I participated in a week-long online Kriegsspiel run by Nick Skinner and Richard Clarke of Too Fat Lardies fame. With a total of 13 participants, two umpires and one observer, it was quite an undertaking. Set within a fictional "Imaginations" campaign of the "Lard War II," the players commanded either the forces of the Kingdom of Blue or the Red Republic. As Nick explained in the game:




Blue has invaded Red and achieved a breakthrough in the central South. Blue's armies are now pushing Northwards towards the crucial line of the NEMUNAS river and the strategically important city of LARDAS that stands at the confluence of two rivers. If they can push on, they will be threatening the capital city of REDBURG. Red forces though are well organised and aware of the danger. What will happen next?
For the participants, the planning portion was the meat and potatoes of the game. We started out by signing into a website and associated app called Discord. Nick set up a server and we joined it. We were immediately assigned to either the Blue or Red force rooms. From there we received our unit assignments and awaited orders. 

The Blue forces, of which I was a member, consisted of an airborne division. We had as players the commanding general, chief of staff, two para brigade commanders, a special reconnaissance squadron commander, a divisional artillery battalion commander and me. I was assigned as the commander of a brigade of glider troops.

Speaking of gliders. This film and the real events it represents may have provided may have provided some inspiration.
We confirmed that our organization and equipment was vaguely British. That meant I had three battalions of infantry, each with four companies of four platoons plus a support company. I was also assigned an ambulance company. This seemed a bad omen.

In the background, Nick was briefing the division commanding general and chief of staff with the division mission. A day or so later, after the CG and COS had some time to digest the mission, we received our unit missions. My mission in particular was to neutralize four forts that protect the southern flank of the city and conduct a follow on mission of clearing the two main routes to the city.

The small circles are my objectives, the forts. The larger circles are the landing zones for the gliders. The red areas? Anti-glider poles. To quote a certain British officer, "I'm thinking of a phrase that rhymes with 'plucking bell'." Umpire Nick Skinner took  an actual 1:50,000 map and appended new place names, grid line identifiers and other information.

Early in the plans process, I chose to land my initial assault gliders directly on the forts. I figured my best chance was to take the enemy completely by surprise and jump right on top, like at Eben Emael. I had limited resources to get my brigade on the ground. It would take three lifts over the course of two days to get my complete brigade into the battle area. Given my resources at hand, on the initial landings, I would have 20 platoons out of 48 on the ground. Not great odds, I thought. But I had to risk it. Who dares, wins, right?

Plans were set, then changed and changed again as the brigade commanders weighed options and made their cases with the CG and COS for why they should get resources. A feature of Discord that we found handy are voice chat rooms where members can talk via VOIP for planning, rock drills, etc. Blue had two conferences and we found them very beneficial. By the time we had our first conference, we had our plan largely in place and were discussing some of the finer points. The final conference was to make sure everybody had their plans finalized and ask final questions.

My set up for the day of battle. The cards have each lift marked on them with the units and target LZ. As the battle progressed, I put the markers on the map as needed. We didn't get past the first lift on Day 1, although we planned for four days.

The day of battle arrived. 
As time drew closer for us to climb in our imaginary planes and gliders, top level rooms were locked up and player-to-player communications stopped. We sat at our computers waiting for H-Hour. I received a message that I was on the ground at LZ Baker and could see paras taking heavy fire about a kilometer to the northeast. I could also see and here vicious combat in Fort 2, aka OBJ Grumpy. Then the various communication nets started going live in the form of restricted chat rooms in Discord.

My brigade net room was where I spoke with umpires to get reports from my battalions and request info from them. There was an "on the ground" room for commanders that were up on the division net. Finally there was a division HQ room for those who had established comms with the outside world. Receiving information, parsing it, confirming our own assumptions and then assessing it before putting it up in both the "on the ground" room and Division room was a significant challenge. Luckily, the game was set to last only three hours. 

During the game, we were mostly interacting with the umpires and relying on them for information. Issuing orders and requests for information from my imaginary subordinates. I then had to process that info and relay it to my in-game superiors. But only once our in-game communication nets were established! One of the para commanders didn't have comms because his radios got shot up on the DZ. He had to "walk" to where I was and then we could talk to each other and the had to use my "radios" to talk to higher.

Fort 1, OBJ Bashful was taken almost immediately with 30% casualties. Fort 2, OBJ Grumpy, fell only after receiving help from a platoon that had landed on Bashful. Fort 3, OBJ Dopey, was a see-saw battle and I tried mustering forces from Bashful and Grumpy to push it over the edge. Fort 4, OBJ Sleepy, only reported in once their ammo was all expended and the last holdouts were cornered in a bunker and calling "God save the King."

Enemy armored infantry and self-propelled guns had been spotted in the vicinity of Sleepy, so I called for air strikes on the fort with machine gun and cannon only, then follow up with bombs and rockets on the enemy vehicles. Imagine my surprise when I received the report that Sleepy had been destroyed from the air.

In the meantime, I was still trying to get enough forces scratched together to make a difference at Dopey to find it had fallen and was being evacuated, my troops being led away by the enemy. When I asked for clarification if it was Sleepy or Dopey, i was told, "No, it's Dopey, dopey!" Thanks, Rich.

Then the game ended. Luckily, our troops were wholly imaginary and our decisions didn't result in any real casualties. It was an exhilarating, exhausting, madcap, sobering, nervous, mind-blowing experience. I'm planning a podcast with Nick, Richard and the two force commanders. Stay tuned.

I will definitely be looking to do one of these for my J3 group and possibly for my fellow OCS instructors in the near future. Stay tuned for that, as well.

Warlord Germans...I Had No Idea....







Warlord infantry section

After years of slagging off 28mm WWII figures a combination of circumstances have led me to dip my toe in the water. To put it simply, I was pleasantly surprised, a lot of the figures I'd seen have been the late war, overly "heroic" (read: Fugly) style, which remain pretty horrible. Then I discovered these early war Warlord plastics, much different, presumably a different designer, nicely proportioned, and as with so many plastics these days, really cleverly designed in terms of pose compatibility within the sprues. I enjoyed putting together the plastics, took me back to the old Airfix multi-pose kits (remember them?)  they fit together well, and have some cracking pose combinations.
Then the painting, great fun...a lot more to work with obviously than 20mm, and the overall design lends it to gaining a decent result with only moderate skill with modern paints and techniques.
These I did with Vallejo block painting, then slopping GW Nuln oil all over, then a 2 layer highlight, before doing the flesh last (Vallejo sunny skin with a Lavado skin wash), my usual old lazy basing of PVA and sand +Army Painter Autumn tufts.
I'll talk about the Stugs a bit later.
All this is for Chain of Command, I've found a group in London who play these terrific rules, so this lot will get their first outing next week. However, I have far grander plans for this lot in the future. 
More to come! 

Monday, March 16, 2020

Beat The Price Increase

The new pricing structure takes effect on February 15th. We are offering up to a 30% discount our current off MSRP until that date.
Most items will see a 5% to 8% increase and a few specific items will be higher.
If you have an item or two that has been on your bucket list, this might be a good time to blow the dust off the list.

 (from prior post)
We started down the road to manufacturing plastic kits in 2012, a lot has happened since then. I have seen shipping prices nearly double, WGF has ceased to be our distributor and we have taken over that aspect of operations. We now purchase our kits from WGF China directly.
We recently place two restock orders to bring our stock levels back on par, the shipping costs have been an eye opener. In many cases shipping from China to the US was more than the actual cost to manufacture a kit. Some kits needed to be brought in line with their cost of production. This price increase was as minimal as we could make it most items will see an increase of 5% to 8% with some more drastic adjustments to kits that were selling into distribution at a lower than delivered cost to us.
To maintain the health of DreamForge-Games it has become clear that we will need to implement a price increase, effective February 15th2016
 
 Mark Mondragon
DreamForge-Games

Sunday, March 15, 2020

Monster Hunter: World Free Download

Monster Hunter World - is an action role-playing video game developed and published by Capcom. A part of the Monster Hunter series, the game was released worldwide for PlayStation 4 and Xbox One in January 2018.


Featuring: Welcome to a new world. Take on the role of a hunter and slay ferocious monsters in a living, breathing ecosystem where you can use the landscape and its diverse inhabitants to get the upper hand. Hunt alone or in co-op with up to three other players, and use materials collected from fallen foes to craft new gear and take on even bigger, badder beasts! Also Introducing: Overview Battle gigantic monsters in epic locales.  As a hunter, you'll take on quests to hunt monsters in a variety of habitats. Download game for free.
1. FEATURES OF THE GAME

Monster tracks, Footprints, dot each locale & your Scoutflies will remember the scent of a monster and guide you.
Slinger is an indispensable tool for hunter, allowing you to Arm yourself with stone and nuts that can be gathered.
Specialized tools activate powerful effects for a limited amount of time and up to two can be equipped at any time.
Palicoes are Hunters & comrades out in the fields specialized in a variety of offensive, defensive, plus restorative.
Diverse Arsenal & equipments will give you the Power to Need to Carve out a Place for yourself in the New World.

Game is updated to latest version
▪ Monster Hunter: World - Character Edit Voucher: Single Voucher
▪ Monster Hunter: World - Character Edit Voucher: Three-Voucher Pack
▪ Monster Hunter: World - Character Edit Voucher: Two-Voucher Pack
▪ Monster Hunter: World - Classic Gesture: Clap
▪ Monster Hunter: World - Classic Gesture: Dance
▪ Monster Hunter: World - Classic Gesture: Prance
▪ Monster Hunter: World - Classic Gesture: Rant
▪ Monster Hunter: World - Face Paint: Eye Shadow
▪ Monster Hunter: World - Face Paint: Heart Shape
▪ Monster Hunter: World - Face Paint: Shade Pattern
▪ Monster Hunter: World - Face Paint: Wyvern
▪ Monster Hunter: World - Fair Wind Charm
▪ Monster Hunter: World - Free Character Edit Voucher
▪ Monster Hunter: World - Free Sticker Set: Mingle Hunter
▪ Monster Hunter: World - Gesture: Air Splits
▪ Monster Hunter: World - Gesture: Cool Dance
▪ Monster Hunter: World - Gesture: Devil May Cry Dual Guns
▪ Monster Hunter: World - Gesture: Disco Fever
▪ Monster Hunter: World - Gesture: Feverish Dance
▪ Monster Hunter: World - Gesture: Gallivanting Dance
▪ Monster Hunter: World - Gesture: Hip Hop Dance
▪ Monster Hunter: World - Gesture: Interpretive Dance
▪ Monster Hunter: World - Gesture: Kneel
▪ Monster Hunter: World - Gesture: Kowtow
▪ Monster Hunter: World - Gesture: Ninja Star
▪ Monster Hunter: World - Gesture: Passionate
▪ Monster Hunter: World - Gesture: Play Possum
▪ Monster Hunter: World - Gesture: Sleep
▪ Monster Hunter: World - Gesture: Spin-O-Rama
▪ Monster Hunter: World - Gesture: Spirit Fingers
▪ Monster Hunter: World - Gesture: Squat Day
▪ Monster Hunter: World - Gesture: Sumo Slap
▪ Monster Hunter: World - Gesture: Windmill Whirlwind
▪ Monster Hunter: World - Gesture: Zen
▪ Monster Hunter: World - Hairstyle: Field Team Leader
▪ Monster Hunter: World - Hairstyle: Provisions Manager
▪ Monster Hunter: World - Hairstyle: The Admiral
▪ Monster Hunter: World - Hairstyle: The Handler
▪ Monster Hunter: World - Hairstyle: Topknot
▪ Monster Hunter: World - Origin Armor Set
▪ Monster Hunter: World - Samurai Set
▪ Monster Hunter: World - Sticker Set: Classic Monsters Set
▪ Monster Hunter: World - Sticker Set: Devil May Cry Set
▪ Monster Hunter: World - Sticker Set: Endemic Life Set
▪ Monster Hunter: World - Sticker Set: Guild Lasses
▪ Monster Hunter: World - Sticker Set: Mega Man Set
▪ Monster Hunter: World - Sticker Set: MH All-Stars Set
▪ Monster Hunter: World - Sticker Set: Poogie
▪ Monster Hunter: World - Sticker Set: Research Commission Set
▪ Monster Hunter: World - Sticker Set: Sir Loin Set
▪ Monster Hunter: World - The Handler's Astera 3 Star Chef Coat
▪ Monster Hunter: World - The Handler's Busy Bee Dress
▪ Monster Hunter: World - The Handler's Guildmarm Costume
▪ Monster Hunter: World - The Handler's Mischievous Dress
▪ Monster Hunter: World - The Handler's Sunshine Pareo
▪ Monster Hunter: World - The Handler's Winter Spirit Coat

2. GAMEPLAY AND SCREENSHOTS
3. DOWNLOAD GAME:

♢ Click or choose only one button below to download this game.
♢ View detailed instructions for downloading and installing the game here.
♢ Use 7-Zip to extract RAR, ZIP and ISO files. Install PowerISO to mount ISO files.

MONSTER HUNTER: WORLD DOWNLOAD LINKS
http://pasted.co/af29b5ae
PASSWORD FOR THE GAME
Unlock with password: pcgamesrealm

4. INSTRUCTIONS FOR THIS GAME
➤ Download the game by clicking on the button link provided above.
➤ Download the game on the host site and turn off your Antivirus or Windows Defender to avoid errors.
➤ When the download process is finished, locate or go to that file.
➤ Open and extract the file by using 7-Zip, and run 'setup.exe' as admin then install the game on your PC.
➤ Once the installation is complete, run the game's exe as admin and you can now play the game.
➤ Congratulations! You can now play this game for free on your PC.
➤ Note: If you like this video game, please buy it and support the developers of this game.
Turn off or temporarily disable your Antivirus or Windows Defender to avoid false positive detections.






5. SYSTEM REQUIREMENTS:
(Your PC must at least have the equivalent or higher specs in order to run this game.)
Operating System: Windows 7, Windows 8, Windows 8.1, Windows 10 | requires 64-bit
Processor: Intel Core i5-4460, 3.20GHz or AMD FX -6300 or any better processor
Memory: at least 8GB System RAM
Hard Disk Space: 20GB free HDD Space
Video Card: NVIDIA GeForce GTX 760 or AMD Radeon R7 260x | VRAM 2GB or better
Supported Language: English, French, Italian, German, Spanish, Russian, Polish, Portuguese-Brazil, Arabic, Chinese Traditional, Japanese, and Korean language are available and supported for this video game.
If you have any questions or encountered broken links, please do not hesitate to comment below. :D

Thursday, March 5, 2020

Download Ghost Rider Mod For Gta Sandeas

                                                          y.yadav gamer

                      mod for gta sandeas only


                             all types hack repack











                           see our my tube



mod is made for only gta sandeas not for any gta and other self plese dont use this mod for any other gta sandeas hardly reqested for all viwer to read how  to use this go to discrition of mod(dom)

note  dont use any mod usin this mod please  

                                                                         dom

to activate this mod press home button
to control your bike press control+c
to fire the mod press+x
to atack any one press+tab+r
to give fire well press+t


                                                  mod password is+fulla1 




click here to download click
click here to download in full speed click 














         installigation  video will  soon avlable