プチコンまとめWiki (初代/mkII)

投稿プログラム : PICエンコーダ

パンくずリスト

2011年12月09日投稿 / 2012年01月08日16x16バージョンに変更 / 投稿者 : 名無しさん / タグ : 投稿プログラム ツール 画像圧縮 初代対応 QRコード

概要

16x16のキャラ(スプライト用)データをPIC形式で圧縮するプログラムです。
http://fussy.web.fc2.com/algo/algo8-1.htm
上記パスのロジックを移植したものになります。

掲載のリストでは、SPU0の0〜31(1〜8キャラ目)をエンコードし、 ファンクションキーにDATA文を設定します。

デコーダを組み込んだプログラムに ファンクションに登録したDATA文をペーストするような使い方を想定しています。 デコーダはToukou/PICデコーダをご覧下さい。

データの仕様

以下のような形となります。1文字は0〜Fの16進に使われる文字です。

((前の変更点との距離((色)(縦への連鎖位置)*(3)))|0)*

アスタリスクは直前のデータが0個以上連続することを意味します。 クエスチョンマークは直前のデータが0個または1個あることを意味します。 パイプはORです。

1文字目は不要なデータです。形式上存在するだけ。(エンコーダ・デコーダを変更すれば削減できます) 2文字目以降に色、縦への連鎖位置、区切りを表す3が来て1つ分です。 連鎖位置は-7〜+7となります。 距離が0だった場合は、前の色が15個連続していることを表します。

展開確認

展開確認は、PICデコーダを使用してください。

改造など

配列のサイズやPWやPHを変更すれば、他のサイズの画像にも使用出来るはずです。

その他使いやすいように改造してくださって結構です。

QR コード

プチコンmkII 向けの QR コードです。

PRG:PIC_ENC
1/22/2
PIC_ENC1.pngPIC_ENC2.png

プログラムリスト

  1. CLEAR:BGPAGE 0:GPAGE 0:SPPAGE 0
  2. BANK$=”SPU0”
  3. COFS=0
  4. CHRN=8
  5. DIM PICF(256),PICC(256),PICD(256),PIN$(4)
  6. KEY 1,”FILES”
  7. KEY 2,”LOAD”+CHR$(34)
  8. KEY 3,”SAVE”+CHR$(34)
  9. KEY 4,”CONT”
  10. KEY 5,”RUN”
  11. PP$=””:SUM=0
  12. FUNC=1
  13. FOR CHN=0 TO CHRN−1
  14.  FOR CC=0 TO 3
  15.   CHRREAD(BANK$,CC+(COFS+CHN)*4),PIN$(CC)
  16.  NEXT
  17.  GOSUB @CHRREB
  18.  GOSUB @PICPACK
  19.  SUM=SUM+LEN(POUT$)
  20.  L=LEN(POUT$)
  21.  L=L+3
  22.  C=FLOOR(L/93)+(L%93>0)
  23.  IF FUNC==5 AND LEN(PP$)+LEN(POUT$)+3+5*C>256 THEN ?COFS+CHN;”テ゛ チュウタ゛ン”:END
  24.  P$=”DATA ”+STR$(C)+”,”+CHR$(34)+MID$(POUT$,0,91)+CHR$(13)
  25.  POS=91
  26.  IF LEN(P$)+LEN(PP$)>256 THEN KEY FUNC,PP$:FUNC=FUNC+1:PP$=””
  27.  PP$=PP$+P$
  28.  @PLP
  29.  IF POS>=LEN(POUT$) THEN @PEND
  30.   P$=”DATA ”+CHR$(34)+MID$(POUT$,POS,93)+CHR$(13)
  31.   POS=POS+93
  32.   IF LEN(P$)+LEN(PP$)>256 THEN KEY FUNC,PP$:FUNC=FUNC+1:PP$=””
  33.   IF FUNC==6 THEN ?COFS+CHN;”テ゛ チュウタ゛ン”:END
  34.   PP$=PP$+P$
  35.  GOTO @PLP
  36.  @PEND
  37.  ?COFS+CHN;” OK. 256−>”;LEN(POUT$)/256*100;”%
  38. NEXT
  39. ?SUM/(CHRN*256)*100;”%”
  40. KEY FUNC,PP$
  41. END
  42. @CHRREB
  43. PIN$=””:TMP$=””
  44. FOR I=0 TO 7
  45.  PIN$=PIN$+MID$(PIN$(0),I*8,8)
  46.  PIN$=PIN$+MID$(PIN$(1),I*8,8)
  47.  TMP$=TMP$+MID$(PIN$(2),I*8,8)
  48.  TMP$=TMP$+MID$(PIN$(3),I*8,8)
  49. NEXT
  50. PIN$=PIN$+TMP$
  51. RETURN
  52. @PICPACK
  53. PW=16:PH=16:PLEN=1:PDP=0
  54. GOSUB @SCHGPT
  55. FOR __Y=0 TO PH−1
  56.  FOR __X=0 TO PW−1
  57.   _POS=__X+__Y*PW
  58.   IF PICF(_POS)==0 THEN @PP2
  59.    PICD(PDP)=PLEN:PDP=PDP+1
  60.    PICD(PDP)=PICC(_POS):PDP=PDP+1
  61.    GOSUB @SCHNPT
  62.    PLEN=0
  63.   @PP2
  64.   IF PLEN==15 THEN PICD(PDP)=0:PLEN=0:PDP=PDP+1
  65.   PLEN=PLEN+1
  66.  NEXT
  67. NEXT
  68. POUT$=””
  69. FOR _I=0 TO PDP−1
  70.  POUT$=POUT$+HEX$(PICD(_I) AND 15)
  71. NEXT
  72. RETURN
  73. @SCHGPT
  74. PPC=−1
  75. FOR _SY=0 TO PH−1
  76.  FOR _SX=0 TO PW−1
  77.   _POS=_SX+_SY*PW
  78.   _C=VAL(”&H”+MID$(PIN$,_POS,1))
  79.   IF PPC==_C THEN @SCP2
  80.    PICF(_POS)=1
  81.    PICC(_POS)=_C
  82.    PPC=_C
  83.    GOTO @SCP3
  84.   @SCP2
  85.    PICF(_POS)=0
  86.   @SCP3
  87.  NEXT
  88. NEXT
  89. RETURN
  90. @SCHNPT
  91. _NC=PICC(_POS):_SX=__X:_SY=__Y
  92. @SCPLP
  93.  _SY=_SY+1
  94.  IF _SY>=PH THEN @SCLPO
  95.   _I=−7:_SX=_SX+_I
  96.   @SNP0
  97.   IF _SX<0 AND _I<=7 THEN _I=_I+1:_SX=_SX+1:GOTO @SNP0
  98.   @SNP1
  99.   IF _SX>=PW OR _I>7 THEN @SNP2
  100.    _POS=_SX+_SY*PW
  101.    IF PICF(_POS)==0 OR _NC!=PICC(_POS) THEN @SNP10
  102.     PICF(_POS)=0
  103.     GOTO @SNP2
  104.    @SNP10
  105.     _I=_I+1:_SX=_SX+1
  106.     GOTO @SNP1
  107.   @SNP2
  108.   IF _SX>=PW THEN @SCLPO
  109.   PICD(PDP)=_I:PDP=PDP+1
  110.   IF _I==8 THEN @SCLPO
  111. GOTO @SCPLP
  112. @SCLPO
  113. IF _SX>=PW OR _SY>=PH THEN PICD(PDP)=8:PDP=PDP+1
  114. RETURN

CHECKER FLAG (ひとことコメント)

この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)

  • sou51 : 16x16版に変更しました (2012/01/08 (日) 11:21:03)
  • 名無しさん : QRコード載せましょうか? (2012/04/03 (火) 21:19:05)
  • 名無しさん : ↑お願いします (2012/04/08 (日) 11:04:36)
  • 名無しさん : 載せました。(2012/04/08 (日) 14:04:36)
  • 名無しさん : ↑↑ありがとうございました (2012/04/09 (月) 13:44:30)

表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.037 秒 | このページの最終更新 : 2012/04/09 (月) 13:44:30 (2654d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30