JJ, I was going to answer, but Timo did it 1st

Anyway, here is attached the converted routines of caballero in asm listing using
https://godbolt.org, online compiler. It won´t assemble in ml.exe, but it can be converted to masm by hand :) (The logic is not hard to understand when reading the code flow from godbolt) - Or... you can do the same with Timo using Ollydbg
Routines converted:
#include <math.h>
#define cdXPos 128
#define cdYPos 128
#define cdXSize 960
#define cdYSize 600
#define cdColFondo 0 // COLOR_BTNFACE + 1
#define cdVBarTipo 0
#define cdVBtnTipo WS_VISIBLE+WS_SYSMENU+WS_MINIMIZEBOX
#define cdMainIcon 100
#define cdIdTimer 1
#define cdDosPI 6.283185307179586476925286766559
#define cdFSize 140
#define PI128 0.02454369260617025967548940143187
int waves[4][2];
double sins1[360*6], sins2[360*6], sins3[360*6], sins4[360*6];
double coss1[360*6], coss2[360*6], coss3[360*6], coss4[360*6];
int f = 0, s1off = 0, s2off = 0, s3off = 0;
int c1off = 0, c2off = 0, c3off = 0, coloff = 0;
int hLogoDIB = 0;
int *pMainDIB = 0, *pLogoDIB = 0;
unsigned char mtImagen[cdXSize*cdYSize], mtLogo [cdXSize*cdYSize];
struct stPaleta {
unsigned char Azul;
unsigned char Verde;
unsigned char Rojo;
unsigned char Alfa;
} miPaleta[256];
void CreaImagen (void) {
int i;
for (i = 0; i < cdXSize*cdYSize; i++)
mtImagen[i] = (unsigned char) *(pLogoDIB+i);
}
void pal (int col, int r, int g, int b) {
miPaleta[col].Rojo = r; miPaleta[col].Verde = g; miPaleta[col].Azul = b;
}
void grad (int col1, double r1, double g1, double b1,
int col2, double r2, double g2, double b2) {
int col, cols;
cols = col2 - col1 + 1;
double rstep, gstep, bstep, r, g, b;
rstep = (double) ((r2 - r1 + 1) / cols);
gstep = (double) ((g2 - g1 + 1) / cols);
bstep = (double) ((b2 - b1 + 1) / cols);
r = r1;
g = g1;
b = b1;
for (col = col1; col <= col2; col++) {
r += rstep;
g += gstep;
b += bstep;
if (r > 255) r = 255;
if (r < 0 ) r = 0 ;
if (g > 255) g = 255;
if (g < 0 ) g = 0 ;
if (b > 255) b = 255;
if (b < 0 ) b = 0 ;
pal (col, (int)r, (int)g, (int)b);
}
}
void makePlasma (void) {
int i, r, g, b, r1, g1, b1, r2, g2, b2;
r1 = r = rand()&255; g1 = g = rand()&255; b1 = b = rand()&255;
for (i = 0; i <= 3; i++) {
r2 = rand()&255; g2 = rand()&255; b2 = rand()&255;
grad (64 * i, r, g, b, 64 * i + 63, r2, g2, b2);
r = r2; g = g2; b = b2;
}
grad (64 * 3, r, g, b, 255, r1, g1, b1);
for (i = 0; i < 3; i++) {
waves[i][0] = rand()&255;
waves[i][1] = 360 + rand()%180;
}
for (i = 0; i <= 360*6; i++) {
sins1[i] = (double) ((double) waves[0][0] * sin((double) i / waves[0][1] * cdDosPI));
sins2[i] = (double) ((double) waves[1][0] * sin((double) i / waves[1][1] * cdDosPI));
sins3[i] = (double) ((double) waves[2][0] * sin((double) i / waves[2][1] * cdDosPI));
coss1[i] = (double) ((double) waves[0][0] * cos((double) i / waves[0][1] * cdDosPI));
coss2[i] = (double) ((double) waves[1][0] * cos((double) i / waves[1][1] * cdDosPI));
coss3[i] = (double) ((double) waves[2][0] * cos((double) i / waves[2][1] * cdDosPI));
}
}
void doPlasma (void) {
int x, y, p, m;
double cy;
s1off = (s1off + 1) % waves[0][1];
c1off = (c1off + 3) % waves[0][1];
s2off = (s2off + 3) % waves[1][1];
c2off = (c2off + 2) % waves[1][1];
s3off = (s3off + 2) % waves[2][1];
c3off = (c3off + 1) % waves[2][1];
coloff = (coloff + 1) & 255;
p = 0;
for (y = 160; y < cdYSize; y++) {
cy = coloff + coss1[y + c1off] + sins2[y + s2off] + sins3[y + s3off];
for (x = 0; x < cdXSize; x++) {
if (mtImagen[p]!=0) {
m = ((int) (cy + sins1[x + s1off] + coss2[x + c2off] + coss3[x + y + c3off]))&255;
*(pMainDIB + p) = (miPaleta[m].Rojo<<16)|(miPaleta[m].Verde<<8)|miPaleta[m].Azul;
}
p ++;
}
}
}
If you want to read from a browser, simply paste those C code in
https://godbolt.org and select
(X86 msvc v 19.10 - WINE)