Log In  
Follow
shiftalow

I like pixeled graphics and chiptune sound game.
I just released a pico-8 game on Steam!
https://store.steampowered.com/app/1448220

And More Tools!
[3D modeling tool] [ NEW ]
https://bitchunk.itch.io/pelogen2
[Animation tool]
https://bitchunk.itch.io/spranim-kit
[Music scales and Play the Piano]
https://bitchunk.itch.io/mu-scalelab

PELOGEN2 is released!
by shiftalow
KNUTIL Scene Manager & Frequently Used Functions Library
by shiftalow
pelogen (3D modeling tool)
by shiftalow
[ :: Read More :: ]

Cart #jongtelling_wp-1 | 2024-04-15 | Embed ▽ | No License
2

Fortune telling with mahjong tiles.

  • When three tiles line up, it's a ๆš—ๅˆป Anko
  • When all four tiles are aligned, it's called ๆš—ๆง“ Ankan
  • When a pair is formed, it becomes a ๅฏพๅญ Toitsu
  • There is also a secret combination.

It's not real mahjong.

save /appdata/system/wallpapers/jongtelling_wp.p64
Please save it and use it.

release note


v0.11

  • fixed YAKU sprite
  • add when matched to YAKU.

v0.1

  • first release
P#146583 2024-04-14 00:50 ( Edited 2024-04-15 02:44)

[ :: Read More :: ]

How to use

Open the music editor, select the specified INSTRUENTS_ID, and then copy and paste the --[[pod_type="instrument"]] line below.

## elec bass
--[[pod_type="instrument"]]unpod("b64:bHo0AG4AAABsAAAA8F17aW5zdHJ1bWVudD1weHUAAygAAgAABAABEAYPIBABIAEgAfAAAhACDhABIA8hIAEwD0CQDxECEA8UDzAAATAPERAR4AIIIA9QYA9C8IsPKA_0CvAEBA8zDzAJ8K0P_AoP-w_AD-cPDQHwCH0=")

## metal scratch
--[[pod_type="instrument"]]unpod("b64:bHo0AJUAAACTAAAA8IR7aW5zdHJ1bWVudD1weHUAAygAAgAABAABEAYPIAARIAEgAfAAAhAGDiEgDyEAD-8AAeAPEQIgDyUAATAFD9AAAgHgDxICIA8vUAUPMAACATAPLJACCKAPRvBrDygP--AGDygPXA8ZsAIQCQ8SDw8QX_kv5A--D8QPjw9qD1UPHw8P8IkP_AoP-w_AD-cPDQHwCH0=")

## buzz bass
--[[pod_type="instrument"]]unpod("b64:bHo0AI4AAACVAAAA9TN7aW5zdHJ1bWVudD1weHUAAygAAgAABAABEAYPGBABIAEgAfAAAhACDyAQASAPISABIAQPfwABcA8RAhAEDycAATAiABESIgBwD-QQAeAPEx4AEA4eAPAlDBAB8AAJIA8_IA_j8E8PKA--8AUFD3EPOA808AQMD3APXw8o8JUP_AoP-w_AD-cNAfAIfQ==")

It may be useful to save the text in the picotron drive.

P#146247 2024-04-10 06:58 ( Edited 2024-04-10 07:05)

[ :: Read More :: ]

https://www.youtube.com/watch?v=hqALoHicVlY

Is it possible to reproduce these sounds with a picotron?

I have almost no basic knowledge of how to combine operators or create algorithms, so I'm just trying to figure it out.

It has been my secret desire for many years to be exposed to FM modulated sound production.
In particular, I have a history of admiring sounds like the Mega Drive (Genesis).
Of course, the songs that make full use of not only FM sound but also PSG sound are nothing short of amazing.

P#145566 2024-04-03 12:26

[ :: Read More :: ]

I cannot edit after ID8 in the instrument edit.


https://www.lexaloffle.com/dl/docs/picotron_synth.html#Instruments

There are 128 global instruments defined at 0x40000 by default, each 512 bytes.

Are the 128 instruments mentioned in the specifications scheduled to be available in the editor? Currently there are up to 25.

Also, when multiple envelopes are set to "DATA" mode, the window extends outside of the screen.
Scrolling is required in the same way as for the waveform configuration windows.

P#144222 2024-03-23 15:25

[ :: Read More :: ]

Cart #skytest_hello-2 | 2024-04-03 | Embed ▽ | No License
4

๐Ÿฑhello picotron

Z button: Background changes
X button: Redisplays text

release note


v0.2

  • add music

v0.1

  • first release
P#143110 2024-03-15 13:29 ( Edited 2024-04-03 09:08)

[ :: Read More :: ]

The distribution URL is here!
https://bitchunk.itch.io/pelogen2

What tools?

PELOGEN2 is a 3D modeling tool created on PICO-8.

Because it was created for such small specifications, it is not suitable for overly complex and large modeling.

In today's era of large-scale, detailed works, what would you create with this small-scale 3D modeling tool?

I think there is still value in being able to express creativity within limitations.
Even if it imitates something that exists in reality, it is precisely because it is low-poly that an unrealistic and creative world can be created.

Tutorials will be added to the devlog from time to time.

You may have questions about things you don't know about how to make or features. I would appreciate it if you could create a thread in that case. It's easy to deal with, and others can use it as a reference.

Features etc.

Data management

  • You can manage data while viewing the 3D model.
  • Up to 16 data can be saved.
  • The data can be exported to text, so it is virtually unlimited.
  • You can organize and rearrange data by copying and pasting.

3D view (when editing the model)

  • View that can be rotated to any angle
  • Enlarge/reduce/slide in the Z-axis direction
  • View rotated along grid (every 22.5 degrees)
  • Vertical flip prevention

3D modeling editing

  • Add triangular face and manipulate vertices
  • JOIN selects vertices and combines them into one (equivalent to merge in blender)
  • Move selected triangular face, rotate 90 degrees, change color, duplicate

Other features

  • Sample code copy function
  • Assembly mode (next version planned)

PELOGEN2

P#141840 2024-02-24 00:25 ( Edited 2024-03-25 06:28)

[ :: Read More :: ]

CPU meter can also be switched using Ctrl + O. As per the PICO-8 manual, originally only Ctrl + P is required.
This specification seems strange to me.

Recently, it has become possible to implement an option to operate in combination with Ctrl.
For example, when developing tools, there are times when you want to use the Ctrl + O keys to open files (data).

P#140968 2024-02-01 05:58 ( Edited 2024-02-02 13:18)

[ :: Read More :: ]

I previously created a 3D modeling tool called "pelogen".
It was designed to run on pico-8 with a minimum amount of data, and with its 16x16x16 vertex coordinates and one-stroke triangulation, it was almost exclusively a tool for myself.

This time, the specifications were revised from there, and the tool was created with an eye to making the data a bit larger and easier to model.

  • The vertices will be edited in such a way that triangles are added, instead of the specification of adding vertices one by one.
    And we will set a color for each face.

  • You can JOIN the vertices of each triangle to simplify vertex movement and build complex shapes.
  • You can duplicate selected triangles and rotate or flip vertices by a limited number of angles.

  • Data management of the model becomes more intuitive and easier to understand.

Development is about 90% complete until ready for release.
Data import/export, sample code, and model size limit checks remain.

P#138835 2024-01-29 14:00

[ :: Read More :: ]

This is my own public blog posted on pixivFanbox on August 28, 2023 at 13:40.

Other private blogs and other private blogs are posted here.
https://bitchunk.fanbox.cc/


I am able to get some time before bedtime, but I don't have much physical time and often fall asleep right away.

Match judging and then erasing blocks

We also create a direction to make the matched and erased blocks fly away.
However, this leaves the block full of gaps.

Match, then drop the top block

There is no falling direction, but the erased area will be filled with blocks.
However, this also leaves a lot of gaps. It is necessary to make up for the gaps.

Compensate for the topmost block so that there are no gaps

Place an additional block at the top of the erased area and drop it.
The falling direction has also been added.
It is becoming more like Match 3!

Redetermine the match after a block falls

After a block falls, erasing the already aligned blocks becomes just a tedious element.
We now need to judge matches other than the block-flip action.
It will be exhilarating to match in a row!
(Since the previous work description, the block falling process has been radically reworked.)

Completed this time

  • โœ”Actual replacement of ingredients.
  • โœ”Match production.
  • โœ”Disappear when matched.
  • โœ”Compensate for the missing part. Drop new ingredients from above.

Plans for next time

  • โœ”Counting of matched ingredients.
  • โœ”Select 7 out of 16 ingredients to make them appear.
  • โœ”Standstill judgment and shuffling process.
  • Time is up and the game is over.
    • Fever Element
  • Game ends when the number of times has expired.
    • Skill Element
P#136052 2023-10-18 02:03 ( Edited 2023-10-18 23:18)

[ :: Read More :: ]

Cart #knutil_dbg-1 | 2023-08-10 | Code ▽ | Embed ▽ | No License
1

Feature Overview

DBG() Displays any timing value in real time.

  • Executed with arguments, it stacks values for display.
  • You need to specify 'd?' at the timing you want to display.
  • When the stacked value display is complete, it is reset.
  • This function consumes 71 Token.
function _update()
 dbg('Debug Test!',time())
end

function _draw()
 dbg('d?') -- 'Debug Test! [time value]'
end

This function will be included in the next version(0.14.0) of KNUTIL library.
If you want to stop processing and investigate detailed values, consider DMP().

release note


v0.1

  • first release
P#132923 2023-08-10 13:40

[ :: Read More :: ]

Cart #knutil_amid-1 | 2023-08-09 | Code ▽ | Embed ▽ | No License
2

Feature Overview

AMID() Returns the median of a given positive and negative number.

  • It is used in controlling the camera and parameters that can swing either + or -.
  • This function consumes 10 Token.
x,y=0,0
w,h=16,8 -- range of movement(*2+1)
while 1 do
    cls(12)
    camera(-64,-64)

    rectfill(w,h,-w,-h,0)

    ?'โฌ†๏ธโฌ‡๏ธโฌ…๏ธโžก๏ธ key to move',-60,-60

    x+=tonum(btn(1))-tonum(btn(0))
    x=amid(w,x)

    y+=tonum(btn(3))-tonum(btn(2))
    y=amid(h,y)

    pset(x,y,8)
    ?x..' '..y,-w,h+1,7
    flip()
end

This function will be included in the next version(0.14.0) of KNUTIL library.
If you want to determine that two values are within range, consider INRNG().

release note


v0.1

  • first release
P#132902 2023-08-09 14:42

[ :: Read More :: ]

Cart #knutil_htd-0 | 2023-08-08 | Code ▽ | Embed ▽ | No License

Feature Overview

HTD() Split a continuous string of hexadecimal numbers into a table.

  • the number of supported delimited bits is 4,8,12,16 bits (1~4 nibbles).
  • characters that cannot be converted to numbers are ignored.
    • the result of the api's tonum('0x'..v) of the api.
  • depending on the delimiter, a missing last character will result in a lower digit by the number of missing characters.
  • This function consumes 30 Token.
local a=htd('12a30f',1) -- a={1,2,10,3,0,15}
local b=htd('12a30f',3) -- b={297,783}

Perhaps consider BUNPACK() if you want to separate NUMBER every few bits.

This function is included in the KNUTIL library.

release note


v0.1

  • first release
P#132863 2023-08-08 10:18 ( Edited 2023-08-08 10:25)

[ :: Read More :: ]

Cart #knutil_ecpalt-0 | 2023-08-07 | Code ▽ | Embed ▽ | No License

Feature Overview

ECPALT() set transparency from palette table.

  • Transparency is reset at each function execution.
  • If the value of the "color id key" in the palette table is 0, the palette becomes transparent.
  • The palette that was made black by MKPAL() can be used as transparent as it is.
  • The format is redundant due to the specification to match MKPAL().
  • This function consumes 20 Token.
-- Make 6, 7, and 13 transparent.

ecpalt({[6]=0,[7]=0,[13]=0})

spr(1,16,32,2,2)

This function will be included in the next version(0.14.0) of KNUTIL library.

release note


v0.1

  • first release
P#132688 2023-08-07 15:57

[ :: Read More :: ]

Cart #knutil_mkpal-0 | 2023-08-07 | Code ▽ | Embed ▽ | No License

Feature Overview

MKPAL() Create a color swap table for use in PAL().

  • This is useful for creating several color patterns.
  • It is not an error if the number of elements in the swap table does not match.
  • This function consumes 44 Token.
-- Color swap to darken "blue, white, and green".

local p=mkpal({12,7,11},{13,6,3}) -- mkpal('c7b','d63') is also the same.
pal(p)
spr(1,16,32,2,2)

This function will be included in the next version(0.14.0) of KNUTIL library.

release note


v0.1

  • first release
P#130356 2023-08-07 06:15 ( Edited 2023-08-07 06:51)

[ :: Read More :: ]

Horizontal alignment is reset when a line break or tab is inserted in p8scii.

The example below expects the first line to start at the beginning of the first line after a line break.
Also, the tab position seems to reset the shift cursor.

cls()
?"\+jjtest p8scii\ntest p8scii (๐˜นADJUST:j)",0,0
?"\+ljtest p8scii\ntest p8scii (๐˜นADJUST:l)",0,16

?"\-jtest\-j   p8scii (๐˜นADJUST:j)",0,64
?"\-ltest\-l   p8scii (๐˜นADJUST:l)",0,72

Cart #p8scii_nl_adjust_bug-0 | 2023-05-28 | Code ▽ | Embed ▽ | No License
1

P#130237 2023-05-28 06:18

[ :: Read More :: ]

Cart #knutil_oprint-3 | 2023-07-02 | Code ▽ | Embed ▽ | No License
4

Feature Overview

OPRINT() Adds outlines to text and prints them.

  • enclosure is not possible if tabs or newlines are included. (in pico8_v0.2.5.g)
  • operation cannot be guaranteed if p8scii for decoration is included.
  • Custom decorations other than outlines can be made by specifying a comma-separated p8scii as an argument.
  • This function consumes 33 Token.
-- Split a pair of data and further split it into colors and names.

oprint('outline print',10,6,7,13)  -- text, x, y, foreground-color, outline-color [, custom decoration]

This function is an inheritance of OUTLINE contained in the KNUTIL library.

release note


v0.3

  • add custom decoration argument.

v0.2

  • remove color()

v0.1

  • first release
P#130214 2023-05-27 15:02 ( Edited 2023-07-02 07:01)

[ :: Read More :: ]

When you see the default kana font, you might think that you could create something a little better.
But then you realize that it was a kind of provocation for creators (or designers).

Why the tilt?

Hiragana can be quite difficult to express in 5x5px.
One answer to this problem is a slanted design.
This allowed us to secure a space, albeit a small one, per character.

x4 size

Original size

Preview gif

Text conversion scripts for SpreadSheet custom scripts

This script converts "Kana/Kana" text to "Katamuki kana" specification in a spreadsheet.
Register it in a custom script and execute p8Katamukikana([Cell-ID]) on the cell you want to convert.

function p8Katamukikana(text) {
  const kanamap = {
    'ใŒ': 'ใ‹ใ‚›', 'ใŽ': 'ใใ‚›','ใ': 'ใใ‚›','ใ’': 'ใ‘ใ‚›','ใ”': 'ใ“ใ‚›',
    'ใ–': 'ใ•ใ‚›', 'ใ˜': 'ใ—ใ‚›','ใš': 'ใ™ใ‚›','ใœ': 'ใ›ใ‚›','ใž': 'ใใ‚›',
    'ใ ': 'ใŸใ‚›', 'ใข': 'ใกใ‚›','ใฅ': 'ใคใ‚›','ใง': 'ใฆใ‚›','ใฉ': 'ใจใ‚›',
    'ใฐ': 'ใฏใ‚›', 'ใณ': 'ใฒใ‚›','ใถ': 'ใตใ‚›','ใน': 'ใธใ‚›','ใผ': 'ใปใ‚›',
    'ใฑ': 'ใฏใ‚œ', 'ใด': 'ใฒใ‚œ','ใท': 'ใตใ‚œ','ใบ': 'ใธใ‚œ','ใฝ': 'ใปใ‚œ',
    'ใ‚ฌ': 'ใ‚ซใ‚›', 'ใ‚ฎ': 'ใ‚ญใ‚›','ใ‚ฐ': 'ใ‚ฏใ‚›','ใ‚ฒ': 'ใ‘ใ‚›','ใ‚ด': 'ใ‚ณใ‚›',
    'ใ‚ถ': 'ใ‚ตใ‚›', 'ใ‚ธ': 'ใ‚ทใ‚›','ใ‚บ': 'ใ‚นใ‚›','ใ‚ผ': 'ใ‚ปใ‚›','ใ‚พ': 'ใ‚ฝใ‚›',
    'ใƒ€': 'ใ‚ฟใ‚›', 'ใƒ‚': 'ใƒใ‚›','ใƒ…': 'ใƒ„ใ‚›','ใƒ‡': 'ใƒ†ใ‚›','ใƒ‰': 'ใƒˆใ‚›',
    'ใƒ': 'ใƒใ‚›', 'ใƒ“': 'ใƒ’ใ‚›','ใƒ–': 'ใƒ•ใ‚›','ใƒ™': 'ใƒ˜ใ‚›','ใƒœ': 'ใƒ›ใ‚›',
    'ใƒ‘': 'ใƒใ‚œ', 'ใƒ”': 'ใƒ’ใ‚œ','ใƒ—': 'ใƒ•ใ‚œ','ใƒš': 'ใƒ˜ใ‚œ','ใƒ': 'ใƒ›ใ‚œ',
    'ใ': '…', 'ใƒ': 'โžก๏ธ','ใ…': 'โ˜…','ใ‡': 'โง—','ใ‰': 'โฌ†๏ธ',
    'ใ‚ก': 'ห‡', 'ใ‚ฃ': '∧','ใ‚ฅ': 'โŽ','ใ‚ง': 'โ–ค','ใ‚ฉ': 'โ–ฅ',
    'ใ‚”': 'ใ†ใ‚›', 'ใƒด': 'ใ‚ฆใ‚›','ใ…ใ‚™': 'ใ…ใ‚›','ใ‚ฅใ‚™': 'ใ‚ฅใ‚›',
    'ใƒผ': '-', '๏ผ': '-', '๏ฝž': '~', 
  }
  var result = ''
  for (var i = 0; i < text.length; i++) {
    result += kanamap[text.charAt(i)] || text.charAt(i);
  }
  return result;
}

Notes

chrcode 144-153 are used as discarded kana.(ใใƒใ…ใ‡ใ‰ใ‚กใ‚ฃใ‚ฅใ‚งใ‚ฉ)

It is quite difficult to maintain hiragana visibility at small sizes. As a desperate measure, I tilted the characters and crammed them into that area.
Katamuki = tilt

P#130144 2023-05-25 14:08 ( Edited 2023-08-28 08:30)

[ :: Read More :: ]

Cart #knutil_msplit-1 | 2023-05-22 | Code ▽ | Embed ▽ | No License
2

Feature Overview

MSPLIT() Converts a string into a table by splitting it with multiple delimiters.

  • The default delimiter is " " for ease of data entry and readability(according to one's own preference).
  • the default delimiters and numeric conversion flags should be modified according to your project.
  • This function consumes 36 Token.
-- Split a pair of data and further split it into colors and names.

local value=msplit(
     '10-yellow 11-green 8-red 12-blue'
     ,' ','-'
    )

for i,v in pairs(value) do

    local col,name=unpack(v)
    ?name,i*32-24,48,col

end

If you want to check the type at once, consider using a DMP().
This function is included in the KNUTIL library.

release note


v0.1

  • first release
P#130014 2023-05-22 08:40 ( Edited 2023-05-22 08:41)

[ :: Read More :: ]

Cart #knutil_tohex-1 | 2023-05-20 | Code ▽ | Embed ▽ | No License
2

Feature Overview

TOHEX() Converts to a hexadecimal string filled with zeros.

  • If the number of digits is not specified, specify 0.
  • The maximum number of digits specified is 4.
  • This function consumes 40 Token.
?tohex(32)   -- 20
?tohex(32,3) -- 020

?tohex('0x32',1)   -- 32

This function is included in the KNUTIL library.

release note


v0.1

  • first release
P#129956 2023-05-20 10:56 ( Edited 2023-05-20 11:10)

[ :: Read More :: ]

Cart #knutil_tonorm-0 | 2023-05-19 | Code ▽ | Embed ▽ | No License
1

Feature Overview

TONORM() normalize argument values (strings) to the correct type.

  • Mainly converts from strings to values of the correct type.
    • Especially used to initialize multiple values from a long string, see HTBL().
  • Hexadecimal numbers are converted to decimal numbers.
  • This function consumes 28 Token.
?tonorm('true') -- true (The type is 'boolean')
?tonorm('nil') -- [nil] (The type is 'nil')

This function was included in the KNUTIL library, but has been deprecated since v0.14.0.
If you want to check the type at once, consider using a DMP().

release note


v0.1

  • first release
P#129901 2023-05-19 08:17 ( Edited 2023-10-04 23:30)

View Older Posts
Follow Lexaloffle:          
Generated 2024-04-19 15:21:52 | 0.093s | Q:69