15 Commits

Author SHA1 Message Date
tomchukk e033fd1488 Update Jenkinsfile 2025-01-25 18:23:20 +02:00
tomchukk bde4926c5f Update Jenkinsfile 2025-01-25 18:22:29 +02:00
tomchukk c69e1e7a29 Update Dockerfile 2025-01-25 17:54:13 +02:00
tomchukk 41d47fd6bd Update Jenkinsfile 2025-01-25 17:51:20 +02:00
tomchukk 3c30af0099 Add Jenkinsfile-prod 2025-01-25 17:49:15 +02:00
dvtzr 24b536857b Finished UI translation
check releases for info
2025-01-23 16:44:08 +02:00
dvtzr 682e0d660d Halfway Graphical Point Release
i put all of the details in the new release
2025-01-19 18:47:35 +02:00
dvtzr 5ba5cefd23 akai is done yayyy
and with that all of the main routes are done. next up will be putting all of the actual assets in and also the secret endings. wahoo
2025-01-12 17:37:18 +02:00
dvtzr 5496b76370 final part of shiro's route! akai route is next 2025-01-08 18:40:17 +02:00
dvtzr c2348fa700 part 3 of shiro's route wahoo
next up are the endings. whoo
2025-01-07 15:00:26 +02:00
dvtzr 35c7ef0cb6 shiro route part 2
second part is done! probably will come back to it to see if we can bridge it in a nicer way. tomorrow we end this route (hopefully)
2025-01-06 22:53:58 +02:00
dvtzr 8f545fb137 got the hang of this
okay Now it should be working fine!! i think!! i hope!!
all of the new UI updates, aswell as the script being done up to aoi's route and a bit further (with the start to shiro's route). wahoo
2025-01-05 18:41:37 +02:00
dvtzr 061f9d23c1 test
god i hope this works
2025-01-05 18:33:23 +02:00
tomchukk 4b53ac3001 Update README.md 2024-10-07 13:01:05 +03:00
tomchukk 1f7a40d8a8 updated file url 2024-10-06 22:44:56 +03:00
172 changed files with 4509 additions and 199 deletions
+3
View File
@@ -0,0 +1,3 @@
{
"CurrentProjectSetting": null
}
+8
View File
@@ -0,0 +1,8 @@
{
"ExpandedNodes": [
"",
"\\game"
],
"SelectedNode": "\\game\\shiro_route.rpy",
"PreviewInSolutionExplorer": false
}
Binary file not shown.
BIN
View File
Binary file not shown.
Vendored
+12 -2
View File
@@ -19,7 +19,7 @@ pipeline {
} }
stage('Download Latest release') { stage('Download Latest release') {
steps { steps {
sh 'curl -LO https://git.ruff.co.il/amai.ig/otomai/releases/latest/download/Otomai-web.zip' sh 'curl -LO https://git.ruff.co.il/amai.ig/otomai/releases/download/latest/Otomai-web.zip'
} }
} }
stage('Create web game directory') { stage('Create web game directory') {
@@ -57,7 +57,7 @@ pipeline {
} }
stage('Clean Old Container') { stage('Clean Old Container') {
steps { steps {
catchError(buildResult: 'SUCCESS',message: 'Container doesn\'t exist on host, skipping...', stageResult: 'ABORTED') { catchError(buildResult: 'SUCCESS', message: 'Container doesn\'t exist on host, skipping...', stageResult: 'ABORTED') {
sh 'docker stop otomai' sh 'docker stop otomai'
sh 'docker rm otomai' sh 'docker rm otomai'
} }
@@ -80,4 +80,14 @@ pipeline {
} }
} }
} }
post {
success {
// Trigger the deploy-prod-job on success of the build
build job: 'otomai-prod', wait: false
}
failure {
// Optionally, you can handle failure scenarios (e.g., notify team, etc.)
echo "Build failed, deployment not triggered."
}
}
} }
+31
View File
@@ -0,0 +1,31 @@
pipeline {
agent {
label 'prod' // Runs on a node labeled 'prod'
}
stages {
stage('Clean Old Container') {
steps {
script {
catchError(buildResult: 'SUCCESS', message: 'Container doesn\'t exist on host, skipping...', stageResult: 'ABORTED') {
sh 'docker stop game-pod1'
sh 'docker rm game-pod1'
}
}
}
}
stage('Run new container in Production') {
steps {
script {
// Define registry credentials and image name
def registryCredentialsId = '7e506860-ca64-47bd-92a8-1a591dd12cba'
def imageName = 'git.ruff.co.il/amai.ig/otomai:latest'
// Login to registry and run container in prod environment
docker.withRegistry('https://git.ruff.co.il', registryCredentialsId) {
docker.image(imageName).run('-p 22443:80 --name game-pod1')
}
}
}
}
}
}
+62 -2
View File
@@ -1,2 +1,62 @@
# otomai # Otomai: A Harucon Easter Egg ✨
short amai visual novel
**Otomai** is a short Ren'Py visual novel game created as a secret easter egg for the Israeli anime and sci-fi convention, Harucon.
This project is a single-player, narrative-driven experience built with the Ren'Py visual novel engine.
**Note:** This game is currently intended as a web experience running inside a Docker container.
### Features
* Short, interactive visual novel experience
* Original story and characters
* A fun (hopefully!) surprise for Harucon attendees
### Getting Started
**Prerequisites**
**For building the game from source**
* Python3 installed
* Ren'Py installed
**For running the game inside a docker container**
* Docker installed on your system. You can find installation instructions for your OS on the official Docker website: [https://www.docker.com/products/docker-desktop/](https://www.docker.com/products/docker-desktop/)
**Building the Game**
1. Clone this repository:
```
git clone https://git.ruff.co.il/amai.ig/otomai.git
```
2. Using Ren'Py, load the source and build for your desired platform.
3. Run the final compiled result.
**Running the game inside a docker container**
1. Pull the docker image:
```
docker pull git.ruff.co.il/amai.ig/otomai:latest
```
2. Start a container with port 5000 exposed:
```
docker run git.ruff.co.il/amai.ig/otomai:latest -p 5000:80 --name otomai
```
3. Open your web browser and navigate to `http://docker-host:5000`
This should launch the Otomai game within your web browser.
### Contributing
We welcome contributions to this project! If you'd like to help with development, please open a pull request on this repository.
### License
This project is licensed under the MIT License. See the `LICENSE` file for details.
### Contact
For any questions or feedback, feel free to open an issue on this repository.
We hope you enjoy your Otomai experience!
+3 -7
View File
@@ -2,13 +2,9 @@
errors listed below, and try again. errors listed below, and try again.
File "game/script.rpy", line 44: choice menuitem expects a non-empty block. File "game/screens.rpy", line 1184: 'gui' is not a keyword argument or valid child of the screen statement.
"אני גם אוהב פפסי": gui.ARE_YOU_SURE:
^
File "game/script.rpy", line 47: Line is indented, but the preceding jump statement statement does not expect a block. Please check this line's indentation. You may have forgotten a colon (:).
"אני לא אוהב פפסי":
^ ^
Ren'Py Version: Ren'Py 8.3.2.24090902 Ren'Py Version: Ren'Py 8.3.2.24090902
Sat Sep 28 09:59:45 2024 Thu Jan 23 15:49:22 2025
+135
View File
@@ -0,0 +1,135 @@
{
"files.exclude": {
"**/*.rpyc": true,
"**/*.rpa": true,
"**/*.rpymc": true,
"**/cache/": true
},
"editor.tokenColorCustomizations": {
"textMateRules": [
{
"scope": "renpy.meta.plain",
"settings": {
"fontStyle": ""
}
},
{
"scope": "renpy.meta.i",
"settings": {
"fontStyle": "italic"
}
},
{
"scope": "renpy.meta.b",
"settings": {
"fontStyle": "bold"
}
},
{
"scope": [
"renpy.meta.u",
"renpy.meta.a"
],
"settings": {
"fontStyle": "underline"
}
},
{
"scope": "renpy.meta.s",
"settings": {
"fontStyle": "strikethrough"
}
},
{
"scope": "renpy.meta.i renpy.meta.b",
"settings": {
"fontStyle": "italic bold"
}
},
{
"scope": "renpy.meta.i renpy.meta.u",
"settings": {
"fontStyle": "italic underline"
}
},
{
"scope": "renpy.meta.i renpy.meta.s",
"settings": {
"fontStyle": "italic strikethrough"
}
},
{
"scope": "renpy.meta.b renpy.meta.u",
"settings": {
"fontStyle": "bold underline"
}
},
{
"scope": "renpy.meta.b renpy.meta.s",
"settings": {
"fontStyle": "bold strikethrough"
}
},
{
"scope": "renpy.meta.u renpy.meta.s",
"settings": {
"fontStyle": "underline strikethrough"
}
},
{
"scope": "renpy.meta.i renpy.meta.b renpy.meta.u",
"settings": {
"fontStyle": "italic bold underline"
}
},
{
"scope": "renpy.meta.i renpy.meta.b renpy.meta.s",
"settings": {
"fontStyle": "italic bold strikethrough"
}
},
{
"scope": "renpy.meta.i renpy.meta.u renpy.meta.s",
"settings": {
"fontStyle": "italic underline strikethrough"
}
},
{
"scope": "renpy.meta.b renpy.meta.u renpy.meta.s",
"settings": {
"fontStyle": "bold underline strikethrough"
}
},
{
"scope": "renpy.meta.i renpy.meta.b renpy.meta.u renpy.meta.s",
"settings": {
"fontStyle": "italic bold underline strikethrough"
}
},
{
"scope": "renpy.meta.color.text",
"settings": {
"foreground": "#ffffff"
}
},
{
"scope": "renpy.meta.color.#fff",
"settings": {
"foreground": "#fff"
}
},
{
"scope": "renpy.meta.color.#ff0000",
"settings": {
"foreground": "#ff0000"
}
},
{
"scope": "renpy.meta.color.#5e9cff",
"settings": {
"foreground": "#5e9cff"
}
}
]
}
}
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1349
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.
+1074
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+11
View File
@@ -0,0 +1,11 @@
renpy.dissolve renpy.dissolve
renpy.solid
renpy.ftl
renpy.alpha renpy.geometry renpy.texture
renpy.dissolve renpy.geometry
renpy.matrixcolor renpy.texture
+19 -19
View File
@@ -30,11 +30,11 @@ define config.check_conflicting_properties = True
define gui.accent_color = '#990000' define gui.accent_color = '#990000'
## The color used for a text button when it is neither selected nor hovered. ## The color used for a text button when it is neither selected nor hovered.
define gui.idle_color = '#707070' define gui.idle_color = '#ffffff'
## The small color is used for small text, which needs to be brighter/darker to ## The small color is used for small text, which needs to be brighter/darker to
## achieve the same effect. ## achieve the same effect.
define gui.idle_small_color = '#606060' define gui.idle_small_color = '#e2e2e2'
## The color that is used for buttons and bars that are hovered. ## The color that is used for buttons and bars that are hovered.
define gui.hover_color = '#990000' define gui.hover_color = '#990000'
@@ -52,20 +52,20 @@ define gui.muted_color = '#c16666'
define gui.hover_muted_color = '#d69999' define gui.hover_muted_color = '#d69999'
## The colors used for dialogue and menu choice text. ## The colors used for dialogue and menu choice text.
define gui.text_color = '#404040' define gui.text_color = '#ffffff'
define gui.interface_text_color = '#404040' define gui.interface_text_color = '#858585'
## Fonts and Font Sizes ######################################################## ## Fonts and Font Sizes ########################################################
## The font used for in-game text. ## The font used for in-game text.
define gui.text_font = "DejaVuSans.ttf" define gui.text_font = "Assistant-Regular.ttf"
## The font used for character names. ## The font used for character names.
define gui.name_text_font = "DejaVuSans.ttf" define gui.name_text_font = "Rubik-ExtraBold.ttf"
## The font used for out-of-game text. ## The font used for out-of-game text.
define gui.interface_text_font = "DejaVuSans.ttf" define gui.interface_text_font = "Assistant-Bold.ttf"
## The size of normal dialogue text. ## The size of normal dialogue text.
define gui.text_size = 33 define gui.text_size = 33
@@ -108,12 +108,12 @@ define gui.textbox_yalign = 1.0
## The placement of the speaking character's name, relative to the textbox. ## The placement of the speaking character's name, relative to the textbox.
## These can be a whole number of pixels from the left or top, or 0.5 to center. ## These can be a whole number of pixels from the left or top, or 0.5 to center.
define gui.name_xpos = 360 define gui.name_xpos = 0.82
define gui.name_ypos = 0 define gui.name_ypos = 0
## The horizontal alignment of the character's name. This can be 0.0 for left- ## The horizontal alignment of the character's name. This can be 0.0 for left-
## aligned, 0.5 for centered, and 1.0 for right-aligned. ## aligned, 0.5 for centered, and 1.0 for right-aligned.
define gui.name_xalign = 0.0 define gui.name_xalign = 1.0
## The width, height, and borders of the box containing the character's name, or ## The width, height, and borders of the box containing the character's name, or
## None to automatically size it. ## None to automatically size it.
@@ -132,7 +132,7 @@ define gui.namebox_tile = False
## The placement of dialogue relative to the textbox. These can be a whole ## The placement of dialogue relative to the textbox. These can be a whole
## number of pixels relative to the left or top side of the textbox, or 0.5 to ## number of pixels relative to the left or top side of the textbox, or 0.5 to
## center. ## center.
define gui.dialogue_xpos = 402 define gui.dialogue_xpos = 0.75
define gui.dialogue_ypos = 75 define gui.dialogue_ypos = 75
## The maximum width of dialogue text, in pixels. ## The maximum width of dialogue text, in pixels.
@@ -140,7 +140,7 @@ define gui.dialogue_width = 1116
## The horizontal alignment of the dialogue text. This can be 0.0 for left- ## The horizontal alignment of the dialogue text. This can be 0.0 for left-
## aligned, 0.5 for centered, and 1.0 for right-aligned. ## aligned, 0.5 for centered, and 1.0 for right-aligned.
define gui.dialogue_text_xalign = 0.0 define gui.dialogue_text_xalign = 1.0
## Buttons ##################################################################### ## Buttons #####################################################################
@@ -173,7 +173,7 @@ define gui.button_text_insensitive_color = gui.insensitive_color
## The horizontal alignment of the button text. (0.0 is left, 0.5 is center, 1.0 ## The horizontal alignment of the button text. (0.0 is left, 0.5 is center, 1.0
## is right). ## is right).
define gui.button_text_xalign = 0.0 define gui.button_text_xalign = 1.0
## These variables override settings for different kinds of buttons. Please see ## These variables override settings for different kinds of buttons. Please see
@@ -190,7 +190,7 @@ define gui.confirm_button_text_xalign = 0.5
define gui.page_button_borders = Borders(15, 6, 15, 6) define gui.page_button_borders = Borders(15, 6, 15, 6)
define gui.quick_button_borders = Borders(15, 6, 15, 0) define gui.quick_button_borders = Borders(15, 6, 15, 5)
define gui.quick_button_text_size = 21 define gui.quick_button_text_size = 21
define gui.quick_button_text_idle_color = gui.idle_small_color define gui.quick_button_text_idle_color = gui.idle_small_color
define gui.quick_button_text_selected_color = gui.accent_color define gui.quick_button_text_selected_color = gui.accent_color
@@ -250,7 +250,7 @@ define gui.file_slot_rows = 2
## The position of the left side of the navigation buttons, relative to the left ## The position of the left side of the navigation buttons, relative to the left
## side of the screen. ## side of the screen.
define gui.navigation_xpos = 60 define gui.navigation_xpos = 200
## The vertical position of the skip indicator. ## The vertical position of the skip indicator.
define gui.skip_ypos = 15 define gui.skip_ypos = 15
@@ -389,17 +389,17 @@ define gui.nvl_name_width = 225
define gui.nvl_name_xalign = 1.0 define gui.nvl_name_xalign = 1.0
## The position, width, and alignment of the dialogue text. ## The position, width, and alignment of the dialogue text.
define gui.nvl_text_xpos = 675 define gui.nvl_text_xpos = 1400
define gui.nvl_text_ypos = 12 define gui.nvl_text_ypos = 40
define gui.nvl_text_width = 885 define gui.nvl_text_width = 1000
define gui.nvl_text_xalign = 0.0 define gui.nvl_text_xalign = 1.0
## The position, width, and alignment of nvl_thought text (the text said by the ## The position, width, and alignment of nvl_thought text (the text said by the
## nvl_narrator character.) ## nvl_narrator character.)
define gui.nvl_thought_xpos = 360 define gui.nvl_thought_xpos = 360
define gui.nvl_thought_ypos = 0 define gui.nvl_thought_ypos = 0
define gui.nvl_thought_width = 1170 define gui.nvl_thought_width = 1170
define gui.nvl_thought_xalign = 0.0 define gui.nvl_thought_xalign = 1.0
## The position of nvl menu_buttons. ## The position of nvl menu_buttons.
define gui.nvl_button_xpos = 675 define gui.nvl_button_xpos = 675
BIN
View File
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 904 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 1.0 MiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 668 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 502 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 506 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 550 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 620 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 780 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 834 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

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