|
|
View Message | Back to Messages |
rel Tue Apr 18 2006 at 10:15 am Now for the jugular....
I have added a palette(not cool) and a displacement. I wonder why fsincos did not work. :*)
Behold!!!
;**********************************************************
;
; FlOWER256(Updated to with displacement)
; Morphing tunnel of the overused XOR texture. :*)
; Another 256 Byte demo by
; Relsoft (Richard Eric M. Lope BSN RN)
; http://rel.betterwebber.com
; Assemble with FASM (FlatAssembler.net)
;
;**********************************************************
diameter = 32
diamxscale = (64 * diameter)
scx = 160
scy = 100
org 100h
;*****************************************************************
;*****************************************************************
;*****************************************************************
cenx: push word 0a000h ;word
pop es ;byte
ceny: mov al, 13h ; mode 13h
int 10h ; we are now in 320x200x256
frame: mov dx, 03c8h ;palette write register
fold_off: xor al, al ;start at color 0
out dx, al ;send value
inc dx ;0x3c9(write RGB values)
mov cx, 256*3 ;whole 256 colors
palloop:
fold_scale: mov ax, 256 / 4
sub ax, cx
out dx, al
loop palloop
main_loop:
;si = frame counter
inc word [frame]
;flower
;fold_off += 0.2
fld [c_fold_off]
fadd dword[fold_off]
fstp dword[fold_off]
;fold_scale = 0.5 * sin(frame / 40)
fld [c_fold_scale]
fild word [frame] ;st0 = frame; st1 = 0.3
mov bx, bp
mov word [bx], 40
fidiv word [bx]
fsin
fmul st0, st1
fstp dword[fold_scale]
mov word[cenx], scx
mov word[ceny], scy
;displacement
fild word[frame]
mov word[bx], 50
fidiv word[bx]
fsin
mov word[bx], 120
fimul word[bx]
fistp word[bx]
mov ax, [bx]
add [cenx], ax
;===========tunnel
mov dx,200
xor di, di
tunnel_yloop:
mov cx,320
tunnel_xloop:
;bx = word pointer
;bp = dword ptr
;
;
;atan2
fninit ;call this to ditch the st pops
mov bx, bp
mov ax, [ceny]
mov word [bx], ax
sub [bx], dx
fild word [bx] ;st0 = dy
mov ax, [cenx]
mov word [bx], ax
sub [bx], cx
fild word [bx] ;st0 = dx, st1 = dy
fpatan ;st0 = atan(dy/dx) = atan(st1/st0)
;flower
;xdist = xdist * ((sin(fold_off + fold_num * angle) * fold_scale)+1)
fstp dword [bx]
fld dword [bx] ;restore
fld dword [bx]
fimul [fold_num]
fadd dword[fold_off]
fsin
fmul dword[fold_scale]
mov word [bx], 1
fiadd word [bx]
fstp dword [bp] ;real_var =((sin(fold_off + fold_num * angle) * fold_scale)+1)
fmul [c_scale] ;atan(st0))*256/pi
fistp word [bx] ;short_var = scaledpi
mov gs,[bx]
mov ax, [cenx]
sub ax, cx ;cmx
mov [bx], ax
fild word [bx] ;st0 = cmx
fmul st0, st0 ;cmx * cmx
mov ax, [ceny]
sub ax, dx
mov [bx], ax
fild word [bx] ;st0 = cmy st1 = cmx*cmx
fmul st0, st0 ;cmy * cmy
fadd st0, st1 ;st0 cmx^2 + cmy^2
fsqrt ;sqrt st0
fmul dword [bp]
mov word [bx], diamxscale ;st0 = diamxscale st1 = sqrt(dist)
fild word [bx]
fdiv st0, st1
fistp word [bx]
mov ax, word [bx]
add ax, word [frame]
mov bx, gs
add bx, word [frame]
xor ax, bx
stosb
dec cx
jnz tunnel_xloop
dec dx
jnz tunnel_yloop
; mov dx,3dah
; vsync:
; in al,dx
; and al,8
; jz vsync
in al,60h
dec al
jnz main_loop
ret
fold_num dw 7
c_fold_off dd 0.2
c_fold_scale dd 0.3
c_scale dd 40.74
- regression - rel (Mon Apr 17 2006 at 6:33 am)
- Now for the jugular.... - rel (Tue Apr 18 2006 at 10:15 am)
- sweet - Dav (Tue Apr 18 2006 at 9:01 am)
- Nice! - Optimus (Tue Apr 18 2006 at 5:33 am)
- cool - Plasma (Mon Apr 17 2006 at 5:32 pm)
- yep. * - rel (Mon Apr 17 2006 at 6:09 pm)
|
|