Compare commits

...
144 Commits
Author SHA1 Message Date
kichikuou 97b8bcb22a Fix argument for SDL_JoystickEventState 2020-10-01 16:46:20 +09:00
kichikuou 862f639e2e Fix ShString.FillString 2020-09-21 18:02:32 +09:00
kichikuou 316a06a168 Refactor string variable functions
This replaces v_str* functions with new svar_* functions.
The new svar_* functions use 1-based string variable index, so that
callers don't have to decrement string numbers from SCO.
2020-09-21 16:17:23 +09:00
kichikuou c9ec20dcc8 Remove no field of agsurface_t 2020-09-21 13:24:12 +09:00
kichikuou 023b8cd455 VSP: Do not use static extraction buffer
Now it's allocated on the stack. Up to 401*8 bytes, should be fine.
2020-09-21 12:01:20 +09:00
kichikuou 335681863c VSP: Appropriately scale 4-bit color to 8-bit
This fixes a bug where VSP image was displayed slightly darker than the
original.
2020-09-21 11:46:48 +09:00
kichikuou ecba592d82 TECH.TXT: Typo fixes and minor corrections 2020-09-21 11:03:13 +09:00
kichikuou dbac18c260 Globally replace "pallet" with "palette" 2020-09-19 22:25:10 +09:00
kichikuou ed8f610f80 Remove unused xpg_basename.c 2020-09-16 18:36:03 +09:00
kichikuou f753cf8670 SDL: Show quit confirmation dialog on SDL_QUIT 2020-09-12 18:59:32 +09:00
kichikuou c3cc4f3e44 menu_sdl.c: Implement menu_msgbox_open() 2020-09-12 18:27:51 +09:00
kichikuou e57913bfc6 Revive menu_null.c
It's used only if graphic backend is X11 and libgtk2 is not available.
2020-09-12 18:18:34 +09:00
kichikuou f941916fb2 CI: Install libgtk2.0-dev in X11 build 2020-09-12 16:56:41 +09:00
kichikuou f5248bda8a Merge sdl_mode.c to sdl_video.c 2020-09-10 15:42:27 +09:00
kichikuou 988a072964 Rename menu_null.c to menu_sdl.c 2020-09-10 15:25:02 +09:00
kichikuou 775b34cf1a SDL: Implement inline text input (for MJ command)
Very few games use it (Mamorigami-sama and Les Chairs Cruelles), but
this could be reused when we add a pure SDL implementation of input
dialogs.
2020-09-07 22:33:31 +09:00
kichikuou 5455bce8d6 Rename sdl_input.c to sdl_keytable.h
And move xsyskey.pl to tools/.
2020-09-06 13:58:09 +09:00
kichikuou 5e5defb6bc Android: Input dialog truncates string that exceeds maximum length 2020-09-06 10:35:35 +09:00
kichikuou 05cca544c6 Text input commands should accept half-width characters
Although its dialog message says "Half-width characters cannot be used",
System3.9 does not prevent users from entering half-width characters.
2020-09-05 22:40:23 +09:00
kichikuou 38758569bb Android: Implement input dialogs 2020-09-04 17:03:01 +09:00
kichikuou e417811a94 emscripten: Implement messagebox and number input dialog 2020-09-04 17:03:01 +09:00
kichikuou b509be2b64 Remove unused menu_widget_reinit() 2020-09-04 11:34:24 +09:00
kichikuou fa845a6439 MIDI: Keep track of current music number in music_midi.c 2020-08-30 17:21:03 +09:00
kichikuou b3cb185a35 Simplify cg_load
Before this, cg_load() skipped loading CG or loaded only palettes,
depending on the flags set by the PC command.

After this, it always loads a CG and populates the cache. Functions for
loading only palettes have been removed. Actually this may be good for
performance, because some games use `PC 0:` to prewarm the cache.
2020-08-30 15:39:42 +09:00
kichikuou 87413d54dc Fix SC command
This fixes a bug where SC command did not return 999/999/999/999 when
CD-DA is not available.
2020-08-30 13:55:20 +09:00
kichikuou 440fb93b08 Fix memory leak in sprite_update.c 2020-08-30 12:17:46 +09:00
kichikuou 6d1ef1ba6f Fix memory leak in cursor_load 2020-08-30 11:20:29 +09:00
kichikuou dd1f0fd230 Fix memory leak in ags_setWorldSize
SetWorldSize() replaces the DIB, so alpha buffer must be freed before
calling it.
2020-08-30 10:33:45 +09:00
kichikuou 15fb122148 Remove agsurface.has_{pixel,alpha} fields 2020-08-30 10:26:55 +09:00
kichikuou 91a6cf7e67 Fix out-of-bounds memory access in font_ttf_get_glyph
FT_GlyphSlot.bitmap_left can be negative.
2020-08-30 09:58:09 +09:00
kichikuou dc8025469a Fix memory leak in msg_openWindow 2020-08-29 22:36:59 +09:00
kichikuou 0bbace898d Fix memory leak in save_saveAll 2020-08-29 22:04:34 +09:00
kichikuou c4e5ef3c36 Fix usage message 2020-08-29 19:10:55 +09:00
kichikuou e039fb3193 Fix memory leak in qnt_extract 2020-08-29 18:47:21 +09:00
kichikuou e547c153fc emscripten: Call sys_getInputInfo() at least once per frame
This fixes Graymerca, which checks input only with IG command.
2020-08-29 12:38:01 +09:00
kichikuou fef74da3dd emscripten: Enable JPEG 2020-08-26 20:23:56 +09:00
kichikuou 7baab6b616 Android CI: Use the system's default JDK 2020-08-23 14:09:37 +09:00
kichikuou 54b219e435 Android: Update build instructions to use commandline-tools
Now it works with JDK 9+.
2020-08-23 13:23:21 +09:00
kichikuou a20363b901 Android: Upgrade build environment
- targetSdkVersion 28
- Android Gradle plugin 4.0.1
- Kotlin 1.3.72
- Gradle 6.1.1
2020-08-23 11:22:05 +09:00
kichikuou bc9fc924ed [experimental] Unicode mode
This adds "Unicode mode", in which scenarios can be written in any
language. xsys35c 1.2.0 and later can produce Unicode scenarios.

- nact->encoding represents the current scenario encoding. The initial
  value is SJIS, and ZU command changes it to UTF8.

- Use conversion macros that switch the behavior by the scenario
  encoding. For example, toUTF8() calls sjis2utf() if the scenario
  encoding is SJIS, and calls strdup() if it is UTF8.

- Fix various string processing functions to work with UTF8.
2020-08-09 21:24:56 +09:00
kichikuou d8fbf9a8b1 Cleanup 2020-08-09 13:41:26 +09:00
kichikuou 077e4d32e0 Fix emscripten build 2020-08-08 23:07:53 +09:00
kichikuou 652e4b9111 Simplify ags_drawStringToSurface() 2020-08-08 22:57:22 +09:00
kichikuou 3cecc58607 Narrow dependency on font.h
This removes font.h dependency from header files such as ags.h and
nact.h. After this, font.h must be explicitly included in order to use
font functions.
2020-08-08 22:52:47 +09:00
kichikuou f31742a503 Font functions only handle utf-8 strings
Conversion from Shift_JIS is done in ags.c.
2020-08-08 22:03:58 +09:00
kichikuou e830190537 Add ags_drawStringToSurface() 2020-08-08 21:28:01 +09:00
kichikuou 7d8458c86d Emscripten: Remove getMemory from EXTRA_EXPORTED_RUNTIME_METHODS 2020-08-08 14:29:44 +09:00
kichikuou dfc10a7f34 Update emscripten to 1.40.1 2020-08-08 10:35:23 +09:00
kichikuou a5684cffa4 Switch README.md to English, and add a link to the releases page 2020-08-06 19:28:15 +09:00
kichikuou cfa9dc3502 Make BGM setup easy
This changes the default value of cdrom_device to "playlist.txt" so that
users can prepare BGM simply by putting a file named "playlist.txt" in
the game directory.

Also, if the playlist file is not found but there is a "_inmm.ini" file
in the game directory, load it as a playlist (but unlike the normal
playlist format, the first line corresponds to track 2). This makes some
archived games work without any configuration.
2020-08-06 17:20:27 +09:00
kichikuou f978c43ee1 Move mmap-related code to mmap.{h,c}
And add Windows implementation.
2020-08-06 15:09:51 +09:00
kichikuou 7871bb9328 Fix DEBUG_COMMAND macro 2020-08-06 14:59:33 +09:00
kichikuou ab32b1792f Do not display message argument of System 3.9 H/HH/X commands
This matches the behavior of System39.exe.
2020-08-02 15:38:12 +09:00
kichikuou 98d0a13a20 Change the underlying type of boolean to C99 _Bool 2020-08-02 14:07:51 +09:00
kichikuou 5456ac4219 Remove unused ERROR constant 2020-08-02 13:46:44 +09:00
kichikuou f258ae42b1 Windows: Remember last selected game folder in registry 2020-08-02 13:41:34 +09:00
kichikuou 6a459260e4 Fix font filename in xsystem35.nsi 2020-08-02 13:41:34 +09:00
kichikuou 6580b864c0 Windows: Localize game-folder chooser dialog 2020-08-02 13:41:34 +09:00
kichikuou bfd8e3e55a Windows: Add app icon 2020-08-02 13:41:34 +09:00
kichikuou 05cacb170f Windows CI: Generate installer as build artifact 2020-08-01 23:23:51 +09:00
kichikuou d2c861ad53 Windows: Let the user select a game folder when launched without arguments 2020-08-01 21:43:20 +09:00
kichikuou 8a395a57e4 Windows: Load profile from registry
This allows xsystem35 to use the font paths written to the registry by
the installer.
2020-08-01 21:43:20 +09:00
kichikuou 6706348c11 Make DWORD definition not to conflict with windows.h 2020-08-01 21:43:20 +09:00
kichikuou c66714bab6 Add NSIS script for generating Windows installer 2020-08-01 21:43:15 +09:00
kichikuou 730b15dfca Refactor debug output macros 2020-07-25 22:01:21 +09:00
kichikuou ad6c84db4d Clean up xsys35rc.sample 2020-07-25 17:57:49 +09:00
kichikuou 9053583517 Do UTF-8 conversion for filenames in cmd*.c 2020-07-25 17:09:08 +09:00
kichikuou 07f8f8a5f8 initGameResourceFromDir: Stop prepending CWD to filenames 2020-07-25 14:48:41 +09:00
kichikuou 9f244c3dee Fix filecheck.c issues
- Use _wfopen on Windows, to avoid garbled filenames.
- The -savekanji option is removed. Now character encoding of file paths
  is assumed to be UTF-8 on non-windows.
- On all platforms, data files are also searched for in current
  directory.
2020-07-25 13:17:03 +09:00
kichikuou 2e895ed3ae Fix a compiler warning 2020-07-24 20:09:29 +09:00
kichikuou b5010df10d Add helper functions for number formatting
And use it from H, HH, MH, and MHH commands.
2020-07-24 17:06:30 +09:00
kichikuou fc5f89912e Fix zen2han
To match the behavior of "ZH 1" in System 3.9.
2020-07-24 16:30:03 +09:00
kichikuou 70ea305ca9 Refactor hankaku.c 2020-07-24 16:17:18 +09:00
kichikuou b4eb18c938 Add test for hankaku.c 2020-07-24 15:42:48 +09:00
kichikuou b9e0d97156 Fix utf2sjis() for KATAKANA MIDDLE DOT character 2020-07-24 14:53:59 +09:00
kichikuou 350d8bb367 Remove unused sys_getConvString() 2020-07-24 13:21:48 +09:00
kichikuou fb10cbc52d Add unittest.h with some assertion macros 2020-07-24 12:46:14 +09:00
kichikuou 55976a5816 Merge hankana2sjis.c into hankaku.c 2020-07-24 11:30:07 +09:00
kichikuou 827f98d24a Remove ttfont_{gothic,mincho}_code .xys35rc parameters
These are no longer effective as we have dropped SJIS charmap support.
This also removes the codeconv field from FONT struct.
2020-07-24 10:00:43 +09:00
kichikuou ce67aa7028 Eliminate SJIS string constants 2020-07-24 08:54:45 +09:00
kichikuou 50b3812364 Convert gametitle.h to utf-8 2020-07-23 22:50:43 +09:00
kichikuou 616534621e Fix ShString.ExchangeString
And add a test.
2020-07-23 18:08:58 +09:00
kichikuou 1f5ec7a9a9 Simplify string functions 2020-07-23 17:04:37 +09:00
kichikuou 06223ea727 Add more tests for string variables 2020-07-23 16:57:31 +09:00
kichikuou d15c770b4b Fix strGetCharType and strGetLengthASCII 2020-07-23 16:55:49 +09:00
kichikuou 60bb70c456 Fix strCheckASCII and strCheckSJIS
They were referencing wrong string variables.
2020-07-23 16:36:03 +09:00
kichikuou 52322345b5 Fix MG7 command
This fixes a regression bug introduced by 86470e5.
2020-07-23 16:31:35 +09:00
kichikuou 66693ad39a font_freetype2: Drop support for SJIS character map
Nowadays, it's safe to assume that fonts have a Unicode character map.
2020-07-23 15:01:46 +09:00
kichikuou 73fab9b628 Remove unused functions in utfsjis.c 2020-07-23 13:53:25 +09:00
kichikuou bdfe0e8077 Remove sjis2lang and lang2sjis macros
There's no plan to use any other "native" character encodings than
UTF-8.
2020-07-23 13:53:08 +09:00
kichikuou 03f8af2241 Simplify registerGameFiles() 2020-07-12 14:25:34 +09:00
kichikuou c03b6cf6b5 Embed GameResource in NACTINFO 2020-07-12 14:17:31 +09:00
kichikuou 1a3b779ace Use const strings for file names 2020-07-12 13:41:57 +09:00
kichikuou 4c58510a37 CMake: Introduce src_lib library
To avoid compiling test targets twice.
2020-07-12 13:01:31 +09:00
kichikuou b4c729a1f6 initGameResourceFromDir: Detect non-{ald,ain} files too
Now BGI, WAI and other files can be used without writing a .gr file.
2020-07-12 12:09:01 +09:00
kichikuou daf5098530 Add test for initGameResourceFromDir 2020-07-12 11:46:39 +09:00
kichikuou 4223284781 CI: Update GitHub Actions
- mymindstorm/setup-emsdk@v6
- actions/cache@v2
- actions/upload-artifact@v2
2020-07-12 11:27:45 +09:00
kichikuou 3d70d00bce Add unit test for gameresource.c 2020-07-11 19:12:45 +09:00
kichikuou f2fbf54c32 Move registerGameFiles to xsystem35.c 2020-07-11 18:34:27 +09:00
kichikuou b4d2c0832e Clean up gameresource.c 2020-07-11 18:34:24 +09:00
kichikuou d777b18b55 Game Resource: Allow file names containing spaces 2020-07-11 18:23:39 +09:00
kichikuou 7b3efd9aaa Move *.gr reader code to gameresource.c 2020-07-11 18:22:05 +09:00
kichikuou 90eb139994 Merge pull request #17 from nunuhara/missing_font_fix
Fix segfault when non-existent font specified
2020-07-11 16:15:13 +09:00
Nunuhara Cabbage aa87e3e8c0 Fix segfault when non-existent font specified 2020-07-10 23:43:46 -07:00
kichikuou 1cd949f597 CMake: Fix X11 + SDL_mixer build
Stop using SDL2_FOUND to determine if SDL2 should be used or not,
because it may be defined as a side effect of
pkg_check_modules(SDL2_mixer).
2020-06-27 15:05:56 +09:00
kichikuou 426cdaa836 Fix compatibility issues around maximum index of array variables
The second argument of DC command specifies the maximum index of the new
array. That means, `DC _,n,_:` allocates an array of size n+1 (a[0] to
a[n]).

This patch makes sure various D commands work with a[n], and a[n] is
correctly saved and loaded.

Now loadSysVar() does not shrink array variables using the data count in
the save file, so that files saved by old xsystem35 binary can be safely
loaded. This also matches the behavior of System3.9.
2020-06-27 13:16:22 +09:00
kichikuou 8db5a9cd65 Implement text decoration type 4 and 10 2020-06-21 11:10:19 +09:00
kichikuou 47f82e87c5 Add guards against incomplete SJIS bytes 2020-06-21 09:49:13 +09:00
kichikuou 86470e543a Rework string variables
- strVar is now allocated as a vector of indefinite length buffers
  rather than a single contiguous buffer.
- Strings can be any length, but truncated to (strvar_len * 2) bytes
  when saved to a file, for backward compatibility.
- Now string commands treat 1-byte characters in the same way as System
  3.9. This potentially fixes bugs in English translated games.
2020-06-20 22:29:22 +09:00
kichikuou a23ce19433 Add tests for string variables (M commands)
xsystem35 does not pass yet.
2020-06-20 13:00:32 +09:00
kichikuou 1cf197513c Use const strings in message related functions 2020-06-20 10:53:38 +09:00
kichikuou 64c3c28336 CI: Run SDL2 and X11 builds on Linux 2020-06-20 10:52:35 +09:00
kichikuou 7309ed012f Make DspDeviceSync no-op in SDL graphics 2020-06-18 21:49:51 +09:00
kichikuou 515a92544b getCaliValue: Recover from out-of-bounds index access
Before this, array access caused stack underflow if the index was out of
range. After this, such index access will be evaluated to zero.
2020-06-14 22:43:17 +09:00
kichikuou 725b0ee6ab Prevent buffer overrun by DF command 2020-06-14 22:09:14 +09:00
kichikuou e17b447e73 Cleanup variable lookup code
No behavior changes.
2020-06-14 21:54:11 +09:00
kichikuou 6dbd31cdbc Add tests for array access 2020-06-14 21:48:52 +09:00
kichikuou a217df39b1 Fix compiler warnings on Windows
On Windows, jpeglib.h includes windows.h which defines several macros
that conflict with ours.
2020-06-14 14:23:40 +09:00
kichikuou 80266d6454 Support JPEG image format
JPEG images are not used in AliceSoft games, but supported since System3.6
version 3.23 and used in some third-party games (e.g. Graymerca).
2020-06-14 14:16:19 +09:00
kichikuou 2e17188f2b Fix DI command and add tests 2020-06-13 15:46:45 +09:00
kichikuou 37f4d847e5 Fix Windows build 2020-06-07 21:29:53 +09:00
kichikuou 43c6688ce7 CI updates
- Add Windows build
- Run Debug and Release builds on Linux
- Run CI against pull requests
2020-06-07 15:16:39 +09:00
kichikuou 09e89e794d Android: Version 0.2.1 2020-06-07 14:31:31 +09:00
kichikuou 3fd7a58544 Android: Use filtered scaling
This improves text readability, especially for the Mincho font.
2020-06-07 12:55:16 +09:00
kichikuou f0ccdcf40a Android: Use arhive filename as alternate launcher item name
The title.txt file is written when the MT command is used, however some
games (Daiakuji, AmbivalenZ, Ikenai Katsumi sensei) does not use the MT
command. As a result, these titles did not appear in the launcher.

This makes the launcher use the name of the ZIP archive when the game
was installed as the alternate item name if the MT command was not used.
2020-06-07 12:23:19 +09:00
kichikuou 1a6b7b33b9 Android: Compile SDL_mixer with ogg support
This enables voice playback in Escalayer.
2020-06-06 23:00:39 +09:00
kichikuou 7240971beb Fix SACT.MessageIsEmpty
This fixes a bug where message wasn't flushed before changing text
attributes.
2020-06-06 18:27:20 +09:00
kichikuou 250fbd30a0 Android: Version 0.2.0 2020-06-06 12:50:42 +09:00
kichikuou d3579186c6 Android: Populate BGM, WAI, BGI, Init, and SACT01 lines in xsystem35.gr 2020-06-06 12:30:14 +09:00
kichikuou 54dcd8c5fc Android: Compile SDL2_mixer with -DMUSIC_WAV
This is necessary to play BGM from ALD.
2020-06-06 12:22:35 +09:00
kichikuou 5c81929461 Android: Enable modules 2020-06-06 09:19:30 +09:00
kichikuou dbc15ca3b4 Re-enable NIGHTDLL module
To avoid symbol conflicts, this adds "nt_" prefix to sprite, sactcg, and
sactstring functions.
2020-06-04 22:50:46 +09:00
kichikuou 9a1f1c77a6 Static link DLL modules
We only support a fixed set of modules, so dynamic linking isn't really
necessary. This paves the way for running System3.9 games on more
platforms.

NIGHTDLL is temporarily disabled, because many symbols conflict with the
SACT module.
2020-06-04 19:56:05 +09:00
kichikuou 0fe5cb60a3 SACT: Add WaitVsync() in animation loops
So that sprite updates are reflected on the screen.
2020-05-31 09:58:18 +09:00
kichikuou 3e2c226866 Set default fonts load path to /fonts/ 2020-05-30 12:15:41 +09:00
kichikuou 0351f4cbcd Do not use tab characters in CMakeLists.txt 2020-05-30 09:33:01 +09:00
kichikuou f1eed8f2af Convert music.c and music_private.h to UTF-8
These files were removed at the time of the batch conversion to UTF-8,
and then re-added in EUC-JP encoding.
2020-05-29 23:15:47 +09:00
kichikuou 9020e5ab1d Remove .dir-locals.el and add .editorconfig 2020-05-29 23:15:17 +09:00
kichikuou 697c15854a Update emscripten to 1.39.16 2020-05-29 22:24:10 +09:00
kichikuou 70a03ff02f s2utbl.h: Map [82 f2] to U+3094 (HIRAGANA LETTER VU)
This character is used in Prostudent Good. (Although MTLc3m.ttf does not
have a glyph for it...)

This also makes the table const.
2020-05-10 22:26:04 +09:00
kichikuou d50e7ac150 CI: Run 'apt update' 2020-05-06 15:39:24 +09:00
kichikuou ea5776108a Fix voice playback in Escalayer
- Make sure muspcm_getpos() returns non-zero while playing
- Implement mus_wav_fadeout_start()
- Fix a bug of ssnd_waitkey()
2020-05-06 15:11:00 +09:00
kichikuou 8d72775daa Modules: Make debug messages less verbose 2020-05-04 23:02:05 +09:00
kichikuou 73216073af Android: Update SDL2 to 2.0.12 2020-03-13 16:22:44 +09:00
264 changed files with 6004 additions and 4878 deletions
-3
View File
@@ -1,3 +0,0 @@
((nil . ((indent-tabs-mode . t)
(c-basic-offset . 4)
(tab-width . 4))))
+13
View File
@@ -0,0 +1,13 @@
# https://EditorConfig.org
root = true
[*]
charset = utf-8
[*.{h,c}]
indent_style = tab
indent_size = 4
[CMakeLists.txt]
indent_style = space
indent_size = 2
+2 -7
View File
@@ -1,5 +1,5 @@
name: Android Build
on: [push]
on: [push, pull_request]
jobs:
build:
@@ -11,15 +11,10 @@ jobs:
- name: Install Deps
run: sudo apt install ninja-build
- name: set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Build
run: |
cd android
./gradlew assembleRelease
ANDROID_NDK_HOME=$ANDROID_SDK_ROOT/ndk-bundle ./gradlew assembleRelease
- name: Upload artifacts
uses: actions/upload-artifact@v1
+5 -13
View File
@@ -1,8 +1,8 @@
name: Emscripten Build
on: [push]
on: [push, pull_request]
env:
emscripten-version: 1.39.8
emscripten-version: 1.40.1
jobs:
build:
@@ -11,25 +11,17 @@ jobs:
- uses: actions/checkout@v2
- name: Cache emsdk
uses: actions/cache@v1
id: cache
with:
path: emsdk-cache
key: ${{ runner.os }}-emsdk-${{ env.emscripten-version }}
- name: Cache .emscripten_cache
uses: actions/cache@v1
uses: actions/cache@v2
with:
path: emscripten-cache
key: emscripten-cache-${{ env.emscripten-version }}
- name: Setup Emscripten toolchain
uses: mymindstorm/setup-emsdk@v3
uses: mymindstorm/setup-emsdk@v6
with:
version: ${{ env.emscripten-version }}
actions-cache-folder: emsdk-cache
no-cache: true
- name: Build
env:
@@ -45,7 +37,7 @@ jobs:
mv src/xsystem35.* xsystem35/
- name: Upload artifacts
uses: actions/upload-artifact@v1
uses: actions/upload-artifact@v2
with:
name: xsystem35-wasm
path: out/wasm/xsystem35
+36 -7
View File
@@ -1,23 +1,52 @@
name: Linux Build
on: [push]
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
build-type: ["Debug", "Release"]
name: Linux ${{ matrix.build-type }}
steps:
- uses: actions/checkout@v2
- name: Install Deps
run: sudo apt install libsdl2-dev libsdl2-ttf-dev libsdl2-mixer-dev
run: |
sudo apt update
sudo apt install libsdl2-dev libsdl2-ttf-dev libsdl2-mixer-dev
- name: Build
run: |
mkdir -p out/debug
cd out/debug
cmake -DCMAKE_BUILD_TYPE=Debug ../../
mkdir -p out/${{ matrix.build-type }}
cd out/${{ matrix.build-type }}
cmake -DENABLE_X11=NO -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} ../../
make
- name: Test
run: ctest
working-directory: out/debug
run: ctest --output-on-failure
working-directory: out/${{ matrix.build-type }}
build-x11:
runs-on: ubuntu-latest
name: Linux X11
steps:
- uses: actions/checkout@v2
- name: Install Deps
run: |
sudo apt update
sudo apt install libgtk2.0-dev
- name: Build
run: |
mkdir -p out
cd out
cmake ../
make
- name: Test
run: ctest --output-on-failure
working-directory: out
+60
View File
@@ -0,0 +1,60 @@
name: Windows Build
on: [push, pull_request]
jobs:
build:
runs-on: windows-2019
strategy:
matrix:
mingw: ["MINGW32", "MINGW64"]
include:
- mingw: "MINGW32"
package: "mingw-w64-i686"
installer: "xsystem35-32bit"
- mingw: "MINGW64"
package: "mingw-w64-x86_64"
installer: "xsystem35-64bit"
defaults:
run:
shell: bash.exe --login -eo pipefail "{0}"
env:
MSYSTEM: ${{ matrix.mingw }}
CHERE_INVOKING: 1
name: MSYS2 ${{ matrix.mingw }}
steps:
- name: Set up shell
run: echo ::add-path::C:\msys64\usr\bin\
shell: pwsh
- name: Print system version
run: |
uname
echo PATH: $PATH
- name: Install Deps
run: pacman -S --noconfirm ${{ matrix.package }}-SDL2 ${{ matrix.package }}-SDL2_ttf ${{ matrix.package }}-SDL2_mixer ${{ matrix.package }}-libjpeg-turbo ${{ matrix.package }}-nsis ${{ matrix.package }}-ntldd-git
- name: Checkout
uses: actions/checkout@v2
- name: Build
run: |
mkdir -p out/release
cd out/release
cmake -G"MSYS Makefiles" -DCMAKE_BUILD_TYPE=Release ../../
make
- name: Test
run: ctest --output-on-failure
working-directory: out/release
- name: Package
working-directory: installer
run: ./make-installer.sh ../out/release ${{ matrix.installer }}.nsi
- name: Upload
uses: actions/upload-artifact@v2
with:
name: ${{ matrix.installer }}
path: installer/${{ matrix.installer }}.exe
+59 -50
View File
@@ -18,7 +18,7 @@ endif ()
macro (optional_find_package package)
option(ENABLE_${package} "Use ${package} if available" ON)
if (ENABLE_${package})
find_package(${package} ${ARGN})
find_package(${package} ${ARGN})
endif()
endmacro()
@@ -26,7 +26,7 @@ endmacro()
macro (optional_pkg_check_modules prefix)
option(ENABLE_${prefix} "Use ${prefix} if available" ON)
if (ENABLE_${prefix})
pkg_check_modules(${prefix} ${ARGN})
pkg_check_modules(${prefix} ${ARGN})
endif()
endmacro()
@@ -38,7 +38,12 @@ check_symbol_exists(uname "sys/utsname.h" HAVE_UNAME)
if (EMSCRIPTEN)
set(SDL2_FOUND 1)
set(FREETYPE_FOUND 1)
set(HAVE_JPEG 1)
set(DEFAULT_FONT_PATH /fonts/)
elseif (ANDROID)
if (NOT DEFINED ENABLE_MODULES)
set(ENABLE_MODULES 1)
endif()
set(SDL2_FOUND 1)
set(SDL2MIXER_FOUND 1)
set(SDL2TTF_FOUND 1)
@@ -49,71 +54,74 @@ else()
TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
if (NOT DEFINED ENABLE_MODULES)
check_library_exists(dl dlopen "" ENABLE_MODULES)
endif()
if (ENABLE_MODULES)
link_libraries(dl)
set(ENABLE_MODULES 1)
endif()
find_package(ZLIB REQUIRED)
optional_find_package(X11)
if (X11_xf86vmode_FOUND)
set(HAVE_XF86VMODE 1)
set(HAVE_XF86VMODE 1)
endif()
optional_find_package(GTK2 COMPONENTS gtk)
if (GTK2_FOUND)
set(ENABLE_GTK 1)
set(ENABLE_GTK 1)
endif()
optional_find_package(Freetype)
include(FindPkgConfig)
if (NOT X11_FOUND)
optional_pkg_check_modules(SDL2 IMPORTED_TARGET sdl2)
endif()
optional_pkg_check_modules(SDL2 IMPORTED_TARGET sdl2)
optional_pkg_check_modules(SDL2MIXER IMPORTED_TARGET SDL2_mixer)
optional_pkg_check_modules(SDL2TTF IMPORTED_TARGET SDL2_ttf)
include(FindJPEG)
if (JPEG_FOUND)
set(HAVE_JPEG 1)
endif()
set(DEFAULT_FONT_PATH ${CMAKE_INSTALL_PREFIX}/share/xsystem35/fonts/)
endif()
# Menu
if (EMSCRIPTEN)
set(SRC_MENU menu_emscripten.c)
elseif (GTK2_FOUND)
set(SRC_MENU menu.c menu_callback.c menu_gui.c s39init.c)
# i18n support (currently only menus are translated)
include(FindIntl)
include(FindGettext)
if (Intl_FOUND AND GETTEXT_FOUND)
set(ENABLE_NLS 1)
add_compile_definitions(LOCALEDIR="${CMAKE_INSTALL_PREFIX}/share/locale")
include_directories(${Intl_INCLUDE_DIRS})
link_libraries(${Intl_LIBRARIES})
endif()
else()
set(SRC_MENU menu_null.c)
endif()
# Graphics
if (X11_FOUND)
set(SRC_GRAPHDEV xcore_draw.c xcore_video.c xcore_mode.c xcore_event.c xcore_cursor.c xcore_maskupdate.c image.c xcore_image.c)
set(SUMMARY_GRAPHDEV "X11")
elseif (SDL2_FOUND)
set(SRC_GRAPHDEV sdl_video.c sdl_mode.c sdl_draw.c sdl_event.c sdl_image.c sdl_cursor.c image.c)
set(SRC_GRAPHDEV sdl_video.c sdl_draw.c sdl_event.c sdl_image.c sdl_cursor.c image.c)
set(SUMMARY_GRAPHDEV "SDL2")
set(ENABLE_SDL 1)
else()
message(FATAL_ERROR "*** No graphic device available ***")
endif()
# Menu
if (EMSCRIPTEN)
set(SRC_MENU menu_emscripten.c)
elseif (ANDROID)
set(SRC_MENU menu_android.c)
elseif (GTK2_FOUND)
set(SRC_MENU menu.c menu_callback.c menu_gui.c s39init.c)
# i18n support (currently only menus are translated)
include(FindIntl)
include(FindGettext)
if (Intl_FOUND AND GETTEXT_FOUND)
set(ENABLE_NLS 1)
add_compile_definitions(LOCALEDIR="${CMAKE_INSTALL_PREFIX}/share/locale")
include_directories(${Intl_INCLUDE_DIRS})
link_libraries(${Intl_LIBRARIES})
endif()
elseif (ENABLE_SDL)
set(SRC_MENU menu_sdl.c sdl_input.c)
else ()
set(SRC_MENU menu_null.c)
endif()
# PCM audio
if (EMSCRIPTEN)
@@ -154,7 +162,7 @@ if (SDL2MIXER_FOUND AND NOT ANDROID)
list(APPEND SUMMARY_CDROM "SDL_mixer (wav|mp3|ogg...)")
set(ENABLE_CDROM_MP3 1)
endif()
set(CDROM_DEVICE "/dev/cdrom" CACHE STRING "CDROM Device Name")
set(CDROM_DEVICE "playlist.txt" CACHE STRING "CDROM Device Name")
# MIDI
@@ -174,21 +182,21 @@ else()
endif()
if (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
check_symbol_exists(SNDCTL_SEQ_NRSYNTHS "machine/soundcard.h" ENABLE_MIDI_SEQMIDI)
check_symbol_exists(SNDCTL_SEQ_NRSYNTHS "machine/soundcard.h" ENABLE_MIDI_SEQMIDI)
elseif (CMAKE_SYSTEM_NAME MATCHES "(NetBSD|OpenBSD)")
check_symbol_exists(SNDCTL_SEQ_NRSYNTHS "soundcard.h" ENABLE_MIDI_SEQMIDI)
check_symbol_exists(SNDCTL_SEQ_NRSYNTHS "soundcard.h" ENABLE_MIDI_SEQMIDI)
else ()
check_symbol_exists(SNDCTL_SEQ_NRSYNTHS "sys/soundcard.h" ENABLE_MIDI_SEQMIDI)
check_symbol_exists(SNDCTL_SEQ_NRSYNTHS "sys/soundcard.h" ENABLE_MIDI_SEQMIDI)
endif()
if (ENABLE_MIDI_SEQMIDI)
list(APPEND SUMMARY_MIDI "OSS sequencer")
set(SEQ_DEVICE "/dev/sequencer" CACHE STRING "sequencer device")
list(APPEND SUMMARY_MIDI "OSS sequencer")
set(SEQ_DEVICE "/dev/sequencer" CACHE STRING "sequencer device")
endif()
if (SDL2MIXER_FOUND)
list(APPEND SRC_MIDI midi.sdlmixer.c)
list(APPEND SUMMARY_MIDI "SDL_mixer")
set(ENABLE_MIDI_SDLMIXER 1)
list(APPEND SRC_MIDI midi.sdlmixer.c)
list(APPEND SUMMARY_MIDI "SDL_mixer")
set(ENABLE_MIDI_SDLMIXER 1)
endif()
endif()
@@ -196,18 +204,18 @@ endif()
if (EMSCRIPTEN OR ANDROID)
set(SRC_JOYSTICK joystick_dmy.c)
elseif (SDL2_FOUND)
elseif (ENABLE_SDL)
set(SRC_JOYSTICK joystick_sdl.c)
set(SUMMARY_JOYSTICK "SDL")
set(HAVE_SDLJOY 1)
else()
check_include_file(linux/joystick.h HAVE_LINUX_JOYSTICK_H)
if (HAVE_LINUX_JOYSTICK_H)
set(SRC_JOYSTICK joystick_linux.c)
set(SUMMARY_JOYSTICK "Linux ioctl")
set(JOY_DEVICE "/dev/js0" CACHE STRING "joystick device")
set(SRC_JOYSTICK joystick_linux.c)
set(SUMMARY_JOYSTICK "Linux ioctl")
set(JOY_DEVICE "/dev/js0" CACHE STRING "joystick device")
else ()
set(SRC_JOYSTICK joystick_dmy.c)
set(SRC_JOYSTICK joystick_dmy.c)
endif ()
endif()
@@ -219,7 +227,7 @@ if (X11_FOUND)
set(ENABLE_X11FONT 1)
endif()
if (FREETYPE_FOUND)
list(APPEND SRC_FONT font_freetype2.c cp932tojis0213.c)
list(APPEND SRC_FONT font_freetype2.c)
list(APPEND SUMMARY_FONT "freetype2")
set(ENABLE_FT2 1)
endif()
@@ -236,9 +244,9 @@ endif()
function (print_summary name)
if (ARGN)
list(JOIN ARGN ", " MSG)
list(JOIN ARGN ", " MSG)
else()
set(MSG "none")
set(MSG "none")
endif()
message(" ${name}: ${MSG}")
endfunction()
@@ -268,4 +276,5 @@ endif()
if (ENABLE_MODULES)
add_subdirectory(modules)
target_link_libraries(xsystem35 PRIVATE modules)
endif()
+13 -13
View File
@@ -1,26 +1,26 @@
# xsytem35-sdl2
アリスソフトのゲームエンジン System3.x のフリー実装である xsystem35 を SDL2 に対応して、emscripten でコンパイルできるようにしたものです。
This is a multi-platform port of xsystem35, a free implementation of AriceSoft's System3.x game engine.
## ビルド方法
### Linux
## Download
Prebuilt binaries for Windows and Android can be downloaded from the [Releases](https://github.com/kichikuou/xsystem35-sdl2/releases) page.
[cmake](https://cmake.org/) が必要です。
## Build
### Linux (Debian / Ubuntu)
$ sudo apt install build-essential cmake libsdl2-dev libsdl2-ttf-dev libsdl2-mixer-dev
$ mkdir -p out/debug
$ cd out/debug
$ cmake -DCMAKE_BUILD_TYPE=Debug ../../
$ make && make install
cmake の実行でエラーになる場合は必要なライブラリをインストールしてください。
グラフィックスシステムとして X11 と SDL2 が使用可能です。両方存在する場合は X11 が優先されますが、`cmake` のオプションに `-DENABLE_X11=NO` を指定すると SDL2 が使われます。
You can choose between X11 and SDL2 as the graphics backend. If both libraries are found, X11 is used by default, but if `-DENABLE_X11=NO` flag is given to the `cmake` invocation, then SDL2 will be used.
### MacOS
[Homebrew](https://brew.sh/index_ja) が必要です。
[Homebrew](https://brew.sh/index_ja) is needed.
$ brew install cmake pkg-config sdl2 sdl2_mixer freetype
$ brew install cmake pkg-config sdl2 sdl2_mixer freetype libjpeg
$ mkdir -p out/debug
$ cd out/debug
$ cmake -DCMAKE_BUILD_TYPE=Debug ../../
@@ -28,9 +28,9 @@ cmake の実行でエラーになる場合は必要なライブラリをイン
### Windows
[MSYS2](https://www.msys2.org) が必要です。
[MSYS2](https://www.msys2.org) is needed.
$ pacman -S cmake mingw-w64-x86_64-cmake mingw-w64-x86_64-SDL2 mingw-w64-x86_64-SDL2_ttf mingw-w64-x86_64-SDL2_mixer
$ pacman -S cmake mingw-w64-x86_64-cmake mingw-w64-x86_64-SDL2 mingw-w64-x86_64-SDL2_ttf mingw-w64-x86_64-SDL2_mixer mingw-w64-x86_64-libjpeg-turbo
$ mkdir -p out/debug
$ cd out/debug
$ cmake -G"MSYS Makefiles" -DCMAKE_BUILD_TYPE=Debug ../../
@@ -43,8 +43,8 @@ cmake の実行でエラーになる場合は必要なライブラリをイン
$ emcmake cmake -DCMAKE_BUILD_TYPE=MinSizeRel ../../
$ make
実行するには、[鬼畜王 on Webのリポジトリ](https://github.com/kichikuou/web)をチェックアウトして、`docs`ディレクトリに `out/xsystem35.*` をすべてコピーしてください。
To use the generated binary, checkout [Kichikuou on Web](https://github.com/kichikuou/web) and copy `out/xsystem35.*` into its `docs` directory.
### Android
[android/README.md](android/) を参照してください。
See [android/README.md](android/).
+11 -13
View File
@@ -6,7 +6,7 @@ Prebuilt APKs are [here](https://github.com/kichikuou/xsystem35-sdl2/releases).
## Build
Prerequisites:
- CMake >=3.13
- Android SDK >=26
- Android SDK >=28
- Android NDK >=r15c
### Using Android Studio
@@ -15,20 +15,19 @@ Open this directory as an Android Studio project.
### Command line build
Configure environment variables and run the `gradlew` script in this folder.
Example build instructions (for Debian Stretch):
Example build instructions (for Debian buster):
```sh
# Install necessary packages
sudo apt install git wget unzip default-jdk-headless ninja-build
sudo apt -t stretch-backports install cmake
sudo apt install git wget unzip default-jdk-headless cmake ninja-build
# Install Android SDK / NDK
export ANDROID_HOME=$HOME/android-sdk
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/platform-tools
wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
unzip sdk-tools-linux-4333796.zip -d $ANDROID_HOME
yes |$ANDROID_HOME/tools/bin/sdkmanager --licenses
$ANDROID_HOME/tools/bin/sdkmanager ndk-bundle
export ANDROID_SDK_ROOT=$HOME/android-sdk
mkdir -p $ANDROID_SDK_ROOT/cmdline-tools
wget https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip
unzip commandlinetools-linux-6609375_latest.zip -d $ANDROID_SDK_ROOT/cmdline-tools
yes |$ANDROID_SDK_ROOT/cmdline-tools/tools/bin/sdkmanager --licenses
$ANDROID_SDK_ROOT/cmdline-tools/tools/bin/sdkmanager ndk-bundle
export ANDROID_NDK_HOME=$ANDROID_SDK_ROOT/ndk-bundle
# Check out and build xsystem35
git clone https://github.com/kichikuou/xsystem35-sdl2.git
@@ -44,7 +43,7 @@ cd xsystem35-sdl2/android
4. The game starts. Two-finger touch is treated as a right click.
### Preparing a ZIP
- Include all `.ALD` files and `.ain` files if any.
- Include all files in the `GAMEDATA` folder (`.ALD` files and others). `.EXE` and `.DLL` are not really needed, but you can include them as well.
- Music files (`.mp3`, `.ogg` or `.wav`) whose file names end with a number are recognized as BGM files. For example:
- `Track2.mp3`
- `15.ogg`
@@ -58,4 +57,3 @@ Note: This form of ZIP can be used in [Kichikuou on Web](http://kichikuou.github
## Known Issues
- Android versions older than 7.0 cannot handle ZIPs containing Shift-JIS file names. This is the case with some ZIPs distributed on [retroc.net](http://retropc.net/alice/). If you get the error "This type of ZIP is not supported.", unzip the ZIP file on your PC and re-archive it with a modern ZIP creation software.
- DLL modules used in System3.9 games (大悪司 and later) are not supported yet.
+5 -5
View File
@@ -1,4 +1,4 @@
def buildAsLibrary = project.hasProperty('BUILD_AS_LIBRARY');
def buildAsLibrary = project.hasProperty('BUILD_AS_LIBRARY')
def buildAsApplication = !buildAsLibrary
if (buildAsApplication) {
apply plugin: 'com.android.application'
@@ -9,15 +9,15 @@ else {
apply plugin: 'kotlin-android'
android {
compileSdkVersion 26
compileSdkVersion 28
defaultConfig {
if (buildAsApplication) {
applicationId "io.github.kichikuou.xsystem35"
}
minSdkVersion 19
targetSdkVersion 26
versionCode 2
versionName "0.1.1"
targetSdkVersion 28
versionCode 4
versionName "0.2.1"
externalNativeBuild {
cmake {
arguments "-DANDROID_APP_PLATFORM=android-16", "-DANDROID_STL=c++_static"
+4 -3
View File
@@ -7,11 +7,10 @@ project(GAME)
# android_ndk_import_module_cpufeatures()
include(FetchContent)
# TODO: Use SDL2 2.0.11 once released
FetchContent_Declare(
SDL
URL https://hg.libsdl.org/SDL/archive/a5f93b21dfe0.tar.gz # rev 13383
URL_HASH SHA1=a7e9696f7ef8af7c4b89671b096c38d1a4cbf90c
URL http://libsdl.org/release/SDL2-2.0.12.tar.gz
URL_HASH SHA1=e8ba91bf5eb438dbcf1fedf0530a1bcbe30d3bb6
PATCH_COMMAND patch -p1 -i ${CMAKE_CURRENT_LIST_DIR}/SDL.patch
)
# TODO: Use SDL2_ttf 2.0.16 once released
@@ -41,11 +40,13 @@ endif()
FetchContent_GetProperties(SDL_mixer)
if(NOT sdl_mixer_POPULATED)
FetchContent_Populate(SDL_mixer)
SET(SUPPORT_OGG ON CACHE BOOL "Enable OGG support in SDL_mixer" FORCE)
add_subdirectory(${sdl_mixer_SOURCE_DIR} ${sdl_mixer_BINARY_DIR})
# Workaround for CMakeLists.txt bugs of SDL_mixer.
# TODO: Fix these in upstream
add_library(vorbisfile INTERFACE)
target_include_directories(SDL2_mixer PUBLIC ${sdl_mixer_SOURCE_DIR}/include)
target_compile_definitions(SDL2_mixer PRIVATE MUSIC_WAV)
endif()
# The main CMakeLists.txt of xsystem35
+15 -1
View File
@@ -16,17 +16,31 @@
android:required="false" />
<!-- Game controller support -->
<uses-feature
android:name="android.hardware.bluetooth"
android:required="false" />
<uses-feature
android:name="android.hardware.gamepad"
android:required="false" />
<uses-feature
android:name="android.hardware.usb.host"
android:required="false" />
<!-- External mouse input events -->
<uses-feature
android:name="android.hardware.type.pc"
android:required="false" />
<!-- Allow reading from external storage -->
<!-- Audio recording support -->
<!-- if you want to capture audio, uncomment this. -->
<!-- <uses-feature
android:name="android.hardware.microphone"
android:required="false" /> -->
<!-- Allow writing to external storage -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- Allow access to Bluetooth devices -->
<!-- <uses-permission android:name="android.permission.BLUETOOTH" /> -->
<!-- Allow access to the vibrator -->
<!-- <uses-permission android:name="android.permission.VIBRATE" /> -->
@@ -17,9 +17,13 @@
*/
package io.github.kichikuou.xsystem35
import android.app.AlertDialog
import android.media.MediaPlayer
import android.os.Bundle
import android.text.InputType
import android.util.Log
import android.widget.EditText
import android.widget.NumberPicker
import org.libsdl.app.SDLActivity
import java.io.File
import java.io.IOException
@@ -29,6 +33,7 @@ import java.io.IOException
class GameActivity : SDLActivity() {
companion object {
const val EXTRA_GAME_ROOT = "GAME_ROOT"
const val EXTRA_ARCHIVE_NAME = "ARCHIVE_NAME"
}
private lateinit var gameRoot: File
@@ -63,20 +68,91 @@ class GameActivity : SDLActivity() {
override fun setTitle(title: CharSequence?) {
super.setTitle(title)
val str = title?.toString()?.substringAfter(':', "")
if (str.isNullOrEmpty())
return
var str = title?.toString()?.substringAfter(':', "")
if (str.isNullOrEmpty()) {
str = intent.getStringExtra(EXTRA_ARCHIVE_NAME)
if (str == null)
return
}
File(gameRoot, Launcher.TITLE_FILE).writeText(str)
Launcher.updateGameList()
}
// These functions are called in the SDL thread by JNI.
private fun textInputDialog(msg: String, oldVal: String, maxLen: Int, result: Array<String?>) {
val input = EditText(this)
input.inputType = InputType.TYPE_CLASS_TEXT
input.setText(oldVal)
AlertDialog.Builder(this)
.setMessage(msg)
.setView(input)
.setPositiveButton(R.string.ok) {_, _ ->
result[0] = input.text.toString().substring(0, maxLen)
}
.setNegativeButton(R.string.cancel) {_, _ -> }
.setOnDismissListener {
synchronized(result) {
@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN") (result as Object).notify()
}
}
.show()
}
private fun numberInputDialog(msg: String, min: Int, max: Int, initial: Int, result: IntArray) {
val input = NumberPicker(this)
input.minValue = min
input.maxValue = max
input.value = initial
AlertDialog.Builder(this)
.setMessage(msg)
.setView(input)
.setPositiveButton(R.string.ok) {_, _ ->
input.clearFocus()
result[0] = input.value
}
.setNegativeButton(R.string.cancel) {_, _ -> }
.setOnDismissListener {
synchronized(result) {
@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN") (result as Object).notify()
}
}
.show()
}
// The functions below are called in the SDL thread by JNI.
@Suppress("unused") fun cddaStart(track: Int, loop: Boolean) = cdda.start(track, loop)
@Suppress("unused") fun cddaStop() = cdda.stop()
@Suppress("unused") fun cddaCurrentPosition() = cdda.currentPosition()
@Suppress("unused") fun midiStart(path: String, loop: Boolean) = midi.start(path, loop)
@Suppress("unused") fun midiStop() = midi.stop()
@Suppress("unused") fun midiCurrentPosition() = midi.currentPosition()
@Suppress("unused") fun inputString(msg: String, oldVal: String, maxLen: Int): String? {
val result = arrayOfNulls<String?>(1)
runOnUiThread { textInputDialog(msg, oldVal, maxLen, result) }
// Block the calling thread.
synchronized(result) {
try {
@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN") (result as Object).wait()
} catch (ex: InterruptedException) {
ex.printStackTrace()
}
}
return result[0]
}
@Suppress("unused") fun inputNumber(msg: String, min: Int, max: Int, initial: Int): Int {
val result = intArrayOf(-1)
runOnUiThread { numberInputDialog(msg, min, max, initial, result) }
// Block the calling thread.
synchronized(result) {
try {
@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN") (result as Object).wait()
} catch (ex: InterruptedException) {
ex.printStackTrace()
}
}
return result[0]
}
}
private class CddaPlayer(private val playlistPath: File) {
@@ -35,7 +35,7 @@ private var gLauncher: Launcher? = null
interface LauncherObserver {
fun onGameListChange()
fun onInstallProgress(path: String)
fun onInstallSuccess(path: File)
fun onInstallSuccess(path: File, archiveName: String?)
fun onInstallFailure(msgId: Int)
}
@@ -73,7 +73,7 @@ class Launcher private constructor(private val rootDir: File) {
updateGameList()
}
fun install(input: InputStream) {
fun install(input: InputStream, archiveName: String?) {
val dir = createDirForGame()
@SuppressLint("HandlerLeak")
val handler = object : Handler() {
@@ -84,7 +84,7 @@ class Launcher private constructor(private val rootDir: File) {
}
SUCCESS -> {
isInstalling = false
observer?.onInstallSuccess(msg.obj as File)
observer?.onInstallSuccess(msg.obj as File, archiveName)
}
FAILURE -> {
isInstalling = false
@@ -213,27 +213,37 @@ class Launcher private constructor(private val rootDir: File) {
private class GameConfigWriter {
private val grb = StringBuilder()
private var basename: String? = null
private val aldRegex = """(.*?)([a-z])([a-z])\.ald""".toRegex(RegexOption.IGNORE_CASE)
private val resourceType = mapOf(
private val aldRegex = """(.*?)([a-z])([a-z])\.(ald|wai|bgi)""".toRegex(RegexOption.IGNORE_CASE)
private val aldType = mapOf(
"b" to "BGM",
"d" to "Data",
"g" to "Graphics",
"m" to "Midi",
"r" to "Resource",
"s" to "Scenario",
"w" to "Wave")
private val specialResources = mapOf(
"system39.ain" to "Ain",
"system39.ini" to "Init",
"sactefam.kld" to "SACT01"
)
private val audioRegex = """.*?(\d+)\.(wav|mp3|ogg)""".toRegex(RegexOption.IGNORE_CASE)
private val audioFiles: Array<String?> = arrayOfNulls(100)
fun maybeAdd(path: String) {
val name = File(path).name
if (name.toLowerCase(Locale.US) == "system39.ain") {
grb.appendln("Ain $path")
specialResources[name.toLowerCase(Locale.US)]?.let {
grb.appendln("$it $path")
return
}
aldRegex.matchEntire(name)?.let {
val type = resourceType[it.groupValues[2].toLowerCase(Locale.US)]
val ext = it.groupValues[4].toUpperCase(Locale.US)
val type = if (ext == "ALD") {
aldType[it.groupValues[2].toLowerCase(Locale.US)]
} else {
ext
}
val id = it.groupValues[3].toUpperCase(Locale.US)
if (type != null) {
grb.appendln("$type$id $path")
@@ -19,7 +19,9 @@ package io.github.kichikuou.xsystem35
import android.app.*
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.provider.OpenableColumns
import android.util.Log
import android.view.Menu
import android.view.MenuItem
@@ -60,7 +62,7 @@ class LauncherActivity : ListActivity(), AdapterView.OnItemLongClickListener, La
override fun onListItemClick(l: ListView?, v: View?, position: Int, id: Long) {
super.onListItemClick(l, v, position, id)
if (position < launcher.games.size) {
startGame(launcher.games[position].path)
startGame(launcher.games[position].path, null)
} else {
val i = Intent(Intent.ACTION_GET_CONTENT)
i.type = CONTENT_TYPE_ZIP
@@ -112,7 +114,7 @@ class LauncherActivity : ListActivity(), AdapterView.OnItemLongClickListener, La
INSTALL_REQUEST -> {
val input = contentResolver.openInputStream(uri) ?: return
showProgressDialog()
launcher.install(input)
launcher.install(input, getArchiveName(uri))
}
SAVEDATA_EXPORT_REQUEST -> try {
launcher.exportSaveData(contentResolver.openOutputStream(uri)!!)
@@ -144,9 +146,9 @@ class LauncherActivity : ListActivity(), AdapterView.OnItemLongClickListener, La
progressDialog?.setProgress(getString(R.string.install_progress, path))
}
override fun onInstallSuccess(path: File) {
override fun onInstallSuccess(path: File, archiveName: String?) {
dismissProgressDialog()
startGame(path)
startGame(path, archiveName)
}
override fun onInstallFailure(msgId: Int) {
@@ -154,10 +156,11 @@ class LauncherActivity : ListActivity(), AdapterView.OnItemLongClickListener, La
errorDialog(msgId)
}
private fun startGame(path: File) {
private fun startGame(path: File, archiveName: String?) {
val i = Intent()
i.setClass(applicationContext, GameActivity::class.java)
i.putExtra(GameActivity.EXTRA_GAME_ROOT, path.path)
i.putExtra(GameActivity.EXTRA_ARCHIVE_NAME, archiveName)
startActivity(i)
}
@@ -181,6 +184,17 @@ class LauncherActivity : ListActivity(), AdapterView.OnItemLongClickListener, La
.setPositiveButton(R.string.ok) {_, _ -> }
.show()
}
private fun getArchiveName(uri: Uri): String? {
val cursor = contentResolver.query(uri, null, null, null, null, null)
cursor?.use {
if (it.moveToFirst()) {
val fname = it.getString(it.getColumnIndex(OpenableColumns.DISPLAY_NAME))
return if (fname.endsWith(".zip", true)) fname.dropLast(4) else fname
}
}
return null
}
}
@Suppress("DEPRECATION") // for ProgressDialog
@@ -1,5 +1,7 @@
package org.libsdl.app;
import android.hardware.usb.UsbDevice;
interface HIDDevice
{
public int getId();
@@ -9,6 +11,7 @@ interface HIDDevice
public int getVersion();
public String getManufacturerName();
public String getProductName();
public UsbDevice getDevice();
public boolean open();
public int sendFeatureReport(byte[] report);
public int sendOutputReport(byte[] report);
@@ -9,6 +9,7 @@ import android.bluetooth.BluetoothGattDescriptor;
import android.bluetooth.BluetoothManager;
import android.bluetooth.BluetoothProfile;
import android.bluetooth.BluetoothGattService;
import android.hardware.usb.UsbDevice;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
@@ -165,13 +166,13 @@ class HIDDeviceBLESteamController extends BluetoothGattCallback implements HIDDe
mHandler = new Handler(Looper.getMainLooper());
mGatt = connectGatt();
final HIDDeviceBLESteamController finalThis = this;
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
finalThis.checkConnectionForChromebookIssue();
}
}, CHROMEBOOK_CONNECTION_CHECK_INTERVAL);
// final HIDDeviceBLESteamController finalThis = this;
// mHandler.postDelayed(new Runnable() {
// @Override
// public void run() {
// finalThis.checkConnectionForChromebookIssue();
// }
// }, CHROMEBOOK_CONNECTION_CHECK_INTERVAL);
}
public String getIdentifier() {
@@ -469,7 +470,7 @@ class HIDDeviceBLESteamController extends BluetoothGattCallback implements HIDDe
// Only register controller with the native side once it has been fully configured
if (!isRegistered()) {
Log.v(TAG, "Registering Steam Controller with ID: " + getId());
mManager.HIDDeviceConnected(getId(), getIdentifier(), getVendorId(), getProductId(), getSerialNumber(), getVersion(), getManufacturerName(), getProductName(), 0);
mManager.HIDDeviceConnected(getId(), getIdentifier(), getVendorId(), getProductId(), getSerialNumber(), getVersion(), getManufacturerName(), getProductName(), 0, 0, 0, 0);
setRegistered();
}
}
@@ -563,6 +564,11 @@ class HIDDeviceBLESteamController extends BluetoothGattCallback implements HIDDe
return "Steam Controller";
}
@Override
public UsbDevice getDevice() {
return null;
}
@Override
public boolean open() {
return true;
@@ -19,8 +19,9 @@ import android.hardware.usb.*;
import android.os.Handler;
import android.os.Looper;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
public class HIDDeviceManager {
@@ -50,7 +51,6 @@ public class HIDDeviceManager {
private Context mContext;
private HashMap<Integer, HIDDevice> mDevicesById = new HashMap<Integer, HIDDevice>();
private HashMap<UsbDevice, HIDDeviceUSB> mUSBDevices = new HashMap<UsbDevice, HIDDeviceUSB>();
private HashMap<BluetoothDevice, HIDDeviceBLESteamController> mBluetoothDevices = new HashMap<BluetoothDevice, HIDDeviceBLESteamController>();
private int mNextDeviceId = 0;
private SharedPreferences mSharedPreferences = null;
@@ -241,17 +241,7 @@ public class HIDDeviceManager {
}
}
private boolean isHIDDeviceUSB(UsbDevice usbDevice) {
for (int interface_number = 0; interface_number < usbDevice.getInterfaceCount(); ++interface_number) {
if (isHIDDeviceInterface(usbDevice, interface_number)) {
return true;
}
}
return false;
}
private boolean isHIDDeviceInterface(UsbDevice usbDevice, int interface_number) {
UsbInterface usbInterface = usbDevice.getInterface(interface_number);
private boolean isHIDDeviceInterface(UsbDevice usbDevice, UsbInterface usbInterface) {
if (usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_HID) {
return true;
}
@@ -331,45 +321,45 @@ public class HIDDeviceManager {
}
private void handleUsbDeviceAttached(UsbDevice usbDevice) {
if (isHIDDeviceUSB(usbDevice)) {
connectHIDDeviceUSB(usbDevice);
}
connectHIDDeviceUSB(usbDevice);
}
private void handleUsbDeviceDetached(UsbDevice usbDevice) {
HIDDeviceUSB device = mUSBDevices.get(usbDevice);
if (device == null)
return;
int id = device.getId();
mUSBDevices.remove(usbDevice);
mDevicesById.remove(id);
device.shutdown();
HIDDeviceDisconnected(id);
List<Integer> devices = new ArrayList<Integer>();
for (HIDDevice device : mDevicesById.values()) {
if (usbDevice.equals(device.getDevice())) {
devices.add(device.getId());
}
}
for (int id : devices) {
HIDDevice device = mDevicesById.get(id);
mDevicesById.remove(id);
device.shutdown();
HIDDeviceDisconnected(id);
}
}
private void handleUsbDevicePermission(UsbDevice usbDevice, boolean permission_granted) {
HIDDeviceUSB device = mUSBDevices.get(usbDevice);
if (device == null)
return;
boolean opened = false;
if (permission_granted) {
opened = device.open();
for (HIDDevice device : mDevicesById.values()) {
if (usbDevice.equals(device.getDevice())) {
boolean opened = false;
if (permission_granted) {
opened = device.open();
}
HIDDeviceOpenResult(device.getId(), opened);
}
}
HIDDeviceOpenResult(device.getId(), opened);
}
private void connectHIDDeviceUSB(UsbDevice usbDevice) {
synchronized (this) {
for (int interface_number = 0; interface_number < usbDevice.getInterfaceCount(); interface_number++) {
if (isHIDDeviceInterface(usbDevice, interface_number)) {
HIDDeviceUSB device = new HIDDeviceUSB(this, usbDevice, interface_number);
for (int interface_index = 0; interface_index < usbDevice.getInterfaceCount(); interface_index++) {
UsbInterface usbInterface = usbDevice.getInterface(interface_index);
if (isHIDDeviceInterface(usbDevice, usbInterface)) {
HIDDeviceUSB device = new HIDDeviceUSB(this, usbDevice, interface_index);
int id = device.getId();
mUSBDevices.put(usbDevice, device);
mDevicesById.put(id, device);
HIDDeviceConnected(id, device.getIdentifier(), device.getVendorId(), device.getProductId(), device.getSerialNumber(), device.getVersion(), device.getManufacturerName(), device.getProductName(), interface_number);
break;
HIDDeviceConnected(id, device.getIdentifier(), device.getVendorId(), device.getProductId(), device.getSerialNumber(), device.getVersion(), device.getManufacturerName(), device.getProductName(), usbInterface.getId(), usbInterface.getInterfaceClass(), usbInterface.getInterfaceSubclass(), usbInterface.getInterfaceProtocol());
}
}
}
@@ -566,33 +556,27 @@ public class HIDDeviceManager {
//////////////////////////////////////////////////////////////////////////////////////////////////////
public boolean openDevice(int deviceID) {
Log.v(TAG, "openDevice deviceID=" + deviceID);
HIDDevice device = getDevice(deviceID);
if (device == null) {
HIDDeviceDisconnected(deviceID);
return false;
}
// Look to see if this is a USB device and we have permission to access it
for (HIDDeviceUSB device : mUSBDevices.values()) {
if (deviceID == device.getId()) {
UsbDevice usbDevice = device.getDevice();
if (!mUsbManager.hasPermission(usbDevice)) {
HIDDeviceOpenPending(deviceID);
try {
mUsbManager.requestPermission(usbDevice, PendingIntent.getBroadcast(mContext, 0, new Intent(HIDDeviceManager.ACTION_USB_PERMISSION), 0));
} catch (Exception e) {
Log.v(TAG, "Couldn't request permission for USB device " + usbDevice);
HIDDeviceOpenResult(deviceID, false);
}
return false;
}
break;
UsbDevice usbDevice = device.getDevice();
if (usbDevice != null && !mUsbManager.hasPermission(usbDevice)) {
HIDDeviceOpenPending(deviceID);
try {
mUsbManager.requestPermission(usbDevice, PendingIntent.getBroadcast(mContext, 0, new Intent(HIDDeviceManager.ACTION_USB_PERMISSION), 0));
} catch (Exception e) {
Log.v(TAG, "Couldn't request permission for USB device " + usbDevice);
HIDDeviceOpenResult(deviceID, false);
}
return false;
}
try {
Log.v(TAG, "openDevice deviceID=" + deviceID);
HIDDevice device;
device = getDevice(deviceID);
if (device == null) {
HIDDeviceDisconnected(deviceID);
return false;
}
return device.open();
} catch (Exception e) {
Log.e(TAG, "Got exception: " + Log.getStackTraceString(e));
@@ -602,7 +586,7 @@ public class HIDDeviceManager {
public int sendOutputReport(int deviceID, byte[] report) {
try {
Log.v(TAG, "sendOutputReport deviceID=" + deviceID + " length=" + report.length);
//Log.v(TAG, "sendOutputReport deviceID=" + deviceID + " length=" + report.length);
HIDDevice device;
device = getDevice(deviceID);
if (device == null) {
@@ -619,7 +603,7 @@ public class HIDDeviceManager {
public int sendFeatureReport(int deviceID, byte[] report) {
try {
Log.v(TAG, "sendFeatureReport deviceID=" + deviceID + " length=" + report.length);
//Log.v(TAG, "sendFeatureReport deviceID=" + deviceID + " length=" + report.length);
HIDDevice device;
device = getDevice(deviceID);
if (device == null) {
@@ -636,7 +620,7 @@ public class HIDDeviceManager {
public boolean getFeatureReport(int deviceID, byte[] report) {
try {
Log.v(TAG, "getFeatureReport deviceID=" + deviceID);
//Log.v(TAG, "getFeatureReport deviceID=" + deviceID);
HIDDevice device;
device = getDevice(deviceID);
if (device == null) {
@@ -675,7 +659,7 @@ public class HIDDeviceManager {
private native void HIDDeviceRegisterCallback();
private native void HIDDeviceReleaseCallback();
native void HIDDeviceConnected(int deviceID, String identifier, int vendorId, int productId, String serial_number, int release_number, String manufacturer_string, String product_string, int interface_number);
native void HIDDeviceConnected(int deviceID, String identifier, int vendorId, int productId, String serial_number, int release_number, String manufacturer_string, String product_string, int interface_number, int interface_class, int interface_subclass, int interface_protocol);
native void HIDDeviceOpenPending(int deviceID);
native void HIDDeviceOpenResult(int deviceID, boolean opened);
native void HIDDeviceDisconnected(int deviceID);
@@ -11,6 +11,7 @@ class HIDDeviceUSB implements HIDDevice {
protected HIDDeviceManager mManager;
protected UsbDevice mDevice;
protected int mInterfaceIndex;
protected int mInterface;
protected int mDeviceId;
protected UsbDeviceConnection mConnection;
@@ -20,16 +21,17 @@ class HIDDeviceUSB implements HIDDevice {
protected boolean mRunning;
protected boolean mFrozen;
public HIDDeviceUSB(HIDDeviceManager manager, UsbDevice usbDevice, int interface_number) {
public HIDDeviceUSB(HIDDeviceManager manager, UsbDevice usbDevice, int interface_index) {
mManager = manager;
mDevice = usbDevice;
mInterface = interface_number;
mInterfaceIndex = interface_index;
mInterface = mDevice.getInterface(mInterfaceIndex).getId();
mDeviceId = manager.getDeviceIDForIdentifier(getIdentifier());
mRunning = false;
}
public String getIdentifier() {
return String.format("%s/%x/%x", mDevice.getDeviceName(), mDevice.getVendorId(), mDevice.getProductId());
return String.format("%s/%x/%x/%d", mDevice.getDeviceName(), mDevice.getVendorId(), mDevice.getProductId(), mInterfaceIndex);
}
@Override
@@ -88,6 +90,7 @@ class HIDDeviceUSB implements HIDDevice {
return result;
}
@Override
public UsbDevice getDevice() {
return mDevice;
}
@@ -104,19 +107,15 @@ class HIDDeviceUSB implements HIDDevice {
return false;
}
// Force claim all interfaces
for (int i = 0; i < mDevice.getInterfaceCount(); i++) {
UsbInterface iface = mDevice.getInterface(i);
if (!mConnection.claimInterface(iface, true)) {
Log.w(TAG, "Failed to claim interfaces on USB device " + getDeviceName());
close();
return false;
}
// Force claim our interface
UsbInterface iface = mDevice.getInterface(mInterfaceIndex);
if (!mConnection.claimInterface(iface, true)) {
Log.w(TAG, "Failed to claim interfaces on USB device " + getDeviceName());
close();
return false;
}
// Find the endpoints
UsbInterface iface = mDevice.getInterface(mInterface);
for (int j = 0; j < iface.getEndpointCount(); j++) {
UsbEndpoint endpt = iface.getEndpoint(j);
switch (endpt.getDirection()) {
@@ -166,7 +165,7 @@ class HIDDeviceUSB implements HIDDevice {
UsbConstants.USB_TYPE_CLASS | 0x01 /*RECIPIENT_INTERFACE*/ | UsbConstants.USB_DIR_OUT,
0x09/*HID set_report*/,
(3/*HID feature*/ << 8) | report_number,
0,
mInterface,
report, offset, length,
1000/*timeout millis*/);
@@ -210,7 +209,7 @@ class HIDDeviceUSB implements HIDDevice {
UsbConstants.USB_TYPE_CLASS | 0x01 /*RECIPIENT_INTERFACE*/ | UsbConstants.USB_DIR_IN,
0x01/*HID get_report*/,
(3/*HID feature*/ << 8) | report_number,
0,
mInterface,
report, offset, length,
1000/*timeout millis*/);
@@ -250,10 +249,8 @@ class HIDDeviceUSB implements HIDDevice {
mInputThread = null;
}
if (mConnection != null) {
for (int i = 0; i < mDevice.getInterfaceCount(); i++) {
UsbInterface iface = mDevice.getInterface(i);
mConnection.releaseInterface(iface);
}
UsbInterface iface = mDevice.getInterface(mInterfaceIndex);
mConnection.releaseInterface(iface);
mConnection.close();
mConnection = null;
}
@@ -283,10 +283,6 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
return;
}
if (mHIDDeviceManager != null) {
mHIDDeviceManager.setFrozen(true);
}
SDLActivity.handleNativeState();
}
@@ -298,10 +294,6 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
return;
}
if (mHIDDeviceManager != null) {
mHIDDeviceManager.setFrozen(false);
}
SDLActivity.handleNativeState();
}
@@ -310,6 +302,10 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
protected void onPause() {
Log.v(TAG, "onPause()");
super.onPause();
if (mHIDDeviceManager != null) {
mHIDDeviceManager.setFrozen(true);
}
if (!mHasMultiWindow) {
pauseNativeThread();
}
@@ -319,6 +315,10 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
protected void onResume() {
Log.v(TAG, "onResume()");
super.onResume();
if (mHIDDeviceManager != null) {
mHIDDeviceManager.setFrozen(false);
}
if (!mHasMultiWindow) {
resumeNativeThread();
}
@@ -730,7 +730,7 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
}
}
if (bShouldWait) {
if (bShouldWait && (SDLActivity.getContext() != null)) {
// We'll wait for the surfaceChanged() method, which will notify us
// when called. That way, we know our current size is really the
// size we need, instead of grabbing a size that's still got
@@ -783,6 +783,7 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
public static native void nativeSetenv(String name, String value);
public static native void onNativeOrientationChanged(int orientation);
public static native void nativeAddTouch(int touchId, String name);
public static native void nativePermissionResult(int requestCode, boolean result);
/**
* This method is called by SDL using JNI.
@@ -817,39 +818,62 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
*/
public void setOrientationBis(int w, int h, boolean resizable, String hint)
{
int orientation = -1;
int orientation_landscape = -1;
int orientation_portrait = -1;
/* If set, hint "explicitly controls which UI orientations are allowed". */
if (hint.contains("LandscapeRight") && hint.contains("LandscapeLeft")) {
orientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE;
orientation_landscape = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE;
} else if (hint.contains("LandscapeRight")) {
orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
orientation_landscape = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
} else if (hint.contains("LandscapeLeft")) {
orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
} else if (hint.contains("Portrait") && hint.contains("PortraitUpsideDown")) {
orientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT;
} else if (hint.contains("Portrait")) {
orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
} else if (hint.contains("PortraitUpsideDown")) {
orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
orientation_landscape = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
}
/* no valid hint */
if (orientation == -1) {
if (hint.contains("Portrait") && hint.contains("PortraitUpsideDown")) {
orientation_portrait = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT;
} else if (hint.contains("Portrait")) {
orientation_portrait = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
} else if (hint.contains("PortraitUpsideDown")) {
orientation_portrait = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
}
boolean is_landscape_allowed = (orientation_landscape == -1 ? false : true);
boolean is_portrait_allowed = (orientation_portrait == -1 ? false : true);
int req = -1; /* Requested orientation */
/* No valid hint, nothing is explicitly allowed */
if (!is_portrait_allowed && !is_landscape_allowed) {
if (resizable) {
/* no fixed orientation */
/* All orientations are allowed */
req = ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR;
} else {
if (w > h) {
orientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE;
/* Fixed window and nothing specified. Get orientation from w/h of created window */
req = (w > h ? ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE : ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
}
} else {
/* At least one orientation is allowed */
if (resizable) {
if (is_portrait_allowed && is_landscape_allowed) {
/* hint allows both landscape and portrait, promote to full sensor */
req = ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR;
} else {
orientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT;
/* Use the only one allowed "orientation" */
req = (is_landscape_allowed ? orientation_landscape : orientation_portrait);
}
} else {
/* Fixed window and both orientations are allowed. Choose one. */
if (is_portrait_allowed && is_landscape_allowed) {
req = (w > h ? orientation_landscape : orientation_portrait);
} else {
/* Use the only one allowed "orientation" */
req = (is_landscape_allowed ? orientation_landscape : orientation_portrait);
}
}
}
Log.v("SDL", "setOrientation() orientation=" + orientation + " width=" + w +" height="+ h +" resizable=" + resizable + " hint=" + hint);
if (orientation != -1) {
mSingleton.setRequestedOrientation(orientation);
}
Log.v("SDL", "setOrientation() requestedOrientation=" + req + " width=" + w +" height="+ h +" resizable=" + resizable + " hint=" + hint);
mSingleton.setRequestedOrientation(req);
}
/**
@@ -976,6 +1000,9 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
if (Build.MANUFACTURER.equals("Amlogic") && Build.MODEL.equals("X96-W")) {
return true;
}
if (Build.MANUFACTURER.equals("Amlogic") && Build.MODEL.startsWith("TV")) {
return true;
}
return false;
}
@@ -985,6 +1012,9 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
public static boolean isTablet() {
DisplayMetrics metrics = new DisplayMetrics();
Activity activity = (Activity)getContext();
if (activity == null) {
return false;
}
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
double dWidthInches = metrics.widthPixels / (double)metrics.xdpi;
@@ -1000,6 +1030,9 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
* This method is called by SDL using JNI.
*/
public static boolean isChromebook() {
if (getContext() == null) {
return false;
}
return getContext().getPackageManager().hasSystemFeature("org.chromium.arc.device_management");
}
@@ -1571,6 +1604,32 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
}
return true;
}
/**
* This method is called by SDL using JNI.
*/
public static void requestPermission(String permission, int requestCode) {
if (Build.VERSION.SDK_INT < 23) {
nativePermissionResult(requestCode, true);
return;
}
Activity activity = (Activity)getContext();
if (activity.checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
activity.requestPermissions(new String[]{permission}, requestCode);
} else {
nativePermissionResult(requestCode, true);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
nativePermissionResult(requestCode, true);
} else {
nativePermissionResult(requestCode, false);
}
}
}
/**
@@ -1596,7 +1655,7 @@ class SDLMain implements Runnable {
Log.v("SDL", "Finished main function");
if (SDLActivity.mSingleton.isFinishing()) {
if (SDLActivity.mSingleton == null || SDLActivity.mSingleton.isFinishing()) {
// Activity is already being destroyed
} else {
// Let's finish the Activity
+2 -2
View File
@@ -1,13 +1,13 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.3.61'
ext.kotlin_version = '1.3.72'
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0'
classpath 'com.android.tools.build:gradle:4.0.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
+2 -2
View File
@@ -1,6 +1,6 @@
#Mon Oct 23 13:51:26 PDT 2017
#Mon Aug 10 12:24:31 JST 2020
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
+1
View File
@@ -33,6 +33,7 @@
#cmakedefine QUIET_MIDI @QUIET_MIDI@
#cmakedefine HAVE_GETLOGIN @HAVE_GETLOGIN@
#cmakedefine HAVE_JPEG @HAVE_JPEG@
#cmakedefine HAVE_MMAP @HAVE_MMAP@
#cmakedefine HAVE_SDLJOY @HAVE_SDLJOY@
#cmakedefine HAVE_SIGACTION @HAVE_SIGACTION@
+1 -1
View File
@@ -27,7 +27,7 @@
Midi : MIDIデータ
Data : その他データ
Save : セーブデータ
Resouce : リソースファイル(マウスカーソル形状)
Resource : リソースファイル(マウスカーソル形状)
Ain : DLL とその関数の情報のかかれた System39.ain
BGM : BGMデータ(エスカレイヤー以降のBGMデータファイル)
WAI : PCMデータの追加情報 (mixer channel 情報等)
-4
View File
@@ -225,10 +225,6 @@
-devjoy name : joystick のデバイス名を name にします
-savekanji # : ゲーム内でファイル名を指定してセーブデータを記録するとき、
日本語のファイル名を UTF-8 と SJIS のどちらで保存するかを
指定します。(# は 0 または 1 ... 0:utf-8, 1:sjis)
-version : バージョン情報を表示します。
-fullscreen : フルスクリーンでゲームを実行します。
+49 -49
View File
@@ -84,7 +84,7 @@
必要に応じてシナリオ内の変数に読み込みます。
f) リソースファイルは、マウスカーソルの形状とアニメーションマウスカーソルの
データを格納しています。これまで DARCROW でのみ使用されました。
データを格納しています。これまで DARCROWS でのみ使用されました。
g) セーブデータは、システム管理情報と数値変数、文字列変数のすべてを含んだ
全セーブデータ(*.asd)と数値変数・文字列変数の一部を保存したデータの2種類が
@@ -94,17 +94,17 @@
h) その他のデータの範疇に入るものとしては外字ファイルとデータファイルがあり
ます。
外字ファイルは、PC9801の外字領域に16x16ドットのビットマップデータを並べた
もので、オリジナルの外字を表示させるのに加えて、98機種依存文字の吸収も目指
もので、オリジナルの外字を表示させるのに加えて、PC98機種依存文字の吸収も目指
していたのですが、結局外字ファイルは「いけないかつみ先生」で使われたのみで、
SYSTEM35.EXE Version 2.x 以降ではサポートすらされなくなりました。また、機種
依存文字(まる文字やギリシャ数字など)はそれ以降のゲームでも機種存のコードで
依存文字(まる文字やギリシャ数字など)はそれ以降のゲームでも機種存のコードで
継続して使われています。SYSTEM 3.9 では再び外字のサポートが復活するようです。
データファイルは、基本的には、シナリオ変数を外部に保存したものと考える事
ができます。マップデータのようにあらかじめゲームに附属しているものもあれば、
ゲームの途中経過を記録するために、ファイルに書き出す事もあります。
かえるにょぱにょんのマップデータ等のように e)のデータファイルで代用でき
ものもあります。
かえるにょぱにょんのマップデータ等のように e)のデータファイルで代用でき
ものもあります。
3. データファイル (.ald) のフォーマット
@@ -143,15 +143,15 @@
data そのものについても、ヘッダと実データに分ける事が出来ます。ヘッダは
32バイト以上の長さで次のようになっています。
int32 prt;
int32 ptr;
int32 size;
int32 time_l;
int32 time_h;
char name[?];
ptr は実際のデータへのヘッダからの相対アドレスです。size はデータの大きさを
表します。 time_l と time_h は Windows 特有(?)の値で、データの作成時間をユリ
ウス歴の最初の日付からの経過時間をナノ秒で表したものです。name はアーカイブ
表します。 time_l と time_h は Windows の FILETIME 型の値で、データの作成時
を1601-01-01からの100ナノ秒単位の経過時間で表したものです。name はアーカイブ
する前のデータのファイル名で、16バイト以上の長さがあります。16バイト未満の時
は0でパディングされます。またヘッダとデータを併せて 256バイト単位になるよう
にデータの後ろは0でパディングされます。
@@ -200,26 +200,26 @@
int16 width;
int16 height;
int8 rsv;
int8 pallet_bank;
int8 palette_bank;
int8 pal[3*16];
(x0,y0) は、CGを表示する位置を表します。シナリオから表示位置の指定のない場合
この値を使います。x0 は 8で割った大きさになっていますので、x0=10 とあった
合は実際には (80,y0) の位置に表示します。
この値を使います。x0 は 8で割った大きさになっていますので、x0=10 とあった
合は実際には (80,y0) の位置に表示します。
(width, height) は CG の大きさを表します。widthは実際には8で割った大きさに
なっています。これは、プレーン型のデータが元になっているためです。プレーン型
のデータの場合、1バイトで表されるのは8ピクセル分だったため、width にいれる
値は占めるバイト数を格納した方が有利だっためと考えられます。よってCGの横の
値は占めるバイト数を格納した方が有利だっためと考えられます。よってCGの横の
サイズは常に8の倍数になります。8の倍数以外にしたい場合は、余る部分を透過
パレット(スプライト)とする事で実現出来ます。
rsv は現在のところ、使われていません。
pallet_bank は、SYSTEM 3 の時代に 256色対応ゲームで、VSPファイルを読み込ませ
palette_bank は、SYSTEM 3 の時代に 256色対応ゲームで、VSPファイルを読み込ませ
るために、256個のパレットのどの場所に 16色分のパレットを置くかを決めます。
bank=0 で 0-15, bank=1 で 16-31 となります。実装方法としては、plane->packed
の変換の際に上位4bitにpalletを置いた場所の bitを立てます。bank=1 なら '| 0x10'
の変換の際に上位4bitにpaletteを置いた場所の bitを立てます。bank=1 なら '| 0x10'
という具合です。シナリオ側からパレットバンクを指定することもできます。しかし、
シナリオ側から1度もパレットバンクの指定が無い場合はこのヘッダ内の情報が使用
されます。(これは実装依存かもしれません)
@@ -234,7 +234,7 @@
です。
00, len;
一つ上のプレーンと(len+1)の長さだけ同じ
同じプレーンの一つ左の列と(len+1)の長さだけ同じ
01, len, pic;
1バイト(pic)の繰り返し。長さは(len+1)
@@ -277,32 +277,32 @@
int8 bpp;
int8 bppS;
int8 trans_pal;
int16 palett_bank;
int32 rsv;
int8 rsv1;
int16 palette_bank;
int32 rsv2;
int32 x0;
int32 y0;
int32 width;
int32 height;
int32 data_ptr;
int32 pallet_ptr;
int32 palette_ptr;
int32 comment_ptr;
sig はデータのマジックナンバーで 'PM' というデータが入っています。
ver はデータのバージョンで、現在は 1 が入っています。
bpp はデータの bit per pixel で 8または16です。256色データの場合は 8、64k色
の場合は 16です。
bpp はデータの bits per pixel で256色データの場合は 8、64k色の場合は16です。
bppsはαチャンネルの bit per pixel で通常は8です。
bppsはαチャンネルの bits per pixel で通常は8です。
trans_pal は透過するパレットの番号です。通常はシナリオから指定が来るので
使用しません。
pallet_bank は データの中のパレットのどの部分をシステムに転送するかを
palette_bank は データの中のパレットのどの部分をシステムに転送するかを
表します。通常は 256個全部転送するのですが、CGデータがそれ以下しか色を使って
ない場合には、一部のみ転送することができます。pallet_bank は 16bit の情報を
持ち 256個を 16個つに分割してどの部分を転送するかを指定します。bit-on で
ない場合には、一部のみ転送することができます。palette_bank は 16bit の情報を
持ち 256個を 16個つに分割してどの部分を転送するかを指定します。bit-on で
転送です。LSB が0-15, MSB が 240-255 です。
(x0, y0) は CG の表示位置です。VSP と違って8で割った大きさではなく実際の
@@ -312,10 +312,10 @@
data_ptr はデータ先頭からピクセルデータへの相対アドレスが入ります。
pallet_ptr は bppが8の場合にはパレットへの相対アドレスが入りますが、
palette_ptr は bppが8の場合にはパレットへの相対アドレスが入りますが、
16の場合にはαチャンネルデータへの相対アドレスが入ります。
comment_prt はデータにコメントをつける事ができて、そのデータへの相対アドレス
comment_ptr はデータにコメントをつける事ができて、そのデータへの相対アドレス
を指定します。
パレット
@@ -333,31 +333,31 @@
2つ上のラインと同じ。長さは (len+3:8bit, len+2:16bit)
0xfd, len, pic,
1byte の picデータの連続。長さは (len+4:8bit, len+3:16bit)
1ピクセルの picデータの連続。長さは (len+4:8bit, len+3:16bit)
0xfc, len, pic1, pic2
2byte (pic1, pic2) データの連続。長さは ((len+3)*2:8bit, ((len+2)*2):16bit))
2ピクセル (pic1, pic2) データの連続。長さは ((len+3)*2:8bit, (len+2)*2:16bit)
0xfb
左上のデータと同じ。(PMS16専用)
左上のピクセルと同じ。(PMS16専用)
0xfa
右上のデータと同じ。(PMS16専用)
右上のピクセルと同じ。(PMS16専用)
0xf9, len, pic_h, pic_l1, pic_l2, .... (PMS16専用)
ピクセル間の色の差が小さいものの連続。長さは(len+1)
各ピクセルのうち、R の上位 3bit, G の 2bit, B の 2bit が同じで、R の下位
各ピクセルのうち、R の上位 3bit, G の 2bit, B の 3bit が同じで、R の下位
2bit, G の 4bit, B の 2bit が異なるとき、下位の異なる部分のみを pic_l2,
pic_l3... で表す。( RGB は 5bit, 6bit, 5bit で表される)
pic_h, pic_l1 で最初のピクセルを構成し、ここから、RGB の上位が同じで、下位の
異なる部分を pic_l2, pic_l3... で構成する
異なる部分を pic_l2, pic_l3... で構成する
0xf8, pic
picそのもの。コードと同じピクセル用。8bit では pic は 1byte, 16bit では 2byte.
0xf7-0x00
データそのもの 8bitでは 1byte, 16bit では 00-f7 の次のコードはすべて(00-ff)
使用してピクセルを構成。
データそのもの 8bitでは 1byte, 16bit では次の 1byte と合わせてピクセルを
構成。
4.3 QNT フォーマット
@@ -380,7 +380,7 @@
int32 width;
int32 height;
int32 bpp;
int32 rsv(?)
int32 rsv; (?)
int32 pixel_size;
int32 alpha_size;
@@ -420,7 +420,7 @@
header_size はヘッダの大きさをバイト数で表しています。Version 0 では 48
バイト固定です。
(x0, y0) は CG の表示位置の指定です
(x0, y0) は CG の表示位置の指定です
(width, height) は CG の大きさの指定です。
@@ -472,8 +472,8 @@
最新のものでは 'S380' となっています。途中混乱した時期があってこれと異なる
場合もあります。
dat_prt は実際のシナリオデータの先頭への相対アドレスです。また、シナリオ中の
ジャンプ命令のアドレスは、上のヘッダの最初からの相対アドレスを使用します。
data_ptr は実際のシナリオデータの先頭アドレスです。また、シナリオ中の
ジャンプ命令のアドレスは、上のヘッダの先頭からの相対アドレスを使用します。
size はヘッダを含めたデータのサイズを示しています。
@@ -534,21 +534,21 @@
04h 演算子(>= 以上)
数値は0から65535までの正の整数を扱えます。しかし、計算式上では word 定数は
3FFFh しかあつかえませんので、それ以上の値を扱う場合は演算子を使います。
3FFFh までしかあつかえませんので、それ以上の値を扱う場合は演算子を使います。
65536 以上の数値を扱ったり、浮動小数を扱う場合は、64ビット変数を使用します。
配列を除く変数の最大は論理的には16384 個ですが、実際には 2000 以下に実装上
限界があります。1000 以上になる場合は、配列変数を有効に使うと良いでしょう。
配列を除く変数は論理的には最大 16384 個ですが、実際には 2000 以下に実装上
限界があります。1000 以上になる場合は、配列変数を有効に使うと良いでしょう。
(xsystem35 の場合は 1024, 1.5.1pre1から 8192)
変数には、数値変数と配列変数があります。配列変数は、index 変数を用いた
アクセス方法と、var[]のようなアクセス方法があります。var[]では上の 3.51拡張
コードを使用して C0, 01, base_h, base_l, cali: というコーディングがなされま
コードを使用して C0, 01, base_h, base_l, cali: というエンコードがなされま
す。配列のベースとなる変数が (base_h << 8) + base_l で表され、インデックスは
cali で指定されます。インデックスは配列変数も使用可能です。ex. var10[var20[5]]
cali で指定されます。インデックスは配列参照も使用可能です。ex. var10[var20[5]]
計算式は逆ポーランド記述で格納されますので、基本的な処理はスタックからつの
数値または変数と1つの演算子を取り出して演算し、結果をスタックに戻します。
計算式は逆ポーランド記述で格納されますので、基本的な処理はスタックからつの
演算子と2つの数値または変数を取り出して演算し、結果をスタックに戻します。
この操作を 0x7f が出現するまで繰り返します。0x7f が来たら、スタックに残って
いる数値を取り出します。コマンドの引数として変数を要求している場合の計算式
は、変数へのポインタを返します。
@@ -657,8 +657,8 @@
wav** など小文字系のコマンドはすべて 0x2f, 0x??, にエンコードされます。
また引数として文字列を含むもの(ファイル名など)は、従来は ':' で終っていました
が、system 3.8 以降では '\0' で終わるようになり、これらコマンドは新規に 0x2f
コマンドとして新規に割り当てられました。
が、system 3.8 以降では '\0' で終わるようになり、これらコマンドは新規に
0x2f コマンドとして割り当てられました。
0x2f, 0x0a, cali *2: [wavLoad]
0x2f, 0x0b, cali *2: [wavPlay]
@@ -807,7 +807,7 @@
ここでは、コマンド表に載っていないけど、ゲームに出て来るものを紹介します。
5.8.1 VA
* 機能: ユニットアニメーション (かえるにょ・ぱにょん初出)
* 機能: ユニットアニメーション (かえるにょ・ぱにょん初出)
* フォーマット: VA getd, cali, cali, cali:
* VA0 : 制御用コマンド
@@ -821,7 +821,7 @@
VA0, no, 1, num:
no番のアニメーション開始。すぐに制御を戻す。
numはコマ数, 0の場合と開始位置と終了位置が同じな時はアニメーションは
動かずにコマ数だけが無限にされるカウント。
動かずにコマ数だけが無限にカウントされる
VA0, no, 2, num:
no番のアニメーション開始。終るまで制御を戻さない。
+4 -4
View File
@@ -10,12 +10,12 @@ find_program(PYFTSUBSET_FOUND pyftsubset)
if (PYFTSUBSET_FOUND)
add_custom_target(fonts
pyftsubset SourceHanSerifJP-Regular.otf --text-file=uchars.txt --output-file=${CMAKE_CURRENT_SOURCE_DIR}/mincho.otf
DEPENDS uchars.txt SourceHanSerifJP-Regular.otf)
pyftsubset SourceHanSerifJP-Regular.otf --text-file=uchars.txt --output-file=${CMAKE_CURRENT_SOURCE_DIR}/mincho.otf
DEPENDS uchars.txt SourceHanSerifJP-Regular.otf)
add_custom_command(OUTPUT uchars.txt
COMMAND uchars > uchars.txt)
COMMAND uchars > uchars.txt)
add_custom_command(OUTPUT SourceHanSerifJP-Regular.otf
COMMAND wget -O SourceHanSerifJP-Regular.otf https://github.com/adobe-fonts/source-han-serif/blob/release/SubsetOTF/JP/SourceHanSerifJP-Regular.otf?raw=true)
COMMAND wget -O SourceHanSerifJP-Regular.otf https://github.com/adobe-fonts/source-han-serif/blob/release/SubsetOTF/JP/SourceHanSerifJP-Regular.otf?raw=true)
endif()
+21
View File
@@ -0,0 +1,21 @@
#!/bin/sh
# To use this script in MSYS2 shell, install mingw-w64-x86_64-nsis and
# mingw-w64-x86_64-ntldd-git packages.
if [ $# -ne 2 ]; then
echo 'Usage: make-installer.sh <build-dir> <nsi>'
exit 1
fi
builddir=$1
nsi=$2
echo 'dlls.nsi:'
ntldd -R $builddir/src/xsystem35.exe |perl -ne 'print "File \"$1\"\n" if /=> (.*) \(/' |grep mingw |tee $builddir/dlls.nsi
echo
echo 'dlls-uninstall.nsi:'
sed 's/^File ".*\\/Delete "$INSTDIR\\/' $builddir/dlls.nsi |tee $builddir/dlls-uninstall.nsi
echo
makensis -INPUTCHARSET UTF8 -DBUILDDIR="$builddir" "$nsi"
+5
View File
@@ -0,0 +1,5 @@
Unicode true
Name xsystem35
OutFile xsystem35-32bit.exe
InstallDir $PROGRAMFILES32\xsystem35
!include xsystem35.nsi
+5
View File
@@ -0,0 +1,5 @@
Unicode true
Name xsystem35
OutFile xsystem35-64bit.exe
InstallDir $PROGRAMFILES64\xsystem35
!include xsystem35.nsi
+77
View File
@@ -0,0 +1,77 @@
ManifestDPIAware true
SetCompressor /SOLID lzma
LoadLanguageFile "${NSISDIR}\Contrib\Language files\English.nlf"
LoadLanguageFile "${NSISDIR}\Contrib\Language files\Japanese.nlf"
Page license
Page directory
Page components
Page instfiles
UninstPage uninstConfirm
UninstPage instfiles
LicenseData ..\COPYING
!define SHCNE_ASSOCCHANGED 0x08000000
!define SHCNF_IDLIST 0
Function RefreshShellIcons
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v \
(${SHCNE_ASSOCCHANGED}, ${SHCNF_IDLIST}, 0, 0)'
FunctionEnd
Section
SetOutPath $INSTDIR
FILE ${BUILDDIR}\src\xsystem35.exe
!include ${BUILDDIR}\dlls.nsi
SetOutPath $INSTDIR\fonts
FILE /x CMakeLists.txt ..\fonts\*.*
WriteUninstaller $INSTDIR\uninstall.exe
WriteRegStr HKLM "Software\Kichikuou\xsystem35\profile" "ttfont_gothic" "$INSTDIR\fonts\MTLc3m.ttf"
WriteRegStr HKLM "Software\Kichikuou\xsystem35\profile" "ttfont_mincho" "$INSTDIR\fonts\mincho.otf"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\xsystem35" "DisplayName" "xsystem35 (remove only)"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\xsystem35" "UninstallString" '"$INSTDIR\uninstall.exe"'
SectionEnd
LangString FileAssociation ${LANG_ENGLISH} "Associate with .ALD file type"
LangString FileAssociation ${LANG_JAPANESE} ".ALD ファイルに関連付け"
Section "$(FileAssociation)"
WriteRegStr HKCR ".ald" "" "System35Archive"
WriteRegStr HKCR "System35Archive" "" "AliceSoft System 3.x archive"
WriteRegStr HKCR "System35Archive\DefaultIcon" "" "$INSTDIR\xsystem35.exe,0"
WriteRegStr HKCR "System35Archive\shell\open\command" "" '"$INSTDIR\xsystem35.exe" "%1"'
Call RefreshShellIcons
SectionEnd
LangString DesktopIcon ${LANG_ENGLISH} "Create Desktop icon"
LangString DesktopIcon ${LANG_JAPANESE} "デスクトップショートカットを作成"
Section "$(DesktopIcon)"
CreateShortcut $DESKTOP\xsystem35.lnk $INSTDIR\xsystem35.exe
SectionEnd
LangString StartMenu ${LANG_ENGLISH} "Create Start menu entry"
LangString StartMenu ${LANG_JAPANESE} "スタートメニューに登録"
Section "$(StartMenu)"
CreateDirectory $SMPROGRAMS\xsystem35
CreateShortcut $SMPROGRAMS\xsystem35\xsystem35.lnk $INSTDIR\xsystem35.exe
CreateShortcut $SMPROGRAMS\xsystem35\uninstall.lnk $INSTDIR\uninstall.exe
SectionEnd
Section "Uninstall"
Delete $DESKTOP\xsystem35.lnk
RMDir /r $SMPROGRAMS\xsystem35
DeleteRegKey HKCR ".ald"
DeleteRegKey HKCR "System35Archive"
DeleteRegKey HKLM "Software\Kichikuou\xsystem35"
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\xsystem35"
RMDir /r $INSTDIR\fonts
Delete $INSTDIR\uninstall.exe
Delete $INSTDIR\xsystem35.exe
!include ${BUILDDIR}\dlls-uninstall.nsi
RMDir $INSTDIR
SectionEnd
+11 -3
View File
@@ -5,9 +5,10 @@
#include "portab.h"
#include "system.h"
#include "xsystem35.h"
#include "modules.h"
#include "nact.h"
void Init() {
static void Init() {
int p1 = getCaliValue(); /* ISys3x */
int p2 = getCaliValue(); /* IWinMsg */
int p3 = getCaliValue(); /* ITimer */
@@ -18,17 +19,24 @@ void Init() {
DEBUG_COMMAND_YET("AliceLogo.Init %d,%d,%d,%p:\n", p1, p2, p3, var);
}
void SetWaveNum() {
static void SetWaveNum() {
int p1 = getCaliValue();
int p2 = getCaliValue();
DEBUG_COMMAND_YET("AliceLogo.SetWaveNum %d,%d:\n", p1, p2);
}
void Run() {
static void Run() {
int p1 = getCaliValue();
int p2 = getCaliValue();
DEBUG_COMMAND_YET("AliceLogo.Run %d,%d:\n", p1, p2);
}
static const ModuleFunc functions[] = {
{"Init", Init},
{"Run", Run},
{"SetWaveNum", SetWaveNum},
};
const Module module_AliceLogo = {"AliceLogo", functions, sizeof(functions) / sizeof(ModuleFunc)};
-3
View File
@@ -1,3 +0,0 @@
add_library(AliceLogo MODULE AliceLogo.c)
install(TARGETS AliceLogo DESTINATION lib/xsystem35)
+87 -30
View File
@@ -1,33 +1,90 @@
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
if (APPLE)
add_link_options("SHELL:-undefined dynamic_lookup")
endif()
include_directories(${CMAKE_SOURCE_DIR}/src)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../src)
add_subdirectory(lib)
add_subdirectory(AliceLogo)
add_subdirectory(Confirm)
add_subdirectory(Gpx)
add_subdirectory(Math)
add_subdirectory(MsgSkip)
add_subdirectory(NIGHTDLL)
add_subdirectory(NightDemonDemo)
add_subdirectory(RandMT)
add_subdirectory(SACT)
add_subdirectory(ShArray)
add_subdirectory(ShCalc)
add_subdirectory(ShGraph)
add_subdirectory(ShPort)
add_subdirectory(ShSound)
add_subdirectory(ShString)
add_subdirectory(dDemo)
add_subdirectory(eDemo)
add_subdirectory(eeDemo)
add_subdirectory(nDEMO)
add_subdirectory(nDEMOE)
add_subdirectory(oDEMO)
add_subdirectory(oujimisc)
add_subdirectory(tDemo)
add_library(modules STATIC
modules.c
AliceLogo/AliceLogo.c
Confirm/Confirm.c
Gpx/Gpx.c
Gpx/effectcopy.c
Math/Math.c
MsgSkip/MsgSkip.c
NIGHTDLL/NIGHTDLL.c
NIGHTDLL/nt_scenario.c
NIGHTDLL/sactcg.c
NIGHTDLL/sactstring.c
NIGHTDLL/sprite.c
NIGHTDLL/sprite_draw.c
NIGHTDLL/sprite_update.c
NIGHTDLL/sprite_eupdate.c
NIGHTDLL/nt_event.c
NIGHTDLL/nt_msg.c
NIGHTDLL/nt_sel.c
NIGHTDLL/nt_graph.c
NIGHTDLL/nt_sound.c
NightDemonDemo/NightDemonDemo.c
RandMT/RandMT.c
SACT/SACT.c
SACT/sactcg.c
SACT/sactsound.c
SACT/sactbgm.c
SACT/sacttimer.c
SACT/sactstring.c
SACT/sactcrypto.c
SACT/sactchart.c
SACT/sactamask.c
SACT/sactlog.c
SACT/sprite.c
SACT/sprite_event.c
SACT/sprite_tevent.c
SACT/sprite_move.c
SACT/sprite_anime.c
SACT/sprite_get.c
SACT/sprite_put.c
SACT/sprite_switch.c
SACT/sprite_sel.c
SACT/sprite_msg.c
SACT/sprite_draw.c
SACT/sprite_update.c
SACT/sprite_eupdate.c
SACT/sprite_quake.c
SACT/sprite_keywait.c
SACT/screen_quake.c
SACT/sprite_xmenu.c
ShArray/ShArray.c
ShCalc/ShCalc.c
ShGraph/ShGraph.c
ShPort/ShPort.c
ShSound/ShSound.c
ShString/ShString.c
dDemo/dDemo.c
eDemo/eDemo.c
eeDemo/eeDemo.c
nDEMO/nDEMO.c
nDEMOE/nDEMOE.c
oDEMO/oDEMO.c
oujimisc/oujimisc.c
tDemo/tDemo.c
)
target_include_directories(modules PUBLIC .)
target_compile_options(modules PRIVATE -Wno-pointer-sign)
target_link_libraries(modules PRIVATE graph alk drawtext list)
if (SDL2MIXER_FOUND)
if (ANDROID)
target_link_libraries(modules PRIVATE SDL2 SDL2_mixer)
else()
target_link_libraries(modules PRIVATE PkgConfig::SDL2MIXER)
endif()
endif()
if (HAVE_JPEG)
target_sources(modules PRIVATE
NightDemonDemo/ndd.c
NightDemonDemo/jpeg2surface.c
)
target_link_libraries(modules PRIVATE JPEG::JPEG)
endif()
-3
View File
@@ -1,3 +0,0 @@
add_library(Confirm MODULE Confirm.c)
install(TARGETS Confirm DESTINATION lib/xsystem35)
+14 -4
View File
@@ -5,14 +5,15 @@
#include "portab.h"
#include "system.h"
#include "xsystem35.h"
#include "modules.h"
#include "nact.h"
void Init() {
static void Init() {
int p1 = getCaliValue();
DEBUG_COMMAND_YET("Confirm.Init %d:\n", p1);
}
void ExistKeyFile() {
static void ExistKeyFile() {
char *p1 = sys_getString(0);
int *p2 = getCaliVariable();
int *var = getCaliVariable();
@@ -22,7 +23,7 @@ void ExistKeyFile() {
DEBUG_COMMAND_YET("Confirm.ExistKeyFile %s,%p,%p:\n",p1, p2, var);
}
void CheckProtectFile() {
static void CheckProtectFile() {
char *p1 = sys_getString(0);
int *p2 = getCaliVariable();
int *var = getCaliVariable();
@@ -32,7 +33,7 @@ void CheckProtectFile() {
DEBUG_COMMAND_YET("Confirm.CheckProtectFile %s,%p,%p:\n", p1,p2,var);
}
void CreateKeyFile() {
static void CreateKeyFile() {
char *p1 = sys_getString(0);
int *p2 = getCaliVariable();
int *var = getCaliVariable();
@@ -41,3 +42,12 @@ void CreateKeyFile() {
DEBUG_COMMAND_YET("Confirm.CreateKeyFile %s,%p,%p:\n", p1,p2,var);
}
static const ModuleFunc functions[] = {
{"CheckProtectFile", CheckProtectFile},
{"CreateKeyFile", CreateKeyFile},
{"ExistKeyFile", ExistKeyFile},
{"Init", Init},
};
const Module module_Confirm = {"Confirm", functions, sizeof(functions) / sizeof(ModuleFunc)};
-5
View File
@@ -1,5 +0,0 @@
add_library(Gpx MODULE Gpx.c effectcopy.c)
target_link_libraries(Gpx PRIVATE graph)
install(TARGETS Gpx DESTINATION lib/xsystem35)
+119 -62
View File
@@ -33,6 +33,7 @@
#include "portab.h"
#include "system.h"
#include "xsystem35.h"
#include "modules.h"
#include "nact.h"
#include "ags.h"
#include "cg.h"
@@ -119,13 +120,12 @@ static int load_cg_main(int no) {
sno = find_null_surface();
sf->no = sno;
suf[sno] = sf;
return sf->no;
return sno;
}
void Init() {
static void Init() {
/*
Gpx.Init(): Gpx モジュールの初期化
*/
@@ -140,7 +140,7 @@ void Init() {
DEBUG_COMMAND("Gpx.Init %d:\n", p1);
}
void Create() {
static void Create() {
/*
Gpx.Create(): 新規 surface の作成(PixelとAlphaマップの両方)
@@ -164,14 +164,14 @@ void Create() {
*var = 0;
} else {
int no = find_null_surface();
*var = s->no = no;
*var = no;
suf[no] = s;
}
DEBUG_COMMAND("Gpx.Create %p,%d,%d,%d:\n", var, width, height, bpp);
}
void CreatePixelOnly() {
static void CreatePixelOnly() {
/*
Gpx.CreatePixelOnly(): 新規 surface の作成(Pixelのみ)
@@ -192,14 +192,14 @@ void CreatePixelOnly() {
*var = 0;
} else {
int no = find_null_surface();
*var = s->no = no;
*var = no;
suf[no] = s;
}
DEBUG_COMMAND("Gpx.CreatePixelOnly %d,%d,%d,%d:\n", *var, width, height, bpp);
}
void CreateAMapOnly() {
static void CreateAMapOnly() {
/*
Gpx.CreateAMapOnly(): 新規 surface の作成(AlphaMapのみ)
@@ -218,14 +218,14 @@ void CreateAMapOnly() {
*var = 0;
} else {
int no = find_null_surface();
*var = s->no = no;
*var = no;
suf[no] = s;
}
DEBUG_COMMAND("Gpx.CreateAMapOnly %p,%d,%d:\n", var, width, height);
}
void IsSurface() {
static void IsSurface() {
/*
Gpx.IsSurface(): 指定の番号の surface が surface かどうか
(pixel と alpha の両方のデータを持つ)を調べる
@@ -242,13 +242,13 @@ void IsSurface() {
if (s == NULL) {
*var = 0;
} else {
*var = (s->has_alpha && s->has_pixel) ? 1 : 0;
*var = (s->alpha && s->pixel) ? 1 : 0;
}
DEBUG_COMMAND("Gpx.IsSurface %d,%p:\n", p1, var);
}
void IsPixel() {
static void IsPixel() {
/*
Gpx.IsPixel(): 指定の番号の surface が pixelデータかどうかを調べる
@@ -264,13 +264,13 @@ void IsPixel() {
if (s == NULL) {
*var = 0;
} else {
*var = s->has_pixel ? 1 : 0;
*var = s->pixel ? 1 : 0;
}
DEBUG_COMMAND("Gpx.IsPixel %d,%p:\n", p1, var);
}
void IsAlpha() {
static void IsAlpha() {
/*
Gpx.IsAlpha(): 指定の番号の surface が alpha mapかどうかを調べる
@@ -286,13 +286,13 @@ void IsAlpha() {
if (s == NULL) {
*var = 0;
} else {
*var = s->has_alpha ? 1 : 0;
*var = s->alpha ? 1 : 0;
}
DEBUG_COMMAND("Gpx.IsAlpha %d,%p:\n", p1, var);
}
void GetWidth() {
static void GetWidth() {
/*
Gpx.GetWidth(): 指定の番号の surface の幅を取得する
@@ -314,7 +314,7 @@ void GetWidth() {
DEBUG_COMMAND("Gpx.GetWidth %d,%d:\n", p1, *var);
}
void GetHeight() {
static void GetHeight() {
/*
Gpx.GetWidth(): 指定の番号の surface の高さを取得する
@@ -336,13 +336,13 @@ void GetHeight() {
DEBUG_COMMAND("Gpx.GetHeight %d,%d:\n", p1, *var);
}
void GetCreatedSurface() { /* not used ? */
static void GetCreatedSurface() { /* not used ? */
int *var = getCaliVariable();
DEBUG_COMMAND_YET("Gpx.GetCreatedSurface %p:\n", var);
}
void LoadCG() {
static void LoadCG() {
/*
Gpx.LoadCG(): 新規 surface を作成してその上に CG を load
@@ -357,21 +357,21 @@ void LoadCG() {
DEBUG_COMMAND("Gpx.LoadCG %p,%d (%d):\n", var, p1, *var);
}
void GetCGPosX() { /* not useed ? */
static void GetCGPosX() { /* not useed ? */
int *var = getCaliVariable();
int p1 = getCaliValue();
DEBUG_COMMAND_YET("Gpx.GetCgPosX %p,%d:\n", var, p1);
}
void GetCGPosY() { /* not useed ? */
static void GetCGPosY() { /* not useed ? */
int *var = getCaliVariable();
int p1 = getCaliValue();
DEBUG_COMMAND_YET("Gpx.GetCgPosY %p,%d:\n", var, p1);
}
void Free() {
static void Free() {
/*
Gpx.Free(): 指定の surface を開放する
@@ -386,7 +386,7 @@ void Free() {
}
}
void FreeAll() {
static void FreeAll() {
/*
Gpx.FreeAll(): 全ての surface を開放する
*/
@@ -395,7 +395,7 @@ void FreeAll() {
DEBUG_COMMAND("Gpx.FreeAll:\n");
}
void Copy() {
static void Copy() {
/*
Gpx.Copy(): 指定 surface 領域のコピー
@@ -426,7 +426,7 @@ void Copy() {
gr_copy(dst, dx, dy, src, sx, sy, sw, sh);
}
void CopyBright() { /* not used ? */
static void CopyBright() { /* not used ? */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -440,7 +440,7 @@ void CopyBright() { /* not used ? */
DEBUG_COMMAND_YET("Gpx.CopyBright %d,%d,%d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7, p8, p9);
}
void CopyAMap() {
static void CopyAMap() {
/*
Gpx.CopyAMap(): 指定 surface の alpha map 領域のコピー
@@ -471,7 +471,7 @@ void CopyAMap() {
gr_copy_alpha_map(dst, dx, dy, src, sx, sy, sw, sh);
}
void Blend() { /* not used ? */
static void Blend() { /* not used ? */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -485,7 +485,7 @@ void Blend() { /* not used ? */
DEBUG_COMMAND_YET("Gpx.Blend %d,%d,%d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7, p8, p9);
}
void BlendSrcBright() { /* not used ? */
static void BlendSrcBright() { /* not used ? */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -500,7 +500,7 @@ void BlendSrcBright() { /* not used ? */
DEBUG_COMMAND_YET("Gpx.BlendSrcBright %d,%d,%d,%d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
}
void BlendAddSatur() { /* not used ? */
static void BlendAddSatur() { /* not used ? */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -513,7 +513,7 @@ void BlendAddSatur() { /* not used ? */
DEBUG_COMMAND_YET("Gpx.BlendAddStatur %d,%d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7, p8);
}
void BlendAMap() {
static void BlendAMap() {
/*
Gpx.BlendAMap(): 転送元の alpha map を参照して 指定領域を alpha blend
@@ -544,7 +544,7 @@ void BlendAMap() {
gr_blend_alpha_map(dst, dx, dy, src, sx, sy, sw, sh);
}
void BlendAMapSrcOnly() { /* not used ? */
static void BlendAMapSrcOnly() { /* not used ? */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -557,7 +557,7 @@ void BlendAMapSrcOnly() { /* not used ? */
DEBUG_COMMAND_YET("Gpx.BlendAMapSrcOnly %d,%d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7, p8);
}
void BlendAMapColor() { /* not used ? */
static void BlendAMapColor() { /* not used ? */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -573,7 +573,7 @@ void BlendAMapColor() { /* not used ? */
DEBUG_COMMAND_YET("Gpx.BlendAMapColor %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11);
}
void BlendAMapColorAlpha() { /* not used ? */
static void BlendAMapColorAlpha() { /* not used ? */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -590,7 +590,7 @@ void BlendAMapColorAlpha() { /* not used ? */
DEBUG_COMMAND_YET("Gpx.BlendAMapColorAlpha %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12);
}
void BlendAMapAlpha() { /* not used ? */
static void BlendAMapAlpha() { /* not used ? */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -604,7 +604,7 @@ void BlendAMapAlpha() { /* not used ? */
DEBUG_COMMAND_YET("Gpx.BlendAMapAlpha %d,%d,%d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7, p8, p9);
}
void BlendAMapBright() { /* not used ? */
static void BlendAMapBright() { /* not used ? */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -618,7 +618,7 @@ void BlendAMapBright() { /* not used ? */
DEBUG_COMMAND_YET("Gpx.BlendAMapBright %d,%d,%d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7, p8, p9);
}
void BlendAMapAlphaSrcBright() { /* not used ? */
static void BlendAMapAlphaSrcBright() { /* not used ? */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -633,7 +633,7 @@ void BlendAMapAlphaSrcBright() { /* not used ? */
DEBUG_COMMAND_YET("Gpx.BlendAMapBright %d,%d,%d,%d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
}
void BlendUseAMapColor() { /* not used ? */
static void BlendUseAMapColor() { /* not used ? */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -650,7 +650,7 @@ void BlendUseAMapColor() { /* not used ? */
DEBUG_COMMAND_YET("Gpx.BlendUseAMapColor %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12);
}
void BlendScreen() { /* not used ? */
static void BlendScreen() { /* not used ? */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -663,7 +663,7 @@ void BlendScreen() { /* not used ? */
DEBUG_COMMAND_YET("Gpx.BlendScreen %d,%d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7, p8);
}
void BlendMultiply() { /* not used ? */
static void BlendMultiply() { /* not used ? */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -676,7 +676,7 @@ void BlendMultiply() { /* not used ? */
DEBUG_COMMAND_YET("Gpx.BlendMultiply %d,%d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7, p8);
}
void BlendScreenAlpha() { /* not used ? */
static void BlendScreenAlpha() { /* not used ? */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -690,7 +690,7 @@ void BlendScreenAlpha() { /* not used ? */
DEBUG_COMMAND_YET("Gpx.BlendScreenAlpha %d,%d,%d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7, p8, p9);
}
void Fill() {
static void Fill() {
/*
Gpx.Fill(): 指定領域の塗りつぶし
@@ -720,7 +720,7 @@ void Fill() {
gr_fill(dst, dx, dy, dw, dh, r, g, b);
}
void FillAlphaColor() { /* not used ? */
static void FillAlphaColor() { /* not used ? */
int ds = getCaliValue();
int dx = getCaliValue();
int dy = getCaliValue();
@@ -739,7 +739,7 @@ void FillAlphaColor() { /* not used ? */
gr_fill_alpha_color(dst, dx, dy, dw, dh, r, g, b, lv);
}
void FillAMap() { /* not used ? */
static void FillAMap() { /* not used ? */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -750,7 +750,7 @@ void FillAMap() { /* not used ? */
DEBUG_COMMAND_YET("Gpx.FillAMap %d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6);
}
void FillAMapOverBorder() {
static void FillAMapOverBorder() {
/*
Gpx.FillAMapOverBorder(): 矩形領域中の 閾値以上の alpha 値を持つ
ものを指定の alpha 値に置き換え。
@@ -772,13 +772,13 @@ void FillAMapOverBorder() {
int d = getCaliValue();
surface_t *dst;
DEBUG_COMMAND("Gpx.BlendAMapOverBorder %d,%d,%d,%d,%d,%d,%d:\n", ds, dx, dy, dw, dh, s, d);
DEBUG_COMMAND("Gpx.FillAMapOverBorder %d,%d,%d,%d,%d,%d,%d:\n", ds, dx, dy, dw, dh, s, d);
dst = sf_get(ds);
gr_fill_alpha_overborder(dst, dx, dy, dw, dh, s, d);
}
void FillAMapUnderBorder() { /* not used ? */
static void FillAMapUnderBorder() { /* not used ? */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -787,10 +787,10 @@ void FillAMapUnderBorder() { /* not used ? */
int p6 = getCaliValue();
int p7 = getCaliValue();
DEBUG_COMMAND_YET("Gpx.BlendAMapUnderBorder %d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7);
DEBUG_COMMAND_YET("Gpx.FillAMapUnderBorder %d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7);
}
void SaturDP_DPxSA() { /* not used ? */
static void SaturDP_DPxSA() { /* not used ? */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -803,7 +803,7 @@ void SaturDP_DPxSA() { /* not used ? */
DEBUG_COMMAND_YET("Gpx.SaturDP_DPxSA %d,%d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7, p8);
}
void ScreenDA_DAxSA() { /* not used ? */
static void ScreenDA_DAxSA() { /* not used ? */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -816,7 +816,7 @@ void ScreenDA_DAxSA() { /* not used ? */
DEBUG_COMMAND_YET("Gpx.ScreenDA_DAxSA %d,%d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7, p8);
}
void AddDA_DAxSA() { /* not used ? */
static void AddDA_DAxSA() { /* not used ? */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -829,7 +829,7 @@ void AddDA_DAxSA() { /* not used ? */
DEBUG_COMMAND_YET("Gpx.AddDA_DAxSA %d,%d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7, p8);
}
void SpriteCopyAMap() {
static void SpriteCopyAMap() {
/*
Gpx.SpriteCopyAMap(): 指定の alpha 値以外の領域の alpha map コピー
@@ -863,7 +863,7 @@ void SpriteCopyAMap() {
}
void BrightDestOnly() {
static void BrightDestOnly() {
/*
Gpx.BrightDestOnly(): 指定領域の明るさを設定
@@ -890,7 +890,7 @@ void BrightDestOnly() {
gr_bright_dst_only(dst, dx, dy, dw, dh, r);
}
void CopyTextureWrap() { /* not used ? */
static void CopyTextureWrap() { /* not used ? */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -907,7 +907,7 @@ void CopyTextureWrap() { /* not used ? */
DEBUG_COMMAND_YET("Gpx.CopyTextureWrap %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12);
}
void CopyTextureWrapAlpha() { /* not used ? */
static void CopyTextureWrapAlpha() { /* not used ? */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -925,7 +925,7 @@ void CopyTextureWrapAlpha() { /* not used ? */
DEBUG_COMMAND_YET("Gpx.CopyTextureWrapAlpha %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13);
}
void CopyStretch() {
static void CopyStretch() {
/*
Gpx.CopyStretch(): 拡大・縮小
@@ -959,7 +959,7 @@ void CopyStretch() {
gr_copy_stretch(dst, dx, dy, dw, dh, src, sx, sy, sw, sh);
}
void CopyStretchBlend() { /* not used ? */
static void CopyStretchBlend() { /* not used ? */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -975,7 +975,7 @@ void CopyStretchBlend() { /* not used ? */
DEBUG_COMMAND_YET("Gpx.CopyStretchBlend %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11);
}
void CopyStretchBlendAMap() {
static void CopyStretchBlendAMap() {
/*
Gpx.CopyStretchBlendAMap(): 拡大・縮小しながら alpha blend
@@ -1010,7 +1010,7 @@ void CopyStretchBlendAMap() {
gr_copy_stretch_blend_alpha_map(dst, dx, dy, dw, dh, src, sx, sy, sw, sh);
}
void StretchBlendScreen2x2() { /* not used ? */
static void StretchBlendScreen2x2() { /* not used ? */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -1024,7 +1024,7 @@ void StretchBlendScreen2x2() { /* not used ? */
}
void StretchBlendScreen2x2WDS() {
static void StretchBlendScreen2x2WDS() {
/*
Gpx.StretchBlenfScreen2x2WDS(): 2枚の surface を縦横2倍に拡大しつつ
alpha blend (飽和加算)する
@@ -1063,7 +1063,7 @@ void StretchBlendScreen2x2WDS() {
gr_blend_alpha_wds_stretch2x2(src1, sx1, sy1, src2, sx2, sy2, sw, sh, dst, dx, dy);
}
void BlendScreenWDS() {
static void BlendScreenWDS() {
/*
Gpx.BlendScreenWDS(): 飽和加算 alpha blend
@@ -1101,7 +1101,7 @@ void BlendScreenWDS() {
gr_blend_alpha_wds(src1, sx1, sy1, src2, sx2, sy2, sw, sh, dst, dx, dy);
}
void EffectCopy() {
static void EffectCopy() {
/*
Gpx.EffectCopy(): 効果つき領域コピー
@@ -1169,8 +1169,65 @@ void EffectCopy() {
}
void SetClickCancelFlag() { /* not used ? */
static void SetClickCancelFlag() { /* not used ? */
int p1 = getCaliValue();
DEBUG_COMMAND_YET("Gpx.SetClikCancelFlag %d:\n", p1);
}
static const ModuleFunc functions[] = {
{"AddDA_DAxSA", AddDA_DAxSA},
{"Blend", Blend},
{"BlendAMap", BlendAMap},
{"BlendAMapAlpha", BlendAMapAlpha},
{"BlendAMapAlphaSrcBright", BlendAMapAlphaSrcBright},
{"BlendAMapBright", BlendAMapBright},
{"BlendAMapColor", BlendAMapColor},
{"BlendAMapColorAlpha", BlendAMapColorAlpha},
{"BlendAMapSrcOnly", BlendAMapSrcOnly},
{"BlendAddSatur", BlendAddSatur},
{"BlendMultiply", BlendMultiply},
{"BlendScreen", BlendScreen},
{"BlendScreenAlpha", BlendScreenAlpha},
{"BlendScreenWDS", BlendScreenWDS},
{"BlendSrcBright", BlendSrcBright},
{"BlendUseAMapColor", BlendUseAMapColor},
{"BrightDestOnly", BrightDestOnly},
{"Copy", Copy},
{"CopyAMap", CopyAMap},
{"CopyBright", CopyBright},
{"CopyStretch", CopyStretch},
{"CopyStretchBlend", CopyStretchBlend},
{"CopyStretchBlendAMap", CopyStretchBlendAMap},
{"CopyTextureWrap", CopyTextureWrap},
{"CopyTextureWrapAlpha", CopyTextureWrapAlpha},
{"Create", Create},
{"CreateAMapOnly", CreateAMapOnly},
{"CreatePixelOnly", CreatePixelOnly},
{"EffectCopy", EffectCopy},
{"Fill", Fill},
{"FillAMap", FillAMap},
{"FillAMapOverBorder", FillAMapOverBorder},
{"FillAMapUnderBorder", FillAMapUnderBorder},
{"FillAlphaColor", FillAlphaColor},
{"Free", Free},
{"FreeAll", FreeAll},
{"GetCGPosX", GetCGPosX},
{"GetCGPosY", GetCGPosY},
{"GetCreatedSurface", GetCreatedSurface},
{"GetHeight", GetHeight},
{"GetWidth", GetWidth},
{"Init", Init},
{"IsAlpha", IsAlpha},
{"IsPixel", IsPixel},
{"IsSurface", IsSurface},
{"LoadCG", LoadCG},
{"SaturDP_DPxSA", SaturDP_DPxSA},
{"ScreenDA_DAxSA", ScreenDA_DAxSA},
{"SetClickCancelFlag", SetClickCancelFlag},
{"SpriteCopyAMap", SpriteCopyAMap},
{"StretchBlendScreen2x2", StretchBlendScreen2x2},
{"StretchBlendScreen2x2WDS", StretchBlendScreen2x2WDS},
};
const Module module_Gpx = {"Gpx", functions, sizeof(functions) / sizeof(ModuleFunc)};
-3
View File
@@ -1,3 +0,0 @@
add_library(Math MODULE Math.c)
install(TARGETS Math DESTINATION lib/xsystem35)
+14 -4
View File
@@ -28,12 +28,13 @@
#include "portab.h"
#include "system.h"
#include "xsystem35.h"
#include "modules.h"
#include "nact.h"
#include "randMT.h"
static int numtblmax;
void RandMTInit() {
static void RandMTInit() {
/*
(おそらく Mersenne Twister使用の) 乱数初期化
@@ -44,7 +45,7 @@ void RandMTInit() {
DEBUG_COMMAND("Math.RandMTInit %d:\n", p1);
}
void RandMTGet() {
static void RandMTGet() {
/*
1 から num までの乱数を生成
@@ -63,7 +64,7 @@ void RandMTGet() {
DEBUG_COMMAND("Math.RandMTGet %d,%p:\n", num, var);
}
void RandMTMakeNumTable() {
static void RandMTMakeNumTable() {
/*
乱数テーブルの最大値を設定
@@ -76,7 +77,7 @@ void RandMTMakeNumTable() {
DEBUG_COMMAND("Math.RandMTMakeNumTable %d:\n", p1);
}
void RandMTGetNumTable() {
static void RandMTGetNumTable() {
/*
乱数テーブルから値を取得
@@ -88,3 +89,12 @@ void RandMTGetNumTable() {
DEBUG_COMMAND("Math.RandMTGetNumTable %d:\n", *var);
}
static const ModuleFunc functions[] = {
{"RandMTGet", RandMTGet},
{"RandMTGetNumTable", RandMTGetNumTable},
{"RandMTInit", RandMTInit},
{"RandMTMakeNumTable", RandMTMakeNumTable},
};
const Module module_Math = {"Math", functions, sizeof(functions) / sizeof(ModuleFunc)};
-3
View File
@@ -1,3 +0,0 @@
add_library(MsgSkip MODULE MsgSkip.c)
install(TARGETS MsgSkip DESTINATION lib/xsystem35)
+22 -9
View File
@@ -6,12 +6,13 @@
#include "portab.h"
#include "system.h"
#include "xsystem35.h"
#include "modules.h"
#include "nact.h"
#include "message.h"
static char *msgskipfile;
void Init() {
static void Init() {
int *p1 = getCaliVariable();
int p2 = getCaliValue(); /* ISys3x */
int p3 = getCaliValue();
@@ -21,49 +22,61 @@ void Init() {
DEBUG_COMMAND_YET("MsgSkip.Init %p,%d,%d,%d:\n", p1, p2, p3, p4);
}
void Start() {
static void Start() {
int *p1 = getCaliVariable();
int p2 = getCaliValue();
msgskipfile = strdup(v_str(p2 -1));
msgskipfile = strdup(svar_get(p2));
DEBUG_COMMAND_YET("MsgSkip.Start %p,%d:\n", p1, p2);
}
void SetValid() {
static void SetValid() {
int p1 = getCaliValue();
DEBUG_COMMAND("MsgSkip.SetValid %d:\n", p1);
}
void GetValid() {
static void GetValid() {
int *p1 = getCaliVariable();
DEBUG_COMMAND_YET("MsgSkip.GetValid %p:\n", p1);
}
void SetAction() {
static void SetAction() {
int p1 = getCaliValue();
DEBUG_COMMAND("MsgSkip.SetAcion %d:\n", p1);
}
void GetAction() {
static void GetAction() {
int *p1 = getCaliVariable();
DEBUG_COMMAND_YET("MsgSkip.GetAcion %p:\n", p1);
}
void PushStr() {
static void PushStr() {
int p1 = getCaliValue();
DEBUG_COMMAND_YET("MsgSkip.PushStr %d:\n", p1);
}
void PopStr() {
static void PopStr() {
int p1 = getCaliValue();
DEBUG_COMMAND_YET("MsgSkip.PopStr %d:\n", p1);
}
static const ModuleFunc functions[] = {
{"GetAction", GetAction},
{"GetValid", GetValid},
{"Init", Init},
{"PopStr", PopStr},
{"PushStr", PushStr},
{"SetAction", SetAction},
{"SetValid", SetValid},
{"Start", Start},
};
const Module module_MsgSkip = {"MsgSkip", functions, sizeof(functions) / sizeof(ModuleFunc)};
-21
View File
@@ -1,21 +0,0 @@
add_library(NIGHTDLL MODULE
NIGHTDLL.c
nt_scenario.c
sactcg.c
sactstring.c
sprite.c
sprite_draw.c
sprite_update.c
sprite_eupdate.c
nt_event.c
nt_msg.c
nt_sel.c
nt_graph.c
nt_sound.c
)
target_compile_options(NIGHTDLL PRIVATE -Wno-pointer-sign -Wno-invalid-source-encoding)
target_link_libraries(NIGHTDLL PRIVATE graph drawtext list)
install(TARGETS NIGHTDLL DESTINATION lib/xsystem35)
+143 -70
View File
@@ -5,6 +5,7 @@
#include "portab.h"
#include "system.h"
#include "xsystem35.h"
#include "modules.h"
#include "nact.h"
#include "night.h"
#include "nt_sound.h"
@@ -19,7 +20,7 @@
night_t nightprv;
void Init(void) { /* 0 */
static void Init(void) { /* 0 */
int *var = getCaliVariable();
int p1 = getCaliValue(); /* ISys3xCG */
int p2 = getCaliValue(); /* ISys3xDIB */
@@ -37,8 +38,8 @@ void Init(void) { /* 0 */
DEBUG_COMMAND_YET("NIGHTDLL.Init %p:\n", var);
}
void InitGame() { /* 1 */
nact->ags.font->antialiase_on = TRUE;
static void InitGame() { /* 1 */
ags_setAntialiasedStringMode(TRUE);
sys_setHankakuMode(2);
nact->msgout = ntmsg_add;
@@ -47,13 +48,13 @@ void InitGame() { /* 1 */
nt_gr_init();
ntmsg_init();
sstr_init();
nt_sstr_init();
DEBUG_COMMAND_YET("NIGHTDLL.InitGame:\n");
}
// メッセージの枠の表示
void SetMsgFrame() { /* 2 */
static void SetMsgFrame() { /* 2 */
int p1 = getCaliValue(); // 0=枠消去, 1=枠あり, 2=中央
ntmsg_set_frame(p1);
@@ -62,7 +63,7 @@ void SetMsgFrame() { /* 2 */
}
// メッセージの表示位置の設定
void SetMsgPlaceMethod(void) { /* 3 */
static void SetMsgPlaceMethod(void) { /* 3 */
int p1 = getCaliValue(); // 0=メッセージ枠内, 1=中央,
// 2=メッセージ枠+顔つき
ntmsg_set_place(p1);
@@ -71,21 +72,21 @@ void SetMsgPlaceMethod(void) { /* 3 */
}
// 未実装?
void SetMsgDrawEffect(void) { /* 4 */
static void SetMsgDrawEffect(void) { /* 4 */
int p1 = getCaliValue(); // 0, 1, 2, 3 (実際にはどれも機能しない?)
DEBUG_COMMAND_YET("NIGHTDLL.SetMsgDrawEffect %d:\n", p1);
}
// 未実装?
void SetMsgClearEffect(void) { /* 5 */
static void SetMsgClearEffect(void) { /* 5 */
int p1 = getCaliValue(); // 0, 1, 2, 4 (実際にはどれも機能しない?)
DEBUG_COMMAND_YET("NIGHTDLL.SetMsgClearEffect %d:\n", p1);
}
// 壁紙CGの設定
void SetWallPaper(void) { /* 6 */
static void SetWallPaper(void) { /* 6 */
int p1 = getCaliValue(); // 壁紙CG番号
nt_gr_set_wallpaper(p1);
@@ -94,7 +95,7 @@ void SetWallPaper(void) { /* 6 */
}
// 背景CGの設定
void SetScenery(void) { /* 7 */
static void SetScenery(void) { /* 7 */
int p1 = getCaliValue(); // 背景GC番号
nt_gr_set_scenery(p1);
@@ -103,7 +104,7 @@ void SetScenery(void) { /* 7 */
}
// 顔CGの設定
void SetFace(void) { /* 8 */
static void SetFace(void) { /* 8 */
int p1 = getCaliValue(); // 顔CG番号
nt_gr_set_face(p1);
@@ -112,7 +113,7 @@ void SetFace(void) { /* 8 */
}
// 立ち絵左の設定
void SetSpriteL(void) { /* 9 */
static void SetSpriteL(void) { /* 9 */
int p1 = getCaliValue(); // 左人物スプライト番号
nt_gr_set_spL(p1);
@@ -121,7 +122,7 @@ void SetSpriteL(void) { /* 9 */
}
// 立ち絵中央の設定
void SetSpriteM(void) { /* 10 */
static void SetSpriteM(void) { /* 10 */
int p1 = getCaliValue(); // 中央人物スプライト番号
nt_gr_set_spM(p1);
@@ -130,7 +131,7 @@ void SetSpriteM(void) { /* 10 */
}
// 立ち絵右の設定
void SetSpriteR(void) { /* 11 */
static void SetSpriteR(void) { /* 11 */
int p1 = getCaliValue(); // 右人物スプライト番号
nt_gr_set_spR(p1);
@@ -139,7 +140,7 @@ void SetSpriteR(void) { /* 11 */
}
// 立ち絵左の設定(季節違い?)
void SetSpriteSeasonL(void) { /* 12 */
static void SetSpriteSeasonL(void) { /* 12 */
int p1 = getCaliValue(); // 左人物スプライト番号
nt_gr_set_spsL(p1);
@@ -148,7 +149,7 @@ void SetSpriteSeasonL(void) { /* 12 */
}
// 立ち絵中央の設定(季節違い?)
void SetSpriteSeasonM(void) { /* 13 */
static void SetSpriteSeasonM(void) { /* 13 */
int p1 = getCaliValue(); // 中央人物スプライト番号
nt_gr_set_spM(p1);
@@ -157,7 +158,7 @@ void SetSpriteSeasonM(void) { /* 13 */
}
// 立ち絵右の設定(季節違い?)
void SetSpriteSeasonR(void) { /* 14 */
static void SetSpriteSeasonR(void) { /* 14 */
int p1 = getCaliValue(); // 右人物スプライト番号
nt_gr_set_spsR(p1);
@@ -166,14 +167,14 @@ void SetSpriteSeasonR(void) { /* 14 */
}
// 改行
void StartNewLine(void) { /* 15 */
static void StartNewLine(void) { /* 15 */
ntmsg_newline();
DEBUG_COMMAND_YET("NIGHTDLL.StartNewLine:\n");
}
// メッセージフォントサイズの設定
void SetFontSize(void) { /* 16 */
static void SetFontSize(void) { /* 16 */
int p1 = getCaliValue(); // メッセージフォントサイズ
night.fontsize = p1;
@@ -182,7 +183,7 @@ void SetFontSize(void) { /* 16 */
}
// フォントの種類の設定
void SetFont(void) { /* 17 */
static void SetFont(void) { /* 17 */
int p1 = getCaliValue(); // 0: ゴシック, 1: 明朝
night.fonttype = p1;
@@ -191,7 +192,7 @@ void SetFont(void) { /* 17 */
}
// 選択肢モード ON
void SetSelMode(void) { /* 18 */
static void SetSelMode(void) { /* 18 */
int p1 = getCaliValue(); // 0, 1(ほとんど0)
night.selmode = p1;
@@ -200,7 +201,7 @@ void SetSelMode(void) { /* 18 */
}
// キー入力待ち後、改ページ
void AnalyzeMessage(void) { /* 19 */
static void AnalyzeMessage(void) { /* 19 */
int *var = getCaliVariable(); // 入力されたキー
*var = ntmsg_ana();
@@ -209,7 +210,7 @@ void AnalyzeMessage(void) { /* 19 */
}
// ~DRAWの効果時間
void SetDrawTime(void) { /* 20 */
static void SetDrawTime(void) { /* 20 */
int p1 = getCaliValue(); // 効果時間 (未使用?)
nt_gr_set_drawtime(p1);
@@ -218,7 +219,7 @@ void SetDrawTime(void) { /* 20 */
}
// 効果つき画面更新
void Draw(void) { /* 21 */
static void Draw(void) { /* 21 */
int p1 = getCaliValue(); // 効果番号
nt_gr_draw(p1);
@@ -227,7 +228,7 @@ void Draw(void) { /* 21 */
}
// 音声データを再生
void SetVoice(void) { /* 22 */
static void SetVoice(void) { /* 22 */
int p1 = getCaliValue(); // ファイル番号
nt_voice_set(p1);
@@ -236,13 +237,13 @@ void SetVoice(void) { /* 22 */
}
// 未使用
void WaitKey(void) { /* 23 */
static void WaitKey(void) { /* 23 */
int p1 = getCaliValue(); //
DEBUG_COMMAND_YET("NIGHTDLL.WaitKey %d:\n", p1);
}
void AddFeeling(void) { /* 24 */
static void AddFeeling(void) { /* 24 */
int p1 = getCaliValue(); // person(1:新開,2:星川,3:百瀬,4:いずみ,5:鏡花,6:真言美,7:マコト
int p2 = getCaliValue(); // val
@@ -250,14 +251,14 @@ void AddFeeling(void) { /* 24 */
}
void SubFeeling(void) { /* 25 */
static void SubFeeling(void) { /* 25 */
int p1 = getCaliValue(); // person
int p2 = getCaliValue(); // val
DEBUG_COMMAND_YET("NIGHTDLL.SubFeeling %d:\n", p1);
}
void CallEvent(void) { /* 26 */
static void CallEvent(void) { /* 26 */
int p1 = getCaliValue(); // 1, 2 (Event Number)
nt_sco_callevent(p1);
@@ -265,7 +266,7 @@ void CallEvent(void) { /* 26 */
DEBUG_COMMAND_YET("NIGHTDLL.CallEvent %d:\n", p1);
}
void ScreenCG(void) { /* 27 */
static void ScreenCG(void) { /* 27 */
/*
CG を読み込んで、surface0 と BlendScreen で重ね合わせ
@@ -284,7 +285,7 @@ void ScreenCG(void) { /* 27 */
DEBUG_COMMAND_YET("NIGHTDLL.ScreenCG %d,%d,%d:\n", x, y, no);
}
void RunGameMain(void) { /* 28 */
static void RunGameMain(void) { /* 28 */
int *p1 = getCaliVariable(); // result
int p2 = getCaliValue(); // month
int p3 = getCaliValue(); // day
@@ -300,7 +301,7 @@ void RunGameMain(void) { /* 28 */
DEBUG_COMMAND_YET("NIGHTDLL.RunGameMain %p,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5);
}
void CheckNewGame(void) { /* 29 */
static void CheckNewGame(void) { /* 29 */
int *p1 = getCaliVariable();
*p1 = 0;
@@ -308,21 +309,21 @@ void CheckNewGame(void) { /* 29 */
DEBUG_COMMAND_YET("NIGHTDLL.CheckNewGame %p:\n", p1);
}
void SaveStartData(void) { /* 30 */
static void SaveStartData(void) { /* 30 */
DEBUG_COMMAND_YET("NIGHTDLL.SaveStartData:\n");
}
void PrintExitSystem(void) { /* 31 */
static void PrintExitSystem(void) { /* 31 */
DEBUG_COMMAND_YET("NIGHTDLL.PrintExitSystem:\n");
}
void SetCalendar(void) { /* 32 */
static void SetCalendar(void) { /* 32 */
int p1 = getCaliValue(); // 0, 1, 2
DEBUG_COMMAND_YET("NIGHTDLL.SetCalendar %d:\n", p1);
}
void SetDate(void) { /* 33 */
static void SetDate(void) { /* 33 */
int p1 = getCaliValue(); // month
int p2 = getCaliValue(); // day
int p3 = getCaliValue(); // day of week
@@ -334,7 +335,7 @@ void SetDate(void) { /* 33 */
DEBUG_COMMAND_YET("NIGHTDLL.SetDate %d,%d,%d:\n", p1, p2, p3);
}
void GetDate(void) { /* 34 */
static void GetDate(void) { /* 34 */
int *p1 = getCaliVariable(); // month
int *p2 = getCaliVariable(); // day
int *p3 = getCaliVariable(); // day of weeek
@@ -346,11 +347,11 @@ void GetDate(void) { /* 34 */
DEBUG_COMMAND_YET("NIGHTDLL.GetDate %p,%p,%p:\n", p1, p2, p3);
}
void SelectGameLevel(void) { /* 35 */
static void SelectGameLevel(void) { /* 35 */
DEBUG_COMMAND_YET("NIGHTDLL.SelectGameLevel:\n");
}
void RunEventDungeon(void) { /* 36 */
static void RunEventDungeon(void) { /* 36 */
int *p1 = getCaliVariable();
int p2 = getCaliValue();
@@ -359,14 +360,14 @@ void RunEventDungeon(void) { /* 36 */
DEBUG_COMMAND_YET("NIGHTDLL.RunEventDungeon %p,%d:\n", p1, p2);
}
void RunEventBattle(void) { /* 37 */
static void RunEventBattle(void) { /* 37 */
int p1 = getCaliValue(); // 実際には機能しない?
DEBUG_COMMAND_YET("NIGHTDLL.RunEventBattle %d:\n", p1);
}
// CD再生開始
void CDPlay(void) { /* 38 */
static void CDPlay(void) { /* 38 */
int p1 = getCaliValue(); // no
nt_cd_play(p1);
@@ -375,7 +376,7 @@ void CDPlay(void) { /* 38 */
}
// CD再生停止
void CDStop(void) { /* 39 */
static void CDStop(void) { /* 39 */
int p1 = getCaliValue(); // time(msec)
nt_cd_stop(p1);
@@ -384,7 +385,7 @@ void CDStop(void) { /* 39 */
}
// CDのmute
void CDMute(void) { /* 40 */
static void CDMute(void) { /* 40 */
int p1 = getCaliValue(); // 0: mute off, 1: mute on
nt_cd_mute(p1 == 0 ? FALSE : TRUE);
@@ -393,7 +394,7 @@ void CDMute(void) { /* 40 */
}
// ch に効果音番号をセット
void SoundEffectSetWave(void) { /* 41 */
static void SoundEffectSetWave(void) { /* 41 */
int p1 = getCaliValue(); // ch
int p2 = getCaliValue(); // linkno
@@ -403,7 +404,7 @@ void SoundEffectSetWave(void) { /* 41 */
}
// ch にくり返し数をセット
void SoundEffectSetLoop(void) { /* 42 */
static void SoundEffectSetLoop(void) { /* 42 */
int p1 = getCaliValue(); // ch
int p2 = getCaliValue(); // numloop
@@ -413,7 +414,7 @@ void SoundEffectSetLoop(void) { /* 42 */
}
// ch に音量をセット
void SoundEffectSetVolume(void) { /* 43 */
static void SoundEffectSetVolume(void) { /* 43 */
int p1 = getCaliValue(); // ch
int p2 = getCaliValue(); // vol
@@ -423,7 +424,7 @@ void SoundEffectSetVolume(void) { /* 43 */
}
// 効果音の再生を終るまで待つか待たないか?
void SoundEffectSetSyncFlag(void) { /* 44 */
static void SoundEffectSetSyncFlag(void) { /* 44 */
int p1 = getCaliValue(); // ch
int p2 = getCaliValue(); // 0: 終るまで待たない, 1: 待つ
@@ -433,7 +434,7 @@ void SoundEffectSetSyncFlag(void) { /* 44 */
}
// ch の効果音を再生
void SoundEffectPlay(void) { /* 45 */
static void SoundEffectPlay(void) { /* 45 */
int p1 = getCaliValue(); // ch
nt_snd_play(p1);
@@ -442,7 +443,7 @@ void SoundEffectPlay(void) { /* 45 */
}
// ch の効果音を停止
void SoundEffectStop(void) { /* 46 */
static void SoundEffectStop(void) { /* 46 */
int p1 = getCaliValue(); // ch
int p2 = getCaliValue(); // time (止まるまでの時間)
@@ -452,7 +453,7 @@ void SoundEffectStop(void) { /* 46 */
}
// 全てのチャンネルの再生を停止
void SoundEffectStopAll(void) { /* 47 */
static void SoundEffectStopAll(void) { /* 47 */
int p1 = getCaliValue(); // time (止まるまでの時間)
nt_snd_stopall(p1);
@@ -460,86 +461,86 @@ void SoundEffectStopAll(void) { /* 47 */
DEBUG_COMMAND_YET("NIGHTDLL.SoundEffectStopAll %d:\n", p1);
}
void RunSoundMode(void) { /* 48 */
static void RunSoundMode(void) { /* 48 */
DEBUG_COMMAND_YET("NIGHTDLL.RunSoundMode:\n");
}
void RunMapEditor(void) { /* 49 */
static void RunMapEditor(void) { /* 49 */
int *p1 = getCaliVariable();
DEBUG_COMMAND_YET("NIGHTDLL.RunMapEditor %p:\n", p1);
}
void VisualListClear(void) { /* 50 */
static void VisualListClear(void) { /* 50 */
DEBUG_COMMAND_YET("NIGHTDLL.VisualListClear:\n");
}
void VisualListAdd(void) { /* 51 */
static void VisualListAdd(void) { /* 51 */
int p1 = getCaliValue();
DEBUG_COMMAND_YET("NIGHTDLL.VisualListAdd %d:\n", p1);
}
void GetLocalCountCG(void) { /* 52 */
static void GetLocalCountCG(void) { /* 52 */
int *p1 = getCaliVariable();
int p2 = getCaliValue();
DEBUG_COMMAND_YET("NIGHTDLL.GetLocalCountCG %p,%d:\n", p1, p2);
}
void PlayMemory(void) { /* 53 */
static void PlayMemory(void) { /* 53 */
int *p1 = getCaliVariable(); // 回想ページ
int *p2 = getCaliVariable(); // 回想RESULT
DEBUG_COMMAND_YET("NIGHTDLL.PlayMemory %p,%p:\n", p1, p2);
}
void GetEventFlagTotal(void) { /* 54 */
static void GetEventFlagTotal(void) { /* 54 */
int *p1 = getCaliVariable();
int p2 = getCaliValue();
DEBUG_COMMAND_YET("NIGHTDLL.GetEventFlagTotal %p,%d:\n", p1, p2);
}
void SetPlayerName(void) { /* 55 */
static void SetPlayerName(void) { /* 55 */
int p1 = getCaliValue();
DEBUG_COMMAND_YET("NIGHTDLL.SetPlayerName %d:\n", p1);
}
void GetPlayerName(void) { /* 56 */
static void GetPlayerName(void) { /* 56 */
int p1 = getCaliValue();
DEBUG_COMMAND_YET("NIGHTDLL.GetPlayerName %d:\n", p1);
}
void SaveGame(void) { /* 57 */
static void SaveGame(void) { /* 57 */
int *p1 = getCaliVariable();
DEBUG_COMMAND_YET("NIGHTDLL.SaveGame %p:\n", p1);
}
void LoadGame(void) { /* 58 */
static void LoadGame(void) { /* 58 */
int *p1 = getCaliVariable();
DEBUG_COMMAND_YET("NIGHTDLL.LoadGame %p:\n", p1);
}
void ExistSaveData(void) { /* 59 */
static void ExistSaveData(void) { /* 59 */
int *p1 = getCaliVariable();
DEBUG_COMMAND_YET("NIGHTDLL.ExistSaveData %p:\n", p1);
}
void ExistStartData(void) { /* 60 */
static void ExistStartData(void) { /* 60 */
int *p1 = getCaliVariable();
DEBUG_COMMAND_YET("NIGHTDLL.ExistStartData %p:\n", p1);
}
void SetAreaData(void) { /* 61 */
static void SetAreaData(void) { /* 61 */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -547,27 +548,27 @@ void SetAreaData(void) { /* 61 */
DEBUG_COMMAND_YET("NIGHTDLL.SetAreaData %d,%d,%d:\n", p1, p2, p3);
}
void RunBattleTest(void) { /* 62 */
static void RunBattleTest(void) { /* 62 */
DEBUG_COMMAND_YET("NIGHTDLL.RunBattleTest:\n");
}
void RunTrainingTest(void) { /* 63 */
static void RunTrainingTest(void) { /* 63 */
DEBUG_COMMAND_YET("NIGHTDLL.RunTrainingTest:\n");
}
void TestEventCall(void) { /* 64 */
static void TestEventCall(void) { /* 64 */
DEBUG_COMMAND_YET("NIGHTDLL.TestEventCall:\n");
}
void Test(void) { /* 65 */
static void Test(void) { /* 65 */
DEBUG_COMMAND_YET("NIGHTDLL.Test:\n");
}
void DebugScenario(void) { /* 66 */
static void DebugScenario(void) { /* 66 */
DEBUG_COMMAND_YET("NIGHTDLL.DebugScenario:\n");
}
void GetDLLTime(void) { /* 67 */
static void GetDLLTime(void) { /* 67 */
int *p1 = getCaliVariable();
int *p2 = getCaliVariable();
int *p3 = getCaliVariable();
@@ -579,3 +580,75 @@ void GetDLLTime(void) { /* 67 */
DEBUG_COMMAND_YET("NIGHTDLL.GetDLLTime %p,%p,%p,%p,%p,%p,%p:\n", p1, p2, p3, p4, p5, p6, p7);
}
static const ModuleFunc functions[] = {
{"AddFeeling", AddFeeling},
{"AnalyzeMessage", AnalyzeMessage},
{"CDMute", CDMute},
{"CDPlay", CDPlay},
{"CDStop", CDStop},
{"CallEvent", CallEvent},
{"CheckNewGame", CheckNewGame},
{"DebugScenario", DebugScenario},
{"Draw", Draw},
{"ExistSaveData", ExistSaveData},
{"ExistStartData", ExistStartData},
{"GetDLLTime", GetDLLTime},
{"GetDate", GetDate},
{"GetEventFlagTotal", GetEventFlagTotal},
{"GetLocalCountCG", GetLocalCountCG},
{"GetPlayerName", GetPlayerName},
{"Init", Init},
{"InitGame", InitGame},
{"LoadGame", LoadGame},
{"PlayMemory", PlayMemory},
{"PrintExitSystem", PrintExitSystem},
{"RunBattleTest", RunBattleTest},
{"RunEventBattle", RunEventBattle},
{"RunEventDungeon", RunEventDungeon},
{"RunGameMain", RunGameMain},
{"RunMapEditor", RunMapEditor},
{"RunSoundMode", RunSoundMode},
{"RunTrainingTest", RunTrainingTest},
{"SaveGame", SaveGame},
{"SaveStartData", SaveStartData},
{"ScreenCG", ScreenCG},
{"SelectGameLevel", SelectGameLevel},
{"SetAreaData", SetAreaData},
{"SetCalendar", SetCalendar},
{"SetDate", SetDate},
{"SetDrawTime", SetDrawTime},
{"SetFace", SetFace},
{"SetFont", SetFont},
{"SetFontSize", SetFontSize},
{"SetMsgClearEffect", SetMsgClearEffect},
{"SetMsgDrawEffect", SetMsgDrawEffect},
{"SetMsgFrame", SetMsgFrame},
{"SetMsgPlaceMethod", SetMsgPlaceMethod},
{"SetPlayerName", SetPlayerName},
{"SetScenery", SetScenery},
{"SetSelMode", SetSelMode},
{"SetSpriteL", SetSpriteL},
{"SetSpriteM", SetSpriteM},
{"SetSpriteR", SetSpriteR},
{"SetSpriteSeasonL", SetSpriteSeasonL},
{"SetSpriteSeasonM", SetSpriteSeasonM},
{"SetSpriteSeasonR", SetSpriteSeasonR},
{"SetVoice", SetVoice},
{"SetWallPaper", SetWallPaper},
{"SoundEffectPlay", SoundEffectPlay},
{"SoundEffectSetLoop", SoundEffectSetLoop},
{"SoundEffectSetSyncFlag", SoundEffectSetSyncFlag},
{"SoundEffectSetVolume", SoundEffectSetVolume},
{"SoundEffectSetWave", SoundEffectSetWave},
{"SoundEffectStop", SoundEffectStop},
{"SoundEffectStopAll", SoundEffectStopAll},
{"StartNewLine", StartNewLine},
{"SubFeeling", SubFeeling},
{"Test", Test},
{"TestEventCall", TestEventCall},
{"VisualListAdd", VisualListAdd},
{"VisualListClear", VisualListClear},
{"WaitKey", WaitKey},
};
const Module module_NIGHTDLL = {"NIGHTDLL", functions, sizeof(functions) / sizeof(ModuleFunc)};
+34 -34
View File
@@ -39,8 +39,8 @@ void nt_gr_set_wallpaper(int no) {
sprite_t *sp = night.sp[SPNO_WALL];
if (sp) {
sp_remove_updatelist(sp);
sp_free(sp);
nt_sp_remove_updatelist(sp);
nt_sp_free(sp);
}
if (no == 1013 && nt_sco_is_natsu()) {
@@ -51,12 +51,12 @@ void nt_gr_set_wallpaper(int no) {
no = 1012;
}
sp = sp_new(SPNO_WALL, no, 0, 0, SPRITE_WP);
sp_add_updatelist(sp);
sp = nt_sp_new(SPNO_WALL, no, 0, 0, SPRITE_WP);
nt_sp_add_updatelist(sp);
if (no == 0) {
sp->cursize.width = sf0->width;
sp->cursize.height = sf0->height;
sp->update = sp_draw_wall;
sp->update = nt_sp_draw_wall;
}
night.sp[SPNO_WALL] = sp;
@@ -66,15 +66,15 @@ void nt_gr_set_scenery(int no) {
sprite_t *sp = night.sp[SPNO_SCENERY];
if (sp) {
sp_remove_updatelist(sp);
sp_free(sp);
nt_sp_remove_updatelist(sp);
nt_sp_free(sp);
sp = NULL;
}
if (no) {
sp = sp_new(SPNO_SCENERY, no, 0, 0, SPRITE_NORMAL);
sp_add_updatelist(sp);
sp_set_loc(sp, SCENERY_LOC_X, SCENERY_LOC_Y);
sp = nt_sp_new(SPNO_SCENERY, no, 0, 0, SPRITE_NORMAL);
nt_sp_add_updatelist(sp);
nt_sp_set_loc(sp, SCENERY_LOC_X, SCENERY_LOC_Y);
}
night.sp[SPNO_SCENERY] = sp;
@@ -84,14 +84,14 @@ void nt_gr_set_face(int no) {
sprite_t *sp = night.sp[SPNO_FACE];
if (sp) {
sp_remove_updatelist(sp);
sp_free(sp);
nt_sp_remove_updatelist(sp);
nt_sp_free(sp);
sp = NULL;
}
if (no) {
sp = sp_new(SPNO_FACE, no, 0, 0, SPRITE_NORMAL);
sp_add_updatelist(sp);
sp_set_loc(sp, FACE_LOC_X, FACE_LOC_Y);
sp = nt_sp_new(SPNO_FACE, no, 0, 0, SPRITE_NORMAL);
nt_sp_add_updatelist(sp);
nt_sp_set_loc(sp, FACE_LOC_X, FACE_LOC_Y);
night.msgplace = 2;
} else {
night.msgplace = 0;
@@ -103,14 +103,14 @@ void nt_gr_set_spL(int no) {
sprite_t *sp = night.sp[SPNO_TACHI_L];
if (sp) {
sp_remove_updatelist(sp);
sp_free(sp);
nt_sp_remove_updatelist(sp);
nt_sp_free(sp);
sp = NULL;
}
if (no) {
sp = sp_new(SPNO_TACHI_L, no, 0, 0, SPRITE_NORMAL);
sp_add_updatelist(sp);
sp_set_loc(sp, TACHI_L_LOC_X, TACHI_L_LOC_Y);
sp = nt_sp_new(SPNO_TACHI_L, no, 0, 0, SPRITE_NORMAL);
nt_sp_add_updatelist(sp);
nt_sp_set_loc(sp, TACHI_L_LOC_X, TACHI_L_LOC_Y);
}
night.sp[SPNO_TACHI_L] = sp;
}
@@ -119,14 +119,14 @@ void nt_gr_set_spM(int no) {
sprite_t *sp = night.sp[SPNO_TACHI_M];
if (sp) {
sp_remove_updatelist(sp);
sp_free(sp);
nt_sp_remove_updatelist(sp);
nt_sp_free(sp);
sp = NULL;
}
if (no) {
sp = sp_new(SPNO_TACHI_M, no, 0, 0, SPRITE_NORMAL);
sp_add_updatelist(sp);
sp_set_loc(sp, TACHI_M_LOC_X, TACHI_M_LOC_Y);
sp = nt_sp_new(SPNO_TACHI_M, no, 0, 0, SPRITE_NORMAL);
nt_sp_add_updatelist(sp);
nt_sp_set_loc(sp, TACHI_M_LOC_X, TACHI_M_LOC_Y);
}
night.sp[SPNO_TACHI_M] = sp;
}
@@ -135,14 +135,14 @@ void nt_gr_set_spR(int no) {
sprite_t *sp = night.sp[SPNO_TACHI_R];
if (sp) {
sp_remove_updatelist(sp);
sp_free(sp);
nt_sp_remove_updatelist(sp);
nt_sp_free(sp);
sp = NULL;
}
if (no) {
sp = sp_new(SPNO_TACHI_R, no, 0, 0, SPRITE_NORMAL);
sp_add_updatelist(sp);
sp_set_loc(sp, TACHI_R_LOC_X, TACHI_R_LOC_Y);
sp = nt_sp_new(SPNO_TACHI_R, no, 0, 0, SPRITE_NORMAL);
nt_sp_add_updatelist(sp);
nt_sp_set_loc(sp, TACHI_R_LOC_X, TACHI_R_LOC_Y);
}
night.sp[SPNO_TACHI_R] = sp;
}
@@ -178,15 +178,15 @@ void nt_gr_draw(int effectno) {
// 全消し
break;
case 1:
sp_update_all(TRUE);
nt_sp_update_all(TRUE);
break;
default:
if (night.waitskiplv > 1) {
sp_update_all(TRUE);
nt_sp_update_all(TRUE);
break;
}
//sp_eupdate(effectno, effecttime, TRUE);
sp_eupdate(effectno, 1000, TRUE);
//nt_sp_eupdate(effectno, effecttime, TRUE);
nt_sp_eupdate(effectno, 1000, TRUE);
}
}
+41 -51
View File
@@ -17,12 +17,14 @@
#include "nt_msg.h"
#include "sprite.h"
#include "sactcg.h"
#include "sjisname.h"
#include "sactstring.h"
extern int ntsel_dosel(void);
#define SNAME_RYO "亮    "
#define SNAME_RYO_DEF "亮"
// 通常メッセージ表示位置と大きさ
#define MSGFRAME_0_X 6
#define MSGFRAME_0_Y 347
@@ -67,34 +69,34 @@ void ntmsg_init() {
sprite_t *sp;
// メッセージスプライト
sp = night.sp[SPNO_MSGFRAME_FG] = sp_msg_new(SPNO_MSGFRAME_FG, 0, 0, sf0->width, sf0->height);
sp_add_updatelist(sp);
sp = night.sp[SPNO_MSGFRAME_FG] = nt_sp_msg_new(SPNO_MSGFRAME_FG, 0, 0, sf0->width, sf0->height);
nt_sp_add_updatelist(sp);
// メッセージ背景用CG
sp = night.sp[SPNO_MSGFRAME_BG] = sp_new(SPNO_MSGFRAME_BG, CGNO_MSGFRAME_LCG, 0, 0, SPRITE_NORMAL);
sp_add_updatelist(sp);
sp = night.sp[SPNO_MSGFRAME_BG] = nt_sp_new(SPNO_MSGFRAME_BG, CGNO_MSGFRAME_LCG, 0, 0, SPRITE_NORMAL);
nt_sp_add_updatelist(sp);
// 文字背景CG作成
scg_create(CGNO_MSGFR_BG,
nt_scg_create(CGNO_MSGFR_BG,
sf0->width, sf0->height,
0, 0, 0, 255);
// night.cg[CGNO_MSGFR_BG]->refcnt++;
// 文字背景CGのためのsprite
sp = night.sp[SPNO_MSGBG] = sp_new(SPNO_MSGBG, CGNO_MSGFR_BG, 0, 0, SPRITE_NORMAL);
sp_add_updatelist(sp);
sp = night.sp[SPNO_MSGBG] = nt_sp_new(SPNO_MSGBG, CGNO_MSGFR_BG, 0, 0, SPRITE_NORMAL);
nt_sp_add_updatelist(sp);
// キー入力アニメーションCG作成
scg_cut(CGNO_MSGHAK_1, CGNO_MSGHAK_LCG, 0, 0, 9, 9);
nt_scg_cut(CGNO_MSGHAK_1, CGNO_MSGHAK_LCG, 0, 0, 9, 9);
//night.cg[CGNO_MSGHAK_1]->refcnt++;
scg_cut(CGNO_MSGHAK_2, CGNO_MSGHAK_LCG, 0, 9, 9, 9);
nt_scg_cut(CGNO_MSGHAK_2, CGNO_MSGHAK_LCG, 0, 9, 9, 9);
//night.cg[CGNO_MSGHAK_2]->refcnt++;
sp = night.sp[SPNO_MSG_KEYANIM] = sp_new(SPNO_MSG_KEYANIM, CGNO_MSGHAK_1, CGNO_MSGHAK_2, 0, SPRITE_ANIME);
sp = night.sp[SPNO_MSG_KEYANIM] = nt_sp_new(SPNO_MSG_KEYANIM, CGNO_MSGHAK_1, CGNO_MSGHAK_2, 0, SPRITE_ANIME);
sp->u.anime.interval = HAKANIM_INTERVAL;
sp_add_updatelist(sp);
sp_set_loc(sp, HAKANIM_LOC_X, HAKANIM_LOC_Y);
sp_set_show(sp, FALSE);
sp->update = sp_draw_scg;
nt_sp_add_updatelist(sp);
nt_sp_set_loc(sp, HAKANIM_LOC_X, HAKANIM_LOC_Y);
nt_sp_set_show(sp, FALSE);
sp->update = nt_sp_draw_scg;
@@ -102,7 +104,7 @@ void ntmsg_init() {
// 主人公名前
sstr_regist_replace(SNAME_RYO, SNAME_RYO_DEF);
nt_sstr_regist_replace(fromUTF8(SNAME_RYO), fromUTF8(SNAME_RYO_DEF));
night.msg.cbmove = cb_mousemove;
night.msg.cbrelease = cb_keyrelease;
@@ -129,14 +131,14 @@ void ntmsg_set_frame(int type) {
switch(type) {
case 0:
sp_set_show(night.sp[SPNO_MSGBG], FALSE);
sp_set_show(night.sp[SPNO_MSGFRAME_BG], FALSE);
sp_set_show(night.sp[SPNO_MSGFRAME_FG], FALSE);
nt_sp_set_show(night.sp[SPNO_MSGBG], FALSE);
nt_sp_set_show(night.sp[SPNO_MSGFRAME_BG], FALSE);
nt_sp_set_show(night.sp[SPNO_MSGFRAME_FG], FALSE);
break;
case 1:
sp_set_show(night.sp[SPNO_MSGBG], TRUE);
sp_set_show(night.sp[SPNO_MSGFRAME_BG], TRUE);
sp_set_show(night.sp[SPNO_MSGFRAME_FG], TRUE);
nt_sp_set_show(night.sp[SPNO_MSGBG], TRUE);
nt_sp_set_show(night.sp[SPNO_MSGFRAME_BG], TRUE);
nt_sp_set_show(night.sp[SPNO_MSGFRAME_FG], TRUE);
gr_fill(sf, MSGFRAME_0_X, MSGFRAME_0_Y,
MSGFRAME_0_WIDTH, MSGFRAME_0_HEIGHT,
@@ -144,12 +146,12 @@ void ntmsg_set_frame(int type) {
gr_fill_alpha_map(sf, MSGFRAME_0_X, MSGFRAME_0_Y,
MSGFRAME_0_WIDTH, MSGFRAME_0_HEIGHT, 192);
ntmsg_clear(SPNO_MSGFRAME_FG);
sp_update_all(TRUE);
nt_sp_update_all(TRUE);
break;
case 2:
sp_set_show(night.sp[SPNO_MSGBG], TRUE);
sp_set_show(night.sp[SPNO_MSGFRAME_BG], FALSE);
sp_set_show(night.sp[SPNO_MSGFRAME_FG], TRUE);
nt_sp_set_show(night.sp[SPNO_MSGBG], TRUE);
nt_sp_set_show(night.sp[SPNO_MSGFRAME_BG], FALSE);
nt_sp_set_show(night.sp[SPNO_MSGFRAME_FG], TRUE);
gr_fill(sf, MSGFRAME_1_X, MSGFRAME_1_Y,
MSGFRAME_1_WIDTH, MSGFRAME_1_HEIGHT,
@@ -157,7 +159,7 @@ void ntmsg_set_frame(int type) {
gr_fill_alpha_map(sf, MSGFRAME_1_X, MSGFRAME_1_Y,
MSGFRAME_1_WIDTH, MSGFRAME_1_HEIGHT, 128);
ntmsg_clear(SPNO_MSGFRAME_FG);
sp_update_all(TRUE);
nt_sp_update_all(TRUE);
break;
}
@@ -179,19 +181,13 @@ void ntmsg_newline() {
ntmsg_add(buf);
}
void ntmsg_add(char *msg) {
void ntmsg_add(const char *msg) {
int len;
WARNING("len = %d\n", strlen(msg));
SACT_DEBUG("len = %d\n", strlen(msg));
if (msg[0] == '\0') return;
if (0) {
char *b = sjis2lang(msg);
fprintf(stderr, "add msg '%s'\n", b);
free(b);
}
len = MSGBUFMAX - (int)strlen(night.msgbuf);
if (len < 0) {
WARNING("buf shortage (%d)\n", len);
@@ -210,12 +206,12 @@ int ntmsg_ana(void) {
} else {
// msg newpage
ntmsg_out(SPNO_MSGFRAME_FG, night.fontsize, 255, 255, 255, night.fonttype, 0, 2);
sp_update_clipped();
nt_sp_update_clipped();
ret = ntmsg_keywait();
// clear msgsprite
ntmsg_clear(SPNO_MSGFRAME_FG);
//sp_update_clipped();
//nt_sp_update_clipped();
}
night.selmode = -1;
@@ -234,7 +230,7 @@ static void ntmsg_out(int wNum, int wSize, int wColorR, int wColorG, int wColorB
// shortcut
sp = night.sp[wNum];
msg = sstr_replacestr(night.msgbuf);
msg = nt_sstr_replacestr(night.msgbuf);
// 文字アラインメントの調整
set_align(msg, sp, wSize);
@@ -258,12 +254,6 @@ static void ntmsg_out(int wNum, int wSize, int wColorR, int wColorG, int wColorB
dt_setfont(wFont, wSize);
if (1) {
char *b = sjis2lang(mbuf);
fprintf(stderr, "msg '%s'\n", b);
free(b);
}
cw = dt_drawtext_col(sp->u.msg.canvas,
sp->u.msg.dspcur.x,
sp->u.msg.dspcur.y,
@@ -273,12 +263,12 @@ static void ntmsg_out(int wNum, int wSize, int wColorR, int wColorG, int wColorB
needupdate = TRUE;
if (wSpeed > 0) {
sp_updateme_part(sp,
nt_sp_updateme_part(sp,
sp->u.msg.dspcur.x,
sp->u.msg.dspcur.y,
cw,
wSize);
sp_update_clipped();
nt_sp_update_clipped();
needupdate = FALSE;
// keywait
@@ -301,7 +291,7 @@ static void ntmsg_out(int wNum, int wSize, int wColorR, int wColorG, int wColorB
if (needupdate) {
uparea.width = sp->cursize.width;
uparea.height = min(sp->cursize.height, uparea.y - sp->u.msg.dspcur.y + wLineSpace + wLineSpace);
sp_updateme_part(sp, uparea.x, uparea.y, uparea.width, uparea.height);
nt_sp_updateme_part(sp, uparea.x, uparea.y, uparea.width, uparea.height);
}
}
@@ -455,8 +445,8 @@ static void hakanim(int i) {
sp->curcg = sp->cg2;
}
sp->show = TRUE;
sp_updateme(sp);
sp_update_clipped();
nt_sp_updateme(sp);
nt_sp_update_clipped();
sp->show = show;
}
@@ -489,7 +479,7 @@ int ntmsg_update(sprite_t *sp, MyRectangle *r) {
gre_BlendUseAMap(sf0, dx, dy, sf0, dx, dy, sp->u.msg.canvas, sx, sy, w, h, sp->u.msg.canvas, sx, sy, sp->blendrate);
WARNING("do update no=%d, sx=%d, sy=%d, w=%d, h=%d, dx=%d, dy=%d\n",
SACT_DEBUG("do update no=%d, sx=%d, sy=%d, w=%d, h=%d, dx=%d, dy=%d\n",
sp->no, sx, sy, w, h, dx, dy);
return OK;
@@ -509,5 +499,5 @@ static void ntmsg_clear(int wNum) {
memset(sf->pixel, 0, sf->bytes_per_line * sf->height);
memset(sf->alpha, 0, sf->width * sf->height);
sp_updateme(sp);
nt_sp_updateme(sp);
}
+1 -1
View File
@@ -5,7 +5,7 @@ extern void ntmsg_init();
extern void ntmsg_set_frame(int type);
extern void ntmsg_set_place(int type);
extern void ntmsg_newline();
extern void ntmsg_add(char *msg);
extern void ntmsg_add(const char *msg);
extern int ntmsg_ana(void);
extern int ntmsg_update(sprite_t *sp, MyRectangle *r);
+2 -2
View File
@@ -33,7 +33,7 @@ static struct _scoadr scene2adr(int no) {
struct _scoadr adr = {0, 0};
snprintf(label, 7, "E%05d", no);
WARNING("seaching %6s\n", label);
SACT_DEBUG("seaching %6s\n", label);
for (i = 0; i < nact->ain.fncnum; i++) {
if (0 == strncmp(nact->ain.fnc[i].name, label, 6)) {
adr.page = nact->ain.fnc[i].page;
@@ -57,7 +57,7 @@ static void ntmain(struct _scoadr inadr) {
while (!nact->is_quit) {
for (int cnt = 0; !nact->wait_vsync && cnt < 10000; cnt++) {
DEBUG_MESSAGE("%d:%x\n", sl_getPage(), sl_getIndex());
//WARNING("%d:%x\n", sl_getPage(), sl_getIndex());
//SACT_DEBUG("%d:%x\n", sl_getPage(), sl_getIndex());
if (!nact->popupmenu_opened) {
check_command(sl_getc());
if (sl_getPage() == inadr.page &&
+46 -60
View File
@@ -30,7 +30,6 @@
#include "portab.h"
#include "nact.h"
#include "system.h"
#include "utfsjis.h"
#include "ags.h"
#include "surface.h"
#include "ngraph.h"
@@ -61,7 +60,7 @@ static cginfo_t *cgs[CGMAX];
spriteから参照されるときは増やし、CG_xxxを作る時に
参照されるときは増やさない。
*/
cginfo_t *scg_loadcg_no(int no, boolean refinc) {
cginfo_t *nt_scg_loadcg_no(int no, boolean refinc) {
cginfo_t *i;
if (no >= (CGMAX -1)) {
@@ -95,7 +94,7 @@ cginfo_t *scg_loadcg_no(int no, boolean refinc) {
}
// 指定の大きさ、色の矩形の CG を作成
int scg_create(int wNumCG, int wWidth, int wHeight, int wR, int wG, int wB, int wBlendRate) {
int nt_scg_create(int wNumCG, int wWidth, int wHeight, int wR, int wG, int wB, int wBlendRate) {
cginfo_t *i;
spcg_assert_no(wNumCG);
@@ -109,7 +108,7 @@ int scg_create(int wNumCG, int wWidth, int wHeight, int wR, int wG, int wB, int
gr_fill_alpha_map(i->sf, 0, 0, wWidth, wHeight, wBlendRate);
// もし前に作成したものがあり、未開放の場合は開放
scg_free(wNumCG);
nt_scg_free(wNumCG);
cgs[wNumCG] = i;
@@ -117,7 +116,7 @@ int scg_create(int wNumCG, int wWidth, int wHeight, int wR, int wG, int wB, int
}
// 指定のCGを反転させたCGを作成
int scg_create_reverse(int wNumCG, int wNumSrcCG, int wReverseX, int wReverseY) {
int nt_scg_create_reverse(int wNumCG, int wNumSrcCG, int wReverseX, int wReverseY) {
cginfo_t *i, *srccg;
surface_t *src;
@@ -125,7 +124,7 @@ int scg_create_reverse(int wNumCG, int wNumSrcCG, int wReverseX, int wReverseY)
spcg_assert_no(wNumSrcCG);
// 元にするCGを参照 (LINKCGなら読み込み)
if (NULL == (srccg = scg_loadcg_no(wNumSrcCG, FALSE))) {
if (NULL == (srccg = nt_scg_loadcg_no(wNumSrcCG, FALSE))) {
return NG;
}
@@ -137,7 +136,7 @@ int scg_create_reverse(int wNumCG, int wNumSrcCG, int wReverseX, int wReverseY)
src = srccg->sf;
i->sf = stretch(src, src->width, src->height, (wReverseX << 1) | wReverseY);
// もし前に作成したものがあり、未開放の場合は開放
scg_free(wNumCG);
nt_scg_free(wNumCG);
cgs[wNumCG] = i;
@@ -145,7 +144,7 @@ int scg_create_reverse(int wNumCG, int wNumSrcCG, int wReverseX, int wReverseY)
}
// 指定のCGを拡大/縮小したCGを作成
int scg_create_stretch(int wNumCG, int wWidth, int wHeight, int wNumSrcCG) {
int nt_scg_create_stretch(int wNumCG, int wWidth, int wHeight, int wNumSrcCG) {
cginfo_t *i, *srccg;
surface_t *src;
@@ -153,7 +152,7 @@ int scg_create_stretch(int wNumCG, int wWidth, int wHeight, int wNumSrcCG) {
spcg_assert_no(wNumSrcCG);
// 元にするCGを参照 (LINKCGなら読み込み)
if (NULL == (srccg = scg_loadcg_no(wNumSrcCG, FALSE))) {
if (NULL == (srccg = nt_scg_loadcg_no(wNumSrcCG, FALSE))) {
return NG;
}
@@ -166,7 +165,7 @@ int scg_create_stretch(int wNumCG, int wWidth, int wHeight, int wNumSrcCG) {
i->sf = stretch(src, wWidth, wHeight, 0);
// もし前に作成したものがあり、未開放の場合は開放
scg_free(wNumCG);
nt_scg_free(wNumCG);
cgs[wNumCG] = i;
@@ -174,7 +173,7 @@ int scg_create_stretch(int wNumCG, int wWidth, int wHeight, int wNumSrcCG) {
}
// ベースCGの上にブレンドCGを重ねた CG を作成
int scg_create_blend(int wNumDstCG, int wNumBaseCG, int wX, int wY, int wNumBlendCG, int wAlphaMapMode) {
int nt_scg_create_blend(int wNumDstCG, int wNumBaseCG, int wX, int wY, int wNumBlendCG, int wAlphaMapMode) {
cginfo_t *i, *basecg, *blendcg;
spcg_assert_no(wNumDstCG);
@@ -182,8 +181,8 @@ int scg_create_blend(int wNumDstCG, int wNumBaseCG, int wX, int wY, int wNumBlen
spcg_assert_no(wNumBlendCG);
// 元にするCGを参照 (LINKCGなら読み込み)
basecg = scg_loadcg_no(wNumBaseCG, FALSE);
blendcg = scg_loadcg_no(wNumBlendCG, FALSE);
basecg = nt_scg_loadcg_no(wNumBaseCG, FALSE);
blendcg = nt_scg_loadcg_no(wNumBlendCG, FALSE);
if (basecg == NULL || blendcg == NULL) return NG;
i = malloc(sizeof(cginfo_t));
@@ -194,7 +193,7 @@ int scg_create_blend(int wNumDstCG, int wNumBaseCG, int wX, int wY, int wNumBlen
i->sf = blend(basecg->sf, wX , wY, blendcg->sf, wAlphaMapMode);
// もし前に作成したものがあり、未開放の場合は開放
scg_free(wNumDstCG);
nt_scg_free(wNumDstCG);
cgs[wNumDstCG] = i;
@@ -202,26 +201,16 @@ int scg_create_blend(int wNumDstCG, int wNumBaseCG, int wX, int wY, int wNumBlen
}
// 指定の文字列のCGを作成
int scg_create_text(int wNumCG, int wSize, int wR, int wG, int wB, char *cText) {
int nt_scg_create_text(int wNumCG, int wSize, int wR, int wG, int wB, char *cText) {
cginfo_t *i;
agsurface_t *glyph;
FONT *font;
if (0) {
char *b = sjis2lang(cText);
WARNING("str = '%s'\n", b);
free(b);
}
spcg_assert_no(wNumCG);
// 勝手に出ていいのかな?
if (strlen(cText) == 0) return OK;
font = nact->ags.font;
font->sel_font(FONT_GOTHIC, wSize);
glyph = font->get_glyph(cText);
ags_setFont(FONT_GOTHIC, wSize);
agsurface_t *glyph = ags_drawStringToSurface(cText);
i = malloc(sizeof(cginfo_t));
i->type = CG_SET;
i->no = wNumCG;
@@ -232,7 +221,7 @@ int scg_create_text(int wNumCG, int wSize, int wR, int wG, int wB, char *cText)
gr_draw_amap(i->sf, 0, 0, glyph->pixel, glyph->width, wSize, glyph->bytes_per_line);
// もし前に作成したものがあり、未開放の場合は開放
scg_free(wNumCG);
nt_scg_free(wNumCG);
cgs[wNumCG] = i;
@@ -240,10 +229,8 @@ int scg_create_text(int wNumCG, int wSize, int wR, int wG, int wB, char *cText)
}
// 数字文字列のCGを作成
int scg_create_textnum(int wNumCG, int wSize, int wR, int wG, int wB, int wFigs, int wZeroPadding, int wValue) {
int nt_scg_create_textnum(int wNumCG, int wSize, int wR, int wG, int wB, int wFigs, int wZeroPadding, int wValue) {
cginfo_t *i;
agsurface_t *glyph;
FONT *font;
char s[256], ss[256];
spcg_assert_no(wNumCG);
@@ -257,9 +244,8 @@ int scg_create_textnum(int wNumCG, int wSize, int wR, int wG, int wB, int wFigs,
}
sprintf(s, ss, wValue);
font = nact->ags.font;
font->sel_font(FONT_GOTHIC, wSize);
glyph = font->get_glyph(s);
ags_setFont(FONT_GOTHIC, wSize);
agsurface_t *glyph = ags_drawStringToSurface(s);
i = malloc(sizeof(cginfo_t));
i->type = CG_SET;
@@ -270,7 +256,7 @@ int scg_create_textnum(int wNumCG, int wSize, int wR, int wG, int wB, int wFigs,
gr_draw_amap(i->sf, 0, 0, glyph->pixel, glyph->width, wSize, glyph->bytes_per_line);
// もし前に作成したものがあり、未開放の場合は開放
scg_free(wNumCG);
nt_scg_free(wNumCG);
cgs[wNumCG] = i;
@@ -278,14 +264,14 @@ int scg_create_textnum(int wNumCG, int wSize, int wR, int wG, int wB, int wFigs,
}
// CGを複製
int scg_copy(int wNumDstCG, int wNumSrcCG) {
int nt_scg_copy(int wNumDstCG, int wNumSrcCG) {
cginfo_t *i, *srccg;
spcg_assert_no(wNumDstCG);
spcg_assert_no(wNumSrcCG);
// 元にするCGを参照 (LINKCGなら読み込み)
if (NULL == (srccg = scg_loadcg_no(wNumSrcCG, FALSE))) {
if (NULL == (srccg = nt_scg_loadcg_no(wNumSrcCG, FALSE))) {
return NG;
}
@@ -296,7 +282,7 @@ int scg_copy(int wNumDstCG, int wNumSrcCG) {
i->sf = sf_dup(srccg->sf);
// もし前に作成したものがあり、未開放の場合は開放
scg_free(wNumDstCG);
nt_scg_free(wNumDstCG);
cgs[wNumDstCG] = i;
@@ -304,7 +290,7 @@ int scg_copy(int wNumDstCG, int wNumSrcCG) {
}
// CGの一部を切りぬいたCGを作成
int scg_cut(int wNumDstCG, int wNumSrcCG, int wX, int wY, int wWidth, int wHeight) {
int nt_scg_cut(int wNumDstCG, int wNumSrcCG, int wX, int wY, int wWidth, int wHeight) {
cginfo_t *i, *srccg;
surface_t *dst, *src;
@@ -312,7 +298,7 @@ int scg_cut(int wNumDstCG, int wNumSrcCG, int wX, int wY, int wWidth, int wHeigh
spcg_assert_no(wNumSrcCG);
// 元にするCGを参照 (LINKCGなら読み込み)
if (NULL == (srccg = scg_loadcg_no(wNumSrcCG, FALSE))) {
if (NULL == (srccg = nt_scg_loadcg_no(wNumSrcCG, FALSE))) {
return NG;
}
@@ -322,22 +308,22 @@ int scg_cut(int wNumDstCG, int wNumSrcCG, int wX, int wY, int wWidth, int wHeigh
i->refcnt = 0;
src = srccg->sf;
if (src->has_alpha) {
if (src->alpha) {
dst = sf_create_surface(wWidth, wHeight, src->depth);
} else {
dst = sf_create_pixel(wWidth, wHeight, src->depth);
}
if (src->has_pixel) {
if (src->pixel) {
gr_copy(dst, 0, 0, src, wX, wY, wWidth, wHeight);
}
if (src->has_alpha) {
if (src->alpha) {
gr_copy_alpha_map(dst, 0, 0, src, wX, wY, wWidth, wHeight);
}
i->sf = dst;
// もし前に作成したものがあり、未開放の場合は開放
scg_free(wNumDstCG);
nt_scg_free(wNumDstCG);
cgs[wNumDstCG] = i;
@@ -345,7 +331,7 @@ int scg_cut(int wNumDstCG, int wNumSrcCG, int wX, int wY, int wWidth, int wHeigh
}
// 元のCGの一部を切りぬいたCGを作成
int scg_partcopy(int wNumDstCG, int wNumSrcCG, int wX, int wY, int wWidth, int wHeight) {
int nt_scg_partcopy(int wNumDstCG, int wNumSrcCG, int wX, int wY, int wWidth, int wHeight) {
cginfo_t *i, *srccg;
surface_t *dst, *src;
@@ -353,7 +339,7 @@ int scg_partcopy(int wNumDstCG, int wNumSrcCG, int wX, int wY, int wWidth, int w
spcg_assert_no(wNumSrcCG);
// 元にするCGを参照 (LINKCGなら読み込み)
if (NULL == (srccg = scg_loadcg_no(wNumSrcCG, FALSE))) {
if (NULL == (srccg = nt_scg_loadcg_no(wNumSrcCG, FALSE))) {
return NG;
}
@@ -363,24 +349,24 @@ int scg_partcopy(int wNumDstCG, int wNumSrcCG, int wX, int wY, int wWidth, int w
i->refcnt = 0;
src = srccg->sf;
if (src->has_alpha) {
if (src->alpha) {
dst = sf_create_surface(src->width, src->height, src->depth);
gr_fill_alpha_map(dst, 0, 0, src->width, src->height, 255);
} else {
dst = sf_create_pixel(src->width, src->height, src->depth);
}
if (src->has_pixel) {
if (src->pixel) {
gr_copy(dst, wX, wY, src, wX, wY, wWidth, wHeight);
}
if (src->has_alpha) {
if (src->alpha) {
gr_copy_alpha_map(dst, wX, wY, src, wX, wY, wWidth, wHeight);
}
i->sf = dst;
// もし前に作成したものがあり、未開放の場合は開放
scg_free(wNumDstCG);
nt_scg_free(wNumDstCG);
cgs[wNumDstCG] = i;
@@ -388,11 +374,11 @@ int scg_partcopy(int wNumDstCG, int wNumSrcCG, int wX, int wY, int wWidth, int w
}
// 全てのCGの開放
int scg_freeall() {
int nt_scg_freeall() {
int i;
for (i = 1; i < CGMAX; i++) {
scg_free(i);
nt_scg_free(i);
}
return OK;
}
@@ -401,7 +387,7 @@ int scg_freeall() {
* 指定の番号の CG をオブジェクトリストから消し、オブジェクトがどこからも参照
* されていない(参照数が0の)場合のみ、オブジェクトを削除
*/
int scg_free(int no) {
int nt_scg_free(int no) {
cginfo_t *cg;
spcg_assert_no(no);
@@ -410,7 +396,7 @@ int scg_free(int no) {
// 参照数が0の時のみオブジェクトを開放
if (cg->refcnt == 0) {
scg_free_cgobj(cg);
nt_scg_free_cgobj(cg);
}
// 番号で消したときはオブジェクトが開放されなくても
@@ -423,7 +409,7 @@ int scg_free(int no) {
/**
* CG オブジェクトの開放
*/
int scg_free_cgobj(cginfo_t *cg) {
int nt_scg_free_cgobj(cginfo_t *cg) {
if (cg == NULL) return NG;
(cg->refcnt)--;
@@ -448,7 +434,7 @@ int scg_free_cgobj(cginfo_t *cg) {
}
// CGの種類を取得
int scg_querytype(int wNumCG, int *ret) {
int nt_scg_querytype(int wNumCG, int *ret) {
if (wNumCG >= (CGMAX -1)) goto errexit;
if (cgs[wNumCG] == NULL) goto errexit;
@@ -462,7 +448,7 @@ int scg_querytype(int wNumCG, int *ret) {
}
// CGの大きさを取得
int scg_querysize(int wNumCG, int *w, int *h) {
int nt_scg_querysize(int wNumCG, int *w, int *h) {
if (wNumCG >= (CGMAX -1)) goto errexit;
if (cgs[wNumCG] == NULL) goto errexit;
if (cgs[wNumCG]->sf == NULL) goto errexit;
@@ -478,7 +464,7 @@ int scg_querysize(int wNumCG, int *w, int *h) {
}
// CGのBPPを取得
int scg_querybpp(int wNumCG, int *ret) {
int nt_scg_querybpp(int wNumCG, int *ret) {
if (wNumCG >= (CGMAX -1)) goto errexit;
if (cgs[wNumCG] == NULL) goto errexit;
if (cgs[wNumCG]->sf == NULL) goto errexit;
@@ -493,12 +479,12 @@ int scg_querybpp(int wNumCG, int *ret) {
}
// CGの alphamap が存在するかを取得
int scg_existalphamap(int wNumCG, int *ret) {
int nt_scg_existalphamap(int wNumCG, int *ret) {
if (wNumCG >= (CGMAX -1)) goto errexit;
if (cgs[wNumCG] == NULL) goto errexit;
if (cgs[wNumCG]->sf == NULL) goto errexit;
*ret = cgs[wNumCG]->sf->has_alpha ? 1 : 0;
*ret = cgs[wNumCG]->sf->alpha ? 1 : 0;
errexit:
*ret = 0;
+18 -18
View File
@@ -27,23 +27,23 @@
#include "portab.h"
#include "night.h"
extern cginfo_t *scg_loadcg_no(int no, boolean refinc);
extern int scg_create(int wNumCG, int wWidth, int wHeight, int wR, int wG, int wB, int wBlendRate);
extern int scg_create_reverse(int NumCG, int wNumSrcCG, int wReverseX, int wReverseY);
extern int scg_create_stretch(int wNumCG, int wWidth, int wHeight, int wNumSrcCG);
extern int scg_create_blend(int wNumDstCG, int wNumBaseCG, int wX, int wY, int wNumBlendCG, int wAlphaMapMode);
extern int scg_create_text(int wNumCG, int wSize, int wR, int wG, int wB, char *cText);
extern int scg_create_textnum(int wNumCG, int wSize, int wR, int wG, int wB, int wFigs, int wZeroPadding, int wValue);
extern int scg_copy(int wNumDstCG, int wNumSrcCG);
extern int scg_cut(int wNumDstCG, int wNumSrcCG, int wX, int wY, int wWidth, int wHeight);
extern int scg_partcopy(int wNumDstCG, int wNumSrcCG, int wX, int wY, int wWidth, int wHeight);
extern int scg_freeall();
extern int scg_free(int cg);
extern int scg_free_cgobj(cginfo_t *cg);
extern int scg_querytype(int wNumCG, int *ret);
extern int scg_querysize(int wNumCG, int *w, int *h);
extern int scg_querybpp(int wNumCG, int *ret);
extern int scg_existalphamap(int wNumCG, int *ret);
extern int scg_linkcgfree(int no);
extern cginfo_t *nt_scg_loadcg_no(int no, boolean refinc);
extern int nt_scg_create(int wNumCG, int wWidth, int wHeight, int wR, int wG, int wB, int wBlendRate);
extern int nt_scg_create_reverse(int NumCG, int wNumSrcCG, int wReverseX, int wReverseY);
extern int nt_scg_create_stretch(int wNumCG, int wWidth, int wHeight, int wNumSrcCG);
extern int nt_scg_create_blend(int wNumDstCG, int wNumBaseCG, int wX, int wY, int wNumBlendCG, int wAlphaMapMode);
extern int nt_scg_create_text(int wNumCG, int wSize, int wR, int wG, int wB, char *cText);
extern int nt_scg_create_textnum(int wNumCG, int wSize, int wR, int wG, int wB, int wFigs, int wZeroPadding, int wValue);
extern int nt_scg_copy(int wNumDstCG, int wNumSrcCG);
extern int nt_scg_cut(int wNumDstCG, int wNumSrcCG, int wX, int wY, int wWidth, int wHeight);
extern int nt_scg_partcopy(int wNumDstCG, int wNumSrcCG, int wX, int wY, int wWidth, int wHeight);
extern int nt_scg_freeall();
extern int nt_scg_free(int cg);
extern int nt_scg_free_cgobj(cginfo_t *cg);
extern int nt_scg_querytype(int wNumCG, int *ret);
extern int nt_scg_querysize(int wNumCG, int *w, int *h);
extern int nt_scg_querybpp(int wNumCG, int *ret);
extern int nt_scg_existalphamap(int wNumCG, int *ret);
extern int nt_scg_linkcgfree(int no);
#endif
+2 -2
View File
@@ -4,7 +4,7 @@ static surface_t *blend(surface_t *base, int x, int y, surface_t *blend, int mod
gr_copy(dst, 0, 0, base, 0, 0, base->width, base->height);
if (base->has_alpha) {
if (base->alpha) {
// ベースに alpha map がある場合はそれをコピー
gr_copy_alpha_map(dst, 0, 0, base, 0, 0, base->width, base->height);
} else {
@@ -12,7 +12,7 @@ static surface_t *blend(surface_t *base, int x, int y, surface_t *blend, int mod
gr_fill_alpha_map(dst, 0, 0, base->width, base->height, 255);
}
if (blend->has_alpha) {
if (blend->alpha) {
// 重ね合わせ先の alpha map があるときはそれを使う
gre_BlendUseAMap(dst, x, y, base, x, y, blend, 0, 0, blend->width, blend->height, blend, 0, 0, 255);
} else {
+3 -5
View File
@@ -12,13 +12,11 @@ static surface_t *stretch(surface_t *src, int dw, int dh, int mirror) {
dst->depth = src->depth;
dst->bytes_per_line = dw * src->bytes_per_pixel;
dst->bytes_per_pixel = src->bytes_per_pixel;
dst->has_pixel = src->has_pixel;
dst->has_alpha = src->has_alpha;
if (src->has_pixel) {
if (src->pixel) {
dst->pixel = malloc(dh * dst->bytes_per_line);
}
if (src->has_alpha) {
if (src->alpha) {
dst->alpha = malloc(dw * dh);
}
@@ -88,7 +86,7 @@ static surface_t *stretch(surface_t *src, int dw, int dh, int mirror) {
break;
}
if (src->has_alpha) {
if (src->alpha) {
int x, y;
BYTE *sl, *dl;
BYTE *_sl, *_dl;
+9 -9
View File
@@ -51,7 +51,7 @@ static char *replacedst;
/**
* 文字列変数スタックの初期化
*/
int sstr_init() {
int nt_sstr_init() {
stack = malloc(sizeof(char *) * DEFSTACKSIZE);
idx = 0;
idxmax = DEFSTACKSIZE;
@@ -62,7 +62,7 @@ int sstr_init() {
* 文字列変数スタックに文字列を積む
* @param strno: シナリオ上での文字列変数番号
*/
int sstr_push(char *str) {
int nt_sstr_push(char *str) {
if (idx >= idxmax) {
stack = realloc(stack, sizeof(char *) * idx*2);
idxmax = idx*2;
@@ -77,7 +77,7 @@ int sstr_push(char *str) {
* 文字列変数スタックから文字列を取り出す
* @param strno: スタックから戻した文字列を格納する文字列変数番号
*/
int sstr_pop(char *str, int maxlen) {
int nt_sstr_pop(char *str, int maxlen) {
if (idx == 0) return NG;
strncpy(str, stack[--idx], maxlen);
@@ -91,14 +91,14 @@ int sstr_pop(char *str, int maxlen) {
* @param sstrno: 変換元文字列変数番号
* @param dstrno: 変換先文字列変数番号
*/
int sstr_regist_replace(char *sstr, char *dstr) {
int nt_sstr_regist_replace(char *sstr, char *dstr) {
strexchange_t *ex;
if (sstr == dstr) return NG;
ex = malloc(sizeof(strexchange_t));
ex->src = strdup(sstr);
ex->dst = strdup(dstr);
ex->src = sstr;
ex->dst = dstr;
strreplace = slist_append(strreplace, ex);
return OK;
}
@@ -106,7 +106,7 @@ int sstr_regist_replace(char *sstr, char *dstr) {
/**
* 数値 -> 文字列化
*/
int sstr_num2str(int strno, int fig, int nzeropad, int num) {
int nt_sstr_num2str(int strno, int fig, int nzeropad, int num) {
char s[256], ss[256];
if (nzeropad) {
@@ -118,7 +118,7 @@ int sstr_num2str(int strno, int fig, int nzeropad, int num) {
}
sprintf(s, ss, num);
v_strcpy(strno -1, s);
svar_set(strno, s);
return OK;
}
@@ -148,7 +148,7 @@ static void replacestr_cb(void* data, void* userdata) {
}
// 文字列の置き換え
char *sstr_replacestr(char *msg) {
char *nt_sstr_replacestr(char *msg) {
if (strreplace == NULL) return msg;
repbuf[0][0] = '\0';
+6 -6
View File
@@ -24,12 +24,12 @@
#ifndef __SACTSTRING_H__
#define __SACTSTRING_H__
extern int sstr_init();
extern int sstr_push(char *str);
extern int sstr_pop(char *str, int maxlen);
extern int sstr_regist_replace(char *sstr, char *dstr);
extern int sstr_num2str(int strno, int fig, int nzeropad, int num);
extern char *sstr_replacestr(char *msg);
extern int nt_sstr_init();
extern int nt_sstr_push(char *str);
extern int nt_sstr_pop(char *str, int maxlen);
extern int nt_sstr_regist_replace(char *sstr, char *dstr);
extern int nt_sstr_num2str(int strno, int fig, int nzeropad, int num);
extern char *nt_sstr_replacestr(char *msg);
#endif /* __SACTSTRING_H__ */
-2
View File
@@ -1,2 +0,0 @@
#define SNAME_RYO "亮    "
#define SNAME_RYO_DEF "亮"
+15 -15
View File
@@ -9,7 +9,7 @@
#include "ngraph.h"
#include "nt_msg.h"
sprite_t *sp_new(int no, int cg1, int cg2, int cg3, int type) {
sprite_t *nt_sp_new(int no, int cg1, int cg2, int cg3, int type) {
sprite_t *sp;
sp = calloc(1, sizeof(sprite_t));
@@ -17,9 +17,9 @@ sprite_t *sp_new(int no, int cg1, int cg2, int cg3, int type) {
sp->no = no;
sp->type = type;
if (cg1) sp->cg1 = scg_loadcg_no(cg1, TRUE); else sp->cg1 = NULL;
if (cg2) sp->cg2 = scg_loadcg_no(cg2, TRUE); else sp->cg2 = NULL;
if (cg3) sp->cg3 = scg_loadcg_no(cg3, TRUE); else sp->cg3 = NULL;
if (cg1) sp->cg1 = nt_scg_loadcg_no(cg1, TRUE); else sp->cg1 = NULL;
if (cg2) sp->cg2 = nt_scg_loadcg_no(cg2, TRUE); else sp->cg2 = NULL;
if (cg3) sp->cg3 = nt_scg_loadcg_no(cg3, TRUE); else sp->cg3 = NULL;
sp->curcg = sp->cg1;
sp->show = TRUE;
@@ -47,7 +47,7 @@ sprite_t *sp_new(int no, int cg1, int cg2, int cg3, int type) {
return sp;
}
sprite_t *sp_msg_new(int no, int x, int y, int width, int height) {
sprite_t *nt_sp_msg_new(int no, int x, int y, int width, int height) {
sprite_t *sp;
sp = calloc(1, sizeof(sprite_t));
@@ -69,12 +69,12 @@ sprite_t *sp_msg_new(int no, int x, int y, int width, int height) {
return sp;
}
void sp_free(sprite_t *sp) {
void nt_sp_free(sprite_t *sp) {
if (sp == NULL) return;
if (sp->cg1) scg_free_cgobj(sp->cg1);
if (sp->cg2) scg_free_cgobj(sp->cg2);
if (sp->cg3) scg_free_cgobj(sp->cg3);
if (sp->cg1) nt_scg_free_cgobj(sp->cg1);
if (sp->cg2) nt_scg_free_cgobj(sp->cg2);
if (sp->cg3) nt_scg_free_cgobj(sp->cg3);
if (sp->type == SPRITE_MSG) {
sf_free(sp->u.msg.canvas);
@@ -83,7 +83,7 @@ void sp_free(sprite_t *sp) {
free(sp);
}
void sp_set_show(sprite_t *sp, boolean show) {
void nt_sp_set_show(sprite_t *sp, boolean show) {
boolean oldshow;
if (sp == NULL) return;
@@ -92,22 +92,22 @@ void sp_set_show(sprite_t *sp, boolean show) {
sp->show = show;
if (oldshow != show) {
sp_updateme(sp);
nt_sp_updateme(sp);
}
}
#if 0
void sp_set_cg(sprite_t *sp, int no) {
void nt_sp_set_cg(sprite_t *sp, int no) {
cginfo_t *cg;
if (sp == NULL) return;
if (sp->curcg) {
scg_free_cgobj(sp->curcg);
nt_scg_free_cgobj(sp->curcg);
}
if (no) {
cg = scg_loadcg_no(no, TRUE);
cg = nt_scg_loadcg_no(no, TRUE);
} else {
cg = NULL;
}
@@ -124,7 +124,7 @@ void sp_set_cg(sprite_t *sp, int no) {
}
#endif
void sp_set_loc(sprite_t *sp, int x, int y) {
void nt_sp_set_loc(sprite_t *sp, int x, int y) {
if (sp == NULL) return;
sp->cur.x = sp->loc.x = x;
sp->cur.y = sp->loc.y = y;
+19 -19
View File
@@ -6,7 +6,7 @@
#include "surface.h"
#include "graphics.h"
#define DEFAULT_UPDATE sp_draw
#define DEFAULT_UPDATE nt_sp_draw
#define SPRITEMAX 20
@@ -107,30 +107,30 @@ typedef struct _sprite sprite_t;
/* in nt_sprite.c */
extern sprite_t *sp_new(int no, int cg1, int cg2, int cg3, int type);
extern sprite_t *sp_msg_new(int no, int x, int y, int width, int height);
extern void sp_free(sprite_t *sp);
extern void sp_set_show(sprite_t *sp, boolean show);
// extern void sp_set_cg(sprite_t *sp, int no);
extern void sp_set_loc(sprite_t *sp, int x, int y);
extern sprite_t *nt_sp_new(int no, int cg1, int cg2, int cg3, int type);
extern sprite_t *nt_sp_msg_new(int no, int x, int y, int width, int height);
extern void nt_sp_free(sprite_t *sp);
extern void nt_sp_set_show(sprite_t *sp, boolean show);
// extern void nt_sp_set_cg(sprite_t *sp, int no);
extern void nt_sp_set_loc(sprite_t *sp, int x, int y);
/* in nt_sprite_update.c */
extern int sp_update_clipped();
extern int sp_update_all(boolean syncscreen);
extern int sp_updateme(sprite_t *sp);
extern int sp_updateme_part(sprite_t *sp, int x, int y, int w, int h);
extern void sp_add_updatelist(sprite_t *sp);
extern void sp_remove_updatelist(sprite_t *sp);
extern int sp_draw_wall(sprite_t *sp, MyRectangle *r);
extern int nt_sp_update_clipped();
extern int nt_sp_update_all(boolean syncscreen);
extern int nt_sp_updateme(sprite_t *sp);
extern int nt_sp_updateme_part(sprite_t *sp, int x, int y, int w, int h);
extern void nt_sp_add_updatelist(sprite_t *sp);
extern void nt_sp_remove_updatelist(sprite_t *sp);
extern int nt_sp_draw_wall(sprite_t *sp, MyRectangle *r);
/* in nt_sprite_draw.c */
extern int sp_draw(sprite_t *sp, MyRectangle *r);
extern int sp_draw2(sprite_t *sp, cginfo_t *cg, MyRectangle *r);
extern void sp_draw_dmap(void* data, void* userdata);
extern int sp_draw_scg(sprite_t *sp, MyRectangle *r);
extern int nt_sp_draw(sprite_t *sp, MyRectangle *r);
extern int nt_sp_draw2(sprite_t *sp, cginfo_t *cg, MyRectangle *r);
extern void nt_sp_draw_dmap(void* data, void* userdata);
extern int nt_sp_draw_scg(sprite_t *sp, MyRectangle *r);
/* in nt_sprite_eupdate.c */
extern int sp_eupdate(int type, int time, int cancel);
extern int nt_sp_eupdate(int type, int time, int cancel);
#endif /* __SPRITE_H__ */
+7 -7
View File
@@ -38,10 +38,10 @@
@param sp: 描画するスプライト
@param r : 再描画する領域
*/
int sp_draw(sprite_t *sp, MyRectangle *r) {
int nt_sp_draw(sprite_t *sp, MyRectangle *r) {
if (sp == NULL) return NG;
return sp_draw2(sp, sp->curcg, r);
return nt_sp_draw2(sp, sp->curcg, r);
}
/*
@@ -52,7 +52,7 @@ int sp_draw(sprite_t *sp, MyRectangle *r) {
@param cg: 描画するCG
@param r : 再描画する領域
*/
int sp_draw2(sprite_t *sp, cginfo_t *cg, MyRectangle *r) {
int nt_sp_draw2(sprite_t *sp, cginfo_t *cg, MyRectangle *r) {
surface_t update;
int sx, sy, w, h, dx, dy;
@@ -76,7 +76,7 @@ int sp_draw2(sprite_t *sp, cginfo_t *cg, MyRectangle *r) {
dx += r->x;
dy += r->y;
if (cg->sf->has_alpha) {
if (cg->sf->alpha) {
// alpha map がある場合
gre_BlendUseAMap(sf0, dx, dy,
sf0, dx, dy,
@@ -96,14 +96,14 @@ int sp_draw2(sprite_t *sp, cginfo_t *cg, MyRectangle *r) {
}
}
WARNING("do update no=%d, sx=%d, sy=%d, w=%d, h=%d, dx=%d, dy=%d\n",
SACT_DEBUG("do update no=%d, sx=%d, sy=%d, w=%d, h=%d, dx=%d, dy=%d\n",
sp->no, sx, sy, w, h, dx, dy);
return OK;
}
// BlendScreenによる描画
int sp_draw_scg(sprite_t *sp, MyRectangle *r) {
int nt_sp_draw_scg(sprite_t *sp, MyRectangle *r) {
surface_t update;
cginfo_t *cg;
int sx, sy, w, h, dx, dy;
@@ -136,7 +136,7 @@ int sp_draw_scg(sprite_t *sp, MyRectangle *r) {
sf0, dx, dy,
cg->sf, sx, sy, w, h);
WARNING("do update no=%d, sx=%d, sy=%d, w=%d, h=%d, dx=%d, dy=%d\n",
SACT_DEBUG("do update no=%d, sx=%d, sy=%d, w=%d, h=%d, dx=%d, dy=%d\n",
sp->no, sx, sy, w, h, dx, dy);
return OK;
+9 -9
View File
@@ -88,7 +88,7 @@ static void ec1_cb(surface_t *sfsrc, surface_t *sfdst) {
}
gre_Blend(sf0, 0, 0, sfsrc, 0, 0, sfdst, 0, 0, sfsrc->width, sfsrc->height, curstep);
// WARNING("step = %d\n", curstep);
// SACT_DEBUG("step = %d\n", curstep);
ags_updateFull();
ecp.oldstep = curstep;
@@ -101,7 +101,7 @@ static void ec7_cb(surface_t *sfsrc, surface_t *sfdst) {
int i, t, y;
curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
//WARNING("step = %d\n", curstep);
//SACT_DEBUG("step = %d\n", curstep);
if (ecp.oldstep == curstep) {
usleep(0);
@@ -129,7 +129,7 @@ static void ec8_cb(surface_t *sfsrc, surface_t *sfdst) {
int i, t, x;
curstep = maxstep * (ecp.curtime - ecp.sttime) / (ecp.edtime - ecp.sttime);
//WARNING("step = %d\n", curstep);
//SACT_DEBUG("step = %d\n", curstep);
if (ecp.oldstep == curstep) {
usleep(0);
@@ -160,7 +160,7 @@ static void ec9_cb(surface_t *sfsrc, surface_t *sfdst) {
sfsrc->width / EC9DELTA + EC9DELTA);
curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
//WARNING("step = %d\n", curstep);
//SACT_DEBUG("step = %d\n", curstep);
if (ecp.oldstep == curstep) {
usleep(0);
@@ -194,7 +194,7 @@ static void ec12_cb(surface_t *src, surface_t *dst) {
int j, st_i, ed_i, l;
curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
WARNING("step = %d\n", curstep);
SACT_DEBUG("step = %d\n", curstep);
if (ecp.oldstep == curstep) {
usleep(0); return;
@@ -225,7 +225,7 @@ static void ec13_cb(surface_t *src, surface_t *dst) {
int dyy = 0 + sf0->height -1;
curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
WARNING("step = %d\n", curstep);
SACT_DEBUG("step = %d\n", curstep);
if (ecp.oldstep == curstep) {
usleep(0); return;
@@ -364,7 +364,7 @@ static void ec_whiteout_cb(surface_t *sfsrc, surface_t *sfdst) {
@param time: 実行時間(msec)
@param cancel: キー抜け(0:なし, 1:あり)
*/
int sp_eupdate(int type, int time, int cancel) {
int nt_sp_eupdate(int type, int time, int cancel) {
surface_t *sfsrc, *sfdst;
int key;
entrypoint *cb;
@@ -372,7 +372,7 @@ int sp_eupdate(int type, int time, int cancel) {
// 現在の sf0 をセーブ
sfsrc = sf_dup(sf0);
sp_update_all(FALSE);
nt_sp_update_all(FALSE);
sfdst = sf_dup(sf0);
@@ -415,7 +415,7 @@ int sp_eupdate(int type, int time, int cancel) {
cb = ec_dummy_cb;
break;
case 1013:
sp_update_all(TRUE); return OK;
nt_sp_update_all(TRUE); return OK;
// cb = ec_dummy_cb;
break;
default:
+22 -27
View File
@@ -67,28 +67,23 @@ static void disjunction(void* region, void* data) {
MyRectangle *r2 = (MyRectangle *)data;
int x1, x2, y1, y2;
//WARNING("r1x=%d,r1y=%d,r1w=%d,r1h=%d\n", r1->x, r1->y, r1->width, r1->height);
//WARNING("r2x=%d,r2y=%d,r2w=%d,r2h=%d\n", r2->x, r2->y, r2->width, r2->height);
if (r2->width == 0) {
r2->x = r1->x;
r2->y = r1->y;
r2->width = r1->width;
r2->height = r1->height;
return;
} else {
x1 = min(r1->x, r2->x);
x2 = max(r1->x + r1->width, r2->x + r2->width);
y1 = min(r1->y, r2->y);
y2 = max(r1->y + r1->height, r2->y + r2->height);
r2->x = x1;
r2->y = y1;
r2->width = x2 - x1;
r2->height = y2 - y1;
}
x1 = min(r1->x, r2->x);
x2 = max(r1->x + r1->width, r2->x + r2->width);
y1 = min(r1->y, r2->y);
y2 = max(r1->y + r1->height, r2->y + r2->height);
r2->x = x1;
r2->y = y1;
r2->width = x2 - x1;
r2->height = y2 - y1;
//WARNING("res:r2x=%d,r2y=%d,r2w=%d,r2h=%d\n", r2->x, r2->y, r2->width, r2->height);
free(r1);
}
// 更新の必要なスプライトの領域の和をとってクリッピングする
@@ -105,7 +100,7 @@ static MyRectangle get_updatearea() {
// surface0との領域の積をとる
intersection(&rsf0, &clip, &result);
WARNING("clipped area x=%d y=%d w=%d h=%d\n",
SACT_DEBUG("clipped area x=%d y=%d w=%d h=%d\n",
result.x, result.y,
result.width, result.height);
@@ -130,7 +125,7 @@ static void do_update_each(void* data, void* userdata) {
画面全体の更新
@param syncscreen: surface0 に描画したものを Screen に反映させるかどうか
*/
int sp_update_all(boolean syncscreen) {
int nt_sp_update_all(boolean syncscreen) {
// 画面全体を更新領域に
MyRectangle r = {0, 0, sf0->width, sf0->height };
@@ -152,7 +147,7 @@ int sp_update_all(boolean syncscreen) {
画面の一部を更新
updateme(_part)で登録した更新が必要なspriteの和の領域をupdate
*/
int sp_update_clipped() {
int nt_sp_update_clipped() {
MyRectangle r;
// 更新領域の確定
@@ -176,7 +171,7 @@ int sp_update_clipped() {
sprite全体の更新を登録
@param sp: 更新するスプライト
*/
int sp_updateme(sprite_t *sp) {
int nt_sp_updateme(sprite_t *sp) {
MyRectangle *r;
if (sp == NULL) return NG;
@@ -190,7 +185,7 @@ int sp_updateme(sprite_t *sp) {
updatearea = slist_append(updatearea, r);
WARNING("x = %d, y = %d, spno = %d w=%d,h=%d\n",
SACT_DEBUG("x = %d, y = %d, spno = %d w=%d,h=%d\n",
r->x, r->y, sp->no, r->width, r->height);
return OK;
@@ -204,7 +199,7 @@ int sp_updateme(sprite_t *sp) {
@param w: 更新領域幅
@param h: 更新領域高さ
*/
int sp_updateme_part(sprite_t *sp, int x, int y, int w, int h) {
int nt_sp_updateme_part(sprite_t *sp, int x, int y, int w, int h) {
MyRectangle *r;
if (sp == NULL) return NG;
@@ -218,7 +213,7 @@ int sp_updateme_part(sprite_t *sp, int x, int y, int w, int h) {
updatearea = slist_append(updatearea, r);
WARNING("x = %d, y = %d, spno = %d w=%d,h=%d\n",
SACT_DEBUG("x = %d, y = %d, spno = %d w=%d,h=%d\n",
r->x, r->y, sp->no, r->width, r->height);
return OK;
@@ -238,16 +233,16 @@ static int compare_spriteno_smallfirst(const void *a, const void *b) {
return 0;
}
void sp_add_updatelist(sprite_t *sp) {
void nt_sp_add_updatelist(sprite_t *sp) {
updatelist = slist_insert_sorted(updatelist, sp, compare_spriteno_smallfirst);
}
void sp_remove_updatelist(sprite_t *sp) {
void nt_sp_remove_updatelist(sprite_t *sp) {
updatelist = slist_remove(updatelist, sp);
}
// デフォルトの壁紙update
int sp_draw_wall(sprite_t *sp, MyRectangle *area) {
int nt_sp_draw_wall(sprite_t *sp, MyRectangle *area) {
int sx, sy, w, h;
sx = area->x;
@@ -256,7 +251,7 @@ int sp_draw_wall(sprite_t *sp, MyRectangle *area) {
h = area->height;
gr_fill(sf0, sx, sy, w, h, 0, 0, 0);
WARNING("do update no=%d, sx=%d, sy=%d, w=%d, h=%d, \n",
SACT_DEBUG("do update no=%d, sx=%d, sy=%d, w=%d, h=%d, \n",
sp->no, sx, sy, w, h);
return OK;
-9
View File
@@ -1,9 +0,0 @@
include(FindJPEG)
if (JPEG_FOUND)
add_library(NightDemonDemo MODULE NightDemonDemo.c ndd.c jpeg2surface.c)
target_link_libraries(NightDemonDemo PRIVATE graph alk JPEG::JPEG)
install(TARGETS NightDemonDemo DESTINATION lib/xsystem35)
endif()
+15 -3
View File
@@ -28,28 +28,40 @@
#include "portab.h"
#include "system.h"
#include "xsystem35.h"
#include "modules.h"
#include "nact.h"
extern void ndd_init(char *files[], int n);
extern void ndd_init(const char *files[], int n);
extern void ndd_run(int demonum);
void Init() {
static void Init() {
int p1 = getCaliValue(); /* ISys3x */
int p2 = getCaliValue(); /* IWinMsg */
int p3 = getCaliValue(); /* ITimer */
int *var = getCaliVariable();
#ifdef HAVE_JPEG
ndd_init(nact->files.alk, 4);
#endif
*var = 1;
DEBUG_COMMAND("NightDemonDemo.Init %d,%d,%d,%p:\n", p1, p2, p3, var);
}
void Run() {
static void Run() {
int p1 = getCaliValue(); // デモ番号 0,1,2
int p2 = getCaliValue();
#ifdef HAVE_JPEG
ndd_run(p1);
#endif
DEBUG_COMMAND("NightDemonDemo.Run %d,%d:\n", p1, p2);
}
static const ModuleFunc functions[] = {
{"Init", Init},
{"Run", Run},
};
const Module module_NightDemonDemo = {"NightDemonDemo", functions, sizeof(functions) / sizeof(ModuleFunc)};
+4 -2
View File
@@ -21,10 +21,12 @@
*/
/* $Id: jpeg2surface.c,v 1.2 2003/11/09 15:06:12 chikama Exp $ */
#include "config.h"
#include <stdio.h>
#include <jpeglib.h>
#undef max
#undef min
#include "config.h"
#include "portab.h"
#include "ags.h"
+2 -2
View File
@@ -39,7 +39,7 @@
// 2: Meteo
struct nddemo {
char **fn;
const char **fn;
alk_t *alk;
surface_t *sf[10];
};
@@ -52,7 +52,7 @@ static int ndemo_nums[3] = {150, 603, 467};
extern surface_t *jpeg2surface(FILE *fp, int offset);
// ALKファイルの登録
void ndd_init(char *files[], int n) {
void ndd_init(const char *files[], int n) {
int i;
ndd.fn = malloc(sizeof(char *) * n);
-3
View File
@@ -1,3 +0,0 @@
add_library(RandMT MODULE RandMT.c)
install(TARGETS RandMT DESTINATION lib/xsystem35)
+12 -3
View File
@@ -28,10 +28,11 @@
#include "portab.h"
#include "system.h"
#include "xsystem35.h"
#include "modules.h"
#include "nact.h"
#include "randMT.h"
void Init() {
static void Init() {
/*
乱数初期化
@@ -42,7 +43,7 @@ void Init() {
DEBUG_COMMAND_YET("RandMT.Init %p:\n", p1);
}
void Get() {
static void Get() {
/*
1 から num までの乱数を生成
@@ -61,10 +62,18 @@ void Get() {
DEBUG_COMMAND_YET("RandMT.Get %d,%p:\n", num, var);
}
void GetNoOverlap() { /* not used ? */
static void GetNoOverlap() { /* not used ? */
int p1 = getCaliValue();
int p2 = getCaliValue();
int *var1 = getCaliVariable();
DEBUG_COMMAND_YET("RandMT.GetNoOverlap %p:\n", p1);
}
static const ModuleFunc functions[] = {
{"Get", Get},
{"GetNoOverlap", GetNoOverlap},
{"Init", Init},
};
const Module module_RandMT = {"RandMT", functions, sizeof(functions) / sizeof(ModuleFunc)};
-35
View File
@@ -1,35 +0,0 @@
add_library(SACT MODULE
SACT.c
sactcg.c
sactsound.c
sactbgm.c
sacttimer.c
sactstring.c
sactcrypto.c
sactchart.c
sactamask.c
sactlog.c
sprite.c
sprite_event.c
sprite_tevent.c
sprite_move.c
sprite_anime.c
sprite_get.c
sprite_put.c
sprite_switch.c
sprite_sel.c
sprite_msg.c
sprite_draw.c
sprite_update.c
sprite_eupdate.c
sprite_quake.c
sprite_keywait.c
screen_quake.c
sprite_xmenu.c
)
target_compile_options(SACT PRIVATE -Wno-pointer-sign -Wno-invalid-source-encoding)
target_link_libraries(SACT PRIVATE graph drawtext list)
install(TARGETS SACT DESTINATION lib/xsystem35)
+249 -123
View File
File diff suppressed because it is too large Load Diff
+2 -4
View File
@@ -32,7 +32,7 @@
#include "surface.h"
#include "sacttimer.h"
#include "variable.h"
#include "mmap.h"
// スプライトの最大数
#define SPRITEMAX 21845
@@ -63,9 +63,7 @@ typedef struct {
// SACTEFAM を使ったマスク
typedef struct {
int fd; // SACTEFAM.KLD のファイルディスクプリタ
char *mapadr; // mmap された最初のアドレス
off_t size; // mmap した大きさ
mmap_t *mmap;
int datanum; // SACTEFAM.KLD 中のマスクファイルの数
int *no; // シナリオ側での番号
int *offset; // データへのオフセット
+8 -32
View File
@@ -27,11 +27,6 @@
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "portab.h"
#include "system.h"
@@ -60,40 +55,21 @@ static ecopyparam_t ecp;
// SACTEFAM.KLD の読み込み
int smask_init(char *path) {
struct stat sbuf;
int i, fd;
char *adr;
int i;
SACTEFAM_t *am;
if (0 > (fd = open(path, O_RDONLY))) {
WARNING("open: %s\n", strerror(errno));
mmap_t *m = map_file(path);
if (!m)
return NG;
}
if (0 > fstat(fd, &sbuf)) {
WARNING("fstat: %s\n", strerror(errno));
close(fd);
return NG;
}
if (MAP_FAILED == (adr = mmap(0, sbuf.st_size, PROT_READ, MAP_SHARED, fd, 0))) {
WARNING("mmap: %s\n", strerror(errno));
close(fd);
return NG;
}
am = &sact.am;
am->mapadr = adr;
am->size = sbuf.st_size;
am->fd = fd;
am->datanum = LittleEndian_getDW(adr, 0);
am->mmap = m;
am->datanum = LittleEndian_getDW(m->addr, 0);
am->no = malloc(sizeof(int) * am->datanum);
am->offset = malloc(sizeof(int) * am->datanum);
for (i = 0; i < am->datanum; i++) {
am->no[i] = LittleEndian_getDW(adr, 16 + i * 16);
am->offset[i] = LittleEndian_getDW(adr, 16 + i * 16 + 8);
am->no[i] = LittleEndian_getDW(m->addr, 16 + i * 16);
am->offset[i] = LittleEndian_getDW(m->addr, 16 + i * 16 + 8);
}
return OK;
@@ -110,7 +86,7 @@ static surface_t *smask_get(int no) {
if (i == am->datanum) return NULL;
return sf_getcg(am->mapadr + am->offset[i]);
return sf_getcg(am->mmap->addr + am->offset[i]);
}
// ベースになるマスクの alpha 値を拡大して取り出す
+1 -1
View File
@@ -24,6 +24,6 @@
#ifndef __SACTAMASK_H__
#define __SACTAMASK_H__
extern int smask_init(char *path);
extern int smask_init(const char *path);
#endif
+15 -29
View File
@@ -35,7 +35,6 @@
#include "sactcg.h"
#include "surface.h"
#include "ngraph.h"
#include "utfsjis.h"
#include "sactcg_stretch.c"
#include "sactcg_blend.c"
@@ -202,24 +201,14 @@ int scg_create_blend(int wNumDstCG, int wNumBaseCG, int wX, int wY, int wNumBlen
// 指定の文字列のCGを作成
int scg_create_text(int wNumCG, int wSize, int wR, int wG, int wB, int wText) {
cginfo_t *i;
agsurface_t *glyph;
FONT *font;
if (0) {
char *b = sjis2lang(v_str(wText-1));
WARNING("str = '%s'\n", b);
free(b);
}
spcg_assert_no(wNumCG);
// 勝手に出ていいのかな?
if (v_strlen(wText -1) == 0) return OK;
font = nact->ags.font;
font->sel_font(FONT_GOTHIC, wSize);
glyph = font->get_glyph(v_str(wText -1));
if (svar_length(wText) == 0) return OK;
ags_setFont(FONT_GOTHIC, wSize);
agsurface_t *glyph = ags_drawStringToSurface(svar_get(wText));
i = malloc(sizeof(cginfo_t));
i->type = CG_SET;
i->no = wNumCG;
@@ -240,8 +229,6 @@ int scg_create_text(int wNumCG, int wSize, int wR, int wG, int wB, int wText) {
// 数字文字列のCGを作成
int scg_create_textnum(int wNumCG, int wSize, int wR, int wG, int wB, int wFigs, int wZeroPadding, int wValue) {
cginfo_t *i;
agsurface_t *glyph;
FONT *font;
char s[256], ss[256];
spcg_assert_no(wNumCG);
@@ -254,11 +241,10 @@ int scg_create_textnum(int wNumCG, int wSize, int wR, int wG, int wB, int wFigs,
sprintf(ss, sss, wFigs);
}
sprintf(s, ss, wValue);
font = nact->ags.font;
font->sel_font(FONT_GOTHIC, wSize);
glyph = font->get_glyph(s);
ags_setFont(FONT_GOTHIC, wSize);
agsurface_t *glyph = ags_drawStringToSurface(s);
i = malloc(sizeof(cginfo_t));
i->type = CG_SET;
i->no = wNumCG;
@@ -320,15 +306,15 @@ int scg_cut(int wNumDstCG, int wNumSrcCG, int wX, int wY, int wWidth, int wHeigh
i->refcnt = 0;
src = srccg->sf;
if (src->has_alpha) {
if (src->alpha) {
dst = sf_create_surface(wWidth, wHeight, src->depth);
} else {
dst = sf_create_pixel(wWidth, wHeight, src->depth);
}
if (src->has_pixel) {
if (src->pixel) {
gr_copy(dst, 0, 0, src, wX, wY, wWidth, wHeight);
}
if (src->has_alpha) {
if (src->alpha) {
gr_copy_alpha_map(dst, 0, 0, src, wX, wY, wWidth, wHeight);
}
@@ -361,17 +347,17 @@ int scg_partcopy(int wNumDstCG, int wNumSrcCG, int wX, int wY, int wWidth, int w
i->refcnt = 0;
src = srccg->sf;
if (src->has_alpha) {
if (src->alpha) {
dst = sf_create_surface(src->width, src->height, src->depth);
gr_fill_alpha_map(dst, 0, 0, src->width, src->height, 255);
} else {
dst = sf_create_pixel(src->width, src->height, src->depth);
}
if (src->has_pixel) {
if (src->pixel) {
gr_copy(dst, wX, wY, src, wX, wY, wWidth, wHeight);
}
if (src->has_alpha) {
if (src->alpha) {
gr_copy_alpha_map(dst, wX, wY, src, wX, wY, wWidth, wHeight);
}
@@ -496,7 +482,7 @@ int scg_existalphamap(int wNumCG, int *ret) {
if (sact.cg[wNumCG] == NULL) goto errexit;
if (sact.cg[wNumCG]->sf == NULL) goto errexit;
*ret = sact.cg[wNumCG]->sf->has_alpha ? 1 : 0;
*ret = sact.cg[wNumCG]->sf->alpha ? 1 : 0;
errexit:
*ret = 0;
+2 -2
View File
@@ -4,7 +4,7 @@ static surface_t *blend(surface_t *base, int x, int y, surface_t *blend, int mod
gr_copy(dst, 0, 0, base, 0, 0, base->width, base->height);
if (base->has_alpha) {
if (base->alpha) {
// ベースに alpha map がある場合はそれをコピー
gr_copy_alpha_map(dst, 0, 0, base, 0, 0, base->width, base->height);
} else {
@@ -12,7 +12,7 @@ static surface_t *blend(surface_t *base, int x, int y, surface_t *blend, int mod
gr_fill_alpha_map(dst, 0, 0, base->width, base->height, 255);
}
if (blend->has_alpha) {
if (blend->alpha) {
// 重ね合わせ先の alpha map があるときはそれを使う
gre_BlendUseAMap(dst, x, y, base, x, y, blend, 0, 0, blend->width, blend->height, blend, 0, 0, 255);
} else {
+3 -5
View File
@@ -12,13 +12,11 @@ static surface_t *stretch(surface_t *src, int dw, int dh, int mirror) {
dst->depth = src->depth;
dst->bytes_per_line = dw * src->bytes_per_pixel;
dst->bytes_per_pixel = src->bytes_per_pixel;
dst->has_pixel = src->has_pixel;
dst->has_alpha = src->has_alpha;
if (src->has_pixel) {
if (src->pixel) {
dst->pixel = malloc(dh * dst->bytes_per_line);
}
if (src->has_alpha) {
if (src->alpha) {
dst->alpha = malloc(dw * dh);
}
@@ -88,7 +86,7 @@ static surface_t *stretch(surface_t *src, int dw, int dh, int mirror) {
break;
}
if (src->has_alpha) {
if (src->alpha) {
int x, y;
BYTE *sl, *dl;
BYTE *_sl, *_dl;
+1 -1
View File
@@ -47,7 +47,7 @@ int scryp_encrypt_str(int strno, int key) {
}
int scryp_decrypt_str(int strno, int key) {
WARNING("str = '%s'\n", v_str(strno -1));
WARNING("str = '%s'\n", svar_get(strno));
WARNING("NOT IMPLEMENTED\n");
return OK;
}
+21 -12
View File
@@ -40,7 +40,17 @@
#include "ngraph.h"
#include "drawtext.h"
#include "utfsjis.h"
#include "sactlog_sjismsg.c"
#define LOGMSG_LINES 6
static const char *logmsg_utf8[LOGMSG_LINES] = {
"\n",
"※バックログ操作方法※",
"[ESC]またはマウス右クリックでゲームに戻る",
"[PageUp][PageDown]でページスクロール",
"[↑][↓]またはマウスホイールで行スクロール",
"\n",
};
/*
ホイールで上下スクロール
@@ -73,21 +83,18 @@ static void draw_log() {
// 表示始め位置
node = list_nth(sact.log, list_length(sact.log) - curline);
for (i = 0; i < LOGLINENUM; i++) {
char *str, *streuc;
if (cur <= 0) continue;
str = (char *)(node->data);
char *str = (char *)(node->data);
if (0 == strcmp(str, "\n")) {
gr_fill(chr, 0, y + FONTSIZE/2, sf0->width, 3, 128, 0, 0);
} else {
streuc = sjis2lang(str);
if (cur < 6) {
dt_setfont(FONT_MINCHO, FONTSIZE);
} else {
dt_setfont(FONT_GOTHIC, FONTSIZE);
}
dt_drawtext(chr, 0, y, str);
free(streuc);
}
y += FONTSIZE;
cur--;
@@ -103,13 +110,15 @@ static void draw_log() {
int sblog_start(void) {
static char *logmsg[LOGMSG_LINES];
if (!logmsg[0]) {
for (int i = 0; i < LOGMSG_LINES; i++)
logmsg[i] = fromUTF8(logmsg_utf8[i]);
}
// 説明文章を追加
sact.log = list_append(sact.log, "\n");
sact.log = list_append(sact.log, LOGMSG1);
sact.log = list_append(sact.log, LOGMSG2);
sact.log = list_append(sact.log, LOGMSG3);
sact.log = list_append(sact.log, LOGMSG4);
sact.log = list_append(sact.log, "\n");
for (int i = 0; i < LOGMSG_LINES; i++)
sact.log = list_append(sact.log, logmsg[i]);
back = sf_dup(sf0);
chr = sf_create_surface(sf0->width, sf0->height, 8);
@@ -129,7 +138,7 @@ int sblog_end(void) {
sf_free(chr);
// 説明文章を削除
for (i = 0; i < 6; i++) {
for (i = 0; i < LOGMSG_LINES; i++) {
node = list_last(sact.log);
sact.log = list_remove(sact.log, node->data);
}
-5
View File
@@ -1,5 +0,0 @@
#define LOGMSG1 "※バックログ操作方法※"
#define LOGMSG2 "[ESC]またはマウス右クリックでゲームに戻る"
#define LOGMSG3 "[PageUp][PageDown]でページスクロール"
#define LOGMSG4 "[↑][↓]またはマウスホイールで行スクロール"
+2 -3
View File
@@ -140,14 +140,13 @@ int ssnd_waitkey(int no, int *res) {
}
if (sact.waitkey == -1) {
cache[slot - SLOTOFFSET] = 0;
*res = 0;
} else {
*res = sact.waitkey;
}
sact.waittype = KEYWAIT_NONE;
cache[slot - SLOTOFFSET] = 0;
return OK;
}
+5 -5
View File
@@ -56,7 +56,7 @@ int sstr_push(int strno) {
idxmax = idx*2;
}
stack[idx++] = strdup(v_str(strno -1));
stack[idx++] = strdup(svar_get(strno));
return OK;
}
@@ -68,7 +68,7 @@ int sstr_push(int strno) {
int sstr_pop(int strno) {
if (idx == 0) return NG;
v_strcpy(strno -1, stack[--idx]);
svar_set(strno, stack[--idx]);
free(stack[idx]);
return OK;
@@ -85,8 +85,8 @@ int sstr_regist_replace(int sstrno, int dstrno) {
if (sstrno == dstrno) return NG;
ex = malloc(sizeof(strexchange_t));
ex->src = strdup(v_str(sstrno -1));
ex->dst = strdup(v_str(dstrno -1));
ex->src = strdup(svar_get(sstrno));
ex->dst = strdup(svar_get(dstrno));
sact.strreplace = slist_append(sact.strreplace, ex);
return OK;
}
@@ -106,7 +106,7 @@ int sstr_num2str(int strno, int fig, int nzeropad, int num) {
}
sprintf(s, ss, num);
v_strcpy(strno -1, s);
svar_set(strno, s);
return OK;
}
+1 -1
View File
@@ -81,7 +81,7 @@ static int sp_draw_wall(sprite_t *sp) {
h = sact.updaterect.height;
gr_fill(sf0, sx, sy, w, h, 0, 0, 0);
WARNING("do update no=%d, sx=%d, sy=%d, w=%d, h=%d, \n",
SACT_DEBUG("do update no=%d, sx=%d, sy=%d, w=%d, h=%d, \n",
sp->no, sx, sy, w, h);
return OK;
+1 -1
View File
@@ -83,7 +83,7 @@ extern void sp_draw_dmap(void* data, void* userdata);
// in sprite_msg.c
extern void smsg_add(char *msg);
extern void smsg_add(const char *msg);
extern void smsg_newline(int wNum, int size);
extern void smsg_out(int wNum, int wSize, int wColorR, int wColorG, int wColorB, int wFont, int wSpeed, int wLineSpace, int wAlign, int wRSize, int wRFont, int wRLineSpace, int *wLength);
extern void smsg_clear(int wNum);
+1 -1
View File
@@ -62,7 +62,7 @@ static int eventCB_ANIM(sprite_t *sp, agsevent_t *e) {
sp->curcg = sp->cg3; break;
}
// WARNING("anime update\n");
// SACT_DEBUG("anime update\n");
// カウントアップ
sp->u.anime.tick++;
+3 -3
View File
@@ -117,7 +117,7 @@ int sp_draw2(sprite_t *sp, cginfo_t *cg) {
dx += sact.updaterect.x;
dy += sact.updaterect.y;
if (cg->sf->has_alpha) {
if (cg->sf->alpha) {
// alpha map がある場合
gre_BlendUseAMap(sf0, dx, dy,
sf0, dx, dy,
@@ -137,7 +137,7 @@ int sp_draw2(sprite_t *sp, cginfo_t *cg) {
}
}
WARNING("do update no=%d, sx=%d, sy=%d, w=%d, h=%d, dx=%d, dy=%d\n", sp->no, sx, sy, w, h, dx, dy);
SACT_DEBUG("do update no=%d, sx=%d, sy=%d, w=%d, h=%d, dx=%d, dy=%d\n", sp->no, sx, sy, w, h, dx, dy);
return OK;
}
@@ -175,7 +175,7 @@ void sp_draw_dmap(void* data, void* userdata) {
return;
}
if (cg->sf->has_alpha) {
if (cg->sf->alpha) {
fill_dmap_mask(cg->sf, sx, sy, dx, dy, w, h, sp->no);
} else {
fill_dmap(dx, dy, w, h, sp->no);
+6 -6
View File
@@ -131,7 +131,7 @@ static void ec1_cb(surface_t *sfsrc, surface_t *sfdst) {
}
gre_Blend(sf0, 0, 0, sfsrc, 0, 0, sfdst, 0, 0, sfsrc->width, sfsrc->height, curstep);
WARNING("step = %d\n", curstep);
SACT_DEBUG("step = %d\n", curstep);
ags_updateFull();
ecp.oldstep = curstep;
@@ -144,7 +144,7 @@ static void ec7_cb(surface_t *sfsrc, surface_t *sfdst) {
int i, t, y;
curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
WARNING("step = %d\n", curstep);
SACT_DEBUG("step = %d\n", curstep);
if (ecp.oldstep == curstep) {
usleep(0);
@@ -172,7 +172,7 @@ static void ec8_cb(surface_t *sfsrc, surface_t *sfdst) {
int i, t, x;
curstep = maxstep * (ecp.curtime - ecp.sttime) / (ecp.edtime - ecp.sttime);
WARNING("step = %d\n", curstep);
SACT_DEBUG("step = %d\n", curstep);
if (ecp.oldstep == curstep) {
usleep(0);
@@ -203,7 +203,7 @@ static void ec9_cb(surface_t *sfsrc, surface_t *sfdst) {
sfsrc->width / EC9DELTA + EC9DELTA);
curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
WARNING("step = %d\n", curstep);
SACT_DEBUG("step = %d\n", curstep);
if (ecp.oldstep == curstep) {
usleep(0);
@@ -237,7 +237,7 @@ static void ec12_cb(surface_t *src, surface_t *dst) {
int j, st_i, ed_i, l;
curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
WARNING("step = %d\n", curstep);
SACT_DEBUG("step = %d\n", curstep);
if (ecp.oldstep == curstep) {
usleep(0); return;
@@ -268,7 +268,7 @@ static void ec13_cb(surface_t *src, surface_t *dst) {
int dyy = 0 + sf0->height -1;
curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
WARNING("step = %d\n", curstep);
SACT_DEBUG("step = %d\n", curstep);
if (ecp.oldstep == curstep) {
usleep(0); return;
+6 -2
View File
@@ -1,3 +1,4 @@
#include <stdlib.h>
#include "ngraph.h"
#include "graph.h"
@@ -15,7 +16,7 @@ static void ec10_cb(surface_t *sfsrc, surface_t *sfdst) {
curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
turstep = maxstep / 2;
WARNING("step = %d/%d\n", curstep, maxstep);
SACT_DEBUG("step = %d/%d\n", curstep, maxstep);
if (curstep > turstep) {
// 帰り
@@ -42,7 +43,10 @@ static void ec10_cb(surface_t *sfsrc, surface_t *sfdst) {
if (ec10_sf[0] == NULL) {
ec10_sf[0] = sf_dup2(sfsrc, FALSE, FALSE);
sf = ec10_sf[0];
sf->has_alpha = FALSE;
if (sf->alpha) {
free(sf->alpha);
sf->alpha = NULL;
}
gr_copy_stretch(sf, 0, 0, sf->width, sf->height, sfsrc, sx, sy, sw, sh);
gr_bright_dst_only(sf, 0, 0, sf->width, sf->height, 255/6);
return;
+4 -4
View File
@@ -92,7 +92,7 @@ static void cb_focused_swsp(void* s, void* data) {
int *update = (int *)data;
boolean oldstate = sp->show;
WARNING("show up spex %d\n", sp->no);
SACT_DEBUG("show up spex %d\n", sp->no);
sp->show = TRUE;
if (oldstate != sp->show) {
@@ -110,7 +110,7 @@ static void cb_defocused_swsp(void* s, void* data) {
int *update = (int *)data;
boolean oldstate = sp->show;
WARNING("hide spex %d\n", sp->no);
SACT_DEBUG("hide spex %d\n", sp->no);
sp->show = FALSE;
if (oldstate != sp->show) {
@@ -174,7 +174,7 @@ static int cb_focused(sprite_t *sp) {
update++;
}
sp->focused = TRUE;
WARNING("get forcused %d, type %d\n", sp->no, sp->type);
SACT_DEBUG("get forcused %d, type %d\n", sp->no, sp->type);
if (sp->numsound1) {
ssnd_play(sp->numsound1);
}
@@ -197,7 +197,7 @@ static int cb_defocused(sprite_t *sp) {
sp->curcg = sp->cg1;
update++;
sp->focused = FALSE;
WARNING("lost forcused %d\n", sp->no);
SACT_DEBUG("lost forcused %d\n", sp->no);
}
return update;
+4 -2
View File
@@ -74,7 +74,7 @@ static int move_cb(sprite_t *sp, agsevent_t *e) {
// 現在時刻の取得
now = sact.movecurtime;
WARNING("no = %d now = %d st = %d, ed = %d\n",
SACT_DEBUG("no = %d now = %d st = %d, ed = %d\n",
sp->no, now, sp->move.starttime, sp->move.endtime);
if (now >= sp->move.endtime) {
@@ -135,7 +135,7 @@ void spev_move_setup(void* data, void* userdata) {
// タイマコールバック登録
spev_add_teventlistener(sp, move_cb);
WARNING("no=%d,from(%d,%d@%d)to(%d,%d@%d),time=%d\n", sp->no,
SACT_DEBUG("no=%d,from(%d,%d@%d)to(%d,%d@%d),time=%d\n", sp->no,
sp->cur.x, sp->cur.y, sp->move.starttime,
sp->move.to.x, sp->move.to.y, sp->move.endtime,
sp->move.time);
@@ -164,6 +164,7 @@ void spev_move_waitend(sprite_t *sp, int dx, int dy, int time) {
while (sp->move.moving) {
nact->callback();
WaitVsync();
}
}
@@ -182,6 +183,7 @@ void spev_wait4moving_sp() {
while (sp->move.moving) {
nact->callback();
WaitVsync();
}
}
}
+4 -17
View File
@@ -38,7 +38,6 @@
#include "ngraph.h"
#include "drawtext.h"
#include "sactlog.h"
#include "utfsjis.h"
// メッセージキー待ちの時、表示するアニメーションに関する情報
struct markinfo {
@@ -188,17 +187,11 @@ static int setupmark(int wNum1, int wNum2, struct markinfo *minfo) {
@param msg:
*/
void smsg_add(char *msg) {
void smsg_add(const char *msg) {
int len;
if (msg[0] == '\0') return;
if (0) {
char *b = sjis2lang(msg);
fprintf(stderr, "add msg '%s'\n", b);
free(b);
}
len = MSGBUFMAX - (int)strlen(sact.msgbuf);
if (len < 0) {
WARNING("buf shortage (%d)\n", len);
@@ -304,12 +297,6 @@ void smsg_out(int wNum, int wSize, int wColorR, int wColorG, int wColorB, int wF
}
dt_setfont(wFont, wSize);
if (0) {
char *b = sjis2lang(mbuf);
fprintf(stderr, "msg '%s'\n", b);
free(b);
}
cw = dt_drawtext_col(sp->u.msg.canvas,
sp->u.msg.dspcur.x,
sp->u.msg.dspcur.y + wRSize + wRLineSpace,
@@ -392,10 +379,10 @@ void smsg_clear(int wNum) {
/*
@return: (0) , (1)
@return: (1) , (0)
*/
int smsg_is_empty() {
return (sact.msgbuf[0] != '\0');
return (sact.msgbuf[0] == '\0');
}
/*
@@ -471,7 +458,7 @@ int smsg_update(sprite_t *sp) {
gre_BlendUseAMap(sf0, dx, dy, sf0, dx, dy, sp->u.msg.canvas, sx, sy, w, h, sp->u.msg.canvas, sx, sy, sp->blendrate);
WARNING("do update no=%d, sx=%d, sy=%d, w=%d, h=%d, dx=%d, dy=%d\n",
SACT_DEBUG("do update no=%d, sx=%d, sy=%d, w=%d, h=%d, dx=%d, dy=%d\n",
sp->no, sx, sy, w, h, dx, dy);
return OK;
+1 -1
View File
@@ -284,7 +284,7 @@ void ssel_add(int nString, int wI) {
free(sact.sel.elem[wI]);
}
sact.sel.elem[wI] = strdup(v_str(nString -1));
sact.sel.elem[wI] = strdup(svar_get(nString));
}
/*
+14 -19
View File
@@ -63,28 +63,23 @@ static void disjunction(void* region, void* data) {
MyRectangle *r2 = (MyRectangle *)data;
int x1, x2, y1, y2;
//WARNING("r1x=%d,r1y=%d,r1w=%d,r1h=%d\n", r1->x, r1->y, r1->width, r1->height);
//WARNING("r2x=%d,r2y=%d,r2w=%d,r2h=%d\n", r2->x, r2->y, r2->width, r2->height);
if (r2->width == 0) {
r2->x = r1->x;
r2->y = r1->y;
r2->width = r1->width;
r2->height = r1->height;
return;
} else {
x1 = min(r1->x, r2->x);
x2 = max(r1->x + r1->width, r2->x + r2->width);
y1 = min(r1->y, r2->y);
y2 = max(r1->y + r1->height, r2->y + r2->height);
r2->x = x1;
r2->y = y1;
r2->width = x2 - x1;
r2->height = y2 - y1;
}
x1 = min(r1->x, r2->x);
x2 = max(r1->x + r1->width, r2->x + r2->width);
y1 = min(r1->y, r2->y);
y2 = max(r1->y + r1->height, r2->y + r2->height);
r2->x = x1;
r2->y = y1;
r2->width = x2 - x1;
r2->height = y2 - y1;
//WARNING("res:r2x=%d,r2y=%d,r2w=%d,r2h=%d\n", r2->x, r2->y, r2->width, r2->height);
free(r1);
}
// 更新の必要なスプライトの領域の和をとってクリッピングする
@@ -100,7 +95,7 @@ static void get_updatearea() {
// surface0との領域の積をとる
intersection(&rsf0, &clip, &sact.updaterect);
WARNING("clipped area x=%d y=%d w=%d h=%d\n",
SACT_DEBUG("clipped area x=%d y=%d w=%d h=%d\n",
sact.updaterect.x, sact.updaterect.y,
sact.updaterect.width, sact.updaterect.height);
@@ -206,7 +201,7 @@ int sp_updateme(sprite_t *sp) {
updatearea = slist_append(updatearea, r);
WARNING("x = %d, y = %d, spno = %d w=%d,h=%d\n",
SACT_DEBUG("x = %d, y = %d, spno = %d w=%d,h=%d\n",
r->x, r->y, sp->no, r->width, r->height);
return OK;
@@ -234,7 +229,7 @@ int sp_updateme_part(sprite_t *sp, int x, int y, int w, int h) {
updatearea = slist_append(updatearea, r);
WARNING("x = %d, y = %d, spno = %d w=%d,h=%d\n",
SACT_DEBUG("x = %d, y = %d, spno = %d w=%d,h=%d\n",
r->x, r->y, sp->no, r->width, r->height);
return OK;
+2 -2
View File
@@ -67,7 +67,7 @@ int spxm_getnum(int reginum) {
int spxm_gettext(int reginum, int strno) {
if (reginum > SEL_ELEMENT_MAX) return NG;
v_strcpy(strno -1, xmenu.item[reginum]);
svar_set(strno, xmenu.item[reginum]);
return OK;
}
@@ -78,6 +78,6 @@ int spxm_titlereg(void) {
}
int spxm_titleget(int strno) {
v_strcpy(strno -1, xmenu.title);
svar_set(strno, xmenu.title);
return OK;
}
-3
View File
@@ -1,3 +0,0 @@
add_library(ShArray MODULE ShArray.c)
install(TARGETS ShArray DESTINATION lib/xsystem35)
+114 -54
View File
@@ -31,9 +31,10 @@
#include "portab.h"
#include "system.h"
#include "xsystem35.h"
#include "modules.h"
#include "nact.h"
void GetAtArray(void) { /* 0 */
static void GetAtArray(void) { /* 0 */
/*
@@ -79,7 +80,7 @@ void GetAtArray(void) { /* 0 */
*vResult = j;
}
void AddAtArray(void) { /* 1 */
static void AddAtArray(void) { /* 1 */
/*
65535 65535
@@ -105,7 +106,7 @@ void AddAtArray(void) { /* 1 */
}
}
void SubAtArray(void) { /* 2 */
static void SubAtArray(void) { /* 2 */
/*
@@ -131,7 +132,7 @@ void SubAtArray(void) { /* 2 */
}
}
void MulAtArray(void) { /* 3 */
static void MulAtArray(void) { /* 3 */
/*
65535
@@ -157,7 +158,7 @@ void MulAtArray(void) { /* 3 */
}
}
void DivAtArray(void) { /* 4 */
static void DivAtArray(void) { /* 4 */
/*
65535
@@ -187,7 +188,7 @@ void DivAtArray(void) { /* 4 */
}
}
void MinAtArray(void) { /* 5 */
static void MinAtArray(void) { /* 5 */
/*
vAry1 vAry2
@@ -210,7 +211,7 @@ void MinAtArray(void) { /* 5 */
}
}
void MaxAtArray(void) { /* 6 */
static void MaxAtArray(void) { /* 6 */
/*
vAry1 vAry2
@@ -233,7 +234,7 @@ void MaxAtArray(void) { /* 6 */
}
}
void AndNumArray(void) { /* 7 */
static void AndNumArray(void) { /* 7 */
/*
val AND
@@ -254,7 +255,7 @@ void AndNumArray(void) { /* 7 */
}
}
void OrNumArray(void) { /* 8 */
static void OrNumArray(void) { /* 8 */
/*
val OR
@@ -275,7 +276,7 @@ void OrNumArray(void) { /* 8 */
}
}
void XorNumArray(void) { /* 9 */
static void XorNumArray(void) { /* 9 */
/*
val XOR
@@ -296,7 +297,7 @@ void XorNumArray(void) { /* 9 */
}
}
void SetEquArray(void) { /* 10 */
static void SetEquArray(void) { /* 10 */
/*
val vResults 1
0
@@ -320,7 +321,7 @@ void SetEquArray(void) { /* 10 */
}
}
void SetNotArray(void) { /* 11 */
static void SetNotArray(void) { /* 11 */
/*
val vResults 1
0
@@ -344,7 +345,7 @@ void SetNotArray(void) { /* 11 */
}
}
void SetLowArray(void) { /* 12 */
static void SetLowArray(void) { /* 12 */
/*
val vResult 1
@@ -367,7 +368,7 @@ void SetLowArray(void) { /* 12 */
}
}
void SetHighArray(void) { /* 13 */
static void SetHighArray(void) { /* 13 */
/*
val vResult 1
@@ -390,7 +391,7 @@ void SetHighArray(void) { /* 13 */
}
}
void SetRangeArray(void) { /* 14 */
static void SetRangeArray(void) { /* 14 */
/*
(minmax)
@@ -417,7 +418,7 @@ void SetRangeArray(void) { /* 14 */
}
}
void SetAndEquArray(void) { /* 15 */
static void SetAndEquArray(void) { /* 15 */
/*
vAry mask AND val
vResults 0
@@ -444,7 +445,7 @@ void SetAndEquArray(void) { /* 15 */
}
}
void AndEquArray(void) { /* 16 */
static void AndEquArray(void) { /* 16 */
/*
vAry val vResult 1 AND
0
@@ -468,7 +469,7 @@ void AndEquArray(void) { /* 16 */
}
}
void AndNotArray(void) { /* 17 */
static void AndNotArray(void) { /* 17 */
/*
vAry val vResult 1 AND
0
@@ -492,7 +493,7 @@ void AndNotArray(void) { /* 17 */
}
}
void AndLowArray(void) { /* 18 */
static void AndLowArray(void) { /* 18 */
/*
vAry min vResult 1 AND
0
@@ -516,7 +517,7 @@ void AndLowArray(void) { /* 18 */
}
}
void AndHighArray(void) { /* 19 */
static void AndHighArray(void) { /* 19 */
/*
vAry min vResult 1 AND
0
@@ -540,7 +541,7 @@ void AndHighArray(void) { /* 19 */
}
}
void AndRangeArray(void) { /* 20 */
static void AndRangeArray(void) { /* 20 */
/*
vAry min max vResults 1 AND
0
@@ -566,7 +567,7 @@ void AndRangeArray(void) { /* 20 */
}
}
void AndAndEquArray(void) { /* 21 */
static void AndAndEquArray(void) { /* 21 */
/*
vAry mask AND val
vResults AND 0
@@ -593,7 +594,7 @@ void AndAndEquArray(void) { /* 21 */
}
}
void OrEquArray(void) { /* 22 */
static void OrEquArray(void) { /* 22 */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -602,7 +603,7 @@ void OrEquArray(void) { /* 22 */
DEBUG_COMMAND_YET("ShArray.OrEquArray: %d,%d,%d,%d:\n", p1, p2, p3, p4);
}
void OrNotArray(void) { /* 23 */
static void OrNotArray(void) { /* 23 */
/*
val vResult 1
@@ -626,7 +627,7 @@ void OrNotArray(void) { /* 23 */
}
}
void OrLowArray(void) { /* 24 */
static void OrLowArray(void) { /* 24 */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -635,7 +636,7 @@ void OrLowArray(void) { /* 24 */
DEBUG_COMMAND_YET("ShArray.OrLowArray: %d,%d,%d,%d:\n", p1, p2, p3, p4);
}
void OrHighArray(void) { /* 25 */
static void OrHighArray(void) { /* 25 */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -644,7 +645,7 @@ void OrHighArray(void) { /* 25 */
DEBUG_COMMAND_YET("ShArray.OrHighArray: %d,%d,%d,%d:\n", p1, p2, p3, p4);
}
void OrRangeArray(void) { /* 26 */
static void OrRangeArray(void) { /* 26 */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -654,7 +655,7 @@ void OrRangeArray(void) { /* 26 */
DEBUG_COMMAND_YET("ShArray.OrRangeArray: %d,%d,%d,%d,%d:\n", p1, p2, p3, p4,p5);
}
void OrAndEquArray(void) { /* 27 */
static void OrAndEquArray(void) { /* 27 */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -664,7 +665,7 @@ void OrAndEquArray(void) { /* 27 */
DEBUG_COMMAND_YET("ShArray.OrAndEquArray: %d,%d,%d,%d,%d:\n", p1, p2, p3, p4,p5);
}
void EnumEquArray(void) { /* 28 */
static void EnumEquArray(void) { /* 28 */
/*
val vResult
@@ -689,7 +690,7 @@ void EnumEquArray(void) { /* 28 */
}
}
void EnumEquArray2(void) { /* 29 */
static void EnumEquArray2(void) { /* 29 */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -700,7 +701,7 @@ void EnumEquArray2(void) { /* 29 */
DEBUG_COMMAND_YET("ShArray.EnumEquArray2: %d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6);
}
void EnumEquNotArray2(void) { /* 30 */
static void EnumEquNotArray2(void) { /* 30 */
/*
val1 val2
vResult
@@ -732,7 +733,7 @@ void EnumEquNotArray2(void) { /* 30 */
}
}
void EnumNotArray(void) { /* 31 */
static void EnumNotArray(void) { /* 31 */
/*
val
@@ -759,7 +760,7 @@ void EnumNotArray(void) { /* 31 */
}
}
void EnumNotArray2(void) { /* 32 */
static void EnumNotArray2(void) { /* 32 */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -770,7 +771,7 @@ void EnumNotArray2(void) { /* 32 */
DEBUG_COMMAND_YET("ShArray.EnumNotArray2: %d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6);
}
void EnumLowArray(void) { /* 33 */
static void EnumLowArray(void) { /* 33 */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -779,7 +780,7 @@ void EnumLowArray(void) { /* 33 */
DEBUG_COMMAND_YET("ShArray.EnumLowArray: %d,%d,%d,%d:\n", p1, p2, p3, p4);
}
void EnumHighArray(void) { /* 34 */
static void EnumHighArray(void) { /* 34 */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -788,7 +789,7 @@ void EnumHighArray(void) { /* 34 */
DEBUG_COMMAND_YET("ShArray.EnumHighArray: %d,%d,%d,%d:\n", p1, p2, p3, p4);
}
void EnumRangeArray(void) { /* 35 */
static void EnumRangeArray(void) { /* 35 */
/*
min max vResult
@@ -818,7 +819,7 @@ void EnumRangeArray(void) { /* 35 */
}
void GrepEquArray(void) { /* 36 */
static void GrepEquArray(void) { /* 36 */
/*
val vLastMatch index
vResult 1
@@ -850,7 +851,7 @@ void GrepEquArray(void) { /* 36 */
}
}
void GrepNotArray(void) { /* 37 */
static void GrepNotArray(void) { /* 37 */
/*
val vLastMatch index
vResult 1
@@ -882,7 +883,7 @@ void GrepNotArray(void) { /* 37 */
}
}
void GrepEquArray2(void) { /* 38 */
static void GrepEquArray2(void) { /* 38 */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -894,7 +895,7 @@ void GrepEquArray2(void) { /* 38 */
DEBUG_COMMAND_YET("ShArray.GrepEquArray2: %d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7);
}
void GrepNotArray2(void) { /* 39 */
static void GrepNotArray2(void) { /* 39 */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -906,7 +907,7 @@ void GrepNotArray2(void) { /* 39 */
DEBUG_COMMAND_YET("ShArray.GrepNotArray2: %d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7);
}
void GrepEquNotArray2(void) { /* 40 */
static void GrepEquNotArray2(void) { /* 40 */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -918,7 +919,7 @@ void GrepEquNotArray2(void) { /* 40 */
DEBUG_COMMAND_YET("ShArray.GrepEquNotArray2: %d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p4, p5, p6, p7);
}
void GrepLowArray(void) { /* 41 */
static void GrepLowArray(void) { /* 41 */
/*
min vMatch index
vResult 1
@@ -950,7 +951,7 @@ void GrepLowArray(void) { /* 41 */
}
}
void GrepHighArray(void) { /* 42 */
static void GrepHighArray(void) { /* 42 */
/*
min vMatch index
vResult 1
@@ -982,7 +983,7 @@ void GrepHighArray(void) { /* 42 */
}
}
void GrepRangeArray(void) { /* 43 */
static void GrepRangeArray(void) { /* 43 */
/*
max min vMatch index
vResult 1
@@ -1016,7 +1017,7 @@ void GrepRangeArray(void) { /* 43 */
}
}
void GrepLowOrderArray(void) { /* 44 */
static void GrepLowOrderArray(void) { /* 44 */
/*
vAry minよりも大きく max
index vLastMatch
@@ -1067,7 +1068,7 @@ void GrepLowOrderArray(void) { /* 44 */
}
void GrepHighOrderArray(void) { /* 45 */
static void GrepHighOrderArray(void) { /* 45 */
/*
vAry minよりも大きく max
index vLastMatch
@@ -1117,7 +1118,7 @@ void GrepHighOrderArray(void) { /* 45 */
}
}
void ChangeEquArray(void) { /* 46 */
static void ChangeEquArray(void) { /* 46 */
int *vAry = getCaliVariable();
int cnt = getCaliValue();
int src = getCaliValue();
@@ -1134,7 +1135,7 @@ void ChangeEquArray(void) { /* 46 */
}
}
void ChangeNotArray(void) { /* 47 */
static void ChangeNotArray(void) { /* 47 */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -1143,7 +1144,7 @@ void ChangeNotArray(void) { /* 47 */
DEBUG_COMMAND_YET("ShArray.ChangeNotArray: %d,%d,%d,%d:\n", p1, p2, p3, p4);
}
void ChangeLowArray(void) { /* 48 */
static void ChangeLowArray(void) { /* 48 */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -1152,7 +1153,7 @@ void ChangeLowArray(void) { /* 48 */
DEBUG_COMMAND_YET("ShArray.ChangeLowArray: %d,%d,%d,%d:\n", p1, p2, p3, p4);
}
void ChangeHighArray(void) { /* 49 */
static void ChangeHighArray(void) { /* 49 */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -1161,7 +1162,7 @@ void ChangeHighArray(void) { /* 49 */
DEBUG_COMMAND_YET("ShArray.ChangeHighArray: %d,%d,%d,%d:\n", p1, p2, p3, p4);
}
void ChangeRangeArray(void) { /* 50 */
static void ChangeRangeArray(void) { /* 50 */
/*
min max val
@@ -1188,7 +1189,7 @@ void ChangeRangeArray(void) { /* 50 */
}
}
void CopyArrayToRect(void) { /* 51 */
static void CopyArrayToRect(void) { /* 51 */
/*
vSrc sw * sh vDst dx,dy
@@ -1222,7 +1223,7 @@ void CopyArrayToRect(void) { /* 51 */
}
}
void CopyRectToArray(void) { /* 52 */
static void CopyRectToArray(void) { /* 52 */
/*
vSrc sw * sh vDst dx,dy
@@ -1256,7 +1257,7 @@ void CopyRectToArray(void) { /* 52 */
}
}
void ChangeSecretArray(void) { /* 53 */
static void ChangeSecretArray(void) { /* 53 */
/*
@@ -1340,3 +1341,62 @@ void ChangeSecretArray(void) { /* 53 */
break;
}
}
static const ModuleFunc functions[] = {
{"AddAtArray", AddAtArray},
{"AndAndEquArray", AndAndEquArray},
{"AndEquArray", AndEquArray},
{"AndHighArray", AndHighArray},
{"AndLowArray", AndLowArray},
{"AndNotArray", AndNotArray},
{"AndNumArray", AndNumArray},
{"AndRangeArray", AndRangeArray},
{"ChangeEquArray", ChangeEquArray},
{"ChangeHighArray", ChangeHighArray},
{"ChangeLowArray", ChangeLowArray},
{"ChangeNotArray", ChangeNotArray},
{"ChangeRangeArray", ChangeRangeArray},
{"ChangeSecretArray", ChangeSecretArray},
{"CopyArrayToRect", CopyArrayToRect},
{"CopyRectToArray", CopyRectToArray},
{"DivAtArray", DivAtArray},
{"EnumEquArray", EnumEquArray},
{"EnumEquArray2", EnumEquArray2},
{"EnumEquNotArray2", EnumEquNotArray2},
{"EnumHighArray", EnumHighArray},
{"EnumLowArray", EnumLowArray},
{"EnumNotArray", EnumNotArray},
{"EnumNotArray2", EnumNotArray2},
{"EnumRangeArray", EnumRangeArray},
{"GetAtArray", GetAtArray},
{"GrepEquArray", GrepEquArray},
{"GrepEquArray2", GrepEquArray2},
{"GrepEquNotArray2", GrepEquNotArray2},
{"GrepHighArray", GrepHighArray},
{"GrepHighOrderArray", GrepHighOrderArray},
{"GrepLowArray", GrepLowArray},
{"GrepLowOrderArray", GrepLowOrderArray},
{"GrepNotArray", GrepNotArray},
{"GrepNotArray2", GrepNotArray2},
{"GrepRangeArray", GrepRangeArray},
{"MaxAtArray", MaxAtArray},
{"MinAtArray", MinAtArray},
{"MulAtArray", MulAtArray},
{"OrAndEquArray", OrAndEquArray},
{"OrEquArray", OrEquArray},
{"OrHighArray", OrHighArray},
{"OrLowArray", OrLowArray},
{"OrNotArray", OrNotArray},
{"OrNumArray", OrNumArray},
{"OrRangeArray", OrRangeArray},
{"SetAndEquArray", SetAndEquArray},
{"SetEquArray", SetEquArray},
{"SetHighArray", SetHighArray},
{"SetLowArray", SetLowArray},
{"SetNotArray", SetNotArray},
{"SetRangeArray", SetRangeArray},
{"SubAtArray", SubAtArray},
{"XorNumArray", XorNumArray},
};
const Module module_ShArray = {"ShArray", functions, sizeof(functions) / sizeof(ModuleFunc)};
-3
View File
@@ -1,3 +0,0 @@
add_library(ShCalc MODULE ShCalc.c)
install(TARGETS ShCalc DESTINATION lib/xsystem35)
+52 -23
View File
@@ -34,6 +34,7 @@
#include "nact.h"
#include "system.h"
#include "xsystem35.h"
#include "modules.h"
#include "randMT.h"
static int numbase;
@@ -51,7 +52,7 @@ static int64_t div64(int64_t a1, int64_t a2) {
return a1 / a2;
}
void SetIntNumBase(void) { /* 0 */
static void SetIntNumBase(void) { /* 0 */
/*
64 bit
@@ -65,7 +66,7 @@ void SetIntNumBase(void) { /* 0 */
}
void SetIntNum16(void) { /* 1 */
static void SetIntNum16(void) { /* 1 */
/*
64 bit
@@ -78,13 +79,13 @@ void SetIntNum16(void) { /* 1 */
DEBUG_COMMAND("ShCalc.SetIntNum16 %p:\n", var);
}
void SetIntNum32(void) { /* 2 */
static void SetIntNum32(void) { /* 2 */
int p1 = getCaliValue();
DEBUG_COMMAND_YET("ShCalc.SetIntNum32: %d:\n", p1);
}
void GetIntNum16(void) { /* 3 */
static void GetIntNum16(void) { /* 3 */
/*
64 bit
@@ -104,13 +105,13 @@ void GetIntNum16(void) { /* 3 */
DEBUG_COMMAND("ShCalc.GetIntNum16 %d:\n", var);
}
void GetIntNum32(void) { /* 4 */
static void GetIntNum32(void) { /* 4 */
int p1 = getCaliValue();
DEBUG_COMMAND_YET("ShCalc.GetIntNum32: %d:\n", p1);
}
void AddIntNum16(void) { /* 5 */
static void AddIntNum16(void) { /* 5 */
/*
64 bit
@@ -123,25 +124,25 @@ void AddIntNum16(void) { /* 5 */
DEBUG_COMMAND("ShCalc.AddIntNum16 %p:\n", var);
}
void AddIntNum32(void) { /* 6 */
static void AddIntNum32(void) { /* 6 */
int p1 = getCaliValue();
DEBUG_COMMAND_YET("ShCalc.AddIntNum32: %d:\n", p1);
}
void SubIntNum16(void) { /* 7 */
static void SubIntNum16(void) { /* 7 */
int p1 = getCaliValue();
DEBUG_COMMAND_YET("ShCalc.SubIntNum16: %d:\n", p1);
}
void SubIntNum32(void) { /* 8 */
static void SubIntNum32(void) { /* 8 */
int p1 = getCaliValue();
DEBUG_COMMAND_YET("ShCalc.SubIntNum32: %d:\n", p1);
}
void MulIntNum16(void) { /* 9 */
static void MulIntNum16(void) { /* 9 */
/*
64 bit
@@ -154,13 +155,13 @@ void MulIntNum16(void) { /* 9 */
DEBUG_COMMAND("ShCalc.MulIntNum16: %p:\n", var);
}
void MulIntNum32(void) { /* 10 */
static void MulIntNum32(void) { /* 10 */
int p1 = getCaliValue();
DEBUG_COMMAND_YET("ShCalc.MulIntNum32: %d:\n", p1);
}
void DivIntNum16(void) { /* 11 */
static void DivIntNum16(void) { /* 11 */
/*
64 bit
@@ -177,13 +178,13 @@ void DivIntNum16(void) { /* 11 */
DEBUG_COMMAND("ShCalc.DivIntNum16 %p:\n", var);
}
void DivIntNum32(void) { /* 12 */
static void DivIntNum32(void) { /* 12 */
int p1 = getCaliValue();
DEBUG_COMMAND_YET("ShCalc.DivIntNum32: %d:\n", p1);
}
void CmpIntNum16(void) { /* 13 */
static void CmpIntNum16(void) { /* 13 */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -191,7 +192,7 @@ void CmpIntNum16(void) { /* 13 */
DEBUG_COMMAND_YET("ShCalc.CmpIntNum16: %d,%d,%d:\n", p1, p2, p3);
}
void CmpIntNum32(void) { /* 14 */
static void CmpIntNum32(void) { /* 14 */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -199,7 +200,7 @@ void CmpIntNum32(void) { /* 14 */
DEBUG_COMMAND_YET("ShCalc.CmpIntNum32: %d,%d,%d:\n", p1, p2, p3);
}
void GetLengthNum16(void) { /* 15 */
static void GetLengthNum16(void) { /* 15 */
/*
var:
@@ -223,14 +224,14 @@ void GetLengthNum16(void) { /* 15 */
DEBUG_COMMAND("ShCalc.GetLengthNum16 %p,%p:\n", var, vResult);
}
void GetLengthNum32(void) { /* 16 */
static void GetLengthNum32(void) { /* 16 */
int p1 = getCaliValue();
int p2 = getCaliValue();
DEBUG_COMMAND_YET("ShCalc.GetLengthNum32: %d,%d:\n", p1, p2);
}
void NumToRate(void) { /* 17 */
static void NumToRate(void) { /* 17 */
/*
p1 * (p3/p2)
@@ -262,7 +263,7 @@ void NumToRate(void) { /* 17 */
}
void NumToRateNum(void) { /* 18 */
static void NumToRateNum(void) { /* 18 */
/*
p1 * (p2/p3)
@@ -293,7 +294,7 @@ void NumToRateNum(void) { /* 18 */
DEBUG_COMMAND("ShCalc.NumToRateNum %d,%d,%d,%d,%p:\n", p1, p2, p3, flag, vResult);
}
void SetRandomSeed() {
static void SetRandomSeed() {
/*
@@ -306,7 +307,7 @@ void SetRandomSeed() {
DEBUG_COMMAND("ShCalc.SetRandomSeed %d:\n", seed);
}
void GetRandomNumA() {
static void GetRandomNumA() {
int num = getCaliValue();
int *var = getCaliVariable();
@@ -319,7 +320,7 @@ void GetRandomNumA() {
DEBUG_COMMAND("ShCalc.GetRandomNumA %d,%p:\n", num, var);
}
void NumToBit() {
static void NumToBit() {
/*
2^(beki-1)
@@ -341,7 +342,7 @@ void NumToBit() {
DEBUG_COMMAND("ShCalc.NumToBit %d,%p:\n", beki, var);
}
void BitToNum() {
static void BitToNum() {
/*
val -> var
1 -> 1
@@ -374,3 +375,31 @@ void BitToNum() {
(*var)++;
}
}
static const ModuleFunc functions[] = {
{"AddIntNum16", AddIntNum16},
{"AddIntNum32", AddIntNum32},
{"BitToNum", BitToNum},
{"CmpIntNum16", CmpIntNum16},
{"CmpIntNum32", CmpIntNum32},
{"DivIntNum16", DivIntNum16},
{"DivIntNum32", DivIntNum32},
{"GetIntNum16", GetIntNum16},
{"GetIntNum32", GetIntNum32},
{"GetLengthNum16", GetLengthNum16},
{"GetLengthNum32", GetLengthNum32},
{"GetRandomNumA", GetRandomNumA},
{"MulIntNum16", MulIntNum16},
{"MulIntNum32", MulIntNum32},
{"NumToBit", NumToBit},
{"NumToRate", NumToRate},
{"NumToRateNum", NumToRateNum},
{"SetIntNum16", SetIntNum16},
{"SetIntNum32", SetIntNum32},
{"SetIntNumBase", SetIntNumBase},
{"SetRandomSeed", SetRandomSeed},
{"SubIntNum16", SubIntNum16},
{"SubIntNum32", SubIntNum32},
};
const Module module_ShCalc = {"ShCalc", functions, sizeof(functions) / sizeof(ModuleFunc)};
-3
View File
@@ -1,3 +0,0 @@
add_library(ShGraph MODULE ShGraph.c)
install(TARGETS ShGraph DESTINATION lib/xsystem35)
+30 -12
View File
@@ -32,6 +32,7 @@
#include "portab.h"
#include "system.h"
#include "xsystem35.h"
#include "modules.h"
#include "nact.h"
#include "ags.h"
#include "counter.h"
@@ -89,7 +90,7 @@ static struct _s2 s2[SLOT];
static int* add_p5[SLOT]; /* どこまでアニメーションのコマが進んだか */
void Init() {
static void Init() {
/*
*/
@@ -98,13 +99,13 @@ void Init() {
DEBUG_COMMAND("ShGraph.Init %d:\n", p1);
}
void GetSurfaceData() {
static void GetSurfaceData() {
int p1 = getCaliValue(); /* ISurface */
DEBUG_COMMAND_YET("ShGraph.GetSurfaceData %d:\n", p1);
}
void ChangeEquColor() {
static void ChangeEquColor() {
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -116,7 +117,7 @@ void ChangeEquColor() {
DEBUG_COMMAND_YET("ShGraph.ChangeEquColor %d,%d,%d,%d,%p,%p,%d:\n", p1, p2, p3, p4, p5, p6, p7);
}
void ChangeNotColor() {
static void ChangeNotColor() {
/*
src dst
@@ -228,7 +229,7 @@ void ChangeNotColor() {
lastslotが0の場合は 7
*/
void ResetAnimeData() {
static void ResetAnimeData() {
/*
@@ -253,7 +254,7 @@ void ResetAnimeData() {
}
void SetAnimeSrc() {
static void SetAnimeSrc() {
/*
@@ -296,7 +297,7 @@ void SetAnimeSrc() {
src[no].b = b;
}
void SetAnimeDst() {
static void SetAnimeDst() {
/*
@@ -331,7 +332,7 @@ void SetAnimeDst() {
s2[no].w_1000A8A2 = 0;
}
void AddAnimeData() {
static void AddAnimeData() {
/*
@@ -375,7 +376,7 @@ void AddAnimeData() {
add_p5[i] = p5;
}
void AddAnimeRemain() {
static void AddAnimeRemain() {
/*
@@ -401,7 +402,7 @@ void AddAnimeRemain() {
}
}
void SetAnimeRect() {
static void SetAnimeRect() {
/*
@@ -423,7 +424,7 @@ void SetAnimeRect() {
maprect.height = h;
}
void SetAnimeBack() {
static void SetAnimeBack() {
/*
@@ -451,7 +452,7 @@ void SetAnimeBack() {
mapback_p6 = p6;
}
void PlayAnimeData() {
static void PlayAnimeData() {
/*
@@ -641,3 +642,20 @@ static void copy_sprite(int sx, int sy, int width, int height, int dx, int dy, i
}
}
}
static const ModuleFunc functions[] = {
{"AddAnimeData", AddAnimeData},
{"AddAnimeRemain", AddAnimeRemain},
{"ChangeEquColor", ChangeEquColor},
{"ChangeNotColor", ChangeNotColor},
{"GetSurfaceData", GetSurfaceData},
{"Init", Init},
{"PlayAnimeData", PlayAnimeData},
{"ResetAnimeData", ResetAnimeData},
{"SetAnimeBack", SetAnimeBack},
{"SetAnimeDst", SetAnimeDst},
{"SetAnimeRect", SetAnimeRect},
{"SetAnimeSrc", SetAnimeSrc},
};
const Module module_ShGraph = {"ShGraph", functions, sizeof(functions) / sizeof(ModuleFunc)};
-3
View File
@@ -1,3 +0,0 @@
add_library(ShPort MODULE ShPort.c)
install(TARGETS ShPort DESTINATION lib/xsystem35)
+23 -9
View File
@@ -34,13 +34,14 @@
#include "nact.h"
#include "system.h"
#include "xsystem35.h"
#include "modules.h"
#include "graphicsdevice.h"
// キー変換テーブル
#define KEYMAP_MAX 8
static BYTE *keymap[KEYMAP_MAX];
void OutputMessageBox(void) { /* 0 */
static void OutputMessageBox(void) { /* 0 */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -51,7 +52,7 @@ void OutputMessageBox(void) { /* 0 */
DEBUG_COMMAND_YET("ShPort.OutputMessageBox: %d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p3, p4, p5, p6);
}
void InputListNum(void) { /* 1 */
static void InputListNum(void) { /* 1 */
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -68,7 +69,7 @@ void InputListNum(void) { /* 1 */
* ShPortサブシステム全体の初期化
* @param p1: ISys3x
*/
void Init(void) {
static void Init(void) {
int p1 = getCaliValue();
DEBUG_COMMAND_YET("ShPort.Init: %d:\n", p1);
@@ -79,7 +80,7 @@ void Init(void) {
*
* @param no: (1~)
*/
void InitKeyStatus(void) {
static void InitKeyStatus(void) {
int no = getCaliValue();
if (no >= KEYMAP_MAX) {
@@ -103,7 +104,7 @@ void InitKeyStatus(void) {
* @param key:
* @param func:
*/
void SetKeyStatus(void) {
static void SetKeyStatus(void) {
int no = getCaliValue();
int key = getCaliValue();
int func = getCaliValue();
@@ -124,7 +125,7 @@ void SetKeyStatus(void) {
* @param no:
* @param var:
*/
void GetKeyStatus(void) {
static void GetKeyStatus(void) {
int no = getCaliValue();
int *var = getCaliVariable();
int i;
@@ -142,7 +143,7 @@ void GetKeyStatus(void) {
DEBUG_COMMAND("ShPort.GetKeyStatus: %d,%p:\n", no, var);
}
void InputListString(void) {
static void InputListString(void) {
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -154,7 +155,7 @@ void InputListString(void) {
DEBUG_COMMAND_YET("ShPort.InputListString: %d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p3, p4, p5, p6, p7);
}
void InputOpenFile(void) {
static void InputOpenFile(void) {
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -166,7 +167,7 @@ void InputOpenFile(void) {
DEBUG_COMMAND_YET("ShPort.InputOpenFile: %d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p3, p4, p5, p6, p7);
}
void InputSaveFile(void) {
static void InputSaveFile(void) {
int p1 = getCaliValue();
int p2 = getCaliValue();
int p3 = getCaliValue();
@@ -178,3 +179,16 @@ void InputSaveFile(void) {
DEBUG_COMMAND_YET("ShPort.InputSaveFile: %d,%d,%d,%d,%d,%d,%d:\n", p1, p2, p3, p3, p4, p5, p6, p7);
}
static const ModuleFunc functions[] = {
{"GetKeyStatus", GetKeyStatus},
{"Init", Init},
{"InitKeyStatus", InitKeyStatus},
{"InputListNum", InputListNum},
{"InputListString", InputListString},
{"InputOpenFile", InputOpenFile},
{"InputSaveFile", InputSaveFile},
{"OutputMessageBox", OutputMessageBox},
{"SetKeyStatus", SetKeyStatus},
};
const Module module_ShPort = {"ShPort", functions, sizeof(functions) / sizeof(ModuleFunc)};
-6
View File
@@ -1,6 +0,0 @@
add_library(ShSound MODULE ShSound.c)
if (SDL2MIXER_FOUND)
target_link_libraries(ShSound PRIVATE PkgConfig::SDL2MIXER)
endif()
install(TARGETS ShSound DESTINATION lib/xsystem35)

Some files were not shown because too many files have changed in this diff Show More