From 08077278b4277434ebbeb0e828cf45f9ce9ee387 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Fri, 7 Mar 2014 01:22:25 +0100 Subject: [PATCH] rnd-20140307-1-src --- src/conf_gfx.c | 9 + src/conf_gfx.h | 392 +++++++++++++++++++++--------------------- src/conf_var.c | 20 +++ src/conftime.h | 2 +- src/editor.c | 4 + src/game.c | 38 +++- src/game.h | 5 + src/init.c | 20 +++ src/libgame/gadgets.c | 3 + src/main.c | 4 + src/main.h | 6 + src/tape.c | 38 ++++ src/tools.c | 45 +++++ 13 files changed, 386 insertions(+), 200 deletions(-) diff --git a/src/conf_gfx.c b/src/conf_gfx.c index 5c8048dc..82f508fd 100644 --- a/src/conf_gfx.c +++ b/src/conf_gfx.c @@ -4744,6 +4744,9 @@ struct ConfigInfo image_config[] = { "game.button.gfx.sound_simple.pressed_xoffset", "-100" }, { "game.button.gfx.sound_simple.active_yoffset", "-30" }, + { "game.button.gfx.save", UNDEFINED_FILENAME }, + { "game.button.gfx.load", UNDEFINED_FILENAME }, + { "tape.button.gfx.eject", "RocksDoor.png" }, { "tape.button.gfx.eject.x", "305" }, { "tape.button.gfx.eject.y", "357" }, @@ -6020,6 +6023,8 @@ struct ConfigInfo image_config[] = { "main.input.name.valign", "top" }, { "main.input.name.font", "font.input_1" }, + { "main.show_game_buttons", "false" }, + { "preview.x", "272" }, { "preview.y", "380" }, { "preview.align", "center" }, @@ -6999,6 +7004,10 @@ struct ConfigInfo image_config[] = { "game.button.sound_loops.y", "245" }, { "game.button.sound_simple.x", "65" }, { "game.button.sound_simple.y", "245" }, + { "game.button.save.x", "-1" }, + { "game.button.save.y", "-1" }, + { "game.button.load.x", "-1" }, + { "game.button.load.y", "-1" }, { "tape.button.eject.x", "5" }, { "tape.button.eject.y", "77" }, diff --git a/src/conf_gfx.h b/src/conf_gfx.h index 017b1a41..b9d67c4f 100644 --- a/src/conf_gfx.h +++ b/src/conf_gfx.h @@ -1705,201 +1705,203 @@ #define IMG_GAME_BUTTON_GFX_SOUND_MUSIC 1684 #define IMG_GAME_BUTTON_GFX_SOUND_LOOPS 1685 #define IMG_GAME_BUTTON_GFX_SOUND_SIMPLE 1686 -#define IMG_TAPE_BUTTON_GFX_EJECT 1687 -#define IMG_TAPE_BUTTON_GFX_EXTRA 1688 -#define IMG_TAPE_BUTTON_GFX_STOP 1689 -#define IMG_TAPE_BUTTON_GFX_PAUSE 1690 -#define IMG_TAPE_BUTTON_GFX_RECORD 1691 -#define IMG_TAPE_BUTTON_GFX_PLAY 1692 -#define IMG_TAPE_SYMBOL_GFX_EJECT 1693 -#define IMG_TAPE_SYMBOL_GFX_STOP 1694 -#define IMG_TAPE_SYMBOL_GFX_PAUSE 1695 -#define IMG_TAPE_SYMBOL_GFX_RECORD 1696 -#define IMG_TAPE_SYMBOL_GFX_PLAY 1697 -#define IMG_TAPE_SYMBOL_GFX_FAST_FORWARD 1698 -#define IMG_TAPE_SYMBOL_GFX_WARP_FORWARD 1699 -#define IMG_TAPE_SYMBOL_GFX_WARP_FORWARD_BLIND 1700 -#define IMG_TAPE_SYMBOL_GFX_PAUSE_BEFORE_END 1701 -#define IMG_TAPE_SYMBOL_GFX_SINGLE_STEP 1702 -#define IMG_TAPE_LABEL_GFX_EJECT 1703 -#define IMG_TAPE_LABEL_GFX_STOP 1704 -#define IMG_TAPE_LABEL_GFX_PAUSE 1705 -#define IMG_TAPE_LABEL_GFX_RECORD 1706 -#define IMG_TAPE_LABEL_GFX_PLAY 1707 -#define IMG_TAPE_LABEL_GFX_FAST_FORWARD 1708 -#define IMG_TAPE_LABEL_GFX_WARP_FORWARD 1709 -#define IMG_TAPE_LABEL_GFX_WARP_FORWARD_BLIND 1710 -#define IMG_TAPE_LABEL_GFX_PAUSE_BEFORE_END 1711 -#define IMG_TAPE_LABEL_GFX_SINGLE_STEP 1712 -#define IMG_TAPE_LABEL_GFX_DATE 1713 -#define IMG_TAPE_LABEL_GFX_TIME 1714 -#define IMG_REQUEST_BUTTON_GFX_YES 1715 -#define IMG_REQUEST_BUTTON_GFX_NO 1716 -#define IMG_REQUEST_BUTTON_GFX_CONFIRM 1717 -#define IMG_REQUEST_BUTTON_GFX_PLAYER_1 1718 -#define IMG_REQUEST_BUTTON_GFX_PLAYER_2 1719 -#define IMG_REQUEST_BUTTON_GFX_PLAYER_3 1720 -#define IMG_REQUEST_BUTTON_GFX_PLAYER_4 1721 -#define IMG_FONT_INITIAL_1 1722 -#define IMG_FONT_INITIAL_2 1723 -#define IMG_FONT_INITIAL_3 1724 -#define IMG_FONT_INITIAL_4 1725 -#define IMG_FONT_TITLE_1 1726 -#define IMG_FONT_TITLE_2 1727 -#define IMG_FONT_TITLE_2_SETUP 1728 -#define IMG_FONT_MENU_1 1729 -#define IMG_FONT_MENU_1_ACTIVE 1730 -#define IMG_FONT_MENU_2 1731 -#define IMG_FONT_MENU_2_ACTIVE 1732 -#define IMG_FONT_TEXT_1 1733 -#define IMG_FONT_TEXT_1_MAIN 1734 -#define IMG_FONT_TEXT_1_LEVELS 1735 -#define IMG_FONT_TEXT_1_LEVELNR 1736 -#define IMG_FONT_TEXT_1_SETUP 1737 -#define IMG_FONT_TEXT_1_PREVIEW 1738 -#define IMG_FONT_TEXT_1_SCORES 1739 -#define IMG_FONT_TEXT_1_ACTIVE_SCORES 1740 -#define IMG_FONT_TEXT_1_PANEL 1741 -#define IMG_FONT_TEXT_1_DOOR 1742 -#define IMG_FONT_TEXT_2 1743 -#define IMG_FONT_TEXT_2_MAIN 1744 -#define IMG_FONT_TEXT_2_LEVELS 1745 -#define IMG_FONT_TEXT_2_LEVELNR 1746 -#define IMG_FONT_TEXT_2_SETUP 1747 -#define IMG_FONT_TEXT_2_PREVIEW 1748 -#define IMG_FONT_TEXT_2_SCORES 1749 -#define IMG_FONT_TEXT_2_ACTIVE_SCORES 1750 -#define IMG_FONT_TEXT_3 1751 -#define IMG_FONT_TEXT_3_LEVELS 1752 -#define IMG_FONT_TEXT_3_LEVELNR 1753 -#define IMG_FONT_TEXT_3_SETUP 1754 -#define IMG_FONT_TEXT_3_PREVIEW 1755 -#define IMG_FONT_TEXT_3_SCORES 1756 -#define IMG_FONT_TEXT_3_ACTIVE_SCORES 1757 -#define IMG_FONT_TEXT_4 1758 -#define IMG_FONT_TEXT_4_MAIN 1759 -#define IMG_FONT_TEXT_4_LEVELS 1760 -#define IMG_FONT_TEXT_4_LEVELNR 1761 -#define IMG_FONT_TEXT_4_SETUP 1762 -#define IMG_FONT_TEXT_4_SCORES 1763 -#define IMG_FONT_TEXT_4_ACTIVE_SCORES 1764 -#define IMG_FONT_ENVELOPE_1 1765 -#define IMG_FONT_ENVELOPE_2 1766 -#define IMG_FONT_ENVELOPE_3 1767 -#define IMG_FONT_ENVELOPE_4 1768 -#define IMG_FONT_REQUEST 1769 -#define IMG_FONT_INPUT_1 1770 -#define IMG_FONT_INPUT_1_MAIN 1771 -#define IMG_FONT_INPUT_1_ACTIVE 1772 -#define IMG_FONT_INPUT_1_ACTIVE_MAIN 1773 -#define IMG_FONT_INPUT_1_ACTIVE_SETUP 1774 -#define IMG_FONT_INPUT_2 1775 -#define IMG_FONT_INPUT_2_ACTIVE 1776 -#define IMG_FONT_OPTION_OFF 1777 -#define IMG_FONT_OPTION_ON 1778 -#define IMG_FONT_VALUE_1 1779 -#define IMG_FONT_VALUE_2 1780 -#define IMG_FONT_VALUE_OLD 1781 -#define IMG_FONT_LEVEL_NUMBER 1782 -#define IMG_FONT_LEVEL_NUMBER_ACTIVE 1783 -#define IMG_FONT_TAPE_RECORDER 1784 -#define IMG_FONT_GAME_INFO 1785 -#define IMG_FONT_INFO_ELEMENTS 1786 -#define IMG_FONT_INFO_LEVELSET 1787 -#define IMG_GLOBAL_BORDER 1788 -#define IMG_GLOBAL_DOOR 1789 -#define IMG_GLOBAL_BUSY 1790 -#define IMG_EDITOR_ELEMENT_BORDER 1791 -#define IMG_EDITOR_ELEMENT_BORDER_INPUT 1792 -#define IMG_EDITOR_CASCADE_LIST 1793 -#define IMG_EDITOR_CASCADE_LIST_ACTIVE 1794 -#define IMG_EDITOR_PALETTE_BUTTON 1795 -#define IMG_EDITOR_PALETTE_SCROLL_UP 1796 -#define IMG_EDITOR_PALETTE_SCROLL_DOWN 1797 -#define IMG_EDITOR_PALETTE_SCROLLBAR 1798 -#define IMG_EDITOR_PLAYFIELD_SCROLL_UP 1799 -#define IMG_EDITOR_PLAYFIELD_SCROLL_DOWN 1800 -#define IMG_EDITOR_PLAYFIELD_SCROLL_LEFT 1801 -#define IMG_EDITOR_PLAYFIELD_SCROLL_RIGHT 1802 -#define IMG_EDITOR_PLAYFIELD_SCROLLBAR 1803 -#define IMG_EDITOR_BUTTON_GFX_PREV_LEVEL 1804 -#define IMG_EDITOR_BUTTON_GFX_NEXT_LEVEL 1805 -#define IMG_BACKGROUND 1806 -#define IMG_BACKGROUND_TITLE_INITIAL 1807 -#define IMG_BACKGROUND_TITLE 1808 -#define IMG_BACKGROUND_MAIN 1809 -#define IMG_BACKGROUND_LEVELS 1810 -#define IMG_BACKGROUND_LEVELNR 1811 -#define IMG_BACKGROUND_SCORES 1812 -#define IMG_BACKGROUND_EDITOR 1813 -#define IMG_BACKGROUND_INFO 1814 -#define IMG_BACKGROUND_INFO_ELEMENTS 1815 -#define IMG_BACKGROUND_INFO_MUSIC 1816 -#define IMG_BACKGROUND_INFO_CREDITS 1817 -#define IMG_BACKGROUND_INFO_PROGRAM 1818 -#define IMG_BACKGROUND_INFO_VERSION 1819 -#define IMG_BACKGROUND_INFO_LEVELSET 1820 -#define IMG_BACKGROUND_SETUP 1821 -#define IMG_BACKGROUND_PLAYING 1822 -#define IMG_BACKGROUND_DOOR 1823 -#define IMG_BACKGROUND_TAPE 1824 -#define IMG_BACKGROUND_PANEL 1825 -#define IMG_BACKGROUND_PALETTE 1826 -#define IMG_BACKGROUND_TOOLBOX 1827 -#define IMG_BACKGROUND_TITLESCREEN_INITIAL_1 1828 -#define IMG_BACKGROUND_TITLESCREEN_INITIAL_2 1829 -#define IMG_BACKGROUND_TITLESCREEN_INITIAL_3 1830 -#define IMG_BACKGROUND_TITLESCREEN_INITIAL_4 1831 -#define IMG_BACKGROUND_TITLESCREEN_INITIAL_5 1832 -#define IMG_BACKGROUND_TITLESCREEN_1 1833 -#define IMG_BACKGROUND_TITLESCREEN_2 1834 -#define IMG_BACKGROUND_TITLESCREEN_3 1835 -#define IMG_BACKGROUND_TITLESCREEN_4 1836 -#define IMG_BACKGROUND_TITLESCREEN_5 1837 -#define IMG_BACKGROUND_TITLEMESSAGE_INITIAL_1 1838 -#define IMG_BACKGROUND_TITLEMESSAGE_INITIAL_2 1839 -#define IMG_BACKGROUND_TITLEMESSAGE_INITIAL_3 1840 -#define IMG_BACKGROUND_TITLEMESSAGE_INITIAL_4 1841 -#define IMG_BACKGROUND_TITLEMESSAGE_INITIAL_5 1842 -#define IMG_BACKGROUND_TITLEMESSAGE_1 1843 -#define IMG_BACKGROUND_TITLEMESSAGE_2 1844 -#define IMG_BACKGROUND_TITLEMESSAGE_3 1845 -#define IMG_BACKGROUND_TITLEMESSAGE_4 1846 -#define IMG_BACKGROUND_TITLEMESSAGE_5 1847 -#define IMG_BACKGROUND_ENVELOPE_1 1848 -#define IMG_BACKGROUND_ENVELOPE_2 1849 -#define IMG_BACKGROUND_ENVELOPE_3 1850 -#define IMG_BACKGROUND_ENVELOPE_4 1851 -#define IMG_BACKGROUND_REQUEST 1852 -#define IMG_TITLESCREEN_INITIAL_1 1853 -#define IMG_TITLESCREEN_INITIAL_2 1854 -#define IMG_TITLESCREEN_INITIAL_3 1855 -#define IMG_TITLESCREEN_INITIAL_4 1856 -#define IMG_TITLESCREEN_INITIAL_5 1857 -#define IMG_TITLESCREEN_1 1858 -#define IMG_TITLESCREEN_2 1859 -#define IMG_TITLESCREEN_3 1860 -#define IMG_TITLESCREEN_4 1861 -#define IMG_TITLESCREEN_5 1862 -#define IMG_DOOR_1_GFX_PART_1 1863 -#define IMG_DOOR_1_GFX_PART_2 1864 -#define IMG_DOOR_1_GFX_PART_3 1865 -#define IMG_DOOR_1_GFX_PART_4 1866 -#define IMG_DOOR_1_GFX_PART_5 1867 -#define IMG_DOOR_1_GFX_PART_6 1868 -#define IMG_DOOR_1_GFX_PART_7 1869 -#define IMG_DOOR_1_GFX_PART_8 1870 -#define IMG_DOOR_2_GFX_PART_1 1871 -#define IMG_DOOR_2_GFX_PART_2 1872 -#define IMG_DOOR_2_GFX_PART_3 1873 -#define IMG_DOOR_2_GFX_PART_4 1874 -#define IMG_DOOR_2_GFX_PART_5 1875 -#define IMG_DOOR_2_GFX_PART_6 1876 -#define IMG_DOOR_2_GFX_PART_7 1877 -#define IMG_DOOR_2_GFX_PART_8 1878 -#define IMG_DOOR_2_TOP_BORDER_CORRECTION 1879 -#define IMG_LAST_IMAGE_ENTRY_BUG 1880 +#define IMG_GAME_BUTTON_GFX_SAVE 1687 +#define IMG_GAME_BUTTON_GFX_LOAD 1688 +#define IMG_TAPE_BUTTON_GFX_EJECT 1689 +#define IMG_TAPE_BUTTON_GFX_EXTRA 1690 +#define IMG_TAPE_BUTTON_GFX_STOP 1691 +#define IMG_TAPE_BUTTON_GFX_PAUSE 1692 +#define IMG_TAPE_BUTTON_GFX_RECORD 1693 +#define IMG_TAPE_BUTTON_GFX_PLAY 1694 +#define IMG_TAPE_SYMBOL_GFX_EJECT 1695 +#define IMG_TAPE_SYMBOL_GFX_STOP 1696 +#define IMG_TAPE_SYMBOL_GFX_PAUSE 1697 +#define IMG_TAPE_SYMBOL_GFX_RECORD 1698 +#define IMG_TAPE_SYMBOL_GFX_PLAY 1699 +#define IMG_TAPE_SYMBOL_GFX_FAST_FORWARD 1700 +#define IMG_TAPE_SYMBOL_GFX_WARP_FORWARD 1701 +#define IMG_TAPE_SYMBOL_GFX_WARP_FORWARD_BLIND 1702 +#define IMG_TAPE_SYMBOL_GFX_PAUSE_BEFORE_END 1703 +#define IMG_TAPE_SYMBOL_GFX_SINGLE_STEP 1704 +#define IMG_TAPE_LABEL_GFX_EJECT 1705 +#define IMG_TAPE_LABEL_GFX_STOP 1706 +#define IMG_TAPE_LABEL_GFX_PAUSE 1707 +#define IMG_TAPE_LABEL_GFX_RECORD 1708 +#define IMG_TAPE_LABEL_GFX_PLAY 1709 +#define IMG_TAPE_LABEL_GFX_FAST_FORWARD 1710 +#define IMG_TAPE_LABEL_GFX_WARP_FORWARD 1711 +#define IMG_TAPE_LABEL_GFX_WARP_FORWARD_BLIND 1712 +#define IMG_TAPE_LABEL_GFX_PAUSE_BEFORE_END 1713 +#define IMG_TAPE_LABEL_GFX_SINGLE_STEP 1714 +#define IMG_TAPE_LABEL_GFX_DATE 1715 +#define IMG_TAPE_LABEL_GFX_TIME 1716 +#define IMG_REQUEST_BUTTON_GFX_YES 1717 +#define IMG_REQUEST_BUTTON_GFX_NO 1718 +#define IMG_REQUEST_BUTTON_GFX_CONFIRM 1719 +#define IMG_REQUEST_BUTTON_GFX_PLAYER_1 1720 +#define IMG_REQUEST_BUTTON_GFX_PLAYER_2 1721 +#define IMG_REQUEST_BUTTON_GFX_PLAYER_3 1722 +#define IMG_REQUEST_BUTTON_GFX_PLAYER_4 1723 +#define IMG_FONT_INITIAL_1 1724 +#define IMG_FONT_INITIAL_2 1725 +#define IMG_FONT_INITIAL_3 1726 +#define IMG_FONT_INITIAL_4 1727 +#define IMG_FONT_TITLE_1 1728 +#define IMG_FONT_TITLE_2 1729 +#define IMG_FONT_TITLE_2_SETUP 1730 +#define IMG_FONT_MENU_1 1731 +#define IMG_FONT_MENU_1_ACTIVE 1732 +#define IMG_FONT_MENU_2 1733 +#define IMG_FONT_MENU_2_ACTIVE 1734 +#define IMG_FONT_TEXT_1 1735 +#define IMG_FONT_TEXT_1_MAIN 1736 +#define IMG_FONT_TEXT_1_LEVELS 1737 +#define IMG_FONT_TEXT_1_LEVELNR 1738 +#define IMG_FONT_TEXT_1_SETUP 1739 +#define IMG_FONT_TEXT_1_PREVIEW 1740 +#define IMG_FONT_TEXT_1_SCORES 1741 +#define IMG_FONT_TEXT_1_ACTIVE_SCORES 1742 +#define IMG_FONT_TEXT_1_PANEL 1743 +#define IMG_FONT_TEXT_1_DOOR 1744 +#define IMG_FONT_TEXT_2 1745 +#define IMG_FONT_TEXT_2_MAIN 1746 +#define IMG_FONT_TEXT_2_LEVELS 1747 +#define IMG_FONT_TEXT_2_LEVELNR 1748 +#define IMG_FONT_TEXT_2_SETUP 1749 +#define IMG_FONT_TEXT_2_PREVIEW 1750 +#define IMG_FONT_TEXT_2_SCORES 1751 +#define IMG_FONT_TEXT_2_ACTIVE_SCORES 1752 +#define IMG_FONT_TEXT_3 1753 +#define IMG_FONT_TEXT_3_LEVELS 1754 +#define IMG_FONT_TEXT_3_LEVELNR 1755 +#define IMG_FONT_TEXT_3_SETUP 1756 +#define IMG_FONT_TEXT_3_PREVIEW 1757 +#define IMG_FONT_TEXT_3_SCORES 1758 +#define IMG_FONT_TEXT_3_ACTIVE_SCORES 1759 +#define IMG_FONT_TEXT_4 1760 +#define IMG_FONT_TEXT_4_MAIN 1761 +#define IMG_FONT_TEXT_4_LEVELS 1762 +#define IMG_FONT_TEXT_4_LEVELNR 1763 +#define IMG_FONT_TEXT_4_SETUP 1764 +#define IMG_FONT_TEXT_4_SCORES 1765 +#define IMG_FONT_TEXT_4_ACTIVE_SCORES 1766 +#define IMG_FONT_ENVELOPE_1 1767 +#define IMG_FONT_ENVELOPE_2 1768 +#define IMG_FONT_ENVELOPE_3 1769 +#define IMG_FONT_ENVELOPE_4 1770 +#define IMG_FONT_REQUEST 1771 +#define IMG_FONT_INPUT_1 1772 +#define IMG_FONT_INPUT_1_MAIN 1773 +#define IMG_FONT_INPUT_1_ACTIVE 1774 +#define IMG_FONT_INPUT_1_ACTIVE_MAIN 1775 +#define IMG_FONT_INPUT_1_ACTIVE_SETUP 1776 +#define IMG_FONT_INPUT_2 1777 +#define IMG_FONT_INPUT_2_ACTIVE 1778 +#define IMG_FONT_OPTION_OFF 1779 +#define IMG_FONT_OPTION_ON 1780 +#define IMG_FONT_VALUE_1 1781 +#define IMG_FONT_VALUE_2 1782 +#define IMG_FONT_VALUE_OLD 1783 +#define IMG_FONT_LEVEL_NUMBER 1784 +#define IMG_FONT_LEVEL_NUMBER_ACTIVE 1785 +#define IMG_FONT_TAPE_RECORDER 1786 +#define IMG_FONT_GAME_INFO 1787 +#define IMG_FONT_INFO_ELEMENTS 1788 +#define IMG_FONT_INFO_LEVELSET 1789 +#define IMG_GLOBAL_BORDER 1790 +#define IMG_GLOBAL_DOOR 1791 +#define IMG_GLOBAL_BUSY 1792 +#define IMG_EDITOR_ELEMENT_BORDER 1793 +#define IMG_EDITOR_ELEMENT_BORDER_INPUT 1794 +#define IMG_EDITOR_CASCADE_LIST 1795 +#define IMG_EDITOR_CASCADE_LIST_ACTIVE 1796 +#define IMG_EDITOR_PALETTE_BUTTON 1797 +#define IMG_EDITOR_PALETTE_SCROLL_UP 1798 +#define IMG_EDITOR_PALETTE_SCROLL_DOWN 1799 +#define IMG_EDITOR_PALETTE_SCROLLBAR 1800 +#define IMG_EDITOR_PLAYFIELD_SCROLL_UP 1801 +#define IMG_EDITOR_PLAYFIELD_SCROLL_DOWN 1802 +#define IMG_EDITOR_PLAYFIELD_SCROLL_LEFT 1803 +#define IMG_EDITOR_PLAYFIELD_SCROLL_RIGHT 1804 +#define IMG_EDITOR_PLAYFIELD_SCROLLBAR 1805 +#define IMG_EDITOR_BUTTON_GFX_PREV_LEVEL 1806 +#define IMG_EDITOR_BUTTON_GFX_NEXT_LEVEL 1807 +#define IMG_BACKGROUND 1808 +#define IMG_BACKGROUND_TITLE_INITIAL 1809 +#define IMG_BACKGROUND_TITLE 1810 +#define IMG_BACKGROUND_MAIN 1811 +#define IMG_BACKGROUND_LEVELS 1812 +#define IMG_BACKGROUND_LEVELNR 1813 +#define IMG_BACKGROUND_SCORES 1814 +#define IMG_BACKGROUND_EDITOR 1815 +#define IMG_BACKGROUND_INFO 1816 +#define IMG_BACKGROUND_INFO_ELEMENTS 1817 +#define IMG_BACKGROUND_INFO_MUSIC 1818 +#define IMG_BACKGROUND_INFO_CREDITS 1819 +#define IMG_BACKGROUND_INFO_PROGRAM 1820 +#define IMG_BACKGROUND_INFO_VERSION 1821 +#define IMG_BACKGROUND_INFO_LEVELSET 1822 +#define IMG_BACKGROUND_SETUP 1823 +#define IMG_BACKGROUND_PLAYING 1824 +#define IMG_BACKGROUND_DOOR 1825 +#define IMG_BACKGROUND_TAPE 1826 +#define IMG_BACKGROUND_PANEL 1827 +#define IMG_BACKGROUND_PALETTE 1828 +#define IMG_BACKGROUND_TOOLBOX 1829 +#define IMG_BACKGROUND_TITLESCREEN_INITIAL_1 1830 +#define IMG_BACKGROUND_TITLESCREEN_INITIAL_2 1831 +#define IMG_BACKGROUND_TITLESCREEN_INITIAL_3 1832 +#define IMG_BACKGROUND_TITLESCREEN_INITIAL_4 1833 +#define IMG_BACKGROUND_TITLESCREEN_INITIAL_5 1834 +#define IMG_BACKGROUND_TITLESCREEN_1 1835 +#define IMG_BACKGROUND_TITLESCREEN_2 1836 +#define IMG_BACKGROUND_TITLESCREEN_3 1837 +#define IMG_BACKGROUND_TITLESCREEN_4 1838 +#define IMG_BACKGROUND_TITLESCREEN_5 1839 +#define IMG_BACKGROUND_TITLEMESSAGE_INITIAL_1 1840 +#define IMG_BACKGROUND_TITLEMESSAGE_INITIAL_2 1841 +#define IMG_BACKGROUND_TITLEMESSAGE_INITIAL_3 1842 +#define IMG_BACKGROUND_TITLEMESSAGE_INITIAL_4 1843 +#define IMG_BACKGROUND_TITLEMESSAGE_INITIAL_5 1844 +#define IMG_BACKGROUND_TITLEMESSAGE_1 1845 +#define IMG_BACKGROUND_TITLEMESSAGE_2 1846 +#define IMG_BACKGROUND_TITLEMESSAGE_3 1847 +#define IMG_BACKGROUND_TITLEMESSAGE_4 1848 +#define IMG_BACKGROUND_TITLEMESSAGE_5 1849 +#define IMG_BACKGROUND_ENVELOPE_1 1850 +#define IMG_BACKGROUND_ENVELOPE_2 1851 +#define IMG_BACKGROUND_ENVELOPE_3 1852 +#define IMG_BACKGROUND_ENVELOPE_4 1853 +#define IMG_BACKGROUND_REQUEST 1854 +#define IMG_TITLESCREEN_INITIAL_1 1855 +#define IMG_TITLESCREEN_INITIAL_2 1856 +#define IMG_TITLESCREEN_INITIAL_3 1857 +#define IMG_TITLESCREEN_INITIAL_4 1858 +#define IMG_TITLESCREEN_INITIAL_5 1859 +#define IMG_TITLESCREEN_1 1860 +#define IMG_TITLESCREEN_2 1861 +#define IMG_TITLESCREEN_3 1862 +#define IMG_TITLESCREEN_4 1863 +#define IMG_TITLESCREEN_5 1864 +#define IMG_DOOR_1_GFX_PART_1 1865 +#define IMG_DOOR_1_GFX_PART_2 1866 +#define IMG_DOOR_1_GFX_PART_3 1867 +#define IMG_DOOR_1_GFX_PART_4 1868 +#define IMG_DOOR_1_GFX_PART_5 1869 +#define IMG_DOOR_1_GFX_PART_6 1870 +#define IMG_DOOR_1_GFX_PART_7 1871 +#define IMG_DOOR_1_GFX_PART_8 1872 +#define IMG_DOOR_2_GFX_PART_1 1873 +#define IMG_DOOR_2_GFX_PART_2 1874 +#define IMG_DOOR_2_GFX_PART_3 1875 +#define IMG_DOOR_2_GFX_PART_4 1876 +#define IMG_DOOR_2_GFX_PART_5 1877 +#define IMG_DOOR_2_GFX_PART_6 1878 +#define IMG_DOOR_2_GFX_PART_7 1879 +#define IMG_DOOR_2_GFX_PART_8 1880 +#define IMG_DOOR_2_TOP_BORDER_CORRECTION 1881 +#define IMG_LAST_IMAGE_ENTRY_BUG 1882 -#define NUM_IMAGE_FILES 1881 +#define NUM_IMAGE_FILES 1883 #endif /* CONF_GFX_H */ diff --git a/src/conf_var.c b/src/conf_var.c index 7710041e..73f11967 100644 --- a/src/conf_var.c +++ b/src/conf_var.c @@ -2044,6 +2044,10 @@ struct TokenIntPtrInfo image_config_vars[] = "main.input.name.font", &menu.main.input.name.font }, + { + "main.show_game_buttons", + &menu.main.show_game_buttons + }, { "preview.x", &preview.x @@ -5804,6 +5808,22 @@ struct TokenIntPtrInfo image_config_vars[] = "game.button.sound_simple.y", &game.button.sound_simple.y }, + { + "game.button.save.x", + &game.button.save.x + }, + { + "game.button.save.y", + &game.button.save.y + }, + { + "game.button.load.x", + &game.button.load.x + }, + { + "game.button.load.y", + &game.button.load.y + }, { "tape.button.eject.x", &tape.button.eject.x diff --git a/src/conftime.h b/src/conftime.h index 15c21a67..45332a0a 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "2014-03-06 00:24" +#define COMPILE_DATE_STRING "2014-03-07 01:21" diff --git a/src/editor.c b/src/editor.c index 2791934f..7c513965 100644 --- a/src/editor.c +++ b/src/editor.c @@ -7835,8 +7835,12 @@ void DrawLevelEd() #endif /* copy actual editor door content to door double buffer for OpenDoor() */ +#if 1 + BlitBitmap(drawto, bitmap_db_door_1, DX, DY, DXSIZE, DYSIZE, 0, 0); +#else BlitBitmap(drawto, bitmap_db_door, DX, DY, DXSIZE, DYSIZE, DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1); +#endif #if 1 /* draw new control window (with border) to window */ diff --git a/src/game.c b/src/game.c index cc32a2f4..11a6fed8 100644 --- a/src/game.c +++ b/src/game.c @@ -1014,8 +1014,10 @@ static struct GamePanelControlInfo game_panel_controls[] = #define SOUND_CTRL_ID_MUSIC 3 #define SOUND_CTRL_ID_LOOPS 4 #define SOUND_CTRL_ID_SIMPLE 5 +#define GAME_CTRL_ID_SAVE 6 +#define GAME_CTRL_ID_LOAD 7 -#define NUM_GAME_BUTTONS 6 +#define NUM_GAME_BUTTONS 8 /* forward declaration for internal use */ @@ -1082,7 +1084,6 @@ static void PlayLevelSoundActionIfLoop(int, int, int); static void StopLevelSoundActionIfLoop(int, int, int); static void PlayLevelMusic(); -static void MapGameButtons(); static void HandleGameButtons(struct GadgetInfo *); int AmoebeNachbarNr(int, int); @@ -4516,8 +4517,12 @@ void InitGame() MapTapeButtons(); /* copy actual game door content to door double buffer for OpenDoor() */ +#if 1 + BlitBitmap(drawto, bitmap_db_door_1, DX, DY, DXSIZE, DYSIZE, 0, 0); +#else BlitBitmap(drawto, bitmap_db_door, DX, DY, DXSIZE, DYSIZE, DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1); +#endif OpenDoor(DOOR_OPEN_ALL); @@ -16803,6 +16808,14 @@ static struct { IMG_GAME_BUTTON_GFX_SOUND_SIMPLE, &game.button.sound_simple, SOUND_CTRL_ID_SIMPLE, "normal sounds on/off" + }, + { + IMG_GAME_BUTTON_GFX_SAVE, &game.button.save, + GAME_CTRL_ID_SAVE, "save game" + }, + { + IMG_GAME_BUTTON_GFX_LOAD, &game.button.load, + GAME_CTRL_ID_LOAD, "load game" } }; @@ -16828,9 +16841,18 @@ void CreateGameButtons() int gd_yap = gfx->src_y + gfx->active_yoffset + gfx->pressed_yoffset; int id = i; + if (gfx->bitmap == NULL) + { + game_gadget[id] = NULL; + + continue; + } + if (id == GAME_CTRL_ID_STOP || id == GAME_CTRL_ID_PAUSE || - id == GAME_CTRL_ID_PLAY) + id == GAME_CTRL_ID_PLAY || + id == GAME_CTRL_ID_SAVE || + id == GAME_CTRL_ID_LOAD) { button_type = GD_TYPE_NORMAL_BUTTON; checked = FALSE; @@ -16879,7 +16901,7 @@ void FreeGameButtons() FreeGadget(game_gadget[i]); } -static void MapGameButtons() +void MapGameButtons() { int i; @@ -16985,6 +17007,14 @@ static void HandleGameButtonsExt(int id) } break; + case GAME_CTRL_ID_SAVE: + TapeQuickSave(); + break; + + case GAME_CTRL_ID_LOAD: + TapeQuickLoad(); + break; + default: break; } diff --git a/src/game.h b/src/game.h index d1431c22..db61769a 100644 --- a/src/game.h +++ b/src/game.h @@ -92,9 +92,13 @@ struct GameButtonInfo struct Rect stop; struct Rect pause; struct Rect play; + struct Rect sound_music; struct Rect sound_loops; struct Rect sound_simple; + + struct Rect save; + struct Rect load; }; #else @@ -365,6 +369,7 @@ boolean CheckEngineSnapshot(); void CreateGameButtons(); void FreeGameButtons(); +void MapGameButtons(); void UnmapGameButtons(); void RedrawGameButtons(); diff --git a/src/init.c b/src/init.c index 33bfb5ec..ec2f8b2e 100644 --- a/src/init.c +++ b/src/init.c @@ -1771,6 +1771,7 @@ static void InitGraphicInfo() IMG_BACKGROUND_ENVELOPE_2, IMG_BACKGROUND_ENVELOPE_3, IMG_BACKGROUND_ENVELOPE_4, + IMG_BACKGROUND_REQUEST, IMG_BACKGROUND, IMG_BACKGROUND_TITLE_INITIAL, @@ -1785,11 +1786,15 @@ static void InitGraphicInfo() IMG_BACKGROUND_INFO_MUSIC, IMG_BACKGROUND_INFO_CREDITS, IMG_BACKGROUND_INFO_PROGRAM, + IMG_BACKGROUND_INFO_VERSION, IMG_BACKGROUND_INFO_LEVELSET, IMG_BACKGROUND_SETUP, + IMG_BACKGROUND_PLAYING, IMG_BACKGROUND_DOOR, IMG_BACKGROUND_TAPE, IMG_BACKGROUND_PANEL, + IMG_BACKGROUND_PALETTE, + IMG_BACKGROUND_TOOLBOX, IMG_TITLESCREEN_INITIAL_1, IMG_TITLESCREEN_INITIAL_2, @@ -1802,6 +1807,17 @@ static void InitGraphicInfo() IMG_TITLESCREEN_4, IMG_TITLESCREEN_5, + IMG_BACKGROUND_TITLEMESSAGE_INITIAL_1, + IMG_BACKGROUND_TITLEMESSAGE_INITIAL_2, + IMG_BACKGROUND_TITLEMESSAGE_INITIAL_3, + IMG_BACKGROUND_TITLEMESSAGE_INITIAL_4, + IMG_BACKGROUND_TITLEMESSAGE_INITIAL_5, + IMG_BACKGROUND_TITLEMESSAGE_1, + IMG_BACKGROUND_TITLEMESSAGE_2, + IMG_BACKGROUND_TITLEMESSAGE_3, + IMG_BACKGROUND_TITLEMESSAGE_4, + IMG_BACKGROUND_TITLEMESSAGE_5, + -1 }; @@ -5548,7 +5564,11 @@ void InitGfxBuffers() ReCreateBitmap(&bitmap_db_cross, WIN_XSIZE, WIN_YSIZE, DEFAULT_DEPTH); ReCreateBitmap(&bitmap_db_field, FXSIZE, FYSIZE, DEFAULT_DEPTH); ReCreateBitmap(&bitmap_db_panel, DXSIZE, DYSIZE, DEFAULT_DEPTH); +#if 0 ReCreateBitmap(&bitmap_db_door, 3 * DXSIZE, DYSIZE + VYSIZE, DEFAULT_DEPTH); +#endif + ReCreateBitmap(&bitmap_db_door_1, 3 * DXSIZE, DYSIZE, DEFAULT_DEPTH); + ReCreateBitmap(&bitmap_db_door_2, 3 * VXSIZE, VYSIZE, DEFAULT_DEPTH); ReCreateBitmap(&bitmap_db_toons, FULL_SXSIZE, FULL_SYSIZE, DEFAULT_DEPTH); /* initialize screen properties */ diff --git a/src/libgame/gadgets.c b/src/libgame/gadgets.c index 3781aeb4..8b99078e 100644 --- a/src/libgame/gadgets.c +++ b/src/libgame/gadgets.c @@ -1263,6 +1263,9 @@ void FreeGadget(struct GadgetInfo *gi) { struct GadgetInfo *gi_previous = gadget_list_first_entry; + if (gi == NULL) + return; + /* prevent "last_info_gi" from pointing to memory that will be freed */ if (last_info_gi == gi) last_info_gi = NULL; diff --git a/src/main.c b/src/main.c index c1762fe8..c1982ccf 100644 --- a/src/main.c +++ b/src/main.c @@ -25,7 +25,11 @@ Bitmap *bitmap_db_store; Bitmap *bitmap_db_cross; Bitmap *bitmap_db_field; Bitmap *bitmap_db_panel; +#if 0 Bitmap *bitmap_db_door; +#endif +Bitmap *bitmap_db_door_1; +Bitmap *bitmap_db_door_2; Bitmap *bitmap_db_toons; DrawBuffer *fieldbuffer; DrawBuffer *drawto_field; diff --git a/src/main.h b/src/main.h index f9ed5ac4..5653a982 100644 --- a/src/main.h +++ b/src/main.h @@ -2240,6 +2240,8 @@ struct MenuMainInfo struct MenuMainButtonInfo button; struct MenuMainTextInfo text; struct MenuMainInputInfo input; + + boolean show_game_buttons; }; struct TitleFadingInfo @@ -2906,7 +2908,11 @@ extern Bitmap *bitmap_db_store; extern Bitmap *bitmap_db_cross; extern Bitmap *bitmap_db_field; extern Bitmap *bitmap_db_panel; +#if 0 extern Bitmap *bitmap_db_door; +#endif +extern Bitmap *bitmap_db_door_1; +extern Bitmap *bitmap_db_door_2; extern Bitmap *bitmap_db_toons; extern Pixmap tile_clipmask[]; extern DrawBuffer *fieldbuffer; diff --git a/src/tape.c b/src/tape.c index 2ab6f4be..cebc9289 100644 --- a/src/tape.c +++ b/src/tape.c @@ -544,6 +544,38 @@ void DrawCompleteVideoDisplay() tape.date, tape.length); #endif +#if 1 + struct GraphicInfo *g_tape = &graphic_info[IMG_BACKGROUND_TAPE]; + int tape_button_graphics[] = + { + IMG_TAPE_BUTTON_GFX_EJECT, + IMG_TAPE_BUTTON_GFX_STOP, + IMG_TAPE_BUTTON_GFX_PAUSE, + IMG_TAPE_BUTTON_GFX_RECORD, + IMG_TAPE_BUTTON_GFX_PLAY + }; + struct Rect *tape_button_positions[] = + { + &tape.button.eject, + &tape.button.stop, + &tape.button.pause, + &tape.button.record, + &tape.button.play + }; + int i; + + BlitBitmap(g_tape->bitmap, drawto, g_tape->src_x, g_tape->src_y, + gfx.vxsize, gfx.vysize, gfx.vx, gfx.vy); + + for (i = 0; i < SIZEOF_ARRAY_INT(tape_button_graphics); i++) + { + struct GraphicInfo *g = &graphic_info[tape_button_graphics[i]]; + struct Rect *pos = tape_button_positions[i]; + + BlitBitmap(g->bitmap, drawto, g->src_x, g->src_y, + g->width, g->height, gfx.vx + pos->x, gfx.vy + pos->y); + } +#else BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto, DOOR_GFX_PAGEX3, DOOR_GFX_PAGEY2, gfx.vxsize, gfx.vysize, gfx.vx, gfx.vy); @@ -552,6 +584,7 @@ void DrawCompleteVideoDisplay() DOOR_GFX_PAGEY2 + VIDEO_CONTROL_YPOS, VIDEO_CONTROL_XSIZE, VIDEO_CONTROL_YSIZE, gfx.vx + VIDEO_CONTROL_XPOS, gfx.vy + VIDEO_CONTROL_YPOS); +#endif DrawVideoDisplay(VIDEO_ALL_OFF, 0); @@ -587,8 +620,13 @@ void DrawCompleteVideoDisplay() } #endif +#if 1 + BlitBitmap(drawto, bitmap_db_door_2, gfx.vx, gfx.vy, gfx.vxsize, gfx.vysize, + 0, 0); +#else BlitBitmap(drawto, bitmap_db_door, gfx.vx, gfx.vy, gfx.vxsize, gfx.vysize, DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY2); +#endif } void TapeDeactivateDisplayOn() diff --git a/src/tools.c b/src/tools.c index 0387f05d..21728e5a 100644 --- a/src/tools.c +++ b/src/tools.c @@ -4568,9 +4568,14 @@ static boolean RequestDoor(char *text, unsigned int req_state) CloseDoor(DOOR_CLOSE_1); /* save old door content */ +#if 1 + BlitBitmap(bitmap_db_door_1, bitmap_db_door_1, + 0 * DXSIZE, 0, DXSIZE, DYSIZE, 1 * DXSIZE, 0); +#else BlitBitmap(bitmap_db_door, bitmap_db_door, DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1, DXSIZE, DYSIZE, DOOR_GFX_PAGEX2, DOOR_GFX_PAGEY1); +#endif } SetDoorBackgroundImage(IMG_BACKGROUND_DOOR); @@ -4640,9 +4645,13 @@ static boolean RequestDoor(char *text, unsigned int req_state) } /* copy request gadgets to door backbuffer */ +#if 1 + BlitBitmap(drawto, bitmap_db_door_1, DX, DY, DXSIZE, DYSIZE, 0, 0); +#else BlitBitmap(drawto, bitmap_db_door, DX, DY, DXSIZE, DYSIZE, DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1); +#endif OpenDoor(DOOR_OPEN_1); @@ -5537,6 +5546,15 @@ unsigned int OpenDoor(unsigned int door_state) { if (door_state & DOOR_COPY_BACK) { +#if 1 + if (door_state & DOOR_OPEN_1) + BlitBitmap(bitmap_db_door_1, bitmap_db_door_1, + 1 * DXSIZE, 0, DXSIZE, DYSIZE, 0 * DXSIZE, 0); + + if (door_state & DOOR_OPEN_2) + BlitBitmap(bitmap_db_door_2, bitmap_db_door_2, + 1 * VXSIZE, 0, VXSIZE, VYSIZE, 0 * VXSIZE, 0); +#else if (door_state & DOOR_OPEN_1) BlitBitmap(bitmap_db_door, bitmap_db_door, DOOR_GFX_PAGEX2, DOOR_GFX_PAGEY1, DXSIZE, DYSIZE, @@ -5546,6 +5564,7 @@ unsigned int OpenDoor(unsigned int door_state) BlitBitmap(bitmap_db_door, bitmap_db_door, DOOR_GFX_PAGEX2, DOOR_GFX_PAGEY2, VXSIZE, VYSIZE, DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY2); +#endif door_state &= ~DOOR_COPY_BACK; } @@ -5559,6 +5578,15 @@ unsigned int CloseDoor(unsigned int door_state) if (!(door_state & DOOR_NO_COPY_BACK)) { +#if 1 + if (old_door_state & DOOR_OPEN_1) + BlitBitmap(backbuffer, bitmap_db_door_1, + DX, DY, DXSIZE, DYSIZE, 0, 0); + + if (old_door_state & DOOR_OPEN_2) + BlitBitmap(backbuffer, bitmap_db_door_2, + VX, VY, VXSIZE, VYSIZE, 0, 0); +#else if (old_door_state & DOOR_OPEN_1) BlitBitmap(backbuffer, bitmap_db_door, DX, DY, DXSIZE, DYSIZE, DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1); @@ -5566,6 +5594,7 @@ unsigned int CloseDoor(unsigned int door_state) if (old_door_state & DOOR_OPEN_2) BlitBitmap(backbuffer, bitmap_db_door, VX, VY, VXSIZE, VYSIZE, DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY2); +#endif door_state &= ~DOOR_NO_COPY_BACK; } @@ -5594,11 +5623,13 @@ int euclid(int a, int b) unsigned int MoveDoor(unsigned int door_state) { +#if 0 struct XY panel_pos_list[] = { { DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1 }, { DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY2 }, }; +#endif struct Rect door_rect_list[] = { { DX, DY, DXSIZE, DYSIZE }, @@ -5778,8 +5809,12 @@ unsigned int MoveDoor(unsigned int door_state) int door_token = dpc->door_token; int door_index = DOOR_INDEX_FROM_TOKEN(door_token); boolean is_panel = DOOR_PART_IS_PANEL(nr); +#if 0 struct XY *panel_pos = &panel_pos_list[door_index]; +#endif struct Rect *door_rect = &door_rect_list[door_index]; + Bitmap *bitmap_db_door = (door_token == DOOR_1 ? bitmap_db_door_1 : + bitmap_db_door_2); Bitmap *bitmap = (is_panel ? bitmap_db_door : g->bitmap); int current_door_state = door_state & door_token; boolean door_opening = ((current_door_state & DOOR_OPEN) != 0); @@ -5797,6 +5832,11 @@ unsigned int MoveDoor(unsigned int door_state) int dst_x, dst_y, dst_xx, dst_yy; int width, height; +#if 0 + if (k == 0 && is_panel && door_token == DOOR_2) + printf("::: %d, %d\n", g->width, g->height); +#endif + #if 0 if (DOOR_PART_IS_PANEL(nr)) { @@ -5903,8 +5943,13 @@ unsigned int MoveDoor(unsigned int door_state) if (is_panel) { +#if 1 + src_x = src_xx; + src_y = src_yy; +#else src_x = panel_pos->x + src_xx; src_y = panel_pos->y + src_yy; +#endif } else { -- 2.34.1