Random line of code thread
category: code [glöplog]
Code:
template <class T>
inline T remap(T value, T a, T b, T c, T d) {
return c + (d - c) * (value - a) / (b - a);
}
Code:
push {r4-r5,lr}
lsr r2, r2, #3
mov r3, #77
mov r4, #151
mov r5, #28
vdup.8 d3, r3
vdup.8 d4, r4
vdup.8 d5, r5
.loop:
vld3.8 {d0-d2}, [r1]!
vmull.u8 q3, d0, d3
vmlal.u8 q3, d1, d4
vmlal.u8 q3, d2, d5
vshrn.u16 d6, q3, #8
vst1.8 {d6}, [r0]!
subs r2, r2, #1
bne .loop
pop { r4-r5, pc }
entity foo is
generic( d : integer );
port( ck, rs_n : in std_logic; x, y, z : in integer; v : out integer );
end entity;
architecture bar of foo is
type z_t is array(0 to d) of std_logic_vector(r-1 downto 0);
type y_t is array(0 to d) of z_t;
type x_t is array(0 to d) of y_y;
signal box : x_t ;
begin
process(ck, rs)
begin
if rs='1' then
for _z in 0 to d-1 loop
for _y in 0 to d-1 loop
for _x in 0 to d-1 loop
box(z)(y)(x) <= x*y*z;
end loop;
end loop;
end loop;
elsif rising_edge(ck) then
v <= box(z)(y)(x);
end if;
end process;
generic( d : integer );
port( ck, rs_n : in std_logic; x, y, z : in integer; v : out integer );
end entity;
architecture bar of foo is
type z_t is array(0 to d) of std_logic_vector(r-1 downto 0);
type y_t is array(0 to d) of z_t;
type x_t is array(0 to d) of y_y;
signal box : x_t ;
begin
process(ck, rs)
begin
if rs='1' then
for _z in 0 to d-1 loop
for _y in 0 to d-1 loop
for _x in 0 to d-1 loop
box(z)(y)(x) <= x*y*z;
end loop;
end loop;
end loop;
elsif rising_edge(ck) then
v <= box(z)(y)(x);
end if;
end process;
Code:
for (int x = 0; x < 4; x++) //worst cubegen code evar
{pointList[x] = new VertexPositionColor(new Vector3(100 * (x & 1)-50, 50 * (x & 2)-50, -50), Color.White);
pointList[x+4] = new VertexPositionColor(new Vector3(100 * (x & 1)-50, 50 * (x & 2)-50,50), Color.White);}
@torus: http://hilbert-space.de/?p=22 looks familiar :T
SIMD kicks ass for image filters. I wish the HTC Hero had a Neon-enabled ARM.. doing scalar processing of RGB565 data is bullshit :P
SIMD kicks ass for image filters. I wish the HTC Hero had a Neon-enabled ARM.. doing scalar processing of RGB565 data is bullshit :P
Code:
void __attribute__((section(".iwram"),long_call)) rotozoomer()
{
int x,y;
int dx=(-(vid_screen.w>>2));
int dy;
int sdy,cdy;
int _x,_y;
int presin;
int precos;
int color;
u16 *p,*b;
while(1)
{
p=((u16*)(vid_screen.pixel));
b=p+SCREEN_WIDTH*SCREEN_HEIGHT;
presin=*(sin_lut+(angle&511));
precos=*(sin_lut+((angle+128)&511));
vid_vsync();
for(y^=y,dy=80;y<SCREEN_HEIGHT/2;y++,dy--)
{
sdy=dy*presin;
cdy=dy*precos;
for(x^=x,dx=-120;x<SCREEN_WIDTH;x++,dx++)
{
_y=((cdy+dx*presin)>>14)&63;
_x=((dx*precos-sdy)>>14)&63;
color=*(((u16*)(textureBitmap))+_x+(_y<<6));
*p++=color;
*b--=color;
}
}
angle++;
}
}
Code:
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Terrible things are about to happen
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def meet_monster( _Player, _dung_monsters ):
From "pytarl" a text adventure/rougelike dungeon crawler game I currently develop. If anyone cares, the dev site is over here. You can download a win32 version from here. :)
shmup-basics :)
private function gameLoop(e:Event):void
{
updateEnemies();
updatePlayerShip();
updatePlayerShots();
updateGameDisplay();
}
private function gameLoop(e:Event):void
{
updateEnemies();
updatePlayerShip();
updatePlayerShots();
updateGameDisplay();
}
@mic - well. That hilbert-space thing is my blog :-)
OnSoL: Notice that the result of dx*presin increase by presin for every x-iteration; forward differencing it would be faster. The same goes for dx*precos. Basically, everything before ">>14)&63" can be turned into one add per pixel (or, two. one for _x and one for _y). Then notice how you can get rid of the dx-tracking - in fact, all you have left is the x-counter, x/y, x/y-deltas, and screen pointers. Next, turn your x-counter to count downwards, as that allows the compiler to have the sub-instruction update the zero-flag, giving the compare for free. Then you should start unrolling the inner loop :)
If you really want to be hard-core, you can combine the x and y counters (and deltas) into the same register, by using 16 bit per each. But beware of precision. Doing something like tracking high-precision x and y for each 16th pixel, and using low-precision between usually pays off.
And, as a final tweak you could use mode 4 instead, giving you double buffering. In that case, you need to write two horizontal pixels at the time, due to the lack of 8-bit writes to VRAM. This fits nicely with the unrolling, though :)
Congrats, now you have one of the fastest braindead rotozoomers for the GBA -- just using the BG transformation matrix is just soooo much faster :)
As a final nit-pick: your use of leading underscores for the _x and _y variables is not entirely kosher C++. Symbols starting with underscore is reserved for the C++ implementation.
If you really want to be hard-core, you can combine the x and y counters (and deltas) into the same register, by using 16 bit per each. But beware of precision. Doing something like tracking high-precision x and y for each 16th pixel, and using low-precision between usually pays off.
And, as a final tweak you could use mode 4 instead, giving you double buffering. In that case, you need to write two horizontal pixels at the time, due to the lack of 8-bit writes to VRAM. This fits nicely with the unrolling, though :)
Congrats, now you have one of the fastest braindead rotozoomers for the GBA -- just using the BG transformation matrix is just soooo much faster :)
As a final nit-pick: your use of leading underscores for the _x and _y variables is not entirely kosher C++. Symbols starting with underscore is reserved for the C++ implementation.
@tomaes: when de monster asks you to guess his trow, it's really vage.
i don't know how to format my reply. " 1 2 3" "123" "1,2,3" is all possible, but a wrongly formatted guess just counts as a wrong reply. (even entering "?" made me loose a guess.)
also, let some space between the messages, it's hard to know where you need to start reading for the last new message.
but i can see a cool game comming up :)
i don't know how to format my reply. " 1 2 3" "123" "1,2,3" is all possible, but a wrongly formatted guess just counts as a wrong reply. (even entering "?" made me loose a guess.)
also, let some space between the messages, it's hard to know where you need to start reading for the last new message.
but i can see a cool game comming up :)
whynot2000: You just enter them one by one. F.e., an easy example: If the throw is 4, you know it can only be 1+1+2. So you enter your first guess "1" <enter> etc. Depending on the answers (f.e. a guess you were not sure of, because multiple options would be possible), you can change your strategy.
I'll upload a win32 version of the latest 0.6.2b to sourceforge later today. Bitbucket always has the latest version. :)
I'll upload a win32 version of the latest 0.6.2b to sourceforge later today. Bitbucket always has the latest version. :)
(on second thought, that routine was kinda broken anyway. I am at 0.6.5b now and with the help of a really anal playtester, his thing is approaching actual playability/extended-coffee-break-fun rather quickly... ;)
Quote:
static void unHAM( MOVIE *mov, unsigned char *src, unsigned char *dst )
Quote:
shmup-basics :)
private function gameLoop(e:Event):void
{
updateEnemies();
updatePlayerShip();
updatePlayerShots();
updateGameDisplay();
}
or just consider enemies, playership, playshots and so as entities and just do this : (with actor being of course a class and playership a sub-class of actor)
Code:
foreach(actor a in actors)
{
a.update();
}
if worlddestroyedbylargehadroncollider = 1 then print "The world has been destroyed by the large hadron collider" else print "The world has not been destroyed by the large hadron collider" endif
artrotate#[threeDs[i]] = ATan2(ourY#,ourX#)
slightly OT yet code-related:
emacs ibuffer mode is the best thing since sliced bread! :)
here's my .emacs ini file , compatible with emacs 23.1 / win32 (place in c:/.emacs)
random-LOC:
emacs ibuffer mode is the best thing since sliced bread! :)
here's my .emacs ini file , compatible with emacs 23.1 / win32 (place in c:/.emacs)
random-LOC:
Code:
define int CTL_SLIDE = 27; // Note slide (0=off, 1..255)
wurstkäse
Code:
if (!(pIns->VolEnv.dwFlags & ENV_CARRY)) resetEnvelopes(pChn, ENV_RESET_VOL);
bra andpantsoff
andpantsoff ret
Code:
drawcopy @demo %plane02.x %plane02.y %plane02.w $calc(%plane02.h + 8) @demo %plane02.x $calc(%plane02.y + 1) %plane02.w $calc(%plane02.h + 8)
Code:
while [ 0 -eq 0 ]
do
echo "this topic is useless"
wait 1
done
Code:
if(!isset($re[$tmp[$i]['prd_id']])) $re[$tmp[$i]['prd_id']] = array();
...can't wait to fire up the ASM again this weekend
Code:
#define INTERPOLATE_CASE1(p,n,c,r,g,b) \
{ \
(b) = (c); \
(r) = _dotpu4 (_packl4 ((p),(n)), 0x40404040); \
(g) = _dotpu4 (_packh4 ((c)<<8, _pack2((p),(n))),0x40404040); \
}
#define INTERPOLATE_CASE2(p,n,c,r,g,b) \
{ \
(b) = _dotpu4 ((c)>>8, 0x00800080); \
(g) = (c)>>8; \
(r) = _avgu4 ((p),(n))>>8; \
}
#define INTERPOLATE_CASE3(p,n,c,r,g,b) \
{ \
(b) = _avgu4 ((p),(n)); \
(r) = _dotpu4 ((c), 0x00800080); \
(g) = (c); \
}
#define INTERPOLATE_CASE4(p,n,c,r,g,b) \
{ \
(b) = _dotpu4(_packh4((p),(n)), 0x40404040); \
(g) = _dotpu4(_packl4((c>>8), _packh2((p),(n))), 0x40404040); \
(r) = (c)>>8; \
}