O Ilusionista
Captain 100K
Yeah I know it is not a layer, but an entity - this is why I've suggest to make it to flip randomly 
Keep the good work, buddy.
Keep the good work, buddy.
mersox said:
Damon Caskey said:mersox said:
You're one of the best creators around, so that's very high praise. Thank you mersox!
It may be a few more weeks before I can show some progress. I finally got back into updating the engine, and that's where the time to work on my module projects was coming from. I'm still doing bits of it here and there though, so keep an eye out.
DC
nedflandeurse said:Looks good. also CVS style shading si pretty faster to do (at least for me.)
Considering the small size of sprites the result is pretty good!
I like it.
name road_line
type none
nomove 1
subject_to_gravity 0
candamage 0
offscreenkill 0
nolife 1
speed 0
shadow 0
health 1
antigrab 1
setlayer 0
anim idle
loop 1
delay 1
offset 0 0
@script
if(getlocalvar("event") == "oncreate")
{
void self = getlocalvar("self");
int idx = getentityproperty(self, "map") - 1;
if(idx < 0) idx = 0;
if(idx > 89) idx = 89;
setglobalvar("road_band"+idx, self);
}
@end_script
frame data/chars/road_line/raster01.png
name road_line2
type none
nomove 1
subject_to_gravity 0
candamage 0
offscreenkill 0
nolife 1
speed 0
shadow 0
health 1
antigrab 1
setlayer 0
anim idle
loop 1
delay 1
offset 0 0
@script
if(getlocalvar("event") == "oncreate")
{
void self = getlocalvar("self");
int idx = getentityproperty(self, "map") - 1;
if(idx < 0) idx = 0;
if(idx > 89) idx = 89;
setglobalvar("road_band"+idx, self);
}
@end_script
frame data/chars/road_line/raster02.png
music data/music/race1.bor
type 1
scrollspeed 0
background data/bgs/raster_road/background.png
panel data/bgs/raster_road/background.png
order a
levelscript data/scripts/road_raster.c
spawn1 240 0
spawn Boss
coords 400 120
at 0
# === RASTERIZED ROAD (90 alternating 5-5 different stripes) ===
spawn road_line
map 1
coords 480 0
at 0
spawn road_line
map 2
coords 480 3
at 0
spawn road_line
map 3
coords 480 6
at 0
spawn road_line
map 4
coords 480 9
at 0
spawn road_line
map 5
coords 480 12
at 0
spawn road_line2
map 6
coords 480 15
at 0
spawn road_line2
map 7
coords 480 18
at 0
spawn road_line2
map 8
coords 480 21
at 0
spawn road_line2
map 9
coords 480 24
at 0
spawn road_line2
map 10
coords 480 27
at 0
spawn road_line
map 11
coords 480 30
at 0
spawn road_line
map 12
coords 480 33
at 0
spawn road_line
map 13
coords 480 36
at 0
spawn road_line
map 14
coords 480 39
at 0
spawn road_line
map 15
coords 480 42
at 0
spawn road_line2
map 16
coords 480 45
at 0
spawn road_line2
map 17
coords 480 48
at 0
spawn road_line2
map 18
coords 480 51
at 0
spawn road_line2
map 19
coords 480 54
at 0
spawn road_line2
map 20
coords 480 57
at 0
spawn road_line
map 21
coords 480 60
at 0
spawn road_line
map 22
coords 480 63
at 0
spawn road_line
map 23
coords 480 66
at 0
spawn road_line
map 24
coords 480 69
at 0
spawn road_line
map 25
coords 480 72
at 0
spawn road_line2
map 26
coords 480 75
at 0
spawn road_line2
map 27
coords 480 78
at 0
spawn road_line2
map 28
coords 480 81
at 0
spawn road_line2
map 29
coords 480 84
at 0
spawn road_line2
map 30
coords 480 87
at 0
spawn road_line
map 31
coords 480 90
at 0
spawn road_line
map 32
coords 480 93
at 0
spawn road_line
map 33
coords 480 96
at 0
spawn road_line
map 34
coords 480 99
at 0
spawn road_line
map 35
coords 480 102
at 0
spawn road_line2
map 36
coords 480 105
at 0
spawn road_line2
map 37
coords 480 108
at 0
spawn road_line2
map 38
coords 480 111
at 0
spawn road_line2
map 39
coords 480 114
at 0
spawn road_line2
map 40
coords 480 117
at 0
spawn road_line
map 41
coords 480 120
at 0
spawn road_line
map 42
coords 480 123
at 0
spawn road_line
map 43
coords 480 126
at 0
spawn road_line
map 44
coords 480 129
at 0
spawn road_line
map 45
coords 480 132
at 0
spawn road_line2
map 46
coords 480 135
at 0
spawn road_line2
map 47
coords 480 138
at 0
spawn road_line2
map 48
coords 480 141
at 0
spawn road_line2
map 49
coords 480 144
at 0
spawn road_line2
map 50
coords 480 147
at 0
spawn road_line
map 51
coords 480 150
at 0
spawn road_line
map 52
coords 480 153
at 0
spawn road_line
map 53
coords 480 156
at 0
spawn road_line
map 54
coords 480 159
at 0
spawn road_line
map 55
coords 480 162
at 0
spawn road_line2
map 56
coords 480 165
at 0
spawn road_line2
map 57
coords 480 168
at 0
spawn road_line2
map 58
coords 480 171
at 0
spawn road_line2
map 59
coords 480 174
at 0
spawn road_line2
map 60
coords 480 177
at 0
spawn road_line
map 61
coords 480 180
at 0
spawn road_line
map 62
coords 480 183
at 0
spawn road_line
map 63
coords 480 186
at 0
spawn road_line
map 64
coords 480 189
at 0
spawn road_line
map 65
coords 480 192
at 0
spawn road_line2
map 66
coords 480 195
at 0
spawn road_line2
map 67
coords 480 198
at 0
spawn road_line2
map 68
coords 480 201
at 0
spawn road_line2
map 69
coords 480 204
at 0
spawn road_line2
map 70
coords 480 207
at 0
spawn road_line
map 71
coords 480 210
at 0
spawn road_line
map 72
coords 480 213
at 0
spawn road_line
map 73
coords 480 216
at 0
spawn road_line
map 74
coords 480 219
at 0
spawn road_line
map 75
coords 480 222
at 0
spawn road_line2
map 76
coords 480 225
at 0
spawn road_line2
map 77
coords 480 228
at 0
spawn road_line2
map 78
coords 480 231
at 0
spawn road_line2
map 79
coords 480 234
at 0
spawn road_line2
map 80
coords 480 237
at 0
spawn road_line
map 81
coords 480 480
at 0
spawn road_line
map 82
coords 480 243
at 0
spawn road_line
map 83
coords 480 246
at 0
spawn road_line
map 84
coords 480 249
at 0
spawn road_line
map 85
coords 480 252
at 0
spawn road_line2
map 86
coords 480 255
at 0
spawn road_line2
map 87
coords 480 258
at 0
spawn road_line2
map 88
coords 480 261
at 0
spawn road_line2
map 89
coords 480 264
at 0
spawn road_line2
map 90
coords 480 267
at 0
I'm revisiting this rasterization because it seems to me to have significant potential that can be exploited in various ways,
particularly for a Road Beat 'em up (which is just one possibility among many).
So I tried it myself with 3-pixel lines raster01 and raster02.png (alternately light gray, dark gray, light green, dark green to give the impression of scrolling)
which I stacked and declared like this:
Code:name road_line type none nomove 1 subject_to_gravity 0 candamage 0 offscreenkill 0 nolife 1 speed 0 shadow 0 health 1 antigrab 1 setlayer 0 anim idle loop 1 delay 1 offset 0 0 @script if(getlocalvar("event") == "oncreate") { void self = getlocalvar("self"); int idx = getentityproperty(self, "map") - 1; if(idx < 0) idx = 0; if(idx > 89) idx = 89; setglobalvar("road_band"+idx, self); } @end_script frame data/chars/road_line/raster01.png
Code:name road_line2 type none nomove 1 subject_to_gravity 0 candamage 0 offscreenkill 0 nolife 1 speed 0 shadow 0 health 1 antigrab 1 setlayer 0 anim idle loop 1 delay 1 offset 0 0 @script if(getlocalvar("event") == "oncreate") { void self = getlocalvar("self"); int idx = getentityproperty(self, "map") - 1; if(idx < 0) idx = 0; if(idx > 89) idx = 89; setglobalvar("road_band"+idx, self); } @end_script frame data/chars/road_line/raster02.png
Code:music data/music/race1.bor type 1 scrollspeed 0 background data/bgs/raster_road/background.png panel data/bgs/raster_road/background.png order a levelscript data/scripts/road_raster.c spawn1 240 0 spawn Boss coords 400 120 at 0 # === RASTERIZED ROAD (90 alternating 5-5 different stripes) === spawn road_line map 1 coords 480 0 at 0 spawn road_line map 2 coords 480 3 at 0 spawn road_line map 3 coords 480 6 at 0 spawn road_line map 4 coords 480 9 at 0 spawn road_line map 5 coords 480 12 at 0 spawn road_line2 map 6 coords 480 15 at 0 spawn road_line2 map 7 coords 480 18 at 0 spawn road_line2 map 8 coords 480 21 at 0 spawn road_line2 map 9 coords 480 24 at 0 spawn road_line2 map 10 coords 480 27 at 0 spawn road_line map 11 coords 480 30 at 0 spawn road_line map 12 coords 480 33 at 0 spawn road_line map 13 coords 480 36 at 0 spawn road_line map 14 coords 480 39 at 0 spawn road_line map 15 coords 480 42 at 0 spawn road_line2 map 16 coords 480 45 at 0 spawn road_line2 map 17 coords 480 48 at 0 spawn road_line2 map 18 coords 480 51 at 0 spawn road_line2 map 19 coords 480 54 at 0 spawn road_line2 map 20 coords 480 57 at 0 spawn road_line map 21 coords 480 60 at 0 spawn road_line map 22 coords 480 63 at 0 spawn road_line map 23 coords 480 66 at 0 spawn road_line map 24 coords 480 69 at 0 spawn road_line map 25 coords 480 72 at 0 spawn road_line2 map 26 coords 480 75 at 0 spawn road_line2 map 27 coords 480 78 at 0 spawn road_line2 map 28 coords 480 81 at 0 spawn road_line2 map 29 coords 480 84 at 0 spawn road_line2 map 30 coords 480 87 at 0 spawn road_line map 31 coords 480 90 at 0 spawn road_line map 32 coords 480 93 at 0 spawn road_line map 33 coords 480 96 at 0 spawn road_line map 34 coords 480 99 at 0 spawn road_line map 35 coords 480 102 at 0 spawn road_line2 map 36 coords 480 105 at 0 spawn road_line2 map 37 coords 480 108 at 0 spawn road_line2 map 38 coords 480 111 at 0 spawn road_line2 map 39 coords 480 114 at 0 spawn road_line2 map 40 coords 480 117 at 0 spawn road_line map 41 coords 480 120 at 0 spawn road_line map 42 coords 480 123 at 0 spawn road_line map 43 coords 480 126 at 0 spawn road_line map 44 coords 480 129 at 0 spawn road_line map 45 coords 480 132 at 0 spawn road_line2 map 46 coords 480 135 at 0 spawn road_line2 map 47 coords 480 138 at 0 spawn road_line2 map 48 coords 480 141 at 0 spawn road_line2 map 49 coords 480 144 at 0 spawn road_line2 map 50 coords 480 147 at 0 spawn road_line map 51 coords 480 150 at 0 spawn road_line map 52 coords 480 153 at 0 spawn road_line map 53 coords 480 156 at 0 spawn road_line map 54 coords 480 159 at 0 spawn road_line map 55 coords 480 162 at 0 spawn road_line2 map 56 coords 480 165 at 0 spawn road_line2 map 57 coords 480 168 at 0 spawn road_line2 map 58 coords 480 171 at 0 spawn road_line2 map 59 coords 480 174 at 0 spawn road_line2 map 60 coords 480 177 at 0 spawn road_line map 61 coords 480 180 at 0 spawn road_line map 62 coords 480 183 at 0 spawn road_line map 63 coords 480 186 at 0 spawn road_line map 64 coords 480 189 at 0 spawn road_line map 65 coords 480 192 at 0 spawn road_line2 map 66 coords 480 195 at 0 spawn road_line2 map 67 coords 480 198 at 0 spawn road_line2 map 68 coords 480 201 at 0 spawn road_line2 map 69 coords 480 204 at 0 spawn road_line2 map 70 coords 480 207 at 0 spawn road_line map 71 coords 480 210 at 0 spawn road_line map 72 coords 480 213 at 0 spawn road_line map 73 coords 480 216 at 0 spawn road_line map 74 coords 480 219 at 0 spawn road_line map 75 coords 480 222 at 0 spawn road_line2 map 76 coords 480 225 at 0 spawn road_line2 map 77 coords 480 228 at 0 spawn road_line2 map 78 coords 480 231 at 0 spawn road_line2 map 79 coords 480 234 at 0 spawn road_line2 map 80 coords 480 237 at 0 spawn road_line map 81 coords 480 480 at 0 spawn road_line map 82 coords 480 243 at 0 spawn road_line map 83 coords 480 246 at 0 spawn road_line map 84 coords 480 249 at 0 spawn road_line map 85 coords 480 252 at 0 spawn road_line2 map 86 coords 480 255 at 0 spawn road_line2 map 87 coords 480 258 at 0 spawn road_line2 map 88 coords 480 261 at 0 spawn road_line2 map 89 coords 480 264 at 0 spawn road_line2 map 90 coords 480 267 at 0
90x3 pixels, which gives me a road 120 pixels high. Here's what it looks like on screen in the attached image.
The idea here would be to move each raster band 3 pixels downwards to simulate this effect of movement on the road.
Am I on the right track? Your concept of rasterized roads is so much more advanced (I'm trying to learn by doing it myself) and can you explain how you did it?
Thanks, that's what I thought too: a floor that should be half the width of the screen and repeat. That's much more advanced than my approach.
So you designed sprites that are 480x1 pixel wide and how do you declare them?
I'd love for you to tell me more if you don't mind![]()

which would be a bad idea afterall - Having a 1px tile would require you to draw 272 sprites on the screen just to create the background, which would be a tremendous waste of memory.This isn't a bunch of one pixel tall sprites.
I'm sorry DC: it's not that I'm not paying attention to what you're saying, quite the contrary, it's simply that I've never used a subscreen before.You're still not paying attention. Subscreens, NOT sprites. This isn't a bunch of one pixel tall sprites. It's a single scrolling layer hidden from view, then captured and played back with a series of one pixel tall subscreens that can then apply drawmethods to create affine transformations. The subscreens don't move. They can - but to do stuff like make hills and valleys. They are not scrolling to create the motion.
It's similar to how raster lines used to work, but done in software instead of hardware. More CPU intensive, but nothing modern CPUs can't eat for breakfast, and infinitely more flexible.
View attachment 12038
DC
There would be fewer than 272 pixels because often a good part of the screen is devoted to an interface or a horizontally moving background.which would be a bad idea afterall - Having a 1px tile would require you to draw 272 sprites on the screen just to create the background, which would be a tremendous waste of memory.
Okay, modern systems can handle this, but it's still a bad habit.
void main()
{//Lean sprite with shiftX and frame check (SOR3 DANCE CLUB)
void self = getlocalvar("self");
float time = openborvariant("elapsed_time");
if(getlocalvar("value") == NULL()){
setlocalvar("value", 0);
}
if(getglobalvar("activeText") == 0 || getglobalvar("activeText") == NULL()){
void name = getentityproperty(self, "defaultname");
int frame = getentityproperty(self, "animpos");
float speed = 0.010;
if(time%2 == 0){
if(name == "St2_Disco1"){
if(frame == 0){
setlocalvar("value", getlocalvar("value")+1.6);
speed = speed;
}else{
setlocalvar("value", getlocalvar("value")-1.6);
speed = -speed;
}
setdrawmethod(self,1,256,256,0,0, getlocalvar("value"),1);
changeentityproperty(self, "velocity", speed, 0, 0);
}
if(name == "St2_Disco2"){
if(frame == 0){
setlocalvar("value", getlocalvar("value")-1.6);
speed = speed;
}else{
setlocalvar("value", getlocalvar("value")+1.6);
speed = -speed;
}
setdrawmethod(self,1,256,256,0,0, getlocalvar("value"), 1);
changeentityproperty(self, "velocity", speed, 0, 0);
}
}
}
}