67 Commits

Author SHA1 Message Date
Raum0x2A
86bc493ead Updated - v1.0.0 2021-05-26 15:15:13 -06:00
Raum0x2A
3cfae880ee Updated - v1.0.0 2021-05-26 15:13:30 -06:00
Raum0x2A
b41f25646d Split up Create banner finction
nmslib.CreateBanner() now calls nmslib.GenRawBanner() for the
majority of processing createbanner now just calls the gen func
and saves the file.

GenRawBanner() returns an image.Image type for more processing by
another function. this will be used for upcoming features.

tests have been updated as needed

upddated go.mod and go.sum
2021-05-24 13:11:56 -06:00
Raum0x2A
94f9b4e15c Greatly improved translator feature
The translator feature has been completely rewritten, and can now
convert any game language to any other.
2021-05-20 19:22:17 -06:00
Raum0x2A
6d3a57d31c Revert "WIP - rebuilding translator"
This reverts commit ab420a0a44.
2021-05-20 19:05:29 -06:00
Raum0x2A
ab420a0a44 WIP - rebuilding translator 2021-05-20 14:33:33 -06:00
Raum0x2A
a0d9dbd269 Merge branch 'translator' into 'develop'
Updates and Features

See merge request Raum0x2A/nmslib!3
2021-05-19 21:23:39 +00:00
Raum0x2A
60de0ebb46 Updates and Features 2021-05-19 21:23:39 +00:00
Raum0x2A
a370e0f33d only run master/develop 2021-05-18 08:55:14 -06:00
Raum0x2A
5faa96d8a7 ignore*feat 2021-05-18 08:53:00 -06:00
Raum0x2A
c8f6d51ba1 Merge branch 'portalbanner-resize' into 'develop'
Moved from gim to gg for image creation

See merge request Raum0x2A/nmslib!2
2021-05-18 04:57:05 +00:00
Raum0x2A
2397ec9aee Moved from gim to gg for image creation 2021-05-18 04:57:05 +00:00
Raum0x2A
21360acadf Updated 2021-05-11 18:11:51 -06:00
Raum0x2A
4aded9c17f Updated README.md
Corrected usage of nmslib.Translate{}
2021-05-11 23:56:00 +00:00
Raum0x2A
8945530dbf Updated 2021-05-08 09:39:28 -06:00
Raum0x2A
73fa913292 Merge branch 'master' into develop 2021-05-08 09:35:48 -06:00
Raum0x2A
47db5b0767 Fixed namespace/go mod tidy 2021-05-07 10:29:58 -06:00
Raum0x2A
4aef1e390a Merge branch 'develop' into 'master'
Updates and Fixes


**resource.go/assets.go**
*  renamed `resources.go` to `assets.go`
*  added dark glyphs - located in assets.go -> assets/glyphs/dark/
*  moved original glyphs - located in assets.go -> assets/glyph/light/

**glyphbanner.go**
* added option to make glyphs vertical and/or dark

**rpcg.go**
* Added a random portal code generator this function takes no args and returns a string

**README.md**
* Fixed some typos (probably more to be fixed)
* Added example of vertical portal banner
* Added list of options for banner creation
* Added example of ``nmslib.RndPortal()`` usage

**go.mod**
* updated go version to 1.16

See merge request Raum0x2A/nmslib!1
2021-05-07 16:03:08 +00:00
Raum0x2A
284313eacc Updates and Fixes
**resource.go/assets.go**
*  renamed `resources.go` to `assets.go`
*  added dark glyphs - located in assets.go -> assets/glyphs/dark/
*  moved original glyphs - located in assets.go -> assets/glyph/light/

**glyphbanner.go**
* added option to make glyphs vertical and/or dark

**rpcg.go**
* Added a random portal code generator this function takes no args and returns a string

**README.md**
* Fixed some typos (probably more to be fixed)
* Added example of vertical portal banner
* Added list of options for banner creation
* Added example of ``nmslib.RndPortal()`` usage

**go.mod**
* updated go version to 1.16
2021-05-07 16:03:08 +00:00
Raum0x2A
faf72d1f7a Deleted assets/glyphs/dark/PORTALSYMBOL.0.png, assets/glyphs/dark/PORTALSYMBOL.1.png, assets/glyphs/dark/PORTALSYMBOL.2.png, assets/glyphs/dark/PORTALSYMBOL.3.png, assets/glyphs/dark/PORTALSYMBOL.4.png, assets/glyphs/dark/PORTALSYMBOL.5.png, assets/glyphs/dark/PORTALSYMBOL.6.png, assets/glyphs/dark/PORTALSYMBOL.7.png, assets/glyphs/dark/PORTALSYMBOL.8.png, assets/glyphs/dark/PORTALSYMBOL.9.png, assets/glyphs/dark/PORTALSYMBOL.A.png, assets/glyphs/dark/PORTALSYMBOL.B.png, assets/glyphs/dark/PORTALSYMBOL.C.png, assets/glyphs/dark/PORTALSYMBOL.D.png, assets/glyphs/dark/PORTALSYMBOL.E.png, assets/glyphs/dark/PORTALSYMBOL.F.png, assets/glyphs/light/PORTALSYMBOL.0.png, assets/glyphs/light/PORTALSYMBOL.1.png, assets/glyphs/light/PORTALSYMBOL.2.png, assets/glyphs/light/PORTALSYMBOL.3.png, assets/glyphs/light/PORTALSYMBOL.4.png, assets/glyphs/light/PORTALSYMBOL.5.png, assets/glyphs/light/PORTALSYMBOL.6.png, assets/glyphs/light/PORTALSYMBOL.7.png, assets/glyphs/light/PORTALSYMBOL.8.png, assets/glyphs/light/PORTALSYMBOL.9.png, assets/glyphs/light/PORTALSYMBOL.A.png, assets/glyphs/light/PORTALSYMBOL.B.png, assets/glyphs/light/PORTALSYMBOL.C.png, assets/glyphs/light/PORTALSYMBOL.D.png, assets/glyphs/light/PORTALSYMBOL.E.png, assets/glyphs/light/PORTALSYMBOL.F.png, assets/lang/atlas-lang.csv, assets/lang/gek-lang.csv, assets/lang/korvax-lang.csv, assets/lang/vykeen-lang.csv files 2021-05-07 15:53:04 +00:00
Raum0x2A
7c5d4b5ce8 Updated 2021-05-06 22:47:55 -06:00
Raum0x2A
ad42c6bb04 Updated 2021-05-06 22:02:21 -06:00
Raum0x2A
5ca88596ff Added vertical example of portal banner 2021-05-06 21:49:17 -06:00
Raum0x2A
53d85d958b modified .gitignore 2021-05-06 20:26:45 -06:00
Raum0x2A
ea51873fe3 Upddated Go version 2021-05-06 19:58:19 -06:00
Raum0x2A
90d743286f Minor Changes 2021-05-06 16:51:09 -06:00
Raum0x2A
bc0c364dcc added .gitignore 2021-05-06 16:40:48 -06:00
Raum0x2A
43496932ef removed some debug output 2021-05-06 11:32:47 -06:00
Raum0x2A
d6bfa643a9 added assets.go 2021-05-06 11:21:35 -06:00
Raum0x2A
877517b923 exported t.Word in nmslib.Translate literal 2021-05-06 09:48:53 -06:00
Raum0x2A
ccbd68aee8 Added dark mode option to CreateBanner() func
- Fixed PORTALSYMBOL file names
- Now using image files from assets/glyphs
- CreateBanner() func options tweaked
2021-05-06 00:52:01 -06:00
Raum0x2A
5077876106 Minor changes 2021-05-06 00:51:00 -06:00
Raum0x2A
9682494ce1 Removed resources.go
`resources.go` is no more! All glyphs, and Lang files have been
extracted to the assets folder. A complete rework of
`glyphbanner.go` is begining.

 - resources.go -> DELETED
2021-05-05 22:12:14 -06:00
Raum0x2A
87bec565f1 Update .gitlab-ci.yml file 2021-05-06 02:20:08 +00:00
Raum0x2A
a7069dce7e Added section for Random Portal func 2021-05-05 19:44:49 -06:00
Raum0x2A
bc4e334ecd Minor Updates 2021-05-05 19:43:05 -06:00
Raum0x2A
9358727075 added RndPoral func to create Random Portal code 2021-05-05 18:42:00 -06:00
bradley.richins
3449ae3bf3 Updated 2020-10-28 11:40:13 -06:00
Bradley Richins
023eab03b2 Update .gitlab-ci.yml 2020-10-28 17:23:00 +00:00
Bradley Richins
5f4414df03 Update README.md 2020-10-28 16:38:05 +00:00
bradley.richins
57a1d729dd added .gitlab-ci.yml 2020-10-28 10:10:08 -06:00
bradley.richins
67db2e32ef Updated README.md 2020-10-24 10:38:28 -06:00
bradley.richins
2bb7ca6ccd Updated Recources
Improved/Fixed CSV formatting issues
2020-10-23 12:19:49 -06:00
bradley.richins
2610d98ae1 Updated Translation tests 2020-10-23 12:19:16 -06:00
bradley.richins
32d533ff61 Added supprot for Gek, Vykeen and Atlas
Eng2Atl & Atl2Eng - NEW
Eng2Gek & Gek2Eng - NEW
Eng2Vyk & Vyk2Eng - NEW
Eng2Kor & Kor2Eng
2020-10-23 12:15:34 -06:00
bradley.richins
ac68a20697 Updated recources
korvax-lang.csv
glyphs/GLYPH-0.png
glyphs/GLYPH-1.png
glyphs/GLYPH-2.png
glyphs/GLYPH-3.png
glyphs/GLYPH-4.png
glyphs/GLYPH-5.png
glyphs/GLYPH-6.png
glyphs/GLYPH-7.png
glyphs/GLYPH-8.png
glyphs/GLYPH-9.png
glyphs/GLYPH-A.png
glyphs/GLYPH-B.png
glyphs/GLYPH-C.png
glyphs/GLYPH-D.png
glyphs/GLYPH-E.png
glyphs/GLYPH-F.png

atlas-lang.csv  - NEW
gek-lang.csv    - NEW
vykeen-lang.csv - NEW
2020-10-23 09:48:14 -06:00
bradley.richins
0b90141dcd Updated README.md
https://gitlab.com/bradley.richins/nmslib/-/tree/develop#translate-korvax-to-english-with-korvax2eng
https://gitlab.com/bradley.richins/nmslib/-/tree/develop#translate-english-to-korvax-with-eng2korvax

https://gitlab.com/bradley.richins/nmslib/-/tree/develop#usage
2020-10-22 13:43:26 -06:00
bradley.richins
5bc5711f09 Updated README.md
https://gitlab.com/bradley.richins/nmslib/-/tree/develop#translate-korvax-to-english-with-korvax2eng
https://gitlab.com/bradley.richins/nmslib/-/tree/develop#translate-english-to-korvax-with-eng2korvax
2020-10-22 13:38:16 -06:00
bradley.richins
00411f015c Complete redesign of lang.go
Some code is now reusable

- openCSV()
- toKor()
- toEng()

the new translation syantax is

```golang
korvax := Translate{"Contraband"}
fmt.Println(korvax.Eng2Kor())
// or
fmt.Println(Translate{"KIHTYOMOLES"}.Kor2Eng())
```

output:

`Zelidovoso`
2020-10-22 13:11:03 -06:00
bradley.richins
ab9799b273 Rewrite on all lang translation tests 2020-10-22 13:10:59 -06:00
bradley.richins
d8dbc66b27 Added/Changed tests
Changed or added the fallowing tests
TestPortal2Galactic:
	P2gc("41EDF9554C2F")

TestGalactic2portal:
	Gc2p("042F:0079:0D55:006A", 1)
	Gc2p("042E:0078:0D53:01ED", 4)

TestKorvax2Eng:
	Korvax2Eng("rodiashikhv")
	Korvax2Eng("KIHTYOMOLES")
	Korvax2Eng("Zelidovoso")
	Eng2Korvax("contraband")
	Eng2Korvax("CONTRABAND")
	Eng2Korvax("Contraband")
2020-10-21 11:36:20 -06:00
bradley.richins
08ed8866d0 Improved translations
Upper case and CAPLOCK words are now properly translated

Began prepering code for rewrite
TODO:   make code reusable\
	add support for:
		Gek
		Vykeen
		Atlas

added some annotations
2020-10-21 11:28:26 -06:00
bradley.richins
620d0ef9de Improved Galactic coords to protal code conversion
Removed un-needed error check

Added ability to pick planet id (0-6)
   Gc2p(gc string) ->> Gc2p(gc string, p int)
2020-10-21 11:26:54 -06:00
bradley.richins
312d38ac6d Updated: add package module github.com/nfnt/resize 2020-10-20 19:17:54 -06:00
bradley.richins
4aec0e4e9a Auto resize image to 768x64
Using http://github.com/nfnt/resize to resize banners
2020-10-20 19:15:06 -06:00
bradley.richins
4f1002ee2d Optimized 2020-10-20 16:23:57 -06:00
bradley.richins
f291891139 Temp directory renamed to nms-{SEED} 2020-10-20 15:14:42 -06:00
bradley.richins
230cefb85d Temp files are now stored in system temp dir 2020-10-20 14:47:04 -06:00
bradley.richins
84df8142c6 Updated 2020-10-20 14:45:49 -06:00
bradley.richins
38e45c4f60 Minnor change
Renamed strut Korvaxlang to KorvaxWord and
English > english
KorvaxWord > korvax
KWCaps > kwcaps
KWALLCAPS > kwallcaps
2020-10-20 12:43:19 -06:00
bradley.richins
221f4e59e1 Updated README.md 2020-10-20 00:08:37 -06:00
bradley.richins
8ccafd5c0c Renamed from LICENSE 2020-10-20 00:06:19 -06:00
bradley.richins
59fcf3e2f0 Renamed to COPYING 2020-10-20 00:05:33 -06:00
bradley.richins
59cc61105a Updated README.md 2020-10-19 22:37:00 -06:00
bradley.richins
ea438a7f40 Example Glyph Banner 2020-10-19 22:36:42 -06:00
bradley.richins
1cb2bac407 Added README.md 2020-10-19 13:00:48 -06:00
bradley.richins
5d2da18255 No longer needed 2020-10-19 12:14:07 -06:00
22 changed files with 1849 additions and 1570 deletions

5
.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
assets/
.vscode/
notes.txt
Test.png
test.png

11
.gitlab-ci.yml Normal file
View File

@@ -0,0 +1,11 @@
stages:
- test
test:
stage: test
image: golang:1.16.3
script:
- go test
only:
- master
- develop

View File

BIN
NMH-BlueDream.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 KiB

234
README.md Normal file
View File

@@ -0,0 +1,234 @@
# NMSlib
[![](https://img.shields.io/badge/License%20-MIT-green)](COPYING)
[![GoDoc](https://godoc.org/gitlab.com/Raum0x2A/nmslib?status.svg)](https://godoc.org/gitlab.com/Raum0x2A/nmslib)
[![](https://img.shields.io/gitlab/pipeline/Raum0x2A/nmslib/master?label=Master&logo=go)](https://gitlab.com/Raum0x2A/nmslib)
[![](https://img.shields.io/gitlab/pipeline/Raum0x2A/nmslib/develop?label=Develop&logo=go)](https://gitlab.com/Raum0x2A/nmslib/-/tree/develop)
[![](https://img.shields.io/badge/Release-v1.0.0-blue?style=flat&logo=go)](https://gitlab.com/Raum0x2A/nmslib/-/releases/v1.0.0)
NMSlib is a GoLang package for dealing with converting Galactic coordinates to Portal codes and vice versa.
NMSlib also translates in game languages (Korvax, Gek Vy'Keen and Atlas) to english, and create portal banners.
## Installation
To install this module use `go get`
```golang
go get -u gitlab.com/Raum0x2A/nmslib
```
## Usage
### Example:
```golang
package main
import (
"fmt"
"gitlab.com/Raum0x2A/nmslib"
)
func main() {
portalcode := "21F2F8EDB94D"
galacticCoords, err := nmslib.P2gc(portalcode)
if err != nil {
panic(err)
}
fmt.Printf("Input:\t%s\nOutput:\t%s\n", portalcode, galacticCoords)
g2p, err := nmslib.Gc2p("014C:0077:06DA:01F2", 2)
if err != nil {
panic(err)
}
fmt.Printf("Input:\t014C:0077:06DA:01F2\nOutput:\t%s\n", g2p)
_ := nmslib.CreateBanner(portalcode, "./NMH-BlueDream.png", 0)
_ := nmslib.CreateBanner(nmslib.RndPortal(), "./Random.png", 0)
fmt.Println(nmslib.Translate{Lang: "korvax"}.ToEng("KIHTYOMOLES"))
korvax := nmslib.Translate{"english"}
fmt.Println(korvax.ToKorvax("Contraband"))
}
```
## Creating a Glyph banner with CreateBanner()
This function takes 3 parameters and reurns an error
* portalcode: 12 char hex string of portal location
* savename: Save location and name
* layout:
* 00 or 0 is horizontal in light mode
* 01 or 1 is horizontal in dark mode
* 11 is vertical in dark mode
* 10 is vertical in light mode
**Example:**
Horizontal Layout for the NMH Capital planet [Blue Dream (aka Omins XI)](https://nomanssky.fandom.com/wiki/Omins_XI) in the [Notric-Lis XIII](https://nomanssky.fandom.com/wiki/Notric-Lis_XIII) system in the [Lahanhar Conflux](https://nomanssky.fandom.com/wiki/Lahanhar_Conflux) region
```golang
err := nmslib.CreateBanner("21F2F8EDB94D", "NMH-BlueDream.png", 0)
if err !=nil {
panic(err)
}
```
![](NMH-BlueDream.png)
Vertical layout for a random address
```golang
err := nmslib.CreateBanner(nmslib.RndPortal(), "ranportal.png", 11)
if err != nil {
panic(err)
}
```
![](ranportal_scaled.png)
_Note: Image shown in readme.md's vertical example have been scaled down in gimp for easier viewing on gitlab._
_Original ranportal.png: 256x3072px_
### Converting Portal code to Galactic address with P2gc()
This function only takes 1 parameter and returns a string and error
* portalcode: 12 char hex string of portal glyphs
**Example:**
```golang
ga, _ := nmslib.P2gc("21F2F8EDB94D")
fmt.Println(ga)
```
Output:
``014C:0077:06DA:01F2``
### Converting Galactic coordinates to Portal codes with Gc2p()
This function only takes 2 parameters and returns a string and error
* galacticaddress: 16 char 4 block hex address
* Planet ID [1-6]
**Example:**
```golang
pc, _ := nmslib.Gc2p("014C:0077:06DA:01F2", 2)
fmt.Println(pc)
```
Output:
``21F2F8EDB94D``
## Translate Words
Supported languages
- Korvax
- Gek
- Vy'keen
- Atlas
### Translate Atlas to English with Atl2Eng()
This function takes only 1 parameter and returns a string
* Word: Any known Atlas word (ex. Paka)
_note: Translating to english will **always** result in the lowercase equivilent word_
**Example:**
```golang
fmt.Println(nmslib.Translate{Lang: "atlas"}.ToEng("Paka"))
```
Output:
``awake``
### Translate English to Korvax with Eng2Korvax()
This function takes only 1 parameter and returns a string
* engword: English word to attempt conversion
**Example:**
```golang
korvax := nmslib.Translate{"english"}
fmt.Println(korvax.ToKorvax("Contraband"))
```
Output:
``Zelidovoso``
### Language commands
- ``Translate{Lang: ``string``}.ToEng(``string``)``
- ``Translate{Lang: ``string``}.ToKorvax(``string``)``
- ``Translate{Lang: ``string``}.ToGek(``string``)``
- ``Translate{Lang: ``string``}.ToVykeen(``string``)``
- ``Translate{Lang: ``string``}.ToAtlat(``string``)``
#### Possible Lang string options
- ``"english"``
- ``"korvax"``
- ``"gek"``
- ``"vykeen"``
- ``"atlas"``
## Random Portal address
Generate random portal codes
- Atlas Station
- Black Hole
- Random address
All random address created will default to the planet index 1 to help ensure there the address is valid
**Example:**
```golang
fmt.Println(nmslib.RndPortal())
fmt.Println(nmslib.RndPortal())
fmt.Println(nmslib.RndAtlas())
fmt.Println(nmslib.RndBH())
```
**Output examples:**
``10EFABDEA373``
``11EAB355FC8E``
``107AC0E190D1``
``10796D57AE15``
<hr>
## A Proud member of NMH Hub
### [![Official Page](https://static.wikia.nocookie.net/nomanssky_gamepedia/images/5/5a/NMH_Banner_Hub.png/revision/latest/scale-to-width-down/85?cb=20201210044657)](https://nomanssky.fandom.com/wiki/No_Man%27s_High_Hub) [![Discord Server](https://img.shields.io/badge/Discord-Invite-blue?&logo=discord&logoColor=white)](https://discord.gg/mhRxf29hns)

1050
assets.go Normal file

File diff suppressed because one or more lines are too long

View File

@@ -1,3 +1,8 @@
/*
Xainesworld Video: https://www.youtube.com/watch?v=xmZbkTahw4w
Fandom Wiki: https://nomanssky.fandom.com/wiki/Portal_address
*/
package nmslib
import (
@@ -7,21 +12,11 @@ import (
"strings"
)
/*
The maths are all thanks to:
Xainesworld
- YT Channel - https://www.youtube.com/channel/UCzTB8EBVJWkzJi2sQjdBv9g
- Video: https://www.youtube.com/watch?v=xmZbkTahw4w
- Website: https://www.xainesworld.com/
*/
/*
P2gc - Portal code to galactic coordinates
Requires 1 var and returns 1 var string
var p string
Portal Glyph hex string 12 chars in len (ex. 006afa556c30)
Return var string
Galactic address (ex. 042F:0079:0D55:006A)
Requires 1 var and returns 1 var string and an error
var p string: Portal Glyph hex string 12 chars in len (ex. 006afa556c30)
Returns var string: Galactic address (ex. 042F:0079:0D55:006A)
*/
func P2gc(p string) (gc string, err error) {
if len(p) == 12 { // Test if length of provided string is 12 chars long
@@ -30,19 +25,19 @@ func P2gc(p string) (gc string, err error) {
var coord [4]int64
coord[1], err = strconv.ParseInt(p[4:6], 16, 16) // Y coordinate
if err != nil {
panic(err)
return "", errors.New("error parsing intergers from string: [4:6]")
}
coord[2], err = strconv.ParseInt(p[6:9], 16, 16) // Z cooridnate
if err != nil {
panic(err)
return "", errors.New("error parsing intergers from string: [6:9]")
}
coord[3], err = strconv.ParseInt(p[9:12], 16, 16) // X coordinate
if err != nil {
panic(err)
return "", errors.New("error parsing intergers from string: [9:12]")
}
coord[0], err = strconv.ParseInt(p[1:4], 16, 16) // SSI (Star System Identifier)
if err != nil {
panic(err)
return "", errors.New("error parsing intergers from string: [1:4]")
}
// apply shifts to Handle the shape/boundaries of the galaxy
@@ -63,29 +58,30 @@ func P2gc(p string) (gc string, err error) {
gc = fmt.Sprintf("%04X:%04X:%04X:%04X", coord[3], coord[1], coord[2], coord[0])
} else { // if len(p) != 12 return an error
return "", errors.New("A 12char HEX string is required. example: 006afa556c30")
return "", errors.New("a 12char HEX string is required. example: 006afa556c30")
}
return // return formated string
}
/*
Gc2p - Galactic coordinates to portal code
Requires 1 string and returns a string and error
var gc string
Galactic address (ex. 042F:0079:0D55:006A)
Return var string
Portal Glyph hex string 12 chars in len (ex. 006afa556c30)
Requires 1 string and 1 int returns a string and error
var gc string: Galactic address (ex. 042F:0079:0D55:006A)
var p int: Planet ID [1-6]
Returns portalcode string: Portal Glyph hex string 12 chars in len (ex. 006afa556c30)
*/
func Gc2p(gc string) (portalcode string, err error) {
if err != nil {
panic(err)
}
/*TODO: add option for Planet choice (1-6)*/
func Gc2p(gc string, p int) (portalcode string, err error) {
// split and store string
// coords[0] == X; coords[1] == Y coords[2] == Z;
// coords[3] == SSI coords[4] == P
coords := strings.Split(gc+":1", ":")
if len(gc) != 19 {
return "", errors.New("galatic code is the wrong length")
}
if p > 6 {
p = 1
}
nustring := fmt.Sprintf("%s:%d", gc, p)
coords := strings.Split(nustring, ":")
for n := 0; n < len(coords); n++ {
portalcode = portalcode + coords[n]
}
@@ -93,26 +89,30 @@ func Gc2p(gc string) (portalcode string, err error) {
var hexCoords [5]int64
hexCoords[0], err = strconv.ParseInt(coords[4], 16, 16) // P
if err != nil {
panic(err)
return "", errors.New("error parsing intergers from string: [4]")
}
hexCoords[1], err = strconv.ParseInt(coords[3], 16, 16) // SSI
if err != nil {
panic(err)
return "", errors.New("error parsing intergers from string: [3]")
}
hexCoords[2], err = strconv.ParseInt(coords[1], 16, 16) // Y
if err != nil {
panic(err)
return "", errors.New("error parsing intergers from string: [1]")
}
hexCoords[3], err = strconv.ParseInt(coords[2], 16, 16) // Z
if err != nil {
panic(err)
return "", errors.New("error parsing intergers from string: [2]")
}
hexCoords[4], err = strconv.ParseInt(coords[0], 16, 16) // X
if err != nil {
panic(err)
return "", errors.New("error parsing intergers from string: [0]")
}
// Apply shifts to Handle the shape/boundaries of the galaxy
/*Note:
[P][SSS][YY][ZZZ][XXX] len == 12
* SSS == SSI
*/
hexCoords[2] = hexCoords[2] + 0x81 // Y ->> shift
hexCoords[3] = hexCoords[3] + 0x801 // Z ->> shift
hexCoords[4] = hexCoords[4] + 0x801 // X ->> shift
@@ -124,6 +124,7 @@ func Gc2p(gc string) (portalcode string, err error) {
}
// Assemble padded values as a string
portalcode = fmt.Sprintf("%00X%03X", hexCoords[0], hexCoords[1])
for n := 2; n < len(hexCoords); n++ {
if n == 2 {
@@ -132,5 +133,5 @@ func Gc2p(gc string) (portalcode string, err error) {
portalcode = portalcode + fmt.Sprintf("%03X", hexCoords[n])
}
}
return portalcode, err // return formated string and error
return // return formated string and error
}

View File

@@ -1,91 +1,128 @@
package nmslib
import (
"errors"
"fmt"
"image/png"
"image"
"io/ioutil"
"os"
"strconv"
gim "github.com/ozankasikci/go-image-merge"
"github.com/fogleman/gg"
)
/*CreateBanner - Output PNG of Portal Glyphs
Requires 3 vars and returns 0 var, Outputs a PNG file
var portalex string
Portal Glyph hex string
var savename string
Output name of PNG file
var vopt int
1 enables vertical banner
0 enables horizontal banner
Requires 3 vars and returns 1 err, Outputs a PNG file
var portalex string: Portal Glyph hex string
var savename string: Output name of PNG file
var opt int
00 sets horizontal banner in light mode [ 00 || 0 ]
01 sets horizontal banner in dark mode [ 01 || 1 ]
10 sets vertical banner in light mode
11 sets vertical banner in dark mode
* note first of the 2 bits sets the layout, the second bit sets the glyph color
*/
func CreateBanner(portalhex string, savename string, vopt int) {
var err error
func CreateBanner(portalhex string, savename string, opt int) (err error) {
out, err := GenRawBanner(portalhex, opt)
if err != nil {
return
}
gg.SavePNG(savename+".png", out)
//gg.SaveJPG(savename+".jpg", out, 50)
return
}
/*GenRawBanner - Returns image.Image of genorated image
Requires 2 vars and returns image.Image (raw image data) and an error
var portalex string: Portal Glyph hex string
var opt int
00 sets horizontal banner in light mode [ 00 || 0 ]
01 sets horizontal banner in dark mode [ 01 || 1 ]
10 sets vertical banner in light mode
11 sets vertical banner in dark mode
* note first of the 2 bits sets the layout, the second bit sets the glyph color
*/
func GenRawBanner(portalhex string, layout int) (portalbanner image.Image, err error) {
var GlyphHex [12]int64
var glyphImg [12]string
var mode string
var imgArray [12]image.Image
//Set light or dark mode glyphs
if layout == 00 || layout == 10 {
mode = "light"
} else if layout == 01 || layout == 11 {
mode = "dark"
} else {
// if layout is an invalid option (ie. not a 2 bit binary number default to classic mode/layout
layout = 0
mode = "light"
}
// verify len of portalhex
if len(portalhex) == 12 {
// get hex value from each digit in given string to an array of int64
// get hex value from each digit in given string and add it to an array of int64
for i := 0; i < len(portalhex); i++ {
GlyphHex[i], err = strconv.ParseInt(portalhex[i:int(i+1)], 16, 16)
if err != nil {
panic(err)
return nil, errors.New("string provided is not hexadecimal ([0-9][A-F])")
}
}
// assign image location of its glyph hex value to an array of strings
// assign image location of its glyph-hex value to an array of strings
for j := 0; j < len(glyphImg); j++ {
glyphImg[j] = fmt.Sprintf("tmp.nmslib/glyphs/GLYPH-%X.png", GlyphHex[j])
glyphImg[j] = fmt.Sprintf("assets/glyphs/%s/PORTALSYMBOL.%X.png", mode, GlyphHex[j])
}
// pull images need from glyph.go and saved them to ./glyphs/
// pull images need from assets.go and saved them to the temp directory
for k := 0; k < len(glyphImg); k++ {
data, err := Asset(glyphImg[k])
if err != nil {
panic(err)
return nil, errors.New("can not load images from assets: " + glyphImg[k])
}
_, err2 := os.Stat("tmp.nmslib/glyphs")
if os.IsNotExist(err2) {
errDir := os.MkdirAll("tmp.nmslib/glyphs", 0755)
if errDir != nil {
panic(errDir)
}
err = ioutil.WriteFile(NmsTemp+"/"+glyphImg[k], []byte(data), 0644)
if err != nil {
return nil, errors.New("can not write file to temp directory")
}
err = ioutil.WriteFile(glyphImg[k], []byte(data), 0644)
}
}
// load images for processing using github.com/ozankasikci/go-image-merge
grids := []*gim.Grid{
{ImageFilePath: glyphImg[0]}, {ImageFilePath: glyphImg[1]},
{ImageFilePath: glyphImg[2]}, {ImageFilePath: glyphImg[3]},
{ImageFilePath: glyphImg[4]}, {ImageFilePath: glyphImg[5]},
{ImageFilePath: glyphImg[6]}, {ImageFilePath: glyphImg[7]},
{ImageFilePath: glyphImg[8]}, {ImageFilePath: glyphImg[9]},
{ImageFilePath: glyphImg[10]}, {ImageFilePath: glyphImg[11]},
}
if vopt == 1 {
// Merge images horizontally
rgba, err := gim.New(grids, 1, 12).Merge()
if err != nil {
panic(err)
//Load/open images needed
for iter := 0; iter < 12; iter++ {
imgArray[iter], err = gg.LoadPNG(NmsTemp + "/" + glyphImg[iter])
if err != nil {
return nil, errors.New("can not read glyph " + glyphImg[iter])
}
}
//begin concatenating images
// get image size of first glyph, all glyphs have the same X && Y dimension so we only need to measure one.
imgDim := imgArray[0].Bounds().Size()
//Set Layout
//classic horizontal layout
if layout == 01 || layout == 00 {
imgWidth := imgDim.X * 12
imgHeight := imgDim.Y
concat := gg.NewContext(imgWidth, imgHeight)
for a := 0; a < 12; a++ {
concat.DrawImage(imgArray[a], imgDim.X*a, 0)
}
return concat.Image(), nil
}
//Vertical layout
if layout == 10 || layout == 11 {
imgWidth := imgDim.X
imgHeight := imgDim.Y * 12
concat := gg.NewContext(imgWidth, imgHeight)
for a := 0; a < 12; a++ {
concat.DrawImage(imgArray[a], 0, imgDim.Y*a)
}
return concat.Image(), nil
}
// save the output to png
fmt.Printf("Saving %s to %s in vertical format\n", portalhex, savename)
file, err := os.Create(savename)
err = png.Encode(file, rgba)
} else {
// Merge images vertically
rgba, err := gim.New(grids, 12, 1).Merge()
if err != nil {
panic(err)
}
// save the output to png
fmt.Printf("Saving %s to %s\n", portalhex, savename)
file, err := os.Create(savename)
err = png.Encode(file, rgba)
}
// remove glyphs folder to keep it clean
errDir := os.RemoveAll("tmp.nmslib/glyphs")
if errDir != nil {
panic(errDir)
return nil, errors.New("portalcode must be exactly 12 chars")
}
return
}

10
go.mod
View File

@@ -1,5 +1,9 @@
module gitlab.com/bradley.richins/nmslib
module gitlab.com/Raum0x2A/nmslib
go 1.15
go 1.16
require github.com/ozankasikci/go-image-merge v0.2.2
require (
github.com/fogleman/gg v1.3.1-0.20210131172831-af4cd580789b
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
golang.org/x/image v0.0.0-20210504121937-7319ad40d33e // indirect
)

9
go.sum
View File

@@ -1,2 +1,7 @@
github.com/ozankasikci/go-image-merge v0.2.2 h1:K370BLLTIsamwjAeViiPntf7GiG3h9pXzDmxXCbN8/0=
github.com/ozankasikci/go-image-merge v0.2.2/go.mod h1:NQ2aN0b21buFx3p+5x4dZrKuPSLh2uBukK7F30BrYTo=
github.com/fogleman/gg v1.3.1-0.20210131172831-af4cd580789b h1:gqOBIAmkc/ZxXzFrM4wTub7tD0xYaOsaOQ5wOA74lJQ=
github.com/fogleman/gg v1.3.1-0.20210131172831-af4cd580789b/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
golang.org/x/image v0.0.0-20210504121937-7319ad40d33e h1:PzJMNfFQx+QO9hrC1GwZ4BoPGeNGhfeQEgcQFArEjPk=
golang.org/x/image v0.0.0-20210504121937-7319ad40d33e/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=

71
init.go Normal file
View File

@@ -0,0 +1,71 @@
package nmslib
import (
"errors"
"io/ioutil"
"os"
)
/*NmsTemp - Global string variable
Location of instance temporary directory
Dir Structure:
- NmsTemp
-
*/
var NmsTemp string
/*Initialize temporary directory
create a temp dir and save location to `NmsTemp` string
*/
func init() {
// create temp dir
temploc, err := ioutil.TempDir("", "nmslib-")
if err != nil {
panic(err)
}
NmsTemp = temploc
//Create directory structure
err = os.Mkdir(NmsTemp+"/assets", 0755)
if err != nil {
panic(errors.New("failed to create temporary folder"))
}
err = os.Mkdir(NmsTemp+"/assets/lang", 0755)
if err != nil {
panic(errors.New("failed to create temporary folder"))
}
err = os.Mkdir(NmsTemp+"/assets/glyphs", 0755)
if err != nil {
panic(errors.New("failed to create temporary folder"))
}
err = os.Mkdir(NmsTemp+"/assets/glyphs/dark", 0755)
if err != nil {
panic(errors.New("failed to create temporary folder"))
}
err = os.Mkdir(NmsTemp+"/assets/glyphs/light", 0755)
if err != nil {
panic(errors.New("failed to create temporary folder"))
}
//Write language files to temp directory
fileloc := [4]string{"atlas-lang.csv", "gek-lang.csv", "korvax-lang.csv", "vykeen-lang.csv"}
for x := 0; x < 4; x++ {
data, err := Asset("assets/lang/" + fileloc[x])
if err != nil {
panic(errors.New("can not load: " + fileloc[x]))
}
err = ioutil.WriteFile(NmsTemp+"/assets/lang/"+fileloc[x], []byte(data), 0644)
if err != nil {
panic(errors.New("can not write " + fileloc[x] + " to temp dir"))
}
}
}
/*CleanUp removes temporary directory an it's contents
this is intended to be called in a defer statement in func main
takes no input
*/
func CleanUp() {
os.RemoveAll(NmsTemp)
}

11
init_test.go Normal file
View File

@@ -0,0 +1,11 @@
package nmslib
import (
"fmt"
"testing"
)
func TestInit(t *testing.T) {
fmt.Printf("\nTesting init:\n")
fmt.Printf("Temporary directory: %s\n\n", NmsTemp)
}

View File

@@ -1,679 +0,0 @@
rare,vaiut,Hik,
warning,durenise,Ashkar,
korvax,itelis,Bokhodim,
convergence,nozavolochen,Tetyevolgove,
toxic,vozd,Yundal,Teyug
calm,vanog,Ekt,
traveller,kostalymusk,Zazhelekal,
probability,mavirsakhta,Urzhegodovu,
please,stvovat,Vochiuh,
high,len,Biazy,Rutyu
time,viati,Avash,
scared,ebakim,Oobsk,
virus,layevk,Ognit,
echoes,turyin,Inach,
data,aishi,Ovu,Odgo
power,borod,Hepet,
disruption,giseppusiat,Romeshcuhinsk,
stalled,balaish,Anuderbi,
silicate,domostok,Georgiyev,
impossible,ushkalinsky,Helissentam,
low,edn,Zuhch,
intelligence,inkangbaserta,Midovurasuk,
lifeform,fitsawar,Snezhash,
common,kosarac,Kalyuc,Eft
vy'keen,udyono,Ubimusc,
entity,kevich,Vikinoo,Katrogor
orbital,kazaniem,Vilskolo,Ayskyv
experiment,zohcherdesk,Oriasamynu,
past,ayv,Vaye,
dead,kolsh,Atc,
clarify,ugurusan,Nirogoc,
fascinating,leznakoideob,Tuchimaiutsky,
atlas,tologri,Imaiu,Abli
station,livnye,Yemansk,
oxides,tagoda,Prudnye,
bless,angels,Unit,
interruption,kiyshomanotes,Husovetskiyev,
imminently,zaviatnikha,Ervomoste,
awakes,trezhir,Krasav,
technology,kislobninog,Tegraychiny,
yourself,ransiys,Oktyabi,
isotope,elburg,Kirenik,
overcharges,nouraktichev,Samarimovik,
units,truni,Gukoye,
language,tuapsemu,Iudachy,
brain,ubanov,Hinog,
tissue,ibayev,Nemant,
research,napatoust,Mobarkad,
failure,irnyevs,Yersky,
criminal,gotovnoye,Osnodons,Nikurils
starships,koyashmaniar,Udinovozyo,Linichik
back,hesh,Tov,
future,ougleb,Zeyvai,
pure,kadn,Esh,
sentinel,ugulmato,Peyskyvi,Akovskyv
scan,omin,Ibaye,Odubo
greed,vezdar,Yurbat,
unavailable,ikargoffri,Yobrazdnikolo,
motor,aetsk,Iiskiy,
fire,utsiv,Hovis,
discuss,gansiysk,Alzama,
overheat,gobekin,Pogaetsk,
contact,gochinoo,Ovdoro,
retreat,uriyeve,Sodelik,
required,nokamskyv,Osloborzy,
alert,zania,Yakuta,
core,aso,Osl,
artificial,kihopyevetsi,Kinovorogo,
insert,puchay,Noriali,
bathe,kroymsk,Movsky,
or,liz,Som,
bad,has,Iud,
vessel,skovrov,Niselts,
share,bilets,Kutays,
topic,glazov,Arossi,
reset,nudet,Terga,
primary,gester,Bavlek,
silicates,miosskaia,Rodnikhimb,
excess,epovozm,Helyeli,
holy,riki,Tul,
respect,zehasha,Nineykhat,
excitement,hutarabaltay,Nilokhvin,
worship,ladaniv,Rukakov,Asnovsky
oxide,uyev,Avet,
weaponry,ebskalt,Gudermes,
remove,epano,Kanskiy,
repair,uvorki,Vigali,
resources,lonereche,Lamskyviu,
secondary,kelepikiyev,Yemakhdenpo,
donate,biysk,Ingra,
specialists,dachyegoryk,Blizkimryus,
beware,amady,Ipking,
destiny,epikiner,Nezhne,
escape,izeli,Roreche,
eheu,mog,Retsk,
existence,somonoslav,Histrogo,
examination,kahaylovke,Tutayskommu,
ayee,ter,Rubc,
apologies,gradnayank,Opolenkur,
electron,rameshevs,Osilkul,
white,nani,Glazo,
loss,akh,Fomi,
upload,zoria,Ralskoi,Dreapo
ahem,epet,Tous,
unknown,ognitog,Metyevka,
advance,kopinestv,Gityars,
discharge,tovnoslu,Isoglebez,
reconstruction,arechnostarii,Futekumskyviump,
help,yichie,Skr,
gek,akov,Huru,
healing,uyevsky,Zulunin,
reject,ikungr,Topot,
formula,oglegoda,Yukopinog,
relevant,yozhensk,Bavlyaqua,
allow,ektro,Duly,
geological,rimiinakorja,Prudniymita,
valuable,ubovkin,Georgiyev,
mission,urzhiva,Edelin,
begins,emvab,Pikines,
ship,pomo,Erchi,
becomes,oblasovs,Oboria,
filter,tisovsky,Vudinog,
leave,monogor,Ortivn,
reward,pessk,Evkari,
slavery,darnau,Yakovoma,
avoid,negors,Vinos,
additional,oduboevui,Raktotolya,
enthusiast,tivnyevsk,Aymazykaluy,
absorb,iudac,Horusang,
joyful,hachyeg,Rinush,
embrace,deyskyvi,Odemyach,
disconnection,ovetsialnyokha,Ayevskovkazh,
dislike,zoyormonc,Dorornye,
wait,etomu,Kur,
disaster,tuyndala,Akinoslo,
reboot,gutayga,Zehegu,
pain,etamb,Iavl,
sleep,kiro,Kubaks,
quarantine,yucharabaz,Noozyibkov,
detection,zahskyviumv,Manogorone,
hole,bogut,Lilero,
negotiation,rusakoidammag,Gityabinkang,
wakes,aymaz,Nosl,
creation,rakinovk,Ozzhevoi,
element,zorial,Elgoron,
immediately,mezenskyvin,Uapsheboksit,Zadakyuncam
loop,yuc,Vano,
forbidden,yonkiesbro,Padnayan,
soon,meysk,Abins,
probable,plimskyv,Grivoshes,
control,nozhenyo,Kuznetsi,
uncommon,kuvartkal,Nolitama,
trade,vigradu,Adsk,
signal,iniche,Yungri,
hello,evoy,Ariins,
blueprint,hovaldanov,Beytishenn,
experiments,kasayevkargun,Hinyevskyvi,
ending,omlya,Dudino,
corrupted,lolashtar,Sutokinom,
synthetic,shoyarov,Obekinestu,
create,inich,Zeyanse,
timeline,ekandal,Teprazdni,
poison,dishacha,Nazyv,
improbable,yeyskyvium,Imashacher,
monolith,reutokaya,Utninsk,
youth,livaiu,Kayzyav,
galaxy,ondro,Ukrasu,
centre,lovan,Zodalnec,
reality,godskovo,Tuyrnyevo,
speech,vogratsk,Gotoran,
casing,tubimu,Holisk,
insignificant,iiakhnevichu,Idetskyvinuus,
busy,ruiu,For,
admires,turazn,Anrogor,
friend,yattira,Yatish,
permanent,pestneves,Ozzhetsi,
speaks,hekovrop,Izans,
species,lamsky,Zavolod,
benevolence,efremkhonyev,Yarnyaginin,
creatures,ichinskyvi,Doukovskyv,
isolated,pitkyak,Lamyzihets,
attack,bashcaha,Sokopey,
researcher,gubkinogors,Ofitsuancu,
travels,ezensk,Honyevol,
new,oeto,Arus,
concentrate,vagraduzhumi,Ozhiyevskyv,
operational,uynakoskjar,Usumanzhelya,
red,sno,Groz,Vuk
neural,ereseng,Sperv,
morning,ektrov,Ovostavl,
dangerous,yebkovsegem,Doukoyan,
good,muchad,Ograt,
orb,ray,Kur,
technological,ognitskazhevo,Lukulebakaian,Hudogorsmanov
darkness,utsialn,Helebska,
danger,fitsii,Sudzhi,
waters,kitiman,Tensk,
temporal,agnitsan,Sukholm,
hmm,nik,Naym,
level,otdy,Zimeino,
praise,arenshec,Sulino,Payevsk
child,burgun,Kargo,
findings,duiutskaz,Vaskyuvium,
file,sosyla,Desno,
blob,loyt,Pra,
education,inkangbial,Hiliskovsk,
automated,oitelebe,Orykohaba,
restoration,zuhmandarent,Uppugnatus,
your,petu,Yevs,
wants,apsh,Erzha,
constantly,uapseusius,Hetskaiushn,
relearn,tepushc,Ukovsky,
transmission,bonyevkazhel,Zainskogoli,
network,tulakoid,Sotsky,
catalogue,rukhaluymsky,Arganiae,
recharge,desnoura,Grozove,
decrease,gachyovod,Agodarnau,
invisible,ebskaluett,Enburgunca,Madygeys
adores,gobekin,Velsk,
great,nodalny,Pikako,
not,zay,Gac,
pay,irz,Illo,
ignore,dushc,Roloysva,
blockage,irbiturtr,Doygeysk,
over,oevus,Voale,
better,rubinsky,Sayan,
failed,eurazl,Hinach,
move,lin,Ogn,
traveller's,devoikhoviche,Rafimorsky,
goods,sosnoz,Yatk,
face,ikov,Tuap,
endangered,ryunguryu,Rovodylurus,
awaits,oukoyan,Druzha,
sales,virsk,Dulia,
restore,zadracepa,Daskovopa,
information,telnoslanud,Arzamarime,
accidentally,onstanasheb,Ulebskabent,
federation,hilovkarapu,Eapoluninsk,
hazard,esial,Bolesno,
save,shichi,Eva,
elements,nazyvaye,Vaypolocha,
provide,ershovos,Mezens,
operator,edynald,Oiteleno,
strata,bogonet,Lepiki,
join,per,Baychi,
remains,kitotor,Payevsk,
drone,kesper,Epet,
only,yalsko,Ipets,
capacitor,veycuhnyev,Kakhnyev,
sends,lileys,Demenn,
discover,barnyev,Dogotovis,
vy'keen,udyono,Ubimusc,
feel,iys,Dika,
interrupted,iiskiyevsky,Yakhnyevskyv,
fault,afimo,Pozzhe,
seek,yirnye,Ach,
me,vok,Bez,
recall,roleemo,Kireng,
reciprocal,lashimkin,Yeniiakha,
shell,huvisto,Shim,
watching,demyonnom,Bolgodoz,
welcome,itvaarde,Duvezdare,
process,uzlovshi,Giseysky,
peace,ulma,Leznav,
overpowered,ibiraetsim,Ozlovayevsky,
today,enbur,Tilast,
vital,inka,Bestno,
words,azyvay,Zohyego,
away,ums,Donays,
average,ervomart,Hernusin,
permissions,elnostomuksh,Agiruneate,
planetary,bedyniskap,Miyzherep,
request,ennits,Yebnoyen,
fun,tepr,Liyuy,
in,tuni,Mal,
circuit,onstara,Poveshe,
next,gods,Emer,
give,vue,Ners,
work,akh,Len,
impure,okmin,Adzhevs,
question,kandalast,Istrezhy,
recorded,olzoves,Tetyusin,
entrance,uganrogo,Ivilsky,
goodbye,lomayishn,Myzyva,
subvert,avliaiut,Meglinogo,
production,amyzyvayev,Pallasoves,
teach,amcha,Peysahm,
dialect,charye,Tayndalm,
combine,zunykehady,Yokmin,
commendable,uppunicoigno,Biyskiyevkar,
command,leyskyv,Sestovs,
overseer,hilovskyv,Enshacho,
biological,ludatayrnya,Delabulak,
stone,yamazyv,Teka,
mined,tinsar,Alyn,
maximum,iutskyv,Lonyarn,
stabilise,poshaets,Tuskuyviumh,
sample,gansiys,Gezhach,
violence,tushkanau,Oyarskyv,
procedure,zelovodst,Engileyn,
starship,luymsikyvi,Davliaiu,Mublemyonk
electronic,haetsivosh,Fokinosloze,
apply,godoi,Piki,
discussions,drovskyvinta,Nokurinburgu,
touch,ozzhev,Hanyevk,
light,niemei,Oitel,
here,edin,Emnik,
interface,pogaetsiis,Apulaanhu,
excellent,aplyoginooz,Losukyvinnu,
order,emyo,Bezhn,
through,shmanag,Evelinsk,
escaped,sozavo,Yuzhasav,
studies,gadzhen,Oscowini,
feed,oluc,Usmot,
follow,namenta,Ginski,
initialize,revkaryans,Irenskompl,
appropriate,rubcheguta,Okminusinst,
with,zenam,Nivat,
overload,amyzylsor,Olkovyelki,
protection,alumyzyakh,Yoborzyakha,
central,torzya,Ubkinosl,
atmospheric,yeleznikovk,Onnikaltiys,Spiyskovods
remain,erpukh,Tesevozy,
drill,ladomo,Resman,
know,ady,Opr,
terminal,merobayev,Enburgu,
success,radnic,Vikovr,
behold,lazovay,Vitins,
available,ladogdanko,Afimovskyv,
facility,yesotska,Ibayevoi,
approaches,tetyukhladu,Yishnymitt,
cannot,neudint,Luziames,
activity,lechatura,Zodokistup,
databank,voybrazd,Zihelektr,
certain,naulum,Rasnyocta,
toxins,olniaet,Yekalt,
log,chu,Kem,
fabled,evdarg,Konayan,
corrosive,chashiesi,Rouralskoi,
journey,hidutogq,Kulebsk,Nochin
resist,roshary,Fiksyo,
tech,neka,Zat,
energy,naibol,Meshets,
show,rin,Ionov,
commences,roshoyarvie,Ovdorona,
await,etrop,Ovkara,
highly,styugo,Eninsk,Amillov
back-up,yinsta,Obskarve,
returning,yabysihtagin,Odorodubo,
medial,lerov,Katyvik,
extracting,myachinskyv,Opyevoyeniz,
contraband,rodiashikhv,Zelidovoso,Kihtyomoles
shine,nenyk,Ritovn,
uploading,imbaykala,Orodskoye,
detected,atchinog,Loneralsk,
system,odorov,Oginin,
unexpected,gulyarnau,Meplimskyvin,
expenditure,mirnoznoykha,Shovskyvium,
gift,lac,Yabiry,
engaged,moletsk,Lukhny,
finish,opkin,Turlovk,
think,shoya,Zinogo,
delivery,pionovk,Dazernoeme,
disengaged,zerzhukovok,Yegodstavino,
knowledge,vikhopyevo,Noymittac,
entities,zuberech,Yanoyeru,
this,ibol,Adaky,
non-intelligent,sevelskyvinume,Ipatigorbashcuhud,
product,beycahnogo,Stvere,
contribution,elburgansiysk,Vunymitenemola,
tools,eski,Eveto,
progress,oglegkorg,Seskaiang,
alone,eural,Irovo,
use,oul,Dopis,
board,bukhoy,Antoyre,
at,ilo,Ais,
states,lairtzy,Bavlovs,
will,push,Sht,
all,ukh,Ufi,
unlock,trane,Kinskit,
of,nii,Slo,
for,sut,Lono,
and,suma,Mun,
choose,eurash,Omarits,
are,lak,Rus,
to,gep,Mech,
on,nok,Erd,
you,ludo,Tin,
is,ine,Dob,
the,olkh,Ene,
our,tinan,Rio,
stars,ismanz,Kubak,
a,ond,Tiso,
i,ges,Vod,
do,nag,Ort,
see,itk,Selt,
longrange,isilnyevsk,Yalugani,
multitool,uglinooz,Zonikovke,
careful,poyatii,Voboya,
desk,retyuz,Ipk,
we,yuz,Yase,
examine,azanski,Eltsovka,
using,devoi,Anud,
what,bashich,Gradn,
alarmed,fitskiti,Kihvald,
happening,lagodoij,Tigorskyvi,
open,paye,Ond,
their,iushki,Yekam,
be,yems,Apo,
sorry,form,Rabaka,
hopes,vomestu,Maiu,
divergent,topoluche,Kohrustyugo,
material,udutong,Eyskyvi,
where,asavi,Litusyn,
everywhere,efremiuraza,Koyanskyvin,
aiee,leziam,Relya,
around,benyev,Imaiu,
found,davli,Krem,
plants,poshate,Mestno,
irrelevance,gotyabinokac,Popavliaiuts,
accommodate,egezhgorone,Fimoviatniko,
biggest,gutaysh,Tomark,
secret,liyarvid,Yungri,
design,kuhrom,Iushval,
strange,irisogle,Exandy,
different,utsiiatni,Nugeleizh,
superior,kehtubinsk,Mavinskyv,
highest,brasavil,Dobryac,
things,zovantu,Holun,
effective,panovoku,Imorskyvin,
long,syk,Kuyby,
suit,amb,Nets,
no,bod,Rily,
metal,satkar,Ginsk,
mortal,luygins,Nanyigyi,
unite,anga,Etaru,
rampant,barnya,Broneten,
comes,ovdor,Merovs,
concerned,reapoluchi,Reposskazh,
one,lem,Avlo,
perhaps,vegorsky,Zolovoyen,
expected,hegornoe,Negepasho,
asks,liynk,Engoy,
am,hum,Gad,
lifeforms,rozanykhar,Furmavia,
my,mech,Rado,
resonance,herkaslibe,Insarypov,
report,elgov,Ratilleu,
still,sutok,Oblast,
it,vir,Zor,
holoterminus,sycahnovoyet,Rochyolkovom,
from,nil,Eseny,
seeing,emansk,Abink,
find,otele,Douko,
puzzle,timya,Relyel,
there,bodarn,Ales,
again,myzah,Rukhac,
go,gar,Yizy,
interesting,vuktyabrasko,Lozhenskiy,
been,ubi,Aly,
as,yud,Kaha,
may,but,Yitn,
encounters,rudskoideco,Ivnosokopy,
knows,ryanov,Ruka,
already,boksitog,Lotnoyet,
eleven,voyer,Orskogo,
rebirth,usinni,Dachin,
compensation,apredovuralsk,Zoriastaixu,
video,eyevoz,Torod,
private,ezhnyev,Shnymi,
discoveries,yermeshkov,Udzhevronako,
promised,ubchekans,Nizheguta,
minor,akinog,Kine,
three,lidovo,Havins,
well,ach,Vaybi,
polo,amy,Lebu,
brings,nodeli,Insarye,
did,ubi,Vurov,
such,eli,Gep,
disconnected,engoyetainicc,Tizaniatnin,
earn,nevet,Kezh,
must,lore,Gatsi,
present,eudint,Ubtsovsk,
two,esti,Yung,
connection,zovoaltiysk,Boyandrov,
hear,mogon,Hus,
organic,akanaul,Meinoozy,Tedoykhalya
beautiful,ligarimovs,Pavlevigor,
sixteen,tebeyt,Akayev,
learned,nerogoro,Uguryevs,
shall,zeleu,Yonos,
us,vob,Biyc,
mind,flagi,Elgo,
hard,butur,Nicheg,
these,zeliz,Yokha,
fine,ayg,Oyan,
worlds,tunevi,Manikho,
generation,amillerob,Nodrovskyvi,
requests,hidenpokh,Ichestre,
tiny,zer,Mashe,
assemble,ilskogae,Kuchigrya,
everything,zereslibro,Lermonche,
fan,deyk,Iks,
four,loyur,Tiny,
aids,zadu,Zel,
logs,pes,Nasi,
yet,yup,Oen,
yes,pozz,Dono,
they,erc,Zuye,
allocated,ryimskyviu,Oustyugora,
continue,piyskit,Vezhnosl,
moment,torzhig,Piyatsk,
fade,dey,Ripin,
assist,ziyvayan,Hovsk,
saw,olot,Osn,
adjust,slyudya,Naymitas,
service,gaetsim,Vosteiro,
pleasure,rostarsky,Zanskom,
upon,usm,Zohsk,
faster,yeskoid,Niykhac,
trapped,kitimanz,Poluchis,
nonexistence,yorskovokhay,Zimanovomari,
warping,talnyev,Odnyauza,
broadcasts,yesseltsy,Hudozhaian,
value,iyevol,Enza,
voice,obuzh,Bulans,
charging,runinok,Udzhantam,
rewarding,renyevoi,Napadnovik,
heartbeat,yabrsukyvi,Emovista,
disappointing,zavodskommun,Vuyksanovskyvin,
score,uver,Yevo,
nanites,ugulmato,Layanskiti,
most,tana,Yupol,
reduced,rilovking,Plastr,
succeeds,suselyoshe,Ezovets,
warped,ishieme,Rakess,
draw,ogu,Yosh,
series,sosno,Kezhely,
unit,abe,Ekums,
enjoy,ekana,Aktot,
drama,tobo,Semyon,
missions,ebnyevka,Uberben,
while,roko,Daniiu,
anything,etlogriv,Nadeyshma,
both,vukt,Ibo,
nada,pev,Haylo,
after,vikoel,Govoul,
was,tima,Vay,
terminate,pudomaysh,Ogrivoikh,
task,rac,Sinn,
before,iinsky,Bansk,
between,ikhardo,Umanovok,
truth,atniko,Udets,
flesh,ernu,Dost,
breached,esyegors,Doymkarpi,
harvest,munart,Buinskit,
eyes,dika,Zale,
disagree,honyevs,Erskyvin,
suspicious,soglegkou,Mikhanskyvi,
nature,ukovsev,Udyonn,
favourites,zarenyovs,Tinskyviu,
had,luk,Vic,
let,ogn,Puga,
origin,bezhna,Megisem,
way,dano,Ryokh,
suppose,virskovs,Idetelny,
real,loymsik,Urz,
transfer,medynosba,Yeyskog,
enough,mertaur,Urovn,
complete,hudenpokro,Naulari,
shed,ishcoh,Buko,
try,nadz,Hakov,
rewards,ruskyuviu,Netsivil,
test,brs,Mar,
offer,bess,Adimir,
an,dud,Zob,
why,ubk,Nutey,
very,rolo,Pay,
attention,azinokamsk,Imechorant,
persist,atovor,Virsan,
sounds,minyan,Ainstal,
forgiven,tadtrund,Asliberal,
job,form,Kotic,
have,lamy,Yeys,
prepared,ukoyenaea,Ripinstav,
gate,ugin,Ichi,
aid,zeme,Enk,
ago,mec,Eto,
end,avas,Aoz,
universe,raktorab,Etlogor,
performing,yuzhasavia,Churilovke,
possessions,abrsekyvina,Yubnoyerdis,
imagined,lezname,Kanashets,
controlled,oguchaylov,Slovantur,
portable,odvigatc,Uketyvkaz,
keep,etl,Zov,
beaten,uitel,Ralner,
six,atel,Evro,
learn,achi,Zepetu,
logged,palla,Yanovo,
instantiation,sudzhachitama,Hedurechevskyv,
would,mirn,Ayma,
build,sumanz,Evsky,
distortion,arachyegon,Pogotovia,
passes,vomins,Odpork,
exocraft,nuguryuka,Yosayando,
breach,runinsk,Luykin,
its,yon,Lug,
doors,fitsia,Deymkar,
each,ray,Menog,
reestablish,ryinstevovo,Enyevkarosl,
look,yuch,Vet,
abyss,limyzya,Sensh,
congratulations,ozmodemerouglego,Ibolskovorkhot,
now,luy,Maiu,
waited,teryu,Lilets,
beckons,gepast,Etomut,
nothing,nerogobe,Zedokis,
looks,tiam,Siysk,
skilled,bezhdo,Deneudin,
costume,kuyshest,Omariins,
message,rabanov,Izilyu,
water,aktotm,Udutog,
about,eksin,Enpoka,
largest,modeys,Anninok,
visible,akzhets,Avolovsk,
wrong,furm,Sasovo,
life,liny,Keme,
package,viremovse,Zimeinog,
statistics,vorogorodia,Tanovnosti,
enter,esoz,Hodin,
so,hola,Yul,
absence,ommuna,Illovoy,
like,hilku,Nudal,
but,ads,Zehn,
anomaly,nuyovsh,Odinov,
pleased,tionoslu,Plimors,
warn,siselb,Mos,
smiles,itkyart,Nesaraya,
other,evdar,Ranoet,
victory,kazhdogo,Nikakhal,
percent,zensky,Lokhoy,
start,algo,Dubn,
settle,novsky,Sushc,
has,nur,Laga,
stronger,hatsialn,Verkess,
closer,hutins,Nosohchev,
earning,rimontoro,Inacheny,
carapace,dazhevsko,Islozhosk,
warp,tovsh,Zabak,
twelve,dudino,Yukalyn,
check,rozo,Sivirs,
immediate,edinkarsal,Aplyovos,
world,evdar,Aplyov,
transmitter,unguruslaval,Puysohkinoozyb,
once,mak,Usla,
more,arii,Mich,
five,nisiy,Hen,
projection,amskyvium,Brazmanga,
analysis,uboevushc,Imenskyvi,
even,onno,Teyn,
business,kusanqab,Zekimovis,
them,loyar,Rorek,
best,odvi,Kotr,
notes,mari,Amura,
communion,gulkevino,Ryluskyvin,
how,ezn,Gop,
ten,mest,Zaba,
containment,iyevskyvin,Udozhelyeaex,
purify,ransi,Voikhay,
take,zilyu,Ogni,
much,anko,Mash,
answer,havinsk,Alugan,
unpleasing,unechovori,Ozeleuzen,
say,zuyor,Otla,
ancestor,emanzheg,Eynoyet,
sees,gar,Rishc,
pattern,ogutay,Yushnyev,
emergency,eapoluch,Alinichel,
1 rare vaiut Hik
2 warning durenise Ashkar
3 korvax itelis Bokhodim
4 convergence nozavolochen Tetyevolgove
5 toxic vozd Yundal Teyug
6 calm vanog Ekt
7 traveller kostalymusk Zazhelekal
8 probability mavirsakhta Urzhegodovu
9 please stvovat Vochiuh
10 high len Biazy Rutyu
11 time viati Avash
12 scared ebakim Oobsk
13 virus layevk Ognit
14 echoes turyin Inach
15 data aishi Ovu Odgo
16 power borod Hepet
17 disruption giseppusiat Romeshcuhinsk
18 stalled balaish Anuderbi
19 silicate domostok Georgiyev
20 impossible ushkalinsky Helissentam
21 low edn Zuhch
22 intelligence inkangbaserta Midovurasuk
23 lifeform fitsawar Snezhash
24 common kosarac Kalyuc Eft
25 vy'keen udyono Ubimusc
26 entity kevich Vikinoo Katrogor
27 orbital kazaniem Vilskolo Ayskyv
28 experiment zohcherdesk Oriasamynu
29 past ayv Vaye
30 dead kolsh Atc
31 clarify ugurusan Nirogoc
32 fascinating leznakoideob Tuchimaiutsky
33 atlas tologri Imaiu Abli
34 station livnye Yemansk
35 oxides tagoda Prudnye
36 bless angels Unit
37 interruption kiyshomanotes Husovetskiyev
38 imminently zaviatnikha Ervomoste
39 awakes trezhir Krasav
40 technology kislobninog Tegraychiny
41 yourself ransiys Oktyabi
42 isotope elburg Kirenik
43 overcharges nouraktichev Samarimovik
44 units truni Gukoye
45 language tuapsemu Iudachy
46 brain ubanov Hinog
47 tissue ibayev Nemant
48 research napatoust Mobarkad
49 failure irnyevs Yersky
50 criminal gotovnoye Osnodons Nikurils
51 starships koyashmaniar Udinovozyo Linichik
52 back hesh Tov
53 future ougleb Zeyvai
54 pure kadn Esh
55 sentinel ugulmato Peyskyvi Akovskyv
56 scan omin Ibaye Odubo
57 greed vezdar Yurbat
58 unavailable ikargoffri Yobrazdnikolo
59 motor aetsk Iiskiy
60 fire utsiv Hovis
61 discuss gansiysk Alzama
62 overheat gobekin Pogaetsk
63 contact gochinoo Ovdoro
64 retreat uriyeve Sodelik
65 required nokamskyv Osloborzy
66 alert zania Yakuta
67 core aso Osl
68 artificial kihopyevetsi Kinovorogo
69 insert puchay Noriali
70 bathe kroymsk Movsky
71 or liz Som
72 bad has Iud
73 vessel skovrov Niselts
74 share bilets Kutays
75 topic glazov Arossi
76 reset nudet Terga
77 primary gester Bavlek
78 silicates miosskaia Rodnikhimb
79 excess epovozm Helyeli
80 holy riki Tul
81 respect zehasha Nineykhat
82 excitement hutarabaltay Nilokhvin
83 worship ladaniv Rukakov Asnovsky
84 oxide uyev Avet
85 weaponry ebskalt Gudermes
86 remove epano Kanskiy
87 repair uvorki Vigali
88 resources lonereche Lamskyviu
89 secondary kelepikiyev Yemakhdenpo
90 donate biysk Ingra
91 specialists dachyegoryk Blizkimryus
92 beware amady Ipking
93 destiny epikiner Nezhne
94 escape izeli Roreche
95 eheu mog Retsk
96 existence somonoslav Histrogo
97 examination kahaylovke Tutayskommu
98 ayee ter Rubc
99 apologies gradnayank Opolenkur
100 electron rameshevs Osilkul
101 white nani Glazo
102 loss akh Fomi
103 upload zoria Ralskoi Dreapo
104 ahem epet Tous
105 unknown ognitog Metyevka
106 advance kopinestv Gityars
107 discharge tovnoslu Isoglebez
108 reconstruction arechnostarii Futekumskyviump
109 help yichie Skr
110 gek akov Huru
111 healing uyevsky Zulunin
112 reject ikungr Topot
113 formula oglegoda Yukopinog
114 relevant yozhensk Bavlyaqua
115 allow ektro Duly
116 geological rimiinakorja Prudniymita
117 valuable ubovkin Georgiyev
118 mission urzhiva Edelin
119 begins emvab Pikines
120 ship pomo Erchi
121 becomes oblasovs Oboria
122 filter tisovsky Vudinog
123 leave monogor Ortivn
124 reward pessk Evkari
125 slavery darnau Yakovoma
126 avoid negors Vinos
127 additional oduboevui Raktotolya
128 enthusiast tivnyevsk Aymazykaluy
129 absorb iudac Horusang
130 joyful hachyeg Rinush
131 embrace deyskyvi Odemyach
132 disconnection ovetsialnyokha Ayevskovkazh
133 dislike zoyormonc Dorornye
134 wait etomu Kur
135 disaster tuyndala Akinoslo
136 reboot gutayga Zehegu
137 pain etamb Iavl
138 sleep kiro Kubaks
139 quarantine yucharabaz Noozyibkov
140 detection zahskyviumv Manogorone
141 hole bogut Lilero
142 negotiation rusakoidammag Gityabinkang
143 wakes aymaz Nosl
144 creation rakinovk Ozzhevoi
145 element zorial Elgoron
146 immediately mezenskyvin Uapsheboksit Zadakyuncam
147 loop yuc Vano
148 forbidden yonkiesbro Padnayan
149 soon meysk Abins
150 probable plimskyv Grivoshes
151 control nozhenyo Kuznetsi
152 uncommon kuvartkal Nolitama
153 trade vigradu Adsk
154 signal iniche Yungri
155 hello evoy Ariins
156 blueprint hovaldanov Beytishenn
157 experiments kasayevkargun Hinyevskyvi
158 ending omlya Dudino
159 corrupted lolashtar Sutokinom
160 synthetic shoyarov Obekinestu
161 create inich Zeyanse
162 timeline ekandal Teprazdni
163 poison dishacha Nazyv
164 improbable yeyskyvium Imashacher
165 monolith reutokaya Utninsk
166 youth livaiu Kayzyav
167 galaxy ondro Ukrasu
168 centre lovan Zodalnec
169 reality godskovo Tuyrnyevo
170 speech vogratsk Gotoran
171 casing tubimu Holisk
172 insignificant iiakhnevichu Idetskyvinuus
173 busy ruiu For
174 admires turazn Anrogor
175 friend yattira Yatish
176 permanent pestneves Ozzhetsi
177 speaks hekovrop Izans
178 species lamsky Zavolod
179 benevolence efremkhonyev Yarnyaginin
180 creatures ichinskyvi Doukovskyv
181 isolated pitkyak Lamyzihets
182 attack bashcaha Sokopey
183 researcher gubkinogors Ofitsuancu
184 travels ezensk Honyevol
185 new oeto Arus
186 concentrate vagraduzhumi Ozhiyevskyv
187 operational uynakoskjar Usumanzhelya
188 red sno Groz Vuk
189 neural ereseng Sperv
190 morning ektrov Ovostavl
191 dangerous yebkovsegem Doukoyan
192 good muchad Ograt
193 orb ray Kur
194 technological ognitskazhevo Lukulebakaian Hudogorsmanov
195 darkness utsialn Helebska
196 danger fitsii Sudzhi
197 waters kitiman Tensk
198 temporal agnitsan Sukholm
199 hmm nik Naym
200 level otdy Zimeino
201 praise arenshec Sulino Payevsk
202 child burgun Kargo
203 findings duiutskaz Vaskyuvium
204 file sosyla Desno
205 blob loyt Pra
206 education inkangbial Hiliskovsk
207 automated oitelebe Orykohaba
208 restoration zuhmandarent Uppugnatus
209 your petu Yevs
210 wants apsh Erzha
211 constantly uapseusius Hetskaiushn
212 relearn tepushc Ukovsky
213 transmission bonyevkazhel Zainskogoli
214 network tulakoid Sotsky
215 catalogue rukhaluymsky Arganiae
216 recharge desnoura Grozove
217 decrease gachyovod Agodarnau
218 invisible ebskaluett Enburgunca Madygeys
219 adores gobekin Velsk
220 great nodalny Pikako
221 not zay Gac
222 pay irz Illo
223 ignore dushc Roloysva
224 blockage irbiturtr Doygeysk
225 over oevus Voale
226 better rubinsky Sayan
227 failed eurazl Hinach
228 move lin Ogn
229 traveller's devoikhoviche Rafimorsky
230 goods sosnoz Yatk
231 face ikov Tuap
232 endangered ryunguryu Rovodylurus
233 awaits oukoyan Druzha
234 sales virsk Dulia
235 restore zadracepa Daskovopa
236 information telnoslanud Arzamarime
237 accidentally onstanasheb Ulebskabent
238 federation hilovkarapu Eapoluninsk
239 hazard esial Bolesno
240 save shichi Eva
241 elements nazyvaye Vaypolocha
242 provide ershovos Mezens
243 operator edynald Oiteleno
244 strata bogonet Lepiki
245 join per Baychi
246 remains kitotor Payevsk
247 drone kesper Epet
248 only yalsko Ipets
249 capacitor veycuhnyev Kakhnyev
250 sends lileys Demenn
251 discover barnyev Dogotovis
252 vy'keen udyono Ubimusc
253 feel iys Dika
254 interrupted iiskiyevsky Yakhnyevskyv
255 fault afimo Pozzhe
256 seek yirnye Ach
257 me vok Bez
258 recall roleemo Kireng
259 reciprocal lashimkin Yeniiakha
260 shell huvisto Shim
261 watching demyonnom Bolgodoz
262 welcome itvaarde Duvezdare
263 process uzlovshi Giseysky
264 peace ulma Leznav
265 overpowered ibiraetsim Ozlovayevsky
266 today enbur Tilast
267 vital inka Bestno
268 words azyvay Zohyego
269 away ums Donays
270 average ervomart Hernusin
271 permissions elnostomuksh Agiruneate
272 planetary bedyniskap Miyzherep
273 request ennits Yebnoyen
274 fun tepr Liyuy
275 in tuni Mal
276 circuit onstara Poveshe
277 next gods Emer
278 give vue Ners
279 work akh Len
280 impure okmin Adzhevs
281 question kandalast Istrezhy
282 recorded olzoves Tetyusin
283 entrance uganrogo Ivilsky
284 goodbye lomayishn Myzyva
285 subvert avliaiut Meglinogo
286 production amyzyvayev Pallasoves
287 teach amcha Peysahm
288 dialect charye Tayndalm
289 combine zunykehady Yokmin
290 commendable uppunicoigno Biyskiyevkar
291 command leyskyv Sestovs
292 overseer hilovskyv Enshacho
293 biological ludatayrnya Delabulak
294 stone yamazyv Teka
295 mined tinsar Alyn
296 maximum iutskyv Lonyarn
297 stabilise poshaets Tuskuyviumh
298 sample gansiys Gezhach
299 violence tushkanau Oyarskyv
300 procedure zelovodst Engileyn
301 starship luymsikyvi Davliaiu Mublemyonk
302 electronic haetsivosh Fokinosloze
303 apply godoi Piki
304 discussions drovskyvinta Nokurinburgu
305 touch ozzhev Hanyevk
306 light niemei Oitel
307 here edin Emnik
308 interface pogaetsiis Apulaanhu
309 excellent aplyoginooz Losukyvinnu
310 order emyo Bezhn
311 through shmanag Evelinsk
312 escaped sozavo Yuzhasav
313 studies gadzhen Oscowini
314 feed oluc Usmot
315 follow namenta Ginski
316 initialize revkaryans Irenskompl
317 appropriate rubcheguta Okminusinst
318 with zenam Nivat
319 overload amyzylsor Olkovyelki
320 protection alumyzyakh Yoborzyakha
321 central torzya Ubkinosl
322 atmospheric yeleznikovk Onnikaltiys Spiyskovods
323 remain erpukh Tesevozy
324 drill ladomo Resman
325 know ady Opr
326 terminal merobayev Enburgu
327 success radnic Vikovr
328 behold lazovay Vitins
329 available ladogdanko Afimovskyv
330 facility yesotska Ibayevoi
331 approaches tetyukhladu Yishnymitt
332 cannot neudint Luziames
333 activity lechatura Zodokistup
334 databank voybrazd Zihelektr
335 certain naulum Rasnyocta
336 toxins olniaet Yekalt
337 log chu Kem
338 fabled evdarg Konayan
339 corrosive chashiesi Rouralskoi
340 journey hidutogq Kulebsk Nochin
341 resist roshary Fiksyo
342 tech neka Zat
343 energy naibol Meshets
344 show rin Ionov
345 commences roshoyarvie Ovdorona
346 await etrop Ovkara
347 highly styugo Eninsk Amillov
348 back-up yinsta Obskarve
349 returning yabysihtagin Odorodubo
350 medial lerov Katyvik
351 extracting myachinskyv Opyevoyeniz
352 contraband rodiashikhv Zelidovoso Kihtyomoles
353 shine nenyk Ritovn
354 uploading imbaykala Orodskoye
355 detected atchinog Loneralsk
356 system odorov Oginin
357 unexpected gulyarnau Meplimskyvin
358 expenditure mirnoznoykha Shovskyvium
359 gift lac Yabiry
360 engaged moletsk Lukhny
361 finish opkin Turlovk
362 think shoya Zinogo
363 delivery pionovk Dazernoeme
364 disengaged zerzhukovok Yegodstavino
365 knowledge vikhopyevo Noymittac
366 entities zuberech Yanoyeru
367 this ibol Adaky
368 non-intelligent sevelskyvinume Ipatigorbashcuhud
369 product beycahnogo Stvere
370 contribution elburgansiysk Vunymitenemola
371 tools eski Eveto
372 progress oglegkorg Seskaiang
373 alone eural Irovo
374 use oul Dopis
375 board bukhoy Antoyre
376 at ilo Ais
377 states lairtzy Bavlovs
378 will push Sht
379 all ukh Ufi
380 unlock trane Kinskit
381 of nii Slo
382 for sut Lono
383 and suma Mun
384 choose eurash Omarits
385 are lak Rus
386 to gep Mech
387 on nok Erd
388 you ludo Tin
389 is ine Dob
390 the olkh Ene
391 our tinan Rio
392 stars ismanz Kubak
393 a ond Tiso
394 i ges Vod
395 do nag Ort
396 see itk Selt
397 longrange isilnyevsk Yalugani
398 multitool uglinooz Zonikovke
399 careful poyatii Voboya
400 desk retyuz Ipk
401 we yuz Yase
402 examine azanski Eltsovka
403 using devoi Anud
404 what bashich Gradn
405 alarmed fitskiti Kihvald
406 happening lagodoij Tigorskyvi
407 open paye Ond
408 their iushki Yekam
409 be yems Apo
410 sorry form Rabaka
411 hopes vomestu Maiu
412 divergent topoluche Kohrustyugo
413 material udutong Eyskyvi
414 where asavi Litusyn
415 everywhere efremiuraza Koyanskyvin
416 aiee leziam Relya
417 around benyev Imaiu
418 found davli Krem
419 plants poshate Mestno
420 irrelevance gotyabinokac Popavliaiuts
421 accommodate egezhgorone Fimoviatniko
422 biggest gutaysh Tomark
423 secret liyarvid Yungri
424 design kuhrom Iushval
425 strange irisogle Exandy
426 different utsiiatni Nugeleizh
427 superior kehtubinsk Mavinskyv
428 highest brasavil Dobryac
429 things zovantu Holun
430 effective panovoku Imorskyvin
431 long syk Kuyby
432 suit amb Nets
433 no bod Rily
434 metal satkar Ginsk
435 mortal luygins Nanyigyi
436 unite anga Etaru
437 rampant barnya Broneten
438 comes ovdor Merovs
439 concerned reapoluchi Reposskazh
440 one lem Avlo
441 perhaps vegorsky Zolovoyen
442 expected hegornoe Negepasho
443 asks liynk Engoy
444 am hum Gad
445 lifeforms rozanykhar Furmavia
446 my mech Rado
447 resonance herkaslibe Insarypov
448 report elgov Ratilleu
449 still sutok Oblast
450 it vir Zor
451 holoterminus sycahnovoyet Rochyolkovom
452 from nil Eseny
453 seeing emansk Abink
454 find otele Douko
455 puzzle timya Relyel
456 there bodarn Ales
457 again myzah Rukhac
458 go gar Yizy
459 interesting vuktyabrasko Lozhenskiy
460 been ubi Aly
461 as yud Kaha
462 may but Yitn
463 encounters rudskoideco Ivnosokopy
464 knows ryanov Ruka
465 already boksitog Lotnoyet
466 eleven voyer Orskogo
467 rebirth usinni Dachin
468 compensation apredovuralsk Zoriastaixu
469 video eyevoz Torod
470 private ezhnyev Shnymi
471 discoveries yermeshkov Udzhevronako
472 promised ubchekans Nizheguta
473 minor akinog Kine
474 three lidovo Havins
475 well ach Vaybi
476 polo amy Lebu
477 brings nodeli Insarye
478 did ubi Vurov
479 such eli Gep
480 disconnected engoyetainicc Tizaniatnin
481 earn nevet Kezh
482 must lore Gatsi
483 present eudint Ubtsovsk
484 two esti Yung
485 connection zovoaltiysk Boyandrov
486 hear mogon Hus
487 organic akanaul Meinoozy Tedoykhalya
488 beautiful ligarimovs Pavlevigor
489 sixteen tebeyt Akayev
490 learned nerogoro Uguryevs
491 shall zeleu Yonos
492 us vob Biyc
493 mind flagi Elgo
494 hard butur Nicheg
495 these zeliz Yokha
496 fine ayg Oyan
497 worlds tunevi Manikho
498 generation amillerob Nodrovskyvi
499 requests hidenpokh Ichestre
500 tiny zer Mashe
501 assemble ilskogae Kuchigrya
502 everything zereslibro Lermonche
503 fan deyk Iks
504 four loyur Tiny
505 aids zadu Zel
506 logs pes Nasi
507 yet yup Oen
508 yes pozz Dono
509 they erc Zuye
510 allocated ryimskyviu Oustyugora
511 continue piyskit Vezhnosl
512 moment torzhig Piyatsk
513 fade dey Ripin
514 assist ziyvayan Hovsk
515 saw olot Osn
516 adjust slyudya Naymitas
517 service gaetsim Vosteiro
518 pleasure rostarsky Zanskom
519 upon usm Zohsk
520 faster yeskoid Niykhac
521 trapped kitimanz Poluchis
522 nonexistence yorskovokhay Zimanovomari
523 warping talnyev Odnyauza
524 broadcasts yesseltsy Hudozhaian
525 value iyevol Enza
526 voice obuzh Bulans
527 charging runinok Udzhantam
528 rewarding renyevoi Napadnovik
529 heartbeat yabrsukyvi Emovista
530 disappointing zavodskommun Vuyksanovskyvin
531 score uver Yevo
532 nanites ugulmato Layanskiti
533 most tana Yupol
534 reduced rilovking Plastr
535 succeeds suselyoshe Ezovets
536 warped ishieme Rakess
537 draw ogu Yosh
538 series sosno Kezhely
539 unit abe Ekums
540 enjoy ekana Aktot
541 drama tobo Semyon
542 missions ebnyevka Uberben
543 while roko Daniiu
544 anything etlogriv Nadeyshma
545 both vukt Ibo
546 nada pev Haylo
547 after vikoel Govoul
548 was tima Vay
549 terminate pudomaysh Ogrivoikh
550 task rac Sinn
551 before iinsky Bansk
552 between ikhardo Umanovok
553 truth atniko Udets
554 flesh ernu Dost
555 breached esyegors Doymkarpi
556 harvest munart Buinskit
557 eyes dika Zale
558 disagree honyevs Erskyvin
559 suspicious soglegkou Mikhanskyvi
560 nature ukovsev Udyonn
561 favourites zarenyovs Tinskyviu
562 had luk Vic
563 let ogn Puga
564 origin bezhna Megisem
565 way dano Ryokh
566 suppose virskovs Idetelny
567 real loymsik Urz
568 transfer medynosba Yeyskog
569 enough mertaur Urovn
570 complete hudenpokro Naulari
571 shed ishcoh Buko
572 try nadz Hakov
573 rewards ruskyuviu Netsivil
574 test brs Mar
575 offer bess Adimir
576 an dud Zob
577 why ubk Nutey
578 very rolo Pay
579 attention azinokamsk Imechorant
580 persist atovor Virsan
581 sounds minyan Ainstal
582 forgiven tadtrund Asliberal
583 job form Kotic
584 have lamy Yeys
585 prepared ukoyenaea Ripinstav
586 gate ugin Ichi
587 aid zeme Enk
588 ago mec Eto
589 end avas Aoz
590 universe raktorab Etlogor
591 performing yuzhasavia Churilovke
592 possessions abrsekyvina Yubnoyerdis
593 imagined lezname Kanashets
594 controlled oguchaylov Slovantur
595 portable odvigatc Uketyvkaz
596 keep etl Zov
597 beaten uitel Ralner
598 six atel Evro
599 learn achi Zepetu
600 logged palla Yanovo
601 instantiation sudzhachitama Hedurechevskyv
602 would mirn Ayma
603 build sumanz Evsky
604 distortion arachyegon Pogotovia
605 passes vomins Odpork
606 exocraft nuguryuka Yosayando
607 breach runinsk Luykin
608 its yon Lug
609 doors fitsia Deymkar
610 each ray Menog
611 reestablish ryinstevovo Enyevkarosl
612 look yuch Vet
613 abyss limyzya Sensh
614 congratulations ozmodemerouglego Ibolskovorkhot
615 now luy Maiu
616 waited teryu Lilets
617 beckons gepast Etomut
618 nothing nerogobe Zedokis
619 looks tiam Siysk
620 skilled bezhdo Deneudin
621 costume kuyshest Omariins
622 message rabanov Izilyu
623 water aktotm Udutog
624 about eksin Enpoka
625 largest modeys Anninok
626 visible akzhets Avolovsk
627 wrong furm Sasovo
628 life liny Keme
629 package viremovse Zimeinog
630 statistics vorogorodia Tanovnosti
631 enter esoz Hodin
632 so hola Yul
633 absence ommuna Illovoy
634 like hilku Nudal
635 but ads Zehn
636 anomaly nuyovsh Odinov
637 pleased tionoslu Plimors
638 warn siselb Mos
639 smiles itkyart Nesaraya
640 other evdar Ranoet
641 victory kazhdogo Nikakhal
642 percent zensky Lokhoy
643 start algo Dubn
644 settle novsky Sushc
645 has nur Laga
646 stronger hatsialn Verkess
647 closer hutins Nosohchev
648 earning rimontoro Inacheny
649 carapace dazhevsko Islozhosk
650 warp tovsh Zabak
651 twelve dudino Yukalyn
652 check rozo Sivirs
653 immediate edinkarsal Aplyovos
654 world evdar Aplyov
655 transmitter unguruslaval Puysohkinoozyb
656 once mak Usla
657 more arii Mich
658 five nisiy Hen
659 projection amskyvium Brazmanga
660 analysis uboevushc Imenskyvi
661 even onno Teyn
662 business kusanqab Zekimovis
663 them loyar Rorek
664 best odvi Kotr
665 notes mari Amura
666 communion gulkevino Ryluskyvin
667 how ezn Gop
668 ten mest Zaba
669 containment iyevskyvin Udozhelyeaex
670 purify ransi Voikhay
671 take zilyu Ogni
672 much anko Mash
673 answer havinsk Alugan
674 unpleasing unechovori Ozeleuzen
675 say zuyor Otla
676 ancestor emanzheg Eynoyet
677 sees gar Rishc
678 pattern ogutay Yushnyev
679 emergency eapoluch Alinichel

226
lang.go
View File

@@ -2,126 +2,140 @@ package nmslib
import (
"encoding/csv"
"fmt"
"io/ioutil"
"os"
"strings"
)
/*
Korvaxlang - set up structure of a word iteration
/*Translate Game languages and english
Translate.Lang sets source language for translations
options are:
korvax
gek
vykeen
atlas
english
*/
type Korvaxlang struct {
English string
KorvaxWord string
KWCaps string
KWALLCAPS string
type Translate struct {
Lang string
}
/*
Korvax2Eng - convert known korvax words into english
/*Translate source language to english
Translate any NMS language (ie. Korvax) to english
*/
func Korvax2Eng(kvwrd string) string {
data, err := Asset("tmp.nmslib/korvax-lang.csv")
func (t Translate) ToEng(word string) (translation string) {
//return translate2english(word, langFile(t.Lang))
return Translator(word, t.Lang, "english")
}
/*Translate source language to Korvax
Translate any NMS language or english (ie. Gek) to Korvax
*/
func (t Translate) ToKorvax(word string) (translation string) {
return Translator(word, t.Lang, "korvax")
}
/*Translate source language to Vy'Keen
Translate any NMS language or english (ie. Atlas) to Vy'Keen
*/
func (t Translate) ToVykeen(word string) (translation string) {
return Translator(word, t.Lang, "vykeen")
}
/*Translate source language to Gek
Translate any NMS language or english (ie. Vy'Keen) to Gek
*/
func (t Translate) ToGek(word string) (translation string) {
return Translator(word, t.Lang, "Gek")
}
/*Translate source language to Atlas
Translate any NMS language or english (ie. Korvax) to Atlas
*/
func (t Translate) ToAtlas(word string) (translation string) {
return Translator(word, t.Lang, "atlas")
}
// read language files
func langFile(lang string) [][]string {
filepath := NmsTemp + "/assets/lang/" + lang + "-lang.csv"
csvFile, err := os.Open(filepath)
if err != nil {
panic(err)
}
_, err2 := os.Stat("tmp.nmslib/")
if os.IsNotExist(err2) {
errDir := os.MkdirAll("tmp.nmslib/", 0755)
if errDir != nil {
panic(errDir)
}
}
err = ioutil.WriteFile("tmp.nmslib/korvax-lang.csv", []byte(data), 0644)
csvFile, err := os.Open("tmp.nmslib/korvax-lang.csv")
if err != nil {
fmt.Println(err)
}
defer csvFile.Close()
CsvLines, err := csv.NewReader(csvFile).ReadAll()
if err != nil {
fmt.Println(err)
}
for _, line := range CsvLines {
klang := Korvaxlang{
English: line[0],
KorvaxWord: line[1],
KWCaps: line[2],
KWALLCAPS: line[3],
}
if kvwrd == klang.KorvaxWord {
errDir := os.RemoveAll("tmp.nmslib")
if errDir != nil {
panic(errDir)
}
return klang.English
} else if kvwrd == klang.KWCaps {
errDir := os.RemoveAll("tmp.nmslib")
if errDir != nil {
panic(errDir)
}
return strings.Title(strings.ToLower(klang.English))
} else if kvwrd == klang.KWALLCAPS {
errDir := os.RemoveAll("tmp.nmslib")
if errDir != nil {
panic(errDir)
}
return strings.ToUpper(klang.English)
}
}
// remove recource folder to keep it clean
errDir := os.RemoveAll("tmp.nmslib")
if errDir != nil {
panic(errDir)
}
return "*\\Kzzzzzzt\\*" // word not found default
}
/*
Eng2Korvax - Convert (some) english words to Korvax
*/
func Eng2Korvax(enwrd string) string {
data, err := Asset("tmp.nmslib/korvax-lang.csv")
lines, err := csv.NewReader(csvFile).ReadAll()
if err != nil {
panic(err)
}
_, err2 := os.Stat("tmp.nmslib/")
if os.IsNotExist(err2) {
errDir := os.MkdirAll("tmp.nmslib/", 0755)
if errDir != nil {
panic(errDir)
}
}
err = ioutil.WriteFile("tmp.nmslib/korvax-lang.csv", []byte(data), 0644)
csvFile, err := os.Open("tmp.nmslib/korvax-lang.csv")
if err != nil {
fmt.Println(err)
}
defer csvFile.Close()
CsvLines, err := csv.NewReader(csvFile).ReadAll()
if err != nil {
fmt.Println(err)
}
for _, line := range CsvLines {
klang := Korvaxlang{
English: line[0],
KorvaxWord: line[1],
KWCaps: line[2],
KWALLCAPS: line[3],
}
if enwrd == klang.English {
errDir := os.RemoveAll("tmp.nmslib")
if errDir != nil {
panic(errDir)
}
return klang.KorvaxWord
}
}
// remove recource folder to keep it clean
errDir := os.RemoveAll("tmp.nmslib")
if errDir != nil {
panic(errDir)
}
return "*\\Kzzzzzzt\\*" // word not found default
return lines
}
/*Translate any in game language to another including english (ie. Korvax to Gek)
Translating from english to a game language will alway default to all lower case for now
*/
func Translator(word string, source string, target string) string {
var sourcekey [4]string
var targetkey [4]string
var dmy string
var rt string
rt = "*\\Kzzzzzzt\\*"
if source == "english" {
dmy = target
} else {
dmy = source
}
for _, line := range langFile(dmy) {
for _, trans := range line {
if trans == word {
sourcekey[0] = line[0]
sourcekey[1] = line[1]
sourcekey[2] = line[2]
sourcekey[3] = line[3]
}
}
if target != "english" {
for _, line := range langFile(target) {
if strings.EqualFold(line[0], sourcekey[0]) {
targetkey[0] = line[0]
targetkey[1] = line[1]
targetkey[2] = line[2]
targetkey[3] = line[3]
}
}
if strings.EqualFold(word, sourcekey[0]) {
if targetkey[0] != "" {
rt = targetkey[0]
}
} else if strings.EqualFold(word, sourcekey[1]) {
if targetkey[1] != "" {
rt = targetkey[1]
}
} else if strings.EqualFold(word, sourcekey[2]) {
if targetkey[2] != "" {
rt = targetkey[2]
}
} else if strings.EqualFold(word, sourcekey[3]) {
if targetkey[3] != "" {
rt = targetkey[3]
}
}
if source == "english" {
rt = targetkey[1]
}
} else {
if strings.EqualFold(word, sourcekey[0]) {
rt = sourcekey[0]
} else if strings.EqualFold(word, sourcekey[1]) {
rt = strings.ToLower(sourcekey[0])
} else if strings.EqualFold(word, sourcekey[2]) {
rt = strings.Title(sourcekey[0])
} else if strings.EqualFold(word, sourcekey[3]) {
rt = strings.ToUpper(sourcekey[0])
}
}
}
return rt
}

30
nmslib-convert_test.go Normal file
View File

@@ -0,0 +1,30 @@
package nmslib
import (
"fmt"
"testing"
)
func TestPortal2Galactic(t *testing.T) {
want, err := P2gc("21F2F8EDB94D")
if err != nil {
fmt.Println(err)
}
if want != "014C:0077:06DA:01F2" {
t.Errorf("Testing P2gc(\"21F2F8EDB94D\"): got %q, want: 014C:0077:06DA:01F2.\n", want)
} else {
fmt.Printf("Testing P2gc(\"21F2F8EDB94D\"): got: %q, want: 014C:0077:06DA:01F2.\n", want)
}
}
func TestGalactic2portal(t *testing.T) {
want, err := Gc2p("014C:0077:06DA:01F2", 2)
if err != nil {
fmt.Println(err)
}
if want != "21F2F8EDB94D" {
t.Errorf("Testing Gc2p(\"014C:0077:06DA:01F2\"): got %q, want: 21F2F8EDB94D.\n", want)
} else {
fmt.Printf("Testing Gc2p(\"014C:0077:06DA:01F2\"): got: %q, want: 21F2F8EDB94D.\n", want)
}
}

View File

@@ -0,0 +1,21 @@
package nmslib
import (
"fmt"
"testing"
)
func TestCreateBanner(t *testing.T) {
fmt.Printf("\nTesting CreateBanner: ")
rp := "21F2F8EDB94D"
//rp := RndPortal()
fileout := "./test"
err := CreateBanner(rp, fileout, 0)
if err != nil {
fmt.Println(err)
}
fmt.Printf("Portal address `%s` rendered as `%s`\n", rp, fileout)
}

21
nmslib-rpcg_test.go Normal file
View File

@@ -0,0 +1,21 @@
package nmslib
import (
"fmt"
"testing"
)
func TestRndPortal(t *testing.T) {
fmt.Printf("\nRandom Portal Code: ")
fmt.Println(RndPortal())
}
func TestRndAtlas(t *testing.T) {
fmt.Printf("semi-Random Atlas Code: ")
fmt.Println(RndAtlas())
}
func TestRndBH(t *testing.T) {
fmt.Printf("semi-Random black hole Code: ")
fmt.Println(RndBH())
}

36
nmslib-translate_test.go Normal file
View File

@@ -0,0 +1,36 @@
package nmslib
import (
"fmt"
"testing"
)
func TestTranslate(t *testing.T) {
kor2eng := Translate{Lang: "korvax"}
if kor2eng.ToEng("Alinichel") != "Emergency" {
t.Errorf("\nTesting Translate{Lang: \"korvax\"}.ToEng(\"Alinichel\"): got %q, want: %q.\n", kor2eng.ToEng("Alinichel"), "Emergency")
} else {
fmt.Printf("\nTesting Translate{Lang: \"korvax\"}.ToEng(\"Alinichel\"): got %q, want: %q.\n", kor2eng.ToEng("Alinichel"), "Emergency")
}
vyk2eng := Translate{"vykeen"}
if vyk2eng.ToEng("Aqo") != "Foes" {
t.Errorf("Testing Translate{Lang: \"vykeen\"}.ToEng(\"Aqo\"): got %q, want: %q.\n", vyk2eng.ToEng("Aqo"), "Foes")
} else {
fmt.Printf("Testing Translate{Lang: \"vykeen\"}.ToEng(\"Aqo\"): got %q, want: %q.\n", vyk2eng.ToEng("Aqo"), "Foes")
}
engWord := Translate{"english"}
if engWord.ToKorvax("learn") != "achi" {
t.Errorf("Testing Translate{Lang: \"english\"}.ToKor(\"learn\"): got %q, want: %q.\n", engWord.ToKorvax("learn"), "achi")
} else {
fmt.Printf("Testing Translate{Lang: \"english\"}.ToKor(\"learn\"): got %q, want: %q.\n", engWord.ToKorvax("learn"), "achi")
}
fmt.Println("Blind Test: " + Translate{"gek"}.ToAtlas("baturk")) // word does not exist in Atlas lang
fmt.Println("Blind Test: " + Translate{"gek"}.ToAtlas("Tor")) // word exists
fmt.Println("Running CleanUp()")
CleanUp()
fmt.Printf("\nTesting complete.\nStatus: ")
}

View File

@@ -1,78 +0,0 @@
package nmslib
import (
"fmt"
"testing"
)
func TestPortal2Galactic(t *testing.T) {
want, err := P2gc("006afa556c30")
if err != nil {
panic(err)
}
if want != "042F:0079:0D55:006A" {
t.Errorf("Testing P2gc(\"006afa556c30\"): got %q, want: %q.\n", want, "042F:0079:0D55:006A")
} else {
fmt.Printf("Testing P2gc(\"006afa556c30\"): got: %q, want: %q.\n", want, "042F:0079:0D55:006A")
}
}
func TestGalactic2portal(t *testing.T) {
want, err := Gc2p("042F:0079:0D55:006A")
if err != nil {
panic(err)
}
if want != "106AFA556C30" {
t.Errorf("Testing Gc2p(\"042F:0079:0D55:006A\"): got %q, want: %q.\n", want, "106AFA556C30")
} else {
fmt.Printf("Testing Gc2p(\"042F:0079:0D55:006A\"): got: %q, want: %q.\n", want, "106AFA556C30")
}
want, err = Gc2p("044B:0081:0D68:0096")
if err != nil {
panic(err)
}
if want != "109602569C4C" {
t.Errorf("Testing Gc2p(\"044B:0081:0D68:0096\"): got %q, want: %q.\n", want, "109602569C4C")
} else {
fmt.Printf("Testing Gc2p(\"044B:0081:0D68:0096\"): got: %q, want: %q.\n", want, "109602569C4C")
}
}
func TestCreateBanner(t *testing.T) {
fmt.Printf("Testing CreateBanner: ")
CreateBanner("006afa556c30", "/tmp/Test.png", 0)
}
func TestKorvax2Eng(t *testing.T) {
want := Korvax2Eng("eapoluch")
if want != "emergency" {
t.Errorf("Testing Korvax2eng(\"eapoluch\"): got %q, want: %q.\n", want, "emergency")
} else {
fmt.Printf("Testing Korvax2eng(\"eapoluch\"): got %q, want: %q.\n", want, "emergency")
}
want = Korvax2Eng("notaword")
if want != "*\\Kzzzzzzt\\*" {
t.Errorf("Testing Korvax2eng(\"notaword\"): got %q, want: %q.\n", want, "*\\Kzzzzzzt\\*")
} else {
fmt.Printf("Testing Korvax2eng(\"notaword\"): got %q, want: %q.\n", want, "*\\Kzzzzzzt\\*")
}
}
func TestEng2Korvax(t *testing.T) {
want := Eng2Korvax("emergency")
if want != "eapoluch" {
t.Errorf("Testing Eng2Korvax(\"emergency\"): got %q, want: %q.\n", want, "eapoluch")
} else {
fmt.Printf("Testing Eng2Korvax(\"emergency\"): got %q, want: %q.\n", want, "eapoluch")
}
want = Eng2Korvax("notaword")
if want != "*\\Kzzzzzzt\\*" {
t.Errorf("Testing Eng2Korvax(\"notaword\"): got %q, want: %q.\n", want, "*\\Kzzzzzzt\\*")
} else {
fmt.Printf("Testing Eng2Korvax(\"notaword\"): got %q, want: %q.\n", want, "*\\Kzzzzzzt\\*")
}
fmt.Printf("Testing: ")
}

BIN
ranportal_scaled.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

File diff suppressed because one or more lines are too long

92
rpcg.go Normal file
View File

@@ -0,0 +1,92 @@
/*
[P][SSS][YY][ZZZ][XXX] (P = Planet Index / S = Star System Index / Y = Height / Z = Width / X = Length)
`Solar System Index
A Solar System Index is assigned to each star system in a region. It always begins at SolarSystemIndex=001
and counts up by one for every star system. The number of star systems in a region is variable so the
maximum value of the Solar System Index is also variable, though the two correspond directly. To date there
is no discovered value that is higher than SolarSystemIndex=243 (Mamundi-Kate in the Baadossm Anomaly of
Euclid galaxy), meaning that 579 is the maximum number of star systems yet discovered in a region. Based
on the evidence that every region has a SolarSystemIndex=079 and SolarSystemIndex=07A (with the former
always having a Black Hole and the latter always having an Atlas Station), it is known that every region has
at least 122 star systems. SolarSystemIndex=000 always leads to the region's first system, just like
PlanetIndex=0 always leads to the first portal of a system due to the error proximity mechanic.`
Source https://nomanssky.fandom.com/wiki/Portal_address#Solar_System_Index
*/
package nmslib
import (
"fmt"
"math/rand"
"time"
)
/*
RndPortal - Random Portalcode generator
Requires no input required and returns a string
*/
func RndPortal() (final string) {
rand.Seed(time.Now().UnixNano())
min := 0x1
ymax := 0xFF
xzmax := 0xFFF
ssimax := 0x242 // set this low to lower chances of an invalid address
x := rand.Intn(xzmax-min+1) + min
z := rand.Intn(xzmax-min+1) + min
y := rand.Intn(ymax-min+1) + min
ssi := rand.Intn(ssimax-min+1) + min
final = fmt.Sprintf("%00X%03X%02X%03X%03X", 1, ssi, y, z, x)
return
}
/*RndAtlas genorates a semi-random atlas code
Requires no input and returns a string
This is not a true random atlas genorator. Insted this will create a Planet id of 1, Solar System Index of 0x07A and random Y, Z, X
SSI 0x07A always has an Atlas Interface.
REF: https://nomanssky.fandom.com/wiki/Portal_address#Solar_System_Index https://nomanssky.fandom.com/wiki/Star_system#Classification
*/
func RndAtlas() (final string) {
rand.Seed(time.Now().UnixNano())
min := 0x1
ymax := 0xFF
xzmax := 0xFFF
x := rand.Intn(xzmax-min+1) + min
z := rand.Intn(xzmax-min+1) + min
y := rand.Intn(ymax-min+1) + min
final = fmt.Sprintf("%00X%03X%02X%03X%03X", 1, 0x07A, y, z, x)
return
}
/*RndBH genorates a semi-random atlas code
Requires no input required and returns a string
This is not a true random atlas genorator. Insted this will create a Planet id of 1, Solar System Index of 0x079 and random Y, Z, X
SSI 0x079 always has a black hole.
REF: https://nomanssky.fandom.com/wiki/Portal_address#Solar_System_Index https://nomanssky.fandom.com/wiki/Star_system#Classification
*/
func RndBH() (final string) {
rand.Seed(time.Now().UnixNano())
min := 0x1
ymax := 0xFF
xzmax := 0xFFF
x := rand.Intn(xzmax-min+1) + min
z := rand.Intn(xzmax-min+1) + min
y := rand.Intn(ymax-min+1) + min
final = fmt.Sprintf("%00X%03X%02X%03X%03X", 1, 0x079, y, z, x)
return
}