diff --git a/.gitignore b/.gitignore index 3905687..9ca26e0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ *.obj *.exe *.html -__temp*.* \ No newline at end of file +__temp*.* +*.dll diff --git a/4kdemo.compofiller b/4kdemo.compofiller index a1db361..baa5bd0 100644 --- a/4kdemo.compofiller +++ b/4kdemo.compofiller @@ -6,7 +6,7 @@ PROJECT_INFO_FILE=prod.nfo PROJECT_SCREENSHOT= # Currently active config file name -ACTIVE_CONFIG=base.config +ACTIVE_CONFIG=minified.config # ------- GUI options/preferences -------- # Automatically rebuild DLLs when things have changed? diff --git a/4klang.h b/4klang.h index 6f477e5..668b979 100644 --- a/4klang.h +++ b/4klang.h @@ -1,12 +1,12 @@ // some useful song defines for 4klang #define SAMPLE_RATE 44100 -#define BPM 120.000000 -#define MAX_INSTRUMENTS 3 -#define MAX_PATTERNS 50 +#define BPM 133.000000 +#define MAX_INSTRUMENTS 5 +#define MAX_PATTERNS 52 #define PATTERN_SIZE_SHIFT 4 #define PATTERN_SIZE (1 << PATTERN_SIZE_SHIFT) #define MAX_TICKS (MAX_PATTERNS*PATTERN_SIZE) -#define SAMPLES_PER_TICK 5512 +#define SAMPLES_PER_TICK 4973 #define MAX_SAMPLES (SAMPLES_PER_TICK*MAX_TICKS) #define POLYPHONY 1 #define INTEGER_16BIT diff --git a/4klang.inc b/4klang.inc index 84cc72f..955645b 100644 --- a/4klang.inc +++ b/4klang.inc @@ -4,34 +4,41 @@ %endmacro %define USE_SECTIONS %define SAMPLE_RATE 44100 -%define MAX_INSTRUMENTS 3 +%define MAX_INSTRUMENTS 5 %define MAX_VOICES 1 %define HLD 1 -%define BPM 120.000000 -%define MAX_PATTERNS 50 +%define BPM 133.000000 +%define MAX_PATTERNS 52 %define PATTERN_SIZE_SHIFT 4 %define PATTERN_SIZE (1 << PATTERN_SIZE_SHIFT) %define MAX_TICKS (MAX_PATTERNS*PATTERN_SIZE) -%define SAMPLES_PER_TICK 5512 -%define DEF_LFO_NORMALIZE 0.0000453515 +%define SAMPLES_PER_TICK 4973 +%define DEF_LFO_NORMALIZE 0.0000502645 %define MAX_SAMPLES (SAMPLES_PER_TICK*MAX_TICKS) %define GO4K_USE_16BIT_OUTPUT ;%define GO4K_USE_GROOVE_PATTERN ;%define GO4K_USE_ENVELOPE_RECORDINGS -;%define GO4K_USE_NOTE_RECORDINGS +%define GO4K_USE_NOTE_RECORDINGS %define GO4K_CLIP_OUTPUT +%define GO4K_USE_DST %define GO4K_USE_DLL +%define GO4K_USE_PAN %define GO4K_USE_GLOBAL_DLL %define GO4K_USE_ENV_CHECK +%define GO4K_USE_ENV_MOD_GM %define GO4K_USE_VCO_CHECK +%define GO4K_USE_VCO_PHASE_OFFSET %define GO4K_USE_VCO_SHAPE +%define GO4K_USE_VCO_MOD_TM +%define GO4K_USE_VCO_MOD_DM +%define GO4K_USE_VCO_MOD_CM %define GO4K_USE_VCF_CHECK -%define GO4K_USE_VCF_MOD_FM %define GO4K_USE_VCF_HIGH %define GO4K_USE_VCF_BAND %define GO4K_USE_VCF_PEAK +%define GO4K_USE_VCF_STEREO %define GO4K_USE_DST_CHECK -%define GO4K_USE_DLL_CHORUS +%define GO4K_USE_DST_SH %define GO4K_USE_DLL_CHORUS_CLAMP %define GO4K_USE_DLL_DAMP %define GO4K_USE_DLL_DC_FILTER @@ -445,25 +452,51 @@ section .data align=1 %endif go4k_patterns db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - db 48, HLD, HLD, 48, HLD, HLD, 43, HLD, 41, HLD, HLD, 41, 0, 0, 0, 0, - db 41, HLD, HLD, 41, HLD, HLD, 43, HLD, 48, HLD, HLD, 48, 0, 0, 0, 0, - db 43, HLD, HLD, 43, HLD, HLD, 46, HLD, 48, HLD, HLD, 48, 0, 0, 0, 0, - db 41, HLD, HLD, 41, HLD, HLD, 53, HLD, 41, HLD, HLD, 41, 0, 0, 0, 0, - db 48, HLD, HLD, 48, HLD, HLD, 60, HLD, 48, HLD, HLD, 48, 0, 0, 0, 0, - db 0, 0, 84, HLD, HLD, HLD, 79, 0, 82, 79, 0, 77, 0, 75, HLD, 0, - db 72, 0, 72, 0, 75, 0, 82, 79, HLD, HLD, 79, 0, 0, 0, 0, 0, - db 72, 0, 72, 0, 75, 0, 75, 72, HLD, HLD, 72, 0, 0, 0, 0, 0, - db 87, HLD, HLD, HLD, 0, 0, 84, 0, 0, 0, 84, 0, 84, 0, 0, 0, - db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 82, 0, 84, 82, 79, - db 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, HLD, 0, 89, 0, 87, 0, - db 89, HLD, HLD, HLD, 0, 0, 84, 0, 0, 0, 84, 0, 84, 0, 0, 0, - db 75, HLD, HLD, 75, HLD, HLD, 70, HLD, 68, HLD, HLD, 68, 0, 0, 0, 0, - db 68, HLD, HLD, 68, HLD, HLD, 70, HLD, 75, HLD, HLD, 75, 0, 0, 0, 0, - db 70, HLD, HLD, 70, HLD, HLD, 70, HLD, 75, HLD, HLD, 75, 0, 0, 0, 0, - db 68, HLD, HLD, 68, HLD, HLD, 70, HLD, HLD, 70, HLD, HLD, 70, HLD, 0, 0, - db 68, HLD, HLD, 68, HLD, HLD, 68, HLD, 70, HLD, HLD, 70, 0, 0, 70, HLD, - db 70, HLD, HLD, 70, HLD, HLD, 75, HLD, HLD, 75, HLD, HLD, 75, HLD, 0, 0, - db 70, HLD, HLD, 70, HLD, HLD, 70, HLD, 75, HLD, HLD, 75, 0, 0, 75, HLD, + db 38, HLD, 0, 0, 38, HLD, HLD, HLD, 0, 0, 38, 0, 48, 50, HLD, HLD, + db 0, 0, 50, 0, 38, HLD, HLD, HLD, 50, 0, 50, 0, 38, HLD, HLD, HLD, + db 0, 0, 38, 0, 38, HLD, 38, 38, 48, HLD, 50, HLD, 53, HLD, 52, HLD, + db 38, 0, 38, 0, 38, HLD, HLD, HLD, HLD, HLD, 0, 0, 38, HLD, 50, HLD, + db 0, 0, 50, 0, 38, 0, 38, 38, 46, HLD, 48, HLD, 57, HLD, 48, HLD, + db 46, HLD, 0, 0, 46, HLD, HLD, HLD, 0, 0, 46, 0, 47, HLD, 48, HLD, + db 0, 0, 48, 0, 36, HLD, HLD, HLD, 36, 0, 48, 0, 48, HLD, HLD, HLD, + db 38, HLD, 0, 0, 38, HLD, HLD, HLD, 0, 0, 38, 0, 48, HLD, 50, HLD, + db HLD, 0, 50, 0, 38, HLD, HLD, HLD, 38, HLD, 50, HLD, 48, HLD, 36, HLD, + db 43, HLD, 0, 0, 43, HLD, HLD, HLD, 55, HLD, 43, HLD, HLD, HLD, 55, HLD, + db 41, 0, 41, 0, 41, HLD, HLD, HLD, 53, HLD, 41, HLD, 41, HLD, HLD, HLD, + db 40, HLD, 0, 0, 40, HLD, HLD, HLD, 52, HLD, 40, HLD, HLD, HLD, 52, HLD, + db 45, 0, 45, 0, 45, HLD, HLD, HLD, 57, HLD, 45, HLD, 45, HLD, HLD, HLD, + db 50, HLD, 0, 0, 50, HLD, HLD, HLD, 62, HLD, 50, HLD, HLD, HLD, 62, HLD, + db 43, 0, 43, 0, 43, HLD, HLD, HLD, 55, HLD, 43, HLD, 43, HLD, HLD, HLD, + db 48, HLD, 0, 0, 48, HLD, HLD, HLD, 60, HLD, 48, HLD, HLD, HLD, 60, HLD, + db 48, 0, 48, 0, 48, HLD, HLD, HLD, 60, HLD, 48, HLD, 48, HLD, HLD, HLD, + db 48, HLD, HLD, 48, HLD, HLD, 48, HLD, HLD, HLD, 48, HLD, HLD, HLD, 48, HLD, + db HLD, HLD, 48, HLD, HLD, HLD, 48, 48, HLD, HLD, 48, HLD, HLD, HLD, HLD, HLD, + db 48, HLD, HLD, 48, HLD, HLD, 48, HLD, HLD, HLD, 48, HLD, HLD, HLD, HLD, HLD, + db HLD, HLD, 48, HLD, HLD, HLD, 48, HLD, HLD, HLD, 48, HLD, HLD, HLD, HLD, HLD, + db 48, HLD, 48, HLD, HLD, HLD, 48, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, + db 48, HLD, 48, HLD, HLD, HLD, 48, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 48, HLD, + db 48, HLD, HLD, HLD, HLD, HLD, 48, HLD, HLD, HLD, 48, HLD, HLD, HLD, HLD, HLD, + db 0, 0, 0, 0, 0, 0, 0, 0, 60, HLD, HLD, HLD, HLD, HLD, HLD, HLD, + db HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD, HLD, HLD, 60, HLD, HLD, HLD, + db HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD, HLD, HLD, HLD, HLD, HLD, HLD, + db HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 48, HLD, HLD, HLD, HLD, HLD, HLD, HLD, + db 74, HLD, HLD, HLD, HLD, HLD, 69, HLD, HLD, HLD, HLD, HLD, 72, HLD, HLD, HLD, + db HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 74, HLD, HLD, HLD, 76, HLD, HLD, HLD, + db 77, HLD, HLD, HLD, 76, HLD, 74, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, + db HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0, + db 74, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, + db HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0, + db 70, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, + db 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, + db 76, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, + db 77, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, + db 79, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, + db 81, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, + db HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 76, HLD, HLD, HLD, HLD, HLD, HLD, HLD, + db 67, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, + db 69, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, + db 73, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, + db 71, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, go4k_patterns_end %ifdef USE_SECTIONS section .g4kmuc2 data align=1 @@ -471,9 +504,11 @@ section .g4kmuc2 data align=1 section .data %endif go4k_pattern_lists -Instrument0List db 0, 0, 0, 0, 1, 2, 1, 3, 1, 2, 1, 3, 1, 2, 1, 3, 4, 4, 5, 5, 4, 4, 5, 5, 4, 4, 5, 5, 4, 4, 5, 5, 0, 0, 0, 0, 1, 2, 1, 3, 1, 2, 1, 3, 1, 2, 1, 3, 0, 0, -Instrument1List db 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 6, 8, 6, 7, 6, 8, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 9, 11, 12, 11, 12, 0, 6, 7, 6, 8, 6, 7, 6, 8, 9, 11, 9, 0, 6, 7, 6, 8, 0, 0, -Instrument2List db 13, 14, 13, 15, 13, 14, 13, 15, 13, 14, 13, 15, 13, 14, 13, 15, 16, 17, 18, 19, 16, 17, 18, 19, 16, 17, 18, 19, 16, 17, 18, 19, 13, 14, 13, 15, 13, 14, 13, 15, 13, 14, 13, 0, 13, 14, 13, 15, 0, 0, +Instrument0List db 1, 2, 1, 3, 1, 2, 1, 3, 1, 2, 4, 5, 1, 3, 1, 2, 6, 7, 8, 9, 6, 7, 1, 2, 10, 11, 12, 13, 14, 15, 16, 17, 10, 11, 12, 13, 14, 15, 16, 17, 1, 2, 1, 3, 1, 2, 1, 3, 1, 2, 1, 3, +Instrument2List db 18, 19, 18, 19, 18, 19, 18, 19, 20, 21, 20, 21, 18, 21, 18, 21, 18, 21, 18, 21, 18, 21, 18, 21, 18, 21, 18, 21, 18, 21, 18, 21, 18, 21, 18, 21, 18, 21, 18, 21, 22, 21, 23, 19, 24, 21, 18, 19, 24, 21, 18, 19, +Instrument3List db 25, 26, 27, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, +Instrument4List db 0, 0, 0, 0, 0, 0, 0, 0, 29, 30, 31, 32, 29, 30, 33, 32, 29, 30, 31, 32, 29, 30, 33, 34, 35, 36, 33, 37, 38, 39, 38, 37, 35, 36, 33, 37, 38, 39, 40, 39, 38, 41, 33, 34, 0, 0, 0, 0, 0, 0, 0, 0, +Instrument5List db 0, 0, 0, 0, 0, 0, 0, 0, 29, 30, 31, 32, 29, 30, 33, 32, 29, 30, 31, 32, 29, 30, 33, 34, 42, 43, 35, 44, 36, 33, 36, 36, 42, 43, 35, 44, 36, 45, 43, 42, 38, 41, 33, 34, 0, 0, 0, 0, 0, 0, 0, 0, go4k_pattern_lists_end %ifdef USE_SECTIONS section .g4kmuc3 data align=1 @@ -483,45 +518,101 @@ section .data go4k_synth_instructions GO4K_BEGIN_CMDDEF(Instrument0) db GO4K_ENV_ID - db GO4K_ENV_ID + db GO4K_VCO_ID db GO4K_FST_ID db GO4K_FOP_ID db GO4K_VCO_ID + db GO4K_FST_ID + db GO4K_FST_ID + db GO4K_FOP_ID + db GO4K_VCO_ID + db GO4K_FST_ID + db GO4K_FOP_ID + db GO4K_VCO_ID + db GO4K_VCO_ID + db GO4K_VCO_ID + db GO4K_FOP_ID + db GO4K_FOP_ID + db GO4K_VCF_ID + db GO4K_FOP_ID + db GO4K_PAN_ID + db GO4K_OUT_ID +GO4K_END_CMDDEF +GO4K_BEGIN_CMDDEF(Instrument2) + db GO4K_ENV_ID + db GO4K_FST_ID + db GO4K_ENV_ID + db GO4K_DST_ID + db GO4K_FST_ID + db GO4K_FOP_ID + db GO4K_VCO_ID + db GO4K_FOP_ID + db GO4K_PAN_ID + db GO4K_OUT_ID +GO4K_END_CMDDEF +GO4K_BEGIN_CMDDEF(Instrument3) + db GO4K_ENV_ID + db GO4K_FST_ID + db GO4K_ENV_ID + db GO4K_FST_ID + db GO4K_FST_ID + db GO4K_FOP_ID + db GO4K_VCO_ID + db GO4K_VCO_ID + db GO4K_VCO_ID + db GO4K_VCF_ID + db GO4K_FOP_ID + db GO4K_FOP_ID db GO4K_FOP_ID db GO4K_VCF_ID db GO4K_PAN_ID db GO4K_OUT_ID GO4K_END_CMDDEF -GO4K_BEGIN_CMDDEF(Instrument1) +GO4K_BEGIN_CMDDEF(Instrument4) db GO4K_ENV_ID + db GO4K_FST_ID + db GO4K_VCO_ID + db GO4K_VCO_ID + db GO4K_VCO_ID + db GO4K_FST_ID + db GO4K_FST_ID + db GO4K_FOP_ID + db GO4K_FOP_ID + db GO4K_FOP_ID + db GO4K_VCF_ID + db GO4K_VCF_ID + db GO4K_DST_ID + db GO4K_PAN_ID + db GO4K_DLL_ID + db GO4K_FOP_ID + db GO4K_DLL_ID + db GO4K_FOP_ID + db GO4K_OUT_ID +GO4K_END_CMDDEF +GO4K_BEGIN_CMDDEF(Instrument5) db GO4K_ENV_ID + db GO4K_VCO_ID db GO4K_FST_ID db GO4K_FOP_ID db GO4K_VCO_ID + db GO4K_FST_ID + db GO4K_FST_ID + db GO4K_FOP_ID + db GO4K_VCO_ID + db GO4K_FST_ID + db GO4K_FOP_ID + db GO4K_VCO_ID + db GO4K_VCO_ID + db GO4K_VCO_ID + db GO4K_FOP_ID db GO4K_FOP_ID db GO4K_VCF_ID db GO4K_FOP_ID - db GO4K_VCF_ID db GO4K_DLL_ID - db GO4K_FOP_ID - db GO4K_VCF_ID + db GO4K_PAN_ID db GO4K_DLL_ID db GO4K_OUT_ID GO4K_END_CMDDEF -GO4K_BEGIN_CMDDEF(Instrument2) - db GO4K_ENV_ID - db GO4K_VCO_ID - db GO4K_VCO_ID - db GO4K_FOP_ID - db GO4K_VCO_ID - db GO4K_FOP_ID - db GO4K_FOP_ID - db GO4K_FOP_ID - db GO4K_VCF_ID - db GO4K_FOP_ID - db GO4K_VCF_ID - db GO4K_OUT_ID -GO4K_END_CMDDEF GO4K_BEGIN_CMDDEF(Global) db GO4K_ACC_ID db GO4K_DLL_ID @@ -540,55 +631,111 @@ section .data %endif go4k_synth_parameter_values GO4K_BEGIN_PARAMDEF(Instrument0) - GO4K_ENV ATTAC(5),DECAY(85),SUSTAIN(107),RELEASE(0),GAIN(128) - GO4K_ENV ATTAC(59),DECAY(95),SUSTAIN(0),RELEASE(64),GAIN(91) - GO4K_FST AMOUNT(80),DEST(6*MAX_UNIT_SLOTS+4+FST_SET) + GO4K_ENV ATTAC(9),DECAY(85),SUSTAIN(113),RELEASE(38),GAIN(119) + GO4K_VCO TRANSPOSE(64),DETUNE(64),PHASE(0),GATES(85),COLOR(128),SHAPE(64),GAIN(128),FLAGS(TRISAW|LFO) + GO4K_FST AMOUNT(52),DEST(11*MAX_UNIT_SLOTS+2+FST_SET) GO4K_FOP OP(FOP_POP) - GO4K_VCO TRANSPOSE(64),DETUNE(64),PHASE(0),GATES(0),COLOR(64),SHAPE(64),GAIN(128),FLAGS(TRISAW) - GO4K_FOP OP(FOP_MULP) - GO4K_VCF FREQUENCY(20),RESONANCE(23),VCFTYPE(LOWPASS) - GO4K_PAN PANNING(64) - GO4K_OUT GAIN(64), AUXSEND(0) -GO4K_END_PARAMDEF -GO4K_BEGIN_PARAMDEF(Instrument1) - GO4K_ENV ATTAC(23),DECAY(66),SUSTAIN(20),RELEASE(64),GAIN(128) - GO4K_ENV ATTAC(75),DECAY(77),SUSTAIN(20),RELEASE(64),GAIN(128) - GO4K_FST AMOUNT(92),DEST(6*MAX_UNIT_SLOTS+4+FST_SET) + GO4K_VCO TRANSPOSE(41),DETUNE(42),PHASE(55),GATES(85),COLOR(54),SHAPE(63),GAIN(128),FLAGS(SINE|LFO) + GO4K_FST AMOUNT(75),DEST(12*MAX_UNIT_SLOTS+2+FST_SET) + GO4K_FST AMOUNT(59),DEST(12*MAX_UNIT_SLOTS+5+FST_SET) GO4K_FOP OP(FOP_POP) - GO4K_VCO TRANSPOSE(64),DETUNE(64),PHASE(0),GATES(0),COLOR(64),SHAPE(64),GAIN(128),FLAGS(PULSE) + GO4K_VCO TRANSPOSE(74),DETUNE(64),PHASE(0),GATES(85),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE|LFO) + GO4K_FST AMOUNT(69),DEST(13*MAX_UNIT_SLOTS+2+FST_SET) + GO4K_FOP OP(FOP_POP) + GO4K_VCO TRANSPOSE(64),DETUNE(76),PHASE(22),GATES(85),COLOR(0),SHAPE(64),GAIN(128),FLAGS(TRISAW) + GO4K_VCO TRANSPOSE(64),DETUNE(60),PHASE(87),GATES(85),COLOR(128),SHAPE(64),GAIN(128),FLAGS(TRISAW) + GO4K_VCO TRANSPOSE(64),DETUNE(64),PHASE(0),GATES(85),COLOR(128),SHAPE(106),GAIN(128),FLAGS(SINE) + GO4K_FOP OP(FOP_ADDP) + GO4K_FOP OP(FOP_ADDP) + GO4K_VCF FREQUENCY(128),RESONANCE(89),VCFTYPE(LOWPASS|STEREO) GO4K_FOP OP(FOP_MULP) - GO4K_VCF FREQUENCY(38),RESONANCE(45),VCFTYPE(BANDPASS) - GO4K_FOP OP(FOP_PUSH) - GO4K_VCF FREQUENCY(56),RESONANCE(80),VCFTYPE(BANDSTOP) - GO4K_DLL PREGAIN(64),DRY(128),FEEDBACK(64),DAMP(64),FREQUENCY(35),DEPTH(57),DELAY(17),COUNT(1) - GO4K_FOP OP(FOP_XCH) - GO4K_VCF FREQUENCY(45),RESONANCE(94),VCFTYPE(BANDSTOP) - GO4K_DLL PREGAIN(64),DRY(128),FEEDBACK(64),DAMP(64),FREQUENCY(8),DEPTH(61),DELAY(18),COUNT(1) - GO4K_OUT GAIN(64), AUXSEND(0) + GO4K_PAN PANNING(63) + GO4K_OUT GAIN(128), AUXSEND(55) GO4K_END_PARAMDEF GO4K_BEGIN_PARAMDEF(Instrument2) - GO4K_ENV ATTAC(36),DECAY(75),SUSTAIN(0),RELEASE(64),GAIN(128) - GO4K_VCO TRANSPOSE(64),DETUNE(64),PHASE(0),GATES(0),COLOR(64),SHAPE(89),GAIN(128),FLAGS(TRISAW) - GO4K_VCO TRANSPOSE(68),DETUNE(64),PHASE(0),GATES(0),COLOR(64),SHAPE(89),GAIN(128),FLAGS(TRISAW) + GO4K_ENV ATTAC(0),DECAY(83),SUSTAIN(0),RELEASE(0),GAIN(100) + GO4K_FST AMOUNT(128),DEST(0*MAX_UNIT_SLOTS+2+FST_SET) + GO4K_ENV ATTAC(0),DECAY(73),SUSTAIN(0),RELEASE(0),GAIN(128) + GO4K_DST DRIVE(27), SNHFREQ(128), FLAGS(0) + GO4K_FST AMOUNT(86),DEST(6*MAX_UNIT_SLOTS+1+FST_SET) + GO4K_FOP OP(FOP_MULP) + GO4K_VCO TRANSPOSE(38),DETUNE(128),PHASE(20),GATES(85),COLOR(64),SHAPE(88),GAIN(90),FLAGS(TRISAW) + GO4K_FOP OP(FOP_MULP) + GO4K_PAN PANNING(64) + GO4K_OUT GAIN(128), AUXSEND(0) +GO4K_END_PARAMDEF +GO4K_BEGIN_PARAMDEF(Instrument3) + GO4K_ENV ATTAC(0),DECAY(74),SUSTAIN(0),RELEASE(0),GAIN(93) + GO4K_FST AMOUNT(128),DEST(0*MAX_UNIT_SLOTS+2+FST_SET) + GO4K_ENV ATTAC(0),DECAY(57),SUSTAIN(64),RELEASE(0),GAIN(128) + GO4K_FST AMOUNT(66),DEST(6*MAX_UNIT_SLOTS+1+FST_SET) + GO4K_FST AMOUNT(58),DEST(7*MAX_UNIT_SLOTS+1+FST_SET) + GO4K_FOP OP(FOP_POP) + GO4K_VCO TRANSPOSE(63),DETUNE(64),PHASE(0),GATES(85),COLOR(64),SHAPE(127),GAIN(83),FLAGS(NOISE) + GO4K_VCO TRANSPOSE(62),DETUNE(59),PHASE(14),GATES(85),COLOR(64),SHAPE(89),GAIN(67),FLAGS(SINE) + GO4K_VCO TRANSPOSE(68),DETUNE(64),PHASE(0),GATES(85),COLOR(42),SHAPE(65),GAIN(14),FLAGS(TRISAW) + GO4K_VCF FREQUENCY(98),RESONANCE(128),VCFTYPE(LOWPASS) GO4K_FOP OP(FOP_ADDP) - GO4K_VCO TRANSPOSE(71),DETUNE(64),PHASE(0),GATES(0),COLOR(64),SHAPE(85),GAIN(128),FLAGS(TRISAW) GO4K_FOP OP(FOP_ADDP) GO4K_FOP OP(FOP_MULP) - GO4K_FOP OP(FOP_PUSH) - GO4K_VCF FREQUENCY(36),RESONANCE(49),VCFTYPE(BANDPASS) + GO4K_VCF FREQUENCY(22),RESONANCE(11),VCFTYPE(HIGHPASS) + GO4K_PAN PANNING(64) + GO4K_OUT GAIN(45), AUXSEND(28) +GO4K_END_PARAMDEF +GO4K_BEGIN_PARAMDEF(Instrument4) + GO4K_ENV ATTAC(79),DECAY(96),SUSTAIN(95),RELEASE(82),GAIN(128) + GO4K_FST AMOUNT(68),DEST(0*MAX_UNIT_SLOTS+2+FST_SET) + GO4K_VCO TRANSPOSE(64),DETUNE(59),PHASE(0),GATES(85),COLOR(52),SHAPE(64),GAIN(128),FLAGS(PULSE) + GO4K_VCO TRANSPOSE(76),DETUNE(64),PHASE(64),GATES(85),COLOR(101),SHAPE(127),GAIN(111),FLAGS(TRISAW) + GO4K_VCO TRANSPOSE(32),DETUNE(64),PHASE(0),GATES(85),COLOR(128),SHAPE(64),GAIN(128),FLAGS(TRISAW|LFO) + GO4K_FST AMOUNT(61),DEST(2*MAX_UNIT_SLOTS+2+FST_SET) + GO4K_FST AMOUNT(63),DEST(3*MAX_UNIT_SLOTS+2+FST_SET) + GO4K_FOP OP(FOP_POP) + GO4K_FOP OP(FOP_ADDP) + GO4K_FOP OP(FOP_MULP) + GO4K_VCF FREQUENCY(26),RESONANCE(36),VCFTYPE(PEAK) + GO4K_VCF FREQUENCY(80),RESONANCE(44),VCFTYPE(LOWPASS) + GO4K_DST DRIVE(109), SNHFREQ(85), FLAGS(0) + GO4K_PAN PANNING(64) + GO4K_DLL PREGAIN(72),DRY(123),FEEDBACK(90),DAMP(49),FREQUENCY(0),DEPTH(0),DELAY(17),COUNT(1) GO4K_FOP OP(FOP_XCH) - GO4K_VCF FREQUENCY(49),RESONANCE(28),VCFTYPE(BANDPASS) - GO4K_OUT GAIN(46), AUXSEND(0) + GO4K_DLL PREGAIN(98),DRY(112),FEEDBACK(62),DAMP(45),FREQUENCY(0),DEPTH(0),DELAY(18),COUNT(1) + GO4K_FOP OP(FOP_XCH) + GO4K_OUT GAIN(59), AUXSEND(59) +GO4K_END_PARAMDEF +GO4K_BEGIN_PARAMDEF(Instrument5) + GO4K_ENV ATTAC(64),DECAY(70),SUSTAIN(70),RELEASE(88),GAIN(128) + GO4K_VCO TRANSPOSE(69),DETUNE(64),PHASE(0),GATES(85),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE|LFO) + GO4K_FST AMOUNT(72),DEST(11*MAX_UNIT_SLOTS+2+FST_SET) + GO4K_FOP OP(FOP_POP) + GO4K_VCO TRANSPOSE(73),DETUNE(64),PHASE(0),GATES(85),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE|LFO) + GO4K_FST AMOUNT(56),DEST(12*MAX_UNIT_SLOTS+2+FST_SET) + GO4K_FST AMOUNT(56),DEST(12*MAX_UNIT_SLOTS+5+FST_SET) + GO4K_FOP OP(FOP_POP) + GO4K_VCO TRANSPOSE(77),DETUNE(64),PHASE(0),GATES(85),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE|LFO) + GO4K_FST AMOUNT(72),DEST(13*MAX_UNIT_SLOTS+2+FST_SET) + GO4K_FOP OP(FOP_POP) + GO4K_VCO TRANSPOSE(64),DETUNE(64),PHASE(0),GATES(85),COLOR(0),SHAPE(64),GAIN(128),FLAGS(TRISAW) + GO4K_VCO TRANSPOSE(64),DETUNE(64),PHASE(0),GATES(85),COLOR(0),SHAPE(64),GAIN(128),FLAGS(TRISAW) + GO4K_VCO TRANSPOSE(64),DETUNE(64),PHASE(0),GATES(85),COLOR(0),SHAPE(64),GAIN(128),FLAGS(TRISAW) + GO4K_FOP OP(FOP_ADDP) + GO4K_FOP OP(FOP_ADDP) + GO4K_VCF FREQUENCY(104),RESONANCE(96),VCFTYPE(LOWPASS) + GO4K_FOP OP(FOP_MULP) + GO4K_DLL PREGAIN(64),DRY(64),FEEDBACK(64),DAMP(0),FREQUENCY(0),DEPTH(0),DELAY(19),COUNT(1) + GO4K_PAN PANNING(64) + GO4K_DLL PREGAIN(128),DRY(0),FEEDBACK(0),DAMP(0),FREQUENCY(0),DEPTH(0),DELAY(20),COUNT(1) + GO4K_OUT GAIN(128), AUXSEND(47) GO4K_END_PARAMDEF GO4K_BEGIN_PARAMDEF(Global) GO4K_ACC ACCTYPE(AUX) - GO4K_DLL PREGAIN(40),DRY(128),FEEDBACK(113),DAMP(64),FREQUENCY(0),DEPTH(0),DELAY(1),COUNT(8) + GO4K_DLL PREGAIN(39),DRY(90),FEEDBACK(93),DAMP(62),FREQUENCY(0),DEPTH(0),DELAY(1),COUNT(8) GO4K_FOP OP(FOP_XCH) - GO4K_DLL PREGAIN(40),DRY(128),FEEDBACK(103),DAMP(64),FREQUENCY(0),DEPTH(0),DELAY(9),COUNT(8) + GO4K_DLL PREGAIN(41),DRY(128),FEEDBACK(93),DAMP(74),FREQUENCY(0),DEPTH(0),DELAY(9),COUNT(8) GO4K_FOP OP(FOP_XCH) GO4K_ACC ACCTYPE(OUTPUT) GO4K_FOP OP(FOP_ADDP2) - GO4K_OUT GAIN(64), AUXSEND(16) + GO4K_OUT GAIN(67), AUXSEND(0) GO4K_END_PARAMDEF go4k_synth_parameter_values_end %ifdef USE_SECTIONS @@ -616,6 +763,8 @@ _go4k_delay_times dw 1516 dw 1580 dw 1642 - dw 22050 - dw 16537 + dw 19894 + dw 13263 + dw 29842 + dw 512 %endif diff --git a/_shader.glsl b/_shader.glsl new file mode 100644 index 0000000..ab6f27a --- /dev/null +++ b/_shader.glsl @@ -0,0 +1,272 @@ +// Compofiller Studio by Yzi 2018 +// +// Default template shader + +// This shader program is executed in the GPU (or a CPU-based emulation) for +// every pixel (i.e. "fragment" in OpenGL jargon) of every frame. + +// The "uniforms" are the same (i.e. uniform) for all pixels/fragments of the frame, +// and they come from the main program. +uniform float time; +uniform vec2 resolution; + +// If you choose to save some bytes and not use either of these uniforms, you have to +// do some additional tricks. +// * time : if you uncheck "[ ] Use time uniform" checkbox, time is in gl_Color.y (green component) +// * resolution : if you uncheck "[ ] Use resolution uniform" checkbox, you'll have to hard-code the resolution manually + +// The uniform-less version could look like this, 88200.0 being the time divider +//float time = gl_Color.y * 256.0 * (65536.0 / 88200.0); +//vec2 resolution = vec2(1280.0, 720.0); + +// Uncomment this to use the texture-based features +uniform sampler2D texture_sampler; + +// Uncomment this to use the texture-based features +uniform sampler2D texts; + +// License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. +// Created by S. Guillitte 2015 + +float zoom=1.; + +vec2 cmul( vec2 a, vec2 b ) { return vec2( a.x*b.x - a.y*b.y, a.x*b.y + a.y*b.x ); } +vec2 csqr( vec2 a ) { return vec2( a.x*a.x - a.y*a.y, 2.*a.x*a.y ); } + + +mat2 rot(float a) { + return mat2(cos(a),sin(a),-sin(a),cos(a)); +} + +vec2 iSphere( in vec3 ro, in vec3 rd, in vec4 sph )//from iq +{ + vec3 oc = ro - sph.xyz; + float b = dot( oc, rd ); + float c = dot( oc, oc ) - sph.w*sph.w; + float h = b*b - c; + if( h<0.0 ) return vec2(-1.0); + h = sqrt(h); + return vec2(-b-h, -b+h ); +} + +float map(in vec3 p) { + + float res = 0.; + + vec3 c = p; + for (int i = 0; i < 10; ++i) { + p =.7*abs(p)/dot(p,p) -.7; + p.yz= csqr(p.yz); + p=p.zxy; + res += exp(-19. * abs(dot(p,c))); + + } + return res/2.; +} + + + +vec3 raymarch( in vec3 ro, vec3 rd, vec2 tminmax ) +{ + float t = tminmax.x; + float dt = .02; + //float dt = .2 - .195*cos(iTime*.05);//animated + vec3 col= vec3(0.); + float c = 0.; + for( int i=0; i<64; i++ ) + { + t+=dt*exp(-2.*c); + if(t>tminmax.y)break; + + c = map(ro+t*rd); + + col = .99*col+ .08*vec3(c*c, c, c*c*c);//green + //col = .99*col+ .08*vec3(c*c*c, c*c, c);//blue + } + return col; +} + + +void CoolSphere( out vec4 fragColor, in vec2 fragCoord ) +{ + float time = time; + vec2 q = fragCoord.xy / resolution.xy; + vec2 p = -1.0 + 2.0 * q; + p.x *= resolution.x/resolution.y; + vec2 m = vec2(0.); + m-=.5; + + // camera + + vec3 ro = zoom*vec3(4.); + ro.yz*=rot(m.y); + ro.xz*=rot(m.x+ 0.1*time); + vec3 ta = vec3( 0.0 , 0.0, 0.0 ); + vec3 ww = normalize( ta - ro ); + vec3 uu = normalize( cross(ww,vec3(0.0,1.0,0.0) ) ); + vec3 vv = normalize( cross(uu,ww)); + vec3 rd = normalize( p.x*uu + p.y*vv + 4.0*ww ); + + + vec2 tmm = iSphere( ro, rd, vec4(0.,0.,0.,2.) ); + + // raymarch + vec3 col = raymarch(ro,rd,tmm); + if (tmm.x<0.)col = texture2D(texture_sampler, rd).rgb; + else { + vec3 nor=(ro+tmm.x*rd)/2.; + nor = reflect(rd, nor); + float fre = pow(.5+ clamp(dot(nor,rd),0.0,1.0), 3. )*1.3; + col += texture2D(texture_sampler, nor).rgb * fre; + + } + + // shade + + col = .5 *(log(1.+col)); + col = clamp(col,0.,1.); + fragColor = vec4( col, 1.0 ); + +} + + +float bar = time; // this is just a coding nicety to highlight that in some calculations we want musical time ... you wouldn't want to have this in a real prod's final version +// --- noise from procedural pseudo-Perlin (better but not so nice derivatives) --------- + // ( adapted from IQ ) + +float gTime = 0.; + +float sdBox( vec3 p, vec3 b ) +{ + vec3 q = abs(p) - b; + return length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0); +} + +float box(vec3 pos, float scale) { + pos *= scale; + float base = sdBox(pos, vec3(.4,.4,.1)) /1.5; + pos.xy *= 5.; + pos.y -= 3.5; + pos.xy *= rot(.75); + float result = -base; + return result; +} + +float box_set(vec3 pos, float time) { + vec3 pos_origin = pos; + pos = pos_origin; + pos .y += sin(gTime * 0.4) * 2.5; + pos.xy *= rot(.8); + float box1 = box(pos,2. - abs(sin(gTime * 0.4)) * 1.5); + pos = pos_origin; + pos .y -=sin(gTime * 0.4) * 2.5; + pos.xy *= rot(.8); + float box2 = box(pos,2. - abs(sin(gTime * 0.4)) * 1.5); + pos = pos_origin; + pos .x +=sin(gTime * 0.4) * 2.5; + pos.xy *= rot(.8); + float box3 = box(pos,2. - abs(sin(gTime * 0.4)) * 1.5); + pos = pos_origin; + pos .x -=sin(gTime * 0.4) * 2.5; + pos.xy *= rot(.8); + float box4 = box(pos,2. - abs(sin(gTime * 0.4)) * 1.5); + pos = pos_origin; + pos.xy *= rot(.8); + float box5 = box(pos,.5) * 6.; + pos = pos_origin; + float box6 = box(pos,.5) * 6.; + float result = max(max(max(max(max(box1,box2),box3),box4),box5),box6); + return result; +} + +float map(vec3 pos, float time) { + vec3 pos_origin = pos; + float box_set1 = box_set(pos, time); + + return box_set1; +} + + +void mainImage2( out vec4 fragColor, in vec2 fragCoord ) { + vec2 p = (fragCoord.xy * 2. - resolution.xy) / min(resolution.x, resolution.y); + vec3 ro = vec3(0., -0.2 ,time * 4.); + vec3 ray = normalize(vec3(p, 1.5)); + ray.xy = ray.xy * rot(sin(time * .03) * 5.); + ray.yz = ray.yz * rot(sin(time * .05) * .2); + float t = 0.1; + vec3 col = vec3(0.); + float ac = 0.0; + + + for (int i = 0; i < 99; i++){ + vec3 pos = ro + ray * t; + pos = mod(pos-2., 4.) -2.; + gTime = time -float(i) * 0.01; + + float d = map(pos, time); + + d = max(abs(d), 0.01); + ac += exp(-d*23.); + + t += d* 0.55; + } + + col = vec3(ac * 0.02); + + col +=vec3(0.,0.2 * abs(sin(time)),0.5 + sin(time) * 0.2); + + + fragColor = vec4(col ,1.0 - t * (0.02 + 0.02 * sin (time))); +} + +float noise3( vec3 x ) { + vec3 p = floor(x),f = fract(x); + + f = f*f*(3.-2.*f); // or smoothstep // to make derivative continuous at borders + +#define hash3(p) fract(sin(1e3*dot(p,vec3(1,57,-13.7)))*4375.5453) // rand + + return mix( mix(mix( hash3(p+vec3(0,0,0)), hash3(p+vec3(1,0,0)),f.x), // triilinear interp + mix( hash3(p+vec3(0,1,0)), hash3(p+vec3(1,1,0)),f.x),f.y), + mix(mix( hash3(p+vec3(0,0,1)), hash3(p+vec3(1,0,1)),f.x), + mix( hash3(p+vec3(0,1,1)), hash3(p+vec3(1,1,1)),f.x),f.y), f.z); +} + +#define noise(x) (noise3(x)+noise3(x+11.5)) / 2. // pseudoperlin improvement from foxes idea + +void mainImage3( out vec4 O, vec2 U ) // ------------ draw isovalues +{ + vec2 R = resolution.xy; + float n = noise(vec3(U*8./R.y, .1*time)), + v = sin(6.28*10.*n), + t = time; + + v = smoothstep(1.,0., .5*abs(v)/fwidth(v)); + + O = mix( exp(-33./R.y )* texture2D( texture_sampler, (U+vec2(1,sin(t)))/R), // .97 + .5+.5*sin(12.*n+vec4(0,2.1,-2.1,0)), + v ); + +} + +void main(void) +{ + vec3 l; + + float abstime = abs(time); + if (abstime < 10.0) + CoolSphere(gl_FragColor, gl_FragCoord.xy); + else if (abstime < 15.0) + { + mainImage2(gl_FragColor, gl_FragCoord.xy); + } + else + { + mainImage3(gl_FragColor, gl_FragCoord.xy); + } + + vec2 texttop = vec2(0., -.35), pt = (gl_FragCoord.xy / resolution) - texttop; + if (pt.y > 0.) l = gl_FragColor + texture2D(texts, pt); + gl_FragColor = vec4(l * (1.0), 1.0); + +} diff --git a/base.config b/base.config index 07ae4cd..58292a2 100644 --- a/base.config +++ b/base.config @@ -3,13 +3,13 @@ # Base configuration file ########### Music ############# -MUSIC_4KLANG_INC_FILE= +MUSIC_4KLANG_INC_FILE=4klang.inc MUSIC_BEATS_PER_BAR=4.0 ########### Visuals ############ SHADER_FILE=shader.glsl -RESOLUTION_X=1920 -RESOLUTION_Y=1080 +RESOLUTION_X=1280 +RESOLUTION_Y=720 USE_TIME_UNIFORM=1 TIME_UNIFORM_NAME='time' @@ -29,7 +29,7 @@ USE_TEXTS_UNIFORM=1 TEXTS_UNIFORM_NAME='texts' TEXT_BITMAP_RESOLUTION_X=1024 TEXT_BITMAP_RESOLUTION_Y=1024 -TEXT_FONT_NAME='Arial' +TEXT_FONT_NAME='Segoe UI Black' TEXT_FONT_SIZE=120 TEXT_FONT_STRIKEOUT=0 TEXT_FONT_UNDERLINE=0 @@ -39,33 +39,31 @@ TEXT_FONT_ORIENTATION=0 TEXT_FONT_ESCAPEMENT=0 TEXT_FONT_WIDTH=0 TEXT_CHARACTER_EXTRA_SPACING=0 -USE_WIDECHAR_TEXTS=0 +USE_WIDECHAR_TEXTS=1 ########### Time base ########### USE_TIME_DIVIDER_IN_X86_CODE=1 -TIME_DIVIDER=88200.000 +TIME_DIVIDER=79578.945 TIME_BASE=bars AUDIO_DELAY=2048 -PROD_END_TIME=4411648 +PROD_END_TIME=4139584 ########### Final product ########### # The name of the final EXE -OUTPUT_EXE_NAME=testing.exe +OUTPUT_EXE_NAME=4k_test.exe # this is just the name/text of the GUI option, not the name of the linker executable EXE_LINKER_PROGRAM=Crinkler QUOTE=\" +CRINKLER_ORDERTRIES=4000 -CRINKLER_ORDERTRIES=100 - - -AUDIO_BUFFER_ALLOCATED_LENGTH=4411648 +AUDIO_BUFFER_ALLOCATED_LENGTH=4139584 AUDIO_SAMPLING_RATE=44100 LOOP_END=5.0 LOOP_START=3.0 LOOP_ENABLED=0 -TIME_DIVIDER_INT=88200 +TIME_DIVIDER_INT=79578 diff --git a/common.script b/common.script index 202b2a7..0ca240f 100644 --- a/common.script +++ b/common.script @@ -89,7 +89,7 @@ ifeq ($(EXE_LINKER_PROGRAM),Crinkler) # Crinkler settings # Linker for building standalone EXE files for running FINAL_LINKER_EXE="$(PROGRAM_DIR)\Tools\Crinkler\crinkler.exe" -FINAL_LINKER_OPTS=/SUBSYSTEM:WINDOWS /ENTRY:t /COMPMODE:SLOW /HASHSIZE:200 /HASHTRIES:50 /ORDERTRIES:$(CRINKLER_ORDERTRIES) \ +FINAL_LINKER_OPTS=/SUBSYSTEM:WINDOWS /ENTRY:t /COMPMODE:VERYSLOW /HASHSIZE:500 /HASHTRIES:100 /ORDERTRIES:$(CRINKLER_ORDERTRIES) \ /UNSAFEIMPORT /LIBPATH:$(LIB_PATH) /REPORT:crinkler_report.html /PROGRESSGUI FINAL_LINKER_OUT_OPT=/OUT: FINAL_LINKER_GENERAL_LIBS_PARAMS=kernel32.lib user32.lib diff --git a/debug_audio.dll b/debug_audio.dll index 93f604d..9ca8ee5 100644 Binary files a/debug_audio.dll and b/debug_audio.dll differ diff --git a/debug_visuals.dll b/debug_visuals.dll index 81185b0..dba295e 100644 Binary files a/debug_visuals.dll and b/debug_visuals.dll differ diff --git a/final.config b/final.config index 14b6987..c372c10 100644 --- a/final.config +++ b/final.config @@ -11,3 +11,11 @@ RESOLUTION_Y=720 CRINKLER_ORDERTRIES=4000 OUTPUT_EXE_NAME=release.exe +SHADER_FILE=shader_minified.h +TIME_UNIFORM_NAME='v' +RESOLUTION_UNIFORM_NAME='s' +TEXTS_UNIFORM_NAME='m' +EXE_LINKER_PROGRAM=Crinkler +TIME_BASE=bars +TIME_DIVIDER=79578.945 +TIME_DIVIDER_INT=79578 diff --git a/minified.config b/minified.config index 8326f0e..213bfcb 100644 --- a/minified.config +++ b/minified.config @@ -8,4 +8,9 @@ include $(PARENT_CONFIG) # Visuals EXE_LINKER_PROGRAM=Crinkler -CRINKLER_ORDERTRIES=100 +CRINKLER_ORDERTRIES=4000 +SHADER_FILE=shader_minified.h +TIME_UNIFORM_NAME='v' +RESOLUTION_UNIFORM_NAME='s' +TEXTS_UNIFORM_NAME='c' +USE_WIDECHAR_TEXTS=1 diff --git a/shader.glsl b/shader.glsl index 85dd43d..5387474 100644 --- a/shader.glsl +++ b/shader.glsl @@ -1,314 +1,205 @@ -// Compofiller Studio by Yzi 2018 -// -// Default template shader - -// This shader program is executed in the GPU (or a CPU-based emulation) for -// every pixel (i.e. "fragment" in OpenGL jargon) of every frame. - -// The "uniforms" are the same (i.e. uniform) for all pixels/fragments of the frame, -// and they come from the main program. uniform float time; uniform vec2 resolution; - -// If you choose to save some bytes and not use either of these uniforms, you have to -// do some additional tricks. -// * time : if you uncheck "[ ] Use time uniform" checkbox, time is in gl_Color.y (green component) -// * resolution : if you uncheck "[ ] Use resolution uniform" checkbox, you'll have to hard-code the resolution manually - -// The uniform-less version could look like this, 88200.0 being the time divider -//float time = gl_Color.y * 256.0 * (65536.0 / 88200.0); -//vec2 resolution = vec2(1280.0, 720.0); - -// Uncomment this to use the texture-based features uniform sampler2D texture_sampler; - -// Uncomment this to use the texture-based features uniform sampler2D texts; -// License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. -// Created by S. Guillitte 2015 +float zoom = 1.; +float gTime = 0.; -float zoom=1.; - -vec2 cmul( vec2 a, vec2 b ) { return vec2( a.x*b.x - a.y*b.y, a.x*b.y + a.y*b.x ); } -vec2 csqr( vec2 a ) { return vec2( a.x*a.x - a.y*a.y, 2.*a.x*a.y ); } - - -mat2 rot(float a) { - return mat2(cos(a),sin(a),-sin(a),cos(a)); +int getBeat(void) { + return floor(abs(time*4) / (60./133) ); +} +int getBar(void) { + return floor(abs(time) / (60./133)); } -vec2 iSphere( in vec3 ro, in vec3 rd, in vec4 sph )//from iq +vec2 csqr(vec2 a) { + return vec2(a.x * a.x - a.y * a.y, 2. * a.x * a.y); +} + +mat2 rot(float a) { + return mat2(cos(a), sin(a), -sin(a), cos(a)); +} + +vec2 iSphere(in vec3 ro, in vec3 rd, in vec4 sph)//from iq { - vec3 oc = ro - sph.xyz; - float b = dot( oc, rd ); - float c = dot( oc, oc ) - sph.w*sph.w; - float h = b*b - c; - if( h<0.0 ) return vec2(-1.0); - h = sqrt(h); - return vec2(-b-h, -b+h ); + vec3 oc = ro - sph.xyz; + float b = dot(oc, rd); + float c = dot(oc, oc) - sph.w * sph.w; + float h = b * b - c; + if(h < 0.0) + return vec2(-1.0); + h = sqrt(h); + return vec2(-b - h, -b + h); } float map(in vec3 p) { - - float res = 0.; - + + float res = 0.; + vec3 c = p; - for (int i = 0; i < 10; ++i) { - p =.7*abs(p)/dot(p,p) -.7; - p.yz= csqr(p.yz); - p=p.zxy; - res += exp(-19. * abs(dot(p,c))); - - } - return res/2.; + for(int i = 0; i < 10; ++i) { + p = .7 * abs(p) / dot(p, p) - .7; + p.yz = csqr(p.yz); + p = p.zxy; + res += exp(-19. * abs(dot(p, c))); + + } + return res / 2.; } - - -vec3 raymarch( in vec3 ro, vec3 rd, vec2 tminmax ) -{ +vec3 raymarch(in vec3 ro, vec3 rd, vec2 tminmax) { float t = tminmax.x; float dt = .02; //float dt = .2 - .195*cos(iTime*.05);//animated - vec3 col= vec3(0.); + vec3 col = vec3(0.); float c = 0.; - for( int i=0; i<64; i++ ) - { - t+=dt*exp(-2.*c); - if(t>tminmax.y)break; - - c = map(ro+t*rd); - - col = .99*col+ .08*vec3(c*c, c, c*c*c);//green + for(int i = 0; i < 64; i++) { + t += dt * exp(-2. * c); + if(t > tminmax.y) + break; + + c = map(ro + t * rd); + + col = .99 * col + .08 * vec3(c * c, c, c * c * c);//green //col = .99*col+ .08*vec3(c*c*c, c*c, c);//blue - } + } return col; } - -void CoolSphere( out vec4 fragColor, in vec2 fragCoord ) -{ - float time = time; +void CoolSphere(out vec4 fragColor, in vec2 fragCoord) { + float time = time; vec2 q = fragCoord.xy / resolution.xy; vec2 p = -1.0 + 2.0 * q; - p.x *= resolution.x/resolution.y; + p.x *= resolution.x / resolution.y; vec2 m = vec2(0.); - m-=.5; + m -= .5; // camera - vec3 ro = zoom*vec3(4.); - ro.yz*=rot(m.y); - ro.xz*=rot(m.x+ 0.1*time); - vec3 ta = vec3( 0.0 , 0.0, 0.0 ); - vec3 ww = normalize( ta - ro ); - vec3 uu = normalize( cross(ww,vec3(0.0,1.0,0.0) ) ); - vec3 vv = normalize( cross(uu,ww)); - vec3 rd = normalize( p.x*uu + p.y*vv + 4.0*ww ); + vec3 ro = zoom * vec3(4.); + ro.yz *= rot(m.y); + ro.xz *= rot(m.x + 0.1 * time); + vec3 ta = vec3(0.0, 0.0, 0.0); + vec3 ww = normalize(ta - ro); + vec3 uu = normalize(cross(ww, vec3(0.0, 1.0, 0.0))); + vec3 vv = normalize(cross(uu, ww)); + vec3 rd = normalize(p.x * uu + p.y * vv + 4.0 * ww); - - vec2 tmm = iSphere( ro, rd, vec4(0.,0.,0.,2.) ); + vec2 tmm = iSphere(ro, rd, vec4(0., 0., 0., 2.)); // raymarch - vec3 col = raymarch(ro,rd,tmm); - if (tmm.x<0.)col = texture2D(texture_sampler, rd).rgb; + vec3 col = raymarch(ro, rd, tmm); + if(tmm.x < 0.) + col = texture2D(texture_sampler, rd).rgb; else { - vec3 nor=(ro+tmm.x*rd)/2.; - nor = reflect(rd, nor); - float fre = pow(.5+ clamp(dot(nor,rd),0.0,1.0), 3. )*1.3; + vec3 nor = (ro + tmm.x * rd) / 2.; + nor = reflect(rd, nor); + float fre = pow(.5 + clamp(dot(nor, rd), 0.0, 1.0), 3.) * 1.3; col += texture2D(texture_sampler, nor).rgb * fre; - + } - + // shade - - col = .5 *(log(1.+col)); - col = clamp(col,0.,1.); - fragColor = vec4( col, 1.0 ); + + col = .5 * (log(1. + col)); + col = clamp(col, 0., 1.); + fragColor = vec4(col, 1.0); } - -float bar = time; // this is just a coding nicety to highlight that in some calculations we want musical time ... you wouldn't want to have this in a real prod's final version -// --- noise from procedural pseudo-Perlin (better but not so nice derivatives) --------- - // ( adapted from IQ ) - -float gTime = 0.; - -float sdBox( vec3 p, vec3 b ) -{ - vec3 q = abs(p) - b; - return length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0); +float sdBox(vec3 p, vec3 b) { + vec3 q = abs(p) - b; + return length(max(q, 0.0)) + min(max(q.x, max(q.y, q.z)), 0.0); } float box(vec3 pos, float scale) { - pos *= scale; - float base = sdBox(pos, vec3(.4,.4,.1)) /1.5; - pos.xy *= 5.; - pos.y -= 3.5; - pos.xy *= rot(.75); - float result = -base; - return result; + pos *= scale; + float base = sdBox(pos, vec3(.4, .4, .1)) / 1.5; + pos.xy *= 5.; + pos.y -= 3.5; + pos.xy *= rot(.75); + float result = -base; + return result; } float box_set(vec3 pos, float time) { - vec3 pos_origin = pos; - pos = pos_origin; - pos .y += sin(gTime * 0.4) * 2.5; - pos.xy *= rot(.8); - float box1 = box(pos,2. - abs(sin(gTime * 0.4)) * 1.5); - pos = pos_origin; - pos .y -=sin(gTime * 0.4) * 2.5; - pos.xy *= rot(.8); - float box2 = box(pos,2. - abs(sin(gTime * 0.4)) * 1.5); - pos = pos_origin; - pos .x +=sin(gTime * 0.4) * 2.5; - pos.xy *= rot(.8); - float box3 = box(pos,2. - abs(sin(gTime * 0.4)) * 1.5); - pos = pos_origin; - pos .x -=sin(gTime * 0.4) * 2.5; - pos.xy *= rot(.8); - float box4 = box(pos,2. - abs(sin(gTime * 0.4)) * 1.5); - pos = pos_origin; - pos.xy *= rot(.8); - float box5 = box(pos,.5) * 6.; - pos = pos_origin; - float box6 = box(pos,.5) * 6.; - float result = max(max(max(max(max(box1,box2),box3),box4),box5),box6); - return result; + vec3 pos_origin = pos; + pos = pos_origin; + pos.y += sin(gTime * 0.4) * 2.5; + pos.xy *= rot(.8); + float box1 = box(pos, 2. - abs(sin(gTime * 0.4)) * 1.5); + pos = pos_origin; + pos.y -= sin(gTime * 0.4) * 2.5; + pos.xy *= rot(.8); + float box2 = box(pos, 2. - abs(sin(gTime * 0.4)) * 1.5); + pos = pos_origin; + pos.x += sin(gTime * 0.4) * 2.5; + pos.xy *= rot(.8); + float box3 = box(pos, 2. - abs(sin(gTime * 0.4)) * 1.5); + pos = pos_origin; + pos.x -= sin(gTime * 0.4) * 2.5; + pos.xy *= rot(.8); + float box4 = box(pos, 2. - abs(sin(gTime * 0.4)) * 1.5); + pos = pos_origin; + pos.xy *= rot(.8); + float box5 = box(pos, .5) * 6.; + pos = pos_origin; + float box6 = box(pos, .5) * 6.; + float result = max(max(max(max(max(box1, box2), box3), box4), box5), box6); + return result; } float map(vec3 pos, float time) { - vec3 pos_origin = pos; - float box_set1 = box_set(pos, time); + vec3 pos_origin = pos; + float box_set1 = box_set(pos, time); - return box_set1; + return box_set1; } +void mainImage2(out vec4 fragColor, in vec2 fragCoord) { + vec2 p = (fragCoord.xy * 2. - resolution.xy) / min(resolution.x, resolution.y); + vec3 ro = vec3(0., -0.2, time * 4.); + vec3 ray = normalize(vec3(p, 1.5)); + ray.xy = ray.xy * rot(sin(time * .03) * 5.); + ray.yz = ray.yz * rot(sin(time * .05) * .2); + float t = 0.1; + vec3 col = vec3(0.); + float ac = 0.0; -void mainImage2( out vec4 fragColor, in vec2 fragCoord ) { - vec2 p = (fragCoord.xy * 2. - resolution.xy) / min(resolution.x, resolution.y); - vec3 ro = vec3(0., -0.2 ,time * 4.); - vec3 ray = normalize(vec3(p, 1.5)); - ray.xy = ray.xy * rot(sin(time * .03) * 5.); - ray.yz = ray.yz * rot(sin(time * .05) * .2); - float t = 0.1; - vec3 col = vec3(0.); - float ac = 0.0; + for(int i = 0; i < 99; i++) { + vec3 pos = ro + ray * t; + pos = mod(pos - 2., 4.) - 2.; + gTime = time - float(i) * 0.01; + float d = map(pos, time); - for (int i = 0; i < 99; i++){ - vec3 pos = ro + ray * t; - pos = mod(pos-2., 4.) -2.; - gTime = time -float(i) * 0.01; - - float d = map(pos, time); + d = max(abs(d), 0.01); + ac += exp(-d * 23.); - d = max(abs(d), 0.01); - ac += exp(-d*23.); + t += d * 0.55; + } - t += d* 0.55; - } + col = vec3(ac * 0.02); - col = vec3(ac * 0.02); + col += vec3(0., 0.2 * abs(sin(time)), 0.5 + sin(time) * 0.2); - col +=vec3(0.,0.2 * abs(sin(time)),0.5 + sin(time) * 0.2); - - - fragColor = vec4(col ,1.0 - t * (0.02 + 0.02 * sin (time))); + fragColor = vec4(col, 1.0 - t * (0.02 + 0.02 * sin(time))); } -float noise3( vec3 x ) { - vec3 p = floor(x),f = fract(x); - - f = f*f*(3.-2.*f); // or smoothstep // to make derivative continuous at borders - -#define hash3(p) fract(sin(1e3*dot(p,vec3(1,57,-13.7)))*4375.5453) // rand +void main(void) { + if (getBar() <= 8) + CoolSphere(gl_FragColor, gl_FragCoord.xy); + else + mainImage2(gl_FragColor, gl_FragCoord.xy); - return mix( mix(mix( hash3(p+vec3(0,0,0)), hash3(p+vec3(1,0,0)),f.x), // triilinear interp - mix( hash3(p+vec3(0,1,0)), hash3(p+vec3(1,1,0)),f.x),f.y), - mix(mix( hash3(p+vec3(0,0,1)), hash3(p+vec3(1,0,1)),f.x), - mix( hash3(p+vec3(0,1,1)), hash3(p+vec3(1,1,1)),f.x),f.y), f.z); -} -#define noise(x) (noise3(x)+noise3(x+11.5)) / 2. // pseudoperlin improvement from foxes idea + vec3 l; + vec2 texttop = vec2(0., -.35), pt = (gl_FragCoord.xy / resolution) - texttop; + if(pt.y > 0.) { + l = gl_FragColor + texture2D(texts, pt); + } -void mainImage3( out vec4 O, vec2 U ) // ------------ draw isovalues -{ - vec2 R = resolution.xy; - float n = noise(vec3(U*8./R.y, .1*time)), - v = sin(6.28*10.*n), - t = time; - - v = smoothstep(1.,0., .5*abs(v)/fwidth(v)); - - O = mix( exp(-33./R.y )* texture2D( texture_sampler, (U+vec2(1,sin(t)))/R), // .97 - .5+.5*sin(12.*n+vec4(0,2.1,-2.1,0)), - v ); - -} - -/* "Vortex" by @kishimisu (2024) - https://www.shadertoy.com/view/MX33Dr - - It eventually leads somewhere... - - [388 → 378 chars by @Xor] -*/ - -#define R mat2(cos(vec4(0,11,33,0) - -void mainImage(out vec4 O, vec2 F) { - - vec2 V = resolution; - vec3 o; - float r = time; - float t= .1; - float e,x; - - for (O *= e; e++ < 40.; - - o.y += t*t*.09, - o.z = mod(o.z + r, .2) - .1, - x = t*.06 - r*.2, - - o.x = fract( - o.xy *= R+floor(((atan(o.y, o.x) - x) / .314) +0.5) * .314 + x)) - ).x - .8, - - t += x = length(o)*.5 - .014, - - O += (1. + cos(t*.5 + r + vec4(0,1,2,0))) - * (.3 + sin(3.*t + r*5.)/4.) - / (8. + x*4e2) - ) - o = t * normalize(vec3((F+F-V.xy)*R+r*.15)),V.y)); -} - -void main(void) -{ - float abstime = abs(time); - vec3 l; - if (abstime < 10.0) - CoolSphere(gl_FragColor, gl_FragCoord.xy); - else if (abstime < 15.0) - { - mainImage2(gl_FragColor, gl_FragCoord.xy); - } - else if (abstime < 20.0) - { - mainImage(gl_FragColor, gl_FragCoord.xy); - } - else - { - mainImage3(gl_FragColor, gl_FragCoord.xy); - } - - vec2 texttop = vec2(0., -.35), pt = (gl_FragCoord.xy / resolution) - texttop; - if (pt.y > 0.) - l = gl_FragColor + texture2D(texts, pt); - - - gl_FragColor = vec4(l * (1.0), 1.0); + gl_FragColor = vec4(l * (1.0), 1.0); } diff --git a/shader_minified.h b/shader_minified.h new file mode 100644 index 0000000..cb28b9a --- /dev/null +++ b/shader_minified.h @@ -0,0 +1,156 @@ +// Generated with Shader Minifier 1.3.6 (https://github.com/laurentlb/Shader_Minifier/) +#ifndef SHADER_MINIFIED_H_ +# define SHADER_MINIFIED_H_ +# define VAR_resolution "s" +# define VAR_texts "c" +# define VAR_texture_sampler "m" +# define VAR_time "v" + +const char *__temp_cleaned_shader_glsl = + "uniform float v;" + "uniform vec2 s;" + "uniform sampler2D m,c;" + "float f=0.;" + "vec2 n(vec2 v)" + "{" + "return vec2(v.x*v.x-v.y*v.y,2.*v.x*v.y);" + "}" + "mat2 t(float v)" + "{" + "return mat2(cos(v),sin(v),-sin(v),cos(v));" + "}" + "vec2 n(vec3 v,vec3 y)" + "{" + "vec4 s=vec4(0,0,0,2);" + "vec3 f=v-s.xyz;" + "float t=dot(f,y),m=t*t-dot(f,f)+s.w*s.w;" + "if(m<0.)" + "return vec2(-1);" + "m=sqrt(m);" + "return vec2(-t-m,-t+m);" + "}" + "float x(vec3 v)" + "{" + "float f=0.;" + "vec3 y=v;" + "for(int m=0;m<10;++m)" + "v=.7*abs(v)/dot(v,v)-.7,v.yz=n(v.yz),v=v.zxy,f+=exp(-19.*abs(dot(v,y)));" + "return f/2.;" + "}" + "vec3 n(vec3 v,vec3 y,vec2 s)" + "{" + "float f=s.x;" + "vec3 m=vec3(0);" + "float r=0.;" + "for(int i=0;i<64;i++)" + "{" + "f+=.02*exp(-2.*r);" + "if(f>s.y)" + "break;" + "r=x(v+f*y);" + "m=.99*m+.08*vec3(r*r,r,r*r*r);" + "}" + "return m;" + "}" + "void t(out vec4 f,vec2 y)" + "{" + "float r=v;" + "vec2 i=-1.+2.*(y.xy/s.xy);" + "i.x*=s.x/s.y;" + "vec2 d=vec2(0);" + "d-=.5;" + "vec3 a=vec3(4);" + "a.yz*=t(d.y);" + "a.xz*=t(d.x+.1*r);" + "vec3 c=normalize(vec3(0)-a),g=normalize(cross(c,vec3(0,1,0))),z=normalize(i.x*g+i.y*normalize(cross(g,c))+4.*c);" + "vec2 o=n(a,z);" + "vec3 x=n(a,z,o);" + "if(o.x<0.)" + "x=texture2D(m,z).xyz;" + "else" + "{" + "vec3 e=(a+o.x*z)/2.;" + "e=reflect(z,e);" + "float l=pow(.5+clamp(dot(e,z),0.,1.),3.)*1.3;" + "x+=texture2D(m,e).xyz*l;" + "}" + "x=.5*log(1.+x);" + "x=clamp(x,0.,1.);" + "f=vec4(x,1);" + "}" + "float e(vec3 v)" + "{" + "vec3 f=abs(v)-vec3(.4,.4,.1);" + "return length(max(f,0.))+min(max(f.x,max(f.y,f.z)),0.);" + "}" + "float e(vec3 v,float y)" + "{" + "v*=y;" + "float f=e(v)/1.5;" + "v.xy*=5.;" + "v.y-=3.5;" + "v.xy*=t(.75);" + "return-f;" + "}" + "float x(vec3 v,float y)" + "{" + "vec3 m=v;" + "v=m;" + "v.y+=sin(f*.4)*2.5;" + "v.xy*=t(.8);" + "float s=e(v,2.-abs(sin(f*.4))*1.5);" + "v=m;" + "v.y-=sin(f*.4)*2.5;" + "v.xy*=t(.8);" + "float z=e(v,2.-abs(sin(f*.4))*1.5);" + "v=m;" + "v.x+=sin(f*.4)*2.5;" + "v.xy*=t(.8);" + "float r=e(v,2.-abs(sin(f*.4))*1.5);" + "v=m;" + "v.x-=sin(f*.4)*2.5;" + "v.xy*=t(.8);" + "float c=e(v,2.-abs(sin(f*.4))*1.5);" + "v=m;" + "v.xy*=t(.8);" + "float x=e(v,.5)*6.;" + "v=m;" + "float g=e(v,.5)*6.;" + "return max(max(max(max(max(s,z),r),c),x),g);" + "}" + "void p(out vec4 m,vec2 y)" + "{" + "vec3 r=vec3(0,-.2,v*4.),z=normalize(vec3((y.xy*2.-s.xy)/min(s.x,s.y),1.5));" + "z.xy=z.xy*t(sin(v*.03)*5.);" + "z.yz=z.yz*t(sin(v*.05)*.2);" + "float a=.1;" + "vec3 i=vec3(0);" + "float c=0.;" + "for(int e=0;e<99;e++)" + "{" + "vec3 d=r+z*a;" + "d=mod(d-2.,4.)-2.;" + "f=v-float(e)*.01;" + "float g=x(d,v);" + "g=max(abs(g),.01);" + "c+=exp(-g*23.);" + "a+=g*.55;" + "}" + "i=vec3(c*.02);" + "i+=vec3(0,.2*abs(sin(v)),.5+sin(v)*.2);" + "m=vec4(i,1.-a*(.02+.02*sin(v)));" + "}" + "void main()" + "{" + "if(floor(abs(v)/(60./133))<=8)" + "t(gl_FragColor,gl_FragCoord.xy);" + "else" + " p(gl_FragColor,gl_FragCoord.xy);" + "vec3 f;" + "vec2 m=gl_FragCoord.xy/s-vec2(0,-.35);" + "if(m.y>0.)" + "f=gl_FragColor+texture2D(c,m);" + "gl_FragColor=vec4(f,1);" + "}"; + +#endif // SHADER_MINIFIED_H_ diff --git a/timings_and_texts.inc b/timings_and_texts.inc index e016c75..6489d33 100644 --- a/timings_and_texts.inc +++ b/timings_and_texts.inc @@ -45,27 +45,17 @@ TIMINGS_REC_STRING_PTR_FIELD_OFS equ (REC_TIMINGS_TIME_FIELD_SIZE + REC_TIMINGS_ section .textstr1 data ;______STRINGS_START______ -_string0: DEFINE_STRING 'Hello World' END_STRING -_string1: DEFINE_STRING 'This is Scene1' END_STRING -_string2: DEFINE_STRING 70, 105, 114, 115, 116, 32, 100, 101, 109, 111, 13, 119, 101, 32, 101, 118, 101, 114, 32, 109, 97, 100, 101 END_STRING -_string3: DEFINE_STRING 'This is Scene2' END_STRING -_string4: DEFINE_STRING 83, 97, 121, 32, 104, 105, 32, 116, 111, 13, 77, 111, 109, 32, 102, 111, 114, 32, 109, 101 END_STRING -_string5: DEFINE_STRING 'Shout out to' END_STRING -_string6: DEFINE_STRING 'Puavohard' END_STRING -_string7: DEFINE_STRING 'Goodbye!' END_STRING +_string0: DEFINE_STRING 32 END_STRING +_string1: DEFINE_STRING 65, 115, 115, 101, 109, 98, 108, 121, 13, 50, 48, 50, 52 END_STRING +_string2: DEFINE_STRING 71, 111, 111, 100, 98, 121, 101, 33 END_STRING ;______STRINGS_END______ section .textstr2 data text_string_timings: ;______TIMINGS_START______ -DEFINE_TIMING TIMING_TIME(0,0.00000,0) TIMING_ALIAS('START_TIME') TIMING_CUSTOM(0) TIMING_STRING(0,_string0) ; this is a comment -DEFINE_TIMING TIMING_TIME(1,0.00000,88200) TIMING_ALIAS('') TIMING_CUSTOM(0) TIMING_STRING(0,_string1) ; this is a comment -DEFINE_TIMING TIMING_TIME(2,0.50000,220500) TIMING_ALIAS('') TIMING_CUSTOM(0) TIMING_STRING(0,_string2) ; another comment -DEFINE_TIMING TIMING_TIME(10,0.00000,882000) TIMING_ALIAS('') TIMING_CUSTOM(0) TIMING_STRING(0,_string3) ; this is a komment -DEFINE_TIMING TIMING_TIME(12,0.00000,1058400) TIMING_ALIAS('') TIMING_CUSTOM(0) TIMING_STRING(0,_string4) ; -DEFINE_TIMING TIMING_TIME(15,0.00000,1323000) TIMING_ALIAS('') TIMING_CUSTOM(0) TIMING_STRING(0,_string5) ; abcd -DEFINE_TIMING TIMING_TIME(18,0.00000,1587600) TIMING_ALIAS('') TIMING_CUSTOM(0) TIMING_STRING(0,_string6) ; efgh -DEFINE_TIMING TIMING_TIME(20,0.00000,1764000) TIMING_ALIAS('END_TIME') TIMING_CUSTOM(0) TIMING_STRING(0,_string7) ; efgh +DEFINE_TIMING TIMING_TIME(0,0.00000,0) TIMING_ALIAS('') TIMING_CUSTOM(0) TIMING_STRING(0,_string0) ; +DEFINE_TIMING TIMING_TIME(4,0.00000,318315) TIMING_ALIAS('') TIMING_CUSTOM(0) TIMING_STRING(0,_string1) ; +DEFINE_TIMING TIMING_TIME(20,0.00000,1591578) TIMING_ALIAS('END_TIME') TIMING_CUSTOM(0) TIMING_STRING(0,_string2) ; ;______TIMINGS_END______ dd 0xFFFFFFFF ; end-of-time