Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dynamic glow effect [needs rebase] #209

Draft
wants to merge 104 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
104 commits
Select commit Hold shift + click to select a range
e1a7bfb
coroutines (proof of concept)
Akaricchi Jun 26, 2019
f6c37da
coroutines: change WAIT(x) to mean "YIELD x times"
Akaricchi Jul 3, 2019
9739df6
generic facility for "breakable" YIELD/WAIT
Akaricchi Jul 3, 2019
cd85cef
replace libco with libkoishi
Akaricchi Jul 13, 2019
951a1c8
implement simple task pooling
Akaricchi Jul 13, 2019
3d871cc
fix -Wassume
Akaricchi Jul 14, 2019
9bd83b0
make enemy logic rule optional
Akaricchi Jul 15, 2019
8e5467d
"Boxed" entities; facility to bind tasks to entity lifetime
Akaricchi Jul 16, 2019
29a9212
experimental event system for coroutine-based stages
Akaricchi Jul 17, 2019
f6049b0
coroutines: task finalizers; fix enemy death event
Akaricchi Jul 17, 2019
c2ac8b9
add kill_projectile() as a kind-of ACTION_DESTROY substitute
Akaricchi Jul 19, 2019
61877e8
generalize common bullet motion rules; add some math helpers
Akaricchi Jul 20, 2019
5e2acbb
add 'killed' event for projectiles
Akaricchi Jul 20, 2019
e4c38ce
Add a way to define extern tasks (to reference across files)
Akaricchi Jul 21, 2019
9784cbe
INVOKE_TASK_DELAYED; CANCEL_TASK_WHEN; event robustness fixes
Akaricchi Jul 22, 2019
abfdc95
integrate task scheduling into the stage loop
Akaricchi Jul 23, 2019
e9a993b
task system tweaks and early Stage 1 port attempt
Akaricchi Jul 24, 2019
a818282
wip stage 1 progress
Akaricchi Jul 25, 2019
1b257ac
add generic move support for enemies
Akaricchi Jul 27, 2019
e7f9ad1
stage 1 wip: simplify circletoss fairies
Akaricchi Jul 27, 2019
17d0bde
stage 1 wip stuff
Akaricchi Jul 29, 2019
f415435
INLINE
Akaricchi Aug 3, 2019
8ab381d
stage 1 misery
Akaricchi Aug 11, 2019
d0df3ec
still not feeling it
Akaricchi Aug 14, 2019
f98352c
stage1 progress: pre-midboss section somewhat playable (tuned for lun…
Akaricchi Aug 17, 2019
25dbc8d
finish extra stage ;) ;) ;)
laochailan Aug 25, 2019
b8d5ac0
implement some infrastructure for coroutine bosses
Akaricchi Aug 30, 2019
64be0da
further task-boss infrastructure WIP
Akaricchi Sep 1, 2019
2292a72
add PFLAG_NOMOVE and PFLAG_MANUALANGLE
Akaricchi Sep 1, 2019
014ecdd
Add dependent subtasks; fix finalization bugs
Akaricchi Sep 1, 2019
a0b7019
remove some bad assertions
Akaricchi Sep 2, 2019
e766954
snowflake port
laochailan Sep 2, 2019
9a07c28
random wandering function
Akaricchi Sep 2, 2019
809587e
pfreeze
laochailan Sep 2, 2019
5655fc1
event-based way to wait for boss defeat and retrieve the waiting time
Akaricchi Sep 3, 2019
4ae2853
fix corruption when subtask ends before its parent
Akaricchi Oct 3, 2019
f3b744b
macro fuckery for boxed ent arrays
Akaricchi Oct 4, 2019
71d1fab
run upkeep
Akaricchi Oct 4, 2019
196106f
fix another subtask corruption
Akaricchi Oct 4, 2019
634cb20
remake Cirno's snowflake non
Akaricchi Oct 6, 2019
62f56e1
remove a bunch of stage1 dead code
Akaricchi Oct 6, 2019
c10177a
stupid shitfucked braindeath
Akaricchi Oct 6, 2019
cb96558
basic "bookmark" system for skipping to specific stage portions
Akaricchi Oct 11, 2019
a87c47c
sync music after skipping to bookmark
Akaricchi Oct 12, 2019
c391ebc
shut up some debug spam
Akaricchi Oct 12, 2019
c4d032b
WIP stage 1 post-midboss filler
Akaricchi Oct 12, 2019
6dbd291
Update koishi; add necessary link flags for emscripten
Akaricchi Oct 28, 2019
cd01955
fix non-pch build
Akaricchi Oct 28, 2019
585ce7c
port second half of stage 1 till boss
laochailan Oct 30, 2019
8185c2e
stage1: improve post-midboss filler
Akaricchi Nov 10, 2019
e961c05
RNG improvements (replay-breaking)
Akaricchi Nov 12, 2019
f507a33
fix double_to_bits (copypaste fail)
Akaricchi Nov 12, 2019
c831660
Emscripten compat fixups
Akaricchi Nov 19, 2019
04a3066
New RNG API, with crude semi-automatic misuse detection
Akaricchi Nov 13, 2019
cce13a7
update koishi
Akaricchi Nov 21, 2019
da7a721
more verbose coroutine debugging output
Akaricchi Nov 21, 2019
c5f125c
fix error: initializer element is not a compile-time constant
Akaricchi Nov 22, 2019
1ec9b2f
Experimental coroutine waiting optimization (WIP)
Akaricchi Nov 24, 2019
37a90c8
Switch koishi back to master branch
Akaricchi Nov 29, 2019
eb7d0d9
use new RNG api in boss.c, enemy.c, item.c
Akaricchi Nov 29, 2019
4b89ca3
ignore -Wdeprecated-declarations in impl. of deprecated RNG api
Akaricchi Nov 29, 2019
04162bd
use new RNG api in player.c
Akaricchi Nov 29, 2019
bb23891
fix regression: subtasks not immediatelly cancelled after parent dies
Akaricchi Dec 1, 2019
9553646
'finish' stage 1 part 2 (lunatic)
Akaricchi Dec 4, 2019
0b0062d
pimp up stage1 background
Akaricchi Dec 5, 2019
5468ac2
stage1: tweak boss appearance time
Akaricchi Dec 5, 2019
ee3769e
display number of active/allocated tasks
Akaricchi Dec 5, 2019
064f168
upgrade projectile.c to new RNG API
Akaricchi Dec 7, 2019
a7e36b0
upgrade stage.c to new RNG API
Akaricchi Dec 7, 2019
66cb468
upgrade projectile_prototypes.c to new RNG API
Akaricchi Dec 7, 2019
6a6a660
upgrade corotest.c to new RNG API
Akaricchi Dec 7, 2019
07fb6a1
upgrade reimu_b.c to new RNG API
Akaricchi Dec 7, 2019
78ac720
upgrade reimu_a.c to new RNG API
Akaricchi Dec 7, 2019
ed3f173
upgrade youmu_b.c to new RNG API
Akaricchi Dec 7, 2019
e43a037
upgrade youmu_a.c to new RNG API
Akaricchi Dec 7, 2019
7f55728
upgrade marisa_a.c to new RNG API
Akaricchi Dec 7, 2019
dbc48f4
upgrade marisa_b.c to new RNG API
Akaricchi Dec 7, 2019
772090d
update koishi
Akaricchi Dec 8, 2019
677ba83
update koishi for real this time
Akaricchi Dec 11, 2019
93ba83d
update koishi again
Akaricchi Dec 12, 2019
69586dd
fixup some post-rebase chaos
Akaricchi Dec 18, 2019
b5fc716
WIP proj draw rule revamp; YoumuB revamp; misc changes; giant mess
Akaricchi Dec 11, 2019
a034250
shut up deprecation warnings from outdated stages
Akaricchi Dec 24, 2019
7fb0693
new bullet clear effect
Akaricchi Dec 27, 2019
86d5c3f
emscripten: build with STRICT=1; use closure in release builds
Akaricchi Dec 29, 2019
0b4c8e1
emscripten: move all JS code out of the html
Akaricchi Jan 3, 2020
5616fde
Get rid of youmu_common_draw_proj
Akaricchi Jan 3, 2020
997e254
replace remaining Shrink usage in non-stage code
Akaricchi Jan 3, 2020
dcafa42
replace remaining Fade usage in non-stage code
Akaricchi Jan 3, 2020
579c4f1
Make animation_get_frame never return transient sprites
Akaricchi Jan 4, 2020
ddf1411
fix MarisaA laser flares
Akaricchi Jan 4, 2020
62fca6c
replace remaining GrowFade usage in non-stage code
Akaricchi Jan 4, 2020
2490487
fix and tweak player death effect
Akaricchi Jan 4, 2020
737e2d1
clean up some dead code
Akaricchi Jan 5, 2020
b26226b
remove DeathShrink
Akaricchi Jan 6, 2020
a561234
fix some trivial deprecations
Akaricchi Jan 6, 2020
74bf6f6
'modernize' youmu_particle_slice_draw
Akaricchi Jan 6, 2020
c615492
fix remaining deprecations (except in legacy stages)
Akaricchi Jan 6, 2020
8a202cf
convert reimu_dream_needle into a task (test)
Akaricchi Jan 6, 2020
b38778f
show num. of context swiches/frame in coroutine stats
Akaricchi Jan 10, 2020
55dc548
cont. coroutinizing ReimuB; gapping works properly now
Akaricchi Jan 10, 2020
2de0a6b
Track peak coroutine stack usage (approximate)
Akaricchi Jan 11, 2020
85c97ac
WIP dynamic glow effect
Akaricchi Jan 19, 2020
3e1591f
add forgotten glow shaders
Akaricchi Jan 23, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,5 @@ __pycache__
*.kdev4
.kdev4/
*.kate-swp
*~
*-autosave.kra
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,6 @@
path = external/gamecontrollerdb
url = https://github.com/taisei-project/SDL_GameControllerDB.git
branch = master
[submodule "external/koishi"]
path = external/koishi
url = https://github.com/taisei-project/koishi
Binary file removed atlas/common/part/stardust.png
Binary file not shown.
Binary file removed atlas/common/proj/hghost.png
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added atlas/coroutines_temp/part/stardust.webp
Binary file not shown.
Binary file added atlas/coroutines_temp/proj/hghost.webp
Binary file not shown.
1 change: 1 addition & 0 deletions atlas/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ atlases = [
['gray16', [preset_png]],
['huge', []],
['portraits', ['--width=4096', '--height=4096']],
['coroutines_temp', []], # TODO merge this into `common` when coroutines are merged
]

atlas_profiles = [
Expand Down
5 changes: 2 additions & 3 deletions atlas/overrides/proj/hghost.spr
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@

w = 22
h = 23
w = 21
h = 34
128 changes: 101 additions & 27 deletions emscripten/preamble.js
Original file line number Diff line number Diff line change
@@ -1,22 +1,106 @@

Module['preRun'].push(function() {
ENV["TAISEI_NOASYNC"] = "1";
ENV["TAISEI_NOUNLOAD"] = "1";
ENV["TAISEI_PREFER_SDL_VIDEODRIVERS"] = "emscripten";
ENV["TAISEI_RENDERER"] = "gles30";

FS.mkdir('/persistent');
FS.mount(IDBFS, {}, '/persistent');

// This function has been removed from Emscripten, but SDL still uses it...
Module['Pointer_stringify'] = function(ptr) {
return UTF8ToString(ptr);
}
function E(id) { return document.getElementById(id); }

var statusElement = E('status');
var progressElement = E('progress');
var spinnerElement = E('spinner');
var canvasElement = E('canvas');
var canvasContainerElement = E('canvasContainer');
var logToggleElement = E('logToggle');
var logToggleContainerElement = E('logToggleContainer');
var logContainerElement = E('logContainer');
var logOutputElement = E('output');
var dlMessage = statusElement.innerText;
logToggleElement.checked = false;

Pointer_stringify = Module['Pointer_stringify']
window.Pointer_stringify = Module['Pointer_stringify']
function toggleLog() {
logContainerElement.hidden = !logToggleElement.checked;
logOutputElement.scrollTop = logOutputElement.scrollHeight;
}

var glContext = canvasElement.getContext('webgl2', {
'alpha' : false,
'antialias' : false,
'depth' : false,
'powerPreference' : 'high-performance',
'premultipliedAlpha' : true,
'preserveDrawingBuffer' : false,
'stencil' : false,
});

// glContext = WebGLDebugUtils.makeDebugContext(glContext);

canvasElement.addEventListener("webglcontextlost", function(e) {
alert('WebGL context lost. You will need to reload the page.');
e.preventDefault();
}, false);

logOutputElement.value = ''; // clear browser cache

Module = {
'preRun': [function() {
ENV["TAISEI_NOASYNC"] = "1";
ENV["TAISEI_NOUNLOAD"] = "1";
ENV["TAISEI_PREFER_SDL_VIDEODRIVERS"] = "emscripten";
ENV["TAISEI_RENDERER"] = "gles30";

FS.mkdir('/persistent');
FS.mount(IDBFS, {}, '/persistent');
}],
'postRun': [],
'onFirstFrame': function() {
canvasContainerElement.hidden = false;
logToggleContainerElement.style.display = "inline-block";
Module['setStatus']('', true);
},
'print': function(text) {
if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
console.log(text);
logOutputElement.value += text + "\n";
logOutputElement.scrollTop = logOutputElement.scrollHeight; // focus on bottom
},
'printErr': function(text) {
if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
console.error(text);
},
'canvas': canvasElement,
'preinitializedWebGLContext': glContext,
'setStatus': function(text, force) {
var ss = Module['setStatus'];
if (!text && !force) return;
if (!ss.last) ss.last = { time: Date.now(), text: '' };
if (text === ss.last.text) return;
var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/);
var now = Date.now();
if (m && now - ss.last.time < 30) return; // if this is a progress update, skip it if too soon
ss.last.time = now;
ss.last.text = text;
if (m) {
text = m[1];
progressElement.value = parseInt(m[2])*100;
progressElement.max = parseInt(m[4])*100;
progressElement.hidden = false;
spinnerElement.hidden = false;
} else {
progressElement.value = null;
progressElement.max = null;
progressElement.hidden = true;
if (!text) spinnerElement.hidden = true;
}
statusElement.innerText = text.replace(/^Downloading(?: data)?\.\.\./, dlMessage).replace('...', '…');
console.log("[STATUS] " + statusElement.innerText);
},
'totalDependencies': 0,
'monitorRunDependencies': function(left) {
Module['totalDependencies'] = Math.max(Module['totalDependencies'], left);
Module['setStatus'](left ? 'Preparing… (' + (Module['totalDependencies']-left) + '/' + Module['totalDependencies'] + ')' : 'All downloads complete.');
}
};

window.onerror = function(error) {
Module['setStatus']('Error: ' + error);
};

function SyncFS(is_load, ccptr) {
FS.syncfs(is_load, function(err) {
Module['ccall'](
Expand All @@ -25,16 +109,6 @@ function SyncFS(is_load, ccptr) {
[is_load, err, ccptr]
);
});
};

Module['preinitializedWebGLContext'] = document.getElementById('canvas').getContext('webgl2', {
alpha : false,
antialias : false,
depth : false,
powerPreference : 'high-performance',
premultipliedAlpha : true,
preserveDrawingBuffer : false,
stencil : false,
});
}

// Module['preinitializedWebGLContext'] = WebGLDebugUtils.makeDebugContext(Module['preinitializedWebGLContext']);
var debug_tables; // closure may fail on debug builds without this
85 changes: 0 additions & 85 deletions emscripten/shell.html
Original file line number Diff line number Diff line change
Expand Up @@ -210,91 +210,6 @@ <h3>Note: this web port is experimental and may not perform as well as the origi
<br/>
Powered by&nbsp;<a href="https://emscripten.org/">Emscripten</a>
</div>
<script>
var statusElement = document.getElementById('status');
var progressElement = document.getElementById('progress');
var spinnerElement = document.getElementById('spinner');
var canvasContainerElement = document.getElementById('canvasContainer');
var logToggleElement = document.getElementById('logToggle');
var logContainerElement = document.getElementById('logContainer');
var logOutputElement = document.getElementById('output');
var dlMessage = statusElement.innerText;
logToggleElement.checked = false;

function toggleLog() {
logContainerElement.hidden = !logToggleElement.checked;
logOutputElement.scrollTop = logOutputElement.scrollHeight;
}

var Taisei = {
preRun: [],
postRun: [],
onFirstFrame: function() {
canvasContainerElement.hidden = false;
logToggleContainer.style.display = "inline-block";
Taisei.setStatus('', true);
},
print: (function() {
logOutputElement.value = ''; // clear browser cache
return function(text) {
if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
console.log(text);
logOutputElement.value += text + "\n";
logOutputElement.scrollTop = logOutputElement.scrollHeight; // focus on bottom
};
})(),
printErr: function(text) {
if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
console.error(text);
},
canvas: (function() {
var canvas = document.getElementById('canvas');

// As a default initial behavior, pop up an alert when webgl context is lost. To make your
// application robust, you may want to override this behavior before shipping!
// See http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15.2
canvas.addEventListener("webglcontextlost", function(e) {
alert('WebGL context lost. You will need to reload the page.');
e.preventDefault();
}, false);

return canvas;
})(),
setStatus: function(text, force) {
if (!text && !force) return;
if (!Taisei.setStatus.last) Taisei.setStatus.last = { time: Date.now(), text: '' };
if (text === Taisei.setStatus.last.text) return;
var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/);
var now = Date.now();
if (m && now - Taisei.setStatus.last.time < 30) return; // if this is a progress update, skip it if too soon
Taisei.setStatus.last.time = now;
Taisei.setStatus.last.text = text;
if (m) {
text = m[1];
progressElement.value = parseInt(m[2])*100;
progressElement.max = parseInt(m[4])*100;
progressElement.hidden = false;
spinnerElement.hidden = false;
} else {
progressElement.value = null;
progressElement.max = null;
progressElement.hidden = true;
if (!text) spinnerElement.hidden = true;
}
statusElement.innerText = text.replace(/^Downloading(?: data)?\.\.\./, dlMessage).replace('...', '…');
console.log("[STATUS] " + statusElement.innerText);
},
totalDependencies: 0,
monitorRunDependencies: function(left) {
this.totalDependencies = Math.max(this.totalDependencies, left);
Taisei.setStatus(left ? 'Preparing… (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.');
}
};

window.onerror = function(error) {
Taisei.setStatus('Error: ' + error);
};
</script>
<!--<script type="text/javascript" src="webgl-debug.js"></script>-->
{{{ SCRIPT }}}
</body>
Expand Down
1 change: 1 addition & 0 deletions external/koishi
Submodule koishi added at 29a278
7 changes: 7 additions & 0 deletions meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -165,10 +165,12 @@ dep_m = cc.find_library('m', required : false)

dep_cglm = subproject('cglm').get_variable('cglm_dep')
dep_glad = subproject('glad').get_variable('glad_dep')
dep_koishi = subproject('koishi').get_variable('koishi_dep')

taisei_deps = [
dep_cglm,
dep_freetype,
dep_koishi,
dep_m,
dep_png,
dep_sdl2,
Expand Down Expand Up @@ -248,6 +250,11 @@ config.set('TAISEI_BUILDCONF_HAVE_TIMESPEC', have_timespec)
config.set('TAISEI_BUILDCONF_HAVE_INT128', cc.sizeof('__int128') == 16)
config.set('TAISEI_BUILDCONF_HAVE_LONG_DOUBLE', cc.sizeof('long double') > 8)
config.set('TAISEI_BUILDCONF_HAVE_POSIX', have_posix)
config.set('TAISEI_BUILDCONF_HAVE_SINCOS', cc.has_function('sincos', dependencies : dep_m))

if config.get('TAISEI_BUILDCONF_HAVE_SINCOS')
config.set('_GNU_SOURCE', true)
endif

if host_machine.system() == 'emscripten'
# Emscripten bug: https://github.com/emscripten-core/emscripten/issues/10072
Expand Down
7 changes: 7 additions & 0 deletions resources/00-taisei.pkgdir/gfx/atlas_coroutines_temp_0.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Autogenerated by the atlas packer, do not modify

source = res/gfx/atlas_coroutines_temp_0.webp

# -- Pasted from the global override file --

anisotropy = 1
Binary file not shown.
3 changes: 3 additions & 0 deletions resources/00-taisei.pkgdir/gfx/part/bullet_clear.ani
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
@sprite_count = 33

main = 0 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
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Autogenerated by the atlas packer, do not modify

texture = atlas_coroutines_temp_0
region_x = 1609
region_y = 2
region_w = 163
region_h = 163
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Autogenerated by the atlas packer, do not modify

texture = atlas_coroutines_temp_0
region_x = 1442
region_y = 2
region_w = 163
region_h = 163
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Autogenerated by the atlas packer, do not modify

texture = atlas_coroutines_temp_0
region_x = 1776
region_y = 2
region_w = 163
region_h = 163
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Autogenerated by the atlas packer, do not modify

texture = atlas_coroutines_temp_0
region_x = 774
region_y = 2
region_w = 163
region_h = 163
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Autogenerated by the atlas packer, do not modify

texture = atlas_coroutines_temp_0
region_x = 1108
region_y = 2
region_w = 163
region_h = 163
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Autogenerated by the atlas packer, do not modify

texture = atlas_coroutines_temp_0
region_x = 607
region_y = 2
region_w = 163
region_h = 163
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Autogenerated by the atlas packer, do not modify

texture = atlas_coroutines_temp_0
region_x = 941
region_y = 2
region_w = 163
region_h = 163
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Autogenerated by the atlas packer, do not modify

texture = atlas_coroutines_temp_0
region_x = 1275
region_y = 2
region_w = 163
region_h = 163
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Autogenerated by the atlas packer, do not modify

texture = atlas_coroutines_temp_0
region_x = 1943
region_y = 2
region_w = 163
region_h = 163
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Autogenerated by the atlas packer, do not modify

texture = atlas_coroutines_temp_0
region_x = 2110
region_y = 2
region_w = 163
region_h = 163
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Autogenerated by the atlas packer, do not modify

texture = atlas_coroutines_temp_0
region_x = 2277
region_y = 2
region_w = 163
region_h = 163
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Autogenerated by the atlas packer, do not modify

texture = atlas_coroutines_temp_0
region_x = 2778
region_y = 2
region_w = 163
region_h = 163
Loading