Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

An open source remake of the CatSystem2 visual novel engine.

NotificationsYou must be signed in to change notification settings

kokseen1/FelineSystem2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

icon FelineSystem2

An open source remake of the CatSystem2 visual novel engine.

Demo

A makeshift demo of the current version can befound here.

screenshot

Controls

Click/Scroll - Advance text

Ctrl/Enter - Advance text, hold to skip

SPACE - Hide message window

f - Toggle fullscreen

1-9 - Select choice

Shift + Alt +1-9 - Quick save to slot1-9

Shift +1-9 - Quick load from slot1-9

Features

  • Multi-platform (WASM, Windows SDL2)
  • Raw KIF archive decryption
  • HG-3 image decoding and caching
  • Custom-built CatScene recursive-descent parser

KIF Database Structure

FelineSystem2 implements a custom database of the game's KIF archives and assets, stored as a binary file.

Archive Table

Data TypeValueDescription
char[len]ArchiveNameNULL-terminated filename of the KIF archive
uint32EntryCountNumber of entries in archive
unsigned charIsEncrypted0x01 if archive is encrypted,0x00 otherwise
byte[4]FileKeyBlowfish key for decrypting entries (Only exists if IsEncrypted is0x01)
0x00TableEndSignifies end of table

Archive Item Entry

Data TypeValueDescription
char[len]FileNameNULL-terminated deobfuscated filename
uint32OffsetThe offset to the entry's data
uint32LengthThe length of the entry's data

Notes

Parser

  • If statements must contain a whitespace after the closing parenthesis of the condition
    • if (#300==0) #(950+#300)=512
  • Operators follow C-Style left-to-right precedence and associativity
  • Integers and strings are the only data types that exist
    • #300=0
    • str 50 bg02
  • Variable names can only be integers
  • Variable names can be dynamically evaluated
    • #(950+#300)=512

Script

  • blend argument specifies the alpha value that the image will be displayed at
    • cg 0 blend 255 will display a completely opaque CG whilecg 0 blend 0 will display a completely transparent CG
  • rdraw command after an image specifies the duration to fade to the target opacity
    • rdraw 30 will take30 frames to fade the image from alpha0 to the target alpha (e.g.255 by default)
    • Units are likely in frames at60fps (0.0167s/frame) regardless of the game's refresh rate setting
    • Anrdraw command will apply to all images within a script block (from a user input to the nextwait command)
  • wait command without arguments will block until any time-based command completes
    • wait after ardraw 30 command will wait for the30 frames taken to completely fade in the images before proceeding to the next command
  • wait with arguments behaves differently from standalonewait
    • wait 60 will block for60 frames before proceeding to the next command
    • wait 60 will not be aware of any time-based commands likerdraw and will not block untilrdraw completes
    • wait is sometimes used along withwait 60 consecutively
  • cg 0 attr 1 (70+0) (80+0)
  • cg 0 attr 2 (75+0) (85+0)
    • Assigns theBaseX,BaseY values of the specified imagecg 0 to the variables#(75+0) and#(85+0) respectively

Special Thanks


[8]ページ先頭

©2009-2025 Movatter.jp