summaryrefslogtreecommitdiff
path: root/Extras
blob: 0368e7e590da58661500be3aed6993022186d379 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
BulletLabRemix II, Extras
2014-06-06

Content
------------------------------------------------------------------------------------
About the source code
About resources used in the game
The development

About the source code
------------------------------------------------------------------------------------
I'm not a rigorous coder. All sources are written casually.
You can even find two code chunks in one file with different styles...
But generally, I:
	Use tabs (width=4) and indent in Allman style;
	Don't like extra spaces;
	Prefer commas if possible;
	Don't like very long names.

And, the source code is bloated. global.h defined ~200 lines of global variables.
Imagine that.

Well, the reason is that BLRI start as a huge monolithic source file - main.cpp.
It's once a ~100KiB file, and have more than 10k lines of code. One day I found it
impossible to maintain such code and split it into several .h file. BLRII took the
code base of BLRI. That's why. BLRIII will be a complete rewrite and I hope this
would fix the problem.

Well, let's observe each source file.

background.h		Defines and implies background animation.
effects.h			implement several simple in-game effects.
global.h			Defines global variables and routines.
hgeft.h				Free type interface for HGE. It's considered buggy and 
					incomplete now...
levels.h			implement the levels.
libcgh.h			Chris' Game Helper interfaces.
loading.h			Resources for the loading screen.
menus.h				implement the menus.
music.h				Music playback and looping.
scorec.h			Record highscores.
scoresystem.h		The BLR Multiplier scoring system.
towernbullet.h		implement towers and bullets.
hgeft.cpp			Free type interface for HGE. This is the implementation.
libcghEx.cpp		Extra routines for the CGH.
main.cpp			Contains main(int,char**), and player controls.

About resources used in the game
------------------------------------------------------------------------------------
Most resources are self-made...

b_diff.png			A café wall illusion background
b_inter.png			A swirl illusion background
b_leaves.png		Taken from a Windows 3.1 desktop background, unused
b_null.png			Simple white background
blnsns.png			Font file. Font name "Berlin sans"
credits.png			Resources used in the credits screen.
e_leaf.png			Texture for leaves background effect. Taken from a Windows 3.1
					dekstop background.
e_sflake.png		A snow texture for background effect. Taken from public domain.
e_skyitem.png		Sky background resources. Taken from HGE tutorial. Cloud is
					from public domain.
help.png			Built-in help.
menus.png			Menu textures.
ss.png				Sprite Sheet. Taken from BLRI. Made with inkscape.
title.png			Title sprite. Pre-processed with inkscape.
All resources are processed or made with GIMP.

menuin.ogg			Menu effect. Made with OpenMPT.
menuout.ogg			Ditto.
tap.ogg				Widely used. Taken frome HGE.

BLR2_TR01.ogg		Background music for level1. Original by Noby.
BLR2_TR07.ogg		Background music for level7. Original by Chris Jarvis.
BLR2_TR09.ogg		Background music for credits scene. Taken frome BLR2_TR07.
CanonTechno.ogg		Bonus? Made by Chris Xiong.
Softwares used: OpenMPT, Rosegarden, Cakewalk Sonar 6.
Syntheis: QSynth+Fluid R3 sf, Roland Groove Synth, Cakewalk TTS-1, Roland
Super Quartet.
Proprietary softwares are all cracked. I can't afford them now.

The development
------------------------------------------------------------------------------------
As a student, developing such a game will never be supported...
So, the development is "well hidden".
The post-0.2.2 development are mostly done under Windows(8/8.1). After that, I
migrated the main platform to Debian GNU/Linux. I'm using the unstable distribution.
I'm not a true developer but I'm really one of those who like to like on the edge.
Recently I installed Archlinux, which has taken me to the "bleeding edge". "Edges"
are different from "borders", they are more sharp!

Well, I first played BulletLAB when I was 13. It's easy enough and I passed the easy
levels without any trouble. Then I tried normal and hard, all done without much
difficulty. Then comes the "Extreme" mode, in which you have to pass the whole game
without misses. That took me a long time...

In March 2013, I was pretty bored (in fact, preparing a contest). And I found the
small flash game again. I decompiled it, and started modifing it. Soon I found this
interesting, and made the game VERY difficult. I even "released" that.

However, flash is really inefficient. As the bullet number grows, FPS falls
violently. So a rewrite is planned.

First things first, how to draw so many objects on a screen? An STG game that has a
file "hge.dll" in its directory came to my mind. I could still see the fancy effects
it has. I googled for hge and found that it's a hardware accelerated game engine.

Well, that's it! I wrote several simple scenes as practices, then BLRI started. I
found HGE really powerful and can draw 2000 objects in 1000FPS. F***in' awesome!

BLRI's source code growed rapidly. Soon it's almost 100KiB. It's almost impossible
for me to maintain so big a file. That's why the source code is presented in many
headers.

When BLRI reached 0.8.6, BLRII was forked from it. BLRII started as a level testbed
for BLRI. However, BLRI was frozen (this term is borrowed from the debian project, and
is not at all releated to Cirno) before these levels can be added to it. If they
*were* added, the source code of BLRI would no longer be human-readable.

As BLRI was released (as 1.0.3SR), I can relax myself a bit. During that I found
hge-unix, which can port almost any hge-based game to UNIX. I tried it and it works!

Then I started modifing hge: migrating the Windows version to DirectX 9, implement
stubbed functions in hge-unix, deprecating libbass and migrating to OpenAL...

Soon I completed them all. Then I picked up BLRII (around Oct. 2013), which already
has free-shaped lasers implemented.

To declare my ambition to change BLR, the whole level.h was removed (with a backup
of course).

However this didn't change too much. Almost all levels were ported back to the
current version later.