/* 水面に雨が降る様子を眺めるソフトです。 3Dになっており、マウスカーソルを動かすことで視点を切り替えることができます。 また、ZキーとXキーでズームが行えます。 描画にはOpenGLを利用しています。 */ #packopt name "ame" //#packopt runtime "hsp3c.hrt" #runtime "hsptv" #module #defcfunc rndf return double(rnd(32768)) / 32768 #defcfunc rndRange int a, int b return a + double(rnd(32768)) / 32767 * (b - a) #defcfunc rndfRange double a, double b return a + (b - a) * rnd(32768) / 32767 #global #uselib "opengl32.dll" #cfunc wglCreateContext "wglCreateContext" int #func wglMakeCurrent "wglMakeCurrent" int, int #func wglDeleteContext "wglDeleteContext" int #cfunc wglGetCurrentDC "wglGetCurrentDC" #func glClear "glClear" int #func glFinish "glFinish" #func glBegin "glBegin" int #func glEnd "glEnd" #func glPushMatrix "glPushMatrix" #func glPopMatrix "glPopMatrix" #func glEnable "glEnable" int #func glDisable "glDisable" int #func glBlendFunc "glBlendFunc" int, int #func glOrtho "glOrtho" double, double, double, double, double, double #func glFrustum "glFrustum" double, double, double, double, double, double #func glTranslate "glTranslated" double, double, double #func glRotate "glRotated" double, double, double, double #func glScale "glScaled" double, double, double #func glVertex2 "glVertex2d" double, double #func glVertex3 "glVertex3d" double, double, double #func glColor3 "glColor3d" double, double, double #func glColor4 "glColor4d" double, double, double, double #func glPointSize "glPointSize" float #func glLineWidth "glLineWidth" float #func glMatrixMode "glMatrixMode" int #func glLoadIdentity "glLoadIdentity" #func glFog "glFogf" int, float #uselib "glu32.dll" #func gluLookAt "gluLookAt" double, double, double, double, double, double, double, double, double #func gluPerspective "gluPerspective" double, double, double, double #uselib "gdi32.dll" #func SwapBuffers "SwapBuffers" int #cfunc ChoosePixelFormat "ChoosePixelFormat" int, var #func SetPixelFormat "SetPixelFormat" int, int, var #uselib "user32.dll" #cfunc GetDC "GetDC" int #uselib "winmm.dll" #cfunc timer "timeGetTime" #define GL_CURRENT_COLOR 0x0B00 #define GL_CURRENT_INDEX 0x0B01 #define GL_CURRENT_NORMAL 0x0B02 #define GL_CURRENT_TEXTURE_COORDS 0x0B03 #define GL_CURRENT_RASTER_COLOR 0x0B04 #define GL_CURRENT_RASTER_INDEX 0x0B05 #define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 #define GL_CURRENT_RASTER_POSITION 0x0B07 #define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 #define GL_CURRENT_RASTER_DISTANCE 0x0B09 #define GL_POINT_SMOOTH 0x0B10 #define GL_POINT_SIZE 0x0B11 #define GL_POINT_SIZE_RANGE 0x0B12 #define GL_POINT_SIZE_GRANULARITY 0x0B13 #define GL_LINE_SMOOTH 0x0B20 #define GL_LINE_WIDTH 0x0B21 #define GL_LINE_WIDTH_RANGE 0x0B22 #define GL_LINE_WIDTH_GRANULARITY 0x0B23 #define GL_LINE_STIPPLE 0x0B24 #define GL_LINE_STIPPLE_PATTERN 0x0B25 #define GL_LINE_STIPPLE_REPEAT 0x0B26 #define GL_LIST_MODE 0x0B30 #define GL_MAX_LIST_NESTING 0x0B31 #define GL_LIST_BASE 0x0B32 #define GL_LIST_INDEX 0x0B33 #define GL_POLYGON_MODE 0x0B40 #define GL_POLYGON_SMOOTH 0x0B41 #define GL_POLYGON_STIPPLE 0x0B42 #define GL_EDGE_FLAG 0x0B43 #define GL_CULL_FACE 0x0B44 #define GL_CULL_FACE_MODE 0x0B45 #define GL_FRONT_FACE 0x0B46 #define GL_LIGHTING 0x0B50 #define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 #define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 #define GL_LIGHT_MODEL_AMBIENT 0x0B53 #define GL_SHADE_MODEL 0x0B54 #define GL_COLOR_MATERIAL_FACE 0x0B55 #define GL_COLOR_MATERIAL_PARAMETER 0x0B56 #define GL_COLOR_MATERIAL 0x0B57 #define GL_FOG 0x0B60 #define GL_FOG_INDEX 0x0B61 #define GL_FOG_DENSITY 0x0B62 #define GL_FOG_START 0x0B63 #define GL_FOG_END 0x0B64 #define GL_FOG_MODE 0x0B65 #define GL_FOG_COLOR 0x0B66 #define GL_DEPTH_RANGE 0x0B70 #define GL_DEPTH_TEST 0x0B71 #define GL_DEPTH_WRITEMASK 0x0B72 #define GL_DEPTH_CLEAR_VALUE 0x0B73 #define GL_DEPTH_FUNC 0x0B74 #define GL_ACCUM_CLEAR_VALUE 0x0B80 #define GL_STENCIL_TEST 0x0B90 #define GL_STENCIL_CLEAR_VALUE 0x0B91 #define GL_STENCIL_FUNC 0x0B92 #define GL_STENCIL_VALUE_MASK 0x0B93 #define GL_STENCIL_FAIL 0x0B94 #define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 #define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 #define GL_STENCIL_REF 0x0B97 #define GL_STENCIL_WRITEMASK 0x0B98 #define GL_MATRIX_MODE 0x0BA0 #define GL_NORMALIZE 0x0BA1 #define GL_VIEWPORT 0x0BA2 #define GL_MODELVIEW_STACK_DEPTH 0x0BA3 #define GL_PROJECTION_STACK_DEPTH 0x0BA4 #define GL_TEXTURE_STACK_DEPTH 0x0BA5 #define GL_MODELVIEW_MATRIX 0x0BA6 #define GL_PROJECTION_MATRIX 0x0BA7 #define GL_TEXTURE_MATRIX 0x0BA8 #define GL_ATTRIB_STACK_DEPTH 0x0BB0 #define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 #define GL_ALPHA_TEST 0x0BC0 #define GL_ALPHA_TEST_FUNC 0x0BC1 #define GL_ALPHA_TEST_REF 0x0BC2 #define GL_DITHER 0x0BD0 #define GL_BLEND_DST 0x0BE0 #define GL_BLEND_SRC 0x0BE1 #define GL_BLEND 0x0BE2 #define GL_LOGIC_OP_MODE 0x0BF0 #define GL_INDEX_LOGIC_OP 0x0BF1 #define GL_COLOR_LOGIC_OP 0x0BF2 #define GL_AUX_BUFFERS 0x0C00 #define GL_DRAW_BUFFER 0x0C01 #define GL_READ_BUFFER 0x0C02 #define GL_SCISSOR_BOX 0x0C10 #define GL_SCISSOR_TEST 0x0C11 #define GL_INDEX_CLEAR_VALUE 0x0C20 #define GL_INDEX_WRITEMASK 0x0C21 #define GL_COLOR_CLEAR_VALUE 0x0C22 #define GL_COLOR_WRITEMASK 0x0C23 #define GL_INDEX_MODE 0x0C30 #define GL_RGBA_MODE 0x0C31 #define GL_DOUBLEBUFFER 0x0C32 #define GL_STEREO 0x0C33 #define GL_RENDER_MODE 0x0C40 #define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 #define GL_POINT_SMOOTH_HINT 0x0C51 #define GL_LINE_SMOOTH_HINT 0x0C52 #define GL_POLYGON_SMOOTH_HINT 0x0C53 #define GL_FOG_HINT 0x0C54 #define GL_TEXTURE_GEN_S 0x0C60 #define GL_TEXTURE_GEN_T 0x0C61 #define GL_TEXTURE_GEN_R 0x0C62 #define GL_TEXTURE_GEN_Q 0x0C63 #define GL_PIXEL_MAP_I_TO_I 0x0C70 #define GL_PIXEL_MAP_S_TO_S 0x0C71 #define GL_PIXEL_MAP_I_TO_R 0x0C72 #define GL_PIXEL_MAP_I_TO_G 0x0C73 #define GL_PIXEL_MAP_I_TO_B 0x0C74 #define GL_PIXEL_MAP_I_TO_A 0x0C75 #define GL_PIXEL_MAP_R_TO_R 0x0C76 #define GL_PIXEL_MAP_G_TO_G 0x0C77 #define GL_PIXEL_MAP_B_TO_B 0x0C78 #define GL_PIXEL_MAP_A_TO_A 0x0C79 #define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 #define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 #define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 #define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 #define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 #define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 #define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 #define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 #define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 #define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 #define GL_UNPACK_SWAP_BYTES 0x0CF0 #define GL_UNPACK_LSB_FIRST 0x0CF1 #define GL_UNPACK_ROW_LENGTH 0x0CF2 #define GL_UNPACK_SKIP_ROWS 0x0CF3 #define GL_UNPACK_SKIP_PIXELS 0x0CF4 #define GL_UNPACK_ALIGNMENT 0x0CF5 #define GL_PACK_SWAP_BYTES 0x0D00 #define GL_PACK_LSB_FIRST 0x0D01 #define GL_PACK_ROW_LENGTH 0x0D02 #define GL_PACK_SKIP_ROWS 0x0D03 #define GL_PACK_SKIP_PIXELS 0x0D04 #define GL_PACK_ALIGNMENT 0x0D05 #define GL_MAP_COLOR 0x0D10 #define GL_MAP_STENCIL 0x0D11 #define GL_INDEX_SHIFT 0x0D12 #define GL_INDEX_OFFSET 0x0D13 #define GL_RED_SCALE 0x0D14 #define GL_RED_BIAS 0x0D15 #define GL_ZOOM_X 0x0D16 #define GL_ZOOM_Y 0x0D17 #define GL_GREEN_SCALE 0x0D18 #define GL_GREEN_BIAS 0x0D19 #define GL_BLUE_SCALE 0x0D1A #define GL_BLUE_BIAS 0x0D1B #define GL_ALPHA_SCALE 0x0D1C #define GL_ALPHA_BIAS 0x0D1D #define GL_DEPTH_SCALE 0x0D1E #define GL_DEPTH_BIAS 0x0D1F #define GL_MAX_EVAL_ORDER 0x0D30 #define GL_MAX_LIGHTS 0x0D31 #define GL_MAX_CLIP_PLANES 0x0D32 #define GL_MAX_TEXTURE_SIZE 0x0D33 #define GL_MAX_PIXEL_MAP_TABLE 0x0D34 #define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 #define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 #define GL_MAX_NAME_STACK_DEPTH 0x0D37 #define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 #define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 #define GL_MAX_VIEWPORT_DIMS 0x0D3A #define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B #define GL_SUBPIXEL_BITS 0x0D50 #define GL_INDEX_BITS 0x0D51 #define GL_RED_BITS 0x0D52 #define GL_GREEN_BITS 0x0D53 #define GL_BLUE_BITS 0x0D54 #define GL_ALPHA_BITS 0x0D55 #define GL_DEPTH_BITS 0x0D56 #define GL_STENCIL_BITS 0x0D57 #define GL_ACCUM_RED_BITS 0x0D58 #define GL_ACCUM_GREEN_BITS 0x0D59 #define GL_ACCUM_BLUE_BITS 0x0D5A #define GL_ACCUM_ALPHA_BITS 0x0D5B #define GL_NAME_STACK_DEPTH 0x0D70 #define GL_AUTO_NORMAL 0x0D80 #define GL_MAP1_COLOR_4 0x0D90 #define GL_MAP1_INDEX 0x0D91 #define GL_MAP1_NORMAL 0x0D92 #define GL_MAP1_TEXTURE_COORD_1 0x0D93 #define GL_MAP1_TEXTURE_COORD_2 0x0D94 #define GL_MAP1_TEXTURE_COORD_3 0x0D95 #define GL_MAP1_TEXTURE_COORD_4 0x0D96 #define GL_MAP1_VERTEX_3 0x0D97 #define GL_MAP1_VERTEX_4 0x0D98 #define GL_MAP2_COLOR_4 0x0DB0 #define GL_MAP2_INDEX 0x0DB1 #define GL_MAP2_NORMAL 0x0DB2 #define GL_MAP2_TEXTURE_COORD_1 0x0DB3 #define GL_MAP2_TEXTURE_COORD_2 0x0DB4 #define GL_MAP2_TEXTURE_COORD_3 0x0DB5 #define GL_MAP2_TEXTURE_COORD_4 0x0DB6 #define GL_MAP2_VERTEX_3 0x0DB7 #define GL_MAP2_VERTEX_4 0x0DB8 #define GL_MAP1_GRID_DOMAIN 0x0DD0 #define GL_MAP1_GRID_SEGMENTS 0x0DD1 #define GL_MAP2_GRID_DOMAIN 0x0DD2 #define GL_MAP2_GRID_SEGMENTS 0x0DD3 #define GL_TEXTURE_1D 0x0DE0 #define GL_TEXTURE_2D 0x0DE1 #define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 #define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 #define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 #define GL_SELECTION_BUFFER_POINTER 0x0DF3 #define GL_SELECTION_BUFFER_SIZE 0x0DF4 #define GL_CURRENT_BIT 0x00000001 #define GL_POINT_BIT 0x00000002 #define GL_LINE_BIT 0x00000004 #define GL_POLYGON_BIT 0x00000008 #define GL_POLYGON_STIPPLE_BIT 0x00000010 #define GL_PIXEL_MODE_BIT 0x00000020 #define GL_LIGHTING_BIT 0x00000040 #define GL_FOG_BIT 0x00000080 #define GL_DEPTH_BUFFER_BIT 0x00000100 #define GL_ACCUM_BUFFER_BIT 0x00000200 #define GL_STENCIL_BUFFER_BIT 0x00000400 #define GL_VIEWPORT_BIT 0x00000800 #define GL_TRANSFORM_BIT 0x00001000 #define GL_ENABLE_BIT 0x00002000 #define GL_COLOR_BUFFER_BIT 0x00004000 #define GL_HINT_BIT 0x00008000 #define GL_EVAL_BIT 0x00010000 #define GL_LIST_BIT 0x00020000 #define GL_TEXTURE_BIT 0x00040000 #define GL_SCISSOR_BIT 0x00080000 #define GL_ALL_ATTRIB_BITS 0x000fffff #define PFD_DOUBLEBUFFER 0x00000001 #define PFD_STEREO 0x00000002 #define PFD_DRAW_TO_WINDOW 0x00000004 #define PFD_DRAW_TO_BITMAP 0x00000008 #define PFD_SUPPORT_GDI 0x00000010 #define PFD_SUPPORT_OPENGL 0x00000020 #define PFD_GENERIC_FORMAT 0x00000040 #define PFD_NEED_PALETTE 0x00000080 #define PFD_NEED_SYSTEM_PALETTE 0x00000100 #define PFD_SWAP_EXCHANGE 0x00000200 #define PFD_SWAP_COPY 0x00000400 #define PFD_SWAP_LAYER_BUFFERS 0x00000800 #define PFD_GENERIC_ACCELERATED 0x00001000 #define PFD_SUPPORT_DIRECTDRAW 0x00002000 #define PFD_TYPE_RGBA 0 #define PFD_MAIN_PLANE 0 #define GL_ZERO 0 #define GL_ONE 1 #define GL_SRC_COLOR 0x0300 #define GL_ONE_MINUS_SRC_COLOR 0x0301 #define GL_SRC_ALPHA 0x0302 #define GL_ONE_MINUS_SRC_ALPHA 0x0303 #define GL_DST_ALPHA 0x0304 #define GL_ONE_MINUS_DST_ALPHA 0x0305 #define GL_DST_COLOR 0x0306 #define GL_ONE_MINUS_DST_COLOR 0x0307 #define GL_SRC_ALPHA_SATURATE 0x0308 #define GL_POINTS 0x0000 #define GL_LINES 0x0001 #define GL_LINE_LOOP 0x0002 #define GL_LINE_STRIP 0x0003 #define GL_TRIANGLES 0x0004 #define GL_TRIANGLE_STRIP 0x0005 #define GL_TRIANGLE_FAN 0x0006 #define GL_QUADS 0x0007 #define GL_QUAD_STRIP 0x0008 #define GL_POLYGON 0x0009 #define GL_MODELVIEW 0x1700 #define GL_PROJECTION 0x1701 #define GL_TEXTURE 0x1702 // WindowのDCが必要(内部バッファのものでは動作しない) hdc_ = GetDC(hwnd) // 構造体を初期化 /* dim pixelFormatDescriptor, 10 // できる限りコンパイル時に計算を行わせる #const __TEMP0 (1 << 16 | 40) #const __TEMP1 (PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER) #const __TEMP2 ((24 << 8 | PFD_TYPE_RGBA) << 16) pixelFormatDescriptor = __TEMP0, __TEMP1, __TEMP2 #undef __TEMP0 #undef __TEMP1 #undef __TEMP2 #const __TEMP0 ((32 << 24) | 32) #const __TEMP1 (PFD_MAIN_PLANE << 16) pixelFormatDescriptor(5) = __TEMP0, __TEMP1 #undef __TEMP0 #undef __TEMP1 */ //pixelFormatDescriptor = 65576,37,8192,0,0,536870912,0,0,0,0 pixelFormatDescriptor = 65576,37,8192,0,0,268435456,0,0,0,0 // ピクセルフォーマットを指定 SetPixelFormat hdc_, ChoosePixelFormat(hdc_, pixelFormatDescriptor), pixelFormatDescriptor // OpenGLのコンテキストを作成 hrc = wglCreateContext(hdc_) wglMakeCurrent hdc_, hrc glEnable GL_BLEND glBlendFunc GL_SRC_ALPHA, GL_ONE //glBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA glEnable GL_LINE_SMOOTH glEnable GL_POLYGON_SMOOTH glMatrixMode GL_PROJECTION glLoadIdentity gluPerspective 45, 1.33, 10, 15000 onexit *onExitHandler #const double PI 3.14159265358979 #const RAINS 512 #enum RAIN_X = 0 #enum RAIN_Y #enum RAIN_Z #enum RAIN_VX #enum RAIN_VY #enum RAIN_VZ #enum RAIN_ELEMENTS #const WAVES RAINS * 2 #enum WAVE_TIME = 0 #enum WAVE_X #enum WAVE_Y #enum WAVE_SIZE #enum WAVE_ELEMENTS #const WATERS 512 #enum WATER_X = 0 #enum WATER_Y #enum WATER_TIME #enum WATER_R #enum WATER_G #enum WATER_B #enum WATER_ELEMENTS #const double ZOOM_SPEED 1.03 //dimtype rain, 3, RAIN_ELEMENTS dimtype rainData, 3, RAIN_ELEMENTS, RAINS dimtype waveData, 3, WAVE_ELEMENTS, WAVES dimtype waterData, 3, WATER_ELEMENTS, WATERS randomize repeat RAINS gosub *initRain rainData(RAIN_Z, cnt) = rndf() * -1000 loop #const __TEMP0 (WATERS / 2) repeat __TEMP0 r = rndf() * 0.1 g = r + rndf() * 0.2 b = g + rndf() * 0.3 waterData(0, cnt) = rndfRange(-100, 100), rndfRange(-100, 100), rndf() * PI * 2, r * 2, g, b loop repeat __TEMP0, __TEMP0 r = rndf() * 0.1 b = r + rndf() * 0.2 g = b + rndf() * 0.2 xx = rndfRange(-150, 150) yy = rndfRange(-150, 150) if absf(xx) < 100 & absf(yy) < 100 { continue cnt } waterData(0, cnt) = xx, yy, rndf() * PI * 2, r * 2, g, b loop #undef __TEMP0 mouse -1 prevTimer = timer() cameraDistance = 1.0 repeat await glClear GL_COLOR_BUFFER_BIT dt = 0.001 * (timer() - prevTimer) if dt <= 0 { dt = 0.001 } prevTimer = timer() if dt >= 0.1 { continue } getkey i, 27 if i { gosub *onExitHandler } getkey i, 'X' if i { cameraDistance *= ZOOM_SPEED } getkey i, 'Z' if i { #const double __TEMP0 (1.0 / ZOOM_SPEED) cameraDistance *= __TEMP0 #undef __TEMP0 } if cameraDistance < 0.5 { cameraDistance = 0.5 } if cameraDistance > 5 { cameraDistance = 5.0 } glPushMatrix glScale cameraDistance, cameraDistance, cameraDistance x = cameraDistance * 0.5 * (mousex - 320) y = cameraDistance * (mousey - 320) gluLookAt x, y, cameraDistance * -100, 0, 0, 0, 0, 1, 0 repeat WATERS dup water, waterData(0, cnt) water(WATER_TIME) += PI * dt / 4 glPushMatrix glTranslate water(WATER_X), water(WATER_Y), 0 glColor4 water(WATER_R), water(WATER_G), water(WATER_B), absf(sin(water(WATER_TIME))) / 8 + 0.1 glBegin GL_QUADS glVertex2 -15, -15 glVertex2 15, -15 glVertex2 15, 15 glVertex2 -15, 15 glEnd glPopMatrix loop glLineWidth 1 repeat RAINS dup rain, rainData(0, cnt) rain(RAIN_X) += rain(RAIN_VX) * dt rain(RAIN_Y) += rain(RAIN_VY) * dt rain(RAIN_Z) += rain(RAIN_VZ) * dt glColor4 1, 1, 1, 0.5 if rain(RAIN_Z) > 0 { gosub *initRain gosub *initWave } glPushMatrix glTranslate rain(RAIN_X), rain(RAIN_Y), rain(RAIN_Z) glBegin GL_LINES glVertex3 glVertex3 rain(RAIN_VX) / 100, rain(RAIN_VY) / 100, rain(RAIN_VZ) / 50 glEnd glPopMatrix loop repeat WAVES dup wave, waveData(0, cnt) if wave(WAVE_TIME) <= 0 { continue } wave(WAVE_TIME) -= dt w = wave(WAVE_TIME) rw = 1.0 - w wave(WAVE_SIZE) += rw * dt * 10 if w > 1.0 { alpha = rw * 5 } else { alpha = w * w } glPushMatrix glTranslate wave(WAVE_X), wave(WAVE_Y) size = rw * rw * 8 glScale size, size, size glLineWidth 2 glColor4 0.7, 0.9, 1, w * w / 2 glBegin GL_LINE_LOOP repeat 16 r = PI * cnt / 8 glVertex2 cos(r), sin(r) loop glEnd glPopMatrix loop glPopMatrix glFinish SwapBuffers wglGetCurrentDC() loop *initRain rainData(0, cnt) = rndfRange(-150, 150), rndfRange(-150, 150), -1000.0, rndfRange(-50, 50), rndfRange(-50, 50), rndf() * 200 + 800 return *initWave if rain(RAIN_X) > -100 & rain(RAIN_X) < 100 & rain(RAIN_Y) > -100 & rain(RAIN_Y) < 100 { repeat WAVES if waveData(WAVE_TIME, cnt) <= 0 { waveData(0, cnt) = rndfRange(0.1, 1.0), rain(RAIN_X), rain(RAIN_Y), 0.0 break } loop } return *onExitHandler mouse wglMakeCurrent wglDeleteContext hrc end