Yesterday, I completed a project I've been working on for awhile I decided to name Bomb the Bugs. You can play it in your browser by following this link:
https://dgalga.itch.io/bomb-the-bugs
Bomb the Bugs was inspired by the Nintendo title Wrecking Crew. I played Wrecking Crew for the first time this year, and I found the design immediately approachable. I also tried playing the sequel, Wrecking Crew '98, which I did not find as approachable.
Wrecking Crew gameplay:
https://www.youtube.com/watch?v=-7F-7MtkHD0
Wrecking Crew '98 gameplay:
https://www.youtube.com/watch?v=Y0KodgKLh_Y
Wrecking Crew is a clunky arcade title. Each level is a puzzle, but you cannot advance unless you complete the entire puzzle. So, if you try to complete the puzzle in the wrong order, you can easily become stuck in a situation where you have to let an enemy kill you in order to progress. Worse, if you've managed to kill all the enemies you can reach, you have to wait for a fireball to spawn to kill you. To me, this design is problematic.
'98, on the other hand, embraces the matching design of most popular puzzle games and is turned into a cluttered competitive title in the process.
There are obvious elements shared by both titles. However, I didn't feel that '98 was a true sequel, and the clunky design of the original title still feels ripe for improvement.
I've been tinkering with this design ever since I first played it this year. Initially, I was frustrated by an inability to change Wrecking Crew into something I thought was worth money. When I finally did come up with something, it was a title that would require either more advanced programming skills than I previously possessed, or 3D.
The idea was this:
In the wake of the Chernobyl disaster in 1986, crews were sent out into the area surrounding the exploded nuclear power plant in order to try and contain the disaster. People were evacuated, pets and animals were slaughtered, the top layer of the ground was buried.
The game idea I had was to be set in similar circumstances. Only, replace Chernobyl with a large-scale biological disaster stemming from a chemical plant. The player would be a member of a team sent out to destroy human habitations as part of efforts to ensure people and animals infected by the disaster were cleared or put down.
The game design would need either fake 3D a la Fez, or a fully 3D environment. The dream gameplay would be a puzzle-take on the destruction from Red Faction Guerrilla:
https://www.youtube.com/watch?v=H5bv4RIOc_s
I couldn't manage that on my own, though. I didn't investigate going 3D, as I'm still shying away from the 3rd dimension in all of my games, and I wrote off Fez's method of fake 3D due to the technical skill that was required.
Now that I think back on it, there's no reason I couldn't try doing 3D with sprites someday. Instead, I settled on a method of using an array to generate a map of tiles when a game first starts:
var wall_types = ["X","H","O"]
var walls = {wall_types[0]:preload("res://Walls/BaseWall.tscn"),
wall_types[1]:preload("res://Walls/Ladder.tscn"),
wall_types[2]:preload("res://Walls/BustedWall.tscn")}
var level_map = [
"XXHHOXXHHXXOHHXX",
"XXHHXXXHHXXXHHXX",
"XXHHXXXHHXXXHHXX",
"XXHHXXXHHXXXHHXX",
"XXHHOXXHHXXOHHXX",
"XXHHXXXHHXXXHHXX",
"XXHHXXXHHXXXHHXX",
"XXHHXXXHHXXXHHXX"
]
var map_height = -1
var map_length = -1
var map_test = 0
var map_pos = [] #array of map positions
var map_replacement_pos = []
func _ready():
fullscreen_sprite.visible = false
for line in level_map:
map_height += 1
for chr in line:
map_length += 1
if map_test != map_height:
map_length = 0
map_test = map_height
wall_instance(chr)
func wall_instance(wall_type):
var wall_inst = walls[wall_type].instance()
behind_player.add_child(wall_inst)
wall_inst.global_position = Vector2(map_length,map_height) * tile_size - \
build_point_zero
if wall_type == wall_types[0]:
map_replacement_pos.append(wall_inst.global_position)
map_pos.append(wall_inst.global_position)
I above code is still kinda cool to me, though overall it's not that special. It's GDscript that takes an array of lines like
"XXHHOXXHHXXOHHXX"
and compares these lines to a filter of expected wall types. In this case, X = basic wall, H = ladder, and O = a point the enemy units can spawn from. This allows you to easily spawn in an array of tiles of whatever kind you want, in this case Area2Ds, instead of needing to rely on Godot's occasionally unhelpful built-in Tilemap system.
I couldn't make a game within the parameters I set for myself that was worth money (imo) and better than Wrecking Crew while embracing that original design influence. So, I eventually decided to change the design.
I found myself picturing a city of sentient buildings, with the player acting as one of a limited number of agents with the ability to cleanse these buildings of infestation. That's where the "O" in the above line comes from: I was picturing a game where, if the player took too long, enemies would burst from previously uninfected wall panels and increase a global countdown to failure.
I still have the bugs bursting from walls, but the longer this year went on the less I was sure about the rest of it. I resolved to build the most basic, lazy version I could. And, I've now succeeded:
https://dgalga.itch.io/bomb-the-bugs
This year has been hard. It's also been the most productive year I feel like I've ever had. I'm still a long way off from where I want to be, and I'm honestly not sure what to do with my time as the deadline for when I resume school looms closer.
Starting next month, I'm going to try evaluating games posted in the r/PlayMyGame subreddit. I've been frustrated by feeling disconnected from the game making community at large, and game jams haven't done much for my need to discuss design. The boardgame designer group I frequent is no longer a complete substitute either. So, I'm going to try playing other's games and giving my feedback on them. I'll post another entry next month accordingly.
Until then.
No comments:
Post a Comment