3 import flash
.display
.*;
5 import flash
.sampler
.NewObjectSample;
7 import org
.sevenchan
.dongs
.Creature
;
8 import org
.sevenchan
.dongs
.creature
.*;
9 import org
.sevenchan
.dongs
.enchantment
.events
.CombatStartEvent
;
10 import org
.sevenchan
.dongs
.Item
;
11 import org
.sevenchan
.dongs
.Screen;
12 import org
.sevenchan
.dongs
.Town
;
13 import org
.sevenchan
.dongs
.ui
.*;
14 import org
.sevenchan
.dongs
.screens
.*;
19 [Frame
(factoryClass
= "Preloader", backgroundColor
= 0x666666, frames
= 10)]
20 [SWF
(width
= 800, height
= 600, frameRate
= 60 , backgroundColor
= "#666666")]
21 public class Main
extends Sprite
23 private const default_bg_color
:uint = 0x333333;
24 private var bgshape
:Sprite;
26 private var currentScreen
:Screen;
27 private var combatScreen
:Screen;
28 private var btnNewGame
:SexButton
;
29 private var btnLoadSaveGame
:SexButton
;
30 private var btnExportGame
:SexButton
;
31 private var btnSelectPerk
:SexButton
;
32 private var btnDebugMenu
:SexButton
;
33 private var btnAppearance
:SexButton
;
34 private var btnAction
:Array;
36 private var pnlMain
:SexPanel
;
37 private var pnlStats
:SexPanel
;
39 private var statXP
:Statistic
;
40 private var statStrength
:Statistic
;
41 private var statSpeed
:Statistic
;
42 private var statIntellect
:Statistic
;
43 private var statSensitivity
:Statistic
;
44 private var statLust
:Statistic
;
46 private var statMana
:Statistic
;
47 private var statHP
:Statistic
;
49 public var player
:Player
;
51 public static var screenQueue
:Queue
= new Queue
();
53 public function Main
():void
55 player
= new Player
(this);
57 else addEventListener
(Event.ADDED_TO_STAGE
, init
);
60 private function init
(e
:Event = null):void
64 removeEventListener
(Event.ADDED_TO_STAGE
, init
);
68 var toprow
:Number = 600 - 549;
71 //stage.opaqueBackground = 0x666666;
73 var txtHeader
:TextField = new TextField();
74 var tf
:TextFormat = new TextFormat();
77 txtHeader
.htmlText
= "ADVENTURE OF THE SEVEN LEAVES <b>TEST BUILD</b>";
78 txtHeader
.setTextFormat
(tf
);
79 txtHeader
.autoSize
= "left";
85 btnNewGame
= addButton
("New Game", 100, y
, toprow
); y
+= 129.2; btnNewGame
.addEventListener
(MouseEvent.CLICK
, onNewGame
);
86 btnLoadSaveGame
= addButton
("Load Game", 100, y
, toprow
); y
+= 129.2; btnLoadSaveGame
.addEventListener
(MouseEvent.CLICK
, onLoadOrSave
);
87 btnSelectPerk
= addButton
("Select Perk", 100, y
, toprow
); y
+= 129.2; //btnNewGame.addEventListener(MouseEvent.CLICK, onSelectPerk);
88 btnExportGame
= addButton
("Export Game", 100, y
, toprow
); y
+= 129.2; //btnNewGame.addEventListener(MouseEvent.CLICK, onExport);
89 btnDebugMenu
= addButton
("Debug Menu", 100, y
, toprow
); y
+= 129.2;
90 btnAppearance
= addButton
("Appearance", 100, y
, toprow
); btnAppearance
.addEventListener
(MouseEvent.CLICK
, onAppearance
);
93 pnlMain
= addPanel
("", 464.5, 618.5, 167.75, 56.75);
95 pnlStats
= addPanel
("", 464.5, 144.9, 15.75, 56.75);
97 // Second row of buttons
98 btnAction
= new Array();
99 for (var i
:int = 0; i
< 12;i
++) {
100 var btn
:SexButton
= addButton
((i
+ 1).toString
(), 100, 16 + ((i
% 6) * 129.2), 561 + (Math.round
(i
/ 12) * 32));
102 btn
.addEventListener
(MouseEvent.CLICK
, onActionClick
);
104 setScreen
(new StartupScreen
());
107 private function onAppearance
(e
:MouseEvent):void {
108 setScreen
(new AppearanceScreen
());
111 private function onNewGame
(e
:MouseEvent):void {
112 player
= new Player
(this);
113 player
.setMain
(this);
114 setScreen
(new NewGameScreen
());
117 private function onLoadOrSave
(e
:MouseEvent):void {
118 if (!currentScreen
.loadOrSaveButton
) {
119 player
= new Player
(this);
120 player
.setMain
(this);
127 public function onPlayerLoaded
():void {
129 setScreen
(player
.currentTown
);
132 public function addToStatsPanel
(stat
:Statistic
):void {
133 pnlStats
.addToStack
(stat
);
134 pnlStats
.arrangeStack
();
137 public function remFromStatsPanel
(stat
:Statistic
):void {
138 pnlStats
.delFromStack
(stat
);
139 pnlStats
.arrangeStack
();
142 public function setupStatsPanel
():void {
143 pnlStats
.stackMode
(); // Remove textField.
144 pnlStats
.addToStack
(new StackHeader
("STATS"));
145 statXP
= new Statistic
("Experience", "How far you are from levelling up",true);
146 pnlStats
.addToStack
(statXP
);
147 statStrength
= new Statistic
("Strength", "How much power your attacks will have.");
148 pnlStats
.addToStack
(statStrength
);
149 statSpeed
= new Statistic
("Speed", "How fast you are; Affects dodging and catching opponents.");
150 pnlStats
.addToStack
(statSpeed
);
151 statIntellect
= new Statistic
("Intellect", "Perceptiveness. Allows you to sense impending danger and figure out puzzles easier.");
152 pnlStats
.addToStack
(statIntellect
);
153 statSensitivity
= new Statistic
("Sensitivity", "The more sensitive you are, the faster your lust rises. However, lack of sensation means you cannot masturbate.");
154 pnlStats
.addToStack
(statSensitivity
);
155 statLust
= new Statistic
("Lust", "How horny you are right now.");
156 pnlStats
.addToStack
(statLust
);
158 pnlStats
.addToStack
(new StackHeader
("COMBAT"));
159 statHP
= new Statistic
("HP", "Health left.");
160 pnlStats
.addToStack
(statHP
);
161 statMana
= new Statistic
("Mana", "Magic stuff");
162 pnlStats
.addToStack
(statMana
);
164 pnlStats
.arrangeStack
();
169 private function setScreen
(screen
:Screen):void {
170 //trace("setscreen ",screen);
173 if (player
!= null) {
174 if(combatScreen
==null)
175 screen
= player
.currentTown
;
177 screen
= combatScreen
;
180 screen
= new StartupScreen
();
182 currentScreen
= screen
;
183 currentScreen
.setMain
(this);
184 currentScreen
.processButtonPress
( -1);
187 private function onActionClick
(e
:MouseEvent):void {
188 var clicked
:SexButton
= e
.target
as SexButton
;
189 for (var i
:int = 0; i
< 12; i
++) {
190 if (clicked
== btnAction
[i
]) {
191 var done
:Boolean = currentScreen
.processButtonPress
(i
);
192 //trace(currentScreen,done);
194 setScreen
(Main
.screenQueue
.read
());
201 public function updateScreen
(screen
:Screen):void {
202 var btns
:Array = screen
.getButtons
();
203 for (var i
:int = 0; i
< 12; i
++) {
204 var btn
:SexButton
= (btnAction
[i
] as SexButton
);
205 btn
.visible
= (btns
[i
] != "");
206 btn
.setText
(btns
[i
]);
208 this.btnAppearance
.visible
= screen
.appearanceButton
;
209 this.btnDebugMenu
.visible
= screen
.debugMenuButton
;
210 this.btnExportGame
.visible
= screen
.exportGameButton
;
211 this.btnLoadSaveGame
.setText
((screen
.loadOrSaveButton
)?"Save Game":"Load Game");
212 this.btnNewGame
.visible
= screen
.newGameButton
;
213 this.btnSelectPerk
.visible
= screen
.selectPerkButton
;
215 this.pnlMain
.text
= screen
.getScreenText
();
218 public function refreshStats
():void {
219 if (player
.level
== 0) {
220 player
.levelUp
(true);
222 statXP
.setMaxAndValue
(player
.maxXP
, player
.XP
, false);
223 statStrength
.setMaxAndValue
(100, player
.strength
, false);
224 statSpeed
.setMaxAndValue
(100, player
.speed
, false);
225 statIntellect
.setMaxAndValue
(100, player
.intellect
, false);
226 statSensitivity
.setMaxAndValue
(100, player
.sensitivity
, false);
227 statLust
.setMaxAndValue
(100, player
.lust
, false);
229 statHP
.setMaxAndValue
(player
.maxHP
, player
.HP
, false);
230 statMana
.setMaxAndValue
(100, player
.mana
, false);
233 private function addButton
(label
:String, size
:Number, x
:Number, y
:Number):SexButton
{
234 var btn
:SexButton
= new SexButton
(size
, label
);
237 btn
.y
= y
- btn
.height
;
241 private function addPanel
(text
:String,h
:Number, w
:Number, x
:Number, y
:Number):SexPanel
{
242 var btn
:SexPanel
= new SexPanel
(text
);
250 private function initBG
():void
252 bgshape
= new Sprite();
253 bgshape
.graphics
.beginFill
(default_bg_color
);
254 bgshape
.graphics
.drawRect
(0,0,stage
.stageWidth
, stage
.stageHeight
);
255 addChildAt
(bgshape
, 0);
256 stage
.addEventListener
(Event.RESIZE
, resizeBGWithStage
);
258 private function resizeBGWithStage
(e
:Event):void
261 bgshape
.width
= stage
.stageWidth
;
262 bgshape
.height
= stage
.stageHeight
;
266 public function showInventory
(item
:Item
=null):void {
267 setScreen
(new InventoryScreen
(item
));
270 public function startCombat
(oldScreen
:Screen, combatant
:Creature
, playerInitiated
:Boolean = false):void {
272 combatant
.notifyEnchantments
(new CombatStartEvent
(player
));
273 player
.notifyEnchantments
(new CombatStartEvent
(combatant
));
274 combatScreen
= new CombatScreen
(oldScreen
, combatant
, playerInitiated
);
275 setScreen
(combatScreen
);
278 public function endCombat
(oldScreen
:Screen):void {
281 //setScreen(Main.screenQueue.read());
284 public function setTown
(t
:Town
):void {
285 player
.currentTown
= t
;