This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
notes:comporg [2022/02/01 22:11] – [Useful Links] mpronti2 | notes:comporg [2022/04/18 15:33] (current) – [Mouse] mpronti2 | ||
---|---|---|---|
Line 14: | Line 14: | ||
=====Working with Memory in TIC80===== | =====Working with Memory in TIC80===== | ||
- | ===Persistent Memory=== | + | ====Persistent Memory==== |
In order to change part of persistent memory, the process begins as normal for any other piece of memory - `poke(addr, data, size)`. However, making persistent changes to the cart is a special case - since the cart is loaded into RAM (virtually and in reality) when it is run, changes made to its memory will only apply as long as it is being run, meaning something else needs to happen in order to, say, make a visual change to the editor. After making a change to the cart, the `sync()` function must be called, specifically `sync(0, 0, true)`, which breaks down into: sync(sector bitmask, bank, tocart) - in our case, sync all (0) sectors to bank zero (0), and apply the changes to the cart (true). | In order to change part of persistent memory, the process begins as normal for any other piece of memory - `poke(addr, data, size)`. However, making persistent changes to the cart is a special case - since the cart is loaded into RAM (virtually and in reality) when it is run, changes made to its memory will only apply as long as it is being run, meaning something else needs to happen in order to, say, make a visual change to the editor. After making a change to the cart, the `sync()` function must be called, specifically `sync(0, 0, true)`, which breaks down into: sync(sector bitmask, bank, tocart) - in our case, sync all (0) sectors to bank zero (0), and apply the changes to the cart (true). | ||
+ | In addition, one can utilize the pmem() function to retrieve or save values to persistent memory without needing the pro version of TIC-80. This is how you use it: pmem(address (0-255), 32-bit value), where the value can be omitted if one only wants to read from the address. This will save value(s) across sessions on that cart, and can be used for high scores, palettes, etc. You may want to have a " | ||
+ | |||
+ | For specific, upper-level questions (such as how to use peek() and/or poke()), it can be hard to find online resources. However, the "Code examples and snippets" | ||
+ | |||
+ | It is currently understood that there is 1 kilobyte of persistent memory stored at offset 0x14004 (remember ' | ||
+ | |||
+ | ====Scanlines==== | ||
+ | |||
+ | TIC-80 renders the pixels on its screen using scanlines. The concept is straightforward, | ||
+ | |||
+ | Using the ' | ||
+ | <code lua> | ||
+ | function SCN(scanline) | ||
+ | -- insert code here to manipulate pallete or other things | ||
+ | end | ||
+ | </ | ||
+ | One simply has to put this function somewhere in their script, it is similar to the main function ' | ||
+ | |||
+ | =====TIC-80 Functions===== | ||
+ | |||
+ | ====Map==== | ||
+ | |||
+ | If you choose to go the TIC-80 route from week 8 onwards, you may find it beneficial to play with the map. mset(), mget(), and map() are important tools for such an endeavor. You can use combinations of these functions to, for example, manage player collisions with environment(s). You can also use map() in addition to SCN() to display a colorful, fulfilling background without the need to manually display a bunch of sprites. | ||
+ | |||
+ | ====Audio==== | ||
+ | |||
+ | The sfx() function within TIC-80 can be used to play audio from the SFX Editor. It can adjust the note, duration, volume, etc. | ||
+ | |||
+ | ====Mouse==== | ||
+ | |||
+ | mouse() returns, among others, 3 important things: the x-coordinate of the pointer, the y-coordinate of the pointer, and whether or not the mouse is being clicked. Thus, | ||
+ | < | ||
+ | x,y,z = mouse() | ||
+ | </ | ||
+ | will allow you to check where you are currently clicking. This allows for the implementation of buttons for the player. | ||
=====TIC80 System Variables===== | =====TIC80 System Variables===== | ||
Line 28: | Line 63: | ||
By adjusting the data stored here, it is possible to change TIC80' | By adjusting the data stored here, it is possible to change TIC80' | ||
+ | =====Other===== | ||
- | | + | If you're working with JS, remember that when you go to grab a constant from a library (say, pi from Math), if you forget to capitalize `Math.PI` and instead write `Math.pi` or `Math.Pi`, it will read the non-existent field without any runtime error, and instead treat it as 0. This can produce some frustratingly low-flying bugs, especially when working with games that have vector physics. |
+ | |||
=====Useful Links===== | =====Useful Links===== | ||
- | https:// | ||
- | [[https:// | + | ====NES==== |
+ | |||
+ | [[https:// | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | [[https:// | ||
+ | ====TIC-80==== | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | ====Lua==== | ||
+ | [[https:// | ||
+ | ====Projects/ | ||
+ | |||
+ | [[https:// | ||
+ |