… | |
… | |
481 | ev.data2 = 0; |
481 | ev.data2 = 0; |
482 | |
482 | |
483 | SDL_PushEvent ((SDL_Event *)&ev); |
483 | SDL_PushEvent ((SDL_Event *)&ev); |
484 | } |
484 | } |
485 | |
485 | |
|
|
486 | // approximately divide by 255 |
486 | static unsigned int |
487 | static unsigned int |
487 | div255 (unsigned int n) |
488 | div255 (unsigned int n) |
488 | { |
489 | { |
489 | return (n + (n >> 8)) >> 8; |
490 | return (n + (n >> 8)) >> 8; |
490 | } |
491 | } |
… | |
… | |
1083 | OUTPUT: |
1084 | OUTPUT: |
1084 | RETVAL |
1085 | RETVAL |
1085 | |
1086 | |
1086 | int |
1087 | int |
1087 | Mix_OpenAudio (int frequency = 44100, int format = MIX_DEFAULT_FORMAT, int channels = 2, int chunksize = 4096) |
1088 | Mix_OpenAudio (int frequency = 44100, int format = MIX_DEFAULT_FORMAT, int channels = 2, int chunksize = 4096) |
1088 | POSTCALL: |
1089 | POSTCALL: |
1089 | Mix_HookMusicFinished (music_finished); |
1090 | Mix_HookMusicFinished (music_finished); |
1090 | Mix_ChannelFinished (channel_finished); |
1091 | Mix_ChannelFinished (channel_finished); |
1091 | |
1092 | |
1092 | void |
1093 | void |
1093 | Mix_QuerySpec () |
1094 | Mix_QuerySpec () |
… | |
… | |
1917 | |
1918 | |
1918 | void |
1919 | void |
1919 | set_smooth (DC::Map self, int face, int smooth, int level) |
1920 | set_smooth (DC::Map self, int face, int smooth, int level) |
1920 | CODE: |
1921 | CODE: |
1921 | { |
1922 | { |
1922 | tileid texid; |
1923 | tileid texid; |
1923 | maptex *tex; |
1924 | maptex *tex; |
1924 | |
1925 | |
1925 | if (face < 0 || face >= self->faces) |
1926 | if (face < 0 || face >= self->faces) |
1926 | return; |
1927 | return; |
1927 | |
1928 | |
1928 | if (smooth < 0 || smooth >= self->faces) |
1929 | if (smooth < 0 || smooth >= self->faces) |
1929 | return; |
1930 | return; |
1930 | |
1931 | |
1931 | texid = self->face2tile [face]; |
1932 | texid = self->face2tile [face]; |
1932 | |
1933 | |
1933 | if (!texid) |
1934 | if (!texid) |
1934 | return; |
1935 | return; |
1935 | |
1936 | |
1936 | tex = self->tex + texid; |
1937 | tex = self->tex + texid; |
… | |
… | |
1969 | } |
1970 | } |
1970 | |
1971 | |
1971 | void |
1972 | void |
1972 | expire_textures (DC::Map self, int texid, int count) |
1973 | expire_textures (DC::Map self, int texid, int count) |
1973 | PPCODE: |
1974 | PPCODE: |
1974 | for (; texid < self->texs && count; ++texid, --count) |
1975 | for (; texid < self->texs && count; ++texid, --count) |
1975 | { |
1976 | { |
1976 | maptex *tex = self->tex + texid; |
1977 | maptex *tex = self->tex + texid; |
1977 | |
1978 | |
1978 | if (tex->name) |
1979 | if (tex->name) |
1979 | { |
1980 | { |
… | |
… | |
2181 | | (b << 16) |
2182 | | (b << 16) |
2182 | | (a << 24); |
2183 | | (a << 24); |
2183 | } |
2184 | } |
2184 | } |
2185 | } |
2185 | |
2186 | |
2186 | RETVAL = map_sv; |
2187 | RETVAL = map_sv; |
2187 | } |
2188 | } |
2188 | OUTPUT: |
2189 | OUTPUT: |
2189 | RETVAL |
2190 | RETVAL |
2190 | |
2191 | |
2191 | void |
2192 | void |
2192 | draw (DC::Map self, int mx, int my, int sw, int sh, int Tw, int Th, U32 player = 0xffffffff, int sdx = 0, int sdy = 0) |
2193 | draw (DC::Map self, int mx, int my, int sw, int sh, int Tw, int Th, U32 player = 0xffffffff, int sdx = 0, int sdy = 0) |
2193 | CODE: |
2194 | CODE: |
2194 | { |
2195 | { |
2195 | int x, y, z; |
2196 | int x, y, z; |
2196 | |
2197 | |
2197 | HV *smooth = (HV *)sv_2mortal ((SV *)newHV ()); |
2198 | HV *smooth = (HV *)sv_2mortal ((SV *)newHV ()); |
2198 | uint32_t smooth_level[256 / 32]; // one bit for every possible smooth level |
2199 | uint32_t smooth_level[256 / 32]; // one bit for every possible smooth level |
2199 | static uint8_t smooth_max[256][256]; // egad, fast and wasteful on memory (64k) |
2200 | static uint8_t smooth_max[256][256]; // egad, fast and wasteful on memory (64k) |
2200 | smooth_key skey; |
2201 | smooth_key skey; |
2201 | int pl_x, pl_y; |
2202 | int pl_x, pl_y; |
2202 | maptex pl_tex; |
2203 | maptex pl_tex; |
… | |
… | |
2720 | else |
2721 | else |
2721 | *data++ = 0; |
2722 | *data++ = 0; |
2722 | } |
2723 | } |
2723 | } |
2724 | } |
2724 | |
2725 | |
2725 | /* if size is w*h + 5 then no data has been found */ |
2726 | /* if size is w*h + 5 then no data has been found */ |
2726 | if (data - (uint8_t *)SvPVX (data_sv) != w * h + 5) |
2727 | if (data - (uint8_t *)SvPVX (data_sv) != w * h + 5) |
2727 | { |
2728 | { |
2728 | SvPOK_only (data_sv); |
2729 | SvPOK_only (data_sv); |
2729 | SvCUR_set (data_sv, data - (uint8_t *)SvPVX (data_sv)); |
2730 | SvCUR_set (data_sv, data - (uint8_t *)SvPVX (data_sv)); |
2730 | } |
2731 | } |
2731 | |
2732 | |
2732 | RETVAL = data_sv; |
2733 | RETVAL = data_sv; |
2733 | } |
2734 | } |
2734 | OUTPUT: |
2735 | OUTPUT: |
2735 | RETVAL |
2736 | RETVAL |
2736 | |
2737 | |
2737 | void |
2738 | void |
… | |
… | |
3427 | |
3428 | |
3428 | void |
3429 | void |
3429 | find_widget (SV *self, NV x, NV y) |
3430 | find_widget (SV *self, NV x, NV y) |
3430 | PPCODE: |
3431 | PPCODE: |
3431 | { |
3432 | { |
3432 | if (within_widget (self, x, y)) |
3433 | if (within_widget (self, x, y)) |
3433 | XPUSHs (self); |
3434 | XPUSHs (self); |
3434 | } |
3435 | } |
3435 | |
3436 | |
3436 | BOOT: |
3437 | BOOT: |
3437 | { |
3438 | { |
… | |
… | |
3445 | |
3446 | |
3446 | void |
3447 | void |
3447 | draw (SV *self) |
3448 | draw (SV *self) |
3448 | CODE: |
3449 | CODE: |
3449 | { |
3450 | { |
3450 | HV *hv; |
3451 | HV *hv; |
3451 | SV **svp; |
3452 | SV **svp; |
3452 | NV x, y, w, h; |
3453 | NV x, y, w, h; |
3453 | SV *draw_x_sv = GvSV (draw_x_gv); |
3454 | SV *draw_x_sv = GvSV (draw_x_gv); |
3454 | SV *draw_y_sv = GvSV (draw_y_gv); |
3455 | SV *draw_y_sv = GvSV (draw_y_gv); |
3455 | SV *draw_w_sv = GvSV (draw_w_gv); |
3456 | SV *draw_w_sv = GvSV (draw_w_gv); |
3456 | SV *draw_h_sv = GvSV (draw_h_gv); |
3457 | SV *draw_h_sv = GvSV (draw_h_gv); |