pipboy-os 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pipboy_os-1.0.0/PKG-INFO +14 -0
- pipboy_os-1.0.0/pip_boy_os/images/stats/body/legs1/head_positions.ini +1 -0
- pipboy_os-1.0.0/pip_boy_os/images/stats/special/charisma/frameorder.ini +1 -0
- pipboy_os-1.0.0/pip_boy_os/images/stats/special/intelligence/frameorder.ini +1 -0
- pipboy_os-1.0.0/pip_boy_os/images/stats/special/perception/frameorder.ini +1 -0
- pipboy_os-1.0.0/pip_boy_os/images/stats/special/strength/frameorder.ini +1 -0
- pipboy_os-1.0.0/pip_boy_os/images/svgs/vaultboy_body/legs1/positions.ini +1 -0
- pipboy_os-1.0.0/pip_boy_os/images/svgs/vaultboy_body/legs10/positions.ini +1 -0
- pipboy_os-1.0.0/pip_boy_os/images/svgs/vaultboy_body/legs11/positions.ini +1 -0
- pipboy_os-1.0.0/pip_boy_os/images/svgs/vaultboy_body/legs12/positions.ini +1 -0
- pipboy_os-1.0.0/pip_boy_os/images/svgs/vaultboy_body/legs13/positions.ini +1 -0
- pipboy_os-1.0.0/pip_boy_os/images/svgs/vaultboy_body/legs14/positions.ini +1 -0
- pipboy_os-1.0.0/pip_boy_os/images/svgs/vaultboy_body/legs15/positions.ini +1 -0
- pipboy_os-1.0.0/pip_boy_os/images/svgs/vaultboy_body/legs16/positions.ini +1 -0
- pipboy_os-1.0.0/pip_boy_os/images/svgs/vaultboy_body/legs2/positions.ini +1 -0
- pipboy_os-1.0.0/pip_boy_os/images/svgs/vaultboy_body/legs3/positions.ini +1 -0
- pipboy_os-1.0.0/pip_boy_os/images/svgs/vaultboy_body/legs4/positions.ini +1 -0
- pipboy_os-1.0.0/pip_boy_os/images/svgs/vaultboy_body/legs5/positions.ini +1 -0
- pipboy_os-1.0.0/pip_boy_os/images/svgs/vaultboy_body/legs6/positions.ini +1 -0
- pipboy_os-1.0.0/pip_boy_os/images/svgs/vaultboy_body/legs7/positions.ini +1 -0
- pipboy_os-1.0.0/pip_boy_os/images/svgs/vaultboy_body/legs8/positions.ini +1 -0
- pipboy_os-1.0.0/pip_boy_os/images/svgs/vaultboy_body/legs9/positions.ini +1 -0
- pipboy_os-1.0.0/pip_boy_os/modules/boot.py +371 -0
- pipboy_os-1.0.0/pip_boy_os/modules/data_models.py +63 -0
- pipboy_os-1.0.0/pip_boy_os/modules/hardware_input.py +150 -0
- pipboy_os-1.0.0/pip_boy_os/modules/input_manager.py +157 -0
- pipboy_os-1.0.0/pip_boy_os/modules/items.ini +568 -0
- pipboy_os-1.0.0/pip_boy_os/modules/items.py +159 -0
- pipboy_os-1.0.0/pip_boy_os/modules/main.py +82 -0
- pipboy_os-1.0.0/pip_boy_os/modules/overlays.py +50 -0
- pipboy_os-1.0.0/pip_boy_os/modules/paths.py +166 -0
- pipboy_os-1.0.0/pip_boy_os/modules/pipboy.py +94 -0
- pipboy_os-1.0.0/pip_boy_os/modules/settings.py +340 -0
- pipboy_os-1.0.0/pip_boy_os/modules/settings_secrets.py +4 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tab.py +160 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tab_manager.py +609 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/clock_tab/clock_tab.py +209 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/data_tab/data_tab.py +138 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/data_tab/notes_tab.py +479 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/data_tab/quest_tab.py +774 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/data_tab/settings_tab.py +606 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/data_tab/stats_tab.py +148 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/data_tab/workshops_tab.py +289 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/inv_tab/aid_tab.py +90 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/inv_tab/ammo_tab.py +58 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/inv_tab/apparel_tab.py +165 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/inv_tab/inv_base.py +990 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/inv_tab/inv_tab.py +100 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/inv_tab/junk_tab.py +59 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/inv_tab/misc_tab.py +76 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/inv_tab/weapons_tab.py +199 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/map_tab/map_tab.py +159 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/map_tab/world_tab.py +362 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/radio_tab/__init__.py +0 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/radio_tab/playlist_manager.py +93 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/radio_tab/radio_station_loader.py +98 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/radio_tab/radio_tab.py +409 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/radio_tab/visualizer.py +152 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/stat_tab/__init__.py +0 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/stat_tab/eff_tab.py +73 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/stat_tab/general_tab.py +374 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/stat_tab/perks_tab.py +431 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/stat_tab/rad_tab.py +348 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/stat_tab/skills_tab.py +241 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/stat_tab/special_tab.py +254 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/stat_tab/stat_tab.py +184 -0
- pipboy_os-1.0.0/pip_boy_os/modules/tabs/stat_tab/status_tab.py +334 -0
- pipboy_os-1.0.0/pip_boy_os/modules/ui.py +884 -0
- pipboy_os-1.0.0/pip_boy_os/modules/user_config.py +2 -0
- pipboy_os-1.0.0/pip_boy_os/modules/util_functs.py +291 -0
- pipboy_os-1.0.0/pip_boy_os/objs/normalizeobj.py +43 -0
- pipboy_os-1.0.0/pip_boy_os/pipboy_os.egg-info/PKG-INFO +14 -0
- pipboy_os-1.0.0/pip_boy_os/pipboy_os.egg-info/SOURCES.txt +95 -0
- pipboy_os-1.0.0/pip_boy_os/pipboy_os.egg-info/dependency_links.txt +1 -0
- pipboy_os-1.0.0/pip_boy_os/pipboy_os.egg-info/entry_points.txt +2 -0
- pipboy_os-1.0.0/pip_boy_os/pipboy_os.egg-info/requires.txt +9 -0
- pipboy_os-1.0.0/pip_boy_os/pipboy_os.egg-info/top_level.txt +6 -0
- pipboy_os-1.0.0/pip_boy_os/sounds/Radio NV/Black_Mountain_Radio/IntermissionsBMR/desktop.ini +11 -0
- pipboy_os-1.0.0/pip_boy_os/sounds/Radio NV/Black_Mountain_Radio/desktop.ini +15 -0
- pipboy_os-1.0.0/pip_boy_os/sounds/Radio NV/Mojave_Music_Radio/desktop.ini +12 -0
- pipboy_os-1.0.0/pip_boy_os/sounds/pipboy/Holotape/desktop.ini +4 -0
- pipboy_os-1.0.0/pip_boy_os/sounds/radio/03_DCR/desktop.ini +4 -0
- pipboy_os-1.0.0/pip_boy_os/sounds/radio/03_DCR/station.ini +3 -0
- pipboy_os-1.0.0/pip_boy_os/sounds/radio/04_Classical/station.ini +3 -0
- pipboy_os-1.0.0/pip_boy_os/sounds/radio/05_Institute/station.ini +3 -0
- pipboy_os-1.0.0/pip_boy_os/sounds/radio/06_Minutemen/station.ini +3 -0
- pipboy_os-1.0.0/pip_boy_os/sounds/radio/07_Magnolia/station.ini +3 -0
- pipboy_os-1.0.0/pip_boy_os/sounds/radio/08_CadillacJack/station.ini +3 -0
- pipboy_os-1.0.0/pip_boy_os/sounds/radio/09_HCB/station.ini +3 -0
- pipboy_os-1.0.0/pip_boy_os/sounds/radio/10_RCR/station.ini +3 -0
- pipboy_os-1.0.0/pip_boy_os/sounds/radio/11_RedEye/station.ini +5 -0
- pipboy_os-1.0.0/pip_boy_os/sounds/radio/12_RRF/station.ini +4 -0
- pipboy_os-1.0.0/pip_boy_os/sounds/radio/13_TCL/station.ini +3 -0
- pipboy_os-1.0.0/pip_boy_os/sounds/radio/14_TCM/station.ini +5 -0
- pipboy_os-1.0.0/pip_boy_os/sounds/radio/16_WYN/station.ini +4 -0
- pipboy_os-1.0.0/pyproject.toml +29 -0
- pipboy_os-1.0.0/setup.cfg +4 -0
pipboy_os-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: pipboy-os
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Pip-Boy OS - The ultimate Fallout interface built with Python and Pygame.
|
|
5
|
+
Author: DanieleM
|
|
6
|
+
License: MIT
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
Requires-Dist: numpy>=2.0.0
|
|
9
|
+
Requires-Dist: Pillow>=11.0.0
|
|
10
|
+
Requires-Dist: pygame-ce>=2.5.5
|
|
11
|
+
Requires-Dist: Requests>=2.32.3
|
|
12
|
+
Requires-Dist: tinytag>=1.10.1
|
|
13
|
+
Requires-Dist: smbus2>=0.4.2; sys_platform != "win32"
|
|
14
|
+
Requires-Dist: gpiozero>=1.6.2; sys_platform != "win32"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(0.0, 0.0), (0.5, 1.8), (0.8, 3.0), (1.0, 1.8), (1.5, 0.1), (1.1, 1.3), (1.0, 3.0), (0.7, 2.3)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0,0,0,1,2,2,3,3,4,4,5,5,6,6,6,6,6,6,6,1
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0,0,1,2,3,4,5,6,6,7,8,9,10,11,11
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0,0,1,2,3,4,5,6,6
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0,1,2,3,3,3,4,4,4,3,3,3,4,4,4
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.0,0.0;-0.008,-0.028;-0.012,-0.045333333;-0.014666667,-0.027333333;-0.023,-0.001333333;-0.017,-0.019666667;-0.014333333,-0.046666667;-0.010333333,-0.035333333
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.0,0.0;0.008,0.004;0.007333333,0.017;0.007,0.008333333;-0.001333333,0.002666667
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.0,0.0;0.024,0.007333333;0.013666667,-0.004;0.011,-0.002333333;0.011,-0.007
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.0,0.0;-0.010666667,-0.009;-0.013,-0.013666667;-0.007,-0.010666667;0.000333333,0.001
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.0,0.0;0.014,0.007333333;0.022,0.002666667;0.014,-0.002333333;0.015,-0.005;0.017,-0.005333333;0.02,-0.005
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.0,0.0;0.008666667,0.002333333;0.022,0.0;0.013333333,-0.003;0.015666667,-0.009;0.014,-0.006666667;0.016666667,-0.006666667
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.0,0.0;0.011,0.005333333;0.013,0.000666667;0.005,-0.002333333;0.005,-0.009;0.013,-0.005333333;0.013,-0.005
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.0,0.0;0.003333333,-0.000333333;0.003333333,0.005666667;0.003333333,-0.009666667;-0.000666667,0.000333333
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.0,0.0;-0.008,-0.028;-0.012,-0.045333333;-0.014666667,-0.027333333;-0.023,-0.001333333;-0.017,-0.019666667;-0.014333333,-0.046666667;-0.010333333,-0.035333333
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.0,0.0;-0.008,-0.028;-0.012,-0.045333333;-0.014666667,-0.027333333;-0.023,-0.001333333;-0.017,-0.019666667;-0.014333333,-0.046666667;-0.010333333,-0.035333333
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.0,0.0;-0.008,-0.028;-0.012,-0.045333333;-0.014666667,-0.027333333;-0.023,-0.001333333;-0.017,-0.019666667;-0.014333333,-0.046666667;-0.010333333,-0.035333333
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.0,0.0;0.010666667,0.005666667;0.025666667,-0.009666667;0.020666667,-0.012333333;0.003333333,-0.028
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.0,0.0;-0.001333333,0.004666667;-0.001333333,0.007333333;-0.001333333,0.004666667;0.0,0.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.0,0.0;0.010666667,0.005;0.0,-0.005666667;0.009333333,-0.004666667;0.000333333,-0.014333333
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.0,0.0;-0.012666667,-0.016;-0.01,-0.014666667;-0.008,-0.019666667;0.005333333,0.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.0,0.0;0.012666667,0.001666667;0.037666667,0.012333333;0.018666667,-0.010333333;0.017333333,-0.002
|
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import pygame
|
|
3
|
+
import settings
|
|
4
|
+
from util_functs import Utils
|
|
5
|
+
from ui import AnimatedImage
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class BootText():
|
|
9
|
+
def __init__(self, screen):
|
|
10
|
+
self.font = pygame.font.Font(settings.TECH_MONO_FONT_PATH, 8)
|
|
11
|
+
self.font_height = self.font.get_height()
|
|
12
|
+
self.boot_text_start = ("* 1 0 0x0000A4 0x00000000000000000 start memory discovery 0 0x0000A4 \n"
|
|
13
|
+
"0x00000000000000000 1 0 0x000014 0x00000000000000000 CPUO starting cell \n"
|
|
14
|
+
"relocation0 0x0000A4 0x00000000000000000 1 0 0x000009 \n"
|
|
15
|
+
"0x00000000000000000 CPUO launch EFI0 0x0000A4 0x00000000000000000 1 0 \n"
|
|
16
|
+
"0x000009 0x000000000000E003D CPUO starting EFI0 0x0000A4 \n"
|
|
17
|
+
"0x00000000000000000 1 0 0x0000A4 0x00000000000000000 start memory \n"
|
|
18
|
+
"discovery0 0x0000A4 0x00000000000000000 1 0 0x0000A4 0x00000000000000000 \n"
|
|
19
|
+
"start memory discovery 0 0x0000A4 0x00000000000000000 1 0 0x000014 \n"
|
|
20
|
+
"0x00000000000000000 CPUO starting cell relocation0 0x0000A4 \n"
|
|
21
|
+
"0x00000000000000000 1 0 0x000009 0x00000000000000000 CPUO launch EFI0 \n"
|
|
22
|
+
"0x0000A4 0x00000000000000000 1 0 0x000009 0x000000000000E003D CPUO \n"
|
|
23
|
+
"starting EFI0 0x0000A4 0x00000000000000000 1 0 0x0000A4 \n"
|
|
24
|
+
"0x00000000000000000 start memory discovery0 0x0000A4 0x00000000000000000 \n"
|
|
25
|
+
"1 0 0x0000A4 0x00000000000000000 start memory discovery 0 0x0000A4 \n"
|
|
26
|
+
"0x00000000000000000 1 0 0x000014 0x00000000000000000 CPUO starting cell \n"
|
|
27
|
+
"relocation0 0x0000A4 0x00000000000000000 1 0 0x000009 \n"
|
|
28
|
+
"0x00000000000000000 CPUO launch EFI0 0x0000A4 0x00000000000000000 1 0 \n"
|
|
29
|
+
"0x000009 0x000000000000E003D CPUO starting EFI0 0x0000A4 \n"
|
|
30
|
+
"0x00000000000000000 1 0 0x0000A4 0x00000000000000000 start memory \n"
|
|
31
|
+
"discovery0 0x0000A4 0x00000000000000000 1 0 0x0000A4 0x00000000000000000 \n"
|
|
32
|
+
"start memory discovery 0 0x0000A4 0x00000000000000000 1 0 0x000014 \n"
|
|
33
|
+
"0x00000000000000000 CPUO starting cell relocation0 0x0000A4 \n"
|
|
34
|
+
"0x00000000000000000 1 0 0x000009 0x00000000000000000 CPUO launch EFI0 \n"
|
|
35
|
+
"0x0000A4 0x00000000000000000 1 0 0x000009 0x000000000000E003D CPUO \n"
|
|
36
|
+
"starting EFI0 0x0000A4 0x00000000000000000 1 0 0x0000A4 \n"
|
|
37
|
+
"0x00000000000000000 start memory discovery0 0x0000A4 0x00000000000000000 \n"
|
|
38
|
+
"1 0 0x0000A4 0x00000000000000000 start memory discovery 0 0x0000A4 \n"
|
|
39
|
+
"0x00000000000000000 1 0 0x000014 0x00000000000000000 CPUO starting cell \n"
|
|
40
|
+
"relocation0 0x0000A4 0x00000000000000000 1 0 0x000009 \n"
|
|
41
|
+
"0x00000000000000000 CPUO launch EFI0 0x0000A4 0x00000000000000000 1 0 \n"
|
|
42
|
+
"0x000009 0x000000000000E003D CPUO starting EFI0 0x0000A4 \n"
|
|
43
|
+
"0x00000000000000000 1 0 0x0000A4 0x00000000000000000 start memory \n"
|
|
44
|
+
"discovery0 0x0000A4 0x00000000000000000 1 0 0x0000A4 0x00000000000000000 \n"
|
|
45
|
+
"start memory discovery 0 0x0000A4 0x00000000000000000 1 0 0x000014 \n"
|
|
46
|
+
"0x00000000000000000 CPUO starting cell relocation0 0x0000A4 \n"
|
|
47
|
+
"0x00000000000000000 1 0 0x000009 0x00000000000000000 CPUO launch EFI0 \n"
|
|
48
|
+
"0x0000A4 0x00000000000000000 1 0 0x000009 0x000000000000E003D CPUO \n"
|
|
49
|
+
"starting EFI0 0x0000A4 0x00000000000000000 1 0 0x0000A4 \n"
|
|
50
|
+
"0x00000000000000000 start memory discovery0 0x0000A4 0x00000000000000000 \n"
|
|
51
|
+
"1 0 0x0000A4 0x00000000000000000 start memory discovery 0 0x0000A4 \n"
|
|
52
|
+
"0x00000000000000000 1 0 0x000014 0x00000000000000000 CPUO starting cell \n"
|
|
53
|
+
"relocation0 0x0000A4 0x00000000000000000 1 0 0x000009 \n"
|
|
54
|
+
"0x00000000000000000 CPUO launch EFI0 0x0000A4 0x00000000000000000 1 0 \n"
|
|
55
|
+
"0x000009 0x000000000000E003D CPUO starting EFI0 0x0000A4 \n"
|
|
56
|
+
"0x00000000000000000 1 0 0x0000A4 0x00000000000000000 start memory \n"
|
|
57
|
+
"discovery0 0x0000A4 0x00000000000000000 1 0 0x0000A4 0x00000000000000000 \n"
|
|
58
|
+
"start memory discovery 0 0x0000A4 0x00000000000000000 1 0 0x000014 \n"
|
|
59
|
+
"0x00000000000000000 CPUO starting cell relocation0 0x0000A4 \n"
|
|
60
|
+
"0x00000000000000000 1 0 0x000009 0x00000000000000000 CPUO launch EFI0 \n"
|
|
61
|
+
"0x0000A4 0x00000000000000000 1 0 0x000009 0x000000000000E003D CPUO \n"
|
|
62
|
+
"starting EFI0 0x0000A4 0x00000000000000000 1 0 0x0000A4 \n"
|
|
63
|
+
"0x00000000000000000 start memory discovery0 0x0000A4 0x00000000000000000 \n"
|
|
64
|
+
"1 0 0x0000A4 0x00000000000000000 start memory discovery 0 0x0000A4 \n"
|
|
65
|
+
"0x00000000000000000 1 0 0x000014 0x00000000000000000 CPUO starting cell \n"
|
|
66
|
+
"relocation0 0x0000A4 0x00000000000000000 1 0 0x000009 \n"
|
|
67
|
+
"0x00000000000000000 CPUO launch EFI0 0x0000A4 0x00000000000000000 1 0 \n"
|
|
68
|
+
"0x000009 0x000000000000E003D CPUO starting EFI0 0x0000A4 \n"
|
|
69
|
+
"0x00000000000000000 1 0 0x0000A4 0x00000000000000000 start memory \n"
|
|
70
|
+
"discovery0 0x0000A4 0x00000000000000000 1 0 0x0000A4 0x00000000000000000 \n"
|
|
71
|
+
"start memory discovery 0 0x0000A4 0x00000000000000000 1 0 0x000014 \n"
|
|
72
|
+
"0x00000000000000000 CPUO starting cell relocation0 0x0000A4 \n"
|
|
73
|
+
"0x00000000000000000 1 0 0x000009 0x00000000000000000 CPUO launch EFI0 \n"
|
|
74
|
+
"0x0000A4 0x00000000000000000 1 0 0x000009 0x000000000000E003D CPUO \n"
|
|
75
|
+
"starting EFI0 0x0000A4 0x00000000000000000 1 0 0x0000A4 \n"
|
|
76
|
+
"0x00000000000000000 start memory discovery0 0x0000A4 0x00000000000000000 \n"
|
|
77
|
+
"1 0 0x0000A4 0x00000000000000000 start memory discovery 0 0x0000A4 \n"
|
|
78
|
+
"0x00000000000000000 1 0 0x000014 0x00000000000000000 CPUO starting cell \n"
|
|
79
|
+
"relocation0 0x0000A4 0x00000000000000000 1 0 0x000009 \n"
|
|
80
|
+
"0x00000000000000000 CPUO launch EFI0 0x0000A4 0x00000000000000000 1 0 \n"
|
|
81
|
+
"0x000009 0x000000000000E003D CPUO starting EFI0 0x0000A4 \n"
|
|
82
|
+
"0x00000000000000000 1 0 0x0000A4 0x00000000000000000 start memory \n"
|
|
83
|
+
"discovery0 0x0000A4 0x00000000000000000 1 0 0x0000A4 0x00000000000000000 \n"
|
|
84
|
+
"start memory discovery 0 0x0000A4 0x00000000000000000 1 0 0x000014 \n"
|
|
85
|
+
"0x00000000000000000 CPUO starting cell relocation0 0x0000A4 \n"
|
|
86
|
+
"0x00000000000000000 1 0 0x000009 0x00000000000000000 CPUO launch EFI0 \n"
|
|
87
|
+
"0x0000A4 0x00000000000000000 1 0 0x000009 0x000000000000E003D CPUO \n"
|
|
88
|
+
"starting EFI0 0x0000A4 0x00000000000000000 1 0 0x0000A4 \n"
|
|
89
|
+
"0x00000000000000000 start memory discovery0 0x0000A4 0x00000000000000000 \n"
|
|
90
|
+
"1 0 0x0000A4 0x00000000000000000 start memory discovery 0 0x0000A4 \n"
|
|
91
|
+
"0x00000000000000000 1 0 0x000014 0x00000000000000000 CPUO starting cell \n"
|
|
92
|
+
"relocation0 0x0000A4 0x00000000000000000 1 0 0x000009 \n"
|
|
93
|
+
"0x00000000000000000 CPUO launch EFI0 0x0000A4 0x00000000000000000 1 0 \n"
|
|
94
|
+
"0x000009 0x000000000000E003D CPUO starting EFI0 0x0000A4 \n"
|
|
95
|
+
"0x00000000000000000 1 0 0x0000A4 0x00000000000000000 start memory \n"
|
|
96
|
+
"discovery0 0x0000A4 0x00000000000000000 1 0 0x0000A4 0x00000000000000000 \n"
|
|
97
|
+
"start memory discovery 0 0x0000A4 0x00000000000000000 1 0 0x000014 \n"
|
|
98
|
+
"0x00000000000000000 CPUO starting cell relocation0 0x0000A4 \n"
|
|
99
|
+
"0x00000000000000000 1 0 0x000009 0x00000000000000000 CPUO launch EFI0 \n"
|
|
100
|
+
"0x0000A4 0x00000000000000000 1 0 0x000009 0x000000000000E003D CPUO \n"
|
|
101
|
+
"starting EFI0 0x0000A4 0x00000000000000000 1 0 0x0000A4 \n"
|
|
102
|
+
"0x00000000000000000 start memory discovery0 0x0000A4 0x00000000000000000 \n"
|
|
103
|
+
"1 0 0x0000A4 0x00000000000000000 start memory discovery 0 0x0000A4 \n"
|
|
104
|
+
"0x00000000000000000 1 0 0x000014 0x00000000000000000 CPUO starting cell \n"
|
|
105
|
+
"relocation0 0x0000A4 0x00000000000000000 1 0 0x000009 \n"
|
|
106
|
+
"0x00000000000000000 CPUO launch EFI0 0x0000A4 0x00000000000000000 1 0 \n"
|
|
107
|
+
"0x000009 0x000000000000E003D CPUO starting EFI0 0x0000A4 \n"
|
|
108
|
+
"0x00000000000000000 1 0 0x0000A4 0x00000000000000000 start memory \n"
|
|
109
|
+
"discovery0 0x0000A4 0x00000000000000000 1 0 0x0000A4 0x00000000000000000 \n"
|
|
110
|
+
"start memory discovery 0 0x0000A4 0x00000000000000000 1 0 0x000014 \n"
|
|
111
|
+
"0x00000000000000000 CPUO starting cell relocation0 0x0000A4 \n"
|
|
112
|
+
"0x00000000000000000 1 0 0x000009 0x00000000000000000 CPUO launch EFI0 \n"
|
|
113
|
+
"0x0000A4 0x00000000000000000 1 0 0x000009 0x000000000000E003D CPUO \n"
|
|
114
|
+
"starting EFI0 0x0000A4 0x00000000000000000 1 0 0x0000A4 \n"
|
|
115
|
+
"0x00000000000000000 start memory discovery0 0x0000A4 0x00000000000000000 END\n")
|
|
116
|
+
self.boot_text_lines = self.boot_text_start.split("\n")
|
|
117
|
+
self.visible_lines_count = settings.SCREEN_HEIGHT // self.font_height
|
|
118
|
+
self.first_iteration = True
|
|
119
|
+
self.screen = screen
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
self.start_y = settings.SCREEN_HEIGHT
|
|
123
|
+
self.y_offset = self.start_y
|
|
124
|
+
|
|
125
|
+
# Create a surface large enough to contain all the text
|
|
126
|
+
self.full_text_surface = pygame.Surface(((settings.SCREEN_WIDTH), len(self.boot_text_lines) * self.font_height))
|
|
127
|
+
|
|
128
|
+
# Render each line of text into the surface
|
|
129
|
+
for i, line in enumerate(self.boot_text_lines):
|
|
130
|
+
line_surface = self.font.render(line, True, settings.PIP_BOY_LIGHT)
|
|
131
|
+
self.full_text_surface.blit(line_surface, (0, i * self.font_height))
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def display_text_sequence(self):
|
|
136
|
+
"""Display text sequence with scrolling effect"""
|
|
137
|
+
if self.first_iteration:
|
|
138
|
+
Utils.play_sfx(settings.BOOT_SOUND_A)
|
|
139
|
+
self.first_iteration = False
|
|
140
|
+
|
|
141
|
+
pygame.time.wait(settings.SPEED * 30)
|
|
142
|
+
self.y_offset -= self.font_height # Scroll the text upward
|
|
143
|
+
if self.y_offset < -len(self.boot_text_lines) * self.font_height:
|
|
144
|
+
return True # Stop the sequence if the text has scrolled off the screen
|
|
145
|
+
return False
|
|
146
|
+
|
|
147
|
+
def render(self):
|
|
148
|
+
self.screen.blit(self.full_text_surface, (0, self.y_offset)) # Draw the text at the current y_offset
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
class BootCopyright():
|
|
152
|
+
def __init__(self, screen):
|
|
153
|
+
self.font = pygame.font.Font(settings.TECH_MONO_FONT_PATH, 12)
|
|
154
|
+
self.font_height = self.font.get_height()
|
|
155
|
+
self.copyright_text = ("*************** PIP-05 (R) V7 .1.0.8 ***************\n"
|
|
156
|
+
"\n"
|
|
157
|
+
"\n"
|
|
158
|
+
"\n"
|
|
159
|
+
" COPYRIGHT 2075 ROBCO(R)\n"
|
|
160
|
+
" LOADER VI.1\n"
|
|
161
|
+
" EXEC VERSION 41.10\n"
|
|
162
|
+
" 264k RAM SYSTEM\n"
|
|
163
|
+
" 38911 BYTES FREE\n"
|
|
164
|
+
" NO HOLOTAPE FOUND\n"
|
|
165
|
+
" LOAD ROM(1): DEITRIX 303").split('\n')
|
|
166
|
+
self.copyright_text_rendered = []
|
|
167
|
+
self.states = iter(["cursor_initial", "lines", "cursor_bottom", "scroll"])
|
|
168
|
+
self.current_state = next(self.states)
|
|
169
|
+
self.cursor_surface = self.font.render("▮", True, settings.PIP_BOY_LIGHT)
|
|
170
|
+
self.cursor_position = [0, 0]
|
|
171
|
+
self.cur_cursor_position = 0
|
|
172
|
+
self.current_line = 0
|
|
173
|
+
self.current_char = 0
|
|
174
|
+
self.text_surface = None
|
|
175
|
+
self.cursor_blink_count = 0 # Track blink cycles
|
|
176
|
+
self.cursor_blink_state = False
|
|
177
|
+
self.text_scroll_y = 0
|
|
178
|
+
self.cursor_pause = False
|
|
179
|
+
self.scroll_pause = False
|
|
180
|
+
self.screen = screen
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
def render(self):
|
|
184
|
+
for line in range(len(self.copyright_text_rendered)):
|
|
185
|
+
self.text_surface = self.font.render(self.copyright_text_rendered[line], True, settings.PIP_BOY_LIGHT)
|
|
186
|
+
self.screen.blit(self.text_surface, (0, (line * self.font_height) + self.text_scroll_y))
|
|
187
|
+
if self.cursor_blink_state and "cursor" in self.current_state:
|
|
188
|
+
self.screen.blit(self.cursor_surface, (self.cursor_position))
|
|
189
|
+
elif self.current_state == "lines":
|
|
190
|
+
self.screen.blit(self.cursor_surface, (self.cursor_position))
|
|
191
|
+
|
|
192
|
+
def blink_cursor(self):
|
|
193
|
+
pygame.time.wait(settings.SPEED * 150)
|
|
194
|
+
self.cursor_blink_state = not self.cursor_blink_state
|
|
195
|
+
self.cursor_blink_count += 1
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def display_copyright_text(self):
|
|
199
|
+
|
|
200
|
+
match self.current_state:
|
|
201
|
+
case "cursor_initial":
|
|
202
|
+
if self.cursor_blink_count > 7:
|
|
203
|
+
Utils.play_sfx(settings.BOOT_SOUND_B)
|
|
204
|
+
self.current_state = next(self.states)
|
|
205
|
+
self.cursor_blink_count = 0
|
|
206
|
+
self.cur_cursor_position = 1
|
|
207
|
+
return False
|
|
208
|
+
|
|
209
|
+
self.blink_cursor()
|
|
210
|
+
|
|
211
|
+
case "lines":
|
|
212
|
+
pygame.time.wait(settings.SPEED * 17)
|
|
213
|
+
if self.current_line >= len(self.copyright_text):
|
|
214
|
+
self.current_state = next(self.states)
|
|
215
|
+
return False
|
|
216
|
+
line = self.copyright_text[self.current_line]
|
|
217
|
+
|
|
218
|
+
# Ensure the current line exists in the rendered list
|
|
219
|
+
while len(self.copyright_text_rendered) <= self.current_line:
|
|
220
|
+
self.copyright_text_rendered.append("")
|
|
221
|
+
|
|
222
|
+
if self.current_char < len(line):
|
|
223
|
+
self.copyright_text_rendered[self.current_line] += line[self.current_char]
|
|
224
|
+
self.current_char += 1
|
|
225
|
+
|
|
226
|
+
# Update cursor position after adding the character
|
|
227
|
+
self.cursor_position = (self.font.size(self.copyright_text_rendered[self.current_line])[0],
|
|
228
|
+
self.current_line * self.font_height)
|
|
229
|
+
else:
|
|
230
|
+
self.current_line += 1
|
|
231
|
+
self.current_char = 0
|
|
232
|
+
|
|
233
|
+
case "cursor_bottom":
|
|
234
|
+
if not self.cursor_pause:
|
|
235
|
+
pygame.time.wait(settings.SPEED * 50)
|
|
236
|
+
text_width = self.text_surface.get_width() if self.text_surface else 0
|
|
237
|
+
self.cursor_position = text_width, (self.current_line * self.font_height) - self.font_height
|
|
238
|
+
self.cursor_pause = True
|
|
239
|
+
|
|
240
|
+
if self.cursor_blink_count > 7:
|
|
241
|
+
self.current_state = next(self.states)
|
|
242
|
+
return False
|
|
243
|
+
|
|
244
|
+
self.blink_cursor()
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
case "scroll":
|
|
248
|
+
|
|
249
|
+
if not self.scroll_pause:
|
|
250
|
+
pygame.time.wait(settings.SPEED * 200)
|
|
251
|
+
self.scroll_pause = True
|
|
252
|
+
|
|
253
|
+
pygame.time.wait(settings.SPEED * 20)
|
|
254
|
+
self.text_scroll_y -= 5
|
|
255
|
+
if self.text_scroll_y < -len(self.copyright_text) * self.font_height:
|
|
256
|
+
return True
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
class BootThumbs():
|
|
260
|
+
def __init__(self, screen):
|
|
261
|
+
self.screen = screen
|
|
262
|
+
self.font = pygame.font.Font(settings.TECH_MONO_FONT_PATH, 10)
|
|
263
|
+
|
|
264
|
+
self.current_frame = 0
|
|
265
|
+
self.real_frame = 0
|
|
266
|
+
images = Utils.load_images(settings.BOOT_THUMBS)
|
|
267
|
+
self.images = [Utils.scale_image(image, 0.5) for image in images]
|
|
268
|
+
self.image_center = self.images[0].get_rect().center
|
|
269
|
+
self.init_surface = self.font.render("INITIATING...", True, settings.PIP_BOY_LIGHT)
|
|
270
|
+
self.init_surface_center = self.init_surface.get_rect().center
|
|
271
|
+
self.screen_center = self.screen.get_rect().center
|
|
272
|
+
self.blink = 255
|
|
273
|
+
self.blink_direction = 1
|
|
274
|
+
self.first_iteration = True
|
|
275
|
+
|
|
276
|
+
frameorder = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7,
|
|
277
|
+
7,
|
|
278
|
+
7, 7, 7, 7, 7, 7, 7, 7, 7]
|
|
279
|
+
image_position = (self.screen_center[0] - 59, self.screen_center[1] - 80)
|
|
280
|
+
self.animated_thumbs = AnimatedImage(self.screen, self.images, image_position, settings.SPEED * 116, frame_order=frameorder, loop=False)
|
|
281
|
+
|
|
282
|
+
def display_thumbs(self):
|
|
283
|
+
if self.first_iteration:
|
|
284
|
+
Utils.play_sfx(settings.BOOT_SOUND_C)
|
|
285
|
+
pygame.time.wait(settings.SPEED * 600)
|
|
286
|
+
self.animated_thumbs.start()
|
|
287
|
+
self.first_iteration = False
|
|
288
|
+
|
|
289
|
+
if self.animated_thumbs.current_frame_index >= len(self.animated_thumbs.frame_order) - 1:
|
|
290
|
+
self.animated_thumbs.stop()
|
|
291
|
+
return True
|
|
292
|
+
|
|
293
|
+
self.blink += self.blink_direction
|
|
294
|
+
if self.blink >= 255:
|
|
295
|
+
self.blink_direction = -6
|
|
296
|
+
elif self.blink <= 50:
|
|
297
|
+
self.blink_direction = 6
|
|
298
|
+
self.init_surface.set_alpha(self.blink)
|
|
299
|
+
|
|
300
|
+
pygame.time.wait(settings.SPEED * 20)
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
def render(self):
|
|
304
|
+
|
|
305
|
+
self.screen.blit(self.init_surface, (self.screen_center[0] - self.init_surface_center[0], self.screen_center[1] + (self.screen_center[1] // 2)))
|
|
306
|
+
|
|
307
|
+
self.animated_thumbs.render()
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
class Boot:
|
|
312
|
+
def __init__(self, screen):
|
|
313
|
+
self.screen = screen
|
|
314
|
+
self.states = iter(["text", "copyright", "thumbs", "done"])
|
|
315
|
+
self.current_sequence = next(self.states)
|
|
316
|
+
self.boot_text = BootText(self.screen)
|
|
317
|
+
self.copyright_text = BootCopyright(self.screen)
|
|
318
|
+
self.boot_thumbs = BootThumbs(self.screen)
|
|
319
|
+
self.copyright_pause = False
|
|
320
|
+
self.text_pause = False
|
|
321
|
+
self.thumbs_pause = False
|
|
322
|
+
self.running = False
|
|
323
|
+
|
|
324
|
+
def start(self):
|
|
325
|
+
self.running = True
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
def run(self):
|
|
330
|
+
clock = pygame.time.Clock()
|
|
331
|
+
while True:
|
|
332
|
+
for event in pygame.event.get():
|
|
333
|
+
if event.type == pygame.QUIT:
|
|
334
|
+
pygame.quit()
|
|
335
|
+
import sys
|
|
336
|
+
sys.exit()
|
|
337
|
+
match self.current_sequence:
|
|
338
|
+
case "text":
|
|
339
|
+
if not self.text_pause:
|
|
340
|
+
pygame.time.wait(settings.SPEED * 100)
|
|
341
|
+
self.text_pause = True
|
|
342
|
+
if self.boot_text.display_text_sequence():
|
|
343
|
+
self.current_sequence = next(self.states)
|
|
344
|
+
case "copyright":
|
|
345
|
+
if not self.copyright_pause:
|
|
346
|
+
pygame.time.wait(settings.SPEED * 100)
|
|
347
|
+
self.copyright_pause = True
|
|
348
|
+
if self.copyright_text.display_copyright_text():
|
|
349
|
+
self.current_sequence = next(self.states)
|
|
350
|
+
case "thumbs":
|
|
351
|
+
if not self.thumbs_pause:
|
|
352
|
+
pygame.time.wait(settings.SPEED * 500)
|
|
353
|
+
self.thumbs_pause = True
|
|
354
|
+
if self.boot_thumbs.display_thumbs():
|
|
355
|
+
self.current_sequence = next(self.states)
|
|
356
|
+
case "done":
|
|
357
|
+
pygame.time.wait(settings.SPEED * 10)
|
|
358
|
+
break
|
|
359
|
+
self.screen.fill((0, 0, 0))
|
|
360
|
+
self.render()
|
|
361
|
+
pygame.display.flip()
|
|
362
|
+
clock.tick(60)
|
|
363
|
+
|
|
364
|
+
def render(self):
|
|
365
|
+
match self.current_sequence:
|
|
366
|
+
case "text":
|
|
367
|
+
self.boot_text.render()
|
|
368
|
+
case "copyright":
|
|
369
|
+
self.copyright_text.render()
|
|
370
|
+
case "thumbs":
|
|
371
|
+
self.boot_thumbs.render()
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# data_models.py
|
|
2
|
+
from dataclasses import dataclass
|
|
3
|
+
from typing import NamedTuple, Dict, Tuple
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@dataclass
|
|
7
|
+
class LimbPosition:
|
|
8
|
+
x_offset: int
|
|
9
|
+
y_position: int
|
|
10
|
+
name: str
|
|
11
|
+
|
|
12
|
+
class IconConfig(NamedTuple):
|
|
13
|
+
path: str
|
|
14
|
+
value: int
|
|
15
|
+
|
|
16
|
+
class DamageType(NamedTuple):
|
|
17
|
+
type: str
|
|
18
|
+
value: int
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@dataclass
|
|
22
|
+
class ItemBase:
|
|
23
|
+
name: str
|
|
24
|
+
weight: float
|
|
25
|
+
value: int
|
|
26
|
+
icons: str
|
|
27
|
+
description: str = ""
|
|
28
|
+
category: str = "Misc"
|
|
29
|
+
|
|
30
|
+
@dataclass
|
|
31
|
+
class WeaponItem(ItemBase):
|
|
32
|
+
damage: int = 0
|
|
33
|
+
fire_rate: int = 0
|
|
34
|
+
range: int = 0
|
|
35
|
+
accuracy: int = 0
|
|
36
|
+
ammo_type: str = ""
|
|
37
|
+
damage_types: Tuple[DamageType] = ()
|
|
38
|
+
|
|
39
|
+
@dataclass
|
|
40
|
+
class ApparelItem(ItemBase):
|
|
41
|
+
defense: int = 0
|
|
42
|
+
damage_resist: Tuple[DamageType] = ()
|
|
43
|
+
special_bonuses: Dict[str, int] = None
|
|
44
|
+
|
|
45
|
+
@dataclass
|
|
46
|
+
class AidItem(ItemBase):
|
|
47
|
+
health: int = 0
|
|
48
|
+
ap: int = 0
|
|
49
|
+
rads: int = 0
|
|
50
|
+
addiction_risk: str = "None"
|
|
51
|
+
special_bonuses: Dict[str, int] = None
|
|
52
|
+
|
|
53
|
+
@dataclass
|
|
54
|
+
class AmmoItem(ItemBase):
|
|
55
|
+
damage_type: str = ""
|
|
56
|
+
|
|
57
|
+
@dataclass
|
|
58
|
+
class JunkItem(ItemBase):
|
|
59
|
+
components: Dict[str, int] = None
|
|
60
|
+
|
|
61
|
+
@dataclass
|
|
62
|
+
class MiscItem(ItemBase):
|
|
63
|
+
type: str = "Misc"
|