Since Mazer Game Design and Network Security, I've been learning recently more about Network Security, now especially having to complete the assessments for some of the parts of the CCNA Security and CCNA CyberSecurity courses I've enrolled myself into.
On the Cybersecurity side of things, we've done some pretty interesting learning around protocols as described in Mazer Game Design and Network Security. This has by far been the most interesting aspect.
I like protocols - I designed a simple named pipe IPC communications mechanism between a Windows Service and a .net application for Citrix's App-V implementation and while doing it, had to create a simple protocol. That started my interest in the broker pattern and I then designed a protocol for that project. I also used the Citrix Virtual Channels in The C# COM C/C++ divide which was basically a tunnelling protocol that you could send custom data to and from Citrix Receiver. I like protocols.
That said the aspects about Routers, Switches, Firewalls, IDS/IPS and some of the specialised security appliances out there is also interesting, and I guess if you really want to know about security, you need to know about the flaws and design of networks and their devices. I'm learning about network attacks at the various protocols and layers of the OSI model at the moment... TCP Syn floods, TCP reset attack, TCP session hijack, DHCP starvation, MIM attack, DNS shadowing, ARP Cache poisoning, DNS tunnelling and then the more common things like command-based attacks like SQL injection and XSS - that sorta thing.
On the CCNA Security side of things, this seems mostly down to configuring Cisco routers, which is interesting but there are a lot of commands to remember when setting things ups like SSH/SCP, users and role-based, ACLs and encryption. One of the things I've been interested in doing for a while is setting up a mesh of connected smart agents. To what end, I'm not too sure but they'd all work like collaborating routers, sharing path and route information between neighbours etc. One day...
Furthermore, I've learnt how to configure NTP, SNMP, Syslog, Routing protocols like OSPF(Open Shortest Path First), AAA and securing the data, control and management planes on a Cisco Router. It's fair to say that the CCNA Security course is mostly about practical application utilising Cisco equipment. One thing I do like particularly about Cisco is that they make great protocols.
In other news, I've already given the presentation of the game I designed called Mazer(see here), which was a creative exercise more than technical but still time-consuming all the same.
I've recently been working on the design document for Mazer.
You can read my final game design document for Mazer here:
{google_docs}https://drive.google.com/file/d/1M5-VIrGOBTUXmdke1moWMGX11Mcjdb4x|width:800|height:500|border:1|border_style:solid|border_color:#000000{/google_docs}
I've mostly finished it but it's taken a lot out of me, and I even stopped going to the gym and taken some time off. That said, I have managed to get out for my weekly runs. Not very long distances but just about the right distances to keep me sane. Here are my last few runs...
This is one where I sort of got lost and ended up in Shoreditch park which was a lovely detour:
This one is my 'left' route - basically, instead of turning right at the canal, I turn left.
Besides this, I'm Now working on a practical, technical prototype for Mazer...
I've got mixed emotions about this because while it's got a lot more programming involved, its a lot more rushed and I'm going to have to cut corners in order to get the prototype out in time. I think I'll have to realise that it's just a prototype - if I can't get the enemy AI done, then too bad, I can't develop an entire game in a week!
One thing I have really enjoyed about using Unity is the visual preview of some of the concepts I've learnt in the past around the z-axis, the local object space vs the world space and application of vectors(as forces) to rigid bodies.
I sort of poo-pooed Unity because it hides the complexity of game development, arguably it hides the tedious and time-consuming plumbing, and well game development, despite that is still quite complex. It has been quite enlightening.
It's also interesting because about 5 years ago when it first came out(Unity), I wasn't that interested in it, but the dev next to me at AppDNA had been playing with it and showed it to me...I looked at it briefly and said oooh-oooh and went straight back to writing my code (I was coding for a release).
Though interestingly enough, some of that has actually got me thinking a little critically. For instance, as I've been working through my prototype (I've got a week to do it) and I've found that while it's easy to get some really advanced aspects of game development working for you like the physics, audio, mesh rendering and scene construction etc., I feel somehow that I'd like to be involved in how that actually comes to fruition.
Obviously from a practical level, I've only got 1 week, so that's not feasible and that's probably why we've using a pre-built game engine instead of one from scratch and I'd probably learn that stuff later and its just good to be able to use the concepts and understand how to before delving into how to actually construct them from scratch. It's a bit like wanting to know how TCP/IP protocols and packets work as opposed to just sending something off to a Library like socket.Send() in python. Obviously, this is only because I'm interested(And I've done some learning around 3D), not because I absolutely need to know it - but I could argue that this is similar to using math theorems and not understanding the proofs.
I'll get over this when I'm given a game to complete and I need to engineer the rendering or physics components from scratch, in a week!
Anyway with my prototype, I've managed to get the following concepts coded up:
- Level Music and textured walls and assets including the fuel pickup
- Fuel score counter and count down timer is rendered as GUI interface
- Player animates with its own flashing siren on its head! It also moves. "It" is a robot.
- Uses collision detection and triggers to resist player and detect dig/destroy wall action and collect fuel
- The timer counts down and on destroying a wall, a time penalty is deducted from the time
- Fail and Win music and ending of the game (stopping the timer, game loop and thus player movements etc)
- Level is entirely autogenerated using a simple algorithm that randomly removes walls and each room is represented as a 4 sided square.
- Random placements of fuel and player's starting position
- As time ticks and fuel is collected, the score changes in-time as expected
It's not much, and it's moved on since this but it is my first ever game which is relatively complete, conceptually anyway.
I ported my 2D C++ for Mazer2D and so was able to re-use the concepts to create the game environment procedurally. I had to change the code a little because the coordinate system is different in Unity. It starts at the bottom right, while SDL starts at the top left. Not a biggie, just needed a bit of algorithm tweaking.
I won't be winning any design prizes for this, but you can't lose if you're not playing!