If you have come here from a work-related perspective (computing, semweb, bioinformatics, math). Perhaps you could go there right now and not read the gory personal stuff here.
Use the wordpress rss mechanism to follow categories:
If you have come here from a work-related perspective (computing, semweb, bioinformatics, math). Perhaps you could go there right now and not read the gory personal stuff here.
Use the wordpress rss mechanism to follow categories:
This is going to get very freaky, very weird. Oh, maybe not for people who already have a particular kink – people with lisps, Haskel programmers. But everyone not already an FP weenie will need to take a shot of espresso and/or whiskey.
So, the build described on my previous post does indeed process astral sorcery crystals. But building all of those chains of NBT variables is a pain. Wouldn’t it be nice if there was a function that would simply get the size and cut of a crystal, nested all the way down in those NBT tags? Well, you can build them.
There are a couple of things to know. First, all of the built-in operators can be turned into an operator variable using (obviously) the operator entry in the portable programmer. You can then use the apply operator to give that variable some parameters, and it works the same as if you had simply used the operator.
Second, FP languages have an interesting method of handling functions with multiple arguments. In principle, a function only ever has one argument – it maps one thing onto another thing. So how is something like, say, addition done? Say we want to add 100 and 200. Well, the + function takes one integer argument. So when you give it a parameter of 100, it returns a function that adds 100 to things. This function is then applied to the second argument, giving you the 300 you wanted.
In Integrated Dynamics you can totally do that, you can take a function taking three arguments and bind something to the first argument, giving you a function (an operator) that takes two arguments. And so on.
I suppose the third thing to note is that all the things I am interested in start at a tag named ‘tag’. That is, various things give you back various types of lists and NBTs. The outer layers are specific to entities, inventories, blocks. For instance, an entity reader gives you an NBT that talks about the location and orientation of the entity, the inventory reader gives you an NBT talking about which slot in the inventory an item is in, the grindstone just starts at the top level, because it’s not done as a cointainer. The stuff common to these containing the astral sorcery gear starts at ‘tag’, wherever that might be. From that point you walk down: tag, astralsorcery, crystalProperties, size/collectiveCapability/purity.
So what I really want is a pair of functions which, given an NBT with a ‘tag’ entry, walk down to the integer ‘size’ entry and return it.
Let’s see how deep the rabbit-hole goes.
First, create an NBT object with that ‘tag’ at the top level. For instance, if your entity reader has a crystal floating in front of it, grab the entity aspect of the reader, then use entityNBT and then NBT.tagNBT to grab the ‘Item’ entry out of that tag. You could build a function to do this, but for now I am not going to bother.
I label the item variable ‘crystal’, its NBT ‘crystalNBT’, and the Item entry of that ‘crystalItem’.
This gives us an NBT with the structure that we will be working with – it’s our test data.
Next I use the portable programmer ‘Operator’ function to get two operators: ‘reduce’ and ‘NBT NBT Value NBT’. Yeah, I know. I label these λreduce and λgetNBT.
I then create a list of string containing the values ‘tag’,’astralsorcery’, ‘crystalProperties’. Case-sensitive, remember. I label this tag2cp.
Now at this stage, we can get the inner NBT fairly easily without needing λreduce. Create a variable ‘reduce(λgetNBT, tag2cp, crystalItem)’. This will use the reduce function to walk down the list of strings applying the λgetNBT operator each time, starting with crystalItem. At the end of the list, it will have reached the target NBT.
You can achieve the same effect using the apply3 operator: ‘λreduce apply3(λgetNBT, tag2cp, crystalItem)’.
But I don’t want a variable that extracts the stuff out of crystalItem, I want a function that will extract out of any suitable NBT.
To do this, I ‘λreduce apply(λgetNBT)’ to get another variable which I name ‘λnbtWalk’. This is a function that takes two arguments – a list of string and an NBT. It will walk down any NBT with a list, returning the final NBT.
I then create a variable ‘λnbtWalk apply( tag2cp)’, which I label ‘λnbt2cp’. This is a function which, given an NBT, will return that final NBT containing the crystla properties (if it’s there, obviously).
When you create a variable ‘λnbt2cp apply(crystalItem)’ and drop it into a display, well blow me down if it don’t display that inner NBT containing the stuff we want. Let’s label this variable ‘cprops’ for now. We wont need it in the final result, but it’s handy for testing the next bit.
Now, we can’t use the λnbtWalk function to get all the way down to size and cut, because these are integers and the λgetNBT function will return nothing.
So, we create an operator variable out of ‘NBT NBT Value Integer’ and label it ‘λgetInt’. You can apply an NBT and a string to this to get an integer from inside an NBT. The problem is that the arguments are around the wrong way. If you used ‘apply’, you’d have to bind the NBT first and you’d get a function that would get any integer out of some particular NBT if you give it a tag name. NOt what we want.
So, create a new operator using ‘flip(λgetInt)’. This gives us the get Int function with its arguments swapped. I name this ‘λgetInt_YX’, with the idea that function arguments are usually named ‘X’, ‘Y’ in that order.
Create a string ‘size’ labelled – ohh, I dunno – ‘size’. At this stage, you can create a variable ‘apply2(λgetInt_YX, size, cprops)’ and drop it in a display, and you should see an integer. And not just any integer, but the size of the crystal sitting in front of the entity reader.
Now create a new variable ‘λgetInt_YX apply(size)’. This gives you a function returning the size value from any NBT that it is passed. I label this ‘λgetSize’.
And to put it together, we use the pipe operator: ‘.’. Simply λnbt2cp . λgetSize’ to give a new operator, which I label ‘λnbtSize’. And this is the magic, this is the thing we are trying to build. It’s a function taking one argument – the top level astral sorcery NBT containing a ‘tag’ entry, and returning the size of the crystalProperties NBT buried three levels deep. Try it! Create a variable ‘λnbtSize apply crystalItem’. Drop it in a display, and you should see the size. Naturally, you will want to make ones for purity and collectiveCapability (which I always label ‘cut’) as well.
From here, you can, well, do stuff. Turn ‘entity->get(‘Item’)->λnbtSize’ into a single operator, if you want.
But the real thing is building predicates. With these functions, you can now build a predicate ‘crystal has size 900’ by applying 900 to the == operator and piping λnbtSize into it. This can be used in item exporters and importers as a filter. Stuff like that. I’m not going to rebuild my setup using this method, but the business of sorting out completed crystals from ones still needing to be cut could have been done that way. If it were the case that you could put multiple crystals in the one growth pool, and you want to pull out the ones that are ready, then that’s the way to go.
Anyway, that’s what it took to make this happen in my creative test world. Haven’t used it in survival, yet, but that’s how it’s done.
This post attempts to describe my setup for growing maxed-out astral sorcery crystals using integrated dynamics and integrated tunnels.
To make all this work, we use several ID channels. Each channel has a single chest or fluid tank. The components work by exporting and importing crystals between appropriate channels.
Run fluid pipe from beneath your lightwell into a tank. If you are using Thermal Dynamics for this, it must be at least hardened or it will break (starlight is extremely cold). You will need a servo, because lightwells don’t auto-extract. Attach a fluid interface to the tank – my setup uses channel 0.
Add three chests to the network each with its own item interface on channels 1,2, and 3. Channel 1 will be for crystals needing to be grown, channel 2 for crystals needing to be cut, and channel 3 for completed maxed-out crystals.
Create a spot for the budding pool. This spot will have an entity reader, a world fluid exporter, and an world item importer. Easiest way to to this is to place a solid block, put the components on that, then break the solid block.
Create a fluid variable from a bucket of starlight. This goes in the place fluids aspect of the fluid placer, using channel 0. This will keep the block full of starlight as it is used up.
Throw a celestial crystal with a purity of 100% in the pool. To get one of these, go through the process manually: you only need to do it once.
Make a variable from the ‘entities’ aspect of the reader. This will be of list type. Make an integer variable from the len of that list. Make a constant variable 1. Make a boolean variable that is true when the list length > 1. Put this in the ‘pick up all item entities’ aspect of the world item importer. Set the channel to 1 (or 2, that also works). The rate does not matter, because each crystal counts as its own stack.
The result is that the crystal in the pool will be grown, the starlight replenished as needed, and when a new crystal buds off, it will be put in the chest on channel 1.
Make another pool. This one needs a world fluid exporter exporting starlight from channel 0, an entity reader, a world item exporter, and two world item importers.
As with the budding-off pool, read the entities aspect to get a list variable and use the ‘is empty’ list operator to get a boolean variable (easier than len()==0). This goes in the ‘place all item entities’ aspect of the world item exporter, which must get its items from channel 1. The effect of this is that it will pick out a crystal from the ‘needing to be grown’ chest whenever there is no crystal in the pool.
And now it gets a little complicated. 🙂
Take a variable off the ‘entity’ aspect of the reader. Make a variable entity off this using ‘entity NBT’, to give an NBT object. Create String variables with the strings ‘Item’, ‘tag’, ‘astralsorcery’, ‘crystalProperties’, ‘size’, and ‘collectiveCapability’. These are probably case sensitive.
Using the NBT.tag function, create a series of variables drilling down the NBT tree -> ‘Item’, ‘tag’, astralsorcery’, ‘crystalProperties’, then on that final NBT create two integer variables using NBT.integer for ‘size’ and ‘collectiveCapability’. Use your labeller. In my setup, I label the ‘collectiveCapability’ variable to ‘cut’, and the ‘size’ variable to ‘size’, duh.
Create two integer variables with values 100 and 900 (assuming we are making celestial crystals. You’d use 400 for regular crystals … but why would you bother? You only need one to start with). Create three boolean variables size==900 (which I label ‘big’), cut==100 (which I label ‘perfect’), and cut!=100 (which I label ‘imperfect’).
Create a variable using the && operator for ‘big && perfect’. This goes in the ‘pick up all item entities’ aspect of one of the world item importers and should import into to channel 3. This is the output.
Create a variable for ‘big && imperfect’. This goes in the ‘pick up all entities’ aspect of the other world item importer and should import into channel 2.
The end result is that whenever this pool is empty, a crystal will be placed into it from chest #1 and the crystal will be grown until it has size 900. At that point it will get put either in chest 2 or 3 depending on whether is it properly cut or not.
Place a grindstone. This will need 3 player simulators and a block reader. Place another chest with an inventory reader, an item interface, and an item exporter. The item interface will be on channel 4.
Take a variable from the ‘inventory empty’ aspect of the inventory reader. I label this ‘4empty’.
Take a variable from the Tile Entity NBT aspect of the block reader on the grindstone. Make string variables ‘tag’, ‘astralsorcery’, ‘crystalProperties’, ‘size’ and ‘collectiveCapability’ (or re-use the ones you already have).
As with the growth pool, descend the NBT tree on the grindstone to get integer variables for tag.astralsorcery.crystalProperties.size and .collectiveCapability . I prefix all the label names with gs_ for ‘grindstone’, and so these two variables get labelled ‘gs_size’ and ‘gs_cut’.
Use the NBT.hasKey(‘tag’) operator on the root tile entity NBT variable to make a variable named ‘gs_hasCrystal’, and the negation of this to make a variable named ‘gs_noCrystal’. This works because the ‘tag’ NBT entry on the grindstone is only present if there is a crystal in it (there is no ‘Item’ entry because the grindstone is not an inventory – that’s why you need player simulators).
Make a boolean variable labelled ‘gs_perfect’, from ‘gs_cut == 100’. Make another boolean variable ‘gs_imperfect’ from ‘gs_cut != 100’.
Make a boolean variable ‘gs_toosmall’ from ‘gs_size < 100'. I use 100 because a single pass of the grindstone takes less than 100 size off a crystal, and I already have an integer variable with a value 100, so I can re-use it 🙂 .
Make a boolean variable 'gs_done' from 'gs_toosmall || gs_perfect', and a variable 'gs_notdone' from '!gs_done'.
On the item exporter on the chest, have it 'export all items items' from channel 2 with the condition 'gs_noCrystal && 4empty'. This will place one and only one crystal needing to be cut in the chest when the grindstone is empty. Because the item interface on the chest is channel 4, and the item exporter takes from channel 2, the crystal is moved from channel 2 to channel 4 of the system.
Make an 'item' variable from any celestial crystal.
On the first player simulator on the grindstone, have it 'click item' using the celestial crystal item variable. Channel 4, right-click true, and check NBT to false (otherwise the crystal needing to be cut must be identical to the crystal you made the item variable with). This will place a single crystal from chest 4 into the grindstone, but because the chest only has a crystal when the grindstone is empty, it will not continuously right-click the grindstone and potentially ruin the crystal in there. In effect, what is happening is that chest #4 is used to overcome the problem that we cannot put a boolean on the 'right click with item' aspect of the player simulator. The presence or not of a crystal in chest 4 serves as that boolean.
I have just been watching direwolf’s youtube video. I was not aware of the tiny chest. Using one of these would make this system simpler, as you do not need the 4empty mechanism to ensure that the chest only has one item in it. You still need the gs_noCrystal so that it only gets filled when the grindstone has no crystal in it.
On the second player simulator, make a variable ‘gs_hasCrystal && gs_notDone’ and put it in the ‘click empty’ aspect. This will turn the grindstone until the crystal is too small to grind anymore or the cut is 100.
On the third player simulator, make a variable ‘gs_hasCrystal && gs_done’ and place it in the ‘click empty’ aspect with sneak == true. Set the channel to 1. This will pick up completed (or incomplete cut too-small) crystals and put them back in the bin of crystals to be grown.
The end result is that whenever the grindstone is empty, a crystal is right-clicked into it from chest 2 via chest 4. This gets empty clicked until the crystal is either perfect or too small to grind anymore. At that point, the third player simulator sneak-clicks it back into inventory #1, from where it will make its way to the growing pool.
And that’s it.
I use a separate variable store for each of the three processes – they’re not that expensive, and it helps with keeping things organised. Labelling the variables is also indispensably helpful when using the programmer. Label the strings, too.
Playing New Horizons III, I find that ID occasionally jams. This tends to happen when I reload the game, and when I AFK away at my main base which is several chunks away (my AS setup is in a sparkly star zone). To fix this, my variable stores are connected to the rest of the system via an extra length of logic cable. I find that breaking and then replacing it un-jams things.
I sometimes find that the World Item Importer on the budding pool fails to import an item. This leaves two crystals in the pool, and astral sorcery will only grow crystals if there’s just one. To fix, pick up both crystals and chuck one back in the pool. The other you can just put in chest 1.
Growing crystals is slow, but this system means you can AFK and come back to three or four maxed-out celestial crystals. One of these will make 11 lenses. The waste crystals that you got from creating your initial 100% pure crystal can be thrown into the lightwells.
And you can add more pools for growing and budding by making a new variable store, making a new set of variables for the pool, and importing/exporting to the existing chests. I’m finding that neither growing nor budding is obviously the critical path – budding is slow because once the crystal gets to 900, it will still be a couple more cycles before the crystal buds; but growing is also slow because after the crystal is grown to 900, cutting will reduce its size and it will need more growing anyway.
In the image at the top of this post, crystals are moving from right to left through the system, because that’s how I wound up building it.
The display reading 799 shows the size of the crystal in the budding pool. It will hit 900 and stay there until the crystal splits, at which point one of the smaller crystals will be removed and one will remain to be grown up to 900 again.
The displays reading 824 and 100 are the size and cut of the crystal in the growing pool.
Not visible in the image are two more displays showing the size and cut of the crystal in the grindstone. These are normally 0, because grinding happens very fast and the grindstone is usually empty.
The displays are not necessary, but they are kinda cool. They are also helpful in that you can see if the system is jammed or not – when it becomes jammed, the displays read 0 even though there should always be a crystal in the budding pool.
If you don’t want to build the full system, I’d suggest that the grindstone displays make it so much easier to grind crystals. Player simulators are expensive, so doing the grinding manually is an option – just come back to the setup every now and again and grind the crystals in chest 2. The displays make it a simple matter to just right-click that grindstone until the numbers are improved, and then it’s back into chest 1.
Personally, I think AS should be nerfed with the rule that if you bud off a new crystal from a celestial crystal, the new, purer crystal should just be a regular one. But as it is, with this system you can have a chestful of maxed crystals AFK.
Our DM is asking us to kinda distil down the essence of what our characters are about. As in: if your character was a D&D god, what would he or she be the god of?
Brother Warming-Light-Of-Saranrae has a couple of things going on, character-development-wise. We have the “half drow who has repudiated his drow-ness” thing. We have the “dude who was very keen to keep out character who was a vampire from going full-on bad” thing.
But really, the thing he does more than anything else is charge into battle. However, we have a priest of Iomedae, goddess of valour, and a paladin of Gorrum, god of getting into bar fights. Aren’t we just doubling up?
Iomedae’s code is here. There are a couple of points in it that aren’t really Br Warming’s thing:
Br Warming is maybe about valour, but he isn’t really about honour. He certainly isn’t about “I will never refuse a challenge from an equal”. His attitude to that is “Meh”. There’s a diffidence about him. Shame isn’t a big motivator for him, which isn’t to say he’s immune from it. He was rebuked, once, by Iomedae herself for lack of clarity of purpose, and he accepted and learned from it.
The Lord in Iron is considered brash and impulsive; he takes what he wants, by force if necessary, and answers any direct opposition to his will with violence. His priests and followers tend to follow the god’s example, which means that there are more ruthless and exploitative members of his faith than those who espouse altruism.
(This passage would be better if the weasel-words “is considered brash and impulsive” was just made “is brash and impulsive”).
Br Warming is not really about fighting for the sake of it. He isn’t trying to prove something, he’s trying to accomplish something. Furthermore, he is good. Gorum isn’t. He isn’t going to get all offended by stuff and respond with violence – that is a part of the drow character that he has refused.
So, what is he about?
Choose your purpose. Choose your destiny. Choose your cause. Choose right. Choose redemption and rescue. Choose to stand against evil, great and small. Choose to protect the good. Choose to make a difference.
Do not fight for a cause for which you would not die. Do not hazard your life or the lives of others in mean, or ephemeral, or selfish causes; do not hazard your life for no gain. Act wisely as you may.
But then, fight! Fight extravagantly; fight without fear. Strike, and disdain to count the cost. Then strike again. If your life will win your purpose, spend it.
Have faith, and remember your reward in paradise. But first and last, remember the your goal here on earth. It must be worthy of you, so strive to be worthy of it.
“Fight extravagantly. Fight without fear.”
St Warming’s worshippers number a various orders of fanatical suicide monks. Humble as all get out, and prone to directly attacking the command tent or the heavily defended siege equipment. Whatever is going to win the day. It’s also quite common for battlefield medics and unarmoured sappers to venerate him.
They also number some people you wouldn’t expect – Andorran rogue/bards running the underground rail out of Cheliax. Spies infiltrating Red Mantis cults – sure to get caught sooner or later. Even some engineers building bridges in mountain passes find comfort in his teachings. Firemen, or the fantasy equivalent.
Anyone doing something they see as good, that’s probably going to get them killed doing it, whether or not it directly involves fighting, whether or not anyone ever knows about it.
A friend asked me for my perspective on this:
“Primitive people once killed goats to appease the volcano gods. We’re more sophisticated now but are still sacrificing our industries and our living standards to the climate gods to little more effect,”
My reply (which could stand a little editing):
I expect you are asking me specifically because of my past religious background, so I’ll add a perspective from that POV.
Some fundamentalist Christians see in environmentalism a strand of nature-worship. This may be understood as a philosophical pantheism, or a more naive tree-worship. There’s also an equivocation between the “paganism” of the modern hippie and ancient greco-roman “paganism”. They aren’t really the same thing at all, but we call them the same thing. And a person who isn’t a terribly clear thinker easily conflates pantheism with worship of the greek god Pan.
But so what? So what if Greenies think trees are nice? So what if some of ’em have Viking rune tattoos?
It’s important to understand that a fundamentalist christian believes that demonic spirits are literally real. Jesus cast demons out of people. Now, either Jesus was wrong, or demons are actually a thing. There a story of Jesus fasting for 40 days in the desert and being personally tempted by Satan. The story is clearly, clearly allegorical, but the biblical literalist takes the position that if this story was meant to be understood allegorically, God would have told us so.
The ancient Christians believed that the miracles of the pagans were perfectly real, and accomplished by demonic power. Fundies more-or-less regard anything in the least bit “spiritual” that isn’t christian to be of the devil. Whether the gods of Greece and Rome, or the vague woo-woo of the hippies, it’s all demons. When a hippie talks about a sense of connection with nature, they are being connected to the devil.
Fundamentalist Christians see “spirits” everywhere. This modern notion that we ought have a care for the natural world is probably spirits, which is to say demons. It’s all part of the same old big ball of wax that Jesus came to deliver us from. We know it’s spiritual because it’s about values. The abstract idea that values like environmentalism are spiritual and the more concrete idea that the Druids were in literally contact with actual, real demons gets all muddled up and stuck together in a big tangled mess of worrying ideas. (A person who believes in devils is afraid all the time, despite their protestations that their faith in Jesus keeps them safe from them. It’s a constant undercurrent of worry, especially for parents.)
The general notion that science is a good thing, also, is a spiritual force in our society. “Science” itself is a spirit, perhaps. Or perhaps blind trust in science – scientism, if you like – is a spirit, a great evil spirit sort of hovering in the air over humanity. An evil spirit clearly of the devil, because we should be putting our trust in Jesus alone. From it springs a multitude of lies, perhaps the greatest being that we don’t really have eternal spirits and that the devil is not real.
I appreciate that none of this makes much sense, that there’s a truckload of non sequitur in all this mess. But it doesn’t have to make sense. These are fragmentary ideas in the minds of (many? most?) Christians and especially fundamentalist Christians. Remember that most people are not terribly bright. [edit – perhaps what I really meant here was that most people are intellectually lazy, and perhaps what I mean by that is that I was]
This next bit is important, and perhaps I should edit this mail to make it more central:
Fundamentalist, biblical literalist Christians are creationists. The bible says what it says about where the world came from. In order to believe in creationism, you must conclude that the theory of evolution is wrong, or a lie. Consequently, creationists must and do believe that the scientific community is committing a fraud against all of humanity. And has been for hundreds of years. The idea that “science” is actually a vast conspiracy to deceive humanity is not new. It was not invented recently in reply to this latest climate science business. It’s as old as Gallileo and Newton. I mean, sure – not every scientist is an active conspirator. Some are misinformed by other scientsts (we all know that those white-coats are intelligent only in their specific area, and outside that they are absent-minded fools, unlike us reglar folks who have common sense). Some are mistaken. Most are just going along with the general consensus. But “the general consensus” is, of course, a spirit. The bible speaks of a “spirit of the age”. And it all comes back to The Devil.
Now, not all fundies take the whole thing as seriously as all that. And many who do literally belive this stuff don’t really spend a lot of time thinking about the implications of it all. But these ideas are all part of the package, the big old mess of ideas sloshing around in the Hillsonger’s brain pan.
So we get to Tony Abbot, who is not a Hillsonger but is a Roman Catholic. There’s what the americans call a “dog-whistle” in this message – something that is heard by the people that it’s intended for, and is inaudible to anyone else. And that dog-whistle is the charge that environmentalism and the climate science establishment is literally Satanic. Literally motivated and orchestrated by The Devil. Ol’ Scratch. Lucifer himself. Really.
Sure, it’s a long stretch to cast coal-fired electricity plants as fighting the good fight on the side of God against the general corruption of the age. Ludicrous, when you think about it, particularly given Jesus’ views on excessive wealth. The trick, as always, is not to think about it, but to know it. What Orwell called “bellyfeel”, what Steve Colbert calls “truthiness”, what the average Christian calls “knowing it in your heart”. You just know by faith that those greenie ideas are all from the devil, and so we should dig up and burn more coal just to spit in the devil’s eye as much as for any other reason.
We spent the first half of the game trying to get our vehicle back on track. Then, the vehicle fixed, we decided to go head to some snowy hummocks off on the horizon. The hummocks proved to be igloos, inhabited by penguin people.
Most of the rest of the party went down to the proverbial D&D tavern. All kinds of stuff going on down there: strange herbs, stranger sauerkraut. My guy, being strictly teetotal found a soapbox and stared preaching.
Well, my friends, you sure do have a beautiful town here – beautiful town, igloos spotless as an igloo can be, clean streets, public order. You are people with pride, people with dignity. I see people looking build a nest, looking to start a family, looking to build your community just like any clean-living decent folk of any peaceful, law-abiding town in the world will do.
But I’ll tell you, good people: you got trouble. Oh yes! Trouble, right here! Why, just down in that tavern there, right under your very beaks, bold as brass, sitting right out on the main street – not an ounce of shame, not a thought for the decent folk walking by.
Now sure, I know one or two of you might stop by once in a while, and no harm come of of it. But I tell you, they sell alcohol in there! Booze! Hooch! Sauce! By any name the demon drink and I tell you, friends, once that liquor gets its hands on a man he’ll spend all day down at the bar. Never mind the fish needing to be caught! Never mind the eggs sitting on the ice! Oh no, he’ll be in there drinking just one more for the road and that’s trouble, my friends, no doubt about it.
And if they ain’t drinking they’re playing cards, they’re playing pick two, nickel spin, ball in the hole, gambling away the family food to any cheap jack hustler in a shiny suit with an eye for a mark. Before you know it you’re out on the street of a night – nary a crevice to hide from the wind in and that’s trouble, friends, standig out in the night with the storms coming in.
And I tell you, friends, the drink is the least of it. Seedy, disreputable places like that place there, that place right on your main street, why they have their back rooms, and what goes on in those back rooms I don’t want to talk about. They have the lichen in there, friends! Black lichen, and sure enough the red toadstools, too, growing it under the floorboards. Robbing a man of reason! Oh, it starts small, a sniff here or there, a little in your tea, but soon enough a man is taking an ounce a day and licking the walls for more.
And what’s worse is they’ll sell it to children – that’s right! Chicks, still haven’t lost they baby feathers, innocent chicks, and they’ll hook ’em when they’re young, and how will you feel when the chick you reared to be an honest hard-working son or daughter taking care of you in your old age is down at the tavern – right there, I tell you! – down at the tavern spending his or her hard earned fish on low entertainment, frittering away the family inheritance.
Friends, I won’t even talk about the shameless hens in there – scarlet women! Why, that kind of talk will scorch a young man’s ears! Those hens will exchange favours for pebbles to line their own nests, when you see a married man slipping through town with a pebble in his beak, headed for the tavern why you know what he’s going to be doing with it. And where do you suppose he got that pebble? Why from his own family nest! Robbing their own, for a few minutes dance – head bobbing, flippers flapping, drunk as sin and they call it a good night out.
And it all comes around onto your community, onto your homes, because wherever you see vice you’ll find crime, and corruption, and violence right here on the streets, because that’s trouble, and you got trouble right here in this town. Right there in the barrels of drink, right there under the floorboards, right there lounging around in the chairs, a blight on your community, a stain on your fine main street, an insult to every clean-living citizen walking past – yes sir I can tell you’re angry, you have a right to be angry and its long past time that the good, decent, clean living people of this fine, fine town took matters into hand, I say – is that a pitchfork I see? Well, we’ll need more pitchforks, friends, more axes and more crowbars because by the time we are done I promise you every barrel of liquor and baggie of lichen will be out the door and on the fire and every drunken hustler and bum will get the flipper-slapping of his life and we will clean up this town, right here on this street, right here, right now!
“Make a charisma check.”
The good Reverend Josiah Ezekiel, sole remaining worshipper of the volcano-god Jehovah is as we speak striding toward the town tavern, surrounded by a pitchfork-wielding angry mob.
It can be hard to know what’s right, to be sure about the will of God. The devil lies: lies within lies, truth dressed up as falsehood, falsehood dressed up as truth. Sin must be fought where you find it. It was the sin of pride that brought down the old world; the sin of the builders of Babel. Oh, and that of Sodom, too, and all the rest. But the greatest sin is pride.
Josiah travelled with these companions through a portal to a … place. A wasteland with a sunless, cloudless, neutral grey sky – for all the world like being indoors. The tower was all that remained standing and whole. They entered. When Josiah saw the library in the base, stacked with books of the beforetime full of pride and lies, the word of the Lord came to him. His companions climbed the stairs in search of loot: avarice was strong in them. But Josiah stayed below and commenced to burn, calling on the cleansing fire of his god. There was little water on this plane – the books caught easily.
Demonic things assailed the tower, come to quench the fires of the Lord. But Josiah’s companions fought for their lives, and Josiah with them for a better reason. Fed by the papery blasphemies below, the tower caught. They fled upstairs, past rooms filled with devices mechanical and alchemical, alembics purifying ichors. Womblike pods in which gestated strange, misshapen creatures. All would burn. But Josiah’s time was not yet. They found a window near the crown of the tower, and made their escape.
They reassembled below. A man – perhaps – approached them. The word of the lord came to Josiah:
Who would live in this strange place, but a demon? But Josiah kept his peace. The stranger began telling his mix of truth and falsehood: that the men of the beforetime had made portals for transport, unaware that these portals passed through this void, and that demons had passed through. That they had sealed their portals against demonkind, but the seals were weakening. And that these portals must be closed.
True and false, no doubt. Closed? The portals should be destroyed, and the knowledge of them erased.
The party exited the strange between-place, arriving back in the portal room of the node they had just yesterday departed from. An old man tended the room. When the party emerged, he ran to the control panel and began working it. One of the party shot him: a mercenary, his heart black with murder. They left the portal room to find the node empty, it’s inhabitants gone, traces of violence left in the halls. But Josiah stayed behind, to carry out the will of his god. It must burn, it must all burn, burn and be cleansed. The fire of the Lord took little purchase on the control panel, but on the ring around the portal it caught, its net of arcane runes scribed with demon-blood lighting with green fire as good battled evil.
Josiah heard battle where his party had gone. Security bots, come to quench the fires. Josiah left the portal room to join the fight. Behind him, the containing ring around the portal burned and cracked, its wards weakening and failing, soon to expose a bare portal to the grey void.
And somewhere on some other plane, Imix – prince of elemental fire – laughed and capered with delight.
So. James T Hodgkinson attacked a basketball practice and shot some republican congressmen. I don’t condone this. But the american right is in paroxysms of outrage over the fact that he’s a leftie – a BernieBro.
The thing that shits me is this: ever since Clinton, ever since 1980, the american right has been dribbling on about how the Second Amendment is what protects American freedoms. According to them, the rock-solid, foundational guarantee of freedom is that any citizen, no matter how stupid or ill-informed, can choose to engage in armed revolt against the government if he is willing to risk his life to do it. Blah blah blah “totalitarianism is when people are afraid of the government; freedom is when the government is afraid of the people”. You maybe know the drill.
Suddenly some leftist actually does it – actually does the thing that every libertarian and right-wing bore in the USA has been dribbling on about for 35 years. Shoots at some congressmen at the cost of his own life. And all those right-wing bores are shocked, shocked, shocked.
It’s enough to make your eyeballs bleed. Maybe what they hate most is that some overweight not-a-real-man librul has done what they themselves could never quite sack up and do, despite all their chest-beatings and threats.
Maybe now they’ll realise that “government by whichever whackjob is most ready to shoot a congressman” is actually a *bad* idea. That government by armed mob is actually the opposite of freedom. That – for instance – Somalia is not a paradise.
Maybe. Probably not. But my God, don’t a whole lot of old tweets by right-wing american blowhards suddenly look dated and ill-judged.