mirror of
https://github.com/kichikuou/xsystem35-sdl2.git
synced 2026-09-22 22:48:08 +03:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8806bc9545 | ||
|
|
5e62405f17 | ||
|
|
714c7d44b5 | ||
|
|
0f6d4e2343 | ||
|
|
f1536a801a | ||
|
|
ab372b7873 | ||
|
|
2c02f40dc4 | ||
|
|
a395366cf8 | ||
|
|
e416fc20d3 | ||
|
|
7d03fc6757 | ||
|
|
e3b8c90611 | ||
|
|
361ca89016 | ||
|
|
5bd4622031 | ||
|
|
c7c0f69ec4 | ||
|
|
f38a3eda5c | ||
|
|
dc17b78365 | ||
|
|
b9f68eedd3 | ||
|
|
adf362ea57 | ||
|
|
b5bf439b8e | ||
|
|
9a01d28075 | ||
|
|
945dbd7722 | ||
|
|
1c54487041 | ||
|
|
92389289da | ||
|
|
4de03cc77f | ||
|
|
5a81ac6fc8 | ||
|
|
d7bac22059 | ||
|
|
8d4424061d | ||
|
|
6c692e44e5 | ||
|
|
ec071d4e8a | ||
|
|
904e10daa7 | ||
|
|
65b6da3f2a | ||
|
|
3f495b72c1 | ||
|
|
90670477c6 | ||
|
|
566ebb503f | ||
|
|
6feab51a5d | ||
|
|
15d0b44ab9 | ||
|
|
a0f20caa77 |
@@ -15,7 +15,9 @@ jobs:
|
||||
- sys: ucrt64
|
||||
package: "xsystem35-64bit"
|
||||
cmake_args: ""
|
||||
deps: "cjson:p"
|
||||
deps: >-
|
||||
cjson:p
|
||||
portmidi:p
|
||||
defaults:
|
||||
run:
|
||||
shell: msys2 {0}
|
||||
@@ -31,7 +33,6 @@ jobs:
|
||||
SDL2_ttf:p
|
||||
SDL2_mixer:p
|
||||
libwebp:p
|
||||
portmidi:p
|
||||
${{ matrix.deps }}
|
||||
|
||||
- name: Checkout
|
||||
@@ -42,7 +43,7 @@ jobs:
|
||||
ls /${{ matrix.sys }}/share/licenses
|
||||
mkdir dist
|
||||
cp -r /${{ matrix.sys }}/share/licenses dist/
|
||||
cp fonts/*.license dist/licenses/
|
||||
cp licenses/* dist/licenses/
|
||||
|
||||
- name: Install dev dependencies
|
||||
run: pacboy --noconfirm -S --needed gcc:p cmake:p ninja:p asciidoctor:p
|
||||
|
||||
+26
-4
@@ -1,17 +1,39 @@
|
||||
# Changelog
|
||||
|
||||
## 2.14.3 - 2024-04-01
|
||||
## 2.17.0 - 2025-11-09
|
||||
- Added "Streamer Mode" to mosaic specified (NSFW) images. This is enabled via the `-censor <file>` command-line option.
|
||||
- Windows: Fixed an issue where Rance 5D could not save files if the `Save` directory did not exist.
|
||||
|
||||
## 2.16.1 - 2025-08-28
|
||||
- Fixed text rendering issue in SACT log (#71)
|
||||
- Windows: The 32-bit version no longer supports the portmidi MIDI backend
|
||||
|
||||
## 2.16.0 - 2025-06-13
|
||||
- Fixed map tile color issue in Graymerca (#67)
|
||||
- Windows: Implemented number input dialog for the `NI` command (#68)
|
||||
- Android: Added "Clear Save Files" launcher menu command
|
||||
|
||||
## 2.15.1 - 2025-05-14
|
||||
- Fixed a text rendering issue in Rance 5D (#66)
|
||||
|
||||
## 2.15.0 - 2025-04-21
|
||||
- Fixed color palette bug introduced in v2.14.2.
|
||||
- Fixed uncancellable message waiting mode.
|
||||
- Android: "Install from ZIP" button is moved to the top-right option menu.
|
||||
- Android: Improved extraction logic of track numbers from audio file names.
|
||||
|
||||
## 2.14.3 - 2025-04-01
|
||||
- Fixed build for big endian architectures.
|
||||
|
||||
## 2.14.2 - 2024-03-09
|
||||
## 2.14.2 - 2025-03-09
|
||||
- Android: Back button to exit the game (#50)
|
||||
- Improved touch input usability in ママトト (#64)
|
||||
|
||||
## 2.14.1 - 2024-02-07
|
||||
## 2.14.1 - 2025-02-07
|
||||
- Fixed font selection and text decoration not working in selection menus.
|
||||
- Fixed a graphic issue in DALK intro.
|
||||
|
||||
## 2.14.0 - 2024-01-09
|
||||
## 2.14.0 - 2025-01-09
|
||||
- New supported games: 俺の下であがけ and 楽園行.
|
||||
- Windows: On Windows 10 version 1903 or above, now xsystem35 can handle
|
||||
Japanese filenames correctly even if the system locale is not Japanese.
|
||||
|
||||
+2
-7
@@ -1,16 +1,11 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
# Rebuild external projects when download URL changes
|
||||
if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0")
|
||||
cmake_policy(SET CMP0135 NEW)
|
||||
endif()
|
||||
cmake_minimum_required(VERSION 3.13...4.0)
|
||||
|
||||
project(xsystem35 LANGUAGES C)
|
||||
set(CMAKE_C_STANDARD 99)
|
||||
enable_testing()
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)
|
||||
|
||||
set(XSYSTEM35_VERSION "2.14.3")
|
||||
set(XSYSTEM35_VERSION "2.17.0")
|
||||
|
||||
include(CheckSymbolExists)
|
||||
include(FetchContent)
|
||||
|
||||
@@ -60,6 +60,14 @@ and examine or modify game variables. There are two ways to use the debugger:
|
||||
launch the debugger with a console interface. Type `help` to see a list of
|
||||
available commands.
|
||||
|
||||
### Streamer Mode
|
||||
|
||||
xsystem35 introduces a "Streamer Mode" to make playing games with NSFW content
|
||||
safer for streaming or public viewing. When enabled with the `-censor <file>`
|
||||
option, images specified in the provided file will be automatically mosaiced.
|
||||
|
||||
The `misc/censor/` directory contains example censor list files for some games.
|
||||
|
||||
## Installation
|
||||
|
||||
Prebuilt packages for Windows and Android can be downloaded from the
|
||||
|
||||
+38
-37
@@ -6,7 +6,44 @@ Minimum supported Android version: 5.0
|
||||
You can download prebuilt APKs
|
||||
[here](https://github.com/kichikuou/xsystem35-sdl2/releases).
|
||||
|
||||
## Build
|
||||
## Usage
|
||||
### Basic Usage
|
||||
1. Create a ZIP file containing all the game files and BGM files (see
|
||||
[below](#preparing-a-zip) for details), and transfer it to your device.
|
||||
2. Open the app. Tap the option menu (three dots in the top right corner) and
|
||||
select "Install from ZIP".
|
||||
3. Select the ZIP file you created in step 1.
|
||||
4. The game will start. To simulate a right-click, tap the black bars on either
|
||||
the left or right, or top or bottom of the screen.
|
||||
|
||||
### Preparing a ZIP
|
||||
- Include all files from the `GAMEDATA` folder (such as `.ALD` files and
|
||||
others). `.EXE` and `.DLL` files are not necessary, but you can include them
|
||||
if you want.
|
||||
- Music files (`.mp3`, `.ogg`, or `.wav`) whose filenames have a number either
|
||||
at the beginning or just before the extension are recognized as BGM files.
|
||||
For example:
|
||||
- `Track2.mp3`
|
||||
- `15.ogg`
|
||||
- `02 - Title.mp3`
|
||||
- `rance4_03.wav` (Note: The filename shouldn't be `rance403.wav`, as it
|
||||
would be treated as the 403rd track.)
|
||||
|
||||
Note: This ZIP format is also compatible with
|
||||
[Kichikuou on Web](http://kichikuou.github.io/web/).
|
||||
|
||||
### Miscellaneous
|
||||
- You can export or import save files via the game list's option menu.
|
||||
- To uninstall a game, long-tap its title in the game list.
|
||||
|
||||
## Known Issues
|
||||
- Android versions older than 7.0 cannot handle ZIP files containing Shift-JIS
|
||||
filenames. This issue occurs with some ZIP files distributed on
|
||||
[retroc.net](http://retropc.net/alice/). If you encounter the error message
|
||||
"This type of ZIP is not supported," unzip the file on your PC and re-archive
|
||||
it using modern ZIP creation software.
|
||||
|
||||
## Building from Source
|
||||
|
||||
### Using Android Studio
|
||||
Open this directory as an Android Studio project.
|
||||
@@ -34,39 +71,3 @@ git clone https://github.com/kichikuou/xsystem35-sdl2.git
|
||||
cd xsystem35-sdl2/android
|
||||
./gradlew build # or ./gradlew installDebug if you have a connected device
|
||||
```
|
||||
|
||||
## Usage
|
||||
### Basic Usage
|
||||
1. Create a ZIP file containing all the game files and BGM files (see
|
||||
[below](#preparing-a-zip) for details), and transfer it to your device.
|
||||
2. Open the app. A list of installed games will be displayed. Since no games
|
||||
have been installed yet, only the "Install from ZIP" button will be visible.
|
||||
Tap it.
|
||||
3. Select the ZIP file you created in step 1.
|
||||
4. The game will start. To simulate a right-click, tap the black bars on either
|
||||
the left or right, or top or bottom of the screen.
|
||||
|
||||
### Preparing a ZIP
|
||||
- Include all files from the `GAMEDATA` folder (such as `.ALD` files and
|
||||
others). `.EXE` and `.DLL` files are not necessary, but you can include them
|
||||
if you want.
|
||||
- Music files (`.mp3`, `.ogg`, or `.wav`) whose filenames end with a number
|
||||
will be recognized as BGM files. For example:
|
||||
- `Track2.mp3`
|
||||
- `15.ogg`
|
||||
- `rance4_03.wav` (Note: The filename shouldn't be `rance403.wav`, as it
|
||||
would be treated as the 403rd track.)
|
||||
|
||||
Note: This ZIP format is also compatible with
|
||||
[Kichikuou on Web](http://kichikuou.github.io/web/).
|
||||
|
||||
### Miscellaneous
|
||||
- You can export or import save files via the game list's option menu.
|
||||
- To uninstall a game, long-tap its title in the game list.
|
||||
|
||||
## Known Issues
|
||||
- Android versions older than 7.0 cannot handle ZIP files containing Shift-JIS
|
||||
filenames. This issue occurs with some ZIP files distributed on
|
||||
[retroc.net](http://retropc.net/alice/). If you encounter the error message
|
||||
"This type of ZIP is not supported," unzip the file on your PC and re-archive
|
||||
it using modern ZIP creation software.
|
||||
|
||||
@@ -16,8 +16,8 @@ android {
|
||||
defaultConfig {
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 34
|
||||
versionCode 32
|
||||
versionName "2.14.3" + gitRevision()
|
||||
versionCode 36
|
||||
versionName "2.17.0" + gitRevision()
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
arguments "-DANDROID_APP_PLATFORM=android-19", "-DANDROID_STL=c++_static"
|
||||
|
||||
@@ -7,8 +7,8 @@ set(PROJECT_ROOT_DIR ../../..)
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
SDL
|
||||
URL https://github.com/libsdl-org/SDL/releases/download/release-2.32.4/SDL2-2.32.4.tar.gz
|
||||
URL_HASH SHA1=4fb68f43891ca4def414cc7cf0f3b2a053cb6aaf
|
||||
URL https://github.com/libsdl-org/SDL/releases/download/release-2.32.10/SDL2-2.32.10.tar.gz
|
||||
URL_HASH SHA1=ce98fa93e31836a751feca374ab28a0770b63c16
|
||||
)
|
||||
FetchContent_Declare(
|
||||
SDL_ttf
|
||||
@@ -44,8 +44,9 @@ file(MAKE_DIRECTORY ${ASSETS_DIR}/licenses)
|
||||
file(COPY_FILE ${PROJECT_ROOT_DIR}/fonts/MTLc3m.ttf ${ASSETS_DIR}/MTLc3m.ttf)
|
||||
file(COPY_FILE ${PROJECT_ROOT_DIR}/fonts/mincho.otf ${ASSETS_DIR}/mincho.otf)
|
||||
file(COPY_FILE ${PROJECT_ROOT_DIR}/COPYING ${ASSETS_DIR}/licenses/xsystem35)
|
||||
file(COPY_FILE ${PROJECT_ROOT_DIR}/fonts/MTLc3m.ttf.license ${ASSETS_DIR}/licenses/MTLc3m)
|
||||
file(COPY_FILE ${PROJECT_ROOT_DIR}/fonts/mincho.otf.license ${ASSETS_DIR}/licenses/mincho)
|
||||
file(COPY_FILE ${PROJECT_ROOT_DIR}/licenses/MTLc3m.txt ${ASSETS_DIR}/licenses/MTLc3m)
|
||||
file(COPY_FILE ${PROJECT_ROOT_DIR}/licenses/mincho.txt ${ASSETS_DIR}/licenses/mincho)
|
||||
file(COPY_FILE ${PROJECT_ROOT_DIR}/licenses/nanojpeg.txt ${ASSETS_DIR}/licenses/nanojpeg)
|
||||
file(COPY_FILE ${sdl_SOURCE_DIR}/LICENSE.txt ${ASSETS_DIR}/licenses/SDL)
|
||||
file(COPY_FILE ${sdl_ttf_SOURCE_DIR}/LICENSE.txt ${ASSETS_DIR}/licenses/SDL_ttf)
|
||||
file(COPY_FILE ${sdl_ttf_SOURCE_DIR}/external/freetype/docs/GPLv2.TXT ${ASSETS_DIR}/licenses/freetype)
|
||||
|
||||
@@ -127,6 +127,7 @@ class Launcher private constructor(private val rootDir: File) {
|
||||
if (!saveDirFound) {
|
||||
File(rootDir, SAVE_DIR).mkdir()
|
||||
}
|
||||
observer?.onGameListChange()
|
||||
}
|
||||
|
||||
private fun createDirForGame(): File {
|
||||
@@ -219,16 +220,17 @@ class Launcher private constructor(private val rootDir: File) {
|
||||
var gameDir: String? = null
|
||||
private set
|
||||
private val aldRegex = """.*?s[a-z]\.ald""".toRegex(RegexOption.IGNORE_CASE)
|
||||
private val audioRegex = """.*?(\d+)\.(wav|mp3|ogg)""".toRegex(RegexOption.IGNORE_CASE)
|
||||
private val audioRegex = """((\d+).*|.*?(\d+))\.(wav|mp3|ogg)""".toRegex(RegexOption.IGNORE_CASE)
|
||||
private val audioFiles: Array<String?> = arrayOfNulls(100)
|
||||
|
||||
fun maybeAdd(path: String) {
|
||||
aldRegex.matchEntire(path)?.let {
|
||||
val name = File(path).name
|
||||
aldRegex.matchEntire(name)?.let {
|
||||
gameDir = File(path).parent
|
||||
ready = true
|
||||
}
|
||||
audioRegex.matchEntire(path)?.let {
|
||||
val track = it.groupValues[1].toInt()
|
||||
audioRegex.matchEntire(name)?.let {
|
||||
val track = it.groupValues[2].toIntOrNull() ?: it.groupValues[3].toInt()
|
||||
if (0 < track && track <= audioFiles.size)
|
||||
audioFiles[track - 1] = path
|
||||
}
|
||||
@@ -251,6 +253,14 @@ class Launcher private constructor(private val rootDir: File) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun clearSaveData(): Boolean {
|
||||
var success = true
|
||||
File(rootDir, SAVE_DIR).listFiles()?.forEach { file ->
|
||||
if (!file.deleteRecursively()) success = false
|
||||
}
|
||||
return success
|
||||
}
|
||||
}
|
||||
|
||||
private fun forEachZipEntry(input: InputStream, action: (ZipEntry, ZipInputStream) -> Unit): Boolean {
|
||||
|
||||
@@ -22,6 +22,7 @@ import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.provider.OpenableColumns
|
||||
import android.text.Html
|
||||
import android.util.Log
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
@@ -53,6 +54,8 @@ class LauncherActivity : Activity(), LauncherObserver {
|
||||
|
||||
onGameListChange()
|
||||
val listView = findViewById<ListView>(R.id.list)
|
||||
listView.emptyView = findViewById(R.id.empty)
|
||||
findViewById<TextView>(R.id.usage).text = Html.fromHtml(getString(R.string.usage))
|
||||
listView.setOnItemClickListener { _, _, position, _ ->
|
||||
onListItemClick(position)
|
||||
}
|
||||
@@ -75,23 +78,15 @@ class LauncherActivity : Activity(), LauncherObserver {
|
||||
}
|
||||
|
||||
private fun onListItemClick(position: Int) {
|
||||
if (position < launcher.games.size) {
|
||||
startGame(launcher.games[position].path, null)
|
||||
} else {
|
||||
val i = Intent(Intent.ACTION_GET_CONTENT)
|
||||
i.type = CONTENT_TYPE_ZIP
|
||||
startActivityForResult(Intent.createChooser(i, getString(R.string.choose_a_file)), INSTALL_REQUEST)
|
||||
}
|
||||
startGame(launcher.games[position].path, null)
|
||||
}
|
||||
|
||||
private fun onItemLongClick(position: Int): Boolean {
|
||||
if (position < launcher.games.size) {
|
||||
AlertDialog.Builder(this).setTitle(R.string.uninstall_dialog_title)
|
||||
.setMessage(getString(R.string.uninstall_dialog_message, launcher.games[position].title))
|
||||
.setPositiveButton(R.string.ok) {_, _ -> uninstall(position)}
|
||||
.setNegativeButton(R.string.cancel) {_, _ -> }
|
||||
.show()
|
||||
}
|
||||
AlertDialog.Builder(this).setTitle(R.string.confirm)
|
||||
.setMessage(getString(R.string.uninstall_dialog_message, launcher.games[position].title))
|
||||
.setPositiveButton(R.string.ok) {_, _ -> uninstall(position)}
|
||||
.setNegativeButton(R.string.cancel) {_, _ -> }
|
||||
.show()
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -102,6 +97,12 @@ class LauncherActivity : Activity(), LauncherObserver {
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
return when (item.itemId) {
|
||||
R.id.install_from_zip -> {
|
||||
val i = Intent(Intent.ACTION_GET_CONTENT)
|
||||
i.type = CONTENT_TYPE_ZIP
|
||||
startActivityForResult(Intent.createChooser(i, getString(R.string.choose_a_file)), INSTALL_REQUEST)
|
||||
true
|
||||
}
|
||||
R.id.export_savedata -> {
|
||||
val i = Intent(Intent.ACTION_CREATE_DOCUMENT)
|
||||
i.type = CONTENT_TYPE_ZIP
|
||||
@@ -116,6 +117,27 @@ class LauncherActivity : Activity(), LauncherObserver {
|
||||
SAVEDATA_IMPORT_REQUEST)
|
||||
true
|
||||
}
|
||||
R.id.clear_savedata -> {
|
||||
AlertDialog.Builder(this)
|
||||
.setTitle(R.string.confirm)
|
||||
.setMessage(R.string.clear_save_data_confirm)
|
||||
.setPositiveButton(R.string.ok) { _, _ ->
|
||||
if (launcher.clearSaveData()) {
|
||||
Toast.makeText(this, R.string.save_data_clear_success, Toast.LENGTH_SHORT).show()
|
||||
} else {
|
||||
errorDialog(R.string.save_data_clear_error)
|
||||
}
|
||||
}
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.show()
|
||||
true
|
||||
}
|
||||
R.id.help -> {
|
||||
AlertDialog.Builder(this)
|
||||
.setMessage(Html.fromHtml(getString(R.string.usage)))
|
||||
.show()
|
||||
true
|
||||
}
|
||||
R.id.licenses -> {
|
||||
val intent = Intent(this, LicensesMenuActivity::class.java)
|
||||
startActivity(intent)
|
||||
@@ -157,7 +179,6 @@ class LauncherActivity : Activity(), LauncherObserver {
|
||||
|
||||
override fun onGameListChange() {
|
||||
val items = launcher.titles.toMutableList()
|
||||
items.add(getString(R.string.install_from_zip))
|
||||
val listView = findViewById<ListView>(R.id.list)
|
||||
listView.adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, items)
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ class LicensesMenuActivity : Activity() {
|
||||
Entry("SDL", "SDL", "https://www.libsdl.org/"),
|
||||
Entry("SDL_mixer", "SDL_mixer", "https://github.com/libsdl-org/SDL_mixer"),
|
||||
Entry("SDL_ttf", "SDL_ttf", "https://github.com/libsdl-org/SDL_ttf"),
|
||||
Entry("NanoJPEG", "nanojpeg", "https://keyj.emphy.de/nanojpeg/"),
|
||||
Entry("FreeType", "freetype", "https://freetype.org/"),
|
||||
Entry("HarfBuzz", "harfbuzz", "https://harfbuzz.github.io/"),
|
||||
Entry("MotoyaLCedar W3 mono", "MTLc3m", "https://github.com/aosp-mirror/platform_frameworks_base/tree/lollipop-release/data/fonts"),
|
||||
|
||||
@@ -61,7 +61,7 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
||||
private static final String TAG = "SDL";
|
||||
private static final int SDL_MAJOR_VERSION = 2;
|
||||
private static final int SDL_MINOR_VERSION = 32;
|
||||
private static final int SDL_MICRO_VERSION = 4;
|
||||
private static final int SDL_MICRO_VERSION = 10;
|
||||
/*
|
||||
// Display InputType.SOURCE/CLASS of events and devices
|
||||
//
|
||||
|
||||
@@ -6,4 +6,12 @@
|
||||
<ListView android:id="@+id/list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
<ScrollView android:id="@+id/empty"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<TextView android:id="@+id/usage"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="20dp" />
|
||||
</ScrollView>
|
||||
</LinearLayout>
|
||||
@@ -1,11 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:id="@+id/install_from_zip"
|
||||
android:title="@string/action_install_from_zip" />
|
||||
<item
|
||||
android:id="@+id/export_savedata"
|
||||
android:title="@string/action_export_save_data" />
|
||||
<item
|
||||
android:id="@+id/import_savedata"
|
||||
android:title="@string/action_import_save_data" />
|
||||
<item
|
||||
android:id="@+id/clear_savedata"
|
||||
android:title="@string/action_clear_save_data" />
|
||||
<item
|
||||
android:id="@+id/help"
|
||||
android:title="@string/action_help" />
|
||||
<item
|
||||
android:id="@+id/licenses"
|
||||
android:title="@string/action_licenses" />
|
||||
|
||||
@@ -2,21 +2,43 @@
|
||||
<resources>
|
||||
<string name="app_name">xsystem35</string>
|
||||
<string name="action_export_save_data">セーブデータをエクスポート</string>
|
||||
<string name="action_help">使い方</string>
|
||||
<string name="action_import_save_data">セーブデータをインポート</string>
|
||||
<string name="action_install_from_zip">ZIPからインストール</string>
|
||||
<string name="action_licenses">オープンソースライセンス</string>
|
||||
<string name="action_clear_save_data">セーブデータをクリア</string>
|
||||
<string name="cancel">キャンセル</string>
|
||||
<string name="cannot_find_ald">System 3.x のファイル (*.ald) が見つかりません。</string>
|
||||
<string name="choose_a_file">ファイルを選択</string>
|
||||
<string name="clear_save_data_confirm">セーブデータをすべて削除します。元には戻せません。本当によろしいですか?</string>
|
||||
<string name="confirm">確認</string>
|
||||
<string name="error_dialog_title">エラー</string>
|
||||
<string name="install_dialog_title">インストール中…</string>
|
||||
<string name="install_from_zip">ZIP からインストール</string>
|
||||
<string name="install_progress">%s を展開中</string>
|
||||
<string name="no_data_to_import">ZIP アーカイブ中に save/ フォルダが見つかりません。</string>
|
||||
<string name="save_data_export_error">セーブデータのエクスポートに失敗しました。</string>
|
||||
<string name="save_data_export_success">エクスポートに成功しました。</string>
|
||||
<string name="save_data_import_success">インポートに成功しました。</string>
|
||||
<string name="save_data_clear_success">セーブデータをクリアしました。</string>
|
||||
<string name="save_data_clear_error">セーブデータのクリアに失敗しました。</string>
|
||||
<string name="uninstall_dialog_message">「%s」をアンインストールしますか?</string>
|
||||
<string name="uninstall_dialog_title">確認</string>
|
||||
<string name="unsupported_zip">この形式の ZIP はサポートしていません。</string>
|
||||
<string name="zip_extraction_error">ZIP の展開に失敗しました。</string>
|
||||
<string name="usage">
|
||||
<![CDATA[
|
||||
<h1>ゲームのインストール方法</h1>
|
||||
<p>1. PC上で、ゲームのファイルが入ったZIPを用意します。例えば以下のようなファイルを含めます:</p>
|
||||
<div>
|
||||
・鬼畜王SA.ALD<br>
|
||||
・鬼畜王GA.ALD<br>
|
||||
・鬼畜王GB.ALD<br>
|
||||
・鬼畜王WA.ALD<br>
|
||||
・02.mp3<br>
|
||||
・03.mp3<br>
|
||||
・…<br>
|
||||
</div>
|
||||
<p>2. ZIPファイルを (例えばUSB経由で) PCからデバイスに転送します。</p>
|
||||
<p>3. この画面の右上のメニューボタンをタップして「ZIPからインストール」を選択し、転送したZIPを選びます。</p>
|
||||
]]>
|
||||
</string>
|
||||
</resources>
|
||||
@@ -1,22 +1,45 @@
|
||||
<resources>
|
||||
<string name="app_name">xsystem35</string>
|
||||
<string name="action_clear_save_data">Clear Save Files</string>
|
||||
<string name="action_export_save_data">Export Save Files</string>
|
||||
<string name="action_help">Help</string>
|
||||
<string name="action_import_save_data">Import Save Files</string>
|
||||
<string name="action_install_from_zip">Install from ZIP</string>
|
||||
<string name="action_licenses">Open source licenses</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="cannot_find_ald">Cannot find System 3.x game files (*.ald).</string>
|
||||
<string name="choose_a_file">Choose a file</string>
|
||||
<string name="clear_save_data_confirm">Are you sure you want to clear all save files? This cannot be undone.</string>
|
||||
<string name="confirm">Confirm</string>
|
||||
<string name="error_dialog_title">Error</string>
|
||||
<string name="install_dialog_title">Installing…</string>
|
||||
<string name="install_from_zip">Install from ZIP</string>
|
||||
<string name="install_progress">Extracting %s</string>
|
||||
<string name="no_data_to_import">No save/ folder in the ZIP archive.</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="save_data_clear_error">Failed to clear save files.</string>
|
||||
<string name="save_data_clear_success">Save files cleared.</string>
|
||||
<string name="save_data_export_error">Failed to export save files.</string>
|
||||
<string name="save_data_import_success">Imported successfully.</string>
|
||||
<string name="save_data_export_success">Exported successfully.</string>
|
||||
<string name="uninstall_dialog_message">Uninstall \"%s\"?</string>
|
||||
<string name="uninstall_dialog_title">Confirm</string>
|
||||
<string name="unsupported_zip">This type of ZIP is not supported.</string>
|
||||
<string name="zip_extraction_error">Failed to extract ZIP.</string>
|
||||
<string name="usage">
|
||||
<![CDATA[
|
||||
<h1>How to install a game</h1>
|
||||
<p>1. On your PC, prepare a ZIP containing the game files. For example, it should contain the following files:</p>
|
||||
<div>
|
||||
* KICHIKUSA.ALD<br>
|
||||
* KICHIKUGA.ALD<br>
|
||||
* KICHIKUGB.ALD<br>
|
||||
* KICHIKUWA.ALD<br>
|
||||
* System39.ain<br>
|
||||
* 02.mp3<br>
|
||||
* 03.mp3<br>
|
||||
* …<br>
|
||||
</div>
|
||||
<p>2. Transfer the ZIP file from your PC to the device (e.g. via USB).</p>
|
||||
<p>3. Tap the menu button at the upper-right of this screen, select "Install from ZIP," and choose the ZIP you transferred.</p>
|
||||
]]>
|
||||
</string>
|
||||
</resources>
|
||||
|
||||
@@ -30,7 +30,8 @@ finds System 3.x game files (*.ALD) from the current directory.
|
||||
*-game* _game_::
|
||||
Enables game-specific hacks. Usually auto-detected, but must be specified for
|
||||
games with modified / translated titles. Possible values are: `toushin2`,
|
||||
`rance3_eng`, `rance4_eng`, `rance4_v2`, `persiom`, `agake`.
|
||||
`rance2`, `rance3`, `rance3_eng`, `rance4_eng`, `rance4_v2`, `persiom`,
|
||||
`agake`.
|
||||
|
||||
*-savedir* _dir_::
|
||||
Directory to save game state files. If _dir_ begins with '~', it is expanded
|
||||
@@ -48,6 +49,11 @@ finds System 3.x game files (*.ALD) from the current directory.
|
||||
Suppress text hook on specified scenario pages. _list_ is a comma-separated
|
||||
list of page numbers. Used to suppress system messages, etc.
|
||||
|
||||
*-censor* _file_::
|
||||
Enable Streamer Mode, which mosaics specific images to make them safe for
|
||||
streaming. The _file_ is a text file containing a list of image numbers
|
||||
to censor, one per line. Lines starting with '#' are treated as comments.
|
||||
|
||||
*-renderer* _name_::
|
||||
Use the SDL rendering driver named _name_.
|
||||
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
install(FILES
|
||||
MTLc3m.ttf
|
||||
MTLc3m.ttf.license
|
||||
mincho.otf
|
||||
mincho.otf.license
|
||||
DESTINATION share/xsystem35/fonts)
|
||||
|
||||
# pyftsubset is included in fonttools.
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
// NanoJPEG -- KeyJ's Tiny Baseline JPEG Decoder
|
||||
// version 1.3.5 (2016-11-14)
|
||||
// Copyright (c) 2009-2016 Martin J. Fiedler <martin.fiedler@gmx.net>
|
||||
// published under the terms of the MIT license
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
// DEALINGS IN THE SOFTWARE.
|
||||
@@ -0,0 +1,21 @@
|
||||
# Censor Lists for Streamer Mode
|
||||
|
||||
This directory contains sample censor lists for various games, intended for use
|
||||
with xsystem35's Streamer Mode.
|
||||
|
||||
## Usage
|
||||
|
||||
To use a censor list, specify its path with the `-censor` command-line option
|
||||
or in your `.xsys35rc` file. For example:
|
||||
|
||||
```bash
|
||||
xsystem35 -censor misc/censor/kichikuou.txt
|
||||
```
|
||||
|
||||
The list files contain image numbers (integers), one per line. Lines starting
|
||||
with `#` are treated as comments.
|
||||
|
||||
## Contributing
|
||||
|
||||
We welcome contributions of censor lists for other games! If you have created
|
||||
a censor list that you'd like to share, please open a Pull Request.
|
||||
@@ -0,0 +1,164 @@
|
||||
# Censor list for 鬼畜王ランス (Kichikuou Rance)
|
||||
27
|
||||
70
|
||||
93
|
||||
101
|
||||
102
|
||||
103
|
||||
106
|
||||
107
|
||||
108
|
||||
109
|
||||
110
|
||||
111
|
||||
112
|
||||
113
|
||||
114
|
||||
115
|
||||
116
|
||||
117
|
||||
118
|
||||
119
|
||||
120
|
||||
121
|
||||
123
|
||||
124
|
||||
125
|
||||
126
|
||||
127
|
||||
128
|
||||
129
|
||||
130
|
||||
131
|
||||
132
|
||||
133
|
||||
134
|
||||
136
|
||||
137
|
||||
138
|
||||
139
|
||||
140
|
||||
141
|
||||
142
|
||||
143
|
||||
144
|
||||
145
|
||||
146
|
||||
147
|
||||
148
|
||||
149
|
||||
150
|
||||
151
|
||||
152
|
||||
153
|
||||
154
|
||||
155
|
||||
156
|
||||
157
|
||||
158
|
||||
160
|
||||
161
|
||||
162
|
||||
163
|
||||
164
|
||||
165
|
||||
166
|
||||
167
|
||||
168
|
||||
169
|
||||
171
|
||||
172
|
||||
174
|
||||
175
|
||||
176
|
||||
177
|
||||
178
|
||||
179
|
||||
180
|
||||
181
|
||||
182
|
||||
183
|
||||
184
|
||||
185
|
||||
186
|
||||
187
|
||||
188
|
||||
189
|
||||
190
|
||||
191
|
||||
193
|
||||
195
|
||||
196
|
||||
197
|
||||
198
|
||||
199
|
||||
200
|
||||
201
|
||||
203
|
||||
204
|
||||
205
|
||||
206
|
||||
207
|
||||
208
|
||||
209
|
||||
210
|
||||
214
|
||||
215
|
||||
216
|
||||
217
|
||||
218
|
||||
219
|
||||
221
|
||||
222
|
||||
224
|
||||
225
|
||||
226
|
||||
227
|
||||
228
|
||||
229
|
||||
230
|
||||
231
|
||||
232
|
||||
233
|
||||
234
|
||||
235
|
||||
239
|
||||
299
|
||||
300
|
||||
361
|
||||
362
|
||||
363
|
||||
375
|
||||
376
|
||||
377
|
||||
393
|
||||
422
|
||||
461
|
||||
466
|
||||
500
|
||||
501
|
||||
502
|
||||
503
|
||||
504
|
||||
505
|
||||
506
|
||||
507
|
||||
508
|
||||
509
|
||||
510
|
||||
511
|
||||
512
|
||||
513
|
||||
514
|
||||
515
|
||||
517
|
||||
844
|
||||
845
|
||||
846
|
||||
847
|
||||
848
|
||||
851
|
||||
852
|
||||
853
|
||||
854
|
||||
855
|
||||
+4
-4
@@ -33,7 +33,7 @@
|
||||
#include "ags.h"
|
||||
#include "pms.h"
|
||||
#include "qnt.h"
|
||||
#include "sdl_core.h"
|
||||
#include "gfx.h"
|
||||
#include "ngraph.h"
|
||||
#include "dri.h"
|
||||
#include "ald_manager.h"
|
||||
@@ -73,21 +73,21 @@ static surface_t *sf_getcg(void *b, size_t size) {
|
||||
cg->alpha = cg->pic;
|
||||
cg->pic = NULL;
|
||||
sf = sf_create_alpha(cg->width, cg->height);
|
||||
sdl_drawImageAlphaMap(cg, sf, 0, 0);
|
||||
gfx_drawImageAlphaMap(cg, sf, 0, 0);
|
||||
break;
|
||||
case ALCG_PMS16:
|
||||
cg = pms64k_extract(b);
|
||||
sf = cg->alpha
|
||||
? sf_create_surface(cg->width, cg->height)
|
||||
: sf_create_pixel(cg->width, cg->height);
|
||||
sdl_drawImage16(cg, sf, 0, 0, 255, false);
|
||||
gfx_drawImage16(cg, sf, 0, 0, 255, false);
|
||||
break;
|
||||
case ALCG_QNT:
|
||||
cg = qnt_extract(b);
|
||||
sf = cg->alpha
|
||||
? sf_create_surface(cg->width, cg->height)
|
||||
: sf_create_pixel(cg->width, cg->height);
|
||||
sdl_drawImage24(cg, sf, 0, 0, 255);
|
||||
gfx_drawImage24(cg, sf, 0, 0, 255);
|
||||
break;
|
||||
default:
|
||||
WARNING("Unknown Cg Type");
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include "portab.h"
|
||||
#include "system.h"
|
||||
#include "surface.h"
|
||||
#include "sdl_core.h"
|
||||
#include "effect.h"
|
||||
#include "ags.h"
|
||||
#include "input.h"
|
||||
#include "graph.h"
|
||||
@@ -24,17 +24,17 @@ void gpx_effect(int no,
|
||||
|
||||
*endtype = 0;
|
||||
|
||||
enum sdl_effect_type type = from_sact_effect(no);
|
||||
enum effect_type type = from_sact_effect(no);
|
||||
if (type == EFFECT_INVALID) {
|
||||
WARNING("Unimplemented effect %d", no);
|
||||
type = EFFECT_CROSSFADE;
|
||||
}
|
||||
SDL_Rect rect = { wx, wy, width, height };
|
||||
struct sdl_effect *eff = sdl_effect_init(&rect, dst, dx, dy, src, sx, sy, type);
|
||||
struct effect *eff = effect_init(&rect, dst, dx, dy, src, sx, sy, type);
|
||||
if (!time)
|
||||
time = (no == SACT_EFFECT_CROSSFADE_DOWN || no == SACT_EFFECT_CROSSFADE_UP) ? 1150 : 2700;
|
||||
ags_runEffect(time, false, (ags_EffectStepFunc)sdl_effect_step, eff);
|
||||
sdl_effect_finish(eff);
|
||||
ags_runEffect(time, false, (ags_EffectStepFunc)effect_step, eff);
|
||||
effect_finish(eff);
|
||||
|
||||
switch (no) {
|
||||
case SACT_EFFECT_FADEOUT:
|
||||
|
||||
+4
-4
@@ -11,7 +11,7 @@
|
||||
#include "graph.h"
|
||||
#include "ngraph.h"
|
||||
#include "ags.h"
|
||||
#include "sdl_core.h"
|
||||
#include "gfx.h"
|
||||
|
||||
/**
|
||||
* surface から surface にコピーなどをする際に、転送元と転送先のsurface
|
||||
@@ -33,8 +33,8 @@
|
||||
*/
|
||||
bool gr_clip(surface_t *ss, int *sx, int *sy, int *sw, int *sh, surface_t *ds, int *dx, int *dy) {
|
||||
if (!ss || !ds) return false;
|
||||
MyRectangle src_window = { 0, 0, ss->width, ss->height };
|
||||
MyRectangle dst_window = { 0, 0, ds->width, ds->height };
|
||||
SDL_Rect src_window = { 0, 0, ss->width, ss->height };
|
||||
SDL_Rect dst_window = { 0, 0, ds->width, ds->height };
|
||||
return ags_clipCopyRect(&src_window, &dst_window, sx, sy, dx, dy, sw, sh);
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ void gr_copy(surface_t *dst, int dx, int dy, surface_t *src, int sx, int sy, int
|
||||
if (dst == src) {
|
||||
SDL_Rect r;
|
||||
if (SDL_IntersectRect(&src_rect, &dst_rect, &r)) {
|
||||
SDL_Surface *view = sdl_createSurfaceView(src->sdl_surface, sx, sy, sw, sh);
|
||||
SDL_Surface *view = gfx_createSurfaceView(src->sdl_surface, sx, sy, sw, sh);
|
||||
SDL_Surface *tmp = SDL_ConvertSurface(view, dst->sdl_surface->format, 0);
|
||||
src_rect.x = 0;
|
||||
src_rect.y = 0;
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
|
||||
#include "config.h"
|
||||
#include "portab.h"
|
||||
#include "graphics.h"
|
||||
#include "ags.h"
|
||||
#include "sprite.h"
|
||||
|
||||
@@ -42,7 +41,7 @@ struct _night {
|
||||
// graph
|
||||
// cginfo_t *cg[CGMAX];
|
||||
|
||||
MyRectangle updaterect;
|
||||
SDL_Rect updaterect;
|
||||
|
||||
FontType fonttype;
|
||||
int fontsize;
|
||||
|
||||
@@ -53,8 +53,8 @@ void nt_gr_set_wallpaper(int no) {
|
||||
sp = nt_sp_new(SPNO_WALL, no, 0, 0, SPRITE_WP);
|
||||
nt_sp_add_updatelist(sp);
|
||||
if (no == 0) {
|
||||
sp->cursize.width = main_surface->w;
|
||||
sp->cursize.height = main_surface->h;
|
||||
sp->width = main_surface->w;
|
||||
sp->height = main_surface->h;
|
||||
sp->update = nt_sp_draw_wall;
|
||||
}
|
||||
|
||||
|
||||
+13
-14
@@ -7,7 +7,6 @@
|
||||
|
||||
#include "portab.h"
|
||||
#include "system.h"
|
||||
#include "sdl_core.h"
|
||||
#include "utfsjis.h"
|
||||
#include "ags.h"
|
||||
#include "nact.h"
|
||||
@@ -217,7 +216,7 @@ static void ntmsg_out(int wNum, int wSize, int wColorR, int wColorG, int wColorB
|
||||
char *msg;
|
||||
sprite_t *sp;
|
||||
bool needupdate = false;
|
||||
MyRectangle uparea = {0,0,0,0};
|
||||
SDL_Rect uparea = {0,0,0,0};
|
||||
int savex;
|
||||
|
||||
if (night.msgbuf[0] == '\0') return;
|
||||
@@ -236,7 +235,7 @@ static void ntmsg_out(int wNum, int wSize, int wColorR, int wColorG, int wColorB
|
||||
char mbuf[20];
|
||||
int cw, delta, wcnt;
|
||||
|
||||
wcnt = sdl_getTicks();
|
||||
wcnt = sys_get_ticks();
|
||||
|
||||
mbuf[0] = '\0';
|
||||
msg = get_char(msg, mbuf, sizeof(mbuf) -1);
|
||||
@@ -267,7 +266,7 @@ static void ntmsg_out(int wNum, int wSize, int wColorR, int wColorG, int wColorB
|
||||
needupdate = false;
|
||||
|
||||
// keywait
|
||||
delta = sdl_getTicks() - wcnt;
|
||||
delta = sys_get_ticks() - wcnt;
|
||||
if (delta < wSpeed) {
|
||||
if (sys_keywait(wSpeed - delta, KEYWAIT_NONCANCELABLE)) {
|
||||
|
||||
@@ -284,8 +283,8 @@ static void ntmsg_out(int wNum, int wSize, int wColorR, int wColorG, int wColorB
|
||||
|
||||
// Waitなしの出力は最後にupdate
|
||||
if (needupdate) {
|
||||
uparea.w = sp->cursize.width;
|
||||
uparea.h = min(sp->cursize.height, uparea.y - sp->u.msg.dspcur.y + wLineSpace + wLineSpace);
|
||||
uparea.w = sp->width;
|
||||
uparea.h = min(sp->height, uparea.y - sp->u.msg.dspcur.y + wLineSpace + wLineSpace);
|
||||
nt_sp_updateme_part(sp, uparea.x, uparea.y, uparea.w, uparea.h);
|
||||
}
|
||||
|
||||
@@ -311,14 +310,14 @@ static int ntmsg_keywait() {
|
||||
night.waitkey = -1;
|
||||
|
||||
while (night.waitkey == -1 && !nact->is_quit) {
|
||||
int st = sdl_getTicks();
|
||||
int st = sys_get_ticks();
|
||||
int interval = 25;
|
||||
|
||||
if (!night.zhiding) {
|
||||
interval = night.sp[SPNO_MSG_KEYANIM]->u.anime.interval;
|
||||
hakanim(i++);
|
||||
}
|
||||
sys_keywait(interval - (sdl_getTicks() - st), KEYWAIT_NONCANCELABLE);
|
||||
sys_keywait(interval - (sys_get_ticks() - st), KEYWAIT_NONCANCELABLE);
|
||||
}
|
||||
|
||||
night.waittype = KEYWAIT_NONE;
|
||||
@@ -355,8 +354,8 @@ static void set_align(char *msg, sprite_t *sp, int wSize) {
|
||||
|
||||
maxchar = max(maxchar, c);
|
||||
line++;
|
||||
sp->u.msg.dspcur.x = (sp->cursize.width - (maxchar * wSize/2)) /2;
|
||||
sp->u.msg.dspcur.y = (sp->cursize.height - (line * (wSize+2))) /2;
|
||||
sp->u.msg.dspcur.x = (sp->width - (maxchar * wSize/2)) /2;
|
||||
sp->u.msg.dspcur.y = (sp->height - (line * (wSize+2))) /2;
|
||||
break;
|
||||
case 2:
|
||||
sp->u.msg.dspcur.x = msgframe_2.x;
|
||||
@@ -436,14 +435,14 @@ static void hakanim(int i) {
|
||||
sp->show = show;
|
||||
}
|
||||
|
||||
void ntmsg_update(sprite_t *sp, MyRectangle *r) {
|
||||
SDL_Rect sp_rect = {0, 0, sp->cursize.width, sp->cursize.height};
|
||||
void ntmsg_update(sprite_t *sp, SDL_Rect *r) {
|
||||
SDL_Rect sp_rect = {0, 0, sp->width, sp->height};
|
||||
int sx = 0;
|
||||
int sy = 0;
|
||||
int dx = sp->cur.x;
|
||||
int dy = sp->cur.y;
|
||||
int w = sp->cursize.width;
|
||||
int h = sp->cursize.height;
|
||||
int w = sp->width;
|
||||
int h = sp->height;
|
||||
if (!ags_clipCopyRect(&sp_rect, r, &sx, &sy, &dx, &dy, &w, &h)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -7,6 +7,6 @@ void ntmsg_set_place(int type);
|
||||
void ntmsg_newline();
|
||||
void ntmsg_add(const char *msg);
|
||||
int ntmsg_ana(void);
|
||||
void ntmsg_update(sprite_t *sp, MyRectangle *r);
|
||||
void ntmsg_update(sprite_t *sp, SDL_Rect *r);
|
||||
|
||||
#endif /* __NT_MSG_H__ */
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
#include "portab.h"
|
||||
#include "system.h"
|
||||
#include "input.h"
|
||||
#include "sdl_core.h"
|
||||
#include "scheduler.h"
|
||||
#include "xsystem35.h"
|
||||
#include "nact.h"
|
||||
|
||||
+10
-10
@@ -28,11 +28,11 @@ sprite_t *nt_sp_new(int no, int cg1, int cg2, int cg3, int type) {
|
||||
sp->cur = sp->loc;
|
||||
|
||||
if (sp->curcg == NULL) {
|
||||
sp->cursize.width = 0;
|
||||
sp->cursize.height = 0;
|
||||
sp->width = 0;
|
||||
sp->height = 0;
|
||||
} else {
|
||||
sp->cursize.width = sp->curcg->sf->w;
|
||||
sp->cursize.height = sp->curcg->sf->h;
|
||||
sp->width = sp->curcg->sf->w;
|
||||
sp->height = sp->curcg->sf->h;
|
||||
}
|
||||
sp->update = DEFAULT_UPDATE;
|
||||
|
||||
@@ -58,8 +58,8 @@ sprite_t *nt_sp_msg_new(int no, int x, int y, int width, int height) {
|
||||
sp->loc.x = x;
|
||||
sp->loc.y = y;
|
||||
sp->cur = sp->loc;
|
||||
sp->cursize.width = width;
|
||||
sp->cursize.height = height;
|
||||
sp->width = width;
|
||||
sp->height = height;
|
||||
sp->u.msg.dspcur.x = 0;
|
||||
sp->u.msg.dspcur.y = 0;
|
||||
sp->u.msg.canvas = SDL_CreateRGBSurfaceWithFormat(0, width, height, 32, SDL_PIXELFORMAT_ARGB8888);
|
||||
@@ -107,11 +107,11 @@ void nt_sp_set_cg(sprite_t *sp, int no) {
|
||||
cg = no ? nt_scg_addref(no) : NULL;
|
||||
|
||||
if (cg == NULL) {
|
||||
sp->cursize.width = 0;
|
||||
sp->cursize.height = 0;
|
||||
sp->width = 0;
|
||||
sp->height = 0;
|
||||
} else {
|
||||
sp->cursize.width = cg->sf->w;
|
||||
sp->cursize.height = cg->sf->h;
|
||||
sp->width = cg->sf->w;
|
||||
sp->height = cg->sf->h;
|
||||
}
|
||||
|
||||
sp->curcg = cg;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#define __SPRITE_H__
|
||||
|
||||
#include "portab.h"
|
||||
#include "graphics.h"
|
||||
#include <SDL_rect.h>
|
||||
|
||||
#define DEFAULT_UPDATE nt_sp_draw
|
||||
|
||||
@@ -72,7 +72,8 @@ struct _sprite {
|
||||
|
||||
int no;
|
||||
|
||||
MyDimension cursize;
|
||||
int width;
|
||||
int height;
|
||||
|
||||
cginfo_t *curcg;
|
||||
cginfo_t *cg1, *cg2, *cg3;
|
||||
@@ -81,11 +82,11 @@ struct _sprite {
|
||||
|
||||
int blendrate;
|
||||
|
||||
MyPoint loc;
|
||||
SDL_Point loc;
|
||||
|
||||
MyPoint cur;
|
||||
SDL_Point cur;
|
||||
|
||||
void (* update)(struct _sprite *sp, MyRectangle *updatearea);
|
||||
void (* update)(struct _sprite *sp, SDL_Rect *updatearea);
|
||||
|
||||
union {
|
||||
struct {
|
||||
@@ -97,7 +98,7 @@ struct _sprite {
|
||||
|
||||
struct {
|
||||
struct SDL_Surface *canvas;
|
||||
MyPoint dspcur;
|
||||
SDL_Point dspcur;
|
||||
} msg;
|
||||
} u;
|
||||
};
|
||||
@@ -120,12 +121,12 @@ void nt_sp_updateme(sprite_t *sp);
|
||||
void nt_sp_updateme_part(sprite_t *sp, int x, int y, int w, int h);
|
||||
void nt_sp_add_updatelist(sprite_t *sp);
|
||||
void nt_sp_remove_updatelist(sprite_t *sp);
|
||||
void nt_sp_draw_wall(sprite_t *sp, MyRectangle *r);
|
||||
void nt_sp_draw_wall(sprite_t *sp, SDL_Rect *r);
|
||||
void nt_sp_clear_updatelist(void);
|
||||
|
||||
/* in nt_sprite_draw.c */
|
||||
void nt_sp_draw(sprite_t *sp, MyRectangle *r);
|
||||
void nt_sp_draw_scg(sprite_t *sp, MyRectangle *r);
|
||||
void nt_sp_draw(sprite_t *sp, SDL_Rect *r);
|
||||
void nt_sp_draw_scg(sprite_t *sp, SDL_Rect *r);
|
||||
|
||||
/* in nt_sprite_eupdate.c */
|
||||
void nt_sp_eupdate(int type, int time, int cancel);
|
||||
|
||||
@@ -29,7 +29,6 @@
|
||||
#include "portab.h"
|
||||
#include "system.h"
|
||||
#include "ags.h"
|
||||
#include "graphics.h"
|
||||
#include "sprite.h"
|
||||
|
||||
/*
|
||||
@@ -37,7 +36,7 @@
|
||||
@param sp: 描画するスプライト
|
||||
@param r : 再描画する領域
|
||||
*/
|
||||
void nt_sp_draw(sprite_t *sp, MyRectangle *r) {
|
||||
void nt_sp_draw(sprite_t *sp, SDL_Rect *r) {
|
||||
if (sp == NULL) return;
|
||||
cginfo_t *cg = sp->curcg;
|
||||
if (cg == NULL) return;
|
||||
@@ -69,7 +68,7 @@ void nt_sp_draw(sprite_t *sp, MyRectangle *r) {
|
||||
}
|
||||
|
||||
// BlendScreenによる描画
|
||||
void nt_sp_draw_scg(sprite_t *sp, MyRectangle *r) {
|
||||
void nt_sp_draw_scg(sprite_t *sp, SDL_Rect *r) {
|
||||
if (sp == NULL) return;
|
||||
cginfo_t *cg = sp->curcg;
|
||||
if (cg == NULL) return;
|
||||
|
||||
@@ -28,7 +28,8 @@
|
||||
#include "ags.h"
|
||||
#include "input.h"
|
||||
#include "sprite.h"
|
||||
#include "sdl_core.h"
|
||||
#include "gfx.h"
|
||||
#include "effect.h"
|
||||
|
||||
/*
|
||||
効果つき画面更新
|
||||
@@ -44,25 +45,25 @@ void nt_sp_eupdate(int no, int time, int cancel) {
|
||||
|
||||
nt_sp_update_all(false);
|
||||
|
||||
enum sdl_effect_type type = from_sact_effect(no - 100);
|
||||
enum effect_type type = from_sact_effect(no - 100);
|
||||
if (type == EFFECT_INVALID) {
|
||||
WARNING("Unimplemented effect %d", no);
|
||||
type = EFFECT_CROSSFADE;
|
||||
}
|
||||
SDL_Rect rect = { 0, 0, main_surface->w, main_surface->h };
|
||||
struct sdl_effect *eff = sdl_effect_init(&rect, NULL, 0, 0, sdl_getDIB(), 0, 0, type);
|
||||
struct effect *eff = effect_init(&rect, NULL, 0, 0, gfx_getDIB(), 0, 0, type);
|
||||
|
||||
int sttime, curtime;
|
||||
sttime = curtime = sdl_getTicks();
|
||||
sttime = curtime = sys_get_ticks();
|
||||
int edtime = curtime + time;
|
||||
|
||||
while ((curtime = sdl_getTicks()) < edtime) {
|
||||
sdl_effect_step(eff, (float)(curtime - sttime) / (edtime - sttime));
|
||||
int rest = 16 - (sdl_getTicks() - curtime);
|
||||
while ((curtime = sys_get_ticks()) < edtime) {
|
||||
effect_step(eff, (float)(curtime - sttime) / (edtime - sttime));
|
||||
int rest = 16 - (sys_get_ticks() - curtime);
|
||||
int key = sys_keywait(rest, cancel ? KEYWAIT_CANCELABLE : KEYWAIT_NONCANCELABLE);
|
||||
if (cancel && key)
|
||||
break;
|
||||
}
|
||||
sdl_effect_finish(eff);
|
||||
effect_finish(eff);
|
||||
ags_updateFull();
|
||||
}
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
#include "system.h"
|
||||
#include "list.h"
|
||||
#include "ags.h"
|
||||
#include "graphics.h"
|
||||
#include "sprite.h"
|
||||
|
||||
// スプライト再描画間の間に変更のあったスプライトの領域の和
|
||||
@@ -41,22 +40,22 @@ static SList *updatearea;
|
||||
static SList *updatelist;
|
||||
|
||||
static void disjunction(void* region, void* data);
|
||||
static MyRectangle get_updatearea();
|
||||
static SDL_Rect get_updatearea();
|
||||
static void do_update_each(void* data, void* userdata);
|
||||
|
||||
// 領域1と領域2をすべて含む矩形領域を計算
|
||||
static void disjunction(void* region, void* data) {
|
||||
MyRectangle *r1 = (MyRectangle *)region;
|
||||
MyRectangle *r2 = (MyRectangle *)data;
|
||||
SDL_Rect *r1 = (SDL_Rect *)region;
|
||||
SDL_Rect *r2 = (SDL_Rect *)data;
|
||||
SDL_UnionRect(r1, r2, r2);
|
||||
free(r1);
|
||||
}
|
||||
|
||||
// 更新の必要なスプライトの領域の和をとってクリッピングする
|
||||
static MyRectangle get_updatearea() {
|
||||
MyRectangle clip = {0, 0, 0, 0};
|
||||
MyRectangle screen = {0, 0, main_surface->w, main_surface->h};
|
||||
MyRectangle result;
|
||||
static SDL_Rect get_updatearea() {
|
||||
SDL_Rect clip = {0, 0, 0, 0};
|
||||
SDL_Rect screen = {0, 0, main_surface->w, main_surface->h};
|
||||
SDL_Rect result;
|
||||
|
||||
slist_foreach(updatearea, disjunction, &clip);
|
||||
|
||||
@@ -75,7 +74,7 @@ static MyRectangle get_updatearea() {
|
||||
// updatelist に登録してあるすべてのスプライトを更新
|
||||
static void do_update_each(void* data, void* userdata) {
|
||||
sprite_t *sp = (sprite_t *)data;
|
||||
MyRectangle *r = (MyRectangle *)userdata;
|
||||
SDL_Rect *r = (SDL_Rect *)userdata;
|
||||
|
||||
// 非表示の場合はなにもしない
|
||||
if (!sp->show) return;
|
||||
@@ -92,7 +91,7 @@ static void do_update_each(void* data, void* userdata) {
|
||||
*/
|
||||
void nt_sp_update_all(bool syncscreen) {
|
||||
// 画面全体を更新領域に
|
||||
MyRectangle r = {0, 0, main_surface->w, main_surface->h };
|
||||
SDL_Rect r = {0, 0, main_surface->w, main_surface->h };
|
||||
|
||||
// updatelistに登録してあるスプライトを再描画
|
||||
// updatelistはスプライトの番号順に並んでいる
|
||||
@@ -111,7 +110,7 @@ void nt_sp_update_all(bool syncscreen) {
|
||||
updateme(_part)で登録した更新が必要なspriteの和の領域をupdate
|
||||
*/
|
||||
void nt_sp_update_clipped() {
|
||||
MyRectangle r;
|
||||
SDL_Rect r;
|
||||
|
||||
// 更新領域の確定
|
||||
r = get_updatearea();
|
||||
@@ -131,16 +130,16 @@ void nt_sp_update_clipped() {
|
||||
@param sp: 更新するスプライト
|
||||
*/
|
||||
void nt_sp_updateme(sprite_t *sp) {
|
||||
MyRectangle *r;
|
||||
SDL_Rect *r;
|
||||
|
||||
if (sp == NULL) return;
|
||||
if (sp->cursize.width == 0 || sp->cursize.height == 0) return;
|
||||
if (sp->width == 0 || sp->height == 0) return;
|
||||
|
||||
r = malloc(sizeof(MyRectangle));
|
||||
r = malloc(sizeof(SDL_Rect));
|
||||
r->x = sp->cur.x;
|
||||
r->y = sp->cur.y;
|
||||
r->w = sp->cursize.width;
|
||||
r->h = sp->cursize.height;
|
||||
r->w = sp->width;
|
||||
r->h = sp->height;
|
||||
|
||||
updatearea = slist_append(updatearea, r);
|
||||
|
||||
@@ -157,12 +156,12 @@ void nt_sp_updateme(sprite_t *sp) {
|
||||
@param h: 更新領域高さ
|
||||
*/
|
||||
void nt_sp_updateme_part(sprite_t *sp, int x, int y, int w, int h) {
|
||||
MyRectangle *r;
|
||||
SDL_Rect *r;
|
||||
|
||||
if (sp == NULL) return;
|
||||
if (w == 0 || h == 0) return;
|
||||
|
||||
r = malloc(sizeof(MyRectangle));
|
||||
r = malloc(sizeof(SDL_Rect));
|
||||
r->x = sp->cur.x + x;
|
||||
r->y = sp->cur.y + y;
|
||||
r->w = w;
|
||||
@@ -204,6 +203,6 @@ void nt_sp_clear_updatelist(void) {
|
||||
}
|
||||
|
||||
// デフォルトの壁紙update
|
||||
void nt_sp_draw_wall(sprite_t *sp, MyRectangle *area) {
|
||||
void nt_sp_draw_wall(sprite_t *sp, SDL_Rect *area) {
|
||||
SDL_FillRect(main_surface, area, SDL_MapRGB(main_surface->format, 0, 0, 0));
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
#include "nact.h"
|
||||
#include "alk.h"
|
||||
#include "music.h"
|
||||
#include "sdl_core.h"
|
||||
#include "gfx.h"
|
||||
#include "input.h"
|
||||
#include "cg.h"
|
||||
#include "jpeg.h"
|
||||
@@ -52,9 +52,9 @@ static void ndd_run(int demonum) {
|
||||
if (mus)
|
||||
musbgm_play(mus, 0, 100, 0);
|
||||
|
||||
uint32_t start = sdl_getTicks();
|
||||
uint32_t start = sys_get_ticks();
|
||||
while (!nact->is_quit) {
|
||||
int i = (sdl_getTicks() - start) / (1000 / FPS);
|
||||
int i = (sys_get_ticks() - start) / (1000 / FPS);
|
||||
if (i >= alk->datanum)
|
||||
break;
|
||||
|
||||
@@ -69,12 +69,12 @@ static void ndd_run(int demonum) {
|
||||
WARNING("Cannot decode CG %d in %s", i, alk_path);
|
||||
}
|
||||
|
||||
int wait_ms = (i + 1) * (1000 / FPS) - (sdl_getTicks() - start);
|
||||
int wait_ms = (i + 1) * (1000 / FPS) - (sys_get_ticks() - start);
|
||||
if (wait_ms > 0) {
|
||||
if (sys_keywait(wait_ms, KEYWAIT_CANCELABLE))
|
||||
break;
|
||||
} else {
|
||||
sdl_updateScreen();
|
||||
gfx_updateScreen();
|
||||
if (sys_getInputInfo())
|
||||
break;
|
||||
}
|
||||
|
||||
+12
-12
@@ -25,10 +25,9 @@
|
||||
#define __SACT_H__
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <SDL_rect.h>
|
||||
#include "portab.h"
|
||||
#include "list.h"
|
||||
#include "graphics.h"
|
||||
#include "ags.h"
|
||||
#include "sacttimer.h"
|
||||
#include "variable.h"
|
||||
@@ -107,7 +106,8 @@ struct _sprite {
|
||||
int numsound1, numsound2, numsound3;
|
||||
|
||||
// 初期 sprite の大きさ(cg1の大きさ)
|
||||
MyDimension cursize;
|
||||
int width;
|
||||
int height;
|
||||
|
||||
// それぞれの状態で表示する CG
|
||||
cginfo_t *cg1, *cg2, *cg3;
|
||||
@@ -126,10 +126,10 @@ struct _sprite {
|
||||
int freezed_state;
|
||||
|
||||
// 表示位置 (SetPos)
|
||||
MyPoint loc;
|
||||
SDL_Point loc;
|
||||
|
||||
// 現在のスプライトの表示位置
|
||||
MyPoint cur;
|
||||
SDL_Point cur;
|
||||
|
||||
// event callback
|
||||
int (* eventcb)(struct _sprite *sp, agsevent_t *e); // for key/mouse
|
||||
@@ -146,7 +146,7 @@ struct _sprite {
|
||||
|
||||
// move command 用パラメータ
|
||||
struct {
|
||||
MyPoint to; // 移動先
|
||||
SDL_Point to; // 移動先
|
||||
int time; // 移動完了時間
|
||||
int speed; // 移動速度
|
||||
int starttime; // 移動開始時刻
|
||||
@@ -157,7 +157,7 @@ struct _sprite {
|
||||
// SACT.Numeral用パラメータ
|
||||
struct {
|
||||
int cg[10];
|
||||
MyPoint pos;
|
||||
SDL_Point pos;
|
||||
int span;
|
||||
} numeral;
|
||||
|
||||
@@ -171,7 +171,7 @@ struct _sprite {
|
||||
// ゲットスプライト
|
||||
struct {
|
||||
bool dragging; // ドラッグ中
|
||||
MyPoint dragstart; // ドラッグ開始位置
|
||||
SDL_Point dragstart; // ドラッグ開始位置
|
||||
} get;
|
||||
|
||||
// プットスプライト
|
||||
@@ -191,7 +191,7 @@ struct _sprite {
|
||||
struct {
|
||||
SList *buf; // 表示する文字のリスト
|
||||
struct SDL_Surface *canvas;
|
||||
MyPoint dspcur; // 現在の表示位置
|
||||
SDL_Point dspcur; // 現在の表示位置
|
||||
} msg;
|
||||
} u;
|
||||
};
|
||||
@@ -213,7 +213,7 @@ struct _sact {
|
||||
cginfo_t *cg[CGMAX]; // cgまたはCG_xxで作った CG
|
||||
|
||||
// 座標系の原点
|
||||
MyPoint origin;
|
||||
SDL_Point origin;
|
||||
|
||||
// 文字列 replce 用
|
||||
SList *strreplace;
|
||||
@@ -247,7 +247,7 @@ struct _sact {
|
||||
int movestarttime; // 一斉に移動を開始するための開始時間
|
||||
int movecurtime;
|
||||
|
||||
MyRectangle updaterect; // 更新が必要なspriteの領域の和
|
||||
SDL_Rect updaterect; // 更新が必要なspriteの領域の和
|
||||
|
||||
// sact timer
|
||||
stimer_t timer[65536];
|
||||
@@ -281,7 +281,7 @@ struct _sact {
|
||||
|
||||
// バックログ
|
||||
bool logging;
|
||||
List *log;
|
||||
List *log; // UTF-8 strings
|
||||
};
|
||||
typedef struct _sact sact_t;
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
#include "sact.h"
|
||||
#include "pms.h"
|
||||
#include "sprite.h"
|
||||
#include "sdl_core.h"
|
||||
#include "effect.h"
|
||||
#include "mmap.h"
|
||||
|
||||
// SACTEFAM を使ったマスク
|
||||
@@ -91,10 +91,10 @@ void sp_eupdate_amap(int index, int time, int cancel) {
|
||||
return;
|
||||
}
|
||||
SDL_Surface *mask_sf = SDL_CreateRGBSurfaceFrom(mask->pic, mask->width, mask->height, 8, mask->width, 0, 0, 0, 0);
|
||||
sp_update_all(false); // old = sdl_texture, new = main_surface
|
||||
struct sdl_effect *eff = sdl_effect_sactamask_init(mask_sf);
|
||||
ags_runEffect(time * 10, cancel, (ags_EffectStepFunc)sdl_effect_step, eff);
|
||||
sdl_effect_finish(eff);
|
||||
sp_update_all(false); // old = gfx_texture, new = main_surface
|
||||
struct effect *eff = effect_sactamask_init(mask_sf);
|
||||
ags_runEffect(time * 10, cancel, (ags_EffectStepFunc)effect_step, eff);
|
||||
effect_finish(eff);
|
||||
ags_updateFull();
|
||||
|
||||
SDL_FreeSurface(mask_sf);
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
#include "sact.h"
|
||||
#include "sactcg.h"
|
||||
#include "cg.h"
|
||||
#include "sdl_core.h"
|
||||
#include "gfx.h"
|
||||
|
||||
#define SPCG_ASSERT_NO(no) \
|
||||
if ((no) > (CGMAX -1)) { \
|
||||
@@ -118,9 +118,9 @@ void scg_create_reverse(int wNumCG, int wNumSrcCG, int wReverseX, int wReverseY)
|
||||
|
||||
SDL_Surface *sf = SDL_ConvertSurface(src->sf, src->sf->format, 0);
|
||||
if (wReverseX)
|
||||
sdl_FlipSurfaceHorizontal(sf);
|
||||
gfx_FlipSurfaceHorizontal(sf);
|
||||
if (wReverseY)
|
||||
sdl_FlipSurfaceVertical(sf);
|
||||
gfx_FlipSurfaceVertical(sf);
|
||||
scg_new(CG_REVERSE, wNumCG, sf);
|
||||
}
|
||||
|
||||
|
||||
+17
-19
@@ -36,12 +36,13 @@
|
||||
#include "nact.h"
|
||||
#include "sact.h"
|
||||
#include "sprite.h"
|
||||
#include "drawtext.h"
|
||||
#include "utfsjis.h"
|
||||
#include "gfx.h"
|
||||
#include "ags.h"
|
||||
#include "font.h"
|
||||
|
||||
#define LOGMSG_LINES 6
|
||||
|
||||
static const char *logmsg_utf8[LOGMSG_LINES] = {
|
||||
static char *logmsg[LOGMSG_LINES] = {
|
||||
"\n",
|
||||
"※バックログ操作方法※",
|
||||
"[ESC]またはマウス右クリックでゲームに戻る",
|
||||
@@ -56,7 +57,7 @@ static const char *logmsg_utf8[LOGMSG_LINES] = {
|
||||
PageUP/Downで1ページ送り
|
||||
*/
|
||||
|
||||
#define FONTSIZEINDEX 10
|
||||
#define INDEX_FONTSIZE 10
|
||||
#define FONTSIZE 20
|
||||
#define LOGLINENUM (main_surface->h / FONTSIZE)
|
||||
static int curline;
|
||||
@@ -68,6 +69,10 @@ static void draw_log() {
|
||||
char pinfo[256];
|
||||
List *node;
|
||||
|
||||
#ifdef __EMSCRIPTEN__
|
||||
load_mincho_font();
|
||||
#endif
|
||||
|
||||
SDL_Surface *hline = SDL_CreateRGBSurfaceWithFormat(0, main_surface->w, 3, 32, SDL_PIXELFORMAT_RGB888);
|
||||
SDL_FillRect(hline, NULL, SDL_MapRGB(hline->format, 255, 255, 255));
|
||||
SDL_SetSurfaceBlendMode(hline, SDL_BLENDMODE_BLEND);
|
||||
@@ -80,8 +85,8 @@ static void draw_log() {
|
||||
// ページ位置情報
|
||||
len = snprintf(pinfo, sizeof(pinfo) -1, "%d/%d", curline, list_length(sact.log));
|
||||
|
||||
dt_setfont(FONT_GOTHIC, FONTSIZEINDEX);
|
||||
dt_drawtext_col(main_surface, main_surface->w - FONTSIZEINDEX *len /2, 0, pinfo, 255, 255, 255);
|
||||
ags_setFont(FONT_GOTHIC, INDEX_FONTSIZE);
|
||||
gfx_drawString(main_surface->w - INDEX_FONTSIZE * len / 2, 0, pinfo, 255);
|
||||
|
||||
// 表示始め位置
|
||||
node = list_nth(sact.log, list_length(sact.log) - curline);
|
||||
@@ -93,11 +98,11 @@ static void draw_log() {
|
||||
SDL_BlitSurface(hline, NULL, main_surface, &(SDL_Rect){0, y + FONTSIZE/2, main_surface->w, 3});
|
||||
} else {
|
||||
if (cur < 6) {
|
||||
dt_setfont(FONT_MINCHO, FONTSIZE);
|
||||
ags_setFont(FONT_MINCHO, FONTSIZE);
|
||||
} else {
|
||||
dt_setfont(FONT_GOTHIC, FONTSIZE);
|
||||
ags_setFont(FONT_GOTHIC, FONTSIZE);
|
||||
}
|
||||
dt_drawtext_col(main_surface, 0, y, str, 255, 255, 255);
|
||||
gfx_drawString(0, y, str, 255);
|
||||
}
|
||||
y += FONTSIZE;
|
||||
cur--;
|
||||
@@ -113,13 +118,7 @@ bool sblog_start(void) {
|
||||
if (sact.version < 120)
|
||||
return false;
|
||||
|
||||
static char *logmsg[LOGMSG_LINES];
|
||||
if (!logmsg[0]) {
|
||||
for (int i = 0; i < LOGMSG_LINES; i++)
|
||||
logmsg[i] = fromUTF8(logmsg_utf8[i]);
|
||||
}
|
||||
|
||||
// 説明文章を追加
|
||||
// Append instruction text
|
||||
for (int i = 0; i < LOGMSG_LINES; i++)
|
||||
sact.log = list_append(sact.log, logmsg[i]);
|
||||
|
||||
@@ -138,10 +137,9 @@ void sblog_end(void) {
|
||||
|
||||
SDL_FreeSurface(back);
|
||||
|
||||
// 説明文章を削除
|
||||
// Remove instruction text
|
||||
for (i = 0; i < LOGMSG_LINES; i++) {
|
||||
node = list_last(sact.log);
|
||||
sact.log = list_remove(sact.log, node->data);
|
||||
sact.log = list_remove(sact.log, logmsg[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -34,7 +34,6 @@
|
||||
#include "input.h"
|
||||
#include "sact.h"
|
||||
#include "sprite.h"
|
||||
#include "sdl_core.h"
|
||||
#include "randMT.h"
|
||||
|
||||
#define M_PIf ((float)M_PI)
|
||||
@@ -78,9 +77,9 @@ void sp_quake_screen(int type, int p1, int p2, int time, int cancel) {
|
||||
|
||||
if (type > 1) return;
|
||||
|
||||
sttime = sdl_getTicks();
|
||||
sttime = sys_get_ticks();
|
||||
edtime = time * 10 + sttime;
|
||||
while ((curtime = sdl_getTicks()) < edtime) {
|
||||
while ((curtime = sys_get_ticks()) < edtime) {
|
||||
int adjx, adjy;
|
||||
|
||||
cb[type]((float)(curtime - sttime)/(edtime - sttime), p1, p2, &adjx, &adjy);
|
||||
|
||||
+11
-11
@@ -145,11 +145,11 @@ void sp_new(int no, int cg1, int cg2, int cg3, int type) {
|
||||
|
||||
// cg1の大きさをスプライトの大きさとする
|
||||
if (sp->curcg == NULL) {
|
||||
sp->cursize.width = 0;
|
||||
sp->cursize.height = 0;
|
||||
sp->width = 0;
|
||||
sp->height = 0;
|
||||
} else {
|
||||
sp->cursize.width = sp->curcg->sf->w;
|
||||
sp->cursize.height = sp->curcg->sf->h;
|
||||
sp->width = sp->curcg->sf->w;
|
||||
sp->height = sp->curcg->sf->h;
|
||||
}
|
||||
|
||||
sp->freezed_state = 0; // 状態固定は無し
|
||||
@@ -201,8 +201,8 @@ void sp_new_msg(int no, int x, int y, int width, int height) {
|
||||
sp->loc.y = y - sact.origin.y;
|
||||
sp->u.msg.dspcur.x = 0; // 文字描画開始位置
|
||||
sp->u.msg.dspcur.y = 0;
|
||||
sp->cursize.width = width; // スプライトの大きさ
|
||||
sp->cursize.height = height;
|
||||
sp->width = width; // スプライトの大きさ
|
||||
sp->height = height;
|
||||
sp->cur = sp->loc;
|
||||
sp->u.msg.buf = NULL;
|
||||
|
||||
@@ -224,10 +224,10 @@ void sp_set_wall_paper(int no) {
|
||||
|
||||
if (sp->curcg) { // display specified CG
|
||||
sp->update = DEFAULT_UPDATE;
|
||||
sp->cursize.width = sp->curcg->sf->w;
|
||||
sp->cursize.height = sp->curcg->sf->h;
|
||||
sp->width = sp->curcg->sf->w;
|
||||
sp->height = sp->curcg->sf->h;
|
||||
} else { // Black
|
||||
sp->cursize.height = main_surface->h;
|
||||
sp->height = main_surface->h;
|
||||
sp->curcg = NULL;
|
||||
sp->update = sp_draw_wall;
|
||||
}
|
||||
@@ -516,8 +516,8 @@ bool sp_query_size(int wNum, int *vw, int *vh) {
|
||||
|
||||
if (sp->type == SPRITE_NONE) goto errexit;
|
||||
|
||||
*vw = sp->cursize.width;
|
||||
*vh = sp->cursize.height;
|
||||
*vw = sp->width;
|
||||
*vh = sp->height;
|
||||
|
||||
return true;
|
||||
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
#include "portab.h"
|
||||
#include "system.h"
|
||||
#include "ags.h"
|
||||
#include "sdl_core.h"
|
||||
#include "sact.h"
|
||||
#include "sprite.h"
|
||||
|
||||
@@ -44,7 +43,7 @@ static int eventCB_ANIM(sprite_t *sp, agsevent_t *e) {
|
||||
if (e->type != AGSEVENT_TIMER) return 0;
|
||||
|
||||
// 現在時刻の取得
|
||||
now = sdl_getTicks();
|
||||
now = sys_get_ticks();
|
||||
|
||||
// 指定時間までスキップ
|
||||
if ((now - sp->u.anime.starttime) < sp->u.anime.interval) return 0;
|
||||
@@ -85,7 +84,7 @@ void sp_anime_setup(sprite_t *sp) {
|
||||
int n = 0;
|
||||
|
||||
sp->u.anime.interval = 500; // デフォルトの間隔 0.5秒
|
||||
sp->u.anime.starttime = sdl_getTicks(); // 開始時刻
|
||||
sp->u.anime.starttime = sys_get_ticks(); // 開始時刻
|
||||
sp->u.anime.tick = 0; // カウンタ初期化
|
||||
|
||||
// アニメパターンはいくつあるか
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
#include "portab.h"
|
||||
#include "system.h"
|
||||
#include "ags.h"
|
||||
#include "graphics.h"
|
||||
#include "sact.h"
|
||||
#include "sprite.h"
|
||||
|
||||
|
||||
@@ -29,7 +29,8 @@
|
||||
#include "input.h"
|
||||
#include "sact.h"
|
||||
#include "sprite.h"
|
||||
#include "sdl_core.h"
|
||||
#include "gfx.h"
|
||||
#include "effect.h"
|
||||
|
||||
/*
|
||||
効果つき画面更新
|
||||
@@ -45,25 +46,25 @@ void sp_eupdate(int type, int time, int cancel) {
|
||||
|
||||
sp_update_all(false);
|
||||
|
||||
enum sdl_effect_type sdl_effect = from_sact_effect(type);
|
||||
if (sdl_effect == EFFECT_INVALID) {
|
||||
enum effect_type effect = from_sact_effect(type);
|
||||
if (effect == EFFECT_INVALID) {
|
||||
WARNING("Unimplemented effect %d", type);
|
||||
type = EFFECT_CROSSFADE;
|
||||
}
|
||||
SDL_Rect rect = { 0, 0, main_surface->w, main_surface->h };
|
||||
struct sdl_effect *eff = sdl_effect_init(&rect, NULL, 0, 0, sdl_getDIB(), 0, 0, sdl_effect);
|
||||
struct effect *eff = effect_init(&rect, NULL, 0, 0, gfx_getDIB(), 0, 0, effect);
|
||||
|
||||
int sttime, curtime;
|
||||
sttime = curtime = sdl_getTicks();
|
||||
sttime = curtime = sys_get_ticks();
|
||||
int edtime = curtime + time * 10;
|
||||
|
||||
while ((curtime = sdl_getTicks()) < edtime) {
|
||||
sdl_effect_step(eff, (float)(curtime - sttime) / (edtime - sttime));
|
||||
int rest = 16 - (sdl_getTicks() - curtime);
|
||||
while ((curtime = sys_get_ticks()) < edtime) {
|
||||
effect_step(eff, (float)(curtime - sttime) / (edtime - sttime));
|
||||
int rest = 16 - (sys_get_ticks() - curtime);
|
||||
int key = sys_keywait(rest, cancel ? KEYWAIT_CANCELABLE : KEYWAIT_NONCANCELABLE);
|
||||
if (cancel && key)
|
||||
break;
|
||||
}
|
||||
sdl_effect_finish(eff);
|
||||
effect_finish(eff);
|
||||
ags_updateFull();
|
||||
}
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
|
||||
#include "portab.h"
|
||||
#include "system.h"
|
||||
#include "sdl_core.h"
|
||||
#include "menu.h"
|
||||
#include "input.h"
|
||||
#include "nact.h"
|
||||
@@ -213,7 +212,7 @@ static void cb_waitkey_simple(agsevent_t *e) {
|
||||
switch (e->type) {
|
||||
case AGSEVENT_KEY_PRESS:
|
||||
if (e->code == KEY_Z) {
|
||||
cur = sdl_getTicks();
|
||||
cur = sys_get_ticks();
|
||||
if (!sact.zhiding) {
|
||||
slist_foreach(sact.sp_zhide, cb_defocused_zkey, &update);
|
||||
sact.zhiding = true;
|
||||
@@ -243,7 +242,7 @@ static void cb_waitkey_simple(agsevent_t *e) {
|
||||
case AGSEVENT_KEY_RELEASE:
|
||||
switch(e->code) {
|
||||
case KEY_Z:
|
||||
cur = sdl_getTicks();
|
||||
cur = sys_get_ticks();
|
||||
if (500 < (cur - sact.zofftime) || !sact.zdooff) {
|
||||
slist_foreach(sact.sp_zhide, cb_focused_zkey, &update);
|
||||
sact.zhiding = false;
|
||||
|
||||
@@ -29,7 +29,6 @@
|
||||
#include "portab.h"
|
||||
#include "system.h"
|
||||
#include "list.h"
|
||||
#include "sdl_core.h"
|
||||
#include "ags.h"
|
||||
#include "nact.h"
|
||||
#include "input.h"
|
||||
@@ -67,7 +66,7 @@ static void hidesprite(sprite_t *sp) {
|
||||
スプライトがドロップされた時の各種処理を含む
|
||||
*/
|
||||
static bool waitcond(int endtime) {
|
||||
int curtime = sdl_getTicks();
|
||||
int curtime = sys_get_ticks();
|
||||
if (curtime >= endtime) return true;
|
||||
|
||||
if (sact.dropped) {
|
||||
@@ -133,7 +132,7 @@ void sp_keywait(int *vOK, int *vRND, int *vD01, int *vD02, int *vD03, int timeou
|
||||
{
|
||||
// とりあえず、現在のマウス位置を送って、switch sprite の
|
||||
// 状態を更新しておく
|
||||
MyPoint p;
|
||||
SDL_Point p;
|
||||
sys_getMouseInfo(&p, false);
|
||||
agsevent_t agse = {
|
||||
.type = AGSEVENT_MOUSE_MOTION,
|
||||
@@ -144,7 +143,7 @@ void sp_keywait(int *vOK, int *vRND, int *vD01, int *vD02, int *vD03, int timeou
|
||||
}
|
||||
|
||||
// 終了時間の計算
|
||||
curtime = sdl_getTicks();
|
||||
curtime = sys_get_ticks();
|
||||
endtime = timeout < 0 ? INT_MAX : (curtime + timeout * 10);
|
||||
|
||||
// スプライトキー待ちメイン
|
||||
|
||||
@@ -32,7 +32,6 @@
|
||||
#include "nact.h"
|
||||
#include "sact.h"
|
||||
#include "sprite.h"
|
||||
#include "sdl_core.h"
|
||||
|
||||
/*
|
||||
|
||||
@@ -161,14 +160,14 @@ void spev_move_waitend(sprite_t *sp, int dx, int dy, int time) {
|
||||
sp->move.time = 0;
|
||||
|
||||
sact.movelist = slist_append(sact.movelist, sp);
|
||||
sact.movestarttime = sdl_getTicks();
|
||||
sact.movestarttime = sys_get_ticks();
|
||||
slist_foreach(sact.movelist, spev_move_setup, NULL);
|
||||
slist_free(sact.movelist);
|
||||
sact.movelist = NULL;
|
||||
|
||||
while (sp->move.moving) {
|
||||
nact->callback();
|
||||
sdl_wait_vsync();
|
||||
sys_wait_vsync();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -187,7 +186,7 @@ void spev_wait4moving_sp() {
|
||||
|
||||
while (sp->move.moving) {
|
||||
nact->callback();
|
||||
sdl_wait_vsync();
|
||||
sys_wait_vsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+13
-14
@@ -29,7 +29,6 @@
|
||||
|
||||
#include "portab.h"
|
||||
#include "system.h"
|
||||
#include "sdl_core.h"
|
||||
#include "ags.h"
|
||||
#include "nact.h"
|
||||
#include "input.h"
|
||||
@@ -241,7 +240,7 @@ void smsg_out(int wNum, int wSize, int wColorR, int wColorG, int wColorB, int wF
|
||||
sprite_t *sp;
|
||||
int len = 0; // 処理した文字数?
|
||||
bool needupdate = false;
|
||||
MyRectangle uparea = {0,0,0,0};
|
||||
SDL_Rect uparea = {0,0,0,0};
|
||||
|
||||
// wRSize == 0 -> ルビ無し(SACT.MessageOutputからの呼出)
|
||||
|
||||
@@ -268,7 +267,7 @@ void smsg_out(int wNum, int wSize, int wColorR, int wColorG, int wColorB, int wF
|
||||
char mbuf[20], rbuf[20];
|
||||
int cw, delta, wcnt;
|
||||
|
||||
wcnt = sdl_getTicks();
|
||||
wcnt = sys_get_ticks();
|
||||
|
||||
mbuf[0] = rbuf[0] = '\0';
|
||||
msg = get_char(msg, mbuf, rbuf, sizeof(mbuf) -1);
|
||||
@@ -316,7 +315,7 @@ void smsg_out(int wNum, int wSize, int wColorR, int wColorG, int wColorB, int wF
|
||||
needupdate = false;
|
||||
|
||||
// keywait
|
||||
delta = sdl_getTicks() - wcnt;
|
||||
delta = sys_get_ticks() - wcnt;
|
||||
if (delta < wSpeed) {
|
||||
if (sys_keywait(wSpeed - delta, KEYWAIT_NONCANCELABLE)) {
|
||||
|
||||
@@ -335,8 +334,8 @@ void smsg_out(int wNum, int wSize, int wColorR, int wColorG, int wColorB, int wF
|
||||
|
||||
// Waitなしの出力は最後にupdate
|
||||
if (needupdate) {
|
||||
uparea.w = sp->cursize.width;
|
||||
uparea.h = min(sp->cursize.height, uparea.y - sp->u.msg.dspcur.y + wLineSpace + wLineSpace + wRSize);
|
||||
uparea.w = sp->width;
|
||||
uparea.h = min(sp->height, uparea.y - sp->u.msg.dspcur.y + wLineSpace + wLineSpace + wRSize);
|
||||
sp_updateme_part(sp, uparea.x, uparea.y, uparea.w, uparea.h);
|
||||
}
|
||||
|
||||
@@ -420,7 +419,7 @@ int smsg_keywait(int wNum1, int wNum2, int msglen) {
|
||||
sact.waitkey = -1;
|
||||
|
||||
while (sact.waitkey == -1 && !nact->is_quit) {
|
||||
int st = sdl_getTicks();
|
||||
int st = sys_get_ticks();
|
||||
int interval = 25;
|
||||
|
||||
// アニメパターンがある場合、その更新
|
||||
@@ -434,7 +433,7 @@ int smsg_keywait(int wNum1, int wNum2, int msglen) {
|
||||
update_mark(minfo[j].sp, minfo[j].cg);
|
||||
i++;
|
||||
}
|
||||
sys_keywait(interval - (sdl_getTicks() - st), KEYWAIT_NONCANCELABLE);
|
||||
sys_keywait(interval - (sys_get_ticks() - st), KEYWAIT_NONCANCELABLE);
|
||||
}
|
||||
|
||||
sact.waittype = KEYWAIT_NONE;
|
||||
@@ -447,13 +446,13 @@ int smsg_keywait(int wNum1, int wNum2, int msglen) {
|
||||
@param sp: 再描画するスプライト
|
||||
*/
|
||||
void smsg_update(sprite_t *sp) {
|
||||
SDL_Rect sp_rect = {0, 0, sp->cursize.width, sp->cursize.height};
|
||||
SDL_Rect sp_rect = {0, 0, sp->width, sp->height};
|
||||
int sx = 0;
|
||||
int sy = 0;
|
||||
int dx = sp->cur.x;
|
||||
int dy = sp->cur.y;
|
||||
int w = sp->cursize.width;
|
||||
int h = sp->cursize.height;
|
||||
int w = sp->width;
|
||||
int h = sp->height;
|
||||
if (!ags_clipCopyRect(&sp_rect, &sact.updaterect, &sx, &sy, &dx, &dy, &w, &h)) {
|
||||
return;
|
||||
}
|
||||
@@ -534,7 +533,7 @@ static void append_to_log(char *msg) {
|
||||
static void sactlog_newline() {
|
||||
if (sact.logging) {
|
||||
if (sact.msgbuf2[0] == '\0') return;
|
||||
sact.log = list_append(sact.log, strdup(sact.msgbuf2));
|
||||
sact.log = list_append(sact.log, toUTF8(sact.msgbuf2));
|
||||
sact.msgbuf2[0] = '\0';
|
||||
}
|
||||
}
|
||||
@@ -547,10 +546,10 @@ static void set_align(char *msg, sprite_t *sp, int wSize, int wAlign) {
|
||||
|
||||
switch (wAlign) {
|
||||
case 1: // センタリング
|
||||
adjx = (sp->cursize.width - mlen) / 2;
|
||||
adjx = (sp->width - mlen) / 2;
|
||||
break;
|
||||
case 2: // 右寄せ
|
||||
adjx = (sp->cursize.width - mlen);
|
||||
adjx = (sp->width - mlen);
|
||||
break;
|
||||
}
|
||||
sp->u.msg.dspcur.x = max(0, adjx);
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
#include "input.h"
|
||||
#include "sact.h"
|
||||
#include "sprite.h"
|
||||
#include "sdl_core.h"
|
||||
#include "randMT.h"
|
||||
|
||||
/*
|
||||
@@ -49,9 +48,9 @@ void sp_quake_sprite(int wType, int wAmplitudeX, int wAmplitudeY, int wCount, in
|
||||
int i = 0, key;
|
||||
SList *node;
|
||||
|
||||
edtime = wCount * 10 + sdl_getTicks();
|
||||
edtime = wCount * 10 + sys_get_ticks();
|
||||
|
||||
while ((curtime = sdl_getTicks()) < edtime) {
|
||||
while ((curtime = sys_get_ticks()) < edtime) {
|
||||
if (wType == 0) { // 全てのスプライトを同じように動かす
|
||||
int adjx = (int)(genrand() * wAmplitudeX/2);
|
||||
int adjy = (int)(genrand() * wAmplitudeY/2);
|
||||
|
||||
@@ -60,8 +60,8 @@ static int sel_main();
|
||||
* マージン内はsprite内部とは判断しない
|
||||
*/
|
||||
static bool sp_is_insprite2(sprite_t *sp, int x, int y, int margin) {
|
||||
MyPoint p = {x, y};
|
||||
MyRectangle r = {
|
||||
SDL_Point p = {x, y};
|
||||
SDL_Rect r = {
|
||||
sp->cur.x + margin,
|
||||
sp->cur.y + margin,
|
||||
sp->curcg->sf->w - 2 * margin,
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
#include "nact.h"
|
||||
#include "sact.h"
|
||||
#include "sprite.h"
|
||||
#include "sdl_core.h"
|
||||
|
||||
/*
|
||||
|
||||
@@ -63,7 +62,7 @@ static void tevent_callback(agsevent_t *e) {
|
||||
int update = 0;
|
||||
|
||||
// SP_MOVE の同期移動のためのカウンタの読み込み
|
||||
sact.movecurtime = sdl_getTicks();
|
||||
sact.movecurtime = sys_get_ticks();
|
||||
|
||||
for (node = sact.teventlisteners; node; node = node->next) {
|
||||
sprite_t *sp = (sprite_t *)node->data;
|
||||
|
||||
@@ -28,9 +28,7 @@
|
||||
|
||||
#include "portab.h"
|
||||
#include "system.h"
|
||||
#include "sdl_core.h"
|
||||
#include "ags.h"
|
||||
#include "graphics.h"
|
||||
#include "sact.h"
|
||||
#include "sprite.h"
|
||||
|
||||
@@ -43,16 +41,16 @@ static void do_update_each(void* data, void* userdata);
|
||||
|
||||
// 領域1と領域2をすべて含む矩形領域を計算
|
||||
static void disjunction(void* region, void* data) {
|
||||
MyRectangle *r1 = (MyRectangle *)region;
|
||||
MyRectangle *r2 = (MyRectangle *)data;
|
||||
SDL_Rect *r1 = (SDL_Rect *)region;
|
||||
SDL_Rect *r2 = (SDL_Rect *)data;
|
||||
SDL_UnionRect(r1, r2, r2);
|
||||
free(r1);
|
||||
}
|
||||
|
||||
// 更新の必要なスプライトの領域の和をとってクリッピングする
|
||||
static void get_updatearea() {
|
||||
MyRectangle clip = {0, 0, 0, 0};
|
||||
MyRectangle screen = {0, 0, main_surface->w, main_surface->h};
|
||||
SDL_Rect clip = {0, 0, 0, 0};
|
||||
SDL_Rect screen = {0, 0, main_surface->w, main_surface->h};
|
||||
|
||||
slist_foreach(updatearea, disjunction, &clip);
|
||||
|
||||
@@ -93,7 +91,7 @@ void sp_update_all(bool syncscreen) {
|
||||
// スプライト移動がある場合は移動開始
|
||||
if (sact.movelist) {
|
||||
// 移動開始時間を合わせる
|
||||
sact.movestarttime = sdl_getTicks();
|
||||
sact.movestarttime = sys_get_ticks();
|
||||
slist_foreach(sact.movelist, spev_move_setup, NULL);
|
||||
slist_free(sact.movelist);
|
||||
sact.movelist = NULL;
|
||||
@@ -149,16 +147,16 @@ void sp_update_clipped() {
|
||||
@param sp: 更新するスプライト
|
||||
*/
|
||||
void sp_updateme(sprite_t *sp) {
|
||||
MyRectangle *r;
|
||||
SDL_Rect *r;
|
||||
|
||||
if (sp == NULL) return;
|
||||
if (sp->cursize.width == 0 || sp->cursize.height == 0) return;
|
||||
if (sp->width == 0 || sp->height == 0) return;
|
||||
|
||||
r = malloc(sizeof(MyRectangle));
|
||||
r = malloc(sizeof(SDL_Rect));
|
||||
r->x = sp->cur.x;
|
||||
r->y = sp->cur.y;
|
||||
r->w = sp->cursize.width;
|
||||
r->h = sp->cursize.height;
|
||||
r->w = sp->width;
|
||||
r->h = sp->height;
|
||||
|
||||
updatearea = slist_append(updatearea, r);
|
||||
|
||||
@@ -175,12 +173,12 @@ void sp_updateme(sprite_t *sp) {
|
||||
@param h: 更新領域高さ
|
||||
*/
|
||||
void sp_updateme_part(sprite_t *sp, int x, int y, int w, int h) {
|
||||
MyRectangle *r;
|
||||
SDL_Rect *r;
|
||||
|
||||
if (sp == NULL) return;
|
||||
if (w == 0 || h == 0) return;
|
||||
|
||||
r = malloc(sizeof(MyRectangle));
|
||||
r = malloc(sizeof(SDL_Rect));
|
||||
r->x = sp->cur.x + x;
|
||||
r->y = sp->cur.y + y;
|
||||
r->w = w;
|
||||
|
||||
@@ -36,13 +36,12 @@
|
||||
#include "nact.h"
|
||||
#include "ags.h"
|
||||
#include "music.h"
|
||||
#include "sdl_core.h"
|
||||
#include "hacks.h"
|
||||
|
||||
#define SLOT 40
|
||||
|
||||
static MyRectangle maprect; /* アニメーション表示領域 */
|
||||
static MyRectangle mapback; /* 背景セーブ領域 */
|
||||
static SDL_Rect maprect; /* アニメーション表示領域 */
|
||||
static SDL_Rect mapback; /* 背景セーブ領域 */
|
||||
static int mapback_p5; /* 背景転送先 X */
|
||||
static int mapback_p6; /* 背景転送先 Y */
|
||||
|
||||
@@ -451,7 +450,7 @@ static void PlayAnimeData() {
|
||||
dib = ags_getDIB();
|
||||
|
||||
for (loop = 0; loop < p1; loop++) {
|
||||
int cnt = sdl_getTicks();
|
||||
int cnt = sys_get_ticks();
|
||||
is_backcopied = false;
|
||||
|
||||
for (i = 0; i < SLOT; i++) {
|
||||
@@ -528,9 +527,9 @@ static void PlayAnimeData() {
|
||||
if (is_backcopied && !SDL_RectEmpty(&maprect))
|
||||
ags_updateArea(maprect.x, maprect.y, maprect.w, maprect.h);
|
||||
|
||||
int now = sdl_getTicks();
|
||||
int now = sys_get_ticks();
|
||||
if (now - cnt < interval) {
|
||||
sdl_sleep(interval - (now-cnt));
|
||||
sys_sleep(interval - (now-cnt));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,7 +35,6 @@
|
||||
#include "system.h"
|
||||
#include "xsystem35.h"
|
||||
#include "modules.h"
|
||||
#include "sdl_core.h"
|
||||
#include "input.h"
|
||||
#include "menu.h"
|
||||
|
||||
@@ -54,7 +53,7 @@ static void OutputMessageBox(void) { /* 0 */
|
||||
char *title_utf8 = toUTF8(svar_get(title));
|
||||
char *msg_utf8 = toUTF8(svar_get(msg));
|
||||
|
||||
sdl_showMessageBox(MESSAGEBOX_INFO, title_utf8, msg_utf8);
|
||||
sys_show_message_box(MESSAGEBOX_INFO, title_utf8, msg_utf8);
|
||||
|
||||
free(title_utf8);
|
||||
free(msg_utf8);
|
||||
|
||||
@@ -71,6 +71,7 @@ int dt_drawtext_col(SDL_Surface *sf, int x, int y, char *buf, int r, int g, int
|
||||
if (glyph == NULL) return 0;
|
||||
|
||||
SDL_Rect rect = {x, y, glyph->w, glyph->h};
|
||||
SDL_SetSurfaceBlendMode(glyph, SDL_BLENDMODE_NONE);
|
||||
SDL_BlitSurface(glyph, NULL, sf, &rect);
|
||||
SDL_FreeSurface(glyph);
|
||||
return rect.w;
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
#ifndef __DRAWTEXT_H__
|
||||
#define __DRAWTEXT_H__
|
||||
|
||||
#include "graphics.h"
|
||||
#include "font.h"
|
||||
|
||||
struct SDL_Surface;
|
||||
|
||||
|
||||
@@ -44,8 +44,8 @@ static void gre_BlendUseAMap(surface_t *dst, int dx, int dy, surface_t *src, int
|
||||
|
||||
void gr_blend_alpha_map(surface_t *dst, int dx, int dy, surface_t *src, int sx, int sy, int sw, int sh) {
|
||||
if (src == NULL || dst == NULL) return;
|
||||
MyRectangle src_window = { 0, 0, src->width, src->height };
|
||||
MyRectangle dst_window = { 0, 0, dst->width, dst->height };
|
||||
SDL_Rect src_window = { 0, 0, src->width, src->height };
|
||||
SDL_Rect dst_window = { 0, 0, dst->width, dst->height };
|
||||
if (!ags_clipCopyRect(&src_window, &dst_window, &sx, &sy, &dx, &dy, &sw, &sh)) return;
|
||||
|
||||
if (src->alpha == NULL) {
|
||||
|
||||
@@ -22,7 +22,7 @@ typedef struct {
|
||||
|
||||
static void *mapdata[NUM_MAPS];
|
||||
static int setChipParam_index;
|
||||
static MyRectangle chip_params[NUM_LAYERS];
|
||||
static SDL_Rect chip_params[NUM_LAYERS];
|
||||
static int window_width;
|
||||
static int window_height;
|
||||
static int map_width;
|
||||
@@ -68,7 +68,7 @@ static void MakeMapSetChipParam() {
|
||||
WARNING("unexpected MakeMapSeChipParam call");
|
||||
return;
|
||||
}
|
||||
MyRectangle *r = &chip_params[setChipParam_index++];
|
||||
SDL_Rect *r = &chip_params[setChipParam_index++];
|
||||
r->x = p1;
|
||||
r->y = p2;
|
||||
r->w = p3;
|
||||
@@ -93,9 +93,9 @@ static void MakeMapDraw() {
|
||||
int c1 = a1[index];
|
||||
int c2 = a2[index];
|
||||
int c3 = a3[index];
|
||||
MyRectangle *r1 = &chip_params[0];
|
||||
MyRectangle *r2 = &chip_params[1];
|
||||
MyRectangle *r3 = &chip_params[2];
|
||||
SDL_Rect *r1 = &chip_params[0];
|
||||
SDL_Rect *r2 = &chip_params[1];
|
||||
SDL_Rect *r3 = &chip_params[2];
|
||||
surface_t *dib = ags_getDIB();
|
||||
if (c3) {
|
||||
ags_copyArea(r3->x + c3 * r3->w, r3->y, r3->w, r3->h, dstX + x * r3->w, dstY + y * r3->h);
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
#include "alk.h"
|
||||
#include "input.h"
|
||||
#include "bgm.h"
|
||||
#include "sdl_core.h"
|
||||
#include "gfx.h"
|
||||
#include "cg.h"
|
||||
#include "jpeg.h"
|
||||
|
||||
@@ -72,9 +72,9 @@ static void Run() {
|
||||
|
||||
musbgm_play(TDEMO_MUSIC_NO, 0, 100, 0);
|
||||
|
||||
uint32_t start = sdl_getTicks();
|
||||
uint32_t start = sys_get_ticks();
|
||||
while (!nact->is_quit) {
|
||||
int i = (sdl_getTicks() - start) / (1000 / FPS);
|
||||
int i = (sys_get_ticks() - start) / (1000 / FPS);
|
||||
if (i >= alk->datanum)
|
||||
break;
|
||||
|
||||
@@ -89,12 +89,12 @@ static void Run() {
|
||||
WARNING("Cannot decode CG %d", i);
|
||||
}
|
||||
|
||||
int wait_ms = (i + 1) * (1000 / FPS) - (sdl_getTicks() - start);
|
||||
int wait_ms = (i + 1) * (1000 / FPS) - (sys_get_ticks() - start);
|
||||
if (wait_ms > 0) {
|
||||
if (sys_keywait(wait_ms, KEYWAIT_CANCELABLE))
|
||||
break;
|
||||
} else {
|
||||
sdl_updateScreen();
|
||||
gfx_updateScreen();
|
||||
if (sys_getInputInfo())
|
||||
break;
|
||||
}
|
||||
|
||||
+8
-8
@@ -59,9 +59,14 @@ target_sources(xsystem35 PRIVATE
|
||||
cursor.c
|
||||
dri.c
|
||||
ecopy.c
|
||||
effect.c
|
||||
event.c
|
||||
filecheck.c
|
||||
font.c
|
||||
hacks.c
|
||||
gfx_draw.c
|
||||
gfx_image.c
|
||||
gfx_video.c
|
||||
image.c
|
||||
input.c
|
||||
jpeg.c
|
||||
@@ -82,13 +87,8 @@ target_sources(xsystem35 PRIVATE
|
||||
savedata.c
|
||||
scenario.c
|
||||
scheduler.c
|
||||
sdl_cursor.c
|
||||
sdl_draw.c
|
||||
sdl_effect.c
|
||||
sdl_event.c
|
||||
sdl_image.c
|
||||
sdl_video.c
|
||||
selection.c
|
||||
system.c
|
||||
texthook.c
|
||||
variable.c
|
||||
vsp.c
|
||||
@@ -125,7 +125,7 @@ elseif (ANDROID)
|
||||
elseif (ENABLE_GTK)
|
||||
target_sources(xsystem35 PRIVATE menu.c menu_callback.c menu_gui.c s39init.c)
|
||||
else ()
|
||||
target_sources(xsystem35 PRIVATE menu_sdl.c sdl_input.c)
|
||||
target_sources(xsystem35 PRIVATE menu_sdl.c editor.c)
|
||||
endif()
|
||||
|
||||
if (HAVE_WEBP)
|
||||
@@ -170,7 +170,7 @@ if (EMSCRIPTEN)
|
||||
-sALLOW_MEMORY_GROWTH=1
|
||||
-sNO_EXIT_RUNTIME=1
|
||||
-sEXPORTED_FUNCTIONS=_main,_malloc
|
||||
-sEXPORTED_RUNTIME_METHODS=FS,IDBFS,getValue,addRunDependency,removeRunDependency,stringToUTF8OnStack
|
||||
-sEXPORTED_RUNTIME_METHODS=FS,IDBFS,HEAPU8,HEAP16,getValue,addRunDependency,removeRunDependency,stringToUTF8OnStack
|
||||
--emit-tsd=xsystem35.d.ts
|
||||
)
|
||||
|
||||
|
||||
@@ -35,7 +35,9 @@
|
||||
#include "xsystem35.h"
|
||||
#include "scenario.h"
|
||||
#include "ags.h"
|
||||
#include "sdl_core.h"
|
||||
#include "gfx.h"
|
||||
#include "effect.h"
|
||||
#include "event.h"
|
||||
#include "alpha_plane.h"
|
||||
#include "utfsjis.h"
|
||||
#include "input.h"
|
||||
@@ -81,25 +83,25 @@ static void initPal(void) {
|
||||
for (int i = 0; i < 256; i++) {
|
||||
nact->ags.pal[i].a = 255;
|
||||
}
|
||||
sdl_setPalette(nact->ags.pal, 0, 256);
|
||||
gfx_setPalette(nact->ags.pal, 0, 256);
|
||||
palette_changed();
|
||||
}
|
||||
|
||||
bool ags_check_param(int *x, int *y, int *w, int *h) {
|
||||
if (*x >= nact->ags.world_size.width) {
|
||||
WARNING("Illegal Param x = %d (max=%d)(@%03x:%05x)", *x, nact->ags.world_size.width, sl_getPage(), sl_getIndex());
|
||||
if (*x >= nact->ags.world_width) {
|
||||
WARNING("Illegal Param x = %d (max=%d)(@%03x:%05x)", *x, nact->ags.world_width, sl_getPage(), sl_getIndex());
|
||||
return false;
|
||||
}
|
||||
if (*y >= nact->ags.world_size.height) {
|
||||
WARNING("Illegal Param y = %d (max=%d)", *y, nact->ags.world_size.height);
|
||||
if (*y >= nact->ags.world_height) {
|
||||
WARNING("Illegal Param y = %d (max=%d)", *y, nact->ags.world_height);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (*x < 0) { *w += *x; *x = 0; }
|
||||
if (*y < 0) { *h += *y; *y = 0; }
|
||||
|
||||
if ((*x + *w) > nact->ags.world_size.width) { *w = nact->ags.world_size.width - *x;}
|
||||
if ((*y + *h) > nact->ags.world_size.height) { *h = nact->ags.world_size.height - *y;}
|
||||
if ((*x + *w) > nact->ags.world_width) { *w = nact->ags.world_width - *x;}
|
||||
if ((*y + *h) > nact->ags.world_height) { *h = nact->ags.world_height - *y;}
|
||||
|
||||
if (*w <= 0) return false;
|
||||
if (*h <= 0) return false;
|
||||
@@ -108,11 +110,11 @@ bool ags_check_param(int *x, int *y, int *w, int *h) {
|
||||
}
|
||||
|
||||
bool ags_check_param_xy(int *x, int *y) {
|
||||
if (*x >= nact->ags.world_size.width) {
|
||||
if (*x >= nact->ags.world_width) {
|
||||
WARNING("Illegal Param x = %d", *x);
|
||||
return false;
|
||||
}
|
||||
if (*y >= nact->ags.world_size.height) {
|
||||
if (*y >= nact->ags.world_height) {
|
||||
WARNING("Illegal Param y = %d", *y);
|
||||
return false;
|
||||
}
|
||||
@@ -125,8 +127,8 @@ bool ags_check_param_xy(int *x, int *y) {
|
||||
|
||||
void ags_init(const char *render_driver, bool enable_zb) {
|
||||
nact->ags.mouse_warp_enabled = true;
|
||||
nact->ags.world_size.width = SYS35_DEFAULT_WIDTH;
|
||||
nact->ags.world_size.height = SYS35_DEFAULT_HEIGHT;
|
||||
nact->ags.world_width = SYS35_DEFAULT_WIDTH;
|
||||
nact->ags.world_height = SYS35_DEFAULT_HEIGHT;
|
||||
nact->ags.world_depth = SYS35_DEFAULT_DEPTH;
|
||||
nact->ags.view_area.x = 0;
|
||||
nact->ags.view_area.y = 0;
|
||||
@@ -139,7 +141,9 @@ void ags_init(const char *render_driver, bool enable_zb) {
|
||||
nact->ags.enable_zb = enable_zb;
|
||||
nact->ags.font_weight = enable_zb ? FONT_WEIGHT_BOLD : FONT_WEIGHT_NORMAL;
|
||||
|
||||
sdl_Initialize(render_driver);
|
||||
gfx_Initialize(render_driver);
|
||||
event_init();
|
||||
cursor_init();
|
||||
font_init();
|
||||
|
||||
initPal();
|
||||
@@ -148,7 +152,8 @@ void ags_init(const char *render_driver, bool enable_zb) {
|
||||
|
||||
void ags_remove(void) {
|
||||
ags_autorepeat(true);
|
||||
sdl_Remove();
|
||||
event_remove();
|
||||
gfx_Remove();
|
||||
}
|
||||
|
||||
void ags_reset(void) {
|
||||
@@ -159,8 +164,8 @@ void ags_reset(void) {
|
||||
}
|
||||
|
||||
void ags_setWorldSize(int width, int height, int depth) {
|
||||
nact->ags.world_size.width = width;
|
||||
nact->ags.world_size.height = height;
|
||||
nact->ags.world_width = width;
|
||||
nact->ags.world_height = height;
|
||||
nact->ags.world_depth = depth;
|
||||
|
||||
if (nact->ags.dib && nact->ags.dib->alpha) {
|
||||
@@ -168,9 +173,9 @@ void ags_setWorldSize(int width, int height, int depth) {
|
||||
nact->ags.dib->alpha = NULL;
|
||||
}
|
||||
|
||||
sdl_setWorldSize(width, height, depth);
|
||||
gfx_setWorldSize(width, height, depth);
|
||||
|
||||
nact->ags.dib = sdl_getDIB();
|
||||
nact->ags.dib = gfx_getDIB();
|
||||
|
||||
/* DIBが8以上の場合は、alpha plane を用意 */
|
||||
if (depth > 8) {
|
||||
@@ -188,29 +193,29 @@ void ags_setViewArea(int x, int y, int width, int height) {
|
||||
nact->ags.view_area.y = y;
|
||||
nact->ags.view_area.w = width;
|
||||
nact->ags.view_area.h = height;
|
||||
sdl_setWindowSize(width, height);
|
||||
gfx_setWindowSize(width, height);
|
||||
}
|
||||
|
||||
void ags_setWindowTitle(const char *title_utf8) {
|
||||
char buf[256];
|
||||
snprintf(buf, sizeof(buf), "XSystem35 Version %s: %s", VERSION, title_utf8);
|
||||
sdl_setWindowTitle(buf);
|
||||
gfx_setWindowTitle(buf);
|
||||
}
|
||||
|
||||
void ags_getDIBInfo(DispInfo *info) {
|
||||
info->width = nact->ags.world_size.width;
|
||||
info->height = nact->ags.world_size.height;
|
||||
info->width = nact->ags.world_width;
|
||||
info->height = nact->ags.world_height;
|
||||
info->depth = nact->ags.world_depth;
|
||||
}
|
||||
|
||||
void ags_getViewAreaInfo(DispInfo *info) {
|
||||
sdl_getWindowInfo(info);
|
||||
gfx_getWindowInfo(NULL, NULL, &info->depth);
|
||||
info->width = nact->ags.view_area.w;
|
||||
info->height = nact->ags.view_area.h;
|
||||
}
|
||||
|
||||
void ags_getWindowInfo(DispInfo *info) {
|
||||
sdl_getWindowInfo(info);
|
||||
gfx_getWindowInfo(&info->width, &info->height, &info->depth);
|
||||
}
|
||||
|
||||
void ags_setExposeSwitch(bool expose) {
|
||||
@@ -221,13 +226,13 @@ void ags_updateArea(int x, int y, int w, int h) {
|
||||
if (fade_outed || !need_update)
|
||||
return;
|
||||
|
||||
MyRectangle r = {x, y, w, h}, update;
|
||||
SDL_Rect r = {x, y, w, h}, update;
|
||||
if (SDL_IntersectRect(&nact->ags.view_area, &r, &update)) {
|
||||
MyPoint p = {
|
||||
SDL_Point p = {
|
||||
update.x - nact->ags.view_area.x,
|
||||
update.y - nact->ags.view_area.y
|
||||
};
|
||||
sdl_updateArea(&update, &p);
|
||||
gfx_updateArea(&update, &p);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -235,14 +240,14 @@ void ags_updateFull() {
|
||||
if (fade_outed || !need_update)
|
||||
return;
|
||||
|
||||
MyRectangle r = {
|
||||
SDL_Rect r = {
|
||||
nact->ags.view_area.x,
|
||||
nact->ags.view_area.y,
|
||||
min(nact->ags.view_area.w, nact->ags.world_size.width),
|
||||
min(nact->ags.view_area.h, nact->ags.world_size.height)
|
||||
min(nact->ags.view_area.w, nact->ags.world_width),
|
||||
min(nact->ags.view_area.h, nact->ags.world_height)
|
||||
};
|
||||
MyPoint p = {0, 0};
|
||||
sdl_updateArea(&r, &p);
|
||||
SDL_Point p = {0, 0};
|
||||
gfx_updateArea(&r, &p);
|
||||
}
|
||||
|
||||
void ags_setPalettes(SDL_Color *src, int dst, int cnt) {
|
||||
@@ -261,47 +266,47 @@ void ags_setPalette(int no, int red, int green, int blue) {
|
||||
|
||||
void ags_setPaletteToSystem(int src, int cnt) {
|
||||
if (!fade_outed)
|
||||
sdl_setPalette(nact->ags.pal, src, cnt);
|
||||
gfx_setPalette(nact->ags.pal, src, cnt);
|
||||
}
|
||||
|
||||
void ags_drawRectangle(int x, int y, int w, int h, int col) {
|
||||
if (!ags_check_param(&x, &y, &w, &h)) return;
|
||||
|
||||
sdl_drawRectangle(x, y, w, h, col);
|
||||
gfx_drawRectangle(x, y, w, h, col);
|
||||
}
|
||||
|
||||
void ags_fillRectangle(int x, int y, int w, int h, int col) {
|
||||
if (!ags_check_param(&x, &y, &w, &h)) return;
|
||||
|
||||
sdl_fillRectangle(x, y, w, h, col);
|
||||
gfx_fillRectangle(x, y, w, h, col);
|
||||
}
|
||||
|
||||
void ags_drawLine(int x0, int y0, int x1, int y1, int col) {
|
||||
if (!ags_check_param_xy(&x0, &y0)) return;
|
||||
if (!ags_check_param_xy(&x1, &y1)) return;
|
||||
|
||||
sdl_drawLine(x0, y0, x1, y1, col);
|
||||
gfx_drawLine(x0, y0, x1, y1, col);
|
||||
}
|
||||
|
||||
void ags_copyArea(int sx, int sy, int w, int h, int dx, int dy) {
|
||||
if (!ags_check_param(&sx, &sy, &w, &h)) return;
|
||||
if (!ags_check_param(&dx, &dy, &w, &h)) return;
|
||||
|
||||
sdl_copyArea(sx, sy, w, h, dx, dy);
|
||||
gfx_copyArea(sx, sy, w, h, dx, dy);
|
||||
}
|
||||
|
||||
void ags_scaledCopyArea(int sx, int sy, int sw, int sh, int dx, int dy, int dw, int dh, int mirror_sw) {
|
||||
if (!ags_check_param(&sx, &sy, &sw, &sh)) return;
|
||||
if (!ags_check_param(&dx, &dy, &dw, &dh)) return;
|
||||
|
||||
sdl_scaledCopyArea(sx, sy, sw, sh, dx, dy, dw, dh, mirror_sw);
|
||||
gfx_scaledCopyArea(sx, sy, sw, sh, dx, dy, dw, dh, mirror_sw);
|
||||
}
|
||||
|
||||
void ags_copyAreaSP(int sx, int sy, int w, int h, int dx, int dy, int col) {
|
||||
if (!ags_check_param(&sx, &sy, &w, &h)) return;
|
||||
if (!ags_check_param(&dx, &dy, &w, &h)) return;
|
||||
|
||||
sdl_copyAreaSP(sx, sy, w, h, dx, dy, col);
|
||||
gfx_copyAreaSP(sx, sy, w, h, dx, dy, col);
|
||||
}
|
||||
|
||||
void ags_wrapColor(int x, int y, int w, int h, int p1, int p2) {
|
||||
@@ -309,13 +314,18 @@ void ags_wrapColor(int x, int y, int w, int h, int p1, int p2) {
|
||||
|
||||
if (!ags_check_param(&x, &y, &w, &h)) return;
|
||||
|
||||
sdl_wrapColor(x, y, w, h, p1, p2);
|
||||
gfx_wrapColor(x, y, w, h, p1, p2);
|
||||
}
|
||||
|
||||
void ags_getPixel(int x, int y, Palette *cell) {
|
||||
void ags_getPixel(int x, int y, PixelColor *cell) {
|
||||
if (!ags_check_param_xy(&x, &y)) return;
|
||||
|
||||
sdl_getPixel(x, y, cell);
|
||||
uint32_t pixel = gfx_getPixel(x, y);
|
||||
if (main_surface->format->BitsPerPixel == 8) {
|
||||
cell->index = pixel;
|
||||
} else {
|
||||
SDL_GetRGB(pixel, main_surface->format, &cell->r, &cell->g, &cell->b);
|
||||
}
|
||||
}
|
||||
|
||||
void ags_copyPaletteShift(int sx, int sy, int w, int h, int dx, int dy, uint8_t sprite) {
|
||||
@@ -357,7 +367,7 @@ void ags_changeColorArea(int sx, int sy, int w, int h, int dst, int src, int cnt
|
||||
void* ags_saveRegion(int x, int y, int w, int h) {
|
||||
if (!ags_check_param(&x, &y, &w, &h)) return NULL;
|
||||
|
||||
return (void *)sdl_saveRegion(x, y, w, h);
|
||||
return (void *)gfx_saveRegion(x, y, w, h);
|
||||
}
|
||||
|
||||
void ags_restoreRegion(void *region, int x, int y) {
|
||||
@@ -365,7 +375,7 @@ void ags_restoreRegion(void *region, int x, int y) {
|
||||
|
||||
if (!ags_check_param_xy(&x, &y)) return;
|
||||
|
||||
sdl_restoreRegion(region, x, y);
|
||||
gfx_restoreRegion(region, x, y);
|
||||
}
|
||||
|
||||
void ags_putRegion(void *region, int x, int y) {
|
||||
@@ -373,16 +383,16 @@ void ags_putRegion(void *region, int x, int y) {
|
||||
|
||||
if (!ags_check_param_xy(&x, &y)) return;
|
||||
|
||||
sdl_putRegion(region, x, y);
|
||||
gfx_putRegion(region, x, y);
|
||||
}
|
||||
|
||||
void ags_delRegion(void *region) {
|
||||
if (region == NULL) return;
|
||||
|
||||
sdl_delRegion(region);
|
||||
gfx_delRegion(region);
|
||||
}
|
||||
|
||||
int ags_drawString(int x, int y, const char *src, int col, MyRectangle *rect_out) {
|
||||
int ags_drawString(int x, int y, const char *src, int col, SDL_Rect *rect_out) {
|
||||
if (!ags_check_param_xy(&x, &y)) {
|
||||
if (rect_out) {
|
||||
rect_out->x = x;
|
||||
@@ -393,7 +403,7 @@ int ags_drawString(int x, int y, const char *src, int col, MyRectangle *rect_out
|
||||
return 0;
|
||||
}
|
||||
|
||||
MyRectangle adj;
|
||||
SDL_Rect adj;
|
||||
char *utf8 = toUTF8(src);
|
||||
switch(nact->ags.text_decoration_type) {
|
||||
case TEXT_DECORATION_NONE:
|
||||
@@ -401,46 +411,46 @@ int ags_drawString(int x, int y, const char *src, int col, MyRectangle *rect_out
|
||||
adj.x = 0; adj.y = 0; adj.w = 0; adj.h = 0;
|
||||
break;
|
||||
case TEXT_DECORATION_DROP_SHADOW_BOTTOM:
|
||||
sdl_drawString(x, y +1, utf8, nact->ags.text_decoration_color);
|
||||
gfx_drawString(x, y +1, utf8, nact->ags.text_decoration_color);
|
||||
adj.x = 0; adj.y = 0; adj.w = 0; adj.h = 1;
|
||||
break;
|
||||
case TEXT_DECORATION_DROP_SHADOW_RIGHT:
|
||||
sdl_drawString(x +1, y, utf8, nact->ags.text_decoration_color);
|
||||
gfx_drawString(x +1, y, utf8, nact->ags.text_decoration_color);
|
||||
adj.x = 0; adj.y = 0; adj.w = 1; adj.h = 0;
|
||||
break;
|
||||
case TEXT_DECORATION_DROP_SHADOW_BOTTOM_RIGHT:
|
||||
sdl_drawString(x +1, y +1, utf8, nact->ags.text_decoration_color);
|
||||
gfx_drawString(x +1, y +1, utf8, nact->ags.text_decoration_color);
|
||||
adj.x = 0; adj.y = 0; adj.w = 1; adj.h = 1;
|
||||
break;
|
||||
case TEXT_DECORATION_OUTLINE:
|
||||
sdl_drawString(x -1, y, utf8, nact->ags.text_decoration_color);
|
||||
sdl_drawString(x +1, y, utf8, nact->ags.text_decoration_color);
|
||||
sdl_drawString(x, y -1, utf8, nact->ags.text_decoration_color);
|
||||
sdl_drawString(x, y +1, utf8, nact->ags.text_decoration_color);
|
||||
gfx_drawString(x -1, y, utf8, nact->ags.text_decoration_color);
|
||||
gfx_drawString(x +1, y, utf8, nact->ags.text_decoration_color);
|
||||
gfx_drawString(x, y -1, utf8, nact->ags.text_decoration_color);
|
||||
gfx_drawString(x, y +1, utf8, nact->ags.text_decoration_color);
|
||||
adj.x = -1; adj.y = -1; adj.w = 2; adj.h = 2;
|
||||
break;
|
||||
case TEXT_DECORATION_BOLD_HORIZONTAL:
|
||||
sdl_drawString(x +1, y, utf8, col);
|
||||
gfx_drawString(x +1, y, utf8, col);
|
||||
adj.x = 0; adj.y = 0; adj.w = 1; adj.h = 0;
|
||||
break;
|
||||
case TEXT_DECORATION_BOLD_VERTICAL:
|
||||
sdl_drawString(x, y +1, utf8, col);
|
||||
gfx_drawString(x, y +1, utf8, col);
|
||||
adj.x = 0; adj.y = 0; adj.w = 0; adj.h = 1;
|
||||
break;
|
||||
case TEXT_DECORATION_BOLD_HORIZONTAL_VERTICAL:
|
||||
sdl_drawString(x +1, y +1, utf8, col);
|
||||
gfx_drawString(x +1, y +1, utf8, col);
|
||||
adj.x = 0; adj.y = 0; adj.w = 1; adj.h = 1;
|
||||
break;
|
||||
case TEXT_DECORATION_DROP_SHADOW_OUTLINE:
|
||||
sdl_drawString(x -1, y , utf8, nact->ags.text_decoration_color);
|
||||
sdl_drawString(x +1, y , utf8, nact->ags.text_decoration_color);
|
||||
sdl_drawString(x , y -1, utf8, nact->ags.text_decoration_color);
|
||||
sdl_drawString(x , y +1, utf8, nact->ags.text_decoration_color);
|
||||
sdl_drawString(x +2, y +2, utf8, nact->ags.text_decoration_color);
|
||||
gfx_drawString(x -1, y , utf8, nact->ags.text_decoration_color);
|
||||
gfx_drawString(x +1, y , utf8, nact->ags.text_decoration_color);
|
||||
gfx_drawString(x , y -1, utf8, nact->ags.text_decoration_color);
|
||||
gfx_drawString(x , y +1, utf8, nact->ags.text_decoration_color);
|
||||
gfx_drawString(x +2, y +2, utf8, nact->ags.text_decoration_color);
|
||||
adj.x = -1; adj.y = -1; adj.w = 3; adj.h = 3;
|
||||
break;
|
||||
}
|
||||
SDL_Rect r = sdl_drawString(x, y, utf8, col);
|
||||
SDL_Rect r = gfx_drawString(x, y, utf8, col);
|
||||
if (rect_out) {
|
||||
rect_out->x = r.x + adj.x;
|
||||
rect_out->y = r.y + adj.y;
|
||||
@@ -461,13 +471,13 @@ SDL_Surface *ags_drawStringToSurface(const char *str, int r, int g, int b) {
|
||||
void ags_drawCg(cgdata *cg, int x, int y, int brightness, int sprite_color, bool alpha_blend) {
|
||||
switch (cg->depth) {
|
||||
case 8:
|
||||
sdl_drawImage8(cg, x, y, sprite_color);
|
||||
gfx_drawImage8(cg, x, y, sprite_color);
|
||||
break;
|
||||
case 16:
|
||||
sdl_drawImage16(cg, nact->ags.dib, x, y, brightness, alpha_blend);
|
||||
gfx_drawImage16(cg, nact->ags.dib, x, y, brightness, alpha_blend);
|
||||
break;
|
||||
case 24:
|
||||
sdl_drawImage24(cg, nact->ags.dib, x, y, brightness);
|
||||
gfx_drawImage24(cg, nact->ags.dib, x, y, brightness);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -478,7 +488,7 @@ void ags_copyArea_shadow(int sx, int sy, int w, int h, int dx, int dy) {
|
||||
if (!ags_check_param(&sx, &sy, &w, &h)) return;
|
||||
if (!ags_check_param(&dx, &dy, &w, &h)) return;
|
||||
|
||||
sdl_copyAreaSP16_shadow(sx, sy, w, h, dx, dy, 255);
|
||||
gfx_copyAreaSP16_shadow(sx, sy, w, h, dx, dy, 255);
|
||||
}
|
||||
|
||||
void ags_copyArea_transparent(int sx, int sy, int w, int h, int dx, int dy, int col) {
|
||||
@@ -487,7 +497,7 @@ void ags_copyArea_transparent(int sx, int sy, int w, int h, int dx, int dy, int
|
||||
if (!ags_check_param(&sx, &sy, &w, &h)) return;
|
||||
if (!ags_check_param(&dx, &dy, &w, &h)) return;
|
||||
|
||||
sdl_copyAreaSP(sx, sy, w, h, dx, dy, col);
|
||||
gfx_copyAreaSP(sx, sy, w, h, dx, dy, col);
|
||||
}
|
||||
|
||||
void ags_copyArea_alphaLevel(int sx, int sy, int w, int h, int dx, int dy, int lv) {
|
||||
@@ -496,7 +506,7 @@ void ags_copyArea_alphaLevel(int sx, int sy, int w, int h, int dx, int dy, int l
|
||||
if (!ags_check_param(&sx, &sy, &w, &h)) return;
|
||||
if (!ags_check_param(&dx, &dy, &w, &h)) return;
|
||||
|
||||
sdl_copyAreaSP16_alphaLevel(sx, sy, w, h, dx, dy, lv);
|
||||
gfx_copyAreaSP16_alphaLevel(sx, sy, w, h, dx, dy, lv);
|
||||
}
|
||||
|
||||
void ags_copyArea_alphaBlend(int sx, int sy, int w, int h, int dx, int dy, int lv) {
|
||||
@@ -505,14 +515,14 @@ void ags_copyArea_alphaBlend(int sx, int sy, int w, int h, int dx, int dy, int l
|
||||
if (!ags_check_param(&sx, &sy, &w, &h)) return;
|
||||
if (!ags_check_param(&dx, &dy, &w, &h)) return;
|
||||
|
||||
sdl_copyAreaSP16_alphaBlend(sx, sy, w, h, dx, dy, lv);
|
||||
gfx_copyAreaSP16_alphaBlend(sx, sy, w, h, dx, dy, lv);
|
||||
}
|
||||
|
||||
MyRectangle ags_floodFill(int x, int y, int col) {
|
||||
SDL_Rect ags_floodFill(int x, int y, int col) {
|
||||
if (!ags_check_param_xy(&x, &y))
|
||||
return (MyRectangle){};
|
||||
return (SDL_Rect){};
|
||||
|
||||
return sdl_floodFill(x, y, col);
|
||||
return gfx_floodFill(x, y, col);
|
||||
}
|
||||
|
||||
void ags_copyFromAlpha(int sx, int sy, int w, int h, int dx, int dy, ALPHA_DIB_COPY_TYPE flg) {
|
||||
@@ -521,7 +531,7 @@ void ags_copyFromAlpha(int sx, int sy, int w, int h, int dx, int dy, ALPHA_DIB_C
|
||||
if (!ags_check_param(&sx, &sy, &w, &h)) return;
|
||||
if (!ags_check_param(&dx, &dy, &w, &h)) return;
|
||||
|
||||
sdl_copy_from_alpha(sx, sy, w, h, dx, dy, flg);
|
||||
gfx_copy_from_alpha(sx, sy, w, h, dx, dy, flg);
|
||||
}
|
||||
|
||||
void ags_copyToAlpha(int sx, int sy, int w, int h, int dx, int dy, ALPHA_DIB_COPY_TYPE flg) {
|
||||
@@ -530,7 +540,7 @@ void ags_copyToAlpha(int sx, int sy, int w, int h, int dx, int dy, ALPHA_DIB_COP
|
||||
if (!ags_check_param(&sx, &sy, &w, &h)) return;
|
||||
if (!ags_check_param(&dx, &dy, &w, &h)) return;
|
||||
|
||||
sdl_copy_to_alpha(sx, sy, w, h, dx, dy, flg);
|
||||
gfx_copy_to_alpha(sx, sy, w, h, dx, dy, flg);
|
||||
}
|
||||
|
||||
void ags_alpha_uppercut(int sx, int sy, int w, int h, int s, int d) {
|
||||
@@ -592,10 +602,10 @@ void ags_alpha_setPixel(int x, int y, int w, int h, uint8_t *b) {
|
||||
|
||||
void ags_runEffect(int duration_ms, bool cancelable, ags_EffectStepFunc step, void *arg) {
|
||||
unsigned wflags = cancelable ? KEYWAIT_CANCELABLE : KEYWAIT_NONCANCELABLE;
|
||||
int start = sdl_getTicks();
|
||||
for (int t = 0; t < duration_ms; t = sdl_getTicks() - start) {
|
||||
int start = sys_get_ticks();
|
||||
for (int t = 0; t < duration_ms; t = sys_get_ticks() - start) {
|
||||
step(arg, (float)t / duration_ms);
|
||||
int key = sys_keywait(start + t + 16 - sdl_getTicks(), wflags);
|
||||
int key = sys_keywait(start + t + 16 - sys_get_ticks(), wflags);
|
||||
if (cancelable && key) {
|
||||
nact->waitcancel_key = key;
|
||||
break;
|
||||
@@ -604,22 +614,22 @@ void ags_runEffect(int duration_ms, bool cancelable, ags_EffectStepFunc step, vo
|
||||
step(arg, 1.0);
|
||||
}
|
||||
|
||||
static void fade(int duration, bool cancelable, enum sdl_effect_type type) {
|
||||
static void fade(int duration, bool cancelable, enum effect_type type) {
|
||||
nact->waitcancel_key = 0;
|
||||
|
||||
SDL_Rect rect = {0, 0, nact->ags.view_area.w, nact->ags.view_area.h};
|
||||
struct sdl_effect *eff = sdl_effect_init(
|
||||
struct effect *eff = effect_init(
|
||||
&rect, NULL, 0, 0,
|
||||
sdl_getDIB(), nact->ags.view_area.x, nact->ags.view_area.y,
|
||||
gfx_getDIB(), nact->ags.view_area.x, nact->ags.view_area.y,
|
||||
type);
|
||||
ags_runEffect(duration, cancelable, (ags_EffectStepFunc)sdl_effect_step, eff);
|
||||
sdl_effect_finish(eff);
|
||||
ags_runEffect(duration, cancelable, (ags_EffectStepFunc)effect_step, eff);
|
||||
effect_finish(eff);
|
||||
}
|
||||
|
||||
void ags_fadeIn(int rate, bool flag) {
|
||||
fade_outed = false;
|
||||
if (nact->ags.world_depth == 8)
|
||||
sdl_setPalette(nact->ags.pal, 0, 256);
|
||||
gfx_setPalette(nact->ags.pal, 0, 256);
|
||||
|
||||
if (!need_update)
|
||||
return;
|
||||
@@ -627,7 +637,7 @@ void ags_fadeIn(int rate, bool flag) {
|
||||
int duration = rate * 16 * 1000 / 60;
|
||||
fade(duration, flag, nact->ags.world_depth == 8 ? EFFECT_FADEIN : EFFECT_DITHERING_FADEIN);
|
||||
|
||||
sdl_updateAll(&nact->ags.view_area);
|
||||
gfx_updateAll(&nact->ags.view_area);
|
||||
}
|
||||
|
||||
void ags_fadeOut(int rate, bool flag) {
|
||||
@@ -642,14 +652,14 @@ void ags_fadeOut(int rate, bool flag) {
|
||||
for (int i = 0; i < 256; i++) {
|
||||
pal[i] = (SDL_Color){0, 0, 0, 255};
|
||||
}
|
||||
sdl_setPalette(pal, 0, 256);
|
||||
gfx_setPalette(pal, 0, 256);
|
||||
}
|
||||
}
|
||||
|
||||
void ags_whiteIn(int rate, bool flag) {
|
||||
fade_outed = false;
|
||||
if (nact->ags.world_depth == 8)
|
||||
sdl_setPalette(nact->ags.pal, 0, 256);
|
||||
gfx_setPalette(nact->ags.pal, 0, 256);
|
||||
|
||||
if (!need_update)
|
||||
return;
|
||||
@@ -657,7 +667,7 @@ void ags_whiteIn(int rate, bool flag) {
|
||||
int duration = rate * 16 * 1000 / 60;
|
||||
fade(duration, flag, nact->ags.world_depth == 8 ? EFFECT_WHITEIN : EFFECT_DITHERING_WHITEIN);
|
||||
|
||||
sdl_updateAll(&nact->ags.view_area);
|
||||
gfx_updateAll(&nact->ags.view_area);
|
||||
}
|
||||
|
||||
void ags_whiteOut(int rate, bool flag) {
|
||||
@@ -670,7 +680,7 @@ void ags_whiteOut(int rate, bool flag) {
|
||||
if (nact->ags.world_depth == 8) {
|
||||
SDL_Color pal[256];
|
||||
memset(&pal, 255, sizeof(pal));
|
||||
sdl_setPalette(pal, 0, 256);
|
||||
gfx_setPalette(pal, 0, 256);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -692,7 +702,7 @@ void ags_setTextDecorationColor(int col) {
|
||||
|
||||
void ags_setCursorType(int type) {
|
||||
if (nact->ags.noimagecursor && type >= 100) return;
|
||||
sdl_setCursorType(type);
|
||||
cursor_set_type(type);
|
||||
}
|
||||
|
||||
void ags_loadCursor(int p1,int p2) {
|
||||
@@ -715,26 +725,26 @@ void ags_setCursorLocation(int x, int y, bool is_dibgeo, bool for_selection) {
|
||||
// We can't move the actual cursor in the browser, but can change the
|
||||
// internal mouse coordinates. This can help with keyboard/gamepad
|
||||
// navigation.
|
||||
sdl_setCursorInternalLocation(x, y);
|
||||
event_set_mouse_internal_location(x, y);
|
||||
EM_ASM({ xsystem35.shell.showMouseMoveEffect($0, $1); }, x, y);
|
||||
sdl_sleep(cursor_move_time);
|
||||
sys_sleep(cursor_move_time);
|
||||
}
|
||||
#else
|
||||
if (nact->ags.mouse_warp_enabled) {
|
||||
MyPoint p;
|
||||
SDL_Point p;
|
||||
sys_getMouseInfo(&p, is_dibgeo);
|
||||
int dx = x - p.x;
|
||||
int dy = y - p.y;
|
||||
for (int i = 1; i < 8; i++) {
|
||||
int xi = ((dx*i*i*i) >> 9) - ((3*dx*i*i)>> 6) + ((3*dx*i) >> 3) + p.x;
|
||||
int yi = ((dy*i*i*i) >> 9) - ((3*dy*i*i)>> 6) + ((3*dy*i) >> 3) + p.y;
|
||||
sdl_setCursorLocation(xi, yi);
|
||||
sdl_sleep(cursor_move_time / 7);
|
||||
event_set_mouse_location(xi, yi);
|
||||
sys_sleep(cursor_move_time / 7);
|
||||
}
|
||||
sdl_setCursorLocation(x, y);
|
||||
event_set_mouse_location(x, y);
|
||||
} else if (!for_selection) {
|
||||
sdl_setCursorInternalLocation(x, y);
|
||||
sdl_sleep(cursor_move_time);
|
||||
event_set_mouse_internal_location(x, y);
|
||||
sys_sleep(cursor_move_time);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@@ -758,7 +768,7 @@ void ags_copyArea_shadow_withrate(int sx, int sy, int w, int h, int dx, int dy,
|
||||
if (!ags_check_param(&sx, &sy, &w, &h)) return;
|
||||
if (!ags_check_param(&dx, &dy, &w, &h)) return;
|
||||
|
||||
sdl_copyAreaSP16_shadow(sx, sy, w, h, dx, dy, lv);
|
||||
gfx_copyAreaSP16_shadow(sx, sy, w, h, dx, dy, lv);
|
||||
}
|
||||
|
||||
void ags_setCursorMoveTime(int msec) {
|
||||
@@ -774,10 +784,14 @@ surface_t *ags_getDIB() {
|
||||
}
|
||||
|
||||
void ags_autorepeat(bool enable) {
|
||||
sdl_setAutoRepeat(enable);
|
||||
if (enable) {
|
||||
// SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
|
||||
} else {
|
||||
// SDL_EnableKeyRepeat(0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
bool ags_clipCopyRect(const MyRectangle *sw, const MyRectangle *dw, int *sx, int *sy, int *dx, int *dy, int *w, int *h) {
|
||||
bool ags_clipCopyRect(const SDL_Rect *sw, const SDL_Rect *dw, int *sx, int *sy, int *dx, int *dy, int *w, int *h) {
|
||||
// Clip source rectangle to source window
|
||||
SDL_Rect sr = {*sx, *sy, *w, *h};
|
||||
if (!SDL_IntersectRect(&sr, sw, &sr))
|
||||
|
||||
@@ -29,22 +29,7 @@
|
||||
#include <SDL_surface.h>
|
||||
#include "portab.h"
|
||||
#include "cg.h"
|
||||
#include "graphics.h"
|
||||
|
||||
/* マウスカーソルの種類 */
|
||||
#define CURSOR_ARROW 1
|
||||
#define CURSOR_CROSS 2
|
||||
#define CURSOR_IBEAM 3
|
||||
#define CURSOR_ICON 4
|
||||
#define CURSOR_NO 5
|
||||
#define CURSOR_SIZE 6
|
||||
#define CURSOR_SIZEALL 7
|
||||
#define CURSOR_SIZENESW 8
|
||||
#define CURSOR_SIZENS 9
|
||||
#define CURSOR_SIZENWSE 10
|
||||
#define CURSOR_SIZEWE 11
|
||||
#define CURSOR_UPARROW 12
|
||||
#define CURSOR_WAIT 13
|
||||
#include "font.h"
|
||||
|
||||
/* RGB <-> alpha plane copy type */
|
||||
typedef enum {
|
||||
@@ -111,13 +96,26 @@ typedef enum {
|
||||
TEXT_DECORATION_DROP_SHADOW_OUTLINE = 10,
|
||||
} TextDecorationType;
|
||||
|
||||
|
||||
typedef struct {
|
||||
uint8_t r, g, b;
|
||||
uint32_t index;
|
||||
} PixelColor;
|
||||
|
||||
typedef struct {
|
||||
int width;
|
||||
int height;
|
||||
int depth;
|
||||
} DispInfo;
|
||||
|
||||
struct _ags {
|
||||
SDL_Color pal[256]; /* system palette */
|
||||
bool pal_changed; /* system palette has changed */
|
||||
|
||||
MyDimension world_size; /* size of off-screen */
|
||||
|
||||
MyRectangle view_area; /* view region in off-screen */
|
||||
int world_width;
|
||||
int world_height;
|
||||
|
||||
SDL_Rect view_area; /* view region in off-screen */
|
||||
|
||||
int world_depth; /* depth of off-screen (bits per pixel) */
|
||||
|
||||
@@ -174,7 +172,7 @@ extern void ags_copyAreaSP(int sx, int sy, int w, int h, int dx, int dy, int col
|
||||
extern void ags_copyArea_shadow_withrate(int sx, int sy, int w, int h, int dx, int dy, int lv);
|
||||
|
||||
extern void ags_wrapColor(int x, int y, int w, int h, int p1, int p2);
|
||||
extern void ags_getPixel(int x, int y, Palette *cell);
|
||||
extern void ags_getPixel(int x, int y, PixelColor *cell);
|
||||
extern void ags_copyPaletteShift(int sx, int sy, int w, int h, int dx, int dy, uint8_t sprite);
|
||||
extern void ags_changeColorArea(int x, int y, int w, int h, int dst, int src, int cnt);
|
||||
|
||||
@@ -183,14 +181,14 @@ extern void ags_restoreRegion(void *region, int x, int y);
|
||||
extern void ags_putRegion(void *region, int x, int y);
|
||||
extern void ags_delRegion(void *region);
|
||||
|
||||
extern int ags_drawString(int x, int y, const char *src, int col, MyRectangle *rect_out);
|
||||
extern int ags_drawString(int x, int y, const char *src, int col, SDL_Rect *rect_out);
|
||||
extern void ags_drawCg(cgdata *cg, int x, int y, int brightness, int sprite_color, bool alpha_blend);
|
||||
|
||||
extern void ags_copyArea_shadow(int sx, int sy, int w, int h, int dx, int dy);
|
||||
extern void ags_copyArea_transparent(int sx, int sy, int w, int h, int dx, int dy, int col);
|
||||
extern void ags_copyArea_alphaLevel(int sx, int sy, int w, int h, int dx, int dy, int lv);
|
||||
extern void ags_copyArea_alphaBlend(int sx, int sy, int w, int h, int dx, int dy, int lv);
|
||||
extern MyRectangle ags_floodFill(int x, int y, int col);
|
||||
extern SDL_Rect ags_floodFill(int x, int y, int col);
|
||||
extern void ags_eCopyArea(int sx, int sy, int w, int h, int dx, int dy, int sw, int opt, bool cancel);
|
||||
extern void ags_eSpriteCopyArea(int sx, int sy, int w, int h, int dx, int dy, int sw, int opt, bool cancel, int spCol);
|
||||
|
||||
@@ -228,7 +226,7 @@ extern int ags_getCursorMoveTime();
|
||||
extern void ags_setAntialiasedStringMode(bool mode);
|
||||
extern bool ags_getAntialiasedStringMode();
|
||||
extern void ags_autorepeat(bool enable);
|
||||
extern bool ags_clipCopyRect(const MyRectangle *sr, const MyRectangle *dr, int *sx, int *sy, int *dx, int *dy, int *w, int *h);
|
||||
extern bool ags_clipCopyRect(const SDL_Rect *sr, const SDL_Rect *dr, int *sx, int *sy, int *dx, int *dy, int *w, int *h);
|
||||
|
||||
typedef void (*ags_EffectStepFunc)(void *, float);
|
||||
void ags_runEffect(int duration_ms, bool cancelable, ags_EffectStepFunc step, void *arg);
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
#include "nact.h"
|
||||
#include "bgm.h"
|
||||
#include "bgi.h"
|
||||
#include "sdl_core.h"
|
||||
#include "system.h"
|
||||
|
||||
bool musbgm_init(DRIFILETYPE type, int base_no) {
|
||||
if (type == DRIFILE_BGM)
|
||||
@@ -84,6 +84,6 @@ void musbgm_wait(int no, int timeout) {
|
||||
for (int i = 0; i * 16 < timeout * 10; i++) {
|
||||
if (!musbgm_isplaying(no))
|
||||
break;
|
||||
sdl_wait_vsync();
|
||||
sys_wait_vsync();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
#include <stdlib.h>
|
||||
#include "portab.h"
|
||||
#include "LittleEndian.h"
|
||||
#include "graphics.h"
|
||||
#include "cg.h"
|
||||
#include "bmp.h"
|
||||
|
||||
|
||||
+16
@@ -130,3 +130,19 @@ void *cache_foreach(cacher *id, int key) {
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void cache_clear(cacher *id) {
|
||||
cacheinfo *ic = id->top->next;
|
||||
cacheinfo *next;
|
||||
|
||||
while (ic != NULL) {
|
||||
next = ic->next;
|
||||
if (ic->data) {
|
||||
totalsize -= ic->size;
|
||||
id->free_(ic->data);
|
||||
}
|
||||
free(ic);
|
||||
ic = next;
|
||||
}
|
||||
id->top->next = NULL;
|
||||
}
|
||||
|
||||
@@ -46,5 +46,6 @@ typedef struct _cacher cacher;
|
||||
extern cacher *cache_new(void *delcallback);
|
||||
extern void cache_insert(cacher *id, int key, void *data, int size, int *in_use);
|
||||
extern void *cache_foreach(cacher *id, int key);
|
||||
extern void cache_clear(cacher *id);
|
||||
|
||||
#endif /* !__CASHE__ */
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "portab.h"
|
||||
#include "cdrom.h"
|
||||
#include "scheduler.h"
|
||||
#include "system.h"
|
||||
|
||||
static bool cdrom_init(char *playlist) {
|
||||
return true;
|
||||
|
||||
@@ -21,12 +21,16 @@
|
||||
*/
|
||||
/* $Id: cg.c,v 1.12 2001/09/16 15:59:11 chikama Exp $ */
|
||||
|
||||
#include <ctype.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <SDL.h>
|
||||
#ifdef __EMSCRIPTEN__
|
||||
#include <emscripten.h>
|
||||
#endif
|
||||
#include "portab.h"
|
||||
#include "system.h"
|
||||
#include "graphics.h"
|
||||
#include "nact.h"
|
||||
#include "ags.h"
|
||||
#include "cg.h"
|
||||
@@ -42,6 +46,9 @@
|
||||
#include "filecheck.h"
|
||||
#include "cache.h"
|
||||
|
||||
static int *censor_list; // sorted list of cg numbers
|
||||
static int censor_list_size;
|
||||
|
||||
/* VSPのパレット展開バンク */
|
||||
int cg_vspPB;
|
||||
/* cg,palette 展開フラグ (funciotn flag) */
|
||||
@@ -51,13 +58,15 @@ int *cg_loadCountVar;
|
||||
/* Brightness (PD command) */
|
||||
int cg_brightness;
|
||||
|
||||
#define MOSAIC_SIZE 16
|
||||
|
||||
#define GCMD_EXTRACTCG(c) ((c) & 0x01)
|
||||
#define GCMD_SET_PALETTE(c) ((c) & 0x02)
|
||||
#define GCMD_LOAD_PALETTE(c) ((c) & 0x04)
|
||||
|
||||
/* CG表示位置に関する情報 */
|
||||
static CG_WHERETODISP loc_policy, loc_policy0;
|
||||
static MyPoint loc_where, loc_where0;
|
||||
static SDL_Point loc_where, loc_where0;
|
||||
|
||||
/* extracted cg data cache control object */
|
||||
static cacher *cacheid;
|
||||
@@ -65,11 +74,51 @@ static cacher *cacheid;
|
||||
/* static methods */
|
||||
static CG_TYPE check_cgformat(uint8_t *data);
|
||||
static void set_vspbank(uint8_t *pic, int bank, int width, int height);
|
||||
static MyPoint set_display_loc(cgdata *cg);
|
||||
static SDL_Point set_display_loc(cgdata *cg);
|
||||
static void clear_display_loc();
|
||||
static void display_cg(cgdata *cg, int x, int y, int sprite_color, bool alpha_blend);
|
||||
static cgdata *loader(int no);
|
||||
|
||||
static int compare_integers(const void *a, const void *b) {
|
||||
int int_a = *(const int *)a;
|
||||
int int_b = *(const int *)b;
|
||||
return (int_a > int_b) - (int_a < int_b);
|
||||
}
|
||||
|
||||
static bool is_censored_cg(int no) {
|
||||
no += 1; // CG numbers are 1-based.
|
||||
if (!censor_list)
|
||||
return false;
|
||||
return bsearch(&no, censor_list, censor_list_size, sizeof(int), compare_integers) != NULL;
|
||||
}
|
||||
|
||||
static void cg_mosaic(cgdata *cg) {
|
||||
Uint32 format;
|
||||
switch (cg->depth) {
|
||||
case 8:
|
||||
format = SDL_PIXELFORMAT_INDEX8;
|
||||
break;
|
||||
case 16:
|
||||
format = SDL_PIXELFORMAT_RGB565;
|
||||
break;
|
||||
case 24:
|
||||
format = SDL_PIXELFORMAT_RGB24;
|
||||
break;
|
||||
default:
|
||||
SYSERROR("Unsupported cg depth %d", cg->depth);
|
||||
}
|
||||
SDL_Surface *sf = SDL_CreateRGBSurfaceWithFormatFrom(
|
||||
cg->pic, cg->width, cg->height, cg->depth, cg->width * (cg->depth / 8), format);
|
||||
SDL_Surface *tmp = SDL_CreateRGBSurfaceWithFormat(
|
||||
0, (cg->width + MOSAIC_SIZE - 1) / MOSAIC_SIZE, (cg->height + MOSAIC_SIZE - 1) / MOSAIC_SIZE, cg->depth, format);
|
||||
if (sf->format->palette)
|
||||
SDL_SetSurfacePalette(tmp, sf->format->palette);
|
||||
// NOTE: SDL_BlitScaled() does not support 8-bit surfaces.
|
||||
SDL_SoftStretch(sf, NULL, tmp, NULL);
|
||||
SDL_SoftStretch(tmp, NULL, sf, NULL);
|
||||
SDL_FreeSurface(tmp);
|
||||
SDL_FreeSurface(sf);
|
||||
}
|
||||
|
||||
/*
|
||||
* Identify cg format
|
||||
@@ -131,8 +180,8 @@ void cgdata_free(cgdata *cg) {
|
||||
* cg: cg information
|
||||
* return: x and y for display location
|
||||
*/
|
||||
static MyPoint set_display_loc(cgdata *cg) {
|
||||
MyPoint p;
|
||||
static SDL_Point set_display_loc(cgdata *cg) {
|
||||
SDL_Point p;
|
||||
|
||||
switch(loc_policy) {
|
||||
case OFFSET_ABSOLUTE_GC:
|
||||
@@ -231,8 +280,12 @@ static cgdata *loader(int no) {
|
||||
default:
|
||||
break;
|
||||
}
|
||||
/* insert to cache */
|
||||
|
||||
if (cg) {
|
||||
if (is_censored_cg(no)) {
|
||||
cg_mosaic(cg);
|
||||
}
|
||||
/* insert to cache */
|
||||
int size = cg->width * cg->height * (cg->depth / 8);
|
||||
cache_insert(cacheid, no, cg, size, NULL);
|
||||
}
|
||||
@@ -288,7 +341,7 @@ void cg_set_display_location(int x, int y, CG_WHERETODISP policy) {
|
||||
*/
|
||||
void cg_load(int no, int flg) {
|
||||
cgdata *cg;
|
||||
MyPoint p;
|
||||
SDL_Point p;
|
||||
int i, bank = cg_vspPB;
|
||||
|
||||
/* load and extract cg */
|
||||
@@ -361,7 +414,7 @@ void cg_load(int no, int flg) {
|
||||
*/
|
||||
void cg_load_with_alpha(int cgno, int shadowno) {
|
||||
cgdata *cg = NULL, *scg;
|
||||
MyPoint p;
|
||||
SDL_Point p;
|
||||
|
||||
/* load pixel */
|
||||
if (cgno >= 0) {
|
||||
@@ -441,7 +494,7 @@ int cg_load_with_filename(char *fname_utf8, int x, int y) {
|
||||
long filesize;
|
||||
uint8_t *data;
|
||||
cgdata *cg = NULL;
|
||||
MyPoint p;
|
||||
SDL_Point p;
|
||||
|
||||
data = load_cg_from_file(fname_utf8, &status, &filesize);
|
||||
if (data == NULL) return status;
|
||||
@@ -490,9 +543,9 @@ int cg_load_with_filename(char *fname_utf8, int x, int y) {
|
||||
* no : file no for cg ( >= 0 )
|
||||
* info: information to be retored
|
||||
*/
|
||||
void cg_get_info(int no, MyRectangle *info) {
|
||||
void cg_get_info(int no, SDL_Rect *info) {
|
||||
cgdata *cg = loader(no);
|
||||
MyPoint p;
|
||||
SDL_Point p;
|
||||
|
||||
if (cg == NULL) {
|
||||
info->x = info->y = info->w = info->h = 0;
|
||||
@@ -537,6 +590,10 @@ SDL_Surface *cg_load_as_sdlsurface(int no) {
|
||||
ald_freedata(dfile);
|
||||
if (!cg) return NULL;
|
||||
|
||||
if (is_censored_cg(no)) {
|
||||
cg_mosaic(cg);
|
||||
}
|
||||
|
||||
SDL_Surface *pic = type == ALCG_PMS16
|
||||
? SDL_CreateRGBSurfaceWithFormatFrom(cg->pic, cg->width, cg->height, 16, cg->width * 2, SDL_PIXELFORMAT_RGB565)
|
||||
: SDL_CreateRGBSurfaceWithFormatFrom(cg->pic, cg->width, cg->height, 24, cg->width * 3, SDL_PIXELFORMAT_RGB24);
|
||||
@@ -563,3 +620,60 @@ SDL_Surface *cg_load_as_sdlsurface(int no) {
|
||||
cgdata_free(cg);
|
||||
return sf;
|
||||
}
|
||||
|
||||
EMSCRIPTEN_KEEPALIVE
|
||||
void load_censor_list(const char *path) {
|
||||
if (cacheid)
|
||||
cache_clear(cacheid);
|
||||
if (censor_list) {
|
||||
free(censor_list);
|
||||
censor_list = NULL;
|
||||
censor_list_size = 0;
|
||||
}
|
||||
if (!path || !*path)
|
||||
return;
|
||||
|
||||
FILE *fp = fopen(path, "r");
|
||||
if (!fp) {
|
||||
SYSERROR("failed to open censor list file %s", path);
|
||||
return;
|
||||
}
|
||||
|
||||
char line[256];
|
||||
int count = 0, cap = 256;
|
||||
censor_list = malloc(cap * sizeof(int));
|
||||
int line_no = 0;
|
||||
while (fgets(line, sizeof(line), fp)) {
|
||||
line_no++;
|
||||
char *p = line;
|
||||
char *comment = strchr(p, '#');
|
||||
if (comment)
|
||||
*comment = '\0';
|
||||
while (*p && isspace((unsigned char)*p))
|
||||
p++;
|
||||
if (*p == '\0')
|
||||
continue;
|
||||
|
||||
if (count >= cap) {
|
||||
cap *= 2;
|
||||
censor_list = realloc(censor_list, cap * sizeof(int));
|
||||
}
|
||||
char *endptr;
|
||||
censor_list[count++] = (int)strtol(p, &endptr, 10);
|
||||
|
||||
while (*endptr && isspace((unsigned char)*endptr))
|
||||
endptr++;
|
||||
if (*endptr != '\0')
|
||||
WARNING("invalid line %d in %s", line_no, path);
|
||||
}
|
||||
censor_list_size = count;
|
||||
|
||||
fclose(fp);
|
||||
|
||||
if (censor_list_size > 0) {
|
||||
qsort(censor_list, censor_list_size, sizeof(int), compare_integers);
|
||||
} else {
|
||||
free(censor_list);
|
||||
censor_list = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
#ifndef __CG__
|
||||
#define __CG__
|
||||
|
||||
#include <SDL_rect.h>
|
||||
#include "portab.h"
|
||||
#include "graphics.h"
|
||||
|
||||
struct SDL_Surface;
|
||||
|
||||
@@ -80,10 +80,11 @@ extern void cg_set_display_location(int x, int y, CG_WHERETODISP policy);
|
||||
extern void cg_load(int no, int flg);
|
||||
extern void cg_load_with_alpha(int cgno, int shadowno);
|
||||
extern int cg_load_with_filename(char *fname_utf8, int x, int y);
|
||||
extern void cg_get_info(int no, MyRectangle *info);
|
||||
extern void cg_get_info(int no, SDL_Rect *info);
|
||||
extern void cg_clear_display_loc();
|
||||
extern void cgdata_free(cgdata *cg);
|
||||
extern struct SDL_Surface *cg_load_as_sdlsurface(int no);
|
||||
extern void load_censor_list(const char *path);
|
||||
|
||||
extern int cg_vspPB;
|
||||
extern int cg_fflg;
|
||||
|
||||
+8
-293
@@ -24,7 +24,6 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include "portab.h"
|
||||
#include "xsystem35.h"
|
||||
#include "scenario.h"
|
||||
@@ -33,16 +32,15 @@
|
||||
#include "input.h"
|
||||
#include "msgskip.h"
|
||||
#include "selection.h"
|
||||
#include "message.h"
|
||||
#include "music.h"
|
||||
#include "utfsjis.h"
|
||||
#include "hankaku.h"
|
||||
#include "ags.h"
|
||||
#include "sdl_core.h"
|
||||
#include "gfx.h"
|
||||
#include "ald_manager.h"
|
||||
#include "LittleEndian.h"
|
||||
#include "hacks.h"
|
||||
#include "filecheck.h"
|
||||
#include "cmd_check.h"
|
||||
|
||||
/* 選択 Window OPEN 時 callback */
|
||||
static int cb_sel_init_page = 0;
|
||||
@@ -52,11 +50,6 @@ static const char REGREADSTRING_RESULT[] = "*regReadString*";
|
||||
|
||||
static SDL_Rect clip_window;
|
||||
|
||||
extern INPUTSTRING_PARAM mi_param;
|
||||
|
||||
extern void commandH();
|
||||
extern void commandHH();
|
||||
|
||||
typedef struct {
|
||||
int page;
|
||||
int index;
|
||||
@@ -65,72 +58,6 @@ typedef struct {
|
||||
#define FCTBL_MAX 1024
|
||||
static fncall_table fnctbl[FCTBL_MAX];
|
||||
|
||||
void commands2F00() {
|
||||
/* テキストカラーをスタックからポップして設定する */
|
||||
sl_popState(STACK_TEXTCOLOR);
|
||||
TRACE("TOC:");
|
||||
}
|
||||
|
||||
void commands2F01() {
|
||||
/* テキストフォントサイズをスタックからポップして設定する */
|
||||
sl_popState(STACK_TEXTSIZE);
|
||||
TRACE("TOS:");
|
||||
}
|
||||
|
||||
void commands2F02() {
|
||||
/* 現在のテキストカラーをスタックにプッシュする */
|
||||
int type = getCaliValue();
|
||||
switch (type) {
|
||||
case 0: sl_pushTextColor(type, nact->msg.MsgFontColor); break;
|
||||
case 1: sl_pushTextColor(type, nact->sel.MsgFontColor); break;
|
||||
default: WARNING("TPC: unknown type %d", type); break;
|
||||
}
|
||||
TRACE("TPC %d", exp);
|
||||
}
|
||||
|
||||
void commands2F03() {
|
||||
/* 現在のテキストフォントサイズをスタックにプッシュする */
|
||||
int type = getCaliValue();
|
||||
switch (type) {
|
||||
case 0: sl_pushTextSize(type, nact->msg.MsgFontSize); break;
|
||||
case 1: sl_pushTextSize(type, nact->sel.MsgFontSize); break;
|
||||
default: WARNING("TPS: unknown type %d", type); break;
|
||||
}
|
||||
TRACE("TPS %d", exp);
|
||||
}
|
||||
|
||||
void commands2F04() {
|
||||
/* テキスト表示位置をスタックからポップして設定する */
|
||||
sl_popState(STACK_TEXTLOC);
|
||||
TRACE("TOP:");
|
||||
}
|
||||
|
||||
void commands2F05() {
|
||||
/* 現在のテキスト表示位置をスタックにプッシュする */
|
||||
MyPoint loc;
|
||||
msg_getMessageLocation(&loc);
|
||||
sl_pushTextLoc(loc.x, loc.y);
|
||||
TRACE("TPP:");
|
||||
}
|
||||
|
||||
void commands2F08() {
|
||||
/* アンチエイリアシング付きテキスト描画のフラグ設定 */
|
||||
int exp = getCaliValue();
|
||||
|
||||
ags_setAntialiasedStringMode(exp == 1);
|
||||
|
||||
TRACE("TAA %d:", exp);
|
||||
}
|
||||
|
||||
void commands2F09() {
|
||||
/* アンチエイリアシング付きテキスト描画のフラグ取得 */
|
||||
int *var = getCaliVariable();
|
||||
|
||||
*var = ags_getAntialiasedStringMode() ? 1 : 0;
|
||||
|
||||
TRACE("TAB %d:", *var);
|
||||
}
|
||||
|
||||
void commands2F0A() {
|
||||
/* Wavデータを読み込む */
|
||||
int eCh = getCaliValue();
|
||||
@@ -331,162 +258,6 @@ void commands2F21() {
|
||||
sys_addMsg(str);
|
||||
}
|
||||
|
||||
void commands2F23() {
|
||||
int x = getCaliValue();
|
||||
int y = getCaliValue();
|
||||
const char *vFileName = sl_getString(0);
|
||||
|
||||
char *fname_utf8 = toUTF8(vFileName);
|
||||
sysVar[0] = cg_load_with_filename(fname_utf8, x, y);
|
||||
free(fname_utf8);
|
||||
|
||||
TRACE("LC(new) %d, %d, %s:", x, y, vFileName);
|
||||
}
|
||||
|
||||
void commands2F24() {
|
||||
int type = sl_getc();
|
||||
const char *file_name = sl_getString(0);
|
||||
int var, cnt;
|
||||
struct VarRef vref;
|
||||
|
||||
char *fname_utf8 = toUTF8(file_name);
|
||||
switch (type) {
|
||||
case 0:
|
||||
getCaliArray(&vref);
|
||||
var = vref.var;
|
||||
cnt = getCaliValue();
|
||||
sysVar[0] = load_vars_from_file(fname_utf8, &vref, cnt);
|
||||
break;
|
||||
case 1:
|
||||
var = getCaliValue();
|
||||
cnt = getCaliValue();
|
||||
sysVar[0] = load_strs_from_file(fname_utf8, var, cnt);
|
||||
break;
|
||||
default:
|
||||
var = getCaliValue();
|
||||
cnt = getCaliValue();
|
||||
WARNING("Unknown LE command type %d", type);
|
||||
break;
|
||||
}
|
||||
free(fname_utf8);
|
||||
|
||||
TRACE("LE(new) %d, %s, %d, %d:", type, file_name, var, cnt);
|
||||
}
|
||||
|
||||
void commands2F25() {
|
||||
int file_name = getCaliValue();
|
||||
const char *title = sl_getString(0);
|
||||
const char *filter = sl_getString(0);
|
||||
|
||||
TRACE_UNIMPLEMENTED("LXG %d, %s, %s:", file_name, title, filter);
|
||||
}
|
||||
|
||||
void commands2F26() {
|
||||
int dst_no = getCaliValue();
|
||||
int max_len = getCaliValue();
|
||||
const char *title = sl_getString(0);
|
||||
char *t1, *t2, *t3;
|
||||
|
||||
t1 = toUTF8(title);
|
||||
t2 = toUTF8(svar_get(dst_no));
|
||||
|
||||
mi_param.title = t1;
|
||||
mi_param.oldstring = t2;
|
||||
mi_param.max = max_len;
|
||||
|
||||
menu_inputstring(&mi_param);
|
||||
if (mi_param.newstring == NULL) {
|
||||
svar_set(dst_no, NULL);
|
||||
free(t1); free(t2);
|
||||
return;
|
||||
}
|
||||
|
||||
t3 = fromUTF8(mi_param.newstring);
|
||||
|
||||
svar_set(dst_no, t3);
|
||||
|
||||
free(t1);
|
||||
free(t2);
|
||||
free(t3);
|
||||
|
||||
TRACE("MI(new) %d, %d, %s:", dst_no, max_len, title);
|
||||
}
|
||||
|
||||
void commands2F27() {
|
||||
int num = getCaliValue();
|
||||
const char *string = sl_getString(0);
|
||||
|
||||
svar_set(num, string);
|
||||
TRACE("MS(new) %d, %s:", num, string);
|
||||
}
|
||||
|
||||
void commands2F28() {
|
||||
const char *title = sl_getString(0);
|
||||
|
||||
if (nact->game_title_utf8)
|
||||
free(nact->game_title_utf8);
|
||||
nact->game_title_utf8 = toUTF8(title);
|
||||
|
||||
ags_setWindowTitle(nact->game_title_utf8);
|
||||
|
||||
enable_hack_by_title(nact->game_title_utf8);
|
||||
|
||||
TRACE("MT(new) %s:",title);
|
||||
}
|
||||
|
||||
/* defined in cmdn.c */
|
||||
extern INPUTNUM_PARAM ni_param;
|
||||
void commands2F29() {
|
||||
const char *title = sl_getString(0);
|
||||
char *t;
|
||||
|
||||
if (ni_param.title != NULL) {
|
||||
free(ni_param.title);
|
||||
}
|
||||
t = toUTF8(title);
|
||||
ni_param.title = t;
|
||||
|
||||
TRACE("NT(new) %s:", title);
|
||||
}
|
||||
|
||||
void commands2F2A() {
|
||||
int type = sl_getc();
|
||||
const char *file_name = sl_getString(0);
|
||||
int var, cnt;
|
||||
struct VarRef vref;
|
||||
|
||||
char *fname_utf8 = toUTF8(file_name);
|
||||
switch(type) {
|
||||
case 0:
|
||||
getCaliArray(&vref);
|
||||
var = vref.var;
|
||||
cnt = getCaliValue();
|
||||
sysVar[0] = save_vars_to_file(fname_utf8, &vref, cnt);
|
||||
break;
|
||||
case 1:
|
||||
var = getCaliValue();
|
||||
cnt = getCaliValue();
|
||||
sysVar[0] = save_strs_to_file(fname_utf8, var, cnt);
|
||||
break;
|
||||
default:
|
||||
var = getCaliValue();
|
||||
cnt = getCaliValue();
|
||||
WARNING("Unknown QE command");
|
||||
break;
|
||||
}
|
||||
free(fname_utf8);
|
||||
|
||||
TRACE("QE(new) %d, %s, %d, %d:", type, file_name, var, cnt);
|
||||
}
|
||||
|
||||
void commands2F2B() {
|
||||
int type = sl_getc();
|
||||
const char *work_dir = sl_getString(0);
|
||||
const char *file_name = sl_getString(0);
|
||||
|
||||
TRACE_UNIMPLEMENTED("UP(new) %d, %s, %s:", type, work_dir, file_name);
|
||||
}
|
||||
|
||||
void commands2F2D() {
|
||||
int eCh = getCaliValue();
|
||||
int eTime = getCaliValue();
|
||||
@@ -706,23 +477,12 @@ void commands2F43() {
|
||||
int eLength = getCaliValue();
|
||||
int eColor = getCaliValue();
|
||||
|
||||
sdl_fillCircle(eX, eY, eLength, eColor);
|
||||
gfx_fillCircle(eX, eY, eLength, eColor);
|
||||
ags_updateArea(eX, eY, eLength, eLength);
|
||||
|
||||
TRACE("grDrawFillCircle %d, %d, %d, %d:", eX, eY, eLength, eColor);
|
||||
}
|
||||
|
||||
void commands2F44() {
|
||||
int num1 = getCaliValue();
|
||||
int fig = getCaliValue();
|
||||
int num2 = getCaliValue();
|
||||
char buf[256];
|
||||
|
||||
svar_set(num1, format_number(num2, fig, buf));
|
||||
|
||||
TRACE("MHH %d, %d, %d:", num1, fig, num2);
|
||||
}
|
||||
|
||||
void commands2F45() {
|
||||
int fPage = sl_getw();
|
||||
int fIndex = sl_getaddr();
|
||||
@@ -781,52 +541,15 @@ void commands2F4C() {
|
||||
int eWidth = getCaliValue();
|
||||
int eHeight = getCaliValue();
|
||||
|
||||
MyRectangle r = {eSrcX, eSrcY, eWidth, eHeight};
|
||||
MyPoint p = {eX, eY};
|
||||
SDL_Rect r = {eSrcX, eSrcY, eWidth, eHeight};
|
||||
SDL_Point p = {eX, eY};
|
||||
|
||||
sdl_updateArea(&r, &p);
|
||||
gfx_updateArea(&r, &p);
|
||||
|
||||
TRACE("grBlt %d, %d, %d, %d, %d, %d:",
|
||||
eX, eY, eSrcX, eSrcY, eWidth, eHeight);
|
||||
}
|
||||
|
||||
void commands2F4D() {
|
||||
int eNum = getCaliValue();
|
||||
const char *sText = sl_getString(0);
|
||||
|
||||
TRACE_UNIMPLEMENTED("LXWT %d, %s:", eNum, sText);
|
||||
}
|
||||
|
||||
void commands2F4E() {
|
||||
int eNum = getCaliValue();
|
||||
int eTextNum = getCaliValue();
|
||||
|
||||
TRACE_UNIMPLEMENTED("LXWS %d, %d:", eNum, eTextNum);
|
||||
}
|
||||
|
||||
void commands2F4F() {
|
||||
int eNum = getCaliValue();
|
||||
int eType = getCaliValue();
|
||||
|
||||
TRACE_UNIMPLEMENTED("LXWE %d, %d:", eNum, eType);
|
||||
}
|
||||
|
||||
void commands2F50() {
|
||||
int eFile = getCaliValue();
|
||||
int nFlg = sl_getc();
|
||||
int eNum = getCaliValue();
|
||||
|
||||
TRACE_UNIMPLEMENTED("LXWH %d, %d, %d:", eFile, nFlg, eNum);
|
||||
}
|
||||
|
||||
void commands2F51() {
|
||||
int eFile = getCaliValue();
|
||||
int nFlg = sl_getc();
|
||||
int eNum = getCaliValue();
|
||||
|
||||
TRACE_UNIMPLEMENTED("LXWHH %d, %d, %d:", eFile, nFlg, eNum);
|
||||
}
|
||||
|
||||
void commands2F52() {
|
||||
int eNum = getCaliValue();
|
||||
if (eNum <= 0) return;
|
||||
@@ -882,14 +605,6 @@ void commands2F55() {
|
||||
}
|
||||
}
|
||||
|
||||
void commands2F56() {
|
||||
int file_name = getCaliValue();
|
||||
const char *title = sl_getString(0);
|
||||
const char *folder = sl_getString(0);
|
||||
|
||||
TRACE_UNIMPLEMENTED("LXF %d, %s, %s:", file_name, title, folder);
|
||||
}
|
||||
|
||||
void commands2F57() {
|
||||
const char *sTitle = sl_getString(0);
|
||||
int eStrVar = getCaliValue();
|
||||
@@ -943,7 +658,7 @@ void commands2F5A() {
|
||||
char *t1;
|
||||
|
||||
t1 = toUTF8(sText);
|
||||
sdl_showMessageBox(MESSAGEBOX_INFO, nact->game_title_utf8, t1);
|
||||
sys_show_message_box(MESSAGEBOX_INFO, nact->game_title_utf8, t1);
|
||||
free(t1);
|
||||
|
||||
TRACE("strMessageBox %s:", sText);
|
||||
@@ -954,7 +669,7 @@ void commands2F5B() {
|
||||
char *t1;
|
||||
|
||||
t1 = toUTF8(svar_get(eNum));
|
||||
sdl_showMessageBox(MESSAGEBOX_INFO, nact->game_title_utf8, t1);
|
||||
sys_show_message_box(MESSAGEBOX_INFO, nact->game_title_utf8, t1);
|
||||
free(t1);
|
||||
|
||||
TRACE("strMessageBoxStr %d:", eNum);
|
||||
|
||||
+34
-34
@@ -32,7 +32,7 @@
|
||||
#include "selection.h"
|
||||
#include "message.h"
|
||||
#include "input.h"
|
||||
#include "sdl_core.h"
|
||||
#include "gfx.h"
|
||||
|
||||
static void undeferr();
|
||||
|
||||
@@ -181,7 +181,7 @@ void exec_command(void) {
|
||||
int c0 = sl_getc();
|
||||
|
||||
if (c0 == BREAKPOINT) {
|
||||
sdl_updateScreen();
|
||||
gfx_updateScreen();
|
||||
c0 = dbg_handle_breakpoint(sl_getPage(), sl_getIndex() - 1);
|
||||
}
|
||||
|
||||
@@ -249,25 +249,25 @@ void exec_command(void) {
|
||||
/* 小文字コマンド */
|
||||
switch(sl_getc()) {
|
||||
case 0x00:
|
||||
commands2F00(); break;
|
||||
commandTOC(); break;
|
||||
case 0x01:
|
||||
commands2F01(); break;
|
||||
commandTOS(); break;
|
||||
case 0x02:
|
||||
commands2F02(); break;
|
||||
commandTPC(); break;
|
||||
case 0x03:
|
||||
commands2F03(); break;
|
||||
commandTPS(); break;
|
||||
case 0x04:
|
||||
commands2F04(); break;
|
||||
commandTOP(); break;
|
||||
case 0x05:
|
||||
commands2F05(); break;
|
||||
commandTPP(); break;
|
||||
case 0x06:
|
||||
commandsINC(); break;
|
||||
case 0x07:
|
||||
commandsDEC(); break;
|
||||
case 0x08:
|
||||
commands2F08(); break;
|
||||
commandTAA(); break;
|
||||
case 0x09:
|
||||
commands2F09(); break;
|
||||
commandTAB(); break;
|
||||
case 0x0a:
|
||||
commands2F0A(); break;
|
||||
case 0x0b:
|
||||
@@ -319,23 +319,23 @@ void exec_command(void) {
|
||||
case 0x22:
|
||||
commandHH(); break;
|
||||
case 0x23:
|
||||
commands2F23(); break;
|
||||
commandLC(0); break;
|
||||
case 0x24:
|
||||
commands2F24(); break;
|
||||
commandLE(0); break;
|
||||
case 0x25:
|
||||
commands2F25(); break;
|
||||
commandLXG(0); break;
|
||||
case 0x26:
|
||||
commands2F26(); break;
|
||||
commandMI(0); break;
|
||||
case 0x27:
|
||||
commands2F27(); break;
|
||||
commandMS(0); break;
|
||||
case 0x28:
|
||||
commands2F28(); break;
|
||||
commandMT(0); break;
|
||||
case 0x29:
|
||||
commands2F29(); break;
|
||||
commandNT(0); break;
|
||||
case 0x2a:
|
||||
commands2F2A(); break;
|
||||
commandQE(0); break;
|
||||
case 0x2b:
|
||||
commands2F2B(); break;
|
||||
commandUP(); break;
|
||||
case 0x2c:
|
||||
commandF(); break;
|
||||
case 0x2d:
|
||||
@@ -385,7 +385,7 @@ void exec_command(void) {
|
||||
case 0x43:
|
||||
commands2F43(); break;
|
||||
case 0x44:
|
||||
commands2F44(); break;
|
||||
commandMHH(); break;
|
||||
case 0x45:
|
||||
commands2F45(); break;
|
||||
case 0x46:
|
||||
@@ -403,15 +403,15 @@ void exec_command(void) {
|
||||
case 0x4c:
|
||||
commands2F4C(); break;
|
||||
case 0x4d:
|
||||
commands2F4D(); break;
|
||||
commandLXWT(); break;
|
||||
case 0x4e:
|
||||
commands2F4E(); break;
|
||||
commandLXWS(); break;
|
||||
case 0x4f:
|
||||
commands2F4F(); break;
|
||||
commandLXWE(); break;
|
||||
case 0x50:
|
||||
commands2F50(); break;
|
||||
commandLXWH(); break;
|
||||
case 0x51:
|
||||
commands2F51(); break;
|
||||
commandLXWHH(); break;
|
||||
case 0x52:
|
||||
commands2F52(); break;
|
||||
case 0x53:
|
||||
@@ -421,7 +421,7 @@ void exec_command(void) {
|
||||
case 0x55:
|
||||
commands2F55(); break;
|
||||
case 0x56:
|
||||
commands2F56(); break;
|
||||
commandLXF(); break;
|
||||
case 0x57:
|
||||
commands2F57(); break;
|
||||
case 0x58:
|
||||
@@ -731,7 +731,7 @@ void exec_command(void) {
|
||||
case 'L':
|
||||
switch(sl_getc()) {
|
||||
case 'C':
|
||||
commandLC(); break;
|
||||
commandLC(':'); break;
|
||||
case 'D':
|
||||
commandLD(); break;
|
||||
case 'P':
|
||||
@@ -739,7 +739,7 @@ void exec_command(void) {
|
||||
case 'T':
|
||||
commandLT(); break;
|
||||
case 'E':
|
||||
commandLE(); break;
|
||||
commandLE(':'); break;
|
||||
case 'L':
|
||||
commandLL(); break;
|
||||
case 'H':
|
||||
@@ -761,7 +761,7 @@ void exec_command(void) {
|
||||
case 'X':
|
||||
switch(sl_getc()) {
|
||||
case 'G':
|
||||
commandLXG(); break;
|
||||
commandLXG(':'); break;
|
||||
case 'O':
|
||||
commandLXO(); break;
|
||||
case 'C':
|
||||
@@ -803,7 +803,7 @@ void exec_command(void) {
|
||||
case 'H':
|
||||
commandMH(); break;
|
||||
case 'I':
|
||||
commandMI(); break;
|
||||
commandMI(':'); break;
|
||||
case 'J':
|
||||
commandMJ(); break;
|
||||
case 'L':
|
||||
@@ -815,9 +815,9 @@ void exec_command(void) {
|
||||
case 'P':
|
||||
commandMP(); break;
|
||||
case 'S':
|
||||
commandMS(); break;
|
||||
commandMS(':'); break;
|
||||
case 'T':
|
||||
commandMT(); break;
|
||||
commandMT(':'); break;
|
||||
case 'V':
|
||||
commandMV(); break;
|
||||
case 'Z':
|
||||
@@ -871,7 +871,7 @@ void exec_command(void) {
|
||||
case 'O':
|
||||
commandNO(); break;
|
||||
case 'T':
|
||||
commandNT(); break;
|
||||
commandNT(':'); break;
|
||||
case 'D':
|
||||
switch(sl_getc()) {
|
||||
case 'C':
|
||||
@@ -943,7 +943,7 @@ void exec_command(void) {
|
||||
case 'D':
|
||||
commandQD(); break;
|
||||
case 'E':
|
||||
commandQE(); break;
|
||||
commandQE(':'); break;
|
||||
case 'P':
|
||||
commandQP(); break;
|
||||
default:
|
||||
|
||||
+24
-32
@@ -116,9 +116,9 @@ extern void commandKR();
|
||||
extern void commandKW();
|
||||
|
||||
/* defined by cmdl.c */
|
||||
extern void commandLC();
|
||||
extern void commandLC(char terminator);
|
||||
extern void commandLD();
|
||||
extern void commandLE();
|
||||
extern void commandLE(char terminator);
|
||||
extern void commandLHD();
|
||||
extern void commandLHG();
|
||||
extern void commandLHM();
|
||||
@@ -127,7 +127,7 @@ extern void commandLHW();
|
||||
extern void commandLL();
|
||||
extern void commandLP();
|
||||
extern void commandLT();
|
||||
extern void commandLXG();
|
||||
extern void commandLXG(char terminator);
|
||||
extern void commandLXO();
|
||||
extern void commandLXC();
|
||||
extern void commandLXL();
|
||||
@@ -136,6 +136,12 @@ extern void commandLXP();
|
||||
extern void commandLXR();
|
||||
extern void commandLXW();
|
||||
extern void commandLXX();
|
||||
extern void commandLXWT();
|
||||
extern void commandLXWS();
|
||||
extern void commandLXWE();
|
||||
extern void commandLXWH();
|
||||
extern void commandLXWHH();
|
||||
extern void commandLXF();
|
||||
|
||||
/* defined by cmdm.c */
|
||||
extern void commandMA();
|
||||
@@ -145,14 +151,15 @@ extern void commandME();
|
||||
extern void commandMF();
|
||||
extern void commandMG();
|
||||
extern void commandMH();
|
||||
extern void commandMI();
|
||||
extern void commandMHH();
|
||||
extern void commandMI(char terminator);
|
||||
extern void commandMJ();
|
||||
extern void commandML();
|
||||
extern void commandMM();
|
||||
extern void commandMN();
|
||||
extern void commandMP();
|
||||
extern void commandMS();
|
||||
extern void commandMT();
|
||||
extern void commandMS(char terminator);
|
||||
extern void commandMT(char terminator);
|
||||
extern void commandMV();
|
||||
extern void commandMZ0();
|
||||
|
||||
@@ -175,7 +182,7 @@ extern void commandNI();
|
||||
extern void commandNP();
|
||||
extern void commandNR();
|
||||
extern void commandNO();
|
||||
extern void commandNT();
|
||||
extern void commandNT(char terminator);
|
||||
extern void commandND_ADD();
|
||||
extern void commandND_SUB();
|
||||
extern void commandND_MUL();
|
||||
@@ -205,7 +212,7 @@ extern void commandPW();
|
||||
/* defined by cmdq.c */
|
||||
extern void commandQC();
|
||||
extern void commandQD();
|
||||
extern void commandQE();
|
||||
extern void commandQE(char terminator);
|
||||
extern void commandQP();
|
||||
|
||||
/* defined by cmds.c */
|
||||
@@ -227,6 +234,14 @@ extern void commandSI();
|
||||
|
||||
/* defined by cmdt.c */
|
||||
extern void commandT();
|
||||
extern void commandTOC();
|
||||
extern void commandTOS();
|
||||
extern void commandTPC();
|
||||
extern void commandTPS();
|
||||
extern void commandTOP();
|
||||
extern void commandTPP();
|
||||
extern void commandTAA();
|
||||
extern void commandTAB();
|
||||
|
||||
/* defined by cmdu.c */
|
||||
extern void commandUC();
|
||||
@@ -237,6 +252,7 @@ extern void commandUG();
|
||||
extern void commandUP0();
|
||||
extern void commandUP1();
|
||||
extern void commandUP3();
|
||||
extern void commandUP();
|
||||
|
||||
/* defined by cmdv.c */
|
||||
extern void commandVC();
|
||||
@@ -308,14 +324,6 @@ extern void commandZR();
|
||||
extern void commandZU();
|
||||
|
||||
/* define in cmd2F.c */
|
||||
extern void commands2F00();
|
||||
extern void commands2F01();
|
||||
extern void commands2F02();
|
||||
extern void commands2F03();
|
||||
extern void commands2F04();
|
||||
extern void commands2F05();
|
||||
extern void commands2F08();
|
||||
extern void commands2F09();
|
||||
extern void commands2F0A();
|
||||
extern void commands2F0B();
|
||||
extern void commands2F0C();
|
||||
@@ -340,15 +348,6 @@ extern void commands2F1E();
|
||||
extern void commands2F1F();
|
||||
extern void commands2F20();
|
||||
extern void commands2F21();
|
||||
extern void commands2F23();
|
||||
extern void commands2F24();
|
||||
extern void commands2F25();
|
||||
extern void commands2F26();
|
||||
extern void commands2F27();
|
||||
extern void commands2F28();
|
||||
extern void commands2F29();
|
||||
extern void commands2F2A();
|
||||
extern void commands2F2B();
|
||||
extern void commands2F2D();
|
||||
extern void commands2F2E();
|
||||
extern void commands2F2F();
|
||||
@@ -372,7 +371,6 @@ extern void commands2F40();
|
||||
extern void commands2F41();
|
||||
extern void commands2F42();
|
||||
extern void commands2F43();
|
||||
extern void commands2F44();
|
||||
extern void commands2F45();
|
||||
extern void commands2F46();
|
||||
extern void commands2F47();
|
||||
@@ -381,16 +379,10 @@ extern void commands2F49();
|
||||
extern void commands2F4A();
|
||||
extern void commands2F4B();
|
||||
extern void commands2F4C();
|
||||
extern void commands2F4D();
|
||||
extern void commands2F4E();
|
||||
extern void commands2F4F();
|
||||
extern void commands2F50();
|
||||
extern void commands2F51();
|
||||
extern void commands2F52();
|
||||
extern void commands2F53();
|
||||
extern void commands2F54();
|
||||
extern void commands2F55();
|
||||
extern void commands2F56();
|
||||
extern void commands2F57();
|
||||
extern void commands2F58();
|
||||
extern void commands2F59();
|
||||
|
||||
+1
-1
@@ -134,7 +134,7 @@ void commandB4() {
|
||||
}
|
||||
|
||||
void commandB10() {
|
||||
MyPoint p;
|
||||
SDL_Point p;
|
||||
int *x_var = getCaliVariable();
|
||||
int *y_var = getCaliVariable();
|
||||
|
||||
|
||||
+1
-1
@@ -265,7 +265,7 @@ void commandCP() {
|
||||
int y = getCaliValue();
|
||||
int color = getCaliValue();
|
||||
|
||||
MyRectangle rec = ags_floodFill(x, y, color);
|
||||
SDL_Rect rec = ags_floodFill(x, y, color);
|
||||
if (!SDL_RectEmpty(&rec))
|
||||
ags_updateArea(rec.x, rec.y, rec.w, rec.h);
|
||||
|
||||
|
||||
+6
-7
@@ -26,10 +26,9 @@
|
||||
#include "xsystem35.h"
|
||||
#include "scenario.h"
|
||||
#include "ags.h"
|
||||
#include "graphics.h"
|
||||
|
||||
typedef struct {
|
||||
MyRectangle r;
|
||||
SDL_Rect r;
|
||||
int pal;
|
||||
} Ecomtbl;
|
||||
|
||||
@@ -55,7 +54,7 @@ void commandES() {
|
||||
void commandEC() {
|
||||
int num = getCaliValue();
|
||||
Ecomtbl *e;
|
||||
MyRectangle *r;
|
||||
SDL_Rect *r;
|
||||
|
||||
if (num == 0) {
|
||||
r = &nact->ags.view_area;
|
||||
@@ -91,8 +90,8 @@ void commandEM() {
|
||||
int x = getCaliValue();
|
||||
int y = getCaliValue();
|
||||
|
||||
MyPoint p = {x, y};
|
||||
MyRectangle r = tbl[num - 1].r;
|
||||
SDL_Point p = {x, y};
|
||||
SDL_Rect r = tbl[num - 1].r;
|
||||
if (nact->patch_emen == 0) {
|
||||
r.w -= 1;
|
||||
r.h -= 1;
|
||||
@@ -108,11 +107,11 @@ void commandEN() {
|
||||
int x = getCaliValue();
|
||||
int y = getCaliValue();
|
||||
|
||||
MyPoint p = {x, y};
|
||||
SDL_Point p = {x, y};
|
||||
*var = 0;
|
||||
|
||||
for (int i = min; i <= max; i++) {
|
||||
MyRectangle r = tbl[i - 1].r;
|
||||
SDL_Rect r = tbl[i - 1].r;
|
||||
if (nact->patch_emen == 0) {
|
||||
r.w -= 1;
|
||||
r.h -= 1;
|
||||
|
||||
+1
-1
@@ -57,7 +57,7 @@ void commandG1() {
|
||||
|
||||
void commandGS() {
|
||||
/* num 番にリンクされているCGの座標とサイズを取得する */
|
||||
MyRectangle r;
|
||||
SDL_Rect r;
|
||||
int num = getCaliValue();
|
||||
int *var = getCaliVariable();
|
||||
|
||||
|
||||
+1
-2
@@ -28,7 +28,6 @@
|
||||
#include "xsystem35.h"
|
||||
#include "scenario.h"
|
||||
#include "ags.h"
|
||||
#include "sdl_core.h"
|
||||
#include "input.h"
|
||||
#include "msgskip.h"
|
||||
|
||||
@@ -102,7 +101,7 @@ void commandIM() {
|
||||
/* マウスカーソルの座標取得 */
|
||||
int *x_var = getCaliVariable();
|
||||
int *y_var = getCaliVariable();
|
||||
MyPoint p;
|
||||
SDL_Point p;
|
||||
|
||||
sysVar[0] = sys_getMouseInfo(&p, false);
|
||||
*x_var = p.x;
|
||||
|
||||
+72
-10
@@ -36,6 +36,7 @@
|
||||
#include "savedata.h"
|
||||
#include "utfsjis.h"
|
||||
#include "cg.h"
|
||||
#include "cmd_check.h"
|
||||
|
||||
void commandLD() {
|
||||
/* 変数領域などのデータをロードする。(全ロード)*/
|
||||
@@ -106,24 +107,38 @@ void commandLT() {
|
||||
TRACE("LT %d,%p",num, var);
|
||||
}
|
||||
|
||||
void commandLE() {
|
||||
void commandLE(char terminator) {
|
||||
int type = sl_getc();
|
||||
const char *filename = sl_getString(':');
|
||||
const char *filename = sl_getString(terminator);
|
||||
char *fname_utf8 = toUTF8(filename);
|
||||
char *fallback_fname = NULL;
|
||||
if (strchr(fname_utf8, '\\')) {
|
||||
fallback_fname = strdup(fname_utf8);
|
||||
for (char *p = fname_utf8; *p; p++) {
|
||||
if (*p == '\\')
|
||||
*p = '/';
|
||||
}
|
||||
}
|
||||
|
||||
int var, cnt;
|
||||
struct VarRef vref;
|
||||
|
||||
char *fname_utf8 = toUTF8(filename);
|
||||
switch (type) {
|
||||
case 0:
|
||||
getCaliArray(&vref);
|
||||
var = vref.var;
|
||||
cnt = getCaliValue();
|
||||
sysVar[0] = load_vars_from_file(fname_utf8, &vref, cnt);
|
||||
// For compatibility; the QE command in v2.16.1 and earlier did not
|
||||
// convert backslashes to slashes.
|
||||
if (sysVar[0] == SAVE_LOADERR && fallback_fname)
|
||||
sysVar[0] = load_vars_from_file(fallback_fname, &vref, cnt);
|
||||
break;
|
||||
case 1:
|
||||
var = getCaliValue();
|
||||
cnt = getCaliValue();
|
||||
sysVar[0] = load_strs_from_file(fname_utf8, var, cnt);
|
||||
if (sysVar[0] == SAVE_LOADERR && fallback_fname)
|
||||
sysVar[0] = load_strs_from_file(fallback_fname, var, cnt);
|
||||
break;
|
||||
default:
|
||||
var = getCaliValue();
|
||||
@@ -131,6 +146,8 @@ void commandLE() {
|
||||
WARNING("Unknown LE command %d", type);
|
||||
break;
|
||||
}
|
||||
if (fallback_fname)
|
||||
free(fallback_fname);
|
||||
free(fname_utf8);
|
||||
|
||||
TRACE("LE %d,%s,%d,%d:",type, filename, var, cnt);
|
||||
@@ -254,11 +271,11 @@ void commandLHW() {
|
||||
TRACE("LHW %d,%d:",p1,no);
|
||||
}
|
||||
|
||||
void commandLC() {
|
||||
void commandLC(char terminator) {
|
||||
int x = getCaliValue();
|
||||
int y = getCaliValue();
|
||||
const char *filename = sl_getString(':');
|
||||
|
||||
const char *filename = sl_getString(terminator);
|
||||
|
||||
char *fname_utf8 = toUTF8(filename);
|
||||
sysVar[0] = cg_load_with_filename(fname_utf8, x, y);
|
||||
free(fname_utf8);
|
||||
@@ -266,11 +283,11 @@ void commandLC() {
|
||||
TRACE("LC %d,%d,%s:", x, y, filename);
|
||||
}
|
||||
|
||||
void commandLXG() {
|
||||
void commandLXG(char terminator) {
|
||||
/* ファイルを選択する */
|
||||
int file_name = getCaliValue();
|
||||
const char *title = sl_getString(':');
|
||||
const char *filter = sl_getString(':');
|
||||
const char *title = sl_getString(terminator);
|
||||
const char *filter = sl_getString(terminator);
|
||||
|
||||
TRACE_UNIMPLEMENTED("LXG %d,%s,%s:", file_name, title, filter);
|
||||
}
|
||||
@@ -376,3 +393,48 @@ void commandLXX() {
|
||||
|
||||
TRACE("LXX %d,%d,%d:", type, num, *var);
|
||||
}
|
||||
|
||||
void commandLXWT() {
|
||||
int eNum = getCaliValue();
|
||||
const char *sText = sl_getString(0);
|
||||
|
||||
TRACE_UNIMPLEMENTED("LXWT %d, %s:", eNum, sText);
|
||||
}
|
||||
|
||||
void commandLXWS() {
|
||||
int eNum = getCaliValue();
|
||||
int eTextNum = getCaliValue();
|
||||
|
||||
TRACE_UNIMPLEMENTED("LXWS %d, %d:", eNum, eTextNum);
|
||||
}
|
||||
|
||||
void commandLXWE() {
|
||||
int eNum = getCaliValue();
|
||||
int eType = getCaliValue();
|
||||
|
||||
TRACE_UNIMPLEMENTED("LXWE %d, %d:", eNum, eType);
|
||||
}
|
||||
|
||||
void commandLXWH() {
|
||||
int eFile = getCaliValue();
|
||||
int nFlg = sl_getc();
|
||||
int eNum = getCaliValue();
|
||||
|
||||
TRACE_UNIMPLEMENTED("LXWH %d, %d, %d:", eFile, nFlg, eNum);
|
||||
}
|
||||
|
||||
void commandLXWHH() {
|
||||
int eFile = getCaliValue();
|
||||
int nFlg = sl_getc();
|
||||
int eNum = getCaliValue();
|
||||
|
||||
TRACE_UNIMPLEMENTED("LXWHH %d, %d, %d:", eFile, nFlg, eNum);
|
||||
}
|
||||
|
||||
void commandLXF() {
|
||||
int file_name = getCaliValue();
|
||||
const char *title = sl_getString(0);
|
||||
const char *folder = sl_getString(0);
|
||||
|
||||
TRACE_UNIMPLEMENTED("LXF %d, %s, %s:", file_name, title, folder);
|
||||
}
|
||||
|
||||
+20
-8
@@ -34,15 +34,16 @@
|
||||
#include "message.h"
|
||||
#include "hankaku.h"
|
||||
#include "hacks.h"
|
||||
#include "cmd_check.h"
|
||||
|
||||
/* MI 用パラメータ */
|
||||
INPUTSTRING_PARAM mi_param;
|
||||
static INPUTSTRING_PARAM mi_param;
|
||||
|
||||
void commandMS() {
|
||||
void commandMS(char terminator) {
|
||||
/* Xコマンドで表示される文字列領域に文字列を入れる */
|
||||
int num = getCaliValue();
|
||||
const char *str = sl_getString(':');
|
||||
|
||||
const char *str = sl_getString(terminator);
|
||||
|
||||
svar_set(num, str);
|
||||
TRACE("MS %d,%s:",num,str);
|
||||
}
|
||||
@@ -90,11 +91,11 @@ void commandMP() {
|
||||
free(str);
|
||||
}
|
||||
|
||||
void commandMI() { /* T2 */
|
||||
void commandMI(char terminator) {
|
||||
/* ユーザーによる文字列の入力 */
|
||||
int dst_no = getCaliValue();
|
||||
int max_len = getCaliValue();
|
||||
const char *title = sl_getString(':');
|
||||
const char *title = sl_getString(terminator);
|
||||
char *t1, *t2, *t3;
|
||||
|
||||
t1 = toUTF8(title);
|
||||
@@ -147,9 +148,9 @@ void commandMC() {
|
||||
TRACE("MC %d,%d:",num1,num2);
|
||||
}
|
||||
|
||||
void commandMT() {
|
||||
void commandMT(char terminator) {
|
||||
/* ウインドウのタイトル文字列を設定する */
|
||||
const char *str = sl_getString(':');
|
||||
const char *str = sl_getString(terminator);
|
||||
|
||||
if (nact->game_title_utf8)
|
||||
free(nact->game_title_utf8);
|
||||
@@ -186,6 +187,17 @@ void commandMH() {
|
||||
TRACE("MH %d,%d,%d:",num1,fig,num2);
|
||||
}
|
||||
|
||||
void commandMHH() {
|
||||
int num1 = getCaliValue();
|
||||
int fig = getCaliValue();
|
||||
int num2 = getCaliValue();
|
||||
char buf[256];
|
||||
|
||||
svar_set(num1, format_number(num2, fig, buf));
|
||||
|
||||
TRACE("MHH %d, %d, %d:", num1, fig, num2);
|
||||
}
|
||||
|
||||
void commandMV() {
|
||||
/* シナリオバージョンをシステムへ通知する */
|
||||
int version = getCaliValue();
|
||||
|
||||
+4
-3
@@ -30,9 +30,10 @@
|
||||
#include "xsystem35.h"
|
||||
#include "scenario.h"
|
||||
#include "menu.h"
|
||||
#include "cmd_check.h"
|
||||
|
||||
/* NI/NT 用パラメータ */
|
||||
INPUTNUM_PARAM ni_param;
|
||||
static INPUTNUM_PARAM ni_param;
|
||||
|
||||
void commandNB() {
|
||||
/* var1 から始まるcount個の変数へ
|
||||
@@ -376,9 +377,9 @@ void commandNI() { /* From Panyo */
|
||||
TRACE("NI %p,%d,%d,%d:", var, def, _min, _max);
|
||||
}
|
||||
|
||||
void commandNT() { /* From Panyo */
|
||||
void commandNT(char terminator) {
|
||||
/* NIコマンドで表示するタイトルを設定する。*/
|
||||
const char *str = sl_getString(':');
|
||||
const char *str = sl_getString(terminator);
|
||||
|
||||
free(ni_param.title);
|
||||
ni_param.title = toUTF8(str);
|
||||
|
||||
+4
-4
@@ -156,10 +156,10 @@ void commandPT0() {
|
||||
int *var = getCaliVariable();
|
||||
int x = getCaliValue();
|
||||
int y = getCaliValue();
|
||||
Palette cell;
|
||||
PixelColor cell;
|
||||
|
||||
ags_getPixel(x, y, &cell);
|
||||
*var = cell.pixel;
|
||||
*var = cell.index;
|
||||
|
||||
TRACE("PT0 %p,%d,%d:", var, x, y);
|
||||
}
|
||||
@@ -171,7 +171,7 @@ void commandPT1() {
|
||||
int *b_var = getCaliVariable();
|
||||
int x = getCaliValue();
|
||||
int y = getCaliValue();
|
||||
Palette cell;
|
||||
PixelColor cell;
|
||||
|
||||
ags_getPixel(x, y, &cell);
|
||||
*r_var = cell.r;
|
||||
@@ -187,7 +187,7 @@ void commandPT2() {
|
||||
int *low_var = getCaliVariable();
|
||||
int x = getCaliValue();
|
||||
int y = getCaliValue();
|
||||
Palette cell;
|
||||
PixelColor cell;
|
||||
int r, g, b, pic;
|
||||
|
||||
ags_getPixel(x, y, &cell);
|
||||
|
||||
+18
-4
@@ -29,6 +29,8 @@
|
||||
#include "scenario.h"
|
||||
#include "savedata.h"
|
||||
#include "utfsjis.h"
|
||||
#include "filecheck.h"
|
||||
#include "cmd_check.h"
|
||||
|
||||
void commandQD() {
|
||||
/* 変数領域などのデータをセーブする。(全セーブ)*/
|
||||
@@ -79,13 +81,25 @@ void commandQC() {
|
||||
TRACE("QC %d,%d:",num1,num2);
|
||||
}
|
||||
|
||||
void commandQE() {
|
||||
void commandQE(char terminator) {
|
||||
int type = sl_getc();
|
||||
const char *filename = sl_getString(':');
|
||||
const char *filename = sl_getString(terminator);
|
||||
char *fname_utf8 = toUTF8(filename);
|
||||
char *last_slash = NULL;
|
||||
for (char *p = fname_utf8; *p; p++) {
|
||||
if (*p == '\\') {
|
||||
*p = '/';
|
||||
last_slash = p;
|
||||
}
|
||||
}
|
||||
if (last_slash) {
|
||||
*last_slash = '\0';
|
||||
mkdir_p(fname_utf8);
|
||||
*last_slash = '/';
|
||||
}
|
||||
|
||||
int var, cnt;
|
||||
struct VarRef vref;
|
||||
|
||||
char *fname_utf8 = toUTF8(filename);
|
||||
switch (type) {
|
||||
case 0:
|
||||
getCaliArray(&vref);
|
||||
|
||||
+66
@@ -35,3 +35,69 @@ void commandT() {
|
||||
|
||||
TRACE("T %d,%d:",x,y);
|
||||
}
|
||||
|
||||
void commandTOC() {
|
||||
/* テキストカラーをスタックからポップして設定する */
|
||||
sl_popState(STACK_TEXTCOLOR);
|
||||
TRACE("TOC:");
|
||||
}
|
||||
|
||||
void commandTOS() {
|
||||
/* テキストフォントサイズをスタックからポップして設定する */
|
||||
sl_popState(STACK_TEXTSIZE);
|
||||
TRACE("TOS:");
|
||||
}
|
||||
|
||||
void commandTPC() {
|
||||
/* 現在のテキストカラーをスタックにプッシュする */
|
||||
int type = getCaliValue();
|
||||
switch (type) {
|
||||
case 0: sl_pushTextColor(type, nact->msg.MsgFontColor); break;
|
||||
case 1: sl_pushTextColor(type, nact->sel.MsgFontColor); break;
|
||||
default: WARNING("TPC: unknown type %d", type); break;
|
||||
}
|
||||
TRACE("TPC %d", exp);
|
||||
}
|
||||
|
||||
void commandTPS() {
|
||||
/* 現在のテキストフォントサイズをスタックにプッシュする */
|
||||
int type = getCaliValue();
|
||||
switch (type) {
|
||||
case 0: sl_pushTextSize(type, nact->msg.MsgFontSize); break;
|
||||
case 1: sl_pushTextSize(type, nact->sel.MsgFontSize); break;
|
||||
default: WARNING("TPS: unknown type %d", type); break;
|
||||
}
|
||||
TRACE("TPS %d", exp);
|
||||
}
|
||||
|
||||
void commandTOP() {
|
||||
/* テキスト表示位置をスタックからポップして設定する */
|
||||
sl_popState(STACK_TEXTLOC);
|
||||
TRACE("TOP:");
|
||||
}
|
||||
|
||||
void commandTPP() {
|
||||
/* 現在のテキスト表示位置をスタックにプッシュする */
|
||||
SDL_Point loc;
|
||||
msg_getMessageLocation(&loc);
|
||||
sl_pushTextLoc(loc.x, loc.y);
|
||||
TRACE("TPP:");
|
||||
}
|
||||
|
||||
void commandTAA() {
|
||||
/* アンチエイリアシング付きテキスト描画のフラグ設定 */
|
||||
int exp = getCaliValue();
|
||||
|
||||
ags_setAntialiasedStringMode(exp == 1);
|
||||
|
||||
TRACE("TAA %d:", exp);
|
||||
}
|
||||
|
||||
void commandTAB() {
|
||||
/* アンチエイリアシング付きテキスト描画のフラグ取得 */
|
||||
int *var = getCaliVariable();
|
||||
|
||||
*var = ags_getAntialiasedStringMode() ? 1 : 0;
|
||||
|
||||
TRACE("TAB %d:", *var);
|
||||
}
|
||||
|
||||
@@ -122,3 +122,11 @@ void commandUP3() {
|
||||
|
||||
TRACE_UNIMPLEMENTED("UP3 %s,%s:",str1,str2);
|
||||
}
|
||||
|
||||
void commandUP() {
|
||||
int type = sl_getc();
|
||||
const char *work_dir = sl_getString(0);
|
||||
const char *file_name = sl_getString(0);
|
||||
|
||||
TRACE_UNIMPLEMENTED("UP(new) %d, %s, %s:", type, work_dir, file_name);
|
||||
}
|
||||
|
||||
+4
-5
@@ -27,7 +27,6 @@
|
||||
#include <unistd.h>
|
||||
#include <sys/time.h>
|
||||
#include "portab.h"
|
||||
#include "sdl_core.h"
|
||||
#include "scheduler.h"
|
||||
#include "xsystem35.h"
|
||||
#include "scenario.h"
|
||||
@@ -760,7 +759,7 @@ void commandVA() { /* from Panyo */
|
||||
/* 開始 (p3=コマ数,0:無限(開始位置==終了位置のとき))*/
|
||||
inAnimation = true;
|
||||
VAcmd[p1].elaspCut = 0;
|
||||
VAcmd[p1].startTime = sdl_getTicks();
|
||||
VAcmd[p1].startTime = sys_get_ticks();
|
||||
VAcmd[p1].totalCut = p3;
|
||||
|
||||
if (p3 == 0) {
|
||||
@@ -784,7 +783,7 @@ void commandVA() { /* from Panyo */
|
||||
/* キー抜け無し ,p3=0は指定不可 */
|
||||
while(VAcmd[p1].state == VA_RUNNING) {
|
||||
va_animationAlone(p1);
|
||||
sdl_sleep(10);
|
||||
sys_sleep(10);
|
||||
}
|
||||
va_drawUnit(p1);
|
||||
va_updateUnit(p1);
|
||||
@@ -794,7 +793,7 @@ void commandVA() { /* from Panyo */
|
||||
VAcmd[p1].rewrite = true;
|
||||
while(VAcmd[p1].state == VA_RUNNING) {
|
||||
va_animationAlone(p1);
|
||||
sdl_sleep(10);
|
||||
sys_sleep(10);
|
||||
key = sys_getInputInfo();
|
||||
if (key != 0) {
|
||||
sysVar[0] = key;
|
||||
@@ -1003,7 +1002,7 @@ static void va_animationAlone(int i) {
|
||||
static void va_update() {
|
||||
bool proceeding = false;
|
||||
int i;
|
||||
int curTime = sdl_getTicks();
|
||||
int curTime = sys_get_ticks();
|
||||
|
||||
for (i = 0; i < VACMD_MAX; i++) {
|
||||
if (VAcmd[i].state == VA_RUNNING) {
|
||||
|
||||
+2
-3
@@ -31,7 +31,6 @@
|
||||
#include "input.h"
|
||||
#include "scenario.h"
|
||||
#include "cmd_check.h"
|
||||
#include "sdl_core.h"
|
||||
#include "scheduler.h"
|
||||
#include "music_cdrom.h"
|
||||
#include "hacks.h"
|
||||
@@ -68,14 +67,14 @@ unsigned Y3waitFlags = KEYWAIT_CANCELABLE;
|
||||
* delay, when a button is pressed.
|
||||
*
|
||||
* For Rance4 v2, this does not work because the UI loop also checks keyboard
|
||||
* status, so we use a different hack. See rance4v2_hack() in sdl_event.c.
|
||||
* status, so we use a different hack. See rance4v2_hack() in event.c.
|
||||
*/
|
||||
static void rance4_Y3_IM_hack() {
|
||||
static int count;
|
||||
|
||||
int button_pressed = sys_getInputInfo();
|
||||
if (!button_pressed) {
|
||||
sdl_wait_vsync();
|
||||
sys_wait_vsync();
|
||||
count = 0;
|
||||
}
|
||||
commandIM();
|
||||
|
||||
+8
-4
@@ -27,7 +27,7 @@
|
||||
|
||||
#include "portab.h"
|
||||
#include "xsystem35.h"
|
||||
#include "sdl_core.h"
|
||||
#include "gfx.h"
|
||||
#include "scheduler.h"
|
||||
#include "ags.h"
|
||||
#include "scenario.h"
|
||||
@@ -44,13 +44,13 @@ static struct {
|
||||
} counters[257]; // [0] for ZT 1-5, [1..256] for ZT 10-11
|
||||
|
||||
static void reset_counter(int num, int divisor, int offset) {
|
||||
counters[num].base = sdl_getTicks() - offset;
|
||||
counters[num].base = sys_get_ticks() - offset;
|
||||
counters[num].divisor = divisor;
|
||||
}
|
||||
|
||||
static uint32_t get_counter(int num) {
|
||||
scheduler_on_event(SCHEDULER_EVENT_TIMER_CHECK);
|
||||
return sdl_getTicks() - counters[num].base;
|
||||
return sys_get_ticks() - counters[num].base;
|
||||
}
|
||||
|
||||
void commandZC() {
|
||||
@@ -126,6 +126,10 @@ void commandZW() {
|
||||
int sw = getCaliValue();
|
||||
|
||||
if (sw < 256) {
|
||||
// System 3.5 has a bug in which ZW 1 does not disable message waiting,
|
||||
// and Rance 2 depends on it.
|
||||
if (game_id == GAME_RANCE2)
|
||||
sw = 2;
|
||||
nact->messagewait_enable = ((sw & 0xff) > 1);
|
||||
nact->messagewait_cancelled = false;
|
||||
} else {
|
||||
@@ -458,7 +462,7 @@ void commandZZ10() {
|
||||
/* スクリーンモードを取得する */
|
||||
int *var = getCaliVariable();
|
||||
|
||||
*var = sdl_isFullscreen() ? 1 : 0;
|
||||
*var = gfx_isFullscreen() ? 1 : 0;
|
||||
|
||||
TRACE("ZZ10 %d:",*var);
|
||||
}
|
||||
|
||||
+206
-2
@@ -23,13 +23,217 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <SDL.h>
|
||||
|
||||
#include "portab.h"
|
||||
#include "system.h"
|
||||
#include "cursor.h"
|
||||
#include "LittleEndian.h"
|
||||
#include "ald_manager.h"
|
||||
#include "sdl_core.h"
|
||||
|
||||
#include "bitmaps/cursor_uparrow.xpm"
|
||||
|
||||
#define CURSOR_ARROW 1
|
||||
#define CURSOR_CROSS 2
|
||||
#define CURSOR_IBEAM 3
|
||||
#define CURSOR_ICON 4
|
||||
#define CURSOR_NO 5
|
||||
#define CURSOR_SIZE 6
|
||||
#define CURSOR_SIZEALL 7
|
||||
#define CURSOR_SIZENESW 8
|
||||
#define CURSOR_SIZENS 9
|
||||
#define CURSOR_SIZENWSE 10
|
||||
#define CURSOR_SIZEWE 11
|
||||
#define CURSOR_UPARROW 12
|
||||
#define CURSOR_WAIT 13
|
||||
|
||||
typedef struct {
|
||||
short idReserved; /* always set to 0 */
|
||||
short idType; /* always set to 1 */
|
||||
short idCount; /* number of cursor images,always set to 1 */
|
||||
/* immediately followed by idCount TCursorDirEntries */
|
||||
} CursorHeader;
|
||||
|
||||
typedef struct {
|
||||
unsigned char bWidth; /* Width */
|
||||
unsigned char bHeight; /* Height */
|
||||
unsigned char bColorCount;
|
||||
unsigned char bReserved;
|
||||
unsigned short wxHotspot;
|
||||
unsigned short wyHotspot;
|
||||
unsigned long dwBytesInRes; /* total number of bytes in image */
|
||||
unsigned long dwImageOffset;
|
||||
} TCursorDirEntry;
|
||||
|
||||
typedef struct {
|
||||
long biSize; /* sizeof(TBitmapInfoHeader) */
|
||||
long biWidth; /* width of bitmap */
|
||||
long biHeight; /* height of bitmap, see notes */
|
||||
short biPlanes; /* planes, always 1 */
|
||||
short biBitCount; /* number of color bits */
|
||||
long biCompression; /* compression used, 0 */
|
||||
long biSizeImage; /* size of the pixel data, see notes */
|
||||
long biXPelsPerMeter; /* not used, 0 */
|
||||
long biYPelsPerMeter; /* not used, 0 */
|
||||
long biClrUsed; /* # of colors used, set to 0 */
|
||||
long biClrImportant; /* important colors, set to 0 */
|
||||
short hotX;
|
||||
short hotY;
|
||||
} TBitmapInfoHeader;
|
||||
|
||||
/*
|
||||
biHeight=2*TIconDirEntry.bHeight;
|
||||
biSizeImage=ANDmask + XORmask;
|
||||
|
||||
XORmask=(TIconDirEntry.bWidth * TIconDirEntry.bHeight * biBitCount)/8;
|
||||
ANDmask=(TIconDirEntry.bWidth * TIconDirEntry.bHeight)/8;
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
unsigned char rgbBlue; /* blue component of color */
|
||||
unsigned char rgbGreen; /* green component of color */
|
||||
unsigned char rgbRed; /* red component of color */
|
||||
unsigned char rgbReserved; /* reserved, 0 */
|
||||
} TRGBQuad;
|
||||
|
||||
typedef struct {
|
||||
TBitmapInfoHeader icHeader; /* image header info */
|
||||
TRGBQuad *icColors; /* image palette */
|
||||
int xormasklen;
|
||||
int andmasklen;
|
||||
} CursorImage;
|
||||
|
||||
typedef struct {
|
||||
int cbSizeof;
|
||||
int cFrames;
|
||||
int cSteps;
|
||||
int cx;
|
||||
int cy;
|
||||
int cBitCount;
|
||||
int cPlanes;
|
||||
int jiffRate;
|
||||
int fl;
|
||||
|
||||
int *rate;
|
||||
int *seq;
|
||||
} AnimationCursorHeader ;
|
||||
|
||||
typedef struct {
|
||||
AnimationCursorHeader *header;
|
||||
CursorImage *images;
|
||||
} AniCursorImage;
|
||||
|
||||
static SDL_Cursor *cursor[256];
|
||||
|
||||
/* Stolen from the SDL mailing list */
|
||||
/* Creates a new mouse cursor from an XPM */
|
||||
|
||||
static SDL_Cursor *init_system_cursor(const char *image[]) {
|
||||
int i, row, col;
|
||||
Uint8 data[4*32];
|
||||
Uint8 mask[4*32];
|
||||
int hot_x, hot_y;
|
||||
|
||||
i = -1;
|
||||
for (row = 0; row < 32; row++) {
|
||||
for (col = 0; col < 32; col++) {
|
||||
if (col % 8) {
|
||||
data[i] <<= 1;
|
||||
mask[i] <<= 1;
|
||||
} else {
|
||||
i++;
|
||||
data[i] = mask[i] = 0;
|
||||
}
|
||||
switch (image[4 + row][col]) {
|
||||
case 'X':
|
||||
data[i] |= 0x01;
|
||||
mask[i] |= 0x01;
|
||||
break;
|
||||
case '.':
|
||||
mask[i] |= 0x01;
|
||||
break;
|
||||
case ' ':
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
sscanf(image[4 + row], "%d,%d", &hot_x, &hot_y);
|
||||
return SDL_CreateCursor(data, mask, 32, 32, hot_x, hot_y);
|
||||
}
|
||||
|
||||
void cursor_init(void) {
|
||||
cursor[CURSOR_ARROW] = SDL_GetDefaultCursor();
|
||||
cursor[CURSOR_CROSS] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_CROSSHAIR);
|
||||
cursor[CURSOR_IBEAM] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_IBEAM);
|
||||
cursor[CURSOR_ICON] = SDL_GetDefaultCursor();
|
||||
cursor[CURSOR_NO] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_NO);
|
||||
cursor[CURSOR_SIZE] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEALL);
|
||||
cursor[CURSOR_SIZEALL] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEALL);
|
||||
cursor[CURSOR_SIZENESW] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENESW);
|
||||
cursor[CURSOR_SIZENS] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENS);
|
||||
cursor[CURSOR_SIZENWSE] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENWSE);
|
||||
cursor[CURSOR_SIZEWE] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEWE);
|
||||
cursor[CURSOR_UPARROW] = init_system_cursor(cursor_uparrow);
|
||||
cursor[CURSOR_WAIT] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_WAIT);
|
||||
}
|
||||
|
||||
static bool cursor_new(uint8_t* data, int no, CursorImage *cursorImage, TCursorDirEntry *cursordirentry) {
|
||||
int xormasklen, andmasklen, xornum;
|
||||
int i, j;
|
||||
int h = 0;
|
||||
|
||||
uint8_t *buf1, *buf2, *buf3, *buf4;
|
||||
|
||||
xornum = (cursordirentry->bWidth * cursordirentry->bHeight);
|
||||
xormasklen = (xornum * cursorImage->icHeader.biBitCount) / 8;
|
||||
NOTICE("Cursor: xormasklen==%d, xornum==%d", xormasklen, xornum);
|
||||
|
||||
andmasklen = xornum / 8;
|
||||
cursorImage->xormasklen = xormasklen;
|
||||
cursorImage->andmasklen = andmasklen;
|
||||
|
||||
buf1 = malloc(sizeof(uint8_t) * xornum);
|
||||
buf2 = malloc(sizeof(uint8_t) * xornum);
|
||||
buf3 = malloc(sizeof(uint8_t) * xornum);
|
||||
buf4 = malloc(sizeof(uint8_t) * xornum);
|
||||
|
||||
memcpy(buf1, data, min(xormasklen, xornum));
|
||||
data += xormasklen;
|
||||
|
||||
memcpy(buf2, data, min(andmasklen, xornum));
|
||||
data += andmasklen;
|
||||
|
||||
#define height cursordirentry->bHeight
|
||||
#define width cursordirentry->bWidth
|
||||
|
||||
for (j = 0; j < height; j++) {
|
||||
for (i = 0; i < width * cursorImage->icHeader.biBitCount /8; i++) {
|
||||
buf3[h] = buf1[(height-j-1)*height*cursorImage->icHeader.biBitCount/8+i];
|
||||
buf4[h] = 0xff ^ buf2[(height-j-1)*height*cursorImage->icHeader.biBitCount/8+i];
|
||||
h++;
|
||||
}
|
||||
}
|
||||
|
||||
if (cursor[no])
|
||||
SDL_FreeCursor(cursor[no]);
|
||||
cursor[no] = SDL_CreateCursor(buf3, buf4, 32, 32, cursordirentry->wxHotspot, cursordirentry->wyHotspot);
|
||||
|
||||
free(buf1);
|
||||
free(buf2);
|
||||
free(buf3);
|
||||
free(buf4);
|
||||
|
||||
#undef height
|
||||
#undef width
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void cursor_set_type(int type) {
|
||||
if (cursor[type] != NULL) {
|
||||
SDL_SetCursor(cursor[type]);
|
||||
}
|
||||
}
|
||||
|
||||
static CursorHeader cursorHeader;
|
||||
static TCursorDirEntry cursordirentry;
|
||||
@@ -293,7 +497,7 @@ static bool cursor_load_mono(uint8_t *d, int no) {
|
||||
pos += p1;
|
||||
|
||||
/* read pixedl data */
|
||||
if (!sdl_cursorNew(d + pos, no, &cursorImage, &cursordirentry)) {
|
||||
if (!cursor_new(d + pos, no, &cursorImage, &cursordirentry)) {
|
||||
WARNING("unable to read pixel data");
|
||||
return false;
|
||||
}
|
||||
|
||||
+3
-79
@@ -23,84 +23,8 @@
|
||||
#ifndef __CURSOR_H__
|
||||
#define __CURSOR_H__
|
||||
|
||||
#define BitSet(byte, bit) (((byte) & (bit)) == (bit))
|
||||
|
||||
typedef struct {
|
||||
short idReserved; /* always set to 0 */
|
||||
short idType; /* always set to 1 */
|
||||
short idCount; /* number of cursor images,always set to 1 */
|
||||
/* immediately followed by idCount TCursorDirEntries */
|
||||
} CursorHeader;
|
||||
|
||||
typedef struct {
|
||||
unsigned char bWidth; /* Width */
|
||||
unsigned char bHeight; /* Height */
|
||||
unsigned char bColorCount;
|
||||
unsigned char bReserved;
|
||||
unsigned short wxHotspot;
|
||||
unsigned short wyHotspot;
|
||||
unsigned long dwBytesInRes; /* total number of bytes in image */
|
||||
unsigned long dwImageOffset;
|
||||
} TCursorDirEntry;
|
||||
|
||||
typedef struct {
|
||||
long biSize; /* sizeof(TBitmapInfoHeader) */
|
||||
long biWidth; /* width of bitmap */
|
||||
long biHeight; /* height of bitmap, see notes */
|
||||
short biPlanes; /* planes, always 1 */
|
||||
short biBitCount; /* number of color bits */
|
||||
long biCompression; /* compression used, 0 */
|
||||
long biSizeImage; /* size of the pixel data, see notes */
|
||||
long biXPelsPerMeter; /* not used, 0 */
|
||||
long biYPelsPerMeter; /* not used, 0 */
|
||||
long biClrUsed; /* # of colors used, set to 0 */
|
||||
long biClrImportant; /* important colors, set to 0 */
|
||||
short hotX;
|
||||
short hotY;
|
||||
} TBitmapInfoHeader;
|
||||
|
||||
/*
|
||||
biHeight=2*TIconDirEntry.bHeight;
|
||||
biSizeImage=ANDmask + XORmask;
|
||||
|
||||
XORmask=(TIconDirEntry.bWidth * TIconDirEntry.bHeight * biBitCount)/8;
|
||||
ANDmask=(TIconDirEntry.bWidth * TIconDirEntry.bHeight)/8;
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
unsigned char rgbBlue; /* blue component of color */
|
||||
unsigned char rgbGreen; /* green component of color */
|
||||
unsigned char rgbRed; /* red component of color */
|
||||
unsigned char rgbReserved; /* reserved, 0 */
|
||||
} TRGBQuad;
|
||||
|
||||
typedef struct {
|
||||
TBitmapInfoHeader icHeader; /* image header info */
|
||||
TRGBQuad *icColors; /* image palette */
|
||||
int xormasklen;
|
||||
int andmasklen;
|
||||
} CursorImage;
|
||||
|
||||
typedef struct {
|
||||
int cbSizeof;
|
||||
int cFrames;
|
||||
int cSteps;
|
||||
int cx;
|
||||
int cy;
|
||||
int cBitCount;
|
||||
int cPlanes;
|
||||
int jiffRate;
|
||||
int fl;
|
||||
|
||||
int *rate;
|
||||
int *seq;
|
||||
} AnimationCursorHeader ;
|
||||
|
||||
typedef struct {
|
||||
AnimationCursorHeader *header;
|
||||
CursorImage *images;
|
||||
} AniCursorImage;
|
||||
|
||||
extern void cursor_load(int no, int linkno);
|
||||
void cursor_init(void);
|
||||
void cursor_load(int no, int linkno);
|
||||
void cursor_set_type(int type);
|
||||
|
||||
#endif /* __CURSOR_H__ */
|
||||
|
||||
+7
-6
@@ -31,7 +31,8 @@
|
||||
#include "debugger_private.h"
|
||||
#include "debug_symbol.h"
|
||||
#include "msgqueue.h"
|
||||
#include "sdl_core.h"
|
||||
#include "gfx.h"
|
||||
#include "event.h"
|
||||
#include "system.h"
|
||||
#include "nact.h"
|
||||
#include "variable.h"
|
||||
@@ -296,7 +297,7 @@ static void cmd_evaluate(cJSON *args, cJSON *resp) {
|
||||
}
|
||||
|
||||
static void cmd_continue(cJSON *args, cJSON *resp) {
|
||||
sdl_raiseWindow();
|
||||
gfx_raiseWindow();
|
||||
cJSON_AddBoolToObject(resp, "success", true);
|
||||
}
|
||||
|
||||
@@ -593,13 +594,13 @@ static int read_command_thread(void *data) {
|
||||
free(buf);
|
||||
break;
|
||||
}
|
||||
sdl_post_debugger_command(buf);
|
||||
event_post_debugger_command(buf);
|
||||
content_length = -1;
|
||||
} else {
|
||||
fprintf(stderr, "Unknown Debug Adapter Protocol header: %s", header);
|
||||
}
|
||||
}
|
||||
sdl_post_debugger_command(NULL); // end of messages
|
||||
event_post_debugger_command(NULL); // end of messages
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -617,7 +618,7 @@ static void dbg_dap_init(const char *path) {
|
||||
while (!initialized && !nact->is_quit) {
|
||||
SDL_Event e;
|
||||
SDL_WaitEvent(&e);
|
||||
sdl_handle_event(&e);
|
||||
event_handle_event(&e);
|
||||
while (!msgq_isempty(queue)) {
|
||||
char *msg = msgq_dequeue(queue);
|
||||
if (!msg)
|
||||
@@ -639,7 +640,7 @@ static void dbg_dap_repl(int bp_no) {
|
||||
while (continue_repl && !nact->is_quit) {
|
||||
SDL_Event e;
|
||||
SDL_WaitEvent(&e);
|
||||
sdl_handle_event(&e);
|
||||
event_handle_event(&e);
|
||||
while (!msgq_isempty(queue)) {
|
||||
char *msg = msgq_dequeue(queue);
|
||||
if (!msg)
|
||||
|
||||
@@ -29,7 +29,6 @@
|
||||
#include "system.h"
|
||||
#include "LittleEndian.h"
|
||||
#include "dri.h"
|
||||
#include "sdl_core.h"
|
||||
|
||||
static bool read_index(int volume, drifiles *d, FILE *fp) {
|
||||
fseek(fp, 0L, SEEK_END);
|
||||
@@ -142,7 +141,7 @@ static void warn_missing_ald(drifiles *d, int no) {
|
||||
} else {
|
||||
snprintf(msgbuf, sizeof(msgbuf), "Cannot read resource #%d.", no);
|
||||
}
|
||||
sdl_showMessageBox(MESSAGEBOX_WARNING, "xsystem35", msgbuf);
|
||||
sys_show_message_box(MESSAGEBOX_WARNING, "xsystem35", msgbuf);
|
||||
}
|
||||
|
||||
dridata *dri_getdata(drifiles *d, int no) {
|
||||
|
||||
+33
-33
@@ -27,7 +27,7 @@
|
||||
#include <math.h>
|
||||
|
||||
#include "portab.h"
|
||||
#include "sdl_core.h"
|
||||
#include "gfx.h"
|
||||
#include "input.h"
|
||||
#include "ags.h"
|
||||
#include "system.h"
|
||||
@@ -39,19 +39,19 @@ static bool ecp_cancel;
|
||||
#define EC_WAIT \
|
||||
if ((key |= sys_getInputInfo()) && ecp_cancel) break; \
|
||||
do { \
|
||||
int wait_ms = cnt - sdl_getTicks(); \
|
||||
int wait_ms = cnt - sys_get_ticks(); \
|
||||
if (wait_ms >= 16) \
|
||||
key = sys_keywait(wait_ms, ecp_cancel ? KEYWAIT_CANCELABLE : KEYWAIT_NONCANCELABLE); \
|
||||
} while (0)
|
||||
|
||||
|
||||
static void eCopyUpdateArea(int sx, int sy, int w, int h, int dx, int dy) {
|
||||
MyRectangle src = {sx, sy, w, h};
|
||||
MyPoint dst = {
|
||||
SDL_Rect src = {sx, sy, w, h};
|
||||
SDL_Point dst = {
|
||||
dx - nact->ags.view_area.x,
|
||||
dy - nact->ags.view_area.y
|
||||
};
|
||||
sdl_updateArea(&src, &dst);
|
||||
gfx_updateArea(&src, &dst);
|
||||
}
|
||||
|
||||
static int eCopyArea5(int sx, int sy, int w, int h, int dx, int dy, int opt) {
|
||||
@@ -60,7 +60,7 @@ static int eCopyArea5(int sx, int sy, int w, int h, int dx, int dy, int opt) {
|
||||
static int hx[16]={ 0,32,16,48, 0,32,16,48,16,48, 0,32,16,48, 0,32};
|
||||
static int hy[16]={ 0, 0,16,16,32,32,48,48, 0, 0,16,16,32,32,48,48};
|
||||
|
||||
cnt = sdl_getTicks();
|
||||
cnt = sys_get_ticks();
|
||||
for (i = 0; i < 16; i++) {
|
||||
cnt += waitcnt;
|
||||
for (y = 0; y < (h -63); y += 64) {
|
||||
@@ -81,7 +81,7 @@ static int eCopyArea6(int dx, int dy, int w, int h, int opt) {
|
||||
int i, x, y, key = 0, cnt;
|
||||
int waitcnt = opt == 0 ? 30 : opt;
|
||||
|
||||
cnt = sdl_getTicks();
|
||||
cnt = sys_get_ticks();
|
||||
for (i = 0; i < 7; i++) {
|
||||
cnt += waitcnt;
|
||||
for (x = 0; x < (w -63); x += 64) {
|
||||
@@ -105,18 +105,18 @@ static int eCopyArea9(int sx, int sy, int w, int h, int dx, int dy, int opt) {
|
||||
static int hintY[4] = {0,8,8,0};
|
||||
|
||||
|
||||
cnt = sdl_getTicks();
|
||||
cnt = sys_get_ticks();
|
||||
for (i = 0; i < 4; i++) {
|
||||
cnt+=waitcnt;
|
||||
for (y = 0; y < h -15; y+=16) {
|
||||
for (x = 0; x < (w -7); x+=16) {
|
||||
sdl_copyArea(sx + x + hintX[i],sy + y + hintY[i], 8, 8, dx + x + hintX[i], dy + y + hintY[i]);
|
||||
gfx_copyArea(sx + x + hintX[i],sy + y + hintY[i], 8, 8, dx + x + hintX[i], dy + y + hintY[i]);
|
||||
}
|
||||
}
|
||||
ags_updateArea(dx, dy, w, h);
|
||||
EC_WAIT;
|
||||
}
|
||||
sdl_copyArea(sx, sy, w, h, dx, dy);
|
||||
gfx_copyArea(sx, sy, w, h, dx, dy);
|
||||
ags_updateArea(dx, dy, w, h);
|
||||
return key;
|
||||
}
|
||||
@@ -125,7 +125,7 @@ static int eCopyArea16(int dx, int dy, int w, int h, int opt) {
|
||||
int i, x, key = 0, cnt;
|
||||
int waitcnt = opt == 0 ? 30 : opt;
|
||||
|
||||
cnt = sdl_getTicks();
|
||||
cnt = sys_get_ticks();
|
||||
for (i = 0; i < 8; i++) {
|
||||
cnt += waitcnt;
|
||||
for (x = 0; x < (w -15); x += 16) {
|
||||
@@ -143,7 +143,7 @@ static int eCopyArea17(int dx, int dy, int w, int h, int opt) {
|
||||
int waitcnt = opt == 0 ? 30 : opt;
|
||||
|
||||
#define E17X 18
|
||||
cnt = sdl_getTicks();
|
||||
cnt = sys_get_ticks();
|
||||
for (i = 0; i < E17X; i++) {
|
||||
cnt += waitcnt;
|
||||
for (y = 0; y < (h - E17X + 1); y += E17X) {
|
||||
@@ -159,7 +159,7 @@ static int eCopyArea22(int sx, int sy, int w, int h, int dx, int dy, int opt) {
|
||||
int i, x, y, key = 0, cnt;
|
||||
int waitcnt = opt == 0 ? 80 : opt;
|
||||
|
||||
cnt = sdl_getTicks();
|
||||
cnt = sys_get_ticks();
|
||||
for (i = 0; i < 2; i++) {
|
||||
cnt += waitcnt;
|
||||
for (y = 0; y < (h -3); y+=4) {
|
||||
@@ -184,12 +184,12 @@ static int eCopyArea23(int sx, int sy, int w, int h, int dx, int dy, int opt) {
|
||||
static int hintX[4] = {0,2,2,0};
|
||||
static int hintY[4] = {0,2,0,2};
|
||||
|
||||
cnt = sdl_getTicks();
|
||||
cnt = sys_get_ticks();
|
||||
for (i = 0; i < 4; i++) {
|
||||
cnt += waitcnt;
|
||||
for (y = 0; y < (h -3); y+=4) {
|
||||
for (x = 0; x < (w -3); x+=4) {
|
||||
sdl_copyArea(sx + x + hintX[i], sy + y + hintY[i], 2, 2,
|
||||
gfx_copyArea(sx + x + hintX[i], sy + y + hintY[i], 2, 2,
|
||||
dx + x + hintX[i], dy + y + hintY[i]);
|
||||
}
|
||||
}
|
||||
@@ -207,7 +207,7 @@ static int eCopyArea1000(int sx, int sy, int w, int h, int dx, int dy, int opt)
|
||||
}
|
||||
|
||||
static int eCopyArea2000(int sx, int sy, int w, int h, int dx, int dy, int opt) {
|
||||
sdl_fillRectangleRGB(dx, dy, w, h, 0, 0, 0);
|
||||
gfx_fillRectangleRGB(dx, dy, w, h, 0, 0, 0);
|
||||
ags_copyArea_alphaLevel(sx, sy, w, h, dx, dy, opt);
|
||||
ags_updateArea(dx, dy, w, h);
|
||||
return sys_getInputInfo();
|
||||
@@ -315,9 +315,9 @@ void ags_eCopyArea(int sx, int sy, int w, int h, int dx, int dy, int sw, int opt
|
||||
|
||||
if (sw == NACT_EFFECT_MAGNIFY) {
|
||||
SDL_Rect target_rect = { sx, sy, w, h };
|
||||
struct sdl_effect *eff = sdl_effect_magnify_init(sdl_getDIB(), &nact->ags.view_area, &target_rect);
|
||||
ags_runEffect(duration(sw, opt, NULL), cancel, (ags_EffectStepFunc)sdl_effect_step, eff);
|
||||
sdl_effect_finish(eff);
|
||||
struct effect *eff = effect_magnify_init(gfx_getDIB(), &nact->ags.view_area, &target_rect);
|
||||
ags_runEffect(duration(sw, opt, NULL), cancel, (ags_EffectStepFunc)effect_step, eff);
|
||||
effect_finish(eff);
|
||||
// Actual copy.
|
||||
ags_scaledCopyArea(
|
||||
sx, sy, w, h,
|
||||
@@ -326,24 +326,24 @@ void ags_eCopyArea(int sx, int sy, int w, int h, int dx, int dy, int sw, int opt
|
||||
return;
|
||||
}
|
||||
|
||||
enum sdl_effect_type sdl_effect = from_nact_effect(sw);
|
||||
if (sdl_effect != EFFECT_INVALID) {
|
||||
enum effect_type effect = from_nact_effect(sw);
|
||||
if (effect != EFFECT_INVALID) {
|
||||
SDL_Rect rect = { dx - nact->ags.view_area.x, dy - nact->ags.view_area.y, w, h };
|
||||
// Note that we specify NULL (which means sdl_texture) for the old
|
||||
// surface rather than sdl_getDIB(). This is to use the current display
|
||||
// Note that we specify NULL (which means gfx_texture) for the old
|
||||
// surface rather than gfx_getDIB(). This is to use the current display
|
||||
// contents, not reflecting uncommitted palette changes.
|
||||
struct sdl_effect *eff = sdl_effect_init(&rect, NULL, rect.x, rect.y, sdl_getDIB(), sx, sy, sdl_effect);
|
||||
ags_runEffect(duration(sw, opt, &rect), cancel, (ags_EffectStepFunc)sdl_effect_step, eff);
|
||||
sdl_effect_finish(eff);
|
||||
struct effect *eff = effect_init(&rect, NULL, rect.x, rect.y, gfx_getDIB(), sx, sy, effect);
|
||||
ags_runEffect(duration(sw, opt, &rect), cancel, (ags_EffectStepFunc)effect_step, eff);
|
||||
effect_finish(eff);
|
||||
|
||||
// Actual copy.
|
||||
switch (sw) {
|
||||
case NACT_EFFECT_FADEOUT:
|
||||
sdl_fillRectangleRGB(dx, dy, w, h, 0, 0, 0);
|
||||
gfx_fillRectangleRGB(dx, dy, w, h, 0, 0, 0);
|
||||
ags_updateArea(dx, dy, w, h);
|
||||
break;
|
||||
case NACT_EFFECT_WHITEOUT:
|
||||
sdl_fillRectangleRGB(dx, dy, w, h, 255, 255, 255);
|
||||
gfx_fillRectangleRGB(dx, dy, w, h, 255, 255, 255);
|
||||
ags_updateArea(dx, dy, w, h);
|
||||
break;
|
||||
default:
|
||||
@@ -363,7 +363,7 @@ void ags_eCopyArea(int sx, int sy, int w, int h, int dx, int dy, int sw, int opt
|
||||
case 54:
|
||||
ags_copyArea(sx, sy, w, h, dx, dy);
|
||||
{
|
||||
MyRectangle r = {dx, dy, w, h}, update;
|
||||
SDL_Rect r = {dx, dy, w, h}, update;
|
||||
SDL_IntersectRect(&nact->ags.view_area, &r, &update);
|
||||
w = update.w;
|
||||
h = update.h;
|
||||
@@ -431,15 +431,15 @@ void ags_eSpriteCopyArea(int sx, int sy, int w, int h, int dx, int dy, int sw, i
|
||||
return;
|
||||
}
|
||||
|
||||
enum sdl_effect_type type = from_nact_sprite_effect(sw);
|
||||
enum effect_type type = from_nact_sprite_effect(sw);
|
||||
if (type == EFFECT_INVALID) {
|
||||
WARNING("Invalid effect: %d", sw);
|
||||
return;
|
||||
}
|
||||
SDL_Rect rect = { dx - nact->ags.view_area.x, dy - nact->ags.view_area.y, w, h };
|
||||
struct sdl_effect *eff = sdl_sprite_effect_init(&rect, dx, dy, sx, sy, spCol, type);
|
||||
ags_runEffect(duration(sw, opt, &rect), cancel, (ags_EffectStepFunc)sdl_effect_step, eff);
|
||||
sdl_effect_finish(eff);
|
||||
struct effect *eff = sprite_effect_init(&rect, dx, dy, sx, sy, spCol, type);
|
||||
ags_runEffect(duration(sw, opt, &rect), cancel, (ags_EffectStepFunc)effect_step, eff);
|
||||
effect_finish(eff);
|
||||
// Actual copy.
|
||||
if (sw == 5) {
|
||||
ags_copyArea_shadow(sx, sy, w, h, dx, dy);
|
||||
|
||||
@@ -21,10 +21,12 @@
|
||||
#include <string.h>
|
||||
#include <SDL.h>
|
||||
|
||||
#include "sdl_core.h"
|
||||
#include "sdl_private.h"
|
||||
#include "editor.h"
|
||||
#include "event.h"
|
||||
#include "gfx.h"
|
||||
#include "menu.h"
|
||||
#include "nact.h"
|
||||
#include "system.h"
|
||||
|
||||
#define XMARGIN 3
|
||||
#define YMARGIN 2
|
||||
@@ -53,13 +55,13 @@ static void redraw() {
|
||||
};
|
||||
|
||||
if (*input->text) {
|
||||
int w = sdl_drawString(r.x, r.y, input->text, fgcolor).w;
|
||||
int w = gfx_drawString(r.x, r.y, input->text, fgcolor).w;
|
||||
r.x += w;
|
||||
r.w -= w;
|
||||
}
|
||||
|
||||
if (*input->composingText) {
|
||||
int w = sdl_drawString(r.x, r.y, input->composingText, fgcolor).w;
|
||||
int w = gfx_drawString(r.x, r.y, input->composingText, fgcolor).w;
|
||||
ags_fillRectangle(r.x, r.y + r.h, w, 2, fgcolor); // underline
|
||||
}
|
||||
|
||||
@@ -129,7 +131,7 @@ static bool handle_event(const SDL_Event *e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool sdl_inputString(INPUTSTRING_PARAM *p) {
|
||||
bool edit_string(INPUTSTRING_PARAM *p) {
|
||||
static char *buf;
|
||||
free(buf);
|
||||
buf = malloc(p->max * MAX_UTF8_BYTES_PAR_CHAR + 1);
|
||||
@@ -153,14 +155,14 @@ bool sdl_inputString(INPUTSTRING_PARAM *p) {
|
||||
ags_setFont(FONT_GOTHIC, p->h);
|
||||
redraw();
|
||||
|
||||
sdl_custom_event_handler = handle_event;
|
||||
event_custom_handler = handle_event;
|
||||
while (!input->done) {
|
||||
sdl_getKeyInfo(); // message pump
|
||||
event_get_key(); // message pump
|
||||
nact->callback();
|
||||
sdl_wait_vsync();
|
||||
sys_wait_vsync();
|
||||
}
|
||||
SDL_StopTextInput();
|
||||
sdl_custom_event_handler = NULL;
|
||||
event_custom_handler = NULL;
|
||||
|
||||
ags_restoreRegion(saved_region, s.rect.x, s.rect.y);
|
||||
ags_updateArea(s.rect.x, s.rect.y, s.rect.w, s.rect.h);
|
||||
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright (C) 2025 kichikuou <KichikuouChrome@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
#ifndef __EDITOR_H__
|
||||
#define __EDITOR_H__
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
struct inputstring_param;
|
||||
|
||||
bool edit_string(struct inputstring_param *);
|
||||
|
||||
#endif // __EDITOR_H__
|
||||
+275
-274
File diff suppressed because it is too large
Load Diff
+15
-4
@@ -20,6 +20,9 @@
|
||||
#ifndef __EFFECT_H__
|
||||
#define __EFFECT_H__
|
||||
|
||||
#include <SDL_surface.h>
|
||||
#include "ags.h"
|
||||
|
||||
// Effect types of the CE/CD command.
|
||||
enum nact_effect {
|
||||
NACT_EFFECT_PAN_IN_DOWN = 1,
|
||||
@@ -116,7 +119,7 @@ enum sact_effect {
|
||||
};
|
||||
|
||||
// Internal effect numbers.
|
||||
enum sdl_effect_type {
|
||||
enum effect_type {
|
||||
EFFECT_INVALID,
|
||||
EFFECT_CROSSFADE,
|
||||
EFFECT_FADEOUT,
|
||||
@@ -186,8 +189,16 @@ enum sdl_effect_type {
|
||||
EFFECT_SACTAMASK,
|
||||
};
|
||||
|
||||
enum sdl_effect_type from_nact_effect(enum nact_effect effect);
|
||||
enum sdl_effect_type from_nact_sprite_effect(enum nact_effect effect);
|
||||
enum sdl_effect_type from_sact_effect(enum sact_effect effect);
|
||||
enum effect_type from_nact_effect(enum nact_effect effect);
|
||||
enum effect_type from_nact_sprite_effect(enum nact_effect effect);
|
||||
enum effect_type from_sact_effect(enum sact_effect effect);
|
||||
|
||||
struct effect;
|
||||
struct effect *effect_init(SDL_Rect *rect, surface_t *old, int ox, int oy, surface_t *new, int nx, int ny, enum effect_type effect);
|
||||
struct effect *sprite_effect_init(SDL_Rect *rect, int dx, int dy, int sx, int sy, int col, enum effect_type type);
|
||||
struct effect *effect_magnify_init(surface_t *surface, SDL_Rect *view_rect, SDL_Rect *target_rect);
|
||||
struct effect *effect_sactamask_init(SDL_Surface *mask);
|
||||
void effect_step(struct effect *eff, float progress);
|
||||
void effect_finish(struct effect *eff);
|
||||
|
||||
#endif /* __EFFECT_H__ */
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
/*
|
||||
* sdl_darw.c SDL event handler
|
||||
*
|
||||
* Copyright (C) 2000- Fumihiko Murata <fmurata@p1.tcnet.ne.jp>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@@ -18,7 +16,6 @@
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
/* $Id: sdl_event.c,v 1.5 2001/12/16 17:12:56 chikama Exp $ */
|
||||
|
||||
#include "config.h"
|
||||
|
||||
@@ -31,21 +28,24 @@
|
||||
#include <emscripten.h>
|
||||
#endif
|
||||
|
||||
#include "event.h"
|
||||
#include "portab.h"
|
||||
#include "system.h"
|
||||
#include "debugger.h"
|
||||
#include "nact.h"
|
||||
#include "sdl_core.h"
|
||||
#include "sdl_private.h"
|
||||
#include "gfx.h"
|
||||
#include "gfx_private.h"
|
||||
#include "scheduler.h"
|
||||
#include "menu.h"
|
||||
#include "input.h"
|
||||
#include "msgskip.h"
|
||||
#include "hacks.h"
|
||||
|
||||
static void sdl_getEvent(void);
|
||||
static void get_event(void);
|
||||
static void keyEventProsess(SDL_KeyboardEvent *e, bool pressed);
|
||||
|
||||
bool (*event_custom_handler)(const SDL_Event *);
|
||||
|
||||
static uint32_t custom_event_type = (uint32_t)-1;
|
||||
|
||||
enum CustomEventCode {
|
||||
@@ -61,7 +61,7 @@ bool RawKeyInfo[256];
|
||||
/* SDL Joystick */
|
||||
static int joyinfo=0;
|
||||
|
||||
static int sdl_keytable[SDL_NUM_SCANCODES] = {
|
||||
static int keytable[SDL_NUM_SCANCODES] = {
|
||||
[SDL_SCANCODE_A] = KEY_A,
|
||||
[SDL_SCANCODE_B] = KEY_B,
|
||||
[SDL_SCANCODE_C] = KEY_C,
|
||||
@@ -183,9 +183,53 @@ static int sdl_keytable[SDL_NUM_SCANCODES] = {
|
||||
[SDL_SCANCODE_RALT] = KEY_ALT,
|
||||
};
|
||||
|
||||
void sdl_event_init(void) {
|
||||
static int joy_device_index = -1;
|
||||
static SDL_Joystick *js;
|
||||
|
||||
static bool joy_open(int index) {
|
||||
if (js)
|
||||
return false;
|
||||
|
||||
js = SDL_JoystickOpen(index);
|
||||
if (!js)
|
||||
return false;
|
||||
|
||||
const char *name = SDL_JoystickName(js);
|
||||
int axes = SDL_JoystickNumAxes(js);
|
||||
int buttons = SDL_JoystickNumButtons(js);
|
||||
SDL_JoystickEventState(SDL_ENABLE);
|
||||
NOTICE("SDL joystick '%s' %d axes %d buttons", name, axes, buttons);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool joy_init(void) {
|
||||
SDL_Init(SDL_INIT_JOYSTICK);
|
||||
|
||||
if (joy_device_index >= 0)
|
||||
return joy_open(joy_device_index);
|
||||
|
||||
for (int i = 0; i < SDL_NumJoysticks(); i++) {
|
||||
if (joy_open(i))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void event_init(void) {
|
||||
if (custom_event_type == (uint32_t)-1)
|
||||
custom_event_type = SDL_RegisterEvents(1);
|
||||
joy_init();
|
||||
}
|
||||
|
||||
void event_remove(void) {
|
||||
if (js) {
|
||||
SDL_JoystickClose(js);
|
||||
js = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void event_set_joy_device_index(int index) {
|
||||
joy_device_index = index;
|
||||
}
|
||||
|
||||
static int mouse_to_rawkey(int button) {
|
||||
@@ -232,7 +276,34 @@ void send_agsevent(enum agsevent_type type, int code) {
|
||||
#endif
|
||||
}
|
||||
|
||||
void sdl_setCursorInternalLocation(int x, int y) {
|
||||
void event_set_mouse_location(int x, int y) {
|
||||
// scale mouse x and y
|
||||
float scalex, scaley;
|
||||
SDL_RenderGetScale(gfx_renderer, &scalex, &scaley);
|
||||
x *= scalex;
|
||||
y *= scaley;
|
||||
|
||||
// calculate window borders
|
||||
int logw, logh;
|
||||
SDL_RenderGetLogicalSize(gfx_renderer, &logw, &logh);
|
||||
|
||||
float scalew, scaleh;
|
||||
scalew = logw * scalex;
|
||||
scaleh = logh * scaley;
|
||||
|
||||
int winw, winh;
|
||||
SDL_GetWindowSize(gfx_window, &winw, &winh);
|
||||
|
||||
float border_left = (winw - scalew) / 2;
|
||||
float border_top = (winh - scaleh) / 2;
|
||||
|
||||
// offset x and y by window borders
|
||||
x += border_left;
|
||||
y += border_top;
|
||||
SDL_WarpMouseInWindow(gfx_window, x, y);
|
||||
}
|
||||
|
||||
void event_set_mouse_internal_location(int x, int y) {
|
||||
mousex = x;
|
||||
mousey = y;
|
||||
send_agsevent(AGSEVENT_MOUSE_MOTION, 0);
|
||||
@@ -281,8 +352,8 @@ static void rance4v2_hack(void) {
|
||||
cancel_yield();
|
||||
}
|
||||
|
||||
void sdl_handle_event(SDL_Event *e) {
|
||||
if (sdl_custom_event_handler && sdl_custom_event_handler(e))
|
||||
void event_handle_event(SDL_Event *e) {
|
||||
if (event_custom_handler && event_custom_handler(e))
|
||||
return;
|
||||
|
||||
switch (e->type) {
|
||||
@@ -293,7 +364,7 @@ void sdl_handle_event(SDL_Event *e) {
|
||||
case SDL_WINDOWEVENT:
|
||||
switch (e->window.event) {
|
||||
case SDL_WINDOWEVENT_EXPOSED:
|
||||
sdl_dirty = true;
|
||||
gfx_dirty = true;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@@ -303,7 +374,7 @@ void sdl_handle_event(SDL_Event *e) {
|
||||
break;
|
||||
#endif
|
||||
case SDL_APP_DIDENTERFOREGROUND:
|
||||
sdl_dirty = true;
|
||||
gfx_dirty = true;
|
||||
break;
|
||||
case SDL_KEYDOWN:
|
||||
keyEventProsess(&e->key, true);
|
||||
@@ -315,7 +386,7 @@ void sdl_handle_event(SDL_Event *e) {
|
||||
msgskip_activate(!msgskip_isActivated());
|
||||
break;
|
||||
case SDLK_F4:
|
||||
sdl_setFullscreen(!sdl_fs_on);
|
||||
gfx_setFullscreen(!gfx_fullscreen);
|
||||
break;
|
||||
}
|
||||
#ifdef __ANDROID__
|
||||
@@ -325,7 +396,7 @@ void sdl_handle_event(SDL_Event *e) {
|
||||
#endif
|
||||
break;
|
||||
case SDL_MOUSEMOTION:
|
||||
sdl_setCursorInternalLocation(e->motion.x, e->motion.y);
|
||||
event_set_mouse_internal_location(e->motion.x, e->motion.y);
|
||||
#ifdef _WIN32
|
||||
win_menu_onMouseMotion(e->motion.x, e->motion.y);
|
||||
#endif
|
||||
@@ -400,7 +471,7 @@ void sdl_handle_event(SDL_Event *e) {
|
||||
break;
|
||||
|
||||
case SDL_JOYDEVICEADDED:
|
||||
sdl_joy_open(e->jdevice.which);
|
||||
joy_open(e->jdevice.which);
|
||||
break;
|
||||
|
||||
case SDL_JOYAXISMOTION:
|
||||
@@ -479,7 +550,7 @@ void sdl_handle_event(SDL_Event *e) {
|
||||
}
|
||||
|
||||
/* Event処理 */
|
||||
static void sdl_getEvent(void) {
|
||||
static void get_event(void) {
|
||||
enum scheduler_event scheduler_event = SCHEDULER_EVENT_INPUT_CHECK_MISS;
|
||||
|
||||
fire_deferred_touch_event();
|
||||
@@ -487,7 +558,7 @@ static void sdl_getEvent(void) {
|
||||
SDL_Event e;
|
||||
while (SDL_PollEvent(&e)) {
|
||||
scheduler_event = SCHEDULER_EVENT_INPUT_CHECK_HIT;
|
||||
sdl_handle_event(&e);
|
||||
event_handle_event(&e);
|
||||
}
|
||||
scheduler_on_event(scheduler_event);
|
||||
if (game_id == GAME_RANCE4_V2)
|
||||
@@ -496,15 +567,15 @@ static void sdl_getEvent(void) {
|
||||
|
||||
/* キー情報の取得 */
|
||||
static void keyEventProsess(SDL_KeyboardEvent *e, bool pressed) {
|
||||
int code = sdl_keytable[e->keysym.scancode];
|
||||
int code = keytable[e->keysym.scancode];
|
||||
RawKeyInfo[code] = pressed;
|
||||
send_agsevent(pressed ? AGSEVENT_KEY_PRESS : AGSEVENT_KEY_RELEASE, code);
|
||||
}
|
||||
|
||||
int sdl_getKeyInfo() {
|
||||
int event_get_key(void) {
|
||||
int rt;
|
||||
|
||||
sdl_getEvent();
|
||||
get_event();
|
||||
|
||||
rt = ((RawKeyInfo[KEY_UP] || RawKeyInfo[KEY_PAD_8]) |
|
||||
((RawKeyInfo[KEY_DOWN] || RawKeyInfo[KEY_PAD_2]) << 1) |
|
||||
@@ -518,8 +589,8 @@ int sdl_getKeyInfo() {
|
||||
return rt;
|
||||
}
|
||||
|
||||
int sdl_getMouseInfo(MyPoint *p) {
|
||||
sdl_getEvent();
|
||||
int event_get_mouse(SDL_Point *p) {
|
||||
get_event();
|
||||
|
||||
if (p) {
|
||||
p->x = mousex;
|
||||
@@ -531,7 +602,7 @@ int sdl_getMouseInfo(MyPoint *p) {
|
||||
return m1 | m2;
|
||||
}
|
||||
|
||||
void sdl_getWheelInfo(int *forward, int *back) {
|
||||
void event_get_wheel(int *forward, int *back) {
|
||||
*forward = mouse_wheel_up;
|
||||
*back = mouse_wheel_down;
|
||||
|
||||
@@ -540,16 +611,16 @@ void sdl_getWheelInfo(int *forward, int *back) {
|
||||
#endif
|
||||
}
|
||||
|
||||
void sdl_clearWheelInfo(void) {
|
||||
void event_clear_wheel(void) {
|
||||
mouse_wheel_up = mouse_wheel_down = 0;
|
||||
}
|
||||
|
||||
int sdl_getJoyInfo(void) {
|
||||
sdl_getEvent();
|
||||
int event_get_joy(void) {
|
||||
get_event();
|
||||
return joyinfo;
|
||||
}
|
||||
|
||||
void sdl_post_debugger_command(void *data) {
|
||||
void event_post_debugger_command(void *data) {
|
||||
SDL_Event event = {
|
||||
.user = {
|
||||
.type = custom_event_type,
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user