Challenge: 
Version: 
3
Winner?: 
No
Code Snippet: 
Sync On:Sync Rate 60:Autocam Off

`Set effect area
Global ax=50
Global ay=50


Get Image 2,0,0,ax,ay,1
Null = Make Vector2(1)


Make Object Cube 1,2
Position Object 1,-3,0,10
Color Object 1,Rgb(0,255,0)
Make Object Sphere 2,2
Position Object 2,3,0,8

Sprite 2,0,0,2
Stretch Sprite 2,200,200
s#=Sprite Width(2)

Do
   Center Text Screen Width()/2.0,100,"HELLO WORLD"
   Update_Mouse_Area()
   s#=s#+(MouseMoveZ()*.01)
   Size Sprite 2,s#,s#
   Sprite 2,MouseX()-ax,MouseY()-ay,2
   Sync
Loop


Function Update_Mouse_Area()
   p1 as Dword
   p2 as Dword
   c as Dword
   x=MouseX():y=MouseY()
   if x<(ax/2+1) or x>Screen Width()-(ax/2+1) Then Exitfunction
   If y<(ay/2+1) or y>Screen Width()-(ay/2+1) Then ExitFunction
   Get Image 2,MouseX()-(ax/2),MouseY()-(ay/2),MouseX()+(ax/2),MouseY()+(ay/2),1
   if mouseclick() = 2 then invert()
   if mouseclick() = 1 then black_white()
Endfunction

function invert()
    make memblock from image 2,2
    for ix = 0 to Memblock_Width(2)-1
        for iy = 0 to Memblock_Height(2)-1
            pp = Get_Pixel_Pos(ix,iy,2)
            write memblock byte 2,pp+0,255-memblock byte(2,pp+0)
            write memblock byte 2,pp+1,255-memblock byte(2,pp+1)
            write memblock byte 2,pp+2,255-memblock byte(2,pp+2)
        next iy
    next ix
    make image from memblock 2,2
endfunction

Function black_white()
    c as dword
    make memblock from image 2,2
    for ix = 0 to Memblock_Width(2)-1
        for iy = 0 to Memblock_Height(2)-1
            pp = Get_Pixel_Pos(ix,iy,2)
            r=memblock byte(2,pp+0)
            g=memblock byte(2,pp+1)
            b=memblock byte(2,pp+2)
            a=(r+g+b)/3
            write memblock byte 2,pp+0,a
            write memblock byte 2,pp+1,a
            write memblock byte 2,pp+2,a
        next iy
    next ix
    make image from memblock 2,2
endfunction

Function Memblock_Width(MemblockID)
   If Memblock Exist(MemblockID)=0 then Exitfunction 0
   If Get Memblock Size(MemblockID)<12 then exitfunction 0
   w=Memblock Dword(MemblockID,0)
Endfunction w

Function Memblock_Height(MemblockID)
   If Memblock Exist(MemblockID)=0 then Exitfunction 0
   If Get Memblock Size(MemblockID)<12 then exitfunction 0
   h=Memblock Dword(MemblockID,4)
Endfunction h

Function Memblock_Depth(MemblockID)
   If Memblock Exist(MemblockID)=0 then Exitfunction 0
   If Get Memblock Size(MemblockID)<12 then exitfunction 0
   d=Memblock Dword(MemblockID,8)
Endfunction d

Function Get_Pixel_Pos(x,y,MemblockID)
   p as dword
   p=0
   if Memblock Exist(MemblockID)=0 Then Exitfunction p
   w=Memblock_Width(MemblockID)
   h=Memblock_Height(MemblockID)
   d=Memblock_Depth(MemblockID)
   p=y*(w*(d/8))+x*(d/8)
   maxn as dword
   maxn = h*w*(d/8)
   if p>Get Memblock Size(MemblockID)-1
      p=Get Memblock Size(MemblockID)-1
   endif
   p=p+12
   if p<12 then p=12
Endfunction p