Sandbox
(→bgfunct) |
|||
(5 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
<big>This page can be used to experiment with the waki wiki ways</big> | <big>This page can be used to experiment with the waki wiki ways</big> | ||
+ | |||
+ | note to self: make a page on writing device drivers for libnds... | ||
+ | |||
+ | asdfgh! | ||
+ | |||
+ | some of meh programming values: | ||
+ | * simplicity | ||
+ | things should be intuitive, easy to use. variable and function names should be self explanitory as much as possible. | ||
+ | * consistency | ||
+ | variable and function names, methods, etc should follow patterns | ||
+ | * modularity | ||
+ | individual components that can be used alone or in tandem | ||
+ | * compatibility | ||
+ | components should work with each other as well as other '3rd party components' | ||
+ | * familiarity | ||
+ | components should be based when appropriate on well known common concepts. | ||
+ | * eat lots of leet onion | ||
+ | Huh @_@? How about: no one is perfect :p | ||
{{refimprove|date=February 2008}} | {{refimprove|date=February 2008}} | ||
Line 111: | Line 129: | ||
+ | </source> | ||
+ | <source lang="c"> | ||
+ | //Whatever you need to initalize the bg | ||
+ | void mybg0start(void) { | ||
+ | BG1_CR = BG_32x32 | BG_COLOR_256 | BG_MAP_BASE(12) | BG_TILE_BASE(1) | BG_PRIORITY(BG_PRIORITY_1); | ||
+ | SUB_BG1_CR = BG_32x32 | BG_COLOR_256 | BG_MAP_BASE(12) | BG_TILE_BASE(1) | BG_PRIORITY(BG_PRIORITY_1); | ||
+ | dmaCopyWords(3,BG1_Map, BG_MAP_RAM(12), sizeof(BG1_Map)); | ||
+ | dmaCopyWords(3,BG1_Tiles, BG_TILE_RAM(1), sizeof(BG1_Tiles)); | ||
+ | dmaCopyWords(3,BG1_Map, BG_MAP_RAM_SUB(12), sizeof(BG1_Map)); | ||
+ | dmaCopyWords(3,BG1_Tiles, BG_TILE_RAM_SUB(1), sizeof(BG1_Tiles)); | ||
+ | thUpdateBgPalette(BG1_Pal, 1, sizeof(BG1_Pal)); | ||
+ | thUpdateBgSubPalette(BG1_Pal, 1, sizeof(BG1_Pal)); | ||
+ | thSpriteSetHblankFunc((void*)&myhblnkfunc); | ||
+ | } | ||
+ | |||
+ | //whatever you need to update the bg each frame | ||
+ | void mybg0update(int frame) { | ||
+ | BG1_Y0=(u16)-frame; | ||
+ | SUB_BG1_Y0=(u16)-frame; | ||
+ | } | ||
+ | |||
+ | //when your finished... | ||
+ | void mybg0finish(void) { | ||
+ | thSpriteSetHblankFunc((void*)NULL); | ||
+ | } | ||
+ | |||
+ | //defines the background | ||
+ | thbg_t mybg0={ | ||
+ | (void*)&mybg0start, | ||
+ | (void*)&mybg0update, | ||
+ | (void*)&mybg0finish | ||
+ | }; | ||
+ | |||
+ | </source> | ||
+ | <source lang="c"> | ||
+ | //someplace in ur code start the desired bg... | ||
+ | thBgStart(&mybg0); | ||
</source> | </source> |
Latest revision as of 16:19, 22 November 2009
This page can be used to experiment with the waki wiki ways
note to self: make a page on writing device drivers for libnds...
asdfgh!
some of meh programming values:
- simplicity
things should be intuitive, easy to use. variable and function names should be self explanitory as much as possible.
- consistency
variable and function names, methods, etc should follow patterns
- modularity
individual components that can be used alone or in tandem
- compatibility
components should work with each other as well as other '3rd party components'
- familiarity
components should be based when appropriate on well known common concepts.
- eat lots of leet onion
Huh @_@? How about: no one is perfect :p
~_~</div>{{#if:February 2008||}}
Blah Blah Blah
Lupis Leeestum blah da teestium.
Sowarikko?!! nandeyo?! ¬_¬
Math boxes do not work?
<math>(x2-x1)^2</math>
- <math>{n^n \over 3^n} < n! < {n^n \over 2^n}\mbox{ for }n\ge 6.</math>
(a*px+b*py+c)/sqrt(a^2+b^2) <--- shortest distance from p(oint) to line (abc) ab = slope, c = distance
void reverse(char *str) { char *epos=strlen(str); char c; do { c=*--epos; *str=*epos; *epos++=c; } while(str>epos); }
bgfunct
#ifndef THBG_H #define THBG_H typedef void(*_pBgStartFunc)(void); //Background Setup Function (called first) typedef void(*_pBgUpdateFunc)(int); //Background update function typedef void(*_pBgFinishFunc)(void); //Background destroy function typedef struct { _pBgStartFunc start; _pBgUpdateFunc update; _pBgFinishFunc finish; void *bgdat; //background set specific data } thbg_t; void thBgInit(void); //get everything ready void thBgUpdate(int frame); //call this every vblank void thBgStart(thbg_t *thbg); //call this to start a bg (will first stop any already running) void thBgFinish(void); //stops bg, erases bg mem, etc void thUpdateBgPalette(uint16 *pal, int dstpal, int size); void thUpdateBgSubPalette(uint16 *pal, int dstpal, int size); #endif
#include <nds.h> #include "thbg.h" #include <stdio.h> thbg_t *currentbg; void thBgInit(void) { currentbg=NULL; vramSetBankC(VRAM_C_SUB_BG); vramSetBankH(VRAM_H_SUB_BG_EXT_PALETTE); vramSetBankB(VRAM_B_MAIN_BG); vramSetBankE(VRAM_E_MAIN_BG); vramSetBankF(VRAM_F_BG_EXT_PALETTE); } //hmmz should i have pBgStartFunc return a pointer to its data, then pass that as arg to update and finish? void thBgStart(thbg_t *thbg) { thBgFinish(); //just in case currentbg=thbg; if(currentbg->start) ((_pBgStartFunc)currentbg->start)(); } void thBgUpdate(int frame) { if(currentbg) { ((_pBgUpdateFunc)currentbg->update)(frame); } } void thBgFinish(void) { if(currentbg) { if(currentbg->finish) ((_pBgFinishFunc)currentbg->finish)(); currentbg=NULL; } } void thUpdateBgPalette(uint16 *pal, int dstpal, int size) { vramSetBankF(VRAM_F_LCD); DC_FlushRange(pal,size); dmaCopyWords(3,pal, VRAM_F_EXT_PALETTE[dstpal], size); vramSetBankF(VRAM_F_BG_EXT_PALETTE); } void thUpdateBgSubPalette(uint16 *pal, int dstpal, int size) { vramSetBankH(VRAM_H_LCD); DC_FlushRange(pal,size); dmaCopyWords(3,pal, VRAM_H_EXT_PALETTE[dstpal], size); vramSetBankH(VRAM_H_SUB_BG_EXT_PALETTE); }
//Whatever you need to initalize the bg void mybg0start(void) { BG1_CR = BG_32x32 | BG_COLOR_256 | BG_MAP_BASE(12) | BG_TILE_BASE(1) | BG_PRIORITY(BG_PRIORITY_1); SUB_BG1_CR = BG_32x32 | BG_COLOR_256 | BG_MAP_BASE(12) | BG_TILE_BASE(1) | BG_PRIORITY(BG_PRIORITY_1); dmaCopyWords(3,BG1_Map, BG_MAP_RAM(12), sizeof(BG1_Map)); dmaCopyWords(3,BG1_Tiles, BG_TILE_RAM(1), sizeof(BG1_Tiles)); dmaCopyWords(3,BG1_Map, BG_MAP_RAM_SUB(12), sizeof(BG1_Map)); dmaCopyWords(3,BG1_Tiles, BG_TILE_RAM_SUB(1), sizeof(BG1_Tiles)); thUpdateBgPalette(BG1_Pal, 1, sizeof(BG1_Pal)); thUpdateBgSubPalette(BG1_Pal, 1, sizeof(BG1_Pal)); thSpriteSetHblankFunc((void*)&myhblnkfunc); } //whatever you need to update the bg each frame void mybg0update(int frame) { BG1_Y0=(u16)-frame; SUB_BG1_Y0=(u16)-frame; } //when your finished... void mybg0finish(void) { thSpriteSetHblankFunc((void*)NULL); } //defines the background thbg_t mybg0={ (void*)&mybg0start, (void*)&mybg0update, (void*)&mybg0finish };
//someplace in ur code start the desired bg... thBgStart(&mybg0);