Compare commits
10 Commits
4b5f11969b
...
feature/14
| Author | SHA1 | Date | |
|---|---|---|---|
| 2297f1b6e0 | |||
| 5ae1eec48a | |||
| 8921f02821 | |||
| 211af18c26 | |||
| b337ae8516 | |||
| 10316d3075 | |||
| 589b225ab0 | |||
| 7697b35336 | |||
| 6e1cf1db3e | |||
| 020bfd4134 |
27
.devcontainer/Dockerfile
Normal file
27
.devcontainer/Dockerfile
Normal file
@@ -0,0 +1,27 @@
|
||||
FROM alpine:3.23
|
||||
|
||||
RUN apk update && apk add --no-cache \
|
||||
xeyes \
|
||||
jack \
|
||||
git \
|
||||
luarocks \
|
||||
mc \
|
||||
make \
|
||||
cmake \
|
||||
ruby \
|
||||
bash \
|
||||
curl \
|
||||
ca-certificates \
|
||||
g++ \
|
||||
pulseaudio \
|
||||
mesa-dev \
|
||||
mesa-gles \
|
||||
glu-dev
|
||||
|
||||
RUN git clone --recursive --depth=1 https://github.com/nesbox/TIC-80.git /root/TIC-80 \
|
||||
&& cd /root/TIC-80/build \
|
||||
&& cmake -DBUILD_PRO=1 .. \
|
||||
&& make -j$(nproc) \
|
||||
&& make install
|
||||
|
||||
CMD ["/bin/sh"]
|
||||
33
.devcontainer/devcontainer.json
Normal file
33
.devcontainer/devcontainer.json
Normal file
@@ -0,0 +1,33 @@
|
||||
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
|
||||
// README at: https://github.com/devcontainers/templates/tree/main/src/alpine
|
||||
{
|
||||
"name": "Alpine Edge",
|
||||
"build": {
|
||||
"dockerfile": "Dockerfile"
|
||||
},
|
||||
"mounts": [
|
||||
{
|
||||
"source": "/tmp/.X11-unix",
|
||||
"target": "/tmp/.X11-unix",
|
||||
"type": "bind"
|
||||
}
|
||||
],
|
||||
"containerEnv": {
|
||||
"DISPLAY": "${localEnv:DISPLAY}",
|
||||
"PULSE_SERVER": "tcp:host.docker.internal:4713"
|
||||
},
|
||||
"postCreateCommand": "if [ -n \"$WSL_DISTRO_NAME\" ]; then echo 'export DISPLAY=host.docker.internal:0.0' >> ~/.bashrc; fi"
|
||||
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
|
||||
|
||||
// Features to add to the dev container. More info: https://containers.dev/features.
|
||||
// "features": {},
|
||||
|
||||
// Use 'forwardPorts' to make a list of ports inside the container available locally.
|
||||
// "forwardPorts": [],
|
||||
|
||||
// Configure tool-specific properties.
|
||||
// "customizations": {},
|
||||
|
||||
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
|
||||
// "remoteUser": "root"
|
||||
}
|
||||
4
.gitignore
vendored
4
.gitignore
vendored
@@ -1,3 +1,4 @@
|
||||
.claude
|
||||
.local
|
||||
impostor.lua
|
||||
impostor.original.lua
|
||||
@@ -5,4 +6,5 @@ prompts
|
||||
docs
|
||||
minify.lua
|
||||
*.tic
|
||||
*.zip
|
||||
*.zip
|
||||
NOTES_*
|
||||
|
||||
@@ -10,7 +10,6 @@ globals = {
|
||||
"Discussion",
|
||||
"Util",
|
||||
"Decision",
|
||||
"Situation",
|
||||
"Screen",
|
||||
"Sprite",
|
||||
"UI",
|
||||
@@ -31,7 +30,7 @@ globals = {
|
||||
"MenuWindow",
|
||||
"GameWindow",
|
||||
"PopupWindow",
|
||||
"ConfigurationWindow",
|
||||
"ControlsWindow",
|
||||
"AudioTestWindow",
|
||||
"MinigameButtonMashWindow",
|
||||
"MinigameRhythmWindow",
|
||||
@@ -66,6 +65,10 @@ globals = {
|
||||
"map",
|
||||
"time",
|
||||
"RLE",
|
||||
"mouse",
|
||||
"Mouse",
|
||||
"print",
|
||||
"musicator_generate_pattern",
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ init/init.context.lua
|
||||
system/system.util.lua
|
||||
system/system.print.lua
|
||||
system/system.input.lua
|
||||
system/system.mouse.lua
|
||||
system/system.asciiart.lua
|
||||
system/system.rle.lua
|
||||
logic/logic.meter.lua
|
||||
@@ -38,10 +39,7 @@ sprite/sprite.matrix_architect.lua
|
||||
sprite/sprite.matrix_neo.lua
|
||||
sprite/sprite.matrix_oraculum.lua
|
||||
sprite/sprite.matrix_trinity.lua
|
||||
situation/situation.manager.lua
|
||||
situation/situation.drink_coffee.lua
|
||||
decision/decision.manager.lua
|
||||
decision/decision.have_a_coffee.lua
|
||||
decision/decision.go_to_home.lua
|
||||
decision/decision.go_to_toilet.lua
|
||||
decision/decision.go_to_walking_to_office.lua
|
||||
@@ -72,7 +70,7 @@ window/window.intro.title.lua
|
||||
window/window.intro.ttg.lua
|
||||
window/window.intro.brief.lua
|
||||
window/window.menu.lua
|
||||
window/window.configuration.lua
|
||||
window/window.controls.lua
|
||||
window/window.audiotest.lua
|
||||
window/window.popup.lua
|
||||
window/window.minigame.mash.lua
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
Decision.register({
|
||||
id = "have_a_coffee",
|
||||
label = "Have a Coffee",
|
||||
handle = function()
|
||||
local new_situation_id = Situation.apply("drink_coffee", Context.game.current_screen)
|
||||
local level = Ascension.get_level()
|
||||
local disc_id = "coworker_disc_0"
|
||||
-- TODO: Add more discussions for levels above 3
|
||||
if level >= 1 and level <= 3 then
|
||||
local suffix = Context.have_done_work_today and ("_asc_" .. level) or ("_" .. level)
|
||||
disc_id = "coworker_disc" .. suffix
|
||||
end
|
||||
Discussion.start(disc_id, "game")
|
||||
Context.game.current_situation = new_situation_id
|
||||
end,
|
||||
})
|
||||
@@ -134,6 +134,7 @@ end
|
||||
--- @param decisions table A table of decision items.<br/>
|
||||
--- @param selected_decision_index number The current index of the selected decision.<br/>
|
||||
--- @return number selected_decision_index The updated index of the selected decision.
|
||||
--- @return boolean mouse_confirmed True if the user clicked the center to confirm.
|
||||
function Decision.update(decisions, selected_decision_index)
|
||||
if Input.left() then
|
||||
Audio.sfx_beep()
|
||||
@@ -142,5 +143,22 @@ function Decision.update(decisions, selected_decision_index)
|
||||
Audio.sfx_beep()
|
||||
selected_decision_index = Util.safeindex(decisions, selected_decision_index + 1)
|
||||
end
|
||||
return selected_decision_index
|
||||
|
||||
local bar_h = 16
|
||||
local bar_y = Config.screen.height - bar_h
|
||||
local prev_zone = { x = 0, y = bar_y, w = 15, h = bar_h }
|
||||
local next_zone = { x = Config.screen.width-15, y = bar_y, w = 15, h = bar_h }
|
||||
local confirm_zone = { x = 15, y = bar_y, w = Config.screen.width-30, h = bar_h }
|
||||
|
||||
if Mouse.zone(prev_zone) then
|
||||
Audio.sfx_beep()
|
||||
selected_decision_index = Util.safeindex(decisions, selected_decision_index - 1)
|
||||
elseif Mouse.zone(next_zone) then
|
||||
Audio.sfx_beep()
|
||||
selected_decision_index = Util.safeindex(decisions, selected_decision_index + 1)
|
||||
elseif Mouse.zone(confirm_zone) then
|
||||
return selected_decision_index, true
|
||||
end
|
||||
|
||||
return selected_decision_index, false
|
||||
end
|
||||
|
||||
@@ -17,8 +17,7 @@ function Config.initial_data()
|
||||
blue = 3,
|
||||
white = 4,
|
||||
item = 7,
|
||||
meter_bg = 1,
|
||||
transparent = 12
|
||||
meter_bg = 1
|
||||
},
|
||||
timing = {
|
||||
minigame_win_duration = 180
|
||||
|
||||
@@ -23,11 +23,12 @@ Context = {}
|
||||
--- * have_met_sumphore (boolean) Whether the player has talked to the homeless guy.<br/>
|
||||
--- * have_been_to_office (boolean) Whether the player has been to the office.<br/>
|
||||
--- * have_done_work_today (boolean) Whether the player has done work today.<br/>
|
||||
--- * game (table) Current game progress state. Contains: `current_screen` (string) active screen ID, `current_situation` (string|nil) active situation ID.<br/>
|
||||
--- * game (table) Current game progress state. Contains: `current_screen` (string) active screen ID<br/>
|
||||
function Context.initial_data()
|
||||
return {
|
||||
current_menu_item = 1,
|
||||
test_mode = false,
|
||||
mouse_trace = false,
|
||||
popup = {
|
||||
show = false,
|
||||
content = {}
|
||||
@@ -46,9 +47,10 @@ function Context.initial_data()
|
||||
have_done_work_today = false,
|
||||
should_ascend = false,
|
||||
have_met_sumphore = false,
|
||||
office_sprites = {},
|
||||
walking_to_office_sprites = {},
|
||||
game = {
|
||||
current_screen = "home",
|
||||
current_situation = nil,
|
||||
},
|
||||
day_count = 1,
|
||||
delta_time = 0,
|
||||
|
||||
@@ -3,12 +3,12 @@ Util = {}
|
||||
Meter = {}
|
||||
Minigame = {}
|
||||
Decision = {}
|
||||
Situation = {}
|
||||
Screen = {}
|
||||
Map = {}
|
||||
UI = {}
|
||||
Print = {}
|
||||
Input = {}
|
||||
Mouse = {}
|
||||
Sprite = {}
|
||||
Audio = {}
|
||||
Focus = {}
|
||||
|
||||
@@ -251,262 +251,130 @@
|
||||
-- 247:0000000011111110000000003333301013131010313130101313101031313000
|
||||
-- </TILES>
|
||||
-- <SPRITES>
|
||||
-- 000:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 001:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 002:cccccccccccccccccccc4444ccc44444ccc44444cc44ffffcc4fffffcc4f3333
|
||||
-- 003:cccccccccccccccc4416cccc42426ccc44241cccff426cccfff41ccc33f26ccc
|
||||
-- 004:ccccc333cccc3555ccc36555cc365555cc3555ffcc356fffcc365f3fcc355fff
|
||||
-- 005:33cccccc553ccccc5563cccc55563cccff553cccfff53cccf3f63cccfff53ccc
|
||||
-- 006:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 007:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 008:cccccc5acccc5a55cccc55a5cccca55acccc5a57cccc5533ccc575f3cccc757f
|
||||
-- 009:55a5cccca55a5ccc5a55accc575555ccfff7a5cc3f335accfff3f5ccfffffacc
|
||||
-- 010:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 011:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 012:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 013:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 014:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 015:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 016:cccccccccccccccccccccccccccccc0cccccc053cccc0535ccc05351cc053535
|
||||
-- 017:cccccccccccccccccccccccc0ccccccc500ccccc1510cccc51510ccc151510cc
|
||||
-- 018:cc4f99ffcccfffffccccff33cccccfffcccc3666ccc35555cc356525c3163555
|
||||
-- 019:99f41cccfff26cccff6cccccf6cccccc633ccccc55533ccc555553cc5553553c
|
||||
-- 020:cc356f6fcc3655f6c365511f3653122f3531222f36322122c5322322c3322322
|
||||
-- 021:f6f53ccc6f563cccf11563ccf22153ccf22263cc221233cc223213cc221213cc
|
||||
-- 022:cccccccccccccc51ccccc155cccc5515cccc157fcccc5513ccc57f3fccc17fff
|
||||
-- 023:cccccccc555ccccc5155cccc15515cccff7f51ccff31f2ccfff3ffcc33fff2cc
|
||||
-- 024:ccccc57fccccccc5ccccccc5cccc5599ccc55911cc559911cc551199cc551199
|
||||
-- 025:f3ff5cccfff5cccc5f5ccccc44151ccc779951cc449915cc7711955c4411955c
|
||||
-- 026:ccccccccccccc133ccc13313ccc31333cc133333cc31f7f7cc113339cc31999f
|
||||
-- 027:cccccccc1331cccc13133ccc333313cc333331ccf7f113cc333731cc999753cc
|
||||
-- 028:ccccccccccccccccccccca77cccc5777ccc57777cc577777cc5775a5cc77a7ff
|
||||
-- 029:cccccccccccccccc777acccc77775ccc777775cc7777775ca5a5775cfff7a77c
|
||||
-- 030:ccccccccccccc515cccc1151ccc55555ccc1517fccc557ffccc1ff3fccc7ff1f
|
||||
-- 031:cccccccc15cccccc511ccccc555cccccf711ccccff75ccccf3f1ccccf1f5cccc
|
||||
-- 032:cc035351cc053500cc0351ffcc051f0fccc0ff0fccc0ffffcccc0ff0ccc020ff
|
||||
-- 033:555550cc005550ccff1550ccf0f150ccf0ff0cccffff0ccc0ff0ccccff020ccc
|
||||
-- 034:c3613525c3163555c3613525c3163311c3333311c3f33333c3333333ccc33333
|
||||
-- 035:5556553c5553553c5556553c1333553c1333333c3333ff3c3333333c3333cccc
|
||||
-- 036:cc322322cc322333cc33331acc3ff31acc3ff3a1cc3333a1cccc3a1acccc3a1a
|
||||
-- 037:223213cc333213cc111333cc111f3ccc11133ccc1113cccc1113cccc1113cccc
|
||||
-- 038:ccccc7ffccc1117fcc16171fc1551755c1561755155117555f7157555ff15755
|
||||
-- 039:fffff7cc333f2cccffff71cc5555711c5555716155557111555575ff555575ff
|
||||
-- 040:cc559911cc559911ccff5333ccfff511cc7fff11ccc7f511cccc3113cccc3113
|
||||
-- 041:4799155c4499155c47333f7c14113ffc11113f7c11113ccc33113cccc3113ccc
|
||||
-- 042:cc35777fccc17766cccc5777cccccc55cc888855c8bbb845c8bbb8448bb8b844
|
||||
-- 043:777753cc6775cccc775ccccc5588cccc558b8ccc548bb8cc228bbb8c428b8b8c
|
||||
-- 044:cc5a7f3fcc57ff3fc7f7ffffc7757fdfc77a57fdc575357fcc5a66a7ccc6aa6f
|
||||
-- 045:ff3f7a5cff3ff75cfffff777ffdf7577ddf75a77ff75157577a66a5cff6aa6cc
|
||||
-- 046:ccc5ffffcccc5ff3ccccc5ffcc177755cc242777cc212171cc242771cc212171
|
||||
-- 047:fff5cccc3f5cccccf5cccccc5771cccc7772cccc1712cccc1772cccc1712cccc
|
||||
-- 048:cc020123cc020143cc020143cc010309cccf0300cccc030ccccc030cccc0000c
|
||||
-- 049:324030cc344030cc344030cc903010cc0030fcccc030ccccc030ccccc0000ccc
|
||||
-- 050:ccc3333cccc3333cccc3333cccc3333cccc5353ccc33113ccc31113ccc33333c
|
||||
-- 051:3333cccc3333cccc3333cccc3333cccc3535cccc31133ccc31113ccc33333ccc
|
||||
-- 052:cccc31a1cccc31a1cccc3a1acccc3a1acccc3333ccccc3f3ccccc3f3ccccc33c
|
||||
-- 053:1113cccc1113cccc1113cccc1113cccc3333ccccc3f3ccccc3f3ccccc33ccccc
|
||||
-- 054:5ff76466c7f59999ccc99133ccc3993cccc9913cccc1333cccc1221cccc111cc
|
||||
-- 055:666646ff999993f7339913cccc3993cccc9913cccc1333cccc1221cccc111ccc
|
||||
-- 056:cccc3113cccc3113cccc3113cccc3113cccc3113cccc3333cccc1651cccc1111
|
||||
-- 057:c3113cccc3113cccc3113cccc3113cccc3113cccc3333cccc1651cccc1111ccc
|
||||
-- 058:8888b8445f78b8445f588844c5c3133cccc3313cccc3133cccc5355cccc577fc
|
||||
-- 059:218b888c428b87f5218885f5c3133c5cc3313cccc3133cccc5355cccc577fccc
|
||||
-- 060:cc56aa66cc1f6aaacc1fa666cc7f6aaacccc6aaacccca666ccccc7d7ccccc1d1
|
||||
-- 061:666aa65caaaa6f1c6666af1caaaa6f7caaaa6ccc6666accccc7d7ccccc1d1ccc
|
||||
-- 062:cc242777ccff6111ccfff333cc5f5333cccc3333cccc333ccccc333ccccc111c
|
||||
-- 063:7772cccc116fcccc335ffccc333fcccc333ccccc333ccccc333cccccc111cccc
|
||||
-- 064:ccccccccccccccccccccc111cccc3311ccc11117ccc3317fccc117ffcc553333
|
||||
-- 065:cccccccccccccccc11cccccc111ccccc7711ccccff71ccccff77cccc1333cccc
|
||||
-- 066:cccccccccccccc33ccccc333cccc3333cccc33f7cccc35ffccc535ffccc7f333
|
||||
-- 067:cccccccc3ccccccc3333cccc3333cccc37f3ccccffffccccffffccccf333fccc
|
||||
-- 068:ccccccccccccccccccccccccccccccccccccccccccccc122cccc1244ccc1447f
|
||||
-- 069:cccccccccccccccccccccccccccccccccccccccc221ccccc4421ccccf7441ccc
|
||||
-- 070:ccccccccccccccccccccc333cccc3888ccc38888cc388881c3838831c338835f
|
||||
-- 071:cccccccccccccccc333ccccc8888cccc88338ccc335538cc166653ccf7ff73cc
|
||||
-- 072:cccccccccccccccccccccc55ccccc555cccc5577cccc57ffcccc7f55cccfff33
|
||||
-- 073:cccccccccccccccc55555ccc555555cc7777755cffffff5c7f755f7c3f333fff
|
||||
-- 074:cccccccccccccc11ccccc113cccc1131ccc11313ccc13131cc13137ccc3131ff
|
||||
-- 075:cccccccc111ccccc1311cccc31311ccc13131ccc313131ccffff71ccfffff1cc
|
||||
-- 076:cccccccccccccc55ccccc555ccccc555cccc5577cccc57ffccc7ff55cccfff99
|
||||
-- 077:cccccccc5555cccc55555ccc55555ccc757755ccfffff5cc5f555f7c3f993ffc
|
||||
-- 078:cccccccccccccccccccccccccccccccccccc1111cccc1444cccc1444cccc1555
|
||||
-- 079:cccccccccccccccccccccccccccccccc111ccccc441ccccc441ccccc551ccccc
|
||||
-- 080:cc77533fcccff77fccc5fff5cccc5ff7ccccc15fccc5f315cc5ff3ffccff3333
|
||||
-- 081:f33fccccf77fcccc5ffccccc7f5cccccf5cccccc53fcccccf3f5cccc333fcccc
|
||||
-- 082:cccfff33ccc5ffffcccc57f5cccccc7fccc33335cc31313fcc313133c3113133
|
||||
-- 083:ff33fcccffff1ccc55f1ccccff7ccccc5533ccccff313ccc33313ccc333113cc
|
||||
-- 084:ccc447ffcccfffffccc7f33fcccff11fcccf7fffccccff75ccccc424cccc1142
|
||||
-- 085:ff744cccffff1cccf33f7cccf11f5cccfff7fccc57ffcccc424ccccc4411cccc
|
||||
-- 086:c3838339c338833bc3838313c338337fc383835fcc383835ccc38383cccc3333
|
||||
-- 087:995399ccbb33bbcc995139ccfffff53cff66f1cc7fff53cc155531cc33333ccc
|
||||
-- 088:cccf7ff3cccc5fffccccc7ffcccccc7fccccc21fcccc2441ccc24444cc124244
|
||||
-- 089:fff3ff7ff1ffff5cfffff7cc111f7cccffff1ccc111142cc4244442c4244241c
|
||||
-- 090:cc5f5733cc5f1f23ccc15fffccccc77fccc11117cc124421c1444142c1421444
|
||||
-- 091:ff33f5ccff23f5ccfffffccc11ff5ccc7771cccc11241ccc444241cc4244141c
|
||||
-- 092:cccc5fffccccc5ffcccccc1fccccccc1ccccc114cccc1814cccc1814ccc18114
|
||||
-- 093:fffff5cc111f5cccfff5cccc111ccccc42411ccc42418ccc424181cc424111cc
|
||||
-- 094:cccc1fffcccc1f3fcccccf3fcccccfffccccccf3cccc23ccccc131ffcc1f1f11
|
||||
-- 095:ff1ccccc3f1ccccc3ffcccccfffcccccfcccccccc32cccccf131cccc1f1f1ccc
|
||||
-- 096:ccff3333cc331333c5f33333cff31333c3333333cf531333cff13111c7f13333
|
||||
-- 097:333fcccc333f5ccc333f5ccc333ffccc33333ccc3335f5cc111ff5cc3337fccc
|
||||
-- 098:c3113133c3113133c3333133c3113131c3333132c5553131c7ff3133c7ff3131
|
||||
-- 099:333113cc333113cc333333cc213113cc423333cc21317fcc33317f5c013175cc
|
||||
-- 100:ccc24414cc244441c2444424c242442414424424144144241441442414414424
|
||||
-- 101:414421cc144442cc4244442c4244422c42444241424441414244414142444141
|
||||
-- 102:ccc33333cc33a353cc32a353cc3a3323c3a23333c32a3333c3a23333c32a3333
|
||||
-- 103:33333ccc553533cc553533cc2232323c3333313c3333323c3333313333333233
|
||||
-- 104:cc144144cc144244cc144144cc144124cc17f311cc1ff133cc1fff33ccc7f333
|
||||
-- 105:4244142c4244241c4244142c4244122c12113f7c31333ffc33333ffc30333fcc
|
||||
-- 106:c1421444c1441444c142144431421444c1111111cfff1a5acff755a5c5755a51
|
||||
-- 107:4444141c4244141c4444141c4244141c1111111c5a5a55f5a5a5a5f5111a517c
|
||||
-- 108:ccc11814ccc18114ccc11814ccc18113ccc11333cc5fff33cccf7733ccc55333
|
||||
-- 109:4241811c4241181c4241811c2223181c111331cc33335ffc3333f77c333355cc
|
||||
-- 110:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 111:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 112:c5533333ccc3333cccc333cccc3333cccc3333cccc3333cccc1111cccc1212cc
|
||||
-- 113:333ccccc333ccccc333ccccc333ccccc333ccccc333ccccc1111cccc1212cccc
|
||||
-- 114:c5f53131c3003131c3331131c3111131c3111131cc31113cccc3333cccc1212c
|
||||
-- 115:c13113ccc13113ccc13113ccc13113ccc13113cccc3113cccc3333cccc1212cc
|
||||
-- 116:cfff2424c7f72211cc55442cccc2442cccc2442cccc2442cccc2222cccc2444c
|
||||
-- 117:424441f1112227f1c244255cc2442cccc2442cccc2442cccc2222cccc2444ccc
|
||||
-- 118:c3333333c7ff3333c7f73333cc7c333ccccc333ccccc333ccccc111ccccc111c
|
||||
-- 119:33333575333331f133333575cc333ccccc333ccccc333ccccc111ccccc1111cc
|
||||
-- 120:ccccc333ccccc333ccccc333ccccc333ccccc333ccccc333ccccc333ccccc111
|
||||
-- 121:cc333ccccc333ccccc333ccccc333ccccc333ccccc333ccccc333ccc1c1111cc
|
||||
-- 122:cc5c15a1cccc1a51cccc15a1cccc1a51cccc15a1cccc2251cccc9249cccc9999
|
||||
-- 123:c315a15ccc1a51cccc15a1cccc1a51cccc15a1cccc2251cccc9249cccc9999cc
|
||||
-- 124:ccccc333ccccc333ccccc333ccccc333ccccc333ccccc333ccccc333ccccc111
|
||||
-- 125:c333ccccc333ccccc333ccccc333ccccc333ccccc333ccccc333cccccc111ccc
|
||||
-- 126:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 127:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 128:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 129:ccccccccccccccccccccccccccccccccccccccccc115151c1151515151515151
|
||||
-- 130:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 131:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 132:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 133:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 134:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 135:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 136:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 137:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 138:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 139:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 140:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 141:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 142:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 143:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 144:ccccccc5cccccc15cccccc15ccccc57fccccc5ffccccc17fcccc3317ccc73331
|
||||
-- 002:00000000000000000000444400044444000444440044ffff004fffff004f3333
|
||||
-- 003:0000000000000000441600004242600044241000ff426000fff4100033f26000
|
||||
-- 004:00000333000035550003655500365555003555ff00356fff00365f3f00355fff
|
||||
-- 005:33000000553000005563000055563000ff553000fff53000f3f63000fff53000
|
||||
-- 008:0000005a00005a55000055a50000a55a00005a5700005533000575f30000757f
|
||||
-- 009:55a50000a55a50005a55a00057555500fff7a5003f335a00fff3f500fffffa00
|
||||
-- 016:0000000000000000000000000000003000000353000035350003535100353535
|
||||
-- 017:0000000000000000000000003000000053300000151300005151300015151300
|
||||
-- 018:004f99ff000fffff0000ff3300000fff00003666000355550035652503163555
|
||||
-- 019:99f41000fff26000ff600000f600000063300000555330005555530055535530
|
||||
-- 020:00356f6f003655f60365511f3653122f3531222f363221220532232203322322
|
||||
-- 021:f6f530006f563000f1156300f2215300f2226300221233002232130022121300
|
||||
-- 022:000000000000005100000155000055150000157f0000551300057f3f00017fff
|
||||
-- 023:00000000555000005155000015515000ff7f5100ff31f200fff3ff0033fff200
|
||||
-- 024:0000057f00000005000000050000559900055911005599110055119900551199
|
||||
-- 025:f3ff5000fff500005f5000004415100077995100449915007711955044119550
|
||||
-- 026:00000000000001330001331300031333001333330031f7f7001133390031999f
|
||||
-- 027:0000000013310000131330003333130033333100f7f113003337310099975300
|
||||
-- 028:000000000000000000000a77000057770005777700577777005775a50077a7ff
|
||||
-- 029:0000000000000000777a0000777750007777750077777750a5a57750fff7a770
|
||||
-- 030:000000000000051500001151000555550001517f000557ff0001ff3f0007ff1f
|
||||
-- 031:00000000150000005110000055500000f7110000ff750000f3f10000f1f50000
|
||||
-- 032:0033535100353533003351ff00351f3f0003ff3f0003ffff00003ff3000323ff
|
||||
-- 033:5555530033555300ff155300f3f15300f3ff3000ffff30003ff30000ff323000
|
||||
-- 034:036135250316355503613525031633110333331103f333330333333300033333
|
||||
-- 035:55565530555355305556553013335530133333303333ff303333333033330000
|
||||
-- 036:00322322003223330033331a003ff31a003ff3a1003333a100003a1a00003a1a
|
||||
-- 037:223213003332130011133300111f300011133000111300001113000011130000
|
||||
-- 038:000007ff0001117f0016171f0155175501561755155117555f7157555ff15755
|
||||
-- 039:fffff700333f2000ffff7100555571105555716155557111555575ff555575ff
|
||||
-- 040:005599110055991100ff533300fff511007fff110007f5110000311300003113
|
||||
-- 041:479915504499155047333f7014113ff011113f70111130003311300003113000
|
||||
-- 042:0035777f0001776600005777000000550088885508bbb84508bbb8448bb8b844
|
||||
-- 043:77775300677500007750000055880000558b8000548bb800228bbb80428b8b80
|
||||
-- 044:005a7f3f0057ff3f07f7ffff07757fdf077a57fd0575357f005a66a70006aa6f
|
||||
-- 045:ff3f7a50ff3ff750fffff777ffdf7577ddf75a77ff75157577a66a50ff6aa600
|
||||
-- 046:0005ffff00005ff3000005ff0017775500242777002121710024277100212171
|
||||
-- 047:fff500003f500000f50000005771000077720000171200001772000017120000
|
||||
-- 048:00323123003231430032314300313339000f3333000033300000333000033330
|
||||
-- 049:324303003443030034430300933313003333f000033300000333000003333000
|
||||
-- 050:0003333000033330000333300003333000053530003311300031113000333330
|
||||
-- 051:3333000033330000333300003333000035350000311330003111300033333000
|
||||
-- 052:000031a1000031a100003a1a00003a1a00003333000003f3000003f300000330
|
||||
-- 053:111300001113000011130000111300003333000003f3000003f3000003300000
|
||||
-- 054:5ff7646607f59999000991330003993000099130000133300001221000011100
|
||||
-- 055:666646ff999993f7339913000039930000991300001333000012210000111000
|
||||
-- 056:0000311300003113000031130000311300003113000033330000165100001111
|
||||
-- 057:0311300003113000031130000311300003113000033330000165100001111000
|
||||
-- 058:8888b8445f78b8445f58884405031330000331300003133000053550000577f0
|
||||
-- 059:218b8880428b87f5218885f5031330500331300003133000053550000577f000
|
||||
-- 060:0056aa66001f6aaa001fa666007f6aaa00006aaa0000a666000007d7000001d1
|
||||
-- 061:666aa650aaaa6f106666af10aaaa6f70aaaa60006666a000007d7000001d1000
|
||||
-- 062:0024277700ff611100fff333005f533300003333000033300000333000001110
|
||||
-- 063:77720000116f0000335ff000333f000033300000333000003330000001110000
|
||||
-- 064:00000000000000000000011100003311000111170003317f000117ff00553333
|
||||
-- 065:0000000000000000110000001110000077110000ff710000ff77000013330000
|
||||
-- 066:00000000000000330000033300003333000033f7000035ff000535ff0007f333
|
||||
-- 067:0000000030000000333300003333000037f30000ffff0000ffff0000f333f000
|
||||
-- 068:000000000000000000000000000000000000000000000122000012440001447f
|
||||
-- 069:00000000000000000000000000000000000000002210000044210000f7441000
|
||||
-- 070:000000000000000000000333000038880003888800388881038388310338835f
|
||||
-- 071:00000000000000003330000088880000883380003355380016665300f7ff7300
|
||||
-- 072:0000000000000000000000550000055500005577000057ff00007f55000fff33
|
||||
-- 073:0000000000000000555550005555550077777550ffffff507f755f703f333fff
|
||||
-- 074:0000000000000011000001130000113100011313000131310013137c003131ff
|
||||
-- 075:000000001110000013110000313110001313100031313100ffff7100fffff100
|
||||
-- 076:0000000000000055000005550000055500005577000057ff0007ff55000fff99
|
||||
-- 077:0000000055550000555550005555500075775500fffff5005f555f703f993ff0
|
||||
-- 078:0000000000000000000000000000000000001111000014440000144400001555
|
||||
-- 079:0000000000000000000000000000000011100000441000004410000055100000
|
||||
-- 080:0077533f000ff77f0005fff500005ff70000015f0005f315005ff3ff00ff3333
|
||||
-- 081:f33f0000f77f00005ff000007f500000f500000053f00000f3f50000333f0000
|
||||
-- 082:000fff330005ffff000057f50000007f000333350031313f0031313303113133
|
||||
-- 083:ff33f000ffff100055f10000ff70000055330000ff3130003331300033311300
|
||||
-- 084:000447ff000fffff0007f33f000ff11f000f7fff0000ff750000042400001142
|
||||
-- 085:ff744000ffff1000f33f7000f11f5000fff7f00057ff00004240000044110000
|
||||
-- 086:038383390338833b038383130338337f0383835f003838350003838300003333
|
||||
-- 087:99539900bb33bb0099513900fffff530ff66f1007fff53001555310033333000
|
||||
-- 088:000f7ff300005fff000007ff0000007f0000021f000024410002444400124244
|
||||
-- 089:fff3ff7ff1ffff50fffff700111f7000ffff1000111142004244442042442410
|
||||
-- 090:005f5733005f1f2300015fff0000077f00011117001244210144414201421444
|
||||
-- 091:ff33f500ff23f500fffff00011ff500077710000112410004442410042441410
|
||||
-- 092:00005fff000005ff0000001f0000000100000114000018140000181400018114
|
||||
-- 093:fffff500111f5000fff500001110000042411000424180004241810042411100
|
||||
-- 094:00001fff00001f3f0000cf3f0000cfff00000cf3000023cc000131ff001f1f11
|
||||
-- 095:ff1000003f1000003ff00000fff00000fc000000c3200000f13100001f1f1000
|
||||
-- 096:00ff33330033133305f333330ff31333033333330f5313330ff1311107f13333
|
||||
-- 097:333f0000333f5000333f5000333ff000333330003335f500111ff5003337f000
|
||||
-- 098:03113133031131330333313303113131033331320555313107ff313307ff3131
|
||||
-- 099:333113003331130033333300213113004233330021317f0033317f5001317500
|
||||
-- 100:0002441400244441024444240242442414424424144144241441442414414424
|
||||
-- 101:4144210014444200424444204244422042444241424441414244414142444141
|
||||
-- 102:000333330033a3530032a353003a332303a23333032a333303a23333032a3333
|
||||
-- 103:3333300055353300553533002232323033333130333332303333313333333233
|
||||
-- 104:001441440014424400144144001441240017f311001ff133001fff330007f333
|
||||
-- 105:4244142042442410424414204244122012113f7031333ff033333ff030333f00
|
||||
-- 106:01421444014414440142144431421444011111110fff1a5a0ff755a505755a51
|
||||
-- 107:44441410424414104444141042441410111111105a5a55f5a5a5a5f5111a5170
|
||||
-- 108:0001181400018114000118140001811300011333005fff33000f773300055333
|
||||
-- 109:424181104241181042418110222318101113310033335ff03333f77033335500
|
||||
-- 112:0553333300033330000333000033330000333300003333000011110000121200
|
||||
-- 113:3330000033300000333000003330000033300000333000001111000012120000
|
||||
-- 114:05f5313103003131033311310311113103111131003111300003333000012120
|
||||
-- 115:0131130001311300013113000131130001311300003113000033330000121200
|
||||
-- 116:0fff242407f72211005544200002442000024420000244200002222000024440
|
||||
-- 117:424441f1112227f1024425500244200002442000024420000222200002444000
|
||||
-- 118:0333333307ff333307f733330070333000003330000033300000111000001110
|
||||
-- 119:33333575333331f1333335750033300000333000003330000011100000111100
|
||||
-- 120:0000033300000333000003330000033300000333000003330000033300000111
|
||||
-- 121:0033300000333000003330000033300000333000003330000033300010111100
|
||||
-- 122:005015a100001a51000015a100001a51000015a1000022510000924900009999
|
||||
-- 123:0315a150001a51000015a100001a51000015a100002251000092490000999900
|
||||
-- 124:0000033300000333000003330000033300000333000003330000033300000111
|
||||
-- 125:0333000003330000033300000333000003330000033300000333000000111000
|
||||
-- 129:0000000000000000000000000000000000000000011515101151515151515151
|
||||
-- 144:0000000500000015000000150000057f000005ff0000017f0000331700073331
|
||||
-- 145:1ffffff7ff0fff0fff1fff1fffffffffff7555fffffffffffff111ff57fffff7
|
||||
-- 146:1ccccccc71ccccccf5ccccccffccccccff5cccccff5ccccc75131ccc513337cc
|
||||
-- 147:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 148:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 149:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 150:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 151:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 152:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 153:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 154:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 155:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 156:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 157:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 158:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 159:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 160:cc773333c3331333333313333331333333313333355133335ff513335ff71111
|
||||
-- 146:1000000071000000f5000000ff000000ff500000ff5000007513100051333700
|
||||
-- 160:0077333303331333333313333331333333313333355133335ff513335ff71111
|
||||
-- 161:1111111133333333333337333333373333333733333337333333373311117711
|
||||
-- 162:133337cc3733133c7773133c333331333333313333333155333337ff1111175f
|
||||
-- 163:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 164:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 165:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 166:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 167:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 168:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 169:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 170:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 171:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 172:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 173:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 174:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 175:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 176:c7753333ccc31333ccc33313cccc3333cccc1333cccc3333ccccc333ccccc111
|
||||
-- 177:33357733333335333333333313131313333333333cccccc33cccccc31cccccc1
|
||||
-- 178:3333357533331ccc3313cccc1333cccc3331cccc3333cccc3331cccc1111cccc
|
||||
-- 179:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 180:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 181:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 182:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 183:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 184:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 185:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 186:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 187:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 188:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 189:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 190:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 191:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 192:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 193:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 194:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 195:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 196:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 197:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 198:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 199:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 200:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 201:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 202:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 203:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 204:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 205:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 206:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 207:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 208:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 209:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 210:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 211:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 212:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 213:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 214:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 215:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 216:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 217:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 218:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 219:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 220:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 221:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 222:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 223:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 224:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 225:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 226:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 227:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 228:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 229:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 230:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 231:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 232:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 233:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 234:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 235:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 236:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 237:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 238:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 239:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 240:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 241:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 242:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 243:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 244:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 245:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 246:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 247:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 248:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 249:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 250:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 251:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 252:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 253:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 254:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 255:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
-- 162:133337003733133077731330333331333333313333333155333337ff1111175f
|
||||
-- 176:0775333300031333000333130000333300001333000033330000033300000111
|
||||
-- 177:3335773333333533333333331313131333333333300000033000000310000001
|
||||
-- 178:3333357533331000331300001333000033310000333300003331000011110000
|
||||
-- </SPRITES>
|
||||
-- <MAP>
|
||||
-- 000:ffffffffff0010201020102010201020102010201020102000ffffffffff40404040404087f3f3f3f397a7b7c7d7a7e7f70818a7b7c7d7a7b7c7d7a70b1b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
|
||||
@@ -4,5 +4,5 @@
|
||||
-- desc: Life of a programmer
|
||||
-- site: https://git.teletype.hu/games/impostor
|
||||
-- license: MIT License
|
||||
-- version: 1.0-beta1
|
||||
-- version: 1.0-beta2
|
||||
-- script: lua
|
||||
|
||||
@@ -8,7 +8,6 @@ local _screens = {}
|
||||
--- @param screen_data.name string Display name of the screen.
|
||||
--- @param screen_data.decisions table Array of decision ID strings available on this screen.
|
||||
--- @param screen_data.background string Map ID used as background.
|
||||
--- @param[opt] screen_data.situations table Array of situation ID strings. Defaults to {}.
|
||||
--- @param[opt] screen_data.init function Called when the screen is entered. Defaults to noop.
|
||||
--- @param[opt] screen_data.update function Called each frame while screen is active. Defaults to noop.
|
||||
--- @param[opt] screen_data.draw function Called after the focus overlay to draw screen-specific overlays. Defaults to noop.
|
||||
@@ -16,9 +15,6 @@ function Screen.register(screen_data)
|
||||
if _screens[screen_data.id] then
|
||||
trace("Warning: Overwriting screen with id: " .. screen_data.id)
|
||||
end
|
||||
if not screen_data.situations then
|
||||
screen_data.situations = {}
|
||||
end
|
||||
if not screen_data.init then
|
||||
screen_data.init = function() end
|
||||
end
|
||||
@@ -43,7 +39,6 @@ end
|
||||
--- * name (string) Display name.<br/>
|
||||
--- * decisions (table) Array of decision ID strings.<br/>
|
||||
--- * background (string) Map ID used as background.<br/>
|
||||
--- * situations (table) Array of situation ID strings.<br/>
|
||||
--- * init (function) Called when the screen is entered.<br/>
|
||||
--- * update (function) Called each frame while screen is active.
|
||||
function Screen.get_by_id(screen_id)
|
||||
@@ -58,7 +53,6 @@ end
|
||||
--- * name (string) Display name of the screen.<br/>
|
||||
--- * decisions (table) Array of decision ID strings available on this screen.<br/>
|
||||
--- * background (string) Map ID used as background.<br/>
|
||||
--- * situations (table) Array of situation ID strings.<br/>
|
||||
--- * init (function) Called when the screen is entered.<br/>
|
||||
--- * update (function) Called each frame while screen is active.<br/>
|
||||
function Screen.get_all()
|
||||
|
||||
@@ -240,9 +240,12 @@ Screen.register({
|
||||
end
|
||||
end
|
||||
elseif state == STATE_CHOICE then
|
||||
selected_choice = UI.update_menu(MysteriousManScreen.choices, selected_choice)
|
||||
local menu_x = (Config.screen.width - 60) / 2
|
||||
local menu_y = (Config.screen.height - 20) / 2
|
||||
local confirmed
|
||||
selected_choice, confirmed = UI.update_menu(MysteriousManScreen.choices, selected_choice, menu_x, menu_y)
|
||||
|
||||
if Input.select() then
|
||||
if Input.select() or confirmed then
|
||||
Audio.sfx_select()
|
||||
if selected_choice == 1 then
|
||||
MysteriousManScreen.wake_up()
|
||||
|
||||
@@ -6,26 +6,45 @@ Screen.register({
|
||||
"go_to_walking_to_home",
|
||||
"have_a_coffee",
|
||||
},
|
||||
situations = {
|
||||
"drink_coffee",
|
||||
},
|
||||
init = function()
|
||||
Audio.music_play_room_work()
|
||||
Context.have_been_to_office = true
|
||||
|
||||
local possible_sprites = {
|
||||
"dev_project_manager",
|
||||
"dev_hr_girl",
|
||||
"dev_introvert",
|
||||
"dev_extrovert",
|
||||
"dev_guru",
|
||||
"dev_operator",
|
||||
{id="dev_buddy", y_correct=1 * 8},
|
||||
{id="dev_boy", y_correct=1 * 8},
|
||||
{id="dev_girl", y_correct=1 * 8}
|
||||
}
|
||||
|
||||
local possible_positions = {
|
||||
{x = 6 * 8, y = 4 * 8},
|
||||
{x = 10 * 8, y = 11 * 8 + 4},
|
||||
{x = 12 * 8, y = 4 * 8},
|
||||
{x = 15 * 8, y = 9 * 8},
|
||||
{x = 16 * 8, y = 4 * 8},
|
||||
{x = 17 * 8, y = 8 * 8},
|
||||
{x = 17 * 8, y = 11 * 8},
|
||||
{x = 20 * 8, y = 4 * 8},
|
||||
{x = 23 * 8, y = 5 * 8},
|
||||
{x = 22 * 8, y = 10 * 8 + 4},
|
||||
{x = 27 * 8, y = 10 * 8 + 4},
|
||||
{x = -4 + 5 * 8, y = 9 * 8}
|
||||
}
|
||||
|
||||
Context.office_sprites = Sprite.list_randomize(possible_sprites, possible_positions)
|
||||
end,
|
||||
background = "office",
|
||||
draw = function()
|
||||
if Window.get_current_id() == "game" then
|
||||
Sprite.draw_at("norman", 13 * 8, 9 * 8)
|
||||
Sprite.draw_at("dev_buddy", 15 * 8, 9 * 8)
|
||||
Sprite.draw_at("dev_project_manager", 6 * 8, 4 * 8)
|
||||
Sprite.draw_at("dev_hr_girl", 12 * 8, 4 * 8)
|
||||
Sprite.draw_at("dev_introvert", -4 + 5 * 8, 9 * 8)
|
||||
Sprite.draw_at("dev_extrovert", 20 * 8, 4 * 8)
|
||||
Sprite.draw_at("dev_girl", 23 * 8, 5 * 8)
|
||||
Sprite.draw_at("dev_boy", 10 * 8, 11 * 8 + 4)
|
||||
Sprite.draw_at("dev_guru", 22 * 8, 10 * 8 + 4)
|
||||
Sprite.draw_at("dev_operator", 27 * 8, 10 * 8 + 4)
|
||||
|
||||
Sprite.draw_list(Context.office_sprites)
|
||||
end
|
||||
Context.have_been_to_office = true
|
||||
end
|
||||
})
|
||||
|
||||
@@ -16,7 +16,7 @@ Screen.register({
|
||||
end,
|
||||
update = function()
|
||||
if not Context.stat_screen_active then return end
|
||||
if Input.select() or Input.player_interact() then
|
||||
if Input.select() or Input.select() then
|
||||
Focus.stop()
|
||||
Context.stat_screen_active = false
|
||||
Meter.show()
|
||||
|
||||
@@ -8,6 +8,28 @@ Screen.register({
|
||||
},
|
||||
init = function()
|
||||
Audio.music_play_room_work()
|
||||
|
||||
local possible_sprites = {
|
||||
"matrix_trinity",
|
||||
"matrix_neo",
|
||||
{id="matrix_oraculum", y_correct=1 * 8},
|
||||
"matrix_architect"
|
||||
}
|
||||
|
||||
local possible_positions = {
|
||||
{x = 5 * 8, y = 11 * 8},
|
||||
{x = 7 * 8, y = 11 * 8},
|
||||
{x = 9 * 8, y = 11 * 8},
|
||||
{x = 11 * 8, y = 11 * 8},
|
||||
{x = 13 * 8, y = 11 * 8},
|
||||
{x = 15 * 8, y = 11 * 8},
|
||||
{x = 18 * 8, y = 11 * 8},
|
||||
{x = 21 * 8, y = 11 * 8},
|
||||
{x = 24 * 8, y = 11 * 8},
|
||||
{x = 27 * 8, y = 11 * 8},
|
||||
}
|
||||
|
||||
Context.walking_to_office_sprites = Sprite.list_randomize(possible_sprites, possible_positions)
|
||||
end,
|
||||
background = "street",
|
||||
draw = function()
|
||||
@@ -16,10 +38,8 @@ Screen.register({
|
||||
Sprite.draw_at("sumphore", 9 * 8, 2 * 8)
|
||||
Sprite.draw_at("pizza_vendor", 19 * 8, 1 * 8)
|
||||
Sprite.draw_at("dev_guard", 22 * 8, 2 * 8)
|
||||
Sprite.draw_at("matrix_trinity", 5 * 8, 11 * 8)
|
||||
Sprite.draw_at("matrix_neo", 7 * 8, 11 * 8)
|
||||
Sprite.draw_at("matrix_oraculum", 9 * 8, 12 * 8)
|
||||
Sprite.draw_at("matrix_architect", 11 * 8, 11 * 8)
|
||||
|
||||
Sprite.draw_list(Context.walking_to_office_sprites)
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
Situation.register({
|
||||
id = "drink_coffee",
|
||||
handle = function()
|
||||
Audio.sfx_select()
|
||||
end,
|
||||
})
|
||||
@@ -1,84 +0,0 @@
|
||||
--- @section Situation
|
||||
local _situations = {}
|
||||
|
||||
--- Registers a situation definition.
|
||||
--- @within Situation
|
||||
--- @param situation table The situation data table.
|
||||
--- @param situation.id string Unique situation identifier.<br/>
|
||||
--- @param[opt] situation.screen_id string ID of the screen this situation belongs to.<br/>
|
||||
--- @param[opt] situation.handle function Called when the situation is applied. Defaults to noop.<br/>
|
||||
--- @param[opt] situation.update function Called each frame while situation is active. Defaults to noop.<br/>
|
||||
function Situation.register(situation)
|
||||
if not situation or not situation.id then
|
||||
PopupWindow.show({"Error: Invalid situation object registered (missing id)!"})
|
||||
return
|
||||
end
|
||||
if not situation.handle then
|
||||
situation.handle = function() end
|
||||
end
|
||||
if not situation.update then
|
||||
situation.update = function() end
|
||||
end
|
||||
if _situations[situation.id] then
|
||||
trace("Warning: Overwriting situation with id: " .. situation.id)
|
||||
end
|
||||
_situations[situation.id] = situation
|
||||
end
|
||||
|
||||
--- Gets a situation by ID.
|
||||
--- @within Situation
|
||||
--- @param id string The situation ID.
|
||||
--- @return result table The situation table or nil. </br>
|
||||
--- Fields: </br>
|
||||
--- * id (string) Unique situation identifier.<br/>
|
||||
--- * screen_id (string) ID of the screen this situation belongs to.<br/>
|
||||
--- * handle (function) Called when the situation is applied.<br/>
|
||||
--- * update (function) Called each frame while situation is active.<br/>
|
||||
function Situation.get_by_id(id)
|
||||
return _situations[id]
|
||||
end
|
||||
|
||||
--- Gets all registered situations, optionally filtered by screen ID.
|
||||
--- @within Situation
|
||||
--- @param screen_id string Optional. If provided, returns situations associated with this screen ID.
|
||||
--- @return result table A table containing all registered situation data, indexed by their IDs, or an array filtered by screen_id. </br>
|
||||
--- Fields: </br>
|
||||
--- * id (string) Unique situation identifier.<br/>
|
||||
--- * screen_id (string) ID of the screen this situation belongs to.<br/>
|
||||
--- * handle (function) Called when the situation is applied.<br/>
|
||||
--- * update (function) Called each frame while situation is active.<br/>
|
||||
function Situation.get_all(screen_id)
|
||||
if screen_id then
|
||||
local filtered_situations = {}
|
||||
for _, situation in pairs(_situations) do
|
||||
if situation.screen_id == screen_id then
|
||||
table.insert(filtered_situations, situation)
|
||||
end
|
||||
end
|
||||
return filtered_situations
|
||||
end
|
||||
return _situations
|
||||
end
|
||||
|
||||
--- Applies a situation, checking screen compatibility and returning the new situation ID if successful.
|
||||
--- @within Situation
|
||||
--- @param id string The situation ID to apply.
|
||||
--- @param current_screen_id string The ID of the currently active screen.
|
||||
--- @return string|nil The ID of the applied situation if successful, otherwise nil.
|
||||
function Situation.apply(id, current_screen_id)
|
||||
local situation = Situation.get_by_id(id)
|
||||
local screen = Screen.get_by_id(current_screen_id)
|
||||
|
||||
if not situation then
|
||||
trace("Error: No situation found with id: " .. id)
|
||||
return nil
|
||||
end
|
||||
|
||||
if Util.contains(screen.situations, id) then
|
||||
situation.handle()
|
||||
return id
|
||||
else
|
||||
trace("Info: Situation " .. id .. " cannot be applied to current screen (id: " .. current_screen_id .. ").")
|
||||
return nil
|
||||
end
|
||||
end
|
||||
@@ -3,7 +3,7 @@ local _sprites = {}
|
||||
local _active_sprites = {}
|
||||
|
||||
local function draw_sprite_instance(sprite_data, params)
|
||||
local colorkey = params.colorkey or sprite_data.colorkey or Config.colors.transparent
|
||||
local colorkey = params.colorkey or sprite_data.colorkey or 0
|
||||
local scale = params.scale or sprite_data.scale or 1
|
||||
local flip_x = params.flip_x or sprite_data.flip_x or 0
|
||||
local flip_y = params.flip_y or sprite_data.flip_y or 0
|
||||
@@ -73,6 +73,70 @@ function Sprite.generate_table(width, height, starting_s, x_base, y_base, x_step
|
||||
return sprites
|
||||
end
|
||||
|
||||
--- Immediately draws a list of sprites
|
||||
--- @within Sprite
|
||||
--- @param sprite_list table An array of tables, each containing: `id` (string) sprite identifier, `x` (number) x-coordinate, `y` (number) y-coordinate, and optional `colorkey`, `scale`, `flip_x`, `flip_y`, `rot` parameters.
|
||||
function Sprite.draw_list(sprite_list)
|
||||
for _, sprite_info in ipairs(sprite_list) do
|
||||
local sprite_data = _sprites[sprite_info.id]
|
||||
if not sprite_data then
|
||||
trace("Error: Attempted to draw non-registered sprite with id: " .. sprite_info.id)
|
||||
else
|
||||
draw_sprite_instance(sprite_data, sprite_info)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--- Given a list of sprite IDs (or sprite entries with correction offsets) and a list of possible positions, randomly assigns each sprite to a unique position and returns a drawable list.
|
||||
--- @within Sprite
|
||||
--- @param sprite_ids table An array of sprite identifier values or tables.
|
||||
--- Each entry may be either:
|
||||
--- - string: sprite ID to draw.
|
||||
--- - table: { sprite_id = string, x_correct = number, y_correct = number }.
|
||||
--- @param positions table An array of tables, each containing `x` and `y` fields for possible sprite positions.
|
||||
function Sprite.list_randomize(sprite_ids, positions)
|
||||
if #sprite_ids > #positions then
|
||||
trace("Error: More sprite IDs than available positions in Sprite.draw_randomized")
|
||||
return
|
||||
end
|
||||
|
||||
local shuffled_positions = {}
|
||||
for i, pos in ipairs(positions) do
|
||||
shuffled_positions[i] = pos
|
||||
end
|
||||
for i = #shuffled_positions, 2, -1 do
|
||||
local j = math.random(i)
|
||||
shuffled_positions[i], shuffled_positions[j] = shuffled_positions[j], shuffled_positions[i]
|
||||
end
|
||||
|
||||
local drawable_list = {}
|
||||
for i, sprite_entry in ipairs(sprite_ids) do
|
||||
local sprite_id = sprite_entry
|
||||
local x_correct = 0
|
||||
local y_correct = 0
|
||||
|
||||
if type(sprite_entry) == "table" then
|
||||
sprite_id = sprite_entry.sprite_id or sprite_entry.id
|
||||
x_correct = sprite_entry.x_correct or 0
|
||||
y_correct = sprite_entry.y_correct or 0
|
||||
end
|
||||
|
||||
local sprite_data = _sprites[sprite_id]
|
||||
if not sprite_data then
|
||||
trace("Error: Attempted to draw non-registered sprite with id: " .. tostring(sprite_id))
|
||||
else
|
||||
local pos = shuffled_positions[i]
|
||||
table.insert(drawable_list, {
|
||||
id = sprite_id,
|
||||
x = pos.x + x_correct,
|
||||
y = pos.y + y_correct
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
return drawable_list
|
||||
end
|
||||
|
||||
--- Schedules a sprite for drawing.
|
||||
--- @within Sprite
|
||||
--- @param id string The unique identifier of the sprite.<br/>
|
||||
|
||||
@@ -5,10 +5,9 @@ local INPUT_KEY_LEFT = 2
|
||||
local INPUT_KEY_RIGHT = 3
|
||||
local INPUT_KEY_A = 4
|
||||
local INPUT_KEY_B = 5
|
||||
local INPUT_KEY_Y = 7
|
||||
local INPUT_KEY_SPACE = 48
|
||||
local INPUT_KEY_BACKSPACE = 51
|
||||
local INPUT_KEY_ENTER = 50
|
||||
local INPUT_KEY_BACKSPACE = 51
|
||||
|
||||
--- Checks if Up is pressed.
|
||||
--- @within Input
|
||||
@@ -22,22 +21,12 @@ function Input.left() return btnp(INPUT_KEY_LEFT) end
|
||||
--- Checks if Right is pressed.
|
||||
--- @within Input
|
||||
function Input.right() return btnp(INPUT_KEY_RIGHT) end
|
||||
--- Checks if Space is pressed.
|
||||
--- @within Input
|
||||
function Input.space() return keyp(INPUT_KEY_SPACE) end
|
||||
|
||||
--- Checks if Select is pressed.
|
||||
--- @within Input
|
||||
function Input.select() return btnp(INPUT_KEY_A) or keyp(INPUT_KEY_SPACE) end
|
||||
--- Checks if Menu Confirm is pressed.
|
||||
function Input.select() return btnp(INPUT_KEY_A) or keyp(INPUT_KEY_SPACE) or Mouse.clicked() end
|
||||
--- Checks if Back is pressed.
|
||||
--- @within Input
|
||||
function Input.menu_confirm() return btnp(INPUT_KEY_A) or keyp(INPUT_KEY_ENTER) end
|
||||
--- Checks if Player Interact is pressed.
|
||||
function Input.back() return btnp(INPUT_KEY_B) or keyp(INPUT_KEY_BACKSPACE) end
|
||||
--- Checks if Enter is pressed.
|
||||
--- @within Input
|
||||
function Input.player_interact() return btnp(INPUT_KEY_B) or keyp(INPUT_KEY_ENTER) end
|
||||
--- Checks if Menu Back is pressed.
|
||||
--- @within Input
|
||||
function Input.menu_back() return btnp(INPUT_KEY_Y) or keyp(INPUT_KEY_BACKSPACE) end
|
||||
--- Checks if Toggle Popup is pressed.
|
||||
--- @within Input
|
||||
function Input.toggle_popup() return keyp(INPUT_KEY_ENTER) end
|
||||
function Input.enter() return keyp(INPUT_KEY_ENTER) end
|
||||
|
||||
@@ -7,7 +7,6 @@ local initialized_game = false
|
||||
local function init_game()
|
||||
if initialized_game then return false end
|
||||
Context.reset()
|
||||
poke(0x03FF, 1 << Config.colors.transparent) -- Set the default transparent color in the palette
|
||||
Window.set_current("intro_title") -- Set initial window using new manager
|
||||
MenuWindow.refresh_menu_items()
|
||||
initialized_game = true
|
||||
@@ -18,6 +17,7 @@ end
|
||||
--- @within Main
|
||||
function TIC()
|
||||
init_game()
|
||||
Mouse.update()
|
||||
|
||||
local now = time()
|
||||
if Context.last_frame_time == 0 then
|
||||
|
||||
81
inc/system/system.mouse.lua
Normal file
81
inc/system/system.mouse.lua
Normal file
@@ -0,0 +1,81 @@
|
||||
--- @section Mouse
|
||||
local _mx, _my = 0, 0
|
||||
local _mleft, _mleft_prev = false, false
|
||||
local _consumed = false
|
||||
|
||||
--- Updates mouse state. Call once per frame.
|
||||
--- @within Mouse
|
||||
function Mouse.update()
|
||||
_mleft_prev = _mleft
|
||||
_consumed = false
|
||||
local mt = {mouse()}
|
||||
_mx, _my, _mleft = mt[1], mt[2], mt[3]
|
||||
|
||||
-- trace mouse position and tile for testing purposes
|
||||
if Context.test_mode and Context.mouse_trace then
|
||||
trace("Mouse: (" .. _mx .. "," .. _my .. "), tile: (" .. math.floor(_mx / 8) .. "," .. math.floor(_my / 8) .. ")")
|
||||
end
|
||||
end
|
||||
|
||||
--- Returns current mouse X position.
|
||||
--- @within Mouse
|
||||
function Mouse.x() return _mx end
|
||||
|
||||
--- Returns current mouse Y position.
|
||||
--- @within Mouse
|
||||
function Mouse.y() return _my end
|
||||
|
||||
--- Returns true if the mouse button was just pressed this frame (and not yet consumed).
|
||||
--- @within Mouse
|
||||
function Mouse.clicked() return _mleft and not _mleft_prev and not _consumed end
|
||||
|
||||
--- Returns true if the mouse button is held down.
|
||||
--- @within Mouse
|
||||
function Mouse.held() return _mleft end
|
||||
|
||||
--- Marks the current click as consumed so Mouse.clicked() won't fire again this frame.
|
||||
--- @within Mouse
|
||||
function Mouse.consume() _consumed = true end
|
||||
|
||||
--- Returns true if the mouse is within the given rectangle.
|
||||
--- @within Mouse
|
||||
--- @param x number Left edge.
|
||||
--- @param y number Top edge.
|
||||
--- @param w number Width.
|
||||
--- @param h number Height.
|
||||
function Mouse.in_rect(x, y, w, h)
|
||||
return _mx >= x and _mx < x + w and _my >= y and _my < y + h
|
||||
end
|
||||
|
||||
--- Returns true if the mouse is within the given circle.
|
||||
--- @within Mouse
|
||||
--- @param cx number Center x.
|
||||
--- @param cy number Center y.
|
||||
--- @param r number Radius.
|
||||
function Mouse.in_circle(cx, cy, r)
|
||||
local dx = _mx - cx
|
||||
local dy = _my - cy
|
||||
return (dx * dx + dy * dy) <= (r * r)
|
||||
end
|
||||
|
||||
--- Returns true if the mouse was clicked inside the given rectangle, and consumes the click.
|
||||
--- @within Mouse
|
||||
--- @param rect table A table with fields: x, y, w, h.
|
||||
function Mouse.zone(rect)
|
||||
if Mouse.clicked() and Mouse.in_rect(rect.x, rect.y, rect.w, rect.h) then
|
||||
Mouse.consume()
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
--- Returns true if the mouse was clicked inside the given circle, and consumes the click.
|
||||
--- @within Mouse
|
||||
--- @param circle table A table with fields: x, y, r.
|
||||
function Mouse.zone_circle(circle)
|
||||
if Mouse.clicked() and Mouse.in_circle(circle.x, circle.y, circle.r) then
|
||||
Mouse.consume()
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
@@ -10,7 +10,7 @@ function Print.text(text, x, y, color, fixed, scale)
|
||||
local shadow_color = Config.colors.black
|
||||
if color == shadow_color then shadow_color = Config.colors.light_grey end
|
||||
scale = scale or 1
|
||||
print(text, x + 1, y + 1, shadow_color, fixed, scale)
|
||||
print(text, x + scale, y + scale, shadow_color, fixed, scale)
|
||||
print(text, x, y, color, fixed, scale)
|
||||
end
|
||||
|
||||
@@ -24,7 +24,7 @@ end
|
||||
--- @param[opt] scale number The scaling factor.<br/>
|
||||
function Print.text_center(text, x, y, color, fixed, scale)
|
||||
scale = scale or 1
|
||||
local text_width = print(text, 0, -6, 0, fixed, scale)
|
||||
local text_width = print(text, 0, -6 * scale, 0, fixed, scale)
|
||||
local centered_x = x - (text_width / 2)
|
||||
Print.text(text, centered_x, y, color, fixed, scale)
|
||||
end
|
||||
|
||||
@@ -38,8 +38,12 @@ end
|
||||
--- @within UI
|
||||
--- @param items table A table of menu items.<br/>
|
||||
--- @param selected_item number The current index of the selected item.<br/>
|
||||
--- @param[opt] x number Menu x position (required for mouse support).<br/>
|
||||
--- @param[opt] y number Menu y position (required for mouse support).<br/>
|
||||
--- @param[opt] centered boolean Whether the menu is centered horizontally.<br/>
|
||||
--- @return number selected_item The updated index of the selected item.
|
||||
function UI.update_menu(items, selected_item)
|
||||
--- @return boolean mouse_confirmed True if the user clicked on a menu item.
|
||||
function UI.update_menu(items, selected_item, x, y, centered)
|
||||
if Input.up() then
|
||||
Audio.sfx_beep()
|
||||
selected_item = selected_item - 1
|
||||
@@ -53,7 +57,25 @@ function UI.update_menu(items, selected_item)
|
||||
selected_item = 1
|
||||
end
|
||||
end
|
||||
return selected_item
|
||||
|
||||
if x ~= nil and y ~= nil then
|
||||
local menu_x = x
|
||||
if centered then
|
||||
local max_w = 0
|
||||
for _, item in ipairs(items) do
|
||||
local w = print(item.label, 0, -10, 0, false, 1, false)
|
||||
if w > max_w then max_w = w end
|
||||
end
|
||||
menu_x = (Config.screen.width - max_w) / 2
|
||||
end
|
||||
for i, _ in ipairs(items) do
|
||||
if Mouse.zone({ x = menu_x - 8, y = y + (i-1) * 10, w = Config.screen.width, h = 10 }) then
|
||||
return i, true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return selected_item, false
|
||||
end
|
||||
|
||||
--- Draws a bordered textbox with scrolling text.
|
||||
|
||||
@@ -107,9 +107,9 @@ function AudioTestWindow.update()
|
||||
AudioTestWindow.menuitems = AudioTestWindow.generate_menuitems(
|
||||
AudioTestWindow.list_func, AudioTestWindow.index_func
|
||||
)
|
||||
elseif Input.menu_confirm() then
|
||||
elseif Input.select() then
|
||||
AudioTestWindow.menuitems[AudioTestWindow.index_menu].decision()
|
||||
elseif Input.menu_back() then
|
||||
elseif Input.back() then
|
||||
AudioTestWindow.back()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,102 +0,0 @@
|
||||
--- @section ConfigurationWindow
|
||||
ConfigurationWindow.controls = {}
|
||||
ConfigurationWindow.selected_control = 1
|
||||
|
||||
--- Initializes configuration window.
|
||||
--- @within ConfigurationWindow
|
||||
function ConfigurationWindow.init()
|
||||
ConfigurationWindow.controls = {
|
||||
{
|
||||
label = "Save",
|
||||
action = function() Config.save() end,
|
||||
type = "action_item"
|
||||
},
|
||||
{
|
||||
label = "Restore Defaults",
|
||||
action = function() Config.reset() end,
|
||||
type = "action_item"
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
--- Draws configuration window.
|
||||
--- @within ConfigurationWindow
|
||||
function ConfigurationWindow.draw()
|
||||
UI.draw_top_bar("Configuration")
|
||||
|
||||
local x_start = 10
|
||||
local y_start = 40
|
||||
local x_value_right_align = Config.screen.width - 10
|
||||
local char_width = 4
|
||||
for i, control in ipairs(ConfigurationWindow.controls) do
|
||||
local current_y = y_start + (i - 1) * 12
|
||||
local color = Config.colors.light_blue
|
||||
if control.type == "numeric_stepper" then
|
||||
local value = control.get()
|
||||
local label_text = control.label
|
||||
local value_text = string.format(control.format, value)
|
||||
local value_x = x_value_right_align - (#value_text * char_width)
|
||||
|
||||
if i == ConfigurationWindow.selected_control then
|
||||
color = Config.colors.item
|
||||
Print.text("<", x_start - 8, current_y, color)
|
||||
Print.text(label_text, x_start, current_y, color)
|
||||
Print.text(value_text, value_x, current_y, color)
|
||||
Print.text(">", x_value_right_align + 4, current_y, color)
|
||||
else
|
||||
Print.text(label_text, x_start, current_y, color)
|
||||
Print.text(value_text, value_x, current_y, color)
|
||||
end
|
||||
elseif control.type == "action_item" then
|
||||
local label_text = control.label
|
||||
if i == ConfigurationWindow.selected_control then
|
||||
color = Config.colors.item
|
||||
Print.text("<", x_start - 8, current_y, color)
|
||||
Print.text(label_text, x_start, current_y, color)
|
||||
Print.text(">", x_start + 8 + (#label_text * char_width) + 4, current_y, color)
|
||||
else
|
||||
Print.text(label_text, x_start, current_y, color)
|
||||
end
|
||||
end
|
||||
end
|
||||
Print.text("Press B to go back", x_start, 120, Config.colors.light_grey)
|
||||
end
|
||||
|
||||
--- Updates configuration window logic.
|
||||
--- @within ConfigurationWindow
|
||||
function ConfigurationWindow.update()
|
||||
if Input.menu_back() then
|
||||
GameWindow.set_state("menu")
|
||||
return
|
||||
end
|
||||
|
||||
if Input.up() then
|
||||
ConfigurationWindow.selected_control = ConfigurationWindow.selected_control - 1
|
||||
if ConfigurationWindow.selected_control < 1 then
|
||||
ConfigurationWindow.selected_control = #ConfigurationWindow.controls
|
||||
end
|
||||
elseif Input.down() then
|
||||
ConfigurationWindow.selected_control = ConfigurationWindow.selected_control + 1
|
||||
if ConfigurationWindow.selected_control > #ConfigurationWindow.controls then
|
||||
ConfigurationWindow.selected_control = 1
|
||||
end
|
||||
end
|
||||
|
||||
local control = ConfigurationWindow.controls[ConfigurationWindow.selected_control]
|
||||
if control then
|
||||
if control.type == "numeric_stepper" then
|
||||
local current_value = control.get()
|
||||
if Input.left() then
|
||||
local new_value = math.max(control.min, current_value - control.step)
|
||||
control.set(new_value)
|
||||
elseif Input.right() then
|
||||
local new_value = math.min(control.max, current_value + control.step)
|
||||
control.set(new_value)
|
||||
end
|
||||
elseif control.type == "action_item" then
|
||||
if Input.menu_confirm() then
|
||||
control.action()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -26,7 +26,7 @@ end
|
||||
--- @within ContinuedWindow
|
||||
function ContinuedWindow.update()
|
||||
ContinuedWindow.timer = ContinuedWindow.timer - 1
|
||||
if ContinuedWindow.timer <= 0 or Input.select() or Input.menu_confirm() then
|
||||
if ContinuedWindow.timer <= 0 or Input.select() or Input.select() then
|
||||
Window.set_current("menu")
|
||||
MenuWindow.refresh_menu_items()
|
||||
end
|
||||
|
||||
44
inc/window/window.controls.lua
Normal file
44
inc/window/window.controls.lua
Normal file
@@ -0,0 +1,44 @@
|
||||
--- @section ControlsWindow
|
||||
local _controls = {
|
||||
{ action = "Navigate", keyboard = "Arrow keys", gamepad = "D-pad" },
|
||||
{ action = "Select / OK", keyboard = "Space", gamepad = "Z button" },
|
||||
{ action = "Back", keyboard = "Backspace", gamepad = "B button" },
|
||||
{ action = "Click", keyboard = "Mouse", gamepad = "" },
|
||||
}
|
||||
|
||||
--- Draws the controls window.
|
||||
--- @within ControlsWindow
|
||||
function ControlsWindow.draw()
|
||||
UI.draw_top_bar("Controls")
|
||||
|
||||
local col_action = 4
|
||||
local col_keyboard = 80
|
||||
local col_gamepad = 170
|
||||
local row_h = 10
|
||||
local y_header = 18
|
||||
local y_start = 30
|
||||
|
||||
Print.text("Action", col_action, y_header, Config.colors.light_grey)
|
||||
Print.text("Keyboard", col_keyboard, y_header, Config.colors.light_grey)
|
||||
Print.text("Gamepad", col_gamepad, y_header, Config.colors.light_grey)
|
||||
line(col_action, y_header + 8, Config.screen.width - 4, y_header + 8, Config.colors.dark_grey)
|
||||
|
||||
for i, entry in ipairs(_controls) do
|
||||
local y = y_start + (i - 1) * row_h
|
||||
Print.text(entry.action, col_action, y, Config.colors.white)
|
||||
Print.text(entry.keyboard, col_keyboard, y, Config.colors.light_blue)
|
||||
if entry.gamepad ~= "" then
|
||||
Print.text(entry.gamepad, col_gamepad, y, Config.colors.light_blue)
|
||||
end
|
||||
end
|
||||
|
||||
Print.text("Space / Z button or click to go back", col_action, Config.screen.height - 10, Config.colors.light_grey)
|
||||
end
|
||||
|
||||
--- Updates the controls window logic.
|
||||
--- @within ControlsWindow
|
||||
function ControlsWindow.update()
|
||||
if Input.back() or Input.select() then
|
||||
Window.set_current("menu")
|
||||
end
|
||||
end
|
||||
@@ -52,7 +52,7 @@ function EndWindow.update()
|
||||
end
|
||||
end
|
||||
|
||||
if Input.menu_confirm() then
|
||||
if Input.select() then
|
||||
Audio.sfx_select()
|
||||
if Context._end.selection == 1 then
|
||||
Context._end.state = "ending"
|
||||
@@ -69,7 +69,7 @@ function EndWindow.update()
|
||||
end
|
||||
end
|
||||
elseif Context._end.state == "ending" then
|
||||
if Input.menu_confirm() then
|
||||
if Input.select() then
|
||||
Window.set_current("menu")
|
||||
MenuWindow.refresh_menu_items()
|
||||
end
|
||||
|
||||
@@ -38,7 +38,7 @@ end
|
||||
--- @within GameWindow
|
||||
function GameWindow.update()
|
||||
Focus.update()
|
||||
if Input.menu_back() then
|
||||
if Input.back() then
|
||||
Window.set_current("menu")
|
||||
MenuWindow.refresh_menu_items()
|
||||
return
|
||||
@@ -48,14 +48,6 @@ function GameWindow.update()
|
||||
if not screen or not screen.update then return end
|
||||
screen.update()
|
||||
|
||||
-- Handle current situation updates
|
||||
if Context.game.current_situation then
|
||||
local current_situation_obj = Situation.get_by_id(Context.game.current_situation)
|
||||
if current_situation_obj and type(current_situation_obj.update) == "function" then
|
||||
current_situation_obj.update()
|
||||
end
|
||||
end
|
||||
|
||||
if Context.stat_screen_active then return end
|
||||
|
||||
-- Fetch and filter decisions locally
|
||||
@@ -68,7 +60,7 @@ function GameWindow.update()
|
||||
_selected_decision_index = 1
|
||||
end
|
||||
|
||||
local new_selected_decision_index = Decision.update(
|
||||
local new_selected_decision_index, mouse_confirmed = Decision.update(
|
||||
_available_decisions,
|
||||
_selected_decision_index
|
||||
)
|
||||
@@ -77,7 +69,7 @@ function GameWindow.update()
|
||||
_selected_decision_index = new_selected_decision_index
|
||||
end
|
||||
|
||||
if Input.select() then
|
||||
if Input.select() or mouse_confirmed then
|
||||
local selected_decision = _available_decisions[_selected_decision_index]
|
||||
if selected_decision and selected_decision.handle then
|
||||
Audio.sfx_select()
|
||||
|
||||
@@ -31,7 +31,7 @@ function BriefIntroWindow.update()
|
||||
lines = lines + 1
|
||||
end
|
||||
|
||||
if BriefIntroWindow.y < -lines * 8 or Input.select() or Input.menu_confirm() then
|
||||
if BriefIntroWindow.y < -lines * 8 or Input.select() or Input.select() then
|
||||
Window.set_current("menu")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -30,7 +30,7 @@ end
|
||||
--- @within TitleIntroWindow
|
||||
function TitleIntroWindow.update()
|
||||
TitleIntroWindow.timer = TitleIntroWindow.timer - 1
|
||||
if TitleIntroWindow.timer <= 0 or Input.select() or Input.menu_confirm() then
|
||||
if TitleIntroWindow.timer <= 0 or Input.select() or Input.select() then
|
||||
Window.set_current("intro_ttg")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -27,13 +27,13 @@ function TTGIntroWindow.update()
|
||||
TTGIntroWindow.glitch_started = true
|
||||
end
|
||||
|
||||
-- Count menu_back presses during the intro
|
||||
if Input.menu_back() then
|
||||
-- Count enter presses during the intro
|
||||
if Input.enter() then
|
||||
TTGIntroWindow.space_count = TTGIntroWindow.space_count + 1
|
||||
end
|
||||
|
||||
TTGIntroWindow.timer = TTGIntroWindow.timer - 1
|
||||
if TTGIntroWindow.timer <= 0 or Input.menu_confirm() then
|
||||
if TTGIntroWindow.timer <= 0 or Input.select() then
|
||||
-- Evaluate exactly 3 presses at the end of the intro
|
||||
if TTGIntroWindow.space_count == 3 then
|
||||
Context.test_mode = true
|
||||
|
||||
@@ -1,18 +1,62 @@
|
||||
--- @section MenuWindow
|
||||
local _menu_items = {}
|
||||
local _click_timer = 0
|
||||
local _anim = 0
|
||||
local _menu_max_w = 0
|
||||
local ANIM_SPEED = 2.5
|
||||
local HEADER_H = 28
|
||||
|
||||
--- Calculates the animated x position of the menu block.
|
||||
--- @within MenuWindow
|
||||
--- @return number x The left edge x coordinate for the menu.
|
||||
function MenuWindow.calc_menu_x()
|
||||
local center_start = Config.screen.width / 2
|
||||
local center_end = Config.screen.width * 0.72
|
||||
local center = center_start + _anim * (center_end - center_start)
|
||||
return math.floor(center - _menu_max_w / 2)
|
||||
end
|
||||
|
||||
--- Draws the header with title and separator.
|
||||
--- @within MenuWindow
|
||||
function MenuWindow.draw_header()
|
||||
rect(0, 0, Config.screen.width, HEADER_H, Config.colors.dark_grey)
|
||||
rect(0, HEADER_H - 2, Config.screen.width, 2, Config.colors.light_blue)
|
||||
|
||||
local cx = Config.screen.width / 2
|
||||
local subtitle = "Definitely not an"
|
||||
if Context.test_mode then subtitle = subtitle .. " [TEST]" end
|
||||
local sub_w = print(subtitle, 0, -6, 0, false, 1, true)
|
||||
print(subtitle, math.floor(cx - sub_w / 2) + 1, 5, Config.colors.dark_grey, false, 1, true)
|
||||
print(subtitle, math.floor(cx - sub_w / 2), 4, Config.colors.light_grey, false, 1, true)
|
||||
|
||||
Print.text_center("IMPOSTOR", cx, 12, Config.colors.item, false, 2)
|
||||
end
|
||||
|
||||
--- Draws the 4x scaled Norman sprite on the left side of the screen.
|
||||
--- @within MenuWindow
|
||||
function MenuWindow.draw_norman()
|
||||
local nx = math.floor(Config.screen.width * 0.45 / 2) - 32
|
||||
local ny = HEADER_H + math.floor((Config.screen.height - HEADER_H - 96) / 2)
|
||||
spr(272, nx, ny, 0, 4)
|
||||
spr(273, nx + 32, ny, 0, 4)
|
||||
spr(288, nx, ny + 32, 0, 4)
|
||||
spr(289, nx + 32, ny + 32, 0, 4)
|
||||
spr(304, nx, ny + 64, 0, 4)
|
||||
spr(305, nx + 32, ny + 64, 0, 4)
|
||||
end
|
||||
|
||||
--- Draws the menu window.
|
||||
--- @within MenuWindow
|
||||
function MenuWindow.draw()
|
||||
local title = "Definitely not an Impostor"
|
||||
if Context.test_mode then
|
||||
title = title .. " (TEST MODE)"
|
||||
MenuWindow.draw_header()
|
||||
|
||||
if _anim > 0 then
|
||||
MenuWindow.draw_norman()
|
||||
end
|
||||
UI.draw_top_bar(title)
|
||||
|
||||
local menu_h = #_menu_items * 10
|
||||
local y = 10 + (Config.screen.height - 10 - 10 - menu_h) / 2
|
||||
UI.draw_menu(_menu_items, Context.current_menu_item, 0, y, true)
|
||||
local y = HEADER_H + math.floor((Config.screen.height - HEADER_H - 10 - menu_h) / 2)
|
||||
UI.draw_menu(_menu_items, Context.current_menu_item, MenuWindow.calc_menu_x(), y, false)
|
||||
|
||||
local ttg_text = "TTG"
|
||||
local ttg_w = print(ttg_text, 0, -10, 0, false, 1, false)
|
||||
@@ -22,9 +66,32 @@ end
|
||||
--- Updates the menu window logic.
|
||||
--- @within MenuWindow
|
||||
function MenuWindow.update()
|
||||
Context.current_menu_item = UI.update_menu(_menu_items, Context.current_menu_item)
|
||||
if _anim < 1 then
|
||||
_anim = math.min(1, _anim + ANIM_SPEED * Context.delta_time)
|
||||
end
|
||||
|
||||
if Input.menu_confirm() then
|
||||
local menu_h = #_menu_items * 10
|
||||
local y = HEADER_H + math.floor((Config.screen.height - HEADER_H - 10 - menu_h) / 2)
|
||||
|
||||
if _click_timer > 0 then
|
||||
_click_timer = _click_timer - Context.delta_time
|
||||
if _click_timer <= 0 then
|
||||
_click_timer = 0
|
||||
local selected_item = _menu_items[Context.current_menu_item]
|
||||
if selected_item and selected_item.decision then
|
||||
selected_item.decision()
|
||||
end
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
local new_item, mouse_confirmed = UI.update_menu(_menu_items, Context.current_menu_item, MenuWindow.calc_menu_x(), y, false)
|
||||
Context.current_menu_item = new_item
|
||||
|
||||
if mouse_confirmed then
|
||||
Audio.sfx_select()
|
||||
_click_timer = 0.5
|
||||
elseif Input.select() then
|
||||
local selected_item = _menu_items[Context.current_menu_item]
|
||||
if selected_item and selected_item.decision then
|
||||
Audio.sfx_select()
|
||||
@@ -64,11 +131,10 @@ function MenuWindow.exit()
|
||||
exit()
|
||||
end
|
||||
|
||||
--- Opens the configuration menu.
|
||||
--- Opens the controls screen.
|
||||
--- @within MenuWindow
|
||||
function MenuWindow.configuration()
|
||||
ConfigurationWindow.init()
|
||||
GameWindow.set_state("configuration")
|
||||
function MenuWindow.controls()
|
||||
Window.set_current("controls")
|
||||
end
|
||||
|
||||
--- Opens the audio test menu.
|
||||
@@ -85,7 +151,7 @@ function MenuWindow.continued()
|
||||
GameWindow.set_state("continued")
|
||||
end
|
||||
|
||||
--- Opens the minigame ddr test menu.
|
||||
--- Opens the DDR minigame test.
|
||||
--- @within MenuWindow
|
||||
function MenuWindow.ddr_test()
|
||||
AudioTestWindow.init()
|
||||
@@ -93,26 +159,34 @@ function MenuWindow.ddr_test()
|
||||
MinigameDDRWindow.start("menu", "generated", { special_mode = "only_nothing" })
|
||||
end
|
||||
|
||||
--- Refreshes menu items.
|
||||
--- Refreshes the list of menu items based on current game state.
|
||||
--- @within MenuWindow
|
||||
function MenuWindow.refresh_menu_items()
|
||||
_menu_items = {}
|
||||
if Context.game_in_progress then
|
||||
table.insert(_menu_items, {label = "Resume Game", decision = MenuWindow.resume_game})
|
||||
table.insert(_menu_items, {label = "Save Game", decision = MenuWindow.save_game})
|
||||
table.insert(_menu_items, {label = "Save Game", decision = MenuWindow.save_game})
|
||||
end
|
||||
|
||||
table.insert(_menu_items, {label = "New Game", decision = MenuWindow.new_game})
|
||||
table.insert(_menu_items, {label = "New Game", decision = MenuWindow.new_game})
|
||||
table.insert(_menu_items, {label = "Load Game", decision = MenuWindow.load_game})
|
||||
table.insert(_menu_items, {label = "Configuration", decision = MenuWindow.configuration})
|
||||
table.insert(_menu_items, {label = "Controls", decision = MenuWindow.controls})
|
||||
|
||||
if Context.test_mode then
|
||||
table.insert(_menu_items, {label = "Audio Test", decision = MenuWindow.audio_test})
|
||||
table.insert(_menu_items, {label = "Audio Test", decision = MenuWindow.audio_test})
|
||||
table.insert(_menu_items, {label = "To Be Continued...", decision = MenuWindow.continued})
|
||||
table.insert(_menu_items, {label = "DDR Test", decision = MenuWindow.ddr_test})
|
||||
table.insert(_menu_items, {label = "DDR Test", decision = MenuWindow.ddr_test})
|
||||
end
|
||||
|
||||
table.insert(_menu_items, {label = "Exit", decision = MenuWindow.exit})
|
||||
|
||||
_menu_max_w = 0
|
||||
for _, item in ipairs(_menu_items) do
|
||||
local w = print(item.label, 0, -10, 0, false, 1, false)
|
||||
if w > _menu_max_w then _menu_max_w = w end
|
||||
end
|
||||
|
||||
Context.current_menu_item = 1
|
||||
_click_timer = 0
|
||||
_anim = 0
|
||||
end
|
||||
|
||||
@@ -355,6 +355,12 @@ function MinigameDDRWindow.update()
|
||||
right = Input.right()
|
||||
}
|
||||
|
||||
for _, target in ipairs(mg.target_arrows) do
|
||||
if Mouse.zone({ x = target.x, y = mg.target_y, w = mg.arrow_size, h = mg.arrow_size }) then
|
||||
input_map[target.dir] = true
|
||||
end
|
||||
end
|
||||
|
||||
for dir, pressed in pairs(input_map) do
|
||||
if pressed and mg.input_cooldowns[dir] == 0 then
|
||||
mg.input_cooldowns[dir] = mg.input_cooldown_duration
|
||||
|
||||
@@ -83,7 +83,9 @@ function MinigameButtonMashWindow.update()
|
||||
return
|
||||
end
|
||||
|
||||
if Input.select() then
|
||||
local mouse_on_button = Mouse.zone_circle({ x = mg.button_x, y = mg.button_y, r = mg.button_size })
|
||||
|
||||
if Input.select() or mouse_on_button then
|
||||
Audio.sfx_drum_high()
|
||||
|
||||
mg.bar_fill = mg.bar_fill + mg.fill_per_press
|
||||
|
||||
@@ -95,7 +95,9 @@ function MinigameRhythmWindow.update()
|
||||
if mg.press_cooldown > 0 then
|
||||
mg.press_cooldown = mg.press_cooldown - 1
|
||||
end
|
||||
if Input.select() and mg.press_cooldown == 0 then
|
||||
local mouse_on_button = Mouse.zone_circle({ x = mg.button_x, y = mg.button_y, r = mg.button_size })
|
||||
|
||||
if (Input.select() or mouse_on_button) and mg.press_cooldown == 0 then
|
||||
mg.button_pressed_timer = mg.button_press_duration
|
||||
mg.press_cooldown = mg.press_cooldown_duration
|
||||
local target_left = mg.target_center - (mg.target_width / 2)
|
||||
|
||||
@@ -28,7 +28,7 @@ end
|
||||
--- @within PopupWindow
|
||||
function PopupWindow.update()
|
||||
if Context.popup.show then
|
||||
if Input.menu_confirm() or Input.menu_back() then
|
||||
if Input.select() or Input.back() then
|
||||
PopupWindow.hide()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -16,8 +16,8 @@ Window.register("game", GameWindow)
|
||||
PopupWindow = {}
|
||||
Window.register("popup", PopupWindow)
|
||||
|
||||
ConfigurationWindow = {}
|
||||
Window.register("configuration", ConfigurationWindow)
|
||||
ControlsWindow = {}
|
||||
Window.register("controls", ControlsWindow)
|
||||
|
||||
AudioTestWindow = {}
|
||||
Window.register("audiotest", AudioTestWindow)
|
||||
|
||||
Reference in New Issue
Block a user