burn 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. data/LICENSE +621 -0
  2. data/README.md +467 -0
  3. data/Rakefile +1 -0
  4. data/bin/burn +14 -0
  5. data/lib/burn/builder.rb +65 -0
  6. data/lib/burn/cli.rb +187 -0
  7. data/lib/burn/debug.rb +25 -0
  8. data/lib/burn/dsl/channel_stream.rb +105 -0
  9. data/lib/burn/dsl/declare.rb +42 -0
  10. data/lib/burn/dsl/dsl_base.rb +31 -0
  11. data/lib/burn/dsl/music.rb +36 -0
  12. data/lib/burn/dsl/note.rb +125 -0
  13. data/lib/burn/dsl/scene.rb +278 -0
  14. data/lib/burn/dsl/sound.rb +30 -0
  15. data/lib/burn/dsl/sound_effect.rb +91 -0
  16. data/lib/burn/dsl.rb +8 -0
  17. data/lib/burn/generator/assembly_music.rb +47 -0
  18. data/lib/burn/generator/assembly_sound_effect.rb +33 -0
  19. data/lib/burn/generator/c_source.rb +54 -0
  20. data/lib/burn/generator/template/mus_template.s +49 -0
  21. data/lib/burn/generator/template/template.c +88 -0
  22. data/lib/burn/generator.rb +3 -0
  23. data/lib/burn/tools/mac/cc65/asminc/_file.inc +27 -0
  24. data/lib/burn/tools/mac/cc65/asminc/_heap.inc +35 -0
  25. data/lib/burn/tools/mac/cc65/asminc/apple2.inc +64 -0
  26. data/lib/burn/tools/mac/cc65/asminc/atari.inc +1175 -0
  27. data/lib/burn/tools/mac/cc65/asminc/atari.mac +59 -0
  28. data/lib/burn/tools/mac/cc65/asminc/atmos.inc +110 -0
  29. data/lib/burn/tools/mac/cc65/asminc/c128.inc +214 -0
  30. data/lib/burn/tools/mac/cc65/asminc/c16.inc +9 -0
  31. data/lib/burn/tools/mac/cc65/asminc/c64.inc +212 -0
  32. data/lib/burn/tools/mac/cc65/asminc/cbm.mac +50 -0
  33. data/lib/burn/tools/mac/cc65/asminc/cbm510.inc +182 -0
  34. data/lib/burn/tools/mac/cc65/asminc/cbm610.inc +110 -0
  35. data/lib/burn/tools/mac/cc65/asminc/cbm_filetype.inc +34 -0
  36. data/lib/burn/tools/mac/cc65/asminc/cpu.mac +24 -0
  37. data/lib/burn/tools/mac/cc65/asminc/ctype.inc +29 -0
  38. data/lib/burn/tools/mac/cc65/asminc/em-error.inc +49 -0
  39. data/lib/burn/tools/mac/cc65/asminc/em-kernel.inc +106 -0
  40. data/lib/burn/tools/mac/cc65/asminc/errno.inc +36 -0
  41. data/lib/burn/tools/mac/cc65/asminc/fcntl.inc +21 -0
  42. data/lib/burn/tools/mac/cc65/asminc/generic.mac +55 -0
  43. data/lib/burn/tools/mac/cc65/asminc/get_tv.inc +22 -0
  44. data/lib/burn/tools/mac/cc65/asminc/joy-error.inc +44 -0
  45. data/lib/burn/tools/mac/cc65/asminc/joy-kernel.inc +85 -0
  46. data/lib/burn/tools/mac/cc65/asminc/longbranch.mac +88 -0
  47. data/lib/burn/tools/mac/cc65/asminc/lynx.inc +279 -0
  48. data/lib/burn/tools/mac/cc65/asminc/modload.inc +78 -0
  49. data/lib/burn/tools/mac/cc65/asminc/mouse-kernel.inc +180 -0
  50. data/lib/burn/tools/mac/cc65/asminc/nes.inc +93 -0
  51. data/lib/burn/tools/mac/cc65/asminc/o65.inc +150 -0
  52. data/lib/burn/tools/mac/cc65/asminc/opcodes.inc +509 -0
  53. data/lib/burn/tools/mac/cc65/asminc/pet.inc +54 -0
  54. data/lib/burn/tools/mac/cc65/asminc/plus4.inc +86 -0
  55. data/lib/burn/tools/mac/cc65/asminc/ser-error.inc +54 -0
  56. data/lib/burn/tools/mac/cc65/asminc/ser-kernel.inc +162 -0
  57. data/lib/burn/tools/mac/cc65/asminc/signal.inc +57 -0
  58. data/lib/burn/tools/mac/cc65/asminc/smc.inc +245 -0
  59. data/lib/burn/tools/mac/cc65/asminc/stdio.inc +70 -0
  60. data/lib/burn/tools/mac/cc65/asminc/supervision.inc +76 -0
  61. data/lib/burn/tools/mac/cc65/asminc/tgi-error.inc +52 -0
  62. data/lib/burn/tools/mac/cc65/asminc/tgi-kernel.inc +234 -0
  63. data/lib/burn/tools/mac/cc65/asminc/tgi-vectorfont.inc +70 -0
  64. data/lib/burn/tools/mac/cc65/asminc/time.inc +59 -0
  65. data/lib/burn/tools/mac/cc65/asminc/utsname.inc +46 -0
  66. data/lib/burn/tools/mac/cc65/asminc/vic20.inc +75 -0
  67. data/lib/burn/tools/mac/cc65/asminc/zeropage.inc +26 -0
  68. data/lib/burn/tools/mac/cc65/bin/ca65 +0 -0
  69. data/lib/burn/tools/mac/cc65/bin/cc65 +0 -0
  70. data/lib/burn/tools/mac/cc65/bin/ld65 +0 -0
  71. data/lib/burn/tools/other/cc65/asminc/_file.inc +27 -0
  72. data/lib/burn/tools/other/cc65/asminc/_heap.inc +35 -0
  73. data/lib/burn/tools/other/cc65/asminc/apple2.inc +64 -0
  74. data/lib/burn/tools/other/cc65/asminc/atari.inc +1175 -0
  75. data/lib/burn/tools/other/cc65/asminc/atari.mac +59 -0
  76. data/lib/burn/tools/other/cc65/asminc/atmos.inc +110 -0
  77. data/lib/burn/tools/other/cc65/asminc/c128.inc +214 -0
  78. data/lib/burn/tools/other/cc65/asminc/c16.inc +9 -0
  79. data/lib/burn/tools/other/cc65/asminc/c64.inc +212 -0
  80. data/lib/burn/tools/other/cc65/asminc/cbm.mac +50 -0
  81. data/lib/burn/tools/other/cc65/asminc/cbm510.inc +182 -0
  82. data/lib/burn/tools/other/cc65/asminc/cbm610.inc +110 -0
  83. data/lib/burn/tools/other/cc65/asminc/cbm_filetype.inc +34 -0
  84. data/lib/burn/tools/other/cc65/asminc/cpu.mac +24 -0
  85. data/lib/burn/tools/other/cc65/asminc/ctype.inc +29 -0
  86. data/lib/burn/tools/other/cc65/asminc/em-error.inc +49 -0
  87. data/lib/burn/tools/other/cc65/asminc/em-kernel.inc +106 -0
  88. data/lib/burn/tools/other/cc65/asminc/errno.inc +36 -0
  89. data/lib/burn/tools/other/cc65/asminc/fcntl.inc +21 -0
  90. data/lib/burn/tools/other/cc65/asminc/generic.mac +55 -0
  91. data/lib/burn/tools/other/cc65/asminc/get_tv.inc +22 -0
  92. data/lib/burn/tools/other/cc65/asminc/joy-error.inc +44 -0
  93. data/lib/burn/tools/other/cc65/asminc/joy-kernel.inc +85 -0
  94. data/lib/burn/tools/other/cc65/asminc/longbranch.mac +88 -0
  95. data/lib/burn/tools/other/cc65/asminc/lynx.inc +279 -0
  96. data/lib/burn/tools/other/cc65/asminc/modload.inc +78 -0
  97. data/lib/burn/tools/other/cc65/asminc/mouse-kernel.inc +180 -0
  98. data/lib/burn/tools/other/cc65/asminc/nes.inc +93 -0
  99. data/lib/burn/tools/other/cc65/asminc/o65.inc +150 -0
  100. data/lib/burn/tools/other/cc65/asminc/opcodes.inc +509 -0
  101. data/lib/burn/tools/other/cc65/asminc/pet.inc +54 -0
  102. data/lib/burn/tools/other/cc65/asminc/plus4.inc +86 -0
  103. data/lib/burn/tools/other/cc65/asminc/ser-error.inc +54 -0
  104. data/lib/burn/tools/other/cc65/asminc/ser-kernel.inc +162 -0
  105. data/lib/burn/tools/other/cc65/asminc/signal.inc +57 -0
  106. data/lib/burn/tools/other/cc65/asminc/smc.inc +245 -0
  107. data/lib/burn/tools/other/cc65/asminc/stdio.inc +70 -0
  108. data/lib/burn/tools/other/cc65/asminc/supervision.inc +76 -0
  109. data/lib/burn/tools/other/cc65/asminc/tgi-error.inc +52 -0
  110. data/lib/burn/tools/other/cc65/asminc/tgi-kernel.inc +234 -0
  111. data/lib/burn/tools/other/cc65/asminc/tgi-vectorfont.inc +70 -0
  112. data/lib/burn/tools/other/cc65/asminc/time.inc +59 -0
  113. data/lib/burn/tools/other/cc65/asminc/utsname.inc +46 -0
  114. data/lib/burn/tools/other/cc65/asminc/vic20.inc +75 -0
  115. data/lib/burn/tools/other/cc65/asminc/zeropage.inc +26 -0
  116. data/lib/burn/tools/other/cc65/bin/ca65 +0 -0
  117. data/lib/burn/tools/other/cc65/bin/cc65 +0 -0
  118. data/lib/burn/tools/other/cc65/bin/ld65 +0 -0
  119. data/lib/burn/tools/win/cc65/asminc/_file.inc +27 -0
  120. data/lib/burn/tools/win/cc65/asminc/_heap.inc +35 -0
  121. data/lib/burn/tools/win/cc65/asminc/apple2.inc +64 -0
  122. data/lib/burn/tools/win/cc65/asminc/atari.inc +1101 -0
  123. data/lib/burn/tools/win/cc65/asminc/atmos.inc +31 -0
  124. data/lib/burn/tools/win/cc65/asminc/c128.inc +213 -0
  125. data/lib/burn/tools/win/cc65/asminc/c16.inc +9 -0
  126. data/lib/burn/tools/win/cc65/asminc/c64.inc +212 -0
  127. data/lib/burn/tools/win/cc65/asminc/cbm510.inc +182 -0
  128. data/lib/burn/tools/win/cc65/asminc/cbm610.inc +110 -0
  129. data/lib/burn/tools/win/cc65/asminc/ctype.inc +29 -0
  130. data/lib/burn/tools/win/cc65/asminc/em-error.inc +44 -0
  131. data/lib/burn/tools/win/cc65/asminc/em-kernel.inc +100 -0
  132. data/lib/burn/tools/win/cc65/asminc/errno.inc +36 -0
  133. data/lib/burn/tools/win/cc65/asminc/fcntl.inc +21 -0
  134. data/lib/burn/tools/win/cc65/asminc/get_tv.inc +22 -0
  135. data/lib/burn/tools/win/cc65/asminc/joy-error.inc +44 -0
  136. data/lib/burn/tools/win/cc65/asminc/joy-kernel.inc +85 -0
  137. data/lib/burn/tools/win/cc65/asminc/lynx.inc +273 -0
  138. data/lib/burn/tools/win/cc65/asminc/modload.inc +78 -0
  139. data/lib/burn/tools/win/cc65/asminc/mouse-kernel.inc +179 -0
  140. data/lib/burn/tools/win/cc65/asminc/nes.inc +93 -0
  141. data/lib/burn/tools/win/cc65/asminc/o65.inc +135 -0
  142. data/lib/burn/tools/win/cc65/asminc/pet.inc +45 -0
  143. data/lib/burn/tools/win/cc65/asminc/plus4.inc +87 -0
  144. data/lib/burn/tools/win/cc65/asminc/rs232.inc +19 -0
  145. data/lib/burn/tools/win/cc65/asminc/ser-error.inc +50 -0
  146. data/lib/burn/tools/win/cc65/asminc/ser-kernel.inc +161 -0
  147. data/lib/burn/tools/win/cc65/asminc/signal.inc +57 -0
  148. data/lib/burn/tools/win/cc65/asminc/stdio.inc +70 -0
  149. data/lib/burn/tools/win/cc65/asminc/supervision.inc +76 -0
  150. data/lib/burn/tools/win/cc65/asminc/tgi-error.inc +48 -0
  151. data/lib/burn/tools/win/cc65/asminc/tgi-kernel.inc +183 -0
  152. data/lib/burn/tools/win/cc65/asminc/tgi-mode.inc +48 -0
  153. data/lib/burn/tools/win/cc65/asminc/time.inc +59 -0
  154. data/lib/burn/tools/win/cc65/asminc/utsname.inc +46 -0
  155. data/lib/burn/tools/win/cc65/asminc/vic20.inc +77 -0
  156. data/lib/burn/tools/win/cc65/asminc/zeropage.inc +22 -0
  157. data/lib/burn/tools/win/cc65/bin/ca65.exe +0 -0
  158. data/lib/burn/tools/win/cc65/bin/cc65.exe +0 -0
  159. data/lib/burn/tools/win/cc65/bin/ld65.exe +0 -0
  160. data/lib/burn/util/os.rb +38 -0
  161. data/lib/burn/util/patternizer.rb +62 -0
  162. data/lib/burn/util/pxes.rb +180 -0
  163. data/lib/burn/util/server.rb +21 -0
  164. data/lib/burn/util.rb +4 -0
  165. data/lib/burn/version.rb +3 -0
  166. data/lib/burn/workspace_default/asset/crt0.s +260 -0
  167. data/lib/burn/workspace_default/asset/famitone.s +1031 -0
  168. data/lib/burn/workspace_default/asset/mus_instruments.s +50 -0
  169. data/lib/burn/workspace_default/asset/music.s +3 -0
  170. data/lib/burn/workspace_default/asset/nes.cfg +83 -0
  171. data/lib/burn/workspace_default/asset/neslib.h +213 -0
  172. data/lib/burn/workspace_default/asset/neslib.s +923 -0
  173. data/lib/burn/workspace_default/asset/runtime.lib +0 -0
  174. data/lib/burn/workspace_default/asset/sounds.s +143 -0
  175. data/lib/burn/workspace_default/asset/test.h +22 -0
  176. data/lib/burn/workspace_default/asset/tileset.chr +0 -0
  177. data/lib/burn/workspace_default/release/js/emulator.html +42 -0
  178. data/lib/burn/workspace_default/release/js/js/dynamicaudio-89ba58da476270a9b630.min.js +1 -0
  179. data/lib/burn/workspace_default/release/js/js/jquery-1.4.2.min.js +154 -0
  180. data/lib/burn/workspace_default/release/js/js/jsnes-4e7a7260aa.js +7149 -0
  181. data/lib/burn/workspace_default/release/js/swf/dynamicaudio.swf +0 -0
  182. data/lib/burn/workspace_default/scripts/compile.bat +30 -0
  183. data/lib/burn/workspace_default/scripts/compile.sh +30 -0
  184. data/lib/burn.rb +11 -0
  185. data/test/helper.rb +8 -0
  186. data/test/runner.rb +2 -0
  187. data/test/test_burn.rb +14 -0
  188. data/test/test_dsl.rb +22 -0
  189. data/test/test_pxes.rb +48 -0
  190. metadata +270 -0
data/README.md ADDED
@@ -0,0 +1,467 @@
1
+ # Burn
2
+
3
+ Burn is a free and open source framework that allows you to create 8-bit flavored application using Ruby DSL.
4
+
5
+ ```ruby
6
+ scene do
7
+ label "Hello, World!"
8
+ end
9
+ ```
10
+
11
+ Just like Recipe and Cookbook are DSL for Chef rubygem, this dead simple DSL is for Burn rubygem, and we call it Fuel. Burning this Fuel will produce [this](http://k.swd.cc/burn/resource/example/hello-world/emulator.html).
12
+
13
+ ![Hello-world pic](http://k.swd.cc/burn/resource/screenshot/hello-world.png)
14
+
15
+ Here is another example. With Fuel DSL, you can even compose background music in 1 minute.
16
+
17
+ ```ruby
18
+ scene do
19
+ label "Hello, World!"
20
+ play "openning"
21
+ end
22
+
23
+ music "openning" do
24
+ tempo :allegro
25
+ channel "piano" do
26
+ segno
27
+ g :dotted
28
+ g :eighth, :staccato
29
+ a :dotted
30
+ a :eighth, :staccato
31
+ dal_segno
32
+ end
33
+ end
34
+ ```
35
+
36
+ Check [the output](http://k.swd.cc/burn/resource/example/hello-world-with-music/emulator.html) from this.
37
+
38
+ Would you like to design retro 8-bit graphics? Here you go.
39
+
40
+ ```ruby
41
+ declare do
42
+ star <<-EOH
43
+
44
+ 11
45
+ 11
46
+ 1111
47
+ 1111
48
+ 1111111111111111
49
+ 11111111111111
50
+ 111111111111
51
+ 1111111111
52
+ 11111111
53
+ 11111111
54
+ 11111111
55
+ 1111 1111
56
+ 11 11
57
+ 1 1
58
+
59
+ EOH
60
+ end
61
+
62
+ scene do
63
+ main_loop <<-EOH
64
+ star.x=20
65
+ star.y-=3
66
+ sprite "star"
67
+ EOH
68
+ end
69
+
70
+ ```
71
+
72
+ ![star animated gif](http://k.swd.cc/burn/resource/screenshot/star.gif)
73
+
74
+ Please visit [our project page](http://k.swd.cc/burn/) for more example.
75
+
76
+ ## Table Of Contents
77
+
78
+ * [Getting Started](#getting-started)
79
+ * [How It Works](#how-it-works)
80
+ * [Installation](#installation)
81
+ * [Quick Start](#quick-start)
82
+ * [Fuel DSL Methods](#fuel-dsl-methods)
83
+ * [Scene](#scene)
84
+ * [Sound](#sound)
85
+ * [Music](#music)
86
+ * [Declare](#declare)
87
+ * [Burning Fuel DSL In Action](#burning-fuel-dsl-in-action)
88
+ * [Programming With .rrb(Restricted Ruby) Syntax](#programming-with-rrbrestricted-ruby-syntax)
89
+ * [Notes](#notes)
90
+ * [Personal Motivation](#personal-motivation)
91
+ * [Helpful Folks](#helpful-folks)
92
+ * [License](#license)
93
+ * [ToDos](#todos)
94
+
95
+ ## Getting Started
96
+
97
+ ### How It Works
98
+
99
+ Internally, burn contains cc65 executables inside its gemfile and calls them to compile. Main workflow is as follows.
100
+
101
+ - translate ruby DSL file into c source code
102
+ - compile them to make executable(main.out) by calling cc65
103
+ - provide emulator(JSNES) for rpaid application development
104
+
105
+ This means what burn can do is always less than what cc65 can do.
106
+
107
+ ### Installation
108
+
109
+ gem install burn
110
+
111
+ ### Quick Start
112
+
113
+ echo "scene do{ label 'hello world'}" > main.rb
114
+ burn -p # -p: open up emulator right after compilation
115
+
116
+ ## Fuel DSL Methods
117
+
118
+ Currently following DSL Methods are available. If you are newbie here, kindly visit [project page](http://k.swd.cc/burn/) first to see what you can do with Burn and Fuel DSL.
119
+
120
+ * [Scene](#scene)
121
+ * [Sound](#sound)
122
+ * [Music](#music)
123
+ * [Declare](#declare)
124
+
125
+ ### Scene
126
+
127
+ #### label(string, x=0, y=1)
128
+
129
+ The label method can be used in a scene to display static string.
130
+
131
+ <dl>
132
+ <dt>string String</dt>
133
+ <dd>Static string to display.</dd>
134
+ <dt>x Number</dt>
135
+ <dd>The horizontal coordinate to display, between 0 and 31.</dd>
136
+ <dt>y Number</dt>
137
+ <dd>The vertical coordinate to display, between 0 and 28.</dd>
138
+ </dl>
139
+
140
+ ```ruby
141
+ scene do
142
+ label "Hello, World!"
143
+ label "Hello, World!", 4, 5
144
+ end
145
+ ```
146
+
147
+ #### fade_in, fade_out
148
+
149
+ These methods can be used in a scene to fade in or out.
150
+
151
+ ```ruby
152
+ scene do
153
+ label "Hello"
154
+ fade_in
155
+ main_loop
156
+ fade_out
157
+ goto "next"
158
+ end
159
+ ```
160
+
161
+ #### play(song_title)
162
+
163
+ The play method can be used in a scene to play music.
164
+
165
+ <dl>
166
+ <dt>song_title String</dt>
167
+ <dd>Song title to play.</dd>
168
+ </dl>
169
+
170
+ ```ruby
171
+ scene do
172
+ play "battle"
173
+ stop
174
+ end
175
+
176
+ music "battle" do
177
+ channel "string" do
178
+ g :dotted
179
+ g :eighth
180
+ c :half
181
+ end
182
+ end
183
+ ```
184
+
185
+ #### stop
186
+
187
+ The stop method can be used in a scene to stop music.
188
+
189
+ ```ruby
190
+ scene do
191
+ stop "battle"
192
+ end
193
+ ```
194
+
195
+ #### color(palette, color, lightness=:lighter)
196
+
197
+ The color method can be used in a scene to pick a color and set it to specific palette.
198
+
199
+ <dl>
200
+ <dt>palette Symbol</dt>
201
+ <dd>Palette to set.
202
+ <table>
203
+ <tr>
204
+ <th>Palette Symbol</th>
205
+ <th>Description</th>
206
+ </tr>
207
+ <tr>
208
+ <td>:bg</td>
209
+ <td>Background color</td>
210
+ </tr>
211
+ <tr>
212
+ <td>:text</td>
213
+ <td>Foreground color</td>
214
+ </tr>
215
+ <tr>
216
+ <td>:palette_x1, :palette_x2, :palette_x3</td>
217
+ <td>Colors for :palette_x</td>
218
+ </tr>
219
+ <tr>
220
+ <td>:palette_y1, :palette_y2, :palette_y3</td>
221
+ <td>Colors for :palette_y</td>
222
+ </tr>
223
+ <tr>
224
+ <td>:palette_z1, :palette_z2, :palette_z3</td>
225
+ <td>Colors for :palette_z</td>
226
+ </tr>
227
+ <tr>
228
+ <td>:sprite</td>
229
+ <td>Sprite color</td>
230
+ </tr>
231
+ </table>
232
+ </dd>
233
+ <dt>color Symbol</dt>
234
+ <dd>Color to set. Available color pattern is shown below.<br />
235
+ <img src="http://www.thealmightyguru.com/Games/Hacking/Wiki/images/e/e8/Palette_NTSC.png">
236
+ <table>
237
+ <tr>
238
+ <th>Color Symbol</th>
239
+ </tr>
240
+ <tr><td>:white</td></tr>
241
+ <tr><td>:lightblue</td></tr>
242
+ <tr><td>:blue</td></tr>
243
+ <tr><td>:purple</td></tr>
244
+ <tr><td>:pink</td></tr>
245
+ <tr><td>:red</td></tr>
246
+ <tr><td>:deepred</td></tr>
247
+ <tr><td>:orange</td></tr>
248
+ <tr><td>:lightorange</td></tr>
249
+ <tr><td>:darkgreen</td></tr>
250
+ <tr><td>:green</td></tr>
251
+ <tr><td>:lightgreen</td></tr>
252
+ <tr><td>:bluegreen</td></tr>
253
+ <tr><td>:gray</td></tr>
254
+ <tr><td>:black</td></tr>
255
+ </table>
256
+ </dd>
257
+ <dt>lightness Symbol</dt>
258
+ <dd>Lightness of the color to set. `:darkest`, `:darker`, `:lighter` and `:lightest` can be set.</dd>
259
+ </dl>
260
+
261
+ ```ruby
262
+ scene do
263
+ label "Hello, World!"
264
+ color :text, :pink, :darker
265
+ end
266
+ ```
267
+
268
+ #### wait(interval)
269
+
270
+ The wait method can be used in a scene to pause for certain period of time.
271
+
272
+ <dl>
273
+ <dt>interval Fixnum</dt>
274
+ <dd>Period of time to pause.</dd>
275
+ </dl>
276
+
277
+
278
+ ```ruby
279
+ scene do
280
+ label "foobar"
281
+ fade_out
282
+ wait 100
283
+ goto "somewhere"
284
+ end
285
+ ```
286
+
287
+ #### goto(scene_name)
288
+
289
+ The goto method can be used in a scene to jump the scene specified.
290
+
291
+ <dl>
292
+ <dt>scene_name String</dt>
293
+ <dd>Destination to jump.</dd>
294
+ </dl>
295
+
296
+ ```ruby
297
+ scene "first" do
298
+ label "good morning"
299
+ goto "second"
300
+ end
301
+
302
+ scene "second" do
303
+ label "hi there"
304
+ end
305
+ ```
306
+
307
+ #### inline(code)
308
+
309
+ The inline method can be used in a scene to inject c source code manually to compile with cc65. Should be used for debugging purpose.
310
+
311
+ <dl>
312
+ <dt>code String</dt>
313
+ <dd>C code to inject.</dd>
314
+ </dl>
315
+
316
+ ```ruby
317
+ scene do
318
+ inline "x=1+2;"
319
+ end
320
+ ```
321
+
322
+ #### screen(map, vars)
323
+
324
+ The screen method can be used to inflate map data to a scene.
325
+
326
+ <dl>
327
+ <dt>map String</dt>
328
+ <dd>Map data consists of hash keys of pattern design.</dd>
329
+ <dt>vars Hash</dt>
330
+ <dd>A list of pattern designs.</dd>
331
+ </dl>
332
+
333
+ ```ruby
334
+ scene do
335
+ screen <<-EOH, { A:"tile", B:"wave", C:"mountain"}
336
+
337
+ AAAA AA AAA AAA AA A
338
+ AA A AA AA AA AA AA AA A
339
+ AA A AA AA AA AA AAA
340
+ AAAAA AA AA AA AA AA
341
+ AA A AA AAAAAAA AA AAA
342
+ AA A AA AA AA AA AA AA A
343
+ AAAA AAAA AA AA AAA AA A
344
+
345
+ BB BB BB BBB BBBBB
346
+ BB BB BB BB BB BB BB
347
+ BB BB BB BB BB BB BB BB
348
+ BB BB BB BB BBBBBBB BBBB
349
+ BB BB BB BB BB BB
350
+ BB BB BB BB BB BB
351
+ EOH
352
+ end
353
+ ```
354
+
355
+ #### sound(effect_name)
356
+
357
+ The sound method in a scene can be used to play sound effect.
358
+
359
+ <dl>
360
+ <dt>effect_name String</dt>
361
+ <dd>Name of sound effect to play.</dd>
362
+ </dl>
363
+
364
+ ```ruby
365
+ scene do
366
+ sound "dead"
367
+ end
368
+
369
+ sound "dead" do
370
+ effect do
371
+ velocity 15
372
+ length 5
373
+ pitch 200
374
+ end
375
+ end
376
+ ```
377
+
378
+ #### paint(dest, palette)
379
+
380
+ The paint method in a scene can be used to associate color palette with pattern designs inflated on the screen. Typically #paint is called along with #color and #screen method.
381
+
382
+ <dl>
383
+ <dt>dest Range</dt>
384
+ <dd>Return value of #range(x_from, y_from, x_to, y_to) is expected. x_from and x_to takes the number between 0 and 255 while y_from and y_to takes the value between 0 and 239.</dd>
385
+ <dt>palette Symbol</dt>
386
+ <dd>Palette symbol to apply. Kindly refer candidate symbols listed at <a href="#colorpalette-color-lightnesslighter">color</a> section.</dd>
387
+ </dl>
388
+
389
+ ```ruby
390
+ scene "title" do
391
+ color :palette_x1, :deepred, :darker
392
+ paint range("44px", "5px", "120px", "3px"), :palette_x # range takes String parameter
393
+
394
+ color :palette_y2, :pink, :darkest
395
+ paint range(30, 2, 30, 12), :palette_y # range method can take Number as well. In this case x_from and x_to takes the value between 0 and 31, while y_from and y_to takes the value from 0 and 29.
396
+ end
397
+ ```
398
+
399
+ #### main_loop(rrb_source=nil)
400
+
401
+ The main_loop method in a scene can be used to repeat a block of code. More detail can be found at [.rrb section](#programming-with-rrbrestricted-ruby-syntax).
402
+
403
+ <dl>
404
+ <dt>rrb_source String</dt>
405
+ <dd>Source code written in .rrb(Resticted Ruby) syntax.</dd>
406
+ </dl>
407
+
408
+ ```ruby
409
+ scene "title" do
410
+ color :palette_x1, :deepred, :darker
411
+ paint range("44px", "5px", "120px", "3px"), :palette_x # range takes String parameter
412
+
413
+ color :palette_y2, :pink, :darkest
414
+ paint range(30, 2, 30, 12), :palette_y # range method can take Number as well. In this case x_from and x_to takes the value between 0 and 31, while y_from and y_to takes the value from 0 and 29.
415
+ end
416
+ ```
417
+
418
+ ### Sound
419
+
420
+ TBD
421
+
422
+ ### Music
423
+
424
+ TBD
425
+
426
+ ### Declare
427
+
428
+ TBD
429
+
430
+ ## Burning Fuel DSL In Action
431
+
432
+ ### Programming With .rrb(Restricted Ruby) Syntax
433
+
434
+ TBD(articles about #show, #sprite, #rand and #is_pressed are coming very soon)
435
+
436
+ ## Notes
437
+
438
+ ### Personal Motivation
439
+
440
+ Creating 8-bit flavored application mean neither outdated nor cheap, but good fit to rapid prototyping. It could be one of best options for education purpose as well.
441
+
442
+ Moreover, the executables built with burn will work at [almost any OS](http://en.wikipedia.org/wiki/List_of_video_game_emulators#Consoles). That said, consequently, burn is a multi-platform programming environment.
443
+
444
+ ### Helpful Folks
445
+
446
+ * Shiru - this project had never been born if I had not found [this article](http://shiru.untergrund.net/articles/programming_nes_games_in_c.htm)
447
+
448
+ ### License
449
+
450
+ GPLv3
451
+
452
+ ### ToDos
453
+
454
+ * New VM Support
455
+ * compatiblize with enchant.js
456
+ * Enhancement of Fuel DSL
457
+ * for Screen, support screen scroll and simple sprite
458
+ * for Screen, adding .bmp and .png support to make designing pattern table easier
459
+ * for Sound, add triangle wave and noise effect
460
+ * for Music, add custom instrument DSL
461
+ * for Declare, support string and boolean declaration(currently only number and pattern table is supported)
462
+ * Improvement of Internal Architecture
463
+ * make cc65 alternative in Ruby
464
+ * Other Feature To Be Supported
465
+ * make burn rubygem work with mruby(not soon)
466
+ * Fix bugs
467
+ * declaring 2x2 pattern works, however 2x1 pattern doesn't
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ # TBD for test or build
data/bin/burn ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ if !ARGV.index('-d') then
4
+ require 'rubygems'
5
+ else
6
+ Encoding.default_external = 'UTF-8'
7
+ ['..', '../lib'].each do |path|
8
+ $LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), path))
9
+ end
10
+ end
11
+
12
+ require 'burn'
13
+ include Burn
14
+ BurnTasks.start
@@ -0,0 +1,65 @@
1
+ module Burn
2
+ class Builder
3
+ include Dsl
4
+ include Generator
5
+ include Debug
6
+
7
+ def initialize(workspace_root)
8
+ @workspace_root = workspace_root
9
+
10
+ @game_generator = CSource.new(@workspace_root)
11
+ @music_generator = AssemblyMusic.new(@workspace_root)
12
+ @sound_effect_generator = AssemblySoundEffect.new(@workspace_root)
13
+ end
14
+
15
+ def verbose(flag)
16
+ Debug::Logger.new.enabled flag
17
+ end
18
+
19
+ def load(dsl_raw_text)
20
+ self.instance_eval dsl_raw_text
21
+ end
22
+
23
+ def generate
24
+ @game_generator.generate
25
+ @music_generator.generate
26
+ @sound_effect_generator.generate
27
+ end
28
+
29
+ def method_missing(method_symbol, *args, &block)
30
+ log :method_symbol=>method_symbol, :args=>args, :block=>block
31
+ if method_symbol == :music then
32
+ Music.new(args[0], @music_generator.get_context).instance_eval(&block)
33
+
34
+ elsif method_symbol == :scene then
35
+ # preprocess
36
+ args[0] = "main" if args[0].nil?
37
+ @game_generator.get_context.instance_exec args[0], &lambda{|resource_name|
38
+ [
39
+ "",
40
+ "//#{resource_name} label starts",
41
+ "#{resource_name}:"
42
+ ].each {|p| @code_blocks.push p}
43
+ }
44
+
45
+ # execute dsls
46
+ Scene.new(args[0], @game_generator.get_context).instance_eval(&block)
47
+
48
+ # postprocess - To deal with the case of on_enter_frame not found, adding while loop at the end of program
49
+ @game_generator.get_context.instance_exec {@code_blocks.push "ppu_on_all();", "while(1);"}
50
+
51
+ elsif method_symbol == :declare then
52
+ Declare.new(args[0], @game_generator.get_context).instance_eval(&block)
53
+
54
+ elsif method_symbol == :sound then
55
+ Sound.new(args[0], @sound_effect_generator.get_context).instance_eval(&block)
56
+
57
+ # postprocess
58
+ @game_generator.get_context.instance_exec(@sound_effect_generator.resources.count-1) do |count|
59
+ @global.push "#define SFX_#{args[0].upcase} #{count.to_s}"
60
+ end
61
+
62
+ end
63
+ end
64
+ end
65
+ end