Log In &nbsp


Cart #22602 | 2016-06-10 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
181

Japanese calligraphy drawing tool

Updates

v.1.1

  • Added mouse input mode (using undocumented mouse feature)

Controls

arrows: move brush
z: put brush to paper
x: new paper
left-shift: toggle input mode (mouse/keyboard)

[mouse mode]
mouse: move brush
click: put brush to paper

Older Carts

Cart #11019 | 2015-05-31 | Code ▽ | Embed ▽ | No License
181

181


1

I was sceotical about the fact you can draw kanji with 4 directions controls but the nice inertia you added to the brush really make it possible.


Thanks! It goes well beyond my expectations. I wrote hiragana:


4


7

Made some splatoon fanart by changing X to switch ink colors :D


2

I made an expressive face. It doesn't look like much but it was very fun to do!


2

1

The art people made with it is probably the best part, I too was impressed at what Shodo can do with 4 arrow keys. 5/5 would make calligraphy with again.


1

beautiful!! love the simplicity and elegance of this.

could add some inkpots to the side for changing colours? (autohide when not near or during stroke)


2

This is so much fun! Mine... Got a little weird....

Took me a bit of doing to get a W that was vaguely legible but it was worth it as learning the brush physics made the pyramid and eye a lot easier.


1

2

This is impressive. Being able to reproduce such an organic style of painting in this limited electronic system is really something.


Impressive, the controls are perfect !


I discovered this through the pico-zine and after you mentioned the Macintosh MacCalligraphy application I attempted to search for it online but cannot find any information other than one expired ebay posting. I was hoping you could talk about its features as I am very intrigued. This is a very lovely little program.


@jctwood
Actually, I only have read about the software in a magazine and have no experience using it. So I don't know about its features in detail. Shodo might be rather different from the original Mac Shodo(MacCalligraphy).
By the way, I found a Japanese blog post including a photo of Mac Shodo's box made of paulownia and a screenshot.

http://appletechlab.jp/blog-entry-1119.html


1

This is incredible! I feel like I can do anything in this!


This game could use some mouse support!


1

This game does not need mouse support. What makes Shodo nice to use is it's inertia, something you can't get with a mouse.


I'm working on it. Shodo will have both mouse and keyboard input.


@oinariman, that すし is fantastic!


@cheapshot Thanks! The key point is to move the pen when it is going to up from paper.


I tested the mouse support on PocketCHIP. It didn't work well. It seems to cannot detect mouse release (touch up).


left_shift is working to switch from mouse to pad in the browser, but i don't seem to find out to make it work in the pico-8 standalone, any hint?


1

Rediscovered this and it is so charming, thank you for making it. I would love to see more exploration of digital painting like this where the feel and organic imperfection of strokes is leaned into.


Hmm, nice relaxing cart ... I'm wondering if this is possible to do with a mouse.


@dw817 if you press left shift it enables mouse mode.


Thanks, FlowingLily.

It was the LEFT SHIFT I didn't know about. No undo mode ?


4

I made these glyphs.


2

It has a very nice style but for diagonals I just don't have enough control. Here I am attempting to write be, this took multiple attempts.

Still, it's really fun to play with and the beauty of it is amazing! Really nice work!


なにこれ、最高


2

nice!


1

4

Peace and Love:



2

i had to


2

つるニハ○○ムし


I'm not the best at Japanese and had to go off my limited knowledge, great game!


This is really fun to mess around with, good job ^-^



[Please log in to post a comment]

`; if (num >= 0) s=s+`
`+num+`
`; s = s + `
`; return s; } function generate_thread_preview(dat, set_flags) { //var s = `
`; var s= `
`; var thread_url = `/bbs/?tid=`+dat[1]; var pid_url = `/bbs/?pid=`+dat[0]; if (dat[15] == -1){ thread_url = pid_url + `&tkey=`+dat[23]; pid_url = pid_url + `&tkey=`+dat[23]; } // :: thumb if (dat[17]) { // cover s += `
`; /* popup player. better just to show the cart in thread context with fast load s += ` `; */ } else { // no cart in thumb; link to cat s += ` `; } // :: title and tags (gets space left over) { var title_str = dat[2]; if (title_str == "" && dat[16] == 16) title_str = "[gif]"; s = s + `
`; s = s + title_str; s = s + `` // by fred, last reply by annie 4 days ago { s += `
by `+dat[8]+``; s += ` `+get_relative_time(dat[6]);//+``; if (true) { if (dat[13] > 1) s += ` :: `+dat[11]+` replied `+get_relative_time(dat[9]); } } s += ``; s += `
`; // category (only need if not viewing that sub-forum) if (false) if (p_sub==0) { s = s + `
Carts
`; } // catsub if (p_cat == 0 || p_sub == 0) { label = ''; if (false) if (p_cat == 0) { label = 'Blog'; if (dat[15] == 6) label = 'Voxatron > '; if (dat[15] == 7) label = 'PICO-8 > '; if (dat[15] == 8) label = 'Picotron > '; if (dat[15] == -1) label = 'Unlisted'; } cols = ['f47','fab','4af','fa4','f8a','5ff','4c4','f47','f8a', 'cde', 'cde', 'cde', '8df', 'cde', 'fcb', '8fa']; col = cols[dat[16]%16]; if (dat[16] == 1) label += 'Chat'; //else if (dat[16] == 2) label += ' Carts'; else if (dat[16] == 2) label += 'Cartridges'; else if (dat[16] == 3) label += 'WIP'; else if (dat[16] == 4) label += 'Collab'; else if (dat[16] == 5) label += 'Workshop'; else if (dat[16] == 6) label += 'Support'; else if (dat[16] == 7) label += 'Blog'; else if (dat[16] == 8) label += 'Jam'; else if (dat[16] == 9) label += 'Code Snippet'; else if (dat[16] == 14) label += 'GFX Snippet'; else if (dat[16] == 15) label += 'SFX Snippet'; else if (dat[16] == 16) label += 'GIF Stream'; else if (dat[16] == 17) label += 'VOB'; //else label += '?'; // category icon // if (p_cat == 0) // fine to include! not noisey and reminder of context { cat_icon = null; if (dat[15] == 6) cat_icon = "p8b_vox.png"; if (dat[15] == 7) cat_icon = "p8b_pico8.png"; if (dat[15] == 8) cat_icon = "p8b_picotron.png"; if (cat_icon) s += ''; } s += `
`+label+`
`; } // cc4 if (dat[20] & 0x1) { s += `
CC
`; } // resolved if (dat[16] == 6) // support sub. to do: how-to or workshop sub? { if (dat[19] & 0x1) s += `
Resolved
`; else s += `
Unresolved
`; } // tags if (dat[18]) // tags { for (var j=0; j < dat[18].length; j++) s +=`
#`+dat[18][j]+`
`; } s = s + `
`; } s = s + `
`; // :: extra info float right if (dat[15] != -1) { s = s + `
`; // :: resolved tick in support sub, when same author if (false) // nope -- just set inside post view (should be after reading anyway) if (dat[16] == 6 && s_uid == dat[7]) { s = s + make_stat_box("tick", -1, (set_flags & 0x4) ? 1 : 0, dat[0]); } // :: author + timestamp x2 /* s = s + `
`+dat[8]+`
`+get_relative_time(dat[6])+`
`+dat[11]+`
`+get_relative_time(dat[9])+`
`; */ // :: fav, like, comments s = s + `
`; s = s + `
`; s = s + make_stat_box("fav", -1, (set_flags & 0x2) ? 1 : 0, dat[0], "#555", 12); s = s + make_stat_box("like", dat[12], (set_flags & 0x1) ? 1 : 0, dat[0], "#555", 12); s = s + ``; s = s + make_stat_box("comments", dat[13], 0, dat[0], "#555", 12); s = s + `
`; if (false) { s += ` `+dat[8]+` `+get_relative_time(dat[6])+``; } s += `
`; // end of extra info float right s = s + `
`; } s = s + `
`; //s = s + `
`; return s; } // overlapping function generate_cart_preview_overlapping(dat, set_flags) { // /gfx/p8b_pico8.png s = ''; // image s = s + `
`; // title, author s += `
`; // favourite, cc4 s += `
`; // dat[0] is the containing post s += make_stat_box("fav", -1, 0, dat[0], "", 2); if (dat[20] & 0x1) //cc4 { s += `
CC
`; } s += `
`; s += `
`; // buttons s = s + `
`; //s = s + make_stat_box("comments", -1, -1, dat[0], "#ddd"); // like and fav are for parent post, not cart id bgcol="#ddd"; bgcol="#bbb"; //s = s + '
'; if (false) { s = s + make_stat_box("cc", -1, (set_flags & 8) ? 1 : 0, dat[0], bgcol, 2); s = s + make_stat_box("fav", -1, (set_flags & 0x12) ? 1 : 0, dat[14], bgcol, 2); s = s + make_stat_box("like", dat[12], (set_flags & 0x11) ? 1 : 0, dat[14], bgcol, 2); } //s = s + '
'; s = s + `
`; s = s + `
`; return s; } function generate_cart_preview(dat, set_flags) { // /gfx/p8b_pico8.png s = ''; bgcol="#bbb"; // image /* pop up player s = s + ` `; */ // image // cover square // pixel perfect iff pico-8 var class_str=''; if (dat[15] == 7) class_str='class="pixel_perfect"'; s = s + `
`; s += `
`; // favourite, cc4 s += `
`; // dat[0] is the containing post s = s + make_stat_box("fav", -1, (set_flags & 0x2) ? 1 : 0, dat[0], "", 2); if (false) { s += '
'; s = s + make_stat_box("like", dat[12], (set_flags & 0x1) ? 1 : 0, dat[0], "", 2); s += '
'; } if (dat[20] & 0x1) { s += `
CC
`; } s += `
`; var imgstr = ''; if (dat[15] == 6) imgstr = ''; // title, author s += `
`+dat[22]+`
`+imgstr+`
by `+dat[8]+`
`; // buttons s = s + `
`; //s = s + make_stat_box("comments", -1, -1, dat[0], "#ddd"); // like and fav are for parent post, not cart id //s = s + '
'; if (false) { s = s + make_stat_box("cc", -1, (set_flags & 8) ? 1 : 0, dat[0], bgcol, 2); s = s + make_stat_box("fav", -1, (set_flags & 0x2) ? 1 : 0, dat[0], bgcol, 2); s = s + make_stat_box("like", dat[12], (set_flags & 0x1) ? 1 : 0, dat[0], bgcol, 2); } //s = s + '
'; s = s + `
`; s = s + ` `; return s; } function inject_cart_data() { /* var el = document.getElementById('cart_data_script'); if (el) { eval(el.innerHTML); } */ console.log('@ injecting ' + pdat.length); for (var i = 0; i < pdat.length; i++) { // generate inner html var dat = pdat[i]; set_flags = updat[i]; el = document.getElementById('pdat_'+dat[0]); if (el) { if (pdat[i][19] & 2) // show as cart el.innerHTML = generate_cart_preview(pdat[i], updat[i]); else el.innerHTML = generate_thread_preview(pdat[i], updat[i]); } else { // no placeholder console.log('error: no placeholder for pdat_'+dat[0]); } } } //------------------------------------------ window.onhashchange=load_hash_location; //inject_cart_data(); //------------------------------------------