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
|
#onetime level controllers are like the regular type, except with respawns=no set. Meaning that their script only happens once per playthrough.
{
id: "level_controller_neverending",
next_animation: "'normal'",
always_active: true,
respawns: false,
hidden_in_game: true,
zorder: 50,
vars: {
segments: [],
left_edge: 0,
right_edge: 0,
cosmic_shift_threshhold: 16384,
cosmic_shift_amount: 15360,
scroll_xpos: 0,
scroll_speed_incr: 0,
scroll_speed: 0,
scroll_speed_cap: 0,
scroll_amount: 0,
last_xpos: 0,
},
on_process: "[if(level.player.x >= (vars.last_xpos + 80),
[add(level.player.score, (level.player.x - vars.last_xpos)/10),
set(vars.last_xpos, level.player.x)]),
if(level.player.midpoint_x > vars.cosmic_shift_threshhold, [cosmic_shift(-vars.cosmic_shift_amount, 0),
add(vars.scroll_xpos, -vars.cosmic_shift_amount),
add(vars.last_xpos, -vars.cosmic_shift_amount),
add(vars.left_edge, -vars.cosmic_shift_amount), add(vars.right_edge, -vars.cosmic_shift_amount)],
[
#if the level has gone beyond auto-scrolling, make
the auto-scrolling catch up#
if(level.dimensions[0] > vars.scroll_xpos + vars.scroll_amount/10,
[set(vars.scroll_xpos, level.dimensions[0]),
set(vars.scroll_amount, 0)],
add(vars.scroll_amount, vars.scroll_speed)),
set(level.dimensions, [max(level.dimensions[0], level.player.midpoint_x-400, vars.scroll_xpos + vars.scroll_amount/10), level.dimensions[1], level.dimensions[2], level.dimensions[3]]),
if(level.player.midpoint_x < level.dimensions[0], set(level.player.midpoint_x, level.dimensions[0])),
if(level.player.midpoint_x + 40 < level.dimensions[0], add(level.player.hitpoints, -1)),
if(level.player.midpoint_x > vars.right_edge - 800,
if(new_segment = null,
fire_event('recycle_segment'),
[
add(vars.segments, [new_segment]),
add_level_module(new_segment, vars.right_edge, level.dimensions[1]),
add(vars.right_edge, level.segment_width),
add(level.player.difficulty, 1),
if(vars.scroll_speed_incr and (vars.scroll_speed < vars.scroll_speed_cap) and ((level.player.difficulty%vars.scroll_speed_incr) = 0), add(vars.scroll_speed, 1))
])
where new_segment = choose(filter(query(level, 'segments_after_' + vars.segments.last), 'n', query(level, 'segment_difficulty_start_' + n) <= level.player.difficulty and (not (n in vars.segments))))
),
if(level.player.midpoint_x > vars.left_edge + 800 + level.segment_width,
fire_event('recycle_segment'))
])]",
on_recycle_segment: "[remove_level_module(vars.segments[0]),
add(vars.left_edge, level.segment_width),
set(vars.segments, filter(vars.segments, 'n', n != vars.segments[0]))]",
on_create: "if(level.in_editor, die(),
[
set(vars.last_xpos, level.player.x),
set(level.player.vars.unlocked_items, ['heart_object', 'target', 'target', 'target', 'target', ]),
set(vars.scroll_xpos, level.dimensions[0]),
set(level.dimensions, [level.dimensions[0], level.dimensions[1], level.dimensions[0] + 10000000, level.dimensions[3]]),
add_level_module(str(first_segment), level.dimensions[0], level.dimensions[1]),
add(vars.segments, [first_segment]),
set(vars.left_edge, level.dimensions[0]), set(vars.right_edge, level.dimensions[0] + level.segment_width)]
where first_segment = (level.player.x - level.dimensions[0])/level.segment_width
)",
editor_info: {
category: "controllers",
var: [
{
name: "scroll_speed",
value: 0,
},
{
name: "scroll_speed_incr",
value: 0,
},
{
name: "scroll_speed_cap",
value: 0,
},
],
},
animation: {
id: "normal",
image: "effects/particles.png",
x: 179,
y: 135,
w: 28,
h: 28,
#collide="0,0,28,28"
frames: 1,
duration: 1000000,
},
}
|