Except this is actually a terrible way of thinking about rules. The more specific and technical rules are, the better because it leaves no room for interpretation. "Don't build walls in adjacent tiles to adversely affect neighboring players" is infinitely better than "don't be a dick" because that the threshold of "being a dick" is going to vary wildly from player to player. A person can realistically say that it's a dick move to blow up a tiny, unarmed hauler, but that is absolutely not an infraction against the rules. There are far more ways to argue and circumvent "being a dick" than a specific, clearly worded ruling.
Ideally, it will become difficult or impossible to take an exploitive action that goes against the design of the game as time goes on, but until then, NQ should endeavor to be as clear and technical as possible in rulings.
I honestly think $20 for three months is an incredible bargain, but I can see how many might consider it a potential waste if it turns out they don't like the game in the first week.
We realize there is some confusion regarding whether certain scenarios occurring within the game world are permitted or not, and would like to clarify these points for everyone. In short, we’d like to ask our community to use common sense when encountering issues in the game; If it looks like an exploit, smells like an exploit (do pixels smell?), or sounds like an exploit, chances are it is an exploit. Don’t DU it! Report it. (support.dualthegame.com)
We are in a testing phase, and reporting these bugs/issues is important. Abusing them may lead to sanctions against accounts, up to and including removal from the game. We will not take ignorance as an excuse, especially in the following list of scenarios. Please note this is not an exhaustive list, and we will continue to expand upon it as needed:
“ALT + F4 Emergency Brake”: We acknowledge this is not an intended game play loop that is being intentionally used by players. We do plan to counter this action in the future but do not consider it high priority at this time. At this time, we will not take action against an account for using such. [Allowed]
Parenting Ships - Dragged to PVP Space: This is a hot topic and one we wish to be very clear on. Intentionally parenting any construct without permission of the owner is not intended for game play. A fix has been rolled out that will address the ability to parent constructs together via the maneuver tool. As we have not previously clarified this point, we will not retroactively punish this abuse, as of this moment forward abusing similar bugs/tools to replicate this maneuver in its current state can result in disciplinary actions on an account. [Not Allowed]
Attacking PVP Zone from Safe Space: Our team has been investigating complaints of ships being attacked in the PVP zone from ships outside of the zone. Our investigations strongly point to sync issues between clients. We will continue to work with this feature, but recommend players consider the zone lines for PVP to be somewhat fluid and not absolute. Our version of the neutral zone! We ask that you continue to report cases with positions, but will not action accounts at this time, unless an additional exploit is discovered. [Allowed]
Overlapping engines with other elements (obscuring): A fix will be rolled out that will prevent this from occurring. No action will be taken, unless additional abuse is occurring. [Allowed]
Theft Via RDMS: RDMS permissions and settings are the sole discretion of each player. We advise you take the time to get to know and understand the system and be cautious when making a construct or element usable by unknown players, including the use of your friends list. Not every player has your best interest at heart. We can not get involved with permission based theft, whether as an individual or an organization. We encourage you to review your friends list each time you add or remove someone and ensure your construct permissions are set accordingly. The context menu options that set public access currently do not have a confirmation prompt, be careful as setting public access to said construct will allow every player in Dual Universe to go into build mode and remove/place elements and voxels. [Allowed]
Environmental Walls/Creations: Use of the environmental and voxel tools allows the manipulation of terrain on owned and unowned tiles. You may build walls or other structures up to the allowed height, however, said constructions must not:
Block access to market places or tutorials
Must abide by our Community Standards (phallic/sexual, political, religious or otherwise offensive shapes are not permitted)
Must not be placed with the intention of interfering with neighboring players. When players can not agree, the final decision on what is and is not acceptable is decided on a case-by-case basis by Novaquark staff.
Marketplace Construct Parking: Players are permitted to park at marketplaces with their transport vehicles so long as they are not preventing use to other players or obstructing entry or exit points. Vehicles whose purpose is advertising (organization, service or otherwise) must abide by the following rules.
Organizations and individuals wishing to advertise at markets may have one advertising construct per district maximum
Constructs may not be larger than “Small” sized
Constructs may not block access to any building, entry points or dispensers
Advertisements must not be placed/parented on constructs that don’t belong to you
Constructs that violate these terms will be removed from the game without warning or compensation.
Mass Manipulation in Transportation: Players who utilize bugs to bypass the weight penalty of their inventory, other players, other constructs, etc to move mass through the game are not permitted. This includes:
Adding additional mass to an already piloted ship [Fixed]
Docking mass to an already piloted ship [Fixed]
Circumventing linked container range [Fix Pending] [Not Allowed]
Item Duplication: Any method of duplicating items or resources (including quanta) is not allowed at any time. Any incidents of bugs of this nature must be reported to the support team at support.dualthegame.com [Not Allowed]
Boarding without permission: As the deployment of the docking update is pending, the boarding of other players' constructs without consent will be considered an exploit. [Not Allowed]
Offenders will be teleported away; repeat offenders may be subject to more serious repercussions.
If you are boarded by another player and wish to have them removed, please report it either by creating a ticket here or by messaging @gm through the in-game Help channel.
We do recommend you keep regular backups of your constructs in the form of blueprints in the case you lose a ship (through intended means (sale, give away etc),or undesired results such as in PVP, you can still recreate it later.
How to Blueprint (to save your ship/build):
Enter build-mode on the construct, right click anywhere on the construct and click “Create Blueprint”. The blueprint will then be generated inside your currently active inventory. It is wise to keep hold of a copy of any of your blueprints inside your personal nanopack, as these are safe and not lost upon respawning.
We realize this is not an exhaustive list, and we will expand upon it as time goes on. We also understand some members of our community feel that using a bug or exploit prior to acknowledgement by Novaquark is considered okay. We’d like to state that any intentional use of a bug or exploit will be treated harshly going forward. This is the one and only warning we will issue on this topic. Please just don’t DU it!
On behalf of the entire team, we thank you for helping us make Dual Universe a better place!
Only thing I can tell you now is to make several BPs in stages - but that doesn't really solve it just make you be able to at least place the voxels and then fill in the elements by hand.
This is obviously not a full solution because getting the elements in place in such a way that they all look good is a hassle.
It's even worse for industry as you basically have a ton of elements rather than voxels.
So trying to move an L factory from BP is basically non viable currently.
----------Script could be minified using pairs but for easy reading and alterations I have left script in basic if statements since most dont even understand the basics-------
----------Great example piece to demonstrate that Lua reads the scripts in Order of Operations as long as parameters are met--------------------
Slots Hook up in this order and rename slots.
slot1 --> screen
slot2 --> door
-------------------------mouse up-------------------------------------------------------------
PWMouseX = x
PWMouseY = y
PWMouseDown = false
local buttonNo = evaluateButtons()
if PWButtonSelected > 0 and PWButtonSelected == buttonNo then
onButtonUp(buttonNo)
onClick(buttonNo)
end
PWButtonSelected = -buttonNo
-------------------------mouse down-----------------------------------------------------------
PWMouseX = x
PWMouseY = y
PWMouseDown = true
PWAttention = 0
PWDislikeButton = 0
PWLikeButton = 0
PWButtonSelected = evaluateButtons()
onButtonDown(PWButtonSelected)
-------------------------system update-----------------------------------------------------------------
updateScreen()
-------------------------unit tick exit-------------------------------------------------------------
keyb = "Goodbye"
unit.exit()
-------------------------unit stop------------------------------------------------------------
page = [[<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 600"><defs><style>.cls-1{fill:#fff;}.cls-2{fill:red;}</style></defs><rect class="cls-1" width="1024" height="600"/><rect class="cls-2" width="1024" height="281"/><path class="cls-1" d="M164.05,122.19V50.61h36.87q10.25,0,15.67,1.76a16.65,16.65,0,0,1,8.74,6.52,19.78,19.78,0,0,1,3.32,11.59,19.14,19.14,0,0,1-9.53,17.29,26.73,26.73,0,0,1-7.76,2.83,22,22,0,0,1,5.75,2.64A22,22,0,0,1,220.65,97a28.24,28.24,0,0,1,3.1,4.45l10.71,20.74h-25l-11.83-21.87c-1.49-2.83-2.83-4.67-4-5.52a9.24,9.24,0,0,0-5.42-1.66h-1.95v29.05Zm22.22-42.57h9.32a33.44,33.44,0,0,0,5.86-1A5.81,5.81,0,0,0,205,76.39a7.26,7.26,0,0,0-.8-9.47Q202,65.06,196,65.06h-9.71Z"/><path class="cls-1" d="M241.49,50.61h59.28V65.89H263.66V77.27h34.42v14.6H263.66V106h38.18v16.21H241.49Z"/><path class="cls-1" d="M309.9,98.51,331,97.19a16,16,0,0,0,2.78,7.82q3.42,4.33,9.76,4.34,4.74,0,7.3-2.22a6.66,6.66,0,0,0,2.57-5.15,6.58,6.58,0,0,0-2.44-5q-2.44-2.2-11.33-4.15Q325,89.58,318.84,84.16a17.48,17.48,0,0,1-6.25-13.82,18.79,18.79,0,0,1,3.19-10.43,21.25,21.25,0,0,1,9.62-7.71q6.42-2.81,17.61-2.81,13.71,0,20.92,5.1t8.57,16.24L351.65,72c-.56-3.22-1.72-5.57-3.49-7a11.21,11.21,0,0,0-7.35-2.2q-3.85,0-5.81,1.64a5,5,0,0,0-2,4,4,4,0,0,0,1.62,3.07q1.56,1.43,7.42,2.64,14.51,3.12,20.77,6.32A21.84,21.84,0,0,1,372,88.31a20.13,20.13,0,0,1,2.85,10.59A22.72,22.72,0,0,1,371,111.6a23.81,23.81,0,0,1-10.64,8.81q-6.84,3-17.24,3-18.25,0-25.29-7A27.7,27.7,0,0,1,309.9,98.51Z"/><path class="cls-1" d="M381,50.61h67.23V68.29H425.62v53.9H403.5V68.29H381Z"/><path class="cls-1" d="M458.48,122.19V50.61h36.87q10.26,0,15.67,1.76a16.61,16.61,0,0,1,8.74,6.52,19.71,19.71,0,0,1,3.32,11.59,19.16,19.16,0,0,1-9.52,17.29,26.81,26.81,0,0,1-7.77,2.83,22.21,22.21,0,0,1,5.76,2.64A22.46,22.46,0,0,1,515.08,97a28.24,28.24,0,0,1,3.1,4.45l10.71,20.74h-25l-11.82-21.87c-1.5-2.83-2.83-4.67-4-5.52a9.24,9.24,0,0,0-5.42-1.66H480.7v29.05ZM480.7,79.62H490a33.58,33.58,0,0,0,5.86-1,5.84,5.84,0,0,0,3.59-2.25,7.25,7.25,0,0,0-.81-9.47c-1.46-1.24-4.22-1.86-8.25-1.86H480.7Z"/><path class="cls-1" d="M536.85,50.61H559v71.58H536.85Z"/><path class="cls-1" d="M622.55,92.9l19.38,5.86a35.76,35.76,0,0,1-6.15,13.62,26.72,26.72,0,0,1-10.43,8.25q-6.23,2.79-15.84,2.78-11.67,0-19.07-3.39t-12.77-11.93q-5.37-8.53-5.37-21.86,0-17.76,9.45-27.3t26.73-9.54q13.53,0,21.27,5.47t11.5,16.8L621.72,76a16.85,16.85,0,0,0-2.15-4.78A12.68,12.68,0,0,0,615,67.31,14,14,0,0,0,597.5,72q-3,4.49-3,14.09,0,11.91,3.61,16.32t10.16,4.41q6.35,0,9.59-3.56T622.55,92.9Z"/><path class="cls-1" d="M647.64,50.61h67.24V68.29H692.32v53.9H670.2V68.29H647.64Z"/><path class="cls-1" d="M724.84,50.61h59.28V65.89H747V77.27h34.42v14.6H747V106h38.18v16.21H724.84Z"/><path class="cls-1" d="M797.4,50.61h32.86q9.72,0,15.7,2.64a25.56,25.56,0,0,1,9.89,7.57,31.3,31.3,0,0,1,5.66,11.47,53.35,53.35,0,0,1,1.76,13.87q0,11.48-2.61,17.8a29.51,29.51,0,0,1-7.25,10.59,23.69,23.69,0,0,1-10,5.69,51.48,51.48,0,0,1-13.19,2H797.4Zm22.12,16.21v39.11h5.42q6.93,0,9.86-1.53A10.39,10.39,0,0,0,839.39,99q1.67-3.83,1.66-12.42,0-11.38-3.71-15.58T825,66.82Z"/><path class="cls-1" d="M410.55,230.38H385.44L382,242.19H359.36l26.91-71.58h24.12l26.9,71.58H414.13ZM406,214.9l-7.9-25.73-7.82,25.73Z"/><path class="cls-1" d="M444.62,242.19V170.61h36.86q10.26,0,15.68,1.76a16.69,16.69,0,0,1,8.74,6.52,20.21,20.21,0,0,1-6.21,28.88,26.81,26.81,0,0,1-7.77,2.83,21.89,21.89,0,0,1,5.76,2.64,22.82,22.82,0,0,1,3.54,3.76,29,29,0,0,1,3.1,4.45L515,242.19H490l-11.82-21.87q-2.25-4.24-4-5.52a9.26,9.26,0,0,0-5.42-1.66h-2v29.05Zm22.21-42.57h9.33a33.58,33.58,0,0,0,5.86-1,5.84,5.84,0,0,0,3.59-2.25,7.25,7.25,0,0,0-.81-9.47q-2.19-1.86-8.25-1.86h-9.72Z"/><path class="cls-1" d="M522.06,170.61h59.28v15.28H544.23v11.38h34.42v14.6H544.23V226h38.18v16.21H522.06Z"/><path class="cls-1" d="M638.33,230.38H613.22l-3.49,11.81H587.15l26.9-71.58h24.13l26.9,71.58H641.91Zm-4.59-15.48-7.9-25.73L618,214.9Z"/><path d="M77.59,318.57H94.11l21.56,31.68V318.57h16.68v57.27H115.67L94.23,344.4v31.44H77.59Z"/><path d="M141.88,347.25q0-14,7.82-21.84t21.75-7.81q14.3,0,22,7.67t7.74,21.51q0,10-3.38,16.46a24,24,0,0,1-9.77,10q-6.37,3.57-15.91,3.58-9.69,0-16-3.09A24.13,24.13,0,0,1,145.83,364Q141.89,357.29,141.88,347.25Zm17.7.07q0,8.67,3.22,12.46a10.9,10.9,0,0,0,8.77,3.79q5.7,0,8.83-3.71t3.12-13.32q0-8.09-3.26-11.81a11.13,11.13,0,0,0-8.85-3.73,10.76,10.76,0,0,0-8.59,3.78Q159.58,338.58,159.58,347.32Z"/><path d="M274.7,318.57h17.65v34.12a28.82,28.82,0,0,1-1.58,9.58,20.77,20.77,0,0,1-5,7.89,19.8,19.8,0,0,1-7.09,4.74,35.58,35.58,0,0,1-12.38,1.92,78.23,78.23,0,0,1-9.13-.59,23.88,23.88,0,0,1-8.26-2.32,20.74,20.74,0,0,1-6.07-4.94,18.05,18.05,0,0,1-3.77-6.6,34.3,34.3,0,0,1-1.64-9.68V318.57h17.66V353.5a10,10,0,0,0,2.59,7.32,11.18,11.18,0,0,0,14.38,0q2.59-2.6,2.6-7.36Z"/><path d="M304.19,318.57h16.52l21.56,31.68V318.57H359v57.27H342.27L320.83,344.4v31.44H304.19Z"/><path d="M405.14,366.39H385.05l-2.8,9.45H364.19l21.52-57.27H405l21.52,57.27H408ZM401.47,354l-6.33-20.58L388.89,354Z"/><path d="M466.69,318.57h17.65v34.12a28.57,28.57,0,0,1-1.58,9.58,20.65,20.65,0,0,1-5,7.89,19.8,19.8,0,0,1-7.09,4.74,35.54,35.54,0,0,1-12.38,1.92,77.93,77.93,0,0,1-9.12-.59,23.75,23.75,0,0,1-8.26-2.32,20.78,20.78,0,0,1-6.08-4.94,18.2,18.2,0,0,1-3.77-6.6,34.3,34.3,0,0,1-1.64-9.68V318.57h17.66V353.5a10,10,0,0,0,2.59,7.32,11.18,11.18,0,0,0,14.38,0q2.6-2.6,2.6-7.36Z"/><path d="M492,318.57h53.79v14.14H527.78v43.13H510.09V332.71H492Z"/><path d="M553.91,318.57h17.7v20H591v-20h17.77v57.27H591V352.67H571.61v23.17h-17.7Z"/><path d="M618.25,347.25q0-14,7.81-21.84t21.76-7.81q14.29,0,22,7.67t7.74,21.51q0,10-3.38,16.46a24.08,24.08,0,0,1-9.77,10q-6.39,3.57-15.92,3.58-9.69,0-16-3.09A24.13,24.13,0,0,1,622.2,364Q618.24,357.29,618.25,347.25Zm17.7.07q0,8.67,3.22,12.46a10.9,10.9,0,0,0,8.77,3.79q5.7,0,8.83-3.71t3.12-13.32q0-8.09-3.26-11.81a11.16,11.16,0,0,0-8.85-3.73,10.75,10.75,0,0,0-8.59,3.78Q635.95,338.58,636,347.32Z"/><path d="M687.35,375.84V318.57h29.49q8.2,0,12.54,1.41a13.46,13.46,0,0,1,7,5.21,16.18,16.18,0,0,1-5,23.11,21.45,21.45,0,0,1-6.21,2.27,17.31,17.31,0,0,1,4.6,2.11,17.56,17.56,0,0,1,2.83,3,22.32,22.32,0,0,1,2.48,3.56l8.57,16.59h-20l-9.46-17.5a13.35,13.35,0,0,0-3.21-4.42,7.43,7.43,0,0,0-4.33-1.32h-1.56v23.24Zm17.78-34.06h7.46a26.65,26.65,0,0,0,4.68-.78,4.69,4.69,0,0,0,2.87-1.8,5.79,5.79,0,0,0-.64-7.58q-1.75-1.49-6.6-1.48h-7.77Z"/><path d="M750.05,318.57h17.73v57.27H750.05Z"/><path d="M779,318.57h50.08V330L797,363.53h33.32v12.31H776V364l31.8-33.16H779Z"/><path d="M838.21,318.57h47.42V330.8H856v9.1h27.53v11.68H856v11.29h30.54v13H838.21Z"/><path d="M896.26,318.57h26.29q7.77,0,12.56,2.11a20.52,20.52,0,0,1,7.91,6.06,25.15,25.15,0,0,1,4.53,9.18A42.44,42.44,0,0,1,949,347q0,9.18-2.09,14.24a23.5,23.5,0,0,1-5.8,8.48,19,19,0,0,1-8,4.55,41.07,41.07,0,0,1-10.54,1.56H896.26Zm17.69,13v31.29h4.34q5.55,0,7.89-1.23a8.31,8.31,0,0,0,3.67-4.3q1.33-3.06,1.33-9.94,0-9.11-3-12.46t-9.84-3.36Z"/><path d="M244.48,414.57h29.41q9.62,0,14.4,4.57t4.78,13q0,8.67-5.21,13.56t-15.92,4.88h-9.69v21.25H244.48ZM262.25,439h4.34q5.12,0,7.19-1.78a5.72,5.72,0,0,0,2.07-4.55,6.35,6.35,0,0,0-1.8-4.57q-1.8-1.87-6.76-1.88h-5Z"/><path d="M302.29,414.57h47.42V426.8H320v9.1h27.54v11.68H320v11.29h30.54v13H302.29Z"/><path d="M360.34,471.84V414.57h29.49q8.21,0,12.54,1.41a13.4,13.4,0,0,1,7,5.21,16.17,16.17,0,0,1-5,23.11,21.41,21.41,0,0,1-6.22,2.27,17.25,17.25,0,0,1,4.61,2.11,18,18,0,0,1,2.83,3,22.32,22.32,0,0,1,2.48,3.56l8.57,16.59h-20l-9.46-17.5a13.22,13.22,0,0,0-3.2-4.42,7.43,7.43,0,0,0-4.33-1.32h-1.57v23.24Zm17.77-34.06h7.46a26.71,26.71,0,0,0,4.69-.78,4.72,4.72,0,0,0,2.87-1.8,5.79,5.79,0,0,0-.64-7.58q-1.75-1.49-6.6-1.48h-7.78Z"/><path d="M419.25,452.89l16.83-1.05a12.9,12.9,0,0,0,2.23,6.25,9.35,9.35,0,0,0,7.81,3.48,8.67,8.67,0,0,0,5.84-1.78,5.32,5.32,0,0,0,2.05-4.12,5.26,5.26,0,0,0-1.95-4q-1.95-1.76-9.06-3.32-11.64-2.61-16.61-6.95a14,14,0,0,1-5-11.06A15.08,15.08,0,0,1,424,422a17,17,0,0,1,7.7-6.17q5.13-2.23,14.08-2.24,11,0,16.74,4.08t6.85,13l-16.68,1a7.79,7.79,0,0,0-8.67-7.38,7.14,7.14,0,0,0-4.65,1.31,4,4,0,0,0-1.56,3.18,3.16,3.16,0,0,0,1.29,2.46q1.24,1.14,5.94,2.11,11.6,2.51,16.62,5.06a17.42,17.42,0,0,1,7.3,6.35,16,16,0,0,1,2.29,8.48,18.16,18.16,0,0,1-3.05,10.15,19.06,19.06,0,0,1-8.51,7.05,34.47,34.47,0,0,1-13.79,2.41q-14.61,0-20.24-5.63A22.17,22.17,0,0,1,419.25,452.89Z"/><path d="M477.88,443.25q0-14,7.81-21.84t21.76-7.81q14.3,0,22,7.67t7.73,21.51q0,10-3.37,16.46a24.08,24.08,0,0,1-9.77,10q-6.39,3.57-15.92,3.58-9.69,0-16-3.09a24.1,24.1,0,0,1-10.3-9.77Q477.88,453.29,477.88,443.25Zm17.69.07q0,8.67,3.23,12.46a10.9,10.9,0,0,0,8.77,3.79q5.7,0,8.82-3.71t3.13-13.32q0-8.09-3.26-11.81a11.16,11.16,0,0,0-8.85-3.73,10.75,10.75,0,0,0-8.59,3.78Q495.56,434.58,495.57,443.32Z"/><path d="M546.86,414.57h16.53L585,446.25V414.57h16.68v57.27H585L563.5,440.4v31.44H546.86Z"/><path d="M613.5,414.57H630l21.56,31.68V414.57h16.68v57.27H651.59L630.14,440.4v31.44H613.5Z"/><path d="M680,414.57h47.42V426.8H697.72v9.1h27.54v11.68H697.72v11.29h30.55v13H680Z"/><path d="M737.8,414.57h17.7v43.17h27.61v14.1H737.8Z"/><path d="M58.11,510.57H91.24q8.28,0,12.71,4.1a13.28,13.28,0,0,1,4.44,10.16,12.8,12.8,0,0,1-3.17,8.71,14,14,0,0,1-6.17,3.83q6.18,1.49,9.08,5.1a14,14,0,0,1,2.91,9.08,15.62,15.62,0,0,1-2.07,8,15.26,15.26,0,0,1-5.66,5.62,18.73,18.73,0,0,1-6.72,1.88,77.57,77.57,0,0,1-7.93.78H58.11ZM76,533h7.7q4.14,0,5.76-1.42A5.2,5.2,0,0,0,91,527.49a4.91,4.91,0,0,0-1.62-3.91q-1.62-1.41-5.64-1.41H76Zm0,22.5h9c3.05,0,5.19-.54,6.44-1.62a5.46,5.46,0,0,0,1.88-4.35,5,5,0,0,0-1.86-4.08q-1.85-1.54-6.5-1.55H76Z"/><path d="M120.26,510.57h47.42V522.8H138v9.1h27.54v11.68H138v11.29h30.54v13H120.26Z"/><path d="M172.29,510.57H192l11.54,19.32,11.56-19.32H234.6l-22.27,33.28v24H194.6v-24Z"/><path d="M233.27,539.25q0-14,7.81-21.84t21.76-7.81q14.3,0,22,7.67t7.74,21.51q0,10-3.38,16.46a24.08,24.08,0,0,1-9.77,10q-6.39,3.57-15.92,3.58-9.69,0-16-3.09a24.15,24.15,0,0,1-10.3-9.77Q233.27,549.29,233.27,539.25Zm17.69.07q0,8.67,3.23,12.46a10.9,10.9,0,0,0,8.77,3.79q5.7,0,8.83-3.71t3.12-13.32q0-8.09-3.26-11.81A11.16,11.16,0,0,0,262.8,523a10.75,10.75,0,0,0-8.59,3.78Q251,530.57,251,539.32Z"/><path d="M302.25,510.57h16.53l21.56,31.68V510.57H357v57.27H340.34L318.89,536.4v31.44H302.25Z"/><path d="M369,510.57H395.3q7.77,0,12.56,2.11a20.44,20.44,0,0,1,7.91,6.06,25.15,25.15,0,0,1,4.53,9.18A42.44,42.44,0,0,1,421.71,539q0,9.18-2.09,14.24a23.75,23.75,0,0,1-5.8,8.48,19.1,19.1,0,0,1-8,4.55,41.14,41.14,0,0,1-10.55,1.56H369Zm17.7,13v31.29H391q5.55,0,7.89-1.23a8.33,8.33,0,0,0,3.68-4.3q1.32-3.06,1.32-9.94,0-9.11-3-12.46c-2-2.24-5.26-3.36-9.84-3.36Z"/><path d="M453.66,510.57h53.79v14.14H489.4v43.13H471.71V524.71h-18Z"/><path d="M515.54,510.57h17.69v20h19.34v-20h17.77v57.27H552.57V544.67H533.23v23.17H515.54Z"/><path d="M582.8,510.57h17.74v57.27H582.8Z"/><path d="M610.14,548.89l16.84-1a12.8,12.8,0,0,0,2.23,6.25,9.34,9.34,0,0,0,7.81,3.48,8.69,8.69,0,0,0,5.84-1.78,5.32,5.32,0,0,0,2-4.12,5.26,5.26,0,0,0-1.95-4q-2-1.75-9.07-3.32-11.64-2.61-16.6-7a14,14,0,0,1-5-11.06,15.08,15.08,0,0,1,2.56-8.34,17,17,0,0,1,7.7-6.17q5.13-2.23,14.08-2.24,11,0,16.74,4.08t6.85,13l-16.68,1a7.79,7.79,0,0,0-8.67-7.38,7.1,7.1,0,0,0-4.65,1.31,4,4,0,0,0-1.56,3.18,3.16,3.16,0,0,0,1.29,2.46q1.24,1.14,5.94,2.11,11.6,2.5,16.62,5.06a17.48,17.48,0,0,1,7.3,6.35,16,16,0,0,1,2.29,8.48,18.16,18.16,0,0,1-3.05,10.15,19.06,19.06,0,0,1-8.51,7,34.47,34.47,0,0,1-13.79,2.41q-14.61,0-20.24-5.63A22.23,22.23,0,0,1,610.14,548.89Z"/><path d="M697.61,510.57H727q9.62,0,14.39,4.57t4.79,13q0,8.67-5.22,13.56t-15.91,4.88h-9.69v21.25H697.61ZM715.38,535h4.33c3.42,0,5.81-.59,7.19-1.78a5.72,5.72,0,0,0,2.07-4.55,6.38,6.38,0,0,0-1.79-4.57c-1.2-1.25-3.46-1.88-6.76-1.88h-5Z"/><path d="M753.23,539.25q0-14,7.81-21.84t21.76-7.81q14.3,0,22,7.67t7.74,21.51q0,10-3.38,16.46a24.08,24.08,0,0,1-9.77,10q-6.39,3.57-15.92,3.58-9.69,0-16-3.09A24.13,24.13,0,0,1,757.18,556Q753.22,549.29,753.23,539.25Zm17.7.07q0,8.67,3.22,12.46a10.9,10.9,0,0,0,8.77,3.79q5.7,0,8.83-3.71t3.12-13.32q0-8.09-3.26-11.81a11.15,11.15,0,0,0-8.85-3.73,10.75,10.75,0,0,0-8.59,3.78Q770.93,530.57,770.93,539.32Z"/><path d="M822.8,510.57h17.74v57.27H822.8Z"/><path d="M853.35,510.57h16.52l21.56,31.68V510.57h16.68v57.27H891.43L870,536.4v31.44H853.35Z"/><path d="M915.85,510.57h53.79v14.14h-18v43.13H933.9V524.71h-18Z"/></svg>]]
screen.setHTML(page)
door.deactivate()
-------------------------system start----------------------------------------------------------
unit.hide()
-- Internal variables
keyb=""
-- set variables so that there is no error at the start
butcolclk1 = "#00ff00"
butcolclk2 = "#00ff00"
mousecolclk = "cyan"
consta=0
PWButtons = {}
PWMouseX = 0
PWMouseY = 0
PWMouseDown = false
PWButtonSelected = 0
PWAttention = 0
PWDislikeButton = 0
PWLikeButton = 0
PWHintButton = 0
PWAttentionMessage = ""
PWAttentionVisible = false
startupnow = 1
password = "Pass"--export:
function updateScreen()
if startupnow == 1 then ----- engine stat end emitter start
tablex.clear(PWButtons, button)
for i = 1,1 do
local button = {id = ("b"..1), enabled=true, td="<td>", top=49/100, bottom=60/100, left=1/100, right=6.5/100}
table.insert(PWButtons, button)
end
for i = 2,2 do
local button = {id = ("b"..2), enabled=true, td="<td>", top=49/100, bottom=60/100, left=8/100, right=14/100}
table.insert(PWButtons, button)
end
for i = 3,3 do
local button = {id = ("b"..3), enabled=true, td="<td>", top=49/100, bottom=60/100, left=15/100, right=22/100}
table.insert(PWButtons, button)
end
for i = 4,4 do
local button = {id = ("b"..4), enabled=true, td="<td>", top=49/100, bottom=60/100, left=23/100, right=30/100}
table.insert(PWButtons, button)
end
for i = 5,5 do
local button = {id = ("b"..5), enabled=true, td="<td>", top=49/100, bottom=60/100, left=31/100, right=38/100}
table.insert(PWButtons, button)
end
for i = 6,6 do
local button = {id = ("b"..6), enabled=true, td="<td>", top=49/100, bottom=60/100, left=39/100, right=46/100}
table.insert(PWButtons, button)
end
for i = 7,7 do
local button = {id = ("b"..7), enabled=true, td="<td>", top=49/100, bottom=60/100, left=47/100, right=53/100}
table.insert(PWButtons, button)
end
for i = 8,8 do
local button = {id = ("b"..8), enabled=true, td="<td>", top=49/100, bottom=60/100, left=54/100, right=61/100}
table.insert(PWButtons, button)
end
for i = 9,9 do
local button = {id = ("b"..9), enabled=true, td="<td>", top=49/100, bottom=60/100, left=62/100, right=69/100}
table.insert(PWButtons, button)
end
for i = 10,10 do
local button = {id = ("b"..10), enabled=true, td="<td>", top=49/100, bottom=60/100, left=70/100, right=77/100}
table.insert(PWButtons, button)
end
for i = 11,11 do
local button = {id = ("b"..11), enabled=true, td="<td>", top=49/100, bottom=60/100, left=78/100, right=85/100}
table.insert(PWButtons, button)
end
for i = 12,12 do
local button = {id = ("b"..12), enabled=true, td="<td>", top=49/100, bottom=60/100, left=86/100, right=100/100}
table.insert(PWButtons, button)
end
for i = 13,13 do
local button = {id = ("b"..13), enabled=true, td="<td>", top=62/100, bottom=73/100, left=4/100, right=10/100}
table.insert(PWButtons, button)
end
for i = 14,14 do
local button = {id = ("b"..14), enabled=true, td="<td>", top=62/100, bottom=73/100, left=11.5/100, right=18/100}
table.insert(PWButtons, button)
end
for i = 15,15 do
local button = {id = ("b"..15), enabled=true, td="<td>", top=62/100, bottom=73/100, left=19/100, right=26/100}
table.insert(PWButtons, button)
end
for i = 16,16 do
local button = {id = ("b"..16), enabled=true, td="<td>", top=62/100, bottom=73/100, left=27/100, right=34/100}
table.insert(PWButtons, button)
end
for i = 17,17 do
local button = {id = ("b"..17), enabled=true, td="<td>", top=62/100, bottom=73/100, left=35/100, right=42/100}
table.insert(PWButtons, button)
end
for i = 18,18 do
local button = {id = ("b"..18), enabled=true, td="<td>", top=62/100, bottom=73/100, left=43/100, right=50/100}
table.insert(PWButtons, button)
end
for i = 19,19 do
local button = {id = ("b"..19), enabled=true, td="<td>", top=62/100, bottom=73/100, left=51/100, right=58/100}
table.insert(PWButtons, button)
end
for i = 20,20 do
local button = {id = ("b"..20), enabled=true, td="<td>", top=62/100, bottom=73/100, left=59/100, right=65/100}
table.insert(PWButtons, button)
end
for i = 21,21 do
local button = {id = ("b"..21), enabled=true, td="<td>", top=62/100, bottom=73/100, left=66.5/100, right=73/100}
table.insert(PWButtons, button)
end
for i = 22,22 do
local button = {id = ("b"..22), enabled=true, td="<td>", top=62/100, bottom=73/100, left=74/100, right=89/100}
table.insert(PWButtons, button)
end
for i = 23,23 do
local button = {id = ("b"..23), enabled=true, td="<td>", top=75/100, bottom=87/100, left=8/100, right=15/100}
table.insert(PWButtons, button)
end
for i = 24,24 do
local button = {id = ("b"..24), enabled=true, td="<td>", top=75/100, bottom=87/100, left=16/100, right=23/100}
table.insert(PWButtons, button)
end
for i = 25,25 do
local button = {id = ("b"..25), enabled=true, td="<td>", top=75/100, bottom=87/100, left=24/100, right=31/100}
table.insert(PWButtons, button)
end
for i = 26,26 do
local button = {id = ("b"..26), enabled=true, td="<td>", top=75/100, bottom=87/100, left=32/100, right=39/100}
table.insert(PWButtons, button)
end
for i = 27,27 do
local button = {id = ("b"..27), enabled=true, td="<td>", top=75/100, bottom=87/100, left=40/100, right=46/100}
table.insert(PWButtons, button)
end
for i = 28,28 do
local button = {id = ("b"..28), enabled=true, td="<td>", top=75/100, bottom=87/100, left=47/100, right=54/100}
table.insert(PWButtons, button)
end
for i = 29,29 do
local button = {id = ("b"..29), enabled=true, td="<td>", top=75/100, bottom=87/100, left=55/100, right=62/100}
table.insert(PWButtons, button)
end
for i = 30,30 do
local button = {id = ("b"..30), enabled=true, td="<td>", top=75/100, bottom=87/100, left=63/100, right=70/100}
table.insert(PWButtons, button)
end
for i = 31,31 do
local button = {id = ("b"..31), enabled=true, td="<td>", top=75/100, bottom=87/100, left=71/100, right=85/100}
table.insert(PWButtons, button)
end
for i = 32,32 do
local button = {id = ("b"..32), enabled=true, td="<td>", top=88/100, bottom=98/100, left=30/100, right=59/100}
table.insert(PWButtons, button)
end
for i = 33,33 do
local button = {id = ("b"..33), enabled=true, td="<td>", top=88/100, bottom=98/100, left=63/100, right=77/100}
table.insert(PWButtons, button)
end
for i = 34,34 do
local button = {id = ("b"..34), enabled=true, td="<td>", top=88/100, bottom=98/100, left=85/100, right=100/100}
table.insert(PWButtons, button)
end
for i = 35,35 do
local button = {id = ("b"..35), enabled=true, td="<td>", top=90/100, bottom=100/100, left=1/100, right=18/100}
table.insert(PWButtons, button)
end
function evaluateButtons()
local selected = 0
if #PWButtons >= 1 then
-- Set button styles
for i, button in ipairs(PWButtons) do
if button.left < PWMouseX and PWMouseX < button.right and button.top < PWMouseY and PWMouseY < button.bottom then
if PWMouseDown and PWButtonSelected == i then
end
selected = i
end
if not button.enabled then
end
end
end
return selected
end
function onButtonDown(buttonNo)
local button = PWButtons[buttonNo]
if not button or not button.enabled then
return
end
end
function onButtonUp(buttonNo)
local button = PWButtons[buttonNo]
if not button or not button.enabled then
return
end
function onClick(buttonNo)
local button = PWButtons[buttonNo]
if not button or not button.enabled then
return
end
end
if buttonNo == 1 then
keyb=keyb.."Q"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 2 then
keyb=keyb.."W"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 3 then
keyb=keyb.."E"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 4 then
keyb=keyb.."R"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 5 then
keyb=keyb.."T"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 6 then
keyb=keyb.."Y"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 7 then
keyb=keyb.."U"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 8 then
keyb=keyb.."I"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 9 then
keyb=keyb.."O"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 10 then
keyb=keyb.."P"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 11 then
elseif buttonNo == 12 then
keyb = ""
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 13 then
keyb=keyb.."A"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 14 then
keyb=keyb.."S"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 15 then
keyb=keyb.."D"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 16 then
keyb=keyb.."F"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 17 then
keyb=keyb.."G"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 18 then
keyb=keyb.."H"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 19 then
keyb=keyb.."J"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 20 then
keyb=keyb.."K"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 21 then
keyb=keyb.."L"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 22 then ----enterbutton
if keyb == password then
keyb=""
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
door.activate()
keyb="Access Granted"
unit.setTimer("exit",5)
elseif keyb ~= password then
keyb=""
keyb="Access DENIED"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
unit.setTimer("exit",1)
door.deactivate()
end
elseif buttonNo == 23 then
keyb=keyb.."Z"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 24 then
keyb=keyb.."X"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 25 then
keyb=keyb.."C"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 26 then
keyb=keyb.."V"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 27 then
keyb=keyb.."B"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 28 then
keyb=keyb.."N"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 29 then
keyb=keyb.."M"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 30 then
keyb=keyb.."."
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 31 then
startupnow = 1.1
elseif buttonNo == 32 then
keyb=keyb.." "
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 33 then
startupnow = 1.2
elseif buttonNo == 34 then
elseif buttonNo == 35 then
end
end
if screen.getMouseState() == 1 then
mousecolclk = "purple"
else
mousecolclk = "cyan"
end
if screen.getMouseState() == 1 and butselectclk1 == 1 then
butcolclk1 = "purple"
elseif screen.getMouseState() == 0 and butselectclk1 == 1 then
butcolclk1 = "limegreen"
butselectclk1 = 0
elseif screen.getMouseState() == 1 and butselectclk1 == 2 then
butcolclk2 = "purple"
elseif screen.getMouseState() == 0 and butselectclk1 == 2 then
butcolclk2 = "limegreen"
butselectclk2 = 0
end
local page = [[
<svg viewBox="0 0 1024 612">
<g>
<title>background</title>
<rect x="-1" y="-1" width="1026" height="614"/>
<g display="none">
<rect width="100%" height="100%" fill="url(#gridpattern)" stroke-width="0"/>
</g>
</g>
<g>
<title>Layer 1</title>
<rect x="7" y="5" width="1012" height="290" rx="20" fill="#007f7f" stroke="#0f0" stroke-width="5"/>
<rect x="1" y="306" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="14.997276" y="360.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">Q</text>
<rect x="80" y="306" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="90" y="360.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">W</text>
<rect x="160" y="306" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="178" y="360.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">E</text>
<rect x="240" y="306" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="255" y="360.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">R</text>
<rect x="320" y="306" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="337" y="360.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">T</text>
<rect x="400" y="306" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="417" y="360.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">Y</text>
<rect x="480" y="306" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="496" y="360.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">U</text>
<rect x="560" y="306" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="586" y="361.00001" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">I</text>
<rect x="640" y="306" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="654" y="360.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">O</text>
<rect x="720" y="306" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="740" y="360.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">P</text>
<rect x="880" y="306" width="140" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="895" y="350" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="30" font-weight="bold" stroke-width="0" xml:space="preserve">CLEAR</text>
<rect x="800" y="306" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="802" y="350" cursor="move" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="30" font-weight="bold" stroke-width="0" xml:space="preserve"></text>
<rect x="41" y="385" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="59" y="439.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">A</text>
<rect x="121" y="385" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="136" y="439.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">S</text>
<rect x="201" y="385" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="218" y="439.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">D</text>
<rect x="281" y="385" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="298" y="439.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">F</text>
<rect x="361" y="385" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="377" y="439.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">G</text>
<rect x="441" y="385" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="455" y="440.00001" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">H</text>
<rect x="521" y="385" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="540" y="439.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">J</text>
<rect x="601" y="385" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="619" y="439.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">K</text>
<rect x="761" y="385" width="140" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="785" y="430" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="30" font-style="italic" font-weight="bold" stroke-width="0" xml:space="preserve">Enter</text>
<rect x="681" y="385" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="700" y="439.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">L</text>
<rect x="86" y="466" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="101" y="520.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">Z</text>
<rect x="166" y="466" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="183" y="520.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">X</text>
<rect x="246" y="466" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="263" y="520.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">C</text>
<rect x="326" y="466" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="342" y="520.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">V</text>
<rect x="406" y="466" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="420" y="521.00001" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">B</text>
<rect x="486" y="466" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="500" y="520.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">N</text>
<rect x="566" y="466" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="578" y="520.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">M</text>
<rect x="646" y="466" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="656" y="520.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve"/>
<rect x="306" y="545" width="300" height="55" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<rect x="726" y="466" width="140" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="750" y="510" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="30" font-weight="bold" stroke-width="0" xml:space="preserve">SHIFT</text>
<rect x="650" y="545" width="140" height="55" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="690" y="585" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="28" font-weight="bold" stroke-width="0" xml:space="preserve">?123</text>
<rect x="880" y="545" width="140" height="55" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="882" y="585" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="30" font-weight="bold" stroke-width="0" xml:space="preserve"></text>
<text x="674" y="520.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">.</text>
<text x="50" y="280" fill="#0000ff" font-family="Helvetica, Arial, sans-serif" font-size="25" font-style="italic" font-weight="bold" stroke-width="0" xml:space="preserve">]]..keyb..[[</text>
</g>
<text stroke="null" fill="]]..mousecolclk..[[" stroke-width="10" x="]]..(screen.getMouseX()*(1024)-35)..[[" y="]]..(screen.getMouseY()*(612)+40)..[[" id="svg_6" font-size="100" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold" font-style="italic">+</text>
</svg>]]
local buttonNo = evaluateButtons()
if PWMouseDown then
PWMouseX = screen.getMouseX()
PWMouseY = screen.getMouseY()
if buttonNo ~= PWButtonSelected or PWMouseX < 0.05 or PWMouseX > 0.95 or PWMouseY < 0.05 or PWMouseY > 0.95 then
if PWButtonSelected > 0 then
onButtonUp(PWButtonSelected)
end
PWButtonSelected = 0
end
end
page = page .. [[</div></body></html>]]
screen.setHTML(page)
--------------------small letter keyboard
elseif startupnow == 1.1 then
tablex.clear(PWButtons, button)
for i = 1,1 do
local button = {id = ("b"..1), enabled=true, td="<td>", top=49/100, bottom=60/100, left=1/100, right=6.5/100}
table.insert(PWButtons, button)
end
for i = 2,2 do
local button = {id = ("b"..2), enabled=true, td="<td>", top=49/100, bottom=60/100, left=8/100, right=14/100}
table.insert(PWButtons, button)
end
for i = 3,3 do
local button = {id = ("b"..3), enabled=true, td="<td>", top=49/100, bottom=60/100, left=15/100, right=22/100}
table.insert(PWButtons, button)
end
for i = 4,4 do
local button = {id = ("b"..4), enabled=true, td="<td>", top=49/100, bottom=60/100, left=23/100, right=30/100}
table.insert(PWButtons, button)
end
for i = 5,5 do
local button = {id = ("b"..5), enabled=true, td="<td>", top=49/100, bottom=60/100, left=31/100, right=38/100}
table.insert(PWButtons, button)
end
for i = 6,6 do
local button = {id = ("b"..6), enabled=true, td="<td>", top=49/100, bottom=60/100, left=39/100, right=46/100}
table.insert(PWButtons, button)
end
for i = 7,7 do
local button = {id = ("b"..7), enabled=true, td="<td>", top=49/100, bottom=60/100, left=47/100, right=53/100}
table.insert(PWButtons, button)
end
for i = 8,8 do
local button = {id = ("b"..8), enabled=true, td="<td>", top=49/100, bottom=60/100, left=54/100, right=61/100}
table.insert(PWButtons, button)
end
for i = 9,9 do
local button = {id = ("b"..9), enabled=true, td="<td>", top=49/100, bottom=60/100, left=62/100, right=69/100}
table.insert(PWButtons, button)
end
for i = 10,10 do
local button = {id = ("b"..10), enabled=true, td="<td>", top=49/100, bottom=60/100, left=70/100, right=77/100}
table.insert(PWButtons, button)
end
for i = 11,11 do
local button = {id = ("b"..11), enabled=true, td="<td>", top=49/100, bottom=60/100, left=78/100, right=85/100}
table.insert(PWButtons, button)
end
for i = 12,12 do
local button = {id = ("b"..12), enabled=true, td="<td>", top=49/100, bottom=60/100, left=86/100, right=100/100}
table.insert(PWButtons, button)
end
for i = 13,13 do
local button = {id = ("b"..13), enabled=true, td="<td>", top=62/100, bottom=73/100, left=4/100, right=10/100}
table.insert(PWButtons, button)
end
for i = 14,14 do
local button = {id = ("b"..14), enabled=true, td="<td>", top=62/100, bottom=73/100, left=11.5/100, right=18/100}
table.insert(PWButtons, button)
end
for i = 15,15 do
local button = {id = ("b"..15), enabled=true, td="<td>", top=62/100, bottom=73/100, left=19/100, right=26/100}
table.insert(PWButtons, button)
end
for i = 16,16 do
local button = {id = ("b"..16), enabled=true, td="<td>", top=62/100, bottom=73/100, left=27/100, right=34/100}
table.insert(PWButtons, button)
end
for i = 17,17 do
local button = {id = ("b"..17), enabled=true, td="<td>", top=62/100, bottom=73/100, left=35/100, right=42/100}
table.insert(PWButtons, button)
end
for i = 18,18 do
local button = {id = ("b"..18), enabled=true, td="<td>", top=62/100, bottom=73/100, left=43/100, right=50/100}
table.insert(PWButtons, button)
end
for i = 19,19 do
local button = {id = ("b"..19), enabled=true, td="<td>", top=62/100, bottom=73/100, left=51/100, right=58/100}
table.insert(PWButtons, button)
end
for i = 20,20 do
local button = {id = ("b"..20), enabled=true, td="<td>", top=62/100, bottom=73/100, left=59/100, right=65/100}
table.insert(PWButtons, button)
end
for i = 21,21 do
local button = {id = ("b"..21), enabled=true, td="<td>", top=62/100, bottom=73/100, left=66.5/100, right=73/100}
table.insert(PWButtons, button)
end
for i = 22,22 do
local button = {id = ("b"..22), enabled=true, td="<td>", top=62/100, bottom=73/100, left=74/100, right=89/100}
table.insert(PWButtons, button)
end
for i = 23,23 do
local button = {id = ("b"..23), enabled=true, td="<td>", top=75/100, bottom=87/100, left=8/100, right=15/100}
table.insert(PWButtons, button)
end
for i = 24,24 do
local button = {id = ("b"..24), enabled=true, td="<td>", top=75/100, bottom=87/100, left=16/100, right=23/100}
table.insert(PWButtons, button)
end
for i = 25,25 do
local button = {id = ("b"..25), enabled=true, td="<td>", top=75/100, bottom=87/100, left=24/100, right=31/100}
table.insert(PWButtons, button)
end
for i = 26,26 do
local button = {id = ("b"..26), enabled=true, td="<td>", top=75/100, bottom=87/100, left=32/100, right=39/100}
table.insert(PWButtons, button)
end
for i = 27,27 do
local button = {id = ("b"..27), enabled=true, td="<td>", top=75/100, bottom=87/100, left=40/100, right=46/100}
table.insert(PWButtons, button)
end
for i = 28,28 do
local button = {id = ("b"..28), enabled=true, td="<td>", top=75/100, bottom=87/100, left=47/100, right=54/100}
table.insert(PWButtons, button)
end
for i = 29,29 do
local button = {id = ("b"..29), enabled=true, td="<td>", top=75/100, bottom=87/100, left=55/100, right=62/100}
table.insert(PWButtons, button)
end
for i = 30,30 do
local button = {id = ("b"..30), enabled=true, td="<td>", top=75/100, bottom=87/100, left=63/100, right=70/100}
table.insert(PWButtons, button)
end
for i = 31,31 do
local button = {id = ("b"..31), enabled=true, td="<td>", top=75/100, bottom=87/100, left=71/100, right=85/100}
table.insert(PWButtons, button)
end
for i = 32,32 do
local button = {id = ("b"..32), enabled=true, td="<td>", top=88/100, bottom=98/100, left=30/100, right=59/100}
table.insert(PWButtons, button)
end
for i = 33,33 do
local button = {id = ("b"..33), enabled=true, td="<td>", top=88/100, bottom=98/100, left=63/100, right=77/100}
table.insert(PWButtons, button)
end
for i = 34,34 do
local button = {id = ("b"..34), enabled=true, td="<td>", top=88/100, bottom=98/100, left=85/100, right=100/100}
table.insert(PWButtons, button)
end
for i = 35,35 do
local button = {id = ("b"..35), enabled=true, td="<td>", top=90/100, bottom=100/100, left=1/100, right=18/100}
table.insert(PWButtons, button)
end
function evaluateButtons()
local selected = 0
if #PWButtons >= 1 then
-- Set button styles
for i, button in ipairs(PWButtons) do
if button.left < PWMouseX and PWMouseX < button.right and button.top < PWMouseY and PWMouseY < button.bottom then
if PWMouseDown and PWButtonSelected == i then
end
selected = i
end
if not button.enabled then
end
end
end
return selected
end
function onButtonDown(buttonNo)
local button = PWButtons[buttonNo]
if not button or not button.enabled then
return
end
end
function onButtonUp(buttonNo)
local button = PWButtons[buttonNo]
if not button or not button.enabled then
return
end
function onClick(buttonNo)
local button = PWButtons[buttonNo]
if not button or not button.enabled then
return
end
end
if buttonNo == 1 then
keyb=keyb.."q"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 2 then
keyb=keyb.."w"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 3 then
keyb=keyb.."e"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 4 then
keyb=keyb.."r"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 5 then
keyb=keyb.."t"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 6 then
keyb=keyb.."y"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 7 then
keyb=keyb.."u"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 8 then
keyb=keyb.."i"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 9 then
keyb=keyb.."o"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 10 then
keyb=keyb.."p"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 11 then
elseif buttonNo == 12 then
keyb = ""
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 13 then
keyb=keyb.."a"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 14 then
keyb=keyb.."s"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 15 then
keyb=keyb.."d"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 16 then
keyb=keyb.."f"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 17 then
keyb=keyb.."g"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 18 then
keyb=keyb.."h"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 19 then
keyb=keyb.."j"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 20 then
keyb=keyb.."k"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 21 then
keyb=keyb.."l"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 22 then
if keyb == password then
keyb=""
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
door.activate()
keyb="Access Granted"
unit.setTimer("exit",5)
elseif keyb ~= password then
keyb=""
keyb="Access DENIED"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
unit.setTimer("exit",1)
door.deactivate()
end
elseif buttonNo == 23 then
keyb=keyb.."z"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 24 then
keyb=keyb.."x"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 25 then
keyb=keyb.."c"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 26 then
keyb=keyb.."v"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 27 then
keyb=keyb.."b"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 28 then
keyb=keyb.."n"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 29 then
keyb=keyb.."m"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 30 then
keyb=keyb.."."
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 31 then
startupnow = 1
elseif buttonNo == 32 then
keyb=keyb.." "
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 33 then
startupnow = 1.2
elseif buttonNo == 34 then
elseif buttonNo == 35 then
end
end
if screen.getMouseState() == 1 then
mousecolclk = "purple"
else
mousecolclk = "cyan"
end
if screen.getMouseState() == 1 and butselectclk1 == 1 then
butcolclk1 = "purple"
elseif screen.getMouseState() == 0 and butselectclk1 == 1 then
butcolclk1 = "limegreen"
butselectclk1 = 0
elseif screen.getMouseState() == 1 and butselectclk1 == 2 then
butcolclk2 = "purple"
elseif screen.getMouseState() == 0 and butselectclk1 == 2 then
butcolclk2 = "limegreen"
butselectclk2 = 0
end
local page = [[
<svg viewBox="0 0 1024 612">
<g>
<title>background</title>
<rect x="-1" y="-1" width="1026" height="614"/>
<g display="none">
<rect width="100%" height="100%" fill="url(#gridpattern)" stroke-width="0"/>
</g>
</g>
<g>
<title>Layer 1</title>
<rect x="7" y="5" width="1012" height="290" rx="20" fill="#007f7f" stroke="#0f0" stroke-width="5"/>
<rect x="1" y="306" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="14.997276" y="360.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">q</text>
<rect x="80" y="306" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="90" y="360.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">w</text>
<rect x="160" y="306" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="178" y="360.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">e</text>
<rect x="240" y="306" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="255" y="360.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">r</text>
<rect x="320" y="306" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="337" y="360.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">t</text>
<rect x="400" y="306" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="417" y="360.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">y</text>
<rect x="480" y="306" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="496" y="360.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">u</text>
<rect x="560" y="306" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="586" y="361.00001" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">i</text>
<rect x="640" y="306" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="654" y="360.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">o</text>
<rect x="720" y="306" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="740" y="360.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">p</text>
<rect x="880" y="306" width="140" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="895" y="350" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="30" font-weight="bold" stroke-width="0" xml:space="preserve">CLEAR</text>
<rect x="800" y="306" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="802" y="350" cursor="move" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="30" font-weight="bold" stroke-width="0" xml:space="preserve"></text>
<rect x="41" y="385" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="59" y="439.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">a</text>
<rect x="121" y="385" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="136" y="439.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">s</text>
<rect x="201" y="385" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="218" y="439.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">d</text>
<rect x="281" y="385" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="298" y="439.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">f</text>
<rect x="361" y="385" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="377" y="439.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">g</text>
<rect x="441" y="385" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="455" y="440.00001" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">h</text>
<rect x="521" y="385" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="540" y="439.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">j</text>
<rect x="601" y="385" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="619" y="439.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">k</text>
<rect x="761" y="385" width="140" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="785" y="430" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="30" font-style="italic" font-weight="bold" stroke-width="0" xml:space="preserve">Enter</text>
<rect x="681" y="385" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="700" y="439.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">l</text>
<rect x="86" y="466" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="101" y="520.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">z</text>
<rect x="166" y="466" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="183" y="520.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">x</text>
<rect x="246" y="466" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="263" y="520.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">c</text>
<rect x="326" y="466" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="342" y="520.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">v</text>
<rect x="406" y="466" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="420" y="521.00001" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">b</text>
<rect x="486" y="466" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="500" y="520.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">n</text>
<rect x="566" y="466" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="578" y="520.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">m</text>
<rect x="646" y="466" width="70" height="70" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<rect x="306" y="545" width="300" height="55" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<rect x="726" y="466" width="140" height="70" rx="10" fill="#00bfbf" stroke="#00ff00" stroke-width="5"/>
<text x="750" y="510" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="30" font-weight="bold" stroke-width="0" xml:space="preserve">SHIFT</text>
<rect x="650" y="545" width="140" height="55" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="690" y="585" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="28" font-weight="bold" stroke-width="0" xml:space="preserve">?123</text>
<rect x="880" y="545" width="140" height="55" rx="10" fill="#56ffff" stroke="#0f0" stroke-width="5"/>
<text x="882" y="585" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="30" font-weight="bold" stroke-width="0" xml:space="preserve"></text>
<text x="674" y="520.999996" fill="#bf0000" font-family="Helvetica, Arial, sans-serif" font-size="55" font-weight="bold" stroke-width="0" xml:space="preserve">.</text>
<text x="50" y="280" fill="#0000ff" font-family="Helvetica, Arial, sans-serif" font-size="25" font-style="italic" font-weight="bold" stroke-width="0" xml:space="preserve">]]..keyb..[[</text>
</g>
<text stroke="null" fill="]]..mousecolclk..[[" stroke-width="10" x="]]..(screen.getMouseX()*(1024)-35)..[[" y="]]..(screen.getMouseY()*(612)+40)..[[" id="svg_6" font-size="100" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold" font-style="italic">+</text>
</svg>]]
local buttonNo = evaluateButtons()
if PWMouseDown then
PWMouseX = screen.getMouseX()
PWMouseY = screen.getMouseY()
if buttonNo ~= PWButtonSelected or PWMouseX < 0.05 or PWMouseX > 0.95 or PWMouseY < 0.05 or PWMouseY > 0.95 then
if PWButtonSelected > 0 then
onButtonUp(PWButtonSelected)
end
PWButtonSelected = 0
end
end
page = page .. [[</div></body></html>]]
screen.setHTML(page)
elseif startupnow == 1.2 then ----- emitter end
tablex.clear(PWButtons, button)
for i = 1,1 do
local button = {id = ("b"..1), enabled=true, td="<td>", top=49/100, bottom=60/100, left=1/100, right=6.5/100}
table.insert(PWButtons, button)
end
for i = 2,2 do
local button = {id = ("b"..2), enabled=true, td="<td>", top=49/100, bottom=60/100, left=8/100, right=14/100}
table.insert(PWButtons, button)
end
for i = 3,3 do
local button = {id = ("b"..3), enabled=true, td="<td>", top=49/100, bottom=60/100, left=15/100, right=22/100}
table.insert(PWButtons, button)
end
for i = 4,4 do
local button = {id = ("b"..4), enabled=true, td="<td>", top=49/100, bottom=60/100, left=23/100, right=30/100}
table.insert(PWButtons, button)
end
for i = 5,5 do
local button = {id = ("b"..5), enabled=true, td="<td>", top=49/100, bottom=60/100, left=31/100, right=38/100}
table.insert(PWButtons, button)
end
for i = 6,6 do
local button = {id = ("b"..6), enabled=true, td="<td>", top=49/100, bottom=60/100, left=39/100, right=46/100}
table.insert(PWButtons, button)
end
for i = 7,7 do
local button = {id = ("b"..7), enabled=true, td="<td>", top=49/100, bottom=60/100, left=47/100, right=53/100}
table.insert(PWButtons, button)
end
for i = 8,8 do
local button = {id = ("b"..8), enabled=true, td="<td>", top=49/100, bottom=60/100, left=54/100, right=61/100}
table.insert(PWButtons, button)
end
for i = 9,9 do
local button = {id = ("b"..9), enabled=true, td="<td>", top=49/100, bottom=60/100, left=62/100, right=69/100}
table.insert(PWButtons, button)
end
for i = 10,10 do
local button = {id = ("b"..10), enabled=true, td="<td>", top=49/100, bottom=60/100, left=70/100, right=77/100}
table.insert(PWButtons, button)
end
for i = 11,11 do
local button = {id = ("b"..11), enabled=true, td="<td>", top=49/100, bottom=60/100, left=78/100, right=85/100}
table.insert(PWButtons, button)
end
for i = 12,12 do
local button = {id = ("b"..12), enabled=true, td="<td>", top=49/100, bottom=60/100, left=86/100, right=93/100}
table.insert(PWButtons, button)
end
for i = 13,13 do
local button = {id = ("b"..13), enabled=true, td="<td>", top=62/100, bottom=73/100, left=4/100, right=10/100}
table.insert(PWButtons, button)
end
for i = 14,14 do
local button = {id = ("b"..14), enabled=true, td="<td>", top=62/100, bottom=73/100, left=11.5/100, right=18/100}
table.insert(PWButtons, button)
end
for i = 15,15 do
local button = {id = ("b"..15), enabled=true, td="<td>", top=62/100, bottom=73/100, left=19/100, right=26/100}
table.insert(PWButtons, button)
end
for i = 16,16 do
local button = {id = ("b"..16), enabled=true, td="<td>", top=62/100, bottom=73/100, left=27/100, right=34/100}
table.insert(PWButtons, button)
end
for i = 17,17 do
local button = {id = ("b"..17), enabled=true, td="<td>", top=62/100, bottom=73/100, left=35/100, right=42/100}
table.insert(PWButtons, button)
end
for i = 18,18 do
local button = {id = ("b"..18), enabled=true, td="<td>", top=62/100, bottom=73/100, left=43/100, right=50/100}
table.insert(PWButtons, button)
end
for i = 19,19 do
local button = {id = ("b"..19), enabled=true, td="<td>", top=62/100, bottom=73/100, left=51/100, right=58/100}
table.insert(PWButtons, button)
end
for i = 20,20 do
local button = {id = ("b"..20), enabled=true, td="<td>", top=62/100, bottom=73/100, left=59/100, right=65/100}
table.insert(PWButtons, button)
end
for i = 21,21 do
local button = {id = ("b"..21), enabled=true, td="<td>", top=62/100, bottom=73/100, left=66.5/100, right=73/100}
table.insert(PWButtons, button)
end
for i = 22,22 do
local button = {id = ("b"..22), enabled=true, td="<td>", top=62/100, bottom=73/100, left=74/100, right=82/100}
table.insert(PWButtons, button)
end
for i = 23,23 do
local button = {id = ("b"..23), enabled=true, td="<td>", top=62/100, bottom=73/100, left=82.5/100, right=90/100}
table.insert(PWButtons, button)
end
for i = 24,24 do
local button = {id = ("b"..24), enabled=true, td="<td>", top=62/100, bottom=73/100, left=90/100, right=97/100}
table.insert(PWButtons, button)
end
for i = 25,25 do
local button = {id = ("b"..23), enabled=true, td="<td>", top=75/100, bottom=87/100, left=8/100, right=15/100}
table.insert(PWButtons, button)
end
for i = 26,26 do
local button = {id = ("b"..26), enabled=true, td="<td>", top=75/100, bottom=87/100, left=16/100, right=23/100}
table.insert(PWButtons, button)
end
for i = 27,27 do
local button = {id = ("b"..27), enabled=true, td="<td>", top=75/100, bottom=87/100, left=24/100, right=31/100}
table.insert(PWButtons, button)
end
for i = 28,28 do
local button = {id = ("b"..28), enabled=true, td="<td>", top=75/100, bottom=87/100, left=32/100, right=39/100}
table.insert(PWButtons, button)
end
for i = 29,29 do
local button = {id = ("b"..29), enabled=true, td="<td>", top=75/100, bottom=87/100, left=40/100, right=46/100}
table.insert(PWButtons, button)
end
for i = 30,30 do
local button = {id = ("b"..30), enabled=true, td="<td>", top=75/100, bottom=87/100, left=47/100, right=54/100}
table.insert(PWButtons, button)
end
for i = 31,31 do
local button = {id = ("b"..31), enabled=true, td="<td>", top=75/100, bottom=87/100, left=55/100, right=62/100}
table.insert(PWButtons, button)
end
for i = 32,32 do
local button = {id = ("b"..32), enabled=true, td="<td>", top=75/100, bottom=87/100, left=63/100, right=70/100}
table.insert(PWButtons, button)
end
for i = 33,33 do
local button = {id = ("b"..33), enabled=true, td="<td>", top=75/100, bottom=87/100, left=71/100, right=78/100}
table.insert(PWButtons, button)
end
for i = 34,34 do
local button = {id = ("b"..34), enabled=true, td="<td>", top=75/100, bottom=87/100, left=79/100, right=86/100}
table.insert(PWButtons, button)
end
for i = 35,35 do
local button = {id = ("b"..35), enabled=true, td="<td>", top=75/100, bottom=87/100, left=86.5/100, right=94/100}
table.insert(PWButtons, button)
end
for i = 36,36 do
local button = {id = ("b"..36), enabled=true, td="<td>", top=88/100, bottom=98/100, left=30/100, right=59/100}
table.insert(PWButtons, button)
end
for i = 37,37 do
local button = {id = ("b"..37), enabled=true, td="<td>", top=88/100, bottom=98/100, left=63/100, right=77/100}
table.insert(PWButtons, button)
end
for i = 38,38 do
local button = {id = ("b"..38), enabled=true, td="<td>", top=88/100, bottom=98/100, left=85/100, right=100/100}
table.insert(PWButtons, button)
end
for i = 39,39 do
local button = {id = ("b"..39), enabled=true, td="<td>", top=90/100, bottom=100/100, left=1/100, right=18/100}
table.insert(PWButtons, button)
end
function evaluateButtons()
local selected = 0
if #PWButtons >= 1 then
-- Set button styles
for i, button in ipairs(PWButtons) do
if button.left < PWMouseX and PWMouseX < button.right and button.top < PWMouseY and PWMouseY < button.bottom then
if PWMouseDown and PWButtonSelected == i then
end
selected = i
end
if not button.enabled then
end
end
end
return selected
end
function onButtonDown(buttonNo)
local button = PWButtons[buttonNo]
if not button or not button.enabled then
return
end
end
function onButtonUp(buttonNo)
local button = PWButtons[buttonNo]
if not button or not button.enabled then
return
end
function onClick(buttonNo)
local button = PWButtons[buttonNo]
if not button or not button.enabled then
return
end
end
if buttonNo == 1 then
keyb=keyb.."1"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 2 then
keyb=keyb.."2"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 3 then
keyb=keyb.."3"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 4 then
keyb=keyb.."4"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 5 then
keyb=keyb.."5"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
hint(1, 5)
elseif buttonNo == 6 then
keyb=keyb.."6"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 7 then
keyb=keyb.."7"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 8 then
keyb=keyb.."8"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 9 then
keyb=keyb.."9"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 10 then
keyb=keyb.."0"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 11 then
keyb=keyb..","
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 12 then
keyb=keyb.."?"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 13 then
keyb=keyb.."!"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 14 then
keyb=keyb.."@"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 15 then
keyb=keyb.."#"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 16 then
keyb=keyb.."$"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 17 then
keyb=keyb.."%"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 18 then
keyb=keyb.."^"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 19 then
keyb=keyb.."&"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 20 then
keyb=keyb.."*"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 21 then
keyb=keyb.."~"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 22 then
keyb=keyb..";"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 23 then
keyb=keyb..":"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 24 then
keyb=keyb.."'"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 25 then
keyb=keyb.."("
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 26 then
keyb=keyb..")"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 27 then
keyb=keyb.."["
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 28 then
keyb=keyb.."]"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 29 then
keyb=keyb.."{"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 30 then
keyb=keyb.."}"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 31 then
keyb=keyb.."<"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 32 then
keyb=keyb..">"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 33 then
keyb=keyb.."+"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 34 then
keyb="-"
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 35 then
keyb=keyb.."="
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 36 then
keyb=keyb.." "
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 37 then
startupnow = 1
elseif buttonNo == 38 then
keyb=""
screen.setText(30,10,7,keyb)
consta=string.len(keyb)
elseif buttonNo == 39 then
end
end
if screen.getMouseState() == 1 then
mousecolclk = "purple"
else
mousecolclk = "cyan"
end
if screen.getMouseState() == 1 and butselectclk1 == 1 then
butcolclk1 = "purple"
elseif screen.getMouseState() == 0 and butselectclk1 == 1 then
butcolclk1 = "limegreen"
butselectclk1 = 0
elseif screen.getMouseState() == 1 and butselectclk1 == 2 then
butcolclk2 = "purple"
elseif screen.getMouseState() == 0 and butselectclk1 == 2 then
butcolclk2 = "limegreen"
butselectclk2 = 0
end
local page = [[
<svg viewBox="0 0 1024 612">
<g>
<title>background</title>
<rect x="-1" y="-1" width="1026" height="614"/>
<g display="none">
<rect width="100%" height="100%" fill="url(#gridpattern)" stroke-width="0"/>
</g>
</g>
<g>
<title>Layer 1</title>
<rect x="7" y="5" width="1012" height="290" rx="20" fill="#007f7f" stroke="#0f0" stroke-width="5"/>
<g fill="#ffff00" fill-opacity="null" font-family="Helvetica, Arial, sans-serif" font-size="20" font-weight="bold" stroke="#00ff00" stroke-width="0">
<text x="50" y="280" fill="#0000ff" font-family="Helvetica, Arial, sans-serif" font-size="25" font-style="italic" font-weight="bold" stroke-width="0" xml:space="preserve">]]..keyb..[[</text>
</g>
<g id="svg_47">
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="1" y="305.999996" width="70" height="70" id="svg_1" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="20" y="360.999996" id="svg_3" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">1</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="80" y="305.999996" width="70" height="70" id="svg_8" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="100" y="360.999996" id="svg_9" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">2</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="160" y="305.999996" width="70" height="70" id="svg_11" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="180" y="360.999996" id="svg_12" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">3</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="240" y="305.999996" width="70" height="70" id="svg_14" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="260" y="360.999996" id="svg_15" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">4</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="320" y="305.999996" width="70" height="70" id="svg_17" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="340" y="360.999996" id="svg_18" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">5</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="400" y="305.999996" width="70" height="70" id="svg_20" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="420" y="360.999996" id="svg_21" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">6</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="480" y="305.999996" width="70" height="70" id="svg_23" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="500" y="360.999996" id="svg_24" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">7</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="560" y="306.00001" width="70" height="70" id="svg_26" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="580" y="361.00001" id="svg_27" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">8</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="640" y="305.999996" width="70" height="70" id="svg_29" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="660" y="360.999996" id="svg_30" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">9</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="720" y="305.999996" width="70" height="70" id="svg_32" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="740" y="360.999996" id="svg_33" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">0</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="800" y="305.999996" width="70" height="70" id="svg_35" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="825" y="350" id="svg_36" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">,</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="880" y="305.999996" width="70" height="70" id="svg_38" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="900" y="360" id="svg_39" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">?</text>
</g>
<g id="svg_108">
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="41" y="384.999996" width="70" height="70" id="svg_10" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="65" y="439.999996" id="svg_13" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">!</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="121" y="384.999996" width="70" height="70" id="svg_16" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="127" y="439.999996" id="svg_19" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">@</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="201" y="384.999996" width="70" height="70" id="svg_22" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="220" y="439.999996" id="svg_25" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">#</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="281" y="384.999996" width="70" height="70" id="svg_28" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="300" y="439.999996" id="svg_31" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">$</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="361" y="384.999996" width="70" height="70" id="svg_34" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="371" y="439.999996" id="svg_37" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">%</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="441" y="385.00001" width="70" height="70" id="svg_40" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="460" y="440.00001" id="svg_41" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">^</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="521" y="384.999996" width="70" height="70" id="svg_42" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="535" y="439.999996" id="svg_43" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">&</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="601" y="384.999996" width="70" height="70" id="svg_44" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="625" y="439.999996" id="svg_45" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">*</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="681" y="384.999996" width="70" height="70" id="svg_48" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="700" y="439.999996" id="svg_49" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">~</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="761" y="384.999996" width="70" height="70" id="svg_118" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="785" y="439.999996" id="svg_119" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">;</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="841" y="384.999996" width="70" height="70" id="svg_121" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="865" y="439.999996" id="svg_122" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">:</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="921" y="384.999996" width="70" height="70" id="svg_127" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="950" y="439.999996" id="svg_128" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">'</text>
</g>
<g id="svg_112">
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="86" y="465.999996" width="70" height="70" id="svg_52" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="110" y="520.999996" id="svg_53" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">(</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="166" y="465.999996" width="70" height="70" id="svg_54" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="195" y="520.999996" id="svg_55" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">)</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="246" y="465.999996" width="70" height="70" id="svg_56" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="270" y="520.999996" id="svg_57" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">[</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="326" y="465.999996" width="70" height="70" id="svg_58" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="350" y="520.999996" id="svg_59" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">]</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="406" y="466.00001" width="70" height="70" id="svg_60" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="430" y="521.00001" id="svg_61" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">{</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="486" y="465.999996" width="70" height="70" id="svg_62" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="515" y="520.999996" id="svg_63" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">}</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="566" y="465.999996" width="70" height="70" id="svg_64" rx="10"/>
<text style="cursor: move;" fill="#bf0000" stroke-width="0" x="585" y="520.999996" id="svg_65" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold"><</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="646" y="465.999996" width="70" height="70" id="svg_68" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="656" y="520.999996" id="svg_69" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold"/>
<text style="cursor: move;" fill="#bf0000" stroke-width="0" x="665" y="520.999996" id="svg_78" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">></text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="726" y="465.999996" width="70" height="70" id="svg_66" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="736" y="520.999996" id="svg_67" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold"/>
<text fill="#bf0000" stroke-width="0" x="755" y="520.999996" id="svg_107" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">+</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="806" y="465.999996" width="70" height="70" id="svg_109" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="816" y="520.999996" id="svg_110" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold"/>
<text fill="#bf0000" stroke-width="0" x="830" y="520.999996" id="svg_111" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">-</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="886" y="465.999996" width="70" height="70" id="svg_113" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="896" y="520.999996" id="svg_114" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold"/>
<text fill="#bf0000" stroke-width="0" x="908" y="520.999996" id="svg_115" font-size="55" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">=</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="306" y="545" width="300" height="55" id="svg_71" rx="10"/>
<rect fill="#00bfbf" stroke="#ffff00" stroke-width="5" x="650" y="544.999996" width="140" height="55" id="svg_73" rx="10"/>
<text style="cursor: move;" fill="#ffff00" stroke-width="0" x="690" y="585" id="svg_74" font-size="28" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">?123</text>
<rect fill="#56ffff" stroke="#00ff00" stroke-width="5" x="880" y="545" width="140" height="55" id="svg_76" rx="10"/>
<text fill="#bf0000" stroke-width="0" x="900" y="585" id="svg_77" font-size="30" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold">CLEAR</text>
</g>
<text stroke="null" fill="]]..mousecolclk..[[" stroke-width="10" x="]]..(screen.getMouseX()*(1024)-35)..[[" y="]]..(screen.getMouseY()*(612)+40)..[[" id="svg_6" font-size="100" font-family="Helvetica, Arial, sans-serif" text-anchor="start" xml:space="preserve" font-weight="bold" font-style="italic">+</text>
</svg>]]
local buttonNo = evaluateButtons()
if PWMouseDown then
PWMouseX = screen.getMouseX()
PWMouseY = screen.getMouseY()
if buttonNo ~= PWButtonSelected or PWMouseX < 0.05 or PWMouseX > 0.95 or PWMouseY < 0.05 or PWMouseY > 0.95 then
if PWButtonSelected > 0 then
onButtonUp(PWButtonSelected)
end
PWButtonSelected = 0
end
end
page = page .. [[</div></body></html>]]
screen.setHTML(page)
end
end
Json Paste
Fair enough, I suppose. That being said, if you're going to flex on people for "doing it wrong" and not share with the class how you're "doing it right," people are bound to be a little skeptical ?
Not actually true, voxels SHOULD effect element placing and they do show as effecting it within build mode, if you place voxels behind an engine etc it will turn red, which is supposed to show it has reduced output, if you look in your reports when flying the ship you will see that all the elements should have reduced effectiveness due to being blocked. This mean that whilst you ship can function, its performance is greatly reduced. How well this reduction is working in game I couldnt tell you, slightly surprised you didnt show us an image of your actually flight performance, rather than this image, which really doesnt show us much.
Trying to work out if this is a post based on actual evidence (that the output reduction is not working) or a knee jerk post from the new player.
Here is a test i did, see one engine is covered by voxels and is showing red
Here is the readout showing the element is 86% obstructed, which suggests that you conclusion that voxels do not effect element performance might be a little wide of the mark.
Yesterday I wanted to fly from Jago to Teoma.
After a while just before reaching maximum speed I got one-shotted (I guess - since I only received the message that I died and was back at my base).
I didn't even realize that I was getting attacked. And, blue-eyed as I was, I didn't had a radar installed.
Today I rebuilt my ship, plus an XS space radar. On my way again to Teoma!
Just after exiting the safe zone (the radar doesn't work inside that zone), the radar shows me some text: an entity with name i.e. Luna, plus a distance - 0.5su, and that I'm out of range (for a lock-on I guess).
That distance slowly increased, so I think it was static. I looked around, couldn't see anything in my vicinity.
Now some questions I would like to have cleared up, please:
- If I encounter somebody and it's coming closer, how do I know in what direction to fly for avoiding it?
- How do pirates know where I am (maybe even in which direction I'm flying and my speed) so they can intercept and attack me?
I try to let people know, but mining high tier ore on moons is a waste of time even after a fresh reset. They are crazy rare. Almost all the veterans know that. If you are looking for a specific ore thats T2 ore above, its always better to go to a planet that has it. ALWAYS. Its a trap some new people fall into. "oh man i have to travel 3 hours to go mine gold?....wait there is some on this moon!"
Thats not accurate especially in the context you have supplied. Lets say I played a game like Star-craft and was destroying my buddies base. By your assertion if I kill all of his units he continues to spawn I am a griefer. If I played a full loot MMO, which we do... and the target I have selected to fight has armored their core, as they should it will take me time to kill it.
If you say that me killing the same guy 10 times to get to his core is griefing, then what you are saying is... Once i shoot his ship and he dies, thats it I should disengage and move on. Not kill the ship, not be rewarded for pvping by taking the ship. I kill the guy one time, and he gets to say 'oh gee willickers you got me!' respawn, get back in his ship and leave. No thats not how it works.
You are suggesting that by playing the game, as it is intended to be played... we are bad people. Thats not true nor accurate.
There are no social consequences, this comment could be misconstrued in a way to suggest that if someone kills you or someone else... YOU may do something bad to them. IRL.
This is the long and short of it.
No.
So I just wanna say, though my opinion is stupid and no one really cares... that the game has pvp. The game has pvp orgs which are large and like to fight. They are bound, because so many of you feel pvp shouldn't exist or safe zones for days. I told you how this was gonna go and none of you listened. Since you forced pvpers to have very limited means to pvping they have to take what they can get. So they hunt the commerce and trade lanes.
When atmo pvp comes... there are gonna be wars. Empire vs NG, or like BOO vs NG, or like numerous other orgs vs NG/DSI/Others.. and its gonna be a blast. You guys will have the occasional commerce raiding but we are gonna be hunting each other and we will not cry and whine about it.
The real problem here is that you guys feel you should not have to endure any risk for your reward, which borks the game. You guys made your own orgs because you wanna make something and be the leader, and instead of joining a larger more powerful org and working out how to PROTECT your convoys you felt that we should just ignore you because thats how its gonna work.
Thats not.. at all how its going to work.
But you lads will learn in time. Build relations with pvp orgs, join orgs that will protect you! Form mutual defense treaties... all of that stuff. Stop sitting in your corner playing blocks in a warzone, saying that no one should be able to touch your block city because... you built it. Imagine how this will work when they implement defense mechanisms, imagine that NQ will create a way for you to protect your ships that you wont even bother to learn because 'eww'. And you will still die. Then you will whine that you died from pvp, in a game with pvp, in an area that is clearly marked, for pvp.
Join a pvp org, there are so many orgs offering defense for your convoys, there are ways around getting killed in the pipe. We see people defeating our tactics almost daily... when atmo pvp comes there will be wars between the larger orgs and you guys are gonna have a blast. Stop being salty over what is actually alot of fun. And Joacorderio stop projecting. C'mon hugs for everyone!
Hit chance needs to be entirely based on the profile of the ship from the angle it's being shot at - not the core size.
Vector differences must play a much larger role.
L weapons should have tracking that is pitiful. An L missile should simply be unable to effectively hit a small ship that is changing it's vector.
HP of voxels need to be rebalanced from the ground up and not just be weight based. More complicated to make voxels should have benefits over simple to make voxels.
A power system needs to be added to further cripple xs ships mounting L weapons - it should be viable to mount upsized guns, but it should come with some serious downsides - IE having to have a ton of capacitors that get drained fully just from a single shot and need time to recharge etc.
I disagree that building good looking ships for pvp is pointless. It doesn't matter if your cube is shot up or your pretty pirate ship. You're likley going to be scrapping them both and redeploying from BP anyway because fixing voxels currently is too much of a hassle. Easier to scrap and redeploy.
The only reason people are doing cubes currently is that there is an advantage for filling the build grid but no penalties.
Ultimately a pvp ship that doesn't get hit due to a small profile is better than one that gets hit a bunch but lives - you don't have to fix the ship that never got hit.
Attempting to extrapolate any kind of concrete truths about a person's morality from how they play a videogame is so incredibly sophomoric. It's the rough equivalent of someone trying to diagnose mental illness after taking one psychology class. No reasonable person would take an argument like that seriously.
Morals in a video game where we have fun and shoot space lazers at internet pixels, and have the ability to say "good fight!" after its over whether you win or lose. Ok buddy. You do you.
first of all: don't tell others their statement is "bullshit" or that their assumption is "stupid" - this doesn't help anyone. Keep it nice and let the other party know that you disagree with them in a polite way. Thanks!
Now on topic
All I can tell you so far is that a formal policy will follow soon.
I don't speak for NQ now, but I want to help evaluate the situation for the time being. It's a bit of a long read, but there will be a short version at the end - don't jump there if you don't want any spoilers
As I see it there is a very basic concept to consider. First of all there's the question of what we do know and what we don't. Next how to make an educated guess about things we do not know for sure just yet. Since @NQ-Naerais gave a very clear statement about the "zero tolerance policy towards cheating and exploiting" in that previously linked announcement, I think it would be a good idea to start with the definition of exploits, because I don't see this provided by NQ yet. In case I just missed it, please point me towards it - thanks in advance.
In order to make an educated guess about what might or might not be considered an exploit I'll just use the first reference that comes to mind: Wikipedia article "Video game exploit"
And I quote the first sentence:
I don't know if NQ shares this exact definition, but I think it's good enough for this evaluation.
Now that we got this covered it leads us to the next question: What is the intent of the game's designer here?
Having read this thread I think everyone agrees that the intent of the maneuver permission on own tiles is to enable landowners to move all constructs out of the way that are parked on their tile. So far so easy.
Where people seem to disagree is on the question if this permission is intended to allow docking such constructs in order to take them away far outside the boundaries of the maneuver tool and the owned tile(s) on or for which the permission has been granted in the first place.
But there's a problem - I can't find a Wikipedia article about NQ's intent regarding this. So if we want to proceed to evaluate the situation before that formal policy is released we have to find a different approach.
Again, having read this thread I took note about your opinions and while some aren't exactly clear, I found that 4 people are in favor of this being intended/allowed, while 11 people oppose that assessment/opinion. Further I found 1 "probably in favor" and 3 "probably against" as well as 2 more people against it who added some constraints like "stealing in general would be cool, but not like this" or "against it but don't think it's an exploit". Don't confuse these numbers with a vote tho - it's just an observation and I don't even guarantee that I got everything right
So this is just a very rough approximation, but to sum it up:
5 people think it's more or less ok
16 people think it's not ok
Now I could try to make an educated guess based on this and say that the landowner's maneuver permission is probably not intended to be used for docking. That right to maneuver is probably just intended to be used to maneuver constructs off the landowners claimed tile in order to solve another issue and nothing else. So just based on your comments here the probability for this being an exploit is rather high.
Granted, it's always hard to guess someone's intent and to base this on the opinions of players instead of Novaquark employees further dilutes the accuracy of this speculation. But if we include the possibility that NQ might take players' feedback into their considerations, it counteracts this dilution a bit.
I can't tell you what is going to happen or what that formal policy is going to say, but personally I'd like to strongly advise against using this mechanic to dock and abduct for the time being. At the very best I think it's dangerous to do it - especially since there is a certain level of awareness that there's a good chance it will actually be considered an exploit and it may be hard to claim "But I didn't know!" - pure speculation on my part tho and just meant to convey why I think it's a dangerous path to follow.
If you remember the aforementioned "zero tolerance policy" regarding exploits, at least I wouldn't want to take that chance even if I rounded the numbers down to "only" 3 to 1 against me. Or if I move the "3 probably against" from the original numbers towards the "in favor" side it still results in 13 to 8 against and I wouldn't bet my access on odds like these. But it's your account and your own risk to take if you decide to go for it anyways - after all, as moderator, as said repeatedly, I don't speak for NQ regarding game-related things.
So much for the evaluation. My guess is as good as yours, but if I may further add my own opinion/guess: since construct owners have to deliberately grant the "maneuver construct" permission using the RDMS, it's clear that it's not meant to be granted to enemies. I see the fact that this permission is being granted to landowners as an exception that's solely meant to solve an actual issue and for nothing else. I think it's meant to enable landowners to help them keep their land usable and this permission should not transpire outside the owner's land in any form. That should exclude the option to use it to dock constructs to your own if not granted explicitly through the RDMS by the owner of the parked construct.
You remember the "EVE doesn't give you a warning" sentiment on this thread, which was countered by "this isn't EVE"? Just consider that DU gives everyone a distance indication as soon as they approach or leave the PVP Zone. Players flying towards a planet get a notification that reads something along the lines of "You have entered the Safe Zone". Again, not speaking for NQ, but I think planet surfaces so far are "intended to become unsafe" once territorial warfare gets introduced - not before.
I think attacking from non-pvp space into pvp space is clearly not ok, but the only thing I actually know is that a formal policy will follow soon. Again, until then I just recommend to think twice about how sure you are regarding the developer's intend.
When you confirmed the existence of a "possible exploit" and there's any doubt if this is intended, the safest route to take is: make a report and get permission first before you use it. In that case you will always have the report on your side for the first time you did it, if it remains the only time you did it. This is just in case if it will actually be considered an exploit that you just discovered. I think exploits don't need to be specifically listed in order to be punished, because you can't list anything that has not been discovered yet
Here's the promised short version. The whole essay above boils down to:
Yeah, I mean, I'm all for improving the new player experience since it's so important for a game like this, but if players are getting turned off explicitly because of 20-30km travel times, then they simply aren't going to enjoy this game regardless. This is not a game for people who want instant gratification, and no amount of improvements to the new player experience are going to change that.
I think it's important when discussing mechanics to avoid falling into the trap of arguing semantics. Whether or not this behavior is techincally a bug or not doesn't mean much; all that matters is whether NQ specifically deems it an exploit of game mechanics. Personally, I don't think it's actually that clear-cut of an abuse, and it could go either way.
What we have here is a fairly straightforward application of established game mechanics. As has been stated, you need to be able to maneuver dynamic constructs on your territory to prevent people from just dropping a big box ship over your stuff and preventing you from leaving or accessing it. That much is clear and sensible, and it likely won't change. Claiming territory that has a ship parked on it with the intent of maneuvering that ship onto a larger dynamic core and then ferrying it off to the PvP Zone for breaking it down and stealing it is a complex application of the mechanic in question, and it does require a lot of variables to be true for it to work:
The dynamic construct has to located on an unclaimed tile.
The owner of the construct has to be offline or otherwise away from the ship for long enough for the "aggressor" to claim the territory (15 minutes), maneuver the ship onto a larger construct (~30 seconds), and then fly that construct into a PvP zone and destroy it (hard to estimate how long this would take, but I reckon it could be done in about 20-30 minutes if it took place on Alioth, for example).
The "aggressor" needs to have a larger core sized construct than the "victim" that can lift the stolen craft into space and haul it to the PvP zone (easy enough for XS/S cores, but more difficult for M cores like the OP's example).
Besides all of these variables, the "aggressor" also has to deem that it's even worth it to steal the ship. Claiming the territory is probably going to at least cost over 100,000 quantas because it's unlikely anyone doing this doesn't already have territory claimed (though it's entirely possible they have a friend who hasn't claimed territory and can do it for free, I suppose), so it's not going to be worth it to steal new players' ships that are going to be worth less than that. Sure, some people might "do it for lols" but I can't imagine that will happen a whole lot. The real victims here are going to be people that have stuff actually worth stealing who, presumably, have a better working understanding of the game.
However, even with all this said, I can see this becoming a problem if a lot of people start doing it. It would be pretty simple to design a Medium or Large ship that's sole purpose is to troll around looking for people parked on unclaimed territory, then quickly and efficiently steal their ships. It would still require the victim to not be paying attention for a decent period of time though, so NQ's ruling on this could go either way.
This point about Sanctuary is spot on. It doesn't make a lot of sense that the game starts players on Alioth, asks them to move to Sanctuary to finish the tutorial, and then the mechanics of the game essentially force them to either move back to Alioth or another planet if they want to progress at a reasonable pace. It would make a lot more sense to start players on Sanctuary, have them complete the basic tutorial of the game there, and then have that basic intro conclude on one of the Districts of Alioth where they can either complete the rest of the available tutorials or forge out on their own.
Sanctuary is a deadend. There is currently no reason to be there other than the game telling you to go there, but it could have some value as the literal starting place for new players who are just trying to learn the basic mechanics. It just doesn't make sense to move players there if they aren't starting there.
Well, on the side topic about if Alioth (or any of the current safe zone) suddenly becomes PVP, I can assure you the loss of subscriptions will outweigh the gain of any new subscriptions because of that change. So as a business decision, it would be in their best interest to leave the 'safe zones' as they are, and simply expand the universe with more systems that are hostile with greater rewards and reasons to venture to them.
As it stands now, this game is 'one system'. Hardly the "Universe" they tout it as. Expanding outward, to many systems, is what they should focus on... not cutting back on what exists and alienating a chunk of their playerbase for no good reason than to troll their own customers.
This point about Sanctuary is spot on. It doesn't make a lot of sense that the game starts players on Alioth, asks them to move to Sanctuary to finish the tutorial, and then the mechanics of the game essentially force them to either move back to Alioth or another planet if they want to progress at a reasonable pace. It would make a lot more sense to start players on Sanctuary, have them complete the basic tutorial of the game there, and then have that basic intro conclude on one of the Districts of Alioth where they can either complete the rest of the available tutorials or forge out on their own.
Sanctuary is a deadend. There is currently no reason to be there other than the game telling you to go there, but it could have some value as the literal starting place for new players who are just trying to learn the basic mechanics. It just doesn't make sense to move players there if they aren't starting there.
It was our thought as well after having completed the tutorial and ending there, and then we realized .... hmm ... we should move all this back to Alioth and just make "Home" there to launch out from.
Alioth as well could have more of the advanced tutorials (the military, organization, and industrial schools). Keeping those off and out of the Sanctuary districts... keeping Sanctuary truly the place for people to get their feet wet with the basics of simple mining and building to learn how to exist.
They could even then go so far, as when you place your first real TCU, the SCU you placed is removed 1 week later, abandoning any and all things left there for newbs to hunt and pick over (if you happened to leave anything behind).
This point about Sanctuary is spot on. It doesn't make a lot of sense that the game starts players on Alioth, asks them to move to Sanctuary to finish the tutorial, and then the mechanics of the game essentially force them to either move back to Alioth or another planet if they want to progress at a reasonable pace. It would make a lot more sense to start players on Sanctuary, have them complete the basic tutorial of the game there, and then have that basic intro conclude on one of the Districts of Alioth where they can either complete the rest of the available tutorials or forge out on their own.
Sanctuary is a deadend. There is currently no reason to be there other than the game telling you to go there, but it could have some value as the literal starting place for new players who are just trying to learn the basic mechanics. It just doesn't make sense to move players there if they aren't starting there.