Posts

Showing posts with the label MonthlyProjects
  Last Month's Projects Following my emerging pattern, it is well into April but here's my attempt at a round-up.   Physical make: Tiny OpenWRT -based server.  Nothing material has happened on this one.  I have done some research into the different packages available for OpenWRT (there are loads ).  I'll probably want to switch from mercurial to git if I want to have an internet-visible source-control server without compiling my own package.  The tiny machine might even have enough grunt for a Nextcloud instance, so long as it's a really small number of users. Coding make: I never even started coding for the Dungeon Crawler Jam .  I decided to try and implement Wave Function Collapse in the latest Gotm.io jam so I could get to grips with it.  Turns out WFC is far from trivial if you want a guaranteed solution in a reasonable time.  I spent so much time working on it that I failed to enter for either jam. However, I do have a work...

March Projects

So it's already halfway through March.  A perfect time to review my February projects! Last Month's Projects Physical make: Completed the steering wheel!  I managed to destroy it by accidentally levering the USB connector off the Arduino, but thankfully I had a spare and repaired it (and glue-gunned the damn cable on) and it's going strong! Coding make: I dun it !  ...but I didn't come back to the raytraced helicopter game.  I got sidetracked into looking into making a DOS runtime for the pico-8 subset of lua, and then sidetracked again into making Strike-16 for the gotm game jam. Reading:  The Templars: History and Myth by Michael Haag . So it turns out the Crusades were much more complicated than Christians vs Muslims.  There was plenty of politicking to go around in the Holy Land, and politicking in France eventually did for the Knights Templar.  It was also interesting to learn about the Inner Temple in London, and how St.John's Ambulance cam o...

Steering Wheel Finished!

Image
Here it is, immortalised with my atrocious photography skills! It's made mostly out of some old tongue-and-groove flooring samples, with some 4mm and 6mm ply in places.  What with the heavy-duty bearings and being screwed together, it's actually a really robust little thing! I decided to have a composite axle so I could fit the button wires down the centre. So I cut two long, thin beams of ply so they could fit through the very centre of the bearings.  Then I cut small sections out of the edges so that when pushed away from each other, they would lock into the bearings (i.e. not slide through them).  The other blocks you can see are holding the two long pieces apart so they can't fall out. I swapped out the middle block with a spring mechanism.  I cut two bits of ply that I could slide onto the beams from opposite sides.  Then I inserted a section of bamboo skewer between those bits to hook the springs onto.  As you can see, I used screws to secure the othe...

February Projects

  Last Month's Projects Physical make: This is not finished, but is going okay.  I decided to make some gears so 90 degree of wheel turn is about 150 degree of potentiometer turn.   I encountered a problem trying to 3D print the gears: the weather and workshop was so cold the filament snapped as soon as the printer head moved! So I had to wait for some slightly warmer weather for the printer.  A silicone mould is currently setting around them so I can cast them in more durable resin. Coding make: DOS Raytraced Helicopter Game.  This has not happened.  I've started writing a proper X-mode VGA manager class, and thought carefully about how to do the pixel-plane rendering, but that's about it.  I'm going to switch to update my F-Z game and post it on gotm.io but I'll be back on the raytracing project once that's done. Reading: Black Holes, Wormholes and Time Machines by Jim Al-Khalili . This is a reasonably dated book (pre-Higgs Boson and Gravitat...
 January Projects Yeah, I know January started a while back now, but my brain is still catching up. Physical make: New USB steering wheel.  My previous one was made with a Teensyduino , which doesn't seem to behave in exactly the same way as vanilla Arduino Micro clones.  The wheel itself has lasted impressively well considering it's made out of cardboard with some really shoddy soldering.  Even more so considering it went through some of its life with pedals attached.  Unfortunately, it has now stopped behaving properly and re-figuring out how the Teensyduino thing works makes me feel tired.  So I'm building a new wooden-framed one, with real bearings and everything! Coding make: As you might have seen, I have started to try my hand at raycasting in C++.  I am going to try and get a playable DOS helicopter game made for the Kajam event .  I'd like it to include shooty missions and transport missions.  Maybe in the fullness of time it'll e...

November Projects - Review

With Christmas right there *points*, I'm not going to set any December projects for myself.   This term at school has been gruelling, close to the hardest term I've ever had in teaching.  I have managed to get through it and get some stuff done though, so it's not all gloomy defeatism. Physical make: Loganberry frame/trellis.  I did finally finish it and I'm looking forward to properly clearing up the workshop so I can get some more physical makes done.  The garden also needs a huge tidy-up, with cutting back and weeding.  Maybe I'll get out there over the Christmas break, but I'm not going to beat myself up if that doesn't happen. Coding make: Turning my Silkworm tribute into an entry for the DOS Games Fall Jam .  I submitted a playable almost-level.  It was pretty disappointing from the content side - literally less than a dozen helicopter swoops and a simple boss.  From a technical side, it was much more of a success.  During the course...

November Projects

Last Month's Projects: Physical make: Loganberry frame/trellis.   This still didn't happen. :( BUT! All the timber that was clogging up the workshop has now gone (except for the bits I need for the trellis).  So this might actually get done this month.   Coding make: Turning my Silkworm tribute into an entry for the DOS Games Fall Jam .     The deadline was extended for another couple of weeks, so I'm going to continue with this.  I've learned a lot about how enormously fat the standard C++ libraries are in terms of how they bloat up the size of the final executable.  The .exe is limited to 64kB in 16-bit real mode, so having 'cout' take up 6kB of that is just unreasonable.  <iostream> also needs to go, but I don't need to murder that just yet.   Reading: My Past & Thoughts by Alexander Herzen.   I finished it! :D   The book made really interesting reading, tying together lots of disparate things I knew about 19...

October Projects

Last Month's Projects:   Physical make: CnC router. This is a weird one.  I haven't been out to my workshop all month - it's full of 8-foot lengths of 2"x1" which I had picked up on Freecycle.  My intention was to make a frame to support some loganberry plants I have in the garden before the winter weather closed in.  The howling wind and hammering rain tell me I've kinda missed that boat.  But maybe there'll be a window of some clear weather in October when I can get that sorted. To be fair, teaching Septembers are pretty tough going and the COVID measures are making routines (which would normally make things much easier) very hard to figure out.  So my energy levels have been pretty low.   Coding make: Exploring DS Homebrew   This has actually made a great start!  Three of the students have decided to team up and make a project together!  So far we have only explored backgrounds and the beginnings of rendering sprites.  I want t...

September Monthly Projects

Last month's projects: Physical make: CnC router   Well, I dug around in my pile of projects and pulled together all the disparate parts of this project, but not a lot else.   I now have the pi, a monitor and a motor controller running off of an ATX supply.  What I don't have is the motor, threaded rod or rotary encoder actually installed on the sliding tray. I'm going to roll this over into September.  It shouldn't be too big a step now to at least attempt getting them installed. Coding make: I did it!   It wasn't the helicopter game I imagined, but it was an entry to the jam. :) Reading: My Past & Thoughts by Alexander Herzen.   I haven't finished this yet, but I am really enjoying it!  His writing (with the translation) is really easy to read and gives loads of glimpses into 19th century Russian life.  I've just got to his letters from Paris and Italy after he's finally escaped from Russia. September's projects: Physical make: CnC ...

Lowrezjam 2020 entry: F-Z

      This evening I submitted F-Z , my entry for Lowrezjam2020 . I was going to make a helicopter game, but in 64x64 pixels I just couldn't get anything to actually look like a helicopter!  So I completely changed my mind and made an F-Zero style racer instead. In the limited time allowed for the jam, I only managed to make a single track.  However, the game was reasonably polished: it had a title-screen, menu, AI opponents, music, sound effects and a 'finished' race outro - with a particle effect for a podium place! It was the first time I'd written a racing AI.  I basically baked the AI instructions into the track tilemap, giving each AI-sector a heading value.  The runtime code loaded the sector polygon and calculated a middle-line for the sector using the polygon vertices and the heading.  The runtime AI first checked if it was way off the heading for the sector and corrected for that.  If the heading was okay, it checked if it was too...

August Monthly Projects

Image
Last month's projects: Physical make: Model Starfury DONE! :) Coding make: Write a DOS Mode-X tribute to Silk Worm .  It's getting there... I'm taking a break from it this month though. Non-coding make: Fiction sci-fi fragment about a hand-to-mouth existence on a frontier world. I didn't get round to this at all.  I might just drop to three projects each month. Reading: Russian Thinkers by Isaiah Berlin .  I finished it!  It was a really interesting read - I'd recommend it. August's projects: Physical make: CnC router.  I'd started this ages ago, and I have a platform which slides from side to side when you push it.  This month, I want to get the Raspberry Pi and motor controller to be able to control the movement of the platform.  Maybe I'll get further and build the mounting for my Dremel, but baby steps... Coding make: I'm going to write an entry for Lowrezjam 2020 .  My super-detailed plan which is in no way me making it up as I go along: t...

Babylon 5 Starfury Model

Image
After two months, I have finally 'finished' the Starfury model. The painting is really untidy in places, and I really could not be bothered with the dozens of tiny water-slide transfers.  That said, I am still stamping this as DONE because it was getting really tedious towards the end. I love the Starfury design as a nod to Newtonian mechanics in sci-fi.  It is the most believable space fighter I've ever come across and I'm really glad I have finally got round to building this. The model design itself has many flaws.  Many of the pieces didn't fit snugly together, and the lower guns had to be literally chopped in half to get them stuck on.  They must have known of these flaws and just decided to ship it anyway.  After all, it's only fanboys like me that would buy it. I didn't have the right grey to paint it, so I mixed the colour from Vallejo's Cold Grey and some cheap white acrylic.  It's come out a little more blue than I wanted, but not badly eno...

Update: SilkWorm Tribute

Lots of trial, error and frustration has got me to this stage: This video was screen-grabbed from pcem running as a 386SX. 386s are SLOW AS ALL HELL, so I had to do some trickery for the parallax scroll: Use a 'trash buffer': I set up the VGA so there is 32px of invisible data to the left and right of the display (and also above it).  This means I don't have to worry about clipping my sprites.  If they're even partially on-screen, there's enough trash VRAM around the screen that it won't wrap round or corrupt other pixel data. Shrink game area: use a status display to shrink the rendered game area.  I did this with the VGA's Line Compare functionality, so that when it reaches pixel row 176, it will reset to render from VGA offset 0x0000.  (I also had to change the Pixel Panning Mode bit in the Attribute Mode Control Register because I use hardware panning). Solid colour blanking: this can be done with an asm rep stosb and a suitably large value in cx.  ...

July Monthly Projects

Last month's projects Physical make: Build a model Starfury I have had in the cupboard for literally decades . This is going fairly well but isn't finished.  I've had some delays waiting for supply deliveries but mostly I've been taking my time over it. The model has plenty of gaps where the pieces don't quite fit, and a glaring design-fail with the lower gun pieces.  I'm going to keep this one going this month and post photos once it's done. Coding make: Write a DOS Mode-X tribute to Silk Worm .  This has involved so much learning.  The sprite code took a huge amount of work, and now I'm writing tilemap code that is going to have to be really fast if it's going to be usable.  Most of the screen is going to have to be rendered every frame if it's going to look anything like the original.  So I'm keeping this one on for July as well.  I really want to get something recognisable and playable (even if it's not properly complete) before I ...

VGA Mode-X Sprite Rendering

As part of my SilkWorm project, I've got a transparent sprite-rendering system going. It's over-complicated, but it works quite quickly.  I'm writing this more as a reminder to my future self than as a HOWTO, so I'll not go into the gory details. The system is inspired by a really nice idea from StaticSaga and 36rKATPURPY on the Discord server linked to a DOS game jam .  Their system is simpler and more data-efficient.  My code is clunky but for the moment seems to work, so I'm leaving it as is until it breaks or needs speeding-up. The problem Mode-X stores pixel data in planes.  It can use VGA hardware to copy 4 pixels at a time, but only on 4px-aligned boundaries.  Michael Abrash' Black Book covers one method of how to do transparent sprite rendering without the 4px alignment, but it involves uploading 4 copies of each sprite to VGA RAM, and setting the plane mask for every 4-pixel copy.  To me, this seemed like a waste of VGA RAM, and any speed boost w...

June Monthly Projects

Last month's projects They weren't 100% successful, but I got some stuff done. Wall-mounted PC: completed Coding make: demo submitted to game jam. Still plenty of work that could be done to it, but I'm pleased with what I achieved. Non-coding make: Westworld-style Shadowrun setting.  This was slightly disappointing.  I read plenty about San Francisco and pored over maps and such.  I came up with some nebulous ideas, but with nothing concrete to show for it.  A particular stumbling block for me was that I know nothing about San Francisco.  Making a setting based on a real-world location I know nothing about seems like I'm setting myself up to fail - it'd never be believable to anyone who actually knows the city. Reading: This was hella slow going, but I wanted to study the book (and still do). Despite incomplete projects, I feel like making a shortlist was pretty useful for helping me focus on particular ideas.  So here's this month's projects: June'...

May Reading Project

This month I have been mostly reading The Conscious Mind by David J. Chalmers . It's a full-on philosophy book, so it was really hard going.  But I did finish chapter 1! Why so slow? Apart from being a pretty slow reader, I only got one chapter read because I was taking Cornell notes as I worked through it. They take a lot of time and effort.  I understand better now why the students I teach hate taking them so much. There were a few important benefits for me though:    - Using them has left me with a feeling that I do understand what I've read    - For the most part I can remember the key ideas    - They provide a really nice summary to read over when I come back to take on the next chunk reading I'll continue with Cornell notes for books that I really want to study rather than just read. For books that I want to read, but might want to refer back to, I'm going to try sticky page-markers instead.  So for popular science or history books, ...

Wall-mounted PC: Finished!

Image
The rest of the project went so smoothly, there's very little to add to the previous post ! The standoffs for the motherboard screwed right into drilled holes in the MDF without needing glue. The HDD and PSU are held to the board by twisty-ties that go through holes in the board.  I didn't trust twisty-ties to hold the PSU's weight though, so I drilled holes for a couple of dowels and glued them in.  The PSU rests on top of them nicely with the twisty-ties stopping it from falling forwards. The shelves are furniture board off-cuts which are screwed to the battens from behind.  Amazingly, I managed to cut accurately enough that they fitted really snugly to the battens.  There is a bit  of give if you press them, but seeing as they're not going to hold anything of real weight I left them as they are. I'm not entirely happy with the cable-mess.  A little more forethought could have had them tucked behind the MDF board, but meh. I've installed...

Wall-Mounted PC: Progress!

Image
The actual physical progress I have made is a monitor wall-mount made from battening and MDF. See the monitor hanging magically with no visible support! I made a frame for the back of the monitor from 3 pieces of 6mm MDF: I knew the bolts I had could only go in so far before I hit resistance (presumably from the internal components).  As far in as I was confident tightening them would leave ~9mm gap.  So I figured 12mm of MDF would be fine. WRONG.  It turns out you have far less wiggle-room on these things than I thought. So I had to countersink them through the outer layer.  That gave me the fear though because the outer layer would be the only thing really holding the monitor onto the wall bracket.  So I decided to glue the layers together as well as having the bolts.  It took a couple of tries to get the countersinking to the right depth, but it got there! And before I did anything else, I tested that the panel from the wall-brac...

Deus Heist

Image
I managed to make a playable level of a DOS heist game . It's a text-based game, built for 16-bit DOS, so in theory , it should run on a 286 (albeit as slow as a sedated two-legged dog).  I haven't had any time for optimising it, and the code is hideous, but it is  technically playable. The main feature is the visibility check, modelled on the game Monaco: What's Yours is Mine . It scans out from the player, checking if a cell blocks line-of-sight or not.  I made it fairly efficient by splitting the check into quadrants (N, E, S, W) and scanning cells between two edge-lines.  If it encountered an opaque block, it would split the scan up and recurse. On DOSBox, it gets a little slow when you can see a lot of the screen.  I imagine on a 286, this would crawl.  However, the game world does not change at all in the current version, so there are no guards going to creep up on you while you're lagging. I could also help things by designing the map...